From cd0c96016f4c1d1d5bd0707ec8ef5e21813ac260 Mon Sep 17 00:00:00 2001
From: sbejaoui
Date: Thu, 11 Jul 2019 15:36:43 +0200
Subject: [PATCH 01/11] [ADD] - report substitute
This addon give the possibility to substitute a report action by another based on some criteria.
---
report_substitute/__init__.py | 1 +
report_substitute/__manifest__.py | 20 +++++++++
report_substitute/models/__init__.py | 2 +
report_substitute/models/ir_actions_report.py | 40 +++++++++++++++++
...ir_actions_report_substitution_criteria.py | 28 ++++++++++++
...r_actions_report_substitution_criteria.xml | 25 +++++++++++
report_substitute/views/ir_actions_report.xml | 43 +++++++++++++++++++
.../odoo/addons/report_substitute | 1 +
setup/report_substitute/setup.py | 6 +++
9 files changed, 166 insertions(+)
create mode 100644 report_substitute/__init__.py
create mode 100644 report_substitute/__manifest__.py
create mode 100644 report_substitute/models/__init__.py
create mode 100644 report_substitute/models/ir_actions_report.py
create mode 100644 report_substitute/models/ir_actions_report_substitution_criteria.py
create mode 100644 report_substitute/security/ir_actions_report_substitution_criteria.xml
create mode 100644 report_substitute/views/ir_actions_report.xml
create mode 120000 setup/report_substitute/odoo/addons/report_substitute
create mode 100644 setup/report_substitute/setup.py
diff --git a/report_substitute/__init__.py b/report_substitute/__init__.py
new file mode 100644
index 000000000..0650744f6
--- /dev/null
+++ b/report_substitute/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/report_substitute/__manifest__.py b/report_substitute/__manifest__.py
new file mode 100644
index 000000000..a9ad3ca7a
--- /dev/null
+++ b/report_substitute/__manifest__.py
@@ -0,0 +1,20 @@
+# Copyright 2019 ACSONE SA/NV
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+{
+ 'name': 'Report Substitute',
+ 'summary': """
+ This addon give the possibility to substitute a report action by
+ another based on some criteria.
+ """,
+ 'version': '12.0.1.0.0',
+ 'license': 'AGPL-3',
+ 'author': 'ACSONE SA/NV,'
+ 'Odoo Community Association (OCA)',
+ 'website': 'https://github.com/acsone/reporting-engine',
+ 'depends': ['base'],
+ 'data': [
+ 'security/ir_actions_report_substitution_criteria.xml',
+ 'views/ir_actions_report.xml',
+ ],
+}
diff --git a/report_substitute/models/__init__.py b/report_substitute/models/__init__.py
new file mode 100644
index 000000000..d1a25e84a
--- /dev/null
+++ b/report_substitute/models/__init__.py
@@ -0,0 +1,2 @@
+from . import ir_actions_report
+from . import ir_actions_report_substitution_criteria
diff --git a/report_substitute/models/ir_actions_report.py b/report_substitute/models/ir_actions_report.py
new file mode 100644
index 000000000..ca2e7ce83
--- /dev/null
+++ b/report_substitute/models/ir_actions_report.py
@@ -0,0 +1,40 @@
+# Copyright 2019 ACSONE SA/NV
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import api, fields, models, _
+from odoo.tools.safe_eval import safe_eval
+
+
+class IrActionReport(models.Model):
+
+ _inherit = 'ir.actions.report'
+
+ action_report_substitution_criteria_ids = fields.One2many(
+ comodel_name="ir.actions.report.substitution.criteria",
+ inverse_name="action_report_id",
+ string="Substitution Criteria",
+ )
+
+ @api.multi
+ def _get_substitution_report(self, model, active_ids):
+ self.ensure_one()
+ model = self.env[model]
+ for (
+ substitution_report_criteria
+ ) in self.action_report_substitution_criteria_ids:
+ domain = safe_eval(substitution_report_criteria.domain)
+ domain.append(('id', 'in', active_ids))
+ if set(model.search(domain).ids) == set(active_ids):
+ return (
+ substitution_report_criteria.substitution_action_report_id
+ )
+ return False
+
+ @api.multi
+ def render(self, res_ids, data=None):
+ substitution_report = self._get_substitution_report(
+ self.model, res_ids
+ )
+ if substitution_report:
+ return substitution_report.render(res_ids)
+ return super().render(res_ids, data)
diff --git a/report_substitute/models/ir_actions_report_substitution_criteria.py b/report_substitute/models/ir_actions_report_substitution_criteria.py
new file mode 100644
index 000000000..04430aede
--- /dev/null
+++ b/report_substitute/models/ir_actions_report_substitution_criteria.py
@@ -0,0 +1,28 @@
+# Copyright 2019 ACSONE SA/NV
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import fields, models
+
+
+class ActionsReportSubstitutionCriteria(models.Model):
+
+ _name = 'ir.actions.report.substitution.criteria'
+ _description = 'Action Report Substitution Criteria'
+ _order = 'sequence ASC'
+
+ sequence = fields.Integer(default=10)
+ action_report_id = fields.Many2one(
+ comodel_name="ir.actions.report",
+ string="Report Action",
+ required=True,
+ ondelete="cascade",
+ )
+ model = fields.Char(related="action_report_id.model", store=True)
+ domain = fields.Char(string="Domain", required=True, default="[]")
+ substitution_action_report_id = fields.Many2one(
+ comodel_name="ir.actions.report",
+ string="Substitution Report Action",
+ required=True,
+ ondelete="cascade",
+ domain="[('model', '=', model)]"
+ )
diff --git a/report_substitute/security/ir_actions_report_substitution_criteria.xml b/report_substitute/security/ir_actions_report_substitution_criteria.xml
new file mode 100644
index 000000000..b74770b85
--- /dev/null
+++ b/report_substitute/security/ir_actions_report_substitution_criteria.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+ action.report.substitution.criteria user access
+
+
+
+
+
+
+
+
+ action.report.substitution.criteria manager access
+
+
+
+
+
+
+
+
diff --git a/report_substitute/views/ir_actions_report.xml b/report_substitute/views/ir_actions_report.xml
new file mode 100644
index 000000000..750aeb741
--- /dev/null
+++ b/report_substitute/views/ir_actions_report.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+ ir.actions.report.form (in report_dispatch_base)
+
+ ir.actions.report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/setup/report_substitute/odoo/addons/report_substitute b/setup/report_substitute/odoo/addons/report_substitute
new file mode 120000
index 000000000..b85da0bad
--- /dev/null
+++ b/setup/report_substitute/odoo/addons/report_substitute
@@ -0,0 +1 @@
+../../../../report_substitute
\ No newline at end of file
diff --git a/setup/report_substitute/setup.py b/setup/report_substitute/setup.py
new file mode 100644
index 000000000..28c57bb64
--- /dev/null
+++ b/setup/report_substitute/setup.py
@@ -0,0 +1,6 @@
+import setuptools
+
+setuptools.setup(
+ setup_requires=['setuptools-odoo'],
+ odoo_addon=True,
+)
From 255cf1d6b43ee581d7a2495eb480d8dfaafa0573 Mon Sep 17 00:00:00 2001
From: sbejaoui
Date: Mon, 22 Jul 2019 14:26:07 +0200
Subject: [PATCH 02/11] [ADD] - Add readme
---
report_substitute/README.rst | 100 ++++
report_substitute/__manifest__.py | 3 +-
report_substitute/readme/CONTRIBUTORS.rst | 1 +
report_substitute/readme/DESCRIPTION.rst | 4 +
report_substitute/readme/ROADMAP.rst | 1 +
report_substitute/readme/USAGE.rst | 15 +
.../static/description/index.html | 443 ++++++++++++++++++
report_substitute/views/ir_actions_report.xml | 2 +-
8 files changed, 566 insertions(+), 3 deletions(-)
create mode 100644 report_substitute/README.rst
create mode 100644 report_substitute/readme/CONTRIBUTORS.rst
create mode 100644 report_substitute/readme/DESCRIPTION.rst
create mode 100644 report_substitute/readme/ROADMAP.rst
create mode 100644 report_substitute/readme/USAGE.rst
create mode 100644 report_substitute/static/description/index.html
diff --git a/report_substitute/README.rst b/report_substitute/README.rst
new file mode 100644
index 000000000..7739e6f2f
--- /dev/null
+++ b/report_substitute/README.rst
@@ -0,0 +1,100 @@
+=================
+Report Substitute
+=================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+ :target: https://odoo-community.org/page/development-status
+ :alt: Beta
+.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Freporting--engine-lightgray.png?logo=github
+ :target: https://github.com/OCA/reporting-engine/tree/12.0/report_substitute
+ :alt: OCA/reporting-engine
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/reporting-engine-12-0/reporting-engine-12-0-report_substitute
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+ :target: https://runbot.odoo-community.org/runbot/143/12.0
+ :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module allows you to create substitution rules for report actions.
+A typical use case is to replace a standard report by alternative reports
+when some conditions are met. For instance, it allows to configure alternate
+reports for different companies.
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Usage
+=====
+
+To use this module, you need to:
+
+#. Go to 'Actions' / 'Reports'
+
+#. Select the desired report you want to substitute
+
+#. In the substitutions page add a new line
+
+#. Select the substitution report action
+
+#. Set a domain to specify when this substitution should happen
+
+
+When a user calls a report action, the system tries to find the first
+substitution in with a domain that matches all records.
+
+Known issues / Roadmap
+======================
+
+- The document name result should take the name of the substitution report.
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues `_.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+`feedback `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+~~~~~~~
+
+* ACSONE SA/NV
+
+Contributors
+~~~~~~~~~~~~
+
+* Bejaoui Souheil
+
+Maintainers
+~~~~~~~~~~~
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+This module is part of the `OCA/reporting-engine `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/report_substitute/__manifest__.py b/report_substitute/__manifest__.py
index a9ad3ca7a..db268ee16 100644
--- a/report_substitute/__manifest__.py
+++ b/report_substitute/__manifest__.py
@@ -4,8 +4,7 @@
{
'name': 'Report Substitute',
'summary': """
- This addon give the possibility to substitute a report action by
- another based on some criteria.
+ This module allows to create substitution rules for report actions.
""",
'version': '12.0.1.0.0',
'license': 'AGPL-3',
diff --git a/report_substitute/readme/CONTRIBUTORS.rst b/report_substitute/readme/CONTRIBUTORS.rst
new file mode 100644
index 000000000..35c03ffe0
--- /dev/null
+++ b/report_substitute/readme/CONTRIBUTORS.rst
@@ -0,0 +1 @@
+* Bejaoui Souheil
diff --git a/report_substitute/readme/DESCRIPTION.rst b/report_substitute/readme/DESCRIPTION.rst
new file mode 100644
index 000000000..55ccac5e8
--- /dev/null
+++ b/report_substitute/readme/DESCRIPTION.rst
@@ -0,0 +1,4 @@
+This module allows you to create substitution rules for report actions.
+A typical use case is to replace a standard report by alternative reports
+when some conditions are met. For instance, it allows to configure alternate
+reports for different companies.
diff --git a/report_substitute/readme/ROADMAP.rst b/report_substitute/readme/ROADMAP.rst
new file mode 100644
index 000000000..28e27a3ea
--- /dev/null
+++ b/report_substitute/readme/ROADMAP.rst
@@ -0,0 +1 @@
+- The document name result should take the name of the substitution report.
diff --git a/report_substitute/readme/USAGE.rst b/report_substitute/readme/USAGE.rst
new file mode 100644
index 000000000..b91a68d52
--- /dev/null
+++ b/report_substitute/readme/USAGE.rst
@@ -0,0 +1,15 @@
+To use this module, you need to:
+
+#. Go to 'Actions' / 'Reports'
+
+#. Select the desired report you want to substitute
+
+#. In the substitutions page add a new line
+
+#. Select the substitution report action
+
+#. Set a domain to specify when this substitution should happen
+
+
+When a user calls a report action, the system tries to find the first
+substitution in with a domain that matches all records.
diff --git a/report_substitute/static/description/index.html b/report_substitute/static/description/index.html
new file mode 100644
index 000000000..e2994a632
--- /dev/null
+++ b/report_substitute/static/description/index.html
@@ -0,0 +1,443 @@
+
+
+
+
+
+
+Report Substitute
+
+
+
+
+
Report Substitute
+
+
+

+
This module allows you to create substitution rules for report actions.
+A typical use case is to replace a standard report by alternative reports
+when some conditions are met. For instance, it allows to configure alternate
+reports for different companies.
+
Table of contents
+
+
+
+
To use this module, you need to:
+
+- Go to ‘Actions’ / ‘Reports’
+- Select the desired report you want to substitute
+- In the substitutions page add a new line
+- Select the substitution report action
+- Set a domain to specify when this substitution should happen
+
+
When a user calls a report action, the system tries to find the first
+substitution in with a domain that matches all records.
+
+
+
+
+- The document name result should take the name of the substitution report.
+
+
+
+
+
Bugs are tracked on GitHub Issues.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+feedback.
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+
+
This module is maintained by the OCA.
+

+
OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
This module is part of the OCA/reporting-engine project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
diff --git a/report_substitute/views/ir_actions_report.xml b/report_substitute/views/ir_actions_report.xml
index 750aeb741..6d9f4a45d 100644
--- a/report_substitute/views/ir_actions_report.xml
+++ b/report_substitute/views/ir_actions_report.xml
@@ -11,7 +11,7 @@
-
+
From 6b658a649bf79a25c72bdde7280aa8f98a3edc62 Mon Sep 17 00:00:00 2001
From: sbejaoui
Date: Mon, 22 Jul 2019 15:43:57 +0200
Subject: [PATCH 03/11] [ADD] - Add unit tests
---
report_substitute/README.rst | 2 +-
report_substitute/__init__.py | 1 +
report_substitute/__manifest__.py | 3 +-
report_substitute/demo/action_report.xml | 29 +++++++++++
report_substitute/models/__init__.py | 2 +-
report_substitute/models/ir_actions_report.py | 16 +++----
...=> ir_actions_report_substitution_rule.py} | 6 +--
report_substitute/readme/USAGE.rst | 2 +-
...> ir_actions_report_substitution_rule.xml} | 12 ++---
.../static/description/index.html | 2 +-
report_substitute/tests/__init__.py | 1 +
.../tests/test_report_substitute.py | 48 +++++++++++++++++++
report_substitute/views/ir_actions_report.xml | 4 +-
13 files changed, 104 insertions(+), 24 deletions(-)
create mode 100644 report_substitute/demo/action_report.xml
rename report_substitute/models/{ir_actions_report_substitution_criteria.py => ir_actions_report_substitution_rule.py} (81%)
rename report_substitute/security/{ir_actions_report_substitution_criteria.xml => ir_actions_report_substitution_rule.xml} (76%)
create mode 100644 report_substitute/tests/__init__.py
create mode 100644 report_substitute/tests/test_report_substitute.py
diff --git a/report_substitute/README.rst b/report_substitute/README.rst
index 7739e6f2f..20762b835 100644
--- a/report_substitute/README.rst
+++ b/report_substitute/README.rst
@@ -42,7 +42,7 @@ To use this module, you need to:
#. Go to 'Actions' / 'Reports'
-#. Select the desired report you want to substitute
+#. Select the desired report you want to 'Substitution Rules'
#. In the substitutions page add a new line
diff --git a/report_substitute/__init__.py b/report_substitute/__init__.py
index 0650744f6..0ee8b5073 100644
--- a/report_substitute/__init__.py
+++ b/report_substitute/__init__.py
@@ -1 +1,2 @@
from . import models
+from . import tests
diff --git a/report_substitute/__manifest__.py b/report_substitute/__manifest__.py
index db268ee16..f65a6a02b 100644
--- a/report_substitute/__manifest__.py
+++ b/report_substitute/__manifest__.py
@@ -13,7 +13,8 @@
'website': 'https://github.com/acsone/reporting-engine',
'depends': ['base'],
'data': [
- 'security/ir_actions_report_substitution_criteria.xml',
+ 'security/ir_actions_report_substitution_rule.xml',
'views/ir_actions_report.xml',
],
+ 'demo': ['demo/action_report.xml'],
}
diff --git a/report_substitute/demo/action_report.xml b/report_substitute/demo/action_report.xml
new file mode 100644
index 000000000..e3b85ba22
--- /dev/null
+++ b/report_substitute/demo/action_report.xml
@@ -0,0 +1,29 @@
+
+
+
+ Substitution Report
+
+
+
+
+
+
+
+
+
+
+ Substitution Report 2
+
+
+
+
diff --git a/report_substitute/models/__init__.py b/report_substitute/models/__init__.py
index d1a25e84a..27b9defe6 100644
--- a/report_substitute/models/__init__.py
+++ b/report_substitute/models/__init__.py
@@ -1,2 +1,2 @@
from . import ir_actions_report
-from . import ir_actions_report_substitution_criteria
+from . import ir_actions_report_substitution_rule
diff --git a/report_substitute/models/ir_actions_report.py b/report_substitute/models/ir_actions_report.py
index ca2e7ce83..32c318127 100644
--- a/report_substitute/models/ir_actions_report.py
+++ b/report_substitute/models/ir_actions_report.py
@@ -1,7 +1,7 @@
# Copyright 2019 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-from odoo import api, fields, models, _
+from odoo import api, fields, models
from odoo.tools.safe_eval import safe_eval
@@ -9,10 +9,10 @@ class IrActionReport(models.Model):
_inherit = 'ir.actions.report'
- action_report_substitution_criteria_ids = fields.One2many(
- comodel_name="ir.actions.report.substitution.criteria",
+ action_report_substitution_rule_ids = fields.One2many(
+ comodel_name="ir.actions.report.substitution.rule",
inverse_name="action_report_id",
- string="Substitution Criteria",
+ string="Substitution Rules",
)
@api.multi
@@ -20,13 +20,13 @@ class IrActionReport(models.Model):
self.ensure_one()
model = self.env[model]
for (
- substitution_report_criteria
- ) in self.action_report_substitution_criteria_ids:
- domain = safe_eval(substitution_report_criteria.domain)
+ substitution_report_rule
+ ) in self.action_report_substitution_rule_ids:
+ domain = safe_eval(substitution_report_rule.domain)
domain.append(('id', 'in', active_ids))
if set(model.search(domain).ids) == set(active_ids):
return (
- substitution_report_criteria.substitution_action_report_id
+ substitution_report_rule.substitution_action_report_id
)
return False
diff --git a/report_substitute/models/ir_actions_report_substitution_criteria.py b/report_substitute/models/ir_actions_report_substitution_rule.py
similarity index 81%
rename from report_substitute/models/ir_actions_report_substitution_criteria.py
rename to report_substitute/models/ir_actions_report_substitution_rule.py
index 04430aede..4c7250711 100644
--- a/report_substitute/models/ir_actions_report_substitution_criteria.py
+++ b/report_substitute/models/ir_actions_report_substitution_rule.py
@@ -4,10 +4,10 @@
from odoo import fields, models
-class ActionsReportSubstitutionCriteria(models.Model):
+class ActionsReportSubstitutionRule(models.Model):
- _name = 'ir.actions.report.substitution.criteria'
- _description = 'Action Report Substitution Criteria'
+ _name = 'ir.actions.report.substitution.rule'
+ _description = 'Action Report Substitution Rule'
_order = 'sequence ASC'
sequence = fields.Integer(default=10)
diff --git a/report_substitute/readme/USAGE.rst b/report_substitute/readme/USAGE.rst
index b91a68d52..b6f661397 100644
--- a/report_substitute/readme/USAGE.rst
+++ b/report_substitute/readme/USAGE.rst
@@ -2,7 +2,7 @@ To use this module, you need to:
#. Go to 'Actions' / 'Reports'
-#. Select the desired report you want to substitute
+#. Select the desired report you want to 'Substitution Rules'
#. In the substitutions page add a new line
diff --git a/report_substitute/security/ir_actions_report_substitution_criteria.xml b/report_substitute/security/ir_actions_report_substitution_rule.xml
similarity index 76%
rename from report_substitute/security/ir_actions_report_substitution_criteria.xml
rename to report_substitute/security/ir_actions_report_substitution_rule.xml
index b74770b85..e7af09afd 100644
--- a/report_substitute/security/ir_actions_report_substitution_criteria.xml
+++ b/report_substitute/security/ir_actions_report_substitution_rule.xml
@@ -4,18 +4,18 @@
-
- action.report.substitution.criteria user access
-
+
+ action.report.substitution.rule user access
+
-
- action.report.substitution.criteria manager access
-
+
+ action.report.substitution.rule manager access
+
diff --git a/report_substitute/static/description/index.html b/report_substitute/static/description/index.html
index e2994a632..71e4b31b6 100644
--- a/report_substitute/static/description/index.html
+++ b/report_substitute/static/description/index.html
@@ -391,7 +391,7 @@ reports for different companies.
To use this module, you need to:
- Go to ‘Actions’ / ‘Reports’
-- Select the desired report you want to substitute
+- Select the desired report you want to ‘Substitution Rules’
- In the substitutions page add a new line
- Select the substitution report action
- Set a domain to specify when this substitution should happen
diff --git a/report_substitute/tests/__init__.py b/report_substitute/tests/__init__.py
new file mode 100644
index 000000000..8c5a3f248
--- /dev/null
+++ b/report_substitute/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_report_substitute
diff --git a/report_substitute/tests/test_report_substitute.py b/report_substitute/tests/test_report_substitute.py
new file mode 100644
index 000000000..fecb4be6c
--- /dev/null
+++ b/report_substitute/tests/test_report_substitute.py
@@ -0,0 +1,48 @@
+# Copyright 2019 ACSONE SA/NV
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo.tests.common import TransactionCase
+
+
+class TestReportSubstitute(TransactionCase):
+ def setUp(self):
+ # In the demo file we create a new report for ir.module.module model
+ # with a substation rule from the original report action
+ super(TestReportSubstitute, self).setUp()
+ self.action_report = self.env.ref('base.ir_module_reference_print')
+ self.res_ids = self.env.ref('base.module_base').ids
+ self.substitution_rule = self.env.ref(
+ 'report_substitute.substitution_rule_demo_1'
+ )
+
+ def test_substitution(self):
+ res = str(self.action_report.render(res_ids=self.res_ids)[0])
+ self.assertIn('Substitution Report
', res)
+ # remove the substation rule
+ self.substitution_rule.unlink()
+ res = str(self.action_report.render(res_ids=self.res_ids)[0])
+ self.assertNotIn('Substitution Report
', res)
+
+ def test_recursive_substitution(self):
+ res = str(self.action_report.render(res_ids=self.res_ids)[0])
+ self.assertNotIn('Substitution Report 2
', res)
+ self.env['ir.actions.report.substitution.rule'].create(
+ {
+ 'substitution_action_report_id': self.env.ref(
+ 'report_substitute.substitution_report_print_2'
+ ).id,
+ 'action_report_id': self.env.ref(
+ 'report_substitute.substitution_report_print'
+ ).id,
+ }
+ )
+ res = str(self.action_report.render(res_ids=self.res_ids)[0])
+ self.assertIn('Substitution Report 2
', res)
+
+ def test_substitution_with_domain(self):
+ self.substitution_rule.write({'domain': "[('name', '=', 'base')]"})
+ res = str(self.action_report.render(res_ids=self.res_ids)[0])
+ self.assertIn('Substitution Report
', res)
+ self.substitution_rule.write({'domain': "[('name', '!=', 'base')]"})
+ res = str(self.action_report.render(res_ids=self.res_ids)[0])
+ self.assertNotIn('Substitution Report
', res)
diff --git a/report_substitute/views/ir_actions_report.xml b/report_substitute/views/ir_actions_report.xml
index 6d9f4a45d..bda45ba78 100644
--- a/report_substitute/views/ir_actions_report.xml
+++ b/report_substitute/views/ir_actions_report.xml
@@ -11,8 +11,8 @@
-
-
+
+
From 9f2f1b420f1886de4518895773c45aee959a3ef2 Mon Sep 17 00:00:00 2001
From: sbejaoui
Date: Tue, 23 Jul 2019 15:33:01 +0200
Subject: [PATCH 04/11] [FIX] - missing method param
---
report_substitute/models/ir_actions_report.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/report_substitute/models/ir_actions_report.py b/report_substitute/models/ir_actions_report.py
index 32c318127..3cf091d11 100644
--- a/report_substitute/models/ir_actions_report.py
+++ b/report_substitute/models/ir_actions_report.py
@@ -36,5 +36,5 @@ class IrActionReport(models.Model):
self.model, res_ids
)
if substitution_report:
- return substitution_report.render(res_ids)
+ return substitution_report.render(res_ids, data)
return super().render(res_ids, data)
From 590377ee3678dc820905e2fd63f1a903ce149d65 Mon Sep 17 00:00:00 2001
From: sbejaoui
Date: Tue, 23 Jul 2019 16:24:13 +0200
Subject: [PATCH 05/11] [FIX] - prevent substitution loop
---
report_substitute/views/ir_actions_report.xml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/report_substitute/views/ir_actions_report.xml b/report_substitute/views/ir_actions_report.xml
index bda45ba78..0c2c265c8 100644
--- a/report_substitute/views/ir_actions_report.xml
+++ b/report_substitute/views/ir_actions_report.xml
@@ -16,7 +16,8 @@
-
+ />