Class: LittleFinger::Avatax

Inherits:
Object
  • Object
show all
Defined in:
lib/little_finger/avatax.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeAvatax

Returns a new instance of Avatax.



9
10
11
12
13
14
15
16
17
# File 'lib/little_finger/avatax.rb', line 9

def initialize()
  @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
  @tax_service_url = [LittleFinger::Configuration.configuration[:avatax][:service_url], LittleFinger::Configuration.configuration[:avatax][:tax_service_path]].join
  @address_service_url = [LittleFinger::Configuration.configuration[:avatax][:service_url], LittleFinger::Configuration.configuration[:avatax][:address_service_path]].join
end

Instance Attribute Details

#account_numberObject

Returns the value of attribute account_number.



7
8
9
# File 'lib/little_finger/avatax.rb', line 7

def 
  @account_number
end

#address_service_urlObject

Returns the value of attribute address_service_url.



7
8
9
# File 'lib/little_finger/avatax.rb', line 7

def address_service_url
  @address_service_url
end

#company_codeObject

Returns the value of attribute company_code.



7
8
9
# File 'lib/little_finger/avatax.rb', line 7

def company_code
  @company_code
end

#credentialsObject

Returns the value of attribute credentials.



7
8
9
# File 'lib/little_finger/avatax.rb', line 7

def credentials
  @credentials
end

#license_keyObject

Returns the value of attribute license_key.



7
8
9
# File 'lib/little_finger/avatax.rb', line 7

def license_key
  @license_key
end

#tax_service_urlObject

Returns the value of attribute tax_service_url.



7
8
9
# File 'lib/little_finger/avatax.rb', line 7

def tax_service_url
  @tax_service_url
end

Instance Method Details

#cancel(cancel_code, lookup_opts = {}) ⇒ Hash

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

Parameters:

  • cancel_code (String)

    The reason for cancelling the tax record: Unspecified, PostFailed, DocDeleted, DocVoided, AdjustmentCancelled

  • lookup_opts (Hash) (defaults to: {})

    options to identify Avatax transactions by DocId or by the set of values CompanyCode, DocCode, and DocType.

Options Hash (lookup_opts):

  • DocId (String)

    Avatax-assigned unique Document Id

  • CompanyCode (String)

    Client application company reference code

  • DocCode (String)

    Client application identifier describing this tax transaction (i.e. invoice number, sales order number, etc.)

  • DocType (String)

    The reason for cancelling the tax record.

Returns:

  • (Hash)

    JSON parsed response body



47
48
49
50
51
52
# File 'lib/little_finger/avatax.rb', line 47

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) ⇒ Hash

Retrieves tax rate details for the supplied geographic coordinates and sale amount. developer.avalara.com/api-docs/api-reference/rest-curl/estimatetax

Parameters:

  • coordinates (Hash)

    geographic coordinates

  • sale_amount (Float) (defaults to: 0)

Options Hash (coordinates):

  • latitude (String)
  • longitude (String)

Returns:

  • (Hash)

    JSON parsed response body



61
62
63
64
65
66
# File 'lib/little_finger/avatax.rb', line 61

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) ⇒ Object

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

Parameters:

  • payload (Hash)


31
32
33
34
35
# File 'lib/little_finger/avatax.rb', line 31

def get(payload)
  uri = [@tax_service_url,"get"].join
  response = send_request(:post, uri, payload)
  JSON.parse(response.body)
end

#statusFixnum

Since the REST API does not provide an explicit ping function, the estimate method can also be used to test connectivity to the service.

Returns:

  • (Fixnum)

    response code



21
22
23
24
25
26
# File 'lib/little_finger/avatax.rb', line 21

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) ⇒ Hash

Normalizes a single US or Canadian address, providing a non-ambiguous address match. developer.avalara.com/api-docs/api-reference/rest-curl/validate

Parameters:

  • address (Hash)

    physical shipping address to validate

Options Hash (address):

  • :Line1 (String)
  • :Line2 (String)
  • :Line3 (String)
  • :City (String)
  • :Region (String)
  • :PostalCode (String)
  • :Country (String)

Returns:

  • (Hash)

    JSON parsed response body



79
80
81
82
83
# File 'lib/little_finger/avatax.rb', line 79

def validate(address)
  uri = [@address_service_url, "validate?", address.to_query].join
  response = send_request(:get, uri)
  JSON.parse(response.body)
end