Class: Solidus::Returnly::RefundCalculator
- Inherits:
-
Object
- Object
- Solidus::Returnly::RefundCalculator
- Defined in:
- lib/solidus/returnly/refund_calculator.rb
Instance Attribute Summary collapse
-
#line_items ⇒ Object
Returns the value of attribute line_items.
-
#order ⇒ Object
Returns the value of attribute order.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(order, line_items) ⇒ RefundCalculator
constructor
A new instance of RefundCalculator.
- #line_item(id) ⇒ Object
- #line_item_inventory_unit(line_item) ⇒ Object
- #line_items_return_items ⇒ Object
- #requested_line_items ⇒ Object
- #returnable_inventory_units ⇒ Object
- #returnable_line_items ⇒ Object
- #set_tax(return_item) ⇒ Object
Constructor Details
#initialize(order, line_items) ⇒ RefundCalculator
Returns a new instance of RefundCalculator.
10 11 12 13 |
# File 'lib/solidus/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.
4 5 6 |
# File 'lib/solidus/returnly/refund_calculator.rb', line 4 def line_items @line_items end |
#order ⇒ Object
Returns the value of attribute order.
4 5 6 |
# File 'lib/solidus/returnly/refund_calculator.rb', line 4 def order @order end |
Class Method Details
.process(order, line_items) ⇒ Object
6 7 8 |
# File 'lib/solidus/returnly/refund_calculator.rb', line 6 def self.process(order, line_items) RefundPresenter.present_estimate new(order, line_items) end |
Instance Method Details
#line_item(id) ⇒ Object
48 49 50 |
# File 'lib/solidus/returnly/refund_calculator.rb', line 48 def line_item(id) returnable_line_items.find { |i| i.id == id.to_i } end |
#line_item_inventory_unit(line_item) ⇒ Object
44 45 46 |
# File 'lib/solidus/returnly/refund_calculator.rb', line 44 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_items ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/solidus/returnly/refund_calculator.rb', line 28 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) found_return_items[line_item[:order_line_item_id]] << set_tax(return_item) end end found_return_items end |
#requested_line_items ⇒ Object
62 63 64 |
# File 'lib/solidus/returnly/refund_calculator.rb', line 62 def requested_line_items line_items.map { |item| item[:order_line_item_id] } end |
#returnable_inventory_units ⇒ Object
52 53 54 55 56 |
# File 'lib/solidus/returnly/refund_calculator.rb', line 52 def returnable_inventory_units @_inventory_units ||= order.inventory_units.includes(:line_item) .where(line_item_id: requested_line_items) .where('state is not "returned"') end |
#returnable_line_items ⇒ Object
58 59 60 |
# File 'lib/solidus/returnly/refund_calculator.rb', line 58 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/solidus/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 |