Creando un módulo desde cero

12 de setiembre de 2023 por
Gustavo Orrillo
| Sin comentarios aún
 

Vamos a explicar paso a paso como se crea un módulo en Odoo. Es un módulo sencillo. Lo que necesitamos es que se extienda el módulo product.template para agregarle dos campos: old_system_code (del tipo char) y old_system_id (del tipo integer). Los mismos deben mostrarse en un tab propio de título "Sistema Viejo" en el formulario de productos.

Así que manos a la obra, vamos a crear el módulo. En un directorio que se encuentra disponibilizado por Odoo para los módulos, vamos a crear un directorio llamado módulo_migración.

mkdir modulo_migracion
cd modulo_migracion

Seguidamente con nuestro editor favorito (en mi caso, el vim) vamos a crear un archivo llamado __manifest__.py en donde vamos a declarar las características del módulo. En este caso:

{
"name": "modulo_migracion",
"version": "15.0.1.0.0",
"license": "AGPL-3",
"depends": ["product"],
"category": "Accounting",
"data": [
],
}

En este archivo declaramos las características del módulo. Si no contamos con este módulo, Odoo no tratará de instalarlo ni leerlo para su ejecución. Bien, vamos a instalarlo. Para ello nos podemos guiar por el post "Como instalar módulos en Odoo". Después de clickear en "Actualizar Lista de Módulos" podemos ver el módulo creado


Bueno, instalemos el módulo y sigamos. Al fin y al cabo lo que acabamos de hacer es decirle a Odoo que existe un módulo y actualizamos los contenidos del modelo ir.module_module.

Paso siguiente, extender el modelo product.template y agregarle los campos que necesitamos. Para ello primero vamos a crear un archivo llamado __init__.py y agregar la siguiente línea:

from . import models

Lo que el archivo __init__.py es marcar un directorio como un paquete de Python. En este archivo le decimos que vamos a importar el archivo models.py (podría ser un directorio, pero para simplificar este tutorial vamos a hacer un archivo). 

Paso seguido, vamos a crear un archivo llamado models.py (el cual va a ser inicializado debido a que así fue indicado por el archivo __init__.py) en el cual vamos a tener los siguientes contenidos:

from odoo import tools, models, fields, api, _

class ProductTemplate(models.Model):
_inherit = 'product.template'

old_system_code = fields.Char('Old System Code')
old_system_id = fields.Integer('Old System ID')

En estas líneas lo que hacemos es definir una clase que hereda del modelo product.template. Y le agregamos dos campos nuevos: old_system_code y old_system_id. Ahora vamos a actualizar el módulo y luego vamos a comprobar que se efectuaron los cambios. Para ello vamos a chequear la estructura del modelo product.template


Bien, una vez que tenemos los campos definidos podemos pasar a extender la vista del formulario de productos para agregar el tab y los campos recien creados. Primero tenemos que determinar cual es la vista a extender. Para ello usamos el modo desarrollador y clickeamos en la edición del formulario


En este caso el external ID de la vista a extender es product.product_template_form_view. Ahora vamos a extender la vista. Para eso creamos un archivo llamado product_view.xml con los contenidos indicados a continuación

<?xml version="1.0" encoding="utf-8"?>
<odoo>

<record id="migracion_product_tempalte_form" model="ir.ui.view">
<field name="name">migracion.product.template.form</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_form_view"></field>
<field name="arch" type="xml">
<xpath expr="//notebook" position="inside" >
<page string="Migracion" >
<group>
<field name="old_system_code" />
<field name="old_system_id" />
</group>
</page>
</xpath>
</field>
</record>

</odoo>

Y luego debemos modificar el archivo del manifiesto para indicarle que cargue también el archivo product_view.xml. El archivo __manifest__.py debe quedar así

{
"name": "modulo_migracion",
"version": "15.0.1.0.0",
"license": "AGPL-3",
"depends": ["product"],
"category": "Accounting",
"data": [
"product_view.xml"
],
}

Ahora actualizamos el módulo y si chequeamos el formulario de productos, podemos apreciar la existencia del nuevo tab con los campos que acaban de ser agregados.


Y ya está. Este es un ejemplo de un módulo muy básico, en otros posts detallaremos módulos más complejos. Los contenidos del módulo desarrollado lo pueden descargar de nuestro repositorio en github.




Gustavo Orrillo 12 de setiembre de 2023
Compartir
Categorías
Archivar
Identificarse dejar un comentario