From 91604231d44b5a511672c1fc15390913b73ffd64 Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Tue, 11 Jan 2022 15:00:31 +0100 Subject: [PATCH] [IMP] kpi_dashboard: Allow to set a specific context for a KPI --- kpi_dashboard/models/kpi_dashboard.py | 13 ++++++++++++- kpi_dashboard/views/kpi_dashboard.xml | 13 +++++++------ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/kpi_dashboard/models/kpi_dashboard.py b/kpi_dashboard/models/kpi_dashboard.py index c03073ab8..c4f0ca5a5 100644 --- a/kpi_dashboard/models/kpi_dashboard.py +++ b/kpi_dashboard/models/kpi_dashboard.py @@ -3,6 +3,7 @@ from odoo import _, api, fields, models from odoo.exceptions import ValidationError +from odoo.tools.safe_eval import safe_eval class KpiDashboard(models.Model): @@ -113,9 +114,11 @@ class KpiDashboardItem(models.Model): color = fields.Char() font_color = fields.Char() modify_context = fields.Boolean() + compute_on_fly = fields.Boolean(related="kpi_id.compute_on_fly") modify_context_expression = fields.Char() modify_color = fields.Boolean() modify_color_expression = fields.Char() + special_context = fields.Char() @api.depends("row", "size_y") def _compute_end_row(self): @@ -189,9 +192,17 @@ class KpiDashboardItem(models.Model): } ) if self.kpi_id.compute_on_fly: + kpi = self.kpi_id + if self.special_context: + try: + ctx = safe_eval(self.special_context) + if isinstance(ctx, dict): + kpi = kpi.with_context(**ctx) + except SyntaxError: + pass vals.update( { - "value": self.kpi_id._compute_value(), + "value": kpi._compute_value(), "value_last_update": fields.Datetime.now(), } ) diff --git a/kpi_dashboard/views/kpi_dashboard.xml b/kpi_dashboard/views/kpi_dashboard.xml index faac1a8ec..e2ce37e9a 100644 --- a/kpi_dashboard/views/kpi_dashboard.xml +++ b/kpi_dashboard/views/kpi_dashboard.xml @@ -162,15 +162,16 @@ widget="ace" options="{'mode': 'python'}" /> + +