class Returnly::RefundCalculator

Attributes

line_items[RW]
order[RW]

Public Class Methods

new(order, line_items) click to toggle source
# File lib/returnly/refund_calculator.rb, line 10
def initialize(order, line_items)
  self.line_items = line_items
  self.order = order
end
process(order, line_items) click to toggle source
# File lib/returnly/refund_calculator.rb, line 6
def self.process(order, line_items)
  refund_presenter_class.present_estimate new(order, line_items)
end

Public Instance Methods

discount() click to toggle source
# File lib/returnly/refund_calculator.rb, line 15
def discount
  Returnly::DiscountCalculator.new(order).calculate(line_items)
end
gift_card() click to toggle source
# File lib/returnly/refund_calculator.rb, line 36
def gift_card
  @gift_card ||= self.class.gift_card_estimate_class.new(order)
end
line_item_tax(line_item) click to toggle source
# File lib/returnly/refund_calculator.rb, line 19
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() click to toggle source
# File lib/returnly/refund_calculator.rb, line 23
def line_items_return_items
  available_return_items.each_with_object({}) do |return_item, return_items|
    line_item_id = return_item.inventory_unit.line_item_id
    return_items[line_item_id] ||= []
    return_items[line_item_id] << set_tax(return_item)
    return_items
  end
end
shipping_tax() click to toggle source
# 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

Protected Instance Methods

available_return_items() click to toggle source
# File lib/returnly/refund_calculator.rb, line 42
def available_return_items
  self.class.return_item_builder_class.new(order).build_by_requested_line_items(line_items)
end
set_tax(return_item) click to toggle source
# File lib/returnly/refund_calculator.rb, line 46
def set_tax(return_item)
  percent_of_tax = if return_item.amount <= 0
                     0
                   else
                     return_item.amount / Spree::ReturnItem.refund_amount_calculator.new.compute(return_item)
                   end

  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