diff --git a/kpi_dashboard/__manifest__.py b/kpi_dashboard/__manifest__.py index eb2556069..835f01bb0 100644 --- a/kpi_dashboard/__manifest__.py +++ b/kpi_dashboard/__manifest__.py @@ -5,7 +5,7 @@ "name": "Kpi Dashboard", "summary": """ Create Dashboards using kpis""", - "version": "12.0.1.2.0", + "version": "12.0.1.3.0", "license": "AGPL-3", "author": "Creu Blanca,Odoo Community Association (OCA)", "website": "https://github.com/OCA/reporting-engine", diff --git a/kpi_dashboard/demo/demo_dashboard.xml b/kpi_dashboard/demo/demo_dashboard.xml index 2d460cd50..3a31344cc 100644 --- a/kpi_dashboard/demo/demo_dashboard.xml +++ b/kpi_dashboard/demo/demo_dashboard.xml @@ -165,21 +165,24 @@ result = {"value": self.env.context.get('counter', 990)} +1 to Counter - 4 + 3 10 - 3 + 1 + 2 #B41F1F #EEBF77 {'counter': (context.counter or 990) + 1} + + check_if(((context.counter or 990) + 1) % 2, '#ff0000', '#00ff00') Counter - 2 - 10 + 3 + 11 3 #4B0082 #ffffff @@ -189,8 +192,8 @@ result = {"value": self.env.context.get('counter', 990)} Integer - 3 - 10 + 4 + 11 3 #ffffff #4B0082 diff --git a/kpi_dashboard/i18n/kpi_dashboard.pot b/kpi_dashboard/i18n/kpi_dashboard.pot index ab67adba3..d58668050 100644 --- a/kpi_dashboard/i18n/kpi_dashboard.pot +++ b/kpi_dashboard/i18n/kpi_dashboard.pot @@ -14,14 +14,14 @@ msgstr "" "Plural-Forms: \n" #. module: kpi_dashboard -#: code:addons/kpi_dashboard/models/kpi_kpi.py:150 +#: code:addons/kpi_dashboard/models/kpi_kpi.py:153 #, python-format msgid " or " msgstr "" #. module: kpi_dashboard #. openerp-web -#: code:addons/kpi_dashboard/static/src/js/dashboard_controller.js:68 +#: code:addons/kpi_dashboard/static/src/js/dashboard_controller.js:72 #, python-format msgid "'%s' added to dashboard" msgstr "" @@ -93,6 +93,7 @@ msgid "Calendar" msgstr "" #. module: kpi_dashboard +#: model_terms:ir.ui.view,arch_db:kpi_dashboard.kpi_dashboard_item_config_form_view #: model_terms:ir.ui.view,arch_db:kpi_dashboard.kpi_dashboard_menu_form_view msgid "Cancel" msgstr "" @@ -161,11 +162,16 @@ msgstr "" #. module: kpi_dashboard #. openerp-web -#: code:addons/kpi_dashboard/static/src/js/dashboard_controller.js:72 +#: code:addons/kpi_dashboard/static/src/js/dashboard_controller.js:76 #, python-format msgid "Could not add KPI dashboard to dashboard" msgstr "" +#. module: kpi_dashboard +#: selection:kpi.kpi,widget:0 +msgid "Counter" +msgstr "" + #. module: kpi_dashboard #: model:ir.model,name:kpi_dashboard.model_kpi_dashboard_menu msgid "Create a Menu for a Dashboard" @@ -250,7 +256,7 @@ msgstr "" #. module: kpi_dashboard #. openerp-web -#: code:addons/kpi_dashboard/static/src/js/dashboard_controller.js:53 +#: code:addons/kpi_dashboard/static/src/js/dashboard_controller.js:57 #, python-format msgid "First you must create the Menu" msgstr "" @@ -337,6 +343,11 @@ msgstr "" msgid "ID" msgstr "" +#. module: kpi_dashboard +#: selection:kpi.kpi,widget:0 +msgid "Integer" +msgstr "" + #. module: kpi_dashboard #: model:ir.model.fields,field_description:kpi_dashboard.field_kpi_dashboard__item_ids msgid "Item" @@ -469,6 +480,26 @@ msgstr "" msgid "Model" msgstr "" +#. module: kpi_dashboard +#: model:ir.model.fields,field_description:kpi_dashboard.field_kpi_dashboard_item__modify_color +msgid "Modify Color" +msgstr "" + +#. module: kpi_dashboard +#: model:ir.model.fields,field_description:kpi_dashboard.field_kpi_dashboard_item__modify_color_expression +msgid "Modify Color Expression" +msgstr "" + +#. module: kpi_dashboard +#: model:ir.model.fields,field_description:kpi_dashboard.field_kpi_dashboard_item__modify_context +msgid "Modify Context" +msgstr "" + +#. module: kpi_dashboard +#: model:ir.model.fields,field_description:kpi_dashboard.field_kpi_dashboard_item__modify_context_expression +msgid "Modify Context Expression" +msgstr "" + #. module: kpi_dashboard #: model:ir.model.fields,field_description:kpi_dashboard.field_kpi_dashboard__name #: model:ir.model.fields,field_description:kpi_dashboard.field_kpi_dashboard_item__name @@ -495,7 +526,7 @@ msgstr "" #. module: kpi_dashboard #. openerp-web -#: code:addons/kpi_dashboard/static/src/js/dashboard_controller.js:69 +#: code:addons/kpi_dashboard/static/src/js/dashboard_controller.js:73 #, python-format msgid "Please refresh your browser for the changes to take effect." msgstr "" @@ -525,6 +556,11 @@ msgstr "" msgid "Row" msgstr "" +#. module: kpi_dashboard +#: model_terms:ir.ui.view,arch_db:kpi_dashboard.kpi_dashboard_item_config_form_view +msgid "Save" +msgstr "" + #. module: kpi_dashboard #: selection:ir.ui.view,type:0 msgid "Search" @@ -564,7 +600,7 @@ msgid "Size Y" msgstr "" #. module: kpi_dashboard -#: code:addons/kpi_dashboard/models/kpi_dashboard.py:135 +#: code:addons/kpi_dashboard/models/kpi_dashboard.py:139 #, python-format msgid "Size Y of the widget cannot be bigger than 10" msgstr "" @@ -590,7 +626,7 @@ msgid "Suffix" msgstr "" #. module: kpi_dashboard -#: code:addons/kpi_dashboard/models/kpi_kpi.py:152 +#: code:addons/kpi_dashboard/models/kpi_kpi.py:155 #, python-format msgid "The code cannot contain the following terms: %s." msgstr "" @@ -630,7 +666,7 @@ msgid "Widget" msgstr "" #. module: kpi_dashboard -#: code:addons/kpi_dashboard/models/kpi_dashboard.py:156 +#: code:addons/kpi_dashboard/models/kpi_dashboard.py:160 #, python-format msgid "Widget %s is bigger than expected" msgstr "" @@ -651,7 +687,7 @@ msgid "Widget configuration" msgstr "" #. module: kpi_dashboard -#: code:addons/kpi_dashboard/models/kpi_dashboard.py:152 +#: code:addons/kpi_dashboard/models/kpi_dashboard.py:156 #, python-format msgid "Widgets cannot be crossed by other widgets" msgstr "" diff --git a/kpi_dashboard/models/kpi_dashboard.py b/kpi_dashboard/models/kpi_dashboard.py index 244e402e6..24d423017 100644 --- a/kpi_dashboard/models/kpi_dashboard.py +++ b/kpi_dashboard/models/kpi_dashboard.py @@ -119,6 +119,8 @@ class KpiDashboardItem(models.Model): font_color = fields.Char() modify_context = fields.Boolean() modify_context_expression = fields.Char() + modify_color = fields.Boolean() + modify_color_expression = fields.Char() @api.depends('row', 'size_y') def _compute_end_row(self): @@ -176,9 +178,12 @@ class KpiDashboardItem(models.Model): "color": self.color, "font_color": self.font_color or "000000", "modify_context": self.modify_context, + "modify_color": self.modify_color, } if self.modify_context: vals['modify_context_expression'] = self.modify_context_expression + if self.modify_color: + vals['modify_color_expression'] = self.modify_color_expression if self.kpi_id: vals.update( { diff --git a/kpi_dashboard/models/kpi_kpi.py b/kpi_dashboard/models/kpi_kpi.py index 3a9506c0b..a16d613d0 100644 --- a/kpi_dashboard/models/kpi_kpi.py +++ b/kpi_dashboard/models/kpi_kpi.py @@ -10,6 +10,7 @@ from odoo.tools.float_utils import float_compare import re import json import datetime +from dateutil import relativedelta class KpiKpi(models.Model): @@ -137,6 +138,7 @@ class KpiKpi(models.Model): "model": self.browse(), "datetime": datetime, "float_compare": float_compare, + "relativedelta": relativedelta.relativedelta, } def _forbidden_code(self): diff --git a/kpi_dashboard/static/src/js/dashboard_controller.js b/kpi_dashboard/static/src/js/dashboard_controller.js index a6efee0aa..97db1765d 100644 --- a/kpi_dashboard/static/src/js/dashboard_controller.js +++ b/kpi_dashboard/static/src/js/dashboard_controller.js @@ -11,11 +11,14 @@ odoo.define('kpi_dashboard.DashboardController', function (require) { init: function () { this._super.apply(this, arguments); this.dashboard_context = {}; + this.dashboard_color_data = [] }, custom_events: _.extend({}, BasicController.prototype.custom_events, { addDashboard: '_addDashboard', refresh_on_fly: '_refreshOnFly', modify_context: '_modifyContext', + add_modify_color: '_addModifyColor', + refresh_colors: '_refreshColors', }), _refreshOnFly: function (event) { var self = this; @@ -112,7 +115,34 @@ odoo.define('kpi_dashboard.DashboardController', function (require) { )}), ); this._refreshOnFly(event); - } + this._refreshColors(); + }, + _addModifyColor: function (event) { + this.dashboard_color_data.push([ + event.data.element_id, + event.data.expression, + ]); + }, + _refreshColors: function () { + var self = this; + var ctx = this._getContext(); + _.each(this.dashboard_color_data, function (data) { + var color = py.eval(data[1], { + context: _.extend(ctx, { + __getattr__: function() {return false}, + + }), + check_if: function(args) { + if (args[0].toJSON()) { + return args[1]; + } + return args[2]; + } + }); + var $element = self.renderer.$el.find('#' + data[0]); + $element.css('background-color', color); + }); + }, }); return DashboardController; diff --git a/kpi_dashboard/static/src/js/dashboard_renderer.js b/kpi_dashboard/static/src/js/dashboard_renderer.js index 3390b5f10..6bc38c492 100644 --- a/kpi_dashboard/static/src/js/dashboard_renderer.js +++ b/kpi_dashboard/static/src/js/dashboard_renderer.js @@ -36,7 +36,14 @@ odoo.define('kpi_dashboard.DashboardRenderer', function (require) { 'kpi_dashboard.kpi', {widget: kpi})); element.css('background-color', kpi.color); element.css('color', kpi.font_color); + element.attr('id', _.uniqueId('kpi_')); self.$grid.append(element); + if (kpi.modify_color) { + self.trigger_up("add_modify_color", { + element_id: element.attr("id"), + expression: kpi.modify_color_expression, + }) + } if (kpi.modify_context) { element.on("click", self._onClickModifyContext.bind( self, kpi.modify_context_expression)); @@ -71,6 +78,10 @@ odoo.define('kpi_dashboard.DashboardRenderer', function (require) { self.trigger_up('refresh_on_fly'); }, this.state.specialData.compute_on_fly_refresh *1000); }; + this.trigger_up('refresh_colors'); + this.trigger_up('refresh_on_fly'); + // We need to refreshs data in order compute with the current + // context return $.when(); }, on_detach_callback: function () { diff --git a/kpi_dashboard/views/kpi_dashboard.xml b/kpi_dashboard/views/kpi_dashboard.xml index f73eb9aa6..905431250 100644 --- a/kpi_dashboard/views/kpi_dashboard.xml +++ b/kpi_dashboard/views/kpi_dashboard.xml @@ -150,6 +150,10 @@ + +