Project

General

Profile

PL_REQ_PROCESS_CHILD_Ins.txt

Luc Tran Van, 08/12/2022 10:27 AM

 
1
ALTER PROCEDURE dbo.PL_REQ_PROCESS_CHILD_Ins
2
@p_MAKER_ID VARCHAR(20),
3
@p_XMLData XML
4
AS
5
BEGIN TRANSACTION
6
		--- KHAI BAO CHUOI ID TRA VÊ PHUC VU VIEC GUI MAI;
7
		DECLARE @ID_RETURN_FOR_EMAIL VARCHAR(500) =''
8
		-------------------------------------------------
9
		Declare @hdoc INT
10
		Exec sp_xml_preparedocument @hdoc Output,@p_XMLData
11
		DECLARE ListREQ  CURSOR FOR
12
		SELECT *
13
		FROM OPENXML(@hDoc,'/Root/ListREQ',2)
14
		WITH 
15
		(
16
			REQ_ID	varchar(20)  ,
17
			PROCESS_ID	varchar(20),
18
			TLNAME VARCHAR(20),
19
			TYPE_JOB VARCHAR(20),
20
			REF_ID INT
21
		
22
		)
23
		OPEN ListREQ
24
DECLARE @LEVEL INT,@REQ_ID VARCHAR(20),@PROCESS_ID VARCHAR(20),@TYPE_JOB VARCHAR(20),@TLNAME VARCHAR(20),@DEP_ID VARCHAR(20),@BRANCH_ID VARCHAR(20)
25

    
26
DECLARE @REF_ID INT, @TYPE_JOB_NAME NVARCHAR(100), @FULLNAME NVARCHAR(100), @USER_PROCESS_LEVEL INT
27

    
28
SET @BRANCH_ID=(SELECT TLSUBBRID FROM dbo.TL_USER WHERE TLNANME=@p_MAKER_ID)
29
SET @DEP_ID=(SELECT SECUR_CODE FROM dbo.TL_USER WHERE TLNANME=@p_MAKER_ID)
30

    
31
DECLARE @lstCOST TABLE(
32
 COST_ID VARCHAR(20)
33
)
34

    
35
INSERT INTO @lstCOST
36
SELECT COST_ID FROM dbo.PL_COSTCENTER_DT WHERE BRANCH_ID=@BRANCH_ID AND DEP_ID=@DEP_ID
37

    
38

    
39
FETCH NEXT FROM ListREQ INTO @REQ_ID,@PROCESS_ID,@TLNAME,@TYPE_JOB,@REF_ID
40
WHILE @@FETCH_STATUS=0
41
BEGIN
42
	IF(@TLNAME IS NULL OR @TLNAME='')
43
	BEGIN
44
			SELECT -1 Result, N'Vui lòng chọn người được giao xử lý phiếu số' ErrorDesc 
45
			ROLLBACK TRANSACTION
46
			RETURN '-1'
47
	END
48
	IF(@TYPE_JOB IS NULL OR @TYPE_JOB='')
49
	BEGIN
50
			SELECT -1 Result, N'Vui lòng chọn vai trò của người được giao xử lý phiếu' ErrorDesc 
51
			ROLLBACK TRANSACTION
52
			RETURN '-1'
53
	END
54
	IF(@TYPE_JOB ='TP')
55
	BEGIN
56
			--SELECT -1 Result, N'Vui lòng kéo thanh cuộn sang phải để chọn vai trò của người được giao xử lý phiếu. Chọn vai trò kiểm soát nếu nhân viên đóng vai trò phê duyệt kí nháy. Chọn vai trò xử lý phiếu nếu nhân viên trực tiếp xử lý tờ trình' ErrorDesc 
57
			--ROLLBACK TRANSACTION
58
			--RETURN '-1'
59
			SET @TYPE_JOB ='XL'
60
	END
61
	IF(EXISTS(SELECT RoleName FROM TL_USER WHERE TLNANME =@TLNAME AND RoleName IN ('GDDV','GDK','PTGD') AND @TYPE_JOB ='XL'))
62
	BEGIN
63
			SELECT -1 Result, N'Nếu chọn vai trò xử lý, bạn không được phép chọn người dùng thuộc nhóm quyền lãnh đạo. Vui lòng chọn người dùng khác xử lý phiếu' ErrorDesc 
64
			ROLLBACK TRANSACTION
65
			RETURN '-1'
66
	END
67
  IF (EXISTS(SELECT ID FROM dbo.PL_REQUEST_PROCESS_CHILD WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND TYPE_JOB = 'XL' AND STATUS_JOB = 'P'))
