print "X", xaxis, "Y", yaxis
# Convert a field's data into a displayable string
+
+ ticks = {}
def _convert(field, data):
if fields[field]['type']=='many2one':
- return data and data[1] or ""
- return data or ""
+ data = data and data[1]
+ return ticks.setdefault(data, len(ticks))
+
+ def _orientation(x, y):
+ if not orientation:
+ return (x,y)
+ return (y,x)
result = []
for x in xaxis:
-
res = obj.read_group(domain, yaxis+[x], [x], context=context)
- print res
result.append( {
- 'data': map(lambda record: (_convert(x, record[x]), record[yaxis[0]]), res),
+ 'data': map(lambda record: _orientation(_convert(x, record[x]), record[yaxis[0]]), res),
'label': fields[x]['string']
})
print result
- return result
- [
- {
- 'data': 3,
- 'label': "Axis Name"
- }
- ]
+ return {
+ 'data': result,
+ 'ticks': map(lambda x: (x[1], x[0]), ticks.items())
+ }
}, options)
},
- graph_get_data: function (options) {
- var i,
- d1 = [],
- d2 = [],
- d3 = [];
-
- var data;
- data = this.rpc(
- '/web_graph/graph/data_get',
- {
- model: this.dataset.model,
- domain: this.domain,
- context: this.context,
- group_by: this.group_by,
- view_id: this.view_id,
- orientation: this.orientation
- },
- function(result) {
- console.log(result);
- }
- );
-
- // return data
-
- for (i = -3; i < 3; i++) {
- if (this.orientation % 2) {
- d1.push([Math.random(), i]);
- d2.push([Math.random(), i]);
- d3.push([Math.random(), i]);
- } else {
- d1.push([i, Math.random()]);
- d2.push([i, Math.random()]);
- d3.push([i, Math.random()]);
- }
- };
- return [
- $.extend({ data : d2, label : 'Serie 2'}, options),
- $.extend({ data : d3, label : 'Serie 3'}, options),
- $.extend({ data : d1, label : 'Serie 1'}, options),
- ];
- },
-
graph_bar: function (container, data) {
- return Flotr.draw(container, data, this.get_format({
+ return Flotr.draw(container, data.data, this.get_format({
bars : {
show : true,
stacked : this.stacked,
horizontalLines : !this.orientation,
outline : "sw",
},
- xaxis : {labelsAngle: 45}
+ xaxis : {
+ labelsAngle: 45,
+ ticks: data.ticks
+ }
})
)
},
graph_pie: function (container, data) {
- return Flotr.draw(container, data, this.get_format({
+ return Flotr.draw(container, data.data, this.get_format({
pie : {
show: true
},
},
graph_radar: function (container, data) {
- return Flotr.draw(container, data, this.get_format({
+ return Flotr.draw(container, data.data, this.get_format({
radar : {
show : true,
stacked : this.stacked
},
graph_line: function (container, data) {
- return Flotr.draw(container, data, this.get_format({
+ return Flotr.draw(container, data.data, this.get_format({
lines : {
show : true,
stacked : this.stacked
horizontalLines : !this.orientation,
outline : "sw",
},
- xaxis : {labelsAngle: 45}
+ xaxis : {
+ labelsAngle: 45,
+ ticks: data.ticks
+ }
})
)
},
+ graph_get_data: function (options, callback) {
+ var data = this.rpc(
+ '/web_graph/graph/data_get',
+ {
+ model: this.dataset.model,
+ domain: this.domain,
+ context: this.context,
+ group_by: this.group_by,
+ view_id: this.view_id,
+ orientation: this.orientation
+ }, callback
+ );
+
+ return data
+
+ // var i,
+ // d1 = [],
+ // d2 = [],
+ // d3 = [];
+ // for (i = -3; i < 3; i++) {
+ // if (this.orientation % 2) {
+ // d1.push([Math.random(), i]);
+ // d2.push([Math.random(), i]);
+ // d3.push([Math.random(), i]);
+ // } else {
+ // d1.push([i, Math.random()]);
+ // d2.push([i, Math.random()]);
+ // d3.push([i, Math.random()]);
+ // }
+ // };
+ // return [
+ // $.extend({ data : d2, label : 'Serie 2'}, options),
+ // $.extend({ data : d3, label : 'Serie 3'}, options),
+ // $.extend({ data : d1, label : 'Serie 1'}, options),
+ // ];
+ },
+
+
// Render the graph and update menu styles
graph_render: function (options) {
- var graph, data, mode_options, i;
+ var mode_options;
+ var self = this;
+ mode_options = (this.mode=='area')?{lines: {fill: true}}:{}
+ return this.graph_get_data(mode_options,
+ function (result) {
+ self.graph_render_all(options, result)
+ }
+ );
+ },
+ graph_render_all: function (options, data) {
+ var graph, i;
if (options)
for (i in options.data)
this[i] = options.data[i];
- mode_options = (this.mode=='area')?{lines: {fill: true}}:{}
if (this.graph)
this.graph.destroy();
// Render the graph
this.$element.find(".graph_header_legend").children().remove()
- data = this.graph_get_data(mode_options);
this.graph = {
radar: $.proxy(this, "graph_radar"),
pie: $.proxy(this, "graph_pie"),
this.group_by = group_by;
this.graph_render();
- //return $.when(this.is_loaded).pipe(function() {
- // // todo: find the right syntax to perform an Ajax call
- // // return self.rpc.graph_get_data(self.view_id, domain, context, group_by).then($.proxy(self, 'schedule_chart'));
//});
},