Project

General

Profile

PL_REQUEST_DOC_PROCESS_Upd.txt

Luc Tran Van, 12/23/2022 03:14 PM

 
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
				IF @@ERROR <> 0 GOTO ABORT1
111
			-- next Group_Id
112
				FETCH NEXT FROM ListCostCenters INTO @REQ_COST_ID,@COST_ID,@AUTH_STATUS, @NOTES
113
			END
114
			CLOSE ListCostCenters
115
			DEALLOCATE ListCostCenters
116
			
117
			--IF(NOT EXISTS( SELECT * FROM dbo.PL_REQUEST_PROCESS WHERE PROCESS_ID=@PROCESS_CURR AND REQ_ID=@p_REQ_ID AND STATUS='C'))
118
			--BEGIN
119
						
120
			--			UPDATE dbo.PL_REQUEST_PROCESS SET [STATUS]='C' WHERE PROCESS_ID=@PROCESS_NEXT AND REQ_ID=@p_REQ_ID
121
			--			UPDATE dbo.PL_REQUEST_DOC SET PROCESS_ID=@PROCESS_NEXT WHERE REQ_ID=@p_REQ_ID
122
						
123
			--END
124
		
125
		END
126

    
127
		
128

    
129
		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))))
130
		BEGIN
131
			DECLARE @TABLE TABLE(
132
				REQ_TRANSFER_ID VARCHAR(15),
133
				FR_PLAN_ID	varchar(15),
134
				FR_TRADE_ID	varchar(15),
135
				FR_GOOD_ID	varchar(15),
136
				FR_BRN_ID	varchar(15),
137
				TO_BRN_ID	varchar(15),
138
				TO_PLAN_ID	varchar(15),
139
				TO_TRADE_ID	varchar(15),	
140
				TO_GOOD_ID	varchar(15),	
141
				QTY  DECIMAL(18,0),
142
				TOTAL_AMT	decimal(18),	
143
				AUTH_STATUS VARCHAR(10),
144
				NOTES	nvarchar(1000),
145
				FR_DEP_ID VARCHAR(20),
146
				TO_DEP_ID VARCHAR(20),
147
				FR_DVDM_ID VARCHAR(20),
148
				TO_DVDM_ID VARCHAR(20),
149
				FR_KHOI_ID VARCHAR(20),
150
				TO_KHOI_ID VARCHAR(20),
151
				FR_GD_TYPE_ID VARCHAR(20),
152
				TO_GD_TYPE_ID VARCHAR(20),
153
        FR_AMT_APP decimal(18),
154
        FR_AMT_TF DECIMAL(18),
155
        FR_AMT_RECEIVE_TF DECIMAL(18),
156
        FR_AMT_EXE DECIMAL(18),
157
        FR_AMT_ETM DECIMAL(18),
158
        FR_AMT_ETM_TMP decimal(18)
159
			)
160
			Exec sp_xml_preparedocument @hdoc Output,@p_ListTransfer
161
			INSERT INTO @TABLE		
162
			SELECT *
163
			FROM OPENXML(@hDoc,'/Root/ListTransfer',2)
164
			WITH 
165
			(
166
				REQ_TRANSFER_ID VARCHAR(15),
167
				FR_PLAN_ID	varchar(15),
168
				FR_TRADE_ID	varchar(15),
169
				FR_GOOD_ID	varchar(15),
170
				FR_BRN_ID	varchar(15),
171
				TO_BRN_ID	varchar(15),
172
				TO_PLAN_ID	varchar(15),
173
				TO_TRADE_ID	varchar(15),	
174
				TO_GOOD_ID	varchar(15),	
175
				QTY  DECIMAL(18,0),
176
				TOTAL_AMT	decimal(18),	
177
				AUTH_STATUS VARCHAR(10),
178
				NOTES	nvarchar(1000),
179
				FR_DEP_ID VARCHAR(20),
180
				TO_DEP_ID VARCHAR(20),
181
				FR_DVDM_ID VARCHAR(20),
182
				TO_DVDM_ID VARCHAR(20),
183
				FR_KHOI_ID VARCHAR(20),
184
				TO_KHOI_ID VARCHAR(20),
185
				FR_GD_TYPE_ID VARCHAR(20),
186
				TO_GD_TYPE_ID VARCHAR(20),
187
        FR_AMT_APP decimal(18),
188
        FR_AMT_TF DECIMAL(18),
189
        FR_AMT_RECEIVE_TF DECIMAL(18),
190
        FR_AMT_EXE DECIMAL(18),
191
        FR_AMT_ETM DECIMAL(18),
192
        FR_AMT_ETM_TMP decimal(18)
193
		
194
			)
195
			
196
			--IF(EXISTS(SELECT * FROM(
197
			--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 
198
			--LEFT JOIN dbo.PL_TRADEDETAIL PT ON PT.TRADE_ID=TB.FR_TRADE_ID
199
			--GROUP BY TB.FR_TRADE_ID
200
			--) TEMP		
201
			--WHERE TEMP.TOTAL_TRANSFER > TEMP.TOTAL_AMT
202
			--))
203
			--BEGIN
204
			--		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 
205
			--		ROLLBACK TRANSACTION
206
			--		RETURN '-1'
207
			--END
208

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

    
240

    
241
			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,
242
			@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
243
			WHILE @@FETCH_STATUS = 0	
244
			BEGIN
245
				--- KIEM TRA NGAN SACH DIEU CHUYEN TAI DVDC PHAI BAT BUOC NHAP
246
				IF(@FR_GOOD_ID IS NULL OR @FR_GOOD_ID ='')
247
				BEGIN
248
            ROLLBACK TRANSACTION
