USE [Registry_AHOBPRHRE]
GO

/****** Object:  StoredProcedure [AHOBPR].[SP_ClinicalUserAdHocReport]    Script Date: 11/29/2017 9:29:50 AM ******/
DROP PROCEDURE [AHOBPR].[SP_ClinicalUserAdHocReport]
GO

/****** Object:  StoredProcedure [AHOBPR].[SP_ClinicalUserAdHocReport]    Script Date: 11/29/2017 9:29:50 AM ******/
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
-- =============================================

CREATE 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;

  
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 THEN ''Active'' 
					WHEN D.ACTIVE_FLAG = 0 THEN ''Inactive''
					WHEN D.PENDING_FLAG = 1 THEN ''Pending'' 
					END AS Status,  W.WORK_LOCATION,audit_file.CREATED, F.STATES,audit_file.TYPE_ID 			 
			   FROM [AHOBPR].[AHOBPR_USER] D
					LEFT OUTER JOIN DBO.USERS U ON D.USER_ID = U.USER_ID
					LEFT JOIN [AHOBPR].[STD_PRIMARY_JOB] P ON D.PRIMARY_JOB_ID = P.STD_PRIMARY_JOB_ID
					LEFT 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 OUTER JOIN [AHOBPR].[USER_STATES_FILTER] F ON F.USER_ID = U.USER_ID';

SET @Query = @Query + ' JOIN (SELECT * FROM
			(SELECT ROW_NUMBER() OVER(PARTITION BY USER_ID ORDER BY created DESC) AS Seq,*
			FROM AHOBPR.AUDIT_LOG';

IF @actionTypeId <> NULL
	SET @Query = @Query + ' WHERE TYPE_ID = ''' + @actionTypeId + ''' ';

	SET @Query = @Query + ')t
		WHERE Seq=1) audit_file on audit_file.user_id = U.USER_ID ';

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

IF 	@fromDateText <> NULL and @toDateText <> NULL
	SET @Query = @Query + 'and audit_file.CREATED BETWEEN ''' + @fromDateText + ''' AND ''' + @toDateText + ''' ';
	
					
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 = 0
     SET @Query = @Query + 'AND D.ACTIVE_FLAG = 1 OR D.ACTIVE_FLAG = 0 OR D.PENDING_FLAG = 1 ';

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

IF @StatusId = 2
     SET @Query = @Query + 'AND D.ACTIVE_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


