Módulo odoo

Bueno quería realizar esta pequeña guía, ya que a mí, me costó bastante saber como realizar un módulo en odoo, ya que buscando por internet la información está muy dispersa y hay que buscar bastante para poder comprender, por lo tanto quiero hacer un poco más fácil esto para todos aquellos que están empezando y que no saben nada con respecto a la creación de un módulo.

En esta, guía no me voy a referir en como instalar odoo, les dejo un link,  https://startel.cl/como-instalar-odoo-usando-docker-compose/, para realizar una instalación con Docker en un vps. Comenzaremos con la base que tienes tu instalación de odoo, hay dos forma de hacerlo, una es con scaffold, que crear o genera la estructura para que puedas comenzar a desarrollar tu módulo, y la otra es que tú crees los archivos manualmente, esta es la estructura básica que debes tener para el módulo, el nombre es a tu elección.

my_module
├── __init__.py
├── __manifest__.py
├── controllers
│   ├── __init__.py
│   └── controllers.py
├── demo
│   └── demo.xml
├── models
│   ├── __init__.py
│   └── models.py
├── security
│   └── ir.model.access.csv
└── views
    ├── templates.xml
    └── views.xml

explicare un poco la estructura:

· models/models.py, un ejemplo de modelo con sus campos

· views/views.xml, un arbol y una vista de formulario, con los menus que lo abren.

· demo/demo.xml, registros de demostracion para el modelo del ejemplo anterior.

· controllers/controllers.py, un ejemplo de controlador que implementa alguna rutas.

· views/templates.xml, dos ejemplos de vistas qweb utilizadas en las rutas de los controladores anteriores.

· _manifest_.py, el archivo manifest de su modulo, incluyendo por ejemplo su tirulo, descripcion y archivos de datos a cargar. solo debe descomentar el archivo de datos de la lista de control de acceso.

Compartiré algo sencillo para que tengas la idea de como comenzar y luego podrás ir mejorando tu código con lo tú necesitas, obviamente debes saber un poco o más que saber es entender como funciona el código, ya que está basado en Python.

Te recomendó utilizar algún editor, como por ejemplo Visual Studio Code o Sublime Text, o el de tu preferencia, ya que será más fácil poder leer el código. Comencemos creando nuestro módulo dentro de la carpeta Models, en esta carpeta debe haber dos archivos, uno es el __init__.py, y el otro models.py, el primero tiene esta forma:

__init__.py

# -*- coding: utf-8 -*-

from . import models

Este archivo se usa para inicializar su módulo y es obligatorio en todos y cada uno de los módulos que crees.

El segundo archivo es el models.py, obviamente tú le puedes colocar otro nombre el cual de referencia al módulo que estás creando, su estructura es la siguiente.

models.py

# -*- coding: utf-8 -*-
from odoo import models, fields, api,


class CertInstructor(models.Model):
    _name = 'instructor'
    _descripcion = 'Registro Instructores'


    name = fields.Char(string='Nombre', required=True )
    date = fields.Date(string='Fecha', required=True)
    card = fields.Many2one('fleet.vehicle.model.brand')
    model = fields.Char(string='Modelo')
    patente = fields.Char(string='Patente')

Como puedes ver en el código, se debe importa algunas bibliotecas, en el name colocas el nombre del módulo que estás creando, luego vas creando los campos que requieres en tu módulo, como consejo el name siempre debe ir, los demás campos puedes colocar de nombre referenciando al campo, como ves en la imagen cada campo es según a lo que requieres, me explico si vas a colocar el nombre obviamente es de tipo Char, te dejo un link para que puedas ver los distintos tipos de campos que puedes incorporar https://odoo.rgbconsulting.com/blog/blog-6/tipos-de-campos-en-odoo21#:~:text=En%20Odoo%2C%20se%20categorizan%20en,otros%20campos%20de%20la%20vista

Teniendo tu clase ya creada con los campos que requieres para tú módulo, ahora tienes que crear tu vista, dentro de esta vista estará tu formulario el cual recibirá la información y la vista donde podrás ver la información ingresada.

Para ello nos dirigimos a la carpeta views, y crearemos un archivo con la extensión XML, esta es la estructura de tipo formulario.

views.xml

<?xml version='1.0' encoding='utf-8'?>


<record id="view_instructor_form" model="ir.ui.view">
    <field name="name">instructor.form</field>
    <field name="model">instructor</field>
    <field name="arch" type="xml">
        <form string="Instructor">
            <sheet>
                <separator string="REGISTRAR INSTRUCTOR"/>
                <div class="oe_title">
                     <h1>
                         <field name="name" placeholder="Nombre Completo"/>
                     </h1>
                </div>
                <group col="4">
                    <field name="date" widget="date"/>
                </group>
                <group col="4" string="DATOS VEHICULO">
                    <field name="card"/>
                    <field name="patente"/>
                    <field name="model"/>
                </group>
            </sheet>
        </form>
    </field>
</record>

