Project

General

Profile

tr_payment_upd.txt

Luc Tran Van, 02/23/2023 03:47 PM

 
1

    
2

    
3
ALTER PROCEDURE [dbo].[TR_REQ_PAYMENT_Upd]
4
@p_REQ_PAY_ID	varchar(15)= NULL,
5
@p_REQ_PAY_CODE	varchar(50)	= NULL,
6
@p_REQ_DT VARCHAR(20)= NULL,
7
@p_BRANCH_ID	varchar(15)	= NULL,
8
@p_DEP_ID	varchar(15)	= NULL,
9
@p_REQ_REASON	nvarchar(MAX)	= NULL,
10
@p_REQ_TYPE	varchar(15)	= NULL,
11
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
12
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
13
@p_REF_ID	varchar(15)	= NULL,
14
@p_RECEIVER_PO	nvarchar(250)	= NULL,
15
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
16
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
17
@p_REQ_AMT	decimal(18, 2)	= NULL,
18
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
19
@p_MAKER_ID	varchar(15)	= NULL,
20
@p_CREATE_DT	varchar(25)	= NULL,
21
@p_EDITOR_ID	varchar(15)	= NULL,
22
@p_AUTH_STATUS	varchar(1)	= NULL,
23
@p_CHECKER_ID	varchar(15)	= NULL,
24
@p_APPROVE_DT	varchar(25)	= NULL,
25
@p_CREATE_DT_KT	varchar(25)	= NULL,
26
@p_MAKER_ID_KT	varchar(15)	= NULL,
27
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
28
@p_CHECKER_ID_KT	varchar(1)	= NULL,
29
@p_APPROVE_DT_KT  varchar(25)= null,
30
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
31
@p_BRANCH_CREATE	varchar(15)	= NULL,
32
@p_NOTES	varchar(15)	= NULL,
33
@p_RECORD_STATUS	varchar(1)	= NULL,
34
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
35
@p_TRANSFER_DT	varchar(25)	= NULL,
36
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
37
@p_PROCESS	varchar(15)	= NULL,
38
@p_PAY_PHASE NVARCHAR(255) = NULL,
39
@p_RATE	DECIMAL(18,2) = 0,
40
@p_IS_PERIOD VARCHAR(5) = NULL,
41
@p_AMT_PAY decimal(18, 0) = NULL,
42
@p_XMP_TEMP XML = NULL,
43
@p_XMP_TEMP_2 XML = NULL,
44
@p_XMP_TEMP_METHOD XML = NULL,
45
@p_XMP_TEMP_BUDGET XML = NULL,
46
@p_XMP_TEMP_SERVICE XML = NULL,
47
@p_XMP_TEMP_ATTACH XML = NULL,
48
@p_XMP_TEMP_INVOICE XML = NULL,
49
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
50
@p_XMP_TEMP_PO XML = NULL,
51
@p_XMP_TEMP_SCHEDULE XML = NULL,
52
@p_XMP_TEMP_PERIOD XML = NULL,
53
@p_XMP_ADVANCE_DT XML = NULL,
54
--doanptt 15/02/2022
55
@p_XMP_TEMP_PAY_JOB XML = NULL,
56
@p_XMP_TEMP_PAY_JOB_DT XML = NULL,
57
--doanptt 17/02/2022
58
@p_XMP_TEMP_PAY_DRIVE XML = NULL,
59
@p_XMP_TEMP_PAY_DRIVE_DT XML = NULL
60

    
61
AS
62
-- BEGIN VALIDATE UPDATE
63
	IF(@p_TYPE_FUNCTION <> 'SEND')
64
	BEGIN
65
		IF(NOT EXISTS(SELECT * FROM TR_REQ_PAYMENT where MAKER_ID = @p_MAKER_ID ))
66
		BEGIN
67
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Bạn không được phép cập nhật phiếu đề nghị thanh toán này. Chỉ người tạo phiếu mới được cập nhật phiếu' ErrorDesc
68
			RETURN '-1'
69
		END
70
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS ='U'))
71
		BEGIN
72
			SELECT '-1' Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đã được gửi phê duyệt thành công trước đó. Bạn không được quyền chỉnh sửa' ErrorDesc
73
			RETURN '-1'
74
		END
75
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND  PROCESS IS NOT NULL AND PROCESS <>''))
76
		BEGIN
77
			SELECT '-1' Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đã được kí xác nhận từ các cấp. Bạn không được quyền chỉnh sửa' ErrorDesc
78
			RETURN '-1'
79
		END
80
		IF (@p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE ='')
81
		BEGIN
82
			SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu không được phép để trống' ErrorDesc
83
			RETURN '-1'
84
		END
85
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS <> 'E' AND AUTH_STATUS <> 'R' AND ISNULL(AUTH_STATUS, '') <> ''))
86
		BEGIN
87
			SELECT '-1' Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đã được kí xác nhận từ các cấp. Bạn không được quyền chỉnh sửa' ErrorDesc
88
			RETURN '-1'
89
		END
90
	END
91
	IF(@p_TYPE_FUNCTION = 'SEND')
92
	BEGIN
93
		IF(NOT EXISTS(SELECT * FROM TR_REQ_PAYMENT where MAKER_ID = @p_MAKER_ID ))
94
		BEGIN
95
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Bạn không được phép cập nhật phiếu đề nghị tạm ứng này. Chỉ người tạo phiếu mới được cập nhật phiếu' ErrorDesc
96
			RETURN '-1'
97
		END
98
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS ='U'))
99
		BEGIN
100
			SELECT '-1' Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đã được gửi phê duyệt thành công trước đó. Bạn không được quyền chỉnh sửa' ErrorDesc
101
			RETURN '-1'
102
		END
103
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS = 'A'))
104
		BEGIN
105
			SELECT '-1' Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đã được phê duyệt. Bạn không được quyền chỉnh sửa' ErrorDesc
106
			RETURN '-1'
107
		END
108
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'A'))
109
		BEGIN
110
			SELECT '-1' Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đã được kiểm soát viên phê duyệt. Bạn không được quyền chỉnh sửa' ErrorDesc
111
			RETURN '-1'
112
		END
113
		IF (ISNULL(@p_REQ_PAY_CODE, '')='' OR ISNULL(@p_REQ_TYPE, '')='' OR ISNULL(@p_MAKER_ID, '')='' OR ISNULL(@p_BRANCH_ID, '')='' OR ISNULL(@p_DEP_ID, '')='' OR ISNULL(@p_REQ_REASON, '')='')
114
		BEGIN
115
			SELECT '-1' Result, '' REQ_PAY_ID, N'Các trường dữ liệu không được phép để trống: mã số phiếu, loại thanh toán, người đề nghị thanh toán, đơn vị đề nghị thanh toán, phòng ban đề nghị, số tiền thanh toán, lý do thanh toán. Vui lòng kiểm tra lại thông tin' ErrorDesc
116
			RETURN '-1'
117
		END
118
		IF(@p_MAKER_ID <> (SELECT TOP 1 MAKER_ID FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID))
119
		BEGIN
120
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Gửi phê duyệt thất bại! Bạn không được quyền gửi phê duyệt phiếu đề nghị thanh toán của người khác'  ErrorDesc
121
			RETURN '-1'
122
		END
123
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID  =@p_REQ_PAY_ID AND AUTH_STATUS='U'))
124
		BEGIN
125
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đã được gửi phê duyệt trước đó! Vui lòng đợi các cấp phê duyệt' ErrorDesc
126
			RETURN '-1'
127
		END
128
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT where AUTH_STATUS <> 'E' AND ISNULL(AUTH_STATUS, '') <> '' AND REQ_PAY_ID = @p_REQ_PAY_ID ))
129
		BEGIN
130
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đã được gửi phê duyệt trước đó hoặc đang bị từ chối! Vui lòng kiểm tra lại thông tin' ErrorDesc
131
			RETURN '-1'
132
		END
133
	END
134
	
135
-- END VALIDATE UPDATE
136

    
137
		--IF EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_CODE = @p_REQ_PAY_CODE AND REQ_PAY_ID <> @p_REQ_PAY_ID)
138
		--BEGIN
139
		--	SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu đã tồn tại trong hệ thống' ErrorDesc
140
		--	RETURN '-1'
141
		--END
142
	-- doanppt 
143
	IF(@p_REQ_TYPE = 'D')
144
	BEGIN
145
		DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID = @p_REQ_PAY_ID
146
		DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID = @p_REQ_PAY_ID
147
		DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
148
		DELETE FROM TR_REQ_PAYMENT_DT WHERE PAY_ID = @p_REQ_PAY_ID
149
	END
150
	IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
151
	BEGIN
152
		DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
153
		DELETE FROM TR_REQ_PAYMENT_DT WHERE PAY_ID = @p_REQ_PAY_ID
154
	END
155
	IF(@p_REQ_TYPE = 'P' AND (@p_IS_PERIOD='N' OR @p_IS_PERIOD IS NULL))
156
	BEGIN
157
		DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID = @p_REQ_PAY_ID
158
		DELETE FROM TR_REQ_PAYMENT_DT WHERE PAY_ID = @p_REQ_PAY_ID
159
	END
160
	DECLARE @ROLE_KI_NHAY VARCHAR(50)
161
	SET  @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER WHERE TLNANME =@p_TRASFER_USER_RECIVE)
162
	IF(@ROLE_KI_NHAY IS NOT NULL AND @ROLE_KI_NHAY <>'' AND @ROLE_KI_NHAY IN ('TPGD','GDDV','PGD','PTGD','TGD','HDQT','TP','PP','TBP','KTT','GDK','KSV','TC','NVTC','TPTC'))
163
	BEGIN
164
		PRINT @ROLE_KI_NHAY
165
	END
166
	ELSE
167
	BEGIN
168
		SET @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
169
		IF(@ROLE_KI_NHAY IS NULL OR @ROLE_KI_NHAY ='')
170
		BEGIN
171
				SET @ROLE_KI_NHAY =(SELECT TOP 1 ROLE_NEW FROM TL_SYS_ROLE_MAPPING WHERE ROLE_OLD =(SELECT TOP 1 ROLENAME FROM TL_USER WHERE TLNANME=@p_TRASFER_USER_RECIVE))
172
		END
173
	END
174
	--SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
175
	IF(@ROLE_KI_NHAY IS NOT NULL AND @ROLE_KI_NHAY <> '' AND @ROLE_KI_NHAY IN ('TP','GDDV','KTT','TPTC','TC','TPGD'))
176
	BEGIN
177
		SELECT '-1' Result, '' REQ_PAY_ID, N'Bạn không được phép chọn cấp trưởng đơn vị làm cấp phê duyệt trung gian. Vui lòng bỏ qua hoặc chọn cấp phó phòng, trưởng bộ phận' ErrorDesc
178
		RETURN '-1'
179
	END
180

    
181
	BEGIN TRANSACTION
182
	-- DECLARE
183
		DECLARE @VAT decimal(18, 0) =NULL, @TRANS_NO nvarchar(50)=NULL, @TRANS_DT VARCHAR(20)=NULL,@INVOICE_SIGN nvarchar(50) = NULL,@INVOICE_NO_SIGN nvarchar(50) = NULL,@INVOICE_NO nvarchar(50) = NULL,
184
		@INVOICE_DT VARCHAR(20) = NULL, @SELLER nvarchar(500) = NULL,@TAX_NO nvarchar(15) = NULL,@GOODS_NAME nvarchar(500) = NULL, @PRICE decimal(18, 0) = NULL,@TAX decimal(18, 0) = NULL,
185
		@NOTES NVARCHAR(MAX) = NULL,@VAT_RATE DECIMAL(18,0),@ACC_NO VARCHAR(50),@ACC_NAME NVARCHAR(250),@ISSUED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20),@CURRENCY VARCHAR(15)= NULL,@RATE DECIMAL(18,2), 
186
		@TYPE_VAT VARCHAR(15),@TYPE_FUNC VARCHAR(15), @PAY_ADV_ID VARCHAR(15),@TYPE_TRANSFER VARCHAR(15),@REQ_PAY_ADV_CODE VARCHAR(15),@REASON NVARCHAR(1000),
187
		@REF_TYPE VARCHAR(15), @TRN_DATE VARCHAR(15), @AMT_ADVANCED DECIMAL(18,0),@AMT_DO DECIMAL(18,0), @AMT_REMAIN DECIMAL(18,0),@AMT_PAY DECIMAL(18,0),@AMT_USE DECIMAL(18,2),@AMT_REVERT DECIMAL(18,2), 
188
		@AMT_ADD DECIMAL(18,2), @TOTAL_SCHEDULE_AMT DECIMAL(18,0) =0
189
		DECLARE @INDEX_AD INT =0, @INDEX_SV INT =0,@INDEX INT =0, @INDEX_IV INT =0, @INDEX_NS INT =0, @INDEX_INVOICE INT = 0, @INDEX_METHOD INT = 0
190
		DECLARE @hdoc INT, @hDoc2 INT, @hDocMeThod INT, @hdocBudget INT, @hdocService INT, @hdocAttach INT, @hdocInvoice INT, @hdocPO INT, @hdocSchedule INT, @hdocPeriod INT, @hdocRecurring INT, @hdocJob INT, 
191
		@hdocJobDT INT, @hdocDrive INT, @hdocDriveDT INT
192
	-- EXEC XMP
193
		EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
194
		EXEC sp_xml_preparedocument @hDoc2 OUTPUT, @p_XMP_TEMP_2;
195
		EXEC sp_xml_preparedocument @hDocMeThod OUTPUT, @p_XMP_TEMP_METHOD;
196
		EXEC sp_xml_preparedocument @hdocBudget OUTPUT, @p_XMP_TEMP_BUDGET;
197
		EXEC sp_xml_preparedocument @hdocService OUTPUT, @p_XMP_TEMP_SERVICE;
198
		EXEC sp_xml_preparedocument @hdocAttach OUTPUT, @p_XMP_TEMP_ATTACH;
199
		EXEC sp_xml_preparedocument @hdocInvoice OUTPUT, @p_XMP_TEMP_INVOICE;
200
		EXEC sp_xml_preparedocument @hdocPO OUTPUT, @p_XMP_TEMP_PO;
201
		EXEC sp_xml_preparedocument @hdocSchedule OUTPUT, @p_XMP_TEMP_SCHEDULE;
202
		EXEC sp_xml_preparedocument @hdocPeriod OUTPUT, @p_XMP_TEMP_PERIOD;
203
		EXEC sp_xml_preparedocument @hdocRecurring OUTPUT, @p_XMP_ADVANCE_DT;
204
		--doanptt 15/02/2022
205
		EXEC sp_xml_preparedocument @hdocJob OUTPUT, @p_XMP_TEMP_PAY_JOB;
206
		EXEC sp_xml_preparedocument @hdocJobDT OUTPUT, @p_XMP_TEMP_PAY_JOB_DT;
207
		--doanptt 17/02/2022
208
		EXEC sp_xml_preparedocument @hdocDrive OUTPUT, @p_XMP_TEMP_PAY_DRIVE;
209
		EXEC sp_xml_preparedocument @hdocDriveDT OUTPUT, @p_XMP_TEMP_PAY_DRIVE_DT;
210
		
211

    
212
-- BEGIN THONG TIN LUOI MASTER
213
		UPDATE TR_REQ_PAYMENT 
214
		SET REF_ID = @p_REF_ID, DEP_ID= @p_DEP_ID,REQ_REASON = @p_REQ_REASON, REQ_PAY_TYPE = @p_REQ_PAY_TYPE,REQ_AMT = @p_REQ_AMT, NOTES= @p_NOTES, REQ_TYPE= @p_REQ_TYPE,REQ_DESCRIPTION = @p_REQ_DESCRIPTION,
215
		RECEIVER_PO = @p_RECEIVER_PO,TRANSFER_MAKER =@p_TRANSFER_MAKER, REQ_TEMP_AMT=@p_REQ_TEMP_AMT,REQ_ENTRIES = @P_REQ_ENTRIES,BRANCH_ID = @p_BRANCH_ID, 
216
		AUTH_STATUS='E', IS_PERIOD =@p_IS_PERIOD, TRASFER_USER_RECIVE =@p_TRASFER_USER_RECIVE, RATE = @p_RATE, AMT_PAY = @p_AMT_PAY, AUTH_STATUS_KT = NULL, REQ_TYPE_CURRENCY = @p_REQ_TYPE_CURRENCY
217
		WHERE REQ_PAY_ID =@p_REQ_PAY_ID
218
		-- BUA DOAN NAY DE XU LY LOI KHONG TIM DUOC NHA CUNG CAP
219
		UPDATE CM_SUPPLIER SET ACC_NUM ='' WHERE ACC_NUM IS NULL
220
		UPDATE CM_SUPPLIER SET ACC_NUM_OUT ='' WHERE ACC_NUM_OUT IS NULL
221
		--
222
		UPDATE TR_REQ_PAY_SERVICE 
223
		SET REQ_PAY_ID= 'XX'+ RIGHT(REQ_PAY_ID,13)
224
		WHERE REQ_PAY_ID NOT IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE REQ_TYPE IN ('I','D'))
225
		--
