class LittleFinger::Avatax

Attributes

account_number[RW]
address_service_url[RW]
company_code[RW]
credentials[RW]
license_key[RW]
tax_service_url[RW]

Public Class Methods

new(service_url_override) click to toggle source
# File lib/little_finger/avatax.rb, line 9
def initialize(service_url_override)
  @company_code = LittleFinger::Configuration.configuration[:avatax][:company_code]
  @account_number = LittleFinger::Configuration.configuration[:avatax][:account_number]
  @license_key = LittleFinger::Configuration.configuration[:avatax][:license_key]
  @api_timeout = LittleFinger::Configuration.configuration[:avatax][:timeout] || 5
  @credentials = ["Basic ",Base64.encode64(@account_number + ":"+ @license_key)].join
  service_url = service_url_override.present? ? service_url_override : LittleFinger::Configuration.configuration[:avatax][:service_url]
  @tax_service_url = [service_url, LittleFinger::Configuration.configuration[:avatax][:tax_service_path]].join
  @address_service_url = [service_url, LittleFinger::Configuration.configuration[:avatax][:address_service_path]].join
end

Public Instance Methods

cancel(cancel_code, lookup_opts = {}) click to toggle source

Voids or deletes and existing transaction record from the AvaTax system. developer.avalara.com/api-docs/api-reference/rest-curl/canceltax developer.avalara.com/api-docs/rest/tax/cancel @param [String] cancel_code The reason for cancelling the tax record: Unspecified, PostFailed, DocDeleted, DocVoided, AdjustmentCancelled @param [Hash] lookup_opts options to identify Avatax transactions by DocId or by the set of values CompanyCode, DocCode, and DocType. @option lookup_opts [String] DocId Avatax-assigned unique Document Id @option lookup_opts [String] CompanyCode Client application company reference code @option lookup_opts [String] DocCode Client application identifier describing this tax transaction (i.e. invoice number, sales order number, etc.) @option lookup_opts [String] DocType The reason for cancelling the tax record. @return [Hash] JSON parsed response body

# File lib/little_finger/avatax.rb, line 48
def cancel(cancel_code, lookup_opts = {})
  payload = lookup_opts.merge({CancelCode: cancel_code})
  uri = [@tax_service_url, "cancel"].join
  response = send_request(:post, uri, payload)
  JSON.parse(response.body).try(:[],"CancelTaxResult")
end
estimate(coordinates, sale_amount = 0) click to toggle source

Retrieves tax rate details for the supplied geographic coordinates and sale amount. developer.avalara.com/api-docs/api-reference/rest-curl/estimatetax @param [Hash] coordinates geographic coordinates @option coordinates [String] latitude @option coordinates [String] longitude @param [Float] sale_amount @return [Hash] JSON parsed response body

# File lib/little_finger/avatax.rb, line 62
def estimate(coordinates, sale_amount = 0)
  return unless coordinates.present? && coordinates.has_key?(:latitude) && coordinates.has_key?(:longitude)
  uri = [@tax_service_url,coordinates[:latitude].to_s,",",coordinates[:longitude].to_s,"/get?saleamount=",sale_amount.to_s].join
  response = send_request(:get, uri)
  JSON.parse(response.body)
end
get(payload) click to toggle source

Calculates taxes on a document such as a sales order, sales invoice, purchase order, purchase invoice, or credit memo. developer.avalara.com/api-docs/api-reference/rest-curl/gettax @param [Hash] payload

# File lib/little_finger/avatax.rb, line 32
def get(payload)
  uri = [@tax_service_url,"get"].join
  response = send_request(:post, uri, payload)
  JSON.parse(response.body)
end
status() click to toggle source

Since the REST API does not provide an explicit ping function, the estimate method can also be used to test connectivity to the service. @return [Fixnum] response code

# File lib/little_finger/avatax.rb, line 22
def status
  coordinates = { latitude: "34.030291", longitude: "-118.468925"}
  uri = [@tax_service_url,coordinates[:latitude].to_s,",",coordinates[:longitude].to_s,"/get?saleamount=",0].join
  response = send_request(:get, uri)
  response.code
end
validate(address) click to toggle source

Normalizes a single US or Canadian address, providing a non-ambiguous address match. developer.avalara.com/api-docs/api-reference/rest-curl/validate @param [Hash] address physical shipping address to validate @option address [String] :Line1 @option address [String] :Line2 @option address [String] :Line3 @option address [String] :City @option address [String] :Region @option address [String] :PostalCode @option address [String] :Country @return [Hash] JSON parsed response body

# File lib/little_finger/avatax.rb, line 80
def validate(address)
  uri = [@address_service_url, "validate?", address.to_query].join
  response = send_request(:get, uri)
  JSON.parse(response.body)
end

Private Instance Methods

send_request(method, uri, payload = {}, custom_headers = {}) click to toggle source

Forms and sends the request @param [Symbol] method request method @param [String] uri Avatax service endpoint @param optional [Hash] payload @param optional [Hash] custom_headers

# File lib/little_finger/avatax.rb, line 93
def send_request(method, uri, payload = {}, custom_headers = {})
  headers = {authorization: @credentials, content_type: "application/json"}.merge(custom_headers)
  RestClient::Request.execute(method: method.to_sym, url: uri, timeout: @api_timeout, payload: JSON.generate(payload), headers: headers, ssl_version: 'TLSv1'){|response, request, result| response }
end