USP_DATALIST_PREVIOUSEVENTGROUPBYCONSTITUENT

Parameters

Parameter Parameter Type Mode Description
@EVENTID uniqueidentifier IN
@CONSTITUENTID uniqueidentifier IN
@ROLETYPE tinyint IN

Definition

Copy


CREATE procedure dbo.USP_DATALIST_PREVIOUSEVENTGROUPBYCONSTITUENT
(
  @EVENTID uniqueidentifier,
  @CONSTITUENTID uniqueidentifier,
  @ROLETYPE tinyint
)
as
    set nocount on;

        declare 
            @PREVIOUSEVENTID uniqueidentifier,
            @GROUPNAME nvarchar(200),
            @GROUPCONSTITUENTID uniqueidentifier,
            @GROUPID uniqueidentifier,
            @GROUPTYPECODE tinyint = 2,
            @PARENTGROUPNAME nvarchar(200),
            @PARENTGROUPID uniqueidentifier,
            @PARENTGROUPCODE tinyint = 0,
            @ISLEADER bit = 0,
            @GROUPHASSTARTED bit = 0,
            @PREVIOUSGROUPID uniqueidentifier,
            @PARENTGROUPCONSTITUENTID uniqueidentifier,
            @PARENTGROUPHASSTARTED bit = 0,
      @TOTALMEMBERS int = 0,
      @TOTALCHILDGROUPS int = 0,
      @TEAMMEMBERSLIMIT int
      @COMPANYTEAMSLIMIT int
      @COMPANYTEAMMEMBERSLIMIT int


select @PREVIOUSEVENTID=PRIORYEAREVENTID FROM dbo.EVENTEXTENSION EX where EX.EVENTID = @EVENTID