249
						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 
250
						RETURN '-1'
251
				END
252
				----
253
				DECLARE @FR_GD_TYPE_NAME NVARCHAR(100),@TO_GD_TYPE_NAME NVARCHAR(100)
254
				IF(@FR_GOOD_ID IS NOT NULL AND @FR_GOOD_ID<>'')
255
				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,';')) )  )
256
				BEGIN
257
				
258
				SET @FR_GD_TYPE_NAME=(SELECT GD_TYPE_NAME FROM dbo.CM_GOODSTYPE WHERE GD_TYPE_ID=@FR_GD_TYPE)
259
				SET @TO_GD_TYPE_NAME=(SELECT GD_TYPE_NAME FROM dbo.CM_GOODSTYPE WHERE GD_TYPE_ID=@TO_GD_TYPE)
260
					
261
					ROLLBACK TRANSACTION
262
					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
263
					RETURN '-1'
264
					CLOSE ListTransfers
265
					DEALLOCATE ListTransfers
266
				END
267
				---  KIEM TRA HAN MUC CO HOP LE HAY KHONG
268
        IF(EXISTS(SELECT Temp.FR_TRADE_ID FROM (
269
						SELECT TB.FR_TRADE_ID ,SUM(TB.TOTAL_AMT) AS TOTAL_AMT_EXE,
270
						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)
271
            -
272
            (SELECT ISNULL(SUM(DDT.TOTAL_AMT),0)
273
            FROM dbo.PL_REQUEST_DOC_DT DDT
274
            LEFT JOIN dbo.PL_REQUEST_DOC DOC ON DDT.REQ_ID = DOC.REQ_ID
275
            WHERE DOC.PROCESS_ID NOT IN ('','SIGN','APPNEW','REJECT','APPROVE','SETTLMENT')
276
            AND doc.REQ_ID <> @p_REQ_ID
277
            AND DDT.TRADE_ID = TB.FR_TRADE_ID)
278
            -
279
            (SELECT ISNULL(SUM(DDT.TOTAL_AMT),0)
280
            FROM dbo.PL_REQUEST_TRANSFER DDT
281
            LEFT JOIN dbo.PL_REQUEST_DOC DOC ON DDT.REQ_DOC_ID = DOC.REQ_ID
282
            WHERE DOC.PROCESS_ID NOT IN ('','SIGN','APPNEW','REJECT','APPROVE','SETTLMENT')
283
            AND doc.REQ_ID <> @p_REQ_ID
284
            AND DDT.FR_TRADE_ID = TB.FR_TRADE_ID) AS TOTAL_AMT_REMAIN 
285
						FROM @TABLE TB
286
						LEFT JOIN dbo.PL_TRADEDETAIL PT ON PT.TRADE_ID=TB.FR_TRADE_ID
287
						GROUP BY TB.FR_TRADE_ID
288
						)Temp
289
						WHERE (Temp.TOTAL_AMT_EXE) > Temp.TOTAL_AMT_REMAIN))
290
				BEGIN
291
            ROLLBACK TRANSACTION
292
						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 
293
						RETURN '-1'
294
				END
295
				----
296
				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))))
297
				BEGIN
298
					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
299
					,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
300
					 WHERE REQ_TRANSFER_ID=@REQ_TRANSFER_ID
301

    
302
          UPDATE prdd
303
          SET prdd.FR_AMT_APP = ISNULL(PL.AMT_APP,0),
304
          prdd.FR_AMT_EXE = ISNULL(PL.AMT_EXE,0),
305
          prdd.FR_AMT_ETM = ISNULL(PL.AMT_ETM,0),
306
          prdd.FR_AMT_TF = ISNULL(PL.AMT_TF,0),
307
          prdd.FR_AMT_RECEIVE_TF = ISNULL(PL.AMT_RECEIVE_TF,0),
308
          prdd.FR_AMT_ETM_TMP = (SELECT ISNULL(SUM(DDT.TOTAL_AMT),0)
309
            FROM dbo.PL_REQUEST_DOC_DT DDT
310
            LEFT JOIN dbo.PL_REQUEST_DOC DOC ON DDT.REQ_ID = DOC.REQ_ID
311
            WHERE DOC.PROCESS_ID NOT IN ('','SIGN','APPNEW','REJECT','APPROVE','SETTLMENT')
312
            AND DDT.TRADE_ID = PL.TRADE_ID
313
            AND DOC.REQ_ID <> prdd.REQ_DOC_ID)
314
            +
315
            (SELECT ISNULL(SUM(DDT.TOTAL_AMT),0)
316
            FROM dbo.PL_REQUEST_TRANSFER DDT
317
            LEFT JOIN dbo.PL_REQUEST_DOC DOC ON DDT.REQ_DOC_ID = DOC.REQ_ID
318
            WHERE DOC.PROCESS_ID NOT IN ('','SIGN','APPNEW','REJECT','APPROVE','SETTLMENT')
319
            AND DDT.FR_TRADE_ID = PL.TRADE_ID
320
            AND DOC.REQ_ID <> prdd.REQ_DOC_ID)
321
          FROM PL_REQUEST_TRANSFER prdd 
322
          LEFT JOIN PL_TRADEDETAIL PL ON PL.TRADE_ID = prdd.FR_TRADE_ID
323
          WHERE prdd.REQ_TRANSFER_ID=@REQ_TRANSFER_ID
324
				END
325
				
326
				IF @@ERROR <> 0 GOTO ABORT1
327
			-- next Group_Id
328
				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,
329
			@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
330
			END
331
			CLOSE ListTransfers
332
			DEALLOCATE ListTransfers
333

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