Sha256: 0eb90ff2dfee08291e52e6d2c934325357caeaf07d0b963094dd5ec30c2c25c7

Contents?: true

Size: 1.25 KB

Versions: 51

Compression:

Stored size: 1.25 KB

Contents

module Piggybak
  class TaxMethod < ActiveRecord::Base
    has_many :tax_method_values, :dependent => :destroy
    alias :metadata :tax_method_values

    validates_presence_of :description
    validates_presence_of :klass

    accepts_nested_attributes_for :tax_method_values, :allow_destroy => true

    validates_each :tax_method_values do |record, attr, value|
      if record.klass
        calculator = record.klass.constantize
        metadata_keys = value.collect { |v| v.key }.sort
        if calculator::KEYS.sort != metadata_keys
          if calculator::KEYS.empty?
            record.errors.add attr, "You don't need any metadata for this method."
          else
            record.errors.add attr, "You must define key values for #{calculator::KEYS.join(', ')} for this tax method."
          end
        end
      end
    end

    def klass_enum 
      Piggybak.config.tax_calculators
    end

    def self.calculate_tax(object)
      total_tax = 0

      TaxMethod.all.each do |tax_method|
        calculator = tax_method.klass.constantize
        if calculator.available?(tax_method, object)
          total_tax += calculator.rate(tax_method, object)
        end 
      end
      
      total_tax
    end

    def admin_label
      self.description
    end
  end
end

Version data entries

51 entries across 51 versions & 1 rubygems

Version Path
piggybak-0.5.5 app/models/piggybak/tax_method.rb
piggybak-0.5.4 app/models/piggybak/tax_method.rb
piggybak-0.5.3 app/models/piggybak/tax_method.rb
piggybak-0.5.2 app/models/piggybak/tax_method.rb
piggybak-0.5.1 app/models/piggybak/tax_method.rb
piggybak-0.5.0 app/models/piggybak/tax_method.rb
piggybak-0.4.39 app/models/piggybak/tax_method.rb
piggybak-0.4.38 app/models/piggybak/tax_method.rb
piggybak-0.4.37 app/models/piggybak/tax_method.rb
piggybak-0.4.36 app/models/piggybak/tax_method.rb
piggybak-0.4.35 app/models/piggybak/tax_method.rb
piggybak-0.4.34 app/models/piggybak/tax_method.rb
piggybak-0.4.33 app/models/piggybak/tax_method.rb
piggybak-0.4.32 app/models/piggybak/tax_method.rb
piggybak-0.4.31 app/models/piggybak/tax_method.rb
piggybak-0.4.30 app/models/piggybak/tax_method.rb
piggybak-0.4.29 app/models/piggybak/tax_method.rb
piggybak-0.4.28 app/models/piggybak/tax_method.rb
piggybak-0.4.27 app/models/piggybak/tax_method.rb
piggybak-0.4.26 app/models/piggybak/tax_method.rb