[MERGE] merge trunk-new-graphview-ged into trunk (tweaks to pivot table look, and some bug fixes)

bzr revid: ged@openerp.com-20140130142723-9yt19h8x7vgt3woe
This commit is contained in:
Gery Debongnie
2014-01-30 15:27:23 +01:00
4 changed files with 59 additions and 36 deletions
+2 -2
View File
@@ -234,9 +234,9 @@ instance.web.QueryGroup = instance.web.Class.extend({
this.model = new instance.web.Model(
model, fixed_group.__context, fixed_group.__domain);
var group_size = fixed_group[grouping_field + '_count'] || fixed_group.__count || 0;
var raw_field = grouping_field && grouping_field.split(':')[0];
var group_size = fixed_group[raw_field + '_count'] || fixed_group.__count || 0;
var leaf_group = fixed_group.__context.group_by.length === 0;
var raw_field = (_.contains(grouping_field, ':')) ? grouping_field.split(':')[0] : grouping_field;
this.attributes = {
folded: !!(fixed_group.__fold),
+34 -11
View File
@@ -6,6 +6,15 @@
border-bottom: 1px solid #ccc;
padding: 6px 8px;
text-align: right;
color: black;
}
.graph_main_content td:first-child {
background-color: rgb(240, 238, 238);
}
.graph_main_content table {
margin-top: 10px;
}
.graph_measure_selection .oe_selected {
@@ -26,30 +35,44 @@
.graph_main_content th {
font-size: 13px;
font-weight: normal;
color: #039;
padding: 10px 8px;
vertical-align: top;
}
.graph_main_content thead {
border: 1px solid #6678b1;
border-bottom: 2px solid #6678b1;
color: black;
}
.graph_main_content tbody td{
border: 1px solid #ccc;
border: 1px solid #b8b8b8;
}
.graph_main_content tbody {
border-top: 1px solid black;
}
.graph_main_content thead {
background-color: rgb(240, 238, 238);
border: 1px solid #b8b8b8;
}
.graph_main_content thead th {
border-left: 1px solid #b8b8b8;
}
div.graph_widget {
padding:10px;
}
.oe_dashboard div.graph_widget {
padding:0;
}
td.graph_border {
color: #039;
text-align: left;
border-right: 1px solid #6678b1;
white-space: nowrap;
}
.graph_main_content tbody tr:hover td
.graph_main_content table:not(.heatmap) tr:hover td:not(:first-child)
{
color: #009;
background-color: rgb(245, 245, 245);
}
span.field-selection {
+16 -19
View File
@@ -4,6 +4,9 @@
(function () {
'use strict';
var QWeb = openerp.web.qweb;
var _lt = openerp.web._lt;
var _t = openerp.web._t;
nv.dev = false; // sets nvd3 library in production mode
openerp.web_graph.Graph = openerp.web.Widget.extend({
@@ -18,7 +21,6 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
this.domain = domain;
this.mode = options.mode || 'pivot'; // pivot, bar, pie, line
this.heatmap_mode = options.heatmap_mode || 'none';
this.title = options.title || 'Graph';
this.visible_ui = options.visible_ui || true;
this.bar_ui = options.bar_ui || 'group';
this.graph_view = options.graph_view || null;
@@ -39,7 +41,7 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
return this.model.call('fields_get', []).then(function (f) {
self.fields = f;
self.fields.__count = {field:'__count', type: 'integer', string:'Quantity'};
self.fields.__count = {field:'__count', type: 'integer', string:_t('Quantity')};
self.important_fields = self.get_search_fields();
self.measure_list = self.get_measures();
self.add_measures_to_options();
@@ -360,6 +362,7 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
this.$('.graph_main_content svg').remove();
this.$('.graph_main_content div').remove();
this.table.empty();
this.table.toggleClass('heatmap', this.heatmap_mode !== 'none')
this.width = this.$el.width();
this.height = Math.min(Math.max(document.documentElement.clientHeight - 116 - 60, 250), Math.round(0.8*this.$el.width()));
@@ -381,12 +384,6 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
// Drawing the table
// ----------------------------------------------------------------------
draw_table: function () {
this.pivot.main_row().title = 'Total';
if (this.pivot.measures.length == 1) {
this.pivot.main_col().title = this.pivot.measures[0].string;
} else {
this.pivot.main_col().title = this.title;
}
this.draw_top_headers();
_.each(this.pivot.rows.headers, this.proxy('draw_row'));
},
@@ -449,7 +446,7 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
} else {
make_cells(pivot.main_col().children, 1);
if (pivot.get_cols_leaves().length > 1) {
header_cells[0].push(self.make_border_cell(pivot.measures.length, height, true).text('Total').css('font-weight', 'bold'));
header_cells[0].push(self.make_border_cell(pivot.measures.length, height, true).text(_t('Total')).css('font-weight', 'bold'));
}
}
@@ -554,8 +551,8 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
// No groupby
if ((dim_x === 0) && (dim_y === 0)) {
data = [{key: 'Total', values:[{
x: 'Total',
data = [{key: _t('Total'), values:[{
x: _t('Total'),
y: this.pivot.get_total(),
}]}];
// Only column groupbys
@@ -570,7 +567,7 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
} else if ((dim_x === 1) && (dim_y === 0)) {
data = _.map(this.pivot.main_row().children, function (pt) {
var value = self.pivot.get_total(pt),
title = (pt.title !== undefined) ? pt.title : 'Undefined';
title = (pt.title !== undefined) ? pt.title : _t('Undefined');
return {x: title, y: value};
});
data = [{key: self.pivot.measures[0].string, values:data}];
@@ -579,24 +576,24 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
data = _.map(this.pivot.get_cols_with_depth(1), function (colhdr) {
var values = _.map(self.pivot.get_rows_with_depth(1), function (header) {
return {
x: header.title || 'Undefined',
x: header.title || _t('Undefined'),
y: self.pivot.get_values(header.id, colhdr.id)[0] || 0
};
});
return {key: colhdr.title || 'Undefined', values: values};
return {key: colhdr.title || _t('Undefined'), values: values};
});
// At least two row groupby
} else {
var keys = _.uniq(_.map(this.pivot.get_rows_with_depth(2), function (hdr) {
return hdr.title || 'Undefined';
return hdr.title || _t('Undefined');
}));
data = _.map(keys, function (key) {
var values = _.map(self.pivot.get_rows_with_depth(1), function (hdr) {
var subhdr = _.find(hdr.children, function (child) {
return ((child.title === key) || ((child.title === undefined) && (key === 'Undefined')));
return ((child.title === key) || ((child.title === undefined) && (key === _t('Undefined'))));
});
return {
x: hdr.title || 'Undefined',
x: hdr.title || _t('Undefined'),
y: (subhdr) ? self.pivot.get_total(subhdr)[0] : 0
};
});
@@ -640,7 +637,7 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
return {x: row.title, y: self.pivot.get_values(row.id,col.id)[0] || 0};
});
var title = _.map(col.path, function (p) {
return p || 'Undefined';
return p || _t('Undefined');
}).join('/');
if (dim_y === 0) {
title = self.pivot.measures[0].string;
@@ -670,7 +667,7 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
dim_x = this.pivot.rows.groupby.length;
var data = _.map(this.pivot.get_rows_leaves(), function (row) {
var title = _.map(row.path, function (p) {
return p || 'Undefined';
return p || _t('Undefined');
}).join('/');
if (dim_x === 0) {
title = self.measure_label;
@@ -4,6 +4,9 @@
(function () {
'use strict';
var _lt = openerp.web._lt;
var _t = openerp.web._t;
// PivotTable requires a call to update_data after initialization
openerp.web_graph.PivotTable = openerp.web.Class.extend({
@@ -13,7 +16,7 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend({
this.no_data = true;
this.model = model;
this.fields = fields;
this.fields.__count = {type: 'integer', string:'Quantity'};
this.fields.__count = {type: 'integer', string:_t('Quantity')};
this.measures = options.measures || [];
this.rows = { groupby: options.row_groupby, headers: null };
this.cols = { groupby: options.col_groupby, headers: null };
@@ -235,7 +238,7 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend({
},
make_header: function (group, parent) {
var title = parent ? group.attributes.value : '';
var title = parent ? group.attributes.value : _t('Total');
return {
id: _.uniqueId(),
path: parent ? parent.path.concat(title) : [],
@@ -397,11 +400,11 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend({
grouped_on = attrs.grouped_on ? this.raw_field(attrs.grouped_on) : false;
if (value === false) {
group.attributes.value = 'undefined';
group.attributes.value = _t('Undefined');
} else if (grouped_on && this.fields[grouped_on].type === 'selection') {
var selection = this.fields[grouped_on].selection,
value_lookup = _.where(selection, {0:value});
group.attributes.value = value_lookup ? value_lookup[0][1] : 'undefined';
group.attributes.value = value_lookup ? value_lookup[0][1] : _t('Undefined');
} else if (value instanceof Array) {
group.attributes.value = value[1];
}