Project

General

Profile

PL_REQ_PROCESS_CHILD_APP.txt

Truong Nguyen Vu, 03/18/2021 02:19 PM

 
1

    
2

    
3

    
4

    
5
ALTER PROCEDURE [dbo].[PL_REQ_PROCESS_CHILD_App]
6
@p_REQ_ID VARCHAR(20),
7
@p_PROCESS_ID VARCHAR(20),
8
@p_TLNAME VARCHAR(20),
9
@p_MAKER_ID VARCHAR(20),
10
@p_TYPE_JOB VARCHAR(20),
11
@p_PROCESS_DES NVARCHAR(MAX),
12
@p_REF_ID INT
13
AS
14
BEGIN TRANSACTION
15
---LUCTV KIEM TRA NEU TO TRINH DANG BI TRA VE THI KHONG DUOC PHEP DUYET
16
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'))
17
OR(EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE REQ_ID =@p_REQ_ID AND STATUS ='R')))
18
BEGIN
19
	ROLLBACK TRANSACTION
20
	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
21
	RETURN -1
22
END
23

    
24
IF(EXISTS(SELECT REQ_ID FROM dbo.PL_REQUEST_PROCESS  WHERE REQ_ID=@p_REQ_ID AND IS_HAS_CHILD=1 AND STATUS='C' ))
25
BEGIN
26
	IF(EXISTS(
27
	SELECT PRC.ID FROM dbo.PL_REQUEST_PROCESS PR 
28
	LEFT JOIN dbo.PL_REQUEST_PROCESS_CHILD PRC ON PRC.PROCESS_ID=PR.ID
29
	WHERE  PR.REQ_ID=@p_REQ_ID AND PRC.TYPE_JOB='XL' AND PRC.STATUS_JOB='C'))
30
	BEGIN
31
		ROLLBACK TRANSACTION  
32
		SELECT -1 Result, N'Tờ trình chủ trương số: '+(SELECT REQ_CODE FROM dbo.PL_REQUEST_DOC WHERE REQ_ID=@p_REQ_ID) +N' chưa được xử lý. Vui lòng đợi nhân viên xử lý phiếu và gửi phê duyệt!' ErrorDesc  
33
		RETURN -1
34
	END
35

    
36
	IF(NOT EXISTS(
37
	SELECT PRC.ID FROM dbo.PL_REQUEST_PROCESS PR 
38
	LEFT JOIN dbo.PL_REQUEST_PROCESS_CHILD PRC ON PRC.PROCESS_ID=PR.ID
39
	WHERE  PR.REQ_ID=@p_REQ_ID AND PRC.TYPE_JOB='XL' ))
40
	BEGIN
41

    
42
		ROLLBACK TRANSACTION  
43
		SELECT -1 Result, N'Tờ trình chủ trương số: '+(SELECT REQ_CODE FROM PL_REQUEST_DOC WHERE REQ_ID=@p_REQ_ID) +N' chưa điều phối xử lý. Vui lòng điều phối nhân viên xử lý phiếu!' ErrorDesc  
44
		RETURN -1 
45
	END
46

    
47
END
48

    
49

    
50

    
51

    
52
DECLARE  @ERROR BIT ,@EROOR_DES NVARCHAR(500)
53

    
54
SELECT @ERROR=ERROR,
55
       @EROOR_DES=ERROR_DES FROM dbo.FN_CHECK_VALIDATE_APP(@p_REQ_ID,'PDDC','PL_REQUEST_DOC',@p_MAKER_ID,'DVKD')
56
IF(@ERROR=1)
57
BEGIN
58
	 ROLLBACK TRANSACTION;
59
    SELECT -1  Result,
60
           @EROOR_DES ErrorDesc
61
   
62
    RETURN 0;
63
END
64

    
65

    
66

    
67
DECLARE @LEVEL INT,@DEP_ID VARCHAR(20),@BRANCH_ID VARCHAR(20),@BRANCH_CREATE VARCHAR(20),@DEP_CREATE VARCHAR(20),@STEP_PARENT VARCHAR(20)
68
DECLARE @ROLE_ID VARCHAR(20),@NOTES NVARCHAR(500),
69
				@PROCESS_CURR VARCHAR(10),
70
				@STEP_CURR INT,
71
				@STEP_NEXT VARCHAR(20),
72
				@PROCESS_NEXT VARCHAR(10),
73
				@TYPE_JOB_NAME NVARCHAR(100), @FULLNAME NVARCHAR(100)
74

    
75
SELECT @BRANCH_ID=  TLSUBBRID,@DEP_ID=SECUR_CODE ,@ROLE_ID=RoleName FROM dbo.TL_USER WHERE TLNANME=@p_MAKER_ID
76

    
77

    
78
SELECT @BRANCH_CREATE=BRANCH_CREATE,@DEP_CREATE=DEP_CREATE FROM dbo.PL_REQUEST_DOC WHERE REQ_ID=@p_REQ_ID
79

    
80

    
81
		DECLARE
