diff options
| author | Géry Debongnie <ged@odoo.com> | 2014-12-19 13:38:37 +0100 |
|---|---|---|
| committer | Géry Debongnie <ged@odoo.com> | 2014-12-19 14:34:23 +0100 |
| commit | 2c08dc0ba610db61fe349d1602c12528ca8fc715 (patch) | |
| tree | 143cb7f61e45e027c63be321ee3d4031963df1e7 /addons/web_graph/controllers/main.py | |
| parent | 9f7a0c096f0d3deabf8baf7be33b108f5b7884b5 (diff) | |
[IMP] web: new pivot view, full rewrite of graph view
This commit is a split of the former graphview into a pivot view (the
tabular view) and graph view (the various charts). The code was fully
rewritten.
* pivot view should be faster (better underlying data structure and
better algorithm)
* better integration with the web client (use of sidebar, of menu buttons,
bettor style)
* new feature: pivot view can be sorted
* new feature: pivot view cells can be clicked to open a list view with
the corresponding domain
* web_graph addon was removed, and the graph view code has been moved
to the addon web.
* the interaction with the searchbar was changed (no more column facet)
* better and simpler code for graph view
* mary corner cases in graph charts have been corrected (for ex, pie
chart with positive and negative numbers)
* graph/pivot correctly save their state when added to dashboard/saved
(state such as current measure, chart mode, column groupbys, ...)
Diffstat (limited to 'addons/web_graph/controllers/main.py')
| -rw-r--r-- | addons/web_graph/controllers/main.py | 88 |
1 files changed, 0 insertions, 88 deletions
diff --git a/addons/web_graph/controllers/main.py b/addons/web_graph/controllers/main.py deleted file mode 100644 index 0899fc7271f..00000000000 --- a/addons/web_graph/controllers/main.py +++ /dev/null @@ -1,88 +0,0 @@ -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 -except ImportError: - xlwt = None - -class TableExporter(http.Controller): - - @http.route('/web_graph/check_xlwt', type='json', auth='none') - def check_xlwt(self): - return xlwt is not None - - - @http.route('/web_graph/export_xls', type='http', auth="user") - def export_xls(self, data, token): - jdata = simplejson.loads(data) - nbr_measures = jdata['nbr_measures'] - workbook = xlwt.Workbook() - worksheet = workbook.add_sheet(jdata['title'][:30]) - 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: 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, '', header_plain) - for header in header_row: - while (carry and carry[0]['x'] == x): - cell = carry.popleft() - for i in range(nbr_measures): - worksheet.write(y, x+i, '', header_plain) - if cell['height'] > 1: - carry.append({'x': x, 'height':cell['height'] - 1}) - x = x + nbr_measures - 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: - carry.append({'x': x, 'height':header['height'] - 1}) - x = x + header['width']; - while (carry and carry[0]['x'] == x): - cell = carry.popleft() - for i in range(nbr_measures): - worksheet.write(y, x+i, '', header_plain) - if 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, '', header_plain) - for measure in jdata['measure_row']: - 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'], header_plain) - for cell in row['cells']: - x = x + 1 - if cell.get('is_bold', False): - worksheet.write(y, x, cell['value'], bold) - else: - worksheet.write(y, x, cell['value']) - x, y = 0, y + 1 - - 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 |
