bankserv 0.6.4 → 0.6.5

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -5,3 +5,6 @@ pkg/*
5
5
  spec/internal/db/bankserv_test.sqlite
6
6
  spec/internal/config/database.yml
7
7
  *.rdb
8
+ .rvmrc
9
+ .ruby-version
10
+ .ruby-gemset
@@ -41,6 +41,15 @@ module Bankserv
41
41
  def completed?
42
42
  status == "completed"
43
43
  end
44
+
45
+ def accepted?
46
+ status == "accepted"
47
+ end
48
+
49
+ def accept!
50
+ self.status = "accepted"
51
+ save!
52
+ end
44
53
 
45
54
  def standard?
46
55
  record_type == "standard"
@@ -39,7 +39,7 @@ class Bankserv::InputDocument < Bankserv::Document
39
39
  document.set = Bankserv::Set.from_hash(options)
40
40
  document.set.document = document # whaaaaaa?
41
41
  document.save!
42
- document
42
+ document
43
43
  end
44
44
 
45
45
  def self.sets_with_work
@@ -34,5 +34,9 @@ class Bankserv::OutputDocument < Bankserv::Document
34
34
  self.processed = true
35
35
  self.save
36
36
  end
37
+
38
+ def self.for_user_ref(user_ref)
39
+ where(type: 'output', user_ref: user_ref).first
40
+ end
37
41
 
38
42
  end
@@ -4,9 +4,44 @@ module Bankserv
4
4
 
5
5
  class EftOutput < Set
6
6
 
7
-
7
+ def process
8
+ service = Bankserv::Service.active.select {|s| s.config[:user_code] == self.records.first.data[:bankserv_user_code]}.last
9
+
10
+ if !service.nil? && service.is_a?(Bankserv::CreditService)
11
+ self.sets.each do |set|
12
+ set.transactions.each do |trans|
13
+ ref = trans.reference.gsub(service.config[:client_abbreviated_name], "")
14
+
15
+ credits = Bankserv::Credit.where(record_type: 'standard', action_date: trans.data[:transmission_date].to_date,
16
+ amount: trans.data[:amount].to_i).where('lower(user_ref) = ?', ref.downcase).select do |credit|
17
+
18
+ # account_number = trans.data[:homing_account_number] ?
19
+
20
+ credit.bank_account.account_number == trans.data[:homing_account_number] &&
21
+ credit.bank_account.account_name.downcase == trans.data[:homing_account_name].downcase
22
+ end
23
+
24
+ rejection_reason_description = Absa::H2h::Eft::RejectionCode.reason_for_code(trans.data[:rejection_reason]),
25
+ rejection_qualifier_description = Absa::H2h::Eft::RejectionCode.qualifier_for_code(trans.data[:rejection_qualifier])
26
+
27
+ if credits.count == 1
28
+ request_credits = Bankserv::Credit.where(bankserv_request_id: credits.first.bankserv_request_id)
29
+ request_credits.each do |c|
30
+ c.update_attributes!({
31
+ status: 'error',
32
+ response: {
33
+ reason: rejection_reason_description,
34
+ description: rejection_qualifier_description
35
+ }
36
+ })
37
+ end
38
+ end
39
+ end
40
+ end
41
+ else
42
+ sets.each{|s| s.process}
43
+ end
44
+ end
8
45
  end
9
-
10
46
  end
11
-
12
- end
47
+ end
@@ -6,7 +6,9 @@ module Bankserv
6
6
 
7
7
  def process
8
8
  input_document = Bankserv::InputDocument.for_user_ref(self.set.document.user_ref)
9
-
9
+ #service = Bankserv::Service.active.select {|s| s.config[:user_code] == self.records.first.data[:user_code]}.last
10
+ service = Bankserv::Service.active.select {|s| s.client_code.to_i.to_s == self.records.first.data[:user_code]}.last
11
+
10
12
  transactions.each do |transaction|
11
13
  case transaction.record_type
12
14
  when "transmission_status"
@@ -39,6 +41,15 @@ module Bankserv
39
41
  set.save!
40
42
  when "accepted_report_reply"
41
43
  # what do we do here.. what is an accepted report reply?
44
+ if transaction.data[:accepted_report_transaction][4,2] == "12" # Contra record
45
+ if service.is_a? Bankserv::CreditService
46
+ user_ref = transaction.data[:accepted_report_transaction].match(/CONTRA([0-9]*)/)[1]
47
+ request_id = Bankserv::Credit.where(user_ref: user_ref)[0].bankserv_request_id
48
+ Bankserv::Credit.where(bankserv_request_id: request_id).each do |credit|
49
+ credit.accept!
50
+ end
51
+ end
52
+ end
42
53
  when "rejected_message"
43
54
  if transaction.data[:user_sequence_number].to_i > 0
44
55
  set = input_document.set_with_generation_number(transaction.data[:user_code_generation_number])
@@ -56,4 +67,4 @@ module Bankserv
56
67
  end
57
68
  end
58
69
  end
59
- end
70
+ end
@@ -1,3 +1,3 @@
1
1
  module Bankserv
2
- VERSION = "0.6.4"
2
+ VERSION = "0.6.5"
3
3
  end
@@ -0,0 +1,2 @@
1
+ 000L2012110500000RENTAL CONNECT PTY LTD 000021904136
2
+ 999L000000002
@@ -0,0 +1,7 @@
1
+ 000L2014070900000RENTAL CONNECT PTY LTD 000118004136
2
+ 010LA855000002309
3
+ 011LA85563200500000040833870010120140708
4
+ 013L1020140708000213000000000006235555489300000705000RAWSONPROPREFUND D ORDER 89981046000213 JOHANNES FAASEN
5
+ 014L0000000000000000010000000623555548930000000000000000000000705000
6
+ 019L0000000000000000010000000623555548930000000000000000000000705000
7
+ 999L000000007
@@ -0,0 +1,6 @@
1
+ 000L2014071200000RENTAL CONNECT PTY LTD 000119104136 2349
2
+ 900L000 TRANSMISSION 04136-0000348 ACCEPTED
3
+ 900L020 ACB USER SET A855-0006302-000002 ACCEPTED
4
+ 903L020L1063200504083414606A85500000100425500070285179100001725000140712880 RAWSONPROPDEPOSIT TO LL ALGOA THE SUNSET BEACH TRUST 00000000000000000000 21
5
+ 903L020L1263200504083414606A85500000263200504083414606100001725000140712100000RAWSONPROPCONTRA6378
6
+ 999L000000006
@@ -0,0 +1,6 @@
1
+ 000L2014071204136RENTAL CONNECT PTY LTD 000034800000 2349
2
+ 020L04A8551407121407121407121407120000016302BATCH YY
3
+ 020L1063200504083414606A85500000100425500070285179100001725000140712880 RAWSONPROPDEPOSIT TO LL ALGOA THE SUNSET BEACH TRUST 00000000000000000000 21
4
+ 020L1263200504083414606A85500000263200504083414606100001725000140712100000RAWSONPROPCONTRA6378
5
+ 020L92A855000001000002140712140712000001000001000001000001725000000001725000004153699785
6
+ 999L000000006
@@ -182,6 +182,8 @@ describe Bankserv::OutputDocument do
182
182
  @document.process!
183
183
 
184
184
  Bankserv::Debit.all.each do |debit|
185
+ puts debit.inspect
186
+
185
187
  (debit.completed? or debit.unpaid? or debit.redirect?).should be_true
186
188
 
187
189
  if debit.unpaid?
@@ -198,6 +200,41 @@ describe Bankserv::OutputDocument do
198
200
  end
199
201
 
200
202
  end
201
-
202
-
203
- end
203
+
204
+ context "Processing an output file with errors" do
205
+ before(:each) do
206
+ tear_it_down
207
+
208
+ @cs = Bankserv::CreditService.register(client_code: '04136', client_name: "RENTAL CONNECT PTY LTD", client_abbreviated_name: 'RAWSONPROP', user_code: "A855", generation_number: 6234, transmission_status: "L", transmission_number: "343")
209
+
210
+ @request = Bankserv::Request.create!({
211
+ type: "credit",
212
+ data: {
213
+ :type_of_service=>"BATCH",
214
+ :batches=>[{
215
+ :debit=>{:account_number=>"4083387001", :id_number=>"", :initials=>"", :account_name=>"Blue Platinum Ventures (Busi. A/C)", :branch_code=>"632005", :account_type=>"current",
216
+ :amount=>705000, :user_ref=>6231, :action_date=>"2014-07-08".to_date},
217
+ :credit=>{:account_number=>"62355554893", :id_number=>"5208105009082", :initials=>"", :account_name=>"Johannes Faasen", :branch_code=>"", :account_type=>"current", :amount=>705000,
218
+ :user_ref=>"REFUND D Order", :action_date=>"2014-07-08".to_date}}]}
219
+ })
220
+
221
+ @request.service_id = @cs.id
222
+ @request.save!
223
+
224
+ Bankserv::Credit.all.each {|x| x.status="pending";x.save!}
225
+
226
+ @file_contents = File.open("./spec/examples/failed_output_file.txt", "rb").read
227
+ @options = Absa::H2h::Transmission::Document.hash_from_s(@file_contents, 'output')
228
+
229
+ @document = Bankserv::OutputDocument.store(@file_contents)
230
+ @document.process!
231
+ end
232
+
233
+ it "should mark the payment as failed" do
234
+ Bankserv::Credit.all.each do |c|
235
+ c.error?.should be_true
236
+ c.response[:description].should == "TARGET ACCOUNT BRANCH INVALID"
237
+ end
238
+ end
239
+ end
240
+ end
@@ -95,6 +95,45 @@ describe Bankserv::ReplyDocument do
95
95
  @input_document.reply_status.should == "ACCEPTED"
96
96
  end
97
97
  end
98
+
99
+ context "processing a reply file with 1 accepted transaction" do
100
+ before(:each) do
101
+ tear_it_down
102
+
103
+ @cs = Bankserv::CreditService.register(client_code: '04136', client_name: "RENTAL CONNECT PTY LTD", client_abbreviated_name: 'RAWSONPROP', user_code: "A855", generation_number: 6234, transmission_status: "L", transmission_number: "343")
104
+
105
+ @file_contents = File.open("./spec/examples/simple_input_file.txt", "rb").read
106
+ @input_document = Bankserv::InputDocument.store(@file_contents)
107
+
108
+ @request = Bankserv::Request.create!({
109
+ type: "credit",
110
+ data: {
111
+ :type_of_service=>"BATCH",
112
+ :batches=>[{
113
+ :debit=>{:account_number=>"4083414606", :id_number=>"", :initials=>"", :account_name=>"Blue Platinum Ventures (Busi. A/C)", :branch_code=>"632005", :account_type=>"current", :amount=>1725000, :user_ref=>6378, :action_date=>"2014-07-12".to_date},
114
+ :credit=>{:account_number=>"070285179", :id_number=>"", :initials=>"", :account_name=>"The Sunset Beach Trust", :branch_code=>"004255", :account_type=>"cheque", :amount=>1725000, :user_ref=>"Deposit to LL Algoa", :action_date=>"2014-07-12".to_date}
115
+ }]
116
+ }
117
+ })
118
+
119
+ @request.service_id = @cs.id
120
+ @request.save!
121
+
122
+ Bankserv::Credit.all.each {|x| x.status="pending";x.save!}
123
+
124
+ @file_contents = File.open("./spec/examples/reply/accepted_reply.txt", "rb").read
125
+ #@options = Absa::H2h::Transmission::Document.hash_from_s(@file_contents, 'output')
126
+
127
+ @document = Bankserv::ReplyDocument.store(@file_contents)
128
+ @document.process!
129
+ end
130
+
131
+ it "should mark the credit entries as accepted" do
132
+ Bankserv::Credit.all.each do |c|
133
+ c.accepted?.should be_true
134
+ end
135
+ end
136
+ end
98
137
 
99
138
  context "processing a reply file reporting that a transmission was rejected" do
100
139
 
@@ -141,6 +180,8 @@ describe Bankserv::ReplyDocument do
141
180
  record = @input_document.set.sets.last.transactions.first
142
181
  record.error[:code].should == "12345"
143
182
  record.error[:message].should == "HI THIS IS REJECTED MESSAGE"
183
+
184
+ puts record.inspect
144
185
  end
145
186
  end
146
187
 
metadata CHANGED
@@ -1,126 +1,135 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: bankserv
3
- version: !ruby/object:Gem::Version
4
- version: 0.6.4
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 6
8
+ - 5
9
+ version: 0.6.5
5
10
  platform: ruby
6
- authors:
11
+ authors:
7
12
  - Jeffrey van Aswegen
8
13
  - Douglas Anderson
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2013-10-14 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2014-07-16 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
15
22
  name: activesupport
16
- requirement: !ruby/object:Gem::Requirement
17
- requirements:
18
- - - ! '>='
19
- - !ruby/object:Gem::Version
20
- version: '0'
21
- type: :runtime
22
23
  prerelease: false
23
- version_requirements: !ruby/object:Gem::Requirement
24
- requirements:
25
- - - ! '>='
26
- - !ruby/object:Gem::Version
27
- version: '0'
28
- - !ruby/object:Gem::Dependency
29
- name: activerecord
30
- requirement: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - ~>
33
- - !ruby/object:Gem::Version
34
- version: '3.0'
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ segments:
30
+ - 0
31
+ version: "0"
35
32
  type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: activerecord
36
36
  prerelease: false
37
- version_requirements: !ruby/object:Gem::Requirement
38
- requirements:
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
39
40
  - - ~>
40
- - !ruby/object:Gem::Version
41
- version: '3.0'
42
- - !ruby/object:Gem::Dependency
43
- name: i18n
44
- requirement: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - ! '>='
47
- - !ruby/object:Gem::Version
48
- version: '0'
41
+ - !ruby/object:Gem::Version
42
+ segments:
43
+ - 3
44
+ - 0
45
+ version: "3.0"
49
46
  type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: i18n
50
50
  prerelease: false
51
- version_requirements: !ruby/object:Gem::Requirement
52
- requirements:
53
- - - ! '>='
54
- - !ruby/object:Gem::Version
55
- version: '0'
56
- - !ruby/object:Gem::Dependency
57
- name: absa-h2h
58
- requirement: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - ~>
61
- - !ruby/object:Gem::Version
62
- version: 0.1.6
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ segments:
57
+ - 0
58
+ version: "0"
63
59
  type: :runtime
60
+ version_requirements: *id003
61
+ - !ruby/object:Gem::Dependency
62
+ name: absa-h2h
64
63
  prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
64
+ requirement: &id004 !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
67
  - - ~>
68
- - !ruby/object:Gem::Version
68
+ - !ruby/object:Gem::Version
69
+ segments:
70
+ - 0
71
+ - 1
72
+ - 6
69
73
  version: 0.1.6
70
- - !ruby/object:Gem::Dependency
71
- name: absa-esd
72
- requirement: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - ~>
75
- - !ruby/object:Gem::Version
76
- version: 0.0.3
77
74
  type: :runtime
75
+ version_requirements: *id004
76
+ - !ruby/object:Gem::Dependency
77
+ name: absa-esd
78
78
  prerelease: false
79
- version_requirements: !ruby/object:Gem::Requirement
80
- requirements:
79
+ requirement: &id005 !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
81
82
  - - ~>
82
- - !ruby/object:Gem::Version
83
+ - !ruby/object:Gem::Version
84
+ segments:
85
+ - 0
86
+ - 0
87
+ - 3
83
88
  version: 0.0.3
84
- - !ruby/object:Gem::Dependency
85
- name: absa-notify-me
86
- requirement: !ruby/object:Gem::Requirement
87
- requirements:
88
- - - ~>
89
- - !ruby/object:Gem::Version
90
- version: 0.0.7
91
89
  type: :runtime
90
+ version_requirements: *id005
91
+ - !ruby/object:Gem::Dependency
92
+ name: absa-notify-me
92
93
  prerelease: false
93
- version_requirements: !ruby/object:Gem::Requirement
94
- requirements:
94
+ requirement: &id006 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
95
97
  - - ~>
96
- - !ruby/object:Gem::Version
98
+ - !ruby/object:Gem::Version
99
+ segments:
100
+ - 0
101
+ - 0
102
+ - 7
97
103
  version: 0.0.7
98
- - !ruby/object:Gem::Dependency
104
+ type: :runtime
105
+ version_requirements: *id006
106
+ - !ruby/object:Gem::Dependency
99
107
  name: combustion
100
- requirement: !ruby/object:Gem::Requirement
101
- requirements:
102
- - - ~>
103
- - !ruby/object:Gem::Version
104
- version: 0.3.1
105
- type: :development
106
108
  prerelease: false
107
- version_requirements: !ruby/object:Gem::Requirement
108
- requirements:
109
+ requirement: &id007 !ruby/object:Gem::Requirement
110
+ none: false
111
+ requirements:
109
112
  - - ~>
110
- - !ruby/object:Gem::Version
113
+ - !ruby/object:Gem::Version
114
+ segments:
115
+ - 0
116
+ - 3
117
+ - 1
111
118
  version: 0.3.1
112
- description: ! "This engine allows users to inject requests into a queue to be processed.
113
- \n \n The queue handles bank account validations, credit payments,
114
- debit orders\n and collecting bank statements/notify me statements. "
115
- email:
119
+ type: :development
120
+ version_requirements: *id007
121
+ description: "This engine allows users to inject requests into a queue to be processed. \n \n The queue handles bank account validations, credit payments, debit orders\n and collecting bank statements/notify me statements. "
122
+ email:
116
123
  - jeffmess@gmail.com
117
124
  - i.am.douglas.anderson@gmail.com
118
125
  executables: []
126
+
119
127
  extensions: []
128
+
120
129
  extra_rdoc_files: []
121
- files:
130
+
131
+ files:
122
132
  - .gitignore
123
- - .rvmrc
124
133
  - Gemfile
125
134
  - Rakefile
126
135
  - bankserv.gemspec
@@ -173,12 +182,16 @@ files:
173
182
  - spec/examples/debit_eft_input_file.txt
174
183
  - spec/examples/eft_input_with_2_sets.txt
175
184
  - spec/examples/eft_output_file.txt
185
+ - spec/examples/empty_output.txt
186
+ - spec/examples/failed_output_file.txt
176
187
  - spec/examples/host2host/tmp.log
177
188
  - spec/examples/notify_me.xml
178
189
  - spec/examples/notify_me_with_one_record.xml
190
+ - spec/examples/reply/accepted_reply.txt
179
191
  - spec/examples/reply/rejected_transmission.txt
180
192
  - spec/examples/reply/reply2.txt
181
193
  - spec/examples/reply/reply_file.txt
194
+ - spec/examples/simple_input_file.txt
182
195
  - spec/examples/statement4_unpacked.dat
183
196
  - spec/examples/tmp/OUTPUT0412153500.txt
184
197
  - spec/examples/tmp/REPLY0412153000.txt
@@ -206,30 +219,39 @@ files:
206
219
  - spec/spec_helper.rb
207
220
  - spec/support/helpers.rb
208
221
  - spec/tmp/readme
209
- homepage: ''
222
+ has_rdoc: true
223
+ homepage: ""
210
224
  licenses: []
211
- metadata: {}
225
+
212
226
  post_install_message:
213
227
  rdoc_options: []
214
- require_paths:
228
+
229
+ require_paths:
215
230
  - lib
216
- required_ruby_version: !ruby/object:Gem::Requirement
217
- requirements:
218
- - - ! '>='
219
- - !ruby/object:Gem::Version
220
- version: '0'
221
- required_rubygems_version: !ruby/object:Gem::Requirement
222
- requirements:
223
- - - ! '>='
224
- - !ruby/object:Gem::Version
225
- version: '0'
231
+ required_ruby_version: !ruby/object:Gem::Requirement
232
+ none: false
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ segments:
237
+ - 0
238
+ version: "0"
239
+ required_rubygems_version: !ruby/object:Gem::Requirement
240
+ none: false
241
+ requirements:
242
+ - - ">="
243
+ - !ruby/object:Gem::Version
244
+ segments:
245
+ - 0
246
+ version: "0"
226
247
  requirements: []
248
+
227
249
  rubyforge_project: bankserv
228
- rubygems_version: 2.0.5
250
+ rubygems_version: 1.3.7.1
229
251
  signing_key:
230
- specification_version: 4
252
+ specification_version: 3
231
253
  summary: A rails 3 engine wrapped around the Absa Host 2 Host gem.
232
- test_files:
254
+ test_files:
233
255
  - spec/examples/INPUT.120410144410.txt
234
256
  - spec/examples/INPUT.120411110604.txt
235
257
  - spec/examples/INPUT.120411124123.txt
@@ -242,12 +264,16 @@ test_files:
242
264
  - spec/examples/debit_eft_input_file.txt
243
265
  - spec/examples/eft_input_with_2_sets.txt
244
266
  - spec/examples/eft_output_file.txt
267
+ - spec/examples/empty_output.txt
268
+ - spec/examples/failed_output_file.txt
245
269
  - spec/examples/host2host/tmp.log
246
270
  - spec/examples/notify_me.xml
247
271
  - spec/examples/notify_me_with_one_record.xml
272
+ - spec/examples/reply/accepted_reply.txt
248
273
  - spec/examples/reply/rejected_transmission.txt
249
274
  - spec/examples/reply/reply2.txt
250
275
  - spec/examples/reply/reply_file.txt
276
+ - spec/examples/simple_input_file.txt
251
277
  - spec/examples/statement4_unpacked.dat
252
278
  - spec/examples/tmp/OUTPUT0412153500.txt
253
279
  - spec/examples/tmp/REPLY0412153000.txt
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 7124f93bcfc40e393754b61a660169bf5d01ef57
4
- data.tar.gz: 2dced4072882c61b5d9b30dae0a0a9bc7dd4e2d0
5
- SHA512:
6
- metadata.gz: e2545f4f98699249a2543555076ef822838001e079c99f05e405ee660d303d1c4943d2881e447c58d1cd31e7c987c65dafc8e75263f2b182dff48fa4318ad6c1
7
- data.tar.gz: ec9b4ac02dd615e8e0a71ba61be79ad5819be6b17dd6a892979a5ad17098087497794dd3540838078969604c6e5b0892a0c6e5b882e3fbe50afb982bc3559e23
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm use 1.9.2@bankserv --create