82
		@COST_ID_TABLE TABLE (
83
			COST_ID VARCHAR(15)
84
		)
85

    
86
		DECLARE @DVDM_ID_TABLE TABLE (
87
			DVDM_ID VARCHAR(15)
88
		)
89

    
90
		DECLARE @AUTHOR_DVDM TABLE
91
		(
92
		ROLE_ID VARCHAR(100),
93
		BRANCH_ID VARCHAR(20),
94
		DEP_ID VARCHAR(20),
95
		DVDM_ID VARCHAR(20)
96
		)
97

    
98

    
99
	INSERT INTO @AUTHOR_DVDM
100
	(
101
	    ROLE_ID,
102
	    BRANCH_ID,
103
	    DEP_ID,
104
	    DVDM_ID
105
	)
106
	SELECT TU.RoleName,TU.TLSUBBRID,TU.SECUR_CODE,PC.DVDM_ID FROM dbo.TL_USER TU 
107
	LEFT JOIN dbo.PL_COSTCENTER_DT DT ON DT.BRANCH_ID=TU.TLSUBBRID AND DT.DEP_ID=TU.SECUR_CODE
108
	LEFT JOIN dbo.PL_COSTCENTER PC ON PC.COST_ID=DT.COST_ID
109
	WHERE TU.TLNANME=@p_MAKER_ID
110
	UNION ALL
111
	SELECT TM.ROLE_NEW RoleName,TU.TLSUBBRID,TU.SECUR_CODE,PC.DVDM_ID FROM dbo.TL_USER TU 
112
	LEFT JOIN dbo.PL_COSTCENTER_DT DT ON DT.BRANCH_ID=TU.TLSUBBRID AND DT.DEP_ID=TU.SECUR_CODE
113
	LEFT JOIN dbo.PL_COSTCENTER PC ON PC.COST_ID=DT.COST_ID
114
	LEFT JOIN dbo.TL_SYS_ROLE_MAPPING TM ON TM.ROLE_OLD=TU.RoleName AND( TM.TLNAME IS NULL OR TM.TLNAME='')
115
	WHERE TU.TLNANME=@p_MAKER_ID
116
	UNION ALL
117
	SELECT TU.ROLE_NEW RoleName,TU.BRANCH_ID TLSUBBRID,TU.DEP_ID SECUR_CODE,PC.DVDM_ID FROM dbo.TL_SYS_ROLE_MAPPING TU 
118
	LEFT JOIN dbo.PL_COSTCENTER_DT DT ON DT.BRANCH_ID=TU.BRANCH_ID AND DT.DEP_ID=TU.DEP_ID
119
	LEFT JOIN dbo.PL_COSTCENTER PC ON PC.COST_ID=DT.COST_ID
120
	WHERE TU.TLNAME=@p_MAKER_ID AND CAST(EXP_DATE AS DATE) >= CAST(GETDATE() AS DATE)
121
	UNION ALL
122
	SELECT TM.ROLE_NEW RoleName,TU.BRANCH_ID TLSUBBRID,TU.DEP_ID SECUR_CODE,PC.DVDM_ID FROM dbo.TL_SYS_ROLE_MAPPING TU 
123
	LEFT JOIN dbo.PL_COSTCENTER_DT DT ON DT.BRANCH_ID=TU.BRANCH_ID AND DT.DEP_ID=TU.DEP_ID
124
	LEFT JOIN dbo.PL_COSTCENTER PC ON PC.COST_ID=DT.COST_ID
125
	LEFT JOIN dbo.TL_SYS_ROLE_MAPPING TM ON TM.ROLE_OLD=TU.ROLE_NEW AND( TM.TLNAME IS NULL OR TM.TLNAME='')
126
	WHERE TU.TLNAME=@p_MAKER_ID AND CAST(TU.EXP_DATE AS DATE) >= CAST(GETDATE() AS DATE)
127

    
128
	
129

    
130

    
131

    
132
		INSERT INTO @COST_ID_TABLE
133
		SELECT COST_ID FROM dbo.PL_COSTCENTER_DT WHERE DEP_ID=@DEP_ID AND BRANCH_ID=@BRANCH_ID
134

    
135
		INSERT INTO @DVDM_ID_TABLE
136
		SELECT DVDM_ID FROM dbo.PL_COSTCENTER WHERE COST_ID IN (SELECT COST_ID FROM @COST_ID_TABLE) GROUP BY DVDM_ID
137

    
138
		
139
		DECLARE @TYPE_JOB_CR VARCHAR(20)
140

    
141

    
142
		SET @TYPE_JOB_CR= (SELECT TOP 1 TYPE_JOB  FROM dbo.PL_REQUEST_PROCESS_CHILD WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID=@p_REF_ID AND STATUS_JOB='C')
