fix(#5): Corregir error de evaluacion de contexto en accion de ventana

This commit is contained in:
Luis Ernesto Portillo Zaldivar 2025-07-14 00:34:54 -06:00
parent b78e71ac5c
commit 8f9e6582be
3 changed files with 38 additions and 10 deletions

View File

@ -141,6 +141,10 @@ Busca errores en la salida. Si encuentras alguno, debes presentar un resumen del
- **Permisos incorrectos:** Problemas de acceso a archivos o directorios.
- **Datos incorrectos:** Errores en los archivos de datos de demostración o iniciales.
### Política de Persistencia de la Instancia
Después de una instalación o actualización exitosa, la instancia de Odoo **debe permanecer activa** para permitir la validación manual por parte del usuario. **No se debe detener la instancia** (`docker-compose down -v`) hasta que el usuario confirme explícitamente que ha finalizado sus pruebas.
---
## Convenciones de Desarrollo en Odoo 18
@ -212,4 +216,28 @@ O, de forma equivalente:
```xml
<field name="special_field" invisible="is_special == False"/>
```
### Uso de `ref()` en el Contexto de Acciones de Ventana
La función `ref('module.xml_id')` se utiliza para obtener el ID de base de datos de un registro a partir de su ID XML. Sin embargo, esta función **solo existe en el servidor**.
Cuando se define el `context` de una acción de ventana (`ir.actions.act_window`), este se evalúa en el cliente (navegador), donde `ref()` no está definido, causando un error `Name 'ref' is not defined`.
Para solucionar esto, el `context` debe ser evaluado en el servidor utilizando el atributo `eval`.
**Forma Incorrecta:**
```xml
<field name="context">{
'default_categ_id': ref('lims_management.product_category_analysis')
}</field>
```
Esto envía la cadena `"{'default_categ_id': ref(...)}"` al cliente, que no puede procesarla.
**Forma Correcta:**
```xml
<field name="context" eval="{
'default_categ_id': ref('lims_management.product_category_analysis')
}"/>
```
Al usar `eval`, Odoo ejecuta la expresión en el servidor, reemplaza `ref(...)` por el ID numérico correspondiente, y envía un diccionario JSON válido al cliente.
```

View File

@ -29,14 +29,14 @@
- [x] Mostrar campos condicionalmente (`is_analysis = True`).
- [x] Crear una vista de árbol independiente para los rangos de referencia (`lims.analysis.range`).
- [x] En la vista de formulario del producto, referenciar la nueva vista de árbol para el campo `value_range_ids`.
- [ ] **(Nuevo)** Modificar las etiquetas en la acción de ventana para que se muestre "Análisis Clinico" en lugar de "Producto".
- [x] **(Nuevo)** Modificar las etiquetas en la acción de ventana para que se muestre "Análisis Clinico" en lugar de "Producto".
- [x] **Crear el Menú "Catálogo de Análisis":**
- [x] Modificar `lims_management/views/menus.xml`.
- [x] Crear una nueva acción de ventana (`ir.actions.act_window`).
- [ ] **(Nuevo)** Definir valores por defecto en el `context` de la acción para: `type`, `purchase_ok`, `categ_id`.
- [ ] **(Nuevo)** Crear la categoría de producto "Análisis Clínico" mediante un archivo de datos.
- [x] **(Nuevo)** Definir valores por defecto en el `context` de la acción para: `type`, `purchase_ok`, `categ_id`.
- [x] **(Nuevo)** Crear la categoría de producto "Análisis Clínico" mediante un archivo de datos.
- [x] Crear un `menuitem` para "Catálogo de Análisis".
- [x] **Actualizar el Manifiesto (`__manifest__.py`):**
@ -49,11 +49,11 @@
- [x] Revisar logs de `odoo_init`.
- [x] Verificar la funcionalidad en la interfaz de Odoo.
- [ ] **(Nuevo) Crear Datos de Demostración:**
- [ ] Crear el archivo `demo/analysis_demo.xml`.
- [ ] Definir registros de ejemplo para análisis clínicos (Hemograma, Perfil Lipídico, etc.).
- [ ] Asegurarse de que los datos de demostración incluyan la configuración de los rangos de referencia.
- [ ] Añadir el archivo `analysis_demo.xml` a la clave `demo` en `__manifest__.py`.
- [x] **(Nuevo) Crear Datos de Demostración:**
- [x] Crear el archivo `demo/analysis_demo.xml`.
- [x] Definir registros de ejemplo para análisis clínicos (Hemograma, Perfil Lipídico, etc.).
- [x] Asegurarse de que los datos de demostración incluyan la configuración de los rangos de referencia.
- [x] Añadir el archivo `analysis_demo.xml` a la clave `demo` en `__manifest__.py`.
---

View File

@ -66,12 +66,12 @@
<field name="res_model">product.template</field>
<field name="view_mode">kanban,form</field>
<field name="domain">[('is_analysis', '=', True)]</field>
<field name="context">{
<field name="context" eval="{
'default_is_analysis': True,
'default_type': 'service',
'default_purchase_ok': False,
'default_categ_id': ref('lims_management.product_category_analysis')
}</field>
}"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Crea un nuevo análisis clínico