From 7ed1806781b2cec576650668cb7ca20ef36850f3 Mon Sep 17 00:00:00 2001 From: "Adrien Peiffer (ACSONE)" Date: Wed, 27 Jan 2016 08:21:30 +0100 Subject: [PATCH 1/3] [IMP][mis_builder] MIS Builder widget improvement, add print and export button in the widget. --- mis_builder/models/mis_builder.py | 26 ++++ mis_builder/report/mis_builder_xls.py | 2 +- .../report/report_mis_report_instance.py | 3 + mis_builder/static/src/js/mis_builder.js | 68 ++++++++++- mis_builder/static/src/xml/mis_widget.xml | 115 +++++++++--------- mis_builder/views/mis_builder.xml | 26 ++-- 6 files changed, 166 insertions(+), 74 deletions(-) diff --git a/mis_builder/models/mis_builder.py b/mis_builder/models/mis_builder.py index 3872233a..44a0671c 100644 --- a/mis_builder/models/mis_builder.py +++ b/mis_builder/models/mis_builder.py @@ -639,6 +639,32 @@ class MisReportInstance(models.Model): 'target': 'new', } + @api.multi + def print_pdf(self): + self.ensure_one() + data = {'context': self.env.context} + return { + 'name': 'MIS report instance QWEB PDF report', + 'model': 'mis.report.instance', + 'type': 'ir.actions.report.xml', + 'report_name': 'mis_builder.report_mis_report_instance', + 'report_type': 'qweb-pdf', + 'context': self.env.context, + 'data': data, + } + + @api.multi + def export_xls(self): + self.ensure_one() + return { + 'name': 'MIS report instance XLS report', + 'model': 'mis.report.instance', + 'type': 'ir.actions.report.xml', + 'report_name': 'mis.report.instance.xls', + 'report_type': 'xls', + 'context': self.env.context, + } + @api.multi def compute(self): assert len(self) == 1 diff --git a/mis_builder/report/mis_builder_xls.py b/mis_builder/report/mis_builder_xls.py index df3d3ee5..903acb74 100644 --- a/mis_builder/report/mis_builder_xls.py +++ b/mis_builder/report/mis_builder_xls.py @@ -61,7 +61,7 @@ class MisBuilderXls(report_xls): # get the computed result of the report data = self.pool.get('mis.report.instance').compute( - self.cr, self.uid, objects[0].id) + self.cr, self.uid, objects[0].id, self.context) # Column headers header_name_list = [''] diff --git a/mis_builder/report/report_mis_report_instance.py b/mis_builder/report/report_mis_report_instance.py index 44cfbeb8..33f55511 100644 --- a/mis_builder/report/report_mis_report_instance.py +++ b/mis_builder/report/report_mis_report_instance.py @@ -35,6 +35,9 @@ class Report(models.Model): @api.v7 def get_pdf(self, cr, uid, ids, report_name, html=None, data=None, context=None): + if not ids and context.get('active_ids') and\ + report_name == 'mis_builder.report_mis_report_instance': + ids = context.get('active_ids') if ids: report = self._get_report_from_name(cr, uid, report_name) obj = self.pool[report.model].browse(cr, uid, ids, diff --git a/mis_builder/static/src/js/mis_builder.js b/mis_builder/static/src/js/mis_builder.js index df369e06..e9174349 100644 --- a/mis_builder/static/src/js/mis_builder.js +++ b/mis_builder/static/src/js/mis_builder.js @@ -6,21 +6,67 @@ openerp.mis_builder = function(instance) { init: function() { this._super.apply(this, arguments); this.mis_report_data = null; + this.mis_report_instance_id = false; }, - + start: function() { this._super.apply(this, arguments); var self = this; + self.mis_report_instance_id = self.getParent().dataset.context.active_id + self.getParent().dataset.context['no_destroy'] = true; + self.generate_content(); + }, + + get_context: function() { + var self = this; + context = {} + if (this.mis_report_instance_id){ + context['active_ids'] = [this.mis_report_instance_id]; + } + return context + }, + print: function() { + var self = this + context = new instance.web.CompoundContext(self.build_context(), self.get_context()|| {}) + new instance.web.Model("mis.report.instance").call( + "print_pdf", + [self.mis_report_instance_id], + {'context': context} + ).then(function(result){ + self.do_action(result); + }); + }, + export_pdf: function() { + var self = this + context = new instance.web.CompoundContext(self.build_context(), self.get_context()|| {}) + new instance.web.Model("mis.report.instance").call( + "export_xls", + [self.mis_report_instance_id], + {'context': context} + ).then(function(result){ + self.do_action(result).done(function(result){ + a = 2; + }); + }); + }, + generate_content: function() { + var self = this + context = new instance.web.CompoundContext(self.build_context(), self.get_context()|| {}) new instance.web.Model("mis.report.instance").call( "compute", - [self.getParent().dataset.context.active_id], - {'context': new instance.web.CompoundContext()} + [self.mis_report_instance_id], + {'context': context} ).then(function(result){ self.mis_report_data = result; self.renderElement(); }); }, - + renderElement: function() { + this._super(); + var self = this; + self.$(".oe_mis_builder_print").click(_.bind(this.print, this)); + self.$(".oe_mis_builder_export").click(_.bind(this.export_pdf, this)); + }, events: { "click a.mis_builder_drilldown": "drilldown", }, @@ -44,5 +90,19 @@ openerp.mis_builder = function(instance) { }, }); + instance.web.ActionManager.include({ + dialog_stop: function (reason) { + var self = this + if (self.dialog_widget && self.dialog_widget.dataset && self.dialog_widget.dataset.context) { + var context = self.dialog_widget.dataset.context + if (!context['no_destroy']) { + this._super.apply(this, arguments); + } + } else { + this._super.apply(this, arguments); + } + } + }); + instance.web.form.custom_widgets.add('mis_report', 'instance.mis_builder.MisReport'); } diff --git a/mis_builder/static/src/xml/mis_widget.xml b/mis_builder/static/src/xml/mis_widget.xml index 5cfd9994..b668e8d1 100644 --- a/mis_builder/static/src/xml/mis_widget.xml +++ b/mis_builder/static/src/xml/mis_widget.xml @@ -1,62 +1,67 @@ diff --git a/mis_builder/views/mis_builder.xml b/mis_builder/views/mis_builder.xml index 65d3c211..cb117f6f 100644 --- a/mis_builder/views/mis_builder.xml +++ b/mis_builder/views/mis_builder.xml @@ -98,16 +98,16 @@ - - - MIS report instance XLS report - mis.report.instance - ir.actions.report.xml - mis.report.instance.xls - xls - - - + + + MIS report instance XLS report + mis.report.instance + ir.actions.report.xml + mis.report.instance.xls + xls + + + MIS report instance QWEB PDF report mis.report.instance @@ -124,8 +124,6 @@
-