ALTER PROCEDURE dbo.TR_REQUEST_CAR_SendApp @p_REQ_ID VARCHAR(15) = NULL, @p_USER_LOGIN VARCHAR(15)=NULL, @p_SEND_APPR_DT VARCHAR(20) = NULL AS BEGIN TRANSACTION DECLARE @p_MESSAGE NVARCHAR(500),@p_Pro_ID VARCHAR(20), @p_Process_ID NVARCHAR(15),@p_REQ_CODE VARCHAR(20) SELECT @p_Pro_ID= PROCESS_ID,@p_REQ_CODE=REQ_CODE FROM TR_REQUEST_CAR WHERE REQ_ID = @p_REQ_ID IF(@p_Pro_ID IN('INSERT','REJECT')) BEGIN UPDATE A SET A.MAKER_PHONE=B.EMP_PHONE,A.MAKER_ID=B.EMP_ID FROM TR_REQUEST_CAR A LEFT JOIN (SELECT * FROM TR_REQUEST_JOB_FORM WHERE REQ_CAR_ID=@p_REQ_ID) B ON A.REQ_ID = B.REQ_CAR_ID WHERE a.REQ_ID=@p_REQ_ID IF(EXISTS(SELECT 1 FROM TR_REQUEST_CAR WHERE REQ_ID=@p_REQ_ID AND AUTH_STATUS='R')) BEGIN ROLLBACK TRANSACTION SELECT '-1' Result, N'Phiếu yêu cầu xe số: '+@p_REQ_CODE+ N' đang bị từ chối. Vui lòng đợi nhân viên xử lý phiếu và gửi phê duyệt lại' ErrorDesc RETURN '-1' END UPDATE PL_PROCESS SET PROCESS_ID='UPDATE_NT' WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID='UPDATE' DELETE dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND STATUS='R' IF(EXISTS(SELECT 1 FROM TR_REQUEST_CAR WHERE REQ_ID=@p_REQ_ID AND IS_SEND_APPR='Y')) BEGIN ROLLBACK TRANSACTION SELECT '-1' Result,'' REQ_CODE, '' REQ_ID, N'Phiếu yêu cầu xe đã được gửi phê duyệt trước đó' ErrorDesc RETURN '-1' END UPDATE TR_REQUEST_CAR SET IS_SEND_APPR = 'Y', SEND_DT = CONVERT(DATETIME, @p_SEND_APPR_DT, 103),SENDER_ID=@p_USER_LOGIN,AUTH_STATUS='U',PROCESS_ID='APPNEW' WHERE REQ_ID = @p_REQ_ID IF @@ERROR <> 0 GOTO ABORT DECLARE @p_IS_SEND_APPR VARCHAR(15) = 'Y' DECLARE @DEP_CREATE VARCHAR(15), @BRANCH_CREATE VARCHAR(15) SELECT @BRANCH_CREATE=BRANCH_CREATE,@DEP_CREATE=DEP_CREATE FROM TR_REQUEST_CAR WHERE REQ_ID = @p_REQ_ID SET @p_Process_ID='SEND' -----------------Gửi phê duyệt lên trưởng DV------ SET @p_MESSAGE = N'PYC xe số: ' +@p_REQ_CODE+ N' đã được gửi phê duyệt thành công. Vui lòng đợi trưởng đơn vị phê duyệt' ------Insert vào bảng lịch sử xử lý------------- INSERT INTO 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' Người tạo gửi phê duyệt') IF @@ERROR <> 0 GOTO ABORT INSERT INTO dbo.PL_REQUEST_PROCESS (REQ_ID, PROCESS_ID, STATUS, ROLE_USER, BRANCH_ID, DEP_ID, CHECKER_ID, APPROVE_DT, PARENT_PROCESS_ID, IS_LEAF, COST_ID, DVDM_ID,NOTES, IS_HAS_CHILD) VALUES ( @p_REQ_ID,'APPNEW', 'C','GDDV', @BRANCH_CREATE,IIF(@BRANCH_CREATE='DV0001',@DEP_CREATE,''),'',NULL,NULL,'N','', '', N'Chờ trưởng đơn vị phê duyệt',NULL ) END -- ELSE IF(@p_Pro_ID ='CV_SEND' AND EXISTS(SELECT 1 FROM TR_REQUEST_CAR WHERE REQ_ID =@p_REQ_ID AND USER_UPDATE=@p_USER_LOGIN)) -- BEGIN -- SET @p_MESSAGE = N'PYC xe số: ' +ISNULL(@p_REQ_CODE,'')+ -- N' đã được gửi xác nhận thông tin thành công. Vui lòng đợi người tạo xác nhận' -- UPDATE TR_REQUEST_CAR -- SET PROCESS_ID='MAKER_APP' -- WHERE REQ_ID = @p_REQ_ID -- SET @p_Process_ID='MAKER_APP' -- IF @@ERROR <> 0 GOTO ABORT -- -- UPDATE PL_REQUEST_PROCESS SET CHECKER_ID=@p_USER_LOGIN,APPROVE_DT=GETDATE(),IS_HAS_CHILD='1',NOTES=N'Đã điều phối nhân viên lái xe' WHERE ID=@PRO_ID -- -- INSERT INTO dbo.PL_REQUEST_PROCESS -- ( -- REQ_ID, PROCESS_ID, STATUS, ROLE_USER, CHECKER_ID, APPROVE_DT, -- PARENT_PROCESS_ID, IS_LEAF, COST_ID, DVDM_ID,NOTES, IS_HAS_CHILD -- ) -- VALUES -- ( -- @p_REQ_ID,'MAKER_APP', 'C','','',CONVERT(DATETIME,GETDATE(),103),'','','', '', -- N'Chờ người tạo xác nhận thông tin','0' -- ) -- INSERT INTO PL_PROCESS(REQ_ID, PROCESS_ID, CHECKER_ID, APPROVE_DT, PROCESS_DESC, NOTES) -- VALUES(@p_REQ_ID, 'CV_SEND', @p_USER_LOGIN, GETDATE(), -- N'Chuyên viên điều động xe gửi xác nhận chi phí thành công', N' Chuyên viên điều động xe chuyển phiếu cho người tạo') -- END ELSE IF(@p_Pro_ID IN('CVREJUPD','COSTREJECT','CV_XL')) BEGIN DECLARE @p_USER NVARCHAR(50) IF(EXISTS(SELECT * FROM TR_REQUEST_CAR WHERE REQ_ID=@p_REQ_ID AND (USER_UPDATE IS NULL OR USER_UPDATE =''))) BEGIN ROLLBACK TRANSACTION SELECT '-1' Result, N'Chuyển phiếu thất bại! Bạn cần chọn người nhập thông tin chuyến về' ErrorDesc RETURN '-1' END UPDATE TR_REQUEST_CAR SET PROCESS_ID='CV_SEND' WHERE REQ_ID = @p_REQ_ID IF @@ERROR <> 0 GOTO ABORT SELECT @p_USER=B.TLFullName FROM dbo.TR_REQUEST_CAR A JOIN dbo.TL_USER B ON A.USER_UPDATE=B.TLNANME WHERE REQ_ID=@p_REQ_ID SET @p_Process_ID='CV_SEND' INSERT INTO PL_PROCESS(REQ_ID, PROCESS_ID, CHECKER_ID, APPROVE_DT, PROCESS_DESC, NOTES) VALUES(@p_REQ_ID, 'CV_XL', @p_USER_LOGIN, GETDATE(), N'Chuyên viên điều phối xử lý', N' Nhân viên tiếp nhận '+@p_USER) DECLARE @PRO_ID VARCHAR(20),@USER VARCHAR(50) SELECT @USER=USER_UPDATE FROM dbo.TR_REQUEST_CAR WHERE REQ_ID=@p_REQ_ID SELECT @PRO_ID=ID FROM PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND STATUS='C' AND PROCESS_ID='CV_XL' UPDATE PL_REQUEST_PROCESS SET CHECKER_ID=@p_USER_LOGIN,APPROVE_DT=GETDATE(),IS_HAS_CHILD='1',NOTES=N'Đã điều phối nhân viên lái xe' WHERE ID=@PRO_ID DELETE PL_REQUEST_PROCESS_CHILD Where REQ_ID=@p_REQ_ID INSERT INTO dbo.PL_REQUEST_PROCESS_CHILD ( REQ_ID,PROCESS_ID,TLNAME,TYPE_JOB,LEVEL_JOB,STATUS_JOB,RECORD_STATUS ) VALUES ( @p_REQ_ID,@PRO_ID,@p_USER_LOGIN,'CV',1,'P','1' ) INSERT INTO dbo.PL_REQUEST_PROCESS_CHILD ( REQ_ID,PROCESS_ID,TLNAME,TYPE_JOB,LEVEL_JOB,STATUS_JOB,RECORD_STATUS ) VALUES ( @p_REQ_ID,@PRO_ID,@USER,'XL',2,'C','1' ) SET @p_MESSAGE = N'PYC xe số: ' +@p_REQ_CODE+ N' đã được gửi đến tài xế thành công' END ELSE IF(@p_Pro_ID ='CV_SEND') BEGIN -- DECLARE @N_PLATE VARCHAR(20), @CREATE_DT DATETIME -- DECLARE @LSTREQCAR TABLE(REQ_ID VARCHAR(20),REQ_CODE VARCHAR(20),PROCESS_ID VARCHAR(15),CREATE_DT DATETIME) -- SELECT @N_PLATE=N_PLATE,@CREATE_DT=CREATE_DT FROM dbo.TR_REQUEST_CAR WHERE REQ_ID=@p_REQ_ID -- INSERT INTO @LSTREQCAR -- SELECT REQ_ID,REQ_CODE,PROCESS_ID,CREATE_DT -- FROM dbo.TR_REQUEST_CAR -- WHERE N_PLATE= @N_PLATE AND DATEDIFF(second,CREATE_DT , @CREATE_DT)>0 AND REQ_ID<>@p_REQ_ID AND AUTH_STATUS='U' -- ORDER BY CREATE_DT DESC -- IF(EXISTS(SELECT 1 FROM @LSTREQCAR)) -- BEGIN -- IF(EXISTS(SELECT 1 FROM @LSTREQCAR WHERE PROCESS_ID IN('USER_UPD','CV_SEND'))) -- BEGIN -- ROLLBACK TRANSACTION -- SELECT '-1' Result, N'Vui lòng xử lý PYC xe số: '+ -- (SELECT TOP(1)REQ_CODE FROM @LSTREQCAR WHERE PROCESS_ID IN('USER_UPD','CV_SEND') ORDER BY CREATE_DT)+N' trước' ErrorDesc -- RETURN '-1' -- END -- ELSE IF(EXISTS(SELECT TOP(1)REQ_CODE FROM @LSTREQCAR WHERE REQ_ID NOT IN (SELECT A.REQ_ID FROM @LSTREQCAR A JOIN CAR_DRIVE B ON B.REQ_CAR_ID=A.REQ_ID))) -- BEGIN -- ROLLBACK TRANSACTION -- SELECT '-1' Result, N'Phiếu yêu cầu xe số : '+ -- (SELECT TOP(1)REQ_CODE FROM @LSTREQCAR WHERE REQ_ID NOT IN (SELECT A.REQ_ID FROM @LSTREQCAR A JOIN CAR_DRIVE B ON B.REQ_CAR_ID=A.REQ_ID))+N' không tồn tại trong thông tin vận hành. Vui lòng thêm mới' ErrorDesc -- RETURN '-1' -- END -- -- ELSE IF(EXISTS(SELECT TOP(1)B.REQ_CODE FROM CAR_DRIVE A JOIN @LSTREQCAR B ON A.REQ_CAR_ID = B.REQ_ID WHERE A.AUTH_STATUS='U')) -- BEGIN -- SELECT * FROM CAR_DRIVE A JOIN @LSTREQCAR B ON A.REQ_CAR_ID = B.REQ_ID WHERE A.AUTH_STATUS='U' -- ROLLBACK TRANSACTION -- SELECT '-1' Result, N'Thông tin vận hành số có mã phiếu yêu cầu : '+ -- (SELECT TOP(1)B.REQ_CODE FROM CAR_DRIVE A JOIN @LSTREQCAR B ON A.REQ_CAR_ID = B.REQ_ID WHERE A.AUTH_STATUS='U')+N' chưa được duyệt' ErrorDesc -- RETURN '-1' -- END -- END IF(EXISTS(SELECT 1 FROM TR_REQUEST_CAR WHERE REQ_ID=@p_REQ_ID AND (MILRAGE_RETURN_TRIP IS NULL OR MILRAGE_RETURN_TRIP =''))) BEGIN ROLLBACK TRANSACTION SELECT '-1' Result, N'Thao tác thất bại! Bạn chưa nhập thông tin số KM hiện tại về' ErrorDesc RETURN '-1' END DECLARE @USER_UPD VARCHAR(20) SET @USER_UPD = (SELECT TOP(1) 1 FROM TR_REQUEST_CAR WHERE REQ_ID =@p_REQ_ID AND USER_UPDATE=@p_USER_LOGIN) DECLARE @ID VARCHAR(20) --Trường hợp chuyên viên thay tài xế cập nhật chuyển phiếu IF(EXISTS(SELECT TOP(1) 1 FROM dbo.TL_USER_GET_ROLES (@p_USER_LOGIN)fgubr WHERE fgubr.ROLE_ID='CVDDX')) BEGIN UPDATE TR_REQUEST_CAR SET PROCESS_ID='MAKER_APP' WHERE REQ_ID = @p_REQ_ID IF @@ERROR <> 0 GOTO ABORT SET @p_Process_ID='MAKER_APP' UPDATE PL_PROCESS SET PROCESS_ID='USERUPD' WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID='USER_UPD' SET @p_MESSAGE = N'PYC xe số: ' +@p_REQ_CODE+ N' đã được gửi đến chuyên viên xử lý thành công. Chờ người tạo xác nhận chi phí' UPDATE dbo.PL_REQUEST_PROCESS_CHILD SET STATUS_JOB='P' WHERE REQ_ID=@p_REQ_ID AND STATUS_JOB='C' AND TYPE_JOB='XL' UPDATE PL_REQUEST_PROCESS SET STATUS='P',CHECKER_ID=@p_USER_LOGIN,APPROVE_DT=GETDATE(),NOTES=N'Chuyên viên điều động xe xử lý thành công' WHERE REQ_ID=@p_REQ_ID AND STATUS='C' AND PROCESS_ID='CV_XL' INSERT INTO dbo.PL_REQUEST_PROCESS ( REQ_ID, PROCESS_ID, STATUS, ROLE_USER, BRANCH_ID, DEP_ID, CHECKER_ID, APPROVE_DT, PARENT_PROCESS_ID, IS_LEAF, COST_ID, DVDM_ID,NOTES, IS_HAS_CHILD ) VALUES ( @p_REQ_ID,'MAKER_APP', 'C',(SELECT MAKER_ID FROM dbo.TR_REQUEST_CAR WHERE REQ_ID=@p_REQ_ID), '','','',NULL,'CV_XL','N','', '', N'Chờ người tạo xác nhận chi phí',0 ) INSERT INTO PL_PROCESS(REQ_ID, PROCESS_ID, CHECKER_ID, APPROVE_DT, PROCESS_DESC, NOTES) VALUES(@p_REQ_ID, 'CV_XL', @p_USER_LOGIN, GETDATE(), N'Chuyên viên gửi xác nhận chi phí thành công', N' Chuyên viên gửi xác nhận chi phí') END ELSE BEGIN UPDATE TR_REQUEST_CAR SET PROCESS_ID='USER_SEND' WHERE REQ_ID = @p_REQ_ID IF @@ERROR <> 0 GOTO ABORT UPDATE PL_PROCESS SET PROCESS_ID='UPDATE_NT' WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID='UPDATE' SET @p_MESSAGE = N'PYC xe số: ' +@p_REQ_CODE+ N' đã được gửi đến chuyên viên thành công' SELECT @ID=ID FROM PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND STATUS='C' AND PROCESS_ID='CV_XL' UPDATE dbo.PL_REQUEST_PROCESS_CHILD SET STATUS_JOB='P' WHERE PROCESS_ID=@ID AND STATUS_JOB='C' AND TYPE_JOB='XL' UPDATE dbo.PL_REQUEST_PROCESS_CHILD SET STATUS_JOB='C' WHERE PROCESS_ID=@ID AND STATUS_JOB='P' AND TYPE_JOB='CV' SET @p_Process_ID='USER_SEND' INSERT INTO PL_PROCESS(REQ_ID, PROCESS_ID, CHECKER_ID, APPROVE_DT, PROCESS_DESC, NOTES) VALUES(@p_REQ_ID, 'USER_SEND', @p_USER_LOGIN, GETDATE(), N'Nhân viên lái xe chuyển phiếu chuyên viên điều động xe thành công', N' Nhân viên lái xe chuyển phiếu chuyên viên điều động xe') END END COMMIT TRANSACTION SELECT '0' AS Result, @p_REQ_ID REQ_ID ,@p_Process_ID PROCESS_ID,@p_IS_SEND_APPR IS_SEND_APPR, @p_MESSAGE ErrorDesc RETURN '0' ABORT: BEGIN ROLLBACK TRANSACTION SELECT '-1' AS Result, '' REQ_ID ,'' IS_SEND_APPR, '' ErrorDesc RETURN '-1' END