Skip to content

Commit ccf3e68

Browse files
author
Hong-Thai Nguyen
committed
Refactory, formatting code to support save accounts
1 parent 47fbccd commit ccf3e68

File tree

16 files changed

+259
-57
lines changed

16 files changed

+259
-57
lines changed

.idea/.gitignore

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/inspectionProfiles/profiles_settings.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/modules.xml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/python-cfonb.iml

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/vcs.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cfonb/writer/common.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
2+
def write(input_, length, rpad=False, fill_char=' '):
3+
input_ = str(input_)
4+
if (rpad):
5+
return input_.rjust(length, fill_char)[:length]
6+
else:
7+
return input_.ljust(length, fill_char)[:length]
8+
9+
10+
def save(header, body, footer, filename=None):
11+
content = header
12+
content += body
13+
content += footer
14+
if filename is not None:
15+
f = open(filename,'w')
16+
f.write(content)
17+
f.close()
18+
return content

cfonb/writer/statement.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# coding: UTF-8
2+
3+
"""
4+
This file is part of CFONB.
5+
6+
CFONB is free software: you can redistribute it and/or modify
7+
it under the terms of the GNU Lesser General Public License as published by
8+
the Free Software Foundation, either version 3 of the License, or
9+
(at your option) any later version.
10+
11+
Foobar is distributed in the hope that it will be useful,
12+
but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
GNU General Public License for more details.
15+
16+
You should have received a copy of the GNU Lesser General Public License
17+
along with CFONB. If not, see <http://www.gnu.org/licenses/>.
18+
19+
Coryright 2020, Dhatim
20+
Créer un fichier d'opérations bancaires avec
21+
- l'entête (01)
22+
- ligne détail (04)
23+
- ligne total (facultative)
24+
25+
Voir <http://segs.free.fr/Fichiers/CFONB%20-%20Structure%20des%20fichiers%20ETEBAC3.pdf>
26+
"""

cfonb/writer/transfert.py

