houdini/app/controllers/nonprofits/payouts_controller.rb
2020-06-15 10:26:57 -05:00

59 lines
2.2 KiB
Ruby

# frozen_string_literal: true
# License: AGPL-3.0-or-later WITH WTO-AP-3.0-or-later
# Full license explanation at https://github.com/houdiniproject/houdini/blob/master/LICENSE
module Nonprofits
class PayoutsController < ApplicationController
include Controllers::Nonprofit::Current
include Controllers::Nonprofit::Authorization
before_action :authenticate_nonprofit_admin!, only: :create
before_action :authenticate_nonprofit_user!, only: %i[index show]
def create
payout = InsertPayout.with_stripe(current_nonprofit.id, {
stripe_account_id: current_nonprofit.stripe_account_id,
email: current_user.email,
user_ip: current_user.current_sign_in_ip,
bank_name: current_nonprofit.bank_account.name
}, before_date: payout_params[:before_date])
if payout['failure_message'].present?
flash[:notice] = "The payout failed: #{payout['failure_message']}"
render json: payout, status: :unprocessable_entity
else
flash[:notice] = 'We successfully submitted your payout! View status and receipts below.'
render json: payout, status: :ok
end
end
def index
@nonprofit = Nonprofit.find(params[:nonprofit_id])
@payouts = @nonprofit.payouts.order('created_at DESC')
balances = QueryPayments.nonprofit_balances(params[:nonprofit_id])
@available_total = balances['available_gross']
@pending_total = balances['pending_gross']
@can_make_payouts = @nonprofit.can_make_payouts
end
# get /nonprofits/:nonprofit_id/payouts/:id
def show
payout = current_nonprofit.payouts.find(params[:id])
respond_to do |format|
format.json { render json: payout }
format.csv do
payments = QueryPayments.for_payout(params[:nonprofit_id], params[:id])
filename = "payout-#{payout.created_at.strftime('%m-%d-%Y')}"
send_data(Format::Csv.from_vectors(payments), filename: "#{filename}.csv")
end
end
end
private
def payout_params
params.permit(:before_date)
end
end
end