Class: Returnly::RefundPresenter

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

Class Method Summary collapse

Class Method Details

.present_estimate(calculator) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/returnly/refund_presenter.rb', line 4

def self.present_estimate(calculator)
  total = Money.new 0
  sub_total = Money.new 0

  calculator.line_items_return_items.values.flatten.each do |return_item|
    total += Money.from_amount return_item.total
    sub_total += Money.from_amount return_item.pre_tax_amount
  end

  total_refund_amount = total - calculator.order.promo_total
  shipping_tax        = calculator.shipping_tax
  {
    product_amount:                 sub_total.to_f,
    tax_amount:                     (total - sub_total).to_f,
    discount_amount:                calculator.order.promo_total.to_f,
    total_refund_amount:            total_refund_amount.to_f,
    refundable_shipping_amount:     calculator.order.shipment_total.to_f,
    refundable_shipping_tax_amount: shipping_tax.to_f,
    max_refundable_amount:          (calculator.order.total - calculator.order.refunds.sum(&:amount)).to_f,
    refunds_by_payment_method:      refunds_by_payment(calculator.order, total_refund_amount.to_d + calculator.order.shipment_total + shipping_tax)
  }
end

.present_line_items(calculator) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/returnly/refund_presenter.rb', line 27

def self.present_line_items(calculator)
  calculator.line_items_return_items.values.map do |return_items|
    line_item = return_items.first.inventory_unit.line_item

    total_amount = 0.0
    sub_total = 0.0

    return_items.each do |return_item|
      total_amount += return_item.total
      sub_total += return_item.pre_tax_amount
    end

    {
      order_line_item_id: line_item.id,
      quantity: return_items.size,
      total_amount: total_amount.to_f,
      tax_amount: (total_amount - sub_total).to_f
    }
  end
end

.present_refund(refunder) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/returnly/refund_presenter.rb', line 49

def self.present_refund(refunder)
  customer_return = refunder.customer_return

  {
    refund_id:    refunder.order.refunds.last.try(:id),
    line_items:   customer_return.return_items.group_by { |ri| ri.inventory_unit.line_item.id }.map do |_, return_items|
      first_return_item = return_items.first
      {
        refund_line_item_id:      first_return_item.id,
        order_line_item_id:       first_return_item.inventory_unit.line_item.id,
        refunded_amount_per_item: first_return_item.amount.to_f,
        units:                    return_items.size
      }
    end,
    transactions: [
                    id:     refunder.reimbursement.id,
                    amount: refunder.reimbursement.total
                  ]
  }
end