summaryrefslogtreecommitdiff
path: root/addons/web_graph/controllers
diff options
context:
space:
mode:
authorGery Debongnie <ged@openerp.com>2014-02-05 14:14:06 +0100
committerGery Debongnie <ged@openerp.com>2014-02-05 14:14:06 +0100
commitd0961eb09ecd2db3e155fd66b0c059ddbb30f992 (patch)
treed7454acd3e25dc3d6d84bc9d488d6ec5ff911e83 /addons/web_graph/controllers
parent19d6d98da83d9cb19d66741ed9377647ac34f762 (diff)
[FIX] many small tweaks, add some comment, rename variables to have better more informative names in excel export functionality in graph view (addon web_graph)
bzr revid: ged@openerp.com-20140205131406-kdw5ht9u8gct9xbo
Diffstat (limited to 'addons/web_graph/controllers')
-rw-r--r--addons/web_graph/controllers/main.py57
1 files changed, 29 insertions, 28 deletions
diff --git a/addons/web_graph/controllers/main.py b/addons/web_graph/controllers/main.py
index 589e9c6b76d..320758e0950 100644
--- a/addons/web_graph/controllers/main.py
+++ b/addons/web_graph/controllers/main.py
@@ -2,6 +2,7 @@ from openerp import http
import simplejson
from openerp.http import request, serialize_exception as _serialize_exception
from cStringIO import StringIO
+from collections import deque
try:
import xlwt
@@ -20,68 +21,68 @@ class TableExporter(http.Controller):
jdata = simplejson.loads(data)
nbr_measures = jdata['nbr_measures']
workbook = xlwt.Workbook()
- worksheet = workbook.add_sheet('Sheet 1')
- bold_style = xlwt.easyxf("font: bold on; pattern: pattern solid, fore_colour gray25;")
- non_bold_style = xlwt.easyxf("pattern: pattern solid, fore_colour gray25;")
+ worksheet = workbook.add_sheet(jdata['title'])
+ header_bold = xlwt.easyxf("font: bold on; pattern: pattern solid, fore_colour gray25;")
+ header_plain = xlwt.easyxf("pattern: pattern solid, fore_colour gray25;")
bold = xlwt.easyxf("font: bold on;")
# Step 1: writing headers
headers = jdata['headers']
- x, y, L = 1, 0, []
+
+ # x,y: current coordinates
+ # carry: queue containing cell information when a cell has a >= 2 height
+ # and the drawing code needs to add empty cells below
+ x, y, carry = 1, 0, deque()
for i, header_row in enumerate(headers):
- worksheet.write(i,0, '', non_bold_style)
+ worksheet.write(i,0, '', header_plain)
for header in header_row:
- while (L and L[0]['x'] == x):
- cell = L.pop(0)
+ while (carry and carry[0]['x'] == x):
+ cell = carry.popleft()
for i in range(nbr_measures):
- worksheet.write(y,x+i, '', non_bold_style)
+ worksheet.write(y, x+i, '', header_plain)
if cell['height'] > 1:
- L.append({'x': x, 'height':cell['height'] - 1})
+ carry.append({'x': x, 'height':cell['height'] - 1})
x = x + nbr_measures
- style = non_bold_style if 'expanded' in header else bold_style
+ style = header_plain if 'expanded' in header else header_bold
for i in range(header['width']):
worksheet.write(y, x + i, header['title'] if i == 0 else '', style)
if header['height'] > 1:
- L.append({'x': x, 'height':header['height'] - 1})
+ carry.append({'x': x, 'height':header['height'] - 1})
x = x + header['width'];
- while (L and L[0]['x'] == x):
- cell = L.pop(0)
+ while (carry and carry[0]['x'] == x):
+ cell = carry.popleft()
for i in range(nbr_measures):
- worksheet.write(y,x+i, '', non_bold_style)
+ worksheet.write(y, x+i, '', header_plain)
if cell['height'] > 1:
- L.append({'x': x, 'height':cell['height'] - 1})
+ carry.append({'x': x, 'height':cell['height'] - 1})
x = x + nbr_measures
x, y = 1, y + 1
# Step 2: measure row
if nbr_measures > 1:
- worksheet.write(y,0, '', non_bold_style)
+ worksheet.write(y,0, '', header_plain)
for measure in jdata['measure_row']:
- style = bold_style if measure['is_bold'] else non_bold_style
- worksheet.write(y,x, measure['text'], style);
+ style = header_bold if measure['is_bold'] else header_plain
+ worksheet.write(y, x, measure['text'], style);
x = x + 1
y = y + 1
# Step 3: writing data
x = 0
for row in jdata['rows']:
- worksheet.write(y, x, row['indent'] * ' ' + row['title'], non_bold_style)
+ worksheet.write(y, x, row['indent'] * ' ' + row['title'], header_plain)
for cell in row['cells']:
x = x + 1
if cell.get('is_bold', False):
- worksheet.write(y,x, cell['value'], bold)
+ worksheet.write(y, x, cell['value'], bold)
else:
- worksheet.write(y,x, cell['value'])
+ worksheet.write(y, x, cell['value'])
x, y = 0, y + 1
- fp = StringIO()
- workbook.save(fp)
- fp.seek(0)
- filecontent = fp.read()
- fp.close()
-
- return request.make_response(filecontent,
+ response = request.make_response(None,
headers=[('Content-Type', 'application/vnd.ms-excel'),
('Content-Disposition', 'attachment; filename=table.xls;')],
cookies={'fileToken': token})
+ workbook.save(response.stream)
+ return response