USP_DATALIST_FAFTOPFUNDRAISER

Get the Top Fundraiser amounts and data

Parameters

Parameter Parameter Type Mode Description
@EVENTID uniqueidentifier IN EventID
@TEAMFUNDRAISINGTEAMID uniqueidentifier IN Team fundraising team id
@ROLETYPE tinyint IN RoleType
@COMPANIESOPT bit IN Company option
@TEAMSOPT bit IN Team option
@HOUSEHOLDOPT bit IN Household option
@PARTICIPANTOPT bit IN Participant option
@COMPANIESNUM int IN Number of companies
@TEAMSNUM int IN Number of team
@HOUSEHOLDNUM int IN Number of household
@PARTICIPANTNUM int IN Number of participant

Definition

Copy


CREATE procedure dbo.USP_DATALIST_FAFTOPFUNDRAISER
(
    @EVENTID uniqueidentifier,

    @TEAMFUNDRAISINGTEAMID uniqueidentifier = NULL,    --not used

    @ROLETYPE tinyint = 0,    --not used

    @COMPANIESOPT bit = 0,    --not used

    @TEAMSOPT bit = 0,        --not used

    @HOUSEHOLDOPT bit = 0,    --not used

    @PARTICIPANTOPT bit = 0,  --not used


    @COMPANIESNUM int = 0,
    @TEAMSNUM int = 0,
    @HOUSEHOLDNUM int = 0,
    @PARTICIPANTNUM int = 0
)WITH EXECUTE AS CALLER
as

