Class: LineItem

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
lib/forge/app/models/line_item.rb

Instance Method Summary collapse

Instance Method Details

#applicable_tax_rate(billing_address) ⇒ Object

collect all of the applicable tax rates based on where the person purchasing it is located, then enumerate through them and add up their rates



25
26
27
28
29
30
31
# File 'lib/forge/app/models/line_item.rb', line 25

def applicable_tax_rate(billing_address)
  raise "billing address must be an Address" unless billing_address.kind_of? Address
  applicable_tax_rates = self.product.tax_rates.where(country_id: billing_address.country_id).to_a
  applicable_tax_rates += self.product.tax_rates.where(province_id: billing_address.province_id).to_a if billing_address.province_id
  # use uniq to ensure we don't charge tax too many times - it's possible to get overlapping rates between a country and its provinces
  applicable_tax_rates.uniq.inject(0.0) { |sum, applicable_tax_rate| sum += applicable_tax_rate.rate }
end

#total_priceObject



11
12
13
# File 'lib/forge/app/models/line_item.rb', line 11

def total_price
  quantity * price
end

#total_price_with_tax(billing_address) ⇒ Object



19
20
21
# File 'lib/forge/app/models/line_item.rb', line 19

def total_price_with_tax(billing_address)
  total_price + total_tax(billing_address)
end

#total_tax(billing_address) ⇒ Object



15
16
17
# File 'lib/forge/app/models/line_item.rb', line 15

def total_tax(billing_address)
  total_price * (applicable_tax_rate(billing_address) / 100.0).round(2)
end