USE [Registry_AHOBPRHRE]
GO

/****** Object:  StoredProcedure [AHOBPR].[SP_ClinicalUserAdHocReport]    Script Date: 12/12/2017 12:07:47 PM ******/
SET ANSI_NULLS OFF
GO

SET QUOTED_IDENTIFIER OFF
GO

-- =============================================
-- Author:		Padmashri N. Valaparla
-- Create date: November 27, 2017
-- Description:	Used for the AHOBPR Clinical User Ad-Hoc Report
-- =============================================

ALTER PROCEDURE [AHOBPR].[SP_ClinicalUserAdHocReport]
  @actionTypeId varchar(30) = NULL, -- Action Type ID
  @fromDateText varchar(100) = NULL,
  @toDateText varchar(100) = NULL,
  @userRoleId varchar(30) = NULL, -- User role ID
  @StatusId varchar(30) = NULL, -- User Status ID
  @PrimaryJob varchar(8000) = NULL, -- Multiple Primary Job, comma-separated values when not NULL
  @WorkLocation varchar(8000) = NULL, -- Multiple Work Location, comma-separated values when not NULL  
  @SecondaryJob varchar(8000) = NULL, -- Multiple Secondary Job, comma-separated values when not NULL
  @ChangeStatusState  varchar(100) = NULL, -- Multiple states, comma-separated values when not NULL 
  @JobTitle varchar(80) = NULL -- Job Title 
AS

BEGIN
 DECLARE @fromDate DATETIME2(0) = NULL,
          @toDate DATETIME2(0) = NULL,
		  @Query VARCHAR(8000),
		  @State varchar(30) = NULL;

--Temp table for holding the AUDIT_LOG 
  CREATE TABLE #AUDIT_LOG
  ( 	
	  [TYPE_ID]               [tinyint]       NOT NULL,
	  [USER_ID]               [int]           NULL,
	  [REGISTRANT_ID]         [int]           NULL,
	  [NUMBER_OF_REGISTRANTS] [int]           NULL,
	  [MESSAGE]               [varchar](1000) NULL,
	  [CREATED]               [datetime]      NOT NULL
	 );

  INSERT INTO #AUDIT_LOG
    SELECT [TYPE_ID], [USER_ID],[REGISTRANT_ID],[NUMBER_OF_REGISTRANTS],[MESSAGE],[CREATED] 
	  FROM AHOBPR.AUDIT_LOG
	  WHERE USER_ID IS NOT NULL;

  -- Convert date parameters      
  SET @fromDate = dbo.CleanDate(@fromDateText);
  SET @toDate = dbo.AddMaxTime(dbo.CleanDate(@toDateText));

 IF @fromDate IS NOT NULL 
	  DELETE FROM #AUDIT_LOG WHERE CREATED < @fromDate

 IF @toDate IS NOT NULL 
	  DELETE FROM #AUDIT_LOG WHERE CREATED > @toDate
  
 IF @actionTypeId IS NOT NULL AND @actionTypeId != ''
	  DELETE FROM #AUDIT_LOG WHERE TYPE_ID <> @actionTypeId

IF @userRoleId IS NOT NULL AND @userRoleId != ''
	  DELETE FROM #AUDIT_LOG 
	    WHERE USER_ID NOT IN (SELECT A.USER_ID FROM DBO.USER_ROLES A,  #AUDIT_LOG B 
													  WHERE A.STD_ROLE_ID = @userRoleId AND A.USER_ID = B.USER_ID);

  
