Project

General

Profile

dbo.TR_CONTRACT_Upd.txt

Luc Tran Van, 05/09/2023 02:16 PM

 
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

    
188
	Exec sp_xml_preparedocument @hdoc Output,@P_CON_TRACK
189
	DECLARE ConTrack CURSOR FOR
190
	SELECT *
191
	FROM OPENXML(@hDoc,'/Root/ConTrack',2)
192
	WITH 
193
	(
194
		CONS_TRACK_ID	VARCHAR(15),
195
		FIX_DESCRIPTION	varchar(200),
196
		EXPECTED_DT	VARCHAR(20),
197
		FINISH_DT	VARCHAR(20),
198
		[STATUS]	VARCHAR(1),
199
		NOTES	nvarchar(1000)
200
	)
201
	OPEN ConTrack
202

    
203
	PRINT 'PASS KHOI TAO'
204
BEGIN TRANSACTION
205
			--- 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
206
		IF(EXISTS(SELECT * FROM TR_PO_MASTER WHERE REQ_DOC_ID=@p_REQ_DOC_ID AND SUP_ID =@p_SUP_ID))
207
		BEGIN
208
				ROLLBACK TRANSACTION
209
				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ố: ' +
210
							(SELECT TOP 1 ISNULL(PO_CODE,'') FROM TR_PO_MASTER WHERE REQ_DOC_ID=@p_REQ_DOC_ID AND SUP_ID =@p_SUP_ID)+
211
								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 
212
				RETURN '-1'
213
		END
214
		--- END 03.04.2023
215
		---------------BAODNQ 12/12/2022 : HOT_FIX TẠM THỜI-------------------
216
		--------------NẾU KO TRUYỀN SUP_ID THÌ TỪ SUP_CODE TÌM KIẾM RA SUP_ID---------
217
		IF((@p_SUP_ID IS NULL OR @p_SUP_ID = '') AND @p_SUP_CODE IS NOT NULL AND @p_SUP_CODE <> '')
218
		BEGIN
219
			SET @p_SUP_ID = (SELECT TOP 1 SUP_ID FROM CM_SUPPLIER WHERE SUP_CODE = @p_SUP_CODE)
220
		END
221
		--------------ENDBAODNQ 12/12/2022----------------------------
222

    
223
		IF(@p_CONTRACT_NAME ='' OR @p_CONTRACT_NAME IS  NULL)
224
		BEGIN
225
			ROLLBACK TRANSACTION
226
				SELECT '-1' Result, @p_CONTRACT_ID AS PO_ID, N'Tên hợp đồng không được để trống' AS ErrorDesc 
227
				RETURN '-1'
228
		END
229
		--insert master
230
		IF @p_DELIVERY_DT = ''  
231
			SET @p_DELIVERY_DT = NULL 
232
		IF @p_EXP_DT1 = ''
233
			SET @p_EXP_DT1 = NULL
234
		IF @p_EXP_DT2 = ''
235
			SET @p_EXP_DT2 = NULL
236
		IF @p_SIGN_DT = ''
237
			SET @p_SIGN_DT = NULL
238
		IF @p_CREATE_DT = ''
239
			SET @p_CREATE_DT = NULL
240
		IF @p_APPROVE_DT = ''
241
			SET @p_APPROVE_DT = NULL
242
		IF @P_START_DT = ''
243
			SET @P_START_DT = NULL
244
		IF @P_END_DT = ''
245
			SET @P_END_DT = NULL
246
		DECLARE @EXP_DT_OLD DATEtime, @TOTAL_AMT_OLD DECIMAL(18,0), @FROM_EXP_DATE_OLD DATEtime
247
		SET @FROM_EXP_DATE_OLD = (SELECT START_DT FROM TR_CONTRACT WHERE CONTRACT_ID =@p_CONTRACT_ID)
248
		SET @EXP_DT_OLD = (SELECT END_DT FROM TR_CONTRACT WHERE CONTRACT_ID =@p_CONTRACT_ID)
249
		SET @TOTAL_AMT_OLD = (SELECT TOTAL_AMT FROM TR_CONTRACT WHERE CONTRACT_ID =@p_CONTRACT_ID)
250
		
251
		IF(EXISTS (SELECT * FROM TR_CONTRACT WHERE CONTRACT_ID = @p_CONTRACT_ID AND AUTH_STATUS = 'A'))
