[FIX] handling of group_by_no_leaf in case where there is no group_by field

bzr revid: xmo@openerp.com-20110524132729-6890kfrusn3w3fo0
This commit is contained in:
Xavier Morel
2011-05-24 15:27:29 +02:00
parent 21e2edea63
commit 7e7034436c
2 changed files with 27 additions and 14 deletions
+13 -7
View File
@@ -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
};
+14 -7
View File
@@ -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