ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Confirm]
@p_REQ_PAY_ID	varchar(15)= NULL,
@p_CHECKER_ID	varchar(15)	= NULL,
@p_NOTES NVARCHAR(MAX) = NULL
AS
-- BEGIN VALIDATION 
	-- KIEM TRA NEU PHIEU DA XAC NHAN ROI THI KHONG CHO PHÉP XAC NHAN LAN THU  2
	IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID=@p_REQ_PAY_ID AND PROCESS = '' AND @p_CHECKER_ID = TRASFER_USER_RECIVE))
	BEGIN
		SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,N'Phiếu đề nghị tạm ứng đã được cấp phê duyệt trung gian xác nhận trước đó' ErrorDesc
		RETURN '-1'
	END
-- END VALIDATION

BEGIN TRANSACTION
	DECLARE @ROLE_SIGN VARCHAR(50), @REQ_TYPE VARCHAR(15), @BRANCH_CREATE_TYPE VARCHAR(15)
	SET @BRANCH_CREATE_TYPE = (SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID = (SELECT TOP 1 BRANCH_CREATE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID=@p_REQ_PAY_ID))
	--SET @ROLE_SIGN =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_CHECKER_ID)

  SET @ROLE_SIGN = (SELECT STRING_AGG(CONVERT(NVARCHAR (MAX), C.DisplayName), ',')
                  	FROM TL_USER A
                  	LEFT JOIN AbpUserRoles B ON A.ID = B.UserId
                  	LEFT JOIN AbpRoles C ON B.RoleId = C.Id
                  	WHERE A.TLNANME = @p_CHECKER_ID) + ','

	-- KHAI BAO THEM ROLE NHAN UY QUYEN  
	DECLARE @TABLE_ROLE TABLE (ROLE_AUTH VARCHAR(50))  
	DECLARE @MENU_PERMISSON NVARCHAR(500) = 'Pages.Administration.ReqTempPayment'

	INSERT INTO @TABLE_ROLE SELECT RoleDisplayName FROM SYS_PERMISSIONS_PAGE_FOR_USER A WHERE A.TLNAME = @p_CHECKER_ID  
	AND (DATEDIFF(DAY, CONVERT(DATE, A.EffectiveDate, 103) , CONVERT(DATE, GETDATE(), 103)) >= 0 OR A.EffectiveDate IS NULL OR A.EffectiveDate = '')
	AND (DATEDIFF(DAY, CONVERT(DATE, A.ExpirationDate, 103) , CONVERT(DATE, GETDATE(), 103)) <= 0 OR A.ExpirationDate IS NULL OR A.ExpirationDate = '')
	AND A.AUTH_STATUS = 'A' AND A.RECORD_STATUS = '1'
	AND EXISTS(SELECT DT.PER_PAGE_FOR_USER_DT_ID FROM SYS_PERMISSIONS_PAGE_FOR_USER_DT DT WHERE DT.PER_PAGE_FOR_USER_ID = A.PER_PAGE_FOR_USER_ID AND DT.MENU_PERMISSION = @MENU_PERMISSON)

  DECLARE @ROLE_ID_TL_USER_V2 VARCHAR(50)
	IF(@ROLE_SIGN IS NOT NULL AND @ROLE_SIGN <>'' AND EXISTS(SELECT TOP 1 A.ROLE_NAME FROM TMP_ROLE_PAYMENT_SEARCH A WHERE CHARINDEX(A.ROLE_NAME + ',', @ROLE_SIGN) > 0))
	BEGIN
		PRINT @ROLE_SIGN
	END
	ELSE
	BEGIN
    SET @ROLE_ID_TL_USER_V2 = (SELECT TOP 1 RoleName FROM TL_USER_V2 WHERE TLNANME = @p_CHECKER_ID)
		SET @ROLE_SIGN = @ROLE_SIGN + @ROLE_ID_TL_USER_V2 + ','
	END
	SET @REQ_TYPE =(SELECT REQ_TYPE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
	IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID=@p_REQ_PAY_ID AND AUTH_STATUS ='R'))
	BEGIN
		ROLLBACK TRANSACTION
		SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,N'Bạn không được phép xác nhận hoặc phê duyệt giao dịch này. Phiếu đề nghị tạm ứng số: '+(SELECT REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)+ N' đang được trả về. Vui lòng đợi nhân viên cập nhật thông tin và gửi phê duyệt lại' ErrorDesc
		RETURN '-1'
	END
