Sha256: 4ceebf05886489b33910450dc926b4cb6a9411611c6e9e5aba847479d9dcba2c

Contents?: true

Size: 1.27 KB

Versions: 102

Compression:

Stored size: 1.27 KB

Contents

module Spree
  module VatPriceCalculation
    def gross_amount(amount, price_options)
      return amount unless outside_default_vat_zone?(price_options)

      round_to_two_places(add_foreign_vat_for(amount, price_options))
    end

    private

    def add_foreign_vat_for(amount, price_options)
      amount = net_amount(amount, price_options[:tax_category])
      amount_with_foreign_vat(amount, price_options)
    end

    def net_amount(amount, tax_category)
      amount / (1 + default_vat(tax_category))
    end

    def default_vat(tax_category)
      included_tax_amount(tax_zone: default_zone, tax_category: tax_category)
    end

    def foreign_vat(price_options)
      included_tax_amount(price_options)
    end

    def amount_with_foreign_vat(amount, price_options)
      amount * (1 + foreign_vat(price_options))
    end

    def outside_default_vat_zone?(price_options)
      price_options[:tax_zone] && default_zone && price_options[:tax_zone] != default_zone
    end

    def included_tax_amount(price_options)
      Spree::TaxRate.included_tax_amount_for(price_options).to_f
    end

    def default_zone
      @_default_zone ||= Spree::Zone.default_tax
    end

    def round_to_two_places(amount)
      BigDecimal(amount.to_s).round(2, BigDecimal::ROUND_HALF_UP)
    end
  end
end

Version data entries

102 entries across 102 versions & 1 rubygems

Version Path
spree_core-4.10.1 app/models/concerns/spree/vat_price_calculation.rb
spree_core-4.10.0 app/models/concerns/spree/vat_price_calculation.rb
spree_core-4.9.0 app/models/concerns/spree/vat_price_calculation.rb
spree_core-4.8.3 app/models/concerns/spree/vat_price_calculation.rb
spree_core-4.8.2 app/models/concerns/spree/vat_price_calculation.rb
spree_core-4.7.3 app/models/concerns/spree/vat_price_calculation.rb
spree_core-4.6.6 app/models/concerns/spree/vat_price_calculation.rb
spree_core-4.5.5 app/models/concerns/spree/vat_price_calculation.rb
spree_core-4.0.9 app/models/concerns/spree/vat_price_calculation.rb
spree_core-4.1.15 app/models/concerns/spree/vat_price_calculation.rb
spree_core-4.2.7 app/models/concerns/spree/vat_price_calculation.rb
spree_core-4.3.3 app/models/concerns/spree/vat_price_calculation.rb
spree_core-4.4.1 app/models/concerns/spree/vat_price_calculation.rb
spree_core-4.5.4 app/models/concerns/spree/vat_price_calculation.rb
spree_core-4.6.5 app/models/concerns/spree/vat_price_calculation.rb
spree_core-4.7.2 app/models/concerns/spree/vat_price_calculation.rb
spree_core-4.7.1 app/models/concerns/spree/vat_price_calculation.rb
spree_core-4.6.4 app/models/concerns/spree/vat_price_calculation.rb
spree_core-4.7.0 app/models/concerns/spree/vat_price_calculation.rb
spree_core-4.6.3 app/models/concerns/spree/vat_price_calculation.rb