Project

General

Profile

FILE 1.txt

Truong Nguyen Vu, 10/07/2020 08:26 AM

 
1

    
2
ALTER PROCEDURE [dbo].[TR_REQ_PROCESS_CHILD_App]
3
@p_REQ_ID VARCHAR(20),
4
@p_PROCESS_ID VARCHAR(20),
5
@p_TLNAME VARCHAR(20),
6
@p_MAKER_ID VARCHAR(20),
7
@p_TYPE_JOB VARCHAR(20),
8
@p_PROCESS_DES NVARCHAR(500),
9
@p_REF_ID INT,
10
@p_XMLDATA XML
11
AS
12
BEGIN TRANSACTION
13
-- LUCTV 20052020 BO SUNG CHECK NEU TRA VE THI KHONG DUYET DUOC
14

    
15
IF(NOT EXISTS(SELECT *FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND STATUS='C' AND PROCESS_ID=@p_PROCESS_ID))
16
BEGIN
17
	SELECT 1 as Result, '' ErrorDesc
18
	RETURN 0
19
END
20

    
21

    
22
IF(EXISTS(SELECT * FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID =@p_REQ_ID AND STATUS_JOB ='R') OR (EXISTS(SELECT * FROM TR_REQUEST_DOC WHERE REQ_ID =@p_REQ_ID AND AUTH_STATUS ='R'))
23
OR(EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE REQ_ID =@p_REQ_ID AND STATUS ='R')))
24
	BEGIN
25
		ROLLBACK TRANSACTION
