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 -*-
|
||||
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
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