Project

General

Profile

TR_PO_MASTER_Upd.txt

Luc Tran Van, 01/13/2023 11:34 AM

 
1

    
2
ALTER   PROCEDURE [dbo].[TR_PO_MASTER_Upd]
3
@p_PO_ID	varchar(15) = NULL,
4
@P_PO_TYPE INT = NULL,
5
@p_PO_CODE	varchar(15)  = NULL,
6
@p_PO_NAME	nvarchar(200)  = NULL,
7
@p_CONTRACT_ID	varchar(15)  = NULL,
8
@p_SUP_ID	varchar(15)  = NULL,
9
@p_SUP_NAME	nvarchar(200)  = NULL,
10
@p_SUP_ADDR	nvarchar(200)  = NULL,
11
@p_INPUT_DT	VARCHAR(20) = NULL,
12
@p_PAYMENT_DT	VARCHAR(20) = NULL,
13
@p_TOTAL_AMT	decimal(18)  = NULL,
14
@p_REQ_DOC_ID	varchar(15)  = NULL,
15
@p_DELIVERY_DT	VARCHAR(20) = NULL,
16
@p_PAYAPP_DT	VARCHAR(20) = NULL,
17
@p_NOTES	nvarchar(1000)  = NULL,
18
@p_RECORD_STATUS	varchar(1)  = NULL,
19
@p_MAKER_ID	varchar(15)  = NULL,
20
@p_CREATE_DT	VARCHAR(20) = NULL,
21
@p_AUTH_STATUS	varchar(50)  = NULL,
22
@p_CHECKER_ID	varchar(15)  = NULL,
23
@p_APPROVE_DT	VARCHAR(20) = NULL,
24
@p_TR_REQ_ID VARCHAR(20) = NULL,
25
@p_TR_REQ_CODE VARCHAR(20)= NULL,
26
@P_LISTASSET XML = NULL,
27
@P_LISTPAYMENT XML = NULL,
28
@P_LISTROLE XML = NULL,
29
@p_BRANCH_ID varchar(15) = null,
30
@p_IS_CLOSED VARCHAR(1) = NULL,
31
-----------------------BAODNQ 2/3/2022 : Thêm tham số----------------------
32
@p_IS_SEND_APPR VARCHAR(1) = NULL,
33
@p_SEND_APPR_DT VARCHAR(20) = NULL
34

    
35
AS
36

    
37
	IF(EXISTS(SELECT * FROM TR_PO_MASTER WHERE PO_ID = @p_PO_ID AND AUTH_STATUS = 'U'))
38
	BEGIN
39
		SELECT '-1' Result, @p_PO_ID AS PO_ID, 
40
			N'Không thể chỉnh sửa. PO ' +@p_PO_CODE+ N' đã được gửi yêu cầu phê duyệt' AS ErrorDesc 
41
		RETURN '-1'
42
	END
43
	-----------------------BAODNQ 16/12/2022: User chỉnh sửa ko ph là ng tạo thì ko dc chỉnh sửa----------------
44
	IF(EXISTS(SELECT PO_ID FROM TR_PO_MASTER WHERE PO_ID = @p_PO_ID AND MAKER_ID <> @p_MAKER_ID))
45
	BEGIN
46
		SELECT '-1' Result, @p_PO_ID AS PO_ID, 
47
			N'Không thể chỉnh sửa. Chỉ có người tạo PO: ' +@p_PO_CODE+ N' mới được phép chỉnh sửa. Bạn không phải là người tạo PO này' AS ErrorDesc 
48
		RETURN '-1'
49
	END
50

    
51
	DECLARE @REF_CODE VARCHAR(15) = NULL, @PDN_TT VARCHAR(15) = NULL
52
	SET @REF_CODE =
53
	(	SELECT TOP 1 B.REQ_PAY_CODE
54
		FROM TR_REQ_ADVANCE_DT A
55
		INNER JOIN TR_REQ_ADVANCE_PAYMENT B ON A.REQ_PAY_ID = B.REQ_PAY_ID
56
		WHERE A.REF_ID =@p_PO_ID AND (B.AUTH_STATUS_KT <>'A' OR B.AUTH_STATUS_KT IS NULL)
57
	)
58
	--- TIM KIEM XEM PO NAY CO DUOC PHEP THANH TOAN HAY KHONG
59
	SET @PDN_TT =
60
	(	SELECT TOP 1 B.REQ_PAY_CODE
61
		FROM TR_REQ_ADVANCE_DT A
62
		INNER JOIN TR_REQ_PAYMENT B ON A.REQ_PAY_ID = B.REQ_PAY_ID
63
		WHERE A.REF_ID =@p_CONTRACT_ID AND (B.AUTH_STATUS_KT <>'A' OR B.AUTH_STATUS_KT IS NULL)
64
	)
65
	IF(@p_IS_CLOSED ='Y' AND @REF_CODE IS NOT NULL)
66
	BEGIN
67
		--ROLLBACK TRANSACTION
68
			SELECT '-1' Result, @p_PO_ID AS PO_ID, N'PO đang được thực hiện tạm ứng với số phiếu: '+@REF_CODE AS ErrorDesc 
69
			RETURN '-1'
70
	END
71
	IF(@p_IS_CLOSED ='Y' AND @PDN_TT IS NOT NULL)