-- NEU LA TAM UNG NOI BO
	IF(@REQ_TYPE ='I')
	BEGIN
		PRINT '0'
		DECLARE @USER_SIGN VARCHAR(15)
		SET @USER_SIGN =(SELECT ISNULL(TRASFER_USER_RECIVE,'') FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
	-- NEU LA O HOI SO
		IF(@BRANCH_CREATE_TYPE ='HS' AND EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND TRASFER_USER_RECIVE IS NOT NULL AND TRASFER_USER_RECIVE <> ''))
		BEGIN
			IF(@p_CHECKER_ID <>  @USER_SIGN AND (SELECT TOP 1 PROCESS_ID FROM PL_PROCESS WHERE REQ_ID =@p_REQ_PAY_ID ORDER BY ID DESC ) = 'SEND')
			BEGIN
				ROLLBACK TRANSACTION		
				SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,N'Phiếu đề nghị tạm ứng đang chờ cấp phê duyệt trung gian xác nhận. User domain: '+ISNULL(@USER_SIGN,'') ErrorDesc
				RETURN '-1'
			END
			-- doanptt 19/04/2022 nếu người duyệt là trưởng phòng hành chính thì phải duyệt có hạn mức
			IF(@p_CHECKER_ID <>  @USER_SIGN 
				AND CHARINDEX('GDDV,', @ROLE_SIGN) > 0
				AND  (SELECT B.DEP_CODE FROM TL_USER A LEFT JOIN CM_DEPARTMENT B ON A.DEP_ID = B.DEP_ID WHERE TLNANME =@p_CHECKER_ID) ='0690604' -- mã phòng hành chính
				AND (SELECT TOP 1 PROCESS_ID FROM PL_PROCESS WHERE REQ_ID =@p_REQ_PAY_ID ORDER BY ID DESC ) = '0')
			BEGIN
				ROLLBACK TRANSACTION		
				SELECT '3' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,ISNULL(@USER_SIGN,'') ErrorDesc
				RETURN '3'
			END
			--IF(EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND ISNULL(NOTES,'') <> ''))
			--BEGIN
			--	ROLLBACK TRANSACTION
			--	SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,N'Phiếu đề nghị tạm ứng đã được bạn xác nhận trước đó. Vui lòng đợi các cấp duyệt tiếp theo' ErrorDesc
			--	RETURN '-1'
			--END
		END
		IF(EXISTS(SELECT TOP 1 A.ROLE_NAME FROM TMP_ROLE_PAYMENT_SEARCH A WHERE A.ROLE_NAME IN ('GDDV','PP','KTT','TC','TPTC') AND CHARINDEX(A.ROLE_NAME + ',', @ROLE_SIGN) > 0)
				OR (	EXISTS	(SELECT * FROM @TABLE_ROLE WHERE ROLE_AUTH IN ('GDDV','PP','KTT','TC','TPTC'))  
						AND NOT EXISTS	(	SELECT * FROM TR_REQ_ADVANCE_PAYMENT 
											WHERE REQ_PAY_ID =@p_REQ_PAY_ID 
											AND TRASFER_USER_RECIVE =@p_CHECKER_ID
										)
					)
			)
		BEGIN
			--- LUCTV 11072023_SECRETKEY: RIÊNG CÁC TĐV P.HÀNH CHÍNH NẾU ĐƯỢC CHỌN LÀM CẤP DUYỆT TRUNG GIAN THÌ XÉT DUYỆT TRUNG GIAN, KHÔNG ĐƯỢC XÁC NHẬN TĐV
			IF(@p_CHECKER_ID =  @USER_SIGN 
				AND  (SELECT B.DEP_CODE FROM TL_USER A LEFT JOIN CM_DEPARTMENT B ON A.DEP_ID = B.DEP_ID WHERE TLNANME =@p_CHECKER_ID) ='0690604')-- mã phòng hành chính
				BEGIN
					UPDATE TR_REQ_ADVANCE_PAYMENT SET PROCESS='',NOTES =N'SIGN' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
					INSERT INTO PL_PROCESS VALUES (@p_REQ_PAY_ID,'0',@p_CHECKER_ID, GETDATE(),@p_NOTES ,N'Cấp phê duyệt trung gian xác nhận phiếu tạm ứng',NULL)
				END
				ELSE
				BEGIN
					UPDATE TR_REQ_ADVANCE_PAYMENT SET PROCESS='0',NOTES =N'SIGN' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
					INSERT INTO PL_PROCESS VALUES (@p_REQ_PAY_ID,'0',@p_CHECKER_ID, GETDATE(),@p_NOTES,N'Trưởng đơn vị xác nhận phiếu tạm ứng',NULL)
				END
			
		END
		ELSE
		BEGIN
			IF((SELECT BRANCH_CREATE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID) ='DV0001')
			BEGIN
				UPDATE TR_REQ_ADVANCE_PAYMENT SET PROCESS='',NOTES =N'SIGN' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
				INSERT INTO PL_PROCESS VALUES (@p_REQ_PAY_ID,'0',@p_CHECKER_ID, GETDATE(),@p_NOTES,N'Cấp phê duyệt trung gian xác nhận phiếu tạm ứng',NULL)
			END
			ELSE
			BEGIN
				UPDATE TR_REQ_ADVANCE_PAYMENT SET PROCESS='',NOTES =N'SIGN' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
				INSERT INTO PL_PROCESS VALUES (@p_REQ_PAY_ID,'0',@p_CHECKER_ID, GETDATE(),@p_NOTES,N'Cấp phê duyệt trung gian xác nhận phiếu tạm ứng',NULL)
			END
		END
		-- NẾU NGƯỜI DUYỆT TRÙNG VỚI CẤP PHÊ DUYỆT TRUNG GIAN THÌ KHÔNG CẦN UPDATE PROCESS_ID
		--UPDATE TR_REQ_ADVANCE_PAYMENT SET PROCESS='', NOTES =N'SIGN' WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND TRASFER_USER_RECIVE =@p_CHECKER_ID AND @REQ_TYPE ='I' AND @BRANCH_CREATE_TYPE ='HS'
	END
