ALTER PROCEDURE dbo.TR_CONTRACT_App @p_CONTRACT_ID VARCHAR(15), @p_AUTH_STATUS varchar(50) = NULL, @p_CHECKER_ID varchar(12) = NULL, @p_APPROVE_DT VARCHAR(20) = NULL AS BEGIN DECLARE @p_BRANCH_ID_CONTRACT VARCHAR(100) = ( SELECT BRANCH_ID FROM TR_CONTRACT WHERE CONTRACT_ID = @p_CONTRACT_ID ) DECLARE @p_CONTRACT_CODE VARCHAR(100) = ( SELECT CONTRACT_CODE FROM TR_CONTRACT WHERE CONTRACT_ID = @p_CONTRACT_ID ) IF(EXISTS(SELECT * FROM TR_CONTRACT WHERE CONTRACT_ID = @p_CONTRACT_ID AND AUTH_STATUS = 'R')) BEGIN SELECT '-1' as Result, N'Phê duyệt thất bại. Hợp đồng ' + @p_CONTRACT_CODE + N' đang bị trả về' ErrorDesc RETURN '-1' END IF(EXISTS(SELECT * FROM TR_CONTRACT WHERE CONTRACT_ID = @p_CONTRACT_ID AND AUTH_STATUS = 'A')) BEGIN SELECT '-1' as Result, N'Phê duyệt thất bại. Hợp đồng ' + @p_CONTRACT_CODE + N' đã được phê duyệt trước đó' ErrorDesc RETURN '-1' END IF(NOT EXISTS(SELECT TLNANME FROM TL_USER WHERE TLNANME = @p_CHECKER_ID AND TLSUBBRID = @p_BRANCH_ID_CONTRACT)) BEGIN SELECT '-1' as Result, N'Phê duyệt thất bại. Hợp đồng ' + @p_CONTRACT_CODE + N' của Hội sở' ErrorDesc RETURN '-1' END DECLARE @tmp_tbl TABLE( GOODS_NAME nvarchar(MAX) , QUANTITY_USE DECIMAL ) INSERT INTO @tmp_tbl SELECT B.GD_NAME AS GOODS_NAME, C.QUANTITY_USE FROM TR_CONTRACT_DT A LEFT JOIN CM_GOODS B ON A.GOODS_ID = B.GD_ID LEFT JOIN ( select GOODS_ID, CONTRACT_ID, SUM(QUANTITY) AS QUANTITY_USE FROM TR_PO_DETAIL A LEFT JOIN TR_PO_MASTER B ON A.PO_ID = B.PO_ID WHERE B.CONTRACT_ID = @p_CONTRACT_ID AND B.AUTH_STATUS = 'A' GROUP BY GOODS_ID, CONTRACT_ID ) C on A.GOODS_ID = C.GOODS_ID WHERE C.QUANTITY_USE > A.QUANTITY AND A.CONTRACT_ID = @p_CONTRACT_ID IF EXISTS(SELECT * FROM @tmp_tbl) BEGIN DECLARE @message NVARCHAR(MAX) SELECT @message = COALESCE(@message + '\n ', '') + (N'Hàng hóa ' + GOODS_NAME + N' số lượng đã gọi là ' + CONVERT(NVARCHAR(50),(QUANTITY_USE))) -- + N' (đã duyệt ' + CONVERT(NVARCHAR(50),QUANTITY_USE) + N', chờ duyệt ' + CONVERT(NVARCHAR(50),QUANTITY) + N')') FROM @tmp_tbl SELECT '-1' Result, '' PO_ID, '' PO_CODE, N'Số lượng trong hợp đồng không được nhỏ hơn số lượng đã mua: \n' + @message ErrorDesc RETURN '0' END DECLARE @TOTAL_PO DECIMAL, @TOTAL_CONTRACT DECIMAL, @l_CONTRACT_NAME NVARCHAR(MAX) SELECT @TOTAL_PO = SUM(A.TOTAL_AMT) FROM TR_PO_DETAIL A LEFT JOIN TR_PO_MASTER B ON A.PO_ID = B.PO_ID WHERE B.CONTRACT_ID = @p_CONTRACT_ID AND B.AUTH_STATUS = 'A' SELECT @TOTAL_CONTRACT = SUM(PRICE * QUANTITY) FROM TR_CONTRACT_DT WHERE CONTRACT_ID = @p_CONTRACT_ID SET @l_CONTRACT_NAME = (SELECT [CONTRACT_NAME] FROM TR_CONTRACT WHERE CONTRACT_ID = @p_CONTRACT_ID) IF @TOTAL_PO > @TOTAL_CONTRACT BEGIN DECLARE @message1 NVARCHAR(MAX) SELECT @message1 = COALESCE(@message + '\n ', '') + (N'Hợp đồng ' + @l_CONTRACT_NAME + N' giá trị đã gọi là ' + CONVERT(NVARCHAR(50),(@TOTAL_PO))) SELECT '-1' Result, '' PO_ID, '' PO_CODE, N'Giá trị trong hợp đồng không được nhỏ hơn giá trị đã mua: \n' + @message1 ErrorDesc RETURN '0' END BEGIN TRANSACTION --insert master UPDATE TR_CONTRACT SET [AUTH_STATUS] = @p_AUTH_STATUS,[CHECKER_ID] = @p_CHECKER_ID,[APPROVE_DT] = CONVERT(DATETIME, @p_APPROVE_DT, 103) WHERE CONTRACT_ID= @p_CONTRACT_ID IF @@Error <> 0 GOTO ABORT PRINT 'UPDATE MASTER SUCCESS' --insert asset detail tương đương như NỘI DUNG trong bảng contract detail ------------------BAODNQ 24/2/2022 INSERT lưu lịch sử xử lý------------------ INSERT INTO dbo.PL_PROCESS ( REQ_ID, PROCESS_ID, CHECKER_ID, APPROVE_DT, PROCESS_DESC, NOTES ) VALUES ( @p_CONTRACT_ID, 'APPROVE', @p_CHECKER_ID, GETDATE(), N'Trưởng đơn vị duyệt thông tin hợp đồng thành công' , N'Trưởng đơn vị duyệt thông tin hợp đồng' ) COMMIT TRANSACTION SELECT '0' as Result, @P_CONTRACT_ID CONTRACT_ID, '' ErrorDesc RETURN '0' ABORT: BEGIN ROLLBACK TRANSACTION SELECT '-1' as Result, '' CONTRACT_ID, ERROR_MESSAGE() ErrorDesc RETURN '-1' End END