Project

General

Profile

2.1.TR_CONTRACT_UPD.txt

Luc Tran Van, 08/02/2023 11:48 AM

 
1
ALTER PROCEDURE [dbo].[TR_CONTRACT_Upd]
2
@p_CONTRACT_ID VARCHAR(15),
3
@p_CONTRACT_CODE	varchar(150)  = NULL,
4
@p_CONTRACT_NAME	nvarchar(200)  = NULL,
5
@p_CONTRACT_TYPE varchar(1) = NULL,
6
@p_BID_ID	varchar(15)  = NULL,
7
@p_SUP_ID	varchar(15)  = NULL,
8
@p_TOTAL_AMT	decimal(18)  = NULL,
9
@p_DELIVERY_DT	VARCHAR(20) = NULL,
10
@p_FORM1	varchar(4)  = NULL,
11
@p_VOUCHER_ID1	varchar(20)  = NULL,
12
@p_BANK1	varchar(4)  = NULL,
13
@p_AMOUNT1	decimal(18)  = NULL,
14
@p_EXP_DT1	VARCHAR(20) = NULL,
15
@p_RATE1	decimal(18,2)  = NULL,
16
@p_FORM2	varchar(4)  = NULL,
17
@p_VOUCHER_ID2	varchar(20)  = NULL,
18
@p_BANK2	varchar(4)  = NULL,
19
@p_AMOUNT2	decimal(18)  = NULL,
20
@p_EXP_DT2	VARCHAR(20) = NULL,
21
@p_RATE2	decimal(18,2)  = NULL,
22
@p_REQ_DOC_ID	nvarchar(50)  = NULL,
23
@p_REQ_DOC_CONTENT	nvarchar(1000)  = NULL,
24
@p_APPROVE_VALUE	decimal(18)  = NULL,
25
@p_SIGN_DT	VARCHAR(20) = NULL,
26
@p_CONSTRUCT_PROGRESS	decimal(18,2)  = NULL,
27
@p_NOTES	nvarchar(1000)  = NULL,
28
@p_RECORD_STATUS	varchar(1)  = NULL,
29
@p_MAKER_ID	varchar(12)  = NULL,
30
@p_CREATE_DT	VARCHAR(20) = NULL,
31
@p_AUTH_STATUS	varchar(50)  = NULL,
32
@p_CHECKER_ID	varchar(12)  = NULL,
33
@p_APPROVE_DT	VARCHAR(20) = NULL,
34
@P_START_DT NVARCHAR(20) = NULL,
35
@P_END_DT NVARCHAR(20) = NULL,
36
@P_LISTASSET XML = NULL,
37
@P_LISTPAYMENT XML = NULL,
38
@P_CON_TRACK XML = NULL,
39
@p_ListTrREQFile XML,
40
@p_IS_CLOSED VARCHAR(1) = NULL,
41
@p_CONT_TYPE VARCHAR(10) = NULL,
42
@p_CUST_ID VARCHAR(15) = NULL,
43
@p_BRANCH_ID VARCHAR(15) = NULL,
44
@p_EXP_CONTRACT INT = NULL, 
45
@p_DEPOSIT_AMT DECIMAL(18,0) = NULL,
46
@p_TYPE_PERIOD VARCHAR(15) = NULL,
47
@p_DEPOSIT_NOTE NVARCHAR(1000) = NULL,
48
-----------------------BAODNQ 25/2/2022 : Thêm cột vào bảng TR_CONTRACT-------------
49
@p_IS_SEND_APPR VARCHAR(1) = NULL,
50
@p_SEND_APPR_DT VARCHAR(20) = NULL,
51
@p_ADDR NVARCHAR(1000) = NULL,
52
@p_SUP_CODE VARCHAR(20) = NULL
53
AS
54
---- 15.04.2023 LUCTV DIEU CHỈNH KIỂM TRA CÁC THÔNG TIN VỀ NGÀY HIỆU LỰC / NGÀY HẾT HIỆU LỰC / GIÁ TRỊ HỢP ĐỒNG NẾU CÓ ĐIỀU CHỈNH THÌ MỚI GHI NHẬN LOG, NGƯỢC LẠI NẾU KHÔNG THAY ĐỔI THÌ KHÔNG CẦN GHI LOG
55
		DECLARE @START_DATE_EXEC_OLD DATE, @END_DATE_EXEC_OLD DATE, @TOTAL_AMT_CONTRACT_OLD DECIMAL(18,0), @SUPPLIER_ID_OLD NVARCHAR(1000),@SUPPLIER_NAME_OLD NVARCHAR(1000), 
56
		@SUPPLIER_NAME NVARCHAR(1000)
57
		SET @START_DATE_EXEC_OLD = ISNULL((SELECT START_DT FROM TR_CONTRACT WHERE CONTRACT_ID =@p_CONTRACT_ID),'')
58
		SET @END_DATE_EXEC_OLD = ISNULL((SELECT END_DT FROM TR_CONTRACT WHERE CONTRACT_ID =@p_CONTRACT_ID),'')
59
		SET @TOTAL_AMT_CONTRACT_OLD = ISNULL((SELECT TOTAL_AMT FROM TR_CONTRACT WHERE CONTRACT_ID =@p_CONTRACT_ID),0)
60
		SET @SUPPLIER_ID_OLD = ISNULL((SELECT SUP_ID FROM TR_CONTRACT WHERE CONTRACT_ID =@p_CONTRACT_ID),'')
61
		SET @SUPPLIER_NAME_OLD =ISNULL((SELECT SUP_NAME FROM CM_SUPPLIER WHERE SUP_ID=@SUPPLIER_ID_OLD),'')
62
		SET @SUPPLIER_NAME =ISNULL((SELECT SUP_NAME FROM CM_SUPPLIER WHERE SUP_ID=@p_SUP_ID),'')
63
---- END LUCTV 15.04.2023
64
	IF(EXISTS(SELECT * FROM TR_CONTRACT WHERE CONTRACT_ID = @p_CONTRACT_ID AND AUTH_STATUS = 'U'))
65
	BEGIN
66
		SELECT '-1' as Result, @P_CONTRACT_ID  CONTRACT_ID, 
67
			N'Không thể chỉnh sửa. Hợp đồng ' + @p_CONTRACT_CODE + 
