[REF] simplification of the way Pivot configuration is done in graph view (addon web_graph)

bzr revid: ged@openerp.com-20140110140837-tl3ts6za0zr46id7
This commit is contained in:
Gery Debongnie 2014-01-10 15:08:37 +01:00
parent dbf064e817
commit 2b3b08160c
2 changed files with 83 additions and 150 deletions

View File

@ -35,37 +35,14 @@ instance.web_graph.GraphView = instance.web.View.extend({
view_loading: function (fields_view_get) {
var self = this,
arch = fields_view_get.arch,
measures = [],
stacked = false;
arch = fields_view_get.arch;
this.widget_config = { title: arch.attrs.string };
if (!_.has(arch.attrs, 'type')) {
this.widget_config.mode = 'bar_chart';
} else {
switch (arch.attrs.type) {
case 'bar':
this.widget_config.mode = 'bar_chart';
break;
case 'pie':
this.widget_config.mode = 'pie_chart';
break;
case 'line':
this.widget_config.mode = 'line_chart';
break;
case 'pivot':
case 'heatmap':
case 'row_heatmap':
case 'col_heatmap':
this.widget_config.mode = arch.attrs.type;
break;
}
}
if (arch.attrs.stacked === 'True') {
this.widget_config.stacked = true;
}
this.widget_config = {
title: arch.attrs.string,
stacked : (arch.attrs.stacked === 'True'),
mode: (arch.attrs.type) ? arch.attrs.type : 'bar',
measures: [],
};
_.each(arch.children, function (field) {
if (_.has(field.attrs, 'type')) {
@ -77,28 +54,22 @@ instance.web_graph.GraphView = instance.web.View.extend({
self.default_col_groupby.push(field.attrs.name);
break;
case 'measure':
measures.push(field.attrs.name);
self.widget_config.measures.push(field.attrs.name);
break;
}
} else { // old style, kept for backward compatibility
if ('operator' in field.attrs) {
measures.push(field.attrs.name);
self.widget_config.measures.push(field.attrs.name);
} else {
self.default_row_groupby.push(field.attrs.name);
}
}
});
if (measures.length === 0) {
measures.push('__count');
if (self.widget_config.measures.length === 0) {
self.widget_config.measures.push('__count');
}
this.widget_config.row_groupby = self.default_row_groupby;
this.widget_config.col_groupby = self.default_col_groupby;
this.widget_config.measures = measures;
// measures:measures,
// update:false,
// title: title,
// bar_ui: (stacked) ? 'stack' : 'group'
// });
},
get_context: function (facet) {
@ -109,46 +80,42 @@ instance.web_graph.GraphView = instance.web.View.extend({
},
do_search: function (domain, context, group_by) {
var col_groupby = context.col_group_by || [],
options = {domain:domain};
// var col_groupby = context.col_group_by || [],
// options = {domain:domain};
if (!this.graph_widget) {
this.graph_widget = new openerp.web_graph.Graph(this, this.model, domain, this.widget_config);
this.graph_widget.appendTo(this.$el);
this.graph_widget.on('groupby_changed', this, this.proxy('register_groupby'));
this.ViewManager.on('switch_mode', this, function (e) { if (e === 'graph') this.graph_widget.reload(); });
}
this.search_view_groupby = group_by;
// this.search_view_groupby = group_by;
if (group_by.length && this.groupby_mode !== 'manual') {
if (_.isEqual(col_groupby, [])) {
col_groupby = this.default_col_groupby;
}
}
if (group_by.length || col_groupby.length) {
this.groupby_mode = 'manual';
}
if (!this.graph_widget.enabled) {
options.update = false;
options.silent = true;
}
// if (group_by.length && this.groupby_mode !== 'manual') {
// if (_.isEqual(col_groupby, [])) {
// col_groupby = this.default_col_groupby;
// }
// }
// if (group_by.length || col_groupby.length) {
// this.groupby_mode = 'manual';
// }
// if (!this.graph_widget.enabled) {
// options.update = false;
// options.silent = true;
// }
if (this.groupby_mode === 'manual') {
options.row_groupby = group_by;
options.col_groupby = col_groupby;
} else {
options.row_groupby = _.toArray(this.default_row_groupby);
options.col_groupby = _.toArray(this.default_col_groupby);
}
this.graph_widget.set_domain(domain);
this.graph_widget.set_col_groupby(options.col_groupby);
this.graph_widget.set_row_groupby(options.row_groupby);
// if (this.groupby_mode === 'manual') {
// options.row_groupby = group_by;
// options.col_groupby = col_groupby;
// } else {
// options.row_groupby = _.toArray(this.default_row_groupby);
// options.col_groupby = _.toArray(this.default_col_groupby);
// }
// this.graph_widget.set(domain, options.row_groupby, options.col_groupby);
// this.graph_widget.set_domain(domain);
// this.graph_widget.set_col_groupby(options.col_groupby);
// this.graph_widget.set_row_groupby(options.row_groupby);
// this.graph_widget.pivot.config(options);
if (!this.graph_widget.enabled) {
this.graph_widget.activate_display();
this.ViewManager.on('switch_mode', this, function () {this.graph_widget.pivot.update_data(); });
}
},
do_show: function () {
@ -199,7 +166,6 @@ instance.web_graph.GraphView = instance.web.View.extend({
},
});
// important_fields = [field], field = {field: _,type: _, string: _}
instance.web_graph.Graph = instance.web.Widget.extend(openerp.EventDispatcherMixin, {
template: 'GraphWidget',
@ -212,8 +178,6 @@ instance.web_graph.Graph = instance.web.Widget.extend(openerp.EventDispatcherMix
},
init: function(parent, model, domain, options) {
var self = this;
this._super(parent);
this.model = model;
this.domain = domain;
@ -231,7 +195,7 @@ instance.web_graph.Graph = instance.web.Widget.extend(openerp.EventDispatcherMix
self.important_fields = f;
});
var def2 = this.get_model_fields().then(function (f) {
var def2 = this.model.call('fields_get', []).then(function (f) {
self.fields = f;
self.measure_list = self.get_measures();
self.add_measures_to_options();
@ -278,12 +242,6 @@ instance.web_graph.Graph = instance.web.Widget.extend(openerp.EventDispatcherMix
});
},
get_model_fields: function () {
return this.model.call('fields_get', []).then(function (fs) {
return fs;
});
},
get_measures: function(fields) {
var measures = [];
_.each(this.fields, function (f, id) {
@ -294,27 +252,14 @@ instance.web_graph.Graph = instance.web.Widget.extend(openerp.EventDispatcherMix
return measures;
},
set_domain: function (domain) {
set: function (domain, row_groupby, col_groupby) {
if (this.pivot) {
this.pivot.set_domain(domain);
this.pivot.set(domain, row_groupby, col_groupby);
} else {
this.pivot_options.domain = domain;
}
},
set_row_groupby: function (groupby) {
if (this.pivot) {
this.pivot.set_row_groupby(groupby);
} else {
this.pivot_options.row_groupby = groupby;
}
},
set_col_groupby: function (groupby) {
if (this.pivot) {
this.pivot.set_col_groupby(groupby);
} else {
this.pivot_options.col_groupby = groupby;
this.pivot_options.row_groupby = row_groupby;
this.pivot_options.col_groupby = col_groupby;
}
},
@ -329,10 +274,12 @@ instance.web_graph.Graph = instance.web.Widget.extend(openerp.EventDispatcherMix
},
set_mode: function (mode) {
this.mode = mode;
this.display_data();
},
activate_display: function () {
reload: function () {
this.pivot.update_data();
},
display_data: function () {
@ -364,8 +311,7 @@ instance.web_graph.Graph = instance.web.Widget.extend(openerp.EventDispatcherMix
mode_selection: function (event) {
event.preventDefault();
var mode = event.target.attributes['data-mode'].nodeValue;
this.mode = mode;
this.display_data();
this.set_mode(mode);
},
measure_selection: function (event) {
@ -623,7 +569,7 @@ instance.web_graph.Graph = instance.web.Widget.extend(openerp.EventDispatcherMix
/******************************************************************************
* Drawing charts methods...
******************************************************************************/
bar_chart: function () {
bar: function () {
var self = this,
dim_x = this.pivot.rows.groupby.length,
dim_y = this.pivot.cols.groupby.length,
@ -707,7 +653,7 @@ instance.web_graph.Graph = instance.web.Widget.extend(openerp.EventDispatcherMix
},
line_chart: function () {
line: function () {
var self = this,
dim_x = this.pivot.rows.groupby.length,
dim_y = this.pivot.cols.groupby.length;
@ -742,7 +688,7 @@ instance.web_graph.Graph = instance.web.Widget.extend(openerp.EventDispatcherMix
});
},
pie_chart: function () {
pie: function () {
var self = this,
dim_x = this.pivot.rows.groupby.length;
var data = _.map(this.pivot.get_rows_leaves(), function (row) {

View File

@ -30,8 +30,6 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend(openerp.EventDispatcherM
init: function (model, domain, fields, options) {
openerp.EventDispatcherMixin.init.call(this);
this.rows = { groupby: [], headers: null };
this.cols = { groupby: [], headers: null };
this.cells = [];
this.domain = domain;
this.no_data = true;
@ -40,9 +38,9 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend(openerp.EventDispatcherM
this.fields.__count = {type: 'integer', string:'Quantity'};
this.measures = [{field:'__count', type: this.fields.type, string:this.fields.string}];
this.active = false;
this.rows = { groupby: this.create_field_values(options.row_groupby || []), headers: null };
this.cols = { groupby: this.create_field_values(options.col_groupby || []), headers: null };
if (options.measures) { this.set_measures(options.measures); }
if (options.col_groupby) { this.set_col_groupby(options.col_groupby); }
if (options.row_groupby) { this.set_row_groupby(options.row_groupby); }
},
// ----------------------------------------------------------------------
@ -53,11 +51,6 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend(openerp.EventDispatcherM
this.update_data();
},
set_domain: function (domain) {
this.domain = domain;
if (this.active) { this.update_data(); }
},
set_measures: function (measures) {
var self = this;
if (!_.isEqual(measures, this.measures)) {
@ -93,42 +86,37 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend(openerp.EventDispatcherM
if (this.active) { this.update_data(); }
},
set_col_groupby: function (groupbys) {
var self = this;
if (!_.isEqual(groupbys, this.cols.groupby)) {
this.cols.groupby = [];
_.each(groupbys, function (g) { self._add_groupby(self.cols.groupby, g); });
this.cols.headers = null;
if (this.active) {
this.trigger('groupby_changed');
this.update_data();
}
}
},
set: function (domain, row_groupby, col_groupby) {
var row_gbs = this.create_field_values(row_groupby),
col_gbs = this.create_field_values(col_groupby),
dom_changed = !_.isEqual(this.domain, domain),
gb_changed = !(_.isEqual(row_gbs, this.rows.groupby) &&
_.isEqual(col_gbs, this.cols.groupby));
set_row_groupby: function (groupbys) {
var self = this;
if (!_.isEqual(groupbys, this.rows.groupby)) {
this.rows.groupby = [];
_.each(groupbys, function (g) { self._add_groupby(self.rows.groupby, g); });
this.rows.headers = null;
if (this.active) {
this.trigger('groupby_changed');
this.update_data();
}
}
},
if (dom_changed) {
this.domain = domain;
}
if (gb_changed) {
this.cols.groupby = col_gbs;
this.rows.groupby = row_gbs;
if (this.active) { this.trigger('groupby_changed'); }
}
if (this.active && (gb_changed || dom_changed)) {
this.update_data();
}
},
create_field_value: function (f) {
return (f.field && f.string && f.type) ? f : {field: f, string: this.fields[f].string, type: this.fields[f].type};
},
create_field_values: function (field_ids) {
var self = this;
return _.map(field_ids, function (f) { return self.create_field_value(f); });
},
_add_groupby: function(groupby_list, groupby) {
if (groupby.field && groupby.string && groupby.type) {
groupby_list.push(groupby);
} else {
groupby_list.push({
field:groupby,
string: this.fields[groupby].string,
type: this.fields[groupby].type
});
}
groupby_list.push(this.create_field_value(groupby));
},
// ----------------------------------------------------------------------
@ -413,7 +401,7 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend(openerp.EventDispatcherM
group.attributes.value = 'undefined';
} else if (value instanceof Array) {
group.attributes.value = value[1];
}
}
group.path = value ? (current_path || []).concat(group.attributes.value) : [];
group.attributes.aggregates.__count = group.attributes.length;
@ -508,7 +496,6 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend(openerp.EventDispatcherM
},
});
})();