104 lines
3.3 KiB
Ruby
104 lines
3.3 KiB
Ruby
|
require 'qexpr'
|
||
|
require 'psql'
|
||
|
|
||
|
module QueryNonprofits
|
||
|
|
||
|
def self.all_that_need_payouts
|
||
|
Psql.execute_vectors(
|
||
|
Qexpr.new.select(
|
||
|
"nonprofits.id",
|
||
|
"nonprofits.stripe_account_id",
|
||
|
"'support@commitchange.com' AS email",
|
||
|
"'192.168.0.1' AS user_ip",
|
||
|
"bank_accounts.name"
|
||
|
).from(:nonprofits)
|
||
|
.where("nonprofits.verification_status='verified'")
|
||
|
.join(:bank_accounts, "bank_accounts.nonprofit_id=nonprofits.id")
|
||
|
.where("bank_accounts.pending_verification='f'")
|
||
|
.join(
|
||
|
Qexpr.new.select("nonprofit_id")
|
||
|
.from(:charges).group_by("nonprofit_id")
|
||
|
.where("status='available'").as("charges"),
|
||
|
"charges.nonprofit_id=nonprofits.id"
|
||
|
)
|
||
|
)[1..-1]
|
||
|
end
|
||
|
|
||
|
def self.by_search_string(string)
|
||
|
results = Psql.execute_vectors(
|
||
|
Qexpr.new.select(
|
||
|
"nonprofits.id",
|
||
|
"nonprofits.name"
|
||
|
).from(:nonprofits)
|
||
|
.where("lower(nonprofits.name) LIKE lower($search)", search: "%#{string}%")
|
||
|
.where("nonprofits.published='t'")
|
||
|
.order_by("nonprofits.name ASC")
|
||
|
.limit(10)
|
||
|
)[1..-1]
|
||
|
if results
|
||
|
results = results.map {|id, name| {id: id, name: name}}
|
||
|
end
|
||
|
return results
|
||
|
end
|
||
|
|
||
|
def self.for_admin(params)
|
||
|
expr = Qx.select(
|
||
|
'nonprofits.id',
|
||
|
'nonprofits.name',
|
||
|
'nonprofits.email',
|
||
|
'nonprofits.state_code',
|
||
|
'nonprofits.created_at::date::text AS created_at',
|
||
|
'nonprofits.verification_status',
|
||
|
'nonprofits.vetted',
|
||
|
'nonprofits.stripe_account_id',
|
||
|
'coalesce(events.count, 0) AS events_count',
|
||
|
'coalesce(campaigns.count, 0) AS campaigns_count',
|
||
|
'billing_plans.percentage_fee',
|
||
|
'cards.stripe_customer_id',
|
||
|
'charges.total_processed',
|
||
|
'charges.total_fees'
|
||
|
).from(:nonprofits)
|
||
|
.add_left_join(:cards, "cards.holder_id=nonprofits.id AND cards.holder_type='Nonprofit'")
|
||
|
.add_left_join(:billing_subscriptions, "billing_subscriptions.nonprofit_id=nonprofits.id")
|
||
|
.add_left_join(:billing_plans, "billing_subscriptions.billing_plan_id=billing_plans.id")
|
||
|
.add_left_join(
|
||
|
Qx.select(
|
||
|
"((SUM(coalesce(fee, 0)) * .978) / 100)::money::text AS total_fees",
|
||
|
"(SUM(coalesce(amount, 0)) / 100)::money::text AS total_processed",
|
||
|
"nonprofit_id")
|
||
|
.from(:charges)
|
||
|
.where("status != 'failed'")
|
||
|
.and_where("created_at::date >= '2017-03-15'")
|
||
|
.group_by("nonprofit_id")
|
||
|
.as("charges"),
|
||
|
"charges.nonprofit_id=nonprofits.id"
|
||
|
)
|
||
|
.add_left_join(
|
||
|
Qx.select("COUNT(id)", "nonprofit_id")
|
||
|
.from(:events)
|
||
|
.group_by("nonprofit_id")
|
||
|
.as("events"),
|
||
|
"events.nonprofit_id=nonprofits.id"
|
||
|
)
|
||
|
.add_left_join(
|
||
|
Qx.select("COUNT(id)", "nonprofit_id")
|
||
|
.from(:campaigns)
|
||
|
.group_by("nonprofit_id")
|
||
|
.as("campaigns"),
|
||
|
"campaigns.nonprofit_id=nonprofits.id"
|
||
|
)
|
||
|
.paginate(params[:page].to_i, params[:page_length].to_i)
|
||
|
.order_by('nonprofits.created_at DESC')
|
||
|
|
||
|
if params[:search].present?
|
||
|
expr = expr.where(%Q(
|
||
|
nonprofits.name ILIKE $search
|
||
|
OR nonprofits.email ILIKE $search
|
||
|
OR nonprofits.city ILIKE $search
|
||
|
), search: '%' + params[:search] + '%')
|
||
|
end
|
||
|
|
||
|
return expr.execute
|
||
|
end
|
||
|
end
|