Project

General

Profile

PL_REQUEST_DOC_PROCESS_Upd.txt

Luc Tran Van, 10/21/2022 11:07 AM

 
1
ALTER PROCEDURE dbo.PL_REQUEST_DOC_PROCESS_Upd
2
@p_REQ_ID VARCHAR(15)=NULL,
3
@p_MAKER_ID	varchar(20)  = NULL,
4
@p_BRANCH_ID VARCHAR(15)=NULL,
5
@p_TC_NOTES NVARCHAR(4000),
6
@p_KT_NOTES NVARCHAR(4000),
7
@p_TK_TGD_NOTES NVARCHAR(4000),
8
@p_TK_HDQT_NOTES NVARCHAR(4000),
9
@p_ORTHER_NOTES NVARCHAR(4000),
10
@p_ListCostCenter XML,
11
@p_ListTransfer XML,
12
@p_IS_AUTHORITY bit
13
AS
14
	
15
	
16
	DECLARE @IS_AUTHORITY_HDQT VARCHAR(1)	
17
	DECLARE @DEP_ID VARCHAR(15),@BRANCH_ID VARCHAR(15),@ROLE_ID VARCHAR(20),
18
	@PROCESS_CURR VARCHAR(10),
19
	@STEP_CURR INT,
20
	@STEP_NEXT INT,
21
	@PROCESS_NEXT VARCHAR(10)
22

    
23
	SET @PROCESS_CURR = (SELECT TOP 1 PROCESS_ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND STATUS='C')
24
	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)
25

    
26
	SET @DEP_ID=(SELECT SECUR_CODE FROM dbo.TL_USER WHERE TLNANME=@p_MAKER_ID)
27
	SET @BRANCH_ID=(SELECT TLSUBBRID FROM dbo.TL_USER WHERE TLNANME=@p_MAKER_ID)
28
	SET @ROLE_ID=(SELECT RoleName FROM dbo.TL_USER WHERE TLNANME=@p_MAKER_ID)
29
		BEGIN TRANSACTION
30
		--LUCTV 13042021 - BO SUNG CAP NHAT Y KIEN TK TGD, TK HDQT
31
    IF(@PROCESS_CURR='TKTGD')
32
		BEGIN
33
			UPDATE dbo.PL_REQUEST_DOC SET TK_TGD_NOTES=@p_TK_TGD_NOTES WHERE REQ_ID=@p_REQ_ID
34
		END
35
		ELSE IF(@PROCESS_CURR='TKHDQT')
36
		BEGIN
37
			UPDATE dbo.PL_REQUEST_DOC SET TK_HDQT_NOTES=@p_TK_HDQT_NOTES, OTHER_NOTES = @p_ORTHER_NOTES, IS_AUTHORITY = @p_IS_AUTHORITY WHERE REQ_ID=@p_REQ_ID
38
		END
39
		-- END LUCTV
40
		ELSE
41
		BEGIN
42
		IF(@PROCESS_CURR='KT')
43
		BEGIN
44
			UPDATE dbo.PL_REQUEST_DOC SET KT_NOTES=@p_KT_NOTES WHERE REQ_ID=@p_REQ_ID
45
		END
46
		ELSE IF(@PROCESS_CURR='TC')
47
		BEGIN
48
			UPDATE dbo.PL_REQUEST_DOC SET TC_NOTES=@p_TC_NOTES WHERE REQ_ID=@p_REQ_ID
49
		END
50
		IF @@Error <> 0 GOTO ABORT
51
		Declare @hdoc INT
52
		
53
		Declare 
54
		@REQ_TRANSFER_ID	varchar(15),
55
		@FR_PLAN_ID	varchar(15),
56
			@FR_TRADE_ID	varchar(15),
57
			@FR_GOOD_ID	varchar(15),
58
			@FR_BRN_ID	varchar(15),
59
			@TO_BRN_ID	varchar(15),
60
			@TO_PLAN_ID	varchar(15),
61
			@TO_TRADE_ID	varchar(15),	
62
			@TO_GOOD_ID	varchar(15),	
63
			@QTY  DECIMAL(18,0),
64
			@FR_DEP_ID VARCHAR(20),
65
			@TO_DEP_ID VARCHAR(20),
