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 @@
+
+