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
+
+
+
+