Browse Source

[ADD] - report substitute

This addon give the possibility to substitute a report action by another based on some criteria.
pull/307/head
sbejaoui 5 years ago
parent
commit
cd0c96016f
  1. 1
      report_substitute/__init__.py
  2. 20
      report_substitute/__manifest__.py
  3. 2
      report_substitute/models/__init__.py
  4. 40
      report_substitute/models/ir_actions_report.py
  5. 28
      report_substitute/models/ir_actions_report_substitution_criteria.py
  6. 25
      report_substitute/security/ir_actions_report_substitution_criteria.xml
  7. 43
      report_substitute/views/ir_actions_report.xml
  8. 1
      setup/report_substitute/odoo/addons/report_substitute
  9. 6
      setup/report_substitute/setup.py

1
report_substitute/__init__.py

@ -0,0 +1 @@
from . import models

20
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',
],
}

2
report_substitute/models/__init__.py

@ -0,0 +1,2 @@
from . import ir_actions_report
from . import ir_actions_report_substitution_criteria

40
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)

28
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)]"
)

25
report_substitute/security/ir_actions_report_substitution_criteria.xml

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2019 ACSONE SA/NV
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record model="ir.model.access" id="action_report_substitution_criteria_user_access">
<field name="name">action.report.substitution.criteria user access</field>
<field name="model_id" ref="model_ir_actions_report_substitution_criteria"/>
<field name="perm_read" eval="1"/>
<field name="perm_create" eval="0"/>
<field name="perm_write" eval="0"/>
<field name="perm_unlink" eval="0"/>
</record>
<record model="ir.model.access" id="action_report_substitution_criteria_manager_access">
<field name="name">action.report.substitution.criteria manager access</field>
<field name="model_id" ref="model_ir_actions_report_substitution_criteria"/>
<field name="group_id" ref="base.group_system"/>
<field name="perm_read" eval="1"/>
<field name="perm_create" eval="1"/>
<field name="perm_write" eval="1"/>
<field name="perm_unlink" eval="1"/>
</record>
</odoo>

43
report_substitute/views/ir_actions_report.xml

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2019 ACSONE SA/NV
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record model="ir.ui.view" id="ir_actions_report_form_view">
<field name="name">ir.actions.report.form (in report_dispatch_base)
</field>
<field name="model">ir.actions.report</field>
<field name="inherit_id" ref="base.act_report_xml_view"/>
<field name="arch" type="xml">
<xpath expr="//page[@name='advanced']" position="after">
<page name="report_substitution_criteria" string="Substitution Criteria">
<field name="action_report_substitution_criteria_ids">
<tree>
<field name="sequence" widget="handle"/>
<field name="substitution_action_report_id"/>
<field name="domain"/>
</tree>
<form>
<sheet>
<group>
<field name="action_report_id"
invisible="1" readonly="1"
required="0"/>
<field name="model" invisible="1"/>
<field name="substitution_action_report_id"/>
</group>
<group>
<field name="domain" widget="domain"
options="{'model': 'model'}"/>
</group>
</sheet>
</form>
</field>
</page>
</xpath>
</field>
</record>
</odoo>

1
setup/report_substitute/odoo/addons/report_substitute

@ -0,0 +1 @@
../../../../report_substitute

6
setup/report_substitute/setup.py

@ -0,0 +1,6 @@
import setuptools
setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)
Loading…
Cancel
Save