66
			@FR_DVDM_ID VARCHAR(20),
67
			@TO_DVDM_ID VARCHAR(20),
68
			@FR_KHOI_ID VARCHAR(20),
69
			@TO_KHOI_ID VARCHAR(20),
70
			@FR_GD_TYPE VARCHAR(20),
71
			@TO_GD_TYPE VARCHAR(20),
72
	
73
		@TOTAL_AMT  DECIMAL(18,0),
74
		@NOTES NVARCHAR(500),
75
		@AUTH_STATUS VARCHAR(5),
76
		@COST_ID	varchar(15),
77
		@REQ_COST_ID	varchar(15),
78
		@DVDM_ID VARCHAR(20),
79
    @FR_AMT_APP decimal(18),
80
    @FR_AMT_TF DECIMAL(18),
81
    @FR_AMT_RECEIVE_TF DECIMAL(18),
82
    @FR_AMT_EXE DECIMAL(18),
83
    @FR_AMT_ETM DECIMAL(18),
84
    @FR_AMT_ETM_TMP decimal(18)
85
		IF(EXISTS(SELECT REQ_COST_ID FROM dbo.PL_REQUEST_COSTCENTER WHERE REQ_ID=@p_REQ_ID AND AUTH_STATUS <>'A'))
86
		BEGIN 
87
				--Insert into TABLE PL_REQUEST_DOC_DT
88
			Exec sp_xml_preparedocument @hdoc Output,@p_ListCostCenter
89
			DECLARE ListCostCenters  CURSOR FOR
90
			SELECT *
91
			FROM OPENXML(@hDoc,'/Root/ListCostCenter',2)
92
			WITH 
93
			(
94
				REQ_COST_ID VARCHAR(15),
95
				COST_ID	varchar(15),	
96
				AUTH_STATUS VARCHAR(5),
97
				NOTES	nvarchar(1000)
98
				
99
			)
100
			OPEN ListCostCenters
101

    
102
			FETCH NEXT FROM ListCostCenters INTO @REQ_COST_ID,@COST_ID,@AUTH_STATUS, @NOTES
103
			WHILE @@FETCH_STATUS = 0	
104
			BEGIN
105
				IF(EXISTS(SELECT REQ_COST_ID FROM dbo.PL_REQUEST_COSTCENTER WHERE COST_ID=@COST_ID AND REQ_ID=@p_REQ_ID AND AUTH_STATUS <> 'A'))
106
				BEGIN
107
						UPDATE dbo.PL_REQUEST_COSTCENTER SET NOTES=@NOTES WHERE REQ_COST_ID=@REQ_COST_ID AND COST_ID=@COST_ID 				
108
				END
109
			
110
				
111
				
112
				IF @@ERROR <> 0 GOTO ABORT1
113
			-- next Group_Id
114
				FETCH NEXT FROM ListCostCenters INTO @REQ_COST_ID,@COST_ID,@AUTH_STATUS, @NOTES
115
			END
116
			CLOSE ListCostCenters
117
			DEALLOCATE ListCostCenters
118
			
119
			--IF(NOT EXISTS( SELECT * FROM dbo.PL_REQUEST_PROCESS WHERE PROCESS_ID=@PROCESS_CURR AND REQ_ID=@p_REQ_ID AND STATUS='C'))
120
			--BEGIN
121
						
122
			--			UPDATE dbo.PL_REQUEST_PROCESS SET [STATUS]='C' WHERE PROCESS_ID=@PROCESS_NEXT AND REQ_ID=@p_REQ_ID
123
			--			UPDATE dbo.PL_REQUEST_DOC SET PROCESS_ID=@PROCESS_NEXT WHERE REQ_ID=@p_REQ_ID
124
						
125
			--END
126
		
127
		END
128

    
129
		
130

    
131
		IF(EXISTS(SELECT REQ_TRANSFER_ID FROM dbo.PL_REQUEST_TRANSFER WHERE REQ_DOC_ID=@p_REQ_ID AND AUTH_STATUS <>'A' AND (FR_BRN_ID=@BRANCH_ID AND (FR_DEP_ID IS NULL OR FR_DEP_ID='' OR FR_DEP_ID=@DEP_ID))))
