From e7ddbaa2ab9d372bdc9b6fa85c0498840b64cbb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Bernardi?= Date: Tue, 14 Jul 2020 19:50:42 -0300 Subject: [PATCH] lims_diagnosis: show in samples pending reports when ready to diagnose --- lims_diagnosis/locale/es.po | 4 ++ lims_diagnosis/notebook.py | 37 +++++++++++++++++++ .../view/samples_pending_reporting_list.xml | 1 + 3 files changed, 42 insertions(+) diff --git a/lims_diagnosis/locale/es.po b/lims_diagnosis/locale/es.po index 9e26c58e..3d5acc7b 100644 --- a/lims_diagnosis/locale/es.po +++ b/lims_diagnosis/locale/es.po @@ -46,6 +46,10 @@ msgctxt "field:lims.notebook,diagnostician:" msgid "Diagnostician" msgstr "Diagnosticador" +msgctxt "field:lims.notebook,ready_to_diagnose:" +msgid "Ready to diagnose" +msgstr "Lista para diagnosticar" + msgctxt "field:lims.notebook.change_diagnostician.start,diagnostician:" msgid "Diagnostician" msgstr "Diagnosticador" diff --git a/lims_diagnosis/notebook.py b/lims_diagnosis/notebook.py index ef7c255a..5e61adbd 100644 --- a/lims_diagnosis/notebook.py +++ b/lims_diagnosis/notebook.py @@ -17,6 +17,8 @@ class Notebook(metaclass=PoolMeta): 'Diagnostician'), 'get_sample_field') diagnosis_warning = fields.Function(fields.Boolean('Diagnosis Warning'), 'get_diagnosis_warning') + ready_to_diagnose = fields.Function(fields.Boolean('Ready to diagnose'), + 'get_ready_to_diagnose') @classmethod def get_diagnosis_warning(cls, notebooks, name): @@ -33,6 +35,41 @@ class Notebook(metaclass=PoolMeta): result[n.id] = False return result + def get_ready_to_diagnose(self, name): + pool = Pool() + ResultsLine = pool.get('lims.results_report.version.detail.line') + NotebookLine = pool.get('lims.notebook.line') + + laboratory_id = Transaction().context.get( + 'samples_pending_reporting_laboratory', None) + if not laboratory_id: + return False + + draft_lines_ids = [] + draft_lines = ResultsLine.search([ + ('detail_sample.notebook', '=', self.id), + ('detail_sample.version_detail.laboratory', '=', laboratory_id), + ('detail_sample.version_detail.state', 'in', ['draft', 'revised']), + ('detail_sample.version_detail.type', '!=', 'preliminary'), + ]) + if draft_lines: + draft_lines_ids = [dl.notebook_line.id for dl in draft_lines] + + clause = [ + ('notebook', '=', self.id), + ('laboratory', '=', laboratory_id), + ('notebook.fraction.type.report', '=', True), + ('report', '=', True), + ('annulled', '=', False), + ('results_report', '=', None), + ('id', 'not in', draft_lines_ids), + ('accepted', '=', False), + ('analysis.not_block_diagnosis', '=', False), + ] + if NotebookLine.search_count(clause) > 0: + return False + return True + class NotebookLine(metaclass=PoolMeta): __name__ = 'lims.notebook.line' diff --git a/lims_diagnosis/view/samples_pending_reporting_list.xml b/lims_diagnosis/view/samples_pending_reporting_list.xml index 313862a8..0d2b2d04 100644 --- a/lims_diagnosis/view/samples_pending_reporting_list.xml +++ b/lims_diagnosis/view/samples_pending_reporting_list.xml @@ -3,5 +3,6 @@ +