72
	BEGIN
73
		--ROLLBACK TRANSACTION
74
			SELECT '-1' Result, @p_PO_ID AS PO_ID, N'PO đang được thực hiện thanh toán với số phiếu: '+@PDN_TT AS ErrorDesc 
75
			RETURN '-1'
76
	END
77
	IF EXISTS(SELECT * FROM TR_PO_MASTER WHERE [PO_CODE] = @p_PO_CODE AND [PO_ID] <> @p_PO_ID)
78
	BEGIN
79
		SELECT ErrorCode Result, '' PO_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = 'PO-00002'
80
		RETURN '0'
81
	END
82
	--- 21052020 KIEM TRA XEM NEU PYCMS DA TON TAI HAY CHUA
83
	IF((SELECT COUNT(*) FROM TR_REQUEST_DOC_DT WHERE REQ_DOC_ID =@p_REQ_DOC_ID)=1)
84
	BEGIN
85
			IF(EXISTS(SELECT * FROM TR_PO_MASTER WHERE REQ_DOC_ID =@p_REQ_DOC_ID AND AUTH_STATUS IN ('E','U','A') AND PO_ID <>@p_PO_ID))
86
			BEGIN
87
				--ROLLBACK TRANSACTION
88
				SELECT '-1' Result, @p_PO_ID AS PO_ID, N'Phiếu yêu cầu mua sắm số :'+(SELECT REQ_CODE FROM TR_REQUEST_DOC WHERE REQ_ID =@p_REQ_DOC_ID)+
89
				N' đã được link tới PO có số: '+(SELECT TOP 1 PO_CODE FROM TR_PO_MASTER WHERE REQ_DOC_ID =@p_REQ_DOC_ID AND PO_ID <> @p_PO_ID) AS ErrorDesc 
90
				RETURN '-1'
91
			END
92
	END
93
	------
94
	Declare @hdoc INT
95
	Exec sp_xml_preparedocument @hdoc Output,@P_LISTASSET
96
	DECLARE AssetDetail CURSOR FOR
97
	SELECT *
98
	FROM OPENXML(@hDoc,'/Root/AssetDetail',2)
99
	WITH 
100
	(
101
		PD_ID VARCHAR(15),
102
		PLAN_ID	varchar(15)  ,
103
		TRADE_ID	varchar(15)  ,
104
		REQ_DT_ID VARCHAR(15),
105
		GOODS_ID	varchar(15)  ,
106
		[DESCRIPTION] nvarchar(500),
107
		UNIT_ID	varchar(15)  ,
108
		QUANTITY	decimal(18)  ,
109
		PRICE	decimal(18,2)  ,
110
		TOTAL_AMT	decimal(18,2),
111
		IS_DELIVERY	varchar(1) ,
112
		DELIVERY_DT	VARCHAR(20),
113
		PAYMENT_STATUS	varchar(4),
114
		AMOUNT_PAID	decimal(18)  ,
115
		PAID_DT	VARCHAR(20) ,
116
		INVOICENO	varchar(1000),
117
		NOTES	nvarchar(1000),
118
		RECEIVE_BRANCH	varchar(15),
119
		RECEIVE_ADDR	nvarchar(1000),
120
		RECEIVE_PERSON	nvarchar(500),
121
		RECEIVE_TEL	varchar(100),
122
		EXP_DELIVERY_DT varchar(20),
123
		GOODS_NAME NVARCHAR(500),
124
		INVOICE_DT	VARCHAR(20),
125
		--THIEUVQ 100415 THEM LOAI HANG HOA THUC TE
126
		GOODSTYPE_REAL	VARCHAR(15),
127
		GOODSTYPE_REAL_NAME	VARCHAR(15),
128
		--THIEUVQ 13092016 THEM VAT, CONTRACT_DT
129
		VAT DECIMAL(18,2),
130
		PRICE_VAT DECIMAL(18,0),
131
		CONTRACT_DT VARCHAR(15),
132
		CURRENCY VARCHAR(15),
133
		RATE INT,
134
		TOTAL_AMT_FN  DECIMAL(18,2)
135
		)
136
	OPEN AssetDetail
137

    
138
	Exec sp_xml_preparedocument @hdoc Output,@P_LISTPAYMENT
139
	DECLARE PaymentDetail CURSOR FOR
140
	SELECT *
141
	FROM OPENXML(@hDoc,'/Root/PaymentDetail',2)
142
	WITH 
143
	(
144
		PAY_ID	VARCHAR(15),
145
		PAY_PHASE	varchar(15),
146
		EXPECTED_DT	VARCHAR(20),
147
		[PERCENT]	decimal(18,2),
148
		[AMOUNT]	decimal(18,2),
149
		NOTES	nvarchar(1000),
150
		CURRENCY VARCHAR(15),
151
		RATE INT,
152
		TOTAL_AMT DECIMAL(18,2)
153
	)
154
	OPEN PaymentDetail
155
	PRINT 'PASS KHOI TAO'
156

    
157
	--Nhom user gui mail (DAO EDIT)
158
	--Exec sp_xml_preparedocument @hdoc Output,@P_LISTROLE
159
	--DECLARE LISTROLE CURSOR FOR
160
	--SELECT *
161
	--FROM OPENXML(@hDoc,'/Root/LISTROLE',2)