-- NEU LA CAC TAM UNG CON LAI
	ELSE
	BEGIN
		UPDATE TR_REQ_ADVANCE_PAYMENT SET PROCESS='',NOTES =N'SIGN' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
		INSERT INTO PL_PROCESS VALUES (@p_REQ_PAY_ID,'0',@p_CHECKER_ID, GETDATE(),@p_NOTES,N'Cấp phê duyệt trung gian xác nhận phiếu tạm ứng',NULL)
	END
	
COMMIT TRANSACTION
		IF(@p_CHECKER_ID =(SELECT ISNULL(TRASFER_USER_RECIVE,'') FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
		BEGIN
			SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,N'Phiếu đề nghị tạm ứng số: '+(SELECT REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)+N' đã được cấp phê duyệt trung gian xác nhận thành công! Vui lòng đợi trưởng đơn vị phê duyệt phiếu' ErrorDesc
			RETURN '0'
		END
		ELSE
		BEGIN
			UPDATE TR_REQ_ADVANCE_PAYMENT SET NOTES =N'' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
			SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,N'Phiếu đề nghị tạm ứng số: '+(SELECT REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)+N' đã được xác nhận thành công! Vui lòng đợi các cấp phê duyệt tiếp theo' ErrorDesc
			RETURN '0'
		END
ABORT:
BEGIN
		ROLLBACK TRANSACTION
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
		RETURN '-1'
END