132
		BEGIN
133
			DECLARE @TABLE TABLE(
134
				REQ_TRANSFER_ID VARCHAR(15),
135
				FR_PLAN_ID	varchar(15),
136
				FR_TRADE_ID	varchar(15),
137
				FR_GOOD_ID	varchar(15),
138
				FR_BRN_ID	varchar(15),
139
				TO_BRN_ID	varchar(15),
140
				TO_PLAN_ID	varchar(15),
141
				TO_TRADE_ID	varchar(15),	
142
				TO_GOOD_ID	varchar(15),	
143
				QTY  DECIMAL(18,0),
144
				TOTAL_AMT	decimal(18),	
145
				AUTH_STATUS VARCHAR(10),
146
				NOTES	nvarchar(1000),
147
				FR_DEP_ID VARCHAR(20),
148
				TO_DEP_ID VARCHAR(20),
149
				FR_DVDM_ID VARCHAR(20),
150
				TO_DVDM_ID VARCHAR(20),
151
				FR_KHOI_ID VARCHAR(20),
152
				TO_KHOI_ID VARCHAR(20),
153
				FR_GD_TYPE_ID VARCHAR(20),
154
				TO_GD_TYPE_ID VARCHAR(20),
155
        FR_AMT_APP decimal(18),
156
        FR_AMT_TF DECIMAL(18),
157
        FR_AMT_RECEIVE_TF DECIMAL(18),
158
        FR_AMT_EXE DECIMAL(18),
159
        FR_AMT_ETM DECIMAL(18),
160
        FR_AMT_ETM_TMP decimal(18)
161
			)
162
			Exec sp_xml_preparedocument @hdoc Output,@p_ListTransfer
163
			INSERT INTO @TABLE		
164
			SELECT *
165
			FROM OPENXML(@hDoc,'/Root/ListTransfer',2)
166
			WITH 
167
			(
168
				REQ_TRANSFER_ID VARCHAR(15),
169
				FR_PLAN_ID	varchar(15),
170
				FR_TRADE_ID	varchar(15),
171
				FR_GOOD_ID	varchar(15),
172
				FR_BRN_ID	varchar(15),
173
				TO_BRN_ID	varchar(15),
174
				TO_PLAN_ID	varchar(15),
175
				TO_TRADE_ID	varchar(15),	
176
				TO_GOOD_ID	varchar(15),	
177
				QTY  DECIMAL(18,0),
178
				TOTAL_AMT	decimal(18),	
179
				AUTH_STATUS VARCHAR(10),
180
				NOTES	nvarchar(1000),
181
				FR_DEP_ID VARCHAR(20),
182
				TO_DEP_ID VARCHAR(20),
183
				FR_DVDM_ID VARCHAR(20),
184
				TO_DVDM_ID VARCHAR(20),
185
				FR_KHOI_ID VARCHAR(20),
186
				TO_KHOI_ID VARCHAR(20),
187
				FR_GD_TYPE_ID VARCHAR(20),
188
				TO_GD_TYPE_ID VARCHAR(20),
189
        FR_AMT_APP decimal(18),
190
        FR_AMT_TF DECIMAL(18),
191
        FR_AMT_RECEIVE_TF DECIMAL(18),
192
        FR_AMT_EXE DECIMAL(18),
193
        FR_AMT_ETM DECIMAL(18),
194
        FR_AMT_ETM_TMP decimal(18)
195
		
196
			)
197
			
198
			--IF(EXISTS(SELECT * FROM(
199
			--SELECT TB.FR_TRADE_ID, SUM(TB.TOTAL_AMT) AS TOTAL_TRANSFER,SUM (ISNULL(PT.AMT_APP,0) + ISNULL(PT.AMT_RECEIVE_TF,0)- ISNULL(PT.AMT_TF,0)- ISNULL(PT.AMT_ETM,0)   ) AS TOTAL_AMT FROM @TABLE TB 
200
			--LEFT JOIN dbo.PL_TRADEDETAIL PT ON PT.TRADE_ID=TB.FR_TRADE_ID
201
			--GROUP BY TB.FR_TRADE_ID
202
			--) TEMP		
203
			--WHERE TEMP.TOTAL_TRANSFER > TEMP.TOTAL_AMT
204
			--))
