- Cambiar tree a list en todas las vistas
- Eliminar vista kanban (requiere formato diferente en Odoo 17+)
- Simplificar vista de búsqueda
- Simplificar herencia de res.partner (quitar xpaths problemáticos)
- Agregar store=True a campos computados para filtros
- Importar post_init_hook en __init__.py
- Usar @api.model_create_multi para método create
Probado y funcionando en Odoo 19.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 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>
- Renombrar campo 'metadata' a 'extra_data' (palabra reservada SQLAlchemy)
- Agregar email-validator para pydantic[email]
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>
- Changed npm ci to npm install in Dockerfiles (no lock files)
- Added git to whatsapp-core alpine image for npm dependencies
- Fixed TypeScript type errors in routes.ts (string | string[])
- Fixed SessionManager.ts type compatibility with Baileys
- Disabled noUnusedLocals/noUnusedParameters in frontend tsconfig
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add webhook endpoints to receive events from Odoo (sale orders, stock
picking, invoices) and send WhatsApp notifications when orders are
confirmed, shipped, or payments are received.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add bidirectional contact synchronization between WhatsApp Central and Odoo,
including sync endpoints and ContactSyncService.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add OdooConfig page component with form for Odoo connection settings
(URL, database, username, API key) and test connection functionality.
Integrate into main navigation with ApiOutlined icon.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace hardcoded if/elif chain in _execute_node with dynamic node
executor lookup via NodeRegistry. All node executors are registered at
module load time, enabling extensibility without modifying engine code.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>