2018-03-25 16:15:39 +00:00
|
|
|
# License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
|
2018-03-25 17:30:42 +00:00
|
|
|
module UpdatePayouts
|
|
|
|
|
|
|
|
def self.reverse_with_stripe(payout_id, status, failure_message)
|
|
|
|
ParamValidation.new({payout_id:payout_id, status: status, failure_message: failure_message}, {
|
|
|
|
payout_id: {required: true, is_integer: true},
|
|
|
|
status: {included_in:['pending', 'paid', 'canceled', 'failed'], required: true},
|
|
|
|
failure_message: {not_blank: true, required: true}
|
|
|
|
})
|
|
|
|
payout = Payout.where('id = ?', payout_id).first
|
|
|
|
unless payout
|
|
|
|
raise ParamValidation::ValidationError.new("No payout with id number: #{payout_id} ", [{key: :payout_id}])
|
|
|
|
end
|
|
|
|
|
|
|
|
payment_ids = payout.payments.select('payments.id').map{|i| i.id}.to_a
|
|
|
|
if payment_ids.count < 1
|
|
|
|
raise ArgumentError.new("No payments are available to reverse.")
|
|
|
|
end
|
|
|
|
now = Time.current
|
|
|
|
|
|
|
|
Psql.transaction do
|
|
|
|
# Retrieve all payments with available charges and undisbursed refunds
|
|
|
|
# Mark all the above payments as disbursed
|
|
|
|
UpdateCharges.reverse_disburse_all_with_payments(payment_ids)
|
|
|
|
# Mark all the above refunds as disbursed
|
|
|
|
|
|
|
|
UpdateRefunds.reverse_disburse_all_with_payments(payment_ids)
|
|
|
|
# Mark all disputes as lost_and_paid
|
|
|
|
#UpdateDisputes.disburse_all_with_payments(payment_ids)
|
|
|
|
# Get gross total, total fees, net total, and total count
|
|
|
|
# Create the payout record (whether it succeeded on Stripe or not)
|
|
|
|
payout.status = status
|
|
|
|
payout.failure_message = failure_message
|
|
|
|
payout.save!
|
|
|
|
|
|
|
|
|
|
|
|
#NonprofitMailer.delay.pending_payout_notification(payout['id'].to_i)
|
|
|
|
payout
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|