# License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later module QueryCampaignMetrics def self.on_donations(campaign_id) campaign = Campaign.find(campaign_id) result = Psql.execute( Qexpr.new.select("COALESCE(COUNT(DISTINCT donations.id), 0) AS supporters_count", "COALESCE(SUM(payments.gross_amount), 0) AS total_raised") .from("campaigns") .join( "donations", "donations.campaign_id=campaigns.id" ) .join_lateral("payments", QueryDonations.get_first_payment_for_donation.parse, true) .where("campaigns.id IN (#{QueryCampaigns .get_campaign_and_children(campaign_id) .parse })") ).last return { 'supporters_count' => result['supporters_count'], 'total_raised'=> result['total_raised'], 'goal_amount'=> campaign.goal_amount, 'show_total_count'=> campaign.show_total_count, 'show_total_raised'=> campaign.show_total_raised } end end