¡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.

This question has been flagged
2 Replies
96 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.

Ruego que le heches un vistazo a esto y me des alguna sugerencia o guía.

Avatar
Discard

Hola, desde hace bastantes versiones, es obligatorio definir los permisos para modelos nuevos, con lo cual tienes que definir el típico fichero .csv, que puedes ver en cualquier modulo del core dentro de la carpeta security. Si no, no te aparecerán los menús, aunque el modulo instale sin ningún tipo de error.


Un saludo.

Avatar
Discard

Your Answer

Please try to give a substantial answer. If you wanted to comment on the question or answer, just use the commenting tool. Please remember that you can always revise your answers - no need to answer the same question twice. Also, please don't forget to vote - it really helps to select the best questions and answers!