162
	--WITH 
163
	--(
164
	--	NOTIFI_ID	VARCHAR(15),
165
	--	TL_NAME	varchar(15),
166
	--	EDITOR_DT VARCHAR(20),
167
	--	EDITOR_ID VARCHAR(15),
168
	--	NOTES nvarchar(1000)
169
	--)
170
	--OPEN LISTROLE
171

    
172
BEGIN TRANSACTION
173

    
174
		-------------BAODNQ 19/12/2022 : BẢNG TẠM LƯU THÔNG TIN THAY ĐỔI LƯỚI CHI TIẾT HÀNG HÓA PO----------------------
175
		DECLARE @t_OLD_PO_DETAIL TABLE(
176
			HH_ID VARCHAR(15), QUANTITY INT, PRICE DECIMAL(18,2), VAT DECIMAL(18,2), TOTAL_AMT DECIMAL(18,2)
177
		)
178
		DECLARE @t_NEW_PO_DETAIL TABLE(
179
			HH_ID VARCHAR(15), QUANTITY INT, PRICE DECIMAL(18,2), VAT DECIMAL(18,2), TOTAL_AMT DECIMAL(18,2)
180
		)
181
		-------------ENDBAODNQ 19/12/2022-------------------------------
182

    
183
		IF @p_DELIVERY_DT = ''
184
			SET @p_DELIVERY_DT = NULL
185
		IF @p_PAYAPP_DT	= ''
186
			SET @p_PAYAPP_DT = NULL
187
		--insert master
188
		UPDATE TR_PO_MASTER SET [PO_TYPE] = @P_PO_TYPE, [PO_CODE] = @p_PO_CODE,[PO_NAME] = @p_PO_NAME,
189
		[CONTRACT_ID] = @p_CONTRACT_ID,[SUP_ID] = @p_SUP_ID,[SUP_NAME] = @p_SUP_NAME,[SUP_ADDR] = @p_SUP_ADDR,
190
		[INPUT_DT] = CONVERT(DATETIME, @p_INPUT_DT, 103),[PAYMENT_DT] = CONVERT(DATETIME, @p_PAYMENT_DT, 103),
191
		[TOTAL_AMT] = @p_TOTAL_AMT,[REQ_DOC_ID] = @p_TR_REQ_ID,[DELIVERY_DT] = CONVERT(DATETIME, @p_DELIVERY_DT, 103),
192
		[PAYAPP_DT] = CONVERT(DATETIME, @p_PAYAPP_DT, 103),[NOTES] = @p_NOTES,[RECORD_STATUS] = '1',
193
		[MAKER_ID] = @p_MAKER_ID,[CREATE_DT] = CONVERT(DATETIME, @p_CREATE_DT, 103),[AUTH_STATUS] = 'E',
194
		[CHECKER_ID] = @p_CHECKER_ID,[APPROVE_DT] = CONVERT(DATETIME, @p_APPROVE_DT, 103), BRANCH_ID = @p_BRANCH_ID,
195
		-----------------------BAODNQ 2/3/2022 : Thêm cột IS_SEND_APPR, SEND_APPR_DT----------------------
196
		[IS_SEND_APPR] = @p_IS_SEND_APPR,
197
		[SEND_APPR_DT] = CONVERT(DATETIME, @p_SEND_APPR_DT, 103),
198
		IS_CLOSED = @p_IS_CLOSED
199
		WHERE  PO_ID= @p_PO_ID
200
		IF @@Error <> 0 GOTO ABORT
201
		PRINT 'INSERT MASTER SUCCESS'
202
		UPDATE dbo.TR_PO_MASTER_TEMP SET TR_REQ_ID=@p_TR_REQ_ID,TR_REQ_CODE=@p_TR_REQ_CODE WHERE PO_ID=@p_PO_ID
203

    
204
		--insert asset detail tương đương như NỘI DUNG trong bảng contract detail
205
		Declare 
206
		@PAY_ID VARCHAR(15),
207
		@PD_ID VARCHAR(15),
208
		@PLAN_ID	varchar(15),
209
		@TRADE_ID	varchar(15),
210
		@REQ_DT_ID VARCHAR(15),
211
		@GOODS_ID	varchar(15),
212
		@DESCRIPTION nvarchar(500),
213
		@UNIT_ID	varchar(15),
214
		@QUANTITY	decimal(18),
215
		@PRICE	decimal(18,2),
216
		@TOTAL_AMT	decimal(18,2),
217
		@IS_DELIVERY	varchar(1),
218
		@DELIVERY_DT	VARCHAR(20),
219
		@PAYMENT_STATUS	varchar(4),
220
		@AMOUNT_PAID	decimal(18),
221
		@PAID_DT	VARCHAR(20),
222
		@INVOICENO	varchar(20),
223
		@NOTES	nvarchar(1000),
224
		@PO_ID	varchar(15)  = NULL,
225
		@PAY_PHASE	VARCHAR(20) = NULL,
226
		@EXPECTED_DT	VARCHAR(20) = NULL,
227
		@PERCENT	decimal(18,2)  = NULL,
228
		@AMOUNT	decimal(18,2)  = NULL,
229
		@RECEIVE_BRANCH	varchar(15)=NULL,
230
		@RECEIVE_ADDR	nvarchar(1000)=NULL,
