USP_REPORT_EVENTCOMPARISON

Parameters

Parameter Parameter Type Mode Description
@EVENTID1 uniqueidentifier IN
@EVENTID2 uniqueidentifier IN
@IDSETREGISTERID uniqueidentifier IN
@USESELECTION bit IN
@ENTERPRISEINSTALLED bit IN
@REPORTUSERID nvarchar(100) IN
@CURRENCYCODE smallint IN
@ALTREPORTUSERID nvarchar(128) IN

Definition

Copy

      create procedure dbo.USP_REPORT_EVENTCOMPARISON
       (@EVENTID1 as uniqueidentifier = null,
         @EVENTID2 as uniqueidentifier = null,
         @IDSETREGISTERID as uniqueidentifier = null,
         @USESELECTION as bit = null,
         @ENTERPRISEINSTALLED as bit = null,
         @REPORTUSERID as nvarchar(100) = null,
         @CURRENCYCODE smallint = null, --3 = My base, (null, 1) = Organization;

         @ALTREPORTUSERID nvarchar(128) = null
        )

        with execute as owner
        as
        set nocount on;

      declare @EVENTFILTER table(ID uniqueidentifier primary key);
      declare @EVENTTEAMFUNDRAISINGINFO table(ID uniqueidentifier, AMOUNTSOLICITED money, PAID bit)
      declare @EVENTAPPEALINFO table(ID uniqueidentifier, AMOUNTSOLICITED money)
      declare @EVENTEXPENSES table(EVENTID uniqueidentifier, BUDGETEDAMOUNT money, AGREEDAMOUNT money, ACTUALAMOUNT money);
      declare @SELECTEDCURRENCYID uniqueidentifier;
      declare @CURRENTAPPUSERID uniqueidentifier;
      declare @DECIMALDIGITS tinyint;
      declare @ROUNDINGTYPECODE tinyint;

      -- SHL BBIS Bug 325325; FAF does not use the EventAppeal table so we're going to account for that by saving all appeals into @EVENTAPPEALSTABLE

      declare @EVENTAPPEALTABLE table(EVENTID uniqueidentifier, APPEALID uniqueidentifier);

      set @CURRENTAPPUSERID = dbo.UFN_APPUSER_GETREPORTAPPUSERID(@REPORTUSERID, @ALTREPORTUSERID);

      if @IDSETREGISTERID is null
        begin
         set @IDSETREGISTERID = newid()
        end

      if @USESELECTION = 0
        begin
          insert into @EVENTFILTER(ID) values (@EVENTID1)
          insert into @EVENTFILTER(ID) values (@EVENTID2)
        end
      else
        begin
          insert into @EVENTFILTER(ID)
             (select ID from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@IDSETREGISTERID))
        end
      if @CURRENCYCODE = 3
        begin
           if dbo.UFN_CURRENCYSET_GETAPPUSERCURRENCYSET(@CURRENTAPPUSERID) is not null
             begin                                       
                select @SELECTEDCURRENCYID = CURRENCYSET.BASECURRENCYID
                from dbo.CURRENCYSET
                where
                CURRENCYSET.ID = dbo.UFN_CURRENCYSET_GETAPPUSERCURRENCYSET(@CURRENTAPPUSERID);
             end
           else
              begin
                 select @SELECTEDCURRENCYID = CURRENCYSET.BASECURRENCYID
                 from dbo.CURRENCYSET
                 where CURRENCYSET.ID = dbo.UFN_CURRENCYSET_GETAPPUSERDEFAULTCURRENCYSET();
              end
        end
      else
        set @SELECTEDCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

      select
        @DECIMALDIGITS = CURRENCY.DECIMALDIGITS,
        @ROUNDINGTYPECODE = CURRENCY.ROUNDINGTYPECODE
        from dbo.CURRENCY
        where CURRENCY.ID = @SELECTEDCURRENCYID;

      insert into @EVENTTEAMFUNDRAISINGINFO(ID,AMOUNTSOLICITED,PAID)
        select
          EVENT.ID,
          case when REVENUE.ID is null then 0 

      else 
         sum(coalesce(RSOL.AMOUNTINCURRENCY,0)) end TOTAL,
         case when count(case when EVENTREGISTRANTPAYMENT.ID is null then 0 else 1 end) > 0 then 1 else 0 end PAID
         from dbo.EVENT 
           inner join dbo.TEAMFUNDRAISINGTEAM on TEAMFUNDRAISINGTEAM.APPEALID = EVENT.APPEALID
           inner join @EVENTFILTER EVENTFILTER on EVENTFILTER.ID = EVENT.ID
           left join dbo.TEAMFUNDRAISINGTEAMMEMBER on TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISINGTEAMID = TEAMFUNDRAISINGTEAM.ID 
           left join dbo.TEAMFUNDRAISER 
         on TEAMFUNDRAISER.APPEALID = EVENT.APPEALID and TEAMFUNDRAISER.ID = TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISERID
            left join dbo.REVENUESOLICITOR on REVENUESOLICITOR.CONSTITUENTID = TEAMFUNDRAISER.CONSTITUENTID
            left join dbo.REVENUESPLIT on REVENUESPLIT.ID = REVENUESOLICITOR.REVENUESPLITID
            left join dbo.REVENUE with (nolock) on REVENUE.APPEALID = EVENT.APPEALID and REVENUESPLIT.REVENUEID = REVENUE.ID 
            and (
                  (
                    (REVENUE.TRANSACTIONTYPECODE = 1 
                       or (REVENUE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE in (0,3))
                       --adding event registration donation which will be removed when counting total income

                       or (REVENUE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE = 1 and REVENUESPLIT.TYPECODE = 0)
                    )   --Revenue is a pledge, gift, and recurring gift payment

                  )    --Fundraiser has raised money for the event/appeal in question

                  or REVENUESOLICITOR.ID is null    --Fundraiser has not raised anything yet

                  or ((not REVENUESOLICITOR.ID is null) and REVENUE.ID is null)    --Fundraiser has raised money, but it is not for the appeal/event in question

                )
            left join dbo.UFN_REVENUESOLICITOR_GETAMOUNTINCURRENCY_BULK(@SELECTEDCURRENCYID,dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY(),@DECIMALDIGITS,@ROUNDINGTYPECODE) as RSOL on RSOL.ID = REVENUESOLICITOR.ID         
            left join dbo.EVENTREGISTRANTPAYMENT on REVENUESPLIT.ID = EVENTREGISTRANTPAYMENT.PAYMENTID
            group by EVENT.ID, REVENUE.ID;

      -- SHL BBIS Bug 325325; Fill @EVENTAPPEALTABLE table with all of the appeals for the 2 events

      insert into @EVENTAPPEALTABLE(EVENTID, APPEALID)
      -- grab the single appeal assigned to the event in the Event table (deprecated but still used in NGFAF)

      select Event.ID, Event.APPEALID from dbo.Event inner join @EVENTFILTER EVENTFILTER on Event.ID = EVENTFILTER.ID
      union
      -- grab the appeals assigned to the events in the newer EventAppeal table

      select EVENTAPPEAL.EVENTID, EVENTAPPEAL.APPEALID from dbo.EVENTAPPEAL inner join @EVENTFILTER EVENTFILTER on EVENTAPPEAL.EVENTID = EVENTFILTER.ID;


      insert into @EVENTAPPEALINFO(ID,AMOUNTSOLICITED)
        select
           EVENT.ID,
           case when REVENUE.ID is null then 0 
            else 
              coalesce(sum(RS.AMOUNTINCURRENCY), 0
              end TOTAL
              from dbo.EVENT
                 inner join @EVENTFILTER EVENTFILTER on EVENTFILTER.ID = EVENT.ID
                 inner join @EVENTAPPEALTABLE EVENTAPPEAL on EVENTAPPEAL.EVENTID = EVENT.ID
                 inner join dbo.REVENUE with (nolock) on REVENUE.APPEALID = EVENTAPPEAL.APPEALID
                 inner join dbo.REVENUESPLIT on REVENUESPLIT.REVENUEID = REVENUE.ID
                 and (
                       (
                         (REVENUE.TRANSACTIONTYPECODE = 1 
                          or (REVENUE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE in (0,3))
                         )   --Revenue is a pledge, gift, and recurring gift payment

                       )    --Fundraiser has raised money for the event/appeal in question

                            --Event registration donation doesn't need to be added because it's already counted in payment

                      )
                 left join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(@SELECTEDCURRENCYID,dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY(),@DECIMALDIGITS,@ROUNDINGTYPECODE) as RS on RS.ID = REVENUESPLIT.ID  
                 group by EVENT.ID,REVENUE.ID

        insert into @EVENTEXPENSES(EVENTID,BUDGETEDAMOUNT, AGREEDAMOUNT, ACTUALAMOUNT)
          select
             E.ID as EVENTID,
             coalesce(sum(EE.BUDGETEDAMOUNTINCURRENCY), 0) as BUDGETEDAMOUNT,
             coalesce(sum(EE.ACTUALAMOUNTINCURRENCY), 0) as AGREEDAMOUNT,
             coalesce(sum(EE.AMOUNTPAIDINCURRENCY), 0) as ACTUALAMOUNT                          
          from @EVENTFILTER as E
            inner join dbo.UFN_EVENTEXPENSE_GETINCURRENCY_BULK(@SELECTEDCURRENCYID,dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY(),@DECIMALDIGITS,@ROUNDINGTYPECODE) as EE on E.ID = EE.EVENTID
          group by E.ID

        select distinct
          'http://www.blackbaud.com/EVENTID?EVENTID='+convert(nvarchar(36),EVENT.ID) as EVENTID,
          EVENT.ID,
          EVENT.NAME,
          coalesce(EE.ACTUALAMOUNT, 0) as ACTUALAMOUNT,
                       ( --Payments

                                select coalesce(sum(RS.AMOUNTINCURRENCY), 0
                                         from dbo.EVENTREGISTRANTPAYMENT P 
                                         inner join dbo.REGISTRANT on P.REGISTRANTID = REGISTRANT.ID
                                         inner join dbo.REVENUESPLIT on P.PAYMENTID = REVENUESPLIT.ID 
                                         left join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(@SELECTEDCURRENCYID,dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY(),@DECIMALDIGITS,@ROUNDINGTYPECODE) as RS on RS.ID = REVENUESPLIT.ID
                                         where REGISTRANT.EVENTID = EVENT.ID
                                         ) - 
                       ( --Credits

                                select coalesce(sum([CREDITITEM].[TOTAL]), 0
                                         from dbo.[CREDITITEM]
                                         inner join dbo.[SALESORDERITEM] on [SALESORDERITEM].[ID] = [CREDITITEM].[SALESORDERITEMID]
                                         inner join dbo.[SALESORDERITEMEVENTREGISTRATION] on [SALESORDERITEMEVENTREGISTRATION].[ID] = [SALESORDERITEM].[ID]
                                         inner join dbo.[REGISTRANT] on [SALESORDERITEMEVENTREGISTRATION].[REGISTRANTID] = [REGISTRANT].[ID]
                                         where [REGISTRANT].[EVENTID] = [EVENT].[ID]
                       ) +
          ( -- Teamfundraising totals

            coalesce((select sum(AMOUNTSOLICITED) from @EVENTTEAMFUNDRAISINGINFO EVENTTEAMFUNDRAISINGINFO where EVENTTEAMFUNDRAISINGINFO.ID = EVENT.ID and PAID = 0),0)
          ) +
          ( -- Appeal income

            coalesce((select sum(AMOUNTSOLICITED) from @EVENTAPPEALINFO EVENTAPPEALINFO where EVENTAPPEALINFO.ID = EVENT.ID),0)
          )
          as [TOTALINCOME],
                       (select count(ID) 
                                from dbo.REGISTRANT 
                                where EVENTID = EVENT.ID  
                                and dbo.[UFN_REGISTRANT_ISCANCELLED](REGISTRANT.ID) = 0) as REGISTERED,
                       (select count(ID) 
                                from dbo.REGISTRANT 
                                where EVENTID = EVENT.ID 
                                and ATTENDED = 1  and dbo.[UFN_REGISTRANT_ISCANCELLED](REGISTRANT.ID) = 0) as ATTENDED,
          coalesce((select COUNT(TEAMFUNDRAISINGTEAM.ID)
                        from EVENT as INNER_EVENT
                        left join TEAMFUNDRAISINGTEAM on TEAMFUNDRAISINGTEAM.APPEALID = INNER_EVENT.APPEALID
                        where INNER_EVENT.ID = EVENT.ID),0) as TEAMCOUNT,   
          coalesce((select sum(AMOUNTSOLICITED) from @EVENTTEAMFUNDRAISINGINFO EVENTTEAMFUNDRAISINGINFO where EVENTTEAMFUNDRAISINGINFO.ID = EVENT.ID),0) as TEAMTOTALS,
          case coalesce((select COUNT(TEAMFUNDRAISINGTEAM.ID)
                        from EVENT as INNER_EVENT
                        left join TEAMFUNDRAISINGTEAM on TEAMFUNDRAISINGTEAM.APPEALID = INNER_EVENT.APPEALID
                        where INNER_EVENT.ID = EVENT.ID),0)
            when 0 then 0
            else coalesce((select sum(AMOUNTSOLICITED) from @EVENTTEAMFUNDRAISINGINFO EVENTTEAMFUNDRAISINGINFO where EVENTTEAMFUNDRAISINGINFO.ID = EVENT.ID),0)/coalesce((select COUNT(TEAMFUNDRAISINGTEAM.ID)
                        from EVENT as INNER_EVENT
                        left join TEAMFUNDRAISINGTEAM on TEAMFUNDRAISINGTEAM.APPEALID = INNER_EVENT.APPEALID
                        where INNER_EVENT.ID = EVENT.ID),0)
end as AVERAGEPERTEAM,
          EVENT.STARTDATE,
                   CURRENCYPROPERTIES.ISO4217 [ISOCURRENCYCODE],
                   CURRENCYPROPERTIES.CURRENCYSYMBOL,
                   CURRENCYPROPERTIES.SYMBOLDISPLAYSETTINGCODE [CURRENCYSYMBOLDISPLAYSETTINGCODE],
                   CURRENCYPROPERTIES.DECIMALDIGITS,
                   coalesce(EE.AGREEDAMOUNT, 0) as AGREEDAMOUNT,
                   coalesce(EE.BUDGETEDAMOUNT, 0) as BUDGETEDAMOUNT
        from dbo.EVENT
        inner join @EVENTFILTER EVENTFILTER on EVENTFILTER.ID = EVENT.ID
        left join @EVENTEXPENSES EE on EE.EVENTID = EVENTFILTER.ID
        left join TEAMFUNDRAISINGTEAM on TEAMFUNDRAISINGTEAM.APPEALID = EVENT.APPEALID
        left join TEAMFUNDRAISINGTEAMMEMBER on TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISINGTEAMID = TEAMFUNDRAISINGTEAM.ID
        left join dbo.TEAMFUNDRAISER
          on TEAMFUNDRAISER.APPEALID = EVENT.APPEALID and TEAMFUNDRAISER.ID = TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISERID
        left join REVENUESOLICITOR on REVENUESOLICITOR.CONSTITUENTID = TEAMFUNDRAISER.CONSTITUENTID
        left join REVENUESPLIT on REVENUESPLIT.ID = REVENUESOLICITOR.REVENUESPLITID
        left join dbo.REVENUE with (nolock) on REVENUE.APPEALID = EVENT.APPEALID and REVENUESPLIT.REVENUEID = REVENUE.ID
        outer apply dbo.UFN_CURRENCY_GETPROPERTIES(@SELECTEDCURRENCYID) CURRENCYPROPERTIES
        --left join dbo.UFN_EVENTEXPENSE_GETINCURRENCY_BULK(@SELECTEDCURRENCYID,dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY(),@DECIMALDIGITS,@ROUNDINGTYPECODE) as EE on EE.EVENTID = EVENT.ID

        where EVENT.PROGRAMID is null
        group by EVENT.STARTDATE,EVENT.ID,EVENT.NAME, CURRENCYPROPERTIES.ISO4217, CURRENCYPROPERTIES.CURRENCYSYMBOL, CURRENCYPROPERTIES.SYMBOLDISPLAYSETTINGCODE, CURRENCYPROPERTIES.DECIMALDIGITS, EE.ACTUALAMOUNT, EE.AGREEDAMOUNT, EE.BUDGETEDAMOUNT
        order by EVENT.STARTDATE DESC