ALTER PROCEDURE [dbo].[PL_REQUEST_PROCESS_App] @p_REQ_ID VARCHAR(15) = NULL, @p_AUTH_STATUS VARCHAR(1) = NULL, @p_CHECKER_ID varchar(15) = NULL, @p_APPROVE_DT DATETIME = NULL, @p_ROLE_LOGIN VARCHAR(50) = NULL, @p_BRANCH_LOGIN VARCHAR(15), @p_PROCESS_DESC NVARCHAR(MAX) AS --SET @p_APPROVE_DT= CAST(@p_APPROVE_DT AS DATE) --Validation is here DECLARE @ERRORSYS NVARCHAR(15) = '' IF ( NOT EXISTS ( SELECT * FROM PL_REQUEST_DOC WHERE REQ_ID = @p_REQ_ID)) SET @ERRORSYS = 'REQ-00002' IF @ERRORSYS <> '' BEGIN ROLLBACK TRANSACTION SELECT ErrorCode Result, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS RETURN '0' END BEGIN TRANSACTION IF(EXISTS(SELECT * FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID =@p_REQ_ID AND STATUS_JOB ='R') OR (EXISTS(SELECT * FROM PL_REQUEST_DOC WHERE REQ_ID =@p_REQ_ID AND AUTH_STATUS ='R')) OR(EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE REQ_ID =@p_REQ_ID AND STATUS ='R'))) BEGIN ROLLBACK TRANSACTION SELECT '-1' as Result,N'Tờ trình chủ trương số: '+(SELECT REQ_CODE FROM PL_REQUEST_DOC WHERE REQ_ID =@p_REQ_ID)+N' đang bị từ chối. Vui lòng đợi nhân viên xử lý phiếu và gửi phê duyệt lại!' ErrorDesc RETURN '-1' END --UPDATE dbo.PL_REQUEST_TRANSFER SET AUTH_STATUS = @P_AUTH_STATUS, CHECKER_ID = @P_CHECKER_ID, APPROVE_DT = CONVERT(DATETIME,@P_APPROVE_DT,103) --WHERE REQ_DOC_ID = @p_REQ_ID AND FR_BRN_ID IN (SELECT BRANCH_ID FROM CM_BRANCH_GETCHILDID(@p_BRANCH_LOGIN)) DECLARE @Result VARCHAR(5), @PROCESS_CURR VARCHAR(10), @STEP_CURR INT, @STEP_NEXT INT, @PROCESS_NEXT VARCHAR(10), @ROLE_USER_NOTIFI VARCHAR(50), @DEP_ID VARCHAR(15), @IS_LEAF VARCHAR(1), @NOTES NVARCHAR(500), @IS_NEXT BIT,@ROLE_USER VARCHAR(20),@ROLE_NEXT VARCHAR(20),@LIMTT_MAX DECIMAL(18,2),@LIMIT_APP DECIMAL(18,2) ,@KHOI_ID_TF VARCHAR(20),@TOTAL_TRANSFER DECIMAL(18,2),@PROCESS_ID_NEXT VARCHAR(20), @IS_NEXT_CDT BIT, @TOTAL_AMT DECIMAL(18,2), @STEP_PARENT VARCHAR(20), @NOTES_CDT VARCHAR(20), @ROLE_CDT VARCHAR(20), @DVDM_CDT VARCHAR(20), @LIMIT_VALUE_CDT DECIMAL(18,2), @DVDM_ID_TT VARCHAR(20), @TOTAL_AMT_GD DECIMAL(18,2), @BRANCH_CREATE VARCHAR(15), @BRANCH_CREATE_TYPE VARCHAR(15), @DEP_CREATE VARCHAR(15), @BRANCH_PARENT VARCHAR(15) DECLARE @PROCESS_ID VARCHAR(5),@DVDM_NAME NVARCHAR(20),@ROLE_ID VARCHAR(20),@DVDM_ID_CDT VARCHAR(20) SET @DEP_ID =(SELECT SECUR_CODE FROM dbo.TL_USER WHERE TLNANME=@p_CHECKER_ID) SET @PROCESS_CURR= (SELECT TOP 1 PROCESS_ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND STATUS='C') SET @PROCESS_NEXT=(SELECT TOP 1 PROCESS_ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND PARENT_PROCESS_ID=@PROCESS_CURR) DECLARE @DATA_DVDM TABLE ( DVDM_ID VARCHAR(20), TOTAL_AMT DECIMAL(12, 0), IS_PTGD BIT ); SET @NOTES =(SELECT CONTENT FROM dbo.CM_ALLCODE WHERE (@PROCESS_CURR LIKE CDVAL + '%') AND CDNAME='PROCESS_ID' AND CDTYPE='REQ') DECLARE @DVDM_ID TABLE ( DVDM_ID VARCHAR(15) ) DECLARE @ERROR BIT ,@EROOR_DES NVARCHAR(500) IF(@PROCESS_CURR LIKE '%_DC') BEGIN SELECT @ERROR=ERROR, @EROOR_DES=ERROR_DES FROM dbo.FN_CHECK_VALIDATE_APP(@p_REQ_ID,'PDDC','PL_REQUEST_DOC',@p_CHECKER_ID,@PROCESS_CURR) IF(@ERROR=1) BEGIN ROLLBACK TRANSACTION; SELECT '-1' Result, @EROOR_DES ErrorDesc RETURN '0'; END END SELECT @ERROR=ERROR, @EROOR_DES=ERROR_DES FROM dbo.FN_CHECK_VALIDATE_APP(@p_REQ_ID,'PDTT','PL_REQUEST_DOC',@p_CHECKER_ID,@PROCESS_CURR) IF(@ERROR=1) BEGIN ROLLBACK TRANSACTION; SELECT '-1' Result, @EROOR_DES ErrorDesc RETURN '0'; END INSERT INTO @DATA_DVDM SELECT KHOI_ID, SUM(TOTAL_AMT) AS TOTAL_AMT,DM.IS_PTGD FROM dbo.PL_REQUEST_DOC_DT DT LEFT JOIN CM_DVDM DM ON DM.DVDM_ID=DT.KHOI_ID AND DM.IS_KHOI=1 WHERE REQ_ID = @p_REQ_ID AND DT.KHOI_ID IS NOT NULL AND DT.KHOI_ID <>'' GROUP BY KHOI_ID,DM.IS_PTGD; SET @DVDM_CDT = (SELECT DVDM_ID FROM dbo.TL_SYSROLE_LIMIT WHERE LIMIT_TYPE='CDT') INSERT INTO @DVDM_ID SELECT DVDM_ID FROM dbo.PL_COSTCENTER WHERE COST_ID IN (SELECT COST_ID FROM dbo.PL_COSTCENTER_DT WHERE DEP_ID=@DEP_ID AND BRANCH_ID=@p_BRANCH_LOGIN) GROUP BY DVDM_ID UPDATE dbo.PL_REQUEST_PROCESS SET [STATUS]='P',NOTES=@NOTES+N' đã phê duyệt',CHECKER_ID=@p_CHECKER_ID,APPROVE_DT=@p_APPROVE_DT WHERE PROCESS_ID=@PROCESS_CURR AND REQ_ID=@p_REQ_ID AND (ROLE_USER=@p_ROLE_LOGIN OR ROLE_USER IN (SELECT ROLE_NEW FROM dbo.TL_SYS_ROLE_MAPPING WHERE ROLE_OLD=@p_ROLE_LOGIN) )AND ( DVDM_ID IN (SELECT DVDM_ID FROM @DVDM_ID) OR DVDM_ID ='' OR DVDM_ID IS NULL) IF(@PROCESS_CURR <>'DVCM' AND @PROCESS_CURR <>'DVDM' AND @PROCESS_CURR <>'TC') BEGIN UPDATE dbo.PL_REQUEST_DOC_DT SET CHECKER_ID=@p_CHECKER_ID,APPROVE_DT=@p_APPROVE_DT WHERE REQ_ID=@p_REQ_ID AND ( KHOI_ID IN (SELECT DVDM_ID FROM @DVDM_ID) OR @p_ROLE_LOGIN='TGD' OR @p_ROLE_LOGIN='HDQT' OR @p_ROLE_LOGIN='GDDV' OR @p_ROLE_LOGIN IN (SELECT ROLE_OLD FROM dbo.TL_SYS_ROLE_MAPPING WHERE ROLE_NEW='GDDV' ) ) END IF(@PROCESS_CURR LIKE '%_DC') BEGIN UPDATE dbo.PL_REQUEST_TRANSFER SET CHECKER_ID=@p_CHECKER_ID,APPROVE_DT=@p_APPROVE_DT WHERE REQ_DOC_ID=@p_REQ_ID AND ( FR_KHOI_ID IN (SELECT DVDM_ID FROM @DVDM_ID) OR @p_ROLE_LOGIN='TGD' OR @p_ROLE_LOGIN='HDQT' OR @p_ROLE_LOGIN IN (SELECT ROLE_OLD FROM dbo.TL_SYS_ROLE_MAPPING WHERE ROLE_NEW='GDDV' ) ) END INSERT INTO dbo.PL_PROCESS ( REQ_ID, PROCESS_ID, CHECKER_ID, APPROVE_DT, PROCESS_DESC,NOTES ) VALUES ( @p_REQ_ID, -- REQ_ID - varchar(15) @PROCESS_CURR, -- PROCESS_ID - varchar(10) @p_CHECKER_ID, -- CHECKER_ID - varchar(15) GETDATE(), -- APPROVE_DT - datetime @p_PROCESS_DESC ,@NOTES+N' đã phê duyệt' -- PROCESS_DESC - nvarchar(1000) ) SELECT @BRANCH_CREATE=BRANCH_CREATE,@DEP_CREATE=DEP_CREATE FROM dbo.PL_REQUEST_DOC WHERE REQ_ID=@p_REQ_ID SET @BRANCH_CREATE_TYPE=(SELECT BRANCH_TYPE FROM dbo.CM_BRANCH WHERE BRANCH_ID=@BRANCH_CREATE) SET @Result='1' IF(NOT EXISTS(SELECT PROCESS_ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID=@PROCESS_CURR AND [STATUS] <> 'P')) BEGIN IF(@PROCESS_CURR LIKE '%_DC' AND @PROCESS_NEXT NOT LIKE '%_DC' AND @PROCESS_NEXT NOT LIKE 'TC') BEGIN SET @ROLE_USER=(SELECT TOP 1 ROLE_USER FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID=@PROCESS_CURR) IF(@ROLE_USER <> 'TGD') BEGIN SET @KHOI_ID_TF=(SELECT TOP 1 FR_KHOI_ID FROM dbo.PL_REQUEST_TRANSFER WHERE REQ_DOC_ID=@p_REQ_ID) SET @LIMIT_APP=(SELECT ISNULL(MAX_AMT,0)- ISNULL(TOTAL_APP_AMT,0) AS LIMIT_APP FROM dbo.LIMIT_ACCUMULATE WHERE ROLE_ID=@ROLE_USER AND DVDM_ID=@KHOI_ID_TF) SET @TOTAL_TRANSFER=(SELECT SUM(TOTAL_AMT) AS TOTAL FROM dbo.PL_REQUEST_TRANSFER WHERE REQ_DOC_ID=@p_REQ_ID) IF(@TOTAL_TRANSFER>@LIMIT_APP) BEGIN DECLARE @LEVEL INT SELECT @LEVEL=BRANCH_ID FROM dbo.TL_SYSROLE_LIMIT WHERE LIMIT_TYPE='DCNS' AND ROLE_ID =@ROLE_USER SET @LEVEL=@LEVEL+1 SELECT TOP 1 @ROLE_NEXT= ROLE_ID,@PROCESS_ID_NEXT=NOTES FROM dbo.TL_SYSROLE_LIMIT WHERE LIMIT_TYPE='DCNS' AND BRANCH_ID=@LEVEL IF(@ROLE_NEXT='PTGD' AND (EXISTS(SELECT * FROM dbo.CM_DVDM WHERE IS_KHOI=1 AND DVDM_ID=@KHOI_ID_TF AND IS_PTGD=0) OR EXISTS (SELECT DVDM_ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND ROLE_USER='PTGD' AND DVDM_ID=@KHOI_ID_TF))) BEGIN SELECT TOP 1 @ROLE_NEXT= ROLE_ID,@PROCESS_ID_NEXT=NOTES FROM dbo.TL_SYSROLE_LIMIT WHERE LIMIT_TYPE='DCNS' AND BRANCH_ID=(@LEVEL + 1) END SET @NOTES =(SELECT CONTENT FROM dbo.CM_ALLCODE WHERE (@PROCESS_ID_NEXT LIKE CDVAL + '%') AND CDNAME='PROCESS_ID' AND CDTYPE='REQ') 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, DEP_ID ) VALUES ( @p_REQ_ID, -- REQ_ID - varchar(15) @PROCESS_ID_NEXT, -- PROCESS_ID - varchar(10) 'U', -- STATUS - varchar(5) @ROLE_NEXT, -- ROLE_USER - varchar(50) '', -- BRANCH_ID - varchar(15) '', -- CHECKER_ID - varchar(15) NULL, -- APPROVE_DT - datetime @PROCESS_CURR, -- PARENT_PROCESS_ID - varchar(10) 'N', -- IS_LEAF - varchar(1) '', -- COST_ID - varchar(15) @KHOI_ID_TF, -- DVDM_ID - varchar(15) N'Chờ '+@NOTES+' phê duyệt', -- NOTES - nvarchar(500) 0, -- IS_HAS_CHILD - bit '' -- DEP_ID - varchar(20) ) UPDATE dbo.PL_REQUEST_PROCESS SET PARENT_PROCESS_ID=@PROCESS_ID_NEXT WHERE PROCESS_ID=@PROCESS_NEXT SET @PROCESS_NEXT=@PROCESS_ID_NEXT END ELSE BEGIN SET @STEP_PARENT=@PROCESS_CURR UPDATE dbo.LIMIT_ACCUMULATE SET TOTAL_APP_AMT = ISNULL(TOTAL_APP_AMT,0) + @TOTAL_TRANSFER WHERE ROLE_ID=@ROLE_USER AND DVDM_ID=@KHOI_ID_TF -- INSERT PL_TRADE_DETAIL --- BEGIN IF(@BRANCH_CREATE_TYPE='PGD') BEGIN SET @BRANCH_PARENT=(SELECT FATHER_ID FROM dbo.CM_BRANCH WHERE BRANCH_ID=@BRANCH_CREATE) IF(NOT EXISTS(SELECT * FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND BRANCH_ID=@BRANCH_PARENT AND (DEP_ID IS NULL OR DEP_ID=''))) BEGIN INSERT INTO dbo.PL_REQUEST_PROCESS ( REQ_ID, PROCESS_ID, STATUS, ROLE_USER, BRANCH_ID, DEP_ID, CHECKER_ID, APPROVE_DT, PARENT_PROCESS_ID, IS_LEAF, NOTES ) VALUES ( @p_REQ_ID, -- REQ_ID - varchar(15) 'DVC', -- PROCESS_ID - varchar(10) 'U', -- STATUS - varchar(5) 'GDDV', -- ROLE_USER - varchar(50) @BRANCH_PARENT, NULL, -- BRANCH_ID - varchar(15) NULL, -- CHECKER_ID - varchar(15) NULL , -- APPROVE_DT - datetime @STEP_PARENT, 'N', N'Trưởng đơn vị phê duyệt'); --SET @STEP_CURR = 'DVC'; SET @STEP_PARENT = 'DVC'; END END ELSE IF(NOT EXISTS(SELECT * FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND ROLE_USER='GDDV' AND (( BRANCH_ID=@BRANCH_CREATE AND ((DEP_ID =@DEP_CREATE) OR ((@DEP_CREATE IS NULL OR @DEP_CREATE='') AND (DEP_ID IS NULL OR DEP_ID=''))) ) OR EXISTS(SELECT PC.COST_ID FROM dbo.PL_COSTCENTER PC LEFT JOIN dbo.PL_COSTCENTER_DT PCDT ON PCDT.COST_ID = PC.COST_ID WHERE PL_REQUEST_PROCESS.DVDM_ID=PC.DVDM_ID AND DEP_ID=@DEP_CREATE AND BRANCH_ID=@BRANCH_CREATE) ) )) BEGIN INSERT INTO dbo.PL_REQUEST_PROCESS ( REQ_ID, PROCESS_ID, STATUS, ROLE_USER, BRANCH_ID, DEP_ID, CHECKER_ID, APPROVE_DT, PARENT_PROCESS_ID, IS_LEAF, NOTES ) VALUES ( @p_REQ_ID, -- REQ_ID - varchar(15) 'DVC', -- PROCESS_ID - varchar(10) 'U', -- STATUS - varchar(5) 'GDDV', -- ROLE_USER - varchar(50) @BRANCH_CREATE, @DEP_CREATE, -- BRANCH_ID - varchar(15) NULL, -- CHECKER_ID - varchar(15) NULL , -- APPROVE_DT - datetime @STEP_PARENT, 'N', N'Trưởng đơn vị phê duyệt'); --SET @STEP_CURR = 'DVC'; SET @STEP_PARENT = 'DVC'; END SET @IS_NEXT= (SELECT dbo.FN_CHECK_LIMIT_PL_REQ(@p_REQ_ID,'GDDV')) SET @IS_NEXT_CDT=(SELECT dbo.FN_CHECK_LIMIT_PL_REQ_CDT(@p_REQ_ID,'GDDV')) SET @TOTAL_AMT = (SELECT TOTAL_AMT FROM dbo.PL_REQUEST_DOC WHERE REQ_ID=@p_REQ_ID) IF((@IS_NEXT=1 OR @IS_NEXT_CDT=1 )AND NOT EXISTS (SELECT * FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND ROLE_USER='TGD')) BEGIN IF(EXISTS(SELECT * FROM PL_REQUEST_DOC_DT WHERE REQ_ID =@p_REQ_ID AND KHOI_ID IS NOT NULL AND KHOI_ID <>'') OR @IS_NEXT_CDT=1) BEGIN DECLARE lstCostCenter CURSOR FOR SELECT DVDM_ID FROM @DATA_DVDM WHERE NOT EXISTS( SELECT * FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND PL_REQUEST_PROCESS.DVDM_ID=[@DATA_DVDM].DVDM_ID AND ROLE_USER='GDK' ) GROUP BY DVDM_ID OPEN lstCostCenter FETCH NEXT FROM lstCostCenter INTO @DVDM_ID_TT WHILE @@FETCH_STATUS = 0 BEGIN 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 ( @p_REQ_ID, -- REQ_ID - varchar(15) 'GDK_TT', -- PROCESS_ID - varchar(10) 'U', -- STATUS - varchar(5) 'GDK', -- ROLE_USER - varchar(50) '', -- BRANCH_ID - varchar(15) '', -- CHECKER_ID - varchar(15) NULL, -- APPROVE_DT - datetime @STEP_PARENT, -- PARENT_PROCESS_ID - varchar(10) 'N', -- IS_LEAF - varchar(1) '', -- COST_ID - varchar(15) @DVDM_ID_TT , N'Chờ giám đốc khối xác nhận', 0 -- DVDM_ID - varchar(15) ) SET @STEP_PARENT='GDK_TT' FETCH NEXT FROM lstCostCenter INTO @DVDM_ID_TT END CLOSE lstCostCenter DEALLOCATE lstCostCenter IF(@IS_NEXT_CDT=1 AND NOT EXISTS(SELECT ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND ROLE_USER='GDK' AND DVDM_ID=@DVDM_CDT)) BEGIN 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 ( @p_REQ_ID, -- REQ_ID - varchar(15) 'GDK_TT', -- PROCESS_ID - varchar(10) 'U', -- STATUS - varchar(5) 'GDK', -- ROLE_USER - varchar(50) '', -- BRANCH_ID - varchar(15) '', -- CHECKER_ID - varchar(15) NULL, -- APPROVE_DT - datetime @STEP_PARENT, -- PARENT_PROCESS_ID - varchar(10) 'N', -- IS_LEAF - varchar(1) '', -- COST_ID - varchar(15) @DVDM_CDT , N'Chờ giám đốc khối xác nhận', 0 -- DVDM_ID - varchar(15) ) SET @STEP_PARENT='GDK_TT' END UPDATE dbo.PL_REQUEST_PROCESS SET ROLE_USER='PTGD' WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID='GDK_TT' AND NOT EXISTS(SELECT DVDM_ID FROM dbo.CM_DVDM WHERE CM_DVDM.DVDM_ID=dbo.PL_REQUEST_PROCESS.DVDM_ID AND IS_GDK=1) SET @IS_NEXT= (SELECT dbo.FN_CHECK_LIMIT_PL_REQ(@p_REQ_ID,'GDK')) SET @IS_NEXT_CDT=(SELECT dbo.FN_CHECK_LIMIT_PL_REQ_CDT(@p_REQ_ID,'GDK')) IF(@IS_NEXT=1 OR @IS_NEXT_CDT=1) BEGIN IF(EXISTS(SELECT DVDM_ID FROM @DATA_DVDM WHERE IS_PTGD=1 AND NOT EXISTS( SELECT * FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND PL_REQUEST_PROCESS.DVDM_ID=[@DATA_DVDM].DVDM_ID AND ROLE_USER='PTGD' ) ) OR @IS_NEXT_CDT=1) BEGIN DECLARE lstCostCenter CURSOR FOR SELECT DVDM_ID FROM @DATA_DVDM DT WHERE IS_PTGD=1 AND NOT EXISTS( SELECT * FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND PL_REQUEST_PROCESS.DVDM_ID=DT.DVDM_ID AND ROLE_USER='PTGD' ) GROUP BY DVDM_ID OPEN lstCostCenter FETCH NEXT FROM lstCostCenter INTO @DVDM_ID_TT WHILE @@FETCH_STATUS = 0 BEGIN 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 ( @p_REQ_ID, -- REQ_ID - varchar(15) 'PTGDK_TT', -- PROCESS_ID - varchar(10) 'U', -- STATUS - varchar(5) 'PTGD', -- ROLE_USER - varchar(50) '', -- BRANCH_ID - varchar(15) '', -- CHECKER_ID - varchar(15) NULL, -- APPROVE_DT - datetime @STEP_PARENT, -- PARENT_PROCESS_ID - varchar(10) 'N', -- IS_LEAF - varchar(1) '', -- COST_ID - varchar(15) @DVDM_ID_TT , N'Chờ phó tổng giám đốc khối xác nhận', 0 -- DVDM_ID - varchar(15) ) SET @STEP_PARENT='PTGDK_TT' FETCH NEXT FROM lstCostCenter INTO @DVDM_ID_TT END CLOSE lstCostCenter DEALLOCATE lstCostCenter IF(@IS_NEXT_CDT=1 AND NOT EXISTS(SELECT ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND ROLE_USER='PTGD' AND DVDM_ID=@DVDM_CDT)) BEGIN 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 ( @p_REQ_ID, -- REQ_ID - varchar(15) 'PTGDK_TT', -- PROCESS_ID - varchar(10) 'U', -- STATUS - varchar(5) 'PTGD', -- ROLE_USER - varchar(50) '', -- BRANCH_ID - varchar(15) '', -- CHECKER_ID - varchar(15) NULL, -- APPROVE_DT - datetime @STEP_PARENT, -- PARENT_PROCESS_ID - varchar(10) 'N', -- IS_LEAF - varchar(1) '', -- COST_ID - varchar(15) @DVDM_CDT , N'Chờ phó tổng giám đốc khối xác nhận', 0 -- DVDM_ID - varchar(15) ) SET @STEP_PARENT='PTGDK_TT' END SET @IS_NEXT= (SELECT dbo.FN_CHECK_LIMIT_PL_REQ(@p_REQ_ID,'PTGD')) SET @IS_NEXT_CDT=(SELECT dbo.FN_CHECK_LIMIT_PL_REQ_CDT(@p_REQ_ID,'PTGD')) END IF(EXISTS(SELECT KHOI_ID,TOTAL_AMT FROM dbo.PL_REQUEST_DOC_DT DT LEFT JOIN dbo.CM_DVDM DM ON DM.DVDM_ID=DT.KHOI_ID AND DM.IS_KHOI=1 WHERE REQ_ID=@p_REQ_ID AND DM.IS_PTGD=0 ) AND (SELECT dbo.FN_CHECK_LIMIT_PL_REQ(@p_REQ_ID,'GDK'))=1 ) BEGIN SET @IS_NEXT=1 END IF(@IS_NEXT=1 OR @IS_NEXT_CDT=1) BEGIN 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 ( @p_REQ_ID, -- REQ_ID - varchar(15) 'TGD', -- PROCESS_ID - varchar(10) 'U', -- STATUS - varchar(5) 'TGD', -- ROLE_USER - varchar(50) '', -- BRANCH_ID - varchar(15) '', -- CHECKER_ID - varchar(15) NULL, -- APPROVE_DT - datetime @STEP_PARENT, -- PARENT_PROCESS_ID - varchar(10) 'N', -- IS_LEAF - varchar(1) '', -- COST_ID - varchar(15) '' , N'Chờ tổng giám đốc xác nhận', 0 -- DVDM_ID - varchar(15) ) SET @STEP_PARENT='TGD' IF((SELECT SUM(TOTAL_AMT) FROM dbo.PL_REQUEST_DOC_DT WHERE REQ_ID=@p_REQ_ID) > (SELECT LIMIT_VALUE FROM dbo.TL_SYSROLE_LIMIT WHERE LIMIT_TYPE='TCTT-HDQT')) BEGIN 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 ( @p_REQ_ID, -- REQ_ID - varchar(15) 'HDQT', -- PROCESS_ID - varchar(10) 'U', -- STATUS - varchar(5) 'HDQT', -- ROLE_USER - varchar(50) '', -- BRANCH_ID - varchar(15) '', -- CHECKER_ID - varchar(15) NULL, -- APPROVE_DT - datetime @STEP_PARENT, -- PARENT_PROCESS_ID - varchar(10) 'N', -- IS_LEAF - varchar(1) '', -- COST_ID - varchar(15) '', N'Chờ HDQT xác nhận', 0 -- DVDM_ID - varchar(15) ); SET @STEP_PARENT = 'HDQT'; END END --ELSE --BEGIN --END END END END END UPDATE dbo.PL_REQUEST_PROCESS SET PARENT_PROCESS_ID=@STEP_PARENT WHERE PROCESS_ID=@PROCESS_NEXT SET @PROCESS_NEXT=(SELECT TOP 1 PROCESS_ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND PARENT_PROCESS_ID=@PROCESS_CURR) END END ELSE BEGIN --- BO SUNG VAO BANG PL_TRADE_DETAIL SET @STEP_PARENT='TGD' IF((SELECT SUM(TOTAL_AMT) FROM dbo.PL_REQUEST_DOC_DT WHERE REQ_ID=@p_REQ_ID) > (SELECT LIMIT_VALUE FROM dbo.TL_SYSROLE_LIMIT WHERE LIMIT_TYPE='TCTT-HDQT')) BEGIN 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 ( @p_REQ_ID, -- REQ_ID - varchar(15) 'HDQT', -- PROCESS_ID - varchar(10) 'U', -- STATUS - varchar(5) 'HDQT', -- ROLE_USER - varchar(50) '', -- BRANCH_ID - varchar(15) '', -- CHECKER_ID - varchar(15) NULL, -- APPROVE_DT - datetime @STEP_PARENT, -- PARENT_PROCESS_ID - varchar(10) 'N', -- IS_LEAF - varchar(1) '', -- COST_ID - varchar(15) '', N'Chờ HDQT xác nhận', 0 -- DVDM_ID - varchar(15) ); SET @STEP_PARENT = 'HDQT'; UPDATE dbo.PL_REQUEST_PROCESS SET PARENT_PROCESS_ID=@STEP_PARENT WHERE PROCESS_ID=@PROCESS_NEXT SET @PROCESS_NEXT=(SELECT TOP 1 PROCESS_ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND PARENT_PROCESS_ID=@PROCESS_CURR) END --ELSE --BEGIN --END END END UPDATE dbo.PL_REQUEST_PROCESS SET [STATUS]='C' WHERE PARENT_PROCESS_ID=@PROCESS_CURR AND REQ_ID=@p_REQ_ID UPDATE dbo.PL_REQUEST_DOC SET PROCESS_ID=@PROCESS_NEXT WHERE REQ_ID=@p_REQ_ID SET @IS_LEAF=(SELECT TOP 1 IS_LEAF FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND PARENT_PROCESS_ID=@PROCESS_CURR) IF(@IS_LEAF='Y') BEGIN EXEC dbo.PL_REQ_DOC_UPDATE_AFTER_APPROVE @p_REQ_ID = @p_REQ_ID EXEC dbo.PL_REQ_DOC_Ins_To_TR_REQ_DOC @p_PL_REQ_ID = @p_REQ_ID SET @Result='0' END END IF @@Error <> 0 GOTO ABORT COMMIT TRANSACTION SELECT @Result as Result , @ROLE_USER_NOTIFI AS ROLE_NOTIFI, '' ErrorDesc RETURN '0' ABORT: BEGIN ROLLBACK TRANSACTION SELECT '-1' as Result, '' ROLE_NOTIFI , ERROR_MESSAGE() ErrorDesc RETURN '-1' End