summaryrefslogtreecommitdiff
path: root/indoteknik_api/controllers/export.py
blob: c29c82c70d2a065d5c28b7d5c6dc8d920cbcdf51 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import json

from odoo.tools import pycompat
from odoo.exceptions import Warning
from odoo import http
from odoo.http import request
from odoo.addons.web.controllers.main import ExportFormat, GroupExportXlsxWriter, ExportXlsxWriter, serialize_exception, clean_action

class Export(ExportFormat, http.Controller):
    @http.route('/web/export/xlsx', type='http', auth="public", csrf=False)
    @serialize_exception
    def export_xlsx(self, data, token, **kw):
        data_obj = json.loads(data)
        model = data_obj['model']
        can_export = request.env.user.check_access(model, 'export')
        
        if not can_export:
            raise Warning('You are not allowed to export')
        
        return self.base(data, token)
    
    @property
    def content_type(self):
        return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'

    def filename(self, base):
        return base + '.xlsx'

    def from_group_data(self, fields, groups):
        with GroupExportXlsxWriter(fields, groups.count) as xlsx_writer:
            x, y = 1, 0
            for group_name, group in groups.children.items():
                x, y = xlsx_writer.write_group(x, y, group_name, group)

        return xlsx_writer.value

    def from_data(self, fields, rows):
        with ExportXlsxWriter(fields, len(rows)) as xlsx_writer:
            for row_index, row in enumerate(rows):
                for cell_index, cell_value in enumerate(row):
                    if isinstance(cell_value, (list, tuple)):
                        cell_value = pycompat.to_text(cell_value)
                    xlsx_writer.write_cell(row_index + 1, cell_index, cell_value)

        return xlsx_writer.value