feat(#7): Anadir campo de recolector a muestras

- Anadido el campo 'collector_id' al modelo stock.lot.
- Actualizadas las vistas de lista y formulario para incluir el nuevo campo.
- Actualizados los datos de demostracion para asignar un recolector.
- Actualizado el plan de desarrollo.
This commit is contained in:
Luis Ernesto Portillo Zaldivar 2025-07-14 09:39:58 -06:00
parent a047cd1a02
commit 45af1771fa
5 changed files with 33 additions and 27 deletions

View File

@ -10,11 +10,13 @@ Extender el modelo de Lotes/Números de Serie de Odoo (`stock.lot`) para represe
- [x] Crear el archivo `lims_management/models/stock_lot.py`.
- [x] Heredar del modelo `stock.lot`.
- [x] Añadir campos: `is_lab_sample`, `patient_id`, `request_id`, `collection_date`, `container_type`.
- [ ] **(Nuevo)** Añadir campo `collector_id` (Many2one a `res.users`) para registrar quién tomó la muestra.
- [x] **Adaptar las Vistas de Lote/Número de Serie:**
- [x] Crear el archivo `lims_management/views/stock_lot_views.xml`.
- [x] Crear vistas de lista y formulario para las muestras.
- [x] Crear un producto de servicio por defecto para las muestras.
- [ ] **(Nuevo)** Añadir el campo `collector_id` a las vistas de lista y formulario.
- [x] **Crear el Menú "Gestión de Muestras":**
- [x] Modificar `lims_management/views/menus.xml`.
@ -30,32 +32,26 @@ Extender el modelo de Lotes/Números de Serie de Odoo (`stock.lot`) para represe
- [x] **Verificación Final:**
- [x] Reiniciar y verificar la instancia de Odoo.
- [x] **Mejorar Modelo de Productos para Tipos de Muestra:**
- [x] Añadir un campo booleano `is_sample_type` al modelo `product.template`.
- [x] **Crear Menú para "Tipos de Muestra":**
- [x] Añadir acción de ventana y `menuitem` para los tipos de muestra.
- [x] **Actualizar Vista de Muestras (`stock.lot`):**
- [x] Hacer visible y aplicar dominio al campo `product_id` (Tipo de Muestra).
- [x] Eliminar el producto genérico y su referencia en el contexto.
- [x] **Crear Datos de Demostración:**
- [x] Crear archivo `demo/z_sample_demo.xml` con tipos de muestra y muestras de ejemplo.
- [x] Añadir el archivo de demostración al manifiesto.
- [ ] **(Nuevo)** Actualizar los datos de demostración para incluir el `collector_id`.
- [x] **Verificación Final (con Demo):**
- [x] Validar la funcionalidad completa con los datos de demostración.
---
## Consideraciones Futuras (Siguientes Issues)
## **Nuevas Tareas (Feedback)**
- [ ] **Mejorar Modelo de Productos para Tipos de Muestra:**
- [ ] Añadir un campo booleano `is_sample_type` al modelo `product.template` en `lims_management/models/product.py`.
- [ ] **Crear Menú para "Tipos de Muestra":**
- [ ] En `lims_management/views/menus.xml`, añadir una nueva acción de ventana y un `menuitem` en "Configuración".
- [ ] La acción debe mostrar los productos que tengan `is_sample_type = True`.
- [ ] El `context` de la acción debe preestablecer `default_is_sample_type = True` y `default_type = 'service'`.
- [ ] **Actualizar Vista de Muestras (`stock.lot`):**
- [ ] En `lims_management/views/stock_lot_views.xml`, hacer visible el campo `product_id` (Tipo de Muestra).
- [ ] Aplicar un dominio al campo `product_id` para que solo muestre productos con `is_sample_type = True`.
- [ ] Eliminar el `default_product_id` del contexto de la acción de la muestra.
- [ ] Eliminar el producto genérico "Lab Sample" del archivo de datos.
- [ ] **Crear Datos de Demostración:**
- [ ] Crear el archivo `lims_management/demo/z_sample_demo.xml`.
- [ ] Añadir registros de `product.template` para diferentes tipos de muestra (ej. "Tubo de Suero", "Tubo EDTA").
- [ ] Añadir registros de `stock.lot` que representen muestras reales, usando los pacientes y los nuevos tipos de muestra de demostración.
- [ ] Añadir el nuevo archivo de demostración al `__manifest__.py`.
- [ ] **Verificación Final (con Demo):**
- [ ] Reactivar temporalmente la carga de datos de demostración en `init_odoo.py`.
- [ ] Reiniciar la instancia (`docker-compose down -v` y `docker-compose up -d`).
- [ ] Revisar logs y verificar la funcionalidad completa en la interfaz de Odoo.
- [ ] Desactivar nuevamente la carga de datos de demostración al finalizar.
- **Ciclo de Vida de la Muestra:** Implementar un campo de estado (`state`) con su lógica de transiciones (ej. 'Recolectada' -> 'Recibida' -> 'En Proceso' -> 'Completada' -> 'Almacenada').
- **Informes de Muestras:** Crear informes en PDF o vistas dinámicas sobre el estado y trazabilidad de las muestras.

View File

@ -24,6 +24,7 @@
<field name="product_id" model="product.product" eval="obj().env.ref('lims_management.sample_type_serum').product_variant_id.id"/>
<field name="is_lab_sample" eval="True"/>
<field name="patient_id" ref="lims_management.demo_patient_1"/>
<field name="collector_id" ref="base.user_admin"/>
<field name="collection_date" eval="(DateTime.now() - timedelta(days=2)).strftime('%Y-%m-%d %H:%M:%S')"/>
<field name="container_type">serum_tube</field>
</record>
@ -32,6 +33,7 @@
<field name="product_id" model="product.product" eval="obj().env.ref('lims_management.sample_type_edta').product_variant_id.id"/>
<field name="is_lab_sample" eval="True"/>
<field name="patient_id" ref="lims_management.demo_patient_2"/>
<field name="collector_id" ref="base.user_admin"/>
<field name="collection_date" eval="(DateTime.now() - timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S')"/>
<field name="container_type">edta_tube</field>
</record>

View File

@ -27,3 +27,9 @@ class StockLot(models.Model):
('urine', 'Urine Container'),
('other', 'Other')
], string='Container Type')
collector_id = fields.Many2one(
'res.users',
string='Collected by',
default=lambda self: self.env.user
)

View File

@ -12,6 +12,7 @@
<field name="patient_id"/>
<field name="product_id" string="Sample Type"/>
<field name="collection_date"/>
<field name="collector_id"/>
<field name="container_type"/>
</list>
</field>
@ -40,6 +41,7 @@
</group>
<group>
<field name="collection_date"/>
<field name="collector_id"/>
<field name="container_type"/>
</group>
</group>