Skip to content

Commit 0f17d27

Browse files
sbejaouimatiasperalta1
authored andcommitted
[13.0][MIG] - report_substitute migration
1 parent 8b9266d commit 0f17d27

11 files changed

+136
-144
lines changed

report_substitute/__manifest__.py

+12-13
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,19 @@
22
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
33

44
{
5-
'name': 'Report Substitute',
6-
'summary': """
5+
"name": "Report Substitute",
6+
"summary": """
77
This module allows to create substitution rules for report actions.
88
""",
9-
'version': '12.0.1.0.0',
10-
'license': 'AGPL-3',
11-
'author': 'ACSONE SA/NV,'
12-
'Odoo Community Association (OCA)',
13-
'website': 'https://github.com/OCA/reporting-engine',
14-
'depends': ['base', 'mail'],
15-
'data': [
16-
'security/ir_actions_report_substitution_rule.xml',
17-
'views/assets_backend.xml',
18-
'views/ir_actions_report.xml',
9+
"version": "13.0.1.0.0",
10+
"license": "AGPL-3",
11+
"author": "ACSONE SA/NV," "Odoo Community Association (OCA)",
12+
"website": "https://github.com/OCA/reporting-engine",
13+
"depends": ["base", "mail"],
14+
"data": [
15+
"security/ir_actions_report_substitution_rule.xml",
16+
"views/assets_backend.xml",
17+
"views/ir_actions_report.xml",
1918
],
20-
'demo': ['demo/action_report.xml'],
19+
"demo": ["demo/action_report.xml"],
2120
}
+22-19
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,32 @@
1-
<?xml version="1.0" encoding="utf-8"?>
1+
<?xml version="1.0" encoding="utf-8" ?>
22
<odoo>
33
<template id="substitution_report">
44
<div class="page">Substitution Report</div>
55
</template>
6-
7-
<report id="substitution_report_print"
8-
string="Substitution For Technical guide"
9-
model="ir.module.module"
10-
report_type="qweb-pdf"
11-
file="report_substitute.substitution_report"
12-
name="report_substitute.substitution_report"/>
13-
6+
<report
7+
id="substitution_report_print"
8+
string="Substitution For Technical guide"
9+
model="ir.module.module"
10+
report_type="qweb-pdf"
11+
file="report_substitute.substitution_report"
12+
name="report_substitute.substitution_report"
13+
/>
1414
<record id="substitution_rule_demo_1" model="ir.actions.report.substitution.rule">
15-
<field name="action_report_id" ref="base.ir_module_reference_print"/>
16-
<field name="substitution_action_report_id" ref="report_substitute.substitution_report_print"/>
15+
<field name="action_report_id" ref="base.ir_module_reference_print" />
16+
<field
17+
name="substitution_action_report_id"
18+
ref="report_substitute.substitution_report_print"
19+
/>
1720
</record>
18-
1921
<template id="substitution_report_2">
2022
<div class="page">Substitution Report 2</div>
2123
</template>
22-
23-
<report id="substitution_report_print_2"
24-
string="Substitution 2 For Technical guide"
25-
model="ir.module.module"
26-
report_type="qweb-pdf"
27-
file="report_substitute.substitution_report_2"
28-
name="report_substitute.substitution_report_2"/>
24+
<report
25+
id="substitution_report_print_2"
26+
string="Substitution 2 For Technical guide"
27+
model="ir.module.module"
28+
report_type="qweb-pdf"
29+
file="report_substitute.substitution_report_2"
30+
name="report_substitute.substitution_report_2"
31+
/>
2932
</odoo>

report_substitute/models/ir_actions_report.py

+5-11
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,24 @@
77

88
class IrActionReport(models.Model):
99

10-
_inherit = 'ir.actions.report'
10+
_inherit = "ir.actions.report"
1111

1212
action_report_substitution_rule_ids = fields.One2many(
1313
comodel_name="ir.actions.report.substitution.rule",
1414
inverse_name="action_report_id",
1515
string="Substitution Rules",
1616
)
1717

18-
@api.multi
1918
def _get_substitution_report(self, model, active_ids):
2019
self.ensure_one()
2120
model = self.env[model]
22-
for (
23-
substitution_report_rule
24-
) in self.action_report_substitution_rule_ids:
21+
for substitution_report_rule in self.action_report_substitution_rule_ids:
2522
domain = safe_eval(substitution_report_rule.domain)
26-
domain.append(('id', 'in', active_ids))
23+
domain.append(("id", "in", active_ids))
2724
if set(model.search(domain).ids) == set(active_ids):
2825
return substitution_report_rule.substitution_action_report_id
2926
return False
3027

31-
@api.multi
3228
def get_substitution_report(self, active_ids):
3329
self.ensure_one()
3430
action_report = self
@@ -42,8 +38,8 @@ def get_substitution_report(self, active_ids):
4238

4339
@api.model
4440
def get_substitution_report_action(self, action, active_ids):
45-
if action.get('id'):
46-
action_report = self.browse(action['id'])
41+
if action.get("id"):
42+
action_report = self.browse(action["id"])
4743
substitution_report = action_report
4844
while substitution_report:
4945
action_report = substitution_report
@@ -53,12 +49,10 @@ def get_substitution_report_action(self, action, active_ids):
5349
action.update(action_report.read()[0])
5450
return action
5551

56-
@api.multi
5752
def render(self, res_ids, data=None):
5853
substitution_report = self.get_substitution_report(res_ids)
5954
return super(IrActionReport, substitution_report).render(res_ids, data)
6055

61-
@api.noguess
6256
def report_action(self, docids, data=None, config=True):
6357
if docids:
6458
if isinstance(docids, models.Model):

report_substitute/models/ir_actions_report_substitution_rule.py

+6-7
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
# Copyright 2019 ACSONE SA/NV
22
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
33

4-
from odoo import fields, models, api, _
4+
from odoo import _, api, fields, models
55
from odoo.exceptions import ValidationError
66

77

88
class ActionsReportSubstitutionRule(models.Model):
99

10-
_name = 'ir.actions.report.substitution.rule'
11-
_description = 'Action Report Substitution Rule'
12-
_order = 'sequence ASC'
10+
_name = "ir.actions.report.substitution.rule"
11+
_description = "Action Report Substitution Rule"
12+
_order = "sequence ASC"
1313

1414
sequence = fields.Integer(default=10)
1515
action_report_id = fields.Many2one(
@@ -28,7 +28,7 @@ class ActionsReportSubstitutionRule(models.Model):
2828
domain="[('model', '=', model)]",
2929
)
3030

31-
@api.constrains('substitution_action_report_id', 'action_report_id')
31+
@api.constrains("substitution_action_report_id", "action_report_id")
3232
def _check_substitution_infinite_loop(self):
3333
def _check_infinite_loop(original_report, substitution_report):
3434
if original_report == substitution_report:
@@ -37,8 +37,7 @@ def _check_infinite_loop(original_report, substitution_report):
3737
substitution_rule
3838
) in substitution_report.action_report_substitution_rule_ids:
3939
_check_infinite_loop(
40-
original_report,
41-
substitution_rule.substitution_action_report_id,
40+
original_report, substitution_rule.substitution_action_report_id,
4241
)
4342

4443
for rec in self:

report_substitute/models/mail_thread.py

+4-7
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,20 @@
11
# Copyright 2019 ACSONE SA/NV
22
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
33

4-
from odoo import api, models
4+
from odoo import models
55

66

77
class MailThread(models.AbstractModel):
88

9-
_inherit = 'mail.thread'
9+
_inherit = "mail.thread"
1010

11-
@api.multi
1211
def message_post_with_template(self, template_id, **kwargs):
13-
template = self.env['mail.template'].browse(template_id)
12+
template = self.env["mail.template"].browse(template_id)
1413
old_report = False
1514
if template and template.report_template and self.ids:
1615
active_ids = self.ids
1716
old_report = template.report_template
18-
template.report_template = old_report.get_substitution_report(
19-
active_ids
20-
)
17+
template.report_template = old_report.get_substitution_report(active_ids)
2118
res = super().message_post_with_template(template_id, **kwargs)
2219
if old_report:
2320
template.report_template = old_report
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,22 @@
1-
<?xml version="1.0" encoding="utf-8"?>
1+
<?xml version="1.0" encoding="utf-8" ?>
22
<!-- Copyright 2019 ACSONE SA/NV
33
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
4-
54
<odoo>
6-
75
<record model="ir.model.access" id="action_report_substitution_rule_user_access">
86
<field name="name">action.report.substitution.rule user access</field>
9-
<field name="model_id" ref="model_ir_actions_report_substitution_rule"/>
10-
<field name="perm_read" eval="1"/>
11-
<field name="perm_create" eval="0"/>
12-
<field name="perm_write" eval="0"/>
13-
<field name="perm_unlink" eval="0"/>
7+
<field name="model_id" ref="model_ir_actions_report_substitution_rule" />
8+
<field name="perm_read" eval="1" />
9+
<field name="perm_create" eval="0" />
10+
<field name="perm_write" eval="0" />
11+
<field name="perm_unlink" eval="0" />
1412
</record>
15-
1613
<record model="ir.model.access" id="action_report_substitution_rule_manager_access">
1714
<field name="name">action.report.substitution.rule manager access</field>
18-
<field name="model_id" ref="model_ir_actions_report_substitution_rule"/>
19-
<field name="group_id" ref="base.group_system"/>
20-
<field name="perm_read" eval="1"/>
21-
<field name="perm_create" eval="1"/>
22-
<field name="perm_write" eval="1"/>
23-
<field name="perm_unlink" eval="1"/>
15+
<field name="model_id" ref="model_ir_actions_report_substitution_rule" />
16+
<field name="group_id" ref="base.group_system" />
17+
<field name="perm_read" eval="1" />
18+
<field name="perm_create" eval="1" />
19+
<field name="perm_write" eval="1" />
20+
<field name="perm_unlink" eval="1" />
2421
</record>
2522
</odoo>
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,35 @@
11
// Copyright 2019 ACSONE SA/NV
22
// License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
3-
odoo.define("report_substitute.action_report_substitute", function (require) {
3+
odoo.define("report_substitute.action_report_substitute", function(require) {
44
"use strict";
55

66
var ActionManager = require("web.ActionManager");
77

88
ActionManager.include({
9-
109
/**
1110
* Intercept action handling substitute the report action
1211
* @override
1312
*/
1413

15-
_handleAction: function (action, options) {
16-
if (action.type === "ir.actions.report" &&
14+
_handleAction: function(action, options) {
15+
if (
16+
action.type === "ir.actions.report" &&
1717
action.context.active_ids &&
1818
action.action_report_substitution_rule_ids &&
19-
action.action_report_substitution_rule_ids != 0) {
19+
action.action_report_substitution_rule_ids !== 0
20+
) {
2021
var active_ids = action.context.active_ids;
2122
var self = this;
2223
var _super = this._super;
23-
var callersArguments = arguments;
2424
return this._rpc({
2525
model: "ir.actions.report",
2626
method: "get_substitution_report_action",
27-
args: [action, active_ids]
28-
}).then(function (substitution_action) {
29-
callersArguments[0] = substitution_action
30-
return _super.apply(self, callersArguments);
27+
args: [action, active_ids],
28+
}).then(function(substitution_action) {
29+
return _super.apply(self, [substitution_action, options]);
3130
});
32-
3331
}
3432
return this._super.apply(this, arguments);
3533
},
36-
3734
});
38-
39-
});
35+
});
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,23 @@
11
# Copyright 2019 ACSONE SA/NV
22
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
33

4-
from odoo.tests.common import TransactionCase
54
from odoo.exceptions import ValidationError
5+
from odoo.tests.common import TransactionCase
66

77

88
class TestReportSubstitute(TransactionCase):
99
def setUp(self):
1010
# In the demo file we create a new report for ir.module.module model
1111
# with a substation rule from the original report action
1212
super(TestReportSubstitute, self).setUp()
13-
self.action_report = self.env.ref('base.ir_module_reference_print')
14-
self.res_ids = self.env.ref('base.module_base').ids
13+
self.action_report = self.env.ref("base.ir_module_reference_print")
14+
self.res_ids = self.env.ref("base.module_base").ids
1515
self.substitution_rule = self.env.ref(
16-
'report_substitute.substitution_rule_demo_1'
16+
"report_substitute.substitution_rule_demo_1"
1717
)
18+
self.env.company.external_report_layout_id = self.env.ref(
19+
"web.external_layout_standard"
20+
).id
1821

1922
def test_substitution(self):
2023
res = str(self.action_report.render(res_ids=self.res_ids)[0])
@@ -27,54 +30,52 @@ def test_substitution(self):
2730
def test_recursive_substitution(self):
2831
res = str(self.action_report.render(res_ids=self.res_ids)[0])
2932
self.assertNotIn('<div class="page">Substitution Report 2</div>', res)
30-
self.env['ir.actions.report.substitution.rule'].create(
33+
self.env["ir.actions.report.substitution.rule"].create(
3134
{
32-
'substitution_action_report_id': self.env.ref(
33-
'report_substitute.substitution_report_print_2'
35+
"substitution_action_report_id": self.env.ref(
36+
"report_substitute.substitution_report_print_2"
3437
).id,
35-
'action_report_id': self.env.ref(
36-
'report_substitute.substitution_report_print'
38+
"action_report_id": self.env.ref(
39+
"report_substitute.substitution_report_print"
3740
).id,
3841
}
3942
)
4043
res = str(self.action_report.render(res_ids=self.res_ids)[0])
4144
self.assertIn('<div class="page">Substitution Report 2</div>', res)
4245

4346
def test_substitution_with_domain(self):
44-
self.substitution_rule.write({'domain': "[('name', '=', 'base')]"})
47+
self.substitution_rule.write({"domain": "[('name', '=', 'base')]"})
4548
res = str(self.action_report.render(res_ids=self.res_ids)[0])
4649
self.assertIn('<div class="page">Substitution Report</div>', res)
47-
self.substitution_rule.write({'domain': "[('name', '!=', 'base')]"})
50+
self.substitution_rule.write({"domain": "[('name', '!=', 'base')]"})
4851
res = str(self.action_report.render(res_ids=self.res_ids)[0])
4952
self.assertNotIn('<div class="page">Substitution Report</div>', res)
5053

5154
def test_substitution_with_action_dict(self):
5255
substitution_report_action = self.env[
53-
'ir.actions.report'
54-
].get_substitution_report_action(
55-
self.action_report.read()[0], self.res_ids
56-
)
56+
"ir.actions.report"
57+
].get_substitution_report_action(self.action_report.read()[0], self.res_ids)
5758
self.assertEqual(
58-
substitution_report_action['id'],
59+
substitution_report_action["id"],
5960
self.substitution_rule.substitution_action_report_id.id,
6061
)
6162

6263
def test_substitution_with_report_action(self):
6364
res = self.action_report.report_action(self.res_ids)
6465
self.assertEqual(
65-
res['report_name'],
66+
res["report_name"],
6667
self.substitution_rule.substitution_action_report_id.report_name,
6768
)
6869

6970
def test_substitution_infinite_loop(self):
7071
with self.assertRaises(ValidationError):
71-
self.env['ir.actions.report.substitution.rule'].create(
72+
self.env["ir.actions.report.substitution.rule"].create(
7273
{
73-
'action_report_id': self.env.ref(
74-
'report_substitute.substitution_report_print'
74+
"action_report_id": self.env.ref(
75+
"report_substitute.substitution_report_print"
7576
).id,
76-
'substitution_action_report_id': self.env.ref(
77-
'base.ir_module_reference_print'
77+
"substitution_action_report_id": self.env.ref(
78+
"base.ir_module_reference_print"
7879
).id,
7980
}
8081
)

0 commit comments

Comments
 (0)