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
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
OTIyNGQ4OTYzZTE1ZDg0MmZlZDFkNTU5NTY1MWE5NmU4MThkZWM2MA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NmE4M2RhMTRjZmVmM2NjODhjZTNiZGY0ZDZiNWFhOWVmMDFiY2NkNg==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZjE3NjE2Njk1OWFhMGI5NzMxMzY3ZmFiZmI0MTgxYmJiNjc0YWE0MDdmMDE0
|
10
|
+
ZDBhNjg5ZWQ2ZWY3Zjg0MTg5YzQyZjMwZmUzZmVkNzVhNDhlMDBkZDJhYzJm
|
11
|
+
OTAyZTQ2NjlhZjkzN2I0YjY0OTljYzM5NmQ1YmY4NDM3NjMyMDk=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
N2UzMGIzOWQzMjIxYjhlN2IxOTNjYmJiNTVmZDQwNjczYjE0ZDIyNTg5ZGYz
|
14
|
+
ZGEzODI0MzgzY2U0ZjE5MTk5MTljMDA4NTdiMjQ5NWU5NGQxYWRiNzMwNDY0
|
15
|
+
ZTczZjVkMzk1NzBlNDRlY2Q5NTIyMjlkNmQ1MzNhNDk3NDk0YTE=
|
data/.gitignore
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
*.swp
|
4
|
+
*.tmproj
|
5
|
+
*~
|
6
|
+
.DS_Store
|
7
|
+
.\#*
|
8
|
+
.bundle
|
9
|
+
.config
|
10
|
+
.yardoc
|
11
|
+
Gemfile.lock
|
12
|
+
InstalledFiles
|
13
|
+
\#*
|
14
|
+
_yardoc
|
15
|
+
coverage
|
16
|
+
doc/
|
17
|
+
lib/bundler/man
|
18
|
+
pkg
|
19
|
+
rdoc
|
20
|
+
spec/reports
|
21
|
+
test/tmp
|
22
|
+
test/version_tmp
|
23
|
+
tmp
|
24
|
+
tmtags
|
25
|
+
spec/avalara.yml
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
## 0.1.0 - June 13, 2013
|
2
|
+
- Updated tests and gems
|
3
|
+
- Added missing specs for geographical_tax
|
4
|
+
- Added validate address
|
5
|
+
- Added cancel tax
|
6
|
+
|
7
|
+
## 0.0.2 - May 7, 2012 - Updated tests for test endpoint.
|
8
|
+
|
9
|
+
- Looks like the tests were initally run against the production database (whops). I re-ran them against test and they're still working.
|
10
|
+
- No code changes for this, other than documenting the test endpoint.
|
11
|
+
|
12
|
+
## 0.0.1 - February 3, 2012 - Initial Release with get_tax call
|
13
|
+
|
14
|
+
- Not much in the way of features so far, but the rough draft of the get_tax call is in, as well as error and warning message handling. Still need to update the docs with it once an API to the gem is finalized.
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Andrew Assarattanakul
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README
ADDED
data/Rakefile
ADDED
data/lib/avalara/api.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'httparty'
|
3
|
+
|
4
|
+
module Avalara
|
5
|
+
class API
|
6
|
+
include HTTParty
|
7
|
+
headers 'Accept' => 'application/json', 'Content-Type' => 'text/json'
|
8
|
+
format :json
|
9
|
+
|
10
|
+
def self.headers_for(content_length = 0)
|
11
|
+
{
|
12
|
+
'Accept' => 'application/json',
|
13
|
+
'Content-Type' => 'text/json',
|
14
|
+
'Date' => Time.now.httpdate(),
|
15
|
+
'User-Agent' => user_agent_string,
|
16
|
+
"Content-Length" => content_length.to_s
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def self.user_agent_string
|
23
|
+
"avalara/#{Avalara::VERSION} (Rubygems; Ruby #{RUBY_VERSION} #{RUBY_PLATFORM})"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
class Avalara::Configuration
|
4
|
+
|
5
|
+
attr_writer :endpoint
|
6
|
+
attr_accessor :password
|
7
|
+
attr_accessor :username
|
8
|
+
attr_writer :version
|
9
|
+
|
10
|
+
##
|
11
|
+
# Public: Get the API endpoint used by the configuration. Unless explicitly
|
12
|
+
# set, the endpoint will default to the official production endpoint at
|
13
|
+
# 'https://rest.avalara.net'.
|
14
|
+
#
|
15
|
+
# If you want to set this to the test endpoint, use 'https://development.avalara.net'
|
16
|
+
#
|
17
|
+
# Returns the String for the API endpoint.
|
18
|
+
#
|
19
|
+
def endpoint
|
20
|
+
@endpoint ||= 'https://rest.avalara.net'
|
21
|
+
end
|
22
|
+
|
23
|
+
##
|
24
|
+
# Public: Get the API version. Defaults to 1.0.
|
25
|
+
#
|
26
|
+
# Returns the String for the API version.
|
27
|
+
#
|
28
|
+
def version
|
29
|
+
@version ||= '1.0'
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Avalara
|
4
|
+
module Request
|
5
|
+
class Address < Avalara::Types::Stash
|
6
|
+
property :Line1, :from => :line_1
|
7
|
+
property :Line2, :from => :line_2
|
8
|
+
property :Line3, :from => :line_3
|
9
|
+
property :City, :from => :city
|
10
|
+
property :Region, :from => :region
|
11
|
+
property :Country, :from => :country
|
12
|
+
property :PostalCode, :from => :postal_code
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'multi_json'
|
3
|
+
|
4
|
+
module Avalara
|
5
|
+
module Request
|
6
|
+
class CancelTax < Avalara::Types::Stash
|
7
|
+
property :CompanyCode, :from => :company_code
|
8
|
+
property :DocType, :from => :doc_type
|
9
|
+
property :DocCode, :from => :doc_code
|
10
|
+
property :CancelCode, :from => :cancel_code
|
11
|
+
property :DocId, :from => :doc_id
|
12
|
+
|
13
|
+
def to_json
|
14
|
+
MultiJson.encode(self.to_hash, :pretty => true)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Avalara
|
4
|
+
module Request
|
5
|
+
class DetailLevel < Avalara::Types::Stash
|
6
|
+
property :Line, :from => :line
|
7
|
+
property :Summary, :from => :summary
|
8
|
+
property :Document, :from => :document
|
9
|
+
property :Tax, :from => :tax
|
10
|
+
property :Diagnostic, :from => :diagnostic
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'multi_json'
|
3
|
+
|
4
|
+
module Avalara
|
5
|
+
module Request
|
6
|
+
# Same as GetTaxRequest
|
7
|
+
class Invoice < Avalara::Types::Stash
|
8
|
+
coerce_key :DocDate, Avalara::Types::Date
|
9
|
+
|
10
|
+
# Set outgoing
|
11
|
+
property :CustomerCode, :from => :customer_code
|
12
|
+
property :DocDate, :from => :doc_date
|
13
|
+
property :CompanyCode, :from => :company_code
|
14
|
+
property :Commit, :from => :commit
|
15
|
+
property :CustomerUsageType, :from => :customer_usage_type
|
16
|
+
property :Discount, :from => :discount
|
17
|
+
property :DocCode, :from => :doc_code
|
18
|
+
property :PurchaseOrderNo, :from => :purchase_order_no
|
19
|
+
property :ExemptionNo, :from => :exemption_no
|
20
|
+
property :DetailLevel, :from => :detail_level
|
21
|
+
property :DocType, :from => :doc_type
|
22
|
+
property :Lines, :from => :lines
|
23
|
+
property :Addresses, :from => :addresses
|
24
|
+
property :ReferenceCode, :from => :reference_code
|
25
|
+
|
26
|
+
# Shipping Addresses
|
27
|
+
def addresses=(addresses)
|
28
|
+
self.Addresses = addresses.map {|address| InvoiceAddress.new(address)}
|
29
|
+
end
|
30
|
+
|
31
|
+
def lines=(lines)
|
32
|
+
self.Lines = lines.map {|line| Line.new(line)}
|
33
|
+
end
|
34
|
+
|
35
|
+
def to_json
|
36
|
+
MultiJson.encode(self.to_hash, :pretty => true)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Avalara
|
4
|
+
module Request
|
5
|
+
class InvoiceAddress < Avalara::Types::Stash
|
6
|
+
property :AddressCode, :from => :address_code, :required => true
|
7
|
+
property :Line1, :from => :line_1
|
8
|
+
property :Line2, :from => :line_2
|
9
|
+
property :Line3, :from => :line_3
|
10
|
+
property :City, :from => :city
|
11
|
+
property :Region, :from => :region
|
12
|
+
property :Country, :from => :country
|
13
|
+
property :PostalCode, :from => :postal_code
|
14
|
+
property :Latitude, :from => :latitude
|
15
|
+
property :Longitude, :from => :longitude
|
16
|
+
property :TaxRegionId, :from => :tax_region_id
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Avalara
|
4
|
+
module Request
|
5
|
+
class Line < Avalara::Types::Stash
|
6
|
+
property :LineNo, :from => :line_no, :required => true
|
7
|
+
property :DestinationCode, :from => :destination_code, :required => true
|
8
|
+
property :OriginCode, :from => :origin_code, :required => true
|
9
|
+
property :ItemCode, :from => :item_code
|
10
|
+
property :TaxCode, :from => :tax_code
|
11
|
+
property :CustomerUsageType, :from => :customer_usage_type
|
12
|
+
property :Description, :from => :description
|
13
|
+
property :Qty, :from => :qty, :required => true
|
14
|
+
|
15
|
+
# Amount: (decimal)
|
16
|
+
# - in dollars as a decimal. AvaTax will round to 2 decimal places
|
17
|
+
property :Amount, :from => :amount, :required => true
|
18
|
+
property :Discounted, :from => :discounted
|
19
|
+
property :TaxIncluded, :from => :tax_included
|
20
|
+
property :Ref1, :from => :ref_1
|
21
|
+
property :Ref2, :from => :ref_2
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Avalara
|
4
|
+
module Request
|
5
|
+
autoload :Address, 'avalara/request/address'
|
6
|
+
autoload :CancelTax, 'avalara/request/cancel_tax'
|
7
|
+
autoload :DetailLevel, 'avalara/request/detail_level'
|
8
|
+
autoload :Invoice, 'avalara/request/invoice'
|
9
|
+
autoload :InvoiceAddress, 'avalara/request/invoice_address'
|
10
|
+
autoload :Line, 'avalara/request/line'
|
11
|
+
autoload :Message, 'avalara/request/message'
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Avalara
|
4
|
+
module Response
|
5
|
+
class AddressValidation < Avalara::Types::Stash
|
6
|
+
property :address, :from => :Address
|
7
|
+
|
8
|
+
property :result_code, :from => :ResultCode
|
9
|
+
property :messages, :from => :Messages
|
10
|
+
|
11
|
+
def success?
|
12
|
+
result_code == 'Success'
|
13
|
+
end
|
14
|
+
|
15
|
+
def Address=(address)
|
16
|
+
self.address = ValidationAddress.new(address)
|
17
|
+
end
|
18
|
+
|
19
|
+
def Messages=(new_messages)
|
20
|
+
self.messages = new_messages.map {|message| Message.new(message)}
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Avalara
|
4
|
+
module Response
|
5
|
+
class CancelTax < Avalara::Types::Stash
|
6
|
+
property :cancel_tax_result, :from => :CancelTaxResult
|
7
|
+
|
8
|
+
delegate :success?, :to => :cancel_tax_result
|
9
|
+
|
10
|
+
delegate :transaction_id, :to => :cancel_tax_result
|
11
|
+
delegate :result_code, :to => :cancel_tax_result
|
12
|
+
delegate :doc_id, :to => :cancel_tax_result
|
13
|
+
delegate :messages, :to => :cancel_tax_result
|
14
|
+
|
15
|
+
def CancelTaxResult=(result)
|
16
|
+
self.cancel_tax_result = CancelTaxResult.new(result)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Avalara
|
4
|
+
module Response
|
5
|
+
class CancelTaxResult < Avalara::Types::Stash
|
6
|
+
property :transaction_id, :from => :TransactionId
|
7
|
+
property :result_code, :from => :ResultCode
|
8
|
+
property :doc_id, :from => :DocId
|
9
|
+
property :messages, :from => :Messages
|
10
|
+
|
11
|
+
def success?
|
12
|
+
result_code == 'Success'
|
13
|
+
end
|
14
|
+
|
15
|
+
def Messages=(new_messages)
|
16
|
+
self.messages = new_messages.map {|message| Message.new(message)}
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Avalara
|
4
|
+
module Response
|
5
|
+
class Invoice < Avalara::Types::Stash
|
6
|
+
property :doc_code, :from => :DocCode
|
7
|
+
property :doc_date, :from => :DocDate
|
8
|
+
property :timestamp, :from => :Timestamp
|
9
|
+
property :total_amount, :from => :TotalAmount
|
10
|
+
property :total_discount, :from => :TotalDiscount
|
11
|
+
property :total_exemption, :from => :TotalExemption
|
12
|
+
property :total_taxable, :from => :TotalTaxable
|
13
|
+
property :total_tax, :from => :TotalTax
|
14
|
+
property :total_tax_calculated, :from => :TotalTaxCalculated
|
15
|
+
property :tax_date, :from => :TaxDate
|
16
|
+
property :tax_lines, :from => :TaxLines
|
17
|
+
property :tax_addresses, :from => :TaxAddresses
|
18
|
+
property :result_code, :from => :ResultCode
|
19
|
+
property :messages, :from => :Messages
|
20
|
+
|
21
|
+
def success?
|
22
|
+
result_code == 'Success'
|
23
|
+
end
|
24
|
+
|
25
|
+
def Messages=(new_messages)
|
26
|
+
self.messages = new_messages.map {|message| Message.new(message)}
|
27
|
+
end
|
28
|
+
|
29
|
+
def TaxLines=(lines)
|
30
|
+
self.tax_lines = lines.map {|line| TaxLine.new(line)}
|
31
|
+
end
|
32
|
+
|
33
|
+
def TaxAddresses=(addresses)
|
34
|
+
self.tax_addresses = addresses.map {|address| TaxAddress.new(address)}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Avalara
|
4
|
+
module Response
|
5
|
+
class Message < Avalara::Types::Stash
|
6
|
+
property :summary, :from => :Summary
|
7
|
+
property :details, :from => :Details
|
8
|
+
property :refers_to, :from => :RefersTo
|
9
|
+
property :severity, :from => :Severity
|
10
|
+
property :source, :from => :Source
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Avalara
|
2
|
+
module Response
|
3
|
+
class Tax < Avalara::Types::Stash
|
4
|
+
property :rate, :from => :Rate
|
5
|
+
property :tax, :from => :Tax
|
6
|
+
property :tax_details, :from => :TaxDetails
|
7
|
+
|
8
|
+
property :result_code, :from => :ResultCode
|
9
|
+
property :messages, :from => :Messages
|
10
|
+
|
11
|
+
def success?
|
12
|
+
result_code != 'Error'
|
13
|
+
end
|
14
|
+
|
15
|
+
def Messages=(new_messages)
|
16
|
+
self.messages = new_messages.map {|message| Message.new(message)}
|
17
|
+
end
|
18
|
+
|
19
|
+
def TaxDetails=(details)
|
20
|
+
self.tax_details = details.map {|tax_detail| TaxDetail.new(tax_detail)}
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Avalara
|
4
|
+
module Response
|
5
|
+
class TaxAddress < Avalara::Types::Stash
|
6
|
+
property :address, :from => :Address
|
7
|
+
property :address_code, :from => :AddressCode
|
8
|
+
property :city, :from => :City
|
9
|
+
property :country, :from => :Country
|
10
|
+
property :postal_code, :from => :PostalCode
|
11
|
+
property :region, :from => :Region
|
12
|
+
property :tax_region_id, :from => :TaxRegionId
|
13
|
+
property :juris_code, :from => :JurisCode
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Avalara
|
4
|
+
module Response
|
5
|
+
class TaxDetail < Avalara::Types::Stash
|
6
|
+
property :taxable, :from => :Taxable
|
7
|
+
property :rate, :from => :Rate
|
8
|
+
property :tax, :from => :Tax
|
9
|
+
property :region, :from => :Region
|
10
|
+
property :country, :from => :Country
|
11
|
+
property :juris_type, :from => :JurisType
|
12
|
+
property :juris_name, :from => :JurisName
|
13
|
+
property :tax_name, :from => :TaxName
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Avalara
|
4
|
+
module Response
|
5
|
+
class TaxLine < Avalara::Types::Stash
|
6
|
+
property :line_no, :from => :LineNo
|
7
|
+
property :tax_code, :from => :TaxCode
|
8
|
+
property :taxability, :from => :Taxability
|
9
|
+
property :taxable, :from => :Taxable
|
10
|
+
property :rate, :from => :Rate
|
11
|
+
property :tax, :from => :Tax
|
12
|
+
property :tax_details, :from => :TaxDetails
|
13
|
+
property :discount, :from => :Discount
|
14
|
+
property :tax_calculated, :from => :TaxCalculated
|
15
|
+
property :exemption, :from => :Exemption
|
16
|
+
|
17
|
+
def TaxDetails=(tax_details)
|
18
|
+
self.tax_details = tax_details.map {|tax_detail| TaxDetail.new(tax_detail)}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Avalara
|
4
|
+
module Response
|
5
|
+
class ValidationAddress < Avalara::Types::Stash
|
6
|
+
ADDRESS_TYPE_NAME = {
|
7
|
+
'F' => 'Firm or company address',
|
8
|
+
'G' => 'General Delivery address',
|
9
|
+
'H' => 'High-rise or business complex',
|
10
|
+
'P' => 'PO Box address',
|
11
|
+
'R' => 'Rural route address',
|
12
|
+
'S' => 'Street or residential address'
|
13
|
+
}
|
14
|
+
CARRIER_TYPE = {
|
15
|
+
'B' => 'PO Box',
|
16
|
+
'C' => 'City delivery',
|
17
|
+
'G' => 'General delivery',
|
18
|
+
'H' => 'Highway contract',
|
19
|
+
'R' => 'Rural route'
|
20
|
+
}
|
21
|
+
|
22
|
+
property :line_1, :from => :Line1
|
23
|
+
property :line_2, :from => :Line2
|
24
|
+
property :line_3, :from => :Line3
|
25
|
+
property :city, :from => :City
|
26
|
+
property :region, :from => :Region
|
27
|
+
property :country, :from => :Country
|
28
|
+
property :address_type, :from => :AddressType
|
29
|
+
property :postal_code, :from => :PostalCode
|
30
|
+
property :county, :from => :County
|
31
|
+
property :fips_code, :from => :FipsCode
|
32
|
+
property :carrier_route, :from => :CarrierRoute
|
33
|
+
property :tax_region_id, :from => :TaxRegionId
|
34
|
+
property :post_net, :from => :PostNet
|
35
|
+
|
36
|
+
def address_type_name
|
37
|
+
ADDRESS_TYPE_NAME[address_type]
|
38
|
+
end
|
39
|
+
|
40
|
+
def carrier_route_name
|
41
|
+
return carrier_route if carrier_route.nil? || carrier_route.empty?
|
42
|
+
CARRIER_TYPE[carrier_route[0]]
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Avalara
|
4
|
+
module Response
|
5
|
+
autoload :AddressValidation, 'avalara/response/address_validation'
|
6
|
+
autoload :CancelTax, 'avalara/response/cancel_tax'
|
7
|
+
autoload :CancelTaxResult, 'avalara/response/cancel_tax_result'
|
8
|
+
autoload :Invoice, 'avalara/response/invoice'
|
9
|
+
autoload :Message, 'avalara/response/message'
|
10
|
+
autoload :TaxLine, 'avalara/response/tax_line'
|
11
|
+
autoload :TaxDetail, 'avalara/response/tax_detail'
|
12
|
+
autoload :TaxAddress, 'avalara/response/tax_address'
|
13
|
+
autoload :Tax, 'avalara/response/tax'
|
14
|
+
autoload :ValidationAddress, 'avalara/response/validation_address'
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'hashie/trash'
|
4
|
+
require 'hashie/extensions/coercion'
|
5
|
+
|
6
|
+
module Avalara
|
7
|
+
module Types
|
8
|
+
##
|
9
|
+
# A Stash is a 'suppressing' Hashie::Trash where keys that are not defined
|
10
|
+
# are simply ignored and unavailable to the local object.
|
11
|
+
#
|
12
|
+
# A Stash is useful when you need to read data from another application,
|
13
|
+
# but you only want a predefined subset of the returned data to become
|
14
|
+
# available, locally.
|
15
|
+
#
|
16
|
+
class Stash < ::Hashie::Trash
|
17
|
+
include Hashie::Extensions::Coercion
|
18
|
+
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
|
23
|
+
def property_exists?(property)
|
24
|
+
self.class.property?(property.to_sym)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|