begin
    SET NOCOUNT ON;

    declare @EVENTNAME varchar(100), @APPEALID uniqueidentifier

    select @EVENTNAME = NAME, @APPEALID = APPEALID
    from dbo.EVENT (nolock) where ID = @EVENTID;

    declare @result table
    (
        AMOUNTRAISED money,
        FUNDRAISINGGOAL money,
        GROUPTYPEID uniqueidentifier,
        FUNDRAISERNAME nvarchar(308),
        HOUSEHOLDNAME nvarchar(200),
        TEAMNAME nvarchar(200),
        COMPANYNAME nvarchar(200),
        SITEIMAGESID int,
        FUNDRAISERTYPE nvarchar(50),
        STORYTEXT nvarchar(max),
        ISPRIVATE bit,
        TEAMFUNDRAISINGTEAMID uniqueidentifier,
        REGISTRANTID uniqueidentifier
    )

    -- try retrieving data from cache first

    set transaction isolation level read uncommitted;
    begin transaction;

    declare @IDOC int;
    declare @CACHEKEY as nvarchar(512);
    declare @CACHEDATA as xml;
    declare @LIFESPANSECONDS int;

    set @LIFESPANSECONDS = 60;
    set @CACHEDATA = null;
    set @CACHEKEY = 'FAFTOPFUNDRAISER' 
                    + '_' + convert(nvarchar(4), @COMPANIESNUM
                    + '_' + convert(nvarchar(4), @TEAMSNUM)
                    + '_' + convert(nvarchar(4), @HOUSEHOLDNUM)
                    + '_' + convert(nvarchar(4), @PARTICIPANTNUM);

    exec dbo.USP_FAFEVENTDATACACHE_GET @DATA = @CACHEDATA output, @EVENTID = @EVENTID, @CACHEKEY = @CACHEKEY;

    if @CACHEDATA is null    -- start calculations

        begin
            -- update cache ISCALCULATING flag

            exec dbo.USP_FAFEVENTDATACACHE_CALCULATIONSTARTS @EVENTID = @EVENTID, @CACHEKEY = @CACHEKEY;

            if @PARTICIPANTNUM > 0
            begin
                insert into @result
                select top (@PARTICIPANTNUM
                        PRT.AMOUNTRAISED
                      , Rx.TARGETFUNDRAISINGGOAL as FUNDRAISINGGOAL
                      , C.ID as GROUPTYPEID
                      , C.NAME AS FUNDRAISERNAME
                      , case when TE.TYPECODE=3 then TFT.NAME else NULL end as HOUSEHOLDNAME
                      , case when TE.TYPECODE=1 then TFT.NAME when TE2.TYPECODE=1 then TFT2.NAME else NULL end as TEAMNAME
                      , case when TE.TYPECODE=2 then TFT.NAME when TE2.TYPECODE=2 then TFT2.NAME when TE3.TYPECODE=2 then TFT3.NAME else NULL end as COMPANYNAME
                      , SIE.SITEIMAGESID
                      , 'Participants' as FUNDRAISERTYPE
                      , St.STORYTEXT
                      , Rx.ISPRIVATE
                      , TFTM.TEAMFUNDRAISINGTEAMID
                      , Reg.ID as REGISTRANTID 
                from dbo.REGISTRANT Reg (nolock)            
                inner join dbo.CONSTITUENT C (nolock) ON C.ID = Reg.CONSTITUENTID 
                inner join dbo.UFN_REVENUE_GETPARTICIPANTRAISEDTOTAL_2(@EVENTID) PRT on Reg.CONSTITUENTID = PRT.CONSTITUENTID

                left join dbo.REGISTRANTEXTENSION Rx (nolock)    ON Reg.ID = Rx.REGISTRANTID 
                left join dbo.STORY St (nolock)  ON Reg.ID = St.REGISTRANTID 
                left outer join dbo.SITEIMAGESEXTENSION SIE on SIE.ID = ST.FAFIMAGESID

                left join dbo.TEAMFUNDRAISER TFR (nolock)    ON C.ID = TFR.CONSTITUENTID and TFR.APPEALID = @APPEALID
                left join dbo.TEAMFUNDRAISINGTEAMMEMBER TFTM (nolock) ON TFR.ID = TFTM.TEAMFUNDRAISERID 
                left join dbo.TEAMFUNDRAISINGTEAM TFT (nolock) ON TFTM.TEAMFUNDRAISINGTEAMID = TFT.ID
                left join dbo.TEAMEXTENSION TE (nolock) ON TFTM.TEAMFUNDRAISINGTEAMID = TE.TEAMFUNDRAISINGTEAMID AND TE.EVENTID = @EVENTID

                left join dbo.TEAMFUNDRAISINGTEAM TFT2 (nolock)  ON TFT.PARENTTEAMID = TFT2.ID 
                left join dbo.TEAMEXTENSION TE2 (nolock)    ON TFT2.ID= TE2.TEAMFUNDRAISINGTEAMID  and TE2.EVENTID  = @EVENTID
                left join dbo.TEAMFUNDRAISINGTEAM TFT3 (nolock)  ON TFT2.PARENTTEAMID = TFT3.ID  
                left join dbo.TEAMEXTENSION TE3 (nolock)    ON TFT3.ID= TE3.TEAMFUNDRAISINGTEAMID     and TE3.EVENTID = @EVENTID
                where Reg.EVENTID = @EVENTID and PRT.AMOUNTRAISED > 0
                order by AMOUNTRAISED DESC
            end

            if @TEAMSNUM > 0
            begin
                insert into @result
                select top (@TEAMSNUM)
                    GT.TOTALFUNDRAISE as AMOUNTRAISED 
                    , TFT.GOAL as FUNDRAISINGGOAL
                    , TE.TEAMFUNDRAISINGTEAMID as GROUPTYPEID
                    , NULL as FUNDRAISERNAME
                    , NULL as HOUSEHOLDNAME
                    , TFT.NAME as TEAMNAME
                    , TFT2.NAME as COMPANYNAME
                    , SIE.SITEIMAGESID
                    , 'Teams' as FUNDRAISERTYPE
                    , ST.STORYTEXT
                    , 0 as ISPRIVATE
                    , null as TEAMFUNDRAISINGTEAMID
                    , null as REGISTRANTID
                from dbo.FAFGROUPSUMMARYINFORMATION GT (nolock)    
                inner join dbo.TEAMEXTENSION TE (nolock) on GT.GROUPCONSTITUENTID = TE.TEAMCONSTITUENTID 
                inner join dbo.TEAMFUNDRAISINGTEAM TFT (nolock) on TE.TEAMFUNDRAISINGTEAMID = TFT.ID
                left outer join dbo.TEAMFUNDRAISINGTEAM TFT2 (nolock) ON TFT.PARENTTEAMID = TFT2.ID
                left outer join dbo.STORY ST (nolock) ON TFT.ID = ST.TEAMFUNDRAISINGTEAMID AND ST.EVENTID =  @EVENTID
                left outer join dbo.SITEIMAGESEXTENSION SIE (nolock) on SIE.ID = ST.FAFIMAGESID
                where 
          GROUPTYPECODE = 1 and TOTALFUNDRAISE > 0 
          -- SHL BBIS Bug 385999; Because the TEAMEXTENSION and FAFGROUPSUMMARYINFORMATION can apply to the same tema leader for different events, we must specify the events on both tables

          and GT.EVENTID = @EVENTID  
          and TE.EVENTID = @EVENTID
                order by TOTALFUNDRAISE desc
            end

            if @HOUSEHOLDNUM > 0
            begin
                insert into @result
                select top (@HOUSEHOLDNUM)
                    GT.TOTALFUNDRAISE as AMOUNTRAISED
                    , TFT.GOAL as FUNDRAISINGGOAL
                    , TE.TEAMFUNDRAISINGTEAMID as GROUPTYPEID
                    , NULL as FUNDRAISERNAME
                    , TFT.NAME as HOUSEHOLDNAME
                    , case when TE2.TYPECODE=1 then TFT2.NAME else NULL end as TEAMNAME
                    , case when TE2.TYPECODE=2 then TFT2.NAME when TE3.TYPECODE=2 then TFT3.NAME else NULL end as COMPANYNAME 
                    , SIE.SITEIMAGESID
                    , 'Households' as FUNDRAISERTYPE
                    , ST.STORYTEXT
                    , dbo.UFN_FAFEVENT_GETGROUPPAGEPRIVACYfromGROUPLEADER(TE.TEAMFUNDRAISINGTEAMID, 3) as ISPRIVATE
                    , null as TEAMFUNDRAISINGTEAMID
                    , null as REGISTRANTID
                from dbo.FAFGROUPSUMMARYINFORMATION GT (nolock)    
                inner join dbo.TEAMEXTENSION TE (nolock) on GT.GROUPCONSTITUENTID = TE.TEAMCONSTITUENTID 
                inner join dbo.TEAMFUNDRAISINGTEAM TFT (nolock) on TE.TEAMFUNDRAISINGTEAMID = TFT.ID
                left outer join dbo.STORY ST (nolock) ON TE.TEAMFUNDRAISINGTEAMID = ST.TEAMFUNDRAISINGTEAMID AND ST.EVENTID = @EVENTID
                left outer join dbo.SITEIMAGESEXTENSION SIE (nolock) on SIE.ID = ST.FAFIMAGESID
                left outer join dbo.TEAMFUNDRAISINGTEAM TFT2 (nolock) ON TFT.PARENTTEAMID = TFT2.ID 
                left outer join dbo.TEAMEXTENSION TE2 (nolock) ON TFT2.ID = TE2.TEAMFUNDRAISINGTEAMID and TE2.EVENTID = @EVENTID
                left outer join dbo.TEAMFUNDRAISINGTEAM TFT3 (nolock) ON TFT2.PARENTTEAMID = TFT3.ID  
                left outer join dbo.TEAMEXTENSION TE3 (nolock) ON TFT3.ID = TE3.TEAMFUNDRAISINGTEAMID     and TE3.EVENTID = @EVENTID
                where GROUPTYPECODE = 3 and TOTALFUNDRAISE > 0    
        -- SHL BBIS Bug 385999; Because the TEAMEXTENSION and FAFGROUPSUMMARYINFORMATION can apply to the same tema leader for different events, we must specify the events on both tables

        and GT.EVENTID = @EVENTID  
        and TE.EVENTID = @EVENTID
        order by AMOUNTRAISED DESC
            end

            if @COMPANIESNUM > 0
            begin
                insert into @result
                select top (@COMPANIESNUM)
                    GT.TOTALFUNDRAISE as AMOUNTRAISED
                    , TFT.GOAL as FUNDRAISINGGOAL
                    , TE.TEAMFUNDRAISINGTEAMID as GROUPTYPEID
                    , null as FUNDRAISERNAME
                    , null as HOUSEHOLDNAME
                    , null as TEAMNAME
                    , TFT.NAME as COMPANYNAME
                    , SIE.SITEIMAGESID
                    , 'Companies' as FUNDRAISERTYPE
                    , ST.STORYTEXT
                    , 0 as ISPRIVATE
                    , null as TEAMFUNDRAISINGTEAMID
                    , null as REGISTRANTID
                from dbo.FAFGROUPSUMMARYINFORMATION GT (nolock)    
                inner join dbo.TEAMEXTENSION TE (nolock) on GT.GROUPCONSTITUENTID = TE.TEAMCONSTITUENTID 
                inner join dbo.TEAMFUNDRAISINGTEAM TFT (nolock) on TE.TEAMFUNDRAISINGTEAMID = TFT.ID
                left outer join dbo.STORY ST (nolock) ON TE.TEAMFUNDRAISINGTEAMID = ST.TEAMFUNDRAISINGTEAMID AND ST.EVENTID = @EVENTID
                left outer join dbo.SITEIMAGESEXTENSION SIE (nolock) on SIE.ID = ST.FAFIMAGESID
                where GROUPTYPECODE = 2 and TOTALFUNDRAISE > 0 
        -- SHL BBIS Bug 385999; Because the TEAMEXTENSION and FAFGROUPSUMMARYINFORMATION can apply to the same tema leader for different events, we must specify the events on both tables

        and GT.EVENTID = @EVENTID  
        and TE.EVENTID = @EVENTID
                order by AMOUNTRAISED DESC
            end

            -- convert the result to xml

            set @CACHEDATA = (select * from @result for xml raw);
            if @CACHEDATA is null
                set @CACHEDATA = '<rows />';
            else
                set @CACHEDATA= '<rows>' + convert(nvarchar(max), @CACHEDATA) + '</rows>';

            select @LIFESPANSECONDS = CONVERT(int, ISNULL(Value, '60')) from dbo.SETTING where Name = 'FAFEventTotalCache';

            -- cache the result

            exec dbo.USP_FAFEVENTDATACACHE_ADD
                @EVENTID = @EVENTID,
                @CACHEKEY = @CACHEKEY,
                @DATA = @CACHEDATA,
                @LIFESPANSECONDS = @LIFESPANSECONDS;
        end
    else
        begin
            begin try
                exec sp_xml_preparedocument @IDOC output, @CACHEDATA;

                insert into @result
                select * from openxml(@IDOC, '/rows/row', 0) with (
                    AMOUNTRAISED money,
                    FUNDRAISINGGOAL money,
                    GROUPTYPEID uniqueidentifier,
                    FUNDRAISERNAME nvarchar(308),
                    HOUSEHOLDNAME nvarchar(200),
                    TEAMNAME nvarchar(200),
                    COMPANYNAME nvarchar(200),
                    SITEIMAGESID int,
                    FUNDRAISERTYPE nvarchar(50),
                    STORYTEXT nvarchar(max),
                    ISPRIVATE bit,
                    TEAMFUNDRAISINGTEAMID uniqueidentifier,
                    REGISTRANTID uniqueidentifier        
                );

                exec sp_xml_removedocument @IDOC;
            end try
            begin catch
                -- do nothing

            end catch
        end

    commit transaction;        

/** NEED TO MAINTAIN THE ORDER FOR OUTPUT UNLESS YOU HAVE A GOOD REASON TO CHANGE THIS ORDER - 
be sure to check how to pass backward compatibility unit test if this order is change **/

    select AMOUNTRAISED,
          FUNDRAISINGGOAL,
          GROUPTYPEID,
          FUNDRAISERNAME,
          HOUSEHOLDNAME,
          TEAMNAME,
          COMPANYNAME,
          SITEIMAGESID,
          FUNDRAISERTYPE,
          STORYTEXT,
          ISPRIVATE, 
          @EVENTNAME as EVENTNAME,
          TEAMFUNDRAISINGTEAMID,
          REGISTRANTID
    from @result
    order by AMOUNTRAISED DESC, FUNDRAISERTYPE

END