bankserv 0.7.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,6 +11,7 @@ module Bankserv
11
11
 
12
12
  rejections = []
13
13
  records_with_errors = []
14
+ reply_file_rejected = false
14
15
 
15
16
  transactions.each do |transaction|
16
17
  case transaction.record_type
@@ -27,10 +28,19 @@ module Bankserv
27
28
  end
28
29
 
29
30
  when "transmission_rejected_reason"
31
+ reply_file_rejected = true
32
+
30
33
  input_document.error = {
31
34
  code: transaction.data[:error_code],
32
35
  message: transaction.data[:error_message]
33
36
  }
37
+
38
+ if service.is_a?(Bankserv::CreditService) && transaction.data[:error_code] == "6"
39
+ # transmission number is incorrect, fetch the last accepted input file trans number and increment by 1
40
+ last_successful_submission = Bankserv::Document.where(type: 'input', client_code: service.client_code, reply_status: "ACCEPTED").last
41
+ service.config[:transmission_number] = (last_successful_submission.transmission_number.to_i + 1).to_s
42
+ service.save!
43
+ end
34
44
 
35
45
  input_document.save!
36
46
  when "ahv_status"
@@ -42,6 +52,22 @@ module Bankserv
42
52
  set = input_document.set_with_generation_number(transaction.data[:user_code_generation_number])
43
53
  set.reply_status = transaction.data[:user_set_status]
44
54
  set.save!
55
+
56
+ if reply_file_rejected
57
+ rejections << transaction
58
+
59
+ if service.is_a? Bankserv::CreditService
60
+ set = input_document.set_with_generation_number(transaction.data[:user_code_generation_number])
61
+ next if set.contra_records.empty?
62
+ user_ref = set.contra_records.first.reference.match(/CONTRA([0-9]*)/)[1]
63
+ request_id = Bankserv::Credit.where(user_ref: user_ref)[0].bankserv_request_id
64
+
65
+ Bankserv::Credit.where(bankserv_request_id: request_id).each do |credit|
66
+ credit.renew!
67
+ end
68
+ end
69
+
70
+ end
45
71
  when "accepted_report_reply"
46
72
  # what do we do here.. what is an accepted report reply?
47
73
  if transaction.data[:accepted_report_transaction][4,2] == "12" # Contra record
@@ -106,28 +132,13 @@ module Bankserv
106
132
 
107
133
  unless rejections.empty?
108
134
  service.config[:generation_number] = rejections.first.data[:user_code_generation_number].to_i
109
- service.config[:sequence_number] = rejections.first.data[:user_sequence_number].to_i
135
+ unless rejections.first.data.has_key?(:user_sequence_number) # Transmission number out of sequence, reset to 1
136
+ service.config[:sequence_number] = 1
137
+ else
138
+ service.config[:sequence_number] = rejections.first.data[:user_sequence_number].to_i
139
+ end
110
140
  service.save!
111
141
  end
112
-
113
- #records_with_errors.uniq.each do |rwe|
114
-
115
- #end
116
- # rejections.each do |rejection|
117
-
118
- # set = input_document.set_with_generation_number(rejection.data[:user_code_generation_number])
119
- # user_ref = set.contra_records.first.reference.match(/CONTRA([0-9]*)/)[1]
120
- # request_id = Bankserv::Credit.where(user_ref: user_ref)[0].bankserv_request_id
121
- # # if service.is_a? Bankserv::CreditService
122
- # # set = input_document.set_with_generation_number(transaction.data[:user_code_generation_number])
123
- # # user_ref = set.contra_records.first.reference.match(/CONTRA([0-9]*)/)[1]
124
- # # request_id = Bankserv::Credit.where(user_ref: user_ref)[0].bankserv_request_id
125
-
126
- # # Bankserv::Credit.where(bankserv_request_id: request_id).each do |credit|
127
- # # credit.renew!
128
- # # end
129
- # # end
130
- # end
131
142
  end
132
143
  end
133
144
  end
@@ -1,3 +1,3 @@
1
1
  module Bankserv
2
- VERSION = "0.7.0"
2
+ VERSION = "0.7.1"
3
3
  end
@@ -0,0 +1,6 @@
1
+ 000L2014072604136RENTAL CONNECT PTY LTD 000036900000 2431
2
+ 020L04A8551407261407261407261407260000016535BATCH YY
3
+ 020L1063200504079323748A85500000125400562270571576100000225194140726880 RAWSONPROP001701 LA HABANA BODY CORPORATE 00000000000000000000 21
4
+ 020L1263200504079323748A85500000263200504079323748100000225194140726100000RAWSONPROPCONTRA6631
5
+ 020L92A855000001000002140726140726000001000001000001000000225194000000225194066349895324
6
+ 999L000000006
@@ -0,0 +1,5 @@
1
+ 000L2014072600000RENTAL CONNECT PTY LTD 000000004136 2431
2
+ 900L000 TRANSMISSION 04136-0000369 REJECTED
3
+ 901L000 00006-*** TRANS. NUMBER NOT NEXT IN SEQUENCE ***
4
+ 900L020 ACB USER SET A855-0006535-000002 ACCEPTED
5
+ 999L000000005
@@ -243,6 +243,64 @@ describe Bankserv::ReplyDocument do
243
243
  end
244
244
 
245
245
  end
