From 16bf0d2a0d332cbc373206c30615de7bacdedba0 Mon Sep 17 00:00:00 2001 From: "Kunal Chavda (OpenERP)" Date: Wed, 7 Dec 2011 19:00:55 +0530 Subject: [PATCH 1/3] [ADD]Implement new linechart and areachart. bzr revid: kch@tinyerp.com-20111207133055-ghaagmkgjsmy3i8a --- addons/web_graph/static/src/js/graph.js | 236 +++++++++++++++++++++++- 1 file changed, 233 insertions(+), 3 deletions(-) diff --git a/addons/web_graph/static/src/js/graph.js b/addons/web_graph/static/src/js/graph.js index 7f8f619a8c9..c0e51e74b90 100644 --- a/addons/web_graph/static/src/js/graph.js +++ b/addons/web_graph/static/src/js/graph.js @@ -57,7 +57,7 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ }); } return $.when( - this.dataset.call_and_eval('fields_get', [false, {}], null, 1), + this.dataset.call('fields_get', []), loaded) .then(function (fields_result, view_result) { self.fields = fields_result[0]; @@ -177,14 +177,243 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ graph_data = _(graph_data).sortBy(function (point) { return point[self.abscissa] + '[[--]]' + point[self.group_field]; }); - if (this.chart == 'bar') { return this.schedule_bar(graph_data); } else if (this.chart == "pie") { return this.schedule_pie(graph_data); + } else if (this.chart == 'line') { + return this.schedule_line(graph_data); + } else if (this.chart == 'area') { + return this.schedule_area(graph_data); } }, + schedule_line: function(results) { + var self = this; + var group_list, view_chart; + if (!this.group_field) { + view_chart = "line"; + group_list = _(this.columns).map(function (column, index) { + return { + group: column.name, + text: self.fields[column.name].string, + color: COLOR_PALETTE[index % (COLOR_PALETTE.length)] + } + }); + } else { + view_chart = "line"; + group_list = _(results).chain() + .pluck(this.group_field) + .uniq() + .map(function (value, index) { + return { + group: self.ordinate + '_' + + value.toLowerCase().replace(/[\s\/]+/g,'_'), + text: value, + color: COLOR_PALETTE[index % COLOR_PALETTE.length] + }; + }).value(); + results = _(results).chain() + .groupBy(function (record) { return record[self.abscissa]; }) + .map(function (records) { + var r = {}; + // second argument is coerced to a str, no good for boolean + r[self.abscissa] = records[0][self.abscissa]; + _(records).each(function (record) { + var key = _.str.sprintf('%s_%s', + self.ordinate, + record[self.group_field].toLowerCase().replace(/[\s\/]+/g,'_')); + r[key] = record[self.ordinate]; + }); + return r; + }) + .value(); + } + var abscissa_description = { + title: "" + this.fields[this.abscissa].string + "", + template: function (obj) { + return obj[self.abscissa] || 'Undefined'; + } + }; + var ordinate_description = { + lines: true, + title: "" + this.fields[this.ordinate].string + "" + }; + + var x_axis, y_axis; + x_axis = abscissa_description; + y_axis = ordinate_description; + var renderer = function () { + if (self.$element.is(':hidden')) { + self.renderer = setTimeout(renderer, 100); + return; + } + self.renderer = null; + var line_chart = new dhtmlXChart({ + view: view_chart, + container: self.element_id+"-linechart", + value:"#"+group_list[0].group+"#", + item: { + borderColor: group_list[0].color, + color: "#000000" + }, + line: { + color: group_list[0].color, + width: 3 + }, + xAxis: x_axis, + yAxis: y_axis, + padding: { + left: 35, + bottom: 20 + }, + origin: 0, + values: group_list, + legend: { + layout: "x", + align: "left", + valign: "top", + marker: { + type: "round", + width: 12 + }, + values:group_list + } + }); + for (var m = 1; m" + this.fields[this.abscissa].string + "", + template: function (obj) { + return obj[self.abscissa] || 'Undefined'; + } + }; + var ordinate_description = { + lines: true, + title: "" + this.fields[this.ordinate].string + "" + }; + + var x_axis, y_axis; + x_axis = abscissa_description; + y_axis = ordinate_description; + var renderer = function () { + if (self.$element.is(':hidden')) { + self.renderer = setTimeout(renderer, 100); + return; + } + self.renderer = null; + var area_chart = new dhtmlXChart({ + view: view_chart, + container: self.element_id+"-areachart", + value:"#"+group_list[0].group+"#", + color:group_list[0].color, + alpha: 0.6, + padding: { + left: 75 + }, + yAxis: y_axis, + xAxis: x_axis, + legend: { + values: group_list, + width: 75, + layout: "x", + align: "left", + valign: "top", + marker: { + type: "round", + width: 12 + } + } + }); + for (var m = 1; m Date: Thu, 8 Dec 2011 12:30:02 +0530 Subject: [PATCH 2/3] [IMP]Improved code by removing duplicate code. bzr revid: kch@tinyerp.com-20111208070002-oyk17wy006fyds3c --- addons/web_graph/static/src/js/graph.js | 289 ++++-------------------- 1 file changed, 41 insertions(+), 248 deletions(-) diff --git a/addons/web_graph/static/src/js/graph.js b/addons/web_graph/static/src/js/graph.js index c0e51e74b90..02bc48375aa 100644 --- a/addons/web_graph/static/src/js/graph.js +++ b/addons/web_graph/static/src/js/graph.js @@ -57,7 +57,7 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ }); } return $.when( - this.dataset.call('fields_get', []), + this.dataset.call_and_eval('fields_get', [false, {}], null, 1), loaded) .then(function (fields_result, view_result) { self.fields = fields_result[0]; @@ -177,248 +177,20 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ graph_data = _(graph_data).sortBy(function (point) { return point[self.abscissa] + '[[--]]' + point[self.group_field]; }); - if (this.chart == 'bar') { - return this.schedule_bar(graph_data); + if (this.chart == 'bar' || 'line' || 'area') { + return this.schedule_bar_line_area(graph_data); } else if (this.chart == "pie") { return this.schedule_pie(graph_data); - } else if (this.chart == 'line') { - return this.schedule_line(graph_data); - } else if (this.chart == 'area') { - return this.schedule_area(graph_data); } }, - schedule_line: function(results) { + schedule_bar_line_area: function(results) { var self = this; - var group_list, view_chart; + var group_list, + view_chart = (self.chart == 'line')?'line':(self.chart == 'area')?'area':''; if (!this.group_field) { - view_chart = "line"; - group_list = _(this.columns).map(function (column, index) { - return { - group: column.name, - text: self.fields[column.name].string, - color: COLOR_PALETTE[index % (COLOR_PALETTE.length)] - } - }); - } else { - view_chart = "line"; - group_list = _(results).chain() - .pluck(this.group_field) - .uniq() - .map(function (value, index) { - return { - group: self.ordinate + '_' + - value.toLowerCase().replace(/[\s\/]+/g,'_'), - text: value, - color: COLOR_PALETTE[index % COLOR_PALETTE.length] - }; - }).value(); - - results = _(results).chain() - .groupBy(function (record) { return record[self.abscissa]; }) - .map(function (records) { - var r = {}; - // second argument is coerced to a str, no good for boolean - r[self.abscissa] = records[0][self.abscissa]; - _(records).each(function (record) { - var key = _.str.sprintf('%s_%s', - self.ordinate, - record[self.group_field].toLowerCase().replace(/[\s\/]+/g,'_')); - r[key] = record[self.ordinate]; - }); - return r; - }) - .value(); - } - var abscissa_description = { - title: "" + this.fields[this.abscissa].string + "", - template: function (obj) { - return obj[self.abscissa] || 'Undefined'; + if (self.chart == 'bar'){ + view_chart = (this.orientation === 'horizontal') ? 'barH' : 'bar'; } - }; - var ordinate_description = { - lines: true, - title: "" + this.fields[this.ordinate].string + "" - }; - - var x_axis, y_axis; - x_axis = abscissa_description; - y_axis = ordinate_description; - var renderer = function () { - if (self.$element.is(':hidden')) { - self.renderer = setTimeout(renderer, 100); - return; - } - self.renderer = null; - var line_chart = new dhtmlXChart({ - view: view_chart, - container: self.element_id+"-linechart", - value:"#"+group_list[0].group+"#", - item: { - borderColor: group_list[0].color, - color: "#000000" - }, - line: { - color: group_list[0].color, - width: 3 - }, - xAxis: x_axis, - yAxis: y_axis, - padding: { - left: 35, - bottom: 20 - }, - origin: 0, - values: group_list, - legend: { - layout: "x", - align: "left", - valign: "top", - marker: { - type: "round", - width: 12 - }, - values:group_list - } - }); - for (var m = 1; m" + this.fields[this.abscissa].string + "", - template: function (obj) { - return obj[self.abscissa] || 'Undefined'; - } - }; - var ordinate_description = { - lines: true, - title: "" + this.fields[this.ordinate].string + "" - }; - - var x_axis, y_axis; - x_axis = abscissa_description; - y_axis = ordinate_description; - var renderer = function () { - if (self.$element.is(':hidden')) { - self.renderer = setTimeout(renderer, 100); - return; - } - self.renderer = null; - var area_chart = new dhtmlXChart({ - view: view_chart, - container: self.element_id+"-areachart", - value:"#"+group_list[0].group+"#", - color:group_list[0].color, - alpha: 0.6, - padding: { - left: 75 - }, - yAxis: y_axis, - xAxis: x_axis, - legend: { - values: group_list, - width: 75, - layout: "x", - align: "left", - valign: "top", - marker: { - type: "round", - width: 12 - } - } - }); - for (var m = 1; m 1) { + if (self.chart == 'bar' && (this.columns.length > 1)) { this.$element.text( 'OpenERP Web does not support combining grouping and ' + 'multiple columns in graph at this time.'); @@ -440,8 +212,10 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ } // transform series for clustered charts into series for stacked // charts - view_chart = (this.orientation === 'horizontal') + if (self.chart == 'bar'){ + view_chart = (this.orientation === 'horizontal') ? 'stackedBarH' : 'stackedBar'; + } group_list = _(results).chain() .pluck(this.group_field) .uniq() @@ -482,7 +256,7 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ }; var x_axis, y_axis; - if (self.orientation == 'horizontal') { + if (self.chart == 'bar' && self.orientation == 'horizontal') { x_axis = ordinate_description; y_axis = abscissa_description; } else { @@ -495,9 +269,9 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ return; } self.renderer = null; - var bar_chart = new dhtmlXChart({ + var charts = new dhtmlXChart({ view: view_chart, - container: self.element_id+"-barchart", + container: self.element_id+"-"+self.chart+"chart", value:"#"+group_list[0].group+"#", gradient: "3d", border: false, @@ -525,10 +299,20 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ } } }); + if (self.chart == 'line'){ + charts.define("item",{ + borderColor: group_list[0].color, + color: "#000000" + }); + charts.define("line",{ + color: group_list[0].color, + width: 3 + }); + } for (var m = 1; m Date: Fri, 9 Dec 2011 16:35:21 +0530 Subject: [PATCH 3/3] [IMP]Improved code for use different properties when different chart type. bzr revid: kch@tinyerp.com-20111209110521-srj00rg522kjho0f --- addons/web_graph/static/src/js/graph.js | 44 ++++++++++++------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/addons/web_graph/static/src/js/graph.js b/addons/web_graph/static/src/js/graph.js index 02bc48375aa..02ff80b3e01 100644 --- a/addons/web_graph/static/src/js/graph.js +++ b/addons/web_graph/static/src/js/graph.js @@ -273,7 +273,8 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ view: view_chart, container: self.element_id+"-"+self.chart+"chart", value:"#"+group_list[0].group+"#", - gradient: "3d", + gradient: (self.chart == "bar") ? "3d" : "light", + alpha: (self.chart == "area") ? 0.6 : 1, border: false, width: 1024, tooltip:{ @@ -281,7 +282,15 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ self.abscissa, group_list[0].text, group_list[0].group) }, radius: 0, - color:group_list[0].color, + color: (self.chart != "line") ? group_list[0].color : "", + item: (self.chart == "line") ? { + borderColor: group_list[0].color, + color: "#000000" + } : "", + line: (self.chart == "line") ? { + color: group_list[0].color, + width: 3 + } : "", origin:0, xAxis: x_axis, yAxis: y_axis, @@ -299,16 +308,7 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ } } }); - if (self.chart == 'line'){ - charts.define("item",{ - borderColor: group_list[0].color, - color: "#000000" - }); - charts.define("line",{ - color: group_list[0].color, - width: 3 - }); - } + for (var m = 1; m