summaryrefslogtreecommitdiff
path: root/addons/l10n_fr_fec
diff options
context:
space:
mode:
authorLucas Perais (lpe) <lpe@odoo.com>2019-03-01 15:31:02 +0000
committerLucas Perais (lpe) <lpe@odoo.com>2019-03-04 13:53:48 +0000
commit5dfb6e39affcde061a8ff9f03f17558f1d89f410 (patch)
tree47636731b51d7089811554caccc64ccec79f4b20 /addons/l10n_fr_fec
parent1693a27f289a12dbcf49fbaf8ff9d6e948be08c0 (diff)
[FIX] l10n_fr_fec: no new line at the end of file
It seems that our beloved administration is not happy with the FEC file ending with an empty new line Hence, this commit makes the FEC file last line end without \r\n characters and there is no empty new line OPW 1943302
Diffstat (limited to 'addons/l10n_fr_fec')
-rw-r--r--addons/l10n_fr_fec/wizard/account_fr_fec.py44
1 files changed, 34 insertions, 10 deletions
diff --git a/addons/l10n_fr_fec/wizard/account_fr_fec.py b/addons/l10n_fr_fec/wizard/account_fr_fec.py
index 032baf2d971..386a6e2b3e7 100644
--- a/addons/l10n_fr_fec/wizard/account_fr_fec.py
+++ b/addons/l10n_fr_fec/wizard/account_fr_fec.py
@@ -109,6 +109,7 @@ class AccountFrFec(models.TransientModel):
u'Idevise', # 17
]
+ rows_to_write = [header]
company = self.env.user.company_id
if not company.vat:
raise Warning(
@@ -117,10 +118,6 @@ class AccountFrFec(models.TransientModel):
raise Warning(
_("FEC is for French companies only !"))
- fecfile = io.BytesIO()
- w = pycompat.csv_writer(fecfile, delimiter='|')
- w.writerow(header)
-
# INITIAL BALANCE
unaffected_earnings_xml_ref = self.env.ref('account.data_unaffected_earnings')
unaffected_earnings_line = True # used to make sure that we add the unaffected earning initial balance only once
@@ -196,7 +193,8 @@ class AccountFrFec(models.TransientModel):
else:
listrow[11] = '0,00'
listrow[12] = str(-listrow_amount).replace('.', ',')
- w.writerow(listrow)
+ rows_to_write.append(listrow)
+
#if the unaffected earnings account wasn't in the selection yet: add it manually
if (not unaffected_earnings_line
and unaffected_earnings_results
@@ -207,7 +205,7 @@ class AccountFrFec(models.TransientModel):
if unaffected_earnings_account:
unaffected_earnings_results[4] = unaffected_earnings_account.code
unaffected_earnings_results[5] = unaffected_earnings_account.name
- w.writerow(unaffected_earnings_results)
+ rows_to_write.append(unaffected_earnings_results)
# INITIAL BALANCE - receivable/payable
sql_query = '''
@@ -265,7 +263,7 @@ class AccountFrFec(models.TransientModel):
for row in self._cr.fetchall():
listrow = list(row)
account_id = listrow.pop()
- w.writerow(listrow)
+ rows_to_write.append(listrow)
# LINES
sql_query = '''
@@ -330,20 +328,20 @@ class AccountFrFec(models.TransientModel):
sql_query, (self.date_from, self.date_to, company.id))
for row in self._cr.fetchall():
- w.writerow(list(row))
+ rows_to_write.append(list(row))
+ fecvalue = self._csv_write_rows(rows_to_write)
siren = company.vat[4:13]
end_date = self.date_to.replace('-', '')
suffix = ''
if self.export_type == "nonofficial":
suffix = '-NONOFFICIAL'
- fecvalue = fecfile.getvalue()
+
self.write({
'fec_data': base64.encodestring(fecvalue),
# Filename = <siren>FECYYYYMMDD where YYYMMDD is the closing date
'filename': '%sFEC%s%s.csv' % (siren, end_date, suffix),
})
- fecfile.close()
action = {
'name': 'FEC',
@@ -352,3 +350,29 @@ class AccountFrFec(models.TransientModel):
'target': 'self',
}
return action
+
+ def _csv_write_rows(self, rows, lineterminator=u'\r\n'):
+ """
+ Write FEC rows into a file
+ It seems that Bercy's bureaucracy is not too happy about the
+ empty new line at the End Of File.
+
+ @param {list(list)} rows: the list of rows. Each row is a list of strings
+ @param {unicode string} [optional] lineterminator: effective line terminator
+ Has nothing to do with the csv writer parameter
+ The last line written won't be terminated with it
+
+ @return the value of the file
+ """
+ fecfile = io.BytesIO()
+ writer = pycompat.csv_writer(fecfile, delimiter='|', lineterminator='')
+
+ rows_length = len(rows)
+ for i, row in enumerate(rows):
+ if not i == rows_length - 1:
+ row.append(lineterminator)
+ writer.writerow(row)
+
+ fecvalue = fecfile.getvalue()
+ fecfile.close()
+ return fecvalue