Skip to content

Commit ad4a14f

Browse files
author
Hong-Thai Nguyen
committed
Formatting number with last char
1 parent c7b0f55 commit ad4a14f

File tree

3 files changed

+31
-6
lines changed

3 files changed

+31
-6
lines changed

cfonb/tests/test_statement.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from nose.tools import assert_is_not_none, assert_equal
77

88
from cfonb import StatementReader
9-
from cfonb.writer.statement import Statement
9+
from cfonb.writer.statement import Statement, number_format
1010

1111

1212
class TestStatement(unittest.TestCase):
@@ -25,12 +25,21 @@ def test_render_parse_cfonb(self):
2525
assert_equal(account.header.get('currency_code'), 'EUR')
2626
assert_equal(account.header.get('nb_of_dec'), '2')
2727
assert_equal(account.header.get('bank_code'), '20002')
28-
print('{}'.format(account.header))
28+
29+
def test_number_format(self):
30+
assert_equal(number_format(123), '12C')
31+
assert_equal(number_format(123.45), '1234E')
32+
assert_equal(number_format(-123.45), '1234N')
33+
assert_equal(number_format(-12340), '1234}')
34+
assert_equal(number_format(12340), '1234{')
35+
assert_equal(number_format(None), '')
36+
assert_equal(number_format(''), '')
2937

3038

3139
def suite():
3240
suite = unittest.TestSuite()
3341
suite.addTest(TestStatement('test_parse_cfonb'))
42+
suite.addTest(TestStatement('test_number_format'))
3443
return suite
3544

3645

cfonb/writer/common.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,4 @@ def save(header, body, footer, filename=None):
2121

2222

2323
def date_format(date):
24-
return date.strftime(format='%d%m') + date.strftime(format='%y')
24+
return date.strftime(format='%d%m') + date.strftime(format='%y')

cfonb/writer/statement.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@
2525
"""
2626
from cfonb.writer.common import write, date_format, save, BR_LINE
2727

28+
LAST_LETTER_NUMBER = {'1': 'A', '2': 'B', '3': 'C', '4': 'D', '5': 'E', '6': 'F', '7': 'G', '8': 'H', '9': 'I',
29+
'-1': 'J', '-2': 'K', '-3': 'L', '-4': 'M', '-5': 'N', '-6': 'O', '-7': 'P', '-8': 'Q', '-9': 'R',
30+
'0': '{', '-0': '}'}
31+
2832

2933
class Statement(object):
3034
def __init__(self):
@@ -69,7 +73,7 @@ def add(self, bank_code, operation_code, agency_code, currency,
6973
line += write(' ', 7) # entry writing code
7074
line += write(' ', 1) # exoneration code
7175
line += write(' ', 1) # reserve zone
72-
line += write(str(amount).replace('.', '') + 'A', 14, rpad=True, fill_char='0')
76+
line += write(number_format(amount), 14, rpad=True, fill_char='0')
7377
line += write(reference, 16)
7478
self._content.append(line)
7579
return self
@@ -90,7 +94,7 @@ def _render_header(self):
9094
line += write(' ', 2) # reserved zone
9195
line += write(date_format(self._header['date']), 6)
9296
line += write(' ', 50) # reserved zone
93-
line += write(str(self._header['amount']).replace('.', '') + 'A', 14, rpad=True, fill_char='0')
97+
line += write(number_format(self._header['amount']), 14, rpad=True, fill_char='0')
9498
line += write(' ', 16) # reserved zone
9599
return line + BR_LINE
96100
return ''
@@ -108,7 +112,19 @@ def _render_footer(self):
108112
line += write(' ', 2) # reserved zone
109113
line += write(date_format(self._footer['date']), 6)
110114
line += write(' ', 50) # reserved zone
111-
line += write(str(self._footer['amount']).replace('.', '') + 'A', 14, rpad=True, fill_char='0')
115+
line += write(number_format(self._footer['amount']), 14, rpad=True, fill_char='0')
112116
line += write(' ', 16) # reserved zone
113117
return line + BR_LINE
114118
return ''
119+
120+
121+
def number_format(number):
122+
if not number:
123+
return ''
124+
125+
_number = str(number).replace('.', '')
126+
_number = _number.replace('-', '')
127+
last_number = _number[-1]
128+
if number < 0:
129+
last_number = '-' + last_number
130+
return _number[0:len(_number) - 1] + LAST_LETTER_NUMBER.get(last_number)

0 commit comments

Comments
 (0)