# -*- 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" ) parameter_ids = fields.One2many( 'product.template.parameter', 'product_tmpl_id', string="Parámetros del Análisis", help="Parámetros que se medirán en este análisis" ) 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.")