Práctica: Módulo viajes. Parte 1
1. Instalación #
instala odoo con docker, configurando correctamente los volúmenes, como se indica en la primera parte del curso.
2. Crea un scaffold de un nuevo módulo llamado viajes que contenga: #
Conéctate al contenedor de odoo
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 módulos correctamente configurados puedes abrir la carpeta extra-addons en tu máquina local usando vscode.
1$ cd extra-addons/viajes 2$ code .
3. Crea el 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}
4. Modelo #
5. 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: TipoChar, obligatorio, indica el modelo del vehículo.marca: TipoChar, opcional, especifica la marca del vehículo.descripcion: TipoText, opcional, permite agregar información adicional sobre el vehículo.
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()
6. 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
7. 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:
- Seat Panda con el modelo
"Panda". - Tesla Model S con el modelo
"Model S".
- Seat Panda con el modelo
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>
8. Acciones y menús #
9. 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?
- Añadimos permisos de acceso (
security/ir.model.access.csv), asegurando que los usuarios tengan los permisos necesarios para trabajar con los vehículos. - 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
Vehiculosin 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}
10. 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: #
-
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).
- Ahora incluye
-
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>
11. 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? #
-
Menú principal (
main_viajes_menu)- Se crea un menú de nivel superior llamado "Viajes" en la barra de navegación de Odoo.
-
Menú secundario (
viajes_menu)- Se define un submenú "Viajes", dentro del menú principal.
-
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>
12. 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_read→ 1 (permiso para leer registros).perm_write→ 1 (permiso para modificar registros).perm_create→ 1 (permiso para crear registros).perm_unlink→ 1 (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:
13. 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.
14. 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 #
- Ir a Ajustes.
- 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.
15. 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.
16. Creación de las Vistas #
17. 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: #
-
<record>conmodel="ir.ui.view"- Define una nueva vista en la base de datos.
-
<field name="name">vehiculo.list</field>- Especifica un identificador interno para la vista (
vehiculo.list).
- Especifica un identificador interno para la vista (
-
<field name="model">viajes.vehiculo</field>- Indica que la vista está asociada al modelo
viajes.vehiculo.
- Indica que la vista está asociada al modelo
-
<field name="arch" type="xml">- Contiene la estructura XML de la vista.
-
<list string="Vehiculo List">- Define una vista de tipo lista para mostrar los vehículos.
-
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>
18. 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: #
-
<record>conmodel="ir.ui.view"- Define una nueva vista en la base de datos.
-
<field name="name">vehiculo.form</field>- Identificador de la vista (
vehiculo.form).
- Identificador de la vista (
-
<field name="model">viajes.vehiculo</field>- Indica que la vista está asociada al modelo
viajes.vehiculo.
- Indica que la vista está asociada al modelo
-
<field name="arch" type="xml">- Contiene la estructura XML de la vista.
-
<form string="Formulario de Vehiculo">- Define que esta es una vista de formulario.
-
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>
19. 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: #
-
<record>conmodel="ir.ui.view"- Define una nueva vista en la base de datos.
-
<field name="name">vehiculo.search</field>- Identificador de la vista (
vehiculo.search).
- Identificador de la vista (
-
<field name="model">viajes.vehiculo</field>- Indica que la vista está asociada al modelo
viajes.vehiculo.
- Indica que la vista está asociada al modelo
-
<field name="arch" type="xml">- Contiene la estructura XML de la vista.
-
<search>- Define que esta es una vista de búsqueda.
-
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.
20. 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: #
-
<notebook>- Añade un conjunto de pestañas dentro del formulario.
-
<page string="Descripcion">- Contiene el campo
descripcion, donde se puede agregar información extra del vehículo.
- Contiene el campo
-
<page string="Acerca de">- Muestra un texto estático:
"Esto es un ejemplo".
- Muestra un texto estático:
✅ 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>
21. 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.
Resumen del tema
Conceptos clave #
- Scaffolding (
odoo scaffold): generación automatizada del esqueleto de directorios del módulo enextra-addons. - Definición del Modelo
viajes.vehiculo: modelo con campos básicos (modelo,marca,descripcion) e inicialización enmodels/__init__.py. - Seguridad Básica (
ir.model.access.csv): asignación de permisos completos de lectura, escritura, creación y borrado. - Arquitectura de Vistas XML:
- Vista de lista (
<list>/<tree>) y acción de ventana (ir.actions.act_window). - Vista formulario (
<form>,<sheet>,<group>,<notebook>,<page>). - Vista de búsqueda (
<search>). - Menús jerárquicos (
<menuitem>).
- Vista de lista (
- Carga de Datos Demo: registros iniciales en
demo/demo.xml.
Qué debes recordar #
El flujo de creación de un módulo abarca: scaffold manifiesto modelo Python permisos CSV vistas/menús XML reinicio y actualización en Apps.