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
|
|
|
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
|
2018-04-30 19:07:18 +00:00
|
|
|
|
|
|
|
def self.find_nonprofits_with_no_payments()
|
|
|
|
Nonprofit.includes(:payments).where('payments.nonprofit_id IS NULL')
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.find_nonprofits_with_payments_in_last_n_days(days)
|
|
|
|
Payment.where("date >= ?", Time.now - days.days).pluck('nonprofit_id').to_a.uniq
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.find_nonprofits_with_payments_but_not_in_last_n_days(days)
|
|
|
|
recent_nonprofits = find_nonprofits_with_payments_in_last_n_days(days)
|
|
|
|
Payment.where("date < ?", Time.now - days.days).pluck('nonprofit_id').to_a.uniq.select{|i| !recent_nonprofits.include?(i)}
|
|
|
|
end
|
2018-03-25 17:30:42 +00:00
|
|
|
end
|