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-pathopció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__.pyarchivo, que contiene instrucciones de importación para varios archivos Python en el módulo.

Por ejemplo, si el módulo tiene un solomymodule.pyarchivo__init__.pypuede 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.

  1. Invoque el comando odoo-bin scaffold openacademy addons .
  2. Adapte el archivo de manifiesto a su módulo.
  3. 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>

results matching ""

    No results matching ""