[IMP] report_context: black, isort, prettier
parent
8de95362f9
commit
89f4177fbd
|
@ -2,18 +2,13 @@
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
{
|
{
|
||||||
'name': 'Report Context',
|
"name": "Report Context",
|
||||||
'summary': """
|
"summary": """
|
||||||
Adding context to reports""",
|
Adding context to reports""",
|
||||||
'version': '12.0.1.0.0',
|
"version": "12.0.1.0.0",
|
||||||
'license': 'AGPL-3',
|
"license": "AGPL-3",
|
||||||
'author': 'Creu Blanca,Odoo Community Association (OCA)',
|
"author": "Creu Blanca,Odoo Community Association (OCA)",
|
||||||
'website': 'https://github.com/OCA/reporting-engine',
|
"website": "https://github.com/OCA/reporting-engine",
|
||||||
'depends': [
|
"depends": ["web"],
|
||||||
'web',
|
"data": ["views/ir_actions_report.xml", "data/config_parameter.xml"],
|
||||||
],
|
|
||||||
'data': [
|
|
||||||
'views/ir_actions_report.xml',
|
|
||||||
'data/config_parameter.xml',
|
|
||||||
],
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,18 +1,20 @@
|
||||||
# Copyright 2019 Creu Blanca
|
# Copyright 2019 Creu Blanca
|
||||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||||
from odoo.addons.web.controllers import main as report
|
|
||||||
from odoo.http import route, request
|
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
from odoo.http import request, route
|
||||||
|
|
||||||
|
from odoo.addons.web.controllers import main as report
|
||||||
|
|
||||||
|
|
||||||
class ReportController(report.ReportController):
|
class ReportController(report.ReportController):
|
||||||
@route()
|
@route()
|
||||||
def report_routes(self, reportname, docids=None, converter=None, **data):
|
def report_routes(self, reportname, docids=None, converter=None, **data):
|
||||||
report = request.env['ir.actions.report']._get_report_from_name(
|
report = request.env["ir.actions.report"]._get_report_from_name(reportname)
|
||||||
reportname)
|
original_context = json.loads(data.get("context", "{}"))
|
||||||
original_context = json.loads(data.get('context', '{}'))
|
data["context"] = json.dumps(
|
||||||
data['context'] = json.dumps(report.with_context(
|
report.with_context(original_context)._get_context()
|
||||||
original_context
|
)
|
||||||
)._get_context())
|
|
||||||
return super().report_routes(
|
return super().report_routes(
|
||||||
reportname, docids=docids, converter=converter, **data)
|
reportname, docids=docids, converter=converter, **data
|
||||||
|
)
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<odoo>
|
<odoo>
|
||||||
<data noupdate="1">
|
<data noupdate="1">
|
||||||
<record id="report_default_context"
|
<record
|
||||||
model="ir.config_parameter" forcecreate="True">
|
id="report_default_context"
|
||||||
|
model="ir.config_parameter"
|
||||||
|
forcecreate="True"
|
||||||
|
>
|
||||||
<field name="key">report.default.context</field>
|
<field name="key">report.default.context</field>
|
||||||
<field name="value">{}</field>
|
<field name="value">{}</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
|
@ -1,36 +1,42 @@
|
||||||
# Copyright 2019 Creu Blanca
|
# Copyright 2019 Creu Blanca
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
from odoo.tools.safe_eval import safe_eval
|
|
||||||
from odoo import api, fields, models
|
from odoo import api, fields, models
|
||||||
|
from odoo.tools.safe_eval import safe_eval
|
||||||
|
|
||||||
|
|
||||||
class IrActionsReport(models.Model):
|
class IrActionsReport(models.Model):
|
||||||
_inherit = 'ir.actions.report'
|
_inherit = "ir.actions.report"
|
||||||
|
|
||||||
context = fields.Char(
|
context = fields.Char(
|
||||||
string='Context Value', default={},
|
string="Context Value",
|
||||||
|
default={},
|
||||||
required=True,
|
required=True,
|
||||||
help="Context dictionary as Python expression, empty by default "
|
help="Context dictionary as Python expression, empty by default "
|
||||||
"(Default: {})")
|
"(Default: {})",
|
||||||
|
)
|
||||||
|
|
||||||
def _get_context(self):
|
def _get_context(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
context = self.env['ir.config_parameter'].sudo().get_param(
|
context = (
|
||||||
'report.default.context', '{}')
|
self.env["ir.config_parameter"]
|
||||||
|
.sudo()
|
||||||
|
.get_param("report.default.context", "{}")
|
||||||
|
)
|
||||||
# We must transform it to a dictionary
|
# We must transform it to a dictionary
|
||||||
context = safe_eval(context or '{}')
|
context = safe_eval(context or "{}")
|
||||||
report_context = safe_eval(self.context or '{}')
|
report_context = safe_eval(self.context or "{}")
|
||||||
context.update(report_context)
|
context.update(report_context)
|
||||||
context.update(self.env.context)
|
context.update(self.env.context)
|
||||||
return context
|
return context
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def render(self, res_ids, data=None):
|
def render(self, res_ids, data=None):
|
||||||
return super(IrActionsReport, self.with_context(
|
return super(IrActionsReport, self.with_context(self._get_context())).render(
|
||||||
self._get_context())).render(res_ids, data=data)
|
res_ids, data=data
|
||||||
|
)
|
||||||
|
|
||||||
@api.noguess
|
@api.noguess
|
||||||
def report_action(self, docids, data=None, config=True):
|
def report_action(self, docids, data=None, config=True):
|
||||||
return super(IrActionsReport, self.with_context(
|
return super(
|
||||||
self._get_context()
|
IrActionsReport, self.with_context(self._get_context())
|
||||||
)).report_action(docids, data=data, config=config)
|
).report_action(docids, data=data, config=config)
|
||||||
|
|
|
@ -15,4 +15,3 @@ It can also be added on the developer side using::
|
||||||
<record id="model_name.report_id" model="ir.actions.report">
|
<record id="model_name.report_id" model="ir.actions.report">
|
||||||
<field name="context">YOUR CONTEXT HERE</field>
|
<field name="context">YOUR CONTEXT HERE</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
|
@ -4,44 +4,47 @@ from odoo.tests.common import TransactionCase
|
||||||
|
|
||||||
|
|
||||||
class TestReportContext(TransactionCase):
|
class TestReportContext(TransactionCase):
|
||||||
|
|
||||||
def test_report_01(self):
|
def test_report_01(self):
|
||||||
company = self.browse_ref('base.main_company')
|
company = self.browse_ref("base.main_company")
|
||||||
report = self.browse_ref('web.action_report_internalpreview')
|
report = self.browse_ref("web.action_report_internalpreview")
|
||||||
self.env['ir.config_parameter'].sudo().set_param(
|
self.env["ir.config_parameter"].sudo().set_param(
|
||||||
'report.default.context', '{"test_parameter": 1}')
|
"report.default.context", '{"test_parameter": 1}'
|
||||||
report.write({'context': '{"test_parameter": 2}'})
|
)
|
||||||
|
report.write({"context": '{"test_parameter": 2}'})
|
||||||
action = report.with_context(test_parameter=3).report_action(company)
|
action = report.with_context(test_parameter=3).report_action(company)
|
||||||
self.assertEqual(3, action['context']['test_parameter'])
|
self.assertEqual(3, action["context"]["test_parameter"])
|
||||||
|
|
||||||
def test_report_02(self):
|
def test_report_02(self):
|
||||||
company = self.browse_ref('base.main_company')
|
company = self.browse_ref("base.main_company")
|
||||||
report = self.browse_ref('web.action_report_internalpreview')
|
report = self.browse_ref("web.action_report_internalpreview")
|
||||||
self.env['ir.config_parameter'].sudo().set_param(
|
self.env["ir.config_parameter"].sudo().set_param(
|
||||||
'report.default.context', '{"test_parameter": 1}')
|
"report.default.context", '{"test_parameter": 1}'
|
||||||
report.write({'context': '{"test_parameter": 2}'})
|
)
|
||||||
|
report.write({"context": '{"test_parameter": 2}'})
|
||||||
action = report.report_action(company)
|
action = report.report_action(company)
|
||||||
self.assertEqual(2, action['context']['test_parameter'])
|
self.assertEqual(2, action["context"]["test_parameter"])
|
||||||
|
|
||||||
def test_report_03(self):
|
def test_report_03(self):
|
||||||
company = self.browse_ref('base.main_company')
|
company = self.browse_ref("base.main_company")
|
||||||
report = self.browse_ref('web.action_report_internalpreview')
|
report = self.browse_ref("web.action_report_internalpreview")
|
||||||
self.env['ir.config_parameter'].sudo().set_param(
|
self.env["ir.config_parameter"].sudo().set_param(
|
||||||
'report.default.context', '{"test_parameter": 1}')
|
"report.default.context", '{"test_parameter": 1}'
|
||||||
|
)
|
||||||
action = report.with_context(test_parameter=3).report_action(company)
|
action = report.with_context(test_parameter=3).report_action(company)
|
||||||
self.assertEqual(3, action['context']['test_parameter'])
|
self.assertEqual(3, action["context"]["test_parameter"])
|
||||||
|
|
||||||
def test_report_04(self):
|
def test_report_04(self):
|
||||||
company = self.browse_ref('base.main_company')
|
company = self.browse_ref("base.main_company")
|
||||||
report = self.browse_ref('web.action_report_internalpreview')
|
report = self.browse_ref("web.action_report_internalpreview")
|
||||||
report.write({'context': '{"test_parameter": 2}'})
|
report.write({"context": '{"test_parameter": 2}'})
|
||||||
action = report.report_action(company)
|
action = report.report_action(company)
|
||||||
self.assertEqual(2, action['context']['test_parameter'])
|
self.assertEqual(2, action["context"]["test_parameter"])
|
||||||
|
|
||||||
def test_report_05(self):
|
def test_report_05(self):
|
||||||
company = self.browse_ref('base.main_company')
|
company = self.browse_ref("base.main_company")
|
||||||
report = self.browse_ref('web.action_report_internalpreview')
|
report = self.browse_ref("web.action_report_internalpreview")
|
||||||
self.env['ir.config_parameter'].sudo().set_param(
|
self.env["ir.config_parameter"].sudo().set_param(
|
||||||
'report.default.context', '{"test_parameter": 1}')
|
"report.default.context", '{"test_parameter": 1}'
|
||||||
|
)
|
||||||
action = report.report_action(company)
|
action = report.report_action(company)
|
||||||
self.assertEqual(1, action['context']['test_parameter'])
|
self.assertEqual(1, action["context"]["test_parameter"])
|
||||||
|
|
|
@ -1,18 +1,15 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<!-- Copyright 2019 Creu Blanca
|
<!-- Copyright 2019 Creu Blanca
|
||||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
|
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
|
||||||
|
|
||||||
<odoo>
|
<odoo>
|
||||||
|
|
||||||
<record model="ir.ui.view" id="act_report_xml_view">
|
<record model="ir.ui.view" id="act_report_xml_view">
|
||||||
<field name="name">ir.actions.report.context.form</field>
|
<field name="name">ir.actions.report.context.form</field>
|
||||||
<field name="model">ir.actions.report</field>
|
<field name="model">ir.actions.report</field>
|
||||||
<field name="inherit_id" ref="base.act_report_xml_view"/>
|
<field name="inherit_id" ref="base.act_report_xml_view" />
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<field name="print_report_name" position="after">
|
<field name="print_report_name" position="after">
|
||||||
<field name="context"/>
|
<field name="context" />
|
||||||
</field>
|
</field>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../report_context
|
|
@ -0,0 +1,6 @@
|
||||||
|
import setuptools
|
||||||
|
|
||||||
|
setuptools.setup(
|
||||||
|
setup_requires=['setuptools-odoo'],
|
||||||
|
odoo_addon=True,
|
||||||
|
)
|
Loading…
Reference in New Issue