226
		UPDATE TR_REQ_PAY_SCHEDULE 
227
		SET REQ_PAY_ID= 'XX'+ RIGHT(REQ_PAY_ID,13)
228
		WHERE REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE REQ_TYPE ='P' AND IS_PERIOD IS NOT NULL AND IS_PERIOD <>'' AND IS_PERIOD='Y') AND TRN_TYPE ='PAY' AND REQ_PAY_ID =@p_REQ_PAY_ID
229
		IF @@Error <> 0 GOTO ABORT
230
-- END THONG TIN LUOI MASTER
231

    
232
-- BEGIN THONG TIN HOA DON DINH KEM
233
		DECLARE @PDN_TT_LIST_INVOICE NVARCHAR(1000)
234
		DELETE FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
235
		DECLARE XmlData CURSOR FOR SELECT * FROM OPENXML(@hdocInvoice, '/Root/XmlData', 2)
236
		WITH(TRANS_NO nvarchar(50),TRANS_DT VARCHAR(20),INVOICE_SIGN nvarchar(50),INVOICE_NO_SIGN nvarchar(50), INVOICE_NO nvarchar(50),INVOICE_DT VARCHAR(20) ,SELLER nvarchar(500),TAX_NO nvarchar(15), 
237
		GOODS_NAME nvarchar(500), PRICE decimal(18,0),TAX decimal(18, 0),VAT decimal(18,0),NOTE NVARCHAR(MAX),VAT_RATE decimal(18,2),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),TYPE_VAT VARCHAR(15),TYPE_FUNC VARCHAR(15))
238
		OPEN XmlData;
239
		FETCH NEXT FROM XmlData INTO @TRANS_NO , @TRANS_DT  ,@INVOICE_SIGN ,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,
240
		@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@TYPE_VAT,@TYPE_FUNC
241
		WHILE @@fetch_status=0 
242
		BEGIN
243
		-- SET
244
			SET @INDEX_IV = @INDEX_IV +1
245
		-- BEGIN VALIDATE
246
			IF(@p_TYPE_FUNCTION ='SEND') 
247
			BEGIN
248
				IF(LEN(@INVOICE_NO) < 1)
249
				BEGIN
250
					ROLLBACK TRANSACTION
251
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Hóa đơn đính kèm, dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số hóa đơn '+ @INVOICE_NO +N' không được để trống' ErrorDesc
252
					RETURN '-1'
253
				END	
254

    
255
				IF(LEN(@INVOICE_NO) > 8)
256
				BEGIN
257
					ROLLBACK TRANSACTION
258
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Hóa đơn đính kèm, dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số hóa đơn '+ @INVOICE_NO +N' phải bé hơn 9 ký tự' ErrorDesc
259
					RETURN '-1'
260
				END	
261

    
262
				IF(EXISTS( SELECT * FROM TR_REQ_PAY_INVOICE WHERE INVOICE_NO =@INVOICE_NO AND INVOICE_NO_SIGN = @INVOICE_NO_SIGN AND INVOICE_SIGN =@INVOICE_SIGN AND TAX_NO =@TAX_NO AND TAX =@TAX AND AUTH_STATUS <>'D'
263
				AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE AUTH_STATUS NOT IN ('E','D')  AND MAKER_ID NOT IN (SELECT TLNANME FROM TL_USER WHERE RoleName ='DISABLE' OR AUTH_STATUS ='U'))))
264
				BEGIN
265
					---- 19.10.2022 LUCTV DIEU CHINH TAI VI TRI VALIDATE SO HOA DON
266
					SET @PDN_TT_LIST_INVOICE = (select STUFF( (select '; ' + DTA.REQ_PAY_CODE FROM TR_REQ_PAYMENT DTA WHERE REQ_PAY_ID IN 
267
					(SELECT REQ_PAY_ID FROM TR_REQ_PAY_INVOICE WHERE INVOICE_NO =@INVOICE_NO AND INVOICE_NO_SIGN = @INVOICE_NO_SIGN AND INVOICE_SIGN =@INVOICE_SIGN AND TAX_NO =@TAX_NO AND TAX =@TAX 
268
					AND AUTH_STATUS <>'D'
269
					AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE AUTH_STATUS NOT IN ('E','D') AND MAKER_ID NOT IN (SELECT TLNANME FROM TL_USER WHERE RoleName ='DISABLE' OR AUTH_STATUS ='U')))
270
					FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))
271
					BEGIN
272
						ROLLBACK TRANSACTION
273
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số hóa đơn '+ @INVOICE_NO +N' đã tồn tại trong hệ thống. Danh sách những phiếu đề nghị thanh toán đã sử dụng: '+ ISNULL(@PDN_TT_LIST_INVOICE,'') ErrorDesc
274
						RETURN '-1'
275
					END		
276
				END	
277
				
278
				IF(@GOODS_NAME IS NULL OR @GOODS_NAME ='')
279
				BEGIN
280
					ROLLBACK TRANSACTION
281
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Tên mặt hàng trong lưới hóa đơn không được để trống' ErrorDesc
282
					RETURN '-1'
283
				END
284
				-- TÊN NGƯỜI BÀN
285
				IF(@SELLER IS NULL OR @SELLER ='')
286
				BEGIN
287
					ROLLBACK TRANSACTION
288
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Người bán trong lưới hóa đơn không được để trống' ErrorDesc
289
					RETURN '-1'
290
				END
291

    
292
				IF(@TAX_NO IS NULL OR @TAX_NO ='')
293
				BEGIN
294
					ROLLBACK TRANSACTION
295
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Mã số thuế trong lưới hóa đơn không được để trống' ErrorDesc
296
					RETURN '-1'
297
				END
298
				-- NGÀY HÓA ĐƠN
299
				IF(@INVOICE_DT IS NULL OR @INVOICE_DT ='')
300
				BEGIN
301
					ROLLBACK TRANSACTION
302
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Ngày hóa đơn trong lưới hóa đơn không được để trống' ErrorDesc
303
					RETURN '-1'
304
				END
305
				-- SỐ HÓA ĐƠN
306
				IF(@INVOICE_NO IS NULL OR @INVOICE_NO ='')
307
				BEGIN
308
					ROLLBACK TRANSACTION
309
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số hóa đơn trong lưới hóa đơn không được để trống' ErrorDesc
310
					RETURN '-1'
311
				END
312
				-- KÍ HIỆU HÓA ĐƠN
313
				IF(@INVOICE_NO_SIGN IS NULL OR @INVOICE_NO_SIGN ='')
314
				BEGIN
315
					ROLLBACK TRANSACTION
316
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Kí hiệu số hóa đơn trong lưới hóa đơn không được để trống' ErrorDesc
317
					RETURN '-1'
318
				END
319
				-- KÍ HIỆU HÓA ĐƠN
320
				IF(@PRICE IS NULL)
321
				BEGIN
322
					ROLLBACK TRANSACTION
323
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số tiền hóa đơn trong lưới hóa đơn không được để trống' ErrorDesc
324
					RETURN '-1'
325
				END
326
			END
327
		-- END VALIDATE
328

    
329
			DECLARE @p_REQ_INV_ID VARCHAR(15);
330
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_INVOICE', @p_REQ_INV_ID OUT;
331
			IF @p_REQ_INV_ID='' OR @p_REQ_INV_ID IS NULL GOTO ABORT;
332
			INSERT INTO TR_REQ_PAY_INVOICE(REQ_PAYDT_ID,REQ_PAY_ID,TRANS_NO,TRANS_DT,INVOICE_SIGN,INVOICE_NO,INVOICE_DT,SELLER,TAX_NO,GOODS_NAME,PRICE,TAX,VAT,NOTE, MAKER_ID,CREATE_DT,EDITOR_ID,AUTH_STATUS,
333
			CHECKER_ID,APPROVE_DT, CREATE_DT_KT,MAKER_ID_KT,AUTH_STATUS_KT,CHECKER_ID_KT,APPROVE_DT_KT,RECORD_STATUS,INVOICE_NO_SIGN,VAT_RATE,CURRENCY,RATE,PRICE_KT,VAT_KT,TOTAL_AMT_KT,TYPE_VAT,TYPE_FUNC) 
334
			VALUES (@p_REQ_INV_ID,@p_REQ_PAY_ID , @TRANS_NO , NULL  ,@INVOICE_SIGN ,@INVOICE_NO ,CONVERT(DATE,@INVOICE_DT,103) ,UPPER(([dbo].[RemoveVietNamese](@SELLER))),@TAX_NO ,UPPER(([dbo].[RemoveVietNamese](@GOODS_NAME))) ,
335
			@PRICE ,@TAX,@VAT,@NOTES, @p_MAKER_ID,GETDATE(),NULL,'U',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1',@INVOICE_NO_SIGN,@VAT_RATE, 'VND' , 1,@PRICE,@VAT,@PRICE+@VAT,@TYPE_VAT,@TYPE_FUNC)
336
		IF @@error<>0 GOTO ABORT;
337
		FETCH NEXT FROM XmlData
338
		INTO @TRANS_NO , @TRANS_DT,@INVOICE_SIGN,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@TYPE_VAT,@TYPE_FUNC
339
		END;
340
		CLOSE XmlData;
341
		DEALLOCATE XmlData;
342
-- END THONG TIN HOA DON DINH KEM
343
-- BEGIN THONG TIN HANG MUC NGAN SACH VA CHI PHI
344
	-- DELETE
345
		DELETE FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID=@p_REQ_PAY_ID
346
		DELETE FROM TR_REQ_BUDGET_MONTH_LIMIT_DETAIL WHERE REQ_PAY_ID=@p_REQ_PAY_ID
347
		DELETE FROM TR_REQ_BUDGET_YEAR_LIMIT_DETAIL WHERE REQ_PAY_ID=@p_REQ_PAY_ID
348
	-- DECLARE
349
		DECLARE @TRADE_ID varchar(15),@GD_ID varchar(15), @GD_CODE varchar(15), @AMT_APP decimal(18,2),@AMT_EXE decimal(18,2), @AMT_REMAIN_GD decimal(18,2),@TYPE_COST VARCHAR(15), @FR_LEVEL INT ,
350
		@TO_LEVEL INT, @MONTH_RATE VARCHAR(4), @YEAR_RATE VARCHAR(4), @BUDGET_TYPE VARCHAR(20), @BRANCH_ID VARCHAR(20), @DEP_ID VARCHAR(20), @MONTH VARCHAR(20), @YEAR VARCHAR(20),
351
		@BRANCH_TYPE VARCHAR(20), @KHOI_ID VARCHAR(20), @TLNAME VARCHAR(20), @RoleName VARCHAR(20), @BRANCH_TAKE_COST_ID VARCHAR(20), @DEP_TAKE_COST_ID VARCHAR(20), @KHOI_TAKE_COST_ID VARCHAR(20), @BRANCH_KIND VARCHAR(20)
352
	-- DECLARE CURSOR
353
		DECLARE XmlDataGood CURSOR FOR SELECT * FROM OPENXML(@hdocBudget, 'Root/XmlDataGood',2) 
354
		WITH(TRADE_ID varchar(15),GD_ID varchar(15),GD_CODE varchar(15),AMT_APP decimal(18,2),AMT_DO decimal(18,2), AMT_EXE decimal(18,2),AMT_REMAIN decimal(18,2),CURRENCY VARCHAR(15), RATE DECIMAL(18,2), 
355
		REASON NVARCHAR(1000),TYPE_COST VARCHAR(15), FR_LEVEL INT ,TO_LEVEL INT, MONTH_RATE VARCHAR(4), YEAR_RATE VARCHAR(4), BUDGET_TYPE VARCHAR(20),  BRANCH_ID VARCHAR(20), DEP_ID VARCHAR(20), MONTH VARCHAR(20), YEAR VARCHAR(20),
356
		BRANCH_TYPE VARCHAR(20), KHOI_ID VARCHAR(20), TLNAME VARCHAR(20), RoleName VARCHAR(20), BRANCH_TAKE_COST_ID VARCHAR(20), DEP_TAKE_COST_ID VARCHAR(20), KHOI_TAKE_COST_ID VARCHAR(20), BRANCH_KIND VARCHAR(20))
357
	-- BEGIN CURSOR THONG TIN HANG MUC NGAN SACH VA CHI PHI
358
		OPEN XmlDataGood		
359
		FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID , @GD_CODE, @AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,
360
		@RATE,@REASON,@TYPE_COST, @FR_LEVEL,@TO_LEVEL, @MONTH_RATE, @YEAR_RATE, @BUDGET_TYPE, @BRANCH_ID , @DEP_ID, @MONTH, @YEAR, 
361
		@BRANCH_TYPE, @KHOI_ID, @TLNAME, @RoleName, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @BRANCH_KIND
362
		WHILE @@fetch_status=0 BEGIN
363
		-- SET
364
			SET @INDEX_NS = @INDEX_NS +1
365

    
366
		-- BEGIN VALIDATE
367
			IF(@p_TYPE_FUNCTION ='SEND')
368
			BEGIN
369
				IF(ISNULL(@AMT_EXE,0) =0)
370
				BEGIN
371
					ROLLBACK TRANSACTION
372
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Số tiền sử dụng thực tế phải lớn hơn không.' ErrorDesc
373
					RETURN '-1'
374
				END
375
				/*
376
				IF((@AMT_EXE  > @AMT_REMAIN_GD) AND ((SELECT GD_TYPE_ID FROM CM_GOODS WHERE GD_ID =@GD_ID) ='NS'))
377
				BEGIN
378
						ROLLBACK TRANSACTION
379
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Ngân sách sử dụng thực tế không được vượt quá ngân sách còn lại.' ErrorDesc
380
						RETURN '-1'
381
				END
382
				*/
383
				
384
				IF(NOT EXISTS(SELECT * FROM PL_IMPORT_DT WHERE TRADE_ID =@TRADE_ID AND IMP_YEAR =YEAR(GETDATE()))
385
				AND NOT EXISTS (SELECT * FROM PL_MASTER WHERE PLAN_ID =(SELECT TOP 1 PLAN_ID FROM PL_TRADEDETAIL WHERE TRADE_ID =@TRADE_ID) AND YEAR =YEAR(GETDATE())))
386
				BEGIN
387
					ROLLBACK TRANSACTION
388
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Ngân sách sử dụng phải chọn lại ngân sách của năm hiện tại. Không được phép sử dụng ngân sách năm cũ.' ErrorDesc
389
					RETURN '-1'
390
				END
391
				
392
--doanptt 180622 ghi log NSCP
393
-- BEGIN CHECK HAN MUC CHI PHI THEO NAM
394
				IF(@BUDGET_TYPE = 'nam')
395
				BEGIN
396
					IF(@YEAR_RATE = '' OR @YEAR_RATE IS NULL)
397
					BEGIN
398
						ROLLBACK TRANSACTION
399
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(NVARCHAR(5),@INDEX_NS)+ N': Năm định mức không được để trống' ErrorDesc
400
						RETURN '-1'
401
					END
402
					IF(@BRANCH_TAKE_COST_ID = '' OR @BRANCH_TAKE_COST_ID IS NULL)
403
					BEGIN
404
						ROLLBACK TRANSACTION
405
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(NVARCHAR(5),@INDEX_NS)+ N': Đơn vị chịu chi phí không được để trống' ErrorDesc
406
						RETURN '-1'
407
					END
408
					SET @MONTH_RATE = 'M' + CONVERT(VARCHAR(20), MONTH(GETDATE()));
409
					DECLARE @l_BUDGET_LIMIT_YEAR_DETAIL_ID VARCHAR(15);
410
					EXEC SYS_CodeMasters_Gen 'BUDGET_LIMIT_YEAR_DETAIL', @l_BUDGET_LIMIT_YEAR_DETAIL_ID OUT;
411

    
412
					IF(@MONTH_RATE = 'M1')
413
					BEGIN
414
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID, DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
415
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @YEAR_RATE, @AMT_EXE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND )
416
					END
417
					IF(@MONTH_RATE = 'M2')
418
					BEGIN
419
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
420
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @YEAR_RATE, 0, @AMT_EXE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND )
421
					END
422
					IF(@MONTH_RATE = 'M3')
423
					BEGIN
424
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
425
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @YEAR_RATE, 0, 0, @AMT_EXE, 0, 0, 0, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND )
426
					END
427
					IF(@MONTH_RATE = 'M4')
428
					BEGIN
429
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
430
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @YEAR_RATE,0,0,0, @AMT_EXE, 0, 0, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND )
431
					END
432
					IF(@MONTH_RATE = 'M5')
433
					BEGIN
434
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
435
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @YEAR_RATE, 0, 0, 0, 0, @AMT_EXE, 0, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND )
436
					END
437
					IF(@MONTH_RATE = 'M6')
438
					BEGIN
439
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID, DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5,	 M6,   M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
440
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName,	@YEAR_RATE, 0, 0, 0, 0, 0, @AMT_EXE, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1',			'A',		NULL,			NULL, @BRANCH_KIND )
441
					END
442
					IF(@MONTH_RATE = 'M7')
443
					BEGIN
444
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
445
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @YEAR_RATE, 0, 0, 0, 0, 0, 0, @AMT_EXE, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND )
446
					END
