Curso odoo (Módulos)

Instalacón:

instala odoo con docker, configurando correctamente los volúmenes, como se indica en la primera parte del cursos.

Crea un scaffold de un nuevo módulo llamado viajes que contenga:

conéctate al contenedor de odooo

1$ docker exec -it odoo /bin/bash

Genera el scaffold (esqueleto) del módulo viajes

1$ cd mnt/extra-addons/
2$ odoo scaffold viajes
3$ exit

Al tener los modulos correctamente configurados puedes abrir la carpeta extra-addons en tu máquina local usando vscode.

1$ cd extra-addon/viajes
2$ code .

Crea le fichero de manifiesto

Creamos el archivo de manifiesto (manifest.py), donde definimos la información del módulo, sus dependencias y archivos de datos.

fichero __manifest__.py

1# -*- coding: utf-8 -*-
2{
3    'name': "viajes2",
4    'summary': "Control y gestion de viajes realizados en vehiculos",
5    'description': """
6        Este modulo permite el control y la gestión de los viajes que realizan los pasajeros en vehiculos
7    """,
8
9    'author': "Angel Gonzalez",
10    'website': "github",
11
12    # Categories can be used to filter modules in modules listing
13    # Check https://github.com/odoo/odoo/blob/12.0/odoo/addons/base/data/ir_module_category_data.xml
14    # for the full list
15    'category': 'viajes',
16    'version': '1.0',
17
18    # any module necessary for this one to work correctly
19    'depends': ['base'],
20
21    # always loaded
22    'data': [
23        #'security/ir.model.access.csv',
24
25    ],
26    # only loaded in demonstration mode
27    'demo': [
28        'demo/demo.xml',
29    ],
30    'installable': True,
31    'application': True
32}

Modelo

Creación del modelo Vehiculo

En este paso, hemos definido un nuevo modelo en Odoo llamado Vehiculo para nuestro módulo de "viajes". Este modelo almacenará información sobre los vehículos que se utilizarán en los viajes.

📌 Características del modelo Vehiculo:

  • Se almacena en la base de datos con el identificador viajes.vehiculo.
  • Tiene una descripción para identificar su propósito.
  • Contiene los siguientes campos:
    • modelo: Tipo Char, obligatorio, indica el modelo del vehículo.
    • marca: Tipo Char, opcional, especifica la marca del vehículo.
    • descripcion: Tipo Text, opcional, permite agregar información adicional sobre el vehículo.
Tabla de vehiculos

Con este modelo, podemos comenzar a gestionar los vehículos que se utilizarán en los viajes. 🚗💨

Fichero models/VehiculoModel.py

1from odoo import models, fields, api
2
3class Vehiculo(models.Model):
4    _name = 'viajes.vehiculo'
5    _description = "viajes Vehiculo"
6    modelo = fields.Char(string="Modelo", required=True)
7    marca = fields.Char(string="Marca")
8    descripcion = fields.Text()

Organización del módulo viajes

En este paso, hemos creado un archivo de inicialización (__init__.py) que permite a Odoo reconocer los modelos del módulo.

📌 ¿Qué hicimos?

  • Importamos el modelo VehiculoModel, asegurándonos de que Odoo lo cargue correctamente al ejecutar el módulo.

Este archivo es fundamental porque le dice a Odoo qué archivos debe considerar al iniciar el módulo. Sin esta importación, Odoo no reconocerá los modelos que definamos.

Fichero models/__init__.py

1# -*- coding: utf-8 -*-
2
3from . import VehiculoModel

Creación de datos iniciales para Vehiculo

En este paso, hemos agregado algunos vehículos de ejemplo en formato XML para que se carguen en la base de datos cuando se instale el módulo.

📌 ¿Qué hicimos?

  • Creamos registros en el modelo viajes.vehiculo.
  • Definimos dos vehículos:
    1. Seat Panda con el modelo "Panda".
    2. Tesla Model S con el modelo "Model S".

Este archivo permite que, al instalar el módulo, se creen automáticamente estos vehículos en la base de datos, facilitando pruebas y demostraciones sin necesidad de ingresarlos manualmente.

Con esto, ya tenemos datos listos para empezar a probar el módulo de viajes en Odoo. 🚗🚀

Fichero demo/demo.xml

1<odoo>
2  <data>
3    <record id="object0" model="viajes.vehiculo">
4      <field name="modelo">Panda</field>
5      <field name="marca">Seat</field>
6    </record>
7    <record id="object2" model="viajes.vehiculo">
8      <field name="modelo">Model S</field>
9      <field name="marca">Tesla</field>
10    </record>
11  </data>
12</odoo>

Acciones y menús

Acciones y menús en el módulo viajes

En este paso, hemos definido la estructura de navegación dentro de Odoo para nuestro módulo viajes, asegurándonos de que los usuarios puedan acceder a la gestión de vehículos desde la interfaz gráfica.