68
				N' đã được gửi yêu cầu phê duyệt' ErrorDesc
69
		RETURN '-1'
70
	END
71
	DECLARE @sErrorCode VARCHAR(20)
72
	DECLARE @TEMP TABLE
73
			(
74
				[KEY] varchar(15),
75
				[REF_ID] varchar(15),
76
				[TYPE] varchar(50)
77
			)
78
	--IF (@p_CONTRACT_CODE IS NOT NULL AND @p_CONTRACT_CODE <> '')
79
	--BEGIN
80
	--	IF EXISTS(SELECT * FROM TR_CONTRACT A WHERE A.CONTRACT_CODE = @p_CONTRACT_CODE AND A.CONTRACT_ID != @p_CONTRACT_ID )
81
	--	BEGIN
82
	--		SET @sErrorCode = 'TR-00001'
83
	--	END
84
	--END
85
	
86
	----------------BAODNQ 8/11/2022 : BỎ RÀNG BUỘC TRÙNG SỐ HỢP ĐỒNG------------
87
	--IF(@p_CONTRACT_CODE IS NOT NULL AND @p_CONTRACT_CODE <> '')
88
	--BEGIN
89
	--	IF(EXISTS (SELECT * FROM TR_CONTRACT WHERE CONTRACT_CODE = @p_CONTRACT_CODE AND CONTRACT_ID <> @p_CONTRACT_ID))
90
	--	BEGIN
91
	--		DECLARE @p_EXISTS_CONTRACT_ID VARCHAR(15) = (
92
	--			SELECT TOP 1 CONTRACT_ID FROM TR_CONTRACT WHERE CONTRACT_CODE = @p_CONTRACT_CODE AND CONTRACT_ID <> @p_CONTRACT_ID
93
	--		)
94
	--		SELECT '-1' AS Result, '' CONTRACT_ID,
95
	--			N'Số hợp đồng: ' + @p_CONTRACT_CODE + N' đã tồn tại trên hệ thống ứng với ID hợp đồng: ' 
96
	--			+ @p_EXISTS_CONTRACT_ID + N'. Vui lòng nhập số hợp đồng khác' ErrorDesc
97
	--		RETURN '-1'
98
	--	END
99
	--END
100

    
101
	IF 	@sErrorCode <> ''
102
	BEGIN
103
		SELECT '-1' as Result, ''  CONTRACT_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @sErrorCode
104
		RETURN '-1'
105
	END
106
	
107
	DECLARE @REF_CODE VARCHAR(15) = NULL, @PDN_TT VARCHAR(15) = NULL
108
	SET @REF_CODE =
109
	(	SELECT TOP 1 B.REQ_PAY_CODE
110
		FROM TR_REQ_ADVANCE_DT A
111
		INNER JOIN TR_REQ_ADVANCE_PAYMENT B ON A.REQ_PAY_ID = B.REQ_PAY_ID
112
		WHERE A.REF_ID =@p_CONTRACT_ID AND (B.AUTH_STATUS_KT <>'A' OR B.AUTH_STATUS_KT IS NULL)
113
	)
114
	--- TIM KIEM XEM PO NAY CO DUOC PHEP THANH TOAN HAY KHONG
115
	SET @PDN_TT =
116
	(	SELECT TOP 1 B.REQ_PAY_CODE
117
		FROM TR_REQ_ADVANCE_DT A
118
		INNER JOIN TR_REQ_PAYMENT B ON A.REQ_PAY_ID = B.REQ_PAY_ID
119
		WHERE A.REF_ID =@p_CONTRACT_ID AND (B.AUTH_STATUS_KT <>'A' OR B.AUTH_STATUS_KT IS NULL)
120
	)
121
	IF(@p_IS_CLOSED ='Y' AND @REF_CODE IS NOT NULL)
122
	BEGIN
123
			--ROLLBACK TRANSACTION
124
			SELECT '-1' Result, @p_CONTRACT_ID AS PO_ID, N'Hợp đồng đang được thực hiện tạm ứng với số phiếu: '+@REF_CODE AS ErrorDesc 
125
			RETURN '-1'
126
	END
127
	IF(@p_IS_CLOSED ='Y' AND @PDN_TT IS NOT NULL)
128
	BEGIN
129
		--ROLLBACK TRANSACTION
130
			SELECT '-1' Result, @p_CONTRACT_ID AS PO_ID, N'Hợp đồng đang được thực hiện thanh toán với số phiếu: '+@PDN_TT AS ErrorDesc 
131
			RETURN '-1'
132
	END
133

    
134
	----------------BAODNQ 14/11/2022 : NẾU LOẠI HỢP ĐỒNG = DK, KO BẮT BUỘC NHẬP LƯỚI DANH SÁCH HÀNG HÓA------------------
135
	---------------NGƯỢC LẠI NẾU LÀ (MS, NT), BẮT BUỘC NHẬP LƯỚI DANH SÁCH HÀNG HÓA----------------
136
	DECLARE @p_TR_CONTRACT_DT_XML_COUNT INT
137
	SET @p_TR_CONTRACT_DT_XML_COUNT = (
138
		SELECT @p_LISTASSET.value('count(/Root/AssetDetail/GOODS_ID)', 'INT') AS 'COUNT'
139
	)
140
	PRINT @p_TR_CONTRACT_DT_XML_COUNT
141
	IF(@p_CONT_TYPE <> 'DK' AND @p_TR_CONTRACT_DT_XML_COUNT <= 0)
142
	BEGIN
143
		SELECT '-1' Result, '' AS CONTRACT_ID, N'Đối với hợp đồng không phải là hợp đồng định kỳ, lưới danh sách hàng hóa bắt buộc nhập' AS ErrorDesc 
144
		RETURN '-1'
145
	END
146
	-----------------ENDBAODNQ-------------------
147

    
148
	Declare @hdoc INT
149
	Exec sp_xml_preparedocument @hdoc Output,@P_LISTASSET
150
	DECLARE AssetDetail CURSOR FOR
151
	SELECT *
152
	FROM OPENXML(@hDoc,'/Root/AssetDetail',2)
153
	WITH 
