Class: Spree::TaxRate
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Metadata
#metadata, #metadata=, #public_metadata=
Class Method Details
.adjust(order, items) ⇒ Object
Deletes all tax adjustments, then applies all applicable rates to relevant items.
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
# File 'app/models/spree/tax_rate.rb', line 73
def self.adjust(order, items)
return if items.none?
rates = match(order.tax_zone)
tax_category_ids = rates.map(&:tax_category_id)
Spree::Adjustment.where(adjustable: items).tax.destroy_all
relevant_items = if tax_category_ids.any?
items.select do |item|
tax_category_ids.include?(item.tax_category_id)
end
else
[]
end
relevant_items.each do |item|
relevant_rates = rates.select do |rate|
rate.tax_category_id == item.tax_category_id
end
store_pre_tax_amount(item, relevant_rates)
relevant_rates.each do |rate|
rate.adjust(order, item)
end
end
remaining_items = items - relevant_items
remaining_items.each do |item|
store_pre_tax_amount(item, [])
end
end
|
.included_tax_amount_for(options) ⇒ Object
107
108
109
110
111
112
113
114
|
# File 'app/models/spree/tax_rate.rb', line 107
def self.included_tax_amount_for(options)
return 0 unless options[:tax_zone] && options[:tax_category]
potential_rates_for_zone(options[:tax_zone]).
included_in_price.
for_tax_category(options[:tax_category]).
sum(:amount)
end
|
.match(order_tax_zone) ⇒ Object
Gets the array of TaxRates appropriate for the specified tax zone
48
49
50
51
52
|
# File 'app/models/spree/tax_rate.rb', line 48
def self.match(order_tax_zone)
return [] unless order_tax_zone
potential_rates_for_zone(order_tax_zone)
end
|
.store_pre_tax_amount(item, rates) ⇒ Object
57
58
59
60
61
62
63
64
65
66
67
68
69
|
# File 'app/models/spree/tax_rate.rb', line 57
def self.store_pre_tax_amount(item, rates)
pre_tax_amount = case item.class.to_s
when 'Spree::LineItem' then item.discounted_amount
when 'Spree::Shipment' then item.discounted_cost
end
included_rates = rates.select(&:included_in_price)
if included_rates.any?
pre_tax_amount /= (1 + included_rates.sum(&:amount))
end
item.update_column(:pre_tax_amount, pre_tax_amount)
end
|
Instance Method Details
#additional? ⇒ Boolean
128
129
130
|
# File 'app/models/spree/tax_rate.rb', line 128
def additional?
!included_in_price
end
|
#adjust(order, item) ⇒ Object
116
117
118
|
# File 'app/models/spree/tax_rate.rb', line 116
def adjust(order, item)
create_adjustment(order, item, included_in_price)
end
|
#amount_percentage ⇒ Object
Virtual attribute for percentage display in admin forms
37
38
39
40
41
|
# File 'app/models/spree/tax_rate.rb', line 37
def amount_percentage
return nil if amount.nil?
(amount * 100).round(2)
end
|
#amount_percentage=(value) ⇒ Object
43
44
45
|
# File 'app/models/spree/tax_rate.rb', line 43
def amount_percentage=(value)
self.amount = value.present? ? (value.to_f / 100) : nil
end
|
#compute_amount(item) ⇒ Object
120
121
122
|
# File 'app/models/spree/tax_rate.rb', line 120
def compute_amount(item)
compute(item)
end
|
124
125
126
|
# File 'app/models/spree/tax_rate.rb', line 124
def included?
included_in_price
end
|