📌 ¿Qué hicimos?

  1. Añadimos permisos de acceso (security/ir.model.access.csv), asegurando que los usuarios tengan los permisos necesarios para trabajar con los vehículos.
  2. Creamos vistas para el modelo Vehiculo (views/vehiculo.xml), permitiendo visualizar y gestionar los vehículos desde la interfaz de Odoo.
  • Con los permisos de acceso, podemos definir qué usuarios pueden ver, editar, crear o eliminar registros.
  • Al agregar vistas XML, permitimos que los usuarios interactúen con los datos del modelo Vehiculo sin necesidad de acceder directamente a la base de datos.

Con este paso, nuestro módulo de viajes ahora es accesible desde la interfaz de Odoo, facilitando la administración de los vehículos. 🚗🚀

1.....
2
3    # any module necessary for this one to work correctly
4    'depends': ['base'],
5
6    # always loaded
7    'data': [
8        'security/ir.model.access.csv',
9        'views/vehiculo.xml',
10        'views/menus.xml',
11    ],
12    # only loaded in demonstration mode
13    'demo': [
14        'demo/demo.xml',
15    ],
16    'installable': True,
17    'application': True
18}

📌 Actualización de la acción de ventana para Vehiculo

Esta acción de ventana (ir.actions.act_window) permite a los usuarios visualizar y gestionar los registros de vehículos en Odoo.

🔍 Cambios y mejoras realizadas:

  1. Se actualizó el modo de vista (view_mode)

    • Ahora incluye list, form, search, lo que permite: ✅ Ver los vehículos en lista (modo tabla).
      Editar y agregar vehículos en el formulario.
      ✅ Usar la barra de búsqueda (search).
  2. Se mantiene el mensaje de ayuda (help)

    • Si no hay vehículos creados, Odoo mostrará un mensaje con la opción de agregar el primero.

Facilita la navegación entre vehículos con la lista y el formulario.
Permite buscar vehículos fácilmente con la barra de búsqueda.
Evita filtros innecesarios al mostrar todos los registros sin restricciones.

Con este cambio, la interfaz del módulo viajes es más flexible y fácil de usar. 🚗🔍

Fichero views/vehiculo.xml

1<odoo>
2    <data>
3        <record model="ir.actions.act_window" id="vehiculo_list_action">
4            <field name="name">Vehiculos</field>
5            <field name="res_model">viajes.vehiculo</field>
6            <field name="view_mode">list,form,search</field>
7<!--        <field name="context" eval="{'search_default_my_vehiculos': 1}" /> -->
8            <field name="help" type="html">
9                <p class="oe_view_nocontent_smiling_face">Crear el primer vehiculo</p>
10            </field>
11        </record>
12    </data>
13</odoo>

📌 Creación del menú de navegación para Vehiculo

En este paso, hemos definido los menús dentro de Odoo para que los usuarios puedan acceder fácilmente a la gestión de vehículos en el módulo viajes.

🔍 ¿Qué hicimos?

  1. Menú principal (main_viajes_menu)

    • Se crea un menú de nivel superior llamado "Viajes" en la barra de navegación de Odoo.
  2. Menú secundario (viajes_menu)

    • Se define un submenú "Viajes", dentro del menú principal.
  3. Menú para vehículos (vehiculo_menu)

    • Se añade un tercer nivel de menú llamado "Vehículos" dentro del submenú "Viajes".
    • Este menú está vinculado a la acción vehiculo_list_action, lo que significa que al hacer clic en "Vehículos", se abrirá la lista de vehículos registrados.

Organiza la navegación dentro del módulo viajes.
Permite acceder fácilmente a los vehículos desde la interfaz gráfica de Odoo.
Facilita la usabilidad al estructurar los menús de forma jerárquica.

Con este paso, ahora podemos gestionar nuestros vehículos directamente desde el menú de Odoo sin necesidad de buscarlos manualmente. 🚗📂

Fichero views/menus.xml

1<odoo>
2    <data>
3        <menuitem id="main_viajes_menu" name="Viajes" />
4
5        <menuitem id="viajes_menu" name="Elementos" parent="main_viajes_menu" />
6
7        <menuitem id="vehiculo_menu" name="Vehiculos"
8            parent="viajes_menu"
9            action="vehiculo_list_action" />
10    </data>
11</odoo>

📌 Configuración de permisos de acceso en Odoo

En este paso, hemos creado un archivo de seguridad (security/ir.model.access.csv) que define los permisos de los usuarios sobre el modelo viajes.vehiculo.

🔍 ¿Qué hace este archivo?

Este archivo CSV define qué acciones pueden realizar los usuarios sobre los registros del modelo viajes.vehiculo.

