USP_DATALIST_FAFFUNDRAISINGGROUP

Parameters

Parameter Parameter Type Mode Description
@EVENTID uniqueidentifier IN
@SEARCHSTR nvarchar(20) IN
@SEARCHTYPE tinyint IN
@SEARCHLEADER bit IN
@MAXROWS int IN

Definition

Copy


CREATE procedure dbo.USP_DATALIST_FAFFUNDRAISINGGROUP
(
        @EVENTID uniqueidentifier,
        @SEARCHSTR nvarchar(20) = '',
        @SEARCHTYPE tinyint = 4, -- 3: NFG only, 2:NFG, Company, 4:NFG, Company, Team, 1:Company and Team
        @SEARCHLEADER bit = 0,
        @MAXROWS int = 11
)
as
    set nocount on

  declare @ISANEVENTCAMPAIGN bit = 0, -- ASSUME: event is an event campaign, each NFG display site must match to one of event sites
                  @TEAMLABEL nvarchar(100),
                  @COMPANYLABEL nvarchar(100),
                  @TEAMMEMBERLIMIT int,
                  @COMPANYMEMBERLIMIT int,
                  @COMPANYTEAMLIMIT int,
                  @HOUSEHOLDSJOINTEAMS bit,
          @SQL nvarchar(max),
                  @PARAMDEFINITION nvarchar(700)
                  --,@NFGSQL0 nvarchar(1500) = ''

        select @ISANEVENTCAMPAIGN=case when EX.FAFPROGRAMID is not null then 1 else 0 end from dbo.EVENTEXTENSION EX(nolock) where EVENTID = @EVENTID
        select @TEAMLABEL=EL.LABELVALUE from dbo.EVENTLABEL EL (nolock) where EL.EVENTID = @EVENTID and EL.LABELNAME = 'Team'
        select @COMPANYLABEL=EL.LABELVALUE from dbo.EVENTLABEL EL (nolock) where EL.EVENTID = @EVENTID and EL.LABELNAME = 'Company'
        select         
          @TEAMMEMBERLIMIT = TEAMMEMBERSLIMIT, 
          @COMPANYTEAMLIMIT = COMPANYTEAMSLIMIT, 
          @COMPANYMEMBERLIMIT = COMPANYTEAMMEMBERSLIMIT,
          @HOUSEHOLDSJOINTEAMS = HOUSEHOLDSJOINTEAMS
        from dbo.EVENTTEAMFAFCONFIG (nolock) where EVENTID = @EVENTID

        set @SQL = 'create table #BaseList (
            ID uniqueidentifier primary key,
            NAME nvarchar(100) collate DATABASE_DEFAULT,
            TYPE nvarchar(200),
            TYPECODE tinyint,
            PARENTGROUPID uniqueidentifier,
            PARENTGROUPNAME nvarchar(100),
            AVAILABLESEARCHTYPE nvarchar(10),
            SELECTABLE bit
        )

        create table #AccumulativeList (    
            ID uniqueidentifier primary key,
            NAME char(100),
            TYPE char(200),
            TYPECODE tinyint,
            PARENTGROUPID uniqueidentifier,
            PARENTGROUPNAME nvarchar(100),
            AVAILABLESEARCHTYPE nvarchar(10),
            SELECTABLE bit
        ) '


        if @SEARCHTYPE in (1, 2, 4)
        begin
            set @SQL = @SQL + ' insert into #BaseList(ID, NAME, TYPE , TYPECODE, PARENTGROUPID, PARENTGROUPNAME, AVAILABLESEARCHTYPE, SELECTABLE)
                select distinct top (@MAXROWS) TFT.ID, TFT.NAME, case TX.TYPECODE when 1 then @TEAMLABEL when 2 then @COMPANYLABEL end as [TYPE], TX.TYPECODE        
                , case when TFT.PARENTTEAMID is not null then TFT.PARENTTEAMID 
                       when NFG.ID is not null then NFG.ID 
                       else TFT.ID end as PARENTGROUPID
                , case when TFT.PARENTTEAMID is not null then pTFT.NAME 
                       when NFG.ID is not null then NFG.NAME 
                       else TFT.NAME end as PARENTGROUPNAME
                , ''Local'' AS AVAILABLESEARCHTYPE
                , 1
                from dbo.TEAMEXTENSION TX (nolock)
                join dbo.TEAMFUNDRAISINGTEAM TFT (nolock) on TFT.ID = TX.TEAMFUNDRAISINGTEAMID
                left join dbo.TEAMFUNDRAISINGTEAM pTFT (nolock) on pTFT.ID = TFT.PARENTTEAMID
                left join dbo.FAFNFGCAMPAIGNLEVEL NFGL (nolock) on NFGL.ID = TX.NFGCAMPAIGNLEVELID
                left join dbo.FAFNFGCAMPAIGN NFG (nolock) on NFG.ID = NFGL.NFGCAMPAIGNID 
                where TX.EVENTID = @EVENTID and TX.STATUSCODE = 0 and TFT.NAME like ''%'' + @SEARCHSTR + ''%''
            '    

            if @SEARCHTYPE = 2 or (@SEARCHTYPE = 4 and @HOUSEHOLDSJOINTEAMS = 0)
            begin
                set @SQL = @SQL + ' and TX.TYPECODE = 2' 
            end
            else if @SEARCHTYPE = 1 or (@SEARCHTYPE = 4 and @HOUSEHOLDSJOINTEAMS = 1)
            begin
                set @SQL = @SQL + ' and TX.TYPECODE in (1,2)'
            end        

        end

        if @ISANEVENTCAMPAIGN = 1 and @SEARCHTYPE in (2,3,4)
        begin

            set @SQL = @SQL + '
                    insert into #BaseList(ID, NAME, TYPE , TYPECODE, PARENTGROUPID, PARENTGROUPNAME, AVAILABLESEARCHTYPE, SELECTABLE)
                    select distinct top (@MAXROWS) NFG.ID, NFG.NAME, (select TC.DESCRIPTION from dbo.FAFNFGTYPECODE TC where TC.ID = NFG.NFGTYPECODEID) as [TYPE], 5 as TYPECODE
                    , NFG.ID as PARENTGROUPID 
                    , NFG.NAME AS PARENTGROUPNAME
                    , ''National'' AS AVAILABLESEARCHTYPE
                    , case when A.ISACCESSIBLEBYSITE = 0 or @SEARCHTYPE = 1 or (@SEARCHTYPE in (2, 4) and NFG.ALLOWOTHERSJOINFROMGROUPPAGE = 0) then 0 
                                        else 1 end as SELECTABLE
                    from dbo.EVENTEXTENSION EX (nolock) 
                    join dbo.FAFNFGCAMPAIGN NFG (nolock) on EX.FAFPROGRAMID = NFG.CAMPAIGNID 
                    left join (
            select top (@MAXROWS) NFG.ID, max(case when (DS.ID is null and DS2.ID is null) or DS2.SITEID = ES.SITEID then 1 else 0 end) as ISACCESSIBLEBYSITE
                            from dbo.EVENTEXTENSION EX
                            left join EVENTSITE ES on ES.EVENTID = EX.EVENTID                     
                            left join dbo.FAFNFGCAMPAIGN NFG (nolock) on EX.FAFPROGRAMID = NFG.CAMPAIGNID 
                            left join FAFNFGCAMPAIGNDISPLAYSITE DS on DS.NFGCAMPAIGNID = NFG.ID
                            left join FAFNFGCAMPAIGNDISPLAYSITE DS2 on DS2.NFGCAMPAIGNID = NFG.ID and DS2.SITEID = ES.SITEID 
                            where EX.EVENTID = @EVENTID and NFG.NAME like ''%'' + @SEARCHSTR + ''%'' 
                            group by NFG.ID 
          ) A on A.ID = NFG.ID
                    where  EX.EVENTID = @EVENTID and NFG.NAME like ''%'' + @SEARCHSTR + ''%'' '

            if @SEARCHTYPE = 3
                set @SQL = @SQL + '    and NFG.ALLOWCOMPANIESJOINFROMGROUPPAGE = 1'

        end    /* end is event campaign*/

        if @SEARCHLEADER = 1 and @SEARCHTYPE in (1, 2, 4)
        begin
            set @SQL = @SQL + '
                insert into #BaseList(ID, NAME, TYPE , TYPECODE, PARENTGROUPID, PARENTGROUPNAME, AVAILABLESEARCHTYPE, SELECTABLE)
                    select distinct top (@MAXROWS) iTX.TEAMFUNDRAISINGTEAMID as ID, TFT.NAME, case iTX.TYPECODE when 1 then @TEAMLABEL when 2 then @COMPANYLABEL end as [TYPE], iTX.TYPECODE 
                    ,  case when TFT.PARENTTEAMID is not null then TFT.PARENTTEAMID 
                            when NFG.ID is not null then NFG.ID 
                            else TFT.ID end as PARENTGROUPID
                    ,  case when TFT.PARENTTEAMID is not null then pTFT.NAME 
                            when NFG.ID is not null then NFG.NAME 
                            else TFT.NAME end as PARENTGROUPNAME
                    , ''Local'' AS AVAILABLESEARCHTYPE
                    , 1
                      from dbo.TEAMEXTENSION iTX (nolock)
                      join dbo.TEAMFUNDRAISINGTEAM TFT (nolock) on TFT.ID = iTX.TEAMFUNDRAISINGTEAMID 
                        join TEAMFUNDRAISINGTEAMCAPTAIN TFTC (nolock) on iTX.TEAMFUNDRAISINGTEAMID = TFTC.TEAMFUNDRAISINGTEAMID
                        join CONSTITUENT c (nolock) on TFTC.CONSTITUENTID = c.ID 
                        left join dbo.TEAMFUNDRAISINGTEAM pTFT (nolock) on pTFT.ID = TFT.PARENTTEAMID
                        left join dbo.FAFNFGCAMPAIGNLEVEL NFGL (nolock) on NFGL.ID = iTX.NFGCAMPAIGNLEVELID
                      left join dbo.FAFNFGCAMPAIGN NFG (nolock) on NFG.ID = NFGL.NFGCAMPAIGNID 
                      where iTX.EVENTID = @EVENTID and iTX.TYPECODE <> 3 and iTX.STATUSCODE = 0 and (C.FIRSTNAME like ''%'' + @SEARCHSTR + ''%'' or C.KEYNAME like ''%'' + @SEARCHSTR + ''%'')
            and iTX.TEAMFUNDRAISINGTEAMID not in (select ID from #BaseList)
                    '

            if @SEARCHTYPE = 2 or (@SEARCHTYPE = 4 and @HOUSEHOLDSJOINTEAMS = 0)
            begin
                set @SQL = @SQL + ' and iTX.TYPECODE = 2 ' 
            end
            else if @SEARCHTYPE = 1 or (@SEARCHTYPE = 4 and @HOUSEHOLDSJOINTEAMS = 1)
            begin
                set @SQL = @SQL + ' and iTX.TYPECODE in (1,2)'
            end

        end

        if @SEARCHTYPE in (1,2,4)
    begin
          set @SQL = @SQL + '         
          ;with GetChildren as (
              select case when TFT.ID is not null then TFT.ID when cTX.ID is not null then cTFT.ID else B.ID end as ID, 
                  case when TFT.ID is not null then TFT.NAME when cTX.ID is not null then cTFT.NAME else B.NAME end as NAME, 
                  case when TFT.ID is not null then (case TX.TYPECODE when 1 then @TEAMLABEL when 2 then @COMPANYLABEL end)
                       when cTX.ID is not null then (case cTX.TYPECODE when 1 then @TEAMLABEL when 2 then @COMPANYLABEL end) else B.[TYPE] end as [TYPE], 
                  case when TFT.ID is not null then TX.TYPECODE when cTX.ID is not null then cTX.TYPECODE else B.TYPECODE end as TYPECODE, 
                  B.ID as PARENTGROUPID, 
                  B.NAME as PARENTGROUPNAME,
                  ''Local'' as AVAILABLESEARCHTYPE, 
                  case when @SEARCHTYPE in (1,4) then 1 when @SEARCHTYPE = 2 and TX.TYPECODE = 2 then 1 else 0 end as SELECTABLE
              from #BaseList B 
              left join dbo.FAFNFGCAMPAIGN NFG (nolock) on NFG.ID = B.ID 
              left join dbo.FAFNFGCAMPAIGNLEVEL NFGL (nolock) on NFGL.NFGCAMPAIGNID = NFG.ID 
              left join dbo.TEAMFUNDRAISINGTEAM cTFT (nolock) on B.ID = cTFT.PARENTTEAMID
              left join dbo.TEAMEXTENSION cTX (nolock) on cTX.TEAMFUNDRAISINGTEAMID = cTFT.ID and cTX.EVENTID = @EVENTID and cTX.TYPECODE <> 3    and cTX.STATUSCODE = 0
              left join dbo.TEAMEXTENSION TX (nolock) on TX.NFGCAMPAIGNLEVELID = NFGL.ID and TX.TYPECODE <> 3 and TX.EVENTID = @EVENTID and TX.STATUSCODE = 0
              left join dbo.TEAMFUNDRAISINGTEAM TFT (nolock) on TFT.ID = TX.TEAMFUNDRAISINGTEAMID
              where cTX.ID is not null or TX.ID is not null
          ),
          GetOtherChildren as 
          (
              select ID, NAME, TYPE , TYPECODE, PARENTGROUPID, PARENTGROUPNAME, AVAILABLESEARCHTYPE, SELECTABLE 
              from GetChildren
              union
              select TFT.ID, TFT.NAME, case TX.TYPECODE when 1 then @TEAMLABEL when 2 then @COMPANYLABEL end as [TYPE], TX.TYPECODE, 
              C.ID as PARENTGROUPID, 
              C.NAME as PARENTGROUPNAME,  
              ''Local'' AS AVAILABLESEARCHTYPE, 
              case when @SEARCHTYPE in (1,4) then 1 when @SEARCHTYPE = 2 and TX.TYPECODE = 2 then 1 else 0 end AS SELECTABLE 
              from GetChildren C
              left join dbo.TEAMFUNDRAISINGTEAM TFT (nolock) on TFT.PARENTTEAMID = C.ID 
              join dbo.TEAMEXTENSION TX (nolock) on TX.TEAMFUNDRAISINGTEAMID = TFT.ID and TX.TYPECODE <> 3 and TX.EVENTID = @EVENTID and TX.STATUSCODE = 0
              where TFT.ID is not null

          )
          insert into #AccumulativeList(ID, NAME, TYPE , TYPECODE, PARENTGROUPID, PARENTGROUPNAME, AVAILABLESEARCHTYPE, SELECTABLE)
          select distinct ID, NAME, TYPE , TYPECODE, PARENTGROUPID, PARENTGROUPNAME, AVAILABLESEARCHTYPE, SELECTABLE 
          from GetOtherChildren 
          where ID not in(select ID from #AccumulativeList) 
          '
          if (@HOUSEHOLDSJOINTEAMS = 0 and @SEARCHTYPE = 4) or @SEARCHTYPE = 2
              set @SQL = @SQL + ' and TYPECODE <> 1'
        end

        if @SEARCHTYPE in (1,2,4)
        begin
            set @SQL = @SQL + '
            ;With GetParents as 
            (
                select distinct
                    case when TFT.ID is not null then TFT.ID when NFG.ID is not null then NFG.ID else null end ID,
                       case when TFT.ID is not null then TFT.NAME when NFG.ID is not null then NFG.NAME else null end as NAME,
                       case when TFT.ID is not null then case TX.TYPECODE when 1 then @TEAMLABEL when 2 then @COMPANYLABEL end 
                            when NFG.ID is not null then (select TC.DESCRIPTION from dbo.FAFNFGTYPECODE TC where TC.ID = NFG.NFGTYPECODEID) 
                            else null end as [TYPE],
                       case when TFT.ID is not null then TX.TYPECODE when NFG.ID is not null then 5 end as TYPECODE,
                       case when TFT.PARENTTEAMID is not null then TFT.PARENTTEAMID 
                            when NFG2.ID is not null then NFG2.ID 
                            else (case when TFT.ID is not null then TFT.ID when NFG.ID is not null then NFG.ID end) end as PARENTGROUPID,               
                       case when TFT.PARENTTEAMID is not null then pTFT.NAME 
                            when NFG2.ID is not null then NFG2.NAME 
                            else (case when TFT.ID is not null then TFT.NAME when NFG.ID is not null then NFG.NAME end) end as PARENTGROUPNAME,
                       case when TFT.ID is not null then ''Local'' when NFG.ID is not null then ''National'' end as AVAILABLESEARCHTYPE, 
                       /*case when TFT.ID is not null and TX.TYPECODE = 2 and @SEARCHTYPE in (1,2,4) then 1
                            when TFT.ID is not null and TX.TYPECODE = 1 and @SEARCHTYPE in (1,4) then 1
                            when NFG.ID is not null and @SEARCHTYPE in (2,3,4) then 1                        
                            else 0 end AS SELECTABLE */  0 as SELECTABLE
                    from #BaseList B
                    left join dbo.TEAMEXTENSION TX (nolock) on TX.TEAMFUNDRAISINGTEAMID = B.PARENTGROUPID and TX.EVENTID = @EVENTID
                    left join dbo.TEAMFUNDRAISINGTEAM TFT (nolock) on TX.TEAMFUNDRAISINGTEAMID= TFT.ID /* current parent level */
                    left join dbo.TEAMFUNDRAISINGTEAM pTFT (nolock) on pTFT.ID = TFT.PARENTTEAMID
                    left join dbo.FAFNFGCAMPAIGNLEVEL NFGL2 (nolock) on TX.NFGCAMPAIGNLEVELID = NFGL2.ID /* next parent level if exists */
                    left join dbo.FAFNFGCAMPAIGN NFG2 (nolock) on NFG2.ID = NFGL2.NFGCAMPAIGNID'

            set @SQL = @SQL + '        
                    left join dbo.FAFNFGCAMPAIGN NFG (nolock) on NFG.ID = B.PARENTGROUPID /* parent level 1 */' 

            set @SQL = @SQL + ' where B.TYPECODE <> 5 and B.PARENTGROUPID is not null
            ),
            GetOtherParents as 
            (
                select ID, NAME, TYPE , TYPECODE, PARENTGROUPID, PARENTGROUPNAME, AVAILABLESEARCHTYPE, SELECTABLE 
                from GetParents
                Union all
                select NFG.ID, NFG.NAME, (select TC.DESCRIPTION from dbo.FAFNFGTYPECODE TC where TC.ID = NFG.NFGTYPECODEID) as [TYPE],
                5 as TYPECODE, NFG.ID as PARENTGROUPID, NFG.NAME as PARENTGROUPNAME, ''National''  AVAILABLESEARCHTYPE, 0 as SELECTABLE 
                from GetParents P
                left join dbo.FAFNFGCAMPAIGN NFG (nolock) on P.PARENTGROUPID = NFG.ID
        '

            set @SQL = @SQL + ' )

            insert into #AccumulativeList(ID, NAME, TYPE , TYPECODE, PARENTGROUPID, PARENTGROUPNAME, AVAILABLESEARCHTYPE, SELECTABLE)
            select distinct ID, NAME, TYPE , TYPECODE, PARENTGROUPID, PARENTGROUPNAME, AVAILABLESEARCHTYPE, SELECTABLE  
            from GetOtherParents
            where ID is not null and ID not in (select ID from #AccumulativeList)' 

        end

        set @SQL = @SQL + ' insert into #BaseList(ID, NAME, TYPE, TYPECODE, PARENTGROUPID, PARENTGROUPNAME, AVAILABLESEARCHTYPE, SELECTABLE)
        select ID, NAME, TYPE, TYPECODE, PARENTGROUPID, PARENTGROUPNAME, AVAILABLESEARCHTYPE, SELECTABLE
        from #AccumulativeList A where A.ID not in(select ID from #BaseList)

        select distinct top (@MAXROWS) 
        case when TYPECODE = 5 then NFGL.ID else B.ID end as ID
        ,B.NAME
        ,B.TYPE
        ,B.TYPECODE
        ,case when NFG.ID is not null then NFGL.ID else B.PARENTGROUPID end as PARENTGROUPID
        ,B.PARENTGROUPNAME
        ,B.AVAILABLESEARCHTYPE
    ,B.SELECTABLE '


        set @SQL = @SQL + ',L.LEADERS 
                      ,case when B.TYPECODE = 1 and FGSI.TOTALPARTICIPANTS >= @TEAMMEMBERLIMIT then 1 else 0 end as MEMBERLIMITREACHED
                                  ,case when B.TYPECODE = 2 and FGSI.TOTALGROUPS >= @COMPANYTEAMLIMIT then 1 else 0 end as GROUPLIMITREACHED
    from #BaseList B
        left join (
            select dbo.UDA_BUILDLIST(C.NAME) as LEADERS, iTX.ID from #BaseList iTX
                join TEAMFUNDRAISINGTEAMCAPTAIN tftc on iTX.ID = tftc.TEAMFUNDRAISINGTEAMID
                join CONSTITUENT c on tftc.CONSTITUENTID = c.ID 
              group by iTX.ID
        ) L on B.ID = L.ID
        left join dbo.FAFGROUPSUMMARYINFORMATION FGSI (nolock) on FGSI.ID = B.ID 
        left join dbo.FAFNFGCAMPAIGN NFG (nolock) on NFG.ID = B.PARENTGROUPID
        left join dbo.FAFNFGCAMPAIGNLEVEL NFGL (nolock) on NFGL.NFGCAMPAIGNID = NFG.ID and NFGL.HIERARCHYPATH.GetAncestor(1) = ''/''
        order by B.PARENTGROUPNAME, B.NAME
        '    

        set @PARAMDEFINITION = N'@MAXROWS int, 
                                @SEARCHSTR nvarchar(20), 
                                @EVENTID uniqueidentifier, 
                                @SEARCHTYPE tinyint, 
                                @TEAMLABEL nvarchar(200), 
                                @COMPANYLABEL nvarchar(200),
                                @TEAMMEMBERLIMIT int,
                                @COMPANYMEMBERLIMIT int,
                                @COMPANYTEAMLIMIT int,
                                @HOUSEHOLDSJOINTEAMS bit';

        exec sp_executesql @SQL, @PARAMDEFINITION, @MAXROWS=@MAXROWS
                                                    @SEARCHSTR=@SEARCHSTR
                                                    @EVENTID=@EVENTID
                                                    @SEARCHTYPE=@SEARCHTYPE
                                                    @TEAMLABEL=@TEAMLABEL
                                                    @COMPANYLABEL=@COMPANYLABEL,
                                                    @TEAMMEMBERLIMIT=@TEAMMEMBERLIMIT,
                                                    @COMPANYMEMBERLIMIT =@COMPANYMEMBERLIMIT ,
                                                    @COMPANYTEAMLIMIT=@COMPANYTEAMLIMIT,
                                                    @HOUSEHOLDSJOINTEAMS=@HOUSEHOLDSJOINTEAMS