447
					IF(@MONTH_RATE = 'M8')
448
					BEGIN
449
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
450
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @YEAR_RATE, '', '', '', '', '', '', '', @AMT_EXE, '', '', '', '', @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND )
451
					END
452
					IF(@MONTH_RATE = 'M9')
453
					BEGIN
454
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
455
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @YEAR_RATE, 0, 0, 0, 0, 0, 0, 0, 0, @AMT_EXE, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND )
456
					END
457
					IF(@MONTH_RATE = 'M10')
458
					BEGIN
459
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
460
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @YEAR_RATE, 0, 0, 0, 0, 0, 0, 0, 0, 0, @AMT_EXE,0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND )
461
					END
462
					IF(@MONTH_RATE = 'M11')
463
					BEGIN
464
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
465
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @YEAR_RATE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @AMT_EXE, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND )
466
					END
467
					IF(@MONTH_RATE = 'M12')
468
					BEGIN
469
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
470
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @YEAR_RATE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @AMT_EXE, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND )
471
					END
472
					-- CHECK HẠN MỨC
473
					/*
474
					DECLARE @l_HAVE_BUDGET_LIMIT_YEAR decimal(18,0), @l_BUDGET_LIMIT_CURRENT_YEAR decimal(18,0) =0, @l_BUDGET_USED_CURRENT_YEAR decimal(18,0) =0 , @l_BRANCH_TYPE_YEAR VARCHAR(20) = '';
475
					EXEC TR_BUDGET_CHECK_LIMIT_YEAR_Byid @GD_ID, @GD_CODE ,@BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @MONTH_RATE, @YEAR_RATE, @BRANCH_KIND, @l_BUDGET_LIMIT_CURRENT_YEAR out, @l_BUDGET_USED_CURRENT_YEAR out
476
					IF(@l_BUDGET_LIMIT_CURRENT_YEAR < @l_BUDGET_USED_CURRENT_YEAR)
477
					BEGIN
478
						ROLLBACK TRANSACTION
479
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(NVARCHAR(5),@INDEX_NS)+ N': Số tiền sử dụng ngân sách vượt quá định mức ngân sách. Hạn mức hiện tại là ' + FORMAT(@l_BUDGET_LIMIT_CURRENT_YEAR,'#,#', 'vi-VN') + N', số tiền đã sử dụng đến hiện tại là ' + FORMAT(@l_BUDGET_USED_CURRENT_YEAR,'#,#', 'vi-VN')  ErrorDesc
480
						RETURN '-1'
481
					END
482
					*/
483
				END-- END CHECK HAN MUC NGAN SACH CHI PHI THEO NAM
484
				ELSE IF(@BUDGET_TYPE = 'thang')
485
				BEGIN	-- BEGIN CHECK HAN MUC NGAN SACH CHI PHI THEO THANG
486
				-- BEGIN KIỂM TRA HẠN MỨC
487
					DECLARE @l_HAVE_BUDGET_LIMIT decimal(18,0), @l_BUDGET_LIMIT_CURRENT decimal(18,0) =0, @l_BUDGET_USED_CURRENT decimal(18,0) =0 , @l_BRANCH_TYPE VARCHAR(20) = '';
488
					-- lấy loại đơn vị
489
					SET @l_BRANCH_TYPE = (SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID = @BRANCH_ID)
490
					IF(@l_BRANCH_TYPE = 'HS')
491
					BEGIN
492
						SET @l_BRANCH_TYPE = 'ho'
493
					END
494
					ELSE IF(@l_BRANCH_TYPE = 'CN')
495
					BEGIN
496
						SET @l_BRANCH_TYPE = 'dvkd'
497
					END
498
					ELSE
499
					BEGIN
500
						SET @l_BRANCH_TYPE = 'pgd'
501
					END
502

    
503
					DECLARE @l_BUDGET_LIMIT_MONTH_DETAIL_ID VARCHAR(15);
504
					EXEC SYS_CodeMasters_Gen 'BUDGET_LIMIT_MONTH_DETAIL', @l_BUDGET_LIMIT_MONTH_DETAIL_ID OUT;
505

    
506
					IF(@MONTH_RATE = '' OR @MONTH_RATE IS NULL)
507
					BEGIN
508
						ROLLBACK TRANSACTION
509
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(NVARCHAR(5),@INDEX_NS)+ N': Tháng định mức không được để trống' ErrorDesc
510
						RETURN '-1'
511
					END
512
					IF(@YEAR_RATE = '' OR @YEAR_RATE IS NULL)
513
					BEGIN
514
						ROLLBACK TRANSACTION
515
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(NVARCHAR(5),@INDEX_NS)+ N': Năm định mức không được để trống' ErrorDesc
516
						RETURN '-1'
517
					END
518
					IF(@BRANCH_TAKE_COST_ID = '' OR @BRANCH_TAKE_COST_ID IS NULL)
519
					BEGIN
520
						ROLLBACK TRANSACTION
521
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(NVARCHAR(5),@INDEX_NS)+ N': Đơn vị chịu chi phí không được để trống' ErrorDesc
522
						RETURN '-1'
523
					END
524
				-- END KIỂM TRA HẠN MỨC
525
				-- BEGIN VALIDATE
526
					IF(@MONTH_RATE = 'M1')
527
					BEGIN
528
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
529
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @YEAR_RATE, @AMT_EXE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND )
530
					END
531
					IF(@MONTH_RATE = 'M2')
532
					BEGIN
533
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
534
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @YEAR_RATE, 0, @AMT_EXE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND )
535
					END
536
					IF(@MONTH_RATE = 'M3')
537
					BEGIN
538
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
539
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @YEAR_RATE, 0, 0, @AMT_EXE, 0, 0, 0, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND )
540
					END
541
					IF(@MONTH_RATE = 'M4')
542
					BEGIN
543
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
544
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @YEAR_RATE,0,0,0, @AMT_EXE, 0, 0, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND )
545
					END
546
					IF(@MONTH_RATE = 'M5')
547
					BEGIN
548
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
549
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @YEAR_RATE, 0, 0, 0, 0, @AMT_EXE, 0, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND )
550
					END
551
					IF(@MONTH_RATE = 'M6')
552
					BEGIN
553
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID,		 GD_ID , BRANCH_ID,  DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5,	 M6,   M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
554
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID,	@YEAR_RATE, 0, 0, 0, 0, 0, @AMT_EXE, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1',			'A',		NULL,			NULL, @BRANCH_KIND )
555
					END
556
					IF(@MONTH_RATE = 'M7')
557
					BEGIN
558
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
559
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @YEAR_RATE, 0, 0, 0, 0, 0, 0, @AMT_EXE, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND )
560
					END
561
					IF(@MONTH_RATE = 'M8')
562
					BEGIN
563
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
564
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @YEAR_RATE, '', '', '', '', '', '', '', @AMT_EXE, '', '', '', '', @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND )
565
					END
566
					IF(@MONTH_RATE = 'M9')
567
					BEGIN
568
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
569
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @YEAR_RATE, 0, 0, 0, 0, 0, 0, 0, 0, @AMT_EXE, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND )
570
					END
571
					IF(@MONTH_RATE = 'M10')
572
					BEGIN
573
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
574
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @YEAR_RATE, 0, 0, 0, 0, 0, 0, 0, 0, 0, @AMT_EXE,0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND )
575
					END
576
					IF(@MONTH_RATE = 'M11')
577
					BEGIN
578
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
579
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @YEAR_RATE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @AMT_EXE, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND )
580
					END
581
					IF(@MONTH_RATE = 'M12')
582
					BEGIN
583
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND)
584
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @YEAR_RATE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @AMT_EXE, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND )
585
					END
586
				-- END VALIDATE
587
					
588
				-- CHECK HẠN MỨC
589
					print '@GD_ID: ' + @GD_ID;
590
					print '@GD_CODE: ' + @GD_CODE;
591
					print '@l_BRANCH_TYPE: ' + @l_BRANCH_TYPE;
592
					print '@YEAR_RATE: ' + @YEAR_RATE;
593
					print '@MONTH_RATE: ' + @MONTH_RATE;
594
					print '@BRANCH_KIND: ' + @BRANCH_KIND;
595
					print '@BRANCH_TAKE_COST_ID: ' + @BRANCH_TAKE_COST_ID;
596
					print '@DEP_TAKE_COST_ID: ' + @DEP_TAKE_COST_ID;
597
					EXEC TR_BUDGET_CHECK_LIMIT_MONTH_Byid @GD_ID, @GD_CODE ,@l_BRANCH_TYPE, @YEAR_RATE , @MONTH_RATE, @BRANCH_KIND, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID , @l_BUDGET_LIMIT_CURRENT out, @l_BUDGET_USED_CURRENT out
598
					IF(@l_BUDGET_LIMIT_CURRENT < @l_BUDGET_USED_CURRENT)
599
					BEGIN
600
						ROLLBACK TRANSACTION
601
						--SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(NVARCHAR(5),@INDEX_NS)+ N': Số tiền sử dụng ngân sách vượt quá định mức ngân sách. Hạn mức hiện tại là ' + FORMAT(@l_BUDGET_LIMIT_CURRENT,'#,#', 'vi-VN') + N', số tiền đã sử dụng đến hiện tại là ' + FORMAT(@l_BUDGET_USED_CURRENT,'#,#', 'vi-VN')  ErrorDesc
602
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(NVARCHAR(5),@INDEX_NS)+ N': Số tiền sử dụng ngân sách vượt quá định mức ngân sách.' ErrorDesc
603
						RETURN '-1'
604
					END
605
				END
606
--END CHECK HAN MUC NGAN SACH CHI PHI THEO THANG
607
			END
608
		-- END VALIDATE
609

    
610
			DECLARE @p_BUDGET_ID VARCHAR(15);
611
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
612
			IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
613
			INSERT INTO TR_REQ_PAY_BUDGET(BUDG_ID,GD_ID,REQ_PAY_ID,TRADE_ID,AMT_APP,AMT_DO,AMT_EXE,AMT_REMAIN,MAKER_ID,CREATE_DT,CURRENCY,RATE,REASON,TYPE_COST , FR_LEVEL  ,TO_LEVEL, MONTH_RATE, YEAR_RATE, BUDGET_TYPE, BRANCH_ID ,DEP_ID, TLNAME, ROLENAME, BRANCH_TAKE_COST_ID, DEP_TAKE_COST_ID, KHOI_TAKE_COST_ID,BRANCH_KIND) 
614
			VALUES (@p_BUDGET_ID,@GD_ID,@p_REQ_PAY_ID,@TRADE_ID,@AMT_APP,@AMT_DO,@AMT_EXE,@AMT_REMAIN_GD,@p_MAKER_ID, GETDATE(), @p_REQ_TYPE_CURRENCY , @p_RATE,@REASON,@TYPE_COST, @FR_LEVEL,@TO_LEVEL,  @MONTH_RATE, @YEAR_RATE, @BUDGET_TYPE, @BRANCH_ID, @DEP_ID, @TLNAME, @RoleName, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID,@BRANCH_KIND)
615
		IF @@error<>0 GOTO ABORT;
616
		FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID , @GD_CODE, @AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,
617
		@RATE,@REASON,@TYPE_COST, @FR_LEVEL,@TO_LEVEL, @MONTH_RATE, @YEAR_RATE, @BUDGET_TYPE, @BRANCH_ID , @DEP_ID, @MONTH, @YEAR, @BRANCH_TYPE, @KHOI_ID, @TLNAME, @RoleName, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @BRANCH_KIND
618
		END;
619
		CLOSE XmlDataGood;
620
		DEALLOCATE XmlDataGood;
621
-- END THONG TIN HAMG MUC NGAN SACH VA CHI PHI
622

    
623

    
624
-- BEGIN THONG TIN PHUONG THUC THANH TOAN
625
	-- DELETE
626
		DELETE FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID = @p_REQ_PAY_ID
627
	--DECLARE
628
		DECLARE @RECEIVE_ID varchar(15),@RECEIVE_NAME nvarchar(100),@REQ_PAY_REASON nvarchar(MAX),@TOTAL_AMT_METHOD decimal(18,2), @REQ_PAY_TYPE varchar(1),@REQ_PAY_DESC nvarchar(MAX),
629
		@REQ_PAY_ENTRIES nvarchar(MAX),@CHECK_IN VARCHAR(15), @BANKCODE_NAPAS VARCHAR(20), @BANKCODE VARCHAR(20), @BANKNAME VARCHAR(250), @SUB_ISSUED_BY NVARCHAR(250), @RECEIVER_DEBIT VARCHAR(20)
630
	-- SET
631
		SET @INDEX = 0
632
	-- DECLARE CURSOR
633
		DECLARE XmlDataMethod CURSOR FOR SELECT * FROM OPENXML(@hdocMethod, 'Root/XmlDataMethod',2)
634
		WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2), REQ_PAY_TYPE varchar(1),REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),
635
		ACC_NO VARCHAR(250), ACC_NAME NVARCHAR(250),ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),CHECK_IN VARCHAR(15),TYPE_TRANSFER VARCHAR(15), 
636
		BANKCODE_NAPAS VARCHAR(20), BANKCODE VARCHAR(20), BANKNAME NVARCHAR(250), SUB_ISSUED_BY NVARCHAR(250), RECEIVER_DEBIT NVARCHAR(20))
637
	-- BEGIN CURSOR THONG TIN PHUONG THUC THANH TOAN
638
		OPEN XmlDataMethod
639
		FETCH NEXT FROM XmlDataMethod INTO  @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,
640
		@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@ACC_NO, @ACC_NAME,@ISSUED_BY, @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN,@TYPE_TRANSFER, @BANKCODE_NAPAS, @BANKCODE, @BANKNAME, @SUB_ISSUED_BY, @RECEIVER_DEBIT
641
		WHILE @@fetch_status=0 
642
		BEGIN
643
		-- SET
644
			SET @INDEX_METHOD = @INDEX_METHOD+1
645
		-- BEGIN VALIDATE
646
			IF(@p_TYPE_FUNCTION ='SEND')
647
			BEGIN
648

    
649
				IF(@ACC_NO IS NULL OR @ACC_NO = '')
650
				BEGIN
651
					ROLLBACK TRANSACTION
652
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin phương thức thanh toán, dòng ' + CONVERT(VARCHAR(5),@INDEX_METHOD)+N': số tài khoản '+ N' không được để trống' ErrorDesc
653
					RETURN '-1'
654
				END
655

    
656
				IF((@BANKCODE IS NULL OR @BANKCODE = '') AND @CHECK_IN = 'O')
657
				BEGIN
658
					ROLLBACK TRANSACTION
659
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin phương thức thanh toán, dòng ' + CONVERT(VARCHAR(5),@INDEX_METHOD)+N': Loại tài khoản là ngoài hệ thống! Vui lòng chọn lại Tên ngân hàng/nơi cấp CMND từ danh sách!' ErrorDesc
660
					RETURN '-1'
661
				END
662

    
663
				IF(@REQ_PAY_TYPE = '1' AND (@ISSUED_DT = '' OR @ISSUED_DT IS NULL))
664
				BEGIN
665
					ROLLBACK TRANSACTION
666
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin phương thức thanh toán, dòng ' + CONVERT(VARCHAR(5),@INDEX_METHOD)+N': Ngày cấp CMND '+ N' không được để trống nếu phương thức thanh toán là bằng tiền mặt' ErrorDesc
667
					RETURN '-1'
668
				END
669

    
670
				IF(@ISSUED_BY = '' OR @ISSUED_BY IS NULL)
671
				BEGIN
672
					ROLLBACK TRANSACTION
673
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin phương thức thanh toán, dòng ' + CONVERT(VARCHAR(5),@INDEX_METHOD)+N': Tên ngân hàng/nơi cấp CMND '+ N' không được để trống' ErrorDesc
674
					RETURN '-1'
675
				END
676

    
677
				IF(@ACC_NAME = '' OR @ACC_NAME IS NULL)
678
				BEGIN
679
					ROLLBACK TRANSACTION
680
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin phương thức thanh toán, dòng ' + CONVERT(VARCHAR(5),@INDEX_METHOD)+N': Tên tài khoản/người nhận '+ N' không được để trống' ErrorDesc
681
					RETURN '-1'
682
				END
683
			END
684
		-- END VALIDATE
685
			IF(@REQ_PAY_TYPE<>'1')
686
			BEGIN
687
				SET @ISSUED_DT = NULL
688
			END
689
			IF(@TYPE_TRANSFER IS NULL OR @TYPE_TRANSFER ='')
690
			BEGIN
691
				SET @TYPE_TRANSFER = 'A'
692
			END
693

    
694
			DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
695
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
696
			IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
697
			INSERT INTO TR_REQ_PAY_METHOD(METHOD_ID, REQ_PAY_ID, EMP_ID, REQ_PAY_REASON, TOTAL_AMT, REQ_PAY_TYPE, REQ_PAY_DESC, REQ_PAY_ENTRIES, TEMP, MAKER_ID, CREATE_DT, ACC_NO, ACC_NAME, ISSUED_BY, ISSUED_DT, CURRENCY, RATE, CHECK_IN, TYPE_TRANSFER, BANKCODE_NAPAS, BANKCODE, BANKNAME, SUB_ISSUED_BY, RECEIVER_DEBIT)
