feat(#8): Task 3 completada - Interfaz de ingreso de resultados
- Vista formulario con lista editable de resultados - Campos dinámicos que se ocultan según tipo de valor - Botones de acción según estado de la prueba - Vista lista, kanban y búsqueda implementadas - Menú agregado en sección Laboratorio - decoration-danger para valores fuera de rango preparado
This commit is contained in:
parent
a1b8f7b1de
commit
8851a8994a
|
@ -28,6 +28,7 @@
|
|||
'views/analysis_views.xml',
|
||||
'views/sale_order_views.xml',
|
||||
'views/stock_lot_views.xml',
|
||||
'views/lims_test_views.xml',
|
||||
'views/menus.xml',
|
||||
],
|
||||
'demo': [
|
||||
|
|
213
lims_management/views/lims_test_views.xml
Normal file
213
lims_management/views/lims_test_views.xml
Normal file
|
@ -0,0 +1,213 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
|
||||
<!-- Vista formulario para lims.test -->
|
||||
<record id="view_lims_test_form" model="ir.ui.view">
|
||||
<field name="name">lims.test.form</field>
|
||||
<field name="model">lims.test</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Prueba de Laboratorio">
|
||||
<header>
|
||||
<button name="action_start_process" string="Iniciar Proceso"
|
||||
type="object" class="oe_highlight"
|
||||
invisible="state != 'draft'"/>
|
||||
<button name="action_enter_results" string="Marcar Resultados Ingresados"
|
||||
type="object" class="oe_highlight"
|
||||
invisible="state != 'in_process'"/>
|
||||
<button name="action_validate" string="Validar Resultados"
|
||||
type="object" class="oe_highlight"
|
||||
invisible="state != 'result_entered' or not require_validation"/>
|
||||
<button name="action_cancel" string="Cancelar"
|
||||
type="object"
|
||||
invisible="state in ['validated', 'cancelled']"/>
|
||||
<button name="action_draft" string="Volver a Borrador"
|
||||
type="object"
|
||||
invisible="state != 'cancelled'"/>
|
||||
<field name="state" widget="statusbar"
|
||||
statusbar_visible="draft,in_process,result_entered,validated"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
<field name="name" readonly="1"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="sale_order_line_id" invisible="1"/>
|
||||
<field name="patient_id"/>
|
||||
<field name="product_id"/>
|
||||
<field name="sample_id"
|
||||
options="{'no_create': True}"
|
||||
domain="[('is_lab_sample', '=', True), ('patient_id', '=', patient_id)]"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="technician_id" readonly="state != 'draft'"/>
|
||||
<field name="require_validation" invisible="1"/>
|
||||
<field name="validator_id" readonly="1" invisible="not validator_id"/>
|
||||
<field name="validation_date" readonly="1" invisible="not validation_date"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
<notebook>
|
||||
<page string="Resultados">
|
||||
<field name="result_ids"
|
||||
readonly="state in ['validated', 'cancelled']"
|
||||
context="{'default_test_id': id}">
|
||||
<list string="Resultados" editable="bottom">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="parameter_name"/>
|
||||
<field name="value_numeric"
|
||||
invisible="value_text or value_selection"
|
||||
decoration-danger="is_out_of_range"/>
|
||||
<field name="value_text"
|
||||
invisible="value_numeric or value_selection"/>
|
||||
<field name="value_selection"
|
||||
invisible="value_numeric or value_text"/>
|
||||
<field name="unit" optional="show"/>
|
||||
<field name="normal_min" optional="hide"/>
|
||||
<field name="normal_max" optional="hide"/>
|
||||
<field name="is_out_of_range" invisible="1"/>
|
||||
<field name="notes" optional="show"/>
|
||||
</list>
|
||||
</field>
|
||||
</page>
|
||||
<page string="Observaciones">
|
||||
<field name="notes" placeholder="Agregar observaciones generales de la prueba..."/>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids"/>
|
||||
<field name="activity_ids"/>
|
||||
<field name="message_ids"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Vista lista para lims.test -->
|
||||
<record id="view_lims_test_list" model="ir.ui.view">
|
||||
<field name="name">lims.test.list</field>
|
||||
<field name="model">lims.test</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Pruebas de Laboratorio">
|
||||
<field name="name"/>
|
||||
<field name="patient_id"/>
|
||||
<field name="product_id"/>
|
||||
<field name="sample_id"/>
|
||||
<field name="technician_id" optional="show"/>
|
||||
<field name="state" widget="badge"
|
||||
decoration-success="state == 'validated'"
|
||||
decoration-warning="state == 'result_entered'"
|
||||
decoration-info="state == 'in_process'"
|
||||
decoration-muted="state == 'cancelled'"/>
|
||||
<field name="create_date" optional="hide"/>
|
||||
<field name="company_id" groups="base.group_multi_company" optional="hide"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Vista kanban para lims.test -->
|
||||
<record id="view_lims_test_kanban" model="ir.ui.view">
|
||||
<field name="name">lims.test.kanban</field>
|
||||
<field name="model">lims.test</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban default_group_by="state" class="o_kanban_small_column">
|
||||
<field name="name"/>
|
||||
<field name="patient_id"/>
|
||||
<field name="product_id"/>
|
||||
<field name="state"/>
|
||||
<field name="technician_id"/>
|
||||
<field name="create_date"/>
|
||||
<templates>
|
||||
<t t-name="kanban-card">
|
||||
<div class="oe_kanban_card oe_kanban_global_click">
|
||||
<div class="oe_kanban_content">
|
||||
<div class="o_kanban_record_top">
|
||||
<div class="o_kanban_record_headings">
|
||||
<strong class="o_kanban_record_title">
|
||||
<field name="name"/>
|
||||
</strong>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_record_body">
|
||||
<div>
|
||||
<i class="fa fa-user" title="Paciente"/>
|
||||
<field name="patient_id"/>
|
||||
</div>
|
||||
<div>
|
||||
<i class="fa fa-flask" title="Análisis"/>
|
||||
<field name="product_id"/>
|
||||
</div>
|
||||
<div t-if="record.technician_id.raw_value">
|
||||
<i class="fa fa-user-md" title="Técnico"/>
|
||||
<field name="technician_id"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_record_bottom">
|
||||
<div class="oe_kanban_bottom_left">
|
||||
<field name="create_date" widget="date"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Vista búsqueda para lims.test -->
|
||||
<record id="view_lims_test_search" model="ir.ui.view">
|
||||
<field name="name">lims.test.search</field>
|
||||
<field name="model">lims.test</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Buscar Pruebas">
|
||||
<field name="name"/>
|
||||
<field name="patient_id"/>
|
||||
<field name="product_id"/>
|
||||
<field name="sample_id"/>
|
||||
<field name="technician_id"/>
|
||||
<separator/>
|
||||
<filter string="Borrador" name="draft" domain="[('state','=','draft')]"/>
|
||||
<filter string="En Proceso" name="in_process" domain="[('state','=','in_process')]"/>
|
||||
<filter string="Resultado Ingresado" name="result_entered" domain="[('state','=','result_entered')]"/>
|
||||
<filter string="Validado" name="validated" domain="[('state','=','validated')]"/>
|
||||
<separator/>
|
||||
<filter string="Mis Pruebas" name="my_tests" domain="[('technician_id','=',uid)]"/>
|
||||
<separator/>
|
||||
<filter string="Hoy" name="today" domain="[('create_date','>=',(datetime.datetime.now().replace(hour=0, minute=0, second=0)).strftime('%Y-%m-%d %H:%M:%S'))]"/>
|
||||
<group expand="0" string="Agrupar Por">
|
||||
<filter string="Estado" name="group_by_state" context="{'group_by':'state'}"/>
|
||||
<filter string="Paciente" name="group_by_patient" context="{'group_by':'patient_id'}"/>
|
||||
<filter string="Análisis" name="group_by_product" context="{'group_by':'product_id'}"/>
|
||||
<filter string="Técnico" name="group_by_technician" context="{'group_by':'technician_id'}"/>
|
||||
<filter string="Fecha" name="group_by_date" context="{'group_by':'create_date:day'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Acción para lims.test -->
|
||||
<record id="action_lims_test" model="ir.actions.act_window">
|
||||
<field name="name">Pruebas de Laboratorio</field>
|
||||
<field name="res_model">lims.test</field>
|
||||
<field name="view_mode">list,kanban,form</field>
|
||||
<field name="search_view_id" ref="view_lims_test_search"/>
|
||||
<field name="context">{'search_default_my_tests': 1}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Crear primera prueba de laboratorio
|
||||
</p>
|
||||
<p>
|
||||
Aquí podrá gestionar las pruebas de laboratorio,
|
||||
ingresar resultados y validarlos.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
|
@ -101,6 +101,13 @@
|
|||
parent="lims_menu_root"
|
||||
action="action_lims_lab_sample"
|
||||
sequence="16"/>
|
||||
|
||||
<!-- Menú para Pruebas -->
|
||||
<menuitem id="menu_lims_tests"
|
||||
name="Pruebas"
|
||||
parent="lims_menu_root"
|
||||
action="action_lims_test"
|
||||
sequence="25"/>
|
||||
|
||||
<!-- Submenú de Configuración -->
|
||||
<menuitem
|
||||
|
|
Loading…
Reference in New Issue
Block a user