Project

General

Profile

TR_PO_MASTER_Upd.txt

Luc Tran Van, 01/17/2023 11:25 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
		DECLARE @p_PREV_MAKER_ID VARCHAR(20) = (SELECT TOP 1 MAKER_ID FROM TR_PO_MASTER WHERE PO_ID = @p_PO_ID)
47
		DECLARE @p_PREV_MAKER_NAME NVARCHAR(100) = (SELECT TOP 1 TLFullName FROM TL_USER WHERE TLNANME = @p_PREV_MAKER_ID)
48
		SELECT '-1' Result, @p_PO_ID AS PO_ID, 
49
			N'Không thể chỉnh sửa. Chỉ có người tạo PO: ' +@p_PO_CODE+ N' có user domain là: ' + @p_PREV_MAKER_ID + ' - ' + @p_PREV_MAKER_NAME + 
50
			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 
51
		RETURN '-1'
52
	END
53

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

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

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

    
175
BEGIN TRANSACTION
176

    
177
		-------------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----------------------
178
		DECLARE @t_OLD_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
		DECLARE @t_NEW_PO_DETAIL TABLE(
182
			HH_ID VARCHAR(15), QUANTITY INT, PRICE DECIMAL(18,2), VAT DECIMAL(18,2), TOTAL_AMT DECIMAL(18,2)
183
		)
184
		-------------ENDBAODNQ 19/12/2022-------------------------------
185

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

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

    
251
		@CURRENCY VARCHAR(15),
252
		@RATE INT,
253
		@TOTAL_AMT_FN DECIMAL(18,2)
254

    
255
		DECLARE @l_GOODSTYPE_ID VARCHAR(15)
256

    
257
		DELETE FROM TR_PO_DETAIL WHERE PO_ID = @P_PO_ID 
258

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

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

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

    
286
			IF(LEN(@PD_ID) = 0)
287

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

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

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

    
318
					SET @GOODSTYPE_REAL = @l_GOODSTYPE_ID
319
				END
320
			END			
321
			--END
322

    
323
			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],
324
			[PAYMENT_STATUS],[AMOUNT_PAID],[PAID_DT],[INVOICENO],[NOTES], RECEIVE_BRANCH, RECEIVE_ADDR, RECEIVE_PERSON, RECEIVE_TEL,[RECORD_STATUS],[MAKER_ID],[CREATE_DT],
325
			[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)
326
			VALUES(@PD_ID ,@p_PO_ID ,@PLAN_ID ,@TRADE_ID,@REQ_DT_ID ,@GOODS_ID,@DESCRIPTION ,@UNIT_ID ,@QUANTITY ,@PRICE ,@TOTAL_AMT ,
327
			@IS_DELIVERY ,CONVERT(DATETIME, @DELIVERY_DT, 103) ,@PAYMENT_STATUS ,@AMOUNT_PAID ,
328
			CONVERT(DATETIME, @PAID_DT, 103) ,@INVOICENO ,@NOTES , @RECEIVE_BRANCH, @RECEIVE_ADDR, @RECEIVE_PERSON, @RECEIVE_TEL,
329
			@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),
330
			@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) )
331
			IF @@ERROR <> 0 GOTO ABORT
332

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

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

    
392

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

    
397
		CLOSE AssetDetail
398
		DEALLOCATE AssetDetail
399
		CLOSE PaymentDetail
400
		DEALLOCATE PaymentDetail
401

    
402
		---INSERT NHOM QUYEN USER THONG BAO (DAO-EDIT)
403
		--DELETE FROM TL_ROLE_NOTIFICATION WHERE PO_ID=@p_PO_ID
404

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

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

    
462
		DECLARE @p_MSG_PROCESS NVARCHAR(MAX)
463
		-------------------BAODNQ 19/12/2022 : LƯU LOG THÔNG TIN THAY ĐỔI---------------------
464
		IF((SELECT COUNT(*) FROM @t_OLD_PO_DETAIL) <> 0)
465
		BEGIN
466
			DECLARE @c_HH_ID VARCHAR(15),
467
					@c_OLD_QUANTITY INT,