26
		SELECT -1 Result, N'Phiếu yêu cầu mua sắm số: '+(SELECT REQ_CODE FROM TR_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
27
		RETURN -1
28
END
29
Declare @hdoc INT
30
	EXEC sp_xml_preparedocument @hdoc Output,@p_XMLDATA
31
	DECLARE @lstFILE TABLE(
32
	ATTACH_ID  VARCHAR(20),
33
	IS_READ	BIT 
34
	)
35
	INSERT INTO @lstFILE
36
	SELECT *
37
	FROM OPENXML(@hDoc,'/Root/ATTACH_FILE',2)
38
	WITH 
39
	(
40
		ATTACH_ID  VARCHAR(20),
41
		IS_READ	BIT  
42
	)
43

    
44
IF(EXISTS(SELECT TR_REQUEST_DOC_FILE_ID FROM dbo.TR_REQUEST_DOC_FILE WHERE REQ_ID=@p_REQ_ID AND IS_VIEW=1
45
 AND EXISTS(SELECT ATTACH_ID FROM @lstFILE WHERE [@lstFILE].ATTACH_ID=TR_REQUEST_DOC_FILE.ATTACH_ID AND IS_READ=0)))
46
 BEGIN
47
		ROLLBACK TRANSACTION
48
			SELECT -1 Result, N'File đinh kèm bắt buộc đọc' ErrorDesc 
49
			RETURN 0
50
 END
51
DECLARE @LEVEL INT,	@TYPE_JOB_NAME NVARCHAR(100), @FULLNAME NVARCHAR(100)
52
			
53
		UPDATE dbo.PL_REQUEST_PROCESS_CHILD SET STATUS_JOB='P'
54
		WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID=@p_REF_ID AND TLNAME=@p_TLNAME AND TYPE_JOB=@p_TYPE_JOB
55

    
56
		SET @LEVEL=ISNULL((SELECT TOP 1 LEVEL_JOB 
57
		FROM dbo.PL_REQUEST_PROCESS_CHILD 
58
		WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID=@p_REF_ID AND TLNAME=@p_TLNAME AND TYPE_JOB=@p_TYPE_JOB
59
		ORDER BY LEVEL_JOB DESC),0)
60

    
61
		UPDATE dbo.PL_REQUEST_PROCESS_CHILD SET STATUS_JOB='C'
62
		WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID=@p_REF_ID AND LEVEL_JOB=(@LEVEL-1)
63
		
64
			SET @TYPE_JOB_NAME =(SELECT CONTENT FROM dbo.CM_ALLCODE WHERE CDNAME = 'JOB_TYPE' AND CDTYPE='REQ' AND CDVAL=@p_TYPE_JOB)
65
			SET @FULLNAME =(SELECT TLFullName FROM dbo.TL_USER WHERE TLNANME=@p_TLNAME )
66
			
67
		INSERT INTO dbo.PL_PROCESS
68
				(
69
					REQ_ID,
70
					PROCESS_ID,
71
					CHECKER_ID,
72
					APPROVE_DT,
73
					PROCESS_DESC,NOTES
74
				)
75
				VALUES
76
				(   @p_REQ_ID,        -- REQ_ID - varchar(15)
77
					@p_PROCESS_ID,        -- PROCESS_ID - varchar(10)
78
					@p_MAKER_ID,        -- CHECKER_ID - varchar(15)
79
					GETDATE() , -- APPROVE_DT - datetime
80
					@p_PROCESS_DES ,
81
					@TYPE_JOB_NAME+ N' đã phê duyệt'       -- PROCESS_DESC - nvarchar(1000)
82
				)
83
		
84

    
85
		IF(NOT EXISTS (SELECT * FROM  dbo.PL_REQUEST_PROCESS_CHILD 
86
		WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID=@p_REF_ID AND STATUS_JOB <> 'P'))
87
		BEGIN
88
				IF(@p_PROCESS_ID='DMMS')
89
				BEGIN
90
				DECLARE @PROCESS_PARENT VARCHAR(20)
91
				SET @PROCESS_PARENT='DMMS'
92

    
93
				UPDATE dbo.PL_REQUEST_PROCESS SET STATUS='P',CHECKER_ID=@p_MAKER_ID,APPROVE_DT=GETDATE(),NOTES=N'Đầu mối mua sắm đã phê duyệt' WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID=@p_PROCESS_ID
94
		
95
				DECLARE @LIMIT_VALUE_KT DECIMAL(18,0),@ROLE_KT VARCHAR(20),@DVDM_KT VARCHAR(20),@NOTES_KT NVARCHAR(200),@TOTAL_AMT_REQ DECIMAL(18,0)
96

    
97
				SET @LIMIT_VALUE_KT = (SELECT LIMIT_VALUE FROM dbo.TL_SYSROLE_LIMIT WHERE LIMIT_TYPE='KT')
98
				SET @ROLE_KT=(SELECT ROLE_ID FROM dbo.TL_SYSROLE_LIMIT WHERE LIMIT_TYPE='KT')
99
				
100
				SET @DVDM_KT=(SELECT DVDM_ID FROM dbo.TL_SYSROLE_LIMIT WHERE LIMIT_TYPE='KT')
101
				
102
				SET @TOTAL_AMT_REQ =(SELECT SUM(TOTAL_AMT) AS TOTAL_AMT FROM dbo.TR_REQUEST_DOC_DT 
103
				WHERE REQ_DOC_ID=@p_REQ_ID AND TRAN_TYPE_ID NOT IN (SELECT TRN_TYPE FROM dbo.CM_TRAN_TYPE WHERE NOTES='XK' OR NOTES ='CDT'))
104
				IF(@TOTAL_AMT_REQ > @LIMIT_VALUE_KT)
105
				BEGIN
106
					DECLARE @l_REQ_COST_ID VARCHAR(15)
107
					EXEC SYS_CodeMasters_Gen 'TR_REQUEST_COSTCENTER', @l_REQ_COST_ID out
108
					INSERT dbo.TR_REQUEST_COSTCENTER
109
					(
110
					    REQ_COST_ID,
111
					    COST_ID,
112
					    REQ_ID,
113
					    NOTES,
114
					    AUTH_STATUS,
115
					    MAKER_ID,
116
					    CREATE_DT,
117
					    CHECKER_ID,
118
					    APPROVE_DT
119
					)
120
					VALUES
121
					(   @l_REQ_COST_ID,        -- REQ_COST_ID - varchar(15)
122
						@DVDM_KT,        -- COST_ID - varchar(15)			    
123
						@p_REQ_ID,        -- REQ_ID - varchar(15)
124
					    N'',       -- NOTES - nvarchar(500)
125
					    'U',        -- AUTH_STATUS - varchar(1)
126
					    @p_MAKER_ID,        -- MAKER_ID - varchar(15)
127
					    GETDATE(), -- CREATE_DT - datetime
128
					    '',        -- CHECKER_ID - varchar(15)
129
					   NULL -- APPROVE_DT - datetime
130
					    )
131
				END
132
				IF(EXISTS(SELECT * FROM dbo.TR_REQUEST_COSTCENTER WHERE REQ_ID=@p_REQ_ID))
133
					BEGIN
134
					DECLARE @COST_ID VARCHAR(20)
135
					DECLARE lstCostCenter CURSOR FOR
136
					SELECT COST_ID  FROM dbo.TR_REQUEST_COSTCENTER
137
					 WHERE REQ_ID=@p_REQ_ID
138
					 OPEN lstCostCenter
139
		 			FETCH NEXT FROM lstCostCenter INTO @COST_ID
140
					WHILE @@FETCH_STATUS = 0 
141
					BEGIN 
142

    
143
					IF(@COST_ID=@DVDM_KT)
144
					BEGIN
145
						INSERT INTO dbo.PL_REQUEST_PROCESS
146
						(
147
							REQ_ID,
148
							PROCESS_ID,
149
							STATUS,
150
							ROLE_USER,
151
							BRANCH_ID,
152
							CHECKER_ID,
153
							APPROVE_DT,
154
							PARENT_PROCESS_ID,
155
							IS_LEAF,
156
							COST_ID,
157
							DVDM_ID,
158
							NOTES,
159
							IS_HAS_CHILD
160
						)
161
						VALUES
162
						(   @p_REQ_ID,        -- REQ_ID - varchar(15)
163
							'DVCM',        -- PROCESS_ID - varchar(10)
164
							'U',        -- STATUS - varchar(5)
165
							'KSV',        -- ROLE_USER - varchar(50)
166
							'',        -- BRANCH_ID - varchar(15)
167
							'',        -- CHECKER_ID - varchar(15)
168
							NULL, -- APPROVE_DT - datetime
169
						   @PROCESS_PARENT,        -- PARENT_PROCESS_ID - varchar(10)
170
							'N',        -- IS_LEAF - varchar(1)
171
							'',        -- COST_ID - varchar(15)
172
							@COST_ID ,
173
							N'Chờ đơn vị chuyên môn xác nhận' ,
174
							1       -- DVDM_ID - varchar(15)
175
						 )
176
					END
177
					ELSE
178
					BEGIN
179
				    INSERT INTO dbo.PL_REQUEST_PROCESS
180
				    (
181
				        REQ_ID,
182
				        PROCESS_ID,
183
				        STATUS,
184
				        ROLE_USER,
185
				        BRANCH_ID,
186
				        CHECKER_ID,
187
				        APPROVE_DT,
188
				        PARENT_PROCESS_ID,
189
				        IS_LEAF,
190
				        COST_ID,
191
				        DVDM_ID,
192
						NOTES,
193
						IS_HAS_CHILD
194
				    )
195
				    VALUES
196
				    (   @p_REQ_ID,        -- REQ_ID - varchar(15)
197
				        'DVCM',        -- PROCESS_ID - varchar(10)
198
				        'U',        -- STATUS - varchar(5)
199
				        'GDDV',        -- ROLE_USER - varchar(50)
200
				        '',        -- BRANCH_ID - varchar(15)
201
				        '',        -- CHECKER_ID - varchar(15)
202
						NULL, -- APPROVE_DT - datetime
203
				       @PROCESS_PARENT,        -- PARENT_PROCESS_ID - varchar(10)
204
				        'N',        -- IS_LEAF - varchar(1)
205
				        '',        -- COST_ID - varchar(15)
206
				        @COST_ID ,
207
						N'Chờ đơn vị chuyên môn xác nhận' ,
208
						1       -- DVDM_ID - varchar(15)
209
				     )
210
					 END
211
					FETCH NEXT FROM lstCostCenter INTO @COST_ID
212
					END
213
					CLOSE lstCostCenter
214
					DEALLOCATE lstCostCenter
215
					
216
				END
217
				DECLARE @TOTAL_AMT DECIMAL(18,2),@ROLE_PDTH VARCHAR(20)	,@LIMIT_VALUE DECIMAL(18,2)	,@IS_NEXT BIT,@PROCESS_ID  VARCHAR(5),@ROLE_ID VARCHAR(20),@DVDM_ID VARCHAR(20),@NOTES NVARCHAR(50),@DVDM_NAME NVARCHAR(200)
218

    
219
				
220

    
221

    
222
				IF(EXISTS(SELECT ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID='DVCM'))
223
					SET @PROCESS_PARENT='DVCM'
224
				
225
				SET @IS_NEXT=(SELECT dbo.FN_CHECK_LIMIT_TR_REQ(@p_REQ_ID,'GDDV'))
226
				--SET @IS_NEXT=1
227
				IF(@IS_NEXT =1)
228
				BEGIN
229
				SET @DVDM_ID=(SELECT DVDM_ID FROM dbo.TL_SYSROLE_LIMIT WHERE LIMIT_TYPE='PDPYC')
230
				SET @ROLE_ID=(SELECT ROLE_ID FROM dbo.TL_SYSROLE_LIMIT WHERE LIMIT_TYPE='PDPYC')
231
				SET @NOTES =(SELECT ROLE_DESC FROM dbo.TL_SYSROLE WHERE ROLE_ID=@ROLE_ID)
232
				SET @DVDM_NAME= (SELECT DVDM_NAME FROM dbo.CM_DVDM WHERE DVDM_ID=@DVDM_ID)
233
				SET @NOTES = @NOTES + ' ' + @DVDM_NAME
234

    
235
				INSERT INTO dbo.PL_REQUEST_PROCESS
236
					(
237
					    REQ_ID,
238
					    PROCESS_ID,
239
					    STATUS,
240
					    ROLE_USER,
241
					    BRANCH_ID,
242
					    CHECKER_ID,
243
					    APPROVE_DT,
244
					    PARENT_PROCESS_ID,
245
					    IS_LEAF,
246
					    COST_ID,
247
					    DVDM_ID,
248
					    NOTES,
249
					    IS_HAS_CHILD
250
					)
251
					VALUES
252
					(  @p_REQ_ID,        -- REQ_ID - varchar(15)
253
					   'GDK_PYC',        -- PROCESS_ID - varchar(10)
254
					    'U',        -- STATUS - varchar(5)
255
					    @ROLE_ID,        -- ROLE_USER - varchar(50)
256
					    '',        -- BRANCH_ID - varchar(15)
257
					    '',        -- CHECKER_ID - varchar(15)
258
					    NULL, -- APPROVE_DT - datetime
259
					    @PROCESS_PARENT,        -- PARENT_PROCESS_ID - varchar(10)
260
					    '',        -- IS_LEAF - varchar(1)
261
					    '',        -- COST_ID - varchar(15)
262
					    @DVDM_ID,        -- DVDM_ID - varchar(15)
263
					    N'Chờ ' +@NOTES+N' phê duyệt',       -- NOTES - nvarchar(500)
264
					    0       -- IS_HAS_CHILD - bit
265
					    )
266
					SET @PROCESS_PARENT= 'GDK_PYC'
267

    
268
				
269
                END
270

    
271

    
272

    
273

    
274

    
275
				INSERT INTO dbo.PL_REQUEST_PROCESS
276
				(
277
				    REQ_ID,
278
				    PROCESS_ID,
279
				    STATUS,
280
				    ROLE_USER,
281
				    BRANCH_ID,
282
				    CHECKER_ID,
283
				    APPROVE_DT,
284
				    PARENT_PROCESS_ID,
285
				    IS_LEAF,
286
				    COST_ID,
287
				    DVDM_ID,
288
				    NOTES,
289
				    IS_HAS_CHILD
290
				)
291
				VALUES
292
				(   @p_REQ_ID,        -- REQ_ID - varchar(15)
293
				    'APPROVE',        -- PROCESS_ID - varchar(10)
294
				    'U',        -- STATUS - varchar(5)
295
				    '',        -- ROLE_USER - varchar(50)
296
				    '',        -- BRANCH_ID - varchar(15)
297
				    '',        -- CHECKER_ID - varchar(15)
298
				    NULL, -- APPROVE_DT - datetime
299
				    @PROCESS_PARENT,        -- PARENT_PROCESS_ID - varchar(10)
300
				    'N',        -- IS_LEAF - varchar(1)
301
				    '',        -- COST_ID - varchar(15)
302
				    '',        -- DVDM_ID - varchar(15)
303
				    N'Hoàn tất',       -- NOTES - nvarchar(500)
304
				    NULL       -- IS_HAS_CHILD - bit
305
				    )
306
				DECLARE @PROCESS_NEXT_ID VARCHAR(10)
307
				SET @PROCESS_NEXT_ID = (SELECT TOP 1 PROCESS_ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND PARENT_PROCESS_ID=@p_PROCESS_ID)
308

    
309
				
310
				
311
				UPDATE dbo.PL_REQUEST_PROCESS SET STATUS='C' WHERE REQ_ID=@p_REQ_ID AND PARENT_PROCESS_ID=@p_PROCESS_ID
312
				UPDATE dbo.TR_REQUEST_DOC SET PROCESS_ID=@PROCESS_NEXT_ID WHERE REQ_ID=@p_REQ_ID
313
				
314
	END
315
				ELSE IF(@p_PROCESS_ID='DVCM')
316
				BEGIN
317

    
318
						DECLARE @DEP_ID VARCHAR(15),@BRANCH_ID VARCHAR(15),@PROCESS_NEXT VARCHAR(10)
319

    
320
							SET @DEP_ID=(SELECT SECUR_CODE FROM dbo.TL_USER WHERE TLNANME=@p_MAKER_ID)
321
							SET @BRANCH_ID=(SELECT TLSUBBRID FROM dbo.TL_USER WHERE TLNANME=@p_MAKER_ID)
322
							SET @ROLE_ID=(SELECT RoleName FROM dbo.TL_USER WHERE TLNANME=@p_MAKER_ID)
323
							-- LUCTV 07082020 KIEM TRA NEU ROLE KHAC ROLE GDDV THI PHAI CHUYEN ROLE THANH GDDV
324
							--IF(@ROLE_ID ='KTT')
325
							--BEGIN
326
							--	SET @ROLE_ID ='GDDV'
327
							--END
328
							SET @PROCESS_NEXT = (SELECT TOP 1 PROCESS_ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND PARENT_PROCESS_ID=@p_PROCESS_ID)
329
						
330

    
331
						UPDATE dbo.TR_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 PC.DVDM_ID FROM dbo.PL_COSTCENTER PC LEFT JOIN
332
																																	dbo.PL_COSTCENTER_DT PT ON PT.COST_ID=PC.COST_ID WHERE BRANCH_ID=@BRANCH_ID AND DEP_ID=@DEP_ID)
