diff options
| author | Gery Debongnie <ged@openerp.com> | 2013-11-13 11:50:59 +0100 |
|---|---|---|
| committer | Gery Debongnie <ged@openerp.com> | 2013-11-13 11:50:59 +0100 |
| commit | b5af9d421e6aa98ea21b47416cd9dc7391a5e54b (patch) | |
| tree | bc5ad0e7de32358549f92d1913d44c7fb14be742 /addons/web_graph/static | |
| parent | 30e6eadf421565341f22baf2ff9d6130436df551 (diff) | |
[IMP] add functionality to basicview widget and rearrange code in addon web_graph
bzr revid: ged@openerp.com-20131113105059-1l6th5zcn5wrm3x7
Diffstat (limited to 'addons/web_graph/static')
| -rw-r--r-- | addons/web_graph/static/src/js/graph.js | 106 |
1 files changed, 71 insertions, 35 deletions
diff --git a/addons/web_graph/static/src/js/graph.js b/addons/web_graph/static/src/js/graph.js index 7f83d656059..0361cd12e0d 100644 --- a/addons/web_graph/static/src/js/graph.js +++ b/addons/web_graph/static/src/js/graph.js @@ -2,11 +2,11 @@ * OpenERP web_graph *---------------------------------------------------------*/ -'use strict'; /* jshint undef: false */ openerp.web_graph = function (instance) { +'use strict'; var _lt = instance.web._lt; var _t = instance.web._t; @@ -40,32 +40,30 @@ instance.web_graph.GraphView = instance.web.View.extend({ view_loading: function (fields_view_get) { var self = this; - this.model = new instance.web.Model(fields_view_get.model, {group_by_no_leaf: true}); - this.measure = null; + var model = new instance.web.Model(fields_view_get.model, {group_by_no_leaf: true}); + var measure = null; this.groupbys = []; // get the default groupbys and measure defined in the field view _.each(fields_view_get.arch.children, function (field) { if ('name' in field.attrs) { if ('operator' in field.attrs) { - self.measure = field.attrs.name; + measure = field.attrs.name; } else { self.groupbys.push(field.attrs.name); } } }); - return this.model.call('fields_get', []).then(function (fields) { - self.pivot_table = new PivotTable(fields, self.groupbys, self.measure); - self.chart_view = new ChartView(fields, self.groupbys, self.measure); - self.pivot_table.appendTo('.graph_main_content'); - self.chart_view.appendTo('.graph_main_content'); + return model.call('fields_get', []).then(function (fields) { + self.pivot_table = new PivotTable(model, fields, [], self.groupbys, [], measure); + self.chart_view = new ChartView(model, fields, [], self.groupbys, [], measure); + return self.pivot_table.appendTo('.graph_main_content'); + }).then(function() { + return self.chart_view.appendTo('.graph_main_content'); }); - }, - get_data: function () { - var view_fields = this.groupbys.concat(this.measure); - return query_groups(this.model, view_fields, this.domain, this.groupbys); + }, display_data : function () { @@ -79,13 +77,10 @@ instance.web_graph.GraphView = instance.web.View.extend({ }, do_search: function (domain, context, group_by) { - var self = this; this.domain = new instance.web.CompoundDomain(domain); - return this.get_data().done(function (data) { - self.pivot_table.set_data(data); - self.chart_view.set_data(data); - self.display_data(); - }); + this.pivot_table.set_domain(domain); + this.chart_view.set_domain(domain); + this.display_data(); }, do_show: function () { @@ -104,16 +99,43 @@ var BasicDataView = instance.web.Widget.extend({ need_redraw: false, - init: function (fields, groupby, measure) { + // Input parameters: + // model: model to display + // fields: dictionary returned by field_get on model (desc of model) + // domain: constraints on model records + // row_groupby: groubys on rows (so, row headers in the pivot table) + // col_groupby: idem, but on col + // measure: quantity to display. either a field from the model, or + // null, in which case we use the "count" measure + init: function (model, fields, domain, row_groupby, col_groupby, measure) { + this.model = model; this.fields = fields; - this.groupby = groupby; + this.domain = domain; + this.row_groupby = row_groupby; + this.col_groupby = col_groupby; this.measure = measure; this.measure_label = measure ? fields[measure].string : 'Quantity'; this.data = []; + this.need_redraw = true; }, - set_data : function (data) { - this.data = data; + set_domain: function (domain) { + this.domain = domain; + this.need_redraw = true; + }, + + set_row_groupby: function (row_groupby) { + this.row_groupby = row_groupby; + this.need_redraw = true; + }, + + set_col_groupby: function (col_groupby) { + this.col_groupby = col_groupby; + this.need_redraw = true; + }, + + set_measure: function (measure) { + this.measure = measure; this.need_redraw = true; }, @@ -131,6 +153,12 @@ var BasicDataView = instance.web.Widget.extend({ draw: function() { }, + + get_data: function (groupby) { + var view_fields = this.row_groupby.concat(this.measure, this.col_groupby); + return query_groups(this.model, view_fields, this.domain, groupby); + }, + }); /** @@ -141,24 +169,29 @@ var PivotTable = BasicDataView.extend({ template: 'pivot_table', draw: function () { + this.get_data(this.row_groupby).done(this._draw.bind(this)); + }, + + _draw: function (data) { + console.log("data",data); this.$el.empty(); var self = this; - var rows = '<tr><td class="graph_border"><i class="fa fa-sort-asc"></i> fa-sort-asc' + - this.fields[this.groupby[0]].string + + var rows = '<tr><td class="graph_border">' + + this.fields[this.row_groupby[0]].string + '</td><td class="graph_border">' + this.measure_label + '</td></tr>'; - _.each(this.data, function (datapt) { + + _.each(data, function (datapt) { rows += '<tr><td class="graph_border">' + datapt.attributes.value[1] + '</td><td>' + datapt.attributes.aggregates[self.measure] + '</td></tr>'; }); - this.$el.append(rows); - }, + } }); /** @@ -180,9 +213,12 @@ var ChartView = BasicDataView.extend({ }, draw: function () { + var self = this; this.$el.empty(); this.$el.append('<svg></svg>'); - this.render(); + this.get_data(this.row_groupby).done(function (data) { + self.render(data); + }); }, format_data: function (datapt) { @@ -193,10 +229,10 @@ var ChartView = BasicDataView.extend({ }; }, - render_bar_chart: function () { + render_bar_chart: function (data) { var formatted_data = [{ key: 'Bar chart', - values: _.map(this.data, this.format_data.bind(this)), + values: _.map(data, this.format_data.bind(this)), }]; nv.addGraph(function () { @@ -218,10 +254,10 @@ var ChartView = BasicDataView.extend({ }); }, - render_line_chart: function () { + render_line_chart: function (data) { var formatted_data = [{ key: this.measure_label, - values: _.map(this.data, this.format_data.bind(this)) + values: _.map(data, this.format_data.bind(this)) }]; nv.addGraph(function () { @@ -241,8 +277,8 @@ var ChartView = BasicDataView.extend({ }); }, - render_pie_chart: function () { - var formatted_data = _.map(this.data, this.format_data.bind(this)); + render_pie_chart: function (data) { + var formatted_data = _.map(data, this.format_data.bind(this)); nv.addGraph(function () { var chart = nv.models.pieChart() |
