UFN_FAFEVENT_GETGROUPNAMEBYCONSTITUENT

Return a top level group name which a participant is belong to

Return

Return Type
nvarchar(200)

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTID uniqueidentifier IN

Definition

Copy


CREATE function dbo.UFN_FAFEVENT_GETGROUPNAMEBYCONSTITUENT(
    @CONSTITUENTID uniqueidentifier = null
)
returns nvarchar(200)
with execute as caller
as begin
    DECLARE @RETGROUPNAME nvarchar(200) = ''
    DECLARE @PARENTTEAMID uniqueidentifier = null

    DECLARE  @TEMPTOPGROUP AS TABLE (id int, TopGroupID uniqueidentifier,TopGroupName nvarchar(250))
    DECLARE  @TempTopGroupID uniqueidentifier = null
    DECLARE  @TempTopGroupName nvarchar(250) = null
    DECLARE  @TempCounter integer = 0
    DECLARE  @TempTotalCount integer = 0

    IF (@CONSTITUENTID IS NOT NULL)
    BEGIN    
            --SELECT DISTINCT @TempTopGroupID=TFT.PARENTTEAMID

            SELECT DISTINCT @TempTopGroupID=ISNULL(TFT.PARENTTEAMID, TFT.ID)
            FROM REGISTRANT REG 
            INNER JOIN TEAMFUNDRAISER TFR ON REG.CONSTITUENTID = TFR.CONSTITUENTID 
            INNER JOIN TEAMFUNDRAISINGTEAMMEMBER TFTM ON TFTM.TEAMFUNDRAISERID=TFR.ID
            INNER JOIN TEAMFUNDRAISINGTEAM TFT ON TFT.ID=TFTM.TEAMFUNDRAISINGTEAMID
            LEFT JOIN  TEAMEXTENSION TE ON TE.TEAMFUNDRAISINGTEAMID = TFT.ID
            WHERE REG.CONSTITUENTID=ISNULL(@CONSTITUENTID,REG.CONSTITUENTID)
            OR TE.TEAMCONSTITUENTID=ISNULL(@CONSTITUENTID,TE.TEAMCONSTITUENTID)

            --First Insert        

            SELECT @TempTopGroupName=ISNULL(NAME,'')
            FROM TEAMFUNDRAISINGTEAM WHERE ID=@TempTopGroupID

            INSERT INTO @TEMPTOPGROUP(id, TopGroupID, TopGroupName)
            VALUES(@TempCounter,@TempTopGroupID,@TempTopGroupName)        

            If EXISTS(SELECT TOP 1 TopGroupID FROM @TEMPTOPGROUP)
            BEGIN
                SELECT @TempCounter = 0, @TempTotalCount = COUNT(id) FROM @TEMPTOPGROUP
                --Loop through to find the very top one

                WHILE (@TempCounter <= @TempTotalCount)
                BEGIN
                    DECLARE @TempCurrentParentTeamID uniqueidentifier = null
                    SELECT Top 1 @TempCurrentParentTeamID=TopGroupID FROM @TEMPTOPGROUP ORDER BY id 

                    SELECT @TempTopGroupID=PARENTTEAMID
                    FROM TEAMFUNDRAISINGTEAM WHERE ID=@TempCurrentParentTeamID

                    SELECT DISTINCT @TempTopGroupID=ID,@TempTopGroupName=ISNULL(NAME,'')        
                    FROM TEAMFUNDRAISINGTEAM WHERE ID=@TempTopGroupID

                    SET @TempCounter = @TempCounter + 1
                    INSERT INTO @TEMPTOPGROUP(id, TopGroupID, TopGroupName)
                    VALUES(@TempCounter,@TempTopGroupID,@TempTopGroupName)        
                END
            END
    END        

    SELECT Top 1 @RETGROUPNAME=TopGroupName FROM @TEMPTOPGROUP ORDER BY id DESC

    return @RETGROUPNAME
end