252
		BEGIN
253
			SET @p_CHECKER_ID = NULL
254
			SET @p_APPROVE_DT = NULL
255
			SET @p_SEND_APPR_DT = NULL
256
		END
257
		
258
		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), 
259
		[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,
260
		[CONTRACT_NAME] = @p_CONTRACT_NAME, [CONTRACT_TYPE] = @p_CONTRACT_TYPE ,
261
		[BID_ID] = @p_BID_ID,[SUP_ID] = @p_SUP_ID,[TOTAL_AMT] = @p_TOTAL_AMT,
262
		[DELIVERY_DT] = (CASE WHEN @p_DELIVERY_DT IS NOT NULL AND @p_DELIVERY_DT <> '' then CONVERT(DATETIME, @p_DELIVERY_DT, 103) ELSE NULL END),
263
		[FORM1] = @p_FORM1,[VOUCHER_ID1] = @p_VOUCHER_ID1,[BANK1] = @p_BANK1,
264
		[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),
265
		[RATE1] = @p_RATE1,[FORM2] = @p_FORM2,[VOUCHER_ID2] = @p_VOUCHER_ID2,
266
		[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),
267
		[RATE2] = @p_RATE2,[REQ_DOC_ID] = @p_REQ_DOC_ID,[REQ_DOC_CONTENT] = @p_REQ_DOC_CONTENT,
268
		[APPROVE_VALUE] = @p_APPROVE_VALUE,
269
		[SIGN_DT] =  (CASE WHEN @p_SIGN_DT IS NOT NULL AND @p_SIGN_DT <> '' then CONVERT(DATETIME, @p_SIGN_DT, 103) ELSE NULL END),
270
		[CONSTRUCT_PROGRESS] = @p_CONSTRUCT_PROGRESS,[NOTES] = @p_NOTES,[RECORD_STATUS] = '1',
271
		[MAKER_ID] = @p_MAKER_ID,[CREATE_DT] = CONVERT(DATETIME, @p_CREATE_DT, 103),[AUTH_STATUS] = 'E',
272
		[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),
273
		[CONT_TYPE]=@p_CONT_TYPE, CUST_ID = @p_CUST_ID,
274
		[IS_CLOSED] = @p_IS_CLOSED,
275
		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,
276
		IS_SEND_APPR = @p_IS_SEND_APPR,
277
		SEND_APPR_DT = CONVERT(DATE, @p_SEND_APPR_DT, 103),
278
		[ADDRESS] = @p_ADDR
279
		
280
		WHERE  CONTRACT_ID= @p_CONTRACT_ID
281
		-- INSERT VAO LOG
282
		INSERT INTO dbo.PL_PROCESS
283
		(
284
						REQ_ID,
285
						PROCESS_ID,
286
						CHECKER_ID,
287
						APPROVE_DT,
288
						PROCESS_DESC,NOTES
289
		)
290
		VALUES
291
		(				@p_CONTRACT_ID,        -- REQ_ID - varchar(15)
292
						'UPDATE',        -- PROCESS_ID - varchar(10)
293
						@p_MAKER_ID,        -- CHECKER_ID - varchar(15)
294
						GETDATE(), -- APPROVE_DT - datetime
295
					   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: '+
296
					   CASE WHEN CONVERT(DATE,@START_DATE_EXEC_OLD,103) <> CONVERT(DATE,@P_START_DT,103) THEN  CHAR(10) +  N'Thông tin ngày hiệu lực hợp đồng. Điều chỉnh từ ngày : ' 
297
						+  ISNULL((SELECT FORMAT (@START_DATE_EXEC_OLD, 'dd/MM/yyyy ')),N'vô thời hạn ') + N' thành ngày : '+ ISNULL(@P_START_DT,N'vô thời hạn')
298
						ELSE '' END
299
					  + CASE WHEN CONVERT(DATE,@END_DATE_EXEC_OLD,103) <> CONVERT(DATE,@P_END_DT,103) THEN  CHAR(10) +
300
					  + N'Thông tin ngày hết hiệu lực hợp đồng. Điều chỉnh từ ngày : ' +  ISNULL((SELECT FORMAT (@END_DATE_EXEC_OLD, 'dd/MM/yyyy ')),N'vô thời hạn ') + N' thành ngày : '
301
					  + ISNULL(@P_END_DT,N'vô thời hạn') ELSE '' END
302
					  + CASE WHEN ISNULL(@TOTAL_AMT_CONTRACT_OLD,0) <> ISNULL(@p_TOTAL_AMT,0) THEN
303
					  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'
304
					  ELSE '' END
305
					  + CASE WHEN ISNULL(@p_SUP_ID,0) <> ISNULL(@SUPPLIER_ID_OLD,0) THEN
306
					  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')
307
					  ELSE '' END
308
					  ,N'Chỉnh sửa thông tin hợp đồng'
309
		)
310
		IF @@Error <> 0 GOTO ABORT
311
		PRINT 'UPDATE MASTER SUCCESS'
312

    
313
		--insert asset detail tương đương như NỘI DUNG trong bảng contract detail
314
		Declare
315
		@CONS_TRACK_ID VARCHAR(15),
316
		@FIX_DESCRIPTION VARCHAR(200),
317
		@FINISH_DT VARCHAR(20),
318
		@STATUS  VARCHAR(1),
319
		@CD_ID VARCHAR(15),
320
		@PAY_ID VARCHAR(15),
321
		@GOODS_ID	varchar(15),
322
		@UNIT_ID	varchar(15),
323
		@QUANTITY	decimal(18),
324
		@PRICE	decimal(18),
325
		@NOTES	nvarchar(1000),
326
		@PAY_PHASE	NVARCHAR(1000),
327
		@EXPECTED_DT	VARCHAR(20),
328
		@PERCENT	decimal(18),
329
		@AMOUNT	decimal(18),
330
		@PAY_STATUS VARCHAR(1),
331
		@PAY_AMOUNT DECIMAL(18),
332
		@PAY_DT VARCHAR(20),
333
		@GD_NAME_REAL NVARCHAR(500),
334
		@RECURRING VARCHAR(5),
335
		@UNIT_NAME_REAL NVARCHAR(100),
336
		-------------------BAODNQ 23/2/2022: Thêm cột vào bảng TR_CONTRACT_DT-------------
337
		@RENT_PRICE DECIMAL(18,0),
338
		@BUILDING_ID VARCHAR(15)
339
		
340
		DELETE FROM TR_CONTRACT_DT WHERE CONTRACT_ID = @P_CONTRACT_ID
341
		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
342
		WHILE @@FETCH_STATUS = 0	
343
		BEGIN
344
			--IF(LEN(@CD_ID) = 0)
345
			--BEGIN
346
			--	EXEC SYS_CodeMasters_Gen 'TR_CONTRACT_DT', @CD_ID out
347
			--	IF @CD_ID='' OR @CD_ID IS NULL GOTO ABORT
348
			--END
349

    
350
			EXEC SYS_CodeMasters_Gen 'TR_CONTRACT_DT', @CD_ID out
351
			IF @CD_ID='' OR @CD_ID IS NULL GOTO ABORT
352
			--EXEC TR_CONTRACT_DT_Ins @P_CONTRACT_ID,@GOODS_ID,@UNIT_ID,@QUANTITY,@PRICE,@NOTES,@p_RECORD_STATUS,
353
			--@p_MAKER_ID,@p_CREATE_DT,@p_AUTH_STATUS,@p_CHECKER_ID,@p_APPROVE_DT
354
			--ELSE
355
			INSERT INTO TR_CONTRACT_DT([CD_ID],[CONTRACT_ID],[GOODS_ID],[UNIT_ID],[QUANTITY],[PRICE],[NOTES],
356
			[RECORD_STATUS],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT],[GD_NAME_REAL],RECURRING,UNIT_NAME_REAL, RENT_PRICE,BUILDING_ID)