231
		@RECEIVE_PERSON	nvarchar(500)=NULL,
232
		@RECEIVE_TEL	varchar(100)=NULL,
233
		@EXP_DELIVERY_DT varchar(20) = NULL,
234
		@GOODS_NAME NVARCHAR(500) = NULL,
235
		@INVOICE_DT	VARCHAR(20),
236
		@GOODSTYPE_REAL	VARCHAR(15) = NULL,
237
		@GOODSTYPE_REAL_NAME	VARCHAR(15) = NULL,
238
		@VAT DECIMAL(18,2),
239
		@PRICE_VAT DECIMAL(18,0),
240
		@CONTRACT_DT VARCHAR(15),
241
		--DAO MOI THEM
242
		@NOTIFI_ID VARCHAR(15),
243
		@TL_NAME VARCHAR(15),
244
		@EDITOR_DT VARCHAR(20),
245
		@EDITOR_ID VARCHAR(15),
246
		@NOTES_ROLE nvarchar(1000),
247

    
248
		@CURRENCY VARCHAR(15),
249
		@RATE INT,
250
		@TOTAL_AMT_FN DECIMAL(18,2)
251

    
252
		DECLARE @l_GOODSTYPE_ID VARCHAR(15)
253

    
254
		DELETE FROM TR_PO_DETAIL WHERE PO_ID = @P_PO_ID 
255

    
256
		FETCH NEXT FROM AssetDetail INTO @PD_ID,@PLAN_ID,@TRADE_ID,@REQ_DT_ID,@GOODS_ID,@DESCRIPTION,@UNIT_ID,@QUANTITY,
257
		@PRICE,@TOTAL_AMT,@IS_DELIVERY,@DELIVERY_DT,@PAYMENT_STATUS,@AMOUNT_PAID,@PAID_DT,
258
		@INVOICENO,@NOTES, @RECEIVE_BRANCH, @RECEIVE_ADDR, @RECEIVE_PERSON, @RECEIVE_TEL,@EXP_DELIVERY_DT,@GOODS_NAME, @INVOICE_DT,
259
		@GOODSTYPE_REAL,@GOODSTYPE_REAL_NAME,@VAT,@PRICE_VAT,@CONTRACT_DT,@CURRENCY,@RATE,@TOTAL_AMT_FN
260
		WHILE @@FETCH_STATUS = 0
261
		BEGIN
262
			--if( NOT EXISTS (SELECT * FROM PL_MASTER A WHERE A.PLAN_ID = @PLAN_ID))
263
			--BEGIN
264
			--	SELECT ErrorCode Result, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = 'TR-00002'
265
			--	GOTO ABORT
266
			--END
267

    
268
					---------------------BAODNQ 19/12/2022 : GHI LẠI NHỮNG THÔNG TIN THAY ĐỔI VÀO LOG------------------------------
269
			DECLARE @d_OLD_QUANTITY DECIMAL = (SELECT QUANTITY FROM TR_PO_DETAIL WHERE PD_ID = @PD_ID),
270
					@d_OLD_PRICE DECIMAL(18,2) = (SELECT PRICE FROM TR_PO_DETAIL WHERE PD_ID = @PD_ID),
271
					@d_OLD_VAT DECIMAL(18,2) = (SELECT VAT FROM TR_PO_DETAIL WHERE PD_ID = @PD_ID),
272
					@d_OLD_TOTAL_AMT DECIMAL(18,2) = (SELECT TOTAL_AMT FROM TR_PO_DETAIL WHERE PD_ID = @PD_ID)
273

    
274
			IF(@d_OLD_QUANTITY <> @QUANTITY OR @d_OLD_PRICE <> @PRICE OR @d_OLD_VAT <> @VAT OR @d_OLD_TOTAL_AMT <> @TOTAL_AMT)
275
			BEGIN
276
				INSERT INTO @t_OLD_PO_DETAIL VALUES(@GOODS_ID, @d_OLD_QUANTITY, @d_OLD_PRICE, @d_OLD_VAT, @d_OLD_TOTAL_AMT)
277
				INSERT INTO @t_NEW_PO_DETAIL VALUES(@GOODS_ID, @QUANTITY, @PRICE, @VAT, @TOTAL_AMT)
278
			END
279
			------------DELETE TR_PO_DETAIL ĐỂ INSERT LẠI-----------
280
			DELETE FROM TR_PO_DETAIL WHERE PD_ID = @PD_ID AND PO_ID = @P_PO_ID
281
			--------------------------------ENDBAODNQ 19/12/2022--------------------------------
282

    
283
			IF(LEN(@PD_ID) = 0)
284

    
285
			BEGIN
286
				EXEC SYS_CodeMasters_Gen 'TR_PO_DETAIL', @PD_ID out
287
				IF @PD_ID ='' OR @PD_ID IS NULL GOTO ABORT
288
			END
289
			
290
			IF(@DELIVERY_DT = '')
291
				SET @DELIVERY_DT = NULL
292
			IF(@PAID_DT = '')
293
				SET @PAID_DT = NULL
294
			IF(@INVOICE_DT = '')
295
				SET @INVOICE_DT = NULL				
296
			IF @EXP_DELIVERY_DT = '' SET @EXP_DELIVERY_DT = NULL
