Module: Workarea::Tax

Defined in:
app/models/workarea/tax.rb,
app/models/workarea/tax/rate.rb,
app/models/workarea/tax/category.rb,
app/models/workarea/tax/rate_lookup.rb

Defined Under Namespace

Classes: Category, Rate, RateLookup

Class Method Summary collapse

Class Method Details

.find_rate(code, price, address) ⇒ Workarea::Tax::Rate

Finds the appropriate tax rate for a code/price/location

Parameters:

Returns:



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'app/models/workarea/tax.rb', line 10

def self.find_rate(code, price, address)
  category = Workarea::Tax::Category.find_by_code(code)
  return Workarea::Tax::Rate.new unless category.present?

  has_address_requirements = [:country, :region, :postal_code].inject(true) do |memo, detail|
    memo && address.send(detail).present?
  end

  return Workarea::Tax::Rate.new unless has_address_requirements

  rate = category.find_rate(
    price,
    address.country,
    address.region,
    address.postal_code
  )

  rate || Workarea::Tax::Rate.new
end