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
|
|