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



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/returnly/refund_presenter.rb', line 39

def present_estimate(calculator)
  sub_total = Money.new 0
  tax = Money.new 0

  calculator.line_items_return_items.values.flatten.each do |return_item|
    sub_total += Money.from_amount return_item.inventory_unit.line_item.price
    tax += Money.from_amount calculator.line_item_tax(return_item.inventory_unit.line_item)
  end

  discount = Money.from_amount(calculator.discount)
  total_refund_amount = sub_total + tax - (discount * -1) # discount is negative, so we multiply it by -1 to make it positive for subtraction
  shipping_tax        = calculator.shipping_tax
  {
    product_amount: sub_total.to_s,
    tax_amount: tax.to_s,
    discount_amount: (discount * -1).to_s,
    total_refund_amount: total_refund_amount.to_s,
    refundable_shipping_amount: Money.from_amount(calculator.order.shipment_total).to_s,
    refundable_shipping_tax_amount: Money.from_amount(shipping_tax).to_s,
    max_refundable_amount: Money.from_amount(calculator.order.total - calculator.order.refunds.reload.sum(&:amount)).to_s,
    transactions: transactions_for_estimate(
      calculator.order,
      calculator.gift_card,
      total_refund_amount.to_d + calculator.order.shipment_total + shipping_tax
    )
  }
end

.present_refund(refunder) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/returnly/refund_presenter.rb', line 4

def present_refund(refunder)
  customer_return = refunder.customer_return
  refund = refunder.order.reload.refunds.last

  {
    refund_id: refund.try(:id).try(:to_s),
    user_id: refunder.order.user_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.to_s,
        order_line_item_id: first_return_item.inventory_unit.line_item.id.to_s,
        units: return_items.size,
        restock: first_return_item.resellable
      }
    end,
    transactions: refunder.reimbursement.refunds.map do |refund|
      {
        id: refund.transaction_id,
        amount: refund.amount.to_s,
        status: transaction_status(refund.payment),
        type: 'REFUND',
        gateway: refund.payment.payment_method.type.demodulize,
        is_online: true,
        is_test: !Rails.env.match?(/production/),
        payment_details: transaction_payment_details(refund.payment, refunder.gift_card_class.new(refund)),
        created_at: refund.created_at.iso8601(3),
        updated_at: refund.updated_at.iso8601(3)
      }
    end,
    created_at: refund.try(:created_at).try(:iso8601, 3),
    updated_at: refund.try(:updated_at).try(:iso8601, 3)
  }
end

.present_refund_with_zero_amount(refunder) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/returnly/refund_presenter.rb', line 67

def present_refund_with_zero_amount(refunder)
  {
    refund_id: '1',
    line_items: refunder.line_items.map do |line_item|
      {
        refund_line_item_id: '1',
        order_line_item_id: line_item[:order_line_item_id].to_s,
        units: line_item[:units].to_i,
        restock: line_item[:restock].match?(/true/)
      }
    end,
    transactions: [],
    created_at: Time.zone.now.iso8601(3)
  }
end