4. Desarrollando con Odoo (2). Introducción a modulos, vistas, modelos .. Añadir dependencias externas de Python a Odoo

Hemos creado un módulo utilizando "odoo scaffold nombre_modulo" dentro de la shell del contenedor con usuario root

#1. Entrar en el contenedor como root y ejecutando un bash de comandos

docker exec -it --user root <nombre_contenedor_creado> bash

#3. Ir al directorio /mnt/extra-addons y ejecutar odoo scaffold ximoapp01

cd /mnt/extra-addons 
odoo scaffold ximoapp01

Hemos hecho un enlace simbólico al directorio con lo que podemos ver los ficheros con Visual Studio
Veamos los ficheros a modificar

1. __manifest__.py 

Quitar el comentario de la línea 

'security/ir.model.access.csv',

Podemos añadir dependencias externas en la etiqueta external dependencies. Ejemplo

"external_dependencies": {"python": ["unidecode", "cryptography"]},

2. models/models.py

Quitamos comentarios y cambiamos el nombre para "task"

class task(models.Model):
    _name = 'ximoapp01.task'
    _description = 'ximoapp01.task'

3. security/ir.model.access.csv

Damos permiso a nuestro modelo task


id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_ximoapp01_task,ximoapp01.task,model_ximoapp01_task,base.group_user,1,1,1,1


4. views/views.xml

1. Definimos la vista (amarillo) e introducimos la palabra task (de nuestro modelo), declarando solo el campo "name"

2. Definimos la acción (verde) que solamente engancha con la vista a tave del nombre del modelo (res_model). En este caso le decimos que tiene preferencia el tree y despues el form a traves de "view_mode"

3. Definimos los menús (azul) en 3 niveles top- categories -actions. Tenemos que expresar la jerarquía de menus con el parent e indicar la acción en el último nivel con action que apunta a la acción definida previamente


<odoo>
  <data>
    <!-- explicit list view definition -->

    <record model="ir.ui.view" id="ximoapp01.task_list">
      <field name="name">ximoapp01 task list</field>
      <field name="model">ximoapp01.task</field>
      <field name="arch" type="xml">
        <tree>
          <field name="name"/>
        </tree>
      </field>
    </record>


    <!-- actions opening views on models -->

    <record model="ir.actions.act_window" id="ximoapp01.action_task_window">
      <field name="name">ximoapp01 task window</field>
      <field name="res_model">ximoapp01.task</field>
      <field name="view_mode">tree,form</field>
    </record>


    <!-- server action to the one above -->
<!--
    <record model="ir.actions.server" id="ximoapp01.action_server">
      <field name="name">ximoapp01 server</field>
      <field name="model_id" ref="model_ximoapp01_ximoapp01"/>
      <field name="state">code</field>
      <field name="code">
        action = {
          "type": "ir.actions.act_window",
          "view_mode": "tree,form",
          "res_model": model._name,
        }
      </field>
    </record>
-->

    <!-- Top menu item -->

    <menuitem name="ximoapp01" id="ximoapp01.menu_root"/>

    <!-- menu categories -->

    <menuitem name="Management" id="ximoapp01.menu_1" parent="ximoapp01.menu_root"/>
<!--
    <menuitem name="Menu 2" id="ximoapp01.menu_2" parent="ximoapp01.menu_root"/>
-->
    <!-- actions -->

    <menuitem name="Tasks" id="ximoapp01.menu_1_task_list" parent="ximoapp01.menu_1"
              action="ximoapp01.action_task_window"/>
<!--
    <menuitem name="Server to list" id="ximoapp01" parent="ximoapp01.menu_2"
              action="ximoapp01.action_server"/>
-->
  </data>
</odoo>


Le damos a instalar la aplicación. Para ello eliminamos el filtro de aplición y ponemos ximo y sale



Cada vez que hay un cambio de vista hay que Actualizar la aplicación

Y cada vez que hay cambio de modelo hay que reiniciar el contenedor. Para ello vamos a VS y le damos al icono de docker a la izquierda a mitad de altura 







Comentarios

Entradas populares de este blog

8. Desarrollando con Odoo (6). Herencia de clase en modelos. Herencia de vistas. Operaciones numeradas en Odoo ??

26. Desarrollando con Odoo (21). IMPORTANTE: Entorno de desarrollo. Recapitulaciones del capítulo 8 (Development, Test and Debug).