Curso odoo (Módulos)
Creando le modelo de Viaje
📌 Creación del modelo Viaje
Este modelo permitirá gestionar los viajes dentro del módulo viajes. Contiene información sobre cada viaje, como su título, fecha de inicio, duración y número de plazas disponibles.
🔍 Características del modelo Viaje:
-
_name = 'viajes.viaje'- Define el identificador único del modelo en la base de datos.
-
_description = "Viajes"- Describe el propósito del modelo.
-
Campos del modelo:
titulo(Char, requerido) → Nombre del viaje.fecha_inicio(Date, por defecto la fecha actual) → Fecha en la que comienza el viaje.duracion(Float, con 6 dígitos y 2 decimales) → Duración en días.plazas(Integer) → Número de plazas disponibles.
✅ Permite gestionar los viajes dentro del módulo.
✅ Registra información clave, como la fecha de inicio y la cantidad de plazas disponibles.
✅ Se puede expandir fácilmente para agregar más funcionalidades (como vincularlo con vehículos o pasajeros).
Fichero
models/ViajeModel.py
1from odoo import models, fields, api 2from datetime import timedelta 3 4 5class Viaje(models.Model): 6 _name = 'viajes.viaje' 7 _description = "Viajes" 8 9 titulo = fields.Char(required=True) 10 fecha_inicio = fields.Date(default=fields.Date.today) 11 duracion = fields.Float(digits=(6, 2), help="Duracion en días") 12 plazas = fields.Integer(string="Numero de plazas disponibles") 13 14 estado = fields.Selection( 15 selection=[ 16 ('planeado', 'Planeado'), 17 ('en_curso', 'En curso'), 18 ('finalizado', 'Finalizado') 19 ], 20 string="Estado", 21 default="planeado", 22 required=True 23 )
📌 Actualización del archivo __init__.py
Este archivo es fundamental porque le indica a Odoo qué modelos debe cargar al iniciar el módulo.
🔍 ¿Qué cambios realizaste?
- Antes: Solo importabas el modelo
VehiculoModel. - Ahora: También importas el modelo
ViajeModel.
Fichero
models/__init__.py
1# -*- coding: utf-8 -*- 2 3from . import VehiculoModel 4from . import ViajeModel
Creando las vistas
📌 Definiendo la vista para Viaje
Esta configuración permitirá visualizar, crear, buscar, etc viajes en Odoo.
Fichero
views/viaje.xml
1<odoo> 2 <data> 3 4 5 </data> 6</odoo>
📌 Actualización en __manifest__.py
Esta sección define los archivos XML que Odoo cargará cuando se instale el módulo.
🔍 ¿Qué cambios realizaste?
- Antes: Solo cargabas las vistas de
vehiculo.xmly los menús (menus.xml). - Ahora: También agregaste la vista de
viaje.xml, lo que permite a Odoo reconocer las vistas del modeloViaje.
✅ Asegura que las vistas de Viaje sean reconocidas por Odoo.
✅ Evita errores al cargar la interfaz del módulo.
✅ Permite que los usuarios puedan visualizar y gestionar viajes desde la interfaz de Odoo.
Nota: Es importante que menus.xml esté al final del todo.
Amplia el fichero
__manifest__.py
1# always loaded 2 'data': [ 3 'security/ir.model.access.csv', 4 'views/vehiculo.xml', 5 'views/viaje.xml', 6 'views/menus.xml' 7 ],
📌 Configuración de permisos de acceso en Odoo
Este archivo define qué acciones pueden realizar los usuarios sobre los modelos viajes.vehiculo y viajes.viaje.
🔍 Explicación de las líneas agregadas
| id | name | model_id:id | group_id:id | perm_read | perm_write | perm_create | perm_unlink |
|---|---|---|---|---|---|---|---|
access_viajes_vehiculo | viajes.vehiculo | model_viajes_vehiculo | (Vacío, aplica a todos) | ✅ (1) | ✅ (1) | ✅ (1) | ✅ (1) |
access_viajes_viaje | viajes.viaje | model_viajes_viaje | (Vacío, aplica a todos) | ✅ (1) | ✅ (1) | ✅ (1) | ✅ (1) |
🔑 ¿Qué significan los permisos?
perm_read (1)→ Permite leer registros.perm_write (1)→ Permite modificar registros.perm_create (1)→ Permite crear nuevos registros.perm_unlink (1)→ Permite eliminar registros.
✅ Otorga permisos completos para gestionar vehículos y viajes.
✅ Evita errores de acceso cuando los usuarios intentan ver o modificar registros.
✅ Permite que cualquier usuario pueda gestionar ambos modelos (si no se asigna a un grupo específico).
Amplia el 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 3access_viajes_viaje,viajes.viaje,model_viajes_viaje,,1,1,1,1
📌 Creación de la acción de ventana para Viaje
Esta acción permite a los usuarios visualizar, crear y gestionar viajes dentro de Odoo.
🔍 Explicación de los elementos:
-
<record model="ir.actions.act_window" id="viaje_list_action">- Crea una nueva acción de ventana para
viajes.viaje.
- Crea una nueva acción de ventana para
-
<field name="name">Viajes</field>- Define el nombre que aparecerá en la interfaz de Odoo ("Viajes").
-
<field name="res_model">viajes.viaje</field>- Especifica el modelo que se gestionará (
viajes.viaje).
- Especifica el modelo que se gestionará (
-
<field name="view_mode">list,form,search</field>- Permite mostrar los datos en diferentes modos:
list→ Muestra los viajes en formato de tabla.form→ Permite ver y editar viajes en un formulario.search→ Activa la barra de búsqueda para filtrar viajes.
- Permite mostrar los datos en diferentes modos:
✅ Permite acceder a los viajes desde la interfaz de Odoo.
✅ Facilita la navegación y gestión de registros.
✅ Habilita múltiples vistas para mejorar la experiencia del usuario.
Amplia el fichero
views/viaje.xml
1<odoo> 2 <data> 3 ..... 4 <record model="ir.actions.act_window" id="viaje_list_action"> 5 <field name="name">Viajes</field> 6 <field name="res_model">viajes.viaje</field> 7 <field name="view_mode">list,form,search</field> 8 </record> 9 ..... 10 </data> 11</odoo>
📌 Creación de la vista de formulario para Viaje
Esta vista permitirá a los usuarios crear, editar y visualizar los detalles de un viaje dentro del módulo viajes.
🔍 Explicación de los elementos:
-
<record model="ir.ui.view" id="viaje_form_view">- Crea una nueva vista de formulario.
-
<field name="name">viaje.form</field>- Define el identificador interno de la vista (
viaje.form).
- Define el identificador interno de la vista (
-
<field name="model">viajes.viaje</field>- Especifica que esta vista pertenece al modelo
viajes.viaje.
- Especifica que esta vista pertenece al modelo
-
<field name="arch" type="xml">- Contiene la estructura XML de la vista.
-
<form string="Formulario de Viajes">- Define la vista de formulario.
-
<sheet>- Contenedor principal del formulario.
-
<group>- Organiza los campos dentro del formulario de manera ordenada.
-
Campos incluidos en el formulario:
titulo→ Campo de tipoCharpara el nombre del viaje.fecha_inicio→ Campo de tipoDatepara la fecha de inicio del viaje.duracion→ Campo de tipoFloatpara la duración del viaje en días.plazas→ Campo de tipoIntegerpara el número de plazas disponibles.
✅ Permite a los usuarios ingresar y modificar datos de los viajes.
✅ Organiza la información de manera clara y estructurada.
✅ Facilita la gestión de los viajes desde la interfaz de Odoo.
Con esta vista, los usuarios podrán crear y gestionar viajes de manera intuitiva dentro del módulo viajes. 🚀✈️📋
Amplia el fichero
views/viaje.xml
1<odoo> 2 <data> 3 ..... 4 <record model="ir.ui.view" id="viaje_form_view"> 5 <field name="name">viaje.form</field> 6 <field name="model">viajes.viaje</field> 7 <field name="arch" type="xml"> 8 <form string="Formulario de Viajes"> 9 <sheet> 10 <group> 11 <field name="titulo" /> 12 <field name="fecha_inicio" /> 13 <field name="duracion" /> 14 <field name="plazas" /> 15 </group> 16 </sheet> 17 </form> 18 </field> 19 </record> 20 ..... 21 </data> 22</odoo>
📌 Creación de la vista de lista para Viaje
Esta vista permitirá a los usuarios visualizar y gestionar viajes en una tabla dentro de la interfaz de Odoo.
🔍 Explicación de los elementos:
-
<record model="ir.ui.view" id="viaje_list_view">- Crea una nueva vista de tipo lista.
-
<field name="name">viaje.list</field>- Identificador interno de la vista (
viaje.list).
- Identificador interno de la vista (
-
<field name="model">viajes.viaje</field>- Define que esta vista pertenece al modelo
viajes.viaje.
- Define que esta vista pertenece al modelo
-
<field name="arch" type="xml">- Contiene la estructura XML de la vista.
-
<list string="Viaje List">- Define la vista de tipo lista.
-
Campos incluidos en la lista:
titulo→ Nombre del viaje.duracion→ Duración en días del viaje.
✅ Permite ver todos los viajes en una tabla de forma ordenada.
✅ Facilita la búsqueda y selección rápida de registros.
✅ Optimiza la experiencia del usuario mostrando solo la información relevante.
Con esta vista, los usuarios podrán gestionar los viajes de manera sencilla dentro del módulo viajes en Odoo. 🚀✈️📋
Amplia el fichero
views/viaje.xml
1<odoo> 2 <data> 3 ..... 4 <record model="ir.ui.view" id="viaje_list_view"> 5 <field name="name">viaje.list</field> 6 <field name="model">viajes.viaje</field> 7 <field name="arch" type="xml"> 8 <list string="Viaje List"> 9 <field name="titulo" /> 10 <field name="duracion" /> 11 </list> 12 </field> 13 </record> 14 ..... 15 </data> 16</odoo>
📌 Creación de la vista de búsqueda para Viaje
Esta vista permitirá a los usuarios filtrar y buscar viajes de manera rápida en la base de datos de Odoo.
🔍 Explicación de los elementos:
-
<record model="ir.ui.view" id="viaje_search_view">- Crea una nueva vista de tipo búsqueda.
-
<field name="name">viaje.search</field>- Identificador interno de la vista (
viaje.search).
- Identificador interno de la vista (
-
<field name="model">viajes.viaje</field>- Define que esta vista pertenece al modelo
viajes.viaje.
- Define que esta vista pertenece al modelo
-
<field name="arch" type="xml">- Contiene la estructura XML de la vista.
-
<search>- Define la vista de búsqueda.
-
Campos incluidos en la búsqueda:
titulo→ Permite buscar viajes por su nombre.
✅ Facilita la búsqueda de viajes según su título.
✅ Permite filtrar registros sin necesidad de recorrer toda la lista manualmente.
✅ Mejora la experiencia del usuario dentro del módulo viajes.
Con esta vista, los usuarios podrán encontrar viajes fácilmente en la lista de registros del módulo viajes en Odoo. 🚀🔍✈️
Amplia el fichero
views/viaje.xml
1<odoo> 2 <data> 3 ..... 4 <record model="ir.ui.view" id="viaje_search_view"> 5 <field name="name">viaje.search</field> 6 <field name="model">viajes.viaje</field> 7 <field name="arch" type="xml"> 8 <search> 9 <field name="titulo" /> 10 </search> 11 </field> 12 </record> 13 ..... 14 </data> 15</odoo>
📌 Creación del menú para Viajes
Este menú permitirá a los usuarios acceder a la lista de viajes desde la interfaz de Odoo.
🔍 Explicación de los elementos:
-
<menuitem id="viaje_menu" name="Viajes"- Crea un nuevo elemento de menú con el nombre
"Viajes".
- Crea un nuevo elemento de menú con el nombre
-
parent="viajes_menu"- Define que este menú es un submenú dentro del menú principal
"viajes_menu". - Esto significa que el usuario deberá abrir el menú
"Viajes"para ver la opción"Viajes"dentro de él.
- Define que este menú es un submenú dentro del menú principal
-
action="viaje_list_action"- Cuando un usuario haga clic en este menú, se abrirá la vista de lista (
tree view) de viajes. viaje_list_actiones la acción que define la vista asociada.
- Cuando un usuario haga clic en este menú, se abrirá la vista de lista (
✅ Permite acceder a la gestión de viajes desde la interfaz de Odoo.
✅ Facilita la navegación dentro del módulo viajes.
✅ Organiza la estructura del menú de forma clara.
Con este menú, los usuarios podrán ver y gestionar viajes fácilmente en Odoo. 🚀✈️📋
Amplia el fichero
views/menus.xml
1<odoo> 2 <data> 3 ..... 4 5 <menuitem id="viaje_menu" name="Viajes" 6 parent="viajes_menu" 7 action="viaje_list_action"/> 8 </data> 9</odoo>
Ampliando los tipos de vistas
📌 Creación de la vista Calendario en Odoo
En este paso, hemos añadido una vista de calendario (calendar view) para el modelo Viaje. Esta vista permite visualizar los viajes organizados por fecha de inicio, con un código de color basado en su estado (Planeado, En curso, Finalizado).
📌 ¿Qué hace esta vista?
- 📅 Muestra los viajes en un calendario, organizados según la fecha de inicio.
- 🎨 Distingue los viajes por colores según su estado.
- 🔍 Permite filtrar y visualizar viajes de manera más intuitiva.
✅ Con esta mejora, los usuarios pueden gestionar los viajes de manera más visual y eficiente dentro del módulo viajes en Odoo. 🚀✈️
Amplia el fichero
views/viaje.xml
1<odoo> 2 <data> 3 ..... 4 <record model="ir.ui.view" id="viaje_calendar_view"> 5 <field name="name">viaje.calendar</field> 6 <field name="model">viajes.viaje</field> 7 <field name="arch" type="xml"> 8 <calendar date_start="fecha_inicio" color="estado"> 9 <field name="titulo" /> 10 </calendar> 11 </field> 12 </record> 13 ..... 14 </data> 15</odoo>
📌 Creación de la vista Gráfica en Odoo
En este paso, hemos añadido una vista gráfica (graph view) al módulo Viajes. Esta vista permite visualizar la cantidad de viajes según su estado utilizando un gráfico de barras.
📌 ¿Qué hace esta vista?
- 📊 Muestra un gráfico de barras con la cantidad de viajes agrupados por estado.
- 🔄 Permite analizar la distribución de los viajes en distintas fases (
Planeado,En curso,Finalizado). - 🔍 Facilita la visualización de datos de manera más clara y organizada.
✅ Con esta vista, los usuarios pueden obtener estadísticas rápidas sobre los viajes y su estado dentro del módulo viajes en Odoo. 🚀📊
Amplia el fichero
views/viaje.xml
1<odoo> 2 <data> 3 ..... 4 <record model="ir.ui.view" id="viaje_graph_view"> 5 <field name="name">viaje.graph</field> 6 <field name="model">viajes.viaje</field> 7 <field name="arch" type="xml"> 8 <graph type="bar"> 9 <field name="estado" type="row" /> 10 <field name="id" type="measure" /> 11 </graph> 12 </field> 13 </record> 14 ..... 15 </data> 16</odoo>
📌 Creación de la vista Pivot en Odoo
En este paso, hemos añadido una vista Pivot (pivot view) al módulo Viajes. Esta vista permite analizar los viajes en una tabla dinámica, facilitando la organización y comparación de datos.
📌 ¿Qué hace esta vista?
- 📅 Agrupa los viajes por fecha de inicio, permitiendo visualizar cuántos viajes han comenzado en un determinado período.
- ⏳ Muestra la duración total de los viajes, facilitando el análisis de tiempos.
- 🔍 Permite filtrar y reorganizar los datos de manera interactiva para obtener insights más precisos.
✅ Con esta vista, los usuarios pueden analizar la cantidad y duración de los viajes de manera estructurada, optimizando la gestión dentro del módulo viajes en Odoo. 🚀📊
Amplia el fichero
views/viaje.xml
1<odoo> 2 <data> 3 ..... 4 <record model="ir.ui.view" id="viaje_pivot_view"> 5 <field name="name">viaje.pivot</field> 6 <field name="model">viajes.viaje</field> 7 <field name="arch" type="xml"> 8 <pivot> 9 <field name="fecha_inicio" type="row" /> 10 <field name="duracion" type="measure" /> 11 </pivot> 12 </field> 13 </record> 14 ..... 15 </data> 16</odoo>
📌 Creación de la vista Kanban en Odoo
En este paso, hemos añadido una vista Kanban (kanban view) al módulo Viajes. Esta vista permite visualizar y organizar los viajes en tarjetas, agrupándolos automáticamente por su estado ("Planeado", "En curso", "Finalizado").
📌 ¿Qué hace esta vista?
- 🏷️ Organiza los viajes en columnas según su estado.
- 📝 Muestra información clave de cada viaje, como el título y la fecha de inicio.
- 🔄 Permite arrastrar y soltar viajes entre estados, facilitando la gestión visual.
✅ Con esta vista, los usuarios pueden gestionar los viajes de manera intuitiva y visual, permitiendo cambios rápidos entre estados dentro del módulo viajes en Odoo. 🚀📌
Amplia el fichero
views/viaje.xml
1<odoo> 2 <data> 3 ..... 4 <record model="ir.ui.view" id="viaje_kanban_view"> 5 <field name="name">viaje.kanban</field> 6 <field name="model">viajes.viaje</field> 7 <field name="arch" type="xml"> 8 <kanban default_group_by="estado"> 9 <field name="titulo" /> 10 <field name="fecha_inicio" /> 11 <field name="estado" /> 12 <templates> 13 <t t-name="card"> 14 <div class="oe_kanban_card"> 15 <strong> 16 <t t-esc="record.titulo.value" /> 17 </strong> 18 <br /> 19 <span>Inicio: <t t-esc="record.fecha_inicio.value" /></span> 20 <br /> 21 <span>Estado: <t t-esc="record.estado.value" /></span> 22 </div> 23 </t> 24 </templates> 25 </kanban> 26 </field> 27 </record> 28 ..... 29 </data> 30</odoo>
📌 Configuración de la acción de ventana en Odoo
En este paso, hemos definido una acción de ventana (act_window) que permitirá acceder a todas las vistas disponibles para el modelo Viaje en el módulo viajes.
📌 ¿Qué hace esta acción?
- 🔗 Asocia la acción a la gestión de viajes (
viajes.viaje). - 📂 Permite visualizar los viajes en múltiples vistas.
- 🚀 Facilita la navegación entre diferentes formatos de visualización.
📌 Explicación de los modos de vista:
list→ Muestra los viajes en formato tabla.form→ Permite crear y editar viajes individualmente.search→ Activa la barra de búsqueda para filtrar registros.calendar→ Muestra los viajes organizados por fecha.graph→ Genera gráficos para analizar los viajes.pivot→ Permite hacer análisis dinámicos en tablas.kanban→ Organiza los viajes en tarjetas agrupadas por estado.
✅ Con esta acción, los usuarios pueden acceder a los viajes y cambiar entre distintas vistas según sus necesidades dentro del módulo viajes en Odoo. 🚀📊📅
Amplia el fichero
views/viaje.xml
1<odoo> 2 <data> 3 ..... 4 <record model="ir.actions.act_window" id="viaje_list_action"> 5 <field name="name">Viajes</field> 6 <field name="res_model">viajes.viaje</field> 7 <field name="view_mode">list,form,search,calendar,graph,pivot,kanban</field> 8 </record> 9 ..... 10 </data> 11</odoo>
# Añadiendo datos de ejemplo
Añadimos unos cuantos datos de ejemplo para la tabla viaje
Fichero
demo/demo.viaje.xml
1<odoo> 2 <data> 3 <!-- Datos de demostración para Viajes --> 4 <record id="viaje_demo_1" model="viajes.viaje"> 5 <field name="titulo">Viaje a París</field> 6 <field name="fecha_inicio">2025-06-01</field> 7 <field name="duracion">5</field> 8 <field name="plazas">20</field> 9 <field name="estado">planeado</field> 10 </record> 11 12 <record id="viaje_demo_2" model="viajes.viaje"> 13 <field name="titulo">Excursión a la Montaña</field> 14 <field name="fecha_inicio">2025-03-15</field> 15 <field name="duracion">2</field> 16 <field name="plazas">15</field> 17 <field name="estado">en_curso</field> 18 </record> 19 20 <record id="viaje_demo_3" model="viajes.viaje"> 21 <field name="titulo">Tour por la Costa</field> 22 <field name="fecha_inicio">2025-01-20</field> 23 <field name="duracion">7</field> 24 <field name="plazas">25</field> 25 <field name="estado">finalizado</field> 26 </record> 27 </data> 28</odoo>
Añade el fichero demo.viaje.xml al manifest
1# only loaded in demonstration mode 2 'demo': [ 3 'demo/demo.xml', 4 'demo/demo.viaje.xml' 5 ], 6 'installable': True, 7 'application': True
🔄 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.