Project

General

Profile

CM_APPROVE_GROUP_Upd.txt

Luc Tran Van, 03/07/2023 09:06 AM

 
1

    
2

    
3
ALTER PROCEDURE [dbo].[CM_APPROVE_GROUP_Upd]
4
	@p_REQ_ID [varchar](50) NULL,
5
	@p_GROUP_APPROVES NVARCHAR(MAX)=NULL,
6
	@p_CURRENT_STEP INT,
7
	@p_DONE BIT OUT,
8
	@p_ERROR_MESS NVARCHAR(MAX) OUT
9
AS
10
--Validation is here
11

    
12
	DECLARE @ERRORSYS NVARCHAR(15) = '' 
13

    
14
	IF( @ERRORSYS <> '' )
15
	BEGIN
16
		SELECT @p_DONE = 0, @p_ERROR_MESS =  @ERRORSYS
17
		RETURN '-1'
18
	END
19

    
20
BEGIN TRANSACTION
21
	declare @approveTlb table(STEP_LEVEL INT,USERNAME nvarchar(50),PROCESS BIT)
22
	declare @listApproveTlb table(STEP_LEVEL INT,GROUP_APPROVE nvarchar(max))
23

    
24
	--SLIP LIST
25
		insert into @listApproveTlb (STEP_LEVEL, GROUP_APPROVE)
26
		select  row_number() over(order by (select 1)), [value]
27
		FROM WSISPLIT(@p_GROUP_APPROVES,',')
28
		WHERE [value] <>'' 
29
		--DELETE @listApproveTlb WHERE GROUP_APPROVE=''OR GROUP_APPROVE IS NULL
30

    
31

    
32
	--	LIST TO TABLE
33
		insert into @approveTlb (STEP_LEVEL,USERNAME,PROCESS)
34
		select A.STEP_LEVEL,B.value	,0
35
		from @listApproveTlb A
36
		CROSS APPLY (select [value] FROM WSISPLIT(A.GROUP_APPROVE,';') ) B
37
		
38
	DECLARE @TOT_APPORVE INT = (SELECT COUNT(*) from @approveTlb)
39
	DECLARE @index_approve INT,@l_APPROVE_GROUP_ID nvarchar(50)
40

    
41
	IF(EXISTS(SELECT * FROM CM_APPROVE_GROUP WHERE REQ_ID=@p_REQ_ID AND IS_REJECT=1))
42
	BEGIN
43
		DELETE CM_APPROVE_GROUP WHERE REQ_ID=@p_REQ_ID
44
		EXEC SYS_CodeMasters_Gen_Mult 'CM_APPROVE_GROUP',@TOT_APPORVE, @l_APPROVE_GROUP_ID out, @index_approve out
45
		INSERT INTO [dbo].[CM_APPROVE_GROUP]
46
			   ([APPROVE_GROUP_ID]
47
			   ,[APPROVE_USERNAME]
48
			   ,[STEP_LEVEL]
49
			   ,PROCESS_STATUS
50
			   ,DONE
51
			   ,CREATE_DT
52
			   ,[AUTH_STATUS]
53
			   ,[REQ_ID]
54
			   ,[TYPE])
55
		SELECT ('CAG' + right('0000000000000'+convert(varchar(15),(@index_approve -1 + row_number() over(order by (select 1)))),10)),
56
			USERNAME
57
			,STEP_LEVEL
58
			,0
59
			,0
60
			,GETDATE()
61
			,'U'
62
			,@p_REQ_ID
63
			,'APP'
64
		FROM @approveTlb
65
	END
66
	ELSE
67
	BEGIN
68
		declare @approveidTlb table(APPROVE_ID VARCHAR(20))
69
		INSERT INTO @approveidTlb(APPROVE_ID)
70
		SELECT APPROVE_GROUP_ID FROM CM_APPROVE_GROUP WHERE REQ_ID=@p_REQ_ID
71
		AND( APPROVE_USERNAME NOT IN (SELECT USERNAME FROM @approveTlb A) )
72
		AND STEP_LEVEL>=@p_CURRENT_STEP
73
		AND ( IS_AUT IS NULL)
74
		--SELECT * FROM @approveidTlb
75
		DELETE FROM CM_APPROVE_GROUP WHERE REQ_ID=@p_REQ_ID
76
		AND( APPROVE_GROUP_ID  IN (SELECT APPROVE_ID FROM @approveidTlb)
77
		OR (APPROVE_ROOT_ID  IN (SELECT APPROVE_ID FROM @approveidTlb))
78
		)
79
		AND DONE=0
80
		--AND [TYPE]='APP'
81
		
82

    
83
		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))
84
		UPDATE @approveTlb SET PROCESS=1
85
		WHERE STEP_LEVEL=@p_CURRENT_STEP
86
		
87
		EXEC SYS_CodeMasters_Gen_Mult 'CM_APPROVE_GROUP',@TOT_APPORVE, @l_APPROVE_GROUP_ID out, @index_approve out
88
		
89
		INSERT INTO [dbo].[CM_APPROVE_GROUP]
90
			   ([APPROVE_GROUP_ID]
91
			   ,[APPROVE_USERNAME]
92
			   ,[STEP_LEVEL]
93
			   ,PROCESS_STATUS
94
			   ,DONE
95
			   ,[AUTH_STATUS]
96
			   ,CREATE_DT
97
			   ,[REQ_ID]
98
			   ,[TYPE])
99
		SELECT ('CAG' + right('0000000000000'+convert(varchar(15),(@index_approve -1 + row_number() over(order by (select 1)))),10)),
100
			USERNAME
101
			,STEP_LEVEL
102
			,PROCESS
103
			,0
104
			,'U'
105
			,GETDATE()
106
			,@p_REQ_ID
107
			,'APP'
108
		FROM @approveTlb
109
		WHERE USERNAME NOT IN(SELECT APPROVE_USERNAME FROM CM_APPROVE_GROUP WHERE REQ_ID=@p_REQ_ID) AND USERNAME<>''
110
		--CHECK CURRRENT STEP
111
		IF(NOT EXISTS(SELECT * FROM CM_APPROVE_GROUP WHERE DONE=1))
112
		BEGIN
113
			UPDATE CM_REQUEST_TEMPLATE SET CURRENT_STEP=1 WHERE REQUEST_TEMPLATE_ID=@p_REQ_ID
114
			UPDATE CM_APPROVE_GROUP SET PROCESS_STATUS=1 WHERE STEP_LEVEL=1
115
		END
116
	END
117
	--INSERT CM_APPROVE_GROUP
118
	
119
	IF @@Error <> 0 GOTO ABORT
120
	--
121

    
122

    
123
COMMIT TRANSACTION
124
SELECT @p_DONE = 1, @p_ERROR_MESS =  @ERRORSYS
125
RETURN '0'
126
ABORT:
127
BEGIN
128
		ROLLBACK TRANSACTION
129
		SELECT @p_DONE = 0, @p_ERROR_MESS =  N'THÊM NHÓM DUYỆT THẤT BẠI'
130
		RETURN '-1'
131
End
132