USP_DATALIST_FAFNFGLEVEL

Parameters

Parameter Parameter Type Mode Description
@NFGLEVELROOTID uniqueidentifier IN
@EVENTID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_DATALIST_FAFNFGLEVEL  
(  
 @NFGLEVELROOTID uniqueidentifier = null,  
 @EVENTID uniqueidentifier  
)  
AS  
begin  
 set nocount on;  
 declare @ALLOWGROUPSCHOOSEHIERARCHYLEVEL bit  
 declare @NFGCAMPAIGNID uniqueidentifier
 declare @NFGSITECOUNT int = 0

 --get the default value  

 select @ALLOWGROUPSCHOOSEHIERARCHYLEVEL=0;  

 --get the value of 'Allow households, teams, and companies to choose a level' and CampaignID  

 select @NFGCAMPAIGNID = C.ID, @ALLOWGROUPSCHOOSEHIERARCHYLEVEL = C.ALLOWGROUPSCHOOSEHIERARCHYLEVEL  
 from dbo.FAFNFGCAMPAIGN C  
 inner join dbo.FAFNFGCAMPAIGNLEVEL lev on lev.NFGCAMPAIGNID = C.ID   
 where lev.ID = @NFGLEVELROOTID

 --get the count of nfg

 select @NFGSITECOUNT = count(NFG.ID) 
 from dbo.FAFNFGCAMPAIGN NFG
 inner join dbo.FAFNFGCAMPAIGNDISPLAYSITE NFGSITE on NFGSITE.NFGCAMPAIGNID = NFG.ID
 where NFG.ID = @NFGCAMPAIGNID

 declare @LEVELS table(id int identity(1,1), LEVELID uniqueidentifier, HIERARCHYPATH hierarchyid)
 declare @NFGLEVELSITES table(LEVELID uniqueidentifier, SITEID uniqueidentifier)
 declare @LEVELCOUNT int = 1
 declare @LEVELINDEX int = 1
 declare @NFGLEVELID uniqueidentifier
 declare @NFGLEVELHIERARCHYPATH hierarchyid

 -- if NFG have some sites

 if @NFGSITECOUNT <> 0
     begin
         insert into @LEVELS(LEVELID, HIERARCHYPATH)
         select ID,HIERARCHYPATH
         from dbo.FAFNFGCAMPAIGNLEVEL 
         where NFGCAMPAIGNID = @NFGCAMPAIGNID and ID <> @NFGLEVELROOTID
         select @LEVELCOUNT = max(ID) from @LEVELS

         while @LEVELINDEX <= @LEVELCOUNT
            BEGIN
                select @NFGLEVELID = LEVELID, @NFGLEVELHIERARCHYPATH = HIERARCHYPATH FROM @LEVELS WHERE ID = @LEVELINDEX
                --if level is not selected any site

                if not exists (select * 
                    from @LEVELS L
                    inner join dbo.FAFNFGCAMPAIGNLEVELDISPLAYSITE LS on LS.NFGCAMPAIGNLEVELID = L.LEVELID
                    where L.ID = @LEVELINDEX)
                    BEGIN
                        --if level is 2, then get the nfg sites

                        if (select HIERARCHYPATH.GetLevel() from @LEVELS WHERE ID = @LEVELINDEX) = 2
                            begin
                                insert into @NFGLEVELSITES(LEVELID, SITEID)
                                select @NFGLEVELID , SITEID
                                from  dbo.FAFNFGCAMPAIGN C
                                INNER JOIN dbo.FAFNFGCAMPAIGNDISPLAYSITE CS on CS.NFGCAMPAIGNID = C.ID
                                WHERE C.ID = @NFGCAMPAIGNID
                            end
                        else
                            begin--if level is more than 2, then get sites of the parent level

                                insert into @NFGLEVELSITES(LEVELID, SITEID)
                                select @NFGLEVELID , LS.SITEID
                                FROM @LEVELS L
                                inner join @NFGLEVELSITES LS ON LS.LEVELID = L.LEVELID and @NFGLEVELHIERARCHYPATH.GetAncestor (1)= L.HIERARCHYPATH
                            end
                    END
                else
                    begin-- if level is selected sites, get the FAFNFGCAMPAIGNLEVELDISPLAYSITE table data

                        insert into @NFGLEVELSITES(LEVELID, SITEID)
                        select L.LEVELID , LS.SITEID
                        FROM @LEVELS L
                        inner join dbo.FAFNFGCAMPAIGNLEVELDISPLAYSITE LS ON LS.NFGCAMPAIGNLEVELID = L.LEVELID
                        where L.ID = @LEVELINDEX
                    end
                SET @LEVELINDEX = @LEVELINDEX + 1
            END
    end

 select NFGL.ID,   
     NFGL.Name,  
     NFGL.HIERARCHYPATH.GetLevel() Level   
 from dbo.FAFNFGCAMPAIGNLEVEL NFGL  
 inner join dbo.FAFNFGCAMPAIGN NFG on NFG.ID = NFGL.NFGCAMPAIGNID
 inner join dbo.EVENTEXTENSION EE on EE.FAFPROGRAMID = NFG.CAMPAIGNID and EE.EVENTID = @EVENTID
 where NFGL.NFGCAMPAIGNID = @NFGCAMPAIGNID  
    and NFGL.HIERARCHYPATH.GetLevel() > = 2
    and @ALLOWGROUPSCHOOSEHIERARCHYLEVEL = 1  
    and @NFGSITECOUNT = 0 or exists (  
     select LEVELID  
     from @NFGLEVELSITES  
     where LEVELID = NFGL.ID   
      and SITEID in (select SITEID from dbo.EVENTSITE where EVENTID = @EVENTID)    
    )  
 order by HIERARCHYPATH   
end