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: 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()
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:
- 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>
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?
- 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}
📌 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>
📌 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>
📌 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:
🔄 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
- 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.
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:
-
<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>
📌 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>
📌 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.
📌 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>
🔄 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.