154
	(
155
		CD_ID VARCHAR(15),
156
		GOODS_ID	varchar(15),
157
		UNIT_ID	varchar(15),
158
		QUANTITY	decimal(18),
159
		PRICE	decimal(18),
160
		NOTES	nvarchar(1000),
161
		GD_NAME_REAL NVARCHAR(500),
162
		RECURRING VARCHAR(5),
163
		UNIT_NAME_REAL NVARCHAR(100),
164
		-------------------BAODNQ 23/2/2022: Thêm cột vào bảng TR_CONTRACT_DT-------------
165
		RENT_PRICE DECIMAL(18,0),
166
		BUILDING_ID VARCHAR(15)
167
	)
168
	OPEN AssetDetail
169

    
170
	Exec sp_xml_preparedocument @hdoc Output,@P_LISTPAYMENT
171
	DECLARE PaymentDetail CURSOR FOR
172
	SELECT *
173
	FROM OPENXML(@hDoc,'/Root/PaymentDetail',2)
174
	WITH 
175
	(
176
		PAY_ID	VARCHAR(15),
177
		PAY_PHASE	NVARCHAR(1000),
178
		EXPECTED_DT	VARCHAR(20),
179
		[PERCENT]	decimal(18,2),
180
		[AMOUNT]	decimal(18),
181
		PAY_STATUS VARCHAR(1),
182
		PAY_AMOUNT DECIMAL(18),
183
		PAY_DT VARCHAR(20),
184
		NOTES	nvarchar(1000)
185
	)
186
	OPEN PaymentDetail
187
	---- LUCTV 02082023_SECRETKEY XÓA NHỮNG LỊCH THANH TOÁN KHÔNG NẰM TRONG XML
188
	DELETE FROM TR_CONTRACT_PAYMENT WHERE CONTRACT_ID =@p_CONTRACT_ID AND PAY_ID NOT IN (SELECT ISNULL(PAY_ID,'') FROM OPENXML(@hDoc,'/Root/PaymentDetail',2)
189
	WITH 
190
	(
191
		PAY_ID	VARCHAR(15),
192
		PAY_PHASE	NVARCHAR(1000),
193
		EXPECTED_DT	VARCHAR(20),
194
		[PERCENT]	decimal(18,2),
195
		[AMOUNT]	decimal(18),
196
		PAY_STATUS VARCHAR(1),
197
		PAY_AMOUNT DECIMAL(18),
198
		PAY_DT VARCHAR(20),
199
		NOTES	nvarchar(1000)
200
	))
201
	Exec sp_xml_preparedocument @hdoc Output,@P_CON_TRACK
202
	DECLARE ConTrack CURSOR FOR
203
	SELECT *
204
	FROM OPENXML(@hDoc,'/Root/ConTrack',2)
205
	WITH 
206
	(
207
		CONS_TRACK_ID	VARCHAR(15),
208
		FIX_DESCRIPTION	varchar(200),
209
		EXPECTED_DT	VARCHAR(20),
210
		FINISH_DT	VARCHAR(20),
211
		[STATUS]	VARCHAR(1),
212
		NOTES	nvarchar(1000)
213
	)
214
	OPEN ConTrack
215

    
216
	PRINT 'PASS KHOI TAO'
217
BEGIN TRANSACTION
218
			--- 03.04.2023 KIỂM TRA NẾU NHÀ CUNG CẤP HIỆN HÀNH ĐANG TRỎ TỚI PO THÌ PHẢI CẢNH BÁO XEM XÉT LẠI & XÓA PO LƯU NHÁP ĐI
219
		IF(EXISTS(SELECT * FROM TR_PO_MASTER WHERE REQ_DOC_ID=@p_REQ_DOC_ID AND SUP_ID =@p_SUP_ID))
220
		BEGIN
221
				ROLLBACK TRANSACTION
222
				SELECT '-1' Result, '' AS CONTRACT_ID, N'Cập nhật hợp đồng thất bại. Hiện phiếu yêu cầu mua sắm này đang có PO số: ' +
223
							(SELECT TOP 1 ISNULL(PO_CODE,'') FROM TR_PO_MASTER WHERE REQ_DOC_ID=@p_REQ_DOC_ID AND SUP_ID =@p_SUP_ID)+
224
								N' sử dụng. Vui lòng kiểm tra lại PO và xóa PO này khỏi hệ thống' AS ErrorDesc 
225
				RETURN '-1'
226
		END
227
		--- END 03.04.2023
228
		---------------BAODNQ 12/12/2022 : HOT_FIX TẠM THỜI-------------------
229
		--------------NẾU KO TRUYỀN SUP_ID THÌ TỪ SUP_CODE TÌM KIẾM RA SUP_ID---------
230
		IF((@p_SUP_ID IS NULL OR @p_SUP_ID = '') AND @p_SUP_CODE IS NOT NULL AND @p_SUP_CODE <> '')
231
		BEGIN
232
			SET @p_SUP_ID = (SELECT TOP 1 SUP_ID FROM CM_SUPPLIER WHERE SUP_CODE = @p_SUP_CODE)
233
		END
234
		--------------ENDBAODNQ 12/12/2022----------------------------
235

    
236
		IF(@p_CONTRACT_NAME ='' OR @p_CONTRACT_NAME IS  NULL)
237
		BEGIN
238
			ROLLBACK TRANSACTION
239
				SELECT '-1' Result, @p_CONTRACT_ID AS PO_ID, N'Tên hợp đồng không được để trống' AS ErrorDesc 
240
				RETURN '-1'
241
		END
242
		--insert master
243
		IF @p_DELIVERY_DT = ''  
244
			SET @p_DELIVERY_DT = NULL 
245
		IF @p_EXP_DT1 = ''
246
			SET @p_EXP_DT1 = NULL
247
		IF @p_EXP_DT2 = ''
248
			SET @p_EXP_DT2 = NULL
249
		IF @p_SIGN_DT = ''
250
			SET @p_SIGN_DT = NULL
251
		IF @p_CREATE_DT = ''
252
			SET @p_CREATE_DT = NULL
253
		IF @p_APPROVE_DT = ''
254
			SET @p_APPROVE_DT = NULL
255
		IF @P_START_DT = ''
256
			SET @P_START_DT = NULL
257
		IF @P_END_DT = ''
258
			SET @P_END_DT = NULL
259
		DECLARE @EXP_DT_OLD DATEtime, @TOTAL_AMT_OLD DECIMAL(18,0), @FROM_EXP_DATE_OLD DATEtime
