Curso odoo (Módulos)
7.1. Flujo de trabajo y automatizaciones
En las versiones antiguas de Odoo (anteriormente OpenERP), existía el concepto de Workflow (flujo de trabajo) con diagramas de estados y transiciones. A partir de versiones más recientes (desde la 9 en adelante), ese sistema de workflows se sustituyó por la API moderna y la posibilidad de crear automatizaciones más flexibles.
-
Acciones del Servidor (Server Actions)
- Permiten ejecutar código (Python) o enviar correos cuando se cumple cierta condición, por ejemplo, al confirmar un pedido o al cambiar un estado.
- Se configuran en la interfaz de Odoo, en Ajustes → Acciones de servidor (o en la aplicación para Desarrolladores).
- Suelen usarse para automatizar tareas repetitivas: generar una factura tras aprobar una orden, enviar una alerta por email, etc.
-
Automatizaciones (Automated Actions)
- Son reglas que se ejecutan al dispararse un evento (crear, escribir o eliminar un registro) o según un cron (programación de tareas).
- Puedes definir condiciones (por ejemplo, “cuando el campo
estadocambia aaprobado”) y acciones (enviar correo, ejecutar código Python, etc.). - Muy útiles para mantener consistencia y reducir la intervención manual en procesos.
-
Estados y transiciones “manuales”
- En muchos modelos, gestionas la “lógica de estados” por medio de campos
Selectiono booleanos, junto con métodos que cambian esos valores. - Es habitual tener métodos como
action_confirm,action_cancel, etc. que cambian el estado de un documento y realizan acciones complementarias (por ejemplo, reservar stock, generar asientos contables, etc.).
- En muchos modelos, gestionas la “lógica de estados” por medio de campos
En definitiva, aunque el sistema “Workflow” clásico ya no existe en su forma anterior, la filosofía permanece: puedes automatizar pasos y acciones para que tus procesos funcionen de manera fluida.
7.2. Decoradores de Odoo
Los decoradores de la API de Odoo se utilizan para indicar cómo y cuándo se ejecutan ciertos métodos o para especificar reglas sobre los campos. Entre los más importantes tenemos:
-
@api.model- Indica que el método no está ligado a un registro en particular, sino al modelo en general.
- No recibe
selfcomo un registro específico, sino como un objeto “vacío” que representa la clase.
1@api.model 2def do_something(self): 3 # Lógica que no depende de un registro concreto 4 ... -
@api.multi(v10 y anteriores) /@api.depends(en versiones más recientes, se maneja de forma distinta)@api.multise utilizaba para métodos que manejan varios registros a la vez, pero en versiones recientes de Odoo se ha sustituido por la unificación de@api.model_create_multio simplemente se manejaselfcomo un recordset.@api.dependsse utiliza para campos calculados, indicando de qué campos depende el cálculo para que Odoo sepa cuándo debe recalcular el valor.
1@api.depends('field_a', 'field_b') 2def _compute_total(self): 3 for record in self: 4 record.total = record.field_a + record.field_b -
@api.onchange- Se aplica a métodos que se ejecutan cuando cambia el valor de uno o varios campos en la vista formulario.
- Muy útil para actualizar campos en tiempo real (antes de guardar en la base de datos).
1@api.onchange('price', 'tax_percent') 2def _onchange_price(self): 3 if self.price and self.tax_percent: 4 self.tax_amount = self.price * (self.tax_percent / 100.0) -
@api.constrains- Sirve para validar condiciones al momento de crear o escribir (guardar) un registro.
- Puedes lanzar un error si la condición no se cumple.
1@api.constrains('start_date', 'end_date') 2def _check_dates(self): 3 for record in self: 4 if record.end_date < record.start_date: 5 raise ValidationError(_("End date cannot be before start date."))
Estos decoradores ayudan a estructurar mejor la lógica de negocio y permiten que Odoo gestione de manera óptima cuándo recalcular datos, validar información o reaccionar a cambios en los campos.
7.3. Wizards
Los wizards (asistentes) son pantallas interactivas que guían al usuario paso a paso para realizar una acción concreta (por ejemplo, cerrar un periodo contable, configurar parámetros para un reporte, etc.).
-
Modelos transitorios
- Se definen heredando de
models.TransientModelen lugar demodels.Model. - Sus datos se almacenan temporalmente y normalmente se eliminan pasado un tiempo o en cuanto finaliza el proceso.
1from odoo import models, fields, api, _ 2 3class LibraryWizard(models.TransientModel): 4 _name = 'library.wizard' 5 6 date_from = fields.Date(string="Date From") 7 date_to = fields.Date(string="Date To") 8 9 @api.multi 10 def action_validate(self): 11 # Lógica que se ejecuta al hacer clic en el botón del wizard 12 # ... 13 return True - Se definen heredando de
-
Vista del wizard
- Similar a las vistas de los modelos normales, pero típicamente consta de un formulario con campos y uno o varios botones de acción.
1<odoo> 2 <record id="view_library_wizard_form" model="ir.ui.view"> 3 <field name="name">library.wizard.form</field> 4 <field name="model">library.wizard</field> 5 <field name="arch" type="xml"> 6 <form string="Library Wizard"> 7 <group> 8 <field name="date_from"/> 9 <field name="date_to"/> 10 </group> 11 <footer> 12 <button string="Validate" type="object" name="action_validate" class="btn-primary"/> 13 <button string="Cancel" class="btn-secondary" special="cancel"/> 14 </footer> 15 </form> 16 </field> 17 </record> 18</odoo> -
Llamada al wizard
- Se puede abrir desde un botón o acción en otro modelo. Por ejemplo:
1action = { 2 'name': 'Wizard Example', 3 'type': 'ir.actions.act_window', 4 'res_model': 'library.wizard', 5 'view_mode': 'form', 6 'target': 'new', # abre en modo pop-up 7} 8return actionAl ejecutar este código, se abrirá la vista formulario del wizard, permitiendo al usuario introducir datos y pulsar el botón “Validate”.
Los wizards son ideales cuando necesitas una ventana de diálogo para que el usuario complete información o confirme acciones específicas, sin necesidad de cambiar permanentemente los datos en la base de datos.
Conclusión de la Parte 7
- Flujo de trabajo y automatizaciones: Aunque los workflows clásicos han sido sustituidos, Odoo provee acciones del servidor y automatizaciones para orquestar procesos y tareas repetitivas.
- Decoradores de Odoo:
@api.model,@api.depends,@api.onchange,@api.constrains, etc., permiten estructurar y ejecutar la lógica de negocio de forma clara y ordenada. - Wizards: Son asistentes basados en modelos transitorios que recogen información temporal y guían al usuario en procesos puntuales (generación de informes, validaciones, etc.).
Con estas herramientas, puedes personalizar la forma en que Odoo maneja la información y los procesos internos de tu empresa. En la siguiente parte del curso, abordaremos los reportes en Odoo, donde aprenderás a diseñar y personalizar documentos PDF y pantallas de reporte para presentar tu información de manera profesional. ¡Continuemos!
- Loading...