From 7e7034436c8fa041953ccee5d0efe690c2d6ce16 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 24 May 2011 15:27:29 +0200 Subject: [PATCH] [FIX] handling of group_by_no_leaf in case where there is no group_by field bzr revid: xmo@openerp.com-20110524132729-6890kfrusn3w3fo0 --- addons/base/static/src/js/data.js | 20 +++++++++++++------- addons/base/static/src/js/list.js | 21 ++++++++++++++------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/addons/base/static/src/js/data.js b/addons/base/static/src/js/data.js index 87c68f7304c..1d2fab9b9bc 100644 --- a/addons/base/static/src/js/data.js +++ b/addons/base/static/src/js/data.js @@ -26,7 +26,7 @@ openerp.base.DataGroup = openerp.base.Controller.extend( /** @lends openerp.bas */ init: function(session, model, domain, context, group_by, level) { if (group_by) { - if (group_by.length) { + if (group_by.length || context['group_by_no_leaf']) { return new openerp.base.ContainerDataGroup( session, model, domain, context, group_by, level); } else { @@ -90,9 +90,15 @@ openerp.base.ContainerDataGroup = openerp.base.DataGroup.extend( */ transform_group: function (group) { var field_name = this.group_by[0]; + // In cases where group_by_no_leaf and no group_by, the result of + // read_group has aggregate fields but no __context or __domain. + // Create default (empty) values for those so that things don't break + var fixed_group = _.extend( + {__context: {group_by: []}, __domain: []}, + group); var aggregates = {}; - _(group).each(function (value, key) { + _(fixed_group).each(function (value, key) { if (key.indexOf('__') === 0 || key === field_name || key === field_name + '_count') { @@ -102,16 +108,16 @@ openerp.base.ContainerDataGroup = openerp.base.DataGroup.extend( }); return { - __context: group.__context, - __domain: group.__domain, + __context: fixed_group.__context, + __domain: fixed_group.__domain, grouped_on: field_name, // if terminal group (or no group) and group_by_no_leaf => use group.__count - length: group[field_name + '_count'] || group.__count, - value: group[field_name], + length: fixed_group[field_name + '_count'] || fixed_group.__count, + value: fixed_group[field_name], openable: !(this.context['group_by_no_leaf'] - && group.__context.group_by.length === 0), + && fixed_group.__context.group_by.length === 0), aggregates: aggregates }; diff --git a/addons/base/static/src/js/list.js b/addons/base/static/src/js/list.js index ccb64affe55..9b480aae283 100644 --- a/addons/base/static/src/js/list.js +++ b/addons/base/static/src/js/list.js @@ -168,7 +168,6 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi * @param {Array} groupby_columns columns the ListView is grouped by */ setup_columns: function (fields, groupby_columns) { - var self = this; var domain_computer = openerp.base.form.compute_domain; var noop = function () { return {}; }; @@ -196,7 +195,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi this.columns.push.apply( this.columns, _(this.fields_view.arch.children).map(field_to_column)); - if (groupby_columns && groupby_columns.length) { + if (groupby_columns) { this.columns.unshift({ id: '_group', tag: '', string: "Group", meta: true, attrs_for: function () { return {}; } @@ -291,6 +290,10 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi self.session, self.dataset.model, results.domain, results.context, results.group_by); + + if (_.isEmpty(results.group_by) && !results.context['group_by_no_leaf']) { + results.group_by = null; + } self.do_reload(results.group_by).then(function () { self.$element.find('table').append(self.groups.render()); }); @@ -569,12 +572,16 @@ openerp.base.ListView.Groups = Class.extend( /** @lends openerp.base.ListView.Gr placeholder.appendChild($row[0]); - var $group_column = $('') - .text((group.value instanceof Array ? group.value[1] : group.value)) - .appendTo($row); - if (group.openable) { + var $group_column = $('').appendTo($row); + if (group.grouped_on) { + // Don't fill this if group_by_no_leaf but no group_by $group_column - .prepend(''); + .text((group.value instanceof Array ? group.value[1] : group.value)); + if (group.openable) { + // Make openable if not terminal group & group_by_no_leaf + $group_column + .prepend(''); + } } self.indent($group_column, group.level); // count column