Sha256: 4d099031a8195050e10f42019f1f35ddca0fb005ff2a85e13acaa65d2fa7522d

Contents?: true

Size: 1.53 KB

Versions: 1

Compression:

Stored size: 1.53 KB

Contents

module Shoppe
  class TaxRate < ActiveRecord::Base

    self.table_name = 'shoppe_tax_rates'

    include Shoppe::AssociatedCountries

    # The order address types which may be used when choosing how to apply the tax rate
    ADDRESS_TYPES = ['billing', 'delivery']

    # Validations
    validates :name, presence: true
    validates :address_type, inclusion: {in: ADDRESS_TYPES}
    validates :rate, numericality: true

    # All products which are assigned to this tax rate
    has_many :products, dependent: :restrict_with_exception, class_name: 'Shoppe::Product'

    # All delivery service prices which are assigned to this tax rate
    has_many :delivery_service_prices, dependent: :restrict_with_exception, class_name: 'Shoppe::DeliveryServicePrice'

    # All tax rates ordered by their ID
    scope :ordered, -> { order(:id)}

    # Set the address type if appropriate
    before_validation { self.address_type = ADDRESS_TYPES.first if self.address_type.blank? }

    # A description of the tax rate including its name & percentage
    #
    # @return [String]
    def description
      "#{name} (#{rate}%)"
    end

    # The rate for a given order based on the rules on the tax rate
    #
    # @return [BigDecimal]
    def rate_for(order)
      return rate if countries.empty?
      return rate if address_type == 'billing'  && (order.billing_country.nil?   || country?(order.billing_country))
      return rate if address_type == 'delivery' && (order.delivery_country.nil?  || country?(order.delivery_country))
      BigDecimal(0)
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
shoppe-1.1.2 app/models/shoppe/tax_rate.rb