Saltar al contenido principal

EST-TDT-001 Estándar de Codificación para Odoo

v 2.1

Propósito

El código producido es mantenible, se reducen errores y es de fácil comprenhesión.

Notas Introductorias

Este estándar se utuliza para el desarrollo del proyecto Talent360 para los archivos, variables, directorios y modelos en Odoo.

Directorios

Un módulo está organizado en directorios importantes que contienen la lógica de negocio

  • data/ : xml data
  • models/ : definición de modelos
  • controllers/ : contiene controladores (Rutas HTTP)
  • security/ : contiene archivos .xml y .csv para brindar permisos de acceso a usuarios
  • views/ : contiene las vistas y los templates
  • static/ : contiene los web assets, separados por css/, js/, img/, lib/

Otros directorios opcionales son:

  • wizard/ : reagrupa los modelos transitorios y sus vistas.
  • report/ : contiene reportes y modelos imprimibles basado en vistas de SQL
  • tests/ : contiene tests de Python

Nombre de archivos

  1. Modelos

    Ejemplo:

    addons/nombre_del_modulo/
    | models/
    | | modelo_1.py
    | | modelo_2.py
  2. Seguridad

    Para seguridad, tres archivos principales deben usarse:

    • ir.mode.access.csv : Definición de permisos de acceso

    • nombre_del_modulo_groups : Definición de grupos de usuario

    • nombre_del_modulo_security : Definición de reglas de registro

      Ejemplo:

      addons/nombre_del_modulo/
      | security/
      | | ir.model.access.csv
      | | nombre_del_modulo_groups.xml
      | | nombre_del_modulo_security.xml
  3. Vistas

    Para las vistas relacionadas al backend (listas, formularios, etc) llevan el sufijo \_views.xml.

    Para las vistas relacionadas con los menús, llevan el sufijo \_menus.xml.

    Los templates llevan el sufijo \_templates.xml.

    Ejemplo:

    addons/nombre_del_modulo/
    | views/
    | | nombre_del_modulo_menus.xml
    | | nombre_del_modulo_views.xml
    | | nombre_del_modulo_templates.xml
  4. Data

    Separa los archivos por su propósito (demo o data).

    Ejemplo:

    addons/nombre_del_modulo/
    | views/
    | | nombre_del_modulo_data.xml
    | | nombre_del_modulo_demo.xml
  5. Controladores

    Ejemplo:

    addons/nombre_del_modulo/
    | controllers/
    | | nombre_del_modulo.py
  6. Static

    Comúnmente se crea una carpeta src/ dentro de static/ para estructurar mejor las carpetas de components/, css/, img/, js/, etc.

Archivos XML

1. Formato

  • El atributo “model” se escribe antes que “id”.

  • Los valores de los atributos deben usar doble comillas.

  • Para la declaración de un <field>, el atributo del nombre se escribe primero. El valor del atributo se ingresa dentro de los tags de <field>.

    Ejemplo:

    <record id="view_id" model="ir.ui.view">
    <field name="name">view.name</field>
    </record>

    2. IDs XML y nombramiento

    • Menu: <nombre_del_modulo>_menu, o <nombre_del_modulo>_menu_do_stuff para submenus.

    • Vista: <nombre_del_modulo>_view_<tipo_de_vista>, donde el tipo de vista es un kanban, form, tree, search, …

    • Acción: <nombre_del_modulo>_action.

    • Acciones de ventana: <nombre_del_modulo>_action_view_<tipo_de_vista>.

    • Grupo: <nombre_del_modulo>_group_<nombre_del_grupo>.

    • Regla: <nombre_del_modulo>_rule_<grupo_involucrado>.

      Ejemplo (vistas):
       <record id="model_name_view_form" model="ir.ui.view">
      <field name="name">model.name.view.form</field>
      ...
      </record>
      Ejemplo (acciones):
       <record id="model_name_action" model="ir.act.window">
      <field name="name">Model Main Action</field>
      ...
      </record>
      Ejemplo (menus y submenus):
       <menuitem
      id="model_name_menu_root"
      name="Main Menu"
      sequence="5"
      />
      <menuitem
      id="model_name_menu_action"
      name="Sub Menu 1"
      parent="module_name.module_name_menu_root"
      action="model_name_action"
      sequence="10"
      />
      Ejemplo (seguridad)
      <record id="module_name_group_user" model="res.groups">
      ...
      </record>

      <record id="model_name_rule_public" model="ir.rule">
      ...
      </record>

    3. Herencia

    • Los IDs de Xml de vistas heredadas deben usar el mismo ID que el registro original.

    • El nombramiento debe contener un sufijo de .inherit.{detalles}

      Ejemplo:

      <record id="model_view_form" model="ir.ui.view">
      <field name="name">model.view.form.inherit.module2</field>
      <field name="inherit_id" ref="module1.model_view_form"/>
      ...
      </record>

Python

Símbolos y Convenciones

  • Nombres de modelos:

    • Usa la forma singular del nombre (res.partner en lugar de res.partnerS)
  • Nombre de clases:

    • Usa camelcase: (class AccountInvoice(models.Model))
  • Nombre de variables: _ Usa camelcase para variable de modelo _ Usa snake case para variables comunes _ Agrega el sufijo de _id o _ids a tus variables que contienen identificadores _ Los campos de One2Many y Many2Many deben contener “_ids” como sufijo * Los campos de Many2One deben contener “_id” como sufijo.

    Ejemplo: Partner = self.env['res.partner'] partners = Partner.browse(ids) partner_id = partners[0].id

  • Nombre de métodos

    • Compute: compute<campo>
    • Search: search<campo>
    • Default: default<campo>
    • Selection: selection<campo>
    • Onchange: onchange<campo>
    • Constraint: check<nombre_de_restricción>
    • Action: action<acción>
  • Orden de Atributos de Modelos

    • Prefijo de “_”
    • Método default y default_get
    • Declaración de campos
    • Métodos de compute, inverse y search
    • Método de selection
    • Métodos de constraints
    • Métodos (CRUD) (ORM overrides)
    • Métodos de action
    • Otros métodos de negocio

Terminología

Permiso de acceso: Reglas usadas para controlar el acceso del usuario a la base de datos de Odoo. Especifica qué puede hacer un usuario en la base de datos. Es esencial tener estas reglas para evitar confusión y asegurar que la base de datos es segura.

Reglas de Registro: Determinan quién puede acceder al objeto. Para manejar estas reglas, tenemos modos de accesos (crear, editar, leer y eliminar) para el objeto.

Control de cambios

VersiónCambioAutor del cambioRevisor(es)Fecha de cambio
v 1.0Creación del estándar de codificación en OdooCarlos Velasco, Alejandra CabreraDiego Sandoval04/04/2024
v 1.1Correción de estructuraDiego Vega09/04/2024
v 2.1Corrección AUD-102Daniel Fuentes15/05/2024