297

    
298
			/***THIEUVQ THEM KIEM TRA VA LUU THONG TIN LOAI HANG HOA THUC TE***/
299
			--BEGIN
300
			--CHUA CO LOAI HANG HOA THI THEM MOI
301
			IF @GOODSTYPE_REAL IS NULL OR @GOODSTYPE_REAL = ''
302
			BEGIN
303
				--NEU TON TAI THI LAY RA ID
304
				SET @GOODSTYPE_REAL = (SELECT TOP 1 GD_RETYPE_ID FROM CM_GOODSTYPE_REAL WHERE [TYPE_NAME] = @GOODSTYPE_REAL_NAME)
305
				--NEU CHUA CO THI THEM MOI
306
				IF @GOODSTYPE_REAL IS NULL OR @GOODSTYPE_REAL = ''
307
				BEGIN
308
					EXEC SYS_CodeMasters_Gen 'CM_GOODSTYPE_REAL', @l_GOODSTYPE_ID OUT
309
					IF @l_GOODSTYPE_ID='' OR @l_GOODSTYPE_ID IS NULL GOTO ABORT
310

    
311
					INSERT INTO CM_GOODSTYPE_REAL VALUES (@l_GOODSTYPE_ID, @l_GOODSTYPE_ID, @GOODSTYPE_REAL_NAME, '', '1',
312
					@p_MAKER_ID,CONVERT(DATETIME, @p_CREATE_DT, 103),'A',@p_MAKER_ID,CONVERT(DATETIME, @p_CREATE_DT, 103))
313
					IF @@ERROR <> 0 GOTO ABORT
314

    
315
					SET @GOODSTYPE_REAL = @l_GOODSTYPE_ID
316
				END
317
			END			
318
			--END
319

    
320
			INSERT INTO TR_PO_DETAIL([PD_ID],[PO_ID],[PLAN_ID],[TRADE_ID],[REQ_DT_ID],[GOODS_ID],[DESCRIPTION],[UNIT_ID],[QUANTITY],[PRICE],[TOTAL_AMT],[IS_DELIVERY],[DELIVERY_DT],
321
			[PAYMENT_STATUS],[AMOUNT_PAID],[PAID_DT],[INVOICENO],[NOTES], RECEIVE_BRANCH, RECEIVE_ADDR, RECEIVE_PERSON, RECEIVE_TEL,[RECORD_STATUS],[MAKER_ID],[CREATE_DT],
322
			[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT],EXP_DELIVERY_DT,GOODS_NAME,INVOICE_DT,GOODSTYPE_REAL,VAT,PRICE_VAT,CONTRACT_DT,CURRENCY,RATE,TOTAL_AMT_FN)
323
			VALUES(@PD_ID ,@p_PO_ID ,@PLAN_ID ,@TRADE_ID,@REQ_DT_ID ,@GOODS_ID,@DESCRIPTION ,@UNIT_ID ,@QUANTITY ,@PRICE ,@TOTAL_AMT ,
324
			@IS_DELIVERY ,CONVERT(DATETIME, @DELIVERY_DT, 103) ,@PAYMENT_STATUS ,@AMOUNT_PAID ,
325
			CONVERT(DATETIME, @PAID_DT, 103) ,@INVOICENO ,@NOTES , @RECEIVE_BRANCH, @RECEIVE_ADDR, @RECEIVE_PERSON, @RECEIVE_TEL,
326
			@p_RECORD_STATUS ,@p_MAKER_ID ,CONVERT(DATETIME, @p_CREATE_DT, 103) ,@p_AUTH_STATUS ,@p_CHECKER_ID ,CONVERT(DATETIME, @p_APPROVE_DT, 103),CONVERT(DATETIME, @EXP_DELIVERY_DT, 103),
327
			@GOODS_NAME, CONVERT(DATETIME, @INVOICE_DT, 103),@GOODSTYPE_REAL,@VAT,@PRICE_VAT,@CONTRACT_DT,ISNULL(@CURRENCY,'VND'),ISNULL(@RATE,1) ,@TOTAL_AMT*ISNULL(@RATE,1) )
328
			IF @@ERROR <> 0 GOTO ABORT
329

    
330
		-- next Group_Id
331
			FETCH NEXT FROM AssetDetail INTO @PD_ID,@PLAN_ID,@TRADE_ID,@REQ_DT_ID,@GOODS_ID,@DESCRIPTION,@UNIT_ID,@QUANTITY,
332
			@PRICE,@TOTAL_AMT,@IS_DELIVERY,@DELIVERY_DT,@PAYMENT_STATUS,@AMOUNT_PAID,@PAID_DT,
333
			@INVOICENO,@NOTES, @RECEIVE_BRANCH, @RECEIVE_ADDR, @RECEIVE_PERSON, @RECEIVE_TEL, @EXP_DELIVERY_DT,@GOODS_NAME,@INVOICE_DT,
334
			@GOODSTYPE_REAL,@GOODSTYPE_REAL_NAME,@VAT,@PRICE_VAT,@CONTRACT_DT,@CURRENCY,@RATE,@TOTAL_AMT_FN
335
		END
336
		
337
		--insert payment detail
338
		
339
		DELETE FROM TR_PO_PAYMENT WHERE PO_ID = @p_PO_ID
