feat(#51): Task 8 completada - Crear vistas de configuración de parámetros

This commit is contained in:
Luis Ernesto Portillo Zaldivar 2025-07-15 12:59:49 -06:00
parent c80a154afd
commit cdb8a97d58
3 changed files with 303 additions and 0 deletions

View File

@ -39,6 +39,8 @@
'views/product_template_parameter_views.xml',
'views/parameter_range_views.xml',
'views/analysis_parameter_views.xml',
'views/product_template_parameter_config_views.xml',
'views/parameter_dashboard_views.xml',
],
'demo': [
'demo/z_lims_demo.xml',

View File

@ -0,0 +1,172 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Kanban View for Parameters Dashboard -->
<record id="view_lims_analysis_parameter_kanban" model="ir.ui.view">
<field name="name">lims.analysis.parameter.kanban</field>
<field name="model">lims.analysis.parameter</field>
<field name="arch" type="xml">
<kanban class="o_kanban_mobile">
<field name="code"/>
<field name="name"/>
<field name="value_type"/>
<field name="unit"/>
<field name="analysis_count"/>
<field name="active"/>
<templates>
<t t-name="kanban-box">
<div t-attf-class="oe_kanban_global_click">
<div class="o_kanban_record_top">
<div class="o_kanban_record_headings">
<strong class="o_kanban_record_title">
<field name="code"/> - <field name="name"/>
</strong>
</div>
</div>
<div class="o_kanban_record_body">
<div class="text-muted">
<span>Tipo: </span>
<field name="value_type" widget="badge"/>
</div>
<div t-if="record.unit.raw_value" class="text-muted">
<span>Unidad: </span>
<field name="unit"/>
</div>
</div>
<div class="o_kanban_record_bottom">
<div class="oe_kanban_bottom_left">
<span t-if="!record.active.raw_value"
class="badge badge-danger">Archivado</span>
</div>
<div class="oe_kanban_bottom_right">
<field name="analysis_count" widget="badge"/>
<span> análisis</span>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<!-- Graph View for Parameter Usage Statistics -->
<record id="view_product_template_parameter_graph" model="ir.ui.view">
<field name="name">product.template.parameter.graph</field>
<field name="model">product.template.parameter</field>
<field name="arch" type="xml">
<graph string="Uso de Parámetros en Análisis" type="bar">
<field name="parameter_id"/>
<field name="product_tmpl_id" type="measure"/>
</graph>
</field>
</record>
<!-- Dashboard Action for Parameters -->
<record id="action_lims_parameter_dashboard" model="ir.actions.act_window">
<field name="name">Panel de Parámetros</field>
<field name="res_model">lims.analysis.parameter</field>
<field name="view_mode">kanban,list,form</field>
<field name="search_view_id" ref="view_lims_analysis_parameter_search"/>
<field name="context">{'search_default_active': 1}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No hay parámetros configurados
</p>
<p>
Configure los parámetros que se utilizarán en los análisis clínicos.
Cada parámetro puede tener múltiples rangos de referencia según
las características del paciente.
</p>
</field>
</record>
<!-- Parameter Statistics Action -->
<record id="action_lims_parameter_statistics" model="ir.actions.act_window">
<field name="name">Estadísticas de Parámetros</field>
<field name="res_model">product.template.parameter</field>
<field name="view_mode">graph,pivot,list</field>
<field name="help" type="html">
<p>
Visualización estadística del uso de parámetros en los diferentes análisis.
</p>
</field>
</record>
<!-- Configuration Summary Dashboard -->
<record id="view_lims_config_summary_form" model="ir.ui.view">
<field name="name">lims.config.summary.form</field>
<field name="model">res.config.settings</field>
<field name="mode">primary</field>
<field name="inherit_id" ref="lims_management.res_config_settings_view_form_lims"/>
<field name="arch" type="xml">
<xpath expr="//app[@name='lims_management']//block[@name='lims_settings']" position="after">
<div class="row mt16" id="lims_configuration_stats">
<div class="col-12">
<h2>Estadísticas de Configuración</h2>
</div>
<div class="col-lg-3 col-md-6">
<div class="card">
<div class="card-body text-center">
<h4>Parámetros</h4>
<p class="text-muted">Total configurados</p>
<button name="%(action_lims_analysis_parameter)d"
string="Ver Parámetros"
type="action"
class="btn-link"/>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6">
<div class="card">
<div class="card-body text-center">
<h4>Rangos</h4>
<p class="text-muted">Rangos de referencia</p>
<button name="%(action_lims_parameter_range)d"
string="Ver Rangos"
type="action"
class="btn-link"/>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6">
<div class="card">
<div class="card-body text-center">
<h4>Análisis</h4>
<p class="text-muted">Con parámetros</p>
<button name="%(action_product_template_parameter_config)d"
string="Ver Configuración"
type="action"
class="btn-link"/>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6">
<div class="card">
<div class="card-body text-center">
<h4>Estadísticas</h4>
<p class="text-muted">Uso de parámetros</p>
<button name="%(action_lims_parameter_statistics)d"
string="Ver Estadísticas"
type="action"
class="btn-link"/>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
<!-- Add menus -->
<menuitem id="menu_lims_parameter_dashboard"
name="Panel de Parámetros"
parent="lims_management.lims_menu_config"
action="action_lims_parameter_dashboard"
sequence="10"/>
<menuitem id="menu_lims_parameter_statistics"
name="Estadísticas"
parent="lims_management.lims_menu_config"
action="action_lims_parameter_statistics"
sequence="40"/>
</odoo>

View File

@ -0,0 +1,129 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Form View for Configuration -->
<record id="view_product_template_parameter_config_form" model="ir.ui.view">
<field name="name">product.template.parameter.config.form</field>
<field name="model">product.template.parameter</field>
<field name="arch" type="xml">
<form string="Configuración de Parámetro en Análisis">
<sheet>
<group>
<group string="Análisis">
<field name="product_tmpl_id"
readonly="1"
options="{'no_open': True}"/>
</group>
<group string="Parámetro">
<field name="parameter_id"
readonly="1"
options="{'no_open': True}"/>
<field name="parameter_code"/>
<field name="parameter_value_type"/>
<field name="parameter_unit" invisible="parameter_value_type != 'numeric'"/>
</group>
</group>
<group string="Configuración">
<group>
<field name="sequence"/>
<field name="required"/>
</group>
<group>
<field name="instructions" widget="text"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<!-- List View for Configuration -->
<record id="view_product_template_parameter_config_list" model="ir.ui.view">
<field name="name">product.template.parameter.config.list</field>
<field name="model">product.template.parameter</field>
<field name="arch" type="xml">
<list string="Configuración de Parámetros por Análisis">
<field name="product_tmpl_id"/>
<field name="parameter_id"/>
<field name="parameter_code"/>
<field name="parameter_value_type"/>
<field name="parameter_unit" optional="show"/>
<field name="sequence"/>
<field name="required"/>
</list>
</field>
</record>
<!-- Search View -->
<record id="view_product_template_parameter_config_search" model="ir.ui.view">
<field name="name">product.template.parameter.config.search</field>
<field name="model">product.template.parameter</field>
<field name="arch" type="xml">
<search string="Buscar Configuración">
<field name="product_tmpl_id" string="Análisis"/>
<field name="parameter_id" string="Parámetro"/>
<field name="parameter_code"/>
<field name="parameter_name"/>
<filter string="Requeridos" name="required"
domain="[('required', '=', True)]"/>
<filter string="Opcionales" name="optional"
domain="[('required', '=', False)]"/>
<separator/>
<filter string="Numéricos" name="numeric"
domain="[('parameter_value_type', '=', 'numeric')]"/>
<filter string="Texto" name="text"
domain="[('parameter_value_type', '=', 'text')]"/>
<filter string="Sí/No" name="boolean"
domain="[('parameter_value_type', '=', 'boolean')]"/>
<filter string="Selección" name="selection"
domain="[('parameter_value_type', '=', 'selection')]"/>
<group expand="0" string="Agrupar por">
<filter string="Análisis" name="group_analysis"
context="{'group_by': 'product_tmpl_id'}"/>
<filter string="Parámetro" name="group_parameter"
context="{'group_by': 'parameter_id'}"/>
<filter string="Tipo de Valor" name="group_value_type"
context="{'group_by': 'parameter_value_type'}"/>
<filter string="Requerido" name="group_required"
context="{'group_by': 'required'}"/>
</group>
</search>
</field>
</record>
<!-- Pivot View for Analysis -->
<record id="view_product_template_parameter_pivot" model="ir.ui.view">
<field name="name">product.template.parameter.pivot</field>
<field name="model">product.template.parameter</field>
<field name="arch" type="xml">
<pivot string="Matriz de Parámetros por Análisis">
<field name="product_tmpl_id" type="row"/>
<field name="parameter_id" type="col"/>
<field name="required" type="measure"/>
</pivot>
</field>
</record>
<!-- Action -->
<record id="action_product_template_parameter_config" model="ir.actions.act_window">
<field name="name">Configuración Parámetros-Análisis</field>
<field name="res_model">product.template.parameter</field>
<field name="view_mode">list,form,pivot</field>
<field name="search_view_id" ref="view_product_template_parameter_config_search"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Configurar parámetros en análisis
</p>
<p>
Esta vista muestra la configuración de qué parámetros
están incluidos en cada análisis clínico.
</p>
</field>
</record>
<!-- Menu -->
<menuitem id="menu_product_template_parameter_config"
name="Config. Parámetros-Análisis"
parent="lims_management.lims_menu_config"
action="action_product_template_parameter_config"
sequence="30"/>
</odoo>