260
		SET @FROM_EXP_DATE_OLD = (SELECT START_DT FROM TR_CONTRACT WHERE CONTRACT_ID =@p_CONTRACT_ID)
261
		SET @EXP_DT_OLD = (SELECT END_DT FROM TR_CONTRACT WHERE CONTRACT_ID =@p_CONTRACT_ID)
262
		SET @TOTAL_AMT_OLD = (SELECT TOTAL_AMT FROM TR_CONTRACT WHERE CONTRACT_ID =@p_CONTRACT_ID)
263
		
264
		IF(EXISTS (SELECT * FROM TR_CONTRACT WHERE CONTRACT_ID = @p_CONTRACT_ID AND AUTH_STATUS = 'A'))
265
		BEGIN
266
			SET @p_CHECKER_ID = NULL
267
			SET @p_APPROVE_DT = NULL
268
			SET @p_SEND_APPR_DT = NULL
269
		END
270
		
271
		UPDATE TR_CONTRACT SET [START_DT] = (CASE WHEN @P_START_DT IS NOT NULL AND @P_START_DT <> '' then CONVERT(DATETIME,@P_START_DT,103) ELSE NULL END), 
272
		[END_DT] = (CASE WHEN @P_END_DT IS NOT NULL AND @P_END_DT <> '' THEN CONVERT(DATETIME,@P_END_DT,103) ELSE NULL END), [CONTRACT_CODE] = @p_CONTRACT_CODE,
273
		[CONTRACT_NAME] = @p_CONTRACT_NAME, [CONTRACT_TYPE] = @p_CONTRACT_TYPE ,
274
		[BID_ID] = @p_BID_ID,[SUP_ID] = @p_SUP_ID,[TOTAL_AMT] = @p_TOTAL_AMT,
275
		[DELIVERY_DT] = (CASE WHEN @p_DELIVERY_DT IS NOT NULL AND @p_DELIVERY_DT <> '' then CONVERT(DATETIME, @p_DELIVERY_DT, 103) ELSE NULL END),
276
		[FORM1] = @p_FORM1,[VOUCHER_ID1] = @p_VOUCHER_ID1,[BANK1] = @p_BANK1,
277
		[AMOUNT1] = @p_AMOUNT1,[EXP_DT1] = (CASE WHEN @p_EXP_DT1 IS NOT NULL AND @p_EXP_DT1 <> '' then CONVERT(DATETIME, @p_EXP_DT1, 103) ELSE NULL END),
278
		[RATE1] = @p_RATE1,[FORM2] = @p_FORM2,[VOUCHER_ID2] = @p_VOUCHER_ID2,
279
		[BANK2] = @p_BANK2,[AMOUNT2] = @p_AMOUNT2,[EXP_DT2] = (CASE WHEN @p_EXP_DT2 IS NOT NULL AND @p_EXP_DT2 <> '' then CONVERT(DATETIME, @p_EXP_DT2, 103) ELSE NULL END),
280
		[RATE2] = @p_RATE2,[REQ_DOC_ID] = @p_REQ_DOC_ID,[REQ_DOC_CONTENT] = @p_REQ_DOC_CONTENT,
281
		[APPROVE_VALUE] = @p_APPROVE_VALUE,
282
		[SIGN_DT] =  (CASE WHEN @p_SIGN_DT IS NOT NULL AND @p_SIGN_DT <> '' then CONVERT(DATETIME, @p_SIGN_DT, 103) ELSE NULL END),
283
		[CONSTRUCT_PROGRESS] = @p_CONSTRUCT_PROGRESS,[NOTES] = @p_NOTES,[RECORD_STATUS] = '1',
284
		[MAKER_ID] = @p_MAKER_ID,[CREATE_DT] = CONVERT(DATETIME, @p_CREATE_DT, 103),[AUTH_STATUS] = 'E',
285
		[CHECKER_ID] = @p_CHECKER_ID,[APPROVE_DT] = (CASE WHEN @p_APPROVE_DT IS NOT NULL AND @p_APPROVE_DT <> '' then CONVERT(DATETIME, @p_APPROVE_DT, 103) ELSE NULL END),
286
		[CONT_TYPE]=@p_CONT_TYPE, CUST_ID = @p_CUST_ID,
287
		[IS_CLOSED] = @p_IS_CLOSED,
288
		BRANCH_ID=@p_BRANCH_ID,EXP_CONTRACT=@p_EXP_CONTRACT,DEPOSIT_AMT =@p_DEPOSIT_AMT,TYPE_PERIOD =@p_TYPE_PERIOD, DEPOSIT_NOTE = @p_DEPOSIT_NOTE,
289
		IS_SEND_APPR = @p_IS_SEND_APPR,
290
		SEND_APPR_DT = CONVERT(DATE, @p_SEND_APPR_DT, 103),
291
		[ADDRESS] = @p_ADDR
292
		
293
		WHERE  CONTRACT_ID= @p_CONTRACT_ID
294
		-- INSERT VAO LOG
295
		DECLARE @START_DATE_OLD_CONTENT NVARCHAR(100), @P_START_DT_CONTENT NVARCHAR(100),@END_DATE_EXEC_OLD_CONTENT NVARCHAR(100),@P_END_DT_CONTENT NVARCHAR(100),
296
		@TOTAL_PAYMENT_AMT_OLD DECIMAL(18,0),@TOTAL_PAYMENT_AMT_NEW DECIMAL(18,0)
297
		SET @TOTAL_PAYMENT_AMT_OLD =(SELECT SUM(AMOUNT) FROM TR_CONTRACT_PAYMENT WHERE CONTRACT_ID =@p_CONTRACT_ID)
298
		IF(@START_DATE_EXEC_OLD IS NULL OR @START_DATE_EXEC_OLD ='')
299
		BEGIN
300
			SET @START_DATE_OLD_CONTENT =N'vô thời hạn'
301
		END
302
		ELSE
303
		BEGIN
304
			SET @START_DATE_OLD_CONTENT =FORMAT (CONVERT(DATE,@START_DATE_EXEC_OLD,103), 'dd/MM/yyyy')
305
		END
306
		IF(@P_START_DT IS NULL OR @P_START_DT ='')
307
		BEGIN