698
			VALUES (@p_REQ_PAY_METHOD_ID,@p_REQ_PAY_ID,@RECEIVE_ID,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,'',@p_MAKER_ID,GETDATE(),@ACC_NO, @ACC_NAME,@ISSUED_BY,CONVERT(DATE,@ISSUED_DT,103), @p_REQ_TYPE_CURRENCY , @p_RATE,@CHECK_IN,@TYPE_TRANSFER, @BANKCODE_NAPAS, @BANKCODE, @BANKNAME, @SUB_ISSUED_BY, @RECEIVER_DEBIT)
699
		IF @@error<>0 GOTO ABORT;
700
		FETCH NEXT FROM XmlDataMethod INTO @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,
701
		@ACC_NO, @ACC_NAME,@ISSUED_BY, @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN,@TYPE_TRANSFER, @BANKCODE_NAPAS, @BANKCODE, @BANKNAME, @SUB_ISSUED_BY, @RECEIVER_DEBIT
702
		END
703
		CLOSE XmlDataMethod;
704
		DEALLOCATE XmlDataMethod;
705
	-- END CURSOR THONG TIN PHUONG THUC THANH TOAN
706
-- END THONG TIN PHUONG THUC THANH TOAN
707

    
708
-- BEGIN THONG TIN HOP DONG DINH KEM & THONG TIN CHUNG TU KHAC DINH KEM
709
	-- DELETE
710
		DELETE FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID
711
	-- DECLARE
712
		DECLARE @ATTACH_ID varchar(15),@CON_ID varchar(100),@CONT_CODE VARCHAR(50), @CON_NOTES VARCHAR(1000), @CON_DESC NVARCHAR(1000),@CON_TYPE VARCHAR(15),@AMT_ATT DECIMAL(18,2),@REF_DT VARCHAR(20), @LICENSE_DT VARCHAR(15)
713
	-- DECLARE CURSOR
714
		DECLARE XmlAttach CURSOR FOR SELECT * FROM OPENXML(@hdocAttach, 'Root/XmlAttach',2) 
715
		WITH(ATTACH_ID varchar(15),CON_ID varchar(100),CONT_CODE VARCHAR(50), CON_NOTES NVARCHAR(1000), CON_DESC NVARCHAR(1000),CON_TYPE VARCHAR(15),AMT_ATT DECIMAL(18,2),REF_DT VARCHAR(20), LICENSE_DT VARCHAR(15))
716
	-- BEGIN CURSOR THONG TIN CHUNG TU KHAC DINH KEM
717
		OPEN XmlAttach
718
		FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT, @LICENSE_DT
719
			WHILE @@fetch_status=0 
720
			BEGIN
721
				
722
				IF (@REF_DT='')
723
				BEGIN
724
					SET @REF_DT = NULL
725
				END
726
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
727
				IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
728
				INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],[AMT],REF_DT, LICENSE_DT) VALUES
729
				(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT,CONVERT(DATE,@REF_DT,103) ,CONVERT(DATE, @LICENSE_DT,103))
730
			IF @@error<>0 GOTO ABORT;
731
			FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT, @LICENSE_DT
732
			END
733
		CLOSE XmlAttach;
734
		DEALLOCATE XmlAttach;    
735
-- END THONG TIN HOP DONG DINH KEM & THONG TIN CHUNG TU KHAC DINH KEM
736

    
737
		------------------------
738
	-- NEU LA THANH TOAN HOAN TAM UNG
739
		IF(@p_REQ_TYPE = 'I')
740
		BEGIN
741
		-- DELETE
742
			DELETE FROM TR_REQ_PAYMENT_DT WHERE PAY_ID = @p_REQ_PAY_ID
743

    
744
			DECLARE XmlDataPay CURSOR FOR SELECT * FROM OPENXML(@hDoc2, '/Root/XmlDataPay', 2)
745
			WITH(PAY_ADV_ID nvarchar(50),AMT_ADVANCED decimal(18, 0),AMT_DO decimal(18,2),
746
			AMT_REMAIN decimal(18,2),AMT_PAY decimal(18,2),AMT_USE decimal(18,2),AMT_REVERT DECIMAL(18,0),AMT_ADD DECIMAL(18,2),CURRENCY VARCHAR(15), RATE DECIMAL(18,2), TRN_DATE VARCHAR(15))
747
		-- BEGIN CURSOR THONG TIN PHIEU DE NGHI TAM UNG
748
			OPEN XmlDataPay; 
749
			FETCH NEXT FROM XmlDataPay INTO @PAY_ADV_ID, @AMT_ADVANCED ,@AMT_DO,@AMT_REMAIN,@AMT_PAY ,@AMT_USE ,@AMT_REVERT,@AMT_ADD,@CURRENCY,@RATE, @TRN_DATE
750
			WHILE @@fetch_status=0 
751
			BEGIN
752
				SET @INDEX_AD = @INDEX_AD +1
753
				SET @REQ_PAY_ADV_CODE = (SELECT REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@PAY_ADV_ID)
754
		-- BEGIN VALIDATE
755
				IF(@p_TYPE_FUNCTION ='SEND') 
756
				BEGIN
757
					-- KIEM TRA XEM CO PHIEU NAO DANG DUOC THANH TOAN HOAN TAM UNG MA CHUA DUYET HAY CHUA
758
					--IF(EXISTS (SELECT * FROM TR_REQ_PAYMENT_DT WHERE (PAY_ADV_ID =@PAY_ADV_ID AND (AUTH_STATUS_KT <>'A' OR AUTH_STATUS_KT IS NULL)) AND PAY_ID <> @p_REQ_PAY_ID))
759
					IF(EXISTS (SELECT * FROM TR_REQ_PAYMENT_DT WHERE (PAY_ADV_ID =@PAY_ADV_ID AND (AUTH_STATUS ='A' AND ISNULL(AUTH_STATUS_KT,'') <> 'A')) AND PAY_ID <> @p_REQ_PAY_ID))
760
					BEGIN
761
						ROLLBACK TRANSACTION
762
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_AD)+ N': Phiếu tạm ứng số '+@REQ_PAY_ADV_CODE+ N' đang được thanh toán hoàn tạm ứng. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
763
						RETURN '-1'
764
					END
765
					
766
					-- KIEM TRA NEU SO TIEN DE NGHI HOAN TAM ƯNG LON HON SO TIEN CON LAI CAN PHAI TAM UNG
767
					IF(@AMT_REVERT>(@AMT_REMAIN -@AMT_USE) AND @AMT_REVERT >0)
768
					BEGIN
769
						ROLLBACK TRANSACTION
770
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_AD)+ N': Số tiền hoàn ứng không được vượt quá '+FORMAT((@AMT_REMAIN -@AMT_USE),'#,#', 'vi-VN') ErrorDesc
771
						RETURN '-1'
772
					END
773
					--KIEM TRA NEU SO PHIEU TAM UNG NAY DA THANH TOAN XONG THI KHONG CHO PHEP DUYET
774
					IF((SELECT A.REQ_AMT - A.PAY_AMT FROM TR_REQ_ADVANCE_PAYMENT A WHERE A.REQ_PAY_ID = @PAY_ADV_ID)<=0)
775
					BEGIN
776
						ROLLBACK TRANSACTION
777
						SELECT '-1' Result,'' REQ_PAY_ID,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_AD)+ N': Phiếu tạm ứng này đã được hoàn tạm ứng xong. Vui lòng xóa khỏi danh sách hoàn tạm ứng' ErrorDesc
778
						RETURN '-1'
779
					END
780
					
781
				END
782
		-- END VALIDATE
783
				DECLARE @p_REQ_PAYDT_ID VARCHAR(15);
784
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAYMENT_DT', @p_REQ_PAYDT_ID OUT;
785
				IF @p_REQ_PAYDT_ID='' OR @p_REQ_PAYDT_ID IS NULL GOTO ABORT;
786
				INSERT INTO TR_REQ_PAYMENT_DT
787
				VALUES (@p_REQ_PAYDT_ID,@PAY_ADV_ID,@p_REQ_PAY_ID , ISNULL(@AMT_ADVANCED,0) ,ISNULL(@AMT_DO,0),ISNULL(@AMT_REMAIN,0),
788
				ISNULL(ISNULL(@AMT_USE,0) + ISNULL(@AMT_REVERT,0) - ISNULL(@AMT_ADD,0),0) ,ISNULL(@AMT_USE,0) ,ISNULL(@AMT_REVERT,0), ISNULL(@AMT_ADD,0), CONVERT(DATE,@TRN_DATE,103)  ,@p_MAKER_ID ,GETDATE() ,NULL ,NULL,'U' ,NULL ,NULL ,NULL ,NULL,NULL, @p_REQ_TYPE_CURRENCY , @p_RATE)
789
			IF @@error<>0 GOTO ABORT;
790
			FETCH NEXT FROM XmlDataPay INTO @PAY_ADV_ID, @AMT_ADVANCED ,@AMT_DO,@AMT_REMAIN,@AMT_PAY ,@AMT_USE ,@AMT_REVERT,@AMT_ADD,@CURRENCY,@RATE, @TRN_DATE
791
			END
792
			CLOSE XmlDataPay;
793
			DEALLOCATE XmlDataPay;
794
		--END CURSOR THONG TIN PHIEU DE NGHI TAM UNG
795
		--------------------------------------------------------------------------------------------------------------------
796
		--INSERT FROM CatCursor
797
		--DELETE
798
			DELETE FROM TR_REQ_PAY_CAT WHERE REQ_PAY_ID = @p_REQ_PAY_ID
799
			--CatCursor
800
			DECLARE @REQ_ADV_ID varchar(15),@CAT_NAME nvarchar(100),@TOTAL_AMT_CAT decimal(18,2), @DEPT_ID VARCHAR(15)
801
			DECLARE XmlDataCat CURSOR FOR
802
			SELECT * FROM OPENXML(@hdoc, 'Root/XmlDataCat',2) 
803
			WITH(REQ_ADV_ID VARCHAR(15),CAT_NAME nvarchar(100),TOTAL_AMT decimal(18,2), DEPT_ID VARCHAR(15),CURRENCY VARCHAR(15), RATE DECIMAL(18,2))
804
			OPEN XmlDataCat
805
			FETCH NEXT FROM XmlDataCat INTO @REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@CURRENCY,@RATE
806
			WHILE @@fetch_status=0 
807
			BEGIN
808
				SET @INDEX = @INDEX +1
809
				DECLARE @p_REQ_PAY_CAT_ID VARCHAR(15);
810
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_CAT', @p_REQ_PAY_CAT_ID OUT;
811
				IF @p_REQ_PAY_CAT_ID='' OR @p_REQ_PAY_CAT_ID IS NULL GOTO ABORT;
812
				INSERT INTO TR_REQ_PAY_CAT
813
				VALUES (@p_REQ_PAY_CAT_ID,@p_REQ_PAY_ID,@REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@p_MAKER_ID,GETDATE(), @p_REQ_TYPE_CURRENCY , @p_RATE)
814
			IF @@error<>0 GOTO ABORT;
815
			FETCH NEXT FROM XmlDataCat INTO @REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@CURRENCY,@RATE
816
			END
817
			CLOSE XmlDataCat;
818
			DEALLOCATE XmlDataCat;
819
		END
820
	-- NEU LA THANH TOAN KHAC
821
		IF(@p_REQ_TYPE = 'D' OR @p_REQ_TYPE ='I')
822
		BEGIN
823
		-- DELETE
824
			DELETE FROM TR_REQ_PAY_SERVICE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
825
		-- DECLARE
826
			DECLARE @SUM_TTCT_LINK DECIMAL(18,0), @SUM_TT_CT DECIMAL(18,0), @SUM_KUY_KE_TT DECIMAL(18,0),@SUM_PYCMS_LINK DECIMAL(18,0), @PYCMS_CODE_LIST VARCHAR(250), @PYCMS_CODE_DRAFT_LIST VARCHAR(250), @PDNTT_CODE_LIST VARCHAR(250)
827
			DECLARE @REQ_PAY_SERVICE_NAME nvarchar(100),@RECEIVE_ID_SERVICE varchar(15),@RECEIVE_NAME_SERVICE nvarchar(100),@REQ_PAY_REASON_SERVICE nvarchar(MAX), @TOTAL_AMT_SERVICE decimal(18,2),
828
			@REQ_PAY_TYPE_SERVICE varchar(1),@REQ_PAY_DESC_SERVICE nvarchar(MAX),@REQ_PAY_ENTRIES_SERVICE nvarchar(MAX),@DEPT_ID_SRV VARCHAR(15)
829
		-- SET
830
			SET @SUM_KUY_KE_TT=0
831
			SET @INDEX = 0
832
		-- DECLARE CURSOR
833
			DECLARE XmlDataService CURSOR FOR SELECT * FROM OPENXML(@hdocService, 'Root/XmlDataService',2)
834
			WITH(REQ_PAY_SERVICE_NAME nvarchar(100),RECEIVE_ID_SERVICE varchar(15),RECEIVE_NAME_SERVICE nvarchar(100),REQ_PAY_REASON_SERVICE nvarchar(MAX),
835
			TOTAL_AMT_SERVICE decimal(18,2),REQ_PAY_TYPE_SERVICE varchar(1),REQ_PAY_DESC_SERVICE nvarchar(MAX),REQ_PAY_ENTRIES_SERVICE nvarchar(MAX), 
836
			DEPT_ID VARCHAR(15),CURRENCY VARCHAR(15), RATE DECIMAL(18,2))
837
		-- BEGIN CURSOR THONG TIN CAC DICH VU THANH TOAN
838
			OPEN XmlDataService
839
			FETCH NEXT FROM XmlDataService INTO @REQ_PAY_SERVICE_NAME,@RECEIVE_ID_SERVICE,@RECEIVE_NAME_SERVICE,@REQ_PAY_REASON_SERVICE,@TOTAL_AMT_SERVICE,
840
			@REQ_PAY_TYPE_SERVICE,@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@DEPT_ID_SRV,@CURRENCY,@RATE
841
			WHILE @@fetch_status=0 
842
			BEGIN
843
				SET @INDEX = @INDEX +1
844
				SET @SUM_TTCT_LINK =(SELECT SUM(TOTAL_AMT*ISNULL(RATE,1)) FROM TR_REQ_PAY_SERVICE WHERE
845
						REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT) AND REQ_PAY_ID <> @p_REQ_PAY_ID AND EMP_ID =@RECEIVE_ID_SERVICE)
846
				SET @SUM_PYCMS_LINK =ISNULL((SELECT SUM(TOTAL_AMT) FROM TR_REQUEST_DOC WHERE PL_REQ_ID =@RECEIVE_ID_SERVICE),0)
847
				SET @SUM_TT_CT =(SELECT ISNULL(TOTAL_AMT,0) FROM PL_REQUEST_DOC WHERE REQ_ID =@RECEIVE_ID_SERVICE)
