bankserv 0.6.4 → 0.6.5

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.
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