143

    
144
			
145
		UPDATE dbo.PL_REQUEST_PROCESS_CHILD SET STATUS_JOB='P'
146
		WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID=@p_REF_ID 
147
		--AND TLNAME=@p_TLNAME
148
		AND TYPE_JOB=@TYPE_JOB_CR
149

    
150

    
151
		SET @TYPE_JOB_NAME =(SELECT CONTENT FROM dbo.CM_ALLCODE WHERE CDNAME = 'JOB_TYPE' AND CDTYPE='REQ' AND CDVAL=@TYPE_JOB_CR)
152
		SET @FULLNAME =(SELECT TLFullName FROM dbo.TL_USER WHERE TLNANME=@p_TLNAME )
153
			
154
		INSERT INTO dbo.PL_PROCESS
155
				(
156
					REQ_ID,
157
					PROCESS_ID,
158
					CHECKER_ID,
159
					APPROVE_DT,
160
					PROCESS_DESC,NOTES
161
				)
162
				VALUES
163
				(   @p_REQ_ID,        -- REQ_ID - varchar(15)
164
					@p_PROCESS_ID,        -- PROCESS_ID - varchar(10)
165
					@p_MAKER_ID,        -- CHECKER_ID - varchar(15)
166
					GETDATE() , -- APPROVE_DT - datetime
167
					@p_PROCESS_DES ,
168
					@TYPE_JOB_NAME+ N' đã phê duyệt'       -- PROCESS_DESC - nvarchar(1000)
169
				)
170

    
171
		
172

    
173

    
174
		SET @LEVEL=ISNULL((SELECT TOP 1 LEVEL_JOB 
175
		FROM dbo.PL_REQUEST_PROCESS_CHILD 
176
		WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID=@p_REF_ID 
177
		--AND TLNAME=@p_TLNAME 
178
		AND TYPE_JOB=@TYPE_JOB_CR
179
		ORDER BY LEVEL_JOB DESC),0)                  
180

    
181
		UPDATE dbo.PL_REQUEST_PROCESS_CHILD SET STATUS_JOB='C'
182
		WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID=@p_REF_ID AND LEVEL_JOB=(@LEVEL-1)
183
		
184
		IF(NOT EXISTS (SELECT * FROM  dbo.PL_REQUEST_PROCESS_CHILD 
185
		WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID=@p_REF_ID AND STATUS_JOB <> 'P'))
186
		BEGIN
187

    
188

    
189
				SET @PROCESS_CURR = (SELECT TOP 1 PROCESS_ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND STATUS='C')
190
				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)
191
				
192
				
193
				IF(@PROCESS_CURR='TC')
194
				BEGIN
195
						SELECT @ERROR=ERROR,
196
						   @EROOR_DES=ERROR_DES FROM dbo.FN_CHECK_VALIDATE_APP(@p_REQ_ID,'PDDC','PL_REQUEST_DOC',@p_MAKER_ID,'TC')
197
					IF(@ERROR=1)
198
					BEGIN
199
						 ROLLBACK TRANSACTION;
200
						SELECT '-1'  Result,
201
							   @EROOR_DES ErrorDesc
202
   
203
						RETURN '0';
204
					END
205
					---Duyệt TTCT
206

    
207
					DECLARE @LIMTT_MAX  DECIMAL(18,2),@LIMIT_APP DECIMAL(18,2) ,@KHOI_ID_TF VARCHAR(20)
208
					,@KHOI_ID_TO VARCHAR(20),@TOTAL_TRANSFER DECIMAL(18,2),@IS_GDK BIT,@IS_PTGD BIT
209
					
210
					DECLARE @DATA_KHOI TABLE (
211
					KHOI_ID VARCHAR(20),
212
					TOTAL_AMT DECIMAL(18,2),
213
					IS_NEXT BIT,
214
					IS_GDK BIT,
215
					IS_PTGD BIT
216
					)
217

    
218
					INSERT INTO @DATA_KHOI
219
					(
220
					    KHOI_ID,
221
						TOTAL_AMT,
222
					    IS_NEXT,
223
						IS_GDK,
224
						IS_PTGD
225
					)
226
					SELECT FR_KHOI_ID,SUM(TOTAL_AMT),0,CD.IS_GDK,CD.IS_PTGD FROM dbo.PL_REQUEST_TRANSFER PT
227
					LEFT JOIN dbo.CM_DVDM CD ON CD.DVDM_ID=PT.FR_KHOI_ID
228
					
229
					WHERE REQ_DOC_ID=@p_REQ_ID AND FR_KHOI_ID <>'' AND FR_KHOI_ID IS NOT NULL GROUP BY FR_KHOI_ID,CD.IS_GDK,CD.IS_PTGD
230
					SET @STEP_PARENT='TC'
231
					
