¡Bienvenido a los foros Aeodoo!

Somos la comunidad de Odoo internacional hispanohablante.
Estos foros son para compartir y debatir dudas técnicas, funcionales y mejores prácticas para Odoo. Recuerda que no están permitidos los insultos, descalificaciones o spam, cualquier conducta reprobable supondrá el baneo del usuario.

 
Ocultar IntroRegistro

This question has been flagged
3 Replies
147 Views

 Contexto general:

Estoy desarrollando un módulo personalizado en Odoo 17 llamado amazon_purchase. Este módulo tiene como objetivo gestionar órdenes de compra de Amazon, y está compuesto por su propio modelo, vistas y menús.

Entorno técnico:

  • Versión de Odoo: 17.0
  • Sistema operativo: Ubuntu Server 22.04
  • Ruta de instalación: /opt/odoo17/odoo-server/
  • Ruta de addons personalizados: /opt/odoo17/odoo-server/addons/
  • Usuario que ejecuta Odoo: odoo
  • Base de datos: ofituria

Lo que he hecho hasta ahora:

  1. He creado el módulo amazon_purchase con la siguiente estructura:

amazon_purchase/

├── __init__.py

├── __manifest__.py

├── models/

│   ├── __init__.py

│   └── purchase_order.py

└── views/

    ├── purchase_order_views.xml

    └── amazon_purchase_menus.xml


-----------------------

  Modelo Python (models/purchase_order.py):  

from odoo import models, fields


class AmazonPurchaseOrder(models.Model):

    _name = 'amazon.purchase.order'

    _description = 'Amazon Purchase Order'


    name = fields.Char(string='PO', required=True)

    asin = fields.Char(string='ASIN')

    ean = fields.Char(string='EAN')

    sku = fields.Char(string='SKU')

    product_name = fields.Char(string='Nombre del Producto')

    quantity = fields.Integer(string='Cantidad')

    order_date = fields.Date(string='Fecha de pedido')

    delivery_date = fields.Date(string='Fecha de entrega')

    state = fields.Selection([

        ('draft', 'Borrador'),

        ('confirmed', 'Confirmado'),

        ('done', 'Finalizado'),

    ], default='draft', string='Estado')

---------------------------------------------------------------

Vistas XML:

  • purchase_order_views.xml define una vista árbol y una de formulario, así como una acción ir.actions.act_window:

<odoo>

<record id="view_amazon_purchase_order_tree" model="ir.ui.view">

  <field name="name">amazon.purchase.order.tree</field>

  <field name="model">amazon.purchase.order</field>

  <field name="arch" type="xml">

    <tree>

      <field name="name"/>

      <field name="sku"/>

      <field name="product_name"/>

      <field name="quantity"/>

      <field name="state"/>

    </tree>

  </field>

</record>


<record id="view_amazon_purchase_order_form" model="ir.ui.view">

  <field name="name">amazon.purchase.order.form</field>

  <field name="model">amazon.purchase.order</field>

  <field name="arch" type="xml">

    <form>

      <sheet>

        <group>

          <field name="name"/>

          <field name="asin"/>

          <field name="ean"/>

          <field name="sku"/>

          <field name="product_name"/>

          <field name="quantity"/>

          <field name="order_date"/>

          <field name="delivery_date"/>

          <field name="state"/>

        </group>

      </sheet>

    </form>

  </field>

</record>


<record id="amazon_purchase_order_action" model="ir.actions.act_window">

  <field name="name">Pedidos Amazon</field>

  <field name="res_model">amazon.purchase.order</field>

  <field name="view_mode">tree,form</field>

</record>

</odoo>

-------------------------------------------------------

  • amazon_purchase_menus.xml define los menús:

<odoo>

<menuitem id="menu_amazon_purchase_root" name="Amazon Purchase"/> <menuitem id="menu_amazon_purchase_orders" name="Ordenes de compra" parent="menu_amazon_purchase_root" action="amazon_purchase_order_action"/> </odoo>


---------------------------------------

manifest (__manifest__.py): {

    'name': 'Amazon Purchase',

    'version': '1.0',

    'category': 'Inventory',

    'summary': 'Gestión de órdenes de compra de Amazon',

    'description': 'Este módulo permite registrar y gestionar pedidos de Amazon Vendor.',

    'author': 'Yo mismo',

    'depends': ['base'],

    'data': [

        'views/purchase_order_views.xml',

        'views/amazon_purchase_menus.xml',

    ],

    'installable': True,

    'application': True,

    'license': 'LGPL-3',

}

----------------------------------------


He actualizado el módulo con:

./odoo-bin -d ofituria -u amazon_purchase


Y el log indica que todo se carga correctamente, sin errores de dependencias ni errores de vista.El módulo aparece en el menú de aplicaciones y se instala correctamente desde la interfaz web.

El módulo aparece en el menú de aplicaciones y se instala correctamente desde la interfaz web.

El problema: Tras instalar el módulo, NO aparece ningún menú, vista, ni acción visible en el frontend. No hay errores en el log, ni al instalar ni al actualizar el módulo. He comprobado que: - El modelo se define bien

- Las vistas XML se cargan y están en el manifest.

- El ID de la acción amazon_purchase_order_action está correctamente referenciado en el menú

- El modelo amazon.purchase.order aparece en la base de datos ( ir_model ) ¿Que he probado para depurar?

- Ejecutar odoo desde consola con ./odoo-bin -d ofituria -u amazon_purchase

- Confirmar que el XML está en la base de datos vía ir.ui.menu, ir.actions.act_window, ir.model

- Verificar que las rutas de addons están bien configuradas

- Confirmar que los permisos de archivos y carpetas son correctos.

Avatar
Discard

No has puesto seguridad en el modelo.

Avatar
Discard
Author

Tienes razón. Me faltaba crear el directorio amazon_purchase/security

Y dentro de este poner el csv: ir.model.access.csv

He reiniciado odoo, he actualizado el modulo y ya me ha cargado en la interfaz. Muchas gracias por el comentario!

Author

Solucionado. El modelo amazon.purchase.order estaba bien definido, pero al parecer si no defino reglas de acceso, Odoo lo oculta totalmente en el backend por seguridad.

Para ello he creado el directorio security con su respectivo fichero csv dentro para dar acceso total a todos los usuarios al modelo.

Por ultimo lo he referenciado en el manifest, he reiniciado odoo y ya funciona. 


Avatar
Discard

Has puesto el modelo en el csv en la carpeta security?

Avatar
Discard
Author

Me faltaba crear el directorio amazon_purchase/security

Y dentro de este poner el csv: ir.model.access.csv

He reiniciado odoo, he actualizado el modulo y ya me ha cargado en la interfaz. Muchas gracias por el comentario!