68
  BEGIN
69
    SELECT -1 Result, N'Điều phối thất bại, phiếu đã được xử lý trước đó' ErrorDesc 
70
  	ROLLBACK TRANSACTION
71
  	RETURN '-1'
72
  END
73
  IF (EXISTS(SELECT ID FROM dbo.PL_REQUEST_PROCESS_CHILD WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND TYPE_JOB = @TYPE_JOB AND TLNAME = @TLNAME))
74
  BEGIN
75
    SELECT -1 Result, N'Điều phối thất bại, nhân viên đã được điều phối cùng vai trò trước đó' ErrorDesc 
76
  	ROLLBACK TRANSACTION
77
  	RETURN '-1'
78
  END
79
		SET @LEVEL=ISNULL((SELECT TOP 1 LEVEL_JOB 
80
			FROM dbo.PL_REQUEST_PROCESS_CHILD 
81
			WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID 
82
			ORDER BY LEVEL_JOB DESC),0)
83

    
84
		-- BAT DAU GAN GIA TRI
85
		SET @ID_RETURN_FOR_EMAIL = @ID_RETURN_FOR_EMAIL +','+@REQ_ID
86
		-----------------------------------------------------------
87
    -- TH: Công việc đã được điều phối trước đó
88
		IF(EXISTS(SELECT * FROM dbo.PL_REQUEST_PROCESS_CHILD WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND TYPE_JOB=@TYPE_JOB ))
89
		BEGIN
90
      -- TH: Phiếu đã được điều phối cho người khác xử lý trước đó
91
			IF(EXISTS(SELECT ID FROM dbo.PL_REQUEST_PROCESS_CHILD WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND TYPE_JOB = @TYPE_JOB AND @TYPE_JOB = 'XL' AND TLNAME <> @TLNAME))
92
  		BEGIN
93
        IF(EXISTS(SELECT ID FROM dbo.PL_REQUEST_PROCESS_CHILD WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND TLNAME = @TLNAME))
94
        BEGIN
95
          SET @USER_PROCESS_LEVEL = (SELECT LEVEL_JOB FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND TLNAME = @TLNAME)
96
          DELETE PL_REQUEST_PROCESS_CHILD WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND TLNAME = @TLNAME
97
          UPDATE PL_REQUEST_PROCESS_CHILD SET LEVEL_JOB = LEVEL_JOB - 1 WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND LEVEL_JOB > @USER_PROCESS_LEVEL
98
          -- Ghi đè người xử lý
99
  			  UPDATE dbo.PL_REQUEST_PROCESS_CHILD SET TLNAME=@TLNAME WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND TYPE_JOB=@TYPE_JOB
100
        END
101
        ELSE
102
        BEGIN
103
          -- Ghi đè người xử lý
104
  			  UPDATE dbo.PL_REQUEST_PROCESS_CHILD SET TLNAME=@TLNAME WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND TYPE_JOB=@TYPE_JOB
105
        END   
106
		  END
107
      ELSE
108
      BEGIN
109
        -- TH: Người dùng đã được điều phối trước đó
110
        IF (EXISTS(SELECT ID FROM dbo.PL_REQUEST_PROCESS_CHILD WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND TLNAME = @TLNAME))
111
        BEGIN
112
          SET @USER_PROCESS_LEVEL = (SELECT LEVEL_JOB FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND TLNAME = @TLNAME)
113
          IF (@TYPE_JOB = 'XL' AND EXISTS(SELECT ID FROM dbo.PL_REQUEST_PROCESS_CHILD WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND TLNAME = @TLNAME and TYPE_JOB = 'KS'))
114
          BEGIN
115
            DELETE PL_REQUEST_PROCESS_CHILD WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND TLNAME = @TLNAME
116
            UPDATE PL_REQUEST_PROCESS_CHILD SET LEVEL_JOB = LEVEL_JOB - 1, STATUS_JOB = 'U' WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND LEVEL_JOB > @USER_PROCESS_LEVEL
117
            INSERT INTO dbo.PL_REQUEST_PROCESS_CHILD
118
        		(
119
        		    REQ_ID,
120
        		    PROCESS_ID,
121
        		    TLNAME,
122
        		    TYPE_JOB,
123
        		    LEVEL_JOB,
124
        		    STATUS_JOB,
125
        		    RECORD_STATUS
126
        		)
127
        		VALUES
