Sha256: 056015b992d988f8c0b89630a6dd5f3aea78d71ee36a8dd1d5f45eedcb6f29bb

Contents?: true

Size: 1.13 KB

Versions: 4

Compression:

Stored size: 1.13 KB

Contents

module Spree
  class Calculator::DefaultTax < Calculator
    def self.description
      I18n.t(:default_tax)
    end

    def compute(computable)
      case computable
        when Spree::Order
          compute_order(computable)
        when Spree::LineItem
          compute_line_item(computable)
      end
    end


    private

      def rate
        rate = self.calculable
      end

      def compute_order(order)
        matched_line_items = order.line_items.select do |line_item|
          line_item.product.tax_category == rate.tax_category
        end

        line_items_total = matched_line_items.sum(&:total)
        round_to_two_places(line_items_total * rate.amount)
      end

      def compute_line_item(line_item)
        if line_item.product.tax_category == rate.tax_category
          deduced_total_by_rate(line_item.total, rate)
        else
          0
        end
      end

      def round_to_two_places(amount)
        BigDecimal.new(amount.to_s).round(2, BigDecimal::ROUND_HALF_UP)
      end
      
      def deduced_total_by_rate(total, rate)
        round_to_two_places(total - ( total / (1 + rate.amount) ) )
      end

  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
spree_core-1.0.4 app/models/spree/calculator/default_tax.rb
spree_core-1.0.3 app/models/spree/calculator/default_tax.rb
spree_core-1.0.2 app/models/spree/calculator/default_tax.rb
spree_core-1.0.1 app/models/spree/calculator/default_tax.rb