Class: Returnly::RefundCalculator
- Inherits:
-
Object
- Object
- Returnly::RefundCalculator
- Defined in:
- lib/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
- #shipping_tax ⇒ Object
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_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
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_items ⇒ Object
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_items ⇒ Object
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_units ⇒ Object
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_items ⇒ Object
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_tax ⇒ Object
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 |