848
				SET @PYCMS_CODE_LIST = (select STUFF( (select '; ' + DTA.REQ_CODE FROM TR_REQUEST_DOC DTA WHERE PL_REQ_ID =@RECEIVE_ID_SERVICE
849
				FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))
850
				SET @PYCMS_CODE_DRAFT_LIST = (select STUFF( (select '; ' + DTA.REQ_CODE FROM TR_REQUEST_DOC DTA WHERE PL_REQ_ID =@RECEIVE_ID_SERVICE AND AUTH_STATUS = 'E'
851
				FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))
852
				SET @PDNTT_CODE_LIST = (select STUFF( (select '; ' + DTA.REQ_PAY_CODE FROM TR_REQ_PAYMENT DTA WHERE REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAY_SERVICE WHERE EMP_ID =@RECEIVE_ID_SERVICE) AND REQ_PAY_ID <> @p_REQ_PAY_ID
853
				FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))
854
			--------------- BEGIN VALIDATE --------------
855
				IF(@p_TYPE_FUNCTION ='SEND')
856
				BEGIN
857
					IF(@DEPT_ID_SRV IS NULL OR @DEPT_ID_SRV ='')
858
					BEGIN
859
						ROLLBACK TRANSACTION
860
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin các dịch vụ thanh toán, dòng '+ CONVERT(VARCHAR(5),@INDEX)+ N': Phòng ban chịu chi phí không được để trống' ErrorDesc
861
						RETURN '-1'
862
					END	
863
				
864
					IF(@TOTAL_AMT_SERVICE IS NULL)
865
					BEGIN
866
						ROLLBACK TRANSACTION
867
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin các dịch vụ thanh toán, dòng '+ CONVERT(VARCHAR(5),@INDEX)+ N': Số tiền thanh toán không được để trống' ErrorDesc
868
						RETURN '-1'
869
					END
870
				
871
					IF(@TOTAL_AMT_SERVICE < 0)
872
					BEGIN
873
						ROLLBACK TRANSACTION
874
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin các dịch vụ thanh toán, dòng '+ CONVERT(VARCHAR(5),@INDEX)+ N': Số tiền thanh toán không thể nhỏ hơn 0' ErrorDesc
875
						RETURN '-1'
876
					END
877

    
878
					IF(((ISNULL(@SUM_TTCT_LINK,0) +ISNULL(@SUM_PYCMS_LINK,0) + ISNULL(@TOTAL_AMT_SERVICE,0)) > ISNULL(@SUM_TT_CT,0)) AND @RECEIVE_ID_SERVICE IS NOT NULL AND @RECEIVE_ID_SERVICE <> '')
879
					BEGIN
880
						ROLLBACK TRANSACTION
881
						SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE,
882
						N'Dòng '+ CONVERT(VARCHAR(5),@INDEX)+N': Thông tin chi tiết về hạn mức sử dụng của tờ trình số: '+(SELECT TOP 1 ISNULL(REQ_CODE,'') FROM PL_REQUEST_DOC WHERE REQ_ID =@RECEIVE_ID_SERVICE)+N' như sau:'
883
						+ CHAR(10) + 
884
						N'</br>* Số tiền các phiếu yêu cầu mua sắm số:'+ISNULL(@PYCMS_CODE_LIST,'')+N' đã sử dụng: '+FORMAT(ISNULL(@SUM_PYCMS_LINK,0),'#,#', 'vi-VN') +' VND'+
885
						+ CHAR(10) + 
886
						N'</br>* Số tiền ở các phiếu thanh toán số: '+ISNULL(@PDNTT_CODE_LIST,'')+N' đã sử dụng: '+ FORMAT(ISNULL(@SUM_TTCT_LINK,0),'#,#', 'vi-VN') +' VND'
887
						+ CHAR(10) + 
888
						N'</br>* Bạn đang thanh toán cho phiếu này với số tiền: '+ FORMAT(ISNULL(@TOTAL_AMT_SERVICE,0),'#,#', 'vi-VN') +' VND'
889
						+ CHAR(10) + 
890
						N'</br>* Số tiền còn lại được phép thanh toán là: '+FORMAT(ISNULL(@SUM_TT_CT,0) -ISNULL(@SUM_TTCT_LINK,0) -ISNULL(@SUM_PYCMS_LINK,0),'#,#', 'vi-VN') +' VND'  
891
						+ CHAR(10) + 
892
						N'</br>* Chú ý những PYCMS sau đang lưu nháp & ăn ngân sách, vui lòng kiểm tra và xóa PYCMS: ' + ISNULL(@PYCMS_CODE_DRAFT_LIST,'') ErrorDesc
893
						RETURN '-1'
894
					END
895
				END
896
			--------------- END VALIDATE ----------------
897
				--IF(@RECEIVE_ID_SERVICE IS NOT NULL AND @RECEIVE_ID_SERVICE <> '')
898
				--BEGIN
899
				--	SET @SUM_PYCMS_LINK = @SUM_PYCMS_LINK +@TOTAL_AMT_SERVICE
900
				--END
901
				--SET @SUM_KUY_KE_TT = @SUM_KUY_KE_TT + @TOTAL_AMT_SERVICE
902
				
903
				DECLARE @p_REQ_PAY_SERVICE_ID VARCHAR(15);
904
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SERVICE', @p_REQ_PAY_SERVICE_ID OUT;
905
				IF @p_REQ_PAY_SERVICE_ID='' OR @p_REQ_PAY_SERVICE_ID IS NULL GOTO ABORT;
906
				INSERT INTO TR_REQ_PAY_SERVICE(SERVICE_ID,REQ_PAY_ID,[SERVICE_NAME],EMP_ID,REQ_PAY_REASON,TOTAL_AMT,REQ_PAY_TYPE,REQ_PAY_DESC,REQ_PAY_ENTRIES,MAKER_ID,CREATE_DT,DEPT_ID,CURRENCY,RATE)
907
				VALUES (@p_REQ_PAY_SERVICE_ID,@p_REQ_PAY_ID,@REQ_PAY_SERVICE_NAME,@RECEIVE_ID_SERVICE,@REQ_PAY_REASON_SERVICE,@TOTAL_AMT_SERVICE,
908
				@REQ_PAY_TYPE_SERVICE,@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@p_MAKER_ID,GETDATE(),@DEPT_ID_SRV, @p_REQ_TYPE_CURRENCY , @p_RATE)
909
			IF @@error<>0 GOTO ABORT;
910
			FETCH NEXT FROM XmlDataService INTO @REQ_PAY_SERVICE_NAME,@RECEIVE_ID_SERVICE,@RECEIVE_NAME_SERVICE,@REQ_PAY_REASON_SERVICE,@TOTAL_AMT_SERVICE,@REQ_PAY_TYPE_SERVICE,
911
			@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@DEPT_ID_SRV,@CURRENCY,@RATE
912
			END
913
			CLOSE XmlDataService;
914
			DEALLOCATE XmlDataService;
915
		-- BEGIN CURSOR THONG TIN CAC DICH VU THANH TOAN
916
		END
917
		IF((@p_REQ_TYPE = 'P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR (@p_REQ_TYPE = 'P' AND @p_IS_PERIOD = 'Y') OR @p_REQ_TYPE ='I')
918
		BEGIN
919
			DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID= @p_REQ_PAY_ID
920
			DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID= @p_REQ_PAY_ID
921
		END
922
	-- NEU LA THANH TOAN PO HOP DONG
923
		IF((@p_REQ_TYPE = 'P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE ='I')
924
		BEGIN
925
		-- DELETE
926
			--DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID= @p_REQ_PAY_ID
927
			/*
928
			IF(@p_REQ_TYPE = 'P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL))
929
			BEGIN
930
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID= @p_REQ_PAY_ID
931
			END
932
			*/
933
		-- DECLARE
934
			DECLARE @INDEX_PO INT, @REF_ID VARCHAR(15),@IS_CLOSED VARCHAR(1)
935
		--SET
936
			SET @INDEX_PO = 0
937
		-- DECLARE CURSOR
938
			DECLARE XmlDataPO CURSOR FOR SELECT * FROM OPENXML(@hdocPO, '/Root/XmlDataPO', 2)
939
			WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
940
		-- BEGIN CURSOR THÔNG TIN PO/ HOP DONG
941
			OPEN XmlDataPO;
942
			FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
943
			WHILE @@fetch_status=0 
944
			BEGIN
945
			-- SET
946
				SET @INDEX_PO = @INDEX_PO +1
947
			-- BEGIN VALIDATE
948
				IF(@p_TYPE_FUNCTION ='SEND') 
949
				BEGIN
950
					DECLARE @PDN_TAMUNG_LIST VARCHAR(4000) --- LUCTV 19.10.2022
951
					-- KIEM TRA PO DUOC DUYET HAY CHUA
952
					--IF(EXISTS(SELECT * FROM TR_PO_MASTER WHERE PO_ID =@REF_ID AND AUTH_STATUS <>'A'))
953
					--BEGIN
954
					--ROLLBACK TRANSACTION
955
					--	SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin PO/ hợp đồng, dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
956
					--	(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' chưa được phê duyệt. Vui lòng phê duyệt PO trước khi tạo phiếu thanh toán' ErrorDesc
957
					--	RETURN '-1'
958
					--END
959
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
960
					--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='C' 
961
					--AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
962
					--BEGIN
963
					--	ROLLBACK TRANSACTION
964
					--	SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Thông tin PO/ hợp đồng, dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
965
					--	(SELECT CONTRACT_ID FROM TR_CONTRACT WHERE CONTRACT_ID = @REF_ID)+N' đang được tạm ứng. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
966
					--	RETURN '-1'
967
					--END
968
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
969
					--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='C'
970
					--AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL) AND REQ_PAY_ID <>@p_REQ_PAY_ID))
971
					--BEGIN
972
					--	ROLLBACK TRANSACTION
973
					--	SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin PO/ hợp đồng, dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
974
					--	(SELECT CONTRACT_ID FROM TR_CONTRACT WHERE CONTRACT_ID = @REF_ID)+N' đang được thanh toán. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
975
					--	RETURN '-1'
976
					--END
977
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
978
					--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P' 
979
					--AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT NOT IN ('A','E','R') OR AUTH_STATUS_KT IS NULL)))
980
					--BEGIN
981
					--	ROLLBACK TRANSACTION
982
					--	SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Thông tin PO/ hợp đồng, dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N':PO số '+
983
					--	(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đang được tạm ứng. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
984
					--	RETURN '-1'
985
					--END
986
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
987
					--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P' AND REF_ID IN (SELECT PO_ID FROM TR_PO_MASTER WHERE IS_CLOSED='Y')))
988
					--BEGIN
989
					--	ROLLBACK TRANSACTION
990
					--	SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin PO/ hợp đồng, dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
991
					--	(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đã được thanh toán xong. Vui lòng chọn PO khác để tạm ứng hoặc xóa bản nháp này' ErrorDesc
992
					--	RETURN '-1'
993
					--END
994
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
995
						--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='C' AND REQ_PAY_ID 
996
						--IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
997
						--BEGIN
998
						--	ROLLBACK TRANSACTION
999
						--	SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
1000
						--	(SELECT CONTRACT_ID FROM TR_CONTRACT WHERE CONTRACT_ID = @REF_ID)+N' đang được tạm ứng. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
1001
						--	RETURN '-1'
1002
						--END
1003
						---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1004
						--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='C' AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL) AND REQ_PAY_ID <>@p_REQ_PAY_ID))
1005
						--BEGIN
1006
						--	ROLLBACK TRANSACTION
1007
						--	SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
1008
						--	(SELECT CONTRACT_ID FROM TR_CONTRACT WHERE CONTRACT_ID = @REF_ID)+N' đang được thanh toán. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
1009
						--	RETURN '-1'
1010
						--END
1011
						--IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REF_ID =@REF_ID AND PAY_ID =@PAY_ID AND 
1012
						--			REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL) AND REQ_PAY_ID <>@p_REQ_PAY_ID))
1013
						--BEGIN
1014
						--	ROLLBACK TRANSACTION
1015
						--	SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
1016
						--	(SELECT CONTRACT_ID FROM TR_CONTRACT WHERE CONTRACT_ID = @REF_ID)+N' đang được thanh toán. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
1017
						--	RETURN '-1'
1018
						--END
1019
						-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1020
						SET @PDN_TAMUNG_LIST = (select STUFF( (select '; ' + DTA.REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT DTA WHERE REQ_PAY_ID IN 
1021
						(SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P') AND ISNULL(AUTH_STATUS_KT,'') NOT IN ('A','E','R')
1022
						FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))
1023
						--- VALIDATE PO DANG TRONG QUA TRINH TAM UNG
1024
						IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P' AND REQ_PAY_ID 
1025
						IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT NOT IN ('A','E','R') OR AUTH_STATUS_KT IS NULL)))
1026
						BEGIN
1027
							ROLLBACK TRANSACTION
1028
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N':PO số '+
1029
							(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đang được tạm ứng. Vui lòng đợi giao dịch hoàn tất.Danh sách phiếu tạm ứng đang sử dụng: '+ ISNULL(@PDN_TAMUNG_LIST,'') ErrorDesc
1030
							RETURN '-1'
1031
						END
1032
						-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1033
						IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P' AND REF_ID IN (SELECT PO_ID FROM TR_PO_MASTER WHERE IS_CLOSED='Y')))
1034
						BEGIN
1035
							ROLLBACK TRANSACTION
1036
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1037
							(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đã được thanh toán xong. Vui lòng chọn PO khác để tạm ứng hoặc xóa bản nháp này' ErrorDesc
1038
							RETURN '-1'
1039
						END
1040
				END
1041
			-- END VALIDATE
1042
				DECLARE @REQ_PAYDTID VARCHAR(15);
1043
				EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
1044
				IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
1045
				IF(LEFT(@REF_ID, 3) = 'TRC')
1046
				BEGIN
1047
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) 
1048
					VALUES (@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED, 'C')
1049
				END
1050
				ELSE
1051
				BEGIN
1052
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) 
1053
					VALUES (@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED, 'P')
1054
				END
1055
				
1056
			IF @@error<>0 GOTO ABORT;
1057
			FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1058
			END
1059
			CLOSE XmlDataPO;
1060
			DEALLOCATE XmlDataPO;
1061
		-- END CURSOR THÔNG TIN PO/ HOP DONG
1062

    
1063
		-- DELETE
1064
			DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1065
		-- DECLARE
1066
			DECLARE @PO_ID VARCHAR(15), @PAY_PHASE NVARCHAR(250), @AMT_ADVANCE DECIMAL(18,2),
1067
			@REQ_AD_DT VARCHAR(20),@PROCESS VARCHAR(15),@PAY_ID VARCHAR(15),@AMT_PAY_DO DECIMAL(18,2),@AMT_PAY_REAL DECIMAL(18,2)
1068
		-- DECLARE CURSOR THONG TIN CHI TIET LICH THANH TOAN PO/ HOP DONG
1069
			DECLARE XmlDataSchedule CURSOR FOR SELECT * FROM OPENXML(@hdocSchedule, 'Root/XmlDataSchedule',2)
1070
			WITH(PO_ID VARCHAR(15),PAY_PHASE VARCHAR(15),AMT_PAY DECIMAL(18,2),REQ_ADV_ID VARCHAR(15), AMT_ADVANCE DECIMAL(18,2),
1071
			AMT_REMAIN DECIMAL(18,2),REQ_AD_DT VARCHAR(20),PROCESS VARCHAR(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),REQ_PAY_DESC NVARCHAR(250),
1072
			REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),AMT_PAY_DO DECIMAL(18,2),AMT_PAY_REAL DECIMAL(18,2))
1073
		-- BEGIN CURSOR THONG TIN CHI TIET LICH THANH TOAN PO/ HOP DONG 
1074
			OPEN XmlDataSchedule
1075
			SET @INDEX_PO = 0
1076
			FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@PAY_PHASE,@AMT_PAY, @REQ_ADV_ID,@AMT_ADVANCE,@AMT_REMAIN,@REQ_AD_DT,
1077
			@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_DO,@AMT_PAY_REAL
1078
			WHILE @@fetch_status=0 
1079
			BEGIN
1080
				--IF(@AMT_REMAIN =0)
1081
				--BEGIN
1082
				--	SET @PROCESS ='3'
1083
				--END
1084
				--IF(@PROCESS <>'2')
1085
				--BEGIN
1086
				--	SET @TOTAL_SCHEDULE_AMT = @TOTAL_SCHEDULE_AMT +@AMT_REMAIN
1087
				--END
1088
				SET @INDEX_PO = @INDEX_PO +1
1089
				SET @TOTAL_SCHEDULE_AMT = @TOTAL_SCHEDULE_AMT +(@AMT_PAY - @AMT_ADVANCE -@AMT_PAY_DO)
1090
			-- BEGIN VALIDATE
1091
				IF(@p_TYPE_FUNCTION ='SEND' AND @p_REQ_TYPE ='P')
1092
				BEGIN
1093
					IF(ISNULL(@AMT_PAY_REAL,0) < ISNULL(@AMT_ADVANCE ,0))
1094
					BEGIN
1095
						ROLLBACK TRANSACTION
1096
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Số tiền thanh toán thực tế tối thiểu phải bằng số tiền đã tạm ứng : ' +FORMAT(SUM(@AMT_ADVANCE),'#,#', 'vi-VN')  ErrorDesc
1097
						RETURN '-1'
1098
					END
1099
				END
1100
			-- END VALIDATE
1101
				DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
1102
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
1103
				IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
1104

    
1105
				INSERT INTO TR_REQ_PAY_SCHEDULE (SCHEDULE_ID,REQ_PAY_ID,PAY_ID,AMT_PAY,PAY_PHASE,REQ_ADV_ID,AMT_ADVANCE,AMT_PAY_DO,AMT_REMAIN,REQ_PAY_DT,REQ_AD_DT,PROCESS,MAKER_ID,
1106
				CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE, AMT_PAY_REAL)
1107
				VALUES (@p_REQ_PAY_SCHEDULE_ID,@p_REQ_PAY_ID,@PAY_ID, @AMT_PAY, @PAY_PHASE, @REQ_ADV_ID, @AMT_ADVANCE, @AMT_PAY_DO, @AMT_REMAIN,
1108
				--IIF(@PROCESS<>'2',(@AMT_PAY-@AMT_ADVANCE),0),
1109
				GETDATE(),CONVERT(DATETIME,@REQ_AD_DT,103),@PROCESS,@p_MAKER_ID,GETDATE(),'U','','PAY',@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES, @p_REQ_TYPE_CURRENCY , @p_RATE,@AMT_PAY_REAL)
1110
			IF @@error<>0 GOTO ABORT;
1111
			FETCH NEXT FROM XmlDataSchedule INTO @PO_ID, @PAY_PHASE, @AMT_PAY, @REQ_ADV_ID, @AMT_ADVANCE,@AMT_REMAIN,@REQ_AD_DT,
1112
			@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_DO,@AMT_PAY_REAL
1113
			END
1114
			CLOSE XmlDataSchedule;
1115
			DEALLOCATE XmlDataSchedule;
