[IMP] report_csv: use dialects
parent
689c6c2a6d
commit
cd3816bcc5
|
@ -18,22 +18,27 @@ A python class ::
|
||||||
|
|
||||||
from odoo import models
|
from odoo import models
|
||||||
|
|
||||||
class PartnerCsv(models.AbstractModel):
|
class PartnerCSV(models.AbstractModel):
|
||||||
_name = 'report.module_name.report_name'
|
_name = 'report.report_csv.partner_csv'
|
||||||
_inherit = 'report.report_csv.abstract'
|
_inherit = 'report.report_csv.abstract'
|
||||||
|
|
||||||
def generate_csv_report(self, writer, data, partners):
|
def generate_csv_report(self, writer, data, partners):
|
||||||
for obj in partners:
|
|
||||||
writer.writeheader()
|
writer.writeheader()
|
||||||
|
for obj in partners:
|
||||||
writer.writerow({
|
writer.writerow({
|
||||||
'name': obj.name
|
'name': obj.name,
|
||||||
|
'email': obj.email,
|
||||||
})
|
})
|
||||||
|
|
||||||
def csv_report_options(self):
|
def csv_report_options(self):
|
||||||
res = super().csv_report_options()
|
res = super().csv_report_options()
|
||||||
res['fieldnames'].append('name')
|
res['fieldnames'].append('name')
|
||||||
|
res['fieldnames'].append('email')
|
||||||
|
res['delimiter'] = ';'
|
||||||
|
res['quoting'] = csv.QUOTE_ALL
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
A report XML record ::
|
A report XML record ::
|
||||||
|
|
||||||
<report
|
<report
|
||||||
|
|
|
@ -48,6 +48,12 @@ class ReportCSVAbstract(models.AbstractModel):
|
||||||
return file_data.read(), 'csv'
|
return file_data.read(), 'csv'
|
||||||
|
|
||||||
def csv_report_options(self):
|
def csv_report_options(self):
|
||||||
|
"""
|
||||||
|
:return: dictionary of parameters. At least return 'fieldnames', but
|
||||||
|
you can optionally return parameters that define the export format.
|
||||||
|
Valid parameters include 'delimiter', 'quotechar', 'escapechar',
|
||||||
|
'doublequote', 'skipinitialspace', 'lineterminator', 'quoting'.
|
||||||
|
"""
|
||||||
return {'fieldnames': []}
|
return {'fieldnames': []}
|
||||||
|
|
||||||
def generate_csv_report(self, file, data, objs):
|
def generate_csv_report(self, file, data, objs):
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Copyright 2019 Creu Blanca
|
# Copyright 2019 Creu Blanca
|
||||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||||
|
import csv
|
||||||
from odoo import models
|
from odoo import models
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,13 +9,17 @@ class PartnerCSV(models.AbstractModel):
|
||||||
_inherit = 'report.report_csv.abstract'
|
_inherit = 'report.report_csv.abstract'
|
||||||
|
|
||||||
def generate_csv_report(self, writer, data, partners):
|
def generate_csv_report(self, writer, data, partners):
|
||||||
for obj in partners:
|
|
||||||
writer.writeheader()
|
writer.writeheader()
|
||||||
|
for obj in partners:
|
||||||
writer.writerow({
|
writer.writerow({
|
||||||
'name': obj.name
|
'name': obj.name,
|
||||||
|
'email': obj.email,
|
||||||
})
|
})
|
||||||
|
|
||||||
def csv_report_options(self):
|
def csv_report_options(self):
|
||||||
res = super().csv_report_options()
|
res = super().csv_report_options()
|
||||||
res['fieldnames'].append('name')
|
res['fieldnames'].append('name')
|
||||||
|
res['fieldnames'].append('email')
|
||||||
|
res['delimiter'] = ';'
|
||||||
|
res['quoting'] = csv.QUOTE_ALL
|
||||||
return res
|
return res
|
||||||
|
|
|
@ -27,7 +27,8 @@ class TestReport(common.TransactionCase):
|
||||||
self.assertEqual(report.report_type, 'csv')
|
self.assertEqual(report.report_type, 'csv')
|
||||||
rep = report.render(self.docs.ids, {})
|
rep = report.render(self.docs.ids, {})
|
||||||
str_io = StringIO(rep[0])
|
str_io = StringIO(rep[0])
|
||||||
dict_report = list(csv.DictReader(str_io))
|
dict_report = list(csv.DictReader(str_io, delimiter=';',
|
||||||
|
quoting=csv.QUOTE_ALL))
|
||||||
self.assertEqual(self.docs.name, dict(dict_report[0])['name'])
|
self.assertEqual(self.docs.name, dict(dict_report[0])['name'])
|
||||||
|
|
||||||
def test_id_retrieval(self):
|
def test_id_retrieval(self):
|
||||||
|
|
Loading…
Reference in New Issue