Este ejemplo corresponde al formulario, donde se recibirá la información dentro del mismo archivo sé crear la vista tree, que es donde se muestra la información.

<record id="view_instructor_tree" model="ir.ui.view">
    <field name="name">instructor.tree</field>
    <field name="model">instructor</field>
    <field name="arch" type="xml">
        <tree string="Instructor">
            <field name="name"/>
            <field name="date"/>
            <field name="card"/>
            <field name="model"/>
            <field name="patente"/>
        </tree>
    </field>
</record>

Obviamente tienes que comenzar en el archivo con la siguiente estructurá

<odoo>
    <data>
    	<record>
        </record>
    </data>
</odoo>

Este es el tipo de acción más común, utilizado para presentar visualizaciones de un modelo a través de vistas, teniendo tu vista, form y tree, debes crear el contexto de la vista acción de ventana(windows), dentro del mismo archivo views.

<record id="action_instructor_view" model="ir.actions.act_window">
    <field name="name">Instructor</field>
    <field name="type">ir.actions.act_window</field>
    <field name="res_model">instructor</field>
    <field name="view_mode">tree,form</field>
</record>

Odoo tiene una forma flexible de definir menús, submenús y acciones. La principal atracción es que se puede crear un menú y un submenú a partir del código y de la interfaz de usuario, lo que hace que Odoo sea más fácil de usar, Añadimos el elemento de menú en el archivo view como este ejemplo:

<menuitem id="menu_instructor" name="Instructor" parent="menu_instructor_root" sequence="1" action="action_instructor_view"/>

Ya tenemos casi listo nuestro módulo, ahora debemos darle permiso para que se muestre en nuestro odoo, y para eso debemos generar el archivo CSV de nuestra carpeta security, su estructura es la siguiente:

ir.model.access.csv

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_certificados_usuario,certificados.usuario,model_certificados_cert,group_shool_startel_usuario,1,1,1,1

dejo lo que significa cada item

· id = identificación única para el permiso (Ejemplo: MY_MODULE_res_partner_manager)

· nombre = nombre único para el permiso (Ejemplo: res_partner manager)

· model_id/id = el nombre único del modelo de la clase en la que desea aplicar el permiso (Ejemplo model_res_partner)

· group_id/id = se aplica el permiso de grupo (yopu puede definirlo en un archivo de grupo xml o llamar a un grupo existente con sintaxis module.group_id)

· perm_read,perm_write,perm_create,perm_unlink = los 4 valores para el permiso relativo para leer, escribir, crear y desvincular registros en una clase definida. 1 es Verdadero (puedes hacer esta acción) y 0 es Falso (no puedes)

Como te podrás dar cuenta en la estructura del nuestra carpeta principal del my_modulo, hay dos archivos, el _init_.py y el _manifest_.py.

El método init se usa principalmente para la inicialización del modelo o las operaciones de la base de datos después de instalar o actualizar el módulo.

__init__.py

# -*- coding: utf-8 -*-

from . import models

El archivo de manifiesto sirve para declarar un paquete de python como un módulo de Odoo y para especificar los metadatos del módulo.

Es un archivo llamado __manifest__.pyy contiene un solo diccionario de Python, donde cada clave especifica los metadatos del módulo.

__manifest__.py

{
    'name': "My Modulo",
    'version': '15.0.4.0.0',
    'sequence': 1,

    'description': """
        Módulo CRM para la gestión de registro...
    """,

    'author': "Odoo",
    'website': "http://odoo.com",
    
    'category': 'Escuela de Conduccion',
    'license': 'LGPL-3',

    # any module necessary for this one to work correctly
    'depends': ['base'],

    # always loaded
    'data': [
        'security/ir.model.access.csv',
        'views/views.xml',
    ],
}

Los campos de manifiesto disponibles son:

name( str, requerido)

el nombre legible por humanos del módulo

version (str)

la versión de este módulo debe seguir las reglas de control de versiones semánticas

description (str)

descripción extendida para el módulo, en reStructuredText

author (str)

nombre del autor del módulo

website (str)

URL del sitio web del autor del módulo

depends (list(str))

Módulos de Odoo que deben cargarse antes que este, ya sea porque este módulo usa funciones que ellos crean o porque altera los recursos que definen.

Cuando se instala un módulo, todas sus dependencias se instalan antes que él. Del mismo modo, las dependencias se cargan antes de cargar un módulo.

data (list(str))

Lista de archivos de datos que siempre deben instalarse o actualizarse con el módulo. Una lista de rutas desde el directorio raíz del módulo.

Te dejo un link donde podras tener mas informacion con respecto a lo que significa cada item: https://www.odoo.com/documentation/15.0/es/developer/reference/backend/module.html

Bueno ya llegando al final de esta, guía esto sería lo básico para poder crear tu módulo en odoo, ahora te toca a ti poder seguir investigando para que puedas desarrollar más profesionalmente tu módulo, ya que podrás incorporar mucho más cosas a tus vistas, espero que sea de ayuda para ti, con este pequeño aporte.

Scroll al inicio