feat(#44): Add required_sample_type_id field to ProductTemplate model

- Added required_sample_type_id Many2one field to link analyses with sample types
- Added sample_volume_ml field to specify required sample volume
- Added validation constraints to ensure fields are only used for analysis products
- Import api and ValidationError for field validations

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Luis Ernesto Portillo Zaldivar 2025-07-14 20:35:41 -06:00
parent 88d3ded083
commit dde56b907e
4 changed files with 94 additions and 1 deletions

View File

@ -0,0 +1,17 @@
{
"permissions": {
"allow": [
"Bash(python:*)",
"Bash(tea issue:*)",
"Bash(git add:*)",
"Bash(git push:*)",
"Bash(git checkout:*)",
"Bash(git pull:*)",
"Bash(git stash:*)",
"Bash(git commit:*)",
"Bash(docker-compose up:*)",
"Bash(docker:*)"
],
"deny": []
}
}

38
issue_content.txt Normal file
View File

@ -0,0 +1,38 @@
**Contexto:**
Para poder implementar la automatización de generación de muestras (Issue #32), es necesario establecer una relación entre los productos tipo análisis y los tipos de muestra que requieren.
**Problema Actual:**
- Los productos tipo test (is_analysis=True) no tienen campo que indique qué tipo de muestra requieren
- Los productos tipo muestra (is_sample_type=True) no están relacionados con los tests
- El modelo stock.lot tiene container_type como Selection hardcodeado, no como relación
**Tareas Requeridas:**
1. **Modificar product.template:**
- Agregar campo Many2one 'required_sample_type_id' que relacione análisis con tipo de muestra
- Domain: [('is_sample_type', '=', True)]
2. **Actualizar stock.lot:**
- Opción A: Cambiar container_type de Selection a Many2one hacia product.template
- Opción B: Agregar nuevo campo sample_type_product_id
- Mantener compatibilidad con datos existentes
3. **Actualizar vistas:**
- Agregar campo en formulario de productos cuando is_analysis=True
- Mostrar tipo de muestra requerida en vistas de análisis
4. **Migración de datos:**
- Mapear valores actuales de container_type a productos tipo muestra
- Actualizar registros existentes
5. **Actualizar demo data:**
- Asignar tipos de muestra correctos a cada análisis
- Ejemplo: Hemograma → Tubo EDTA, Glucosa → Tubo Suero
**Beneficios:**
- Permitirá automatizar la generación de muestras al confirmar órdenes
- Evitará errores al saber exactamente qué contenedor usar para cada test
- Facilitará la agrupación de análisis que usan el mismo tipo de muestra
**Dependencia:**
Este issue es prerequisito para poder implementar el Issue #32

View File

@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
from odoo import models, fields
from odoo import models, fields, api
from odoo.exceptions import ValidationError
class ProductTemplate(models.Model):
_inherit = 'product.template'
@ -31,3 +32,27 @@ class ProductTemplate(models.Model):
string="Is a Sample Type",
help="Check if this product represents a type of laboratory sample container."
)
required_sample_type_id = fields.Many2one(
'product.template',
string='Tipo de Muestra Requerida',
domain="[('is_sample_type', '=', True)]",
help="Tipo de muestra/contenedor requerido para realizar este análisis"
)
sample_volume_ml = fields.Float(
string='Volumen Requerido (ml)',
help="Volumen de muestra requerido en mililitros para realizar este análisis"
)
@api.constrains('required_sample_type_id', 'is_analysis')
def _check_sample_type_for_analysis(self):
for product in self:
if product.required_sample_type_id and not product.is_analysis:
raise ValidationError("Solo los productos marcados como 'Es un Análisis Clínico' pueden tener un tipo de muestra requerida.")
@api.constrains('sample_volume_ml', 'is_analysis')
def _check_volume_for_analysis(self):
for product in self:
if product.sample_volume_ml and not product.is_analysis:
raise ValidationError("Solo los productos marcados como 'Es un Análisis Clínico' pueden tener un volumen requerido.")

13
pr_description.txt Normal file
View File

@ -0,0 +1,13 @@
Este Pull Request implementa el ciclo de vida completo para las muestras clínicas en el modelo `stock.lot`, incluyendo:
- Adición de un campo de estado (`state`) y métodos de transición (`action_receive`, `action_start_analysis`, etc.).
- Integración de un `header` con botones de acción y un `statusbar` en la vista de formulario de `stock.lot`.
- Ajuste de la visibilidad de botones y campos según el estado de la muestra.
Además, se han realizado las siguientes mejoras en las herramientas de desarrollo:
- Actualización de `GEMINI.md` con instrucciones detalladas sobre el uso de la API de Gitea para la gestión de issues y pull requests.
- Introducción del script `gitea_cli_helper.py`, una herramienta robusta basada en Python para interactuar con la API de Gitea, permitiendo:
- Creación de issues con descripciones multilínea.
- Creación de pull requests.
- Comentar en issues.
- Cerrar issues.
- Actualización del archivo `.env` para incluir las variables de configuración necesarias para la API de Gitea.