Class: Returnly::RefundCalculator

Inherits:
Object
  • Object
show all
Defined in:
lib/returnly/refund_calculator.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(order, line_items) ⇒ RefundCalculator

Returns a new instance of RefundCalculator.



9
10
11
12
# File 'lib/returnly/refund_calculator.rb', line 9

def initialize(order, line_items)
  self.line_items = line_items
  self.order = order
end

Instance Attribute Details

#line_itemsObject

Returns the value of attribute line_items.



3
4
5
# File 'lib/returnly/refund_calculator.rb', line 3

def line_items
  @line_items
end

#orderObject

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



5
6
7
# File 'lib/returnly/refund_calculator.rb', line 5

def self.process(order, line_items)
  RefundPresenter.present_estimate new(order, line_items)
end

Instance Method Details

#line_item(id) ⇒ Object



51
52
53
# File 'lib/returnly/refund_calculator.rb', line 51

def line_item(id)
  returnable_line_items.find { |i| i.id == id.to_i }
end

#line_item_inventory_unit(line_item) ⇒ Object



47
48
49
# File 'lib/returnly/refund_calculator.rb', line 47

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_items_return_itemsObject



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/returnly/refund_calculator.rb', line 31

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_itemsObject



65
66
67
# File 'lib/returnly/refund_calculator.rb', line 65

def requested_line_items
  line_items.map { |item| item[:order_line_item_id] }
end

#returnable_inventory_unitsObject



55
56
57
58
59
# File 'lib/returnly/refund_calculator.rb', line 55

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_itemsObject



61
62
63
# File 'lib/returnly/refund_calculator.rb', line 61

def returnable_line_items
  @_line_items ||= returnable_inventory_units.map(&:line_item)
end

#set_tax(return_item) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/returnly/refund_calculator.rb', line 14

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_taxObject



27
28
29
# File 'lib/returnly/refund_calculator.rb', line 27

def shipping_tax
  order.all_adjustments.where(source_type: 'Spree::TaxRate', adjustable_type: 'Spree::Shipment').sum(&:amount)
end