ALTER PROC [dbo].[PL_REQUEST_DOC_Settlment] @p_REQ_ID VARCHAR (15) = NULL, @p_AMT_SETT DECIMAL(18,2) =NULL, @p_AMT_USE DECIMAL(18,2) = NULL, @p_AMT_REVERT DECIMAL(18,2)= NULL AS BEGIN TRANSACTION DECLARE @ERROR NVARCHAR(500) IF(EXISTS(SELECT REQ_ID FROM dbo.PL_REQUEST_DOC WHERE IS_SETTLMENT=1 AND REQ_ID=@p_REQ_ID)) BEGIN SET @ERROR = (SELECT ErrorDesc FROM dbo.SYS_ERROR WHERE ErrorCode='SETTLMENT-001') ROLLBACK TRANSACTION SELECT '-1' as Result, @p_REQ_ID AS REQ_PAY_ID, N'Quyết toán tờ trình thất bại! Tờ trình đã được quyết toán' ErrorDesc RETURN '-1' END IF(EXISTS(SELECT REQ_ID FROM dbo.PL_REQUEST_DOC WHERE PROCESS_ID <>'APPROVE' AND REQ_ID=@p_REQ_ID)) BEGIN --SET @ERROR = (SELECT ErrorDesc FROM dbo.SYS_ERROR WHERE ErrorCode='SETTLMENT-001') ROLLBACK TRANSACTION SELECT '-1' as Result, @p_REQ_ID AS REQ_PAY_ID, N'Quyết toán tờ trình số '+ (SELECT ISNULL(REQ_CODE, REQ_ID) FROM PL_REQUEST_DOC WHERE REQ_ID=@p_REQ_ID)+N' thất bại! Tờ trình chưa được phê duyệt hoàn tất' ErrorDesc RETURN '-1' END IF(EXISTS(SELECT REQ_ID FROM dbo.PL_REQUEST_DOC WHERE PROCESS_ID <>'APPROVE' AND REQ_PARENT_ID=@p_REQ_ID)) BEGIN --SET @ERROR = (SELECT ErrorDesc FROM dbo.SYS_ERROR WHERE ErrorCode='SETTLMENT-001') ROLLBACK TRANSACTION SELECT '-1' as Result, @p_REQ_ID AS REQ_PAY_ID, N'Quyết toán tờ trình số '+ (SELECT ISNULL(REQ_CODE, REQ_ID) FROM PL_REQUEST_DOC WHERE REQ_ID=@p_REQ_ID)+N' thất bại! Tờ trình bổ sung chưa được phê duyệt hoàn tất' ErrorDesc RETURN '-1' END IF(EXISTS(SELECT REQ_CODE FROM dbo.PL_REQUEST_DOC WHERE REQ_ID=@p_REQ_ID AND (REQ_PARENT_ID IS NOT NULL AND REQ_PARENT_ID=''))) BEGIN ROLLBACK TRANSACTION SELECT '-1' as Result, @p_REQ_ID AS REQ_PAY_ID, N'Quyết toán tờ trình số '+ (SELECT ISNULL(REQ_CODE, REQ_ID) FROM PL_REQUEST_DOC WHERE REQ_ID=@p_REQ_ID)+N' thất bại! Đây là tờ trình con, vui lòng quyết toán tờ trình chính.' ErrorDesc RETURN '-1' END IF(EXISTS(SELECT REQ_CODE FROM dbo.PL_REQUEST_DOC WHERE REQ_ID=@p_REQ_ID AND(PL_BASED_ID IS NOT NULL AND PL_BASED_ID='') )) BEGIN ROLLBACK TRANSACTION SELECT '-1' as Result, @p_REQ_ID AS REQ_PAY_ID, N'Quyết toán tờ trình số '+ (SELECT ISNULL(REQ_CODE, REQ_ID) FROM PL_REQUEST_DOC WHERE REQ_ID=@p_REQ_ID)+N' thất bại! Đây là tờ trình con, vui lòng quyết toán tờ trình chính.' ErrorDesc RETURN '-1' END DECLARE @ERROR_CODE NVARCHAR(MAX) IF(EXISTS(SELECT * FROM dbo.TR_REQUEST_DOC WHERE PL_REQ_ID =@p_REQ_ID AND PROCESS_ID <> 'APPROVE' ) ) BEGIN SET @ERROR_CODE=(select STUFF( (select '; ' + DTA.REQ_CODE FROM TR_REQUEST_DOC DTA WHERE DTA.PL_REQ_ID=@p_REQ_ID AND DTA.PROCESS_ID<> 'APPROVE' FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, '')) ROLLBACK TRANSACTION SELECT '-1' as Result, @p_REQ_ID AS REQ_PAY_ID, N'Quyết toán tờ trình thất bại! Đang tồn tại phiếu yêu cầu mua sắm chưa được phê duyệt: '+@ERROR_CODE AS ErrorDesc RETURN '-1' END IF(EXISTS(SELECT PS.SERVICE_ID FROM dbo.TR_REQ_PAYMENT TP LEFT JOIN dbo.TR_REQ_PAY_SERVICE PS ON PS.REQ_PAY_ID=TP.REQ_PAY_ID WHERE PS.EMP_ID=@p_REQ_ID AND TP.AUTH_STATUS_KT <>'A')) BEGIN SET @ERROR_CODE=(select STUFF( (select '; ' + DTA.REQ_PAY_CODE FROM dbo.TR_REQ_PAYMENT DTA WHERE DTA.AUTH_STATUS_KT <>'A' AND DTA.REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM dbo.TR_REQ_PAY_SERVICE WHERE EMP_ID=@p_REQ_ID) FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, '')) ROLLBACK TRANSACTION SELECT '-1' as Result, @p_REQ_ID AS REQ_PAY_ID, N'Quyết toán tờ trình thất bại! Đang có giao dịch thanh toán sử dụng ngân sách của tờ trình. Vui lòng hủy phiếu thanh toán trước khi quyết toán tờ trình: '+@ERROR_CODE AS ErrorDesc RETURN '-1' END DECLARE @listTRADE TABLE ( TRADE_ID VARCHAR(20), AMT_APP DECIMAL(18,2), AMT_ROLEBACK DECIMAL(18,2) ) INSERT @listTRADE SELECT T.TRADE_ID, SUM(T.TOTAL_AMT),SUM(T.ATM_ROLL) FROM( SELECT TRADE_ID,SUM(TOTAL_AMT) AS TOTAL_AMT,0 AS ATM_ROLL FROM dbo.PL_REQUEST_DOC_DT WHERE REQ_ID=@p_REQ_ID GROUP BY TRADE_ID UNION ALL SELECT DT.TRADE_ID,SUM(DT.TOTAL_AMT) AS TOTAL_AMT,0 AS ATM_ROLL FROM dbo.PL_REQUEST_DOC PL LEFT JOIN dbo.PL_REQUEST_DOC_DT DT ON DT.REQ_ID=PL.REQ_ID WHERE PL.REQ_PARENT_ID=@p_REQ_ID GROUP BY TRADE_ID ) T GROUP BY T.TRADE_ID -- LAY DS PYCMS CUA TO TRINH DECLARE @listID TABLE ( TR_REQ_ID VARCHAR(15) ) INSERT INTO @listID SELECT REQ_ID FROM dbo.TR_REQUEST_DOC WHERE PL_REQ_ID=@p_REQ_ID DECLARE @listREQPAYID TABLE ( REQ_PAY_ID VARCHAR(20) ) INSERT INTO @listREQPAYID SELECT REQ_PAY_ID FROM dbo.TR_REQ_PAY_SERVICE WHERE EMP_ID=@p_REQ_ID GROUP BY REQ_PAY_ID DECLARE @listTRADE_EXE TABLE ( TRADE_ID VARCHAR(20), AMT_EXE DECIMAL(18,2) ) INSERT INTO @listTRADE_EXE SELECT T.TRADE_ID,SUM(T.AMT_EXE) FROM ( SELECT TP.TRADE_ID,SUM(TP.AMT_EXE) AS AMT_EXE FROM dbo.TR_REQ_PAY_BUDGET TP WHERE EXISTS(SELECT L.REQ_PAY_ID FROM @listREQPAYID L WHERE L.REQ_PAY_ID=TP.REQ_PAY_ID) GROUP BY TP.TRADE_ID UNION ALL SELECT PLDT.TRADE_ID,SUM(DT.TOTAL_AMT) AS AMT_EXE FROM dbo.TR_REQUEST_DOC_DT DT LEFT JOIN dbo.PL_REQUEST_DOC_DT PLDT ON PLDT.REQDT_ID=DT.PL_REQDT_ID WHERE DT.REQ_DOC_ID IN (SELECT TR_REQ_ID FROM @listID) GROUP BY PLDT.TRADE_ID )T GROUP BY T.TRADE_ID UPDATE @listTRADE SET AMT_ROLEBACK=AMT_APP-(SELECT AMT_EXE FROM @listTRADE_EXE WHERE [@listTRADE].TRADE_ID=[@listTRADE_EXE].TRADE_ID) WHERE EXISTS (SELECT TRADE_ID FROM @listTRADE_EXE WHERE [@listTRADE].TRADE_ID=[@listTRADE_EXE].TRADE_ID) UPDATE dbo.PL_TRADEDETAIL SET AMT_ETM=AMT_ETM- (SELECT AMT_ROLEBACK FROM @listTRADE WHERE [@listTRADE].TRADE_ID=PL_TRADEDETAIL.TRADE_ID) WHERE EXISTS (SELECT TRADE_ID FROM @listTRADE WHERE [@listTRADE].TRADE_ID=PL_TRADEDETAIL.TRADE_ID) UPDATE dbo.PL_REQUEST_DOC SET IS_SETTLMENT=1 WHERE REQ_ID=@p_REQ_ID COMMIT TRANSACTION SELECT '0' as Result, @p_REQ_ID REQ_PAY_ID ,N'Quyết toán tờ trình thành công' ErrorDesc RETURN '0' ABORT: BEGIN ROLLBACK TRANSACTION SELECT '-1' as Result, @p_REQ_ID AS REQ_PAY_ID, N'Quyết toán tờ trình thất bại' ErrorDesc RETURN '-1' END