232
					SET @LIMTT_MAX=(SELECT LIMIT_VALUE FROM dbo.TL_SYSROLE_LIMIT WHERE ROLE_ID='GDK' AND LIMIT_TYPE='DCNS')
233

    
234
					DECLARE lstDATA CURSOR FOR
235
					SELECT KHOI_ID,TOTAL_AMT,IS_GDK,IS_PTGD FROM @DATA_KHOI
236

    
237
					OPEN lstDATA
238
					FETCH NEXT FROM lstDATA INTO @KHOI_ID_TF,@TOTAL_TRANSFER,@IS_GDK,@IS_PTGD
239
					WHILE @@FETCH_STATUS=0
240
					BEGIN
241
						SET @LIMIT_APP=(SELECT ISNULL(MAX_AMT,0)- ISNULL(TOTAL_APP_AMT,0) AS LIMIT_APP FROM dbo.LIMIT_ACCUMULATE WHERE ROLE_ID='GDK' AND DVDM_ID=@KHOI_ID_TF)
242

    
243
						IF(NOT EXISTS(SELECT ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND ROLE_USER='GDK' AND DVDM_ID=@KHOI_ID_TF) AND @IS_GDK=1)
244
						BEGIN
245
							INSERT INTO dbo.PL_REQUEST_PROCESS
246
							(
247
								REQ_ID,
248
								PROCESS_ID,
249
								STATUS,
250
								ROLE_USER,
251
								BRANCH_ID,
252
								CHECKER_ID,
253
								APPROVE_DT,
254
								PARENT_PROCESS_ID,
255
								IS_LEAF,
256
								COST_ID,
257
								DVDM_ID,
258
								NOTES,IS_HAS_CHILD
259
							)
260
							VALUES
261
							(   @p_REQ_ID,        -- REQ_ID - varchar(15)
262
								'GDK_TT',        -- PROCESS_ID - varchar(10)
263
								'U',        -- STATUS - varchar(5)
264
								'GDK',        -- ROLE_USER - varchar(50)
265
								'',        -- BRANCH_ID - varchar(15)
266
								'',        -- CHECKER_ID - varchar(15)
267
								NULL, -- APPROVE_DT - datetime
268
								@STEP_PARENT,        -- PARENT_PROCESS_ID - varchar(10)
269
								'N',        -- IS_LEAF - varchar(1)
270
								'',        -- COST_ID - varchar(15)
271
								@KHOI_ID_TF ,
272
								N'Chờ giám đốc khối xác nhận',
273
								0        -- DVDM_ID - varchar(15)
274
								)
275
						END
276

    
277
						IF(@TOTAL_TRANSFER > @LIMTT_MAX OR @TOTAL_TRANSFER > @LIMIT_APP)
278
							UPDATE @DATA_KHOI SET IS_NEXT=1 WHERE KHOI_ID=@KHOI_ID_TF
279
						IF(@IS_GDK=0)
280
							UPDATE @DATA_KHOI SET IS_NEXT=1 WHERE KHOI_ID=@KHOI_ID_TF
281
						FETCH NEXT FROM lstDATA INTO @KHOI_ID_TF,@TOTAL_TRANSFER,@IS_GDK,@IS_PTGD 
282
					END
283
					CLOSE lstDATA
284
					DEALLOCATE lstDATA
285
					IF(EXISTS(SELECT * FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID='GDK_TT'))
286
						SET @STEP_PARENT='GDK_TT'
287
					IF(EXISTS(SELECT * FROM @DATA_KHOI WHERE IS_NEXT=1) 
288
							OR EXISTS(SELECT REQ_TRANSFER_ID FROM dbo.PL_REQUEST_TRANSFER WHERE REQ_DOC_ID=@p_REQ_ID AND FR_KHOI_ID<>TO_KHOI_ID))
289
						BEGIN
290
							DECLARE lstDATA CURSOR FOR
291
							SELECT KHOI_ID,TOTAL_AMT,IS_GDK,IS_PTGD FROM @DATA_KHOI WHERE IS_NEXT=1
292

    
293
							OPEN lstDATA
294
							FETCH NEXT FROM lstDATA INTO @KHOI_ID_TF,@TOTAL_TRANSFER,@IS_GDK,@IS_PTGD
295
							WHILE @@FETCH_STATUS=0
296
							BEGIN
297
							SET @LIMIT_APP=(SELECT ISNULL(MAX_AMT,0)- ISNULL(TOTAL_APP_AMT,0) AS LIMIT_APP FROM dbo.LIMIT_ACCUMULATE WHERE ROLE_ID='PTGD' AND DVDM_ID=@KHOI_ID_TF)
298

    
299
							IF(NOT EXISTS(SELECT ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND ROLE_USER='PTGD' AND DVDM_ID=@KHOI_ID_TF) AND @IS_PTGD=1)
300
							BEGIN
