summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKhoi Nguyen <bng@odoo.com>2017-07-14 15:10:26 +0200
committerKhoi Nguyen <bng@odoo.com>2017-07-17 15:40:44 +0200
commit3dd1c0f87ede01469018f2fadad77b23c789cab8 (patch)
tree64215dca63720ed5c60efb17aba9c48239ee4495
parent779fc8e4fe018c5b1713e2e31e7053ba97060640 (diff)
[FIX] web: undefined group name for group by date:<interval>
Previously, grouping a list by a non-default time interval (e.g. 'creation date:week') yielded a grouped list of records with undefined group names.
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js9
-rw-r--r--addons/web/static/src/js/views/list/list_renderer.js4
-rw-r--r--addons/web/static/tests/helpers/mock_server.js4
-rw-r--r--addons/web/static/tests/views/list_tests.js17
4 files changed, 29 insertions, 5 deletions
diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js
index 5fb77204ec7..9613d5fb8be 100644
--- a/addons/web/static/src/js/views/basic/basic_model.js
+++ b/addons/web/static/src/js/views/basic/basic_model.js
@@ -84,8 +84,8 @@ odoo.define('web.BasicModel', function (require) {
var AbstractModel = require('web.AbstractModel');
var concurrency = require('web.concurrency');
-var core = require('web.core');
var Context = require('web.Context');
+var core = require('web.core');
var Domain = require('web.Domain');
var fieldUtils = require('web.field_utils');
var session = require('web.session');
@@ -3087,7 +3087,8 @@ var BasicModel = AbstractModel.extend({
lazy: true,
})
.then(function (groups) {
- var rawGroupBy = list.groupedBy[0].split(':')[0];
+ var groupByField = list.groupedBy[0];
+ var rawGroupBy = groupByField.split(':')[0];
var previousGroups = _.map(list.data, function (groupID) {
return self.localData[groupID];
});
@@ -3098,13 +3099,13 @@ var BasicModel = AbstractModel.extend({
_.each(groups, function (group) {
var aggregateValues = {};
_.each(group, function (value, key) {
- if (_.contains(fields, key) && key !== list.groupedBy[0]) {
+ if (_.contains(fields, key) && key !== groupByField) {
aggregateValues[key] = value;
}
});
// When a view is grouped, we need to display the name of each group in
// the 'title'.
- var value = group[rawGroupBy];
+ var value = group[groupByField];
if (list.fields[rawGroupBy].type === "selection") {
var choice = _.find(list.fields[rawGroupBy].selection, function (c) {
return c[0] === value;
diff --git a/addons/web/static/src/js/views/list/list_renderer.js b/addons/web/static/src/js/views/list/list_renderer.js
index a917781b580..802f2f03a09 100644
--- a/addons/web/static/src/js/views/list/list_renderer.js
+++ b/addons/web/static/src/js/views/list/list_renderer.js
@@ -377,6 +377,10 @@ var ListRenderer = BasicRenderer.extend({
$cells.unshift($('<td>'));
}
var name = group.value === undefined ? _t('Undefined') : group.value;
+ var groupBy = this.state.groupedBy[groupLevel];
+ if (group.fields[groupBy.split(':')[0]].type !== 'boolean') {
+ name = name || _t('Undefined');
+ }
var $th = $('<th>')
.addClass('o_group_name')
.text(name + ' (' + group.count + ')');
diff --git a/addons/web/static/tests/helpers/mock_server.js b/addons/web/static/tests/helpers/mock_server.js
index cab291ec012..4051ebe9ea0 100644
--- a/addons/web/static/tests/helpers/mock_server.js
+++ b/addons/web/static/tests/helpers/mock_server.js
@@ -632,7 +632,9 @@ var MockServer = Class.extend({
var fieldName = groupByField.split(':')[0];
var aggregateFunction = groupByField.split(':')[1] || 'month';
if (fields[fieldName].type === 'date') {
- if (aggregateFunction === 'day') {
+ if (!val) {
+ return false;
+ } else if (aggregateFunction === 'day') {
return moment(val).format('YYYY-MM-DD');
} else {
return moment(val).format('MMMM YYYY');
diff --git a/addons/web/static/tests/views/list_tests.js b/addons/web/static/tests/views/list_tests.js
index 09109d92b84..e3d8acfe84a 100644
--- a/addons/web/static/tests/views/list_tests.js
+++ b/addons/web/static/tests/views/list_tests.js
@@ -2466,6 +2466,23 @@ QUnit.module('Views', {
list.destroy();
});
+
+ QUnit.test('list grouped by date:month', function (assert) {
+ assert.expect(1);
+
+ var list = createView({
+ View: ListView,
+ model: 'foo',
+ data: this.data,
+ arch: '<tree><field name="date"/></tree>',
+ groupBy: ['date:month'],
+ });
+
+ assert.strictEqual(list.$('tbody').text(), "January 2017 (1)Undefined (3)",
+ "the group names should be correct");
+
+ list.destroy();
+ });
});
});