[REF] puts helper functions inside a closure to simplify the calls to these functions (addon web_graph)

bzr revid: ged@openerp.com-20131127111953-yfzdyllt1ty70xtu
This commit is contained in:
Gery Debongnie 2013-11-27 12:19:53 +01:00
parent e0744a7427
commit 76216fd3f3
2 changed files with 80 additions and 76 deletions

View File

@ -1,77 +1,78 @@
openerp.web_graph.draw_chart = function (mode, pivot, svg) {
var values = _.map(pivot.rows.main.children, function (pt) {
var data = _.map(pivot.rows.main.children, function (pt) {
var val = pivot.get_value(pt.id, pivot.cols.main.id);
return {x: pt.title, y: val};
});
switch (mode) {
case 'bar_chart':
openerp.web_graph.bar_chart(values, svg);
bar_chart();
break;
case 'line_chart':
openerp.web_graph.line_chart(values, svg);
line_chart();
break;
case 'pie_chart':
openerp.web_graph.pie_chart(values, svg);
pie_chart();
break;
}
function bar_chart () {
nv.addGraph(function () {
var chart = nv.models.discreteBarChart()
.tooltips(false)
.showValues(true)
.staggerLabels(true)
.width(650)
.height(400);
d3.select(svg)
.datum([{key: 'Bar chart', values:data}])
.attr('width', 650)
.attr('height', 400)
.call(chart);
nv.utils.windowResize(chart.update);
return chart;
});
};
function line_chart () {
nv.addGraph(function () {
var chart = nv.models.lineChart()
.x(function (d,u) { return u; })
.width(600)
.height(300)
.margin({top: 30, right: 20, bottom: 20, left: 60});
d3.select(svg)
.attr('width', 600)
.attr('height', 300)
.datum([{key: 'Bar chart', values: data}])
.call(chart);
return chart;
});
};
function pie_chart () {
nv.addGraph(function () {
var chart = nv.models.pieChart()
.color(d3.scale.category10().range())
.width(650)
.height(400);
d3.select(svg)
.datum(data)
.transition().duration(1200)
.attr('width', 650)
.attr('height', 400)
.call(chart);
nv.utils.windowResize(chart.update);
return chart;
});
};
}
openerp.web_graph.bar_chart = function (data, svg) {
nv.addGraph(function () {
var chart = nv.models.discreteBarChart()
.tooltips(false)
.showValues(true)
.staggerLabels(true)
.width(650)
.height(400);
d3.select(svg)
.datum([{key: 'Bar chart', values:data}])
.attr('width', 650)
.attr('height', 400)
.call(chart);
nv.utils.windowResize(chart.update);
return chart;
});
};
openerp.web_graph.line_chart = function (data, svg) {
nv.addGraph(function () {
var chart = nv.models.lineChart()
.x(function (d,u) { return u; })
.width(600)
.height(300)
.margin({top: 30, right: 20, bottom: 20, left: 60});
d3.select(svg)
.attr('width', 600)
.attr('height', 300)
.datum([{key: 'Bar chart', values: data}])
.call(chart);
return chart;
});
};
openerp.web_graph.pie_chart = function(data, svg) {
nv.addGraph(function () {
var chart = nv.models.pieChart()
.color(d3.scale.category10().range())
.width(650)
.height(400);
d3.select(svg)
.datum(data)
.transition().duration(1200)
.attr('width', 650)
.attr('height', 400)
.call(chart);
nv.utils.windowResize(chart.update);
return chart;
});
};

View File

@ -1,4 +1,6 @@
(function () {
openerp.web_graph.PivotTable = openerp.web.Class.extend({
id_seed: 0,
@ -49,7 +51,7 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend({
start: function () {
var self = this,
initial_group = this.expand(this.rows.main.id, this.rows.groupby[0]),
total = openerp.web_graph.query_groups(this.model, this.measure, this.domain, [])
total = query_groups(this.model, this.measure, this.domain, [])
.then(function (total) {
var val = total[0].attributes.aggregates[self.measure];
self.set_value(self.rows.main.id, self.cols.main.id, val);
@ -125,7 +127,7 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend({
}
var otherDim = (row.root === this.cols) ? this.rows : this.cols;
return openerp.web_graph.query_groups_data(this.model, this.visible_fields(), row.domain, otherDim.groupby, field_id)
return query_groups_data(this.model, this.visible_fields(), row.domain, otherDim.groupby, field_id)
.then(function (groups) {
_.each(groups.reverse(), function (group) {
var new_row_id = self.make_header(group, row);
@ -159,7 +161,7 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend({
root: parent.root,
};
parent.children.splice(0,0, new_header);
openerp.web_graph.insertAfter(parent.root.headers, parent, new_header);
insertAfter(parent.root.headers, parent, new_header);
return new_header.id;
},
@ -319,7 +321,7 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend({
groupbys = [rows, []];
}
def_array = _.map(groupbys, function (groupby) {
return openerp.web_graph.query_groups(self.model, self.visible_fields(), self.domain, groupby);
return query_groups(self.model, self.visible_fields(), self.domain, groupby);
});
return $.when.apply(null, def_array).then(function () {
@ -434,14 +436,14 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend({
});
openerp.web_graph.removeFromArray = function (array, element) {
removeFromArray = function (array, element) {
var index = array.indexOf(element);
if (index > -1) {
array.splice(index, 1);
}
}
openerp.web_graph.insertAfter = function (array, after, elem) {
insertAfter = function (array, after, elem) {
array.splice(array.indexOf(after) + 1, 0, elem);
}
@ -450,7 +452,7 @@ openerp.web_graph.insertAfter = function (array, after, elem) {
* with all the groupbys applied (this is done for now, but the goal
* is to modify read_group in order to allow eager and lazy groupbys
*/
openerp.web_graph.query_groups = function (model, fields, domain, groupbys) {
query_groups = function (model, fields, domain, groupbys) {
return model.query(fields)
.filter(domain)
.group_by(groupbys)
@ -464,7 +466,7 @@ openerp.web_graph.query_groups = function (model, fields, domain, groupbys) {
var get_subgroups = $.when.apply(null, _.map(non_empty_results, function (result) {
var new_domain = result.model._domain;
var new_groupings = groupbys.slice(1);
return openerp.web_graph.query_groups(model, fields,new_domain, new_groupings).then(function (subgroups) {
return query_groups(model, fields,new_domain, new_groupings).then(function (subgroups) {
result.subgroups_data = subgroups;
});
}));
@ -475,20 +477,21 @@ openerp.web_graph.query_groups = function (model, fields, domain, groupbys) {
});
}
openerp.web_graph.query_groups_data = function (model, fields, domain, row_groupbys, col_groupby) {
return openerp.web_graph.query_groups(model, fields, domain, [col_groupby].concat(row_groupbys)).then(function (groups) {
query_groups_data = function (model, fields, domain, row_groupbys, col_groupby) {
return query_groups(model, fields, domain, [col_groupby].concat(row_groupbys)).then(function (groups) {
return _.map(groups, function (group) {
return openerp.web_graph.format_group(group, []);
return format_group(group, []);
});
});
}
openerp.web_graph.format_group = function (group, path) {
format_group = function (group, path) {
group.path = path.concat(group.attributes.value[1]);
result = [group];
_.each(group.subgroups_data, function (subgroup) {
result = result.concat(openerp.web_graph.format_group (subgroup, group.path));
result = result.concat(format_group (subgroup, group.path));
});
return result;
}
})();