1116
		-- END CURSOR THONG TIN CHI TIET LICH THANH TOAN PO/ HOP DONG 
1117
			---- VALIDATE SO TIEN
1118
			--IF(@p_REQ_AMT > ISNULL(@TOTAL_SCHEDULE_AMT,0))
1119
			--BEGIN
1120
			--	ROLLBACK TRANSACTION
1121
			--	SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền thanh toán phải nhỏ hơn hoặc bằng tổng số tiền còn lại cần thanh toán: '+  FORMAT(SUM(@TOTAL_SCHEDULE_AMT),'#,#', 'vi-VN') ErrorDesc
1122
			--	RETURN '-1'
1123
			--END
1124
	     ------
1125
		END
1126
	-- NEU LA THANH TOAN CAC HOP DONG DINH KY
1127
		IF((@p_REQ_TYPE = 'P' AND @p_IS_PERIOD = 'Y') OR @p_REQ_TYPE='I')
1128
		BEGIN
1129
		-- DELETE
1130
			--DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID= @p_REQ_PAY_ID
1131
			/*
1132
			IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD = 'Y')
1133
			BEGIN
1134
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID= @p_REQ_PAY_ID
1135
			END
1136
			*/
1137
		-- DECLARE
1138
			DECLARE @CONTRACT_PERIOD_ID VARCHAR(15),@IS_PERIOD_CLOSED VARCHAR(1), @DELIVERY_DT VARCHAR(20)
1139
		--DECLARE CURSOR THONG TIN HOP DONG DINH KY
1140
			DECLARE XmlDataRecurring CURSOR FOR SELECT * FROM OPENXML(@hdocRecurring, '/Root/XmlDataRecurring', 2)
1141
			WITH(CONTRACT_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15), DELIVERY_DT VARCHAR(20))
1142
		-- BEGIN CURSOR THONG TIN HOP DONG DINH KY
1143
			OPEN XmlDataRecurring;
1144
			FETCH NEXT FROM XmlDataRecurring INTO @CONTRACT_PERIOD_ID,@IS_PERIOD_CLOSED,@REF_TYPE, @DELIVERY_DT
1145
			WHILE @@fetch_status = 0 
1146
			BEGIN
1147
			-- SET
1148
				SET @INDEX_PO = @INDEX_PO +1
1149
			-- BEGIN VALIDATE
1150
				IF(@p_TYPE_FUNCTION ='SEND') 
1151
				BEGIN
1152
					IF(EXISTS(SELECT * FROM TR_PO_MASTER WHERE PO_ID =@REF_ID AND AUTH_STATUS <>'A'))
1153
					BEGIN
1154
						ROLLBACK TRANSACTION
1155
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1156
						(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' chưa được phê duyệt. Vui lòng phê duyệt PO trước khi tạo phiếu thanh toán' ErrorDesc
1157
						RETURN '-1'
1158
					END
1159

    
1160
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P' AND REQ_PAY_ID 
1161
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT NOT IN ('A','E','R') OR AUTH_STATUS_KT IS NULL)))
1162
					BEGIN
1163
						ROLLBACK TRANSACTION
1164
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N':PO số '+
1165
						(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đang được tạm ứng. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
1166
						RETURN '-1'
1167
					END
1168

    
1169
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1170
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P' AND REF_ID IN (SELECT PO_ID FROM TR_PO_MASTER WHERE IS_CLOSED='Y')))
1171
					BEGIN
1172
						ROLLBACK TRANSACTION
1173
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1174
						(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đã được thanh toán xong. Vui lòng chọn PO khác để tạm ứng hoặc xóa bản nháp này' ErrorDesc
1175
						RETURN '-1'
1176
					END
1177
				END
1178
			-- END VALIDATE
1179
				DECLARE @REQ_PAYDTID_PERIOD VARCHAR(15);
1180
				EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_PERIOD OUT;
1181
				IF @REQ_PAYDTID_PERIOD='' OR @REQ_PAYDTID_PERIOD IS NULL GOTO ABORT;
1182
				INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE, DELIVERY_DT) 
1183
				VALUES(@REQ_PAYDTID_PERIOD,@p_REQ_PAY_ID,@CONTRACT_PERIOD_ID,'PAY',@p_MAKER_ID,GETDATE(),@IS_PERIOD_CLOSED,'C', CONVERT(DATE,@DELIVERY_DT,103))
1184

    
1185
			IF @@error<>0 GOTO ABORT;
1186
			FETCH NEXT FROM XmlDataRecurring INTO @CONTRACT_PERIOD_ID,@IS_PERIOD_CLOSED,@REF_TYPE, @DELIVERY_DT
1187
			END
1188
			CLOSE XmlDataRecurring;
1189
			DEALLOCATE XmlDataRecurring;
1190
		-- END CURSOR THONG TIN HOP DONG DINH KY
1191

    
1192
		-- DECLARE
1193
			DECLARE @INDEX_PERIOD INT
1194
		--SET
1195
			SET @INDEX_PERIOD = 0
1196
		-- DELETE
1197
			DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1198
		-- DECLARE
1199
			DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5), @OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),@AMT_PAY_PERIOD DECIMAL(18,2), @FROM_DATE VARCHAR(20),
1200
			@TO_DATE VARCHAR(20),@AD_PAY_ID VARCHAR(15),  @_PROCESS VARCHAR(15),@PARENT_ID VARCHAR(15),@REASON_TTDK NVARCHAR(2000)
1201
		-- DECLARE CURSOR
1202
			DECLARE XmlDataPeriod CURSOR FOR SELECT * FROM OPENXML(@hdocPeriod, '/Root/XmlDataPeriod', 2)
1203
			WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5), OLD_INDEX DECIMAL(18,0),NEW_INDEX DECIMAL(18,0),AMT_PAY DECIMAL(18,2),CURRENCY VARCHAR(5), 
1204
			RATE DECIMAL(18,0),FROM_DATE VARCHAR(20), TO_DATE VARCHAR(20), AD_PAY_ID VARCHAR(15), PROCESS VARCHAR(5),PARENT_ID VARCHAR(15),PAY_PHASE NVARCHAR(250),REASON NVARCHAR(2000))
1205
		-- BEGIN CURSOR THONG TIN THANH TOAN HOP DONG DINH KY
1206
			OPEN XmlDataPeriod;
1207
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE, @OLD_INDEX , @NEW_INDEX , @AMT_PAY_PERIOD, @CURRENCY, @RATE, @FROM_DATE, @TO_DATE, @AD_PAY_ID, @_PROCESS, @PARENT_ID, 
1208
			@PAY_PHASE, @REASON_TTDK
1209
			WHILE @@fetch_status=0 
1210
			BEGIN
1211
			-- SET
1212
				SET @INDEX_PERIOD = @INDEX_PERIOD +1
1213
			-- BEGIN VALIDATE
1214
				IF(@p_TYPE_FUNCTION ='SEND') 
1215
				BEGIN
1216
					IF(@NEW_INDEX <=@OLD_INDEX AND (@NEW_INDEX >0 AND @OLD_INDEX >0) )
1217
					BEGIN
1218
						ROLLBACK TRANSACTION
1219
						SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PERIOD)+ N' lưới thông tin thanh toán hợp đồng định kì: Chỉ số mới phải lớn hơn chỉ số cũ' ErrorDesc
1220
						RETURN '-1'
1221
					END
1222
					-- NEU LÀ DINH KI THI HD PHAI KHAC NULL
1223
					IF(@CONTRACT_ID IS NULL OR @CONTRACT_ID ='' )
1224
					BEGIN
1225
						ROLLBACK TRANSACTION
1226
						SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PERIOD)+ N' lưới thông tin thanh toán hợp đồng định kì: Cột Số hợp đồng không được phép để trống' ErrorDesc
1227
						RETURN '-1'
1228
					END
1229
					-- KIEM TRA CHI TIET HOP DONG PHAI NAM TRONG DANH SACH CAC HOP DONG
1230
					IF(@CONTRACT_ID IS NOT NULL AND  @CONTRACT_ID <> '' )
1231
					BEGIN
1232
						IF(NOT EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REF_ID =@CONTRACT_ID))
1233
						BEGIN
1234
							ROLLBACK TRANSACTION
1235
							SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PERIOD)+ N' lưới thông tin thanh toán hợp đồng định kì - Số hợp đồng phải nằm trong danh sách các hợp đồng được chọn trên lưới Hợp đồng định kì' ErrorDesc
1236
							RETURN '-1'
1237
						END
1238
					END
1239
					
1240
					IF(ISNULL(@PARENT_ID, '') = '' AND @_PROCESS = '2')
1241
					BEGIN
1242
						ROLLBACK TRANSACTION
1243
						SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PERIOD)+ N' lưới thông tin thanh toán hợp đồng định kì: Không được để trống cột số phiếu tạm ứng.'
1244
						+ CHAR(10) + 
1245
						N'</br> Nếu hợp đồng định kỳ này có kỳ tạm ứng, vui lòng làm như sau để hoàn ứng: '
1246
						+ CHAR(10) + 
1247
						N'</br> Bước 1: Tại lưới thông tin hợp đồng định kỳ, xóa dòng hợp động kịnh kỳ cần hoàn ứng( hợp đồng có ID hợp đồng(hệ thống): ' + @CONTRACT_ID +
1248
						+ CHAR(10) + 
1249
						N'</br> Bước2: Tại lưới thông tin hợp đồng định kỳ, chọn lại hợp đồng cần hoàn ứng( hợp đồng có ID hợp đồng(hệ thống): ' + @CONTRACT_ID 
1250
						ErrorDesc
1251
						RETURN '-1'
1252
					END
1253
				END
1254
			-- END VALIDATE
1255
				DECLARE @PERIOD_ID VARCHAR(15);
1256
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
1257
				IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
1258
				INSERT INTO TR_REQ_PAY_PERIOD(PERIOD_ID,REQ_PAY_ID,PAY_TYPE, CONTRACT_ID,PAY_DT_REAL,OLD_INDEX,NEW_INDEX,AMT_PAY,AUTH_STATUS_KT,CURRENCY,RATE,FROM_DATE,
1259
				TO_DATE,AD_PAY_ID,PROCESS,PARENT_ID,PAY_PHASE,REASON)
1260
				VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103), @OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,'U', @p_REQ_TYPE_CURRENCY , @p_RATE,
1261
				CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK)
1262
			IF @@error<>0 GOTO ABORT;
1263
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE, @OLD_INDEX , @NEW_INDEX , @AMT_PAY_PERIOD, @CURRENCY, @RATE, @FROM_DATE, @TO_DATE, @AD_PAY_ID, @_PROCESS, @PARENT_ID, 
1264
			@PAY_PHASE, @REASON_TTDK
1265
			END
1266
			CLOSE XmlDataPeriod;
1267
			DEALLOCATE XmlDataPeriod;
1268
		END	
1269
	-- END CURSOR THONG TIN THANH TOAN HOP DONG DINH KY
1270
	
1271
--doanptt 15/02/2022		
1272
-- INSERT JOB
1273
-- DS PHIEU YEU CAU CONG TAC
1274
				DELETE FROM TR_REQ_PAY_JOB WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1275
				DECLARE @REQ_PAY_JOB_ID varchar(15) ,@REQ_PAY_ID varchar(15),@REQ_ID varchar(15), @REQ_CODE varchar(15), @MAKER_ID varchar(15),
1276
				@CREATE_DT varchar(15), @PAY_TYPE_J VARCHAR(5), @PAY_PHASE_J NVARCHAR(250), @PAY_AMT DECIMAL(18,0), @PAY_DESC NVARCHAR(1000)
1277
				, @AUTH_STATUS VARCHAR(1), @AUTH_STATUS_KT VARCHAR(1)
1278
				DECLARE XmlDataJob CURSOR LOCAL FOR
1279
				SELECT * FROM OPENXML(@hdocJob, 'Root/XmlDataJob',2) 
1280
				WITH(REQ_PAY_JOB_ID varchar(15) ,REQ_PAY_ID varchar(15),REQ_ID varchar(15), REQ_CODE varchar(15), MAKER_ID varchar(15),CREATE_DT varchar(15), PAY_TYPE VARCHAR(5), 
1281
				PAY_PHASE NVARCHAR(250), PAY_AMT DECIMAL(18,0), PAY_DESC NVARCHAR(1000), AUTH_STATUS VARCHAR(1), AUTH_STATUS_KT VARCHAR(1))
1282
				OPEN XmlDataJob
1283

    
1284
--- INSERT PHIEU YEU CAU CONG TAC
1285
				FETCH NEXT FROM XmlDataJob INTO @REQ_PAY_JOB_ID ,@REQ_PAY_ID ,@REQ_ID , @REQ_CODE, @MAKER_ID , @CREATE_DT , @PAY_TYPE_J , @PAY_PHASE_J , 
1286
				@PAY_AMT , @PAY_DESC, @AUTH_STATUS , @AUTH_STATUS_KT
1287
				WHILE @@fetch_status=0 
1288
				BEGIN
1289
				/*--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
1290
					SET @INDEX_NS = @INDEX_NS +1
1291
					--KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1292
					IF(@p_TYPE_FUNCTION ='SEND')
1293
					BEGIN
1294
						IF(ISNULL(@AMT_EXE,0) =0)
1295
						BEGIN
1296
							ROLLBACK TRANSACTION
1297
								SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Số tiền sử dụng thực tế phải lớn hơn không.' ErrorDesc
1298
								RETURN '-1'
1299
						END
1300
						IF((@AMT_EXE  > @AMT_REMAIN_GD) AND ((SELECT GD_TYPE_ID FROM CM_GOODS WHERE GD_ID =@GD_ID) ='NS'))
1301
						BEGIN
1302
								ROLLBACK TRANSACTION
1303
								SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Ngân sách sử dụng thực tế không được vượt quá ngân sách còn lại.' ErrorDesc
1304
								RETURN '-1'
1305
						END		
1306
					END
1307
					IF(NOT EXISTS(SELECT * FROM PL_IMPORT_DT WHERE TRADE_ID =@TRADE_ID AND IMP_YEAR =YEAR(GETDATE()))
1308
						  AND NOT EXISTS (SELECT * FROM PL_MASTER WHERE PLAN_ID =(SELECT TOP 1 PLAN_ID FROM PL_TRADEDETAIL WHERE TRADE_ID =@TRADE_ID) AND YEAR =YEAR(GETDATE())))
1309
					BEGIN
1310
								ROLLBACK TRANSACTION
1311
								SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Ngân sách sử dụng phải chọn lại ngân sách của năm hiện tại. Không được phép sử dụng ngân sách năm cũ.' ErrorDesc
1312
								RETURN '-1'
1313
					END*/
1314

    
1315
					DECLARE @p_REQ_JOB_ID VARCHAR(15);
1316
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_JOB', @p_REQ_JOB_ID OUT;
1317
					IF @p_REQ_JOB_ID='' OR @p_REQ_JOB_ID IS NULL GOTO ABORT;
1318
					INSERT INTO TR_REQ_PAY_JOB(REQ_PAY_JOB_ID ,REQ_PAY_ID ,REQ_ID , REQ_CODE, MAKER_ID, CREATE_DT , PAY_TYPE , PAY_PHASE , PAY_AMT , PAY_DESC, AUTH_STATUS , AUTH_STATUS_KT)
1319
					VALUES (@p_REQ_JOB_ID ,@p_REQ_PAY_ID ,@REQ_ID , @REQ_CODE, @MAKER_ID , GETDATE() , @PAY_TYPE_J , @PAY_PHASE_J , @PAY_AMT , @PAY_DESC, @AUTH_STATUS , @AUTH_STATUS_KT)
1320
					IF @@error<>0 GOTO ABORT;
1321
					FETCH NEXT FROM XmlDataJob INTO @REQ_PAY_JOB_ID ,@REQ_PAY_ID ,@REQ_ID , @REQ_CODE, @MAKER_ID , @CREATE_DT , @PAY_TYPE_J , @PAY_PHASE_J, @PAY_AMT , @PAY_DESC, @AUTH_STATUS , @AUTH_STATUS_KT
1322
				END;
1323
				CLOSE XmlDataJob;
1324
				DEALLOCATE XmlDataJob;
1325
--- END INSERT PHIEU YEU CAU CONG TAC
1326

    
1327
-- INSERT JOB DT 
1328
-- DS CHI TIET PHIEU YEU CAU CONG TAC
1329
				DELETE FROM TR_REQ_PAY_JOB_DT WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1330
				DECLARE @REQ_PAY_JOB_DT_ID varchar(15) , @REQ_PAY_ID_DT varchar(15), @REQ_ID_DT varchar(15), @REQ_CODE_DT varchar(15), @MAKER_ID_DT varchar(15),
1331
				@CREATE_DT_DT varchar(15), @FULLNAME_DT NVARCHAR(250), @TLNAME_DT VARCHAR(15), @JOB_PLACE_DT VARCHAR(15), @FRMDATE_DT VARCHAR(15), @TODATE_DT VARCHAR(15),