308
			SET @P_START_DT_CONTENT =N'vô thời hạn'
309
		END
310
		ELSE
311
		BEGIN
312
			SET @P_START_DT_CONTENT =FORMAT (CONVERT(DATE,@P_START_DT,103), 'dd/MM/yyyy')
313
		END
314
		--- NGÀY HẾT HẠN
315
		IF(@END_DATE_EXEC_OLD IS NULL OR @END_DATE_EXEC_OLD ='')
316
		BEGIN
317
			SET @END_DATE_EXEC_OLD_CONTENT =N'vô thời hạn'
318
		END
319
		ELSE
320
		BEGIN
321
			SET @END_DATE_EXEC_OLD_CONTENT =FORMAT (CONVERT(DATE,@END_DATE_EXEC_OLD,103), 'dd/MM/yyyy')
322
		END
323
		IF(@P_END_DT IS NULL OR @P_END_DT ='')
324
		BEGIN
325
			SET @P_END_DT_CONTENT =N'vô thời hạn'
326
		END
327
		ELSE
328
		BEGIN
329
			SET @P_END_DT_CONTENT =FORMAT (CONVERT(DATE,@P_END_DT,103), 'dd/MM/yyyy')
330
		END
331
		IF @@Error <> 0 GOTO ABORT
332
		PRINT 'UPDATE MASTER SUCCESS'
333

    
334
		--insert asset detail tương đương như NỘI DUNG trong bảng contract detail
335
		Declare
336
		@CONS_TRACK_ID VARCHAR(15),
337
		@FIX_DESCRIPTION VARCHAR(200),
338
		@FINISH_DT VARCHAR(20),
339
		@STATUS  VARCHAR(1),
340
		@CD_ID VARCHAR(15),
341
		@PAY_ID VARCHAR(15),
342
		@GOODS_ID	varchar(15),
343
		@UNIT_ID	varchar(15),
344
		@QUANTITY	decimal(18),
345
		@PRICE	decimal(18),
346
		@NOTES	nvarchar(1000),
347
		@PAY_PHASE	NVARCHAR(1000),
348
		@EXPECTED_DT	VARCHAR(20),
349
		@PERCENT	decimal(18),
350
		@AMOUNT	decimal(18),
351
		@PAY_STATUS VARCHAR(1),
352
		@PAY_AMOUNT DECIMAL(18),
353
		@PAY_DT VARCHAR(20),
354
		@GD_NAME_REAL NVARCHAR(500),
355
		@RECURRING VARCHAR(5),
356
		@UNIT_NAME_REAL NVARCHAR(100),
357
		-------------------BAODNQ 23/2/2022: Thêm cột vào bảng TR_CONTRACT_DT-------------
358
		@RENT_PRICE DECIMAL(18,0),
359
		@BUILDING_ID VARCHAR(15)
360
		
361
		DELETE FROM TR_CONTRACT_DT WHERE CONTRACT_ID = @P_CONTRACT_ID
362
		FETCH NEXT FROM AssetDetail INTO @CD_ID,@GOODS_ID,@UNIT_ID,@QUANTITY,@PRICE,@NOTES,@GD_NAME_REAL,@RECURRING,@UNIT_NAME_REAL, @RENT_PRICE, @BUILDING_ID
363
		WHILE @@FETCH_STATUS = 0	
364
		BEGIN
365
			--IF(LEN(@CD_ID) = 0)
366
			--BEGIN
367
			--	EXEC SYS_CodeMasters_Gen 'TR_CONTRACT_DT', @CD_ID out
368
			--	IF @CD_ID='' OR @CD_ID IS NULL GOTO ABORT
369
			--END
370

    
371
			EXEC SYS_CodeMasters_Gen 'TR_CONTRACT_DT', @CD_ID out
372
			IF @CD_ID='' OR @CD_ID IS NULL GOTO ABORT
373
			--EXEC TR_CONTRACT_DT_Ins @P_CONTRACT_ID,@GOODS_ID,@UNIT_ID,@QUANTITY,@PRICE,@NOTES,@p_RECORD_STATUS,
374
			--@p_MAKER_ID,@p_CREATE_DT,@p_AUTH_STATUS,@p_CHECKER_ID,@p_APPROVE_DT
375
			--ELSE
376
			INSERT INTO TR_CONTRACT_DT([CD_ID],[CONTRACT_ID],[GOODS_ID],[UNIT_ID],[QUANTITY],[PRICE],[NOTES],
377
			[RECORD_STATUS],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT],[GD_NAME_REAL],RECURRING,UNIT_NAME_REAL, RENT_PRICE,BUILDING_ID)
378
			VALUES(@CD_ID ,@P_CONTRACT_ID,
379
			@GOODS_ID ,
380
			@UNIT_ID ,
381
			@QUANTITY ,
382
			@PRICE ,
383
			@NOTES ,@p_RECORD_STATUS ,@p_MAKER_ID ,CONVERT(DATETIME, @p_CREATE_DT, 103) ,@p_AUTH_STATUS ,@p_CHECKER_ID ,(CASE WHEN @p_APPROVE_DT IS NOT NULL AND @p_APPROVE_DT <> '' then CONVERT(DATETIME, @p_APPROVE_DT, 103) ELSE NULL END),@GD_NAME_REAL,@RECURRING,@UNIT_NAME_REAL, @RENT_PRICE, @BUILDING_ID)
384
		
385
			FETCH NEXT FROM AssetDetail INTO @CD_ID,@GOODS_ID,@UNIT_ID,@QUANTITY,@PRICE,@NOTES,@GD_NAME_REAL,@RECURRING,@UNIT_NAME_REAL, @RENT_PRICE, @BUILDING_ID
386
		END
387

    
388
		DELETE FROM CON_TRACK WHERE CONTRACT_ID = @P_CONTRACT_ID
389
		FETCH NEXT FROM ConTrack INTO @CONS_TRACK_ID,@FIX_DESCRIPTION,@EXPECTED_DT,@FINISH_DT,@STATUS,@NOTES
390
		WHILE @@FETCH_STATUS = 0	
391
		BEGIN
392
			--IF(LEN(@CONS_TRACK_ID) = 0)
393
			--BEGIN
394
			--	EXEC SYS_CodeMasters_Gen 'CONS_TRACK_ID', @CONS_TRACK_ID out
