diff options
| author | Xavier Morel <xmo@openerp.com> | 2011-05-24 15:27:29 +0200 |
|---|---|---|
| committer | Xavier Morel <xmo@openerp.com> | 2011-05-24 15:27:29 +0200 |
| commit | 7e7034436c8fa041953ccee5d0efe690c2d6ce16 (patch) | |
| tree | d8e36e418ddf38fb162c1bbd536e1e54323e6420 /addons/base/static/src | |
| parent | 21e2edea6388589955f3080db10eadc88ed47a08 (diff) | |
[FIX] handling of group_by_no_leaf in case where there is no group_by field
bzr revid: xmo@openerp.com-20110524132729-6890kfrusn3w3fo0
Diffstat (limited to 'addons/base/static/src')
| -rw-r--r-- | addons/base/static/src/js/data.js | 20 | ||||
| -rw-r--r-- | 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 = $('<th>') - .text((group.value instanceof Array ? group.value[1] : group.value)) - .appendTo($row); - if (group.openable) { + var $group_column = $('<th>').appendTo($row); + if (group.grouped_on) { + // Don't fill this if group_by_no_leaf but no group_by $group_column - .prepend('<span class="ui-icon ui-icon-triangle-1-e">'); + .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('<span class="ui-icon ui-icon-triangle-1-e">'); + } } self.indent($group_column, group.level); // count column |
