feat(#8): Task 5 completada - Configuración de validación opcional

- Modelo res.config.settings con parámetro lims_require_validation
- Método _compute_require_validation usa la configuración
- Auto-validación cuando no se requiere validación manual
- Vista de configuración en Laboratorio > Configuración > Ajustes
- Instancia validada sin errores
This commit is contained in:
Luis Ernesto Portillo Zaldivar 2025-07-15 00:59:52 -06:00
parent de9102f7e0
commit 619c6a3afa
7 changed files with 87 additions and 11 deletions

View File

@ -16,7 +16,7 @@
'website': "https://gitea.grupoconsiti.com/luis_portillo/clinical_laboratory",
'category': 'Industries',
'version': '18.0.1.0.0',
'depends': ['base', 'product', 'sale'],
'depends': ['base', 'product', 'sale', 'base_setup'],
'assets': {
'web.assets_backend': [
'lims_management/static/src/css/lims_test.css',
@ -34,6 +34,7 @@
'views/sale_order_views.xml',
'views/stock_lot_views.xml',
'views/lims_test_views.xml',
'views/res_config_settings_views.xml',
'views/menus.xml',
],
'demo': [

View File

@ -6,3 +6,4 @@ from . import sale_order
from . import stock_lot
from . import lims_test
from . import lims_result
from . import res_config_settings

View File

@ -105,10 +105,10 @@ class LimsTest(models.Model):
@api.depends('company_id')
def _compute_require_validation(self):
"""Calcula si la prueba requiere validación basado en configuración."""
IrConfig = self.env['ir.config_parameter'].sudo()
require_validation = IrConfig.get_param('lims_management.require_validation', 'True')
for record in self:
# Por ahora, siempre requiere validación
# TODO: Implementar cuando se agregue res.config.settings
record.require_validation = True
record.require_validation = require_validation == 'True'
@api.model_create_multi
def create(self, vals_list):
@ -148,13 +148,23 @@ class LimsTest(models.Model):
if not self.result_ids:
raise UserError(_('Debe ingresar al menos un resultado.'))
self.state = 'result_entered'
# Log en el chatter
self.message_post(
body=_('Resultados ingresados por %s') % self.env.user.name,
subject=_('Resultados Ingresados')
)
# Si no requiere validación, pasar directamente a validado
if not self.require_validation:
self.write({
'state': 'validated',
'validator_id': self.env.user.id,
'validation_date': fields.Datetime.now()
})
self.message_post(
body=_('Resultados ingresados y auto-validados por %s') % self.env.user.name,
subject=_('Resultados Validados')
)
else:
self.state = 'result_entered'
self.message_post(
body=_('Resultados ingresados por %s') % self.env.user.name,
subject=_('Resultados Ingresados')
)
return True

View File

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from odoo import models, fields, api
class ResConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
lims_require_validation = fields.Boolean(
string='Requerir Validación de Resultados',
help='Si está activado, los resultados de las pruebas deben ser validados por un administrador antes de considerarse finales.',
config_parameter='lims_management.require_validation',
default=True
)
lims_auto_generate_tests = fields.Boolean(
string='Generar Pruebas Automáticamente',
help='Si está activado, se generarán automáticamente registros de pruebas (lims.test) cuando se confirme una orden de laboratorio.',
config_parameter='lims_management.auto_generate_tests',
default=False
)

View File

@ -167,5 +167,12 @@
parent="lims_menu_config"
action="action_lims_sample_type_catalog"
sequence="20"/>
<!-- Menú de configuración de ajustes -->
<menuitem id="menu_lims_config_settings"
name="Ajustes"
parent="lims_menu_config"
action="lims_management.action_lims_config_settings"
sequence="100"/>
</data>
</odoo>

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- Vista formulario heredada para res.config.settings -->
<record id="res_config_settings_view_form_lims" model="ir.ui.view">
<field name="name">res.config.settings.view.form.inherit.lims</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="base.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//form" position="inside">
<app data-string="Laboratorio" string="Laboratorio" name="lims_management">
<block title="Configuración del Laboratorio" name="lims_settings">
<setting help="Si está activado, los resultados de las pruebas deben ser validados por un administrador">
<field name="lims_require_validation"/>
</setting>
<setting help="Si está activado, se generarán automáticamente registros de pruebas al confirmar órdenes">
<field name="lims_auto_generate_tests"/>
</setting>
</block>
</app>
</xpath>
</field>
</record>
<!-- Acción para abrir configuración de laboratorio -->
<record id="action_lims_config_settings" model="ir.actions.act_window">
<field name="name">Configuración</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.config.settings</field>
<field name="view_mode">form</field>
<field name="target">inline</field>
<field name="context">{'module' : 'lims_management'}</field>
</record>
</data>
</odoo>