Hola amigos en esta publicación veremos los pasos básicos para poder crea un módulo web en Odoo Erp v8, ojo una cosa es crear MODULO WEB y otra es crear un WEBSITE con Odoo, este último lo veremos en otra publicación.

Es importante saber como funciona un modulo web en Odoo, y que al entenderlo podremos modificar el TPV de Odoo V8.

Para este tutorial estamos tomando como referencia el tutorial publicado en la documentación oficial de odoo.

Asumimos que tiene instalado Odoo v8 en Ubuntu 14.04.

  1. Nos ubicamos en la carpeta addons de nuestra instalación de Odoo.
    Creamos un carpeta llamada tienda_mascota e ingresamos dentro de ella.

    mkdir tienda_mascota
    cd tienda_mascota
  2. Para que Odoo pueda reconocer al directorio tienda_mascota como modulo debemos de crear archivo __init__.py, __openerp__.py y 
    touch __init__.py
    touch __openerp__.py

    El archivo __init__.py vacio por el momento, permite que el directorio tienda_mascota sea reconocido por Odoo como un módulo.
    Además creamos otro archivo que nos permitirá construir parte de la vista de nuestro modulo.

    touch tienda_mascota.xml

    Dentro de la carpeta tienda_modulo creamos una carpeta static, esta carpeta es importante ya que dentro de ella se crearán los archivos que permitirán hacer de este modulo un modulo web de Odoo

    mkdir static
    cd static
    mkdir src
    cd src
    mkdir css js xml
    touch css/tienda_mascota.css 
    touch js/tienda_mascota.js
    touch xml/tienda_mascota.xml
    

    Finalmente tendríamos la siguiente estructura de nuestro módulo:
    tienda_mascota

    tienda_mascota/static/css/tienda_mascota.css
    Aquí colocaremos todos los estilos que deseamos aplicar a nuestro modulo
    tienda_mascota/static/xml/tienda_mascota.xml
    Este archivo contiene la plantilla de nuestro módulo hecho mediante qweb.
    tienda_mascota/static/js/tienda_mascota.js
    La parte más importante, contiene la lógica de la aplicación en javascript.

  3. Construimos la lógica del modulo web de Odoo, editamos el archivo tienda_mascota/static/js/tienda_mascota.js y agregamos lo siguiente:
    //Definimos el modulo web de Odoo como una funcion de openerp
    //El nombre de la funcion debe ser el mismo que la del modulo(tienda_mascota)
    openerp.tienda_mascota = function(instance, local) {
        //Traduccion
        var _t = instance.web._t,
           _lt = instance.web._lt;
        //Qweb
        var QWeb = instance.web.qweb;
    
        //Construimos un widget basico de nombre PaginaPrincipal
        local.PaginaPrincipal = instance.Widget.extend({
            start: function() {
                //Agregando el template(HomePageTemplate) definida en tienda_mascota/static/src/xml/tienda_mascota.xml a la PaginaPrincipal
                //QWeb.render() busca la plantilla a mostrar
                this.$el.append(QWeb.render("HomePageTemplate")); 
                },            
        });
    
        //Registra nuestro widget básico como una acción cliente que sera llamado desde la accion creado en  tienda_mascota/tienda_mascota.xml
        instance.web.client_actions.add('tienda_mascota.paginainicio', 'instance.tienda_mascota.PaginaPrincipal');
    }

    Linea 3 : Los módulos web en Odoo se declaran como funciones establecidas en la variable global de openerp. El nombre de la función debe ser el mismo que el modulo (en este caso tienda_mascota) para que pueda automáticamente ser inicializado.
    Esta función es leída automáticamente cuando el modulo es invocado, la función toma 2 parametros:

    * El primer parámetro es la instancia actual del cliente web de Odoo, da acceso a diversas funcionalidades definidas por Odoo (traducciones, servicios de red), así como los objetos definidos por el núcleo o por otros módulos.
    * El segundo parámetro es su propio espacio de nombres local creada automáticamente por el cliente web. Objetos y variables que deben ser accesibles desde fuera de su módulo (ya sea porque el cliente web de Odoo tiene que llamar a ellos o porque otros pueden querer personalizarlos) debe establecerse dentro de ese espacio de nombres.

    Linea 9: Al igual que otras interfaces de usuario orientadas a objetos (por ejemplo, Qt, cacao o GTK), Odoo Web fabrica componentes específicos responsables de las secciones de una página. En Odoo web, la base de tales componentes es la clase Widget(), un componente especializado en el manejo de una sección de la página y mostrar la información para el usuario.
    Linea 10: Los Widget tienen una serie de metodos y carateristicas: Configurar  widget, Dar formato a los datos del widget y mostrar el widget.
    El widget de PaginaPrincipal ya tiene un método start(),  Ese método es parte todo widget y es llamado automáticamente una vez que se inserta el widget en la página. Podemos utilizarlo para mostrar algunos contenidos.
    Linea 12:  Todos los widgets tienen un $el que representa la sección de la página (como un objeto en jQuery). El contenido del Widget debe insertarse allí. Por defecto, el $el es un elemento <div> vacío.

  4. Construyendo la plantilla de nuestro modulo web, para eso vamos a usar Qweb que es el motor de plantillas para Odoo Web.
    Vamos a construir la plantilla Qweb en tienda_mascota/static/src/xml/tienda_mascota.xml.

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- Es necesario definir este archivo-->
    <templates xml:space="preserve">
    	<!-- t-name: definimos el nombre del template(HomePageTemplate) que sera llamado en tienda_mascota/static/js/tienda_mascota.js-->
    	<t t-name="HomePageTemplate"> 
            <div style="background-color: red;">Usando Qweb - primer div </div>
            <div>
        	     <h3>Ingrese su nombre: </h3><input type="text" t-att-value="name"/>
    	</div>
        </t>
    </templates>

    Ahora vamos a ver la sintaxis de las propias plantillas.
    Una plantilla QWEB se compone de XML normal mezclado con directivas QWEB. Una directiva QWEB se declara con atributos XML comenzando con t-
    La directiva más básica es t-name, utilizado para declarar nuevas plantillas en el archivo de plantilla:

  5. Vamos a construir en menú que nos permitirá interactuar con nuestro módulo.
    Editamos el archivo tienda_mascota/tienda_mascota.xml y agreamos lo siguiente:

    <?xml version="1.0" encoding="UTF-8"?>
    <openerp>
        <data>
            <!-- importando los .css y js del mudulo web -->
            <template id="assets_backend" name="tienda_mascota_assets" inherit_id="web.assets_backend">
                <xpath expr="." position="inside">
                    <link rel="stylesheet" href="/tienda_mascota/static/src/css/tienda_mascota.css"/>
                    <script type="text/javascript" src="/tienda_mascota/static/src/js/tienda_mascota.js"/>
                </xpath>
            </template>
    
            <!-- Creando lo menus -->
            <menuitem id="main_root_tienda_menu" name="Tienda" />
    
            <menuitem id="tienda_menu" name="Tienda de Mascotas" parent="main_root_tienda_menu" />
    
             <!-- Creando la accion que sera llamado en /tienda_mascota/static/src/js/tienda_mascota.js mediante tag -->
            <record id="action_home_page" model="ir.actions.client">
                <field name="name">Tienda de Mascota</field>
                <field name="tag">tienda_mascota.paginainicio</field>
            </record>
    
            <menuitem id="home_page_tienda_menu" name="Mascotas" parent="tienda_menu" action="action_home_page"/>
        </data>
    </openerp>
    
    
  6. Editamos el archivo __openerp__.py y agregamos el diccionario de datos con información de nuestro módulo.
    {
        'name' : 'Modulo Tienda de Mascotas',
        'version': '1.0',
        'summary': 'Venta de mascotas',
        'category': 'Tools',
        'description':
            """
    Odoo Modulo Web - Tienda de Mascotas
    ====================================
    
    Bienvenido aqui encontrara variedad para elegir su mascota
            """,
        'data': [
            "tienda_mascota.xml",
        ],
        'depends' : ['sale_stock'],
        'qweb': ['static/src/xml/*.xml'],
        'application': True,
    }

    Explicando algunos puntos de este archivo:
    data: Importamos aqui los archivos xml, estos archivos permiten construir parte de la vista del modulo
    depends : permite agregar los nombres de los módulos de las cuales depende nuestro modulo actual.
    qweb: Importamos todos los archivos xml, estos archivos xml contienen la vista del módulo realizada usando qweb

  7. Finalmente luego de instalar el moduloinstall_tiendaEs todo amigos, espero que le haya sido de utilidad, gracias.
Categorías: Odoo ERP v8

Javier Salazar Carlos

Soy Ingeniero de Ingeniería de Sistemas, egresado de la Universidad Nacional del Callao, especialista en Tecnologías de la Información y de las Comunicaciones (TICs).

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

code