USP_APPUSERSITEBRANCH_UPDATESITES

Updates the APPUSERSITEBRANCH table to reflect the current default site branch.

Parameters

Parameter Parameter Type Mode Description
@APPUSERID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN

Definition

Copy


            CREATE procedure dbo.USP_APPUSERSITEBRANCH_UPDATESITES 
            (
                @APPUSERID uniqueidentifier = null,
                @CHANGEAGENTID uniqueidentifier = null
            )
            as
                set nocount on;                

                if @CHANGEAGENTID is null begin
                    exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
                end;

                declare @CONTEXTCACHE varbinary(128) = CONTEXT_INFO()
                set CONTEXT_INFO @CHANGEAGENTID;

                delete from dbo.APPUSERSITEBRANCH where APPUSERSITEBRANCH.APPUSERID = @APPUSERID or @APPUSERID is null;

                if @CONTEXTCACHE is not null begin
                    set CONTEXT_INFO @CONTEXTCACHE
                end;

                /*Walk down the branch for all selected sites*/
                with
                SITE_HIERACHY_CTE as
                (
                    select 
                        SITE.NAME, 
                        SITE.ID,
                        PARENTSITE.ID as PARENTID, 
                        SITE.HIERARCHYPATH 
                    from 
                        dbo.SITE with (nolock)
                        inner join dbo.SITE  as PARENTSITE with (nolock) on PARENTSITE.HIERARCHYPATH = SITE.HIERARCHYPATH.GetAncestor(1)
                ),    
                /*Walk down the hierarchy branch of the selected branch site*/    
                BRANCH_ASSIGNED_SITES_CTE as
                (
                    select                             
                        SITE.ID as SITEID,
                        1 as NODELOCATIONCODE,
                        APPUSER.ID as APPUSERID
                    from 
                        dbo.APPUSER with (nolock) 
                        inner join dbo.SITE with (nolock) on SITE.ID = APPUSER.SITEID                            
                    where
                        (APPUSER.ID = @APPUSERID or @APPUSERID is null) and
                        APPUSER.SITEID is not null
                union all
                    select 
                        SITE_HIERACHY_CTE.ID, 
                        0 as NODELOCATIONCODE,
                        BRANCH_ASSIGNED_SITES_CTE.APPUSERID
                    from 
                        BRANCH_ASSIGNED_SITES_CTE
                        inner join SITE_HIERACHY_CTE on SITE_HIERACHY_CTE.PARENTID = BRANCH_ASSIGNED_SITES_CTE.SITEID
                ),                        
                /*Walk up the hierarchy branch of the selected branch site*/
                BRANCH_CTE as 
                (
                    select 
                        PARENTSITE.ID as SITEID,
                        2 as NODELOCATIONCODE,
                        PARENTSITE.HIERARCHYPATH.GetAncestor(1) as PARENTHIERARCHYID,
                        APPUSER.ID as APPUSERID
                    from 
                        dbo.APPUSER with (nolock)  
                        inner join dbo.SITE with (nolock)  on SITE.ID = APPUSER.SITEID 
                        left outer join dbo.SITE as PARENTSITE with (nolock)  on PARENTSITE.HIERARCHYPATH = SITE.HIERARCHYPATH.GetAncestor(1
                    where
                        (APPUSER.ID = @APPUSERID or @APPUSERID is null) and
                        APPUSER.SITEID is not null and
                        SITE.HIERARCHYPATH.GetAncestor(1) <> hierarchyid::GetRoot()
                union all
                    select 
                        SITE.ID,
                        2 as NODELOCATIONCODE,
                        SITE.HIERARCHYPATH.GetAncestor(1),
                        BRANCH_CTE.APPUSERID
                    from
                        BRANCH_CTE
                        inner join dbo.SITE with (nolock)  on SITE.HIERARCHYPATH = BRANCH_CTE.PARENTHIERARCHYID
                    where
                        BRANCH_CTE.PARENTHIERARCHYID <> hierarchyid::GetRoot()
                ) 
                insert into APPUSERSITEBRANCH(APPUSERID, SITEID, NODELOCATIONCODE)                         
                    select distinct APPUSERID, SITEID, NODELOCATIONCODE from BRANCH_ASSIGNED_SITES_CTE        
                    union
                    select distinct APPUSERID, SITEID, NODELOCATIONCODE from BRANCH_CTE;