Lines changed: 45 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
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
20+
1921
"""
2022
Coryright 2011, Stéphane Planquart <[email protected]>
2123
@@ -59,73 +61,59 @@ def setEmeteurInfos(self,num_emeteur,raisonsocial,reference,
5961
self._datevir = datevir.strftime(format='%d%m') + datevir.strftime(format='%y')[1:]
6062
return self
6163

62-
def add(self,reference, raisonsocial,domiciliation,
64+
def add(self, reference, raisonsocial, domiciliation,
6365
guichet, compte, montant, libelle,
6466
etablissement, balance=''):
6567
montant *= 100 #passe le montant en centime d'euros
6668
self.total += montant #ajout le momtant au total des virements
67-
self._content = self._add(reference, raisonsocial,domiciliation,
69+
self._content = self._add(reference, raisonsocial, domiciliation,
6870
guichet, compte, montant, libelle,
6971
etablissement, balance)
7072
return self
7173

72-
def render(self,filename=None):
73-
content = self._header()
74-
content += self._content
75-
content += self._footer()
76-
if (filename!=None):
77-
f = open(filename,'w')
78-
f.write(content)
79-
f.close()
80-
return content
81-
82-
def _space(self,chaine,length,rpad=False,caract=' '):
83-
chaine = str(chaine)
84-
if(rpad):
85-
return chaine.rjust(length,caract)[:length]
86-
else:
87-
return chaine.ljust(length,caract)[:length]
74+
def render(self, filename=None):
75+
return save(self._header(), self._content, self._footer(), filename)
8876

8977
def _header(self):
9078
#[zone A]
9179
content = "03"
9280
#[zone B1]
9381
content += "02"
9482
#[zone B2] Espace reserve 8 caracteres
95-
content += self._space('',8)
83+
content += write('', 8)
9684
#[zone B3] numero emetteur (attribue par chaque etablisement 6 caracteres)
97-
content += self._space(self._emeteur['num_emetteur'], 6)
85+
content += write(self._emeteur['num_emetteur'], 6)
9886
#[zone C1-1] code CCD (virement à échéance "E-3")
99-
content += self._space('',1)
87+
content += write('', 1)
10088
#[zone C1-2] Espace reserve 6 caracteres
101-
content += self._space('',6)
89+
content += write('', 6)
10290
#[zone C1-3] date JJMMA
10391
content += self._datevir;
10492
#[zone C2] Raison sociale du donneur d'ordre (24 caracteres max)
105-
content += self._space(self._emeteur['raisonsocial'], 24)
93+
content += write(self._emeteur['raisonsocial'], 24)
10694
#[zone D1-1] Reference virement sur 7 caracteres
107-
content += self._space(self._emeteur['reference'],7)
95+
content += write(self._emeteur['reference'], 7)
10896
#[zone D1-2] Espace reserve 17 caracteres
109-
content += self._space('',17)
97+
content += write('', 17)
11098
#[zone D2-1] Espace reserve 2 caracteres
111-
content += self._space('',2)
99+
content += write('', 2)
112100
#[zone D2-2] Virement effectue en euro sur 1 caractere
113101
content += "E";
114102
#[zone D2-3] Espace reserve 5 caracteres
115-
content += self._space('',5)
103+
content += write('', 5)
116104
#[zone D3] Code Guichet Emetteur 5 caracteres
117-
content += self._space(self._emeteur['guichet'], 5)
105+
content += write(self._emeteur['guichet'], 5)
118106
#[zone D4] Numero de compte Emetteur 11 caracteres
119-
content += self._space(self._emeteur['num_compte'], 11)
107+
content += write(self._emeteur['num_compte'], 11)
120108
#[zone E] Espace reserve 16 caracteres
121-
content += self._space('',16)
109+
content += write('', 16)
122110
#[zone F] Espace reserve 31 caracteres
123-
content += self._space('',31)
111+
content += write('', 31)
124112
#[zone G1] code etablissement de la banque du donneur d'ordre
125113
# 5 caracteres
126-
content += self._space(self._emeteur['banque'], 5)
114+
content += write(self._emeteur['banque'], 5)
127115
#[zone G2] Espace reserve 6 caracteres
128-
content += self._space('',6)
116+
content += write('', 6)
129117
content += "\r\n";
130118
return content
131119

@@ -135,30 +123,30 @@ def _footer(self):
135123
#[zone B1]02 -> Nature de l'enregistrement (virement à vue )
136124
content += "02"
137125
#[zone B2]8 espaces
138-
content += self._space("",8)
126+
content += write("", 8)
139127
#[zone B3] numéro émetteur (numéro attribué par chaque établissement à son client émetteur)
140-
content += self._space(self._emeteur['num_emetteur'],6)
128+
content += write(self._emeteur['num_emetteur'], 6)
141129
#[zone C1]Réservée 12 caractères
142-
content += self._space("",12)
130+
content += write("", 12)
143131
#[zone C2]Réservée 24 caractères
144-
content += self._space("",24)
132+
content += write("", 24)
145133
#[zone D1]Réservée 24 caractères
146-
content += self._space("",24)
134+
content += write("", 24)
147135
#[zone D2]Réservée 8 caractères
148-
content += self._space("",8)
136+
content += write("", 8)
149137
#[zone D3]Réservée 5 caractères
150-
content += self._space("",5)
138+
content += write("", 5)
151139
#[zone D4]Réservée 11 caractères
152-
content += self._space("",11)
140+
content += write("", 11)
153141
#[zone E]Montant : les 16 positions contiennent le montant centimes
154142
# compris (00 s'il y a lieu) cadré à droite , non signé, complété à gauche par des zéros
155-
content += self._space(self.total,16,rpad=True,caract='0')
143+
content += write(self.total, 16, rpad=True, caract='0')
156144
#[zone F]Réservée 31 caractères
157-
content += self._space("",31)
145+
content += write("", 31)
158146
#[zone G1]Réservée 5 caractères
159-
content += self._space("",5)
147+
content += write("", 5)
160148
#[zone G2]Réservée 6 caractères
161-
content += self._space("",6)
149+
content += write("", 6)
162150
content += "\r\n";
163151
return content
164152

@@ -170,34 +158,34 @@ def _add(self,reference, raisonsocial,domiciliation,
170158
#[zone B1]02 -> Nature de l'enregistrement (virement à vue )
171159
content += "02"
172160
#[zone B2]Espace réservé 8 caractères
173-
content += self._space("",8)
161+
content += write("", 8)
174162
#[zone B3] numéro émetteur (numéro attribué par chaque établissement à
175163
# son client émetteur)
176-
content += self._space(self._emeteur['num_emetteur'],6)
164+
content += write(self._emeteur['num_emetteur'], 6)
177165
#[zone C1] référence (numéro facture par exemple) 12car
178-
content += self._space(reference,12)
166+
content += write(reference, 12)
179167
#[zone C2] raison social du destinataure (24 caractères max)
180-
content += self._space(raisonsocial,24)
168+
content += write(raisonsocial, 24)
181169
#[zone D1] domiciliation : désignation en clair du guichet et de la
182170
# banque de domiciliataire (facultatif) sur 24 caractères maxi
183-
content += self._space(domiciliation,24)
171+
content += write(domiciliation, 24)
184172
#[zone D2] balance des paiements sur 8 caractères
185173
# (réservé pour les salaires et pension)
186-
content += self._space("",8)
174+
content += write("", 8)
187175
#[zone D3] Code Guichet 5 caractères
188-
content += self._space(guichet,5)
176+
content += write(guichet, 5)
189177
#[zone D4] Numéro de compte sur 11 caractères
190-
content += self._space(compte,5)
178+
content += write(compte, 5)
191179
#[zone E]Montant : les 16 positions contiennent le montant centimes
192180
# compris (00 s'il y a lieu) cadré à droite , non signé, complété à
193181
# gauche par des zéros
194-
content += self._space(montant,16,rpad=True,caract='0')
182+
content += write(montant, 16, rpad=True, caract='0')
195183
#[zone F]Libellé : 31 caractères à la disposition du client émetteur
196184
# pour indication du motif et des références de l'opération
197-
content += self._space(libelle,31)
185+
content += write(libelle, 31)
198186
#[zone G1]Code établissement destinataire 5 chiffres
199-
content += self._space(etablissement,5)
187+
content += write(etablissement, 5)
200188
#[zone G2]Zone réservée de 6 caractères
201-
content += self._space("",6)
189+
content += write("", 6)
202190
content += "\r\n";
203191
return content

dist/python-cfonb-1.1.tar.gz

11.7 KB
Binary file not shown.

0 commit comments

Comments
 (0)