128
        		(   @REQ_ID, -- REQ_ID - varchar(20)
129
        		    @REF_ID, -- PROCESS_ID - varchar(20)
130
        		    @TLNAME, -- TLNAME - varchar(50)
131
        		    @TYPE_JOB, -- TYPE_JOB - varchar(50)
132
        		    @LEVEL,  -- LEVEL_JOB - int
133
        		    'C', -- STATUS_JOB - varchar(10)
134
        		    '1'  -- RECORD_STATUS - varchar(15)
135
    		    )
136
          END
137
          ELSE IF (@TYPE_JOB = 'KS' AND EXISTS(SELECT ID FROM dbo.PL_REQUEST_PROCESS_CHILD WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND TLNAME = @TLNAME and TYPE_JOB = 'XL'))
138
          BEGIN
139
            DELETE PL_REQUEST_PROCESS_CHILD WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND TLNAME = @TLNAME
140
            INSERT INTO dbo.PL_REQUEST_PROCESS_CHILD
141
        		(
142
        		    REQ_ID,
143
        		    PROCESS_ID,
144
        		    TLNAME,
145
        		    TYPE_JOB,
146
        		    LEVEL_JOB,
147
        		    STATUS_JOB,
148
        		    RECORD_STATUS
149
        		)
150
        		VALUES
151
        		(   @REQ_ID, -- REQ_ID - varchar(20)
152
        		    @REF_ID, -- PROCESS_ID - varchar(20)
153
        		    @TLNAME, -- TLNAME - varchar(50)
154
        		    @TYPE_JOB, -- TYPE_JOB - varchar(50)
155
        		    @LEVEL,  -- LEVEL_JOB - int
156
        		    'C', -- STATUS_JOB - varchar(10)
157
        		    '1'  -- RECORD_STATUS - varchar(15)
158
    		    )
159
          END
160
        END
161
        ELSE
162
        BEGIN
163
          IF (EXISTS(SELECT ID FROM dbo.PL_REQUEST_PROCESS_CHILD WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID and TYPE_JOB = 'XL'))
164
          BEGIN
165
            UPDATE dbo.PL_REQUEST_PROCESS_CHILD SET LEVEL_JOB = LEVEL_JOB + 1 WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND LEVEL_JOB=@LEVEL
166
        		INSERT INTO dbo.PL_REQUEST_PROCESS_CHILD
167
        		(
168
        		    REQ_ID,
169
        		    PROCESS_ID,
170
        		    TLNAME,
171
        		    TYPE_JOB,
172
        		    LEVEL_JOB,
173
        		    STATUS_JOB,
174
        		    RECORD_STATUS
175
        		)
176
        		VALUES
177
        		(   @REQ_ID, -- REQ_ID - varchar(20)
178
        		    @REF_ID, -- PROCESS_ID - varchar(20)
179
        		    @TLNAME, -- TLNAME - varchar(50)
180
        		    @TYPE_JOB, -- TYPE_JOB - varchar(50)
181
        		    @LEVEL,  -- LEVEL_JOB - int
182
        		    'U', -- STATUS_JOB - varchar(10)
183
        		    '1'  -- RECORD_STATUS - varchar(15)
184
    		    )
185
          END
186
          ELSE
187
          BEGIN
188
            UPDATE dbo.PL_REQUEST_PROCESS_CHILD SET STATUS_JOB = 'U' WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND LEVEL_JOB=@LEVEL
189
            INSERT INTO dbo.PL_REQUEST_PROCESS_CHILD
190
        		(
191
        		    REQ_ID,
192
        		    PROCESS_ID,
193
        		    TLNAME,
194
        		    TYPE_JOB,
195
        		    LEVEL_JOB,
196
        		    STATUS_JOB,
197
        		    RECORD_STATUS
198
        		)
199
        		VALUES
200
        		(   @REQ_ID, -- REQ_ID - varchar(20)
201
        		    @REF_ID, -- PROCESS_ID - varchar(20)
202
        		    @TLNAME, -- TLNAME - varchar(50)
203
        		    @TYPE_JOB, -- TYPE_JOB - varchar(50)
204
        		    @LEVEL + 1,  -- LEVEL_JOB - int
205
        		    'C', -- STATUS_JOB - varchar(10)
206
        		    '1'  -- RECORD_STATUS - varchar(15)
207
    		    )
208
          END
209
        END 
210
      END
211
      SET @TYPE_JOB_NAME =(SELECT TOP 1 CONTENT FROM dbo.CM_ALLCODE WHERE CDNAME = 'JOB_TYPE' AND CDTYPE='REQ')