340

    
341
		FETCH NEXT FROM PaymentDetail INTO @PAY_ID,@PAY_PHASE,@EXPECTED_DT,@PERCENT,@AMOUNT,@NOTES,@CURRENCY,@RATE,@TOTAL_AMT_FN
342
		WHILE @@FETCH_STATUS = 0
343
		BEGIN
344
			--EXEC SYS_CodeMasters_Gen 'TR_PO_PAYMENT', @PAY_ID out
345
			--IF @PAY_ID ='' OR @PAY_ID IS NULL GOTO ABORT
346
			--PRINT @PAY_ID
347
			IF(LEN(@PAY_ID) = 0 OR @PAY_ID IS NULL OR @PAY_ID = '')
348
			BEGIN
349
					EXEC SYS_CodeMasters_Gen 'TR_PO_PAYMENT', @PAY_ID out
350
					IF @PAY_ID ='' OR @PAY_ID IS NULL GOTO ABORT
351
			END
352
			IF @EXPECTED_DT = ''
353
				SET @EXPECTED_DT = NULL
354
			--INSERT INTO TR_PO_PAYMENT([PAY_ID],[PO_ID],[PAY_PHASE],[EXP_DT],[PERCENT],[AMOUNT],[NOTES],[RECORD_STATUS],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT],CURRENCY,RATE,TOTAL_AMT)
355
			--VALUES(@PAY_ID ,@p_PO_ID ,@PAY_PHASE ,CONVERT(DATETIME, @EXPECTED_DT, 103) ,@PERCENT ,@AMOUNT,@NOTES ,@p_RECORD_STATUS ,@p_MAKER_ID ,CONVERT(DATETIME, @p_CREATE_DT, 103) ,@p_AUTH_STATUS ,@p_CHECKER_ID ,CONVERT(DATETIME, @p_APPROVE_DT, 103),ISNULL(@CURRENCY,'VND'),ISNULL(@RATE,1) ,@AMOUNT*ISNULL(@RATE,1))
356
			
357
			-------------BAODNQ 15/9/2022: Fix lại theo BVB_v2_PROD-----------
358
			-------------Nếu @PAY_ID ko tồn tại trong TR_PO_PAYMENT, INSERT mới---------
359
			IF(NOT EXISTS(SELECT * FROM TR_PO_PAYMENT WHERE PAY_ID = @PAY_ID))
360
			BEGIN
361
				INSERT INTO TR_PO_PAYMENT([PAY_ID],[PO_ID],[PAY_PHASE],[EXP_DT],[PERCENT],[AMOUNT],[NOTES],
362
					[RECORD_STATUS],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT],
363
					CURRENCY,RATE,TOTAL_AMT)
364
				VALUES(@PAY_ID ,@p_PO_ID ,@PAY_PHASE ,CONVERT(DATETIME, @EXPECTED_DT, 103) ,@PERCENT ,
365
					@AMOUNT,@NOTES ,@p_RECORD_STATUS ,@p_MAKER_ID ,CONVERT(DATETIME, @p_CREATE_DT, 103) ,
366
					@p_AUTH_STATUS ,@p_CHECKER_ID ,CONVERT(DATETIME, @p_APPROVE_DT, 103),
367
					ISNULL(@CURRENCY,'VND'),ISNULL(@RATE,1) ,@AMOUNT*ISNULL(@RATE,1))
368
			END
369
			ELSE
370
			-------------Nếu @PAY_ID đã tồn tại trong TR_PO_PAYMENT, UPDATE---------
371
			BEGIN
372
				UPDATE TR_PO_PAYMENT SET 
373
					PO_ID =@p_PO_ID, 
374
					PAY_PHASE =@PAY_PHASE, 
375
					EXP_DT =CONVERT(DATETIME, @EXPECTED_DT, 103), 
376
					[PERCENT] =@PERCENT,
377
					AMOUNT =@TOTAL_AMT_FN / ISNULL(@RATE,1), 
378
					RECORD_STATUS =1, 
379
					AUTH_STATUS ='A',
380
					CURRENCY =ISNULL(@CURRENCY,'VND'), 
381
					RATE =ISNULL(@RATE,1) ,
382
					TOTAL_AMT =@AMOUNT*ISNULL(@RATE,1), 
383
					NOTES =@NOTES, 
384
					MAKER_ID =@p_MAKER_ID, 
385
					CREATE_DT =CONVERT(DATETIME, @p_CREATE_DT, 103)
386
				WHERE PAY_ID =@PAY_ID --- XU LY TRONG TRUONG HOP TRUNG KEY THI CAP NHAT KY THANH TOAN 202297
387
			END
388

    
389

    
390
			UPDATE TR_PO_PAYMENT SET TOTAL_AMT = AMOUNT* ISNULL(RATE, 1) WHERE PAY_ID =@PAY_ID
391
			FETCH NEXT FROM PaymentDetail INTO @PAY_ID,@PAY_PHASE,@EXPECTED_DT,@PERCENT,@AMOUNT,@NOTES,@CURRENCY,@RATE,@TOTAL_AMT_FN 
392
		END
393

    
394
		CLOSE AssetDetail
395
		DEALLOCATE AssetDetail
396
		CLOSE PaymentDetail
397
		DEALLOCATE PaymentDetail
