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.

  1. 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.
  2. 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 estado cambia a aprobado”) y acciones (enviar correo, ejecutar código Python, etc.).
    • Muy útiles para mantener consistencia y reducir la intervención manual en procesos.
  3. Estados y transiciones “manuales”

    • En muchos modelos, gestionas la “lógica de estados” por medio de campos Selection o 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 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:

  1. @api.model

    • Indica que el método no está ligado a un registro en particular, sino al modelo en general.
    • No recibe self como 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    ...
  2. @api.multi (v10 y anteriores) / @api.depends (en versiones más recientes, se maneja de forma distinta)

    • @api.multi se 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_multi o simplemente se maneja self como un recordset.
    • @api.depends se 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
  3. @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)
  4. @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.).

  1. Modelos transitorios

    • Se definen heredando de models.TransientModel en lugar de models.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
  2. 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>
  3. 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 action

    Al 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

  1. 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.
  2. 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.
  3. 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...