ALTER PROCEDURE dbo.ASS_PLAN_REQUEST_LIQUID_MASTER_App @p_REQ_ID VARCHAR(15) = NULL, @p_CHECKER_ID VARCHAR(150) = NULL AS BEGIN TRANSACTION DECLARE @MENU_PERMISSION NVARCHAR(500) = 'Pages.Administration.AssReqDocLiquidation', --permission của chức năng call store @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 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'Phê 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'Phê 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='E')) BEGIN ROLLBACK TRANSACTION SELECT '-1' Result, N'Phê duyệt thất bại! Thông tin tờ trình thanh lý phiếu số: '+@p_REQ_ID+ N' chưa được gửi duyệt. Vui lòng xử lý phiếu' ErrorDesc RETURN '-1' END DECLARE @NOTIFATION NVARCHAR(500) = NULL SET @NOTIFATION = N'Hồ sơ số: '+@p_REQ_ID+ N' đã được phê duyệt thành công' -- -- UPDATE ASS_PLAN_REQUEST_LIQUID_MASTER SET AUTH_STATUS = 'A', CHECKER_ID = @p_CHECKER_ID, APPROVE_DT = GETDATE() WHERE REQ_ID = @p_REQ_ID; IF @@ERROR <> 0 GOTO ABORT -- START: QUY TRINH XU LY TO TRINH DECLARE @CUR_PROCESS_ID VARCHAR(20) = '', @IS_MED_APP VARCHAR(20) = '', @BRANCH_ID VARCHAR(20) = '', @DEP_ID VARCHAR(20) = '', @ROLE_PROCESS VARCHAR(20) = '' ,@TOTAL_LIQUID_AMT DECIMAL(18,2) = 0,@RANGE_PLAN_LIQUID DECIMAL(18,2) = 0, @GDK_PLAN_LIQUID DECIMAL(18,2) = 0, @TGD_PLAN_LIQUID DECIMAL(18,2) = 0 , @PROCESS_DESC NVARCHAR(MAX) = '', @PROCESS_NOTES NVARCHAR(MAX) = '' DECLARE @ROLE_LOGIN TABLE (ROLE VARCHAR(50),BRANCH_ID VARCHAR(50),DEP_ID VARCHAR(50)) SET @RANGE_PLAN_LIQUID = (SELECT ISNULL(CAST(SP.ParaValue AS DECIMAL(18,2)),0) FROM SYS_PARAMETERS SP WHERE SP.ParaKey = 'RANGE_PLAN_LIQUID') SET @GDK_PLAN_LIQUID = (SELECT ISNULL(CAST(SP.ParaValue AS DECIMAL(18,2)),0) FROM SYS_PARAMETERS SP WHERE SP.ParaKey = 'GDK_PLAN_LIQUID') SET @TGD_PLAN_LIQUID = (SELECT ISNULL(CAST(SP.ParaValue AS DECIMAL(18,2)),0) FROM SYS_PARAMETERS SP WHERE SP.ParaKey = 'TGD_PLAN_LIQUID') SELECT @BRANCH_ID = BRANCH_ID, @DEP_ID = DEP_ID FROM ASS_PLAN_REQUEST_LIQUID_MASTER WHERE REQ_ID = @p_REQ_ID SELECT @TOTAL_LIQUID_AMT = ISNULL(CAST(SUM(A.REMAIN_AMT) AS DECIMAL(18, 2)),0) FROM ASS_PLAN_REQUEST_LIQUID_DT A WHERE A.REQ_ID = @p_REQ_ID SELECT TOP 1 @CUR_PROCESS_ID = PROCESS_ID, @ROLE_PROCESS = ROLE_USER FROM PL_REQUEST_PROCESS WHERE STATUS = 'C' AND REQ_ID = @p_REQ_ID IF(@CUR_PROCESS_ID IN ('GDK_APP','TKTGD_APP','TGD_APP','TKHDQT_APP','HDQT_APP'))-- MÀN HÌNH CHỨC NĂNG PHÊ DUYỆT TỜ TRÌNH THANH LÝ TÀI SẢN BEGIN SET @MENU_PERMISSION = 'Pages.Administration.AssReqDocLiqApprove' END INSERT INTO @ROLE_LOGIN SELECT ROLE_ID, BRANCH_ID, DEPT_ID FROM dbo.TL_USER_GET_ROLES(@p_CHECKER_ID, @MENU_PERMISSION) IF (NOT EXISTS(SELECT 1 FROM dbo.TL_USER_GET_ROLES(@p_CHECKER_ID, @MENU_PERMISSION) TR WHERE TR.ROLE_ID = @ROLE_PROCESS OR (@CUR_PROCESS_ID = 'MED_APP' AND TR.ROLE_ID IN('TBP','KSV')) OR (@CUR_PROCESS_ID = 'DVCM_DP' AND TR.ROLE_ID IN ('TBP', 'KSV')))) BEGIN ROLLBACK TRANSACTION SELECT '-1' Result, N'Phê duyệt thất bại! Bạn không có quyền thao tác phiếu ở bước này' ErrorDesc RETURN '-1' END IF @CUR_PROCESS_ID = 'APPROVE' BEGIN ROLLBACK TRANSACTION SELECT '-1' Result, N'Phê duyệt thất bại! Phiếu thanh lý đã hoàn thành phê duyệt' ErrorDesc RETURN '-1' END IF @CUR_PROCESS_ID = 'MED_APP' -- PHÊ DUYỆT TRUNG GIAN BEGIN UPDATE ASS_PLAN_REQUEST_LIQUID_MASTER SET AUTH_STATUS = 'U' WHERE REQ_ID = @p_REQ_ID -- UPDATE LẠI TRẠNG THÁI PHIẾU THÀNH CHỜ DUYỆT UPDATE PL_REQUEST_PROCESS SET STATUS = 'P', CHECKER_ID = @p_CHECKER_ID, APPROVE_DT = GETDATE() WHERE STATUS = 'C' AND REQ_ID = @p_REQ_ID SET @PROCESS_DESC = N'Cấp phê duyệt trung gian phê duyệt tờ trình thanh lý' 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', 'GDDV', @BRANCH_ID, @DEP_ID, @CUR_PROCESS_ID, 'N', '', '', N'Chờ trưởng đơn vị phê duyệt') END ELSE IF @CUR_PROCESS_ID = 'HC_APP' BEGIN UPDATE PL_REQUEST_PROCESS SET STATUS = 'P', CHECKER_ID = @p_CHECKER_ID, APPROVE_DT = GETDATE() WHERE STATUS = 'C' AND REQ_ID = @p_REQ_ID UPDATE ASS_PLAN_REQUEST_LIQUID_MASTER SET CHECKER_ID = @p_CHECKER_ID, APPROVE_DT = GETDATE() WHERE REQ_ID = @p_REQ_ID; IF @@ERROR <> 0 GOTO ABORT SET @PROCESS_DESC = N'Trưởng đơn vị phê duyệt tờ trình thanh lý' IF @TOTAL_LIQUID_AMT <= @RANGE_PLAN_LIQUID -- CHECK TỔNG TIỀN THANH LÝ PHÂN QUY TRÌNH TIẾP THEO BEGIN UPDATE ASS_PLAN_REQUEST_LIQUID_MASTER SET AUTH_STATUS = 'A', CHECKER_ID = @p_CHECKER_ID, APPROVE_DT = GETDATE() WHERE REQ_ID = @p_REQ_ID; IF @@ERROR <> 0 GOTO ABORT INSERT INTO PL_REQUEST_PROCESS (REQ_ID, PROCESS_ID, STATUS, ROLE_USER, BRANCH_ID, CHECKER_ID, PARENT_PROCESS_ID, IS_LEAF, COST_ID, DVDM_ID, NOTES, APPROVE_DT) VALUES (@p_REQ_ID, 'APPROVE', 'C', '', '', '', @CUR_PROCESS_ID, 'Y', '', '', N'Hoàn thành phê duyệt phiếu Tờ trình thanh lý', GETDATE()) END ELSE BEGIN IF EXISTS(SELECT 1 FROM ASS_PLAN_REQUEST_LIQUID_DVCM WHERE REQ_ID = @p_REQ_ID) BEGIN INSERT INTO PL_REQUEST_PROCESS (REQ_ID, PROCESS_ID, STATUS, ROLE_USER, PARENT_PROCESS_ID, IS_LEAF, COST_ID, DVDM_ID, NOTES, IS_HAS_CHILD) SELECT @p_REQ_ID, 'DVCM_DP', 'C', 'GDDV', @CUR_PROCESS_ID, 'N', '', A.DVCM_ID, N'Chờ Trưởng DVCM điều phối nhân viên xử lý phiếu', 1 FROM ASS_PLAN_REQUEST_LIQUID_DVCM A INNER JOIN CM_DVDM B ON A.DVCM_ID = B.DVDM_ID WHERE A.REQ_ID = @p_REQ_ID END ELSE BEGIN INSERT INTO PL_REQUEST_PROCESS (REQ_ID, PROCESS_ID, STATUS, ROLE_USER, BRANCH_ID, CHECKER_ID, PARENT_PROCESS_ID, IS_LEAF, COST_ID, DVDM_ID, NOTES) VALUES (@p_REQ_ID, 'GDK_APP', 'C', 'GDK', '', '', @CUR_PROCESS_ID, 'N', '', '', N'Chờ Giám Đốc Khối phê duyệt phiếu') END END END ELSE IF @CUR_PROCESS_ID = 'DVCM_DP' BEGIN SET @PROCESS_DESC = N'Trưởng đơn vị DVCM phê duyệt tờ trình thanh lý' IF EXISTS(SELECT 1 FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID = @p_REQ_ID AND STATUS_JOB = 'C' AND TLNAME = @p_CHECKER_ID) BEGIN DECLARE @PROCESS_CHILD_CUR_LEVEL INT , @TYPE_CHILD_CUR VARCHAR(20) SELECT TOP 1 @PROCESS_CHILD_CUR = PROCESS_ID, @PROCESS_CHILD_CUR_LEVEL = LEVEL_JOB, @TYPE_CHILD_CUR = TYPE_JOB FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID = @p_REQ_ID AND TLNAME = @p_CHECKER_ID AND STATUS_JOB = 'C' IF @TYPE_CHILD_CUR = 'KS' SET @PROCESS_DESC = N'Kiểm soát viên điều phối phê duyệt tờ trình thanh lý' 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 UPDATE ASS_PLAN_REQUEST_LIQUID_DVCM SET STATUS = 'P' WHERE REQ_ID = @p_REQ_ID AND DVCM_ID = @PROCESS_DVDM-- CẬP NHẬT TRẠNG THÁI DVCM ĐÃ XÁC NHẬN 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 UPDATE ASS_PLAN_REQUEST_LIQUID_DVCM SET STATUS = 'P' WHERE REQ_ID = @p_REQ_ID AND DVCM_ID = @PROCESS_DVDM 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 IF(@TYPE_CHILD_CUR = 'KS') BEGIN UPDATE PL_REQUEST_PROCESS_CHILD SET STATUS_JOB = 'C' WHERE REQ_ID = @p_REQ_ID AND PROCESS_ID = @PROCESS_CHILD_CUR AND LEVEL_JOB = @PROCESS_CHILD_CUR_LEVEL-1 END ELSE -- UPDATE LẠI CÁC XỬ LÝ BƯỚC CHA CHO CÁC DVDM KHÁC UPDATE PL_REQUEST_PROCESS SET STATUS = 'P', CHECKER_ID = @p_CHECKER_ID, APPROVE_DT = GETDATE() WHERE STATUS = 'C' AND REQ_ID = @p_REQ_ID AND PROCESS_ID = @CUR_PROCESS_ID AND DVDM_ID = @PROCESS_DVDM END ELSE BEGIN ROLLBACK TRANSACTION SELECT '-1' Result, N'Phê 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 duyệt' ErrorDesc RETURN '-1' END -- CHECK XỬ LÝ PHÊ DUYỆT CỦA CÁC DVCM KHÁC, NẾU TẤT CẢ ĐÃ XONG => TIẾN HÀNH APPROVE IF NOT EXISTS(SELECT 1 FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID = @p_REQ_ID AND STATUS_JOB = 'C') AND EXISTS(SELECT 1 FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID = @p_REQ_ID) AND NOT EXISTS(SELECT 1 FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_ID AND PROCESS_ID = @CUR_PROCESS_ID AND STATUS = 'C') BEGIN IF @TOTAL_LIQUID_AMT <= @GDK_PLAN_LIQUID BEGIN UPDATE ASS_PLAN_REQUEST_LIQUID_MASTER SET AUTH_STATUS = 'A', CHECKER_ID = @p_CHECKER_ID, APPROVE_DT = GETDATE() WHERE REQ_ID = @p_REQ_ID; IF @@ERROR <> 0 GOTO ABORT INSERT INTO PL_REQUEST_PROCESS (REQ_ID, PROCESS_ID, STATUS, ROLE_USER, BRANCH_ID, CHECKER_ID, PARENT_PROCESS_ID, IS_LEAF, COST_ID, DVDM_ID, NOTES, APPROVE_DT) VALUES (@p_REQ_ID, 'APPROVE', 'C', '', '', '', @CUR_PROCESS_ID, 'Y', '', '', N'Hoàn thành phê duyệt phiếu Tờ trình thanh lý', GETDATE()) END ELSE BEGIN INSERT INTO PL_REQUEST_PROCESS (REQ_ID, PROCESS_ID, STATUS, ROLE_USER, BRANCH_ID, CHECKER_ID, PARENT_PROCESS_ID, IS_LEAF, COST_ID, DVDM_ID, NOTES) SELECT @p_REQ_ID, 'GDK_APP', 'C', 'GDK', '', '', @CUR_PROCESS_ID, 'N', '', B.KHOI_ID, N'Chờ Giám Đốc Khối phê duyệt phiếu' FROM ASS_PLAN_REQUEST_LIQUID_DVCM A INNER JOIN CM_DVDM_KHOI B ON A.DVCM_ID = B.DVDM_ID WHERE A.REQ_ID = @p_REQ_ID END END END ELSE IF @CUR_PROCESS_ID = 'GDK_APP' BEGIN SET @MENU_PERMISSION = 'Pages.Administration.AssReqDocLiqApprove' SET @PROCESS_DESC = N'Giám đốc khối phê duyệt tờ trình thanh lý' UPDATE PL_REQUEST_PROCESS SET STATUS = 'P', CHECKER_ID = @p_CHECKER_ID, APPROVE_DT = GETDATE() WHERE STATUS = 'C' AND REQ_ID = @p_REQ_ID AND (EXISTS(SELECT KHOI_ID FROM dbo.[FN_GET_KHOI_USER_BY_ROLE_AND_TLNAME]('GDK', @p_CHECKER_ID, @MENU_PERMISSION) W WHERE W.KHOI_ID = DVDM_ID)) IF(NOT EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE STATUS = 'C' AND PROCESS_ID = 'GDK_APP' AND REQ_ID = @p_REQ_ID)) BEGIN IF @TOTAL_LIQUID_AMT <= @TGD_PLAN_LIQUID BEGIN UPDATE ASS_PLAN_REQUEST_LIQUID_MASTER SET AUTH_STATUS = 'A', CHECKER_ID = @p_CHECKER_ID, APPROVE_DT = GETDATE() WHERE REQ_ID = @p_REQ_ID; IF @@ERROR <> 0 GOTO ABORT INSERT INTO PL_REQUEST_PROCESS (REQ_ID, PROCESS_ID, STATUS, ROLE_USER, BRANCH_ID, CHECKER_ID, PARENT_PROCESS_ID, IS_LEAF, COST_ID, DVDM_ID, NOTES, APPROVE_DT) VALUES (@p_REQ_ID, 'APPROVE', 'C', '', '', '', @CUR_PROCESS_ID, 'Y', '', '', N'Hoàn thành phê duyệt phiếu Tờ trình thanh lý', GETDATE()) END ELSE BEGIN INSERT INTO PL_REQUEST_PROCESS (REQ_ID, PROCESS_ID, STATUS, ROLE_USER, BRANCH_ID, CHECKER_ID, PARENT_PROCESS_ID, IS_LEAF, COST_ID, DVDM_ID, NOTES) VALUES (@p_REQ_ID, 'TKTGD_APP', 'C', 'TKTGD', '', '', @CUR_PROCESS_ID, 'N', '', '', N'Chờ Thư ký Tổng Giám Đốc phê duyệt phiếu') END END END ELSE IF @CUR_PROCESS_ID = 'TKTGD_APP' BEGIN SET @PROCESS_DESC = N'Thư ký tổng giám đốc phê duyệt tờ trình thanh lý' UPDATE PL_REQUEST_PROCESS SET STATUS = 'P', CHECKER_ID = @p_CHECKER_ID, APPROVE_DT = GETDATE() WHERE STATUS = 'C' AND REQ_ID = @p_REQ_ID INSERT INTO PL_REQUEST_PROCESS (REQ_ID, PROCESS_ID, STATUS, ROLE_USER, BRANCH_ID, CHECKER_ID, PARENT_PROCESS_ID, IS_LEAF, COST_ID, DVDM_ID, NOTES) VALUES (@p_REQ_ID, 'TGD_APP', 'C', 'TGD', '', '', @CUR_PROCESS_ID, 'N', '', '', N'Chờ Tổng Giám Đốc phê duyệt phiếu') END ELSE IF @CUR_PROCESS_ID = 'TGD_APP' BEGIN SET @PROCESS_DESC = N'Tổng giám đốc phê duyệt tờ trình thanh lý' UPDATE PL_REQUEST_PROCESS SET STATUS = 'P', CHECKER_ID = @p_CHECKER_ID, APPROVE_DT = GETDATE() WHERE STATUS = 'C' AND REQ_ID = @p_REQ_ID INSERT INTO PL_REQUEST_PROCESS (REQ_ID, PROCESS_ID, STATUS, ROLE_USER, BRANCH_ID, CHECKER_ID, PARENT_PROCESS_ID, IS_LEAF, COST_ID, DVDM_ID, NOTES) VALUES (@p_REQ_ID, 'TKHDQT_APP', 'C', 'TKHDQT', '', '', @CUR_PROCESS_ID, 'N', '', '', N'Chờ Thư ký Hội Đồng Quản Trị phê duyệt phiếu') END ELSE IF @CUR_PROCESS_ID = 'TKHDQT_APP' BEGIN SET @PROCESS_DESC = N'Thư ký hội đồng quản trị phê duyệt tờ trình thanh lý' UPDATE PL_REQUEST_PROCESS SET STATUS = 'P', CHECKER_ID = @p_CHECKER_ID, APPROVE_DT = GETDATE() WHERE STATUS = 'C' AND REQ_ID = @p_REQ_ID INSERT INTO PL_REQUEST_PROCESS (REQ_ID, PROCESS_ID, STATUS, ROLE_USER, BRANCH_ID, CHECKER_ID, PARENT_PROCESS_ID, IS_LEAF, COST_ID, DVDM_ID, NOTES) VALUES (@p_REQ_ID, 'HDQT_APP', 'C', 'HDQT', '', '', @CUR_PROCESS_ID, 'N', '', '', N'Chờ Hội Đồng Quản Trị phê duyệt phiếu') END ELSE IF @CUR_PROCESS_ID = 'HDQT_APP' BEGIN SET @PROCESS_DESC = N'Hội đồng quản trị phê duyệt tờ trình thanh lý' UPDATE PL_REQUEST_PROCESS SET STATUS = 'P', CHECKER_ID = @p_CHECKER_ID, APPROVE_DT = GETDATE() WHERE STATUS = 'C' AND REQ_ID = @p_REQ_ID UPDATE ASS_PLAN_REQUEST_LIQUID_MASTER SET AUTH_STATUS = 'A', CHECKER_ID = @p_CHECKER_ID, APPROVE_DT = GETDATE() WHERE REQ_ID = @p_REQ_ID; IF @@ERROR <> 0 GOTO ABORT INSERT INTO PL_REQUEST_PROCESS (REQ_ID, PROCESS_ID, STATUS, ROLE_USER, BRANCH_ID, CHECKER_ID, PARENT_PROCESS_ID, IS_LEAF, COST_ID, DVDM_ID, NOTES, APPROVE_DT) VALUES (@p_REQ_ID, 'APPROVE', 'C', '', '', '', @CUR_PROCESS_ID, 'Y', '', '', N'Hoàn thành phê duyệt phiếu Tờ trình thanh lý', GETDATE()) END INSERT INTO dbo.PL_PROCESS(REQ_ID, PROCESS_ID, CHECKER_ID, APPROVE_DT, PROCESS_DESC, NOTES) VALUES(@p_REQ_ID, @CUR_PROCESS_ID, @p_CHECKER_ID, GETDATE(), @PROCESS_DESC, N'Phê duyệt tờ trình thanh lý') -- END: QUY TRINH XU LY TO TRINH 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