468
					@c_OLD_PRICE DECIMAL(18,2),
469
					@c_OLD_VAT DECIMAL(18,2),
470
					@c_OLD_TOTAL_AMT DECIMAL(18,2)
471
			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:'
472
			DECLARE OldPoDetailCursor CURSOR FOR
473
				SELECT HH_ID, QUANTITY, PRICE, VAT, TOTAL_AMT FROM @t_OLD_PO_DETAIL
474
			OPEN OldPoDetailCursor
475

    
476
			FETCH NEXT FROM OldPoDetailCursor INTO 
477
				@c_HH_ID, @c_OLD_QUANTITY, @c_OLD_PRICE, @c_OLD_VAT, @c_OLD_TOTAL_AMT
478
			WHILE @@FETCH_STATUS = 0
479
			BEGIN
480
				DECLARE @c_NEW_QUANTITY INT,
481
						@c_NEW_PRICE DECIMAL(18,2),
482
						@c_NEW_VAT DECIMAL(18,2)
483
				DECLARE @c_HH_NAME NVARCHAR(200) = (SELECT TOP 1 HH_NAME FROM CM_HANGHOA WHERE HH_ID = @c_HH_ID)
484
				SET @c_NEW_QUANTITY = (SELECT TOP 1 QUANTITY FROM @t_NEW_PO_DETAIL WHERE HH_ID = @c_HH_ID)
485
				SET @c_NEW_PRICE = (SELECT TOP 1 PRICE FROM @t_NEW_PO_DETAIL WHERE HH_ID = @c_HH_ID)
486
				SET @c_NEW_VAT = (SELECT TOP 1 VAT FROM @t_NEW_PO_DETAIL WHERE HH_ID = @c_HH_ID)
487
				SET @p_MSG_PROCESS = @p_MSG_PROCESS
488
					+CHAR(10)+ N'- Hàng hóa: ' + @c_HH_NAME + N':'
489
					+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))
490
					+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'))
491
					+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))
492

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

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

    
522
COMMIT TRANSACTION
523
IF(@p_RECORD_STATUS ='U')
524
BEGIN
525
	
526
	IF(NOT EXISTS(SELECT * FROM TR_PO_DETAIL WHERE PO_ID =@p_PO_ID))
527
	BEGIN
528
		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
529
		RETURN '-1'
530
	END
531
	IF(NOT EXISTS(SELECT * FROM TR_PO_PAYMENT WHERE PO_ID =@p_PO_ID))
532
	BEGIN
533
		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
534
		RETURN '-1'
535
	END
536
	-- INSERT VAO LOG
537
	INSERT INTO dbo.PL_PROCESS
538
	(
539
						REQ_ID,
540
						PROCESS_ID,
541
						CHECKER_ID,
542
						APPROVE_DT,
543
						PROCESS_DESC,NOTES
544
					)
545
					VALUES
546
					(   @p_PO_ID,        -- REQ_ID - varchar(15)
547
						'SEND',        -- PROCESS_ID - varchar(10)
548
						@p_MAKER_ID,        -- CHECKER_ID - varchar(15)
549
						GETDATE(), -- APPROVE_DT - datetime
550
					   N'Nhân viên gửi phê duyệt phiếu thành công' ,N'Gửi phê duyệt')
551
	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
552
	RETURN '2'
553
	
554
END
555
ELSE
556
BEGIN
557
	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
558
	RETURN '0'
559
END
560
ABORT:
561
BEGIN
562
		CLOSE AssetDetail
563
		DEALLOCATE AssetDetail
564
		CLOSE PaymentDetail
565
		DEALLOCATE PaymentDetail
566
		--CLOSE LISTROLE
567
		--DEALLOCATE LISTROLE
568
		ROLLBACK TRANSACTION
569
		SELECT '-1' AS RESULT
570
		RETURN '-1'
571
End
572

    
573

    
574
--SELECT * FROM TR_CONTRACT_DT
575

    
576
--SELECT * FROM TR_CONTRACT_PAYMENT
577

    
578
--SELECT * FROM TR_CONTRACT