📌 Explicación de los campos:

  • id → Identificador del permiso (access_viajes_vehiculo).
  • name → Nombre descriptivo del permiso (viajes.vehiculo).
  • model_id:id → Especifica el modelo (model_viajes_vehiculo).
  • group_id:id → Grupo de usuarios (vacío, aplica a todos los usuarios).
  • perm_read1 (permiso para leer registros).
  • perm_write1 (permiso para modificar registros).
  • perm_create1 (permiso para crear registros).
  • perm_unlink1 (permiso para eliminar registros).

Controla el acceso a los datos del modelo Vehiculo.
Permite definir quién puede leer, escribir, crear o eliminar vehículos.
Es clave para la seguridad y gestión de usuarios en Odoo.

Con este paso, cualquier usuario podrá gestionar los vehículos dentro del módulo viajes sin restricciones de grupo. Si necesitas restricciones por roles, puedes asociarlo a un grupo específico en la columna group_id:id. 🔐🚗

Fichero security/ir.model.access.csv

1id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
2access_viajes_vehiculo,viajes.vehiculo,model_viajes_vehiculo,,1,1,1,1

Aquí tienes una descripción clara y sencilla del proceso para reiniciar el módulo en Odoo y activar el modo desarrollador:


🔄 Reiniciar el módulo en Odoo

Cuando realizamos cambios en nuestro módulo, es importante reiniciar Odoo para que los nuevos cambios se apliquen correctamente.

🚀 Pasos para reiniciar Odoo con Docker

1docker restart odoo

Esto reiniciará Odoo y aplicará los cambios realizados en el módulo.


🛠 Activar el modo desarrollador en Odoo

Para depurar errores y visualizar opciones avanzadas, es útil activar el modo desarrollador.

🔍 Cómo activarlo en la interfaz de Odoo

  1. Ir a Ajustes.
  2. Buscar la opción "Activate the developer mode (with tests assets)" (Activar modo desarrollador con casos de prueba) y activarla.

✅ Permite ver modelos y datos internos de Odoo.
✅ Habilita herramientas avanzadas de depuración.
✅ Facilita la instalación y actualización de módulos manualmente.

Actualizar lista de aplicaciones en Odoo

En la pestaña aplicaciones, pulsa sobre Actualizar lista de aplicacones.

Ahora puedes buscar el modulo viajes que has creado. Y puedes proceder a activarlo.

Creación de las Vistas

📌 Creación de la vista de lista para Vehiculo

En este paso, hemos definido una vista tipo lista (ir.ui.view) para mostrar los vehículos registrados en una tabla dentro de Odoo.

🔍 Explicación de los elementos:

  1. <record> con model="ir.ui.view"

    • Define una nueva vista en la base de datos.
  2. <field name="name">vehiculo.list</field>

    • Especifica un identificador interno para la vista (vehiculo.list).
  3. <field name="model">viajes.vehiculo</field>

    • Indica que la vista está asociada al modelo viajes.vehiculo.
  4. <field name="arch" type="xml">

    • Contiene la estructura XML de la vista.
  5. <list string="Vehiculo List">

    • Define una vista de tipo lista para mostrar los vehículos.
  6. Campos incluidos en la lista:

    • modelo: Muestra el modelo del vehículo.
    • marca: Muestra la marca del vehículo.

Permite visualizar todos los vehículos de forma ordenada en una tabla.
Facilita la navegación y selección de registros.
Optimiza la experiencia del usuario al mostrar solo los campos más relevantes.

Con este paso, los usuarios podrán ver una lista estructurada de vehículos en el módulo viajes. 🚗📋

A completar en el fichero views/vehiculo.xml

1<odoo>
2    <data>
3    .....
4        <record model="ir.ui.view" id="vehiculo_list_view">
5            <field name="name">vehiculo.list</field>
6            <field name="model">viajes.vehiculo</field>
7            <field name="arch" type="xml">
8                <list string="Vehiculo List">
9                    <field name="modelo" />
10                    <field name="marca" />
11                </list>
12            </field>
13        </record>
14    .....
15    </data>
16</odoo>

📌 Creación de la vista de formulario para Vehiculo

En este paso, hemos definido una vista de tipo formulario (ir.ui.view) que permitirá a los usuarios agregar, editar y visualizar los detalles de cada vehículo.

🔍 Explicación de los elementos:

  1. <record> con model="ir.ui.view"

    • Define una nueva vista en la base de datos.
  2. <field name="name">vehiculo.form</field>

    • Identificador de la vista (vehiculo.form).
  3. <field name="model">viajes.vehiculo</field>

    • Indica que la vista está asociada al modelo viajes.vehiculo.
  4. <field name="arch" type="xml">

    • Contiene la estructura XML de la vista.
  5. <form string="Formulario de Vehiculo">

    • Define que esta es una vista de formulario.
  6. Estructura del formulario:

    • <sheet>: Contenedor principal de la información dentro del formulario.
    • <group>: Agrupa los campos dentro del formulario.
    • <field name="modelo" />: Campo para ingresar el modelo del vehículo.
    • <field name="marca" />: Campo para ingresar la marca del vehículo.

