From 4e47dc4dc23ec38fa3d39deb87be3301bd019ecf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Bernardi?= Date: Thu, 3 Feb 2022 08:26:28 -0300 Subject: [PATCH] lims: results report: add 'Waiting' state --- lims/__init__.py | 2 + lims/locale/es.po | 37 +++++++++++ lims/results_report.py | 63 ++++++++++++++++++- lims/results_report.xml | 34 +++++++++- .../results_report_version_detail_form.xml | 4 ++ lims/view/results_report_waiting_form.xml | 5 ++ lims_diagnosis/results_report.py | 2 + lims_diagnosis/results_report.xml | 2 +- 8 files changed, 144 insertions(+), 5 deletions(-) create mode 100644 lims/view/results_report_waiting_form.xml diff --git a/lims/__init__.py b/lims/__init__.py index 86d411a..72f580c 100644 --- a/lims/__init__.py +++ b/lims/__init__.py @@ -186,6 +186,7 @@ def register(): certification.DuplicateAnalysisFamilyStart, results_report.ResultsReportAnnulationStart, results_report.NewResultsReportVersionStart, + results_report.ResultsReportWaitingStart, sample.CountersampleStorageStart, sample.CountersampleStorageEmpty, sample.CountersampleStorageResult, @@ -351,6 +352,7 @@ def register(): results_report.ResultsReportRelease, results_report.ResultsReportAnnulation, results_report.NewResultsReportVersion, + results_report.ResultsReportWaiting, sample.CountersampleStorage, sample.CountersampleStorageRevert, sample.CountersampleDischarge, diff --git a/lims/locale/es.po b/lims/locale/es.po index 482bec6..1cc15d3 100644 --- a/lims/locale/es.po +++ b/lims/locale/es.po @@ -5120,6 +5120,10 @@ msgctxt "field:lims.results_report.version.detail,valid:" msgid "Active" msgstr "Activo" +msgctxt "field:lims.results_report.version.detail,waiting_reason:" +msgid "Waiting reason" +msgstr "Motivo de espera" + msgctxt "field:lims.results_report.version.detail,write_date2:" msgid "Write Date" msgstr "Fecha de modificación" @@ -5285,6 +5289,10 @@ msgctxt "field:lims.results_report_annulation.start,annulment_reason_print:" msgid "Print annulment reason in next version" msgstr "Imprimir motivo de anulación en próxima versión" +msgctxt "field:lims.results_report_waiting.start,waiting_reason:" +msgid "Waiting reason" +msgstr "Motivo de espera" + msgctxt "field:lims.rule,action:" msgid "Action" msgstr "Acción" @@ -7335,6 +7343,10 @@ msgctxt "model:ir.action,name:wiz_lims_results_report_annulation" msgid "Report Annulation" msgstr "Anulación de Informe" +msgctxt "model:ir.action,name:wiz_lims_results_report_waiting" +msgid "Report Waiting" +msgstr "Informe en espera" + msgctxt "model:ir.action,name:wiz_lims_sample_results_report" msgid "Sample Results Reports" msgstr "Informes de resultados de la Muestra" @@ -7550,6 +7562,11 @@ msgctxt "" msgid "Revised" msgstr "Revisado" +msgctxt "" +"model:ir.action.act_window.domain,name:act_lims_results_report_version_detail_domain_waiting" +msgid "Waiting" +msgstr "En espera" + msgctxt "" "model:ir.action.act_window.domain,name:act_lims_samples_pending_reporting_domain_complete" msgid "Complete" @@ -9718,6 +9735,10 @@ msgctxt "model:lims.results_report_annulation.start,name:" msgid "Report Annulation" msgstr "Anulación de Informe" +msgctxt "model:lims.results_report_waiting.start,name:" +msgid "Results Report Waiting" +msgstr "Informe de resultados en espera" + msgctxt "model:lims.rule,name:" msgid "Notebook Rule" msgstr "Regla de cuaderno" @@ -13106,6 +13127,10 @@ msgctxt "selection:lims.results_report.version.detail,state:" msgid "Revised" msgstr "Revisado" +msgctxt "selection:lims.results_report.version.detail,state:" +msgid "Waiting" +msgstr "En espera" + msgctxt "selection:lims.results_report.version.detail,type:" msgid "Complementary" msgstr "Complementario" @@ -14402,6 +14427,10 @@ msgctxt "view:lims.results_report.version.detail:" msgid "Time" msgstr "Hora" +msgctxt "view:lims.results_report.version.detail:" +msgid "Waiting" +msgstr "En espera" + msgctxt "view:lims.results_report.version:" msgid "Laboratories" msgstr "Laboratorios" @@ -15434,6 +15463,14 @@ msgctxt "wizard_button:lims.results_report_annulation,start,end:" msgid "Cancel" msgstr "Cancelar" +msgctxt "wizard_button:lims.results_report_waiting,start,confirm:" +msgid "Confirm" +msgstr "Confirmar" + +msgctxt "wizard_button:lims.results_report_waiting,start,end:" +msgid "Cancel" +msgstr "Cancelar" + msgctxt "wizard_button:lims.sample.add_service,send_ack_of_receipt,end:" msgid "Cancel" msgstr "Cancelar" diff --git a/lims/results_report.py b/lims/results_report.py index e7638ef..f2b4774 100644 --- a/lims/results_report.py +++ b/lims/results_report.py @@ -569,6 +569,7 @@ class ResultsReportVersionDetail(Workflow, ModelSQL, ModelView): valid = fields.Boolean('Active', readonly=True) state = fields.Selection([ ('draft', 'Draft'), + ('waiting', 'Waiting'), ('revised', 'Revised'), ('released', 'Released'), ('annulled', 'Annulled'), @@ -648,6 +649,7 @@ class ResultsReportVersionDetail(Workflow, ModelSQL, ModelView): states={'readonly': Eval('state') != 'annulled'}, depends=_depends) annulment_reason_print = fields.Boolean('Print annulment reason', states={'readonly': Eval('state') != 'annulled'}, depends=_depends) + waiting_reason = fields.Text('Waiting reason', readonly=True) # Report format report_section = fields.Function(fields.Char('Section'), @@ -691,6 +693,8 @@ class ResultsReportVersionDetail(Workflow, ModelSQL, ModelView): cls._order.insert(0, ('report_version', 'DESC')) cls._order.insert(1, ('number', 'DESC')) cls._transitions = set(( + ('draft', 'waiting'), + ('waiting', 'draft'), ('draft', 'revised'), ('revised', 'draft'), ('revised', 'released'), @@ -698,7 +702,7 @@ class ResultsReportVersionDetail(Workflow, ModelSQL, ModelView): )) cls._buttons.update({ 'draft': { - 'invisible': Eval('state') != 'revised', + 'invisible': ~Eval('state').in_(['waiting', 'revised']), 'depends': ['state'], }, 'revise': { @@ -843,6 +847,14 @@ class ResultsReportVersionDetail(Workflow, ModelSQL, ModelView): def default_report_result_type_forced(): return 'none' + @classmethod + def view_attributes(cls): + return super().view_attributes() + [ + ('//page[@id="waiting"]', 'states', { + 'invisible': Eval('state') != 'waiting', + }), + ] + @classmethod def get_next_number(cls, report_version_id, d_count): detail_number = cls.search_count([ @@ -3000,6 +3012,55 @@ class NewResultsReportVersion(Wizard): return 'end' +class ResultsReportWaitingStart(ModelView): + 'Results Report Waiting' + __name__ = 'lims.results_report_waiting.start' + + waiting_reason = fields.Text('Waiting reason', required=True) + + +class ResultsReportWaiting(Wizard): + 'Results Report Waiting' + __name__ = 'lims.results_report_waiting' + + start_state = 'check' + check = StateTransition() + start = StateView('lims.results_report_waiting.start', + 'lims.lims_results_report_waiting_start_view_form', [ + Button('Cancel', 'end', 'tryton-cancel'), + Button('Confirm', 'confirm', 'tryton-ok', default=True), + ]) + confirm = StateTransition() + + def transition_check(self): + ResultsDetail = Pool().get('lims.results_report.version.detail') + + details = ResultsDetail.search([ + ('id', 'in', Transaction().context['active_ids']), + ('state', '=', 'draft'), + ]) + if details: + return 'start' + return 'end' + + def transition_confirm(self): + ResultsDetail = Pool().get('lims.results_report.version.detail') + + details = ResultsDetail.search([ + ('id', 'in', Transaction().context['active_ids']), + ('state', '=', 'draft'), + ]) + if details: + ResultsDetail.write(details, { + 'state': 'waiting', + 'waiting_reason': self.start.waiting_reason, + }) + return 'end' + + def end(self): + return 'reload' + + class PrintResultReport(Wizard): 'Print Results Report' __name__ = 'lims.print_result_report' diff --git a/lims/results_report.xml b/lims/results_report.xml index a03df4d..0ea6814 100644 --- a/lims/results_report.xml +++ b/lims/results_report.xml @@ -182,10 +182,19 @@ + + Waiting + + + + + Revised - + @@ -194,7 +203,7 @@ Released - + @@ -202,7 +211,7 @@ Annulled - + @@ -693,6 +702,25 @@ lims.results_report.version.detail.new_version + + + + lims.results_report_waiting.start + form + results_report_waiting_form + + + + Report Waiting + lims.results_report_waiting + + + + form_action + lims.results_report.version.detail,-1 + + + + + + + diff --git a/lims/view/results_report_waiting_form.xml b/lims/view/results_report_waiting_form.xml new file mode 100644 index 0000000..804cdd4 --- /dev/null +++ b/lims/view/results_report_waiting_form.xml @@ -0,0 +1,5 @@ + +
+ + + diff --git a/lims_diagnosis/results_report.py b/lims_diagnosis/results_report.py index 544fdf7..ab32a1f 100644 --- a/lims_diagnosis/results_report.py +++ b/lims_diagnosis/results_report.py @@ -28,6 +28,8 @@ class ResultsReportVersionDetail(metaclass=PoolMeta): if diagnosed_state not in cls.state.selection: cls.state.selection.append(diagnosed_state) cls._transitions = set(( + ('draft', 'waiting'), + ('waiting', 'draft'), ('draft', 'diagnosed'), ('diagnosed', 'draft'), ('diagnosed', 'revised'), diff --git a/lims_diagnosis/results_report.xml b/lims_diagnosis/results_report.xml index 33f61f1..80607ff 100644 --- a/lims_diagnosis/results_report.xml +++ b/lims_diagnosis/results_report.xml @@ -48,7 +48,7 @@ Diagnosed - +