Project

General

Profile

PL_REQ_PROCESS_CHILD_App.txt

Truong Nguyen Vu, 03/09/2021 11:48 AM

 
1

    
2

    
3

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

    
23
IF(EXISTS(SELECT REQ_ID FROM dbo.PL_REQUEST_PROCESS  WHERE REQ_ID=@p_REQ_ID AND IS_HAS_CHILD=1 AND STATUS='C' ))
24
BEGIN
25
	IF(EXISTS(
26
	SELECT PRC.ID FROM dbo.PL_REQUEST_PROCESS PR 
27
	LEFT JOIN dbo.PL_REQUEST_PROCESS_CHILD PRC ON PRC.PROCESS_ID=PR.ID
28
	WHERE  PR.REQ_ID=@p_REQ_ID AND PRC.TYPE_JOB='XL' AND PRC.STATUS_JOB='C'))
29
	BEGIN
30
		ROLLBACK TRANSACTION  
31
		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  
32
		RETURN -1
33
	END
34

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

    
41
		ROLLBACK TRANSACTION  
42
		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  
43
		RETURN -1 
44
	END
45

    
46
END
47

    
48

    
49

    
50

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

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

    
64

    
65

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

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

    
76

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

    
79

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

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

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

    
97

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

    
127
	
128

    
129

    
130

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

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

    
137
		
138
		DECLARE @TYPE_JOB_CR VARCHAR(20)
139

    
140

    
141
		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')
142

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

    
149

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

    
170
		
171

    
172

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

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

    
187

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

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

    
217
					INSERT INTO @DATA_KHOI
218
					(
219
					    KHOI_ID,
220
						TOTAL_AMT,
221
					    IS_NEXT,
222
						IS_GDK,
223
						IS_PTGD
224
					)
225
					SELECT FR_KHOI_ID,SUM(TOTAL_AMT),0,CD.IS_GDK,CD.IS_PTGD FROM dbo.PL_REQUEST_TRANSFER PT
226
					LEFT JOIN dbo.CM_DVDM CD ON CD.DVDM_ID=PT.FR_KHOI_ID
227
					
228
					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
229
					SET @STEP_PARENT='TC'
230
					
231
					SET @LIMTT_MAX=(SELECT LIMIT_VALUE FROM dbo.TL_SYSROLE_LIMIT WHERE ROLE_ID='GDK' AND LIMIT_TYPE='DCNS')
232

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

    
236
					OPEN lstDATA
237
					FETCH NEXT FROM lstDATA INTO @KHOI_ID_TF,@TOTAL_TRANSFER,@IS_GDK,@IS_PTGD
238
					WHILE @@FETCH_STATUS=0
239
					BEGIN
240
						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)
241

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

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

    
292
							OPEN lstDATA
293
							FETCH NEXT FROM lstDATA INTO @KHOI_ID_TF,@TOTAL_TRANSFER,@IS_GDK,@IS_PTGD
294
							WHILE @@FETCH_STATUS=0
295
							BEGIN
296
							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)
297

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

    
378
						END
379
					
380

    
381
					END
382

    
383

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

    
398

    
399

    
400
					SET @NOTES=(SELECT CONTENT FROM dbo.CM_ALLCODE WHERE (@PROCESS_CURR LIKE CDVAL + '%') AND CDNAME='PROCESS_ID' AND CDTYPE='REQ')   
401
					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 
402
					(ROLE_USER=@ROLE_ID OR ROLE_USER IN (SELECT ROLE_NEW FROM dbo.TL_SYS_ROLE_MAPPING WHERE ROLE_OLD=@ROLE_ID)) 
403
					AND PROCESS_ID=@PROCESS_CURR
404

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

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

    
423
						SET @NOTES=(SELECT CONTENT FROM dbo.CM_ALLCODE WHERE (@PROCESS_CURR LIKE CDVAL + '%') AND CDNAME='PROCESS_ID' AND CDTYPE='REQ')   
424
						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
425
						UPDATE dbo.PL_REQUEST_PROCESS SET STATUS='C' WHERE REQ_ID=@p_REQ_ID AND PARENT_PROCESS_ID=@PROCESS_CURR
426
						UPDATE dbo.PL_REQUEST_DOC SET PROCESS_ID=@PROCESS_NEXT WHERE REQ_ID=@p_REQ_ID
427
				END
428
				ELSE IF(@PROCESS_CURR='DVCM')
429
				BEGIN
430
					SET @NOTES=(SELECT CONTENT FROM dbo.CM_ALLCODE WHERE (@PROCESS_CURR LIKE CDVAL + '%') AND CDNAME='PROCESS_ID' AND CDTYPE='REQ')   
431

    
432

    
433
					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)
434
					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)
435
							
436

    
437

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

    
447
				
448
				ELSE
449
				BEGIN
450

    
451

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

    
454

    
455
				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='')
456
				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 BRANCH_ID=@BRANCH_ID AND (DEP_ID=@DEP_ID OR DEP_ID IS NULL OR DEP_ID='')
457
				
458
				IF(NOT EXISTS( SELECT * FROM dbo.PL_REQUEST_PROCESS WHERE PROCESS_ID=@PROCESS_CURR AND REQ_ID=@p_REQ_ID AND STATUS='C'))
459
				BEGIN
460
						
461
							UPDATE dbo.PL_REQUEST_PROCESS SET [STATUS]='C' WHERE PROCESS_ID=@PROCESS_NEXT AND REQ_ID=@p_REQ_ID
462
							UPDATE dbo.PL_REQUEST_DOC SET PROCESS_ID=@PROCESS_NEXT WHERE REQ_ID=@p_REQ_ID
463
						
464
				END
465

    
466

    
467
				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)))
468
					BEGIN
469
					IF(NOT EXISTS(SELECT REQ_COST_ID FROM dbo.PL_REQUEST_COSTCENTER WHERE REQ_ID=@p_REQ_ID AND AUTH_STATUS<>'A'))
470
					BEGIN
471
							IF(NOT EXISTS(SELECT * FROM dbo.PL_REQUEST_TRANSFER WHERE REQ_DOC_ID=@p_REQ_ID AND AUTH_STATUS <>'A'))
472
							BEGIN
473

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

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

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

    
534

    
535

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

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

    
551
						END	
552
					END
553
				END
554

    
555
				
556
				
557
				END
558

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