Module: RailsTrade::Refund::PaypalRefund

Included in:
PaypalRefund
Defined in:
app/models/rails_trade/refund/paypal_refund.rb

Instance Method Summary collapse

Instance Method Details

#do_refund(params = {}) ⇒ Object



3
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
# File 'app/models/rails_trade/refund/paypal_refund.rb', line 3

def do_refund(params = {})
  return unless can_refund?
  sale = PayPal::SDK::REST::DataTypes::Sale.find(payment.payment_uuid)

  params = params.merge({
    amount: {
      total: self.total_amount.to_s(:rounded, precision: 2),
      currency: self.currency.upcase
    }
  })

  result = sale.refund(params)

  order.payment_status = 'refunded'
  self.operator_id = params[:operator_id]

  if result.success?
    self.state = 'completed'
    self.refunded_at = Time.now
    self.class.transaction do
      order.save!
      self.save!
    end
  elsif result.error
    self.update reason: result.error['message']
  end
  result
end