395
			--	IF @CONS_TRACK_ID ='' OR @CONS_TRACK_ID IS NULL GOTO ABORT
396
			--END
397
			EXEC SYS_CodeMasters_Gen 'CONS_TRACK_ID', @CONS_TRACK_ID out
398
			IF @CONS_TRACK_ID ='' OR @CONS_TRACK_ID IS NULL GOTO ABORT
399
			INSERT INTO CON_TRACK([CONS_TRACK_ID],[CONTRACT_ID],[FIX_DESCRIPTION],[EXPECTED_DT],[STATUS],[FINISH_DT],[NOTES],[CREATED_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT],[RECORD_STATUS])
400
			VALUES(@CONS_TRACK_ID ,@p_CONTRACT_ID ,@FIX_DESCRIPTION ,CONVERT(DATETIME, @EXPECTED_DT, 103) ,
401
			@STATUS ,CONVERT(DATETIME, @FINISH_DT, 103) ,@NOTES ,CONVERT(DATETIME, @p_CREATE_DT, 103) ,@p_AUTH_STATUS ,@p_CHECKER_ID ,(CASE WHEN @p_APPROVE_DT IS NOT NULL AND @p_APPROVE_DT <> '' then CONVERT(DATETIME, @p_APPROVE_DT, 103) ELSE NULL END) ,@p_RECORD_STATUS )
402
		
403
			FETCH NEXT FROM ConTrack INTO @CONS_TRACK_ID,@FIX_DESCRIPTION,@EXPECTED_DT,@FINISH_DT,@STATUS,@NOTES
404
		END
405
	--insert payment detail
406

    
407
	--UPDATE  TR_CONTRACT_PAYMENT SET PAY_ID = RIGHT WHERE CONTRACT_ID = @P_CONTRACT_ID
408
	FETCH NEXT FROM PaymentDetail INTO @PAY_ID,@PAY_PHASE,@EXPECTED_DT,@PERCENT,@AMOUNT,@PAY_STATUS,@PAY_AMOUNT,@PAY_DT,@NOTES
409

    
410
	WHILE @@FETCH_STATUS = 0
411
	BEGIN
412
		IF(LEN(ISNULL(@PAY_ID,'')) = 0 OR @PAY_ID IS NULL OR @PAY_ID = '')
413
		BEGIN
414
			EXEC SYS_CodeMasters_Gen 'TR_CONTRACT_PAYMENT', @PAY_ID out
415
			IF @PAY_ID='' OR @PAY_ID IS NULL GOTO ABORT
416
		END
417
		--IF(EXISTS(SELECT * FROM TR_CONTRACT_PAYMENT WHERE PAY_ID =@PAY_ID))
418
		--BEGIN
419
		--	UPDATE TR_CONTRACT_PAYMENT SET PAY_ID ='X' WHERE PAY_ID =@PAY_ID
420
		--END
421
		--EXEC SYS_CodeMasters_Gen 'TR_CONTRACT_PAYMENT', @PAY_ID out
422
		IF @PAY_ID='' OR @PAY_ID IS NULL GOTO ABORT
423
		--EXEC TR_CONTRACT_PAYMENT_Ins @p_CONTRACT_ID,@PAY_PHASE,@EXPECTED_DT,
424
		--@PERCENT,@AMOUNT,@NOTES,@p_RECORD_STATUS,@p_MAKER_ID,@p_CREATE_DT,@p_AUTH_STATUS,@p_CHECKER_ID,@p_APPROVE_DT
425
		--ELSE
426
		--INSERT INTO TR_CONTRACT_PAYMENT([PAY_AMOUNT],PAY_DT, [PAY_ID],[CONTRACT_ID],[PAY_PHASE],[EXPECTED_DT],[PERCENT],[AMOUNT],[PAY_STATUS],
427
		--[NOTES],[RECORD_STATUS],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT])
428
		--VALUES(@PAY_AMOUNT,(CASE WHEN @PAY_DT IS NOT NULL AND @PAY_DT <> '' then CONVERT(DATETIME, @PAY_DT, 103) ELSE NULL END),@PAY_ID ,@p_CONTRACT_ID ,@PAY_PHASE ,CONVERT(DATETIME, @EXPECTED_DT, 103) ,
429
		--@PERCENT ,@AMOUNT,@PAY_STATUS,@NOTES ,@p_RECORD_STATUS ,@p_MAKER_ID ,CONVERT(DATETIME, @p_CREATE_DT, 103),
430
		--@p_AUTH_STATUS ,@p_CHECKER_ID ,(CASE WHEN @p_APPROVE_DT IS NOT NULL AND @p_APPROVE_DT <> '' then CONVERT(DATETIME, @p_APPROVE_DT, 103) ELSE NULL END))
431

    
432
		-------------BAODNQ 15/9/2022: Fix lại theo BVB_v2_PROD-----------
433
		-------------Nếu @PAY_ID ko tồn tại trong TR_CONTRACT_PAYMENT, INSERT mới---------
434
		IF(NOT EXISTS(SELECT * FROM TR_CONTRACT_PAYMENT WHERE PAY_ID = @PAY_ID))
435
		BEGIN
436
			INSERT INTO TR_CONTRACT_PAYMENT
437
				([PAY_AMOUNT],PAY_DT, [PAY_ID],[CONTRACT_ID],[PAY_PHASE],[EXPECTED_DT],[PERCENT],[AMOUNT],[PAY_STATUS],
438
				[NOTES],[RECORD_STATUS],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT])
439
			VALUES(@PAY_AMOUNT,(CASE WHEN @PAY_DT IS NOT NULL AND @PAY_DT <> '' then CONVERT(DATETIME, @PAY_DT, 103) ELSE NULL END),@PAY_ID ,
440
					@p_CONTRACT_ID ,@PAY_PHASE ,CONVERT(DATETIME, @EXPECTED_DT, 103) , @PERCENT ,@AMOUNT,@PAY_STATUS,@NOTES ,@p_RECORD_STATUS ,
441
					@p_MAKER_ID ,CONVERT(DATETIME, @p_CREATE_DT, 103), @p_AUTH_STATUS ,@p_CHECKER_ID ,
442
					(CASE WHEN @p_APPROVE_DT IS NOT NULL AND @p_APPROVE_DT <> '' then CONVERT(DATETIME, @p_APPROVE_DT, 103) ELSE NULL END))