212
			SET @FULLNAME =(SELECT TOP 1 TLFullName FROM dbo.TL_USER WHERE TLNANME=@TLNAME)
213
			
214
			INSERT INTO dbo.PL_PROCESS
215
			(
216
			    REQ_ID,
217
			    PROCESS_ID,
218
			    CHECKER_ID,
219
			    APPROVE_DT,
220
			    PROCESS_DESC,
221
			    NOTES
222
			)
223
			VALUES
224
			(   @REQ_ID,        -- REQ_ID - varchar(15)
225
			    @PROCESS_ID,        -- PROCESS_ID - varchar(10)
226
			    @p_MAKER_ID,        -- CHECKER_ID - varchar(15)
227
			    GETDATE(), -- APPROVE_DT - datetime
228
			    N'Nhân viên tiếp nhận ' + @FULLNAME,       -- PROCESS_DESC - nvarchar(1000)
229
			    N'Điều phối '+@TYPE_JOB_NAME        -- NOTES - nvarchar(1000)
230
	    )
231
		END
232
    -- TH: Công việc chưa được điều phối trước đó
233
		ELSE
234
		BEGIN
235
		IF(@LEVEL=0)
236
		BEGIN
237
			SET @LEVEL=@LEVEL +1
238
				INSERT INTO dbo.PL_REQUEST_PROCESS_CHILD
239
			(
240
				REQ_ID,
241
				PROCESS_ID,
242
				TLNAME,
243
				TYPE_JOB,
244
				LEVEL_JOB,
245
				STATUS_JOB,
246
				RECORD_STATUS
247
			)
248
			VALUES
249
			(   @REQ_ID, -- REQ_ID - varchar(20)
250
				@REF_ID, -- PROCESS_ID - varchar(20)
251
				@p_MAKER_ID, -- TLNAME - varchar(50)
252
				'TP', -- TYPE_JOB - varchar(50)
253
				@LEVEL,  -- LEVEL_JOB - int
254
				'U', -- STATUS_JOB - varchar(10)
255
				'1'  -- RECORD_STATUS - varchar(15)
256
			)
257
		END
258

    
259
		IF(@TYPE_JOB='KS' AND EXISTS(SELECT * FROM dbo.PL_REQUEST_PROCESS_CHILD WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND TYPE_JOB='XL'))
260
		BEGIN
261
      IF (EXISTS(SELECT * FROM dbo.PL_REQUEST_PROCESS_CHILD WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND TYPE_JOB='XL' AND TLNAME = @TLNAME))
262
      BEGIN
263
        UPDATE dbo.PL_REQUEST_PROCESS_CHILD SET TYPE_JOB = 'KS' WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID  AND TLNAME = @TLNAME
264
      END
265
      ELSE
266
      BEGIN
267
        UPDATE dbo.PL_REQUEST_PROCESS_CHILD SET LEVEL_JOB=@LEVEL + 1  WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID  AND TYPE_JOB='XL'
268
  			SET @LEVEL=@LEVEL-1
269
  			UPDATE dbo.PL_REQUEST_PROCESS_CHILD SET STATUS_JOB='U' WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND LEVEL_JOB=@LEVEL
270
        INSERT INTO dbo.PL_REQUEST_PROCESS_CHILD
271
  			(
272
  				REQ_ID,
273
  				PROCESS_ID,
274
  				TLNAME,
275
  				TYPE_JOB,
276
  				LEVEL_JOB,
277
  				STATUS_JOB,
278
  				RECORD_STATUS
279
  			)
280
  			VALUES
281
  			(   @REQ_ID, -- REQ_ID - varchar(20)
282
  				@REF_ID, -- PROCESS_ID - varchar(20)
283
  				@TLNAME, -- TLNAME - varchar(50)
284
  				@TYPE_JOB, -- TYPE_JOB - varchar(50)
285
  				@LEVEL + 1,  -- LEVEL_JOB - int
286
  				'U', -- STATUS_JOB - varchar(10)
287
  				'1'  -- RECORD_STATUS - varchar(15)
288
  		  )
289
      END
290
		END
291
		ELSE
292
		BEGIN
293
      IF (@TYPE_JOB = 'XL' AND EXISTS(SELECT ID FROM dbo.PL_REQUEST_PROCESS_CHILD WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND TYPE_JOB='KS' AND TLNAME = @TLNAME))
294
      BEGIN
295
        SET @USER_PROCESS_LEVEL = (SELECT LEVEL_JOB FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND TLNAME = @TLNAME)
