Sha256: 2992de174182f7c5435657476058e3048ceec3c7731c2e9ea50a81317e6a2211

Contents?: true

Size: 764 Bytes

Versions: 62

Compression:

Stored size: 764 Bytes

Contents

module Workarea::Tax
  # Finds the appropriate tax rate for a code/price/location
  #
  # @param [String] code
  # @param [Money] price
  # @param [Workarea::Address] address
  #
  # @return [Workarea::Tax::Rate]
  #
  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
end

Version data entries

62 entries across 62 versions & 1 rubygems

Version Path
workarea-core-3.5.27 app/models/workarea/tax.rb
workarea-core-3.5.26 app/models/workarea/tax.rb
workarea-core-3.4.45 app/models/workarea/tax.rb
workarea-core-3.5.25 app/models/workarea/tax.rb
workarea-core-3.5.23 app/models/workarea/tax.rb
workarea-core-3.4.44 app/models/workarea/tax.rb
workarea-core-3.5.22 app/models/workarea/tax.rb
workarea-core-3.4.43 app/models/workarea/tax.rb
workarea-core-3.5.21 app/models/workarea/tax.rb
workarea-core-3.4.42 app/models/workarea/tax.rb
workarea-core-3.5.20 app/models/workarea/tax.rb
workarea-core-3.4.41 app/models/workarea/tax.rb
workarea-core-3.5.19 app/models/workarea/tax.rb
workarea-core-3.4.40 app/models/workarea/tax.rb
workarea-core-3.5.18 app/models/workarea/tax.rb
workarea-core-3.4.39 app/models/workarea/tax.rb
workarea-core-3.5.17 app/models/workarea/tax.rb
workarea-core-3.4.38 app/models/workarea/tax.rb
workarea-core-3.5.16 app/models/workarea/tax.rb
workarea-core-3.4.37 app/models/workarea/tax.rb