From d7f707273a552dbd2f804ef114e5ece4b2932147 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Bernardi?= Date: Tue, 20 Dec 2022 21:43:48 -0300 Subject: [PATCH] lims_report_html: results report: add wizard for uploading attachments to sections --- lims_report_html/__init__.py | 2 + lims_report_html/locale/es.po | 49 +++++++++ lims_report_html/results_report.py | 99 +++++++++++++++++++ lims_report_html/results_report.xml | 23 +++++ .../results_report_version_detail_form.xml | 1 + ..._version_detail_relate_attachment_form.xml | 7 ++ 6 files changed, 181 insertions(+) create mode 100644 lims_report_html/view/results_report_version_detail_relate_attachment_form.xml diff --git a/lims_report_html/__init__.py b/lims_report_html/__init__.py index 2e5ab44..2d59464 100644 --- a/lims_report_html/__init__.py +++ b/lims_report_html/__init__.py @@ -34,12 +34,14 @@ def register(): results_report.ResultsReportVersionDetailTrendChart, results_report.ResultsReportVersionDetailSample, results_report.GenerateReportStart, + results_report.RelateAttachmentResultsReportStart, notebook.Notebook, module='lims_report_html', type_='model') Pool.register( action.ReportTranslationSet, sample.CreateSample, results_report.GenerateReport, + results_report.RelateAttachmentResultsReport, module='lims_report_html', type_='wizard') Pool.register( results_report.ResultReport, diff --git a/lims_report_html/locale/es.po b/lims_report_html/locale/es.po index 137d35b..5bea528 100644 --- a/lims_report_html/locale/es.po +++ b/lims_report_html/locale/es.po @@ -182,6 +182,21 @@ msgctxt "field:lims.results_report.version.detail,trend_charts:" msgid "Trend Charts" msgstr "Gráficos de tendencia" +msgctxt "" +"field:lims.results_report.version.detail.relate_attachment.start,attachment:" +msgid "Attachment" +msgstr "Adjunto" + +msgctxt "" +"field:lims.results_report.version.detail.relate_attachment.start,attachment_domain:" +msgid "Attachment domain" +msgstr "Dominio para Adjunto" + +msgctxt "" +"field:lims.results_report.version.detail.relate_attachment.start,position:" +msgid "Position" +msgstr "Posición" + msgctxt "field:lims.results_report.version.detail.sample,attachments:" msgid "Attachments" msgstr "Adjuntos" @@ -246,6 +261,11 @@ msgctxt "model:ir.action,name:report_result_report_html" msgid "Results Report" msgstr "Informe de resultados" +msgctxt "" +"model:ir.action,name:wiz_results_report_version_detail_relate_attachment" +msgid "Relate Attachment to Results Report" +msgstr "Relacionar adjunto a Informe de resultados" + msgctxt "model:ir.message,text:msg_no" msgid "No" msgstr "No" @@ -286,6 +306,11 @@ msgctxt "model:lims.report.template.trend.chart,name:" msgid "Results Report Template Trend Chart" msgstr "Gráfico de tendencia de Plantilla de Informe de resultados" +msgctxt "" +"model:lims.results_report.version.detail.relate_attachment.start,name:" +msgid "Relate Attachment to Results Report" +msgstr "Relacionar adjunto a Informe de resultados" + msgctxt "model:lims.results_report.version.detail.section,name:" msgid "Results Report Version Detail Section" msgstr "Sección de Detalle de versión de Informe de resultados" @@ -350,6 +375,16 @@ msgctxt "selection:lims.results_report.version.detail,template_type:" msgid "HTML - Header" msgstr "HTML - Encabezado" +msgctxt "" +"selection:lims.results_report.version.detail.relate_attachment.start,position:" +msgid "Following" +msgstr "Siguiente" + +msgctxt "" +"selection:lims.results_report.version.detail.relate_attachment.start,position:" +msgid "Previous" +msgstr "Anterior" + msgctxt "selection:lims.results_report.version.detail.section,position:" msgid "Following" msgstr "Siguiente" @@ -369,3 +404,17 @@ msgstr "Encabezado y Pie de página" msgctxt "view:lims.results_report.version.detail:" msgid "Comments" msgstr "Observaciones" + +msgctxt "view:lims.results_report.version.detail:" +msgid "Relate Attachment" +msgstr "Relacionar archivo adjunto" + +msgctxt "" +"wizard_button:lims.results_report.version.detail.relate_attachment,start,end:" +msgid "Cancel" +msgstr "Cancelar" + +msgctxt "" +"wizard_button:lims.results_report.version.detail.relate_attachment,start,relate:" +msgid "Relate" +msgstr "Relacionar" diff --git a/lims_report_html/results_report.py b/lims_report_html/results_report.py index e018b03..d7392df 100644 --- a/lims_report_html/results_report.py +++ b/lims_report_html/results_report.py @@ -6,6 +6,7 @@ from PyPDF2 import PdfFileMerger from PyPDF2.utils import PdfReadError from trytond.model import ModelView, ModelSQL, fields +from trytond.wizard import Wizard, StateTransition, StateView, Button from trytond.pool import Pool, PoolMeta from trytond.pyson import Eval, Not, Bool from trytond.transaction import Transaction @@ -59,6 +60,12 @@ class ResultsReportVersionDetail(metaclass=PoolMeta): del cls.resultrange_origin.states['invisible'] if 'required' in cls.resultrange_origin.states: del cls.resultrange_origin.states['required'] + cls._buttons.update({ + 'relate_attachment': { + 'invisible': Eval('state').in_(['released', 'annulled']), + 'depends': ['state'], + }, + }) @classmethod def view_attributes(cls): @@ -243,6 +250,12 @@ class ResultsReportVersionDetail(metaclass=PoolMeta): def set_comments_plain(cls, records, name, value): cls.write(records, {'comments': value}) + @classmethod + @ModelView.button_action( + 'lims_report_html.wiz_results_report_version_detail_relate_attachment') + def relate_attachment(cls, details): + pass + class ResultsReportVersionDetailSection(ModelSQL, ModelView): 'Results Report Version Detail Section' @@ -290,6 +303,92 @@ class ResultsReportVersionDetailTrendChart(ModelSQL, ModelView): order = fields.Integer('Order') +class RelateAttachmentResultsReportStart(ModelView): + 'Relate Attachment to Results Report' + __name__ = 'lims.results_report.version.detail.relate_attachment.start' + + position = fields.Selection([ + ('previous', 'Previous'), + ('following', 'Following'), + ], 'Position', required=True) + attachment = fields.Many2One('ir.attachment', 'Attachment', required=True, + domain=[('id', 'in', Eval('attachment_domain'))], + depends=['attachment_domain']) + attachment_domain = fields.Many2Many('ir.attachment', None, None, + 'Attachment domain') + + +class RelateAttachmentResultsReport(Wizard): + 'Relate Attachment to Results Report' + __name__ = 'lims.results_report.version.detail.relate_attachment' + + start = StateView( + 'lims.results_report.version.detail.relate_attachment.start', + 'lims_report_html.' + 'results_report_version_detail_relate_attachment_start_form', [ + Button('Cancel', 'end', 'tryton-cancel'), + Button('Relate', 'relate', 'tryton-ok', default=True), + ]) + relate = StateTransition() + + def default_start(self, fields): + pool = Pool() + ResultsDetail = pool.get('lims.results_report.version.detail') + + detail = ResultsDetail(Transaction().context['active_id']) + + attachments = self.get_attachments(detail) + return {'attachment_domain': [a.id for a in attachments]} + + def _get_resource(self, obj): + return '%s,%s' % (obj.__name__, obj.id) + + def get_attachments(self, detail): + pool = Pool() + Attachment = pool.get('ir.attachment') + + resources = [] + resources.append(self._get_resource(detail)) + for sample in detail.samples: + resources.append(self._get_resource(sample)) + resources.append(self._get_resource(sample.notebook)) + resources.append(self._get_resource(sample.notebook.fraction)) + resources.append(self._get_resource( + sample.notebook.fraction.sample)) + resources.append(self._get_resource( + sample.notebook.fraction.sample.entry)) + for line in sample.notebook_lines: + if not line.notebook_line: + continue + resources.append(self._get_resource(line)) + resources.append(self._get_resource(line.notebook_line)) + + attachments = Attachment.search([ + ('resource', 'in', resources), + ]) + return attachments + + def transition_relate(self): + pool = Pool() + ResultsDetailSection = pool.get( + 'lims.results_report.version.detail.section') + + detail_id = Transaction().context['active_id'] + defaults = { + 'version_detail': detail_id, + 'position': self.start.position, + 'name': self.start.attachment.name, + 'data': self.start.attachment.data, + 'data_id': self.start.attachment.file_id, + 'order': None, + } + ResultsDetailSection.create([defaults]) + return 'end' + + def end(self): + return 'reload' + + class ResultsReportVersionDetailSample(metaclass=PoolMeta): __name__ = 'lims.results_report.version.detail.sample' diff --git a/lims_report_html/results_report.xml b/lims_report_html/results_report.xml index 7f57a15..ddb1236 100644 --- a/lims_report_html/results_report.xml +++ b/lims_report_html/results_report.xml @@ -15,6 +15,16 @@ results_report_version_detail_form + + relate_attachment + + + + + + + @@ -41,6 +51,19 @@ results_report_version_detail_chart_list + + + + lims.results_report.version.detail.relate_attachment.start + form + results_report_version_detail_relate_attachment_form + + + + Relate Attachment to Results Report + lims.results_report.version.detail.relate_attachment + + diff --git a/lims_report_html/view/results_report_version_detail_form.xml b/lims_report_html/view/results_report_version_detail_form.xml index fc76312..ec2fe5a 100644 --- a/lims_report_html/view/results_report_version_detail_form.xml +++ b/lims_report_html/view/results_report_version_detail_form.xml @@ -25,6 +25,7 @@ +