Sha256: 3a6bcbff2c5045df8917932bb873eea11804eadbc87c0916414634d9d53ca194

Contents?: true

Size: 1.28 KB

Versions: 63

Compression:

Stored size: 1.28 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.new(amount.to_s).round(2, BigDecimal::ROUND_HALF_UP)
    end
  end
end

Version data entries

63 entries across 63 versions & 1 rubygems

Version Path
spree_core-3.4.6 app/models/concerns/spree/vat_price_calculation.rb
spree_core-3.2.9 app/models/concerns/spree/vat_price_calculation.rb
spree_core-3.1.14 app/models/concerns/spree/vat_price_calculation.rb
spree_core-3.6.6 app/models/concerns/spree/vat_price_calculation.rb
spree_core-3.6.5 app/models/concerns/spree/vat_price_calculation.rb
spree_core-3.6.4 app/models/concerns/spree/vat_price_calculation.rb
spree_core-3.6.3 app/models/concerns/spree/vat_price_calculation.rb
spree_core-3.6.2 app/models/concerns/spree/vat_price_calculation.rb
spree_core-3.6.1 app/models/concerns/spree/vat_price_calculation.rb
spree_core-3.6.0 app/models/concerns/spree/vat_price_calculation.rb
spree_core-3.5.0 app/models/concerns/spree/vat_price_calculation.rb
spree_core-3.3.6 app/models/concerns/spree/vat_price_calculation.rb
spree_core-3.2.8 app/models/concerns/spree/vat_price_calculation.rb
spree_core-3.1.13 app/models/concerns/spree/vat_price_calculation.rb
spree_core-3.6.0.rc1 app/models/concerns/spree/vat_price_calculation.rb
spree_core-3.5.0.rc2 app/models/concerns/spree/vat_price_calculation.rb
spree_core-3.5.0.rc1 app/models/concerns/spree/vat_price_calculation.rb
spree_core-3.4.5 app/models/concerns/spree/vat_price_calculation.rb
spree_core-3.3.5 app/models/concerns/spree/vat_price_calculation.rb
spree_core-3.4.4 app/models/concerns/spree/vat_price_calculation.rb