443
		END
444
		ELSE
445
		-------------Nếu @PAY_ID đã tồn tại trong TR_CONTRACT_PAYMENT, UPDATE---------
446
		BEGIN
447
			UPDATE TR_CONTRACT_PAYMENT SET
448
				PAY_AMOUNT = @PAY_AMOUNT,
449
				PAY_DT =(CASE WHEN @PAY_DT IS NOT NULL AND @PAY_DT <> '' then CONVERT(DATETIME, @PAY_DT, 103) ELSE NULL END),
450
				CONTRACT_ID = @p_CONTRACT_ID,
451
				PAY_PHASE = @PAY_PHASE,
452
				EXPECTED_DT = CONVERT(DATETIME, @EXPECTED_DT, 103),
453
				[PERCENT] = @PERCENT,
454
				[AMOUNT] = @AMOUNT,
455
				PAY_STATUS = @PAY_STATUS,
456
				NOTES = @NOTES,
457
				RECORD_STATUS = @p_RECORD_STATUS,
458
				MAKER_ID = @p_MAKER_ID,
459
				CREATE_DT = CONVERT(DATETIME, @p_CREATE_DT, 103),
460
				AUTH_STATUS = @p_AUTH_STATUS,
461
				CHECKER_ID = @p_CHECKER_ID,
462
				APPROVE_DT = (CASE WHEN @p_APPROVE_DT IS NOT NULL AND @p_APPROVE_DT <> '' then CONVERT(DATETIME, @p_APPROVE_DT, 103) ELSE NULL END)
463
			WHERE PAY_ID = @PAY_ID
464
		END
465

    
466
	FETCH NEXT FROM PaymentDetail INTO @PAY_ID,@PAY_PHASE,@EXPECTED_DT,@PERCENT,@AMOUNT,@PAY_STATUS,@PAY_AMOUNT,@PAY_DT,@NOTES
467
	END
468
		
469
	CLOSE ConTrack
470
	DEALLOCATE ConTrack
471
	CLOSE AssetDetail
472
	DEALLOCATE AssetDetail
473
	CLOSE PaymentDetail
474
	DEALLOCATE PaymentDetail
475
	--- VỊ TRÍ NÀY BẮT ĐẦU GHI LOG
476
	SET @TOTAL_PAYMENT_AMT_NEW =(SELECT SUM(AMOUNT) FROM TR_CONTRACT_PAYMENT WHERE CONTRACT_ID =@p_CONTRACT_ID)
477
	INSERT INTO dbo.PL_PROCESS
478
		(
479
						REQ_ID,
480
						PROCESS_ID,
481
						CHECKER_ID,
482
						APPROVE_DT,
483
						PROCESS_DESC,NOTES
484
		)
485
		VALUES
486
		(				@p_CONTRACT_ID,        -- REQ_ID - varchar(15)
487
						'UPDATE',        -- PROCESS_ID - varchar(10)
488
						@p_MAKER_ID,        -- CHECKER_ID - varchar(15)
489
						GETDATE(), -- APPROVE_DT - datetime
490
					   N'User: '+ @p_MAKER_ID +N' thực hiện chỉnh sửa hợp đồng. Thông tin chỉnh sửa bao gồm: '+
491
					   CASE WHEN ISNULL(CONVERT(DATE,@START_DATE_EXEC_OLD,103),'') <> ISNULL(CONVERT(DATE,@P_START_DT,103),'') THEN 
492
					   CHAR(10) +  N'Thông tin ngày hiệu lực hợp đồng. Điều chỉnh từ ngày: ' 
493
						+ @START_DATE_OLD_CONTENT + N' thành '+ @P_START_DT_CONTENT
494
					   ELSE  '' END
495
					  + CASE WHEN CONVERT(DATE,@END_DATE_EXEC_OLD,103) <> CONVERT(DATE,@P_END_DT,103) THEN  CHAR(10) +
496
					  + N'Thông tin ngày hết hiệu lực hợp đồng. Điều chỉnh từ ngày: ' +  @END_DATE_EXEC_OLD_CONTENT + N' thành ngày: ' + @P_END_DT_CONTENT ELSE '' END
497
					  + CASE WHEN ISNULL(@TOTAL_AMT_CONTRACT_OLD,0) <> ISNULL(@p_TOTAL_AMT,0) THEN
498
					  CHAR(10)+ N'Tổng giá trị hợp đồng điều chỉnh từ: '+ ISNULL(FORMAT(@TOTAL_AMT_OLD,'#,###'),'0') + ' VND' + N' thành: '+ ISNULL(FORMAT(@p_TOTAL_AMT,'#,###'),'0') +' VND'
499
					  ELSE '' END
500
					  + CASE WHEN ISNULL(@TOTAL_PAYMENT_AMT_OLD,0) <> ISNULL(@TOTAL_PAYMENT_AMT_NEW,0) THEN
501
					  CHAR(10)+ N'Tổng giá trị lịch thanh toán điều chỉnh từ: '+ ISNULL(FORMAT(@TOTAL_PAYMENT_AMT_OLD,'#,###'),'0') + ' VND' + N' thành: '+ ISNULL(FORMAT(@TOTAL_PAYMENT_AMT_NEW,'#,###'),'0') +' VND'
502
					  ELSE '' END
503
					  + CASE WHEN ISNULL(@p_SUP_ID,0) <> ISNULL(@SUPPLIER_ID_OLD,0) THEN
504
					  CHAR(10)+ N'Nhà cung cấp điều chỉnh từ: '+ ISNULL(@SUPPLIER_NAME_OLD,N'Chưa chọn nhà cung cấp') + ' VND' + N' thành: '+ ISNULL(@SUPPLIER_NAME,N'Chưa chọn nhà cung cấp')
505
					  ELSE '' END
506
					  ,N'Chỉnh sửa thông tin hợp đồng'
507
		)
508
	--- KẾT THÚC GHI LOG
509
	IF(@p_RECORD_STATUS ='U')
510
	BEGIN
511
		UPDATE TR_CONTRACT SET AUTH_STATUS ='U' WHERE CONTRACT_ID =@p_CONTRACT_ID
512
	END
513
	--Insert into TABLE TR_REQUEST_DOC_FILE
