houdini/lib/query/query_nonprofits.rb

105 lines
3.4 KiB
Ruby
Raw Normal View History

# License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
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