357
			VALUES(@CD_ID ,@P_CONTRACT_ID,
358
			@GOODS_ID ,
359
			@UNIT_ID ,
360
			@QUANTITY ,
361
			@PRICE ,
362
			@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)
363
		
364
			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
365
		END
366

    
367
		DELETE FROM CON_TRACK WHERE CONTRACT_ID = @P_CONTRACT_ID
368
		FETCH NEXT FROM ConTrack INTO @CONS_TRACK_ID,@FIX_DESCRIPTION,@EXPECTED_DT,@FINISH_DT,@STATUS,@NOTES
369
		WHILE @@FETCH_STATUS = 0	
370
		BEGIN
371
			--IF(LEN(@CONS_TRACK_ID) = 0)
372
			--BEGIN
373
			--	EXEC SYS_CodeMasters_Gen 'CONS_TRACK_ID', @CONS_TRACK_ID out
374
			--	IF @CONS_TRACK_ID ='' OR @CONS_TRACK_ID IS NULL GOTO ABORT
375
			--END
376
			EXEC SYS_CodeMasters_Gen 'CONS_TRACK_ID', @CONS_TRACK_ID out
377
			IF @CONS_TRACK_ID ='' OR @CONS_TRACK_ID IS NULL GOTO ABORT
378
			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])
