~therp-nl/banking-addons/6.0-interactive-matching-and-debit-orders

« back to all changes in this revision

Viewing changes to account_banking_uk_hsbc/wizard/paymul_test.py

  • Committer: Tristan Hill
  • Date: 2011-10-24 15:26:13 UTC
  • mto: (70.1.4 banking-addons)
  • mto: This revision was merged to the branch mainline in revision 107.
  • Revision ID: tristan.hill@credativ.co.uk-20111024152613-8fx4v4lt06kwx8xe
[IMP] import module to integrate with HSBC

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# -*- encoding: utf-8 -*-
 
2
##############################################################################
 
3
#
 
4
#    Copyright (C) 2011 credativ Ltd (<http://www.credativ.co.uk>).
 
5
#    All Rights Reserved
 
6
#
 
7
#    This program is free software: you can redistribute it and/or modify
 
8
#    it under the terms of the GNU General Public License as published by
 
9
#    the Free Software Foundation, either version 3 of the License, or
 
10
#    (at your option) any later version.
 
11
#
 
12
#    This program is distributed in the hope that it will be useful,
 
13
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
 
14
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
15
#    GNU General Public License for more details.
 
16
#
 
17
#    You should have received a copy of the GNU General Public License
 
18
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
19
#
 
20
##############################################################################
 
21
 
 
22
import datetime
 
23
import unittest2 as unittest
 
24
import paymul
 
25
 
 
26
from decimal import Decimal
 
27
 
 
28
class PaymulTestCase(unittest.TestCase):
 
29
 
 
30
    def setUp(self):
 
31
        self.maxDiff = None
 
32
 
 
33
    def test_uk_high_value_priority_payment(self):
 
34
        # Changes from spec example: Removed DTM for transaction, HSBC ignores it (section 2.8.3)
 
35
        expected = \
 
36
        """UNB+UNOA:3+::ABC00000001+::HEXAGON ABC+041111:1500+UKHIGHVALUE'
 
37
UNH+1+PAYMUL:D:96A:UN:FUN01G'
 
38
BGM+452+UKHIGHVALUE+9'
 
39
DTM+137:20041111:102'
 
40
LIN+1'
 
41
DTM+203:20041112:102'
 
42
RFF+AEK:UKHIGHVALUE'
 
43
MOA+9:1.00:GBP'
 
44
FII+OR+12345678:HSBC NET TEST::GBP+:::400515:154:133+GB'
 
45
NAD+OY++HSBC BANK PLC:HSBC NET TEST:TEST:TEST:UNITED KINGDOM'
 
46
SEQ++1'
 
47
MOA+9:1.00:GBP'
 
48
RFF+CR:CRUKHV5'
 
49
RFF+PQ:PQUKHV5'
 
50
PAI+::52:::Z24'
 
51
FCA+13'
 
52
FII+BF+87654321:XYX LTD FROM FII BF 1:BEN NAME 2:GBP+:::403124:154:133+GB'
 
53
NAD+BE++SOME BANK PLC:HSBC NET TEST:TEST:TEST:UNITED KINGDOM'
 
54
CNT+39:1'
 
55
UNT+19+1'
 
56
UNZ+1+UKHIGHVALUE'"""
 
57
 
 
58
        src_account = paymul.UKAccount(number=12345678,
 
59
                                     holder='HSBC NET TEST',
 
60
                                     currency='GBP',
 
61
                                     sortcode=400515)
 
62
 
 
63
        dest_account = paymul.UKAccount(number=87654321,
 
64
                                     holder="XYX LTD FROM FII BF 1\nBEN NAME 2",
 
65
                                     currency='GBP',
 
66
                                     sortcode=403124)
 
67
 
 
68
        transaction = paymul.Transaction(amount=Decimal('1.00'),
 
69
                                         currency='GBP',
 
70
                                         account=dest_account,
 
71
                                         charges=paymul.CHARGES_PAYEE,
 
72
                                         means=paymul.MEANS_PRIORITY_PAYMENT,
 
73
                                         channel=paymul.CHANNEL_INTRA_COMPANY,
 
74
                                         name_address="SOME BANK PLC\nHSBC NET TEST\nTEST\nTEST\nUNITED KINGDOM",
 
75
                                         customer_reference='CRUKHV5',
 
76
                                         payment_reference='PQUKHV5')
 
77
 
 
78
        batch = paymul.Batch(exec_date=datetime.date(2004, 11, 12),
 
79
                             reference='UKHIGHVALUE',
 
80
                             debit_account=src_account,
 
81
                             name_address="HSBC BANK PLC\nHSBC NET TEST\nTEST\nTEST\nUNITED KINGDOM")
 
82
        batch.transactions.append(transaction)
 
83
 
 
84
        message = paymul.Message(reference='UKHIGHVALUE',
 
85
                                 dt=datetime.datetime(2004, 11, 11))
 
86
        message.batches.append(batch)
 
