From 350c996592503625059ab21d9424d252c16b71b7 Mon Sep 17 00:00:00 2001 From: "Adrien Peiffer (ACSONE)" Date: Wed, 27 Jan 2016 08:21:30 +0100 Subject: [PATCH] [IMP][mis_builder] MIS Builder widget improvement, add print and export button in the widget. --- mis_builder/models/mis_builder.py | 24 +++++ mis_builder/report/mis_builder_xls.py | 2 +- mis_builder/report/mis_builder_xlsx.py | 3 +- mis_builder/static/src/js/mis_builder.js | 67 ++++++++++++- mis_builder/static/src/xml/mis_widget.xml | 115 +++++++++++----------- mis_builder/views/mis_builder.xml | 24 +++-- 6 files changed, 161 insertions(+), 74 deletions(-) diff --git a/mis_builder/models/mis_builder.py b/mis_builder/models/mis_builder.py index b3b8fb15..e48c0586 100644 --- a/mis_builder/models/mis_builder.py +++ b/mis_builder/models/mis_builder.py @@ -603,6 +603,30 @@ class MisReportInstance(models.Model): 'target': 'new', } + @api.multi + def print_pdf(self): + self.ensure_one() + 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, + } + + @api.multi + def export_xls(self): + self.ensure_one() + return { + 'name': 'MIS report instance XLSX report', + 'model': 'mis.report.instance', + 'type': 'ir.actions.report.xml', + 'report_name': 'mis.report.instance.xlsx', + 'report_type': 'xlsx', + '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/mis_builder_xlsx.py b/mis_builder/report/mis_builder_xlsx.py index 9aee3685..be7793aa 100644 --- a/mis_builder/report/mis_builder_xlsx.py +++ b/mis_builder/report/mis_builder_xlsx.py @@ -23,6 +23,7 @@ ############################################################################## from openerp.addons.report_xlsx.report.report_xlsx import ReportXlsx +from openerp.report import report_sxw import logging _logger = logging.getLogger(__name__) @@ -91,4 +92,4 @@ class MisBuilderXslx(ReportXlsx): MisBuilderXslx('report.mis.report.instance.xlsx', - 'mis.report.instance') + 'mis.report.instance', parser=report_sxw.rml_parse) diff --git a/mis_builder/static/src/js/mis_builder.js b/mis_builder/static/src/js/mis_builder.js index 3f314781..24daa055 100644 --- a/mis_builder/static/src/js/mis_builder.js +++ b/mis_builder/static/src/js/mis_builder.js @@ -5,6 +5,7 @@ var core = require('web.core'); var form_common = require('web.form_common'); var Model = require('web.DataModel'); var data = require('web.data'); +var ActionManager = require('web.ActionManager'); var MisReport = form_common.FormWidget.extend({ /** @@ -16,21 +17,67 @@ var MisReport = form_common.FormWidget.extend({ 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; + var context = {} + if (this.mis_report_instance_id){ + context['active_ids'] = [this.mis_report_instance_id]; + } + return context + }, + + print: function() { + var self = this + var context = new data.CompoundContext(self.build_context(), self.get_context()|| {}) + new 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 + var context = new data.CompoundContext(self.build_context(), self.get_context()|| {}) + new Model("mis.report.instance").call( + "export_xls", + [self.mis_report_instance_id], + {'context': context} + ).then(function(result){ + self.do_action(result).done(function(result){ + }); + }); + }, + generate_content: function() { + var self = this + var context = new data.CompoundContext(self.build_context(), self.get_context()|| {}) new Model("mis.report.instance").call( "compute", - [self.getParent().dataset.context.active_id], - {'context': new data.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", }, @@ -54,6 +101,18 @@ var MisReport = form_common.FormWidget.extend({ }, }); +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); + } + } +}); core.form_custom_registry.add('mis_report', 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 f5154381..58dce1bb 100644 --- a/mis_builder/views/mis_builder.xml +++ b/mis_builder/views/mis_builder.xml @@ -99,15 +99,15 @@ - - MIS report instance XLS report - mis.report.instance - ir.actions.report.xml - mis.report.instance.xlsx - xlsx - - - + + MIS report instance XLS report + mis.report.instance + ir.actions.report.xml + mis.report.instance.xlsx + xlsx + + + MIS report instance QWEB PDF report mis.report.instance @@ -124,8 +124,6 @@
-