- unread_count: necesario para filtros de búsqueda
- last_message_preview: necesario para vistas
Campos computados sin store=True no pueden usarse en dominios de filtros.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Reemplazar <tree> por <list> en todas las vistas
- Cambiar mode="tree" a mode="list"
- Actualizar view_partner_tree a view_partner_list
- Actualizar view_mode de tree,form a list,form
En Odoo 17+, el tipo de vista "tree" fue renombrado a "list".
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Cargar vistas con acciones ANTES del menú
- Mover whatsapp_data.xml al final (necesita modelos registrados)
El menú referencia acciones que deben existir primero.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Usar @api.model_create_multi en lugar de @api.model
- Manejar vals_list como lista de diccionarios
En Odoo 17+, create() recibe una lista de valores, no un diccionario único.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Crear hooks.py con post_init_hook que crea permisos programáticamente
- Eliminar security/ directory (XML/CSV fallan en importación ZIP)
- Los permisos se crean después de que los modelos estén registrados
Esto garantiza que los permisos se creen correctamente independientemente
del método de instalación (ZIP o addons path).
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Eliminar ir.model.access.csv (falla en importación ZIP)
- Crear ir_model_access.xml con registros de acceso
- Mover security al final del manifest (después de cargar modelos)
- Regenerar ZIP del módulo
El problema era que al importar vía ZIP, Odoo procesa el CSV
antes de registrar los modelos Python, causando error de external ID.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Cambiar model_id:id a model_id/id (formato correcto)
- Agregar prefijo odoo_whatsapp_hub. a todas las referencias de modelo
- Necesario para que Odoo resuelva correctamente los IDs externos
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>