USP_DATALIST_FAFPARTICIPANTSEARCH

Return a list of Participants that match search criteria

Parameters

Parameter Parameter Type Mode Description
@EVENTID varchar(50) IN Event ID
@SEARCHSTRING varchar(500) IN Search String

Definition

Copy


CREATE procedure dbo.USP_DATALIST_FAFPARTICIPANTSEARCH
(
    @EVENTID      varchar(50) = '',
    @SEARCHSTRING varchar(500) = ''
)
as
set nocount on;

CREATE TABLE #TMPSEARCHTABLE
(
    [ID] uniqueidentifier primary key
)

DECLARE @PARTICIPANTSEARCHINFOS TABLE
(
    [TEMPID] int IDENTITY(1,1) primary key,
    [ID] uniqueidentifier,
    [NAME] VARCHAR(100),
    [TYPE] VARCHAR(50),
    [PAGEID] VARCHAR(50),
    [PT] VARCHAR(50),
    [PTYPE] VARCHAR(50),
    [PNAME] VARCHAR(200),
    [ISPRIVATE] BIT,
    [TEAMID] VARCHAR(50),
    [HOUSEHOLDID] VARCHAR(50),
    [ORDERID] INT
);

if LEN(@SEARCHSTRING) > 0
begin
    declare @str1 varchar(500), @str2 varchar(500), @idx int, @cnt int

    set @idx =  charindex('~', @SEARCHSTRING)
    if @idx > 0
        begin
            set @str1 = left(@SEARCHSTRING, @idx - 1)
            set @str2 = right(@SEARCHSTRING, len(@SEARCHSTRING) - @idx)    -- a backup search string in case the first string doesn't return much

            if @str2 = @str1
                set @str2 = ''
        end
    else
        begin
            set @str1 = @SEARCHSTRING
            set @str2 = ''
        end

    --initial search(es), truncated to top 10 results

      exec sp_executesql N'
            insert into #TMPSEARCHTABLE ([ID])
            select top 10 R.ID
            from dbo.CONSTITUENT C (nolock)
            inner join dbo.REGISTRANT R (nolock) on R.CONSTITUENTID = C.ID
            inner join dbo.EVENTEXTENSION (nolock) EX on EX.EVENTID = R.EVENTID
            where contains(NAME, @str1) and R.EVENTID = @EVENTID',
            N'@str1 varchar(500), @EVENTID uniqueidentifier', @str1 = @str1, @EVENTID = @EVENTID;

    --select @cnt = count(*) from #TMPSEARCHTABLE

    --if @cnt < 10 and len(@str2) > 0

    --    --exec sp_executesql N'

                --insert into #TMPSEARCHTABLE ([ID])

                --select top 10 R.ID

    --            from dbo.CONSTITUENT C (nolock)

    --            inner join dbo.REGISTRANT R (nolock) on R.CONSTITUENTID = C.ID

    --            inner join dbo.EVENTEXTENSION EX (nolock) on EX.EVENTID = R.EVENTID

    --            where contains(NAME, @str2) and R.EVENTID = @EVENTID and R.ID not in (select ID from #TMPSEARCHTABLE)--',

    --    --N'@str2 varchar(500), @EVENTID uniqueidentifier', @str2 = @str2, @EVENTID = @EVENTID;


    select @cnt = count(*) from #TMPSEARCHTABLE
    if @cnt > 0
        INSERT INTO @PARTICIPANTSEARCHINFOS ([ID], [NAME], [TYPE], [PAGEID], [PT], [PTYPE], [PNAME], [ISPRIVATE], [TEAMID], [HOUSEHOLDID], [ORDERID])
        SELECT 
            TT.ID, 
            c.NAME,
            case when x.STATUSCODE in (1,2) then 'Individual' else rl.ROLE end as Type,
            ept.PAGEID, 
            '0' as PT,
            case when x.STATUSCODE in (1,2) then null else x.TYPE end as PTYPE,
            case when x.STATUSCODE in (1,2) then null else t.NAME end as PNAME, 
            rex.ISPRIVATE As ISPRIVATE, 
            ISNULL(I.TEAMID,'00000000-0000-0000-0000-000000000000') As TEAMID,
            isnull(I.HouseholdID, '00000000-0000-0000-0000-000000000000') as HOUSEHOLDID,
            CASE WHEN x.EVENTID = @EVENTID then 1 else 2 end as ORDERID
        FROM #TMPSEARCHTABLE TT
        inner join REGISTRANT R (nolock) on R.ID = TT.ID
        inner join REGISTRANTEXTENSION rex (nolock) on R.ID = rex.REGISTRANTID
        left join TEAMFUNDRAISER f (nolock) on f.CONSTITUENTID = R.CONSTITUENTID
        left join TEAMFUNDRAISINGTEAMMEMBER tm (nolock) on f.ID = tm.TEAMFUNDRAISERID
        left join TEAMFUNDRAISINGTEAM t (nolock) on t.ID = tm.TEAMFUNDRAISINGTEAMID
        left join TEAMEXTENSION x (nolock) on x.TEAMFUNDRAISINGTEAMID = t.ID and x.EVENTID = R.EVENTID
        left join CONSTITUENT c (nolock) on R.CONSTITUENTID = c.ID
        left join FAFEVENTPAGETEMPLATE ept (nolock) on R.EVENTID = ept.EVENTID
        left join dbo.UFN_REGISTRANT_GETFAFROLE(@EVENTID, NULL) rl ON rl.REGISTRANTID = r.ID
        outer apply UFN_FAF_GETTEAMCOMPANYHOUSEHOLDINFO_BY_REGISTRANT(@EVENTID, R.CONSTITUENTID) I

    -------------------------


    delete from #TMPSEARCHTABLE

    exec sp_executesql N'
            insert into #TMPSEARCHTABLE ([ID])
            select top 10 TE.TEAMFUNDRAISINGTEAMID
            from dbo.CONSTITUENT C (nolock)
            inner join  dbo.TEAMEXTENSION TE (nolock) on TE.TEAMCONSTITUENTID = C.ID and TE.STATUSCODE = 0
            where TE.EVENTID = @EVENTID and contains(NAME, @str1)',
            N'@str1 varchar(500), @EVENTID uniqueidentifier', @str1 = @str1, @EVENTID = @EVENTID;


    --select @cnt = count(*) from #TMPSEARCHTABLE

    --if @cnt < 10 and len(@str2) > 0

    --    --exec sp_executesql N'

    --            insert into #TMPSEARCHTABLE ([ID])

    --            select top 10 TE.TEAMFUNDRAISINGTEAMID

    --            from dbo.CONSTITUENT C (nolock)

    --            inner join  dbo.TEAMEXTENSION TE (nolock) on TE.TEAMCONSTITUENTID = C.ID

    --            where TE.EVENTID = @EVENTID and contains(NAME, @str2) and TE.TEAMFUNDRAISINGTEAMID not in (select ID from #TMPSEARCHTABLE)--',

    --    --N'@str2 varchar(500), @EVENTID uniqueidentifier', @str2 = @str2, @EVENTID = @EVENTID;


    select @cnt = count(*) from #TMPSEARCHTABLE

    if @cnt > 0
        INSERT INTO @PARTICIPANTSEARCHINFOS ([ID], [NAME], [TYPE], [PAGEID], [PT], [PTYPE], [PNAME], [ISPRIVATE], [TEAMID], [HOUSEHOLDID], [ORDERID])
        select 
            TT.ID, 
            T.NAME, 
            X.TYPE
            EPT.PAGEID, 
            x.typecode as PT, 
            X2.TYPE as PTYPE, 
            T2.NAME as PNAME, 
            0 As ISPRIVATE, 
            --if it's a household and the parent is a team then put in the team id,

            case when x.TYPECODE <> 3 then T.ID else case when X2.TYPECODE = 1 then X2.TEAMFUNDRAISINGTEAMID else '00000000-0000-0000-0000-000000000000' end end as TEAMID, 
            case when X.TYPECODE = 3 then T.ID else '00000000-0000-0000-0000-000000000000' end as HOUSEHOLDID, 3 as ORDERID
        from #TMPSEARCHTABLE TT
        inner join TEAMFUNDRAISINGTEAM T (nolock) ON TT.ID = T.ID
        inner join TEAMEXTENSION X (nolock) on T.ID = X.TEAMFUNDRAISINGTEAMID
        left join TEAMFUNDRAISINGTEAM T2 (nolock) on T2.ID = T.PARENTTEAMID
        left join TEAMEXTENSION X2 (nolock) on X2.TEAMFUNDRAISINGTEAMID = T2.ID
        left join FAFEVENTPAGETEMPLATE EPT (nolock) on X.EVENTID = EPT.EVENTID
end

DROP TABLE #TMPSEARCHTABLE

SELECT T1.ID, T1.NAME, T1.TYPE, T1.PAGEID, T1.PT, T1.PTYPE, T1.PNAME, T1.ISPRIVATE, T1.TEAMID, T1.HOUSEHOLDID
FROM @PARTICIPANTSEARCHINFOS T1
INNER JOIN (select MIN(TEMPID) as TEMPID from @PARTICIPANTSEARCHINFOS group by ID) T2 on T2.TEMPID=T1.TEMPID
order by 5, 2;