From 505013dac9a7c775c55f09c05a072514e68cf074 Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Tue, 19 Nov 2019 14:45:28 +0100 Subject: [PATCH] [MIG] report_py3o, report_py3o_fusion_server: Migration to 13.0 --- report_py3o/__manifest__.py | 2 +- report_py3o/demo/res_user.odt | Bin 8671 -> 9522 bytes .../migrations/10.0.2.0.0/pre-migration.py | 11 ---- report_py3o/models/ir_actions_report.py | 7 --- report_py3o/models/py3o_report.py | 15 ----- .../static/src/js/py3oactionmanager.js | 55 +++++++++--------- report_py3o/views/report_py3o.xml | 6 +- 7 files changed, 31 insertions(+), 65 deletions(-) delete mode 100644 report_py3o/migrations/10.0.2.0.0/pre-migration.py diff --git a/report_py3o/__manifest__.py b/report_py3o/__manifest__.py index 4b45c018..3121d358 100644 --- a/report_py3o/__manifest__.py +++ b/report_py3o/__manifest__.py @@ -4,7 +4,7 @@ "name": "Py3o Report Engine", "summary": "Reporting engine based on Libreoffice (ODT -> ODT, " "ODT -> PDF, ODT -> DOC, ODT -> DOCX, ODS -> ODS, etc.)", - "version": "12.0.2.0.2", + "version": "13.0.1.0.0", "category": "Reporting", "license": "AGPL-3", "author": "XCG Consulting," "ACSONE SA/NV," "Odoo Community Association (OCA)", diff --git a/report_py3o/demo/res_user.odt b/report_py3o/demo/res_user.odt index f0d66bb89cedef8090f8e9848f09df270517f5c2..acdd576a766d6a901ebcaeac59d01dac41ccc2a9 100644 GIT binary patch literal 9522 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 diff --git a/report_py3o/migrations/10.0.2.0.0/pre-migration.py b/report_py3o/migrations/10.0.2.0.0/pre-migration.py deleted file mode 100644 index df6c5f29..00000000 --- a/report_py3o/migrations/10.0.2.0.0/pre-migration.py +++ /dev/null @@ -1,11 +0,0 @@ -# © 2018 Therp BV -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - - -def migrate(cr, version=None): - # when migrating from a pre-split version of the module, pull the fusion - # server module too to have no loss of features - cr.execute( - "update ir_module_module set state='to install' " - "where name='report_py3o_fusion_server' and state='uninstalled'" - ) diff --git a/report_py3o/models/ir_actions_report.py b/report_py3o/models/ir_actions_report.py index 67045557..c5a5c010 100644 --- a/report_py3o/models/ir_actions_report.py +++ b/report_py3o/models/ir_actions_report.py @@ -27,7 +27,6 @@ class IrActionsReport(models.Model): _inherit = "ir.actions.report" - @api.multi @api.constrains("py3o_filetype", "report_type") def _check_py3o_filetype(self): for report in self: @@ -114,7 +113,6 @@ class IrActionsReport(models.Model): return lo_bin @api.depends("report_type", "py3o_filetype") - @api.multi def _compute_is_py3o_native_format(self): fmt = Formats() for rec in self: @@ -123,14 +121,12 @@ class IrActionsReport(models.Model): filetype = rec.py3o_filetype rec.is_py3o_native_format = fmt.get_format(filetype).native - @api.multi def _compute_lo_bin_path(self): lo_bin = self._get_lo_bin() for rec in self: rec.lo_bin_path = lo_bin @api.depends("lo_bin_path", "is_py3o_native_format", "report_type") - @api.multi def _compute_py3o_report_not_available(self): for rec in self: if not rec.report_type == "py3o": @@ -156,7 +152,6 @@ class IrActionsReport(models.Model): [("report_name", "=", report_name), ("report_type", "=", report_type)] ) - @api.multi def render_py3o(self, res_ids, data): self.ensure_one() if self.report_type != "py3o": @@ -170,7 +165,6 @@ class IrActionsReport(models.Model): .create_report(res_ids, data) ) - @api.multi def gen_report_download_filename(self, res_ids, data): """Override this function to change the name of the downloaded report """ @@ -181,7 +175,6 @@ class IrActionsReport(models.Model): return safe_eval(report.print_report_name, {"object": obj, "time": time}) return "{}.{}".format(self.name, self.py3o_filetype) - @api.multi def _get_attachments(self, res_ids): """ Return the report already generated for the given res_ids """ diff --git a/report_py3o/models/py3o_report.py b/report_py3o/models/py3o_report.py index b7b673fa..6ed73b3a 100644 --- a/report_py3o/models/py3o_report.py +++ b/report_py3o/models/py3o_report.py @@ -77,7 +77,6 @@ class Py3oReport(models.TransientModel): comodel_name="ir.actions.report", required=True ) - @api.multi def _is_valid_template_path(self, path): """ Check if the path is a trusted path for py3o templates. """ @@ -100,7 +99,6 @@ class Py3oReport(models.TransientModel): ) return is_valid - @api.multi def _is_valid_template_filename(self, filename): """ Check if the filename can be used as py3o template """ @@ -116,7 +114,6 @@ class Py3oReport(models.TransientModel): logger.warning("%s is not a valid Py3o template filename", filename) return False - @api.multi def _get_template_from_path(self, tmpl_name): """ Return the template from the path to root of the module if specied or an absolute path on your server @@ -137,7 +134,6 @@ class Py3oReport(models.TransientModel): return tmpl.read() return None - @api.multi def _get_template_fallback(self, model_instance): """ Return the template referenced in the report definition @@ -147,7 +143,6 @@ class Py3oReport(models.TransientModel): report_xml = self.ir_actions_report_id return self._get_template_from_path(report_xml.py3o_template_fallback) - @api.multi def get_template(self, model_instance): """private helper to fetch the template data either from the database or from the default template file provided by the implementer. @@ -176,7 +171,6 @@ class Py3oReport(models.TransientModel): return tmpl_data - @api.multi def _extend_parser_context(self, context, report_xml): # add default extenders for fct in _extender_functions.get(None, []): @@ -187,7 +181,6 @@ class Py3oReport(models.TransientModel): for fct in _extender_functions[xml_id]: fct(report_xml, context) - @api.multi def _get_parser_context(self, model_instance, data): report_xml = self.ir_actions_report_id context = Py3oParserContext(self.env).localcontext @@ -196,7 +189,6 @@ class Py3oReport(models.TransientModel): self._extend_parser_context(context, report_xml) return context - @api.multi def _postprocess_report(self, model_instance, result_path): if len(model_instance) == 1 and self.ir_actions_report_id.attachment: with open(result_path, "rb") as f: @@ -207,7 +199,6 @@ class Py3oReport(models.TransientModel): self.ir_actions_report_id.postprocess_pdf_report(model_instance, buffer) return result_path - @api.multi def _create_single_report(self, model_instance, data): """ This function to generate our py3o report """ @@ -232,7 +223,6 @@ class Py3oReport(models.TransientModel): return self._postprocess_report(model_instance, result_path) - @api.multi def _convert_single_report(self, result_path, model_instance, data): """Run a command to convert to our target format""" if not self.ir_actions_report_id.is_py3o_native_format: @@ -252,7 +242,6 @@ class Py3oReport(models.TransientModel): ) return result_path - @api.multi def _convert_single_report_cmd(self, result_path, model_instance, data): """Return a command list suitable for use in subprocess.call""" lo_bin = self.ir_actions_report_id.lo_bin_path @@ -271,7 +260,6 @@ class Py3oReport(models.TransientModel): result_path, ] - @api.multi def _get_or_create_single_report( self, model_instance, data, existing_reports_attachment ): @@ -285,7 +273,6 @@ class Py3oReport(models.TransientModel): return report_file return self._create_single_report(model_instance, data) - @api.multi def _zip_results(self, reports_path): self.ensure_one() zfname_prefix = self.ir_actions_report_id.name @@ -317,7 +304,6 @@ class Py3oReport(models.TransientModel): writer.write(merged_file) return merged_file_path - @api.multi def _merge_results(self, reports_path): self.ensure_one() filetype = self.ir_actions_report_id.py3o_filetype @@ -339,7 +325,6 @@ class Py3oReport(models.TransientModel): except (OSError, IOError): logger.error("Error when trying to remove file %s" % temporary_file) - @api.multi def create_report(self, res_ids, data): """ Override this function to handle our py3o report """ diff --git a/report_py3o/static/src/js/py3oactionmanager.js b/report_py3o/static/src/js/py3oactionmanager.js index cf27145c..70ff2108 100644 --- a/report_py3o/static/src/js/py3oactionmanager.js +++ b/report_py3o/static/src/js/py3oactionmanager.js @@ -1,38 +1,39 @@ /* Copyright 2017-2018 ACSONE SA/NV * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */ odoo.define('report_py3o.report', function (require) { + "use strict"; -var ActionManager = require('web.ActionManager'); + var ActionManager = require('web.ActionManager'); -ActionManager.include({ - _executeReportAction: function (action, options) { + ActionManager.include({ + _executeReportAction: function (action, options) { // Py3o reports - if ('report_type' in action && action.report_type === 'py3o' ) { - return this._triggerDownload(action, options, 'py3o'); - } else { + if ('report_type' in action && action.report_type === 'py3o' ) { + return this._triggerDownload(action, options, 'py3o'); + } return this._super.apply(this, arguments); - } - }, - _makeReportUrls: function(action) { - var reportUrls = this._super.apply(this, arguments); - reportUrls.py3o = '/report/py3o/' + action.report_name; - // We may have to build a query string with `action.data`. It's the place - // were report's using a wizard to customize the output traditionally put - // their options. - if (_.isUndefined(action.data) || _.isNull(action.data) || - (_.isObject(action.data) && _.isEmpty(action.data))) { - if (action.context.active_ids) { - var activeIDsPath = '/' + action.context.active_ids.join(','); - reportUrls.py3o += activeIDsPath;; + }, + + _makeReportUrls: function (action) { + var reportUrls = this._super.apply(this, arguments); + reportUrls.py3o = '/report/py3o/' + action.report_name; + // We may have to build a query string with `action.data`. It's the place + // were report's using a wizard to customize the output traditionally put + // their options. + if (_.isUndefined(action.data) || _.isNull(action.data) || + _.isObject(action.data) && _.isEmpty(action.data)) { + if (action.context.active_ids) { + var activeIDsPath = '/' + action.context.active_ids.join(','); + reportUrls.py3o += activeIDsPath; + } + } else { + var serializedOptionsPath = '?options=' + encodeURIComponent(JSON.stringify(action.data)); + serializedOptionsPath += '&context=' + encodeURIComponent(JSON.stringify(action.context)); + reportUrls.py3o += serializedOptionsPath; } - } else { - var serializedOptionsPath = '?options=' + encodeURIComponent(JSON.stringify(action.data)); - serializedOptionsPath += '&context=' + encodeURIComponent(JSON.stringify(action.context)); - reportUrls.py3o += serializedOptionsPath; - } - return reportUrls; - } -}); + return reportUrls; + }, + }); }); diff --git a/report_py3o/views/report_py3o.xml b/report_py3o/views/report_py3o.xml index d99fc0d8..d2702a30 100644 --- a/report_py3o/views/report_py3o.xml +++ b/report_py3o/views/report_py3o.xml @@ -1,10 +1,8 @@ - - + - - +