Method: Spree::TaxRate.adjust

Defined in:
app/models/spree/tax_rate.rb

.adjust(order_tax_zone, items) ⇒ Object

This method is best described by the documentation on #potentially_applicable?



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'app/models/spree/tax_rate.rb', line 74

def self.adjust(order_tax_zone, items)
  rates = self.match(order_tax_zone)
  tax_categories = rates.map(&:tax_category)
  relevant_items, non_relevant_items = items.partition { |item| tax_categories.include?(item.tax_category) }
  relevant_items.each do |item|
    item.adjustments.tax.delete_all
    relevant_rates = rates.select { |rate| rate.tax_category == item.tax_category }
    store_pre_tax_amount(item, relevant_rates)
    relevant_rates.each do |rate|
      rate.adjust(order_tax_zone, item)
    end
  end
  non_relevant_items.each do |item|
    if item.adjustments.tax.present?
      item.adjustments.tax.delete_all
      item.update_column(:pre_tax_amount, nil)
      item.send(:recalculate_adjustments)
    end
  end
end