feat(#63): Implementar redirección a vistas personalizadas de muestras
- Agregar contexto de vistas personalizadas en todos los campos que referencian muestras - Modificar sale_order_views.xml: campo all_sample_ids con redirección - Modificar lims_test_views.xml: campo sample_id con redirección - Modificar lims_result_bulk_entry_views.xml: campo sample_id con redirección - Modificar stock_lot_views.xml: campos parent_sample_id y child_sample_ids - Agregar muestra y estado a vista de resultados con filtros y agrupación - Corregir estado 'in_analysis' por 'in_process' en action_start_process - Corregir validación de resultados críticos para usar campo correcto Ahora todas las referencias a muestras en el módulo LIMS abren la vista personalizada del laboratorio en lugar de la vista estándar de stock.lot. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
fc2275f809
commit
0d09e1819a
BIN
documents/logs/Screenshot_6.png
Normal file
BIN
documents/logs/Screenshot_6.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
BIN
documents/logs/Screenshot_7.png
Normal file
BIN
documents/logs/Screenshot_7.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -25,6 +25,22 @@ class LimsResult(models.Model):
|
|||
ondelete='cascade'
|
||||
)
|
||||
|
||||
# Campo relacionado para acceder a la muestra sin duplicar datos
|
||||
test_sample_id = fields.Many2one(
|
||||
'stock.lot',
|
||||
string='Muestra',
|
||||
related='test_id.sample_id',
|
||||
readonly=True,
|
||||
store=True # Para poder buscar y filtrar
|
||||
)
|
||||
|
||||
# Campo relacionado para mostrar el estado sin duplicar
|
||||
test_sample_state = fields.Selection(
|
||||
string='Estado de Muestra',
|
||||
related='test_sample_id.state',
|
||||
readonly=True
|
||||
)
|
||||
|
||||
# Cambio de parameter_name a parameter_id
|
||||
parameter_id = fields.Many2one(
|
||||
'lims.analysis.parameter',
|
||||
|
|
|
@ -51,6 +51,12 @@ class LimsTest(models.Model):
|
|||
tracking=True
|
||||
)
|
||||
|
||||
sample_state = fields.Selection(
|
||||
related='sample_id.state',
|
||||
string='Estado de Muestra',
|
||||
readonly=True
|
||||
)
|
||||
|
||||
state = fields.Selection([
|
||||
('draft', 'Borrador'),
|
||||
('in_process', 'En Proceso'),
|
||||
|
@ -215,7 +221,7 @@ class LimsTest(models.Model):
|
|||
|
||||
# Actualizar estado de la muestra si es necesario
|
||||
if self.sample_id and self.sample_id.state == 'collected':
|
||||
self.sample_id.write({'state': 'in_analysis'})
|
||||
self.sample_id.write({'state': 'in_process'})
|
||||
self.sample_id.message_post(
|
||||
body=_('Muestra en análisis para la prueba %s') % self.name,
|
||||
subject=_('Estado actualizado'),
|
||||
|
@ -283,7 +289,7 @@ class LimsTest(models.Model):
|
|||
# Verificar que todos los resultados críticos tengan observaciones si están fuera de rango
|
||||
critical_results = []
|
||||
for result in self.result_ids:
|
||||
if result.is_out_of_range and result.parameter_id.is_critical:
|
||||
if result.is_critical: # Usar el campo is_critical del resultado, no del parámetro
|
||||
if not result.notes:
|
||||
critical_results.append(result.parameter_id.name)
|
||||
|
||||
|
|
|
@ -35,7 +35,9 @@
|
|||
|
||||
<group>
|
||||
<group>
|
||||
<field name="sample_id" readonly="1"/>
|
||||
<field name="sample_id" readonly="1"
|
||||
context="{'form_view_ref': 'lims_management.view_lab_sample_form',
|
||||
'tree_view_ref': 'lims_management.view_lab_sample_list'}"/>
|
||||
<field name="technician_id" readonly="state != 'in_process'"/>
|
||||
</group>
|
||||
<group>
|
||||
|
|
|
@ -10,6 +10,10 @@
|
|||
<group>
|
||||
<group string="Información del Test">
|
||||
<field name="test_id" readonly="1"/>
|
||||
<field name="test_sample_id" readonly="1"
|
||||
context="{'form_view_ref': 'lims_management.view_lab_sample_form',
|
||||
'tree_view_ref': 'lims_management.view_lab_sample_list'}"/>
|
||||
<field name="test_sample_state" widget="badge"/>
|
||||
<field name="patient_id" readonly="1"/>
|
||||
<field name="test_date" readonly="1"/>
|
||||
</group>
|
||||
|
@ -69,6 +73,13 @@
|
|||
<field name="arch" type="xml">
|
||||
<list string="Resultados de Análisis" editable="bottom">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="test_sample_id"
|
||||
context="{'form_view_ref': 'lims_management.view_lab_sample_form',
|
||||
'tree_view_ref': 'lims_management.view_lab_sample_list'}"
|
||||
optional="show"/>
|
||||
<field name="test_sample_state"
|
||||
widget="badge"
|
||||
optional="show"/>
|
||||
<field name="parameter_id" options="{'no_create': True, 'no_open': True}"/>
|
||||
<field name="parameter_code" optional="show"/>
|
||||
<field name="parameter_value_type" invisible="1"/>
|
||||
|
@ -101,6 +112,7 @@
|
|||
<field name="arch" type="xml">
|
||||
<search string="Buscar Resultados">
|
||||
<field name="test_id"/>
|
||||
<field name="test_sample_id"/>
|
||||
<field name="parameter_id"/>
|
||||
<field name="parameter_name"/>
|
||||
<field name="patient_id"/>
|
||||
|
@ -118,10 +130,19 @@
|
|||
domain="[('parameter_value_type', '=', 'selection')]"/>
|
||||
<filter string="Sí/No" name="boolean"
|
||||
domain="[('parameter_value_type', '=', 'boolean')]"/>
|
||||
<separator/>
|
||||
<filter string="Muestras Pendientes" name="sample_pending"
|
||||
domain="[('test_sample_state', 'in', ['pending_collection', 'collected'])]"/>
|
||||
<filter string="Muestras en Proceso" name="sample_process"
|
||||
domain="[('test_sample_state', '=', 'in_process')]"/>
|
||||
<filter string="Muestras Completadas" name="sample_completed"
|
||||
domain="[('test_sample_state', '=', 'completed')]"/>
|
||||
<group expand="0" string="Agrupar por">
|
||||
<filter string="Test" name="group_test" context="{'group_by': 'test_id'}"/>
|
||||
<filter string="Parámetro" name="group_parameter" context="{'group_by': 'parameter_id'}"/>
|
||||
<filter string="Paciente" name="group_patient" context="{'group_by': 'patient_id'}"/>
|
||||
<filter string="Muestra" name="group_sample" context="{'group_by': 'test_sample_id'}"/>
|
||||
<filter string="Estado de Muestra" name="group_sample_state" context="{'group_by': 'test_sample_state'}"/>
|
||||
<filter string="Tipo de Valor" name="group_value_type" context="{'group_by': 'parameter_value_type'}"/>
|
||||
</group>
|
||||
</search>
|
||||
|
|
|
@ -50,7 +50,9 @@
|
|||
<field name="product_id"/>
|
||||
<field name="sample_id"
|
||||
options="{'no_create': True}"
|
||||
domain="[('is_lab_sample', '=', True), ('patient_id', '=', patient_id)]"/>
|
||||
domain="[('is_lab_sample', '=', True), ('patient_id', '=', patient_id)]"
|
||||
context="{'form_view_ref': 'lims_management.view_lab_sample_form',
|
||||
'tree_view_ref': 'lims_management.view_lab_sample_list'}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="technician_id" readonly="state != 'draft'"/>
|
||||
|
@ -139,7 +141,9 @@
|
|||
<field name="name"/>
|
||||
<field name="patient_id"/>
|
||||
<field name="product_id"/>
|
||||
<field name="sample_id"/>
|
||||
<field name="sample_id"
|
||||
context="{'form_view_ref': 'lims_management.view_lab_sample_form',
|
||||
'tree_view_ref': 'lims_management.view_lab_sample_list'}"/>
|
||||
<field name="technician_id" optional="show"/>
|
||||
<field name="state" widget="badge"
|
||||
decoration-success="state == 'validated'"
|
||||
|
|
|
@ -31,7 +31,9 @@
|
|||
<xpath expr="//notebook" position="inside">
|
||||
<page string="Muestras" name="all_samples" invisible="not is_lab_request">
|
||||
<group string="Todas las Muestras (incluyendo Re-muestras)">
|
||||
<field name="all_sample_ids" nolabel="1" readonly="1">
|
||||
<field name="all_sample_ids" nolabel="1" readonly="1"
|
||||
context="{'form_view_ref': 'lims_management.view_lab_sample_form',
|
||||
'tree_view_ref': 'lims_management.view_lab_sample_list'}">
|
||||
<list string="Todas las Muestras" create="false" edit="false" delete="false">
|
||||
<field name="name" string="Código de Muestra"/>
|
||||
<field name="barcode" string="Código de Barras" optional="show"/>
|
||||
|
|
|
@ -94,12 +94,16 @@
|
|||
<group col="4">
|
||||
<field name="is_resample" invisible="1"/>
|
||||
<field name="resample_count" invisible="1"/>
|
||||
<field name="parent_sample_id" readonly="1" invisible="not is_resample"/>
|
||||
<field name="parent_sample_id" readonly="1" invisible="not is_resample"
|
||||
context="{'form_view_ref': 'lims_management.view_lab_sample_form',
|
||||
'tree_view_ref': 'lims_management.view_lab_sample_list'}"/>
|
||||
<field name="root_sample_id" readonly="1" invisible="not is_resample"/>
|
||||
<field name="resample_chain_count" readonly="1" invisible="resample_chain_count == 0"/>
|
||||
</group>
|
||||
<group string="Re-muestras Generadas" invisible="resample_count == 0">
|
||||
<field name="child_sample_ids" nolabel="1">
|
||||
<field name="child_sample_ids" nolabel="1"
|
||||
context="{'form_view_ref': 'lims_management.view_lab_sample_form',
|
||||
'tree_view_ref': 'lims_management.view_lab_sample_list'}">
|
||||
<list>
|
||||
<field name="name"/>
|
||||
<field name="state" widget="badge"/>
|
||||
|
|
Loading…
Reference in New Issue
Block a user