301
							INSERT INTO dbo.PL_REQUEST_PROCESS
302
							(
303
								REQ_ID,
304
								PROCESS_ID,
305
								STATUS,
306
								ROLE_USER,
307
								BRANCH_ID,
308
								CHECKER_ID,
309
								APPROVE_DT,
310
								PARENT_PROCESS_ID,
311
								IS_LEAF,
312
								COST_ID,
313
								DVDM_ID,
314
								NOTES,IS_HAS_CHILD
315
							)
316
							VALUES
317
							(   @p_REQ_ID,        -- REQ_ID - varchar(15)
318
								'PTGDK_TT',        -- PROCESS_ID - varchar(10)
319
								'U',        -- STATUS - varchar(5)
320
								'PTGD',        -- ROLE_USER - varchar(50)
321
								'',        -- BRANCH_ID - varchar(15)
322
								'',        -- CHECKER_ID - varchar(15)
323
								NULL, -- APPROVE_DT - datetime
324
								@STEP_PARENT,        -- PARENT_PROCESS_ID - varchar(10)
325
								'N',        -- IS_LEAF - varchar(1)
326
								'',        -- COST_ID - varchar(15)
327
								@KHOI_ID_TF ,
328
								N'Chờ Phó tổng giám đốc khối xác nhận',
329
								0        -- DVDM_ID - varchar(15)
330
								)
331
							END
332
						UPDATE @DATA_KHOI SET IS_NEXT=0
333
						IF(@TOTAL_TRANSFER > @LIMTT_MAX OR @TOTAL_TRANSFER > @LIMIT_APP)
334
							UPDATE @DATA_KHOI SET IS_NEXT=1 WHERE KHOI_ID=@KHOI_ID_TF
335
						IF(@IS_PTGD=0)
336
							UPDATE @DATA_KHOI SET IS_NEXT=1 WHERE KHOI_ID=@KHOI_ID_TF
337
						FETCH NEXT FROM lstDATA INTO @KHOI_ID_TF,@TOTAL_TRANSFER,@IS_GDK,@IS_PTGD 
338
					END
339
							CLOSE lstDATA
340
							DEALLOCATE lstDATA
341
					IF(EXISTS(SELECT * FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID='PTGDK_TT'))
342
						SET @STEP_PARENT='PTGDK_TT'
343
					IF(EXISTS(SELECT * FROM @DATA_KHOI WHERE IS_NEXT=1) 
344
							OR EXISTS(SELECT REQ_TRANSFER_ID FROM dbo.PL_REQUEST_TRANSFER WHERE REQ_DOC_ID=@p_REQ_ID AND FR_KHOI_ID<>TO_KHOI_ID))
345
						BEGIN
346
							IF(NOT EXISTS(SELECT ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND ROLE_USER='TGD'))
347
							BEGIN
348
							INSERT INTO dbo.PL_REQUEST_PROCESS
349
							(
350
							REQ_ID,
351
							PROCESS_ID,
352
							STATUS,
353
							ROLE_USER,
354
							BRANCH_ID,
355
							CHECKER_ID,
356
							APPROVE_DT,
357
							PARENT_PROCESS_ID,
358
							IS_LEAF,
359
							COST_ID,
360
							DVDM_ID,
361
							NOTES,
362
							IS_HAS_CHILD
363
							)
364
							VALUES
365
							(   @p_REQ_ID,                           -- REQ_ID - varchar(15)
366
							'TGD',                               -- PROCESS_ID - varchar(10)
367
							'U',                                 -- STATUS - varchar(5)
368
							'TGD',                               -- ROLE_USER - varchar(50)
369
							'',                                  -- BRANCH_ID - varchar(15)
370
							'',                                  -- CHECKER_ID - varchar(15)
371
							NULL,                                -- APPROVE_DT - datetime
372
							@STEP_PARENT,                        -- PARENT_PROCESS_ID - varchar(10)
373
							'N',                                 -- IS_LEAF - varchar(1)
374
							'',                                  -- COST_ID - varchar(15)
375
							'', N'Chờ tổng giám đốc xác nhận', 0 -- DVDM_ID - varchar(15)
376
							);
377
							END
378

    
379
						END
380
					
381

    
382
					END
383

    
384

    
385
				DECLARE @LAST_PROCESS VARCHAR(20)	
386
					
387
					
388
				SET @LAST_PROCESS=(
389
				SELECT TOP 1 PL.PROCESS_ID FROM dbo.PL_REQUEST_PROCESS PL 
390
				LEFT JOIN dbo.PL_CONFIG_PROCESS CP ON CP.PROCESS_ID=PL.PROCESS_ID
391
				WHERE REQ_ID=@p_REQ_ID
392
				GROUP BY PL.PROCESS_ID,CP.LEVEL_PROCESS 
393
				ORDER BY CP.LEVEL_PROCESS DESC)
394
					