1332
				@NUMBER_DAY_DT decimal(18,0), @DAY_RATE_DT decimal(18,0), @JOB_COST_DT decimal(18,0), @TYPE_TRANS_DT varchar(250), @COST_MOVE_DT decimal(18,0), 
1333
				@COST_RESIDENCE_DT decimal(18,0), @COST_OTHER_DT decimal(18,0), @COST_AMT_DT decimal(18,0), @AUTH_STATUS_DT VARCHAR(1), @AUTH_STATUS_KT_DT VARCHAR(1)
1334
				DECLARE XmlDataJobDT CURSOR LOCAL FOR
1335
				SELECT * FROM OPENXML(@hdocJobDT, 'Root/XmlDataJobDT',2) 
1336
				WITH(REQ_PAY_JOB_DT_ID varchar(15), REQ_PAY_ID varchar(15), REQ_ID varchar(15), REQ_CODE varchar(15), MAKER_ID varchar(15), CREATE_DT varchar(15), 
1337
				FULLNAME nvarchar(250), TLNAME_DT VARCHAR(15), JOB_PLACE varchar(15), FRMDATE varchar(15), TODATE varchar(15),NUMBER_DAY decimal(18,0), DAY_RATE decimal(18,0), 
1338
				JOB_COST decimal(18,0), TYPE_TRANS varchar(15), COST_MOVE decimal(18,0), COST_RESIDENCE decimal(18,0), COST_OTHER decimal(18,0), COST_AMT decimal(18,0) , 
1339
				AUTH_STATUS varchar(1), AUTH_STATUS_KT varchar(1)) 
1340
				OPEN XmlDataJobDT
1341

    
1342
--- INSERT CHI TIÊT PHIEU YEU CAU CONG TAC
1343
				FETCH NEXT FROM XmlDataJobDT INTO @REQ_PAY_JOB_DT_ID , @REQ_PAY_ID_DT, @REQ_ID_DT, @REQ_CODE_DT, @MAKER_ID_DT,
1344
				@CREATE_DT_DT , @FULLNAME_DT , @TLNAME_DT, @JOB_PLACE_DT , @FRMDATE_DT , @TODATE_DT ,
1345
				@NUMBER_DAY_DT, @DAY_RATE_DT , @JOB_COST_DT , @TYPE_TRANS_DT , @COST_MOVE_DT, 
1346
				@COST_RESIDENCE_DT, @COST_OTHER_DT , @COST_AMT_DT , @AUTH_STATUS_DT, @AUTH_STATUS_KT_DT
1347
				WHILE @@fetch_status=0 
1348
				BEGIN
1349
				/*--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
1350
					SET @INDEX_NS = @INDEX_NS +1
1351
					--KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1352
					IF(@p_TYPE_FUNCTION ='SEND')
1353
					BEGIN
1354
						IF(ISNULL(@AMT_EXE,0) =0)
1355
						BEGIN
1356
							ROLLBACK TRANSACTION
1357
								SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Số tiền sử dụng thực tế phải lớn hơn không.' ErrorDesc
1358
								RETURN '-1'
1359
						END
1360
						IF((@AMT_EXE  > @AMT_REMAIN_GD) AND ((SELECT GD_TYPE_ID FROM CM_GOODS WHERE GD_ID =@GD_ID) ='NS'))
1361
						BEGIN
1362
								ROLLBACK TRANSACTION
1363
								SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Ngân sách sử dụng thực tế không được vượt quá ngân sách còn lại.' ErrorDesc
1364
								RETURN '-1'
1365
						END		
1366
					END
1367
					IF(NOT EXISTS(SELECT * FROM PL_IMPORT_DT WHERE TRADE_ID =@TRADE_ID AND IMP_YEAR =YEAR(GETDATE()))
1368
						  AND NOT EXISTS (SELECT * FROM PL_MASTER WHERE PLAN_ID =(SELECT TOP 1 PLAN_ID FROM PL_TRADEDETAIL WHERE TRADE_ID =@TRADE_ID) AND YEAR =YEAR(GETDATE())))
1369
					BEGIN
1370
								ROLLBACK TRANSACTION
1371
								SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Ngân sách sử dụng phải chọn lại ngân sách của năm hiện tại. Không được phép sử dụng ngân sách năm cũ.' ErrorDesc
1372
								RETURN '-1'
1373
					END*/
1374

    
1375
					DECLARE @p_REQ_JOB_DT_ID VARCHAR(15);
1376
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_JOB_DT', @p_REQ_JOB_DT_ID OUT;
1377
					IF @p_REQ_JOB_DT_ID='' OR @p_REQ_JOB_DT_ID IS NULL GOTO ABORT;
1378
					INSERT INTO TR_REQ_PAY_JOB_DT(REQ_PAY_JOB_DT_ID , REQ_PAY_ID , REQ_ID , REQ_CODE, MAKER_ID , CREATE_DT , FULLNAME, TLNAME, JOB_PLACE , FRMDATE , TODATE ,NUMBER_DAY , DAY_RATE , 
1379
													JOB_COST , TYPE_TRANS , COST_MOVE , COST_RESIDENCE , COST_OTHER , COST_AMT , AUTH_STATUS, AUTH_STATUS_KT)
1380
					VALUES (@p_REQ_JOB_DT_ID , @p_REQ_PAY_ID, @REQ_ID_DT, @REQ_CODE_DT, @MAKER_ID_DT,
1381
							GETDATE() , @FULLNAME_DT ,@TLNAME_DT, @JOB_PLACE_DT , CONVERT(DATE,@FRMDATE_DT,103) , CONVERT(DATE,@TODATE_DT,103) ,
1382
							@NUMBER_DAY_DT, @DAY_RATE_DT , @JOB_COST_DT , @TYPE_TRANS_DT , @COST_MOVE_DT, 
1383
							@COST_RESIDENCE_DT, @COST_OTHER_DT , @COST_AMT_DT , @AUTH_STATUS_DT, @AUTH_STATUS_KT_DT)
1384
					IF @@error<>0 GOTO ABORT;
1385
					FETCH NEXT FROM XmlDataJobDT INTO @REQ_PAY_JOB_DT_ID , @REQ_PAY_ID_DT, @REQ_ID_DT, @REQ_CODE_DT, @MAKER_ID_DT,
1386
									@CREATE_DT_DT , @FULLNAME_DT , @TLNAME_DT, @JOB_PLACE_DT , @FRMDATE_DT , @TODATE_DT ,
1387
									@NUMBER_DAY_DT, @DAY_RATE_DT , @JOB_COST_DT , @TYPE_TRANS_DT , @COST_MOVE_DT, 
1388
									@COST_RESIDENCE_DT, @COST_OTHER_DT , @COST_AMT_DT , @AUTH_STATUS_DT, @AUTH_STATUS_KT_DT
1389
				END;
1390
				CLOSE XmlDataJobDT;
1391
				DEALLOCATE XmlDataJobDT;
1392
--- END INSERT CHI TIET PHIEU YEU CAU CONG TAC
1393

    
1394

    
1395
--doanptt 17/02/2022		
1396
-- INSERT DRIVE
1397
-- DS PHIEU YEU CAU CONG TAC
1398
				DELETE FROM TR_REQ_PAY_DRIVE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1399
				DECLARE @REQ_PAY_DRIVE_ID varchar(15), @CAR_ID varchar(15), @CAR_PLATE varchar(15), @RATE_GAS_100KM decimal(18,0), @CAR_TYPE NVARCHAR(150)
1400
				DECLARE XmlDataDrive CURSOR LOCAL FOR
1401
				SELECT * FROM OPENXML(@hdocDrive, 'Root/XmlDataDrive',2) 
1402
				WITH(REQ_PAY_DRIVE_ID varchar(15) ,REQ_PAY_ID varchar(15), CAR_ID varchar(15), CAR_PLATE varchar(15), MAKER_ID varchar(15),CREATE_DT varchar(15), PAY_TYPE VARCHAR(5), 
1403
				PAY_PHASE NVARCHAR(250), PAY_AMT DECIMAL(18,0), PAY_DESC NVARCHAR(1000), AUTH_STATUS VARCHAR(1), AUTH_STATUS_KT VARCHAR(1), 
1404
				RATE_GAS_100KM decimal(18,0), CAR_TYPE NVARCHAR(150))
1405
				OPEN XmlDataDrive
1406

    
1407
--- INSERT PHIEU YEU CAU CONG TAC
1408
				FETCH NEXT FROM XmlDataDrive INTO @REQ_PAY_DRIVE_ID ,@REQ_PAY_ID ,@CAR_ID , @CAR_PLATE, @MAKER_ID , @CREATE_DT , @PAY_TYPE , @PAY_PHASE, 
1409
				@PAY_AMT , @PAY_DESC, @AUTH_STATUS , @AUTH_STATUS_KT, @RATE_GAS_100KM, @CAR_TYPE
1410
				WHILE @@fetch_status=0 
1411
				BEGIN
1412
				/*--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
1413
					SET @INDEX_NS = @INDEX_NS +1
1414
					--KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1415
					IF(@p_TYPE_FUNCTION ='SEND')
1416
					BEGIN
1417
						IF(ISNULL(@AMT_EXE,0) =0)
1418
						BEGIN
1419
							ROLLBACK TRANSACTION
1420
								SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Số tiền sử dụng thực tế phải lớn hơn không.' ErrorDesc
1421
								RETURN '-1'
1422
						END
1423
						IF((@AMT_EXE  > @AMT_REMAIN_GD) AND ((SELECT GD_TYPE_ID FROM CM_GOODS WHERE GD_ID =@GD_ID) ='NS'))
1424
						BEGIN
1425
								ROLLBACK TRANSACTION
1426
								SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Ngân sách sử dụng thực tế không được vượt quá ngân sách còn lại.' ErrorDesc
1427
								RETURN '-1'
1428
						END		
1429
					END
1430
					IF(NOT EXISTS(SELECT * FROM PL_IMPORT_DT WHERE TRADE_ID =@TRADE_ID AND IMP_YEAR =YEAR(GETDATE()))
1431
						  AND NOT EXISTS (SELECT * FROM PL_MASTER WHERE PLAN_ID =(SELECT TOP 1 PLAN_ID FROM PL_TRADEDETAIL WHERE TRADE_ID =@TRADE_ID) AND YEAR =YEAR(GETDATE())))
1432
					BEGIN
1433
								ROLLBACK TRANSACTION
1434
								SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Ngân sách sử dụng phải chọn lại ngân sách của năm hiện tại. Không được phép sử dụng ngân sách năm cũ.' ErrorDesc
1435
								RETURN '-1'
1436
					END*/
1437

    
1438
					DECLARE @p_REQ_DRIVE_ID VARCHAR(15);
1439
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_DRIVE', @p_REQ_DRIVE_ID OUT;
1440
					IF @p_REQ_DRIVE_ID='' OR @p_REQ_DRIVE_ID IS NULL GOTO ABORT;
1441
					INSERT INTO TR_REQ_PAY_DRIVE(REQ_PAY_DRIVE_ID ,REQ_PAY_ID ,CAR_ID , CAR_PLATE , MAKER_ID, CREATE_DT , PAY_TYPE , PAY_PHASE , PAY_AMT , PAY_DESC, AUTH_STATUS , AUTH_STATUS_KT, RATE_GAS_100KM, CAR_TYPE)
1442
					VALUES (@p_REQ_DRIVE_ID ,@p_REQ_PAY_ID ,@CAR_ID , @CAR_PLATE, @MAKER_ID , GETDATE() , @PAY_TYPE , @PAY_PHASE , @PAY_AMT , @PAY_DESC, @AUTH_STATUS , @AUTH_STATUS_KT, @RATE_GAS_100KM, @CAR_TYPE)
1443
					IF @@error<>0 GOTO ABORT;
1444
					FETCH NEXT FROM XmlDataDrive INTO @REQ_PAY_DRIVE_ID ,@REQ_PAY_ID ,@CAR_ID , @CAR_PLATE, @MAKER_ID , @CREATE_DT , @PAY_TYPE , @PAY_PHASE, 
1445
					@PAY_AMT , @PAY_DESC, @AUTH_STATUS , @AUTH_STATUS_KT, @RATE_GAS_100KM, @CAR_TYPE
1446
				END;
1447
				CLOSE XmlDataDrive;
1448
				DEALLOCATE XmlDataDrive;
1449
--- END INSERT PHIEU YEU CAU CONG TAC
1450

    
1451
-- INSERT DRIVE DT 
1452
-- DS CHI TIET PHIEU YEU CAU CONG TAC
1453
				DELETE FROM TR_REQ_PAY_DRIVE_DT WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1454
				DECLARE @REQ_PAY_DRIVE_DT_ID varchar(15), @FULLNAME NVARCHAR(250), @BRANCH_REQ VARCHAR(15), 
1455
				@KM_START decimal(18,2), @KM_END varchar(250), @KM_USED decimal(18,2), 
1456
				@RATE_GAS decimal(18,2), @REAL_GAS decimal(18,2), @REDUNDANCY_GAS decimal(18,2), @INVENTORY_GAS decimal(18,2), @COST_INCURRED decimal(18,2),
1457
				@CREATE_SCHEDULE NVARCHAR(250), @TRUONGDONVI VARCHAR(15)
1458
				DECLARE XmlDataDriveDT CURSOR LOCAL FOR
1459
				SELECT * FROM OPENXML(@hdocDriveDT, 'Root/XmlDataDriveDT',2) 
1460
				WITH(REQ_PAY_DRIVE_ID varchar(15), REQ_PAY_ID varchar(15), CAR_ID varchar(15), MAKER_ID varchar(15), CREATE_DT varchar(15), 
1461
				BRANCH_REQ varchar(15), PAY_PHASE NVARCHAR(250), CAR_TYPE Nvarchar(250), CAR_PLATE varchar(15),RATE_GAS_100KM decimal(18,2), KM_START decimal(18,2), 
1462
				KM_END decimal(18,2), KM_USED varchar(15), RATE_GAS decimal(18,2), REAL_GAS decimal(18,2), REDUNDANCY_GAS decimal(18,2), INVENTORY_GAS decimal(18,2), 
1463
				NOTES NVARCHAR(MAX), COST_INCURRED decimal(18,2), CREATE_SCHEDULE NVARCHAR(250), TRUONGDONVI VARCHAR(15) , 
1464
				AUTH_STATUS varchar(1), AUTH_STATUS_KT varchar(1)) 
1465
				OPEN XmlDataDriveDT
1466

    
1467
				DECLARE @INDEX_DRIVEDT INT = 0
1468

    
1469
--- INSERT CHI TIÊT PHIEU YEU CAU CONG TAC
1470
				FETCH NEXT FROM XmlDataDriveDT INTO @REQ_PAY_DRIVE_ID , @REQ_PAY_ID, @CAR_ID, @MAKER_ID, @CREATE_DT, @BRANCH_REQ, @PAY_PHASE, @CAR_TYPE, @CAR_PLATE, 
1471
				@RATE_GAS_100KM, @KM_START, @KM_END, @KM_USED, @RATE_GAS, @REAL_GAS, @REDUNDANCY_GAS, @INVENTORY_GAS, @NOTES, @COST_INCURRED, @CREATE_SCHEDULE,
1472
				@TRUONGDONVI, @AUTH_STATUS, @AUTH_STATUS_KT
1473
				WHILE @@fetch_status=0 
1474
				BEGIN
1475
				/*--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
1476
					SET @INDEX_NS = @INDEX_NS +1
1477
					--KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1478
					IF(@p_TYPE_FUNCTION ='SEND')
1479
					BEGIN
1480
						IF(ISNULL(@AMT_EXE,0) =0)
1481
						BEGIN
1482
							ROLLBACK TRANSACTION
1483
								SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Số tiền sử dụng thực tế phải lớn hơn không.' ErrorDesc
1484
								RETURN '-1'
1485
						END
1486
						IF((@AMT_EXE  > @AMT_REMAIN_GD) AND ((SELECT GD_TYPE_ID FROM CM_GOODS WHERE GD_ID =@GD_ID) ='NS'))
1487
						BEGIN
1488
								ROLLBACK TRANSACTION
1489
								SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Ngân sách sử dụng thực tế không được vượt quá ngân sách còn lại.' ErrorDesc
1490
								RETURN '-1'
1491
						END		
1492
					END
1493
					IF(NOT EXISTS(SELECT * FROM PL_IMPORT WHERE TRADE_ID =@TRADE_ID AND IMP_YEAR =YEAR(GETDATE()))
1494
						  AND NOT EXISTS (SELECT * FROM PL_MASTER WHERE PLAN_ID =(SELECT TOP 1 PLAN_ID FROM PL_TRADEDETAIL WHERE TRADE_ID =@TRADE_ID) AND YEAR =YEAR(GETDATE())))
1495
					BEGIN
1496
								ROLLBACK TRANSACTION
1497
								SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Ngân sách sử dụng phải chọn lại ngân sách của năm hiện tại. Không được phép sử dụng ngân sách năm cũ.' ErrorDesc
1498
								RETURN '-1'
1499
					END*/
1500
					SET @INDEX_DRIVEDT = @INDEX_DRIVEDT + 1;
1501
                    --hieuhm 09/01/2022 kiểm tra số lít tồn chuyển kì sau không được nhỏ hơn 0