87
 
 
88
        interchange = paymul.Interchange(client_id='ABC00000001',
 
89
                                         reference='UKHIGHVALUE',
 
90
                                         create_dt=datetime.datetime(2004, 11, 11, 15, 00),
 
91
                                         message=message)
 
92
 
 
93
        self.assertMultiLineEqual(expected, str(interchange))
 
94
 
 
95
    def test_ezone(self):
 
96
        # Changes from example in spec: Changed CNT from 27 to 39, because we only generate that
 
97
        # and it makes no difference which one we use
 
98
        # Removed DTM for transaction, HSBC ignores it (section 2.8.3)
 
99
 
 
100
        expected = """UNB+UNOA:3+::ABC12016001+::HEXAGON ABC+080110:0856+EZONE'
 
101
UNH+1+PAYMUL:D:96A:UN:FUN01G'
 
102
BGM+452+EZONE+9'
 
103
DTM+137:20080110:102'
 
104
LIN+1'
 
105
DTM+203:20080114:102'
 
106
RFF+AEK:EZONE'
 
107
MOA+9:1.00:EUR'
 
108
FII+OR+12345678:ACCOUNT HOLDER NAME::EUR+:::403124:154:133+GB'
 
109
NAD+OY++ORD PARTY NAME NADOY 01:CRG TC5 001 NADOY ADDRESS LINE 0001:CRG TC5 001 NADOY ADDRESS LINE 0002'
 
110
SEQ++1'
 
111
MOA+9:1.00:EUR'
 
112
RFF+CR:EZONE 1A'
 
113
RFF+PQ:EZONE 1A'
 
114
PAI+::2'
 
115
FCA+14'
 
116
FII+BF+DE23300308800099990031:CRG TC5 001 BENE NAME FIIBF 000001::EUR+AACSDE33:25:5:::+DE'
 
117
NAD+BE+++BENE NAME NADBE T1 001:CRG TC5 001T1 NADBE ADD LINE 1 0001:CRG TC5 001T1 NADBE ADD LINE 2 0001'
 
118
CNT+39:1'
 
119
UNT+19+1'
 
120
UNZ+1+EZONE'"""
 
121
 
 
122
 
 
123
        src_account = paymul.UKAccount(number=12345678,
 
124
                                     holder='ACCOUNT HOLDER NAME',
 
125
                                     currency='EUR',
 
126
                                     sortcode=403124)
 
127
 
 
128
        dest_account = paymul.IBANAccount(iban="DE23300308800099990031",
 
129
                                          holder="CRG TC5 001 BENE NAME FIIBF 000001",
 
130
                                          currency='EUR',
 
131
                                          bic="AACSDE33")
 
132
 
 
133
        party_name = "BENE NAME NADBE T1 001\n" \
 
134
                   + "CRG TC5 001T1 NADBE ADD LINE 1 0001\n" \
 
135
                   + "CRG TC5 001T1 NADBE ADD LINE 2 0001"
 
136
        transaction = paymul.Transaction(amount=Decimal('1.00'),
 
137
                                         currency='EUR',
 
138
                                         account=dest_account,
 
139
                                         party_name=party_name,
 
140
                                         charges=paymul.CHARGES_EACH_OWN,
 
141
                                         means=paymul.MEANS_EZONE,
 
142
                                         customer_reference='EZONE 1A',
 
143
                                         payment_reference='EZONE 1A')
 
144
 
 
145
        name_address = "ORD PARTY NAME NADOY 01\n" \
 
146
                     + "CRG TC5 001 NADOY ADDRESS LINE 0001\n" \
 
147
                     + "CRG TC5 001 NADOY ADDRESS LINE 0002"
 
148
        batch = paymul.Batch(exec_date=datetime.date(2008, 1, 14),
 
149
                             reference='EZONE',
 
150
                             debit_account=src_account,
 
151
                             name_address=name_address)
 
152
        batch.transactions.append(transaction)
 
153
 
 
154
        message = paymul.Message(reference='EZONE',
 
155
                                 dt=datetime.datetime(2008, 1, 10))
 
156
        message.batches.append(batch)
 
157
 
 
158
        interchange = paymul.Interchange(client_id='ABC12016001',
 
159
                                         reference='EZONE',
 
160
                                         create_dt=datetime.datetime(2008, 1, 10, 8, 56),
 
161
                                         message=message)
 
162
 
 
163
        self.assertMultiLineEqual(expected, str(interchange))
 
164
 
 
165
    def test_uk_low_value_ach_instruction_level(self):
 
166
        dest_account1 = paymul.UKAccount(number=87654321,
 
167
                                     holder="HSBC NET RPS TEST\nHSBC BANK",
 
168
                                     currency='GBP',
 
169
                                     sortcode=403124)
 
170
        name_address = "HSBC BANK PLC\n" \
 
171
                + "PCM\n" \
 
172
                + "8CS37\n" \
 
173
                + "E14 5HQ\n" \
 
174
                + "UNITED KINGDOM"
 