395
			
396
					
397
					UPDATE dbo.PL_REQUEST_PROCESS SET PARENT_PROCESS_ID=@LAST_PROCESS WHERE PROCESS_ID='APPROVE' AND REQ_ID=@p_REQ_ID
398

    
399

    
400

    
401
					SET @NOTES=(SELECT CONTENT FROM dbo.CM_ALLCODE WHERE (@PROCESS_CURR LIKE CDVAL + '%') AND CDNAME='PROCESS_ID' AND CDTYPE='REQ')   
402
					UPDATE dbo.PL_REQUEST_PROCESS SET STATUS='P',NOTES=@NOTES+ N' đã phê duyệt', CHECKER_ID=@p_MAKER_ID,APPROVE_DT=GETDATE()  WHERE REQ_ID=@p_REQ_ID AND 
403
					(ROLE_USER=@ROLE_ID OR ROLE_USER IN (SELECT ROLE_NEW FROM dbo.TL_SYS_ROLE_MAPPING WHERE ROLE_OLD=@ROLE_ID)) 
404
					AND PROCESS_ID=@PROCESS_CURR
405

    
406
					UPDATE dbo.PL_REQUEST_PROCESS SET STATUS='C' WHERE REQ_ID=@p_REQ_ID AND PARENT_PROCESS_ID=@PROCESS_CURR
407

    
408
					SET @PROCESS_NEXT=(SELECT TOP 1 PROCESS_ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND STATUS='C')
409
					UPDATE dbo.PL_REQUEST_DOC SET PROCESS_ID=@PROCESS_NEXT WHERE REQ_ID=@p_REQ_ID
410
				END
411
				ELSE IF(@PROCESS_CURR='KT')
412
				BEGIN
413
					--	SELECT @ERROR=ERROR,
414
					--	   @EROOR_DES=ERROR_DES FROM dbo.FN_CHECK_VALIDATE_APP(@p_REQ_ID,'PDDC','PL_REQUEST_DOC',@p_MAKER_ID,'TC')
415
					--IF(@ERROR=1)
416
					--BEGIN
417
					--	 ROLLBACK TRANSACTION;
418
					--	SELECT '-1'  Result,
419
					--		   @EROOR_DES ErrorDesc
420
   
421
					--	RETURN '0';
422
					--END
423

    
424
						SET @NOTES=(SELECT CONTENT FROM dbo.CM_ALLCODE WHERE (@PROCESS_CURR LIKE CDVAL + '%') AND CDNAME='PROCESS_ID' AND CDTYPE='REQ')   
425
						UPDATE dbo.PL_REQUEST_PROCESS SET STATUS='P',NOTES=@NOTES+ N' đã phê duyệt', CHECKER_ID=@p_MAKER_ID,APPROVE_DT=GETDATE()  WHERE REQ_ID=@p_REQ_ID AND (ROLE_USER=@ROLE_ID OR ROLE_USER IN (SELECT ROLE_NEW FROM dbo.TL_SYS_ROLE_MAPPING WHERE ROLE_OLD=@ROLE_ID)) AND PROCESS_ID=@PROCESS_CURR
426
						UPDATE dbo.PL_REQUEST_PROCESS SET STATUS='C' WHERE REQ_ID=@p_REQ_ID AND PARENT_PROCESS_ID=@PROCESS_CURR
427
						UPDATE dbo.PL_REQUEST_DOC SET PROCESS_ID=@PROCESS_NEXT WHERE REQ_ID=@p_REQ_ID
428
				END
429
				ELSE IF(@PROCESS_CURR='DVCM')
430
				BEGIN
431
					SET @NOTES=(SELECT CONTENT FROM dbo.CM_ALLCODE WHERE (@PROCESS_CURR LIKE CDVAL + '%') AND CDNAME='PROCESS_ID' AND CDTYPE='REQ')   
432

    
433

    
434
					UPDATE dbo.PL_REQUEST_COSTCENTER SET AUTH_STATUS='A',APPROVE_DT=GETDATE(),CHECKER_ID=@p_MAKER_ID WHERE REQ_ID=@p_REQ_ID AND COST_ID IN (SELECT DVDM_ID FROM @DVDM_ID_TABLE)
435
					UPDATE dbo.PL_REQUEST_PROCESS SET STATUS='P',NOTES=@NOTES+ N' đã phê duyệt', CHECKER_ID=@p_MAKER_ID,APPROVE_DT=GETDATE() WHERE REQ_ID=@p_REQ_ID AND (ROLE_USER=@ROLE_ID OR ROLE_USER IN (SELECT ROLE_NEW FROM dbo.TL_SYS_ROLE_MAPPING WHERE ROLE_OLD=@ROLE_ID)) AND DVDM_ID IN (SELECT DVDM_ID FROM @DVDM_ID_TABLE)
436
							