1502
                    IF(CONVERT(INT,@INVENTORY_GAS) < 0)
1503
                    BEGIN
1504
                        ROLLBACK TRANSACTION
1505
                        SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_DRIVEDT)+ N': Bảng kê chi phí sử dụng nhiên liệu số lít xăng tồn chuyển kỳ sau phải là số dương. Không được phép là số âm.' ErrorDesc
1506
                        RETURN '-1'
1507
                    END
1508
					DECLARE @p_REQ_DRIVE_DT_ID VARCHAR(15);
1509
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_DRIVE_DT', @p_REQ_DRIVE_DT_ID OUT;
1510
					IF @p_REQ_DRIVE_DT_ID='' OR @p_REQ_DRIVE_DT_ID IS NULL GOTO ABORT;
1511
					INSERT INTO TR_REQ_PAY_DRIVE_DT(REQ_PAY_DRIVE_DT_ID, REQ_PAY_ID, CAR_ID, MAKER_ID, CREATE_DT, BRANCH_REQ, PAY_PHASE, CAR_TYPE, CAR_PLATE,
1512
					RATE_GAS_100KM, KM_START, KM_END, KM_USED, RATE_GAS, REAL_GAS, REDUNDANCY_GAS, INVENTORY_GAS, COST_INCURRED, NOTES, CREATE_SCHEDULE, TRUONGDONVI,
1513
					AUTH_STATUS, AUTH_STATUS_KT)
1514
					VALUES (@p_REQ_DRIVE_DT_ID , @p_REQ_PAY_ID, @CAR_ID, @MAKER_ID, @CREATE_DT, @BRANCH_REQ, @PAY_PHASE, @CAR_TYPE, @CAR_PLATE, 
1515
					@RATE_GAS_100KM, @KM_START, @KM_END, @KM_USED, @RATE_GAS, @REAL_GAS, @REDUNDANCY_GAS, @INVENTORY_GAS, @COST_INCURRED, @NOTES,
1516
					@CREATE_SCHEDULE, @TRUONGDONVI, @AUTH_STATUS, @AUTH_STATUS_KT)
1517
					IF @@error<>0 GOTO ABORT;
1518
					FETCH NEXT FROM XmlDataDriveDT INTO @REQ_PAY_DRIVE_ID , @REQ_PAY_ID, @CAR_ID, @MAKER_ID, @CREATE_DT, @BRANCH_REQ, @PAY_PHASE, @CAR_TYPE, @CAR_PLATE, 
1519
					@RATE_GAS_100KM, @KM_START, @KM_END, @KM_USED, @RATE_GAS, @REAL_GAS, @REDUNDANCY_GAS, @INVENTORY_GAS, @NOTES, @COST_INCURRED, @CREATE_SCHEDULE,
1520
					@TRUONGDONVI, @AUTH_STATUS, @AUTH_STATUS_KT
1521
				END;
1522
				CLOSE XmlDataDriveDT;
1523
				DEALLOCATE XmlDataDriveDT;
1524
--- END INSERT CHI TIET PHIEU YEU CAU CONG TAC
1525
COMMIT TRANSACTION
1526
-- BEIGN VALIDATE SEND APPROVE
1527
	IF(@p_TYPE_FUNCTION ='SEND') -- KIEM TRA NEU 2 BIEN XML KHAC NULL TUC LA DANG TRONG QUA TRINH LUU NHAP
1528
	BEGIN
1529
	-- VALIDATE CAC LUOI THANH TOAN
1530
		IF((SELECT COUNT(*) FROM TR_REQ_PAY_SERVICE WHERE REQ_PAY_ID = @p_REQ_PAY_ID) = 0 AND @p_REQ_TYPE = 'D')
1531
		BEGIN
1532
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới thông tin các dịch vụ thanh toán không được để trống'  ErrorDesc
1533
			RETURN '-1'
1534
		END
1535
		/*
1536
		ELSE IF((SELECT COUNT(*) FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID = @p_REQ_PAY_ID) = 0 AND @p_REQ_TYPE = 'P' AND @p_IS_PERIOD <> 'Y')
1537
		BEGIN
1538
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới thông tin PO/ hợp đồng không được để trống'  ErrorDesc
1539
			RETURN '-1'
1540
		END
1541
		ELSE IF((SELECT COUNT(*) FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID = @p_REQ_PAY_ID) = 0 AND @p_REQ_TYPE = 'P' AND @p_IS_PERIOD = 'Y')
1542
		BEGIN
1543
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới thông tin hợp đồng định kỳ không được để trống'  ErrorDesc
1544
			RETURN '-1'
1545
		END
1546
		*/
1547

    
1548
	-- DECLARE
1549
		DECLARE @BRANCH_TYPE_CR VARCHAR(15)
1550
		DECLARE @SUM_THANH_TOAN DECIMAL(18,0) =0, @SUM_PHUONG_THUC DECIMAL(18,0) =0, @SUM_NGAN_SACH DECIMAL(18,2) =0, @SUM_USE_REAL DECIMAL(18,2), @SUM_SERVICE DECIMAL(18,0),
1551
		@SUM_SCHEDULE DECIMAL(18,0), @SUM_PERIOD DECIMAL(18,0), @SUM_PAY_BACK DECIMAL(18,0) =0, @SUM_ADD DECIMAL(18,0), @SUM_USE_I DECIMAL(18,0)
1552
	-- SET
1553
		SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
1554
		SET @SUM_THANH_TOAN =(SELECT ISNULL(SUM(REQ_AMT * ISNULL(RATE,1)),0) FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1555
		SET @SUM_PHUONG_THUC =ABS((SELECT ISNULL(SUM(TOTAL_AMT * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID  
1556
		AND (TYPE_TRANSFER ='A' OR TYPE_TRANSFER IS NULL OR TYPE_TRANSFER ='')) - (SELECT ISNULL(SUM(TOTAL_AMT * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID  
1557
		AND TYPE_TRANSFER ='R'))
1558
		SET @SUM_NGAN_SACH =(SELECT ISNULL(SUM(AMT_EXE * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1559
		SET @SUM_SERVICE =(SELECT ISNULL(SUM(TOTAL_AMT * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_SERVICE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1560
		SET @SUM_PERIOD =(SELECT ISNULL(SUM(AMT_PAY * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1561
		SET @SUM_SCHEDULE =(SELECT ISNULL(SUM(AMT_PAY_REAL * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1562

    
1563
		PRINT '@SUM_THANH_TOAN: ' + CONVERT(VARCHAR(20),@SUM_THANH_TOAN);
1564
		PRINT '@SUM_PHUONG_THUC: ' + CONVERT(VARCHAR(20),@SUM_PHUONG_THUC);
1565
		PRINT '@SUM_NGAN_SACH: ' + CONVERT(VARCHAR(20),@SUM_NGAN_SACH);
1566
		PRINT '@SUM_SERVICE: ' + CONVERT(VARCHAR(20),@SUM_SERVICE);
1567
		PRINT '@SUM_PERIOD: ' + CONVERT(VARCHAR(20),@SUM_PERIOD);
1568
		PRINT '@SUM_SCHEDULE: ' + CONVERT(VARCHAR(20),@SUM_SCHEDULE);
1569

    
1570
		IF(@p_REQ_TYPE ='I')
1571
		BEGIN
1572
			/*SET @SUM_USE_I =	(SELECT ISNULL(SUM(TOTAL_AMT*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_SERVICE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1573
							+	(SELECT ISNULL(SUM(AMT_PAY*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1574
							+	(SELECT ISNULL(SUM(AMT_PAY_REAL*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)*/
1575
			SET @SUM_USE_REAL =(SELECT ISNULL(SUM(AMT_USE*ISNULL(RATE,1)),0) FROM TR_REQ_PAYMENT_DT WHERE PAY_ID =@p_REQ_PAY_ID)
1576
			SET @SUM_PAY_BACK =(SELECT ISNULL(SUM(AMT_REVERT*ISNULL(RATE,1)),0) FROM TR_REQ_PAYMENT_DT WHERE PAY_ID =@p_REQ_PAY_ID)
1577
			SET @SUM_ADD =(SELECT ISNULL(SUM(AMT_ADD*ISNULL(RATE,1)),0) FROM TR_REQ_PAYMENT_DT WHERE PAY_ID =@p_REQ_PAY_ID)
1578
			SET @SUM_PHUONG_THUC =(SELECT ISNULL(SUM(TOTAL_AMT * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND TYPE_TRANSFER ='A') -
1579
			(SELECT ISNULL(SUM(TOTAL_AMT * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND TYPE_TRANSFER ='R')
1580
		END
1581
		IF(@p_REQ_TYPE ='P' AND @p_IS_PERIOD ='Y' AND @p_IS_PERIOD <>'' AND @p_IS_PERIOD IS NOT NULL)
1582
		BEGIN
1583
			SET @SUM_USE_REAL =(SELECT ISNULL(SUM(AMT_PAY*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1584
			--SET @SUM_PAY_BACK =(SELECT ISNULL(SUM(AMT_PAY*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND PROCESS <> '0')
1585
					
1586
		END
1587
		IF(@p_REQ_TYPE ='P' AND (@p_IS_PERIOD ='N' OR (@p_IS_PERIOD ='' OR @p_IS_PERIOD IS NULL)))
1588
		BEGIN
1589
			SET @SUM_USE_REAL =(SELECT ISNULL(SUM(AMT_PAY_REAL*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)	
1590
			SET @SUM_PAY_BACK =(SELECT ISNULL(SUM(AMT_ADVANCE*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1591
		END
1592
		IF(@p_REQ_TYPE ='D')
1593
		BEGIN
1594
			SET @SUM_USE_REAL =(SELECT ISNULL(SUM(TOTAL_AMT*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_SERVICE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1595
		END
1596
		IF(@p_REQ_TYPE = 'D' AND ROUND(@SUM_NGAN_SACH,0) <> ROUND(@SUM_THANH_TOAN,0))
1597
		BEGIN
1598
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền sử dụng ngân sách và chi phí phải bằng số tiền bạn cần thanh toán là: ' + FORMAT(SUM(@SUM_THANH_TOAN),'#,#', 'vi-VN') ErrorDesc
1599
			RETURN '-1'
1600
		END
1601
		PRINT '@SUM_USE_REAL: ' + CONVERT(VARCHAR(20),@SUM_USE_REAL);
1602
		PRINT '@@SUM_NGAN_SACH: ' + CONVERT(VARCHAR(20),ROUND(@SUM_NGAN_SACH,0));
1603
		PRINT '@@SUM_USE_REAL: ' + CONVERT(VARCHAR(20),ROUND(@SUM_USE_REAL,0));
1604
		IF(ROUND(@SUM_NGAN_SACH,0) <> ROUND(@SUM_USE_REAL,0))
1605
		BEGIN
1606
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền sử dụng ngân sách và chi phí phải bằng số tiền bạn sử dụng thực tế là: ' +  FORMAT(SUM(@SUM_USE_REAL),'#,#', 'vi-VN')  ErrorDesc
1607
			RETURN '-1'
1608
		END
1609
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE TRASFER_USER_RECIVE <> '' AND TRASFER_USER_RECIVE IS NOT NULL AND REQ_PAY_ID =@p_REQ_PAY_ID) AND @BRANCH_TYPE_CR ='PGD')
1610
		BEGIN
1611
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Cấp độ phòng giao dịch vui lòng không được chọn cấp phê duyệt trung gian' ErrorDesc
1612
			RETURN '-1'
1613
		END
1614
		IF(@p_REQ_TYPE <> 'I')
1615
		BEGIN
1616
			IF(NOT EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID  =@p_REQ_PAY_ID))
1617
			BEGIN
1618
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Thông tin hạng mục ngân sách và chi phí không được để trống. Vui lòng chọn ngân sách và chi phí' ErrorDesc
1619
				RETURN '-1'
1620
			END
1621
			IF(ROUND(@SUM_THANH_TOAN,0) <> ROUND(@SUM_PHUONG_THUC,0))
1622
			BEGIN
1623
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền phương thức thanh toán phải bằng số tiền bạn cần thanh toán là: ' + FORMAT(ISNULL(@SUM_THANH_TOAN, 0),'#,#', 'vi-VN') ErrorDesc
1624
				RETURN '-1'
1625
			END
1626
		END
1627
		ELSE
1628
		BEGIN
1629
			print 'START thanh toan hoan tam ung'
1630
			IF(ISNULL(@SUM_USE_REAL,0) >0)
1631
			BEGIN
1632
				IF(NOT EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID  =@p_REQ_PAY_ID))
1633
				BEGIN
1634
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Thông tin hạng mục ngân sách và chi phí không được để trống. Vui lòng chọn ngân sách và chi phí' ErrorDesc
1635
					RETURN '-1'	
1636
				END
1637
				IF(ROUND(@SUM_NGAN_SACH,0) <> ROUND(@SUM_USE_REAL,0))
1638
				BEGIN
1639
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền sử dụng ngân sách và chi phí phải bằng số tiền sử dụng thực tế trên lưới hoàn tạm ứng: ' + FORMAT(SUM(@SUM_USE_REAL),'#,#', 'vi-VN')  ErrorDesc
1640
					RETURN '-1'
1641
				END
1642
				IF(ISNULL(@SUM_USE_REAL,0) <> (ISNULL(@SUM_SERVICE,0) + ISNULL(@SUM_PERIOD,0) + ISNULL(@SUM_SCHEDULE,0)))
1643
				BEGIN
1644
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Tổng số tiền thanh toán dịch vụ, thanh toán nhà cung cấp, thanh toán định kì phải bằng số tiền sử dụng thực tế trên lưới hoàn tạm ứng: ' + FORMAT(SUM(@SUM_USE_REAL),'#,#', 'vi-VN') ErrorDesc
1645
					RETURN '-1'
1646
				END
1647
			END
1648
			--IF(ABS((ISNULL(@SUM_ADD,0) - ISNULL(@SUM_PAY_BACK,0))) <> @SUM_PHUONG_THUC)
1649
			IF(((ISNULL(@SUM_ADD,0) - ISNULL(@SUM_PAY_BACK,0))) <> @SUM_PHUONG_THUC)
1650
			BEGIN
1651
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền phương thức thanh toán (hiệu số thanh toán và trích từ tai khoản) tương ứng với số tiền chi bổ sung trừ số tiền hoàn tạm ứng: ' + FORMAT(ABS((ISNULL(@SUM_ADD,0) - ISNULL(@SUM_PAY_BACK,0))),'#,#', 'vi-VN') + ' ' + CAST(@SUM_PHUONG_THUC as nvarchar)  ErrorDesc
1652
				RETURN '-1'
1653
			END
1654
		END
1655
		-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
1656
		IF(ISNULL(@p_TRASFER_USER_RECIVE, '') <> '')
1657
		BEGIN
1658
			UPDATE TR_REQ_PAYMENT SET AUTH_STATUS ='W', PROCESS = NULL WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1659
		END
1660
		ELSE
1661
		BEGIN
1662
			UPDATE TR_REQ_PAYMENT SET AUTH_STATUS ='U', PROCESS = NULL WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1663
		END
1664
		
1665
		INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
1666
				
1667
		VALUES(@p_REQ_PAY_ID,'SEND',@p_MAKER_ID,GETDATE(), N'Đơn vị gửi phê duyệt',N'Đơn vị tạo phiếu thanh toán và gửi phê duyệt')
1668
		--- Luu log chinh sua
1669
		INSERT INTO TR_REQ_PAY_INVOICE_LOG SELECT * FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1670
		-----
1671
		UPDATE TR_REQ_PAY_SCHEDULE SET AMT_REMAIN =0.00 WHERE AMT_REMAIN <0
1672
		UPDATE TR_REQ_PAY_BUDGET SET AMT_APP= ROUND(AMT_APP,0), AMT_REMAIN = ROUND(AMT_REMAIN,0)
1673
				
1674
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE (TRASFER_USER_RECIVE <> '' AND TRASFER_USER_RECIVE IS NOT NULL) AND REQ_PAY_ID =@p_REQ_PAY_ID))
1675
		BEGIN
1676
			SELECT '4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, N'Đơn vị gửi phiếu phê duyệt phiếu đề nghị thanh toán số: ' + ISNULL(@p_REQ_PAY_CODE,'') + N' thành công. Vui lòng đợi cấp phê duyệt trung gian xác nhận phiếu' ErrorDesc
1677
			RETURN '4'
1678
		END
1679
		ELSE
1680
		BEGIN
1681
			SELECT '4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, N'Đơn vị gửi phiếu phê duyệt phiếu đề nghị thanh toán số: ' + ISNULL(@p_REQ_PAY_CODE,'') + N' thành công. Vui lòng đợi trưởng đơn vị phê duyệt phiếu' ErrorDesc
1682
			RETURN '4'
1683
		END
1684
	END
1685
-- END VALIDATE SEND APPROVE	
1686

    
1687

    
1688
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
1689
RETURN '0'
1690
ABORT:
1691
BEGIN
1692
		ROLLBACK TRANSACTION
1693
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
1694
		RETURN '-1'
1695
End
1696