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 @@
+
diff --git a/lims_report_html/view/results_report_version_detail_relate_attachment_form.xml b/lims_report_html/view/results_report_version_detail_relate_attachment_form.xml
new file mode 100644
index 0000000..c4b6527
--- /dev/null
+++ b/lims_report_html/view/results_report_version_detail_relate_attachment_form.xml
@@ -0,0 +1,7 @@
+
+