437

    
438

    
439
					IF(NOT EXISTS( SELECT * FROM dbo.PL_REQUEST_PROCESS WHERE PROCESS_ID=@PROCESS_CURR AND REQ_ID=@p_REQ_ID AND STATUS='C'))
440
					BEGIN
441
						
442
								UPDATE dbo.PL_REQUEST_PROCESS SET [STATUS]='C' WHERE PROCESS_ID=@PROCESS_NEXT AND REQ_ID=@p_REQ_ID
443
								UPDATE dbo.PL_REQUEST_DOC SET PROCESS_ID=@PROCESS_NEXT WHERE REQ_ID=@p_REQ_ID
444
						
445
					END
446
				END
447

    
448
				
449
				ELSE
450
				BEGIN
451

    
452

    
453
				SET @NOTES=(SELECT CONTENT FROM dbo.CM_ALLCODE WHERE (@PROCESS_CURR LIKE CDVAL + '%') AND CDNAME='PROCESS_ID' AND CDTYPE='REQ')   
454

    
455

    
456
				UPDATE dbo.PL_REQUEST_TRANSFER SET AUTH_STATUS='A',CHECKER_ID=@p_MAKER_ID,APPROVE_DT=GETDATE()  WHERE REQ_DOC_ID=@p_REQ_ID AND FR_BRN_ID=@BRANCH_ID AND (FR_DEP_ID=@DEP_ID OR FR_DEP_ID IS NULL OR FR_DEP_ID='')
457
				UPDATE dbo.PL_REQUEST_PROCESS SET STATUS='P',NOTES=@NOTES+ N' đã phê duyệt', CHECKER_ID=@p_MAKER_ID,APPROVE_DT=GETDATE()  WHERE REQ_ID=@p_REQ_ID 
458
				
459
				IF(NOT EXISTS( SELECT * FROM dbo.PL_REQUEST_PROCESS WHERE PROCESS_ID=@PROCESS_CURR AND REQ_ID=@p_REQ_ID AND STATUS='C'))
460
				BEGIN
461
						
462
							UPDATE dbo.PL_REQUEST_PROCESS SET [STATUS]='C' WHERE PROCESS_ID=@PROCESS_NEXT AND REQ_ID=@p_REQ_ID
463
							UPDATE dbo.PL_REQUEST_DOC SET PROCESS_ID=@PROCESS_NEXT WHERE REQ_ID=@p_REQ_ID
464
						
465
				END
466

    
467

    
468
				IF(EXISTS(SELECT REQ_TRANSFER_ID FROM dbo.PL_REQUEST_TRANSFER WHERE REQ_DOC_ID=@p_REQ_ID AND (FR_BRN_ID <> @BRANCH_CREATE OR FR_DEP_ID<> @DEP_CREATE)))
469
					BEGIN
470
					IF(NOT EXISTS(SELECT REQ_COST_ID FROM dbo.PL_REQUEST_COSTCENTER WHERE REQ_ID=@p_REQ_ID AND AUTH_STATUS<>'A'))
471
					BEGIN
472
							IF(NOT EXISTS(SELECT * FROM dbo.PL_REQUEST_TRANSFER WHERE REQ_DOC_ID=@p_REQ_ID AND AUTH_STATUS <>'A'))
473
							BEGIN
474

    
475
							
476
									DECLARE 	@LIMIT_VALUE DECIMAL(18,0),
477
									@IS_NEXT BIT=0,@TOTAL_AMT_GD DECIMAL(12,0),@STOP BIT,@ROLE_TF VARCHAR(20),@DVDM_ID VARCHAR(20),@NOTE NVARCHAR(100)
478
									DECLARE @ROLE_CDT VARCHAR(20),@DVDM_CDT VARCHAR(20),@LIMIT_VALUE_CDT VARCHAR(20),@NOTES_CDT VARCHAR(20),@TOTAL_AMT DECIMAL(18,2)	
479
						
480

    
481
									SET @STEP_PARENT=(SELECT PARENT_PROCESS_ID FROM dbo.PL_REQUEST_PROCESS WHERE PROCESS_ID='TC' AND REQ_ID=@p_REQ_ID)
482
						
483
									SET @NOTE=   (SELECT CONTENT FROM dbo.CM_ALLCODE WHERE CDVAL='DVDM' AND CDNAME='PROCESS_ID' AND CDTYPE='REQ')
484
									IF(EXISTS(SELECT ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID='TC'))
485
									BEGIN
486
									DECLARE lstTransfer CURSOR FOR
487
									SELECT FR_DVDM_ID FROM dbo.PL_REQUEST_TRANSFER WHERE REQ_DOC_ID=@p_REQ_ID AND   FR_DVDM_ID IS NOT NULL AND FR_DVDM_ID <>'' AND (FR_BRN_ID <> @BRANCH_CREATE OR FR_DEP_ID<> @DEP_CREATE)
