Class: Returnly::RefundCalculator
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
refund_calculator_class, refund_presenter_class, refunder_class, return_item_amount_calculator_class, return_item_restock_policy_class
Constructor Details
#initialize(order, line_items) ⇒ RefundCalculator
Returns a new instance of RefundCalculator.
10
11
12
13
|
# File 'lib/returnly/refund_calculator.rb', line 10
def initialize(order, line_items)
self.line_items = line_items
self.order = order
end
|
Instance Attribute Details
#line_items ⇒ Object
Returns the value of attribute line_items.
3
4
5
|
# File 'lib/returnly/refund_calculator.rb', line 3
def line_items
@line_items
end
|
#order ⇒ Object
Returns the value of attribute order.
3
4
5
|
# File 'lib/returnly/refund_calculator.rb', line 3
def order
@order
end
|
Class Method Details
.process(order, line_items) ⇒ Object
6
7
8
|
# File 'lib/returnly/refund_calculator.rb', line 6
def self.process(order, line_items)
refund_presenter_class.present_estimate new(order, line_items)
end
|
Instance Method Details
#line_item(id) ⇒ Object
60
61
62
|
# File 'lib/returnly/refund_calculator.rb', line 60
def line_item(id)
returnable_line_items.find { |i| i.id == id.to_i }
end
|
#line_item_inventory_unit(line_item) ⇒ Object
56
57
58
|
# File 'lib/returnly/refund_calculator.rb', line 56
def line_item_inventory_unit(line_item)
returnable_inventory_units.select { |iu| iu.line_item_id == line_item[:order_line_item_id].to_i }
end
|
#line_item_tax(line_item) ⇒ Object
36
37
38
|
# File 'lib/returnly/refund_calculator.rb', line 36
def line_item_tax(line_item)
(line_item.adjustments.tax.sum(&:amount).to_d / line_item.quantity).round(2, :down)
end
|
#line_items_return_items ⇒ Object
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/returnly/refund_calculator.rb', line 40
def line_items_return_items
found_return_items = {}
line_items.each do |line_item|
with_available_inventory_units line_item do |inventory_unit, quantity|
next unless quantity > 0
found_return_items[line_item[:order_line_item_id]] ||= []
return_item = create_return_item(inventory_unit, restock: line_item[:restock])
found_return_items[line_item[:order_line_item_id]] << set_tax(return_item)
end
end
found_return_items
end
|
#requested_line_items ⇒ Object
74
75
76
|
# File 'lib/returnly/refund_calculator.rb', line 74
def requested_line_items
line_items.map { |item| item[:order_line_item_id] }
end
|
#returnable_inventory_units ⇒ Object
64
65
66
67
68
|
# File 'lib/returnly/refund_calculator.rb', line 64
def returnable_inventory_units
@_inventory_units ||= order.inventory_units.includes(:line_item)
.where(line_item_id: requested_line_items)
.where('state != ?', 'returned')
end
|
#returnable_line_items ⇒ Object
70
71
72
|
# File 'lib/returnly/refund_calculator.rb', line 70
def returnable_line_items
@_line_items ||= returnable_inventory_units.map(&:line_item)
end
|
#set_tax(return_item) ⇒ Object
15
16
17
18
19
20
21
22
23
24
25
26
|
# File 'lib/returnly/refund_calculator.rb', line 15
def set_tax(return_item)
percent_of_tax = (return_item.amount <= 0) ? 0 : return_item.amount /
Spree::ReturnItem.refund_amount_calculator.new.compute(return_item)
additional_tax_total = percent_of_tax * return_item.inventory_unit.additional_tax_total
included_tax_total = percent_of_tax * return_item.inventory_unit.included_tax_total
return_item.additional_tax_total = additional_tax_total
return_item.included_tax_total = included_tax_total
return_item
end
|
#shipping_tax ⇒ Object
32
33
34
|
# File 'lib/returnly/refund_calculator.rb', line 32
def shipping_tax
order.all_adjustments.where(source_type: 'Spree::TaxRate', adjustable_type: 'Spree::Shipment').sum(&:amount).to_d.round(2, :down)
end
|