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.4.13 app/models/workarea/tax.rb
workarea-core-3.4.12 app/models/workarea/tax.rb