SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO ALTER PROCEDURE dbo.ASS_PLAN_REQUEST_LIQUID_MASTER_SendApprove @p_REQ_ID VARCHAR(15) = NULL, @p_USER_LOGIN VARCHAR(150) = NULL AS BEGIN TRANSACTION DECLARE @NOTIFATION NVARCHAR(200) = N'Hồ sơ số: '+ (SELECT REQ_CODE FROM ASS_PLAN_REQUEST_LIQUID_MASTER WHERE REQ_ID = @p_REQ_ID) + N' đã được gửi phê duyệt thành công' DECLARE @PARENT_ID VARCHAR(20) = '', @IS_MED_APP VARCHAR(20) = '', @BRANCH_ID VARCHAR(20) = '', @DEP_ID VARCHAR(20) = '', @PROCESS_CHILD_CUR VARCHAR(10) --Process id trả về để store gửi mail biết đây là bước xử lý của ai khi điều phối DECLARE @ROLE_USER VARCHAR(20) SELECT @BRANCH_ID = BRANCH_ID, @DEP_ID = DEP_ID FROM ASS_PLAN_REQUEST_LIQUID_MASTER WHERE REQ_ID = @p_REQ_ID SET @PARENT_ID = (SELECT TOP 1 PROCESS_ID FROM PL_REQUEST_PROCESS WHERE STATUS = 'C' AND REQ_ID = @p_REQ_ID) IF @PARENT_ID = 'APPROVE' BEGIN ROLLBACK TRANSACTION SELECT '-1' Result, N'Gửi duyệt thất bại! Thông tin tờ trình thanh lý phiếu số: '+@p_REQ_ID+ N' đã được phê duyệt' ErrorDesc RETURN '-1' END -- XỬ LÝ CHO BƯỚC GỬI DUYỆT CẤP ĐƠN VỊ IF NOT EXISTS(SELECT TOP 1 PROCESS_ID FROM PL_REQUEST_PROCESS WHERE STATUS = 'C' AND REQ_ID = @p_REQ_ID AND PROCESS_ID = 'DVCM_DP') BEGIN IF(EXISTS(SELECT 1 FROM dbo.ASS_PLAN_REQUEST_LIQUID_MASTER WHERE REQ_ID=@p_REQ_ID AND AUTH_STATUS='R')) BEGIN ROLLBACK TRANSACTION SELECT '-1' Result, N'Gửi duyệt thất bại! Thông tin tờ trình thanh lý phiếu số: '+@p_REQ_ID+ N' đang bị từ chối. Vui lòng xử lý phiếu' ErrorDesc RETURN '-1' END IF(EXISTS(SELECT 1 FROM dbo.ASS_PLAN_REQUEST_LIQUID_MASTER WHERE REQ_ID=@p_REQ_ID AND AUTH_STATUS='A')) BEGIN ROLLBACK TRANSACTION SELECT '-1' Result, N'Gửi duyệt thất bại! Thông tin tờ trình thanh lý phiếu số: '+@p_REQ_ID+ N' đã được duyệt' ErrorDesc RETURN '-1' END IF(EXISTS(SELECT 1 FROM dbo.ASS_PLAN_REQUEST_LIQUID_MASTER WHERE REQ_ID=@p_REQ_ID AND AUTH_STATUS='U')) BEGIN ROLLBACK TRANSACTION SELECT '-1' Result, N'Gửi duyệt thất bại! Thông tin tờ trình thanh lý phiếu số: '+@p_REQ_ID+ N' đã được gửi duyệt' ErrorDesc RETURN '-1' END -- START: QUY TRINH XU LY TO TRINH INSERT INTO dbo.PL_PROCESS(REQ_ID, PROCESS_ID, CHECKER_ID, APPROVE_DT, PROCESS_DESC, NOTES) VALUES(@p_REQ_ID, 'SEND', @p_USER_LOGIN, GETDATE(), N'Người tạo gửi phê duyệt thành công', N'Nhân viên gửi phê duyệt') DELETE PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_ID AND PROCESS_ID = 'MED_APP' UPDATE PL_REQUEST_PROCESS SET STATUS = 'P', CHECKER_ID = @p_USER_LOGIN, APPROVE_DT = GETDATE() WHERE STATUS = 'C' AND REQ_ID = @p_REQ_ID IF EXISTS(SELECT 1 FROM ASS_PLAN_REQUEST_LIQUID_MASTER WHERE REQ_ID = @p_REQ_ID AND ISNULL(USER_APPROVAL,'')<>'') BEGIN SELECT @ROLE_USER = RoleName FROM TL_USER WHERE TLNANME =(SELECT USER_APPROVAL FROM ASS_PLAN_REQUEST_LIQUID_MASTER WHERE REQ_ID = @p_REQ_ID) INSERT INTO PL_REQUEST_PROCESS (REQ_ID, PROCESS_ID, STATUS, ROLE_USER, BRANCH_ID,DEP_ID, CHECKER_ID, PARENT_PROCESS_ID, IS_LEAF, COST_ID, DVDM_ID, NOTES) VALUES (@p_REQ_ID, 'MED_APP', 'C', @ROLE_USER, @BRANCH_ID,@DEP_ID, '', @PARENT_ID, 'N', '', '', N'Chờ cấp phê duyệt trung gian phê duyệt') UPDATE ASS_PLAN_REQUEST_LIQUID_MASTER SET AUTH_STATUS = 'W' WHERE REQ_ID = @p_REQ_ID; IF @@ERROR <> 0 GOTO ABORT END ELSE BEGIN SET @ROLE_USER = IIF(EXISTS(SELECT 1 FROM CM_BRANCH WHERE BRANCH_ID = @BRANCH_ID AND BRANCH_TYPE = 'PDG'),'TPGD','GDDV') INSERT INTO PL_REQUEST_PROCESS (REQ_ID, PROCESS_ID, STATUS, ROLE_USER, BRANCH_ID, DEP_ID, PARENT_PROCESS_ID, IS_LEAF, COST_ID, DVDM_ID, NOTES) VALUES (@p_REQ_ID, 'HC_APP', 'C', @ROLE_USER, @BRANCH_ID, @DEP_ID, @PARENT_ID, 'N', '', '', N'Chờ trưởng đơn vị phê duyệt') UPDATE ASS_PLAN_REQUEST_LIQUID_MASTER SET AUTH_STATUS = 'U' WHERE REQ_ID = @p_REQ_ID; IF @@ERROR <> 0 GOTO ABORT END -- END: QUY TRINH XU LY TO TRINH END ELSE -- XỬ LÝ CHO BƯỚC GỬI DUYỆT CẤP ĐIỀU PHỐI BEGIN IF NOT EXISTS(SELECT TOP 1 PROCESS_ID FROM PL_REQUEST_PROCESS_CHILD WHERE STATUS_JOB = 'C' AND REQ_ID = @p_REQ_ID AND TLNAME = @p_USER_LOGIN) BEGIN ROLLBACK TRANSACTION SELECT '-1' Result, N'Thao tác thất bại! Bạn không có quyền thao tác phiếu ở bước này' ErrorDesc RETURN '-1' END DECLARE @PROCESS_CHILD_CUR_LEVEL INT SELECT TOP 1 @PROCESS_CHILD_CUR = PROCESS_ID, @PROCESS_CHILD_CUR_LEVEL = LEVEL_JOB FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID = @p_REQ_ID AND TLNAME = @p_USER_LOGIN AND STATUS_JOB = 'C' DECLARE @PROCESS_CHILD_PAR INT, @PROCESS_CHILD_PAR_LEVEL INT SELECT TOP 1 @PROCESS_CHILD_PAR = ID, @PROCESS_CHILD_PAR_LEVEL = LEVEL_JOB FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID = @p_REQ_ID AND PROCESS_ID = @PROCESS_CHILD_CUR AND LEVEL_JOB = @PROCESS_CHILD_CUR_LEVEL-1 -- KIỂM TRA ĐÚNG PHẦN XỬ LÝ THÌ CHO PHÉP GỬI DUYỆT DECLARE @PROCESS_DVDM VARCHAR(20) SELECT TOP 1 @PROCESS_DVDM = DVDM_ID FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_ID AND ID = @PROCESS_CHILD_CUR IF NOT EXISTS(SELECT 1 FROM ASS_PLAN_REQUEST_LIQUID_DVCM WHERE REQ_ID = @p_REQ_ID AND DVCM_ID = @PROCESS_DVDM AND ISNULL(CONTENT, '') <> '') BEGIN ROLLBACK TRANSACTION SELECT '-1' Result, N'Gửi duyệt thất bại! Thông tin tờ trình thanh lý phiếu số: '+@p_REQ_ID+ N' chưa nhập nội dung tham vấn đơn vị chuyên môn' ErrorDesc RETURN '-1' END IF ISNULL(@PROCESS_CHILD_CUR,'') = '' OR @PROCESS_CHILD_CUR = 'APPROVE' BEGIN ROLLBACK TRANSACTION SELECT '-1' Result, N'Gửi duyệt thất bại! Thông tin tờ trình thanh lý phiếu số: '+@p_REQ_ID+ N' chưa đến bước xử lý hoặc đã được gửi duyệt' ErrorDesc RETURN '-1' END INSERT INTO dbo.PL_PROCESS(REQ_ID, PROCESS_ID, CHECKER_ID, APPROVE_DT, PROCESS_DESC, NOTES) VALUES(@p_REQ_ID, 'DVCM_SEND', @p_USER_LOGIN, GETDATE(), N'Nhân viên DVCM gửi phê duyệt thành công', N'Nhân viên gửi phê duyệt') UPDATE PL_REQUEST_PROCESS_CHILD SET STATUS_JOB = 'P' WHERE STATUS_JOB = 'C' AND REQ_ID = @p_REQ_ID AND PROCESS_ID = @PROCESS_CHILD_CUR AND LEVEL_JOB = @PROCESS_CHILD_CUR_LEVEL UPDATE PL_REQUEST_PROCESS_CHILD SET STATUS_JOB = 'C' WHERE STATUS_JOB = 'U' AND REQ_ID = @p_REQ_ID AND PROCESS_ID = @PROCESS_CHILD_CUR AND LEVEL_JOB = @PROCESS_CHILD_PAR_LEVEL AND ID = @PROCESS_CHILD_PAR END IF @@ERROR <> 0 GOTO ABORT COMMIT TRANSACTION SELECT '0' as Result, ISNULL(@PROCESS_CHILD_CUR, '0') ProcessId, @NOTIFATION ErrorDesc RETURN '0' ABORT: BEGIN ROLLBACK TRANSACTION SELECT '-1' as Result, '' REQ_ID, '' ErrorDesc RETURN '-1' END --17062025_SECRETKEY