ALTER PROCEDURE [dbo].[CM_APPROVE_GROUP_Upd] @p_REQ_ID [varchar](50) NULL, @p_GROUP_APPROVES NVARCHAR(MAX)=NULL, @p_CURRENT_STEP INT, @p_DONE BIT OUT, @p_ERROR_MESS NVARCHAR(MAX) OUT AS --Validation is here DECLARE @ERRORSYS NVARCHAR(15) = '' IF( @ERRORSYS <> '' ) BEGIN SELECT @p_DONE = 0, @p_ERROR_MESS = @ERRORSYS RETURN '-1' END BEGIN TRANSACTION declare @approveTlb table(STEP_LEVEL INT,USERNAME nvarchar(50),PROCESS BIT) declare @listApproveTlb table(STEP_LEVEL INT,GROUP_APPROVE nvarchar(50)) --SLIP LIST insert into @listApproveTlb (STEP_LEVEL, GROUP_APPROVE) select row_number() over(order by (select 1)), [value] FROM WSISPLIT(@p_GROUP_APPROVES,',') WHERE [value] <>'' --DELETE @listApproveTlb WHERE GROUP_APPROVE=''OR GROUP_APPROVE IS NULL -- LIST TO TABLE insert into @approveTlb (STEP_LEVEL,USERNAME,PROCESS) select A.STEP_LEVEL,B.value ,0 from @listApproveTlb A CROSS APPLY (select [value] FROM WSISPLIT(A.GROUP_APPROVE,';') ) B DECLARE @TOT_APPORVE INT = (SELECT COUNT(*) from @approveTlb) DECLARE @index_approve INT,@l_APPROVE_GROUP_ID nvarchar(50) IF(EXISTS(SELECT * FROM CM_APPROVE_GROUP WHERE REQ_ID=@p_REQ_ID AND IS_REJECT=1)) BEGIN DELETE CM_APPROVE_GROUP WHERE REQ_ID=@p_REQ_ID EXEC SYS_CodeMasters_Gen_Mult 'CM_APPROVE_GROUP',@TOT_APPORVE, @l_APPROVE_GROUP_ID out, @index_approve out INSERT INTO [dbo].[CM_APPROVE_GROUP] ([APPROVE_GROUP_ID] ,[APPROVE_USERNAME] ,[STEP_LEVEL] ,PROCESS_STATUS ,DONE ,CREATE_DT ,[AUTH_STATUS] ,[REQ_ID] ,[TYPE]) SELECT ('CAG' + right('0000000000000'+convert(varchar(15),(@index_approve -1 + row_number() over(order by (select 1)))),10)), USERNAME ,STEP_LEVEL ,0 ,0 ,GETDATE() ,'U' ,@p_REQ_ID ,'APP' FROM @approveTlb END ELSE BEGIN declare @approveidTlb table(APPROVE_ID VARCHAR(20)) INSERT INTO @approveidTlb(APPROVE_ID) SELECT APPROVE_GROUP_ID FROM CM_APPROVE_GROUP WHERE REQ_ID=@p_REQ_ID AND( APPROVE_USERNAME NOT IN (SELECT USERNAME FROM @approveTlb A) ) AND STEP_LEVEL>=@p_CURRENT_STEP AND ( IS_AUT IS NULL) --SELECT * FROM @approveidTlb DELETE FROM CM_APPROVE_GROUP WHERE REQ_ID=@p_REQ_ID AND( APPROVE_GROUP_ID IN (SELECT APPROVE_ID FROM @approveidTlb) OR (APPROVE_ROOT_ID IN (SELECT APPROVE_ID FROM @approveidTlb)) ) AND DONE=0 --AND [TYPE]='APP' SET @TOT_APPORVE = (SELECT COUNT(*) from @approveTlb A WHERE USERNAME NOT IN(SELECT APPROVE_USERNAME FROM CM_APPROVE_GROUP G WHERE REQ_ID=@p_REQ_ID AND A.STEP_LEVEL=G.STEP_LEVEL)) UPDATE @approveTlb SET PROCESS=1 WHERE STEP_LEVEL=@p_CURRENT_STEP EXEC SYS_CodeMasters_Gen_Mult 'CM_APPROVE_GROUP',@TOT_APPORVE, @l_APPROVE_GROUP_ID out, @index_approve out INSERT INTO [dbo].[CM_APPROVE_GROUP] ([APPROVE_GROUP_ID] ,[APPROVE_USERNAME] ,[STEP_LEVEL] ,PROCESS_STATUS ,DONE ,[AUTH_STATUS] ,CREATE_DT ,[REQ_ID] ,[TYPE]) SELECT ('CAG' + right('0000000000000'+convert(varchar(15),(@index_approve -1 + row_number() over(order by (select 1)))),10)), USERNAME ,STEP_LEVEL ,PROCESS ,0 ,'U' ,GETDATE() ,@p_REQ_ID ,'APP' FROM @approveTlb WHERE USERNAME NOT IN(SELECT APPROVE_USERNAME FROM CM_APPROVE_GROUP WHERE REQ_ID=@p_REQ_ID) AND USERNAME<>'' --CHECK CURRRENT STEP IF(NOT EXISTS(SELECT * FROM CM_APPROVE_GROUP WHERE DONE=1)) BEGIN UPDATE CM_REQUEST_TEMPLATE SET CURRENT_STEP=1 WHERE REQUEST_TEMPLATE_ID=@p_REQ_ID UPDATE CM_APPROVE_GROUP SET PROCESS_STATUS=1 WHERE STEP_LEVEL=1 END END --INSERT CM_APPROVE_GROUP IF @@Error <> 0 GOTO ABORT -- COMMIT TRANSACTION SELECT @p_DONE = 1, @p_ERROR_MESS = @ERRORSYS RETURN '0' ABORT: BEGIN ROLLBACK TRANSACTION SELECT @p_DONE = 0, @p_ERROR_MESS = N'THÊM NHÓM DUYỆT THẤT BẠI' RETURN '-1' End