205
			--BEGIN
206
			--		SELECT '-1' Result, '' REQ_ID, N'Số tiền điều chuyển lớn hơn số tiền dự kiến còn lại của hạng mục ngân sách' ErrorDesc 
207
			--		ROLLBACK TRANSACTION
208
			--		RETURN '-1'
209
			--END
210

    
211
			DECLARE ListTransfers  CURSOR FOR
212
			SELECT REQ_TRANSFER_ID,
213
              FR_PLAN_ID,
214
              FR_TRADE_ID,
215
              FR_GOOD_ID,
216
              FR_BRN_ID,
217
              TO_BRN_ID,
218
              TO_PLAN_ID,
219
              TO_TRADE_ID,
220
              TO_GOOD_ID,
221
              QTY,
222
              TOTAL_AMT,
223
              AUTH_STATUS,
224
              NOTES,
225
              FR_DEP_ID,
226
              TO_DEP_ID,
227
              FR_DVDM_ID,
228
              TO_DVDM_ID,
229
              FR_KHOI_ID,
230
              TO_KHOI_ID,
231
              FR_GD_TYPE_ID,
232
              TO_GD_TYPE_ID,
233
              FR_AMT_APP,
234
              FR_AMT_TF,
235
              FR_AMT_RECEIVE_TF,
236
              FR_AMT_EXE,
237
              FR_AMT_ETM,
238
              FR_AMT_ETM_TMP
239
          FROM @TABLE
240
			OPEN ListTransfers
241

    
242

    
243
			FETCH NEXT FROM ListTransfers INTO @REQ_TRANSFER_ID,@FR_PLAN_ID,@FR_TRADE_ID,@FR_GOOD_ID,@FR_BRN_ID,@TO_BRN_ID,@TO_PLAN_ID,
244
			@TO_TRADE_ID,@TO_GOOD_ID,@QTY,@TOTAL_AMT,@AUTH_STATUS, @NOTES,@FR_DEP_ID,@TO_DEP_ID,@FR_DVDM_ID,@TO_DVDM_ID,@FR_KHOI_ID,@TO_KHOI_ID,@FR_GD_TYPE,@TO_GD_TYPE,@FR_AMT_APP,@FR_AMT_TF,@FR_AMT_RECEIVE_TF,@FR_AMT_EXE,@FR_AMT_ETM,@FR_AMT_ETM_TMP
245
			WHILE @@FETCH_STATUS = 0	
246
			BEGIN
247
				--- KIEM TRA NGAN SACH DIEU CHUYEN TAI DVDC PHAI BAT BUOC NHAP
248
				IF(@FR_GOOD_ID IS NULL OR @FR_GOOD_ID ='')
249
				BEGIN
250
						SELECT '-1' Result, '' REQ_ID, N'Lưới điều chuyển ngân sách: Bạn là đơn vị điều chuyển ngân sách. Vui lòng chọn hạng mục ngân sách chuyển!' ErrorDesc 
251
						ROLLBACK TRANSACTION
252
						RETURN '-1'
253
				END
254
				----
255
				DECLARE @FR_GD_TYPE_NAME NVARCHAR(100),@TO_GD_TYPE_NAME NVARCHAR(100)
256
				IF(@FR_GOOD_ID IS NOT NULL AND @FR_GOOD_ID<>'')
257
				IF(NOT EXISTS(SELECT * FROM dbo.CM_GOODSTYPE WHERE GD_TYPE_ID= @FR_GD_TYPE AND @TO_GD_TYPE IN (SELECT value FROM dbo.wsiSplit(NOTES,';')) )  )
258
				BEGIN
259
				
260
				SET @FR_GD_TYPE_NAME=(SELECT GD_TYPE_NAME FROM dbo.CM_GOODSTYPE WHERE GD_TYPE_ID=@FR_GD_TYPE)
261
				SET @TO_GD_TYPE_NAME=(SELECT GD_TYPE_NAME FROM dbo.CM_GOODSTYPE WHERE GD_TYPE_ID=@TO_GD_TYPE)
262
					
263
					ROLLBACK TRANSACTION
