ALTER PROCEDURE [dbo].[TR_REQUEST_DOC_Ins] @p_REQ_CODE nvarchar(100) = NULL, @p_REQ_NAME nvarchar(200) = NULL, @p_REQ_DT DATETIME = NULL, @p_REQ_TYPE int = NULL, @p_REQ_CONTENT NVARCHAR(1000)=NULL, @p_REQ_REASON NVARCHAR(500)=NULL, @p_PL_REQ_ID VARCHAR(15), @p_TOTAL_AMT decimal = NULL, @p_NOTES nvarchar(1000) = NULL, @p_RECORD_STATUS varchar(1) = NULL, @p_MAKER_ID varchar(12) = NULL, @p_CREATE_DT DATETIME = NULL, @p_AUTH_STATUS varchar(50) = NULL, @p_CHECKER_ID varchar(12) = NULL, @p_APPROVE_DT DATETIME = NULL, @p_BRANCH_DO VARCHAR(15)=NULL, @p_BRANCH_CREATE VARCHAR(15)=NULL, @p_DEP_CREATE VARCHAR(20)=NULL, @p_REQ_PARENT_ID VARCHAR(20)=NULL, @p_USER_REQUEST VARCHAR(15)=NULL, @p_SIGN_USER VARCHAR(15)=NULL, @p_ListGood XML AS IF EXISTS(SELECT * FROM TR_REQUEST_DOC WHERE [REQ_CODE] = @p_REQ_CODE) BEGIN SELECT ErrorCode Result, '' REQ_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = 'REQ-00001' RETURN '0' END DECLARE @sErrorCode VARCHAR(20) BEGIN TRANSACTION exec [TR_CODE_GenKey] 'TR_REQUEST_DOC', '','PUR', @p_REQ_CODE out IF(@p_REQ_CODE IS NULL OR @p_REQ_CODE ='') BEGIN SELECT 'REQ-00001' Result, '' REQ_ID, N'Mã phiếu yêu cầu bắt buộc nhập' ErrorDesc RETURN '0' END --insert master DECLARE @l_REQ_ID VARCHAR(15) EXEC SYS_CodeMasters_Gen 'TR_REQUEST_DOC', @l_REQ_ID out IF @l_REQ_ID='' OR @l_REQ_ID IS NULL GOTO ABORT INSERT INTO dbo.TR_REQUEST_DOC ( REQ_ID, REQ_CODE, REQ_NAME, REQ_DT, REQ_TYPE, REQ_REASON, REQ_CONTENT, PL_REQ_ID, TOTAL_AMT, NOTES, RECORD_STATUS, MAKER_ID, CREATE_DT, AUTH_STATUS, CHECKER_ID, APPROVE_DT, BRANCH_DO, PROCESS_ID, BRANCH_CREATE, USER_REQUEST, BRANCH_DVMS, DEP_CREATE, REQ_PARENT_ID,SIGN_USER ) VALUES ( @l_REQ_ID, -- REQ_ID - varchar(15) @p_REQ_CODE, -- REQ_CODE - varchar(100) @p_REQ_NAME, -- REQ_NAME - nvarchar(200) @p_REQ_DT, -- REQ_DT - datetime @p_REQ_TYPE, @p_REQ_REASON, -- REQ_TYPE - int @p_REQ_CONTENT, -- REQ_CONTENT - nvarchar(1000) -- REQ_REASON - nvarchar(500) @p_PL_REQ_ID, @p_TOTAL_AMT, -- TOTAL_AMT - decimal(18, 0) @p_NOTES, -- NOTES - nvarchar(1000) @p_RECORD_STATUS, -- RECORD_STATUS - varchar(1) @p_MAKER_ID, -- MAKER_ID - varchar(12) @p_CREATE_DT, -- CREATE_DT - datetime 'E', -- AUTH_STATUS - varchar(50) @p_CHECKER_ID, -- CHECKER_ID - varchar(12) @p_APPROVE_DT, -- APPROVE_DT - datetime @p_BRANCH_DO, '', -- BRANCH_ID - varchar(15) @p_BRANCH_CREATE, @p_USER_REQUEST, @p_BRANCH_CREATE, @p_DEP_CREATE, @p_REQ_PARENT_ID,@p_SIGN_USER ) IF @@Error <> 0 GOTO ABORT --Insert into TABLE PL_REQUEST_DOC_DT DECLARE @lstTRDT TABLE( PL_REQDT_ID varchar(15) , GOODS_ID varchar(15) , [DESCRIPTION] nvarchar(500), QUANTITY decimal(18,0) , PRICE decimal(18,2) , TOTAL_AMT decimal(18,2), NOTES nvarchar(1000), REQ_DT DATETIME, AMORT_MONTH DECIMAL(18,2), TRADE_TYPE_ID varchar(15), SUP_ID varchar(15), HH_ID VARCHAR(20), CURRENCY nvarchar(50), EXCHANGE_RATE decimal(18, 2), TAXES decimal(18, 2), DVDM_ID VARCHAR(20) ) Declare @hdoc INT Exec sp_xml_preparedocument @hdoc Output,@p_ListGood INSERT INTO @lstTRDT SELECT * FROM OPENXML(@hDoc,'/Root/ListGood',2) WITH ( PL_REQDT_ID varchar(15) , GOODS_ID varchar(15) , [DESCRIPTION] nvarchar(500), QUANTITY decimal(18,0) , PRICE decimal(18,2) , TOTAL_AMT decimal(18,2), NOTES nvarchar(1000), REQ_DT DATETIME, AMORT_MONTH DECIMAL(18,2), TRADE_TYPE_ID varchar(15), SUP_ID varchar(15), HH_ID VARCHAR(20), CURRENCY nvarchar(50), EXCHANGE_RATE decimal(18, 2), TAXES decimal(18, 2), DVDM_ID VARCHAR(20) ) DECLARE ListGoods CURSOR FOR SELECT * FROM @lstTRDT OPEN ListGoods Declare @PL_REQDT_ID varchar(15), @SUP_ID varchar(15), @GOODS_ID varchar(15), @DESCRIPTION nvarchar(500), @QUANTITY decimal(18), @PRICE decimal(18), @TOTAL_AMT decimal(18), @NOTES nvarchar(1000), @TRADE_TYPE_ID varchar(15), @AMORT_MONTH DECIMAL(18,2), @RED_DT DATETIME, @HH_ID VARCHAR(20), @CURRENCY nvarchar(50), @EXCHANGE_RATE decimal(18, 2), @DVDM_ID VARCHAR(20), @TAXES decimal(18, 2) FETCH NEXT FROM ListGoods INTO @PL_REQDT_ID,@GOODS_ID,@DESCRIPTION,@QUANTITY,@PRICE,@TOTAL_AMT, @NOTES,@RED_DT,@AMORT_MONTH, @TRADE_TYPE_ID, @SUP_ID,@HH_ID,@CURRENCY,@EXCHANGE_RATE,@TAXES,@DVDM_ID WHILE @@FETCH_STATUS = 0 BEGIN DECLARE @l_REQDT_ID VARCHAR(15) EXEC SYS_CodeMasters_Gen 'TR_REQUEST_DOC_DT', @l_REQDT_ID out IF @l_REQDT_ID='' OR @l_REQDT_ID IS NULL GOTO ABORT INSERT INTO dbo.TR_REQUEST_DOC_DT ( REQDT_ID, REQ_DOC_ID, PL_REQDT_ID, GD_ID, TRAN_TYPE_ID, SUP_ID, DESCRIPTION, QUANTITY, PRICE, PRICE_ETM, TOTAL_AMT, TOTAL_AMT_ETM, REQ_DT, AMORT_MONTH, NOTES, RECORD_STATUS, MAKER_ID, CREATE_DT, AUTH_STATUS, CHECKER_ID, APPROVE_DT, HANGHOA_ID, CURRENCY, EXCHANGE_RATE, TAXES, DVDM_ID ) VALUES ( @l_REQDT_ID, -- REQDT_ID - varchar(15) @l_REQ_ID, -- REQ_ID - varchar(15) @PL_REQDT_ID, -- PLAN_ID - varchar(15) @GOODS_ID, -- GOODS_ID - varchar(15) @TRADE_TYPE_ID, @SUP_ID, -- NAME - nvarchar(200) @DESCRIPTION, -- DESCRIPTION - nvarchar(500) @QUANTITY, -- QUANTITY - decimal(18, 0) @PRICE, @PRICE, -- PRICE - decimal(18, 0) @TOTAL_AMT, @TOTAL_AMT, @RED_DT, @AMORT_MONTH, @NOTES, -- TOTAL_AMT - decimal(18, 0) @p_RECORD_STATUS, -- RECORD_STATUS - varchar(1) @p_MAKER_ID, -- MAKER_ID - varchar(15) @p_CREATE_DT, -- CREATE_DT - datetime @p_AUTH_STATUS, -- AUTH_STATUS - varchar(50) @p_CHECKER_ID, -- CHECKER_ID - varchar(15) @p_APPROVE_DT, @HH_ID, @CURRENCY, @EXCHANGE_RATE, @TAXES, @DVDM_ID-- APPROVE_DT - datetime ) IF @@ERROR <> 0 GOTO ABORT1 -- next Group_Id FETCH NEXT FROM ListGoods INTO @PL_REQDT_ID,@GOODS_ID,@DESCRIPTION,@QUANTITY,@PRICE,@TOTAL_AMT, @NOTES,@RED_DT,@AMORT_MONTH, @TRADE_TYPE_ID, @SUP_ID,@HH_ID,@CURRENCY,@EXCHANGE_RATE,@TAXES,@DVDM_ID END CLOSE ListGoods DEALLOCATE ListGoods IF @@Error <> 0 GOTO ABORT --- UPDATE TR_REQUEST_DOC_DT SET TOTAL_AMT = PRICE*QUANTITY*EXCHANGE_RATE + TAXES*EXCHANGE_RATE WHERE REQ_DOC_ID =@l_REQ_ID UPDATE TR_REQUEST_DOC SET TOTAL_AMT =(SELECT SUM(TOTAL_AMT) FROM TR_REQUEST_DOC_DT WHERE REQ_DOC_ID =@l_REQ_ID) --- DECLARE @COST_ID VARCHAR(20) DECLARE lstCostCenter CURSOR FOR SELECT COST_ID FROM dbo.PL_REQUEST_COSTCENTER WHERE REQ_ID=@p_PL_REQ_ID GROUP BY COST_ID OPEN lstCostCenter FETCH NEXT FROM lstCostCenter INTO @COST_ID WHILE @@FETCH_STATUS=0 BEGIN DECLARE @l_REQ_COST_ID VARCHAR(15) EXEC SYS_CodeMasters_Gen 'TR_REQUEST_COSTCENTER', @l_REQ_COST_ID out IF @l_REQ_COST_ID='' OR @l_REQ_COST_ID IS NULL GOTO ABORT INSERT INTO dbo.TR_REQUEST_COSTCENTER ( REQ_COST_ID, COST_ID, REQ_ID, NOTES, AUTH_STATUS, MAKER_ID, CREATE_DT, CHECKER_ID, APPROVE_DT ) VALUES ( @l_REQ_COST_ID, -- REQ_COST_ID - varchar(15) @COST_ID, -- COST_ID - varchar(15) @l_REQ_ID, -- REQ_ID - varchar(15) N'', -- NOTES - nvarchar(500) '', -- AUTH_STATUS - varchar(1) @p_MAKER_ID, -- MAKER_ID - varchar(15) NULL, -- CREATE_DT - datetime '', -- CHECKER_ID - varchar(15) NULL -- APPROVE_DT - datetime ) FETCH NEXT FROM lstCostCenter INTO @COST_ID END CLOSE lstCostCenter DEALLOCATE lstCostCenter IF @@Error <> 0 GOTO ABORT INSERT INTO dbo.PL_REQUEST_PROCESS ( REQ_ID, PROCESS_ID, STATUS, ROLE_USER, BRANCH_ID, CHECKER_ID, APPROVE_DT, PARENT_PROCESS_ID, IS_LEAF, COST_ID, DVDM_ID, NOTES, IS_HAS_CHILD ) VALUES ( @l_REQ_ID, -- REQ_ID - varchar(15) 'NEW', -- PROCESS_ID - varchar(10) 'C', -- STATUS - varchar(5) '', -- ROLE_USER - varchar(50) '', -- BRANCH_ID - varchar(15) '', -- CHECKER_ID - varchar(15) NULL, -- APPROVE_DT - datetime '', -- PARENT_PROCESS_ID - varchar(10) 'N', -- IS_LEAF - varchar(1) '', -- COST_ID - varchar(15) '', -- DVDM_ID - varchar(15) N'Chờ trưởng đơn vị phê duyệt', -- NOTES - nvarchar(500) NULL -- IS_HAS_CHILD - bit ) COMMIT TRANSACTION SELECT '0' as Result, @l_REQ_ID REQ_ID, @p_REQ_CODE AS ErrorDesc RETURN '0' ABORT: BEGIN ROLLBACK TRANSACTION SELECT '-1' AS RESULT RETURN '-1' End ABORT1: BEGIN CLOSE ListGoods DEALLOCATE ListGoods ROLLBACK TRANSACTION SELECT '-1' AS RESULT RETURN '-1' End ¿ ALTER PROCEDURE [dbo].[TR_REQUEST_DOC_Upd] @p_REQ_ID varchar(15), @p_REQ_CODE nvarchar(100) = NULL, @p_REQ_NAME nvarchar(200) = NULL, @p_REQ_DT DATETIME = NULL, @p_REQ_TYPE int = NULL, @p_REQ_CONTENT NVARCHAR(1000)=NULL, @p_REQ_REASON NVARCHAR(500)=NULL, @p_PL_REQ_ID VARCHAR(15), @p_TOTAL_AMT decimal = NULL, @p_NOTES nvarchar(1000) = NULL, @p_RECORD_STATUS varchar(1) = NULL, @p_MAKER_ID varchar(12) = NULL, @p_CREATE_DT DATETIME = NULL, @p_AUTH_STATUS varchar(50) = NULL, @p_CHECKER_ID varchar(12) = NULL, @p_APPROVE_DT DATETIME = NULL, @p_BRANCH_DO VARCHAR(15)=NULL, @p_BRANCH_CREATE VARCHAR(15)=NULL, @p_DEP_CREATE VARCHAR(20)=NULL, @p_REQ_PARENT_ID VARCHAR(20)=NULL, @p_USER_REQUEST VARCHAR(15)=NULL, @p_SIGN_USER VARCHAR(15)=NULL, @p_ListGood XML AS IF(@p_REQ_CODE IS NULL OR @p_REQ_CODE ='') BEGIN SELECT 'REQ-00001' Result, '' REQ_ID, N'Mã phiếu yêu cầu bắc buộc nhập' ErrorDesc RETURN '0' END IF EXISTS(SELECT * FROM TR_REQUEST_DOC WHERE [REQ_CODE] = @p_REQ_CODE AND REQ_ID <> @p_REQ_ID) BEGIN SELECT ErrorCode Result, '' REQ_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = 'REQ-00001' RETURN '0' END DECLARE @sErrorCode VARCHAR(20) BEGIN TRANSACTION UPDATE dbo.TR_REQUEST_DOC SET REQ_CODE=@p_REQ_CODE,REQ_NAME=@p_REQ_NAME,REQ_DT=@p_REQ_DT,REQ_CONTENT=@p_REQ_CONTENT,REQ_REASON=@p_REQ_REASON, RECORD_STATUS=@p_RECORD_STATUS,PL_REQ_ID=@p_PL_REQ_ID,MAKER_ID=@p_MAKER_ID,TOTAL_AMT=@p_TOTAL_AMT,NOTES=@p_NOTES,CHECKER_ID=@p_CHECKER_ID,APPROVE_DT=@p_APPROVE_DT,USER_REQUEST=@p_USER_REQUEST,DEP_CREATE=@p_DEP_CREATE,REQ_PARENT_ID=@p_REQ_PARENT_ID, SIGN_USER =@p_SIGN_USER WHERE REQ_ID=@p_REQ_ID IF @@Error <> 0 GOTO ABORT DELETE FROM dbo.TR_REQUEST_DOC_DT WHERE REQ_DOC_ID=@p_REQ_ID DELETE FROM dbo.TR_REQUEST_COSTCENTER WHERE REQ_ID=@p_REQ_ID --Insert into TABLE PL_REQUEST_DOC_DT DECLARE @lstTRDT TABLE( REQDT_ID varchar(15) , PL_REQDT_ID varchar(15) , GOODS_ID varchar(15) , [DESCRIPTION] nvarchar(500), QUANTITY decimal(18,0) , PRICE decimal(18,2) , TOTAL_AMT decimal(18,2), NOTES nvarchar(1000), REQ_DT DATETIME, AMORT_MONTH DECIMAL(18,2), TRADE_TYPE_ID varchar(15), SUP_ID varchar(15), HH_ID VARCHAR(20), CURRENCY nvarchar(50), EXCHANGE_RATE decimal(18, 2), TAXES decimal(18, 2), DVDM_ID VARCHAR(20) ) Declare @hdoc INT Exec sp_xml_preparedocument @hdoc Output,@p_ListGood INSERT INTO @lstTRDT SELECT * FROM OPENXML(@hDoc,'/Root/ListGood',2) WITH ( REQDT_ID varchar(15) , PL_REQDT_ID varchar(15) , GOODS_ID varchar(15) , [DESCRIPTION] nvarchar(500), QUANTITY decimal(18,0) , PRICE decimal(18,2) , TOTAL_AMT decimal(18,2), NOTES nvarchar(1000), REQ_DT DATETIME, AMORT_MONTH DECIMAL(18,2), TRADE_TYPE_ID varchar(15), SUP_ID varchar(15), HH_ID VARCHAR(20), CURRENCY nvarchar(50), EXCHANGE_RATE decimal(18, 2), TAXES decimal(18, 2), DVDM_ID VARCHAR(20) ) DECLARE ListGoods CURSOR FOR SELECT * FROM @lstTRDT OPEN ListGoods Declare @REQDT_ID varchar(15) , @PL_REQDT_ID varchar(15), @SUP_ID varchar(15), @GOODS_ID varchar(15), @DESCRIPTION nvarchar(500), @QUANTITY decimal(18), @PRICE decimal(18), @TOTAL_AMT decimal(18), @NOTES nvarchar(1000), @TRADE_TYPE_ID varchar(15), @AMORT_MONTH DECIMAL(18,2), @RED_DT DATETIME, @HH_ID VARCHAR(20), @CURRENCY nvarchar(50), @EXCHANGE_RATE decimal(18, 2), @TAXES decimal(18, 2), @DVDM_ID VARCHAR(20) FETCH NEXT FROM ListGoods INTO @REQDT_ID, @PL_REQDT_ID,@GOODS_ID,@DESCRIPTION,@QUANTITY,@PRICE,@TOTAL_AMT, @NOTES,@RED_DT,@AMORT_MONTH, @TRADE_TYPE_ID, @SUP_ID,@HH_ID,@CURRENCY,@EXCHANGE_RATE,@TAXES,@DVDM_ID WHILE @@FETCH_STATUS = 0 BEGIN DECLARE @l_REQDT_ID VARCHAR(15) EXEC SYS_CodeMasters_Gen 'TR_REQUEST_DOC_DT', @l_REQDT_ID out IF @l_REQDT_ID='' OR @l_REQDT_ID IS NULL GOTO ABORT INSERT INTO dbo.TR_REQUEST_DOC_DT ( REQDT_ID, REQ_DOC_ID, PL_REQDT_ID, GD_ID, TRAN_TYPE_ID, SUP_ID, DESCRIPTION, QUANTITY, PRICE, PRICE_ETM, TOTAL_AMT, TOTAL_AMT_ETM, REQ_DT, AMORT_MONTH, NOTES, RECORD_STATUS, MAKER_ID, CREATE_DT, AUTH_STATUS, CHECKER_ID, APPROVE_DT, HANGHOA_ID, CURRENCY, EXCHANGE_RATE, TAXES, DVDM_ID ) VALUES ( @l_REQDT_ID, -- REQDT_ID - varchar(15) @p_REQ_ID, -- REQ_ID - varchar(15) @PL_REQDT_ID, -- PLAN_ID - varchar(15) @GOODS_ID, -- GOODS_ID - varchar(15) @TRADE_TYPE_ID, @SUP_ID, -- NAME - nvarchar(200) @DESCRIPTION, -- DESCRIPTION - nvarchar(500) @QUANTITY, -- QUANTITY - decimal(18, 0) @PRICE, @PRICE,-- PRICE - decimal(18, 0) @TOTAL_AMT, @TOTAL_AMT, @RED_DT, @AMORT_MONTH, @NOTES, -- TOTAL_AMT - decimal(18, 0) @p_RECORD_STATUS, -- RECORD_STATUS - varchar(1) @p_MAKER_ID, -- MAKER_ID - varchar(15) @p_CREATE_DT, -- CREATE_DT - datetime @p_AUTH_STATUS, -- AUTH_STATUS - varchar(50) @p_CHECKER_ID, -- CHECKER_ID - varchar(15) @p_APPROVE_DT, @HH_ID, @CURRENCY, @EXCHANGE_RATE, @TAXES, @DVDM_ID -- APPROVE_DT - datetime ) IF @@ERROR <> 0 GOTO ABORT1 -- next Group_Id FETCH NEXT FROM ListGoods INTO @REQDT_ID,@PL_REQDT_ID,@GOODS_ID,@DESCRIPTION,@QUANTITY,@PRICE,@TOTAL_AMT, @NOTES,@RED_DT,@AMORT_MONTH, @TRADE_TYPE_ID, @SUP_ID,@HH_ID,@CURRENCY,@EXCHANGE_RATE,@TAXES,@DVDM_ID END CLOSE ListGoods DEALLOCATE ListGoods IF @@Error <> 0 GOTO ABORT --- UPDATE TR_REQUEST_DOC_DT SET TOTAL_AMT = PRICE*QUANTITY*EXCHANGE_RATE + TAXES*EXCHANGE_RATE WHERE REQ_DOC_ID =@p_REQ_ID UPDATE TR_REQUEST_DOC SET TOTAL_AMT =(SELECT SUM(TOTAL_AMT) FROM TR_REQUEST_DOC_DT WHERE REQ_DOC_ID =@p_REQ_ID) --- DECLARE @COST_ID VARCHAR(20) DECLARE lstCostCenter CURSOR FOR SELECT COST_ID FROM dbo.PL_REQUEST_COSTCENTER WHERE REQ_ID=@p_PL_REQ_ID GROUP BY COST_ID OPEN lstCostCenter FETCH NEXT FROM lstCostCenter INTO @COST_ID WHILE @@FETCH_STATUS=0 BEGIN DECLARE @l_REQ_COST_ID VARCHAR(15) EXEC SYS_CodeMasters_Gen 'TR_REQUEST_COSTCENTER', @l_REQ_COST_ID out IF @l_REQ_COST_ID='' OR @l_REQ_COST_ID IS NULL GOTO ABORT INSERT INTO dbo.TR_REQUEST_COSTCENTER ( REQ_COST_ID, COST_ID, REQ_ID, NOTES, AUTH_STATUS, MAKER_ID, CREATE_DT, CHECKER_ID, APPROVE_DT ) VALUES ( @l_REQ_COST_ID, -- REQ_COST_ID - varchar(15) @COST_ID, -- COST_ID - varchar(15) @p_REQ_ID, -- REQ_ID - varchar(15) N'', -- NOTES - nvarchar(500) '', -- AUTH_STATUS - varchar(1) @p_MAKER_ID, -- MAKER_ID - varchar(15) NULL, -- CREATE_DT - datetime '', -- CHECKER_ID - varchar(15) NULL -- APPROVE_DT - datetime ) FETCH NEXT FROM lstCostCenter INTO @COST_ID END CLOSE lstCostCenter DEALLOCATE lstCostCenter IF @@Error <> 0 GOTO ABORT COMMIT TRANSACTION SELECT '0' as Result, @p_REQ_ID REQ_ID, '' ErrorDesc RETURN '0' ABORT: BEGIN ROLLBACK TRANSACTION SELECT '-1' AS RESULT RETURN '-1' End ABORT1: BEGIN CLOSE ListGoods DEALLOCATE ListGoods ROLLBACK TRANSACTION SELECT '-1' AS RESULT RETURN '-1' End