summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
authorPrakash Prajapati <ppr@odoo.com>2019-06-19 07:21:59 +0000
committerAaron Bohy <aab@odoo.com>2019-09-02 08:53:42 +0000
commit50464f54613449be0f9be7b586e2810fc2da4403 (patch)
treea445e5db684a43725f6a622bc944e8db5eb5c267 /addons/web/static/src
parent3978a0838fd6b57f4b7a6f110f144b10e4e366af (diff)
[IMP] web,mail: kanban progressbar: filter on falsy value
This rev. makes the part of the progressbar corresponding to falsy records 'alive': the user can now click on it to filter on records whose value is false for the progressbar field. Task 1952430 closes odoo/odoo#35100 Signed-off-by: Aaron Bohy (aab) <aab@odoo.com> Co-authored-by: Mohammed Shekha <msh@odoo.com> Co-authored-by: Aaron Bohy <aab@odoo.com>
Diffstat (limited to 'addons/web/static/src')
-rw-r--r--addons/web/static/src/js/views/kanban/kanban_column_progressbar.js32
-rw-r--r--addons/web/static/src/scss/kanban_column_progressbar.scss1
-rw-r--r--addons/web/static/src/scss/webclient.scss3
3 files changed, 29 insertions, 7 deletions
diff --git a/addons/web/static/src/js/views/kanban/kanban_column_progressbar.js b/addons/web/static/src/js/views/kanban/kanban_column_progressbar.js
index 6a9caa99a39..3e9197d3fa2 100644
--- a/addons/web/static/src/js/views/kanban/kanban_column_progressbar.js
+++ b/addons/web/static/src/js/views/kanban/kanban_column_progressbar.js
@@ -1,9 +1,12 @@
odoo.define('web.KanbanColumnProgressBar', function (require) {
'use strict';
-var Widget = require('web.Widget');
+const core = require('web.core');
var session = require('web.session');
var utils = require('web.utils');
+var Widget = require('web.Widget');
+
+const _t = core._t;
var KanbanColumnProgressBar = Widget.extend({
template: 'KanbanView.ColumnProgressBar',
@@ -28,7 +31,9 @@ var KanbanColumnProgressBar = Widget.extend({
// <progressbar/> attributes
this.fieldName = columnState.progressBarValues.field;
- this.colors = columnState.progressBarValues.colors;
+ this.colors = _.extend({}, columnState.progressBarValues.colors, {
+ __false: 'muted', // color to use for false value
+ });
this.sumField = columnState.progressBarValues.sum_field;
// Previous progressBar state
@@ -55,7 +60,7 @@ var KanbanColumnProgressBar = Widget.extend({
this.$bars = {};
_.each(this.colors, function (val, key) {
- self.$bars[val] = self.$('.bg-' + val + '-full');
+ self.$bars[key] = self.$(`.progress-bar[data-filter=${key}]`);
});
this.$counter = this.$('.o_kanban_counter_side');
this.$number = this.$counter.find('b');
@@ -77,18 +82,22 @@ var KanbanColumnProgressBar = Widget.extend({
// current use of progressbars
var subgroupCounts = {};
+ let allSubgroupCount = 0;
_.each(self.colors, function (val, key) {
var subgroupCount = self.columnState.progressBarValues.counts[key] || 0;
if (self.activeFilter === key && subgroupCount === 0) {
self.activeFilter = false;
}
subgroupCounts[key] = subgroupCount;
+ allSubgroupCount += subgroupCount;
});
+ subgroupCounts.__false = self.columnState.count - allSubgroupCount;
self.groupCount = self.columnState.count;
self.subgroupCounts = subgroupCounts;
self.prevTotalCounterValue = self.totalCounterValue;
self.totalCounterValue = self.sumField ? (self.columnState.aggregateValues[self.sumField] || 0) : self.columnState.count;
+
self._notifyState();
self._render();
});
@@ -121,7 +130,7 @@ var KanbanColumnProgressBar = Widget.extend({
});
this.trigger_up('tweak_column_records', {
callback: function ($el, recordData) {
- var categoryValue = recordData[self.fieldName];
+ var categoryValue = recordData[self.fieldName] ? recordData[self.fieldName] : '__false';
_.each(self.colors, function (val, key) {
$el.removeClass('oe_kanban_card_' + val);
});
@@ -134,8 +143,9 @@ var KanbanColumnProgressBar = Widget.extend({
// Display and animate the progress bars
var barNumber = 0;
var barMinWidth = 6; // In %
+ const selection = self.columnState.fields[self.fieldName].selection;
_.each(self.colors, function (val, key) {
- var $bar = self.$bars[val];
+ var $bar = self.$bars[key];
var count = self.subgroupCounts && self.subgroupCounts[key] || 0;
if (!$bar) {
@@ -143,7 +153,14 @@ var KanbanColumnProgressBar = Widget.extend({
}
// Adapt tooltip
- $bar.attr('data-original-title', count + ' ' + key);
+ let value;
+ if (selection) { // progressbar on a field of type selection
+ const option = selection.find(option => option[0] === key);
+ value = option && option[1] || _t('Other');
+ } else {
+ value = key;
+ }
+ $bar.attr('data-original-title', count + ' ' + value);
$bar.tooltip({
delay: 0,
trigger: 'hover',
@@ -181,7 +198,8 @@ var KanbanColumnProgressBar = Widget.extend({
end = 0;
_.each(self.columnState.data, function (record) {
var recordData = record.data;
- if (self.activeFilter === recordData[self.fieldName]) {
+ if (self.activeFilter === recordData[self.fieldName] ||
+ (self.activeFilter === '__false' && !recordData[self.fieldName])) {
end += parseFloat(recordData[self.sumField]);
}
});
diff --git a/addons/web/static/src/scss/kanban_column_progressbar.scss b/addons/web/static/src/scss/kanban_column_progressbar.scss
index d70644f7e4a..bfea16934c5 100644
--- a/addons/web/static/src/scss/kanban_column_progressbar.scss
+++ b/addons/web/static/src/scss/kanban_column_progressbar.scss
@@ -110,6 +110,7 @@
@include o-kanban-css-filter(success, theme-color('success'));
@include o-kanban-css-filter(warning, theme-color('warning'));
@include o-kanban-css-filter(danger, theme-color('danger'));
+ @include o-kanban-css-filter(muted, theme-color('dark'));
&.o_kanban_group_show {
display: flex;
diff --git a/addons/web/static/src/scss/webclient.scss b/addons/web/static/src/scss/webclient.scss
index fca898f262a..d41d1fb0ba3 100644
--- a/addons/web/static/src/scss/webclient.scss
+++ b/addons/web/static/src/scss/webclient.scss
@@ -78,6 +78,9 @@ div.o_boolean_toggle.custom-control.custom-checkbox {
.bg-info-full {
background-color: theme-color('info');
}
+.bg-muted-full {
+ background-color: #dee2e6;
+}
.o_web_accesskey_overlay {
font-family: $font-family-sans-serif;