398

    
399
		---INSERT NHOM QUYEN USER THONG BAO (DAO-EDIT)
400
		--DELETE FROM TL_ROLE_NOTIFICATION WHERE PO_ID=@p_PO_ID
401

    
402
	 --  FETCH NEXT FROM LISTROLE INTO
403
		--@NOTIFI_ID,
404
		--@TL_NAME,
405
		--@EDITOR_DT,
406
		--@EDITOR_ID,
407
		--@NOTES_ROLE
408
		--WHILE @@FETCH_STATUS = 0
409
		--BEGIN
410
		--	IF(LEN(@NOTIFI_ID)=0)
411
		--	EXEC SYS_CodeMasters_Gen 'TL_ROLE_NOTIFICATION', @NOTIFI_ID out
412
		--	IF @NOTIFI_ID='' OR @NOTIFI_ID IS NULL GOTO ABORT
413

    
414
		--	INSERT INTO [dbo].[TL_ROLE_NOTIFICATION]
415
  --         ([NOTIFI_ID]
416
  --         ,[NOTIFI_CODE]
417
  --         ,[NOTIFI_NAME]
418
  --         ,[TYPE]
419
  --         ,[PO_ID]
420
  --         ,[TL_NAME]
421
  --         ,[BRANCH_ID]
422
  --         ,[RECORD_STATUS]
423
  --         ,[AUTH_STATUS]
424
  --         ,[EDITOR_ID]
425
  --         ,[EDIT_DT]
426
  --         ,[NOTES])
427
		--	 VALUES
428
  --         (@NOTIFI_ID
429
  --         ,''
430
  --         ,''
431
  --         ,'PO'
432
  --         ,@p_PO_ID
433
  --         ,@TL_NAME
434
  --         ,@p_BRANCH_ID
435
  --         ,'1'
436
  --         ,'U'
437
  --         ,@EDITOR_ID
438
  --         ,CONVERT(DATETIME, @EDITOR_DT, 103)
439
  --         ,@NOTES_ROLE)
440
			
441
		--	IF @@ERROR <> 0 GOTO ABORT
442
			
443
		--	FETCH NEXT FROM LISTROLE INTO
444
		--	@NOTIFI_ID,
445
		--	@TL_NAME,
446
		--	@EDITOR_DT,
447
		--	@EDITOR_ID,
448
		--	@NOTES_ROLE
449
		--END
450
		
451
		--CLOSE LISTROLE
452
		--DEALLOCATE LISTROLE
453
		--- BAT DAU CAP NHAT AUTH_STATUS ='U' NEU BAM GUI PHE DUYET
454
		IF(@p_RECORD_STATUS ='U')
455
		BEGIN
456
			UPDATE TR_PO_MASTER SET AUTH_STATUS ='U' WHERE PO_ID =@p_PO_ID
457
		END
458

    
459
		DECLARE @p_MSG_PROCESS NVARCHAR(MAX)
460
		-------------------BAODNQ 19/12/2022 : LƯU LOG THÔNG TIN THAY ĐỔI---------------------
461
		IF((SELECT COUNT(*) FROM @t_OLD_PO_DETAIL) <> 0)
462
		BEGIN
463
			DECLARE @c_HH_ID VARCHAR(15),
464
					@c_OLD_QUANTITY INT,
465
					@c_OLD_PRICE DECIMAL(18,2),
466
					@c_OLD_VAT DECIMAL(18,2),
467
					@c_OLD_TOTAL_AMT DECIMAL(18,2)
468
			SET @p_MSG_PROCESS = N'USER: ' +@p_MAKER_ID+ N' thực hiện chỉnh sửa thông tin PO, lưới chi tiết hàng hóa:'
469
			DECLARE OldPoDetailCursor CURSOR FOR
470
				SELECT HH_ID, QUANTITY, PRICE, VAT, TOTAL_AMT FROM @t_OLD_PO_DETAIL
471
			OPEN OldPoDetailCursor
472

    
473
			FETCH NEXT FROM OldPoDetailCursor INTO 
474
				@c_HH_ID, @c_OLD_QUANTITY, @c_OLD_PRICE, @c_OLD_VAT, @c_OLD_TOTAL_AMT
475
			WHILE @@FETCH_STATUS = 0
476
			BEGIN
477
				DECLARE @c_NEW_QUANTITY INT,
478
						@c_NEW_PRICE DECIMAL(18,2),
479
						@c_NEW_VAT DECIMAL(18,2)
480
				DECLARE @c_HH_NAME NVARCHAR(200) = (SELECT TOP 1 HH_NAME FROM CM_HANGHOA WHERE HH_ID = @c_HH_ID)
481
				SET @c_NEW_QUANTITY = (SELECT TOP 1 QUANTITY FROM @t_NEW_PO_DETAIL WHERE HH_ID = @c_HH_ID)
482
				SET @c_NEW_PRICE = (SELECT TOP 1 PRICE FROM @t_NEW_PO_DETAIL WHERE HH_ID = @c_HH_ID)
483
				SET @c_NEW_VAT = (SELECT TOP 1 VAT FROM @t_NEW_PO_DETAIL WHERE HH_ID = @c_HH_ID)
484
				SET @p_MSG_PROCESS = @p_MSG_PROCESS
485
					+CHAR(10)+ N'- Hàng hóa: ' + @c_HH_NAME + N':'
