ALTER PROCEDURE [dbo].[BUD_MASTER_Upd] @p_BUILDING_ID varchar(15) = null , @p_ASSET_ID varchar(15) = NULL , @p_BUILDING_NAME nvarchar(1000) = NULL , @p_BRANCH_ID varchar(15) = NULL , @p_ADDRESS nvarchar(800) = NULL , @p_OWNER_OR_RENT varchar(1) = NULL , @p_NUM_FLOOR int = NULL, @p_AREA numeric(18,2) = NULL , @p_TOTAL_AREA numeric(18,2) = NULL , @p_RENT_TOTAL_AREA numeric(18,2) = NULL , @p_UTILZED_AREA numeric(18,2) = NULL , @p_NOTES nvarchar(1000) = NULL , @p_RECORD_STATUS varchar(1) = NULL , @p_AUTH_STATUS varchar(1) = NULL , @p_MAKER_ID varchar(15) = NULL , @p_CREATE_DT VARCHAR(20) = NULL, @p_CHECKER_ID varchar(15) = NULL , @p_APPROVE_DT VARCHAR(20) = NULL, @p_XML_TEMP xml = NULL, @p_RENT_AMT DECIMAL(18,0) =NULL, @p_DEPOSITS_AMT DECIMAL(18,0) =NULL, @p_RENT_TIME int, @p_IS_SEND_APPR VARCHAR(15), @p_SEND_APPR_DT VARCHAR(20), @p_SIGN_USER VARCHAR(15), @p_SIGN_DT VARCHAR(15), @p_CONTRACT_ID VARCHAR(15) = NULL, @p_SUP_ID VARCHAR(15) = NULL, @p_VAT INT = 0, @p_LENGTH DECIMAL(18,2) = NULL, @p_WIDTH DECIMAL(18,2) = NULL AS /* --Validation is here DECLARE @ERRORSYS NVARCHAR(15) = '' IF ( NOT EXISTS ( SELECT * FROM BUD_MASTER WHERE BUILDING_ID=@p_BUILDING_ID SET @ERRORSYS = '' IF @ERRORSYS <> '' BEGIN SELECT ErrorCode Result, ''BUILDING_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS RETURN '0' END */ IF(EXISTS (SELECT * FROM BUD_MASTER WHERE BUILDING_ID = @p_BUILDING_ID AND IS_SEND_APPR = 'Y' AND AUTH_STATUS = 'U')) BEGIN SET @p_IS_SEND_APPR = (SELECT IS_SEND_APPR FROM BUD_MASTER WHERE BUILDING_ID = @p_BUILDING_ID) SELECT '-1' as Result, '' BUILDING_ID, @p_IS_SEND_APPR IS_SEND_APPR, N'Không thể chỉnh sửa. Thông tin quản lý trụ sở đã được gửi yêu cầu phê duyệt' ErrorDesc RETURN '-1' END BEGIN TRANSACTION DECLARE @p_ROW_NUM INT = 0 IF(EXISTS (SELECT * FROM BUD_MASTER WHERE BUILDING_ID = @p_BUILDING_ID AND AUTH_STATUS = 'A')) BEGIN ---------------CẬP NHẬT LẠI SAU KHI ĐÃ DUYỆT------------ SET @p_CHECKER_ID = NULL SET @p_APPROVE_DT = NULL SET @p_SIGN_DT = NULL SET @p_SEND_APPR_DT = NULL END UPDATE BUD_MASTER SET [ASSET_ID] = @p_ASSET_ID,[BUILDING_NAME] = @p_BUILDING_NAME, [BRANCH_ID] = @p_BRANCH_ID,[ADDRESS] = @p_ADDRESS, [OWNER_OR_RENT] = @p_OWNER_OR_RENT,[NUM_FLOOR] = @p_NUM_FLOOR, [AREA] = @p_AREA,[TOTAL_AREA] = @p_TOTAL_AREA, [RENT_TOTAL_AREA] = @p_RENT_TOTAL_AREA, [UTILZED_AREA] = @p_UTILZED_AREA,[NOTES] = @p_NOTES, [RECORD_STATUS] = @p_RECORD_STATUS,[AUTH_STATUS] = @p_AUTH_STATUS, [MAKER_ID] = @p_MAKER_ID,[CREATE_DT] = CONVERT(DATETIME, @p_CREATE_DT, 103), [CHECKER_ID] = @p_CHECKER_ID,[APPROVE_DT] = CONVERT(DATETIME, @p_APPROVE_DT, 103), [XML_TEMP] = @p_XML_TEMP, [RENT_AMT]=@p_RENT_AMT, [DEPOSITS_AMT] =@p_DEPOSITS_AMT, [RENT_TIME] =@p_RENT_TIME, [IS_SEND_APPR] = @p_IS_SEND_APPR, [SEND_APPR_DT] = CONVERT(DATETIME, @p_SEND_APPR_DT, 103), [SIGN_USER] = @p_SIGN_USER, [SIGN_DT]= CONVERT(DATETIME, @p_SIGN_DT, 103), [CONTRACT_ID] = @p_CONTRACT_ID, [SUP_ID] = @p_SUP_ID, [VAT] = @p_VAT, [LENGTH] = @p_LENGTH, [WIDTH] = @p_WIDTH WHERE BUILDING_ID= @p_BUILDING_ID IF @@Error <> 0 GOTO ABORT DELETE FROM BUD_AREA_DT WHERE BUILD_ID =@p_BUILDING_ID -----------BAODNQ 10/3/2022 : Kiểm tra danh sách tầng phải khớp với số tầng của trụ sở DECLARE @p_XML_TOTAL_COUNT INT SET @p_XML_TOTAL_COUNT = ( SELECT @p_XML_TEMP.value('count(/Root/XmlData1/BUILDING_AREA_ID)', 'INT') as 'COUNT' ) PRINT @p_XML_TOTAL_COUNT --IF(@p_NUM_FLOOR <> @p_XML_TOTAL_COUNT) --BEGIN -- ROLLBACK TRANSACTION -- SELECT '-1' as Result, '' BUILDING_ID, -- N'Số tầng trên lưới danh sách phải khớp với số tầng của trụ sở' ErrorDesc -- RETURN '-1' --END ------------CHECK TỔNG DT CÁC TẦNG PHẢI = DT TRỤ SỞ--------- DECLARE @p_XML_TOTAL_FLOOR_AREA NUMERIC(18,2) SET @p_XML_TOTAL_FLOOR_AREA = ( SELECT @p_XML_TEMP.value('sum(/Root/XmlData1/FLOOR_AREA)', 'DECIMAL(18,2)') AS 'SUM' ) PRINT @p_XML_TOTAL_FLOOR_AREA IF(@p_XML_TOTAL_FLOOR_AREA <> @p_TOTAL_AREA) BEGIN ROLLBACK TRANSACTION SELECT '-1' as Result, '' BUILDING_ID, N'Tổng diện tích các tầng phải bằng diện tích trụ sở' ErrorDesc RETURN '-1' END Declare @hdoc1 INT DECLARE @d_BUILDING_AREA_ID VARCHAR(15), @d_FLOOR_NO INT, @d_FLOOR_AREA decimal(18,2), @d_INTERNAL_AREA decimal(18,2), @d_RENT_AREA decimal(18,2), @d_UTILZED_AREA decimal(18,2), @d_NOTES NVARCHAR(1000) Exec sp_xml_preparedocument @hdoc1 Output,@p_XML_TEMP DECLARE XmlDataDoc CURSOR FOR SELECT * FROM OPENXML(@hdoc1,'/Root/XmlData1',2) WITH ( BUILDING_AREA_ID VARCHAR(15), FLOOR_NO INT, FLOOR_AREA decimal(18,2), INTERNAL_AREA decimal(18,2), RENT_AREA decimal(18,2), UTILZED_AREA decimal(18,2), NOTES NVARCHAR(1000) ) OPEN XmlDataDoc FETCH NEXT FROM XmlDataDoc INTO @d_BUILDING_AREA_ID , @d_FLOOR_NO , @d_FLOOR_AREA , @d_INTERNAL_AREA , @d_RENT_AREA , @d_UTILZED_AREA , @d_NOTES WHILE @@FETCH_STATUS = 0 BEGIN SET @p_ROW_NUM = @p_ROW_NUM + 1 IF(LEN( @d_BUILDING_AREA_ID)=0) EXEC SYS_CodeMasters_Gen 'BUD_AREA_DT', @d_BUILDING_AREA_ID out IF @d_BUILDING_AREA_ID='' OR @d_BUILDING_AREA_ID IS NULL GOTO ABORT -------CHECK TỔNG DT CHO THUÊ VÀ SỬ DỤNG PH NHỎ HƠN HOẶC BẰNG DT TẦNG-------- IF(@d_FLOOR_AREA - (@d_INTERNAL_AREA + @d_UTILZED_AREA) < 0) BEGIN CLOSE XmlDataDoc DEALLOCATE XmlDataDoc ROLLBACK TRANSACTION SELECT '-1' as Result, '' BUILDING_ID, '' BUILDING_NAME, N'Lưới danh sách các tầng của trụ sở, dòng ' + CONVERT(NVARCHAR,@p_ROW_NUM) + N': Tổng diện tích sử dụng và diện tích cho thuê phải nhỏ hơn hoặc bằng diện tích tầng' ErrorDesc RETURN '-1' END INSERT INTO BUD_AREA_DT([BUILDING_AREA_ID],[BUILD_ID],[FLOOR_NO],[FLOOR_AREA],[INTERNAL_AREA], [RENT_AREA],[UTILZED_AREA],[NOTES],[RECORD_STATUS],[AUTH_STATUS],[MAKER_ID],[CREATE_DT],[CHECKER_ID],[APPROVE_DT]) VALUES(@d_BUILDING_AREA_ID ,@p_BUILDING_ID ,@d_FLOOR_NO ,@d_FLOOR_AREA ,@d_INTERNAL_AREA ,0 , @d_UTILZED_AREA ,@d_NOTES,@p_RECORD_STATUS ,@p_AUTH_STATUS ,@p_MAKER_ID ,CONVERT(DATETIME, @p_CREATE_DT, 103) ,@p_CHECKER_ID ,CONVERT(DATETIME, @p_APPROVE_DT, 103) ) IF @@Error <> 0 GOTO ABORT FETCH NEXT FROM XmlDataDoc INTO @d_BUILDING_AREA_ID , @d_FLOOR_NO , @d_FLOOR_AREA , @d_INTERNAL_AREA , @d_RENT_AREA , @d_UTILZED_AREA , @d_NOTES END CLOSE XmlDataDoc DEALLOCATE XmlDataDoc -----**** UPDATE ---- --8/12/2021,datmq thêm UTILZED_AREA=(SELECT SUM(UTILZED_AREA))---- UPDATE BUD_MASTER SET TOTAL_AREA = (SELECT SUM(FLOOR_AREA) FROM BUD_AREA_DT WHERE BUILD_ID=@p_BUILDING_ID),UTILZED_AREA=(SELECT SUM(UTILZED_AREA) FROM BUD_AREA_DT WHERE BUILD_ID=@p_BUILDING_ID) WHERE BUILDING_ID=@p_BUILDING_ID -- 29/12/2021:datmq Insert to table PL_PROCESS ------Chỉ ghi lại bước xử lý cuối cùng khi update nhiều lần----- --DELETE FROM PL_PROCESS WHERE REQ_ID = @p_BUILDING_ID AND PROCESS_ID = 'UPDATE' INSERT INTO dbo.PL_PROCESS ( REQ_ID, PROCESS_ID, CHECKER_ID, APPROVE_DT, PROCESS_DESC, NOTES ) VALUES ( @p_BUILDING_ID, 'UPDATE', @p_MAKER_ID, GETDATE(), N'Cập nhật quản lý trụ sở thành công' , N'Cập nhật quản lý trụ sở' ) COMMIT TRANSACTION SELECT '0' as Result, @p_BUILDING_ID BUILDING_ID, '' ErrorDesc RETURN '0' ABORT: BEGIN ROLLBACK TRANSACTION SELECT '-1' as Result, '' BUILDING_ID, '' ErrorDesc RETURN '-1' End