mirror of
https://github.com/OCA/reporting-engine.git
synced 2025-02-16 16:30:38 +02:00
[ADD] - report substitute
This addon give the possibility to substitute a report action by another based on some criteria.
This commit is contained in:
2
report_substitute/models/__init__.py
Normal file
2
report_substitute/models/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
from . import ir_actions_report
|
||||
from . import ir_actions_report_substitution_criteria
|
||||
40
report_substitute/models/ir_actions_report.py
Normal file
40
report_substitute/models/ir_actions_report.py
Normal file
@@ -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)
|
||||
@@ -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)]"
|
||||
)
|
||||
Reference in New Issue
Block a user