333
						UPDATE dbo.PL_REQUEST_PROCESS SET STATUS='P',CHECKER_ID=@p_MAKER_ID,
334
						APPROVE_DT=GETDATE() ,NOTES=N'Đơn vị chuyên môn xác nhận' 
335
						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 PC.DVDM_ID FROM dbo.PL_COSTCENTER PC LEFT JOIN
336
																																	dbo.PL_COSTCENTER_DT PT ON PT.COST_ID=PC.COST_ID
337
																																	WHERE BRANCH_ID=@BRANCH_ID AND DEP_ID=@DEP_ID)
338
						
339
						IF(NOT EXISTS( SELECT * FROM dbo.PL_REQUEST_PROCESS WHERE PROCESS_ID=@p_PROCESS_ID AND REQ_ID=@p_REQ_ID AND STATUS='C'))
340
						BEGIN
341
						
342
										UPDATE dbo.PL_REQUEST_PROCESS SET [STATUS]='C' WHERE PROCESS_ID=@PROCESS_NEXT AND REQ_ID=@p_REQ_ID
343
										UPDATE dbo.TR_REQUEST_DOC SET PROCESS_ID=@PROCESS_NEXT WHERE REQ_ID=@p_REQ_ID
344
						
345
						END
346
				END
347

    
348
			--IF(@PROCESS_NEXT='APPROVE')
