diff --git a/base_report_auto_create_qweb/README.rst b/base_report_auto_create_qweb/README.rst index 7ad0bb818..80615e887 100644 --- a/base_report_auto_create_qweb/README.rst +++ b/base_report_auto_create_qweb/README.rst @@ -6,9 +6,13 @@ Settings > Technical > Reports > Reports it will create an empty Qweb template and the required linking info so that the user does not need to know how to do all the links. -Known issues / Roadmap -====================== -* When copying, duplicate all the required objects +New duplication button added, it enables the possibility of duplicating a report +and assigning the duplicated one a suffix. If the copy option provided by the +system is used this will add 'copy' as suffix. + +Be careful with this option as it can create many unnecessary Qweb views because +it duplicates all the related files to the report you are copying. + Credits ======= diff --git a/base_report_auto_create_qweb/__init__.py b/base_report_auto_create_qweb/__init__.py index 054c8853d..3fc79a2d7 100644 --- a/base_report_auto_create_qweb/__init__.py +++ b/base_report_auto_create_qweb/__init__.py @@ -4,3 +4,4 @@ ############################################################################## from . import models +from . import wizard diff --git a/base_report_auto_create_qweb/__openerp__.py b/base_report_auto_create_qweb/__openerp__.py index a9fb6f8b5..22716005f 100644 --- a/base_report_auto_create_qweb/__openerp__.py +++ b/base_report_auto_create_qweb/__openerp__.py @@ -34,6 +34,9 @@ ], "category": "Tools", "summary": "", - "data": [], + "data": [ + "wizard/report_duplicate_view.xml", + "views/report_xml_view.xml", + ], "installable": True, } diff --git a/base_report_auto_create_qweb/models/report_xml.py b/base_report_auto_create_qweb/models/report_xml.py index 602e95212..28a5efef4 100644 --- a/base_report_auto_create_qweb/models/report_xml.py +++ b/base_report_auto_create_qweb/models/report_xml.py @@ -18,26 +18,76 @@ class IrActionsReport(models.Model): _("Template Name must contain at least a dot in it's name")) report_xml = super(IrActionsReport, self).create(values) if values.get('report_type') in ['qweb-pdf', 'qweb-html']: - qweb_view_data = { - 'name': values['report_name'].split('.')[1], - 'mode': 'primary', - 'type': 'qweb', - 'arch': '\n' - '\n' % values['report_name'], - } - qweb_view = self.env['ir.ui.view'].create(qweb_view_data) - model_data_data = { - 'module': values['report_name'].split('.')[0], - 'name': values['report_name'].split('.')[1], - 'res_id': qweb_view.id, - 'model': 'ir.ui.view', - } - self.env['ir.model.data'].create(model_data_data) - value_view_data = { - 'name': values['name'], - 'model': values['model'], - 'key2': 'client_print_multi', - 'value_unpickle': 'ir.actions.report.xml,%s' % report_xml.id, - } - self.env['ir.values'].create(value_view_data) + report_views = self.env.context.get('report_views') + suffix = self.env.context.get('suffix', 'copy') + report_name = values['report_name'] + module = report_name.split('.')[0] + name = report_name.split('.')[1] + for report_view in report_views: + origin_name = name.replace(('_%s' % suffix), '') + new_report_name = '%s_%s' % (origin_name, suffix) + qweb_view_data = { + 'name': report_view.name.replace( + origin_name, new_report_name), + 'mode': 'primary', + 'type': 'qweb', + 'arch': report_view.arch.replace( + origin_name, new_report_name), + } + qweb_view = self.env['ir.ui.view'].create(qweb_view_data) + model_data_data = { + 'module': module, + 'name': report_view.name.replace( + origin_name, new_report_name), + 'res_id': qweb_view.id, + 'model': 'ir.ui.view', + } + self.env['ir.model.data'].create(model_data_data) + value_view_data = { + 'name': values['name'], + 'model': values['model'], + 'key2': 'client_print_multi', + 'value_unpickle': ('ir.actions.report.xml,%s' % + report_xml.id), + } + self.env['ir.values'].create(value_view_data) + if not report_views: + qweb_view_data = { + 'name': name, + 'mode': 'primary', + 'type': 'qweb', + 'arch': '\n' + '\n' % report_name, + } + qweb_view = self.env['ir.ui.view'].create(qweb_view_data) + model_data_data = { + 'module': module, + 'name': name, + 'res_id': qweb_view.id, + 'model': 'ir.ui.view', + } + self.env['ir.model.data'].create(model_data_data) + value_view_data = { + 'name': values['name'], + 'model': values['model'], + 'key2': 'client_print_multi', + 'value_unpickle': ( + 'ir.actions.report.xml,%s' % report_xml.id), + } + self.env['ir.values'].create(value_view_data) return report_xml + + @api.one + def copy(self, default=None): + if default is None: + default = {} + suffix = self.env.context.get('suffix', 'copy') + default['name'] = '%s (%s)' % (self.name, suffix) + default['report_name'] = '%s_%s' % (self.report_name, suffix.lower()) + report_views = self.env['ir.ui.view'].search([ + ('name', 'ilike', self.report_name.split('.')[1]), + ('type', '=', 'qweb')]) + return super(IrActionsReport, + self.with_context( + report_views=report_views, + suffix=suffix.lower())).copy(default=default) diff --git a/base_report_auto_create_qweb/views/report_xml_view.xml b/base_report_auto_create_qweb/views/report_xml_view.xml new file mode 100644 index 000000000..e558770af --- /dev/null +++ b/base_report_auto_create_qweb/views/report_xml_view.xml @@ -0,0 +1,19 @@ + + + + + ir.actions.report.xml.form + ir.actions.report.xml + + + + +
+
+
+
+
+
+
diff --git a/base_report_auto_create_qweb/wizard/__init__.py b/base_report_auto_create_qweb/wizard/__init__.py new file mode 100644 index 000000000..1d0ac90ff --- /dev/null +++ b/base_report_auto_create_qweb/wizard/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## + +from . import report_duplicate diff --git a/base_report_auto_create_qweb/wizard/report_duplicate.py b/base_report_auto_create_qweb/wizard/report_duplicate.py new file mode 100644 index 000000000..75687d8ac --- /dev/null +++ b/base_report_auto_create_qweb/wizard/report_duplicate.py @@ -0,0 +1,22 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## + +from openerp import api, fields, models + + +class IrActionsReportDuplicate(models.TransientModel): + _name = 'ir.actions.report.xml.duplicate' + + suffix = fields.Char( + string='Suffix', help='This suffix will be added to the report') + + @api.one + def duplicate_report(self): + active_id = self.env.context.get('active_id') + model = self.env.context.get('active_model') + if model: + object = self.env[model].browse(active_id) + object.with_context(suffix=self.suffix).copy() + return {} diff --git a/base_report_auto_create_qweb/wizard/report_duplicate_view.xml b/base_report_auto_create_qweb/wizard/report_duplicate_view.xml new file mode 100644 index 000000000..38ce052f7 --- /dev/null +++ b/base_report_auto_create_qweb/wizard/report_duplicate_view.xml @@ -0,0 +1,33 @@ + + + + + ir.actions.report.xml.duplicate.form + ir.actions.report.xml.duplicate + +
+ + + +
+
+
+
+
+ + + Report duplication + ir.actions.report.xml.duplicate + form + form + + new + + +
+