Construir un módulo Odoo
Tanto las extensiones de servidor como de cliente se empaquetan como módulos _que opcionalmente se cargan en una _base de datos.
Los módulos Odoo pueden agregar una nueva lógica comercial a un sistema Odoo o alterar y ampliar la lógica empresarial existente: se puede crear un módulo para agregar las reglas contables de su país al soporte de contabilidad genérica de Odoo, mientras que el siguiente módulo añade soporte para la visualización en tiempo real de una flota de autobuses.
Todo en Odoo así comienza y termina con módulos.
Composición de un módulo
Un módulo Odoo puede contener una serie de elementos:
Objetos de negocio
Declarados como clases Python, estos recursos son persistidos automáticamente por Odoo en función de su configuración
Archivos de información
Archivos XML o CSV que declaran metadatos (vistas o flujos de trabajo), datos de configuración (parametrización de módulos), datos de demostración y más
Controladores web
Gestionar solicitudes desde navegadores web
Datos web estáticos
Imágenes, archivos CSS o javascript utilizados por la interfaz web o sitio web
Estructura del módulo
Cada módulo es un directorio dentro de un directorio de módulos.Los directorios de módulo se especifican mediante la
--addons-path
opción.
Un módulo Odoo es declarado por su manifiesto.Consulte la documentación del manifiesto sobre el mismo.
Un módulo es también un paquete de Python con un__init__.py
archivo, que contiene instrucciones de importación para varios archivos Python en el módulo.
Por ejemplo, si el módulo tiene un solomymodule.py
archivo__init__.py
puede contener:
from . import mymodule
Odoo proporciona un mecanismo para ayudar a configurar un nuevo módulo,odoo-bin tiene un andamio de subcomando para crear un módulo vacío: creacion de un modulo con git en windows,iniciar git en server.
$ ./odoo-bin.exe scaffold C:/desarrollo
El comando crea un subdirectorio para su módulo y crea automáticamente un montón de archivos estándar para un módulo.La mayoría de ellos simplemente contienen código comentado o XML.El uso de la mayoría de esos archivos se explicará a lo largo de este tutorial.
Ejercicio_____________________________________________________________________________
Módulo de creación
Utilice la línea de comandos anterior para crear un módulo vacío Open Academy e instálelo en Odoo.
- Invoque el comando
odoo-bin scaffold openacademy addons
. - Adapte el archivo de manifiesto a su módulo.
- No te preocupes por los otros archivos.
**openacademy/\_manifest__.py**_
# -*- coding: utf-8 -*-
{
'name': "Open Academy",
'summary': """Manage trainings""",
'description': """
Open Academy module for managing trainings:
- training courses
- training sessions
- attendees registration
""",
'author': "My Company",
'website': "http://www.yourcompany.com",
# Categories can be used to filter modules in modules listing
# Check https://github.com/odoo/odoo/blob/master/odoo/addons/base/module/module_data.xml
# for the full list
'category': 'Test',
'version': '0.1',
# any module necessary for this one to work correctly
'depends': ['base'],
# always loaded
'data': [
# 'security/ir.model.access.csv',
'templates.xml',
],
# only loaded in demonstration mode
'demo': [
'demo.xml',
],
}
**openacademy/\_init__.py**_
# -*- coding: utf-8 -*-
from . import controllers
from . import models
openacademy/controllers.py
# -*- coding: utf-8 -*-
from odoo import http
# class Openacademy(http.Controller):
# @http.route('/openacademy/openacademy/', auth='public')
# def index(self, **kw):
# return "Hello, world"
# @http.route('/openacademy/openacademy/objects/', auth='public')
# def list(self, **kw):
# return http.request.render('openacademy.listing', {
# 'root': '/openacademy/openacademy',
# 'objects': http.request.env['openacademy.openacademy'].search([]),
# })
# @http.route('/openacademy/openacademy/objects/<model("openacademy.openacademy"):obj>/', auth='public')
# def object(self, obj, **kw):
# return http.request.render('openacademy.object', {
# 'object': obj
# })
openacademy/models.py
# -*- coding: utf-8 -*-
from odoo import models, fields, api
# class openacademy(models.Model):
# _name = 'openacademy.openacademy'
# name = fields.Char()
openacademy/security/ir.model.access.csv
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_openacademy_openacademy,openacademy.openacademy,model_openacademy_openacademy,,1,0,0,0
openacademy/templates.xml
<odoo>
<data>
<!-- <template id="listing"> -->
<!-- <ul> -->
<!-- <li t-foreach="objects" t-as="object"> -->
<!-- <a t-attf-href="{{ root }}/objects/{{ object.id }}"> -->
<!-- <t t-esc="object.display_name"/> -->
<!-- </a> -->
<!-- </li> -->
<!-- </ul> -->
<!-- </template> -->
<!-- <template id="object"> -->
<!-- <h1><t t-esc="object.display_name"/></h1> -->
<!-- <dl> -->
<!-- <t t-foreach="object._fields" t-as="field"> -->
<!-- <dt><t t-esc="field"/></dt> -->
<!-- <dd><t t-esc="object[field]"/></dd> -->
<!-- </t> -->
<!-- </dl> -->
<!-- </template> -->
</data>
</odoo>