From 2d45b0f5f90305aa274557ec0966bc26b37c488c 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 | 12 ++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/kpi_dashboard/models/kpi_dashboard.py b/kpi_dashboard/models/kpi_dashboard.py index 20642ed39..0af044470 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): @@ -119,9 +120,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): @@ -195,9 +198,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 e919d3d9c..06f7f1c37 100644 --- a/kpi_dashboard/views/kpi_dashboard.xml +++ b/kpi_dashboard/views/kpi_dashboard.xml @@ -162,15 +162,15 @@ widget="ace" options="{'mode': 'python'}" /> + +