264
					SELECT '-1' AS Result , ''  REQ_ID, N'Không được điều chuyển từ ' + ISNULL(@FR_GD_TYPE_NAME,'') +N' sang ' + ISNULL(@TO_GD_TYPE_NAME,'') ErrorDesc
265
					RETURN '-1'
266
					CLOSE ListTransfers
267
					DEALLOCATE ListTransfers
268
				END
269
				---  KIEM TRA HAN MUC CO HOP LE HAY KHONG
270
        IF(EXISTS(SELECT Temp.FR_TRADE_ID FROM (
271
						SELECT TB.FR_TRADE_ID ,SUM(TB.TOTAL_AMT) AS TOTAL_AMT_EXE,
272
						SUM(ROUND(ISNULL(PT.AMT_APP,0),0) +  ROUND(ISNULL(PT.AMT_RECEIVE_TF,0),0) -  ROUND(ISNULL(PT.AMT_TF,0),0) - ROUND(ISNULL(PT.AMT_ETM,0),0))/COUNT(TB.FR_TRADE_ID)
273
            -
274
            (SELECT ISNULL(SUM(DDT.TOTAL_AMT),0)
275
            FROM dbo.PL_REQUEST_DOC_DT DDT
276
            LEFT JOIN dbo.PL_REQUEST_DOC DOC ON DDT.REQ_ID = DOC.REQ_ID
277
            WHERE DOC.PROCESS_ID NOT IN ('','SIGN','APPNEW','REJECT','APPROVE','SETTLMENT')
278
            AND doc.REQ_ID <> @p_REQ_ID
279
            AND DDT.TRADE_ID = TB.FR_TRADE_ID)
280
            -
281
            (SELECT ISNULL(SUM(DDT.TOTAL_AMT),0)
282
            FROM dbo.PL_REQUEST_TRANSFER DDT
283
            LEFT JOIN dbo.PL_REQUEST_DOC DOC ON DDT.REQ_DOC_ID = DOC.REQ_ID
284
            WHERE DOC.PROCESS_ID NOT IN ('','SIGN','APPNEW','REJECT','APPROVE','SETTLMENT')
285
            AND doc.REQ_ID <> @p_REQ_ID
286
            AND DDT.FR_TRADE_ID = TB.FR_TRADE_ID) AS TOTAL_AMT_REMAIN 
287
						FROM @TABLE TB
288
						LEFT JOIN dbo.PL_TRADEDETAIL PT ON PT.TRADE_ID=TB.FR_TRADE_ID
289
						GROUP BY TB.FR_TRADE_ID
290
						)Temp
291
						WHERE (Temp.TOTAL_AMT_EXE) > Temp.TOTAL_AMT_REMAIN))
292
				BEGIN
293
						SELECT '-1' Result, '' REQ_ID, N'Số tiền điều chuyển lớn hơn số tiền dự kiến còn lại của hạng mục ngân sách' ErrorDesc 
294
						ROLLBACK TRANSACTION
295
						RETURN '-1'
296
				END
297
				----
298
				IF(EXISTS(SELECT REQ_TRANSFER_ID FROM dbo.PL_REQUEST_TRANSFER WHERE REQ_TRANSFER_ID=@REQ_TRANSFER_ID AND AUTH_STATUS <> 'A' AND (FR_BRN_ID=@BRANCH_ID AND (FR_DEP_ID IS NULL OR FR_DEP_ID='' OR FR_DEP_ID=@DEP_ID))))
299
				BEGIN
300
					UPDATE dbo.PL_REQUEST_TRANSFER SET FR_GOOD_ID=@FR_GOOD_ID,FR_PLAN_ID=@FR_PLAN_ID,FR_TRADE_ID=@FR_TRADE_ID, NOTES=@NOTES,TOTAL_AMT=@TOTAL_AMT
301
					,FR_DVDM_ID=@FR_DVDM_ID,FR_KHOI_ID=@FR_KHOI_ID, FR_AMT_APP = @FR_AMT_APP, FR_AMT_TF = @FR_AMT_TF, FR_AMT_RECEIVE_TF = @FR_AMT_RECEIVE_TF, FR_AMT_EXE = @FR_AMT_EXE, FR_AMT_ETM = @FR_AMT_ETM, FR_AMT_ETM_TMP = @FR_AMT_ETM_TMP
