[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:
@@ -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
|
||||
};
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user