From 08a72bb9aeb164b46369ddeb036504fce5b0413b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul?= Date: Sun, 3 May 2015 19:04:17 +0200 Subject: [PATCH] [FIX] mis_builder: OrderedDict serializes to json dict So this was relying on non-standard and unreliable feature of browsers to preserve order. --- mis_builder/models/mis_builder.py | 30 +++++++++++++---------- mis_builder/static/src/xml/mis_widget.xml | 6 ++++- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/mis_builder/models/mis_builder.py b/mis_builder/models/mis_builder.py index 1421a020..fe20f16d 100644 --- a/mis_builder/models/mis_builder.py +++ b/mis_builder/models/mis_builder.py @@ -22,7 +22,6 @@ # ############################################################################## -from collections import OrderedDict from datetime import datetime, timedelta from dateutil import parser import re @@ -725,22 +724,27 @@ class mis_report_instance(orm.Model): kpi_values_by_period_ids[period.id] = kpi_values # prepare header and content - header = OrderedDict() - header[''] = {'kpi_name': '', - 'cols': [], - 'default_style': ''} - content = OrderedDict() + header = [] + header.append({ + 'kpi_name': '', + 'cols': [] + }) + content = [] + rows_by_kpi_name = {} for kpi in this.report_id.kpi_ids: - content[kpi.name] = {'kpi_name': kpi.description, - 'cols': [], - 'default_style': kpi.default_css_style} + rows_by_kpi_name[kpi.name] = { + 'kpi_name': kpi.description, + 'cols': [], + 'default_style': kpi.default_css_style + } + content.append(rows_by_kpi_name[kpi.name]) # populate header and content for period in this.period_ids: if not period.valid: continue # add the column header - header['']['cols'].append(dict( + header[0]['cols'].append(dict( name=period.name, date=(period.duration > 1 or period.type == 'w') and _('from %s to %s' % @@ -755,7 +759,7 @@ class mis_report_instance(orm.Model): # add kpi values kpi_values = kpi_values_by_period_ids[period.id] for kpi_name in kpi_values: - content[kpi_name]['cols'].append(kpi_values[kpi_name]) + rows_by_kpi_name[kpi_name]['cols'].append(kpi_values[kpi_name]) # add comparison columns for compare_col in period.comparison_column_ids: @@ -763,12 +767,12 @@ class mis_report_instance(orm.Model): kpi_values_by_period_ids.get(compare_col.id) if compare_kpi_values: # add the comparison column header - header['']['cols'].append( + header[0]['cols'].append( dict(name='%s vs %s' % (period.name, compare_col.name), date='')) # add comparison values for kpi in this.report_id.kpi_ids: - content[kpi.name]['cols'].append( + rows_by_kpi_name[kpi.name]['cols'].append( {'val_r': kpi_obj._render_comparison( cr, uid, diff --git a/mis_builder/static/src/xml/mis_widget.xml b/mis_builder/static/src/xml/mis_widget.xml index bd0cd0cf..8e3ddd61 100644 --- a/mis_builder/static/src/xml/mis_widget.xml +++ b/mis_builder/static/src/xml/mis_widget.xml @@ -4,7 +4,11 @@ - +
+
+ +
+