Permite a los usuarios agregar o modificar vehículos fácilmente.
Organiza los campos de manera clara en un formulario.
Facilita la gestión de datos desde la interfaz de Odoo.

Con este formulario, los usuarios podrán crear y editar vehículos dentro del módulo viajes de manera intuitiva. 🚗📄

A completar en el fichero views/vehiculo.xml

1<odoo>
2    <data>
3    .....
4        <record model="ir.ui.view" id="vehiculo_form_view">
5            <field name="name">vehiculo.form</field>
6            <field name="model">viajes.vehiculo</field>
7            <field name="arch" type="xml">
8                <form string="Formulario de Vehiculo">
9                    <sheet>
10                        <group>
11                            <field name="modelo" />
12                            <field name="marca" />
13                        </group>
14                    </sheet>
15                </form>
16            </field>
17        </record>
18    .....
19    </data>
20</odoo>

📌 Creación de la vista de búsqueda para Vehiculo

En este paso, hemos definido una vista de búsqueda (ir.ui.view) que permite a los usuarios filtrar y buscar vehículos en la base de datos de manera rápida y eficiente.

🔍 Explicación de los elementos:

  1. <record> con model="ir.ui.view"

    • Define una nueva vista en la base de datos.
  2. <field name="name">vehiculo.search</field>

    • Identificador de la vista (vehiculo.search).
  3. <field name="model">viajes.vehiculo</field>

    • Indica que la vista está asociada al modelo viajes.vehiculo.
  4. <field name="arch" type="xml">

    • Contiene la estructura XML de la vista.
  5. <search>

    • Define que esta es una vista de búsqueda.
  6. Campos incluidos en la búsqueda:

    • <field name="marca" />: Permite buscar vehículos por marca.
    • <field name="descripcion" />: Permite buscar vehículos por su descripción.

Facilita la búsqueda de vehículos según la marca o descripción.
Permite a los usuarios filtrar los registros de manera eficiente.
Mejora la experiencia en la gestión de vehículos dentro de Odoo.

Con esta vista, los usuarios podrán encontrar vehículos fácilmente en la lista de registros del módulo viajes. 🚗🔍

A completar en el fichero views/vehiculo.xml

1<odoo>
2    <data>
3    .....
4        <record model="ir.ui.view" id="vehiculo_search_view">
5            <field name="name">vehiculo.search</field>
6            <field name="model">viajes.vehiculo</field>
7            <field name="arch" type="xml">
8                <search>
9                    <field name="marca" />
10                    <field name="descripcion" />
11
12                </search>
13            </field>
14        </record>
15    .....
16    </data>
17</odoo>

Existen otros tipos de vistas en odoo que veremos más adelante.

📌 Mejora de la vista de formulario para Vehiculo

En este paso, hemos organizado la información dentro de un formulario con pestañas (notebook), mejorando la visualización y usabilidad.

🔍 Explicación de los elementos:

  1. <notebook>

    • Añade un conjunto de pestañas dentro del formulario.
  2. <page string="Descripcion">

    • Contiene el campo descripcion, donde se puede agregar información extra del vehículo.
  3. <page string="Acerca de">

    • Muestra un texto estático: "Esto es un ejemplo".

Organiza la información de manera estructurada con pestañas.
Hace que el formulario sea más fácil de navegar sin sobrecargar la vista principal.
Facilita la edición y consulta de información adicional, como la descripción del vehículo.

Con esta mejora, la interfaz del módulo viajes es más intuitiva y permite gestionar los vehículos de forma más eficiente. 🚗🗂🎯

A completar en el fichero views/vehiculo.xml

1<odoo>
2    <data>
3
4     .....
5
6        <record model="ir.ui.view" id="vehiculo_form_view">
7            <field name="name">vehiculo.form</field>
8            <field name="model">viajes.vehiculo</field>
9            <field name="arch" type="xml">
10                <form string="Formulario de Vehiculo">
11                    <sheet>
12                        <group>
13                            <field name="modelo" />
14                            <field name="marca" />
15                        </group>
16                        <notebook>
17                            <page string="Descripcion">
18                                <field name="descripcion"/>
19                            </page>
20                            <page string="Acerca de">
21                                Esto es un ejemplo
22                            </page>
23                        </notebook>
24                    </sheet>
25                </form>
26            </field>
27        </record>
28
29    .....
30
31    </data>
32</odoo>

🔄 Reiniciar el módulo en Odoo y actualizar aplicación

Reinicia el servidor odoo y actualiza la aplicación de viajes para aplicar los cambios.