514

    
515
		DECLARE @tableTrREQFile TABLE(
516
			TR_REQUEST_DOC_FILE_ID	varchar(20)  ,
517
			REQ_ID varchar(20),
518
			NOTES  nvarchar(200)
519
		)
520

    
521

    
522
		Declare @fdoc INT
523
		Exec sp_xml_preparedocument @fdoc Output,@p_ListTrREQFile
524

    
525
		INSERT INTO @tableTrREQFile
526
		SELECT *
527
		FROM OPENXML(@fDoc,'/Root/ListTrREQ',2)
528
		WITH 
529
		(
530
			TR_REQUEST_DOC_FILE_ID	varchar(20)  ,
531
			REQ_ID varchar(20),
532
			NOTES  nvarchar(200)
533
		)
534

    
535
		--delete TR_REQUEST_DOC_FILE where TR_REQUEST_DOC_FILE_ID not in (select TR_REQUEST_DOC_FILE_ID from @tableTrREQFile) and REQ_ID = @p_CONTRACT_ID
536
		------------BAODNQ 11/11/2022 : DELETE TR_REQUEST_DOC_FILE----------
537
		DELETE FROM TR_REQUEST_DOC_FILE WHERE REQ_ID = @p_CONTRACT_ID
538
		DECLARE ListTrREQFile  CURSOR FOR
539
		SELECT * FROM @tableTrREQFile
540
		OPEN ListTrREQFile
541

    
542
		Declare 
543
		@TR_REQUEST_DOC_FILE_ID	varchar(20)  ,
544
		@IS_VIEW	bit,
545
		@REQ_ID varchar(20),
546
		@_NOTES nvarchar(200)
547

    
548
		FETCH NEXT FROM ListTrREQFile INTO @TR_REQUEST_DOC_FILE_ID,@REQ_ID,@_NOTES
549
		WHILE @@FETCH_STATUS = 0	
550
		BEGIN
551
			DECLARE @l_REQFile_ID VARCHAR(15)
552
			EXEC SYS_CodeMasters_Gen 'TR_REQUEST_DOC_FILE', @l_REQFile_ID out
553
			--select @l_REQFile_ID
554
			--select * from TR_REQUEST_DOC_FILE where [TR_REQUEST_DOC_FILE_ID]= 'TRC000000529764'
555
			IF @l_REQFile_ID='' OR @l_REQFile_ID IS NULL GOTO ABORT
556
			INSERT INTO @TEMP([REF_ID],[TYPE]) VALUES (@l_REQFile_ID, 'TR_CONTRACT')
557
			IF(select count(*) from TR_REQUEST_DOC_FILE where TR_REQUEST_DOC_FILE_ID = @TR_REQUEST_DOC_FILE_ID ) > 0
558
			begin
559
				update TR_REQUEST_DOC_FILE set IS_VIEW=isnull(@IS_VIEW,0),REQ_ID = @p_CONTRACT_ID,NOTES=@_NOTES where TR_REQUEST_DOC_FILE_ID = @TR_REQUEST_DOC_FILE_ID 
560
			end
561
			else
562
			begin
563
				INSERT INTO dbo.TR_REQUEST_DOC_FILE
564
				(
565
					 [TR_REQUEST_DOC_FILE_ID]
566
					,[REQ_ID]
567
					,[NOTES]
568
				)	
569
				VALUES
570
				(   
571
					@l_REQFile_ID
572
					,@p_CONTRACT_ID,
573
					@_NOTES
574
				)
575
			end
576
			
577
			FETCH NEXT FROM ListTrREQFile INTO @TR_REQUEST_DOC_FILE_ID,@REQ_ID,@_NOTES
578
		END
579
		CLOSE ListTrREQFile
580
		DEALLOCATE ListTrREQFile
581
		IF @@Error <> 0 GOTO ABORT
582

    
583
		if(select count(*) from @TEMP) = 0
584
		begin
585
			INSERT INTO @TEMP([REF_ID],[TYPE]) VALUES (@l_REQFile_ID, 'TR_CONTRACT')
586
		end
587
COMMIT TRANSACTION
588
IF(@p_RECORD_STATUS ='U')
589
BEGIN
590
-- INSERT VAO LOG
591
	INSERT INTO dbo.PL_PROCESS
592
	(
593
						REQ_ID,
594
						PROCESS_ID,
595
						CHECKER_ID,
596
						APPROVE_DT,
597
						PROCESS_DESC,NOTES
598
					)
599
					VALUES
600
					(   @p_CONTRACT_ID,        -- REQ_ID - varchar(15)
601
						'SEND',        -- PROCESS_ID - varchar(10)
602
						@p_MAKER_ID,        -- CHECKER_ID - varchar(15)
603
						GETDATE(), -- APPROVE_DT - datetime
604
					   N'Nhân viên gửi phê duyệt phiếu thành công' ,N'Gửi phê duyệt')
605
	--IF(@p_CONT_TYPE ='DK')
606
	--BEGIN
607
	--	UPDATE TR_CONTRACT SET AUTH_STATUS ='A' WHERE CONTRACT_ID =@p_CONTRACT_ID
608
	--END
609
	SELECT '2' as Result, @P_CONTRACT_ID  CONTRACT_ID, N'Hợp đồng có ID: '+ @P_CONTRACT_ID +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
610
	RETURN '2'
611
	--- 
612
	--IF(@p_CONT_TYPE ='DK' AND CONVERT(DATE, GETDATE(),103) <='2020-08-30')
613
	
614
	
615
END
616
ELSE
617
BEGIN
618
	SELECT '0' as Result, @P_CONTRACT_ID  CONTRACT_ID, N'Hợp đồng có ID: '+ @P_CONTRACT_ID +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,[REF_ID], [TYPE]  from @TEMP
619
	RETURN '0'
620
END
621
ABORT:
622
BEGIN
623
		
624
		CLOSE ConTrack
625
		DEALLOCATE ConTrack
626
		CLOSE AssetDetail
627
		DEALLOCATE AssetDetail
628
		CLOSE PaymentDetail
629
		DEALLOCATE PaymentDetail
630
		ROLLBACK TRANSACTION
631
		SELECT '-1' AS RESULT, ''  CONTRACT_ID,'' ErrorDesc
632
		RETURN '-1'
633
End