349
			IF(EXISTS(SELECT * FROM TR_REQUEST_DOC WHERE PROCESS_ID ='APPROVE' AND REQ_ID =@p_REQ_ID))
350
			BEGIN
351
				DECLARE @TempTB TABLE
352
				(
353
					TOTAL_AMT DECIMAL(18,2),
354
					TRADE_ID VARCHAR(20),
355
					PLAN_ID VARCHAR(20)
356
				)
357
				INSERT INTO @TempTB			
358
				SELECT SUM(DT.TOTAL_AMT) TOTAL_AMT,PLDT.TRADE_ID,PLDT.PLAN_ID FROM dbo.TR_REQUEST_DOC_DT DT 
359
				LEFT JOIN dbo.PL_REQUEST_DOC_DT PLDT ON DT.PL_REQDT_ID=PLDT.REQDT_ID
360
				WHERE TRAN_TYPE_ID  IN (SELECT TRAN_TYPE_ID FROM dbo.CM_TRAN_TYPE WHERE NOTES='XK') AND DT.REQ_DOC_ID=@p_REQ_ID
361
				GROUP BY	PLDT.TRADE_ID,PLDT.PLAN_ID
362
				UPDATE dbo.PL_TRADEDETAIL SET AMT_EXE =AMT_EXE + (SELECT TOTAL_AMT FROM @TempTB WHERE [@TempTB].TRADE_ID=PL_TRADEDETAIL.TRADE_ID AND PL_TRADEDETAIL.PLAN_ID=[@TempTB].PLAN_ID) WHERE PL_TRADEDETAIL.TRADE_ID IN (SELECT TRADE_ID FROM @TempTB)
363

    
364
				IF(EXISTS(SELECT * FROM dbo.TR_REQUEST_DOC_DT WHERE REQ_DOC_ID=@p_REQ_ID AND  TRAN_TYPE_ID NOT IN (SELECT TRN_TYPE FROM dbo.CM_TRAN_TYPE WHERE NOTES='XK')))
365
					EXEC dbo.TR_REQ_DOC_Ins_To_PO @p_TR_REQ_ID = @p_REQ_ID -- varchar(15)
366
				
367
			END
368
		END
369
				
370
		IF @@Error <> 0 GOTO ABORT
371
COMMIT TRANSACTION
372
SELECT 0 as Result, '' ErrorDesc
373
RETURN 0
374
ABORT:
375
BEGIN
376
		ROLLBACK TRANSACTION
377
		SELECT -1 as Result, '' ErrorDesc
378
		RETURN -1
379
End
380

    
381

    
382

    
383

    
384

    
385