175
        transaction1 = paymul.Transaction(amount=Decimal('1.00'),
 
176
                                          currency='GBP',
 
177
                                          account=dest_account1,
 
178
                                          name_address=name_address,
 
179
                                          charges=paymul.CHARGES_PAYEE,
 
180
                                          means=paymul.MEANS_ACH,
 
181
                                          customer_reference='CREDIT',
 
182
                                          payment_reference='CREDIT')
 
183
 
 
184
        dest_account2 = paymul.UKAccount(number=12341234,
 
185
                                     holder="HSBC NET RPS TEST\nHSBC BANK",
 
186
                                     currency='GBP',
 
187
                                     sortcode=403124)
 
188
        name_address = "HSBC BANK PLC\n" \
 
189
                + "PCM\n" \
 
190
                + "8CS37\n" \
 
191
                + "E14 5HQ\n" \
 
192
                + "UNITED KINGDOM"
 
193
        transaction2 = paymul.Transaction(amount=Decimal('1.00'),
 
194
                                          currency='GBP',
 
195
                                          account=dest_account2,
 
196
                                          name_address=name_address,
 
197
                                          charges=paymul.CHARGES_PAYEE,
 
198
                                          means=paymul.MEANS_ACH,
 
199
                                          customer_reference='CREDIT1',
 
200
                                          payment_reference='CREDIT1')
 
201
 
 
202
 
 
203
        name_address = "HSBC BANK PLC\n" \
 
204
                + "PCM\n" \
 
205
                + "8CS37\n" \
 
206
                + "E14 5HQ\n" \
 
207
                + "UNITED KINGDOM"
 
208
 
 
209
        src_account = paymul.UKAccount(number=12345678,
 
210
                                       holder='BHEX RPS TEST',
 
211
                                       currency='GBP',
 
212
                                       sortcode=401234)
 
213
        batch = paymul.Batch(exec_date=datetime.date(2004, 11, 15),
 
214
                             reference='UKLVPLIL',
 
215
                             debit_account=src_account,
 
216
                             name_address=name_address)
 
217
        batch.transactions = [transaction1, transaction2]
 
218
 
 
219
 
 
220
        message = paymul.Message(reference='UKLVPLIL',
 
221
                               dt=datetime.datetime(2004, 11, 11))
 
222
        message.batches.append(batch)
 
223
 
 
224
 
 
225
        interchange = paymul.Interchange(client_id='ABC00000001',
 
226
                                reference='UKLVPLIL',
 
227
                                create_dt=datetime.datetime(2004, 11, 11, 15, 0),
 
228
                                message=message)
 
229
 
 
230
 
 
231
        # Changes from example:
 
232
        # * Change second transaction from EUR to GBP, because we don't support
 
233
        #   multi-currency batches
 
234
        # * Removed DTM for transaction, HSBC ignores it (section 2.8.3)
 
235
        expected = """UNB+UNOA:3+::ABC00000001+::HEXAGON ABC+041111:1500+UKLVPLIL'
 
236
UNH+1+PAYMUL:D:96A:UN:FUN01G'
 
237
BGM+452+UKLVPLIL+9'
 
238
DTM+137:20041111:102'
 
239
LIN+1'
 
240
DTM+203:20041115:102'
 
241
RFF+AEK:UKLVPLIL'
 
242
MOA+9:2.00:GBP'
 
243
FII+OR+12345678:BHEX RPS TEST::GBP+:::401234:154:133+GB'
 
244
NAD+OY++HSBC BANK PLC:PCM:8CS37:E14 5HQ:UNITED KINGDOM'
 
245
SEQ++1'
 
246
MOA+9:1.00:GBP'
 
247
RFF+CR:CREDIT'
 
248
RFF+PQ:CREDIT'
 
249
PAI+::2'
 
250
FCA+13'
 
251
FII+BF+87654321:HSBC NET RPS TEST:HSBC BANK:GBP+:::403124:154:133+GB'
 
252
NAD+BE++HSBC BANK PLC:PCM:8CS37:E14 5HQ:UNITED KINGDOM'
 
253
SEQ++2'
 
254
MOA+9:1.00:GBP'
 
255
RFF+CR:CREDIT1'
 
256
RFF+PQ:CREDIT1'
 
257
PAI+::2'
 
258
FCA+13'
 
259
FII+BF+12341234:HSBC NET RPS TEST:HSBC BANK:GBP+:::403124:154:133+GB'
 
260
NAD+BE++HSBC BANK PLC:PCM:8CS37:E14 5HQ:UNITED KINGDOM'
 
261
CNT+39:2'
 
262
UNT+27+1'
 
263
UNZ+1+UKLVPLIL'"""
 
264
 
 
265
        self.assertMultiLineEqual(expected, str(interchange))
 
266
 
 
267
 
 
268
 
 
269
 
 
270
if __name__ == "__main__":
 
271
    # I ran this with 
 
272
    # env PYTHONPATH=$HOME/src/canonical/hsbc-banking:$HOME/src/openerp/6.0/server/bin:$HOME/src/openerp/6.0/addons python wizard/paymul_test.py
 
273
    # is there a better way?    
 
274
    unittest.main()