Avatax_TaxService 1.0.9 → 1.0.10
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.
- checksums.yaml +8 -8
- data/Avatax_TaxService.gemspec +4 -6
- data/lib/avatax_taxservice.rb +177 -358
- data/lib/template_adjusttax.erb +2 -2
- data/lib/template_gettaxhistory.erb +0 -1
- data/lib/template_posttax.erb +7 -0
- data/test/test_adjtax.rb +3 -1
- data/test/test_gettax.rb +35 -46
- data/test/test_gettaxhistory.rb +6 -3
- data/test/test_reconciletaxhistory.rb +2 -15
- metadata +2 -11
- data/lib/xpath_adjtax.txt +0 -74
- data/lib/xpath_cancel.txt +0 -10
- data/lib/xpath_commit.txt +0 -10
- data/lib/xpath_gettax.txt +0 -74
- data/lib/xpath_gettaxhistory.txt +0 -128
- data/lib/xpath_isauthorized.txt +0 -4
- data/lib/xpath_ping.txt +0 -9
- data/lib/xpath_post.txt +0 -9
- data/lib/xpath_reconciletaxhistory.txt +0 -31
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MzljMDBmYjY0MTllMGIzNzFjZWMzNjI1Y2YwMmExYmQzOGUyYzZhNg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
Nzg1NTBmYWI1YWE4Nzg5Yjc1OTMyY2U5NDA0MDgzZGYwM2Y5YjBjZg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZTk5N2FmYmZiNDNmYTM3MDQwN2Q2MGRiMDE1OTA2MDMzZDlmZDcxY2M3Nzgy
|
10
|
+
Y2NiMDU4ZDkxNGMxOGJlOTNhYjA4NTk5YmJkZWRjY2I0YjliZGU2OThhMzVm
|
11
|
+
OTA5MzlmY2IwMGEwNzc4MjcwZGVmNjdiYWY4ZDVlODE0Y2FiMGM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OTU1MmRjNTI3NmZlNTVkZjU1YzFlOWQ2MTZlNzNhZWFkMzRlZDBjMjdkMTE5
|
14
|
+
ZDliZmUyY2IyNTc3ZDcyNzRhMDNmYWIzMTU0MGNmNmNiYTYwNGNiZjk4MjQx
|
15
|
+
MWY3NzcyNzllNjIzMjhmMDMzNDdlZmM0OWE4ZWM2Zjg5MzcxNDk=
|
data/Avatax_TaxService.gemspec
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "Avatax_TaxService"
|
3
|
-
s.version = "1.0.
|
3
|
+
s.version = "1.0.10"
|
4
4
|
s.date = "2012-10-28"
|
5
5
|
s.author = "Graham S Wilson"
|
6
6
|
s.email = "support@Avalara.com"
|
7
|
-
s.summary = "
|
7
|
+
s.summary = "Avatax SDK for Ruby "
|
8
8
|
s.homepage = "http://www.avalara.com/"
|
9
9
|
s.description = "Ruby SDK provides means of communication with Avatax Web Services."
|
10
10
|
s.license = 'MIT'
|
11
11
|
s.files = ["lib/tax_log.txt", "lib/taxservice_dev.wsdl", "lib/taxservice_prd.wsdl", "lib/avatax_taxservice.rb",
|
12
12
|
"lib/template_adjusttax.erb", "lib/template_canceltax.erb", "lib/template_committax.erb","lib/template_gettax.erb",
|
13
13
|
"lib/template_gettaxhistory.erb","lib/template_isauthorized.erb","lib/template_ping.erb","lib/template_posttax.erb",
|
14
|
-
"lib/template_reconciletaxhistory.erb","
|
15
|
-
"
|
16
|
-
"test/test_adjtax.rb","test/test_gettax.rb","test/test_gettaxhistory.rb","test/test_reconciletaxhistory.rb", "Avatax_TaxService.gemspec",
|
17
|
-
"Avatax Ruby SDK Guide.docx", "LICENSE.txt"]
|
14
|
+
"lib/template_reconciletaxhistory.erb","test/test_adjtax.rb","test/test_gettax.rb","test/test_gettaxhistory.rb",
|
15
|
+
"test/test_reconciletaxhistory.rb", "Avatax_TaxService.gemspec","Avatax Ruby SDK Guide.docx", "LICENSE.txt"]
|
18
16
|
s.add_dependency "nokogiri", ">= 1.4.0"
|
19
17
|
s.add_dependency "savon", ">= 2.3.0"
|
20
18
|
s.required_ruby_version = '>= 1.9.1'
|
data/lib/avatax_taxservice.rb
CHANGED
@@ -1,12 +1,18 @@
|
|
1
1
|
require 'savon'
|
2
2
|
require 'erb'
|
3
|
-
require 'nokogiri'
|
4
3
|
require 'benchmark'
|
5
4
|
|
6
5
|
module AvaTax
|
7
6
|
#Avalara tax class
|
8
7
|
class TaxService
|
9
8
|
def initialize(credentials)
|
9
|
+
|
10
|
+
#Retrieve gemspec details
|
11
|
+
spec = Gem::Specification.find_by_name("Avatax_TaxService")
|
12
|
+
#Set @def_locn to the Avatax-x.x.x gem install library. This enables the ruby programs to
|
13
|
+
#find other objects that it needs.
|
14
|
+
gem_root = spec.gem_dir
|
15
|
+
@def_locn = gem_root + "/lib"
|
10
16
|
|
11
17
|
#Extract data from hash
|
12
18
|
username = credentials[:username]
|
@@ -15,31 +21,34 @@ module AvaTax
|
|
15
21
|
clientname = credentials[:clientname]
|
16
22
|
adapter = credentials[:adapter]
|
17
23
|
machine = credentials[:machine]
|
24
|
+
use_production_account = credentials[:use_production_account]
|
18
25
|
|
19
26
|
#Set credentials and Profile information
|
20
27
|
@username = username == nil ? "" : username
|
21
28
|
@password = password == nil ? "" : password
|
22
29
|
@name = name == nil ? "" : name
|
23
|
-
@clientname = clientname == nil ? "" : clientname
|
24
|
-
@adapter = adapter == nil
|
30
|
+
@clientname = (clientname == nil or clientname == "") ? "Avatax SDK for Ruby Default Client Name" : clientname
|
31
|
+
@adapter = (adapter == nil or adapter == "") ? spec.summary + spec.version.to_s : adapter
|
25
32
|
@machine = machine == nil ? "" : machine
|
33
|
+
@use_production_account = (use_production_account != true) ? false : use_production_account
|
26
34
|
|
27
|
-
#Set @def_locn to the Avatax-x.x.x gem install library. This enables the ruby programs to
|
28
|
-
#find other objects that it needs.
|
29
|
-
spec = Gem::Specification.find_by_name("Avatax_TaxService")
|
30
|
-
gem_root = spec.gem_dir
|
31
|
-
@def_locn = gem_root + "/lib"
|
32
35
|
|
33
36
|
#Header for response data
|
34
37
|
@responsetime_hdr = " (User) (System) (Total) (Real)"
|
35
38
|
|
36
39
|
#Open Avatax Error Log
|
37
40
|
@log = File.new(@def_locn + '/tax_log.txt', "w")
|
38
|
-
@log.puts "#{Time.now}: Tax service started"
|
39
41
|
|
40
42
|
#Get service details from WSDL - control_array[2] contains the WSDL read from the address_control file
|
41
|
-
#log :false turns off HTTP logging
|
42
|
-
|
43
|
+
#log :false turns off HTTP logging. Select either Dev or Prod depending on the value of the boolean value 'use_production_account'
|
44
|
+
if @use_production_account
|
45
|
+
@log.puts "#{Time.now}: Avalara Production Tax service started"
|
46
|
+
@client = Savon.client(wsdl: @def_locn + '/taxservice_prd.wsdl', log: false)
|
47
|
+
else
|
48
|
+
@log.puts "#{Time.now}: Avalara Development Tax service started"
|
49
|
+
@client = Savon.client(wsdl: @def_locn + '/taxservice_dev.wsdl', log: false)
|
50
|
+
end
|
51
|
+
|
43
52
|
|
44
53
|
#Read in the SOAP template for Get tax
|
45
54
|
begin
|
@@ -105,42 +114,51 @@ module AvaTax
|
|
105
114
|
end
|
106
115
|
|
107
116
|
# Create hash for validate result
|
108
|
-
@
|
117
|
+
@response = Hash.new
|
109
118
|
end
|
110
119
|
|
111
120
|
####################################################################################################
|
112
121
|
# ping - Verifies connectivity to the web service and returns version information about the service.
|
113
122
|
####################################################################################################
|
114
|
-
def ping(
|
115
|
-
|
116
|
-
|
123
|
+
def ping(document)
|
124
|
+
|
125
|
+
@service = 'Ping'
|
126
|
+
|
127
|
+
#Extract data from document hash
|
128
|
+
xtract(document)
|
117
129
|
|
118
130
|
# Subsitute real vales for template place holders
|
119
131
|
@soap = @template_ping.result(binding)
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
132
|
+
if @debug
|
133
|
+
@log.puts "#{Time.now}: SOAP request created:"
|
134
|
+
@log.puts @soap
|
135
|
+
end
|
136
|
+
|
124
137
|
# Make the call to the Avalara service
|
125
138
|
begin
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
@
|
139
|
+
# Call using debug
|
140
|
+
if @debug
|
141
|
+
# Use Ruby built in Benchmark function to record response times
|
142
|
+
@log.puts "#{Time.now}: Calling #{@service} Service"
|
143
|
+
time = Benchmark.measure do
|
144
|
+
# Call Ping Service
|
145
|
+
@response = @client.call(:ping, xml: @soap).to_hash
|
146
|
+
end
|
147
|
+
@log.puts "Response times for Ping:"
|
148
|
+
@log.puts @responsetime_hdr
|
149
|
+
@log.puts time
|
150
|
+
else
|
151
|
+
# Call Ping Service
|
152
|
+
@response = @client.call(:ping, xml: @soap).to_hash
|
140
153
|
end
|
154
|
+
|
155
|
+
return @response
|
156
|
+
|
157
|
+
#Capture unexpected errors
|
158
|
+
rescue Savon::Error => error
|
159
|
+
abend(error)
|
141
160
|
end
|
142
|
-
|
143
|
-
return @return_data
|
161
|
+
|
144
162
|
end
|
145
163
|
|
146
164
|
####################################################################################################
|
@@ -148,6 +166,8 @@ module AvaTax
|
|
148
166
|
####################################################################################################
|
149
167
|
def gettax(document)
|
150
168
|
|
169
|
+
@service = 'GetTax'
|
170
|
+
|
151
171
|
#Extract data from document hash
|
152
172
|
xtract(document)
|
153
173
|
|
@@ -174,14 +194,12 @@ module AvaTax
|
|
174
194
|
|
175
195
|
# Subsitute template place holders with real values
|
176
196
|
@soap = @template_gettax.result(binding)
|
197
|
+
# If in debug mode write SOAP request to log
|
177
198
|
if @debug
|
178
199
|
@log.puts "#{Time.now}: SOAP request created:"
|
179
|
-
|
200
|
+
@log.puts @soap
|
180
201
|
end
|
181
202
|
|
182
|
-
#Clear return hash
|
183
|
-
@return_data.clear
|
184
|
-
|
185
203
|
# Make the call to the Avalara service
|
186
204
|
begin
|
187
205
|
# Call using debug
|
@@ -189,53 +207,24 @@ module AvaTax
|
|
189
207
|
# Use Ruby built in Benchmark function to record response times
|
190
208
|
@log.puts "#{Time.now}: Calling GetTax Service for DocCode: #{@doccode}"
|
191
209
|
time = Benchmark.measure do
|
192
|
-
|
193
|
-
@response = @client.call(:get_tax, xml: @soap).
|
210
|
+
# Call GetTax Service
|
211
|
+
@response = @client.call(:get_tax, xml: @soap).to_hash
|
194
212
|
end
|
195
213
|
@log.puts "Response times for GetTax:"
|
196
|
-
|
197
|
-
|
214
|
+
@log.puts @responsetime_hdr
|
215
|
+
@log.puts time
|
198
216
|
else
|
199
217
|
# Call GetTax Service
|
200
|
-
@response = @client.call(:get_tax, xml: @soap).
|
218
|
+
@response = @client.call(:get_tax, xml: @soap).to_hash
|
201
219
|
end
|
202
|
-
#Capture unexpected errors
|
203
|
-
rescue
|
204
|
-
@log.puts "#{Time.now}: Error calling GetTax service ... check that your account name and password are correct."
|
205
|
-
end
|
206
|
-
|
207
|
-
#Parse the response
|
208
|
-
#Read in an array of XPATH pointers
|
209
|
-
@gettax_xpath = File.readlines(@def_locn + '/xpath_gettax.txt')
|
210
220
|
|
211
|
-
# Call using debug
|
212
|
-
if @debug
|
213
|
-
# Use Ruby built in Benchmark function to record response times
|
214
|
-
@log.puts "#{Time.now}: Parsing the GeTax response:"
|
215
|
-
time = Benchmark.measure do
|
216
|
-
# Load the response into a Nokogiri object and remove namespaces
|
217
|
-
@doc = Nokogiri::XML(@response).remove_namespaces!
|
218
|
-
#Parse the returned repsonse and return to caller as a hash
|
219
|
-
@gettax_xpath.each do |xpath|
|
220
|
-
if xpath.rstrip.length != 0
|
221
|
-
@return_data[xpath.gsub('/', '').chomp.to_sym] = @doc.search(xpath).map{ |n| n.text}
|
222
|
-
end
|
223
|
-
end
|
224
|
-
end
|
225
|
-
@log.puts @responsetime_hdr
|
226
|
-
@log.puts time
|
227
|
-
else
|
228
|
-
# Load the response into a Nokogiri object and remove namespaces
|
229
|
-
@doc = Nokogiri::XML(@response).remove_namespaces!
|
230
|
-
#Parse the returned repsonse and return to caller as a hash
|
231
|
-
@gettax_xpath.each do |xpath|
|
232
|
-
if xpath.rstrip.length != 0
|
233
|
-
@return_data[xpath.gsub('/', '').chomp.to_sym] = @doc.search(xpath).map{ |n| n.text}
|
234
|
-
end
|
235
|
-
end
|
236
|
-
end
|
237
221
|
#Return data to calling program
|
238
|
-
return @
|
222
|
+
return @response
|
223
|
+
|
224
|
+
#Capture unexpected errors
|
225
|
+
rescue Savon::Error => error
|
226
|
+
abend(error)
|
227
|
+
end
|
239
228
|
end
|
240
229
|
|
241
230
|
####################################################################################################
|
@@ -243,6 +232,8 @@ module AvaTax
|
|
243
232
|
####################################################################################################
|
244
233
|
def adjusttax(document)
|
245
234
|
|
235
|
+
@service = 'AdjustTax'
|
236
|
+
|
246
237
|
#Extract data from document hash
|
247
238
|
xtract(document)
|
248
239
|
|
@@ -259,8 +250,8 @@ module AvaTax
|
|
259
250
|
@log.puts "#{Time.now}: Address #{line1}, #{line2}, #{line3}, #{city}, #{region}, #{postalcode}, #{country} failed to validate."
|
260
251
|
end
|
261
252
|
@log.puts "Response times for Address Validation:"
|
262
|
-
|
263
|
-
|
253
|
+
@log.puts @responsetime_hdr
|
254
|
+
@log.puts time
|
264
255
|
else
|
265
256
|
#Validate with no benchmarking
|
266
257
|
valaddr
|
@@ -271,12 +262,9 @@ module AvaTax
|
|
271
262
|
@soap = @template_adjust.result(binding)
|
272
263
|
if @debug
|
273
264
|
@log.puts "#{Time.now}: SOAP request created:"
|
274
|
-
|
265
|
+
@log.puts @soap
|
275
266
|
end
|
276
267
|
|
277
|
-
#Clear return hash
|
278
|
-
@return_data.clear
|
279
|
-
|
280
268
|
# Make the call to the Avalara service
|
281
269
|
begin
|
282
270
|
# Call using debug
|
@@ -285,52 +273,24 @@ module AvaTax
|
|
285
273
|
@log.puts "#{Time.now}: Calling AdjustTax Service for DocCode: #{@doccode}"
|
286
274
|
time = Benchmark.measure do
|
287
275
|
# Call AdjustTax Service
|
288
|
-
@response = @client.call(:adjust_tax, xml: @soap).
|
276
|
+
@response = @client.call(:adjust_tax, xml: @soap).to_hash
|
289
277
|
end
|
290
278
|
@log.puts "Response times for AdjustTax:"
|
291
|
-
|
292
|
-
|
279
|
+
@log.puts @responsetime_hdr
|
280
|
+
@log.puts time
|
293
281
|
else
|
294
|
-
|
295
|
-
@response = @client.call(:adjust_tax, xml: @soap).
|
282
|
+
# Call AdjustTax Service
|
283
|
+
@response = @client.call(:adjust_tax, xml: @soap).to_hash
|
296
284
|
end
|
297
|
-
#Capture unexpected errors
|
298
|
-
rescue
|
299
|
-
@log.puts "#{Time.now}: Error calling AdjustTax service ... check that your account name and password are correct."
|
300
|
-
end
|
301
285
|
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
# Use Ruby built in Benchmark function to record response times
|
309
|
-
@log.puts "#{Time.now}: Parsing the AdjustTax response:"
|
310
|
-
time = Benchmark.measure do
|
311
|
-
# Load the response into a Nokogiri object and remove namespaces
|
312
|
-
@doc = Nokogiri::XML(@response).remove_namespaces!
|
313
|
-
#Parse the returned repsonse and return to caller as a hash
|
314
|
-
@adjtax_xpath.each do |xpath|
|
315
|
-
if xpath.rstrip.length != 0
|
316
|
-
@return_data[xpath.gsub('/', '').chomp.to_sym] = @doc.search(xpath).map{ |n| n.text}
|
317
|
-
end
|
318
|
-
end
|
319
|
-
end
|
320
|
-
@log.puts @responsetime_hdr
|
321
|
-
@log.puts time
|
322
|
-
else
|
323
|
-
# Load the response into a Nokogiri object and remove namespaces
|
324
|
-
@doc = Nokogiri::XML(@response).remove_namespaces!
|
325
|
-
#Parse the returned repsonse and return to caller as a hash
|
326
|
-
@adjtax_xpath.each do |xpath|
|
327
|
-
if xpath.rstrip.length != 0
|
328
|
-
@return_data[xpath.gsub('/', '').chomp.to_sym] = @doc.search(xpath).map{ |n| n.text}
|
329
|
-
end
|
330
|
-
end
|
286
|
+
#Return data to calling program
|
287
|
+
return @response
|
288
|
+
|
289
|
+
#Capture unexpected errors
|
290
|
+
rescue Savon::Error => error
|
291
|
+
abend(error)
|
331
292
|
end
|
332
|
-
|
333
|
-
return @return_data
|
293
|
+
|
334
294
|
end
|
335
295
|
|
336
296
|
####################################################################################################
|
@@ -338,6 +298,8 @@ module AvaTax
|
|
338
298
|
####################################################################################################
|
339
299
|
def posttax(document)
|
340
300
|
|
301
|
+
@service = 'PostTax'
|
302
|
+
|
341
303
|
#Extract data from document hash
|
342
304
|
xtract(document)
|
343
305
|
|
@@ -345,12 +307,9 @@ module AvaTax
|
|
345
307
|
@soap = @template_post.result(binding)
|
346
308
|
if @debug
|
347
309
|
@log.puts "#{Time.now}: SOAP request created:"
|
348
|
-
|
310
|
+
@log.puts @soap
|
349
311
|
end
|
350
312
|
|
351
|
-
#Clear return hash
|
352
|
-
@return_data.clear
|
353
|
-
|
354
313
|
# Make the call to the Avalara service
|
355
314
|
begin
|
356
315
|
# Call using debug
|
@@ -359,58 +318,32 @@ module AvaTax
|
|
359
318
|
@log.puts "#{Time.now}: Calling PostTax Service for DocCode: #{@doccode}"
|
360
319
|
time = Benchmark.measure do
|
361
320
|
# Call PostTax Service
|
362
|
-
@response = @client.call(:post_tax, xml: @soap).
|
321
|
+
@response = @client.call(:post_tax, xml: @soap).to_hash
|
363
322
|
end
|
364
323
|
@log.puts "Response times for PostTax:"
|
365
|
-
|
366
|
-
|
324
|
+
@log.puts @responsetime_hdr
|
325
|
+
@log.puts time
|
367
326
|
else
|
368
|
-
|
369
|
-
@response = @client.call(:post_tax, xml: @soap).
|
327
|
+
# Call PostTax Service
|
328
|
+
@response = @client.call(:post_tax, xml: @soap).to_hash
|
370
329
|
end
|
371
|
-
#Capture unexpected errors
|
372
|
-
rescue
|
373
|
-
@log.puts "#{Time.now}: Error calling PostTax service ... check that your account name and password are correct."
|
374
|
-
end
|
375
|
-
|
376
|
-
#Parse the response
|
377
|
-
#Read in an array of XPATH pointers
|
378
|
-
@posttax_xpath = File.readlines(@def_locn + '/xpath_post.txt')
|
379
330
|
|
380
|
-
# Call using debug
|
381
|
-
if @debug
|
382
|
-
# Use Ruby built in Benchmark function to record response times
|
383
|
-
@log.puts "#{Time.now}: Parsing the PostTax response:"
|
384
|
-
time = Benchmark.measure do
|
385
|
-
# Load the response into a Nokogiri object and remove namespaces
|
386
|
-
@doc = Nokogiri::XML(@response).remove_namespaces!
|
387
|
-
#Parse the returned repsonse and return to caller as a hash
|
388
|
-
@posttax_xpath.each do |xpath|
|
389
|
-
if xpath.rstrip.length != 0
|
390
|
-
@return_data[xpath.gsub('/', '').chomp.to_sym] = @doc.search(xpath).map{ |n| n.text}
|
391
|
-
end
|
392
|
-
end
|
393
|
-
end
|
394
|
-
@log.puts @responsetime_hdr
|
395
|
-
@log.puts time
|
396
|
-
else
|
397
|
-
# Load the response into a Nokogiri object and remove namespaces
|
398
|
-
@doc = Nokogiri::XML(@response).remove_namespaces!
|
399
|
-
#Parse the returned repsonse and return to caller as a hash
|
400
|
-
@posttax_xpath.each do |xpath|
|
401
|
-
if xpath.rstrip.length != 0
|
402
|
-
@return_data[xpath.gsub('/', '').chomp.to_sym] = @doc.search(xpath).map{ |n| n.text}
|
403
|
-
end
|
404
|
-
end
|
405
|
-
end
|
406
331
|
#Return data to calling program
|
407
|
-
return @
|
332
|
+
return @response
|
333
|
+
|
334
|
+
#Capture unexpected errors
|
335
|
+
rescue Savon::Error => error
|
336
|
+
abend(error)
|
337
|
+
end
|
338
|
+
|
408
339
|
end
|
409
340
|
|
410
341
|
####################################################################################################
|
411
342
|
# committax - Calls the Avatax CommitTax Service
|
412
343
|
####################################################################################################
|
413
344
|
def committax(document)
|
345
|
+
|
346
|
+
@service = 'CommitTax'
|
414
347
|
|
415
348
|
#Extract data from document hash
|
416
349
|
xtract(document)
|
@@ -419,12 +352,9 @@ module AvaTax
|
|
419
352
|
@soap = @template_commit.result(binding)
|
420
353
|
if @debug
|
421
354
|
@log.puts "#{Time.now}: SOAP request created:"
|
422
|
-
|
355
|
+
@log.puts @soap
|
423
356
|
end
|
424
357
|
|
425
|
-
#Clear return hash
|
426
|
-
@return_data.clear
|
427
|
-
|
428
358
|
# Make the call to the Avalara service
|
429
359
|
begin
|
430
360
|
# Call using debug
|
@@ -433,52 +363,23 @@ module AvaTax
|
|
433
363
|
@log.puts "#{Time.now}: Calling CommitTax Service for DocCode: #{@doccode}"
|
434
364
|
time = Benchmark.measure do
|
435
365
|
# Call CommitTax Service
|
436
|
-
@response = @client.call(:commit_tax, xml: @soap).
|
366
|
+
@response = @client.call(:commit_tax, xml: @soap).to_hash
|
437
367
|
end
|
438
368
|
@log.puts "Response times for CommitTax:"
|
439
369
|
@log.puts @responsetime_hdr
|
440
370
|
@log.puts time
|
441
371
|
else
|
442
372
|
# Call CommitTax Service
|
443
|
-
@response = @client.call(:commit_tax, xml: @soap).
|
373
|
+
@response = @client.call(:commit_tax, xml: @soap).to_hash
|
444
374
|
end
|
445
|
-
#Capture unexpected errors
|
446
|
-
rescue
|
447
|
-
@log.puts "#{Time.now}: Error calling CommitTax service ... check that your account name and password are correct."
|
448
|
-
end
|
449
|
-
|
450
|
-
#Parse the response
|
451
|
-
#Read in an array of XPATH pointers
|
452
|
-
@committax_xpath = File.readlines(@def_locn + '/xpath_commit.txt')
|
453
375
|
|
454
|
-
# Call using debug
|
455
|
-
if @debug
|
456
|
-
# Use Ruby built in Benchmark function to record response times
|
457
|
-
@log.puts "#{Time.now}: Parsing the commitTax response:"
|
458
|
-
time = Benchmark.measure do
|
459
|
-
# Load the response into a Nokogiri object and remove namespaces
|
460
|
-
@doc = Nokogiri::XML(@response).remove_namespaces!
|
461
|
-
#Parse the returned repsonse and return to caller as a hash
|
462
|
-
@committax_xpath.each do |xpath|
|
463
|
-
if xpath.rstrip.length != 0
|
464
|
-
@return_data[xpath.gsub('/', '').chomp.to_sym] = @doc.search(xpath).map{ |n| n.text}
|
465
|
-
end
|
466
|
-
end
|
467
|
-
end
|
468
|
-
@log.puts @responsetime_hdr
|
469
|
-
@log.puts time
|
470
|
-
else
|
471
|
-
# Load the response into a Nokogiri object and remove namespaces
|
472
|
-
@doc = Nokogiri::XML(@response).remove_namespaces!
|
473
|
-
#Parse the returned repsonse and return to caller as a hash
|
474
|
-
@Committax_xpath.each do |xpath|
|
475
|
-
if xpath.rstrip.length != 0
|
476
|
-
@return_data[xpath.gsub('/', '').chomp.to_sym] = @doc.search(xpath).map{ |n| n.text}
|
477
|
-
end
|
478
|
-
end
|
479
|
-
end
|
480
376
|
#Return data to calling program
|
481
|
-
return @
|
377
|
+
return @response
|
378
|
+
|
379
|
+
#Capture unexpected errors
|
380
|
+
rescue Savon::Error => error
|
381
|
+
abend(error)
|
382
|
+
end
|
482
383
|
end
|
483
384
|
|
484
385
|
####################################################################################################
|
@@ -486,6 +387,8 @@ module AvaTax
|
|
486
387
|
####################################################################################################
|
487
388
|
def canceltax(document)
|
488
389
|
|
390
|
+
@service = 'CancelTax'
|
391
|
+
|
489
392
|
#Extract data from document hash
|
490
393
|
xtract(document)
|
491
394
|
|
@@ -493,12 +396,9 @@ module AvaTax
|
|
493
396
|
@soap = @template_cancel.result(binding)
|
494
397
|
if @debug
|
495
398
|
@log.puts "#{Time.now}: SOAP request created:"
|
496
|
-
|
399
|
+
@log.puts @soap
|
497
400
|
end
|
498
401
|
|
499
|
-
#Clear return hash
|
500
|
-
@return_data.clear
|
501
|
-
|
502
402
|
# Make the call to the Avalara service
|
503
403
|
begin
|
504
404
|
# Call using debug
|
@@ -507,52 +407,23 @@ module AvaTax
|
|
507
407
|
@log.puts "#{Time.now}: Calling CancelTax Service for DocCode: #{@doccode}"
|
508
408
|
time = Benchmark.measure do
|
509
409
|
# Call CancelTax Service
|
510
|
-
@response = @client.call(:cancel_tax, xml: @soap).
|
410
|
+
@response = @client.call(:cancel_tax, xml: @soap).to_hash
|
511
411
|
end
|
512
412
|
@log.puts "Response times for CancelTax:"
|
513
|
-
|
514
|
-
|
413
|
+
@log.puts @responsetime_hdr
|
414
|
+
@log.puts time
|
515
415
|
else
|
516
|
-
|
517
|
-
@response = @client.call(:cancel_tax, xml: @soap).
|
416
|
+
# Call CancelTax Service
|
417
|
+
@response = @client.call(:cancel_tax, xml: @soap).to_hash
|
518
418
|
end
|
519
|
-
#Capture unexpected errors
|
520
|
-
rescue
|
521
|
-
@log.puts "#{Time.now}: Error calling CancelTax service ... check that your account name and password are correct."
|
522
|
-
end
|
523
|
-
|
524
|
-
#Parse the response
|
525
|
-
#Read in an array of XPATH pointers
|
526
|
-
@canceltax_xpath = File.readlines(@def_locn + '/xpath_cancel.txt')
|
527
419
|
|
528
|
-
# Call using debug
|
529
|
-
if @debug
|
530
|
-
# Use Ruby built in Benchmark function to record response times
|
531
|
-
@log.puts "#{Time.now}: Parsing the CancelTax response:"
|
532
|
-
time = Benchmark.measure do
|
533
|
-
# Load the response into a Nokogiri object and remove namespaces
|
534
|
-
@doc = Nokogiri::XML(@response).remove_namespaces!
|
535
|
-
#Parse the returned repsonse and return to caller as a hash
|
536
|
-
@canceltax_xpath.each do |xpath|
|
537
|
-
if xpath.rstrip.length != 0
|
538
|
-
@return_data[xpath.gsub('/', '').chomp.to_sym] = @doc.search(xpath).map{ |n| n.text}
|
539
|
-
end
|
540
|
-
end
|
541
|
-
end
|
542
|
-
@log.puts @responsetime_hdr
|
543
|
-
@log.puts time
|
544
|
-
else
|
545
|
-
# Load the response into a Nokogiri object and remove namespaces
|
546
|
-
@doc = Nokogiri::XML(@response).remove_namespaces!
|
547
|
-
#Parse the returned repsonse and return to caller as a hash
|
548
|
-
@canceltax_xpath.each do |xpath|
|
549
|
-
if xpath.rstrip.length != 0
|
550
|
-
@return_data[xpath.gsub('/', '').chomp.to_sym] = @doc.search(xpath).map{ |n| n.text}
|
551
|
-
end
|
552
|
-
end
|
553
|
-
end
|
554
420
|
#Return data to calling program
|
555
|
-
return @
|
421
|
+
return @response
|
422
|
+
|
423
|
+
#Capture unexpected errors
|
424
|
+
rescue Savon::Error => error
|
425
|
+
abend(error)
|
426
|
+
end
|
556
427
|
end
|
557
428
|
|
558
429
|
####################################################################################################
|
@@ -560,6 +431,8 @@ module AvaTax
|
|
560
431
|
####################################################################################################
|
561
432
|
def gettaxhistory(document)
|
562
433
|
|
434
|
+
@service = 'GetTaxHistory'
|
435
|
+
|
563
436
|
#Extract data from document hash
|
564
437
|
xtract(document)
|
565
438
|
|
@@ -567,12 +440,9 @@ module AvaTax
|
|
567
440
|
@soap = @template_gettaxhistory.result(binding)
|
568
441
|
if @debug
|
569
442
|
@log.puts "#{Time.now}: SOAP request created:"
|
570
|
-
|
443
|
+
@log.puts @soap
|
571
444
|
end
|
572
445
|
|
573
|
-
#Clear return hash
|
574
|
-
@return_data.clear
|
575
|
-
|
576
446
|
# Make the call to the Avalara service
|
577
447
|
begin
|
578
448
|
# Call using debug
|
@@ -581,52 +451,23 @@ module AvaTax
|
|
581
451
|
@log.puts "#{Time.now}: Calling GetTaxHistory Service"
|
582
452
|
time = Benchmark.measure do
|
583
453
|
# Call GetTaxHistory Service
|
584
|
-
@response = @client.call(:get_tax_history, xml: @soap).
|
454
|
+
@response = @client.call(:get_tax_history, xml: @soap).to_hash
|
585
455
|
end
|
586
456
|
@log.puts "Response times for GetTaxHistory:"
|
587
|
-
|
588
|
-
|
457
|
+
@log.puts @responsetime_hdr
|
458
|
+
@log.puts time
|
589
459
|
else
|
590
|
-
|
591
|
-
@response = @client.call(:get_tax_history, xml: @soap).
|
460
|
+
# Call GetTaxHistory Service
|
461
|
+
@response = @client.call(:get_tax_history, xml: @soap).to_hash
|
592
462
|
end
|
593
|
-
#Capture unexpected errors
|
594
|
-
rescue
|
595
|
-
@log.puts "#{Time.now}: Error calling GetTaxHistory service ... check that your account name and password are correct."
|
596
|
-
end
|
597
|
-
|
598
|
-
#Parse the response
|
599
|
-
#Read in an array of XPATH pointers
|
600
|
-
@gettaxhistory_xpath = File.readlines(@def_locn + '/xpath_gettaxhistory.txt')
|
601
463
|
|
602
|
-
# Call using debug
|
603
|
-
if @debug
|
604
|
-
# Use Ruby built in Benchmark function to record response times
|
605
|
-
@log.puts "#{Time.now}: Parsing the GetTaxHistory response:"
|
606
|
-
time = Benchmark.measure do
|
607
|
-
# Load the response into a Nokogiri object and remove namespaces
|
608
|
-
@doc = Nokogiri::XML(@response).remove_namespaces!
|
609
|
-
#Parse the returned repsonse and return to caller as a hash
|
610
|
-
@gettaxhistory_xpath.each do |xpath|
|
611
|
-
if xpath.rstrip.length != 0
|
612
|
-
@return_data[xpath.gsub('/', '').chomp.gsub('"', '').to_sym] = @doc.search(xpath).map{ |n| n.text}
|
613
|
-
end
|
614
|
-
end
|
615
|
-
end
|
616
|
-
@log.puts @responsetime_hdr
|
617
|
-
@log.puts time
|
618
|
-
else
|
619
|
-
# Load the response into a Nokogiri object and remove namespaces
|
620
|
-
@doc = Nokogiri::XML(@response).remove_namespaces!
|
621
|
-
#Parse the returned repsonse and return to caller as a hash
|
622
|
-
@gettaxhistory_xpath.each do |xpath|
|
623
|
-
if xpath.rstrip.length != 0
|
624
|
-
@return_data[xpath.gsub('/', '').chomp.gsub('"', '').to_sym] = @doc.search(xpath).map{ |n| n.text}
|
625
|
-
end
|
626
|
-
end
|
627
|
-
end
|
628
464
|
#Return data to calling program
|
629
|
-
return @
|
465
|
+
return @response
|
466
|
+
|
467
|
+
#Capture unexpected errors
|
468
|
+
rescue Savon::Error => error
|
469
|
+
abend(error)
|
470
|
+
end
|
630
471
|
end
|
631
472
|
|
632
473
|
####################################################################################################
|
@@ -634,6 +475,9 @@ module AvaTax
|
|
634
475
|
####################################################################################################
|
635
476
|
def reconciletaxhistory(document)
|
636
477
|
|
478
|
+
|
479
|
+
@service = 'ReconcileTaxHistory'
|
480
|
+
|
637
481
|
#Extract data from document hash
|
638
482
|
xtract(document)
|
639
483
|
|
@@ -641,12 +485,9 @@ module AvaTax
|
|
641
485
|
@soap = @template_reconciletaxhistory.result(binding)
|
642
486
|
if @debug
|
643
487
|
@log.puts "#{Time.now}: SOAP request created:"
|
644
|
-
|
488
|
+
@log.puts @soap
|
645
489
|
end
|
646
490
|
|
647
|
-
#Clear return hash
|
648
|
-
@return_data.clear
|
649
|
-
|
650
491
|
# Make the call to the Avalara service
|
651
492
|
begin
|
652
493
|
# Call using debug
|
@@ -655,84 +496,48 @@ module AvaTax
|
|
655
496
|
@log.puts "#{Time.now}: Calling ReconcileTaxHistory Service"
|
656
497
|
time = Benchmark.measure do
|
657
498
|
# Call ReconcileTaxHistory Service
|
658
|
-
@response = @client.call(:reconcile_tax_history, xml: @soap).
|
499
|
+
@response = @client.call(:reconcile_tax_history, xml: @soap).to_hash
|
659
500
|
end
|
660
501
|
@log.puts "Response times for ReconcileTaxHistory:"
|
661
502
|
@log.puts @responsetime_hdr
|
662
503
|
@log.puts time
|
663
504
|
else
|
664
505
|
# Call ReconcileTaxHistory Service
|
665
|
-
@response = @client.call(:reconcile_tax_history, xml: @soap).
|
506
|
+
@response = @client.call(:reconcile_tax_history, xml: @soap).to_hash
|
666
507
|
end
|
667
|
-
#Capture unexpected errors
|
668
|
-
rescue
|
669
|
-
@log.puts "#{Time.now}: Error calling ReconcileTaxHistory service ... check that your account name and password are correct."
|
670
|
-
end
|
671
|
-
|
672
|
-
#Parse the response
|
673
|
-
#Read in an array of XPATH pointers
|
674
|
-
@reconciletaxhistory_xpath = File.readlines(@def_locn + '/xpath_reconciletaxhistory.txt')
|
675
508
|
|
676
|
-
# Call using debug
|
677
|
-
if @debug
|
678
|
-
# Use Ruby built in Benchmark function to record response times
|
679
|
-
@log.puts "#{Time.now}: Parsing the ReconcileTaxHistory response:"
|
680
|
-
time = Benchmark.measure do
|
681
|
-
# Load the response into a Nokogiri object and remove namespaces
|
682
|
-
@doc = Nokogiri::XML(@response).remove_namespaces!
|
683
|
-
#Parse the returned repsonse and return to caller as a hash
|
684
|
-
@reconciletaxhistory_xpath.each do |xpath|
|
685
|
-
if xpath.rstrip.length != 0
|
686
|
-
@return_data[xpath.gsub('/', '').chomp.gsub('"', '').to_sym] = @doc.search(xpath).map{ |n| n.text}
|
687
|
-
end
|
688
|
-
end
|
689
|
-
end
|
690
|
-
@log.puts @responsetime_hdr
|
691
|
-
@log.puts time
|
692
|
-
else
|
693
|
-
# Load the response into a Nokogiri object and remove namespaces
|
694
|
-
@doc = Nokogiri::XML(@response).remove_namespaces!
|
695
|
-
#Parse the returned repsonse and return to caller as a hash
|
696
|
-
@reconciletaxhistory_xpath.each do |xpath|
|
697
|
-
if xpath.rstrip.length != 0
|
698
|
-
@return_data[xpath.gsub('/', '').chomp.gsub('"', '').to_sym] = @doc.search(xpath).map{ |n| n.text}
|
699
|
-
end
|
700
|
-
end
|
701
|
-
end
|
702
509
|
#Return data to calling program
|
703
|
-
return @
|
510
|
+
return @response
|
511
|
+
|
512
|
+
#Capture unexpected errors
|
513
|
+
rescue Savon::Error => error
|
514
|
+
abend(error)
|
515
|
+
end
|
704
516
|
end
|
705
517
|
|
706
518
|
############################################################################################################
|
707
519
|
# isauthorized - Verifies connectivity to the web service and returns expiry information about the service.
|
708
520
|
############################################################################################################
|
709
521
|
def isauthorized(operation = nil)
|
522
|
+
|
523
|
+
@service = 'IsAuthorized'
|
524
|
+
|
710
525
|
#Read in the SOAP template
|
711
526
|
@operation = operation == nil ? "?" : operation
|
712
527
|
|
713
528
|
# Subsitute real vales for template place holders
|
714
529
|
@soap = @template_isauthorized.result(binding)
|
715
530
|
|
716
|
-
#Clear return hash
|
717
|
-
@return_data.clear
|
718
|
-
|
719
531
|
# Make the call to the Avalara service
|
720
532
|
begin
|
721
|
-
@response = @client.call(:is_authorized, xml: @soap).
|
722
|
-
rescue
|
723
|
-
@log.puts "#{Time.now}: Error calling IsAuthorized service ... check username and password"
|
724
|
-
end
|
725
|
-
|
726
|
-
# Load the response into a Nokogiri object and remove namespaces
|
727
|
-
@doc = Nokogiri::XML(@response).remove_namespaces!
|
728
|
-
|
729
|
-
#Read in an array of XPATH pointers
|
730
|
-
@isauthorized_xpath = File.readlines(@def_locn + '/xpath_isauthorized.txt')
|
533
|
+
@response = @client.call(:is_authorized, xml: @soap).to_hash
|
731
534
|
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
535
|
+
return @response
|
536
|
+
|
537
|
+
#Capture unexpected errors
|
538
|
+
rescue Savon::Error => error
|
539
|
+
abend(error)
|
540
|
+
end
|
736
541
|
end
|
737
542
|
|
738
543
|
private
|
@@ -816,6 +621,7 @@ module AvaTax
|
|
816
621
|
pagesize = document[:pagesize]
|
817
622
|
debug = document[:debug]
|
818
623
|
validate = document[:validate]
|
624
|
+
message = document[:message]
|
819
625
|
|
820
626
|
#Set parms passed by user - If Nil then default else use passed value
|
821
627
|
@companycode = companycode == nil ? "" : companycode
|
@@ -866,9 +672,22 @@ module AvaTax
|
|
866
672
|
@lastdoccode = lastdoccode == nil ? "" : lastdoccode
|
867
673
|
@pagesize = pagesize == nil ? "" : pagesize
|
868
674
|
@debug = debug == nil ? false : debug
|
869
|
-
@
|
675
|
+
@ping_message = message
|
870
676
|
|
871
677
|
end
|
872
|
-
|
678
|
+
|
679
|
+
############################################################################################################
|
680
|
+
# abend - Unexpected error handling
|
681
|
+
############################################################################################################
|
682
|
+
def abend(error)
|
683
|
+
@log.puts "An unexpected error occurred: Response from server = #{error}"
|
684
|
+
@log.puts "#{Time.now}: Error calling #{@service} service ... check that your account name and password are correct."
|
685
|
+
@response = error.to_hash
|
686
|
+
@response[:result_code] = 'Error'
|
687
|
+
@response[:summary] = @response[:fault][:faultcode]
|
688
|
+
@response[:details] = @response[:fault][:faultstring]
|
689
|
+
return @response
|
690
|
+
end
|
691
|
+
|
873
692
|
end
|
874
693
|
end
|