379
			VALUES(@CONS_TRACK_ID ,@p_CONTRACT_ID ,@FIX_DESCRIPTION ,CONVERT(DATETIME, @EXPECTED_DT, 103) ,
380
			@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 )
381
		
382
			FETCH NEXT FROM ConTrack INTO @CONS_TRACK_ID,@FIX_DESCRIPTION,@EXPECTED_DT,@FINISH_DT,@STATUS,@NOTES
383
		END
384
	--insert payment detail
385

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

    
389
	WHILE @@FETCH_STATUS = 0
390
	BEGIN
391
		IF(LEN(ISNULL(@PAY_ID,'')) = 0 OR @PAY_ID IS NULL OR @PAY_ID = '')
392
		BEGIN
393
			EXEC SYS_CodeMasters_Gen 'TR_CONTRACT_PAYMENT', @PAY_ID out
394
			IF @PAY_ID='' OR @PAY_ID IS NULL GOTO ABORT
395
		END
396
		--IF(EXISTS(SELECT * FROM TR_CONTRACT_PAYMENT WHERE PAY_ID =@PAY_ID))
397
		--BEGIN
398
		--	UPDATE TR_CONTRACT_PAYMENT SET PAY_ID ='X' WHERE PAY_ID =@PAY_ID
399
		--END
400
		--EXEC SYS_CodeMasters_Gen 'TR_CONTRACT_PAYMENT', @PAY_ID out
401
		IF @PAY_ID='' OR @PAY_ID IS NULL GOTO ABORT
402
		--EXEC TR_CONTRACT_PAYMENT_Ins @p_CONTRACT_ID,@PAY_PHASE,@EXPECTED_DT,
403
		--@PERCENT,@AMOUNT,@NOTES,@p_RECORD_STATUS,@p_MAKER_ID,@p_CREATE_DT,@p_AUTH_STATUS,@p_CHECKER_ID,@p_APPROVE_DT
404
		--ELSE
405
		--INSERT INTO TR_CONTRACT_PAYMENT([PAY_AMOUNT],PAY_DT, [PAY_ID],[CONTRACT_ID],[PAY_PHASE],[EXPECTED_DT],[PERCENT],[AMOUNT],[PAY_STATUS],
406
		--[NOTES],[RECORD_STATUS],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT])
407
		--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) ,
408
		--@PERCENT ,@AMOUNT,@PAY_STATUS,@NOTES ,@p_RECORD_STATUS ,@p_MAKER_ID ,CONVERT(DATETIME, @p_CREATE_DT, 103),
409
		--@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))
410

    
411
		-------------BAODNQ 15/9/2022: Fix lại theo BVB_v2_PROD-----------
412
		-------------Nếu @PAY_ID ko tồn tại trong TR_CONTRACT_PAYMENT, INSERT mới---------
413
		IF(NOT EXISTS(SELECT * FROM TR_CONTRACT_PAYMENT WHERE PAY_ID = @PAY_ID))
414
		BEGIN
415
			INSERT INTO TR_CONTRACT_PAYMENT
416
				([PAY_AMOUNT],PAY_DT, [PAY_ID],[CONTRACT_ID],[PAY_PHASE],[EXPECTED_DT],[PERCENT],[AMOUNT],[PAY_STATUS],
417
				[NOTES],[RECORD_STATUS],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT])
