Skip to content

Commit 5a25e3a

Browse files
author
Hong-Thai Nguyen
committed
Refactory test & add generate statement
1 parent ccf3e68 commit 5a25e3a

File tree

5 files changed

+104
-15
lines changed

5 files changed

+104
-15
lines changed

cfonb/tests/test_statement.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
# python import - http://docs.python.org/library/unittest.html
22
import unittest
3-
from StringIO import StringIO
3+
from io import StringIO
44

55
# import cfonb module
6-
from cfonb.parser import Row, ParsingError, statement as p
7-
6+
from cfonb.parser import Row, statement as p
87

98
HEAD_LINE = '0130002 00447 0000888899H 160811 0000000132303H '
109

cfonb/tests/test_transfert.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88

99
def _print(res):
10-
print res.replace('\r\n','\\r\\n').replace(' ','.')
10+
print(res.replace('\r\n','\\r\\n').replace(' ','.'))
1111

1212

1313
class TestTransfert(unittest.TestCase):

cfonb/writer/common.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,8 @@ def save(header, body, footer, filename=None):
1515
f = open(filename,'w')
1616
f.write(content)
1717
f.close()
18-
return content
18+
return content
19+
20+
21+
def date_format(date):
22+
return date.strftime(format='%d%m') + date.strftime(format='%y')[1:]

cfonb/writer/statement.py

Lines changed: 89 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,92 @@
2121
- l'entête (01)
2222
- ligne détail (04)
2323
- ligne total (facultative)
24-
25-
Voir <http://segs.free.fr/Fichiers/CFONB%20-%20Structure%20des%20fichiers%20ETEBAC3.pdf>
26-
"""
24+
25+
"""
26+
from cfonb.writer.common import write, date_format, save
27+
28+
29+
class Statement(object):
30+
_header = {}
31+
_content = []
32+
_footer = {}
33+
34+
def header(self, bank_code, agency_code, currency, account_number, date, amount):
35+
self._header['bank_code'] = bank_code
36+
self._header['agency_code'] = agency_code
37+
self._header['currency'] = currency
38+
self._header['account_number'] = account_number
39+
self._header['date'] = date
40+
self._header['amount'] = amount
41+
return self
42+
43+
def footer(self, bank_code, agency_code, currency, account_number, date, amount):
44+
self._footer['bank_code'] = bank_code
45+
self._footer['agency_code'] = agency_code
46+
self._footer['currency'] = currency
47+
self._footer['account_number'] = account_number
48+
self._footer['date'] = date
49+
self._footer['amount'] = amount
50+
return self
51+
52+
def add(self, bank_code, operation_code, agency_code, currency,
53+
account_number, date, label, amount, reference):
54+
line = write('04', 2)
55+
line += write(bank_code, 5)
56+
line += write(operation_code, 4)
57+
line += write(agency_code, 5)
58+
line += write(currency, 3)
59+
line += write('2', 1) # number of decimal
60+
line += write(' ', 1) # SIT code
61+
line += write(account_number, 11)
62+
line += write(' ', 2) # interbank code
63+
line += write(date_format(date), 6)
64+
line += write(' ', 2) # rejected code
65+
line += write(date_format(date), 6)
66+
line += write(label, 31)
67+
line += write(' ', 2) # reserve zone
68+
line += write(' ', 7) # entry writing code
69+
line += write(' ', 1) # exoneration code
70+
line += write(' ', 1) # reserve zone
71+
line += write(amount, 14)
72+
line += write(reference, 16)
73+
self._content.append(line)
74+
return self
75+
76+
def render(self, filename=None):
77+
return save(self._header(), '\r\n'.join(self._content), self._footer(), filename)
78+
79+
def _header(self):
80+
if self._header:
81+
line = write('01', 2)
82+
line += write(self._header['bank_code'], 5)
83+
line += write(' ', 4) # reserved zone
84+
line += write(self._header['agency_code', 5])
85+
line += write(self._header['currency', 3])
86+
line += write('2', 1) # number of decimal
87+
line += write(' ', 1) # reserved zone
88+
line += write(self._header['account_number'], 11)
89+
line += write(' ', 2) # reserved zone
90+
line += write(date_format(self._header['date']), 6)
91+
line += write(' ', 50) # reserved zone
92+
line += write(self._header['amount'], 14)
93+
line += write(' ', 16) # reserved zone
94+
return line
95+
return ''
96+
97+
def _footer(self):
98+
if self._footer:
99+
line = write('07', 2)
100+
line += write(self._footer['bank_code'], 5)
101+
line += write(' ', 4) # reserved zone
102+
line += write(self._footer['agency_code', 5])
103+
line += write(self._footer['currency', 3])
104+
line += write('2', 1) # number of decimal
105+
line += write(' ', 1) # reserved zone
106+
line += write(self._footer['account_number'], 11)
107+
line += write(' ', 2) # reserved zone
108+
line += write(date_format(self._footer['date']), 6)
109+
line += write(' ', 50) # reserved zone
110+
line += write(self._footer['amount'], 14)
111+
line += write(' ', 16) # reserved zone
112+
return line

