
- Fixed missing action_collect method for pending_collection state - Updated all model field labels to Spanish - Updated view labels and strings to Spanish - Fixed readonly conditions for pending_collection state - Added barcode and new fields to stock.lot views - Updated sale.order embedded view with correct button - Added 5-minute timeout note to CLAUDE.md - Removed problematic demo sale.order XML records - Updated test script location guidance in CLAUDE.md - Marked all acceptance criteria as completed in plan
59 lines
2.1 KiB
Python
59 lines
2.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
from odoo import models, fields, api
|
|
from odoo.exceptions import ValidationError
|
|
|
|
class ProductTemplate(models.Model):
|
|
_inherit = 'product.template'
|
|
|
|
is_analysis = fields.Boolean(
|
|
string="Es un Análisis Clínico",
|
|
help="Marcar si este producto es un análisis clínico."
|
|
)
|
|
analysis_type = fields.Selection([
|
|
('hematology', 'Hematología'),
|
|
('chemistry', 'Química Clínica'),
|
|
('microbiology', 'Microbiología'),
|
|
('immunology', 'Inmunología'),
|
|
('endocrinology', 'Endocrinología'),
|
|
('other', 'Otro')
|
|
], string="Tipo de Análisis")
|
|
|
|
technical_specifications = fields.Text(
|
|
string="Especificaciones Técnicas"
|
|
)
|
|
|
|
value_range_ids = fields.One2many(
|
|
'lims.analysis.range',
|
|
'analysis_id',
|
|
string="Rangos de Referencia"
|
|
)
|
|
|
|
is_sample_type = fields.Boolean(
|
|
string="Es Tipo de Muestra",
|
|
help="Marcar si este producto representa un tipo de contenedor de muestra de laboratorio."
|
|
)
|
|
|
|
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.")
|