296
        DELETE PL_REQUEST_PROCESS_CHILD WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND TLNAME = @TLNAME
297
        UPDATE PL_REQUEST_PROCESS_CHILD SET LEVEL_JOB = LEVEL_JOB - 1, STATUS_JOB = 'U' WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND LEVEL_JOB > @USER_PROCESS_LEVEL
298
        INSERT INTO dbo.PL_REQUEST_PROCESS_CHILD
299
    		(
300
    		    REQ_ID,
301
    		    PROCESS_ID,
302
    		    TLNAME,
303
    		    TYPE_JOB,
304
    		    LEVEL_JOB,
305
    		    STATUS_JOB,
306
    		    RECORD_STATUS
307
    		)
308
    		VALUES
309
    		(   @REQ_ID, -- REQ_ID - varchar(20)
310
    		    @REF_ID, -- PROCESS_ID - varchar(20)
311
    		    @TLNAME, -- TLNAME - varchar(50)
312
    		    @TYPE_JOB, -- TYPE_JOB - varchar(50)
313
    		    @LEVEL,  -- LEVEL_JOB - int
314
    		    'C', -- STATUS_JOB - varchar(10)
315
    		    '1'  -- RECORD_STATUS - varchar(15)
316
		    )
317
      END
318
      ELSE
319
      BEGIN
320
        UPDATE dbo.PL_REQUEST_PROCESS_CHILD SET STATUS_JOB='U' WHERE REQ_ID=@REQ_ID AND PROCESS_ID=@REF_ID AND LEVEL_JOB=@LEVEL
321
    		INSERT INTO dbo.PL_REQUEST_PROCESS_CHILD
322
    		(
323
    		    REQ_ID,
324
    		    PROCESS_ID,
325
    		    TLNAME,
326
    		    TYPE_JOB,
327
    		    LEVEL_JOB,
328
    		    STATUS_JOB,
329
    		    RECORD_STATUS
330
    		)
331
    		VALUES
332
    		(   @REQ_ID, -- REQ_ID - varchar(20)
333
    		    @REF_ID, -- PROCESS_ID - varchar(20)
334
    		    @TLNAME, -- TLNAME - varchar(50)
335
    		    @TYPE_JOB, -- TYPE_JOB - varchar(50)
336
    		    @LEVEL + 1,  -- LEVEL_JOB - int
337
    		    'C', -- STATUS_JOB - varchar(10)
338
    		    '1'  -- RECORD_STATUS - varchar(15)
339
		    )
340
      END
341
		END
342
		SET @TYPE_JOB_NAME =(SELECT TOP 1 CONTENT FROM dbo.CM_ALLCODE WHERE CDNAME = 'JOB_TYPE' AND CDTYPE='REQ' AND CDVAL=@TYPE_JOB)
343
		SET @FULLNAME =(SELECT  TOP 1 TLFullName FROM dbo.TL_USER WHERE TLNANME=@TLNAME)
344
			
345

    
346
		INSERT INTO dbo.PL_PROCESS
347
					(
348
					    REQ_ID,
349
					    PROCESS_ID,
350
					    CHECKER_ID,
351
					    APPROVE_DT,
352
					    PROCESS_DESC,
353
					    NOTES
354
					)
355
					VALUES
356
					(   @REQ_ID,        -- REQ_ID - varchar(15)
357
					    @PROCESS_ID,        -- PROCESS_ID - varchar(10)
358
					    @p_MAKER_ID,        -- CHECKER_ID - varchar(15)
359
					    GETDATE(), -- APPROVE_DT - datetime
360
					    N'Nhân viên tiếp nhận ' + @FULLNAME,       -- PROCESS_DESC - nvarchar(1000)
361
					    N'Điều phối '+@TYPE_JOB_NAME        -- NOTES - nvarchar(1000)
362
					    )
363
		END
364
		FETCH NEXT FROM ListREQ INTO @REQ_ID,@PROCESS_ID,@TLNAME,@TYPE_JOB,@REF_ID
365
END
366
CLOSE ListREQ
367

    
368
DEALLOCATE ListREQ
369
		IF @@Error <> 0 GOTO ABORT
370
COMMIT TRANSACTION
371
SELECT 0 as Result, @ID_RETURN_FOR_EMAIL AS ErrorDesc
372
RETURN 0
373
ABORT:
374
BEGIN
375
		ROLLBACK TRANSACTION
376
		SELECT -1 as Result, '' ErrorDesc
377
		RETURN -1
378
End