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:
parent
de9102f7e0
commit
619c6a3afa
|
@ -16,7 +16,7 @@
|
||||||
'website': "https://gitea.grupoconsiti.com/luis_portillo/clinical_laboratory",
|
'website': "https://gitea.grupoconsiti.com/luis_portillo/clinical_laboratory",
|
||||||
'category': 'Industries',
|
'category': 'Industries',
|
||||||
'version': '18.0.1.0.0',
|
'version': '18.0.1.0.0',
|
||||||
'depends': ['base', 'product', 'sale'],
|
'depends': ['base', 'product', 'sale', 'base_setup'],
|
||||||
'assets': {
|
'assets': {
|
||||||
'web.assets_backend': [
|
'web.assets_backend': [
|
||||||
'lims_management/static/src/css/lims_test.css',
|
'lims_management/static/src/css/lims_test.css',
|
||||||
|
@ -34,6 +34,7 @@
|
||||||
'views/sale_order_views.xml',
|
'views/sale_order_views.xml',
|
||||||
'views/stock_lot_views.xml',
|
'views/stock_lot_views.xml',
|
||||||
'views/lims_test_views.xml',
|
'views/lims_test_views.xml',
|
||||||
|
'views/res_config_settings_views.xml',
|
||||||
'views/menus.xml',
|
'views/menus.xml',
|
||||||
],
|
],
|
||||||
'demo': [
|
'demo': [
|
||||||
|
|
|
@ -6,3 +6,4 @@ from . import sale_order
|
||||||
from . import stock_lot
|
from . import stock_lot
|
||||||
from . import lims_test
|
from . import lims_test
|
||||||
from . import lims_result
|
from . import lims_result
|
||||||
|
from . import res_config_settings
|
||||||
|
|
Binary file not shown.
|
@ -105,10 +105,10 @@ class LimsTest(models.Model):
|
||||||
@api.depends('company_id')
|
@api.depends('company_id')
|
||||||
def _compute_require_validation(self):
|
def _compute_require_validation(self):
|
||||||
"""Calcula si la prueba requiere validación basado en configuración."""
|
"""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:
|
for record in self:
|
||||||
# Por ahora, siempre requiere validación
|
record.require_validation = require_validation == 'True'
|
||||||
# TODO: Implementar cuando se agregue res.config.settings
|
|
||||||
record.require_validation = True
|
|
||||||
|
|
||||||
@api.model_create_multi
|
@api.model_create_multi
|
||||||
def create(self, vals_list):
|
def create(self, vals_list):
|
||||||
|
@ -148,13 +148,23 @@ class LimsTest(models.Model):
|
||||||
if not self.result_ids:
|
if not self.result_ids:
|
||||||
raise UserError(_('Debe ingresar al menos un resultado.'))
|
raise UserError(_('Debe ingresar al menos un resultado.'))
|
||||||
|
|
||||||
self.state = 'result_entered'
|
# Si no requiere validación, pasar directamente a validado
|
||||||
|
if not self.require_validation:
|
||||||
# Log en el chatter
|
self.write({
|
||||||
self.message_post(
|
'state': 'validated',
|
||||||
body=_('Resultados ingresados por %s') % self.env.user.name,
|
'validator_id': self.env.user.id,
|
||||||
subject=_('Resultados Ingresados')
|
'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
|
return True
|
||||||
|
|
||||||
|
|
20
lims_management/models/res_config_settings.py
Normal file
20
lims_management/models/res_config_settings.py
Normal 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
|
||||||
|
)
|
|
@ -167,5 +167,12 @@
|
||||||
parent="lims_menu_config"
|
parent="lims_menu_config"
|
||||||
action="action_lims_sample_type_catalog"
|
action="action_lims_sample_type_catalog"
|
||||||
sequence="20"/>
|
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>
|
</data>
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|
37
lims_management/views/res_config_settings_views.xml
Normal file
37
lims_management/views/res_config_settings_views.xml
Normal 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>
|
Loading…
Reference in New Issue
Block a user