cfonb/writer/transfert.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
You should have received a copy of the GNU Lesser General Public License
1717
along with CFONB. If not, see <http://www.gnu.org/licenses/>.
1818
"""
19-
from cfonb.writer.common import write, save
19+
from cfonb.writer.common import write, save, date_format
2020

2121
"""
2222
Coryright 2011, Stéphane Planquart <[email protected]>
@@ -50,15 +50,15 @@ def __init__(self):
5050
self.total = 0
5151
pass
5252

53-
def setEmeteurInfos(self,num_emeteur,raisonsocial,reference,
54-
guichet,num_compte,banque,datevir):
53+
def setEmeteurInfos(self,num_emeteur, raisonsocial, reference,
54+
guichet, num_compte, banque, datevir):
5555
self._emeteur['num_emetteur'] = str(num_emeteur)
5656
self._emeteur['raisonsocial'] = raisonsocial
5757
self._emeteur['reference'] = reference
5858
self._emeteur['guichet'] = guichet
5959
self._emeteur['num_compte'] = num_compte
6060
self._emeteur['banque'] = banque
61-
self._datevir = datevir.strftime(format='%d%m') + datevir.strftime(format='%y')[1:]
61+
self._datevir = date_format(datevir)
6262
return self
6363

6464
def add(self, reference, raisonsocial, domiciliation,
@@ -140,7 +140,7 @@ def _footer(self):
140140
content += write("", 11)
141141
#[zone E]Montant : les 16 positions contiennent le montant centimes
142142
# compris (00 s'il y a lieu) cadré à droite , non signé, complété à gauche par des zéros
143-
content += write(self.total, 16, rpad=True, caract='0')
143+
content += write(self.total, 16, rpad=True, fill_char='0')
144144
#[zone F]Réservée 31 caractères
145145
content += write("", 31)
146146
#[zone G1]Réservée 5 caractères
@@ -179,13 +179,13 @@ def _add(self,reference, raisonsocial,domiciliation,
179179
#[zone E]Montant : les 16 positions contiennent le montant centimes
180180
# compris (00 s'il y a lieu) cadré à droite , non signé, complété à
181181
# gauche par des zéros
182-
content += write(montant, 16, rpad=True, caract='0')
182+
content += write(montant, 16, rpad=True, fill_char='0')
183183
#[zone F]Libellé : 31 caractères à la disposition du client émetteur
184184
# pour indication du motif et des références de l'opération
185185
content += write(libelle, 31)
186186
#[zone G1]Code établissement destinataire 5 chiffres
187187
content += write(etablissement, 5)
188188
#[zone G2]Zone réservée de 6 caractères
189189
content += write("", 6)
190-
content += "\r\n";
190+
content += "\r\n"
191191
return content

0 commit comments

Comments
 (0)