if @PREVIOUSEVENTID is not null
begin

    if @ROLETYPE = 1
    begin
          select 
            @GROUPID = T.ID,
            @GROUPNAME = T.NAME,
            @GROUPTYPECODE = TE.TYPECODE,
            @GROUPCONSTITUENTID = TE.TEAMCONSTITUENTID,
            @PARENTGROUPNAME = T2.NAME, 
            @PARENTGROUPCODE = TE2.TYPECODE,
            @PARENTGROUPID = T.PARENTTEAMID ,
            @PARENTGROUPCONSTITUENTID = TE2.TEAMCONSTITUENTID,
            @ISLEADER = (CASE WHEN TC.ID IS NOT NULL THEN 1 ELSE 0 END)
         from  dbo.TEAMEXTENSION TE WITH (nolock)  
         inner join dbo.TEAMFUNDRAISINGTEAM T WITH (nolock) on T.ID = TE.TEAMFUNDRAISINGTEAMID  
         join dbo.TEAMFUNDRAISINGTEAMMEMBER TM WITH (nolock)  ON T.ID = TM.TEAMFUNDRAISINGTEAMID  
                  and TM.TEAMFUNDRAISERID IN (SELECT ID from dbo.TEAMFUNDRAISER (nolock) where CONSTITUENTID = @CONSTITUENTID)  
         left join dbo.TEAMFUNDRAISINGTEAMCAPTAIN TC WITH (NOLOCK) ON TC.TEAMFUNDRAISINGTEAMID = T.ID AND TC.CONSTITUENTID = @CONSTITUENTID  
         left join dbo.TEAMFUNDRAISINGTEAM T2 (nolock) ON T.PARENTTEAMID = T2.ID
         left join dbo.TEAMEXTENSION TE2 (nolock) ON T2.id = TE2.TEAMFUNDRAISINGTEAMID
         WHERE TE.EVENTID = @PREVIOUSEVENTID
    end
    else if @ROLETYPE in (2,3,4)
    begin
          select @PREVIOUSGROUPID=TX.TEAMFUNDRAISINGTEAMID, @ISLEADER = (CASE WHEN TFTC.ID IS NOT NULL THEN 1 ELSE 0 END) from dbo.TEAMEXTENSION TX (nolock)    
          join dbo.TEAMFUNDRAISINGTEAMMEMBER TFTM (nolock) on TX.TEAMFUNDRAISINGTEAMID = TFTM.TEAMFUNDRAISINGTEAMID         
          join dbo.TEAMFUNDRAISER TF (nolock) on TF.ID = TFTM.TEAMFUNDRAISERID 
          left join dbo.TEAMFUNDRAISINGTEAMCAPTAIN TFTC (nolock) on TFTC.TEAMFUNDRAISINGTEAMID = TX.TEAMFUNDRAISINGTEAMID and TFTC.CONSTITUENTID = @CONSTITUENTID
          where TF.CONSTITUENTID = @CONSTITUENTID and TX.EVENTID = @PREVIOUSEVENTID

          select 
              @GROUPID = case when TFT.ID is not null then TFT.ID when NFGL1.ID is not null then NFGL1.ID else null end,
              @GROUPNAME = case when TFT.ID is not null then TFT.NAME when NFGL1.ID is not null then NFG1.NAME else null end
              @GROUPCONSTITUENTID = case when TFT.ID is not null then TX.TEAMCONSTITUENTID when NFGL1.ID is not null then NFG1.GROUPCONSTITUENTID else null end,
              @GROUPTYPECODE=case when TFT.ID is not null then TX.TYPECODE when NFGL1.ID is not null then 5 else null end,  
              @PARENTGROUPNAME = case when pTFT.ID is not null then pTFT.NAME when NFG.NAME is not null then NFG.NAME else null end
              @PARENTGROUPCODE = case when pTFT.ID is not null then pTX.TYPECODE when NFGL.ID is not null then 5 else null end, -- use 5 here so it can be consistently an integer 5 = national

              @PARENTGROUPID = case when pTFT.ID is not null then pTFT.PARENTTEAMID when NFG.ID is not null then NFGL.ID else null end,
              @PARENTGROUPCONSTITUENTID = case when pTFT.ID is not null then pTX.TEAMCONSTITUENTID when NFGL.ID is not null then NFG.GROUPCONSTITUENTID else null end
          from dbo.TEAMFUNDRAISINGTEAM cTFT 
          join dbo.TEAMEXTENSION cTX (nolock) on cTFT.ID = cTX.TEAMFUNDRAISINGTEAMID
          left join dbo.TEAMFUNDRAISINGTEAM TFT (nolock) on TFT.ID = cTFT.PARENTTEAMID    -- direct parent (1)

          left join dbo.TEAMEXTENSION TX (nolock) on TX.TEAMFUNDRAISINGTEAMID = TFT.ID        
          left join dbo.FAFNFGCAMPAIGNLEVEL NFGL1 (nolock) on NFGL1.ID = cTX.NFGCAMPAIGNLEVELID -- direct parent (1) in case previous group has national as parent rather than local

          left join dbo.FAFNFGCAMPAIGN NFG1 (nolock) on NFG1.ID = NFGL1.NFGCAMPAIGNID

          left join dbo.TEAMFUNDRAISINGTEAM pTFT (nolock) on pTFT.ID = TFT.PARENTTEAMID    -- next direct parent (2)

          left join dbo.TEAMEXTENSION pTX (nolock) on pTX.TEAMFUNDRAISINGTEAMID = pTFT.ID
          left join dbo.FAFNFGCAMPAIGNLEVEL NFGL (nolock) on NFGL.ID = TX.NFGCAMPAIGNLEVELID -- next direct parent (2) in case (1) has national as parent rather than local

          left join dbo.FAFNFGCAMPAIGN NFG (nolock) on NFG.ID = NFGL.NFGCAMPAIGNID
          where cTFT.ID = @PREVIOUSGROUPID    

    end

    -- get the started group of the current event


    if @GROUPTYPECODE <> 5 
      select @GROUPID = TX.TEAMFUNDRAISINGTEAMID, @GROUPNAME = TFT.NAME, @GROUPTYPECODE=TX.TYPECODE
      from dbo.TEAMEXTENSION TX (nolock)
      join dbo.TEAMFUNDRAISINGTEAM TFT (nolock) on TX.TEAMFUNDRAISINGTEAMID = TFT.ID
      where TEAMCONSTITUENTID = @GROUPCONSTITUENTID and EVENTID = @EVENTID   
    else
      select @GROUPID = NFGL.ID, @GROUPNAME = NFG.NAME
      from dbo.EVENTEXTENSION EX (nolock)
      join dbo.FAFNFGCAMPAIGN NFG (nolock) on EX.FAFPROGRAMID = NFG.CAMPAIGNID
      join dbo.FAFNFGCAMPAIGNLEVEL NFGL (nolock) on NFG.ID = NFGL.NFGCAMPAIGNID and NFGL.HIERARCHYPATH.GetAncestor(1) = '/'
      where NFG.GROUPCONSTITUENTID = @GROUPCONSTITUENTID and EX.EVENTID = @EVENTID   

    if @PARENTGROUPCODE <> 5 
      select @PARENTGROUPID = TX.TEAMFUNDRAISINGTEAMID, @PARENTGROUPNAME = TFT.NAME, @PARENTGROUPCODE = TX.TYPECODE
      from dbo.TEAMEXTENSION TX (nolock)
      join dbo.TEAMFUNDRAISINGTEAM TFT (nolock) on TX.TEAMFUNDRAISINGTEAMID = TFT.ID
      where TEAMCONSTITUENTID = @PARENTGROUPCONSTITUENTID and EVENTID = @EVENTID   
    else
      select @PARENTGROUPID = NFGL.ID, @PARENTGROUPNAME = NFG.NAME
      from dbo.EVENTEXTENSION EX (nolock)
      join dbo.FAFNFGCAMPAIGN NFG (nolock) on EX.FAFPROGRAMID = NFG.CAMPAIGNID
      join dbo.FAFNFGCAMPAIGNLEVEL NFGL (nolock) on NFG.ID = NFGL.NFGCAMPAIGNID and NFGL.HIERARCHYPATH.GetAncestor(1) = '/'
      where NFG.GROUPCONSTITUENTID = @PARENTGROUPCONSTITUENTID and EX.EVENTID = @EVENTID  

    -- end


    select @GROUPHASSTARTED=1 from dbo.TEAMEXTENSION (nolock) where TEAMCONSTITUENTID = @GROUPCONSTITUENTID and EVENTID = @EVENTID
    if @GROUPHASSTARTED = 0
    begin        
        select @GROUPHASSTARTED=1 from dbo.FAFNFGCAMPAIGN (nolock) where GROUPCONSTITUENTID = @GROUPCONSTITUENTID and CAMPAIGNID in (select FAFPROGRAMID from dbo.EVENTEXTENSION where EVENTID = @EVENTID)
        select @PARENTGROUPHASSTARTED=1 from dbo.TEAMEXTENSION (nolock) where TEAMCONSTITUENTID = @PARENTGROUPCONSTITUENTID and EVENTID = @EVENTID

        if @PARENTGROUPHASSTARTED=0      
            select @PARENTGROUPHASSTARTED=1 from dbo.FAFNFGCAMPAIGN (nolock) where GROUPCONSTITUENTID = @PARENTGROUPCONSTITUENTID and CAMPAIGNID in (select FAFPROGRAMID from dbo.EVENTEXTENSION where EVENTID = @EVENTID)
    end 

  select @GROUPID = case when @GROUPHASSTARTED = 1 then @GROUPID when @PARENTGROUPHASSTARTED = 1 then @PARENTGROUPID else null end,
         @GROUPNAME = case when @GROUPHASSTARTED = 1 then @GROUPNAME when @PARENTGROUPHASSTARTED = 1 then @PARENTGROUPNAME else null end,
         @GROUPTYPECODE = case when @GROUPHASSTARTED = 1 then @GROUPTYPECODE when @PARENTGROUPHASSTARTED = 1 then @PARENTGROUPCODE else null end

  select  @TOTALMEMBERS=TOTALPARTICIPANTS, 
          @TOTALCHILDGROUPS=TOTALGROUPS 
  from dbo.FAFGROUPSUMMARYINFORMATION (nolock) where ID = @GROUPID

  select         
      @TEAMMEMBERSLIMIT = TEAMMEMBERSLIMIT, 
      @COMPANYTEAMSLIMIT = COMPANYTEAMSLIMIT, 
      @COMPANYTEAMMEMBERSLIMIT = COMPANYTEAMMEMBERSLIMIT
    from dbo.EVENTTEAMFAFCONFIG (nolock) where EVENTID = @EVENTID

  -- clear out selection if this group has reached the limit set by the event

  if (@ROLETYPE = 1 and @GROUPTYPECODE = 1 and @TOTALMEMBERS >= @TEAMMEMBERSLIMIT
     or 
     (@ROLETYPE in (2,3) and @GROUPTYPECODE = 2 and @TOTALCHILDGROUPS >= @COMPANYTEAMSLIMIT)
  begin
    set @GROUPID = null
    set @GROUPNAME = null
    set @GROUPTYPECODE = null
  end    

  -- clear out selection if this group is national group and is not set to allow groups to join

  if (@ROLETYPE IN (2,4) AND @GROUPTYPECODE = 5 and 
        not exists(select NFG.ID from dbo.FAFNFGCAMPAIGN NFG (nolock) 
                    join dbo.FAFNFGCAMPAIGNLEVEL NFGL (nolock) on NFG.ID = NFGL.NFGCAMPAIGNID 
                    where NFGL.ID = @GROUPID and NFG.ALLOWOTHERSJOINFROMGROUPPAGE = 1))
     Or
     (@ROLETYPE = 3 and @GROUPTYPECODE = 5 and 
        not exists(select NFG.ID from dbo.FAFNFGCAMPAIGN NFG (nolock) 
                    join dbo.FAFNFGCAMPAIGNLEVEL NFGL (nolock) on NFG.ID = NFGL.NFGCAMPAIGNID 
                    where NFGL.ID = @GROUPID and NFG.ALLOWCOMPANIESJOINFROMGROUPPAGE = 1))
  begin                
    set @GROUPID = null
    set @GROUPNAME = null
    set @GROUPTYPECODE = null                    
  end

    select   
      E.ID as PRIORYEAREVENTID,  --0

      E.NAME as PRIORYEAREVENTNAME,    --1

      @ISLEADER AS ISLEADER  ,        --2    

      @GROUPID as PARENTGROUPID,            --3

      @GROUPNAME AS PARENTGROUPNAME,  --4 

      @GROUPTYPECODE as PARENTGROUPCODE    --5

     from dbo.EVENT E (NOLOCK)
     where E.ID = @PREVIOUSEVENTID 


end