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:
parent
88d3ded083
commit
dde56b907e
17
.claude/settings.local.json
Normal file
17
.claude/settings.local.json
Normal 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
38
issue_content.txt
Normal 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
|
|
@ -1,5 +1,6 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from odoo import models, fields
|
from odoo import models, fields, api
|
||||||
|
from odoo.exceptions import ValidationError
|
||||||
|
|
||||||
class ProductTemplate(models.Model):
|
class ProductTemplate(models.Model):
|
||||||
_inherit = 'product.template'
|
_inherit = 'product.template'
|
||||||
|
@ -31,3 +32,27 @@ class ProductTemplate(models.Model):
|
||||||
string="Is a Sample Type",
|
string="Is a Sample Type",
|
||||||
help="Check if this product represents a type of laboratory sample container."
|
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
13
pr_description.txt
Normal 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.
|
Loading…
Reference in New Issue
Block a user