486
					+CHAR(10)+ N'   Số lượng: chỉnh sửa từ ' +CONVERT(VARCHAR,ISNULL(@c_OLD_QUANTITY,0))+ N' thành ' + CONVERT(VARCHAR,ISNULL(@c_NEW_QUANTITY,0))
487
					+CHAR(10)+ N'   Đơn giá: chỉnh sửa từ ' +CONVERT(VARCHAR,FORMAT(ISNULL(@c_OLD_PRICE, 0), '#,#', 'vi-VN'))+ N' thành ' + CONVERT(VARCHAR,FORMAT(ISNULL(@c_NEW_PRICE, 0), '#,#', 'vi-VN'))
488
					+CHAR(10)+ N'   VAT(%): chỉnh sửa từ ' +CONVERT(VARCHAR,CAST(@c_OLD_VAT AS INT))+ N' thành ' + CONVERT(VARCHAR,CAST(@c_NEW_VAT AS INT))
489

    
490
				FETCH NEXT FROM OldPoDetailCursor INTO 
491
					@c_HH_ID, @c_OLD_QUANTITY, @c_OLD_PRICE, @c_OLD_VAT, @c_OLD_TOTAL_AMT
492
			END
493
		END
494
		ELSE
495
		BEGIN
496
			SET @p_MSG_PROCESS = N'Cập nhật phiếu gọi hàng thành công'
497
		END
498
		----------------ENDBAODNQ 19/12/2022--------------------
499

    
500
		------------------------BAODNQ 1/3/2022: Insert lưu lịch sử xử lý----------------
501
		INSERT INTO dbo.PL_PROCESS
502
					(
503
						REQ_ID,
504
						PROCESS_ID,
505
						CHECKER_ID,
506
						APPROVE_DT,
507
						PROCESS_DESC,
508
						NOTES
509
					)
510
					VALUES
511
					(   @p_PO_ID,        -- REQ_ID - varchar(15)
512
						'UPDATE',        -- PROCESS_ID - varchar(10)
513
						@p_MAKER_ID,        -- CHECKER_ID - varchar(15)
514
						GETDATE(), -- APPROVE_DT - datetime
515
					    @p_MSG_PROCESS,
516
					   N'Cập nhật phiếu gọi hàng'      -- PROCESS_DESC - nvarchar(1000)
517
					)
518

    
519
COMMIT TRANSACTION
520
IF(@p_RECORD_STATUS ='U')
521
BEGIN
522
	
523
	IF(NOT EXISTS(SELECT * FROM TR_PO_DETAIL WHERE PO_ID =@p_PO_ID))
524
	BEGIN
525
		SELECT '-1' as Result, @p_PO_ID  PO_ID, N'PO số: '+ @p_PO_CODE +N' Vui lòng nhập thông tin hàng hóa gọi hàng' ErrorDesc
526
		RETURN '-1'
527
	END
528
	IF(NOT EXISTS(SELECT * FROM TR_PO_PAYMENT WHERE PO_ID =@p_PO_ID))
529
	BEGIN
530
		SELECT '-1' as Result, @p_PO_ID  PO_ID, N'PO số: '+ @p_PO_CODE +N' Vui lòng nhập thông tin lịch thanh toán' ErrorDesc
531
		RETURN '-1'
532
	END
533
	-- INSERT VAO LOG
534
	INSERT INTO dbo.PL_PROCESS
535
	(
536
						REQ_ID,
537
						PROCESS_ID,
538
						CHECKER_ID,
539
						APPROVE_DT,
540
						PROCESS_DESC,NOTES
541
					)
542
					VALUES
543
					(   @p_PO_ID,        -- REQ_ID - varchar(15)
544
						'SEND',        -- PROCESS_ID - varchar(10)
545
						@p_MAKER_ID,        -- CHECKER_ID - varchar(15)
546
						GETDATE(), -- APPROVE_DT - datetime
547
					   N'Nhân viên gửi phê duyệt phiếu thành công' ,N'Gửi phê duyệt')
548
	SELECT '2' as Result, @p_PO_ID  PO_ID, N'PO số: '+ @p_PO_CODE +N' đã được gửi phê duyệt thành công. Vui lòng đợi cấp có thẩm quyền phê duyệt' ErrorDesc
549
	RETURN '2'
550
	
551
END
552
ELSE
553
BEGIN
554
	SELECT '0' as Result, @p_PO_ID  PO_ID, N'PO số: '+ @p_PO_CODE +N' đã được cập nhật dữ liệu thành công. Bạn có thể bấm gửi phê duyệt' ErrorDesc
555
	RETURN '0'
556
END
557
ABORT:
558
BEGIN
559
		CLOSE AssetDetail
560
		DEALLOCATE AssetDetail
561
		CLOSE PaymentDetail
562
		DEALLOCATE PaymentDetail
563
		--CLOSE LISTROLE
564
		--DEALLOCATE LISTROLE
565
		ROLLBACK TRANSACTION
566
		SELECT '-1' AS RESULT
567
		RETURN '-1'
568
End
569

    
570

    
571
--SELECT * FROM TR_CONTRACT_DT
572

    
573
--SELECT * FROM TR_CONTRACT_PAYMENT
574

    
575
--SELECT * FROM TR_CONTRACT