418
			VALUES(@PAY_AMOUNT,(CASE WHEN @PAY_DT IS NOT NULL AND @PAY_DT <> '' then CONVERT(DATETIME, @PAY_DT, 103) ELSE NULL END),@PAY_ID ,
419
					@p_CONTRACT_ID ,@PAY_PHASE ,CONVERT(DATETIME, @EXPECTED_DT, 103) , @PERCENT ,@AMOUNT,@PAY_STATUS,@NOTES ,@p_RECORD_STATUS ,
420
					@p_MAKER_ID ,CONVERT(DATETIME, @p_CREATE_DT, 103), @p_AUTH_STATUS ,@p_CHECKER_ID ,
421
					(CASE WHEN @p_APPROVE_DT IS NOT NULL AND @p_APPROVE_DT <> '' then CONVERT(DATETIME, @p_APPROVE_DT, 103) ELSE NULL END))
422
		END
423
		ELSE
424
		-------------Nếu @PAY_ID đã tồn tại trong TR_CONTRACT_PAYMENT, UPDATE---------
425
		BEGIN
426
			UPDATE TR_CONTRACT_PAYMENT SET
427
				PAY_AMOUNT = @PAY_AMOUNT,
428
				PAY_DT =(CASE WHEN @PAY_DT IS NOT NULL AND @PAY_DT <> '' then CONVERT(DATETIME, @PAY_DT, 103) ELSE NULL END),
429
				CONTRACT_ID = @p_CONTRACT_ID,
430
				PAY_PHASE = @PAY_PHASE,
431
				EXPECTED_DT = CONVERT(DATETIME, @EXPECTED_DT, 103),
432
				[PERCENT] = @PERCENT,
433
				[AMOUNT] = @AMOUNT,
434
				PAY_STATUS = @PAY_STATUS,
435
				NOTES = @NOTES,
436
				RECORD_STATUS = @p_RECORD_STATUS,
437
				MAKER_ID = @p_MAKER_ID,
438
				CREATE_DT = CONVERT(DATETIME, @p_CREATE_DT, 103),
439
				AUTH_STATUS = @p_AUTH_STATUS,
440
				CHECKER_ID = @p_CHECKER_ID,
441
				APPROVE_DT = (CASE WHEN @p_APPROVE_DT IS NOT NULL AND @p_APPROVE_DT <> '' then CONVERT(DATETIME, @p_APPROVE_DT, 103) ELSE NULL END)
442
			WHERE PAY_ID = @PAY_ID
443
		END
444

    
445
	FETCH NEXT FROM PaymentDetail INTO @PAY_ID,@PAY_PHASE,@EXPECTED_DT,@PERCENT,@AMOUNT,@PAY_STATUS,@PAY_AMOUNT,@PAY_DT,@NOTES
446
	END
447
		
448
	CLOSE ConTrack
449
	DEALLOCATE ConTrack
450
	CLOSE AssetDetail
451
	DEALLOCATE AssetDetail
452
	CLOSE PaymentDetail
453
	DEALLOCATE PaymentDetail
454
	IF(@p_RECORD_STATUS ='U')
455
	BEGIN
456
		UPDATE TR_CONTRACT SET AUTH_STATUS ='U' WHERE CONTRACT_ID =@p_CONTRACT_ID
457
	END
458
	--Insert into TABLE TR_REQUEST_DOC_FILE
459

    
460
		DECLARE @tableTrREQFile TABLE(
461
			TR_REQUEST_DOC_FILE_ID	varchar(20)  ,
462
			REQ_ID varchar(20),
463
			NOTES  nvarchar(200)
464
		)
465

    
466

    
467
		Declare @fdoc INT
468
		Exec sp_xml_preparedocument @fdoc Output,@p_ListTrREQFile
469

    
470
		INSERT INTO @tableTrREQFile
471
		SELECT *
472
		FROM OPENXML(@fDoc,'/Root/ListTrREQ',2)
473
		WITH 
474
		(
475
			TR_REQUEST_DOC_FILE_ID	varchar(20)  ,
476
			REQ_ID varchar(20),
477
			NOTES  nvarchar(200)
478
		)
479

    
480
		--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
481
		------------BAODNQ 11/11/2022 : DELETE TR_REQUEST_DOC_FILE----------
482
		DELETE FROM TR_REQUEST_DOC_FILE WHERE REQ_ID = @p_CONTRACT_ID
483
		DECLARE ListTrREQFile  CURSOR FOR
484
		SELECT * FROM @tableTrREQFile
