deltavista_crif_dva_interface 0.0.30 → 0.1.00
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/lib/deltavista_crif_dva_interface.rb +1 -0
- data/lib/deltavista_crif_dva_interface/collection_check.rb +26 -102
- data/lib/deltavista_crif_dva_interface/config.rb +1 -0
- data/lib/deltavista_crif_dva_interface/soap_config.rb +13 -0
- data/lib/deltavista_crif_dva_interface/soap_converter.rb +107 -0
- data/lib/deltavista_crif_dva_interface/version.rb +1 -1
- data/lib/deltavista_crif_dva_interface/xml_converter.rb +2 -2
- metadata +24 -4
@@ -6,6 +6,7 @@ require "deltavista_crif_dva_interface/errors"
|
|
6
6
|
require "deltavista_crif_dva_interface/restful_service"
|
7
7
|
require "deltavista_crif_dva_interface/delta_vista_service"
|
8
8
|
require "deltavista_crif_dva_interface/xml_converter"
|
9
|
+
require "deltavista_crif_dva_interface/soap_converter"
|
9
10
|
require "deltavista_crif_dva_interface/credit_check_short_v02"
|
10
11
|
require "deltavista_crif_dva_interface/collection_check"
|
11
12
|
require "deltavista_crif_dva_interface/address_update"
|
@@ -1,111 +1,35 @@
|
|
1
1
|
module DeltavistaCrifDvaInterface
|
2
|
-
class CollectionCheck <
|
3
|
-
attr_reader :logger
|
4
|
-
|
5
|
-
DEFAULT_OPTIONS = {
|
6
|
-
:encoding => 'UTF-8',
|
7
|
-
:request_type => 'getCollectionCheck'
|
8
|
-
}.freeze
|
9
|
-
|
10
|
-
PRIVATE_NODE = 'private'
|
11
|
-
PRIVATE_KEYS = %w(title lastName firstName maidenName street house poBox zip city country phone birthDate sex)
|
12
|
-
PRIVATE_RESPONSE_KEYS = PRIVATE_KEYS.unshift('addressId')
|
13
|
-
|
14
|
-
COMPANY_NODE = 'company'
|
15
|
-
COMPANY_KEYS = %w(legalForm name street house poBox zip city country phone)
|
16
|
-
COMPANY_RESPONSE_KEYS = COMPANY_KEYS.unshift('addressId')
|
17
|
-
|
18
|
-
PAYLOAD_NODE = 'payLoad'
|
19
|
-
PAYLOAD_RESPONSE_KEYS = %w(personStatus score decision hasDebt decisionComment)
|
20
|
-
|
21
|
-
# unique id for each request
|
22
|
-
@@reference_id = 1000
|
2
|
+
class CollectionCheck < SoapConverter
|
23
3
|
|
24
4
|
def initialize(options)
|
25
|
-
|
26
|
-
if options.is_a? Hash
|
27
|
-
@config = DEFAULT_OPTIONS.merge(options)
|
28
|
-
@logger = options[:logger] ? options[:logger] : Logger.new(STDOUT)
|
29
|
-
else
|
30
|
-
@config[:username] = options.username
|
31
|
-
@config[:password] = options.password
|
32
|
-
@logger = options.logger ? options.logger : Logger.new(STDOUT)
|
33
|
-
@config = DEFAULT_OPTIONS.merge(@config)
|
34
|
-
end
|
5
|
+
super(options)
|
35
6
|
end
|
36
7
|
|
37
|
-
def
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
xml.password @config[:password]
|
43
|
-
}
|
44
|
-
xml.reference @@reference_id
|
45
|
-
xml.requestType @config[:request_type]
|
46
|
-
# Company Flag (to be set in the address scope)
|
47
|
-
if address['is_company']
|
48
|
-
keys = COMPANY_KEYS
|
49
|
-
node = COMPANY_NODE
|
50
|
-
else
|
51
|
-
keys = PRIVATE_KEYS
|
52
|
-
node = PRIVATE_NODE
|
53
|
-
end
|
54
|
-
xml.__send__('node') {
|
55
|
-
keys.each do |key|
|
56
|
-
xml.send(key, address[key.downcase]) if address[key.downcase] && !address[key.downcase].empty?
|
57
|
-
end
|
58
|
-
}
|
59
|
-
xml.collection {
|
60
|
-
xml.amountTotal collection[:amount_total]
|
61
|
-
xml.amountOpen collection[:amount_open]
|
62
|
-
xml.caseStatus collection[:case_status]
|
63
|
-
xml.dateBill collection[:date_bill].strftime('%Y-%m-%d')
|
64
|
-
xml.dateCase collection[:date_case].strftime('%Y-%m-%d')
|
65
|
-
}
|
66
|
-
}
|
67
|
-
end
|
68
|
-
@@reference_id += 1
|
69
|
-
result = builder.to_xml
|
70
|
-
logger.debug result if logger.debug?
|
71
|
-
result
|
8
|
+
def private_collection_check(address, collection)
|
9
|
+
envelope[:report_type] = 'COLLECTION_CHECK_CONSUMER'
|
10
|
+
insert_private_address address
|
11
|
+
insert_collection collection
|
12
|
+
commit(:collection_check_consumer)
|
72
13
|
end
|
73
14
|
|
74
|
-
def
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
address = {}
|
80
|
-
if xml_doc.xpath("//dvaCheckResponse/#{PRIVATE_NODE}")
|
81
|
-
node = PRIVATE_NODE
|
82
|
-
keys = PRIVATE_RESPONSE_KEYS
|
83
|
-
elsif xml_doc.xpath("//dvaCheckResponse/#{COMPANY_NODE}")
|
84
|
-
node = COMPANY_NODE
|
85
|
-
keys = COMPANY_RESPONSE_KEYS
|
86
|
-
else
|
87
|
-
logger.error 'Neither company nor private Node were found in the DVA Response'
|
88
|
-
raise NotFoundError.new response_code(xml_doc), response_text(xml_doc)
|
89
|
-
end
|
90
|
-
xml_doc.xpath("//dvaCheckResponse/#{node}").each do |private_node|
|
91
|
-
keys.each do |key|
|
92
|
-
if key == 'country'
|
93
|
-
address[key.downcase.to_sym] = convert_country get_value(private_node, key)
|
94
|
-
else
|
95
|
-
address[key.downcase.to_sym] = get_value(private_node, key)
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
xml_doc.xpath("//dvaCheckResponse/#{node}/#{PAYLOAD_NODE}").each do |payload_node|
|
100
|
-
PAYLOAD_RESPONSE_KEYS.each do |key|
|
101
|
-
address[key.downcase.to_sym] = get_value(payload_node, key)
|
102
|
-
end
|
103
|
-
end
|
104
|
-
address
|
105
|
-
else
|
106
|
-
raise NotFoundError.new response_code(xml_doc), response_text(xml_doc)
|
107
|
-
end
|
15
|
+
def business_collection_check(address, collection)
|
16
|
+
envelope[:report_type] = 'COLLECTION_CHECK_BUSINESS'
|
17
|
+
insert_company_address address
|
18
|
+
insert_collection collection
|
19
|
+
commit(:collection_check_consumer)
|
108
20
|
end
|
109
|
-
end
|
110
|
-
end
|
111
21
|
|
22
|
+
private
|
23
|
+
def insert_collection(collection)
|
24
|
+
# Mandatory values
|
25
|
+
additional_input('collectionCaseStatus', collection[:case_status])
|
26
|
+
additional_input('openAmount', collection[:open_amount])
|
27
|
+
additional_input('dateOpen', format_date(collection[:date_open]))
|
28
|
+
# Optional values
|
29
|
+
additional_input('totalAmount', collection[:total_amount]) if collection[:date_invoice]
|
30
|
+
additional_input('invoiceDate', collection[:date_invoice]) if collection[:date_invoice]
|
31
|
+
additional_input('iouType', collection[:iou_type]) if collection[:iou_type]
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module DeltavistaCrifDvaInterface
|
2
|
+
class SoapConfig
|
3
|
+
attr_accessor :endpoint, :wsdl, :user_name, :password
|
4
|
+
|
5
|
+
def initialize(options)
|
6
|
+
@endpoint = options[:endpoint] ? options[:endpoint] : 'https://preprodservices.crif-online.ch/CrifSS/CrifSoapServiceV1'
|
7
|
+
@wsdl = options[:wsdl] ? options[:wsdl] : '/wsdl/crif-soap-service_v1.0.wsdl'
|
8
|
+
@user_name = options[:user_name]
|
9
|
+
@password = options[:password]
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
module DeltavistaCrifDvaInterface
|
2
|
+
class SoapConverter
|
3
|
+
|
4
|
+
attr_reader :options, :client, :envelope, :result, :logger
|
5
|
+
|
6
|
+
def initialize(options)
|
7
|
+
@options = options
|
8
|
+
@envelope = Hash.new
|
9
|
+
@client = Savon.client(
|
10
|
+
:wsdl => options.wsdl,
|
11
|
+
:endpoint => options.endpoint,
|
12
|
+
:soap_version => 2,
|
13
|
+
:env => 'soap-env'
|
14
|
+
)
|
15
|
+
@result = {
|
16
|
+
:committed => false,
|
17
|
+
:success => false,
|
18
|
+
:data => Hash.new
|
19
|
+
}
|
20
|
+
@logger = options.logger ? options.logger : Logger.new(STDOUT)
|
21
|
+
insert_identity
|
22
|
+
insert_reference_number
|
23
|
+
end
|
24
|
+
|
25
|
+
def commit(action)
|
26
|
+
begin
|
27
|
+
result[:data] = @client.call(action, envelope)
|
28
|
+
result[:success] = true
|
29
|
+
rescue
|
30
|
+
result[:data] = Hash.new
|
31
|
+
result[:success] = false
|
32
|
+
ensure
|
33
|
+
result[:committed] = true
|
34
|
+
end
|
35
|
+
result
|
36
|
+
end
|
37
|
+
|
38
|
+
def insert_reference_number
|
39
|
+
envelope[:reference_number] = rand(1..3000)
|
40
|
+
end
|
41
|
+
|
42
|
+
def insert_identity
|
43
|
+
envelope[:identity_descriptor] = {
|
44
|
+
:user_name => options.user_name,
|
45
|
+
:password => options.password
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
def insert_private_address(address)
|
50
|
+
envelope[:searched_address] = {
|
51
|
+
:first_name => address[:first_name],
|
52
|
+
:last_name => address[:last_name],
|
53
|
+
:maiden_name => address[:maiden_name],
|
54
|
+
:sex => address[:sex],
|
55
|
+
:birth_date => format_date(address[:birth_date]),
|
56
|
+
:location => parse_location(address),
|
57
|
+
:attributes! => {
|
58
|
+
'xsi:type' => 'PersonAddressDescription'
|
59
|
+
}
|
60
|
+
}
|
61
|
+
end
|
62
|
+
|
63
|
+
def insert_company_address(address)
|
64
|
+
envelope[:searched_address] = {
|
65
|
+
:company_name => address[:company_name],
|
66
|
+
:location => parse_location(address),
|
67
|
+
:attributes! => {
|
68
|
+
'xsi:type' => 'CompanyAddressDescription'
|
69
|
+
}
|
70
|
+
}
|
71
|
+
end
|
72
|
+
|
73
|
+
def additional_input(key, value)
|
74
|
+
envelope[:additional_inputs] = Array.new unless envelope[:additional_inputs]
|
75
|
+
envelope[:additional_inputs] << {
|
76
|
+
:key => key,
|
77
|
+
:value => value
|
78
|
+
}
|
79
|
+
end
|
80
|
+
|
81
|
+
# Converts alpha-3 country code into alpha-2 country code
|
82
|
+
def convert_country(alpha3_code)
|
83
|
+
alpha2_code = ''
|
84
|
+
begin
|
85
|
+
alpha2_code = SunDawg::CountryIsoTranslater.translate_standard(alpha3_code, "alpha3", "alpha2")
|
86
|
+
rescue SunDawg::CountryIsoTranslater::NoCountryError
|
87
|
+
ensure
|
88
|
+
alpha2_code
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def format_date(date)
|
93
|
+
date is_a? Time ? date.strftime('%Y-%m-%d') : nil
|
94
|
+
end
|
95
|
+
|
96
|
+
def parse_location(address)
|
97
|
+
{
|
98
|
+
:street => address[:street],
|
99
|
+
:house_number => address[:house_number],
|
100
|
+
:zip => address[:zip],
|
101
|
+
:city => address[:city],
|
102
|
+
:country => address[:country]
|
103
|
+
}
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
end
|
metadata
CHANGED
@@ -1,16 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deltavista_crif_dva_interface
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.00
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Marc Cadalbert
|
9
9
|
- Maik Duff
|
10
|
+
- Thomas Wieser
|
10
11
|
autorequire:
|
11
12
|
bindir: bin
|
12
13
|
cert_chain: []
|
13
|
-
date: 2013-05-
|
14
|
+
date: 2013-05-17 00:00:00.000000000 Z
|
14
15
|
dependencies:
|
15
16
|
- !ruby/object:Gem::Dependency
|
16
17
|
name: rspec
|
@@ -76,11 +77,28 @@ dependencies:
|
|
76
77
|
- - ! '>='
|
77
78
|
- !ruby/object:Gem::Version
|
78
79
|
version: '0'
|
79
|
-
|
80
|
-
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: savon
|
82
|
+
requirement: !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ~>
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: 2.2.0
|
88
|
+
type: :runtime
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
92
|
+
requirements:
|
93
|
+
- - ~>
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: 2.2.0
|
96
|
+
description: This interface is used to get credit check, address informations and
|
97
|
+
collection checks from the Deltavista/CRIF service.
|
81
98
|
email:
|
82
99
|
- mc@impac.ch
|
83
100
|
- md@impac.ch
|
101
|
+
- tw@impac.ch
|
84
102
|
executables: []
|
85
103
|
extensions: []
|
86
104
|
extra_rdoc_files: []
|
@@ -92,6 +110,8 @@ files:
|
|
92
110
|
- lib/deltavista_crif_dva_interface/delta_vista_service.rb
|
93
111
|
- lib/deltavista_crif_dva_interface/errors.rb
|
94
112
|
- lib/deltavista_crif_dva_interface/restful_service.rb
|
113
|
+
- lib/deltavista_crif_dva_interface/soap_config.rb
|
114
|
+
- lib/deltavista_crif_dva_interface/soap_converter.rb
|
95
115
|
- lib/deltavista_crif_dva_interface/version.rb
|
96
116
|
- lib/deltavista_crif_dva_interface/xml_converter.rb
|
97
117
|
- lib/deltavista_crif_dva_interface.rb
|