vizjerai-avalara 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.gitignore +25 -0
- data/CHANGELOG.md +14 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README +5 -0
- data/Rakefile +10 -0
- data/lib/avalara/api.rb +26 -0
- data/lib/avalara/configuration.rb +31 -0
- data/lib/avalara/errors.rb +8 -0
- data/lib/avalara/request/address.rb +15 -0
- data/lib/avalara/request/cancel_tax.rb +18 -0
- data/lib/avalara/request/detail_level.rb +13 -0
- data/lib/avalara/request/invoice.rb +40 -0
- data/lib/avalara/request/invoice_address.rb +19 -0
- data/lib/avalara/request/line.rb +24 -0
- data/lib/avalara/request.rb +13 -0
- data/lib/avalara/response/address_validation.rb +24 -0
- data/lib/avalara/response/cancel_tax.rb +20 -0
- data/lib/avalara/response/cancel_tax_result.rb +20 -0
- data/lib/avalara/response/invoice.rb +38 -0
- data/lib/avalara/response/message.rb +13 -0
- data/lib/avalara/response/tax.rb +24 -0
- data/lib/avalara/response/tax_address.rb +16 -0
- data/lib/avalara/response/tax_detail.rb +16 -0
- data/lib/avalara/response/tax_line.rb +22 -0
- data/lib/avalara/response/validation_address.rb +46 -0
- data/lib/avalara/response.rb +16 -0
- data/lib/avalara/types/date.rb +10 -0
- data/lib/avalara/types/stash.rb +28 -0
- data/lib/avalara/types.rb +8 -0
- data/lib/avalara/version.rb +5 -0
- data/lib/avalara.rb +121 -0
- data/spec/avalara.yml.example +3 -0
- data/spec/factories/addresses.rb +11 -0
- data/spec/factories/cancel_taxs.rb +9 -0
- data/spec/factories/detail_levels.rb +9 -0
- data/spec/factories/invoice_addresses.rb +15 -0
- data/spec/factories/invoices.rb +18 -0
- data/spec/factories/lines.rb +16 -0
- data/spec/fixtures/net/Avalara/_cancel_tax/successful_response.yml +59 -0
- data/spec/fixtures/net/Avalara/_cancel_tax/with_missing_doc_code/unsuccessful_response.yml +75 -0
- data/spec/fixtures/net/Avalara/_geographical_tax/successful_response.yml +92 -0
- data/spec/fixtures/net/Avalara/_geographical_tax/with_incomplete_address/unsuccessful_response.yml +66 -0
- data/spec/fixtures/net/Avalara/_get_tax/successful_response.yml +151 -0
- data/spec/fixtures/net/Avalara/_get_tax/with_missing_required_field/unsuccessful_response.yml +73 -0
- data/spec/fixtures/net/Avalara/_validate_address/successful_response.yml +76 -0
- data/spec/fixtures/net/Avalara/_validate_address/with_missing_postal_code/unsuccessful_response.yml +68 -0
- data/spec/models/avalara/configuration_spec.rb +55 -0
- data/spec/models/avalara/request/address_spec.rb +20 -0
- data/spec/models/avalara/request/detail_level_spec.rb +18 -0
- data/spec/models/avalara/request/invoice_address_spec.rb +24 -0
- data/spec/models/avalara/request/invoice_spec.rb +32 -0
- data/spec/models/avalara/request/line_spec.rb +25 -0
- data/spec/models/avalara_spec.rb +300 -0
- data/spec/spec_helper.rb +19 -0
- data/spec/support/avalara.rb +38 -0
- data/spec/support/factory_girl.rb +20 -0
- data/spec/support/vcr.rb +18 -0
- data/vizjerai-avalara.gemspec +31 -0
- metadata +257 -0
data/lib/avalara.rb
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'avalara/version'
|
4
|
+
require 'avalara/errors'
|
5
|
+
require 'avalara/configuration'
|
6
|
+
|
7
|
+
require 'avalara/api'
|
8
|
+
|
9
|
+
require 'avalara/types'
|
10
|
+
require 'avalara/request'
|
11
|
+
require 'avalara/response'
|
12
|
+
|
13
|
+
module Avalara
|
14
|
+
|
15
|
+
def self.configuration
|
16
|
+
@@_configuration ||= Avalara::Configuration.new
|
17
|
+
yield @@_configuration if block_given?
|
18
|
+
@@_configuration
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.configuration=(configuration)
|
22
|
+
raise ArgumentError, 'Expected a Avalara::Configuration instance' unless configuration.kind_of?(Configuration)
|
23
|
+
@@_configuration = configuration
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.configure(&block)
|
27
|
+
configuration(&block)
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.endpoint
|
31
|
+
configuration.endpoint
|
32
|
+
end
|
33
|
+
def self.endpoint=(endpoint)
|
34
|
+
configuration.endpoint = endpoint
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.username
|
38
|
+
configuration.username
|
39
|
+
end
|
40
|
+
def self.username=(username)
|
41
|
+
configuration.username = username
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.password
|
45
|
+
configuration.password
|
46
|
+
end
|
47
|
+
def self.password=(password)
|
48
|
+
configuration.password = password
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.version
|
52
|
+
configuration.version
|
53
|
+
end
|
54
|
+
def self.version=(version)
|
55
|
+
configuration.version = version
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.cancel_tax(cancel_invoice)
|
59
|
+
uri = [endpoint, version, 'tax', 'cancel'].join('/')
|
60
|
+
|
61
|
+
response = API.post(uri,
|
62
|
+
:body => cancel_invoice.to_json,
|
63
|
+
:headers => API.headers_for(cancel_invoice.to_json.length),
|
64
|
+
:basic_auth => authorization
|
65
|
+
)
|
66
|
+
|
67
|
+
Response::CancelTax.new(response)
|
68
|
+
rescue Timeout::Error => e
|
69
|
+
raise TimeoutError.new(e)
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.geographical_tax(latitude, longitude, sales_amount)
|
73
|
+
uri = [endpoint, version, 'tax', "#{latitude},#{longitude}", 'get'].join('/')
|
74
|
+
|
75
|
+
response = API.get(uri,
|
76
|
+
:headers => API.headers_for(),
|
77
|
+
:query => {:saleamount => sales_amount},
|
78
|
+
:basic_auth => authorization
|
79
|
+
)
|
80
|
+
|
81
|
+
Response::Tax.new(response)
|
82
|
+
rescue Timeout::Error => e
|
83
|
+
raise TimeoutError.new(e)
|
84
|
+
end
|
85
|
+
|
86
|
+
def self.get_tax(invoice)
|
87
|
+
uri = [endpoint, version, 'tax', 'get'].join('/')
|
88
|
+
|
89
|
+
response = API.post(uri,
|
90
|
+
:body => invoice.to_json,
|
91
|
+
:headers => API.headers_for(invoice.to_json.length),
|
92
|
+
:basic_auth => authorization
|
93
|
+
)
|
94
|
+
|
95
|
+
Response::Invoice.new(response)
|
96
|
+
rescue Timeout::Error => e
|
97
|
+
raise TimeoutError.new(e)
|
98
|
+
rescue ApiError => e
|
99
|
+
raise e
|
100
|
+
rescue Exception => e
|
101
|
+
raise Error.new(e)
|
102
|
+
end
|
103
|
+
|
104
|
+
def self.validate_address(address)
|
105
|
+
uri = [endpoint, version, 'address', 'validate'].join('/')
|
106
|
+
response = API.get(uri,
|
107
|
+
:headers => API.headers_for(),
|
108
|
+
:query => address.to_hash,
|
109
|
+
:basic_auth => authorization
|
110
|
+
)
|
111
|
+
Response::AddressValidation.new(response)
|
112
|
+
rescue Timeout::Error => e
|
113
|
+
raise TimeoutError.new(e)
|
114
|
+
end
|
115
|
+
|
116
|
+
private
|
117
|
+
|
118
|
+
def self.authorization
|
119
|
+
{:username => username, :password => password}
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
FactoryGirl.define do
|
2
|
+
factory :invoice_address, :class => Avalara::Request::InvoiceAddress do
|
3
|
+
address_code 1
|
4
|
+
line_1 "435 Ericksen Avenue Northeast"
|
5
|
+
line_2 "#250"
|
6
|
+
# line_3 "line_3"
|
7
|
+
# city "city"
|
8
|
+
# region "region"
|
9
|
+
# country "country"
|
10
|
+
postal_code "98110"
|
11
|
+
# latitude "latitude"
|
12
|
+
# longitude "longitude"
|
13
|
+
# tax_region_id "tax_region_id"
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
FactoryGirl.define do
|
2
|
+
factory :invoice, :class => Avalara::Request::Invoice do
|
3
|
+
customer_code 1
|
4
|
+
doc_date Time.now
|
5
|
+
company_code 83
|
6
|
+
# commit false
|
7
|
+
# customer_usage_type "customer_usage_type"
|
8
|
+
# discount "discount"
|
9
|
+
# doc_code "1234"
|
10
|
+
# purchase_order_no "purchase_order_no"
|
11
|
+
# exemption_no "exemption_no"
|
12
|
+
# detail_level 'Tax'
|
13
|
+
# doc_type "SalesInvoice"
|
14
|
+
lines { [FactoryGirl.build_via_new(:line)] }
|
15
|
+
addresses { [FactoryGirl.build_via_new(:invoice_address)] }
|
16
|
+
# reference_code "reference_code"
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
FactoryGirl.define do
|
2
|
+
factory :line, :class => Avalara::Request::Line do
|
3
|
+
line_no "1"
|
4
|
+
destination_code "1"
|
5
|
+
origin_code "1"
|
6
|
+
# item_code "item_code"
|
7
|
+
# tax_code "tax_code"
|
8
|
+
# customer_usage_type "customer_usage_type"
|
9
|
+
qty 1
|
10
|
+
amount 10.00
|
11
|
+
# discounted "discounted"
|
12
|
+
# tax_included "tax_included"
|
13
|
+
# ref_1 "ref_1"
|
14
|
+
# ref_2 "ref_2"
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://API_BASIC_AUTH@API_ENDPOINT/1.0/tax/cancel
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: ! "{\n \"CompanyCode\": 83,\n \"DocType\": \"SalesInvoice\",\n
|
9
|
+
\ \"DocCode\": \"1234\",\n \"CancelCode\": \"DocVoided\"\n}"
|
10
|
+
headers:
|
11
|
+
Accept:
|
12
|
+
- application/json
|
13
|
+
Content-Type:
|
14
|
+
- text/json
|
15
|
+
Date:
|
16
|
+
- Thu, 13 Jun 2013 15:16:45 GMT
|
17
|
+
User-Agent:
|
18
|
+
- avalara/0.0.2 (Rubygems; Ruby 1.9.3 x86_64-freebsd8.1)
|
19
|
+
Content-Length:
|
20
|
+
- '114'
|
21
|
+
response:
|
22
|
+
status:
|
23
|
+
code: 200
|
24
|
+
message: OK
|
25
|
+
headers:
|
26
|
+
Cache-Control:
|
27
|
+
- private
|
28
|
+
Content-Type:
|
29
|
+
- text/json; charset=utf-8
|
30
|
+
X-Aspnet-Version:
|
31
|
+
- 4.0.30319
|
32
|
+
X-Powered-By:
|
33
|
+
- ASP.NET
|
34
|
+
Date:
|
35
|
+
- Thu, 13 Jun 2013 15:16:45 GMT
|
36
|
+
Content-Length:
|
37
|
+
- '99'
|
38
|
+
Set-Cookie:
|
39
|
+
- TS6198e2=d40d1ce94b23b9e6506eccd96db341b0cb5341f860a07a5551b9e25e; Path=/
|
40
|
+
- TS6198e2_28=9a561136e47d2984b432bf0734724926cb5341f860a07a5500000000000000000051b9e25e84b5fba9ed3b7d38;
|
41
|
+
Path=/
|
42
|
+
body:
|
43
|
+
encoding: US-ASCII
|
44
|
+
string: ! '{
|
45
|
+
|
46
|
+
"CancelTaxResult": {
|
47
|
+
|
48
|
+
"DocId": "34279849",
|
49
|
+
|
50
|
+
"TransactionId": 431361022,
|
51
|
+
|
52
|
+
"ResultCode": "Success"}
|
53
|
+
|
54
|
+
}
|
55
|
+
|
56
|
+
'
|
57
|
+
http_version:
|
58
|
+
recorded_at: Thu, 13 Jun 2013 15:16:46 GMT
|
59
|
+
recorded_with: VCR 2.5.0
|
@@ -0,0 +1,75 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://API_BASIC_AUTH@API_ENDPOINT/1.0/tax/cancel
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: ! "{\n \"CompanyCode\": 83,\n \"DocType\": \"SalesInvoice\",\n
|
9
|
+
\ \"DocCode\": null,\n \"CancelCode\": \"DocVoided\"\n}"
|
10
|
+
headers:
|
11
|
+
Accept:
|
12
|
+
- application/json
|
13
|
+
Content-Type:
|
14
|
+
- text/json
|
15
|
+
Date:
|
16
|
+
- Thu, 13 Jun 2013 15:36:29 GMT
|
17
|
+
User-Agent:
|
18
|
+
- avalara/0.0.2 (Rubygems; Ruby 1.9.3 x86_64-freebsd8.1)
|
19
|
+
Content-Length:
|
20
|
+
- '112'
|
21
|
+
response:
|
22
|
+
status:
|
23
|
+
code: 200
|
24
|
+
message: OK
|
25
|
+
headers:
|
26
|
+
Cache-Control:
|
27
|
+
- private
|
28
|
+
Content-Type:
|
29
|
+
- text/json; charset=utf-8
|
30
|
+
X-Aspnet-Version:
|
31
|
+
- 4.0.30319
|
32
|
+
X-Powered-By:
|
33
|
+
- ASP.NET
|
34
|
+
Date:
|
35
|
+
- Thu, 13 Jun 2013 15:36:29 GMT
|
36
|
+
Content-Length:
|
37
|
+
- '256'
|
38
|
+
Set-Cookie:
|
39
|
+
- TS6198e2=50d7d6baf19fd161cb134b400fce18d4444b7183dbbfac4551b9e6fd; Path=/
|
40
|
+
- TS6198e2_28=80a3b3ce66ce069f077bb60ed98a73de444b7183dbbfac4500000000000000000051b9e6fc20fb4fdba28c2eb6;
|
41
|
+
Path=/
|
42
|
+
body:
|
43
|
+
encoding: US-ASCII
|
44
|
+
string: ! '{
|
45
|
+
|
46
|
+
"CancelTaxResult": {
|
47
|
+
|
48
|
+
"TransactionId": 431377420,
|
49
|
+
|
50
|
+
"ResultCode": "Error",
|
51
|
+
|
52
|
+
"Messages": [
|
53
|
+
|
54
|
+
{
|
55
|
+
|
56
|
+
"Summary": "DocCode is required.",
|
57
|
+
|
58
|
+
"RefersTo": "DocCode",
|
59
|
+
|
60
|
+
"Severity": "Error",
|
61
|
+
|
62
|
+
"Source": "Avalara.AvaTax.Services",
|
63
|
+
|
64
|
+
"Details": "This value must be specified."}
|
65
|
+
|
66
|
+
]
|
67
|
+
|
68
|
+
}
|
69
|
+
|
70
|
+
}
|
71
|
+
|
72
|
+
'
|
73
|
+
http_version:
|
74
|
+
recorded_at: Thu, 13 Jun 2013 15:36:29 GMT
|
75
|
+
recorded_with: VCR 2.5.0
|
@@ -0,0 +1,92 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://API_BASIC_AUTH@API_ENDPOINT/1.0/tax/47.627935,-122.51702/get?saleamount=100
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- application/json
|
12
|
+
Content-Type:
|
13
|
+
- text/json
|
14
|
+
Date:
|
15
|
+
- Tue, 11 Jun 2013 20:06:02 GMT
|
16
|
+
User-Agent:
|
17
|
+
- avalara/0.0.2 (Rubygems; Ruby 1.9.3 x86_64-freebsd8.1)
|
18
|
+
Content-Length:
|
19
|
+
- '0'
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 200
|
23
|
+
message: OK
|
24
|
+
headers:
|
25
|
+
Cache-Control:
|
26
|
+
- private
|
27
|
+
Content-Type:
|
28
|
+
- text/json; charset=utf-8
|
29
|
+
X-Aspnet-Version:
|
30
|
+
- 4.0.30319
|
31
|
+
X-Powered-By:
|
32
|
+
- ASP.NET
|
33
|
+
Date:
|
34
|
+
- Tue, 11 Jun 2013 20:06:03 GMT
|
35
|
+
Content-Length:
|
36
|
+
- '356'
|
37
|
+
Set-Cookie:
|
38
|
+
- TS6198e2=f269f6ec01f43005c796a696d743adbab44110d473ce2a0751b7832b; Path=/
|
39
|
+
- TS6198e2_28=7dc6acf5dae9dc5790ffe92f50b06bc0b44110d473ce2a0700000000000000000051b7832b91f2ed2d3b9cab78;
|
40
|
+
Path=/
|
41
|
+
body:
|
42
|
+
encoding: US-ASCII
|
43
|
+
string: ! '{
|
44
|
+
|
45
|
+
"Rate": 0.086,
|
46
|
+
|
47
|
+
"Tax": 8.6,
|
48
|
+
|
49
|
+
"TaxDetails": [
|
50
|
+
|
51
|
+
{
|
52
|
+
|
53
|
+
"Country": "US",
|
54
|
+
|
55
|
+
"Region": "WA",
|
56
|
+
|
57
|
+
"JurisType": "State",
|
58
|
+
|
59
|
+
"Rate": 0.065,
|
60
|
+
|
61
|
+
"Tax": 6.5,
|
62
|
+
|
63
|
+
"JurisName": "WASHINGTON",
|
64
|
+
|
65
|
+
"TaxName": "WA STATE TAX"}
|
66
|
+
|
67
|
+
,{
|
68
|
+
|
69
|
+
"Country": "US",
|
70
|
+
|
71
|
+
"Region": "WA",
|
72
|
+
|
73
|
+
"JurisType": "City",
|
74
|
+
|
75
|
+
"Rate": 0.021,
|
76
|
+
|
77
|
+
"Tax": 2.1,
|
78
|
+
|
79
|
+
"JurisName": "BAINBRIDGE ISLAND",
|
80
|
+
|
81
|
+
"TaxName": "WA CITY TAX"}
|
82
|
+
|
83
|
+
]
|
84
|
+
|
85
|
+
,
|
86
|
+
|
87
|
+
"ResultCode": "Success"}
|
88
|
+
|
89
|
+
'
|
90
|
+
http_version:
|
91
|
+
recorded_at: Tue, 11 Jun 2013 20:06:05 GMT
|
92
|
+
recorded_with: VCR 2.5.0
|
data/spec/fixtures/net/Avalara/_geographical_tax/with_incomplete_address/unsuccessful_response.yml
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://API_BASIC_AUTH@API_ENDPOINT/1.0/tax/47.627935,122.51702/get?saleamount=100
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- application/json
|
12
|
+
Content-Type:
|
13
|
+
- text/json
|
14
|
+
Date:
|
15
|
+
- Tue, 11 Jun 2013 20:06:05 GMT
|
16
|
+
User-Agent:
|
17
|
+
- avalara/0.0.2 (Rubygems; Ruby 1.9.3 x86_64-freebsd8.1)
|
18
|
+
Content-Length:
|
19
|
+
- '0'
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 500
|
23
|
+
message: Internal Server Error
|
24
|
+
headers:
|
25
|
+
Cache-Control:
|
26
|
+
- private
|
27
|
+
Content-Type:
|
28
|
+
- text/json; charset=utf-8
|
29
|
+
X-Aspnet-Version:
|
30
|
+
- 4.0.30319
|
31
|
+
X-Powered-By:
|
32
|
+
- ASP.NET
|
33
|
+
Date:
|
34
|
+
- Tue, 11 Jun 2013 20:06:05 GMT
|
35
|
+
Content-Length:
|
36
|
+
- '199'
|
37
|
+
Set-Cookie:
|
38
|
+
- TS6198e2=0fbc977705f174841c183156e45d6384a9fcff46f066e83251b7832e; Path=/
|
39
|
+
- TS6198e2_28=c97054c1ff46a2126a0bf4f1be5e95bda9fcff46f066e83200000000000000000051b7832d85aedc9eb7336aa4;
|
40
|
+
Path=/
|
41
|
+
body:
|
42
|
+
encoding: US-ASCII
|
43
|
+
string: ! '{
|
44
|
+
|
45
|
+
"ResultCode": "Error",
|
46
|
+
|
47
|
+
"Messages": [
|
48
|
+
|
49
|
+
{
|
50
|
+
|
51
|
+
"Summary": "Geocoding error Address is incomplete or invalid.",
|
52
|
+
|
53
|
+
"RefersTo": "Addresses[0]",
|
54
|
+
|
55
|
+
"Severity": "Error",
|
56
|
+
|
57
|
+
"Source": "Avalara.AvaTax.Services.Tax"}
|
58
|
+
|
59
|
+
]
|
60
|
+
|
61
|
+
}
|
62
|
+
|
63
|
+
'
|
64
|
+
http_version:
|
65
|
+
recorded_at: Tue, 11 Jun 2013 20:06:06 GMT
|
66
|
+
recorded_with: VCR 2.5.0
|
@@ -0,0 +1,151 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://API_BASIC_AUTH@API_ENDPOINT/1.0/tax/get
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: ! "{\n \"CustomerCode\": 1,\n \"DocDate\": \"2012-01-01\",\n \"CompanyCode\":
|
9
|
+
83,\n \"Lines\": [\n {\n \"LineNo\": \"1\",\n \"DestinationCode\":
|
10
|
+
\"1\",\n \"OriginCode\": \"1\",\n \"Qty\": \"1\",\n \"Amount\":
|
11
|
+
10\n }\n ],\n \"Addresses\": [\n {\n \"AddressCode\": 1,\n \"Line1\":
|
12
|
+
\"435 Ericksen Avenue Northeast\",\n \"Line2\": \"#250\",\n \"PostalCode\":
|
13
|
+
\"98110\"\n }\n ]\n}"
|
14
|
+
headers:
|
15
|
+
Accept:
|
16
|
+
- application/json
|
17
|
+
Content-Type:
|
18
|
+
- text/json
|
19
|
+
Date:
|
20
|
+
- Tue, 11 Jun 2013 14:34:23 GMT
|
21
|
+
User-Agent:
|
22
|
+
- avalara/0.0.2 (Rubygems; Ruby 1.9.3 x86_64-freebsd8.1)
|
23
|
+
Content-Length:
|
24
|
+
- '371'
|
25
|
+
response:
|
26
|
+
status:
|
27
|
+
code: 200
|
28
|
+
message: OK
|
29
|
+
headers:
|
30
|
+
Cache-Control:
|
31
|
+
- private
|
32
|
+
Content-Type:
|
33
|
+
- text/json; charset=utf-8
|
34
|
+
X-Aspnet-Version:
|
35
|
+
- 4.0.30319
|
36
|
+
X-Powered-By:
|
37
|
+
- ASP.NET
|
38
|
+
Date:
|
39
|
+
- Tue, 11 Jun 2013 14:34:22 GMT
|
40
|
+
Content-Length:
|
41
|
+
- '913'
|
42
|
+
Set-Cookie:
|
43
|
+
- TS6198e2=adc831970a86a132df47df6ed8f792d66572192cd45d204451b7356f; Path=/
|
44
|
+
- TS6198e2_28=a2af8f18ee62469c80989b4f0b1f20846572192cd45d204400000000000000000051b7356e3a5ef616b7cfc578;
|
45
|
+
Path=/
|
46
|
+
body:
|
47
|
+
encoding: US-ASCII
|
48
|
+
string: ! '{
|
49
|
+
|
50
|
+
"ResultCode": "Success",
|
51
|
+
|
52
|
+
"DocCode": "221f9d47-2717-446b-b805-cb6bc887cf22",
|
53
|
+
|
54
|
+
"DocDate": "2012-01-01",
|
55
|
+
|
56
|
+
"Timestamp": "2013-06-11T14:34:23.6768215Z",
|
57
|
+
|
58
|
+
"TotalAmount": "10",
|
59
|
+
|
60
|
+
"TotalDiscount": "0",
|
61
|
+
|
62
|
+
"TotalExemption": "10",
|
63
|
+
|
64
|
+
"TotalTaxable": "0",
|
65
|
+
|
66
|
+
"TotalTax": "0",
|
67
|
+
|
68
|
+
"TotalTaxCalculated": "0",
|
69
|
+
|
70
|
+
"TaxLines": [
|
71
|
+
|
72
|
+
{
|
73
|
+
|
74
|
+
"LineNo": "1",
|
75
|
+
|
76
|
+
"TaxCode": "P0000000",
|
77
|
+
|
78
|
+
"Taxability": "true",
|
79
|
+
|
80
|
+
"BoundaryLevel": "Address",
|
81
|
+
|
82
|
+
"Exemption": "10",
|
83
|
+
|
84
|
+
"Discount": "0",
|
85
|
+
|
86
|
+
"Taxable": "0",
|
87
|
+
|
88
|
+
"Rate": "0",
|
89
|
+
|
90
|
+
"Tax": "0",
|
91
|
+
|
92
|
+
"TaxCalculated": "0",
|
93
|
+
|
94
|
+
"TaxDetails": [
|
95
|
+
|
96
|
+
{
|
97
|
+
|
98
|
+
"Country": "US",
|
99
|
+
|
100
|
+
"Region": "WA",
|
101
|
+
|
102
|
+
"JurisType": "State",
|
103
|
+
|
104
|
+
"Taxable": "0",
|
105
|
+
|
106
|
+
"Rate": "0",
|
107
|
+
|
108
|
+
"Tax": "0",
|
109
|
+
|
110
|
+
"JurisName": "WASHINGTON",
|
111
|
+
|
112
|
+
"TaxName": "WA STATE TAX"}
|
113
|
+
|
114
|
+
]
|
115
|
+
|
116
|
+
}
|
117
|
+
|
118
|
+
]
|
119
|
+
|
120
|
+
,
|
121
|
+
|
122
|
+
"TaxAddresses": [
|
123
|
+
|
124
|
+
{
|
125
|
+
|
126
|
+
"Address": "435 ERICKSEN AVE NE STE 250",
|
127
|
+
|
128
|
+
"AddressCode": "1",
|
129
|
+
|
130
|
+
"City": "BAINBRIDGE ISLAND",
|
131
|
+
|
132
|
+
"Country": "US",
|
133
|
+
|
134
|
+
"PostalCode": "98110-2876",
|
135
|
+
|
136
|
+
"Region": "WA",
|
137
|
+
|
138
|
+
"TaxRegionId": "2109716",
|
139
|
+
|
140
|
+
"JurisCode": "5303503736"}
|
141
|
+
|
142
|
+
]
|
143
|
+
|
144
|
+
,
|
145
|
+
|
146
|
+
"TaxDate": "2012-01-01"}
|
147
|
+
|
148
|
+
'
|
149
|
+
http_version:
|
150
|
+
recorded_at: Tue, 11 Jun 2013 14:34:23 GMT
|
151
|
+
recorded_with: VCR 2.5.0
|