485
		OPEN ListTrREQFile
486

    
487
		Declare 
488
		@TR_REQUEST_DOC_FILE_ID	varchar(20)  ,
489
		@IS_VIEW	bit,
490
		@REQ_ID varchar(20),
491
		@_NOTES nvarchar(200)
492

    
493
		FETCH NEXT FROM ListTrREQFile INTO @TR_REQUEST_DOC_FILE_ID,@REQ_ID,@_NOTES
494
		WHILE @@FETCH_STATUS = 0	
495
		BEGIN
496
			DECLARE @l_REQFile_ID VARCHAR(15)
497
			EXEC SYS_CodeMasters_Gen 'TR_REQUEST_DOC_FILE', @l_REQFile_ID out
498
			--select @l_REQFile_ID
499
			--select * from TR_REQUEST_DOC_FILE where [TR_REQUEST_DOC_FILE_ID]= 'TRC000000529764'
500
			IF @l_REQFile_ID='' OR @l_REQFile_ID IS NULL GOTO ABORT
501
			INSERT INTO @TEMP([REF_ID],[TYPE]) VALUES (@l_REQFile_ID, 'TR_CONTRACT')
502
			IF(select count(*) from TR_REQUEST_DOC_FILE where TR_REQUEST_DOC_FILE_ID = @TR_REQUEST_DOC_FILE_ID ) > 0
503
			begin
504
				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 
505
			end
506
			else
507
			begin
508
				INSERT INTO dbo.TR_REQUEST_DOC_FILE
509
				(
510
					 [TR_REQUEST_DOC_FILE_ID]
511
					,[REQ_ID]
512
					,[NOTES]
513
				)	
514
				VALUES
515
				(   
516
					@l_REQFile_ID
517
					,@p_CONTRACT_ID,
518
					@_NOTES
519
				)
520
			end
521
			
522
			FETCH NEXT FROM ListTrREQFile INTO @TR_REQUEST_DOC_FILE_ID,@REQ_ID,@_NOTES
523
		END
524
		CLOSE ListTrREQFile
525
		DEALLOCATE ListTrREQFile
526
		IF @@Error <> 0 GOTO ABORT
527

    
528
		if(select count(*) from @TEMP) = 0
529
		begin
530
			INSERT INTO @TEMP([REF_ID],[TYPE]) VALUES (@l_REQFile_ID, 'TR_CONTRACT')
531
		end
532
COMMIT TRANSACTION
533
IF(@p_RECORD_STATUS ='U')
534
BEGIN
535
-- INSERT VAO LOG
536
	INSERT INTO dbo.PL_PROCESS
537
	(
538
						REQ_ID,
539
						PROCESS_ID,
540
						CHECKER_ID,
541
						APPROVE_DT,
542
						PROCESS_DESC,NOTES
543
					)
544
					VALUES
545
					(   @p_CONTRACT_ID,        -- REQ_ID - varchar(15)
546
						'SEND',        -- PROCESS_ID - varchar(10)
547
						@p_MAKER_ID,        -- CHECKER_ID - varchar(15)
548
						GETDATE(), -- APPROVE_DT - datetime
549
					   N'Nhân viên gửi phê duyệt phiếu thành công' ,N'Gửi phê duyệt')
550
	--IF(@p_CONT_TYPE ='DK')
551
	--BEGIN
552
	--	UPDATE TR_CONTRACT SET AUTH_STATUS ='A' WHERE CONTRACT_ID =@p_CONTRACT_ID
553
	--END
554
	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
555
	RETURN '2'
556
	--- 
557
	--IF(@p_CONT_TYPE ='DK' AND CONVERT(DATE, GETDATE(),103) <='2020-08-30')
558
	
559
	
560
END
561
ELSE
562
BEGIN
563
	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
564
	RETURN '0'
565
END
566
ABORT:
567
BEGIN
568
		
569
		CLOSE ConTrack
570
		DEALLOCATE ConTrack
571
		CLOSE AssetDetail
572
		DEALLOCATE AssetDetail
573
		CLOSE PaymentDetail
574
		DEALLOCATE PaymentDetail
575
		ROLLBACK TRANSACTION
576
		SELECT '-1' AS RESULT, ''  CONTRACT_ID,'' ErrorDesc
577
		RETURN '-1'
578
End