diff --git a/CLAUDE.md b/CLAUDE.md index 7367ec5..b9ef5cc 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -301,4 +301,52 @@ Cuando crees modelos que se relacionan entre sí en el mismo issue: - [ ] ¿Los modelos referenciados en relaciones ya existen? - [ ] ¿Las acciones/vistas referenciadas se cargan ANTES? - [ ] ¿Los grupos en ir.model.access.csv coinciden con los de security.xml? -- [ ] ¿Usaste `id` en lugar de `active_id` en contextos de formulario? \ No newline at end of file +- [ ] ¿Usaste `id` en lugar de `active_id` en contextos de formulario? +- [ ] ¿Verificaste que todos los campos en las vistas existen en los modelos? +- [ ] ¿Los nombres de métodos/acciones coinciden exactamente con los definidos en Python? +- [ ] ¿Los widgets utilizados son válidos en Odoo 18? + +### Desarrollo de vistas - Mejores prácticas + +#### Antes de crear vistas: +1. **Verificar campos del modelo**: SIEMPRE revisar qué campos existen con `grep "fields\." models/archivo.py` +2. **Verificar métodos disponibles**: Buscar métodos con `grep "def action_" models/archivo.py` +3. **Verificar campos relacionados**: Confirmar que los campos related tienen la ruta correcta + +#### Orden de creación de vistas: +1. **Primero**: Definir todas las acciones (ir.actions.act_window) en un solo lugar +2. **Segundo**: Crear las vistas (form, list, search, etc.) +3. **Tercero**: Crear los menús que referencian las acciones +4. **Cuarto**: Si hay referencias cruzadas entre archivos, considerar consolidar en un solo archivo + +#### Widgets válidos en Odoo 18: +- Numéricos: `float`, `integer`, `monetary` (NO `float_time` para datos generales) +- Texto: `text`, `char`, `html` (NO `text_emojis`) +- Booleanos: `boolean`, `boolean_toggle`, `boolean_button` +- Selección: `selection`, `radio`, `selection_badge` +- Relaciones: `many2one`, `many2many_tags` +- Estado: `statusbar`, `badge`, `progressbar` + +#### Errores comunes y soluciones: + +##### Error: "External ID not found" +- **Causa**: Referencia a un ID que aún no fue cargado +- **Solución**: Reorganizar orden en __manifest__.py o mover definición al mismo archivo + +##### Error: "Field 'X' does not exist" +- **Causa**: Vista referencia campo inexistente en el modelo +- **Solución**: Verificar modelo y agregar campo o corregir nombre en vista + +##### Error: "action_X is not a valid action" +- **Causa**: Nombre de método incorrecto en botón +- **Solución**: Verificar nombre exacto del método en el modelo Python + +##### Error: "Invalid widget" +- **Causa**: Uso de widget no existente o deprecated +- **Solución**: Usar widgets estándar de Odoo 18 + +#### Estrategia de depuración: +1. Leer el error completo en los logs +2. Identificar archivo y línea exacta del problema +3. Verificar que el elemento referenciado existe y está accesible +4. Si es necesario, simplificar la vista temporalmente para aislar el problema \ No newline at end of file