Sha256: fce361adc8a4e066211b32235ec4cdc2be38b8587cf5994d59bb0c41174a40e3

Contents?: true

Size: 1.79 KB

Versions: 47

Compression:

Stored size: 1.79 KB

Contents

require_dependency 'spree/calculator'

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

    # Default tax calculator still needs to support orders for legacy reasons
    # Orders created before Spree 2.1 had tax adjustments applied to the order, as a whole.
    # Orders created with Spree 2.2 and after, have them applied to the line items individually.
    def compute_order(order)

      matched_line_items = order.line_items.select do |line_item|
        line_item.tax_category == rate.tax_category
      end

      line_items_total = matched_line_items.sum(&:total)
      if rate.included_in_price
        round_to_two_places(line_items_total - ( line_items_total / (1 + rate.amount) ) )
      else
        round_to_two_places(line_items_total * rate.amount)
      end
    end

    # When it comes to computing shipments or line items: same same.
    def compute_shipment_or_line_item(item)
      if rate.included_in_price
        deduced_total_by_rate(item.pre_tax_amount, rate)
      else
        round_to_two_places(item.discounted_amount * rate.amount)
      end
    end

    alias_method :compute_shipment, :compute_shipment_or_line_item
    alias_method :compute_line_item, :compute_shipment_or_line_item

    def compute_shipping_rate(shipping_rate)
      if rate.included_in_price
        pre_tax_amount = shipping_rate.cost / (1 + rate.amount)
        deduced_total_by_rate(pre_tax_amount, rate)
      else
        with_tax_amount = shipping_rate.cost * rate.amount
        round_to_two_places(with_tax_amount)
      end
    end

    private

    def rate
      self.calculable
    end

    def deduced_total_by_rate(pre_tax_amount, rate)
      round_to_two_places(pre_tax_amount * rate.amount)
    end
  end
end

Version data entries

47 entries across 47 versions & 2 rubygems

Version Path
goca-spree-core-3.1.14.rails.5.0.1 app/models/spree/calculator/default_tax.rb
goca-spree-core-3.1.14.rails.5.0 app/models/spree/calculator/default_tax.rb
goca-spree-core-3.1.15.rails.5.0 app/models/spree/calculator/default_tax.rb
goca-spree-core-3.1.15.pre.rails.pre.5.0 app/models/spree/calculator/default_tax.rb
spree_core-3.2.9 app/models/spree/calculator/default_tax.rb
spree_core-3.1.14 app/models/spree/calculator/default_tax.rb
spree_core-3.3.6 app/models/spree/calculator/default_tax.rb
spree_core-3.2.8 app/models/spree/calculator/default_tax.rb
spree_core-3.1.13 app/models/spree/calculator/default_tax.rb
spree_core-3.3.5 app/models/spree/calculator/default_tax.rb
spree_core-3.3.4 app/models/spree/calculator/default_tax.rb
spree_core-3.2.7 app/models/spree/calculator/default_tax.rb
spree_core-3.1.12 app/models/spree/calculator/default_tax.rb
spree_core-3.3.3 app/models/spree/calculator/default_tax.rb
spree_core-3.2.6 app/models/spree/calculator/default_tax.rb
spree_core-3.1.11 app/models/spree/calculator/default_tax.rb
spree_core-3.1.10 app/models/spree/calculator/default_tax.rb
spree_core-3.3.2 app/models/spree/calculator/default_tax.rb
spree_core-3.2.5 app/models/spree/calculator/default_tax.rb
spree_core-3.1.9 app/models/spree/calculator/default_tax.rb