246
+
247
+ context "Process a reply file with trans number not next in sequence" do
248
+
249
+ before(:each) do
250
+ tear_it_down
251
+ @cs = Bankserv::CreditService.register(client_code: '04136', client_name: "RENTAL CONNECT PTY LTD", client_abbreviated_name: 'RAWSONPROP', user_code: "A855", generation_number: 6365, transmission_status: "L", transmission_number: "369", sequence_number: 57)
252
+
253
+ Bankserv::Document.create!(type: "input", set_id: 18242, processed: true, transmission_status: "L", rec_status: "L", transmission_number: "367", reply_status: "ACCEPTED", error: nil, created_at: "2014-07-25 15:10:24", updated_at: "2014-07-25 16:30:22", client_code: "04136", user_ref: "2426")
254
+ @file_contents = File.open("./spec/examples/input_with_wrong_trans_num.txt", "rb").read
255
+ @input_document = Bankserv::InputDocument.store(@file_contents)
256
+
257
+ options = Absa::H2h::Transmission::Document.hash_from_s(@file_contents, 'input')
258
+ options[:data].each do |entry|
259
+ if entry[:data].count == 4
260
+ c = entry[:data].map {|x| x[:data]}
261
+ request = Bankserv::Request.create!({
262
+ type: "credit",
263
+ data: {
264
+ :type_of_service=>"BATCH",
265
+ :batches=>[{
266
+ :debit=>{:account_number=>c[2][:homing_account_number], :id_number=>"", :initials=>"", :account_name=>c[2][:homing_account_name], :branch_code=>c[2][:homing_branch], :account_type=>"cheque", :amount=>c[2][:amount], :user_ref=>c[2][:user_ref].gsub("RAWSONPROPCONTRA", ""), :action_date=>"2014-07-15".to_date},
267
+ :credit=>{:account_number=>c[1][:homing_account_number], :id_number=>"", :initials=>"", :account_name=>c[1][:homing_account_name], :branch_code=>c[1][:homing_branch], :account_type=>"cheque", :amount=>c[1][:amount], :user_ref=>c[1][:user_ref].gsub("RAWSONPROP", ""), :action_date=>"2014-07-15".to_date}
268
+ }]
269
+ }
270
+ })
271
+
272
+ request.service_id = @cs.id
273
+ request.save!
274
+ end
275
+ end
276
+
277
+ Bankserv::Credit.all.each {|x| x.status="pending";x.save!}
278
+
279
+ @file_contents = File.open("./spec/examples/reply/transnumber_wrong.txt", "rb").read
280
+
281
+ @document = Bankserv::ReplyDocument.store(@file_contents)
282
+ @document.process!
283
+ @cs.reload
284
+ end
285
+
286
+ it "should reverse the credit service transmission number by 1" do
287
+ Bankserv::CreditService.last.config[:transmission_number].should == "368"
288
+ end
289
+
290
+ it "should reset the generation number" do
291
+ Bankserv::CreditService.last.config[:generation_number].should == 6535
292
+ end
293
+
294
+ it "should reset the user sequence number" do
295
+ Bankserv::CreditService.last.config[:sequence_number].should == 1
296
+ end
297
+
298
+ it "should resubmit the credits" do
299
+ Bankserv::Credit.all.each do |credit|
300
+ credit.status.should == "new"
301
+ end
302
+ end
303
+ end
246
304
 
247
305
 
248
306
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 7
8
- - 0
9
- version: 0.7.0
8
+ - 1
9
+ version: 0.7.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jeffrey van Aswegen
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2014-07-22 00:00:00 +02:00
18
+ date: 2014-07-28 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -186,6 +186,7 @@ files:
186
186
  - spec/examples/empty_output.txt
187
187
  - spec/examples/failed_output_file.txt
188
188
  - spec/examples/host2host/tmp.log
189
+ - spec/examples/input_with_wrong_trans_num.txt
189
190
  - spec/examples/notify_me.xml
190
191
  - spec/examples/notify_me_with_one_record.xml
191
192
  - spec/examples/reply/accepted_and_rejected_transactions.txt
@@ -193,6 +194,7 @@ files:
193
194
  - spec/examples/reply/rejected_transmission.txt
194
195
  - spec/examples/reply/reply2.txt
195
196
  - spec/examples/reply/reply_file.txt
197
+ - spec/examples/reply/transnumber_wrong.txt
196
198
  - spec/examples/simple_input_file.txt
197
199
  - spec/examples/statement4_unpacked.dat
198
200
  - spec/examples/tmp/OUTPUT0412153500.txt
@@ -270,6 +272,7 @@ test_files:
270
272
  - spec/examples/empty_output.txt
271
273
  - spec/examples/failed_output_file.txt
272
274
  - spec/examples/host2host/tmp.log
275
+ - spec/examples/input_with_wrong_trans_num.txt
273
276
  - spec/examples/notify_me.xml
274
277
  - spec/examples/notify_me_with_one_record.xml
275
278
  - spec/examples/reply/accepted_and_rejected_transactions.txt
@@ -277,6 +280,7 @@ test_files:
277
280
  - spec/examples/reply/rejected_transmission.txt
278
281
  - spec/examples/reply/reply2.txt
279
282
  - spec/examples/reply/reply_file.txt
283
+ - spec/examples/reply/transnumber_wrong.txt
280
284
  - spec/examples/simple_input_file.txt
281
285
  - spec/examples/statement4_unpacked.dat
282
286
  - spec/examples/tmp/OUTPUT0412153500.txt