488
									AND NOT EXISTS(SELECT * FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND ROLE_USER='GDDV' AND DVDM_ID=FR_DVDM_ID	)
489
									AND FR_DVDM_ID <>'DM0000000000048'
490
									GROUP BY FR_DVDM_ID
491
									OPEN lstTransfer
492
									FETCH NEXT FROM lstTransfer INTO @DVDM_ID
493
									WHILE @@FETCH_STATUS = 0 
494
									BEGIN 
495
									IF(NOT EXISTS(SELECT ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID  AND ROLE_USER='GDDV' AND ( DVDM_ID=@DVDM_ID OR @DVDM_ID IN ((SELECT PC.DVDM_ID FROM dbo.PL_COSTCENTER PC
496
									LEFT JOIN dbo.PL_COSTCENTER_DT PCD ON PCD.COST_ID = PC.COST_ID
497
									WHERE PCD.BRANCH_ID=PL_REQUEST_PROCESS.BRANCH_ID AND PCD.DEP_ID=PL_REQUEST_PROCESS.DEP_ID)) ) ))
498
									BEGIN
499
										INSERT INTO dbo.PL_REQUEST_PROCESS
500
										(
501
											REQ_ID,
502
											PROCESS_ID,
503
											STATUS,
504
											ROLE_USER,
505
											BRANCH_ID,
506
											CHECKER_ID,
507
											APPROVE_DT,
508
											PARENT_PROCESS_ID,
509
											IS_LEAF,
510
											COST_ID,
511
											DVDM_ID,
512
											NOTES,IS_HAS_CHILD
513
										)
514
										VALUES
515
										(   @p_REQ_ID,        -- REQ_ID - varchar(15)
516
											'DVDM_DC',        -- PROCESS_ID - varchar(10)
517
											'U',        -- STATUS - varchar(5)
518
											'GDDV',        -- ROLE_USER - varchar(50)
519
											'',        -- BRANCH_ID - varchar(15)
520
											'',        -- CHECKER_ID - varchar(15)
521
											NULL, -- APPROVE_DT - datetime
522
											@STEP_PARENT,        -- PARENT_PROCESS_ID - varchar(10)
523
											'N',        -- IS_LEAF - varchar(1)
524
											'',        -- COST_ID - varchar(15)
525
											@DVDM_ID ,        -- DVDM_ID - varchar(15)
526
											N'Chờ '+@NOTE+N' xác nhận'
527
											,0)
528
									END
529

    
530
									FETCH NEXT FROM lstTransfer INTO @DVDM_ID
531
									END
532
									CLOSE lstTransfer
533
									DEALLOCATE lstTransfer
534

    
535

    
536

    
537
								SET @STEP_NEXT='TC'
538
								IF(EXISTS(SELECT ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID='DVDM_DC'))
539
								BEGIN
540
										SET @STEP_PARENT='DVDM_DC'
541
										SET @STEP_NEXT	='DVDM_DC'
542
								END
543

    
544
								UPDATE dbo.PL_REQUEST_PROCESS SET PARENT_PROCESS_ID=@STEP_PARENT,STATUS='U' WHERE  PROCESS_ID='TC' AND REQ_ID=@p_REQ_ID
545
								SET @STEP_PARENT='TC'
546
	
547
								UPDATE dbo.PL_REQUEST_PROCESS SET [STATUS]='C' WHERE PROCESS_ID=@STEP_NEXT AND REQ_ID=@p_REQ_ID
548
								UPDATE dbo.PL_REQUEST_PROCESS SET PARENT_PROCESS_ID=@STEP_PARENT,STATUS='U' WHERE  PROCESS_ID='APPROVE' AND REQ_ID=@p_REQ_ID
549
								UPDATE dbo.PL_REQUEST_DOC SET PROCESS_ID=@STEP_NEXT WHERE REQ_ID=@p_REQ_ID
550
								END
551

    
552
						END	
553
					END
554
				END
555

    
556
				
557
				
558
				END
559

    
560
			IF(EXISTS(SELECT REQ_ID FROM dbo.PL_REQUEST_DOC WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID='APPROVE'))
561
			BEGIN
562
				
563
					
564
					EXEC dbo.PL_REQ_DOC_UPDATE_AFTER_APPROVE @p_REQ_ID = @p_REQ_ID 
565
					EXEC dbo.PL_REQ_DOC_Ins_To_TR_REQ_DOC @p_PL_REQ_ID = @p_REQ_ID
566
			END
567
		END
568
				
569
		IF @@Error <> 0 GOTO ABORT
570
COMMIT TRANSACTION
571
SELECT 0 as Result, '' ErrorDesc
572
RETURN 0
573
ABORT:
574
BEGIN
575
		ROLLBACK TRANSACTION
576
		SELECT -1 as Result, '' ErrorDesc
577
		RETURN -1
578
End