SET @Query = 'SELECT U.LAST_NAME, U.FIRST_NAME, AHOBPR.GetUserRolesByID(U.USER_ID) AS ROLES,P.PRIMARY_JOB, U.JOB_TITLE,
				CASE WHEN (D.ACTIVE_FLAG = 1 AND D.PENDING_FLAG = 0) THEN ''Active'' 
					WHEN (D.ACTIVE_FLAG = 0 AND D.PENDING_FLAG = 0) THEN ''Inactive''
					WHEN D.PENDING_FLAG = 1 THEN ''Pending'' 
					END AS Status,  W.WORK_LOCATION,F.STATES	 
			   FROM [AHOBPR].[AHOBPR_USER] D
					LEFT OUTER JOIN DBO.USERS U ON D.USER_ID = U.USER_ID
					LEFT OUTER JOIN [AHOBPR].[STD_PRIMARY_JOB] P ON D.PRIMARY_JOB_ID = P.STD_PRIMARY_JOB_ID
					LEFT OUTER JOIN [AHOBPR].[STD_WORK_LOCATION] W ON D.WORK_LOCATION_ID = W.STD_WORK_LOCATION_ID ';

IF @ChangeStatusState <> NULL
	BEGIN
		Select @State = AHOBPR.GetStateCodeByID (@ChangeStatusState);
		SET @Query = @Query + ' JOIN [AHOBPR].[USER_STATES_FILTER] F ON F.USER_ID = U.USER_ID';
		SET @Query = @Query + ' AND STATES LIKE (''%' + @State + '%'') ';
	END
ELSE
	SET @Query = @Query + ' LEFT JOIN [AHOBPR].[USER_STATES_FILTER] F ON F.USER_ID = U.USER_ID';


IF @actionTypeId <> NULL OR (@fromDateText <> NULL and @toDateText <> NULL)
	BEGIN
		SET @Query = @Query + ' JOIN (select distinct USER_ID from #AUDIT_LOG ';
		SET @Query = @Query + ' ) L on L.USER_ID = U.USER_ID ';
	END

SET @Query = @Query + ' WHERE 1 = 1 ';

				
IF @userRoleId <> NULL
	IF @userRoleId = 100  
		SET @Query = @Query + 'AND AHOBPR.GetUserRolesByID(U.USER_ID) like (''%Registry%'') ';
	IF @userRoleId = 101
		SET @Query = @Query + 'AND AHOBPR.GetUserRolesByID(U.USER_ID) like (''%Advanced%'') ';
	IF @userRoleId = 102
		SET @Query = @Query + 'AND AHOBPR.GetUserRolesByID(U.USER_ID) like (''%Care Team%'') ';
	IF @userRoleId = 417
		SET @Query = @Query + 'AND AHOBPR.GetUserRolesByID(U.USER_ID) like (''%Help Desk%'') ';


IF @StatusId = 1
     SET @Query = @Query + 'AND D.ACTIVE_FLAG = 1 AND D.PENDING_FLAG = 0';

IF @StatusId = 2
     SET @Query = @Query + 'AND D.ACTIVE_FLAG = 0 AND D.PENDING_FLAG = 0';

IF @StatusId = 3
     SET @Query = @Query + 'AND D.PENDING_FLAG = 1 ';


IF ISNULL(@PrimaryJob,'') > ''
    BEGIN
      SET @PrimaryJob = REPLACE(@PrimaryJob,',',''',''');
      SET @Query = @Query + ' AND PRIMARY_JOB_ID IN ( ''' + @PrimaryJob + ''') ';
		      		
	END

IF ISNULL(@SecondaryJob,'') > ''
    BEGIN
      SET @SecondaryJob = REPLACE(@SecondaryJob,',',''',''');
      SET @Query = @Query + ' AND SECONDARY_JOB_ID IN ( ''' + @SecondaryJob + ''') ';
		      		
	END

IF ISNULL(@WorkLocation,'') > ''
    BEGIN
      SET @WorkLocation = REPLACE(@WorkLocation,',',''',''');
      SET @Query = @Query + ' AND WORK_LOCATION_ID IN ( ''' + @WorkLocation + ''') ';
		      		
	END 		

IF @JobTitle <> NULL
	SET @Query = @Query + 'AND JOB_TITLE like (''%' + @JobTitle + '%'') ';


PRINT  @Query;
  
EXECUTE (@Query);  
	
END






GO