302
					 WHERE REQ_TRANSFER_ID=@REQ_TRANSFER_ID
303

    
304
          UPDATE prdd
305
          SET prdd.FR_AMT_APP = ISNULL(PL.AMT_APP,0),
306
          prdd.FR_AMT_EXE = ISNULL(PL.AMT_EXE,0),
307
          prdd.FR_AMT_ETM = ISNULL(PL.AMT_ETM,0),
308
          prdd.FR_AMT_TF = ISNULL(PL.AMT_TF,0),
309
          prdd.FR_AMT_RECEIVE_TF = ISNULL(PL.AMT_RECEIVE_TF,0),
310
          prdd.FR_AMT_ETM_TMP = (SELECT ISNULL(SUM(DDT.TOTAL_AMT),0)
311
            FROM dbo.PL_REQUEST_DOC_DT DDT
312
            LEFT JOIN dbo.PL_REQUEST_DOC DOC ON DDT.REQ_ID = DOC.REQ_ID
313
            WHERE DOC.PROCESS_ID NOT IN ('','SIGN','APPNEW','REJECT','APPROVE','SETTLMENT')
314
            AND DDT.TRADE_ID = PL.TRADE_ID
315
            AND DOC.REQ_ID <> prdd.REQ_DOC_ID)
316
            +
317
            (SELECT ISNULL(SUM(DDT.TOTAL_AMT),0)
318
            FROM dbo.PL_REQUEST_TRANSFER DDT
319
            LEFT JOIN dbo.PL_REQUEST_DOC DOC ON DDT.REQ_DOC_ID = DOC.REQ_ID
320
            WHERE DOC.PROCESS_ID NOT IN ('','SIGN','APPNEW','REJECT','APPROVE','SETTLMENT')
321
            AND DDT.FR_TRADE_ID = PL.TRADE_ID
322
            AND DOC.REQ_ID <> prdd.REQ_DOC_ID)
323
          FROM PL_TRADEDETAIL PL 
324
          LEFT JOIN PL_REQUEST_TRANSFER prdd ON PL.TRADE_ID = prdd.FR_TRADE_ID
325
          WHERE prdd.REQ_TRANSFER_ID=@REQ_TRANSFER_ID
326
				END
327
				
328
				IF @@ERROR <> 0 GOTO ABORT1
329
			-- next Group_Id
330
				FETCH NEXT FROM ListTransfers INTO @REQ_TRANSFER_ID,@FR_PLAN_ID,@FR_TRADE_ID,@FR_GOOD_ID,@FR_BRN_ID,@TO_BRN_ID,@TO_PLAN_ID,
331
			@TO_TRADE_ID,@TO_GOOD_ID,@QTY,@TOTAL_AMT,@AUTH_STATUS, @NOTES,@FR_DEP_ID,@TO_DEP_ID,@FR_DVDM_ID,@TO_DVDM_ID,@FR_KHOI_ID,@TO_KHOI_ID,@FR_GD_TYPE,@TO_GD_TYPE,@FR_AMT_APP,@FR_AMT_TF,@FR_AMT_RECEIVE_TF,@FR_AMT_EXE,@FR_AMT_ETM,@FR_AMT_ETM_TMP
332
			END
333
			CLOSE ListTransfers
334
			DEALLOCATE ListTransfers
335

    
336
			IF @@Error <> 0 GOTO ABORT
337
		END
338
		END
339
		
340
COMMIT TRANSACTION
341
SELECT '0' as Result, @p_REQ_ID  REQ_ID, '' ErrorDesc
342
RETURN '0'
343
ABORT:
344
BEGIN
345
		ROLLBACK TRANSACTION
346
		SELECT '-1' AS Result ,'' REQ_ID, '' ErrorDesc
347
		RETURN '-1'
348
End
349
ABORT1:
350
BEGIN
351
		
352
		CLOSE ListCostCenters
353
		DEALLOCATE ListCostCenters
354
		CLOSE ListTransfers
355
		DEALLOCATE ListTransfers
356
		ROLLBACK TRANSACTION
357
		SELECT '-1' AS Result ,'' REQ_ID, '' ErrorDesc
358
		RETURN '-1'
359
End