Project

General

Profile

payment_ins_upd.txt

Luc Tran Van, 04/19/2023 09:45 AM

 
1

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

    
61
AS
62
	BEGIN TRANSACTION
63
		DECLARE @ROLE_KI_NHAY VARCHAR(50)
64
		SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
65
		IF(@ROLE_KI_NHAY IS NOT NULL AND @ROLE_KI_NHAY <> '' AND @ROLE_KI_NHAY IN ('TP','GDDV','KTT','TPTC','TC'))
66
		BEGIN
67
			ROLLBACK TRANSACTION
68
			SELECT '-1' Result, '' REQ_PAY_ID, @p_REQ_PAY_CODE  AS REQ_PAY_CODE, 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
69
			RETURN '-1'
70
		END
71

    
72
		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,
73
		@INVOICE_NO NVARCHAR(50) = NULL,@INVOICE_DT VARCHAR(20) = NULL,@SELLER NVARCHAR(500) = NULL,@TAX_NO NVARCHAR(15) = NULL,@GOODS_NAME NVARCHAR(500) = NULL,
74
		@PRICE DECIMAL(18, 0) = NULL,@TAX DECIMAL(18, 0) = NULL,@NOTES NVARCHAR(MAX) = NULL,@VAT_RATE DECIMAL(18,2), @REF_ID VARCHAR(15),@IS_CLOSED VARCHAR(1),
75
		@ACC_NO VARCHAR(25),@ACC_NAME NVARCHAR(250),@ISSUED_BY NVARCHAR(250),@ISSUED_DT VARCHAR(20),@CURRENCY VARCHAR(15)= NULL,@RATE DECIMAL(18,2),@TYPE_TRANSFER VARCHAR(15),
76
		@TYPE_VAT VARCHAR(15),@TYPE_FUNC VARCHAR(15),@REASON NVARCHAR(1000),@REF_TYPE VARCHAR(15), @TRN_DATE VARCHAR(15), @PAY_ADV_ID VARCHAR(15), @REQ_PAY_ADV_CODE VARCHAR(15), 
77
		@AMT_ADVANCED DECIMAL(18,2),@AMT_DO DECIMAL(18,2), @AMT_REMAIN DECIMAL(18,2),@AMT_PAY DECIMAL(18,2), @AMT_USE DECIMAL(18,2),@AMT_REVERT DECIMAL(18,2), @AMT_ADD DECIMAL(18,2), 
78
		@TOTAL_SCHEDULE_AMT DECIMAL(18,2) =0, @INDEX_PO INT =0, @INDEX_AD INT =0, @INDEX_IV INT=0, @INDEX_NS INT =0, @INDEX_INVOICE INT = 0, @TYPE_COST VARCHAR(15), @FR_LEVEL INT ,@TO_LEVEL INT
79

    
80
		DECLARE @hdoc INT, @hDoc2 INT, @hDocMeThod INT, @hdocBudget INT, @hdocService INT, @hdocAttach INT, @hdocInvoice INT, @hdocPO INT, @hdocSchedule INT, @hdocPeriod INT, 
81
		@hdocRecurring INT, @hdocJob INT, @hdocJobDT INT, @hdocDrive INT, @hdocDriveDT INT, @hdocRequestCar INT
82
		EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
83
		-- THONG TIN PHIEU DE NGHI TAM UNG
84
		EXEC sp_xml_preparedocument @hDoc2 OUTPUT, @p_XMP_TEMP_2;
85
		-- THONG TIN PHUONG THUC THANH TOAN
86
		EXEC sp_xml_preparedocument @hDocMeThod OUTPUT, @p_XMP_TEMP_METHOD;
87
		-- THONG TIN HANG MUC NGAN SACH VA CHI PHI
88
		EXEC sp_xml_preparedocument @hdocBudget OUTPUT, @p_XMP_TEMP_BUDGET;
89
		-- THONG TIN CAC DICH VU THANH TOAN
90
		EXEC sp_xml_preparedocument @hdocService OUTPUT, @p_XMP_TEMP_SERVICE;
91
		-- THONG TIN HOP DONG, CHUNG TU DINH KEM
92
		EXEC sp_xml_preparedocument @hdocAttach OUTPUT, @p_XMP_TEMP_ATTACH;
93
		-- THONG TIN HOA DON DINH KEM
94
		EXEC sp_xml_preparedocument @hdocInvoice OUTPUT, @p_XMP_TEMP_INVOICE;
95
		-- THONG TIN PO/ HOP DONG
96
		EXEC sp_xml_preparedocument @hdocPO OUTPUT, @p_XMP_TEMP_PO;
97
		-- THONG TIN CHI TIET LICH THANH TOAN PO/ HOP DONG
98
		EXEC sp_xml_preparedocument @hdocSchedule OUTPUT, @p_XMP_TEMP_SCHEDULE;
99
		-- THONG TIN HOP DONG DINH KY
100
		EXEC sp_xml_preparedocument @hdocRecurring OUTPUT, @p_XMP_ADVANCE_DT;
101
		-- THONG TIN DINH KY TAM UNG
102
		EXEC sp_xml_preparedocument @hdocPeriod OUTPUT, @p_XMP_TEMP_PERIOD;
103
		-- THONG TIN THANH TOAN CHI PHI DI CONG TAC
104
		EXEC sp_xml_preparedocument @hdocJob OUTPUT, @p_XMP_TEMP_PAY_JOB;
105
		-- CHI TIET CHI PHI DI CONG TAC
106
		EXEC sp_xml_preparedocument @hdocJobDT OUTPUT, @p_XMP_TEMP_PAY_JOB_DT;
107
		-- THONG TIN THANH TOAN CHI PHI VAN HANH XE
108
		EXEC sp_xml_preparedocument @hdocDrive OUTPUT, @p_XMP_TEMP_PAY_DRIVE;
109
		-- BANG KE CHI PHI SU DUNG NHIEN LIEU
110
		EXEC sp_xml_preparedocument @hdocDriveDT OUTPUT, @p_XMP_TEMP_PAY_DRIVE_DT; 
111
		-- PHIEU YEU CAU XE
112
		EXEC sp_xml_preparedocument @hdocRequestCar OUTPUT, @p_XMP_TEMP_PAY_REQUEST_CAR;
113

    
114
-- BEGIN VALIDATE CAC DANH SACH
115
		/*
116
		IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='N' AND NOT EXISTS(SELECT * FROM OPENXML(@hdocPO, '/Root/XmlDataPO', 2) WITH(REQ_PAY_ID varchar(15))))
117
		BEGIN
118
			ROLLBACK TRANSACTION
119
			SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách PO/ hợp đồng không được để trống' ErrorDesc
120
			RETURN '-1'
121
		END
122
		IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='N' AND NOT EXISTS(SELECT * FROM OPENXML(@hdocSchedule, '/Root/XmlDataSchedule', 2) WITH(REQ_PAY_ID varchar(15))))
123
		BEGIN
124
			ROLLBACK TRANSACTION
125
			SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách thông tin chi tiết lịch thanh toán PO/ hợp đồng không được để trống' ErrorDesc
126
			RETURN '-1'
127
		END
128

    
129
		IF(@p_REQ_TYPE = 'P' AND (@p_IS_PERIOD='Y' OR @p_IS_PERIOD IS NULL) AND NOT EXISTS(SELECT * FROM OPENXML(@hdocRecurring, '/Root/XmlDataRecurring', 2) WITH(REQ_PAY_ID varchar(15))))
130
		BEGIN
131
			ROLLBACK TRANSACTION
132
			SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách thông tin hợp đồng định kì không được phép để trống' ErrorDesc
133
			RETURN '-1'
134
		END
135

    
136
		IF(@p_REQ_TYPE = 'P' AND (@p_IS_PERIOD='Y' OR @p_IS_PERIOD IS NULL) AND NOT EXISTS(SELECT * FROM OPENXML(@hdocPeriod, '/Root/XmlDataPeriod', 2) WITH(REQ_PAY_ID varchar(15))))
137
		BEGIN
138
			ROLLBACK TRANSACTION
139
			SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách thông tin định kỳ tạm ứng không được phép để trống' ErrorDesc
140
			RETURN '-1'
141
		END
142
		*/
143
-- END VALIDATE CAC DANH SACH
144

    
145
		DECLARE @REQ_PAY_SERVICE_NAME nvarchar(100),@RECEIVE_ID_SERVICE varchar(15),@RECEIVE_NAME_SERVICE nvarchar(100),@REQ_PAY_REASON_SERVICE nvarchar(MAX),
146
		@TOTAL_AMT_SERVICE decimal(18,2), @REQ_PAY_TYPE_SERVICE varchar(1),@REQ_PAY_DESC_SERVICE nvarchar(MAX),@REQ_PAY_ENTRIES_SERVICE nvarchar(MAX),@DEPT_ID_SRV VARCHAR(15)
147
		
148
		DECLARE XmlDataService CURSOR LOCAL FOR SELECT * FROM OPENXML(@hdocService, 'Root/XmlDataService',2)
149
		WITH(REQ_PAY_SERVICE_NAME nvarchar(100),RECEIVE_ID_SERVICE varchar(15),RECEIVE_NAME_SERVICE nvarchar(100),REQ_PAY_REASON_SERVICE nvarchar(MAX),
150
		TOTAL_AMT_SERVICE decimal(18,2),REQ_PAY_TYPE_SERVICE varchar(1),REQ_PAY_DESC_SERVICE nvarchar(MAX),REQ_PAY_ENTRIES_SERVICE nvarchar(MAX), 
151
		DEPT_ID VARCHAR(15),CURRENCY VARCHAR(15), RATE DECIMAL(18,2))
152
		OPEN XmlDataService
153
	
154
	--THIEUVQ 281119---
155
-- GEN MA SO PHIEU TU DONG
156
		EXEC [dbo].[PAY_CODE_GenKey] 'TR_REQ_PAYMENT', '','', @p_REQ_PAY_CODE out
157
		DECLARE @INDEX INT = 0
158
		IF (@p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE ='')
159
		BEGIN
160
			ROLLBACK TRANSACTION
161
			SELECT '-1' Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Mã số phiếu không được để trống' ErrorDesc
162
			RETURN '-1'
163
		END
164
		IF EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_CODE  = @p_REQ_PAY_CODE )
165
		BEGIN
166
			ROLLBACK TRANSACTION
167
			SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Số phiếu đề nghị thanh toán đã tồn tại trong hệ thống' ErrorDesc
168
			RETURN '-1'
169
		END
170

    
171
		EXEC SYS_CodeMasters_Gen 'TR_REQ_PAYMENT', @p_REQ_PAY_ID out
172
		IF @p_REQ_PAY_ID='' OR @p_REQ_PAY_ID IS NULL GOTO ABORT
173
		INSERT INTO [dbo].[TR_REQ_PAYMENT]
174
           ([REQ_PAY_ID]
175
           ,[REQ_PAY_CODE],[REQ_DT]
176
           ,[BRANCH_ID]
177
           ,[DEP_ID]
178
           ,[REQ_REASON]
179
           ,[REQ_TYPE],REQ_ENTRIES,
180
            [REQ_DESCRIPTION]
181
           ,REF_ID,
182
			RECEIVER_PO
183
           ,[REQ_PAY_TYPE]
184
           ,[REQ_TYPE_CURRENCY]
185
           ,[REQ_AMT]
186
           ,[REQ_TEMP_AMT]
187
           ,[MAKER_ID]
188
           ,[CREATE_DT]
189
           ,[EDITOR_ID]
190
           ,[AUTH_STATUS]
191
           ,[CHECKER_ID]
192
           ,[APPROVE_DT]
193
           ,[CREATE_DT_KT]
194
           ,[MAKER_ID_KT]
195
           ,[AUTH_STATUS_KT]
196
           ,[CHECKER_ID_KT]
197
		   ,[APPROVE_DT_KT]
198
           ,[CONFIRM_NOTE]
199
           ,[BRANCH_CREATE]
200
           ,[NOTES],RECORD_STATUS,TRANSFER_MAKER,TRANSFER_DT,TRASFER_USER_RECIVE,PROCESS, PAY_PHASE,IS_PERIOD, RATE, AMT_PAY, IS_CREATE_AUTO)
201
			VALUES
202
           (@p_REQ_PAY_ID,
203
			@p_REQ_PAY_CODE,CONVERT(DATE,GETDATE(),103),
204
			@p_BRANCH_ID,
205
			@p_DEP_ID,
206
			@p_REQ_REASON,
207
			@p_REQ_TYPE,
208
			@P_REQ_ENTRIES,
209
			@p_REQ_DESCRIPTION,
210
			@p_REF_ID,
211
			@p_RECEIVER_PO,
212
			@p_REQ_PAY_TYPE,
213
			@p_REQ_TYPE_CURRENCY,
214
			@p_REQ_AMT,
215
			@p_REQ_TEMP_AMT,
216
			@p_MAKER_ID,
217
			GETDATE(),
218
			@p_EDITOR_ID,
219
			'E',
220
			NULL,
221
			NULL,
222
			NULL,
223
			NULL,
224
			NULL,
225
			NULL,
226
			NULL,
227
			NULL,
228
			@p_BRANCH_CREATE,
229
			@p_NOTES,@p_RECORD_STATUS,
230
			@p_TRANSFER_MAKER,
231
			NULL,
232
			@p_TRASFER_USER_RECIVE,
233
			NULL,@p_PAY_PHASE,ISNULL(@p_IS_PERIOD,'N'), @p_RATE, @p_AMT_PAY, 'N')
234
		IF @@Error <> 0 GOTO ABORT
235

    
236
--- INSERT LICH THANH TOAN
237
			DECLARE @RECEIVE_ID varchar(15),@RECEIVE_NAME nvarchar(100),@REQ_PAY_REASON nvarchar(MAX),@TOTAL_AMT_METHOD decimal(18,2),
238
			@REQ_PAY_TYPE varchar(1),@REQ_PAY_DESC nvarchar(MAX),@REQ_PAY_ENTRIES nvarchar(MAX),@CHECK_IN VARCHAR(15), 
239
			@BANKCODE_NAPAS VARCHAR(20), @BANKCODE VARCHAR(20), @BANKNAME NVARCHAR(250), @SUB_ISSUED_BY NVARCHAR(250), @RECEIVER_DEBIT VARCHAR(20)
240

    
241
			DECLARE XmlDataMethod CURSOR LOCAL FOR SELECT * FROM OPENXML(@hDocMeThod, 'Root/XmlDataMethod',2)
242
			WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2),
243
			REQ_PAY_TYPE varchar(1),REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(25), 
244
			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), 
245
			BANKCODE_NAPAS VARCHAR(20), BANKCODE VARCHAR(20), BANKNAME VARCHAR(250), SUB_ISSUED_BY NVARCHAR(250), RECEIVER_DEBIT VARCHAR(20))
246
			OPEN XmlDataMethod
247
			SET @INDEX = 0
248
			FETCH NEXT FROM XmlDataMethod INTO  @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,
249
			@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
250
			WHILE @@fetch_status=0 
251
			BEGIN
252
				IF(@CHECK_IN = 'I')
253
				BEGIN
254
					DECLARE @BRANCH_NAME_REC VARCHAR(100) = ISNULL((SELECT TOP 1 BRANCH_NAME FROM CM_BRANCH WHERE BRANCH_CODE = LEFT(@ACC_NO, 3)), '');
255
					SET @ISSUED_BY = 'BVB - ' + @BRANCH_NAME_REC;
256
					PRINT '@BRANCH_NAME_REC: ' + @BRANCH_NAME_REC
257
				END
258
				ELSE
259
				BEGIN
260
					IF(ISNULL(@BANKCODE, '') = '')
261
					BEGIN
262
						SET @ISSUED_BY = '';
263
					END
264
				END
265
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
266
				IF(@p_TYPE_FUNCTION ='SEND')
267
				BEGIN
268
					SET @INDEX_INVOICE = @INDEX_INVOICE+1
269
					----------------------- begin validate ------------------------
270
					IF(@ACC_NO IS NULL OR @ACC_NO = '')
271
					BEGIN
272
						ROLLBACK TRANSACTION
273
						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_INVOICE)+N': số tài khoản '+ N' không được để trống' ErrorDesc
274
						RETURN '-1'
275
					END
276

    
277
					IF(@REQ_PAY_TYPE = '1' AND (@ISSUED_DT = '' OR @ISSUED_DT IS NULL))
278
					BEGIN
279
						ROLLBACK TRANSACTION
280
						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_INVOICE)+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
281
						RETURN '-1'
282
					END
283
					----------------------- end validate --------------------------
284
				END
285

    
286
				IF(@REQ_PAY_TYPE<>'1')
287
				BEGIN
288
					SET @ISSUED_DT = NULL
289
				END
290
				--IF(@p_REQ_TYPE<>'I')
291
				--BEGIN
292
				--SET @TYPE_TRANSFER = ''
293
				--END
294
				IF(@TYPE_TRANSFER IS NULL OR @TYPE_TRANSFER ='')
295
				BEGIN
296
					SET @TYPE_TRANSFER ='A'
297
				END
298
				SET @INDEX = @INDEX +1
299
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
300
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
301
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
302
				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)
303
				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 )
304
			IF @@error<>0 GOTO ABORT;
305
			FETCH NEXT FROM XmlDataMethod INTO  @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,
306
			@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
307
			END
308
			CLOSE XmlDataMethod;
309
			DEALLOCATE XmlDataMethod;
310
			-------------------------
311
-- INSERT CHUNG TU DINH KEM
312
			--CatCursor
313
			DECLARE @ATTACH_ID varchar(15),@CON_ID varchar(100),@CONT_CODE VARCHAR(50), @CON_NOTES VARCHAR(1000),
314
			@CON_DESC NVARCHAR(1000),@CON_TYPE VARCHAR(15),@AMT_ATT DECIMAL(18,2),@REF_DT VARCHAR(20), @LICENSE_DT VARCHAR(15)
315
			DECLARE XmlAttach CURSOR LOCAL FOR
316
			SELECT *
317
			FROM
318
			OPENXML(@hdocAttach, 'Root/XmlAttach',2) 
319
			WITH(ATTACH_ID varchar(15),CON_ID varchar(100),CONT_CODE VARCHAR(50), CON_NOTES NVARCHAR(1000),
320
			CON_DESC NVARCHAR(1000),CON_TYPE VARCHAR(15),AMT_ATT DECIMAL(18,2),REF_DT VARCHAR(20), LICENSE_DT VARCHAR(15))
321
			OPEN XmlAttach
322
			FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,
323
			@CON_TYPE,@AMT_ATT,@REF_DT, @LICENSE_DT
324
			WHILE @@fetch_status=0 
325
			BEGIN
326
					
327
				IF (@REF_DT='')
328
				BEGIN
329
					SET @REF_DT = NULL
330
				END
331
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
332
				IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
333
				INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT, LICENSE_DT) 
334
				VALUES(@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))
335
			IF @@error<>0 GOTO ABORT;
336
			FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT,
337
			@REF_DT, @LICENSE_DT
338
			END
339
			CLOSE XmlAttach;
340
			DEALLOCATE XmlAttach;
341
		----END
342
		--Insert XmlData
343
		DECLARE XmlData CURSOR LOCAL FOR
344
		SELECT *
345
		FROM
346
		OPENXML(@hdocInvoice, '/Root/XmlData', 2)
347
		WITH(TRANS_NO nvarchar(50),TRANS_DT VARCHAR(20),INVOICE_SIGN nvarchar(50),INVOICE_NO_SIGN nvarchar(50),
348
		 INVOICE_NO nvarchar(50),INVOICE_DT VARCHAR(20) ,SELLER nvarchar(500),TAX_NO nvarchar(15),GOODS_NAME nvarchar(500) ,
349
		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))
350
		OPEN XmlData;
351
		FETCH NEXT FROM XmlData INTO @TRANS_NO , @TRANS_DT  ,@INVOICE_SIGN ,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,
352
		@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@TYPE_VAT,@TYPE_FUNC
353
		WHILE @@fetch_status=0 
354
		BEGIN
355
			
356
			-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
357
			IF(@p_TYPE_FUNCTION ='SEND')
358
			BEGIN
359
			SET @INDEX_IV = @INDEX_IV+1
360
			IF(LEN(@INVOICE_NO) < 1)
361
				BEGIN
362
					ROLLBACK TRANSACTION
363
					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
364
					RETURN '-1'
365
				END	
366
				 IF(LEN(@INVOICE_NO) > 8)
367
				BEGIN
368
					ROLLBACK TRANSACTION
369
					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
370
					RETURN '-1'
371
				END	
372
				--IF(EXISTS(SELECT * FROM TR_REQ_PAY_INVOICE WHERE INVOICE_NO =@INVOICE_NO AND INVOICE_NO_SIGN = @INVOICE_NO_SIGN AND
373
				--INVOICE_SIGN =@INVOICE_SIGN AND TAX_NO =@TAX_NO AND TAX =@TAX AND AUTH_STATUS <>'A'))
374
				--BEGIN
375
				--	ROLLBACK TRANSACTION
376
				--	SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số hóa đơn '+ @INVOICE_NO +N' đã tồn tại trong hệ thống' ErrorDesc
377
				--	RETURN '-1'
378
				--END	
379
				IF(EXISTS(
380
					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'
381
					AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE AUTH_STATUS <> 'E')
382
					))
383
				BEGIN
384
						ROLLBACK TRANSACTION
385
						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' ErrorDesc
386
						RETURN '-1'
387
				END		
388
				IF(@GOODS_NAME IS NULL OR @GOODS_NAME ='')
389
				BEGIN
390
						ROLLBACK TRANSACTION
391
						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
392
						RETURN '-1'
393
				END
394
				-- TÊN NGƯỜI BÀN
395
				IF(@SELLER IS NULL OR @SELLER ='')
396
						BEGIN
397
							ROLLBACK TRANSACTION
398
							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
399
							RETURN '-1'
400
				END
401
				-- MÃ SỐ THUẾ
402
				-- TÊN NGƯỜI BÀN
403
				IF(@TAX_NO IS NULL OR @TAX_NO ='')
404
						BEGIN
405
							ROLLBACK TRANSACTION
406
							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
407
							RETURN '-1'
408
				END
409
				-- NGÀY HÓA ĐƠN
410
				IF(@INVOICE_DT IS NULL OR @INVOICE_DT ='')
411
						BEGIN
412
							ROLLBACK TRANSACTION
413
							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
414
							RETURN '-1'
415
				END
416
				-- SỐ HÓA ĐƠN
417
				IF(@INVOICE_NO IS NULL OR @INVOICE_NO ='')
418
						BEGIN
419
							ROLLBACK TRANSACTION
420
							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
421
							RETURN '-1'
422
				END
423
				-- KÍ HIỆU HÓA ĐƠN
424
				IF(@INVOICE_NO_SIGN IS NULL OR @INVOICE_NO_SIGN ='')
425
						BEGIN
426
							ROLLBACK TRANSACTION
427
							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
428
							RETURN '-1'
429
				END
430
					-- KÍ HIỆU HÓA ĐƠN
431
				IF(@PRICE IS NULL OR @PRICE =0)
432
						BEGIN
433
							ROLLBACK TRANSACTION
434
							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
435
							RETURN '-1'
436
				END
437
		END
438
			SET @INDEX = @INDEX +1
439
			DECLARE @p_REQ_INV_ID VARCHAR(15);
440
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_INVOICE', @p_REQ_INV_ID OUT;
441
			IF @p_REQ_INV_ID='' OR @p_REQ_INV_ID IS NULL GOTO ABORT;
442
			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,
443
			MAKER_ID,CREATE_DT,EDITOR_ID,AUTH_STATUS,CHECKER_ID,APPROVE_DT,
444
			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) 
445
			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))) ,@PRICE ,@TAX,@VAT,@NOTES,
446
			@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)
447
		IF @@error<>0 GOTO ABORT;
448
		FETCH NEXT FROM XmlData 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
449
		END;
450
		CLOSE XmlData;
451
		DEALLOCATE XmlData;
452
--- INSERT CAC HANG MUC NGAN SACH	
453
		DECLARE @TRADE_ID varchar(15),@GD_ID varchar(15),@AMT_APP decimal(18,2),@AMT_EXE decimal(18,2),
454
		@AMT_REMAIN_GD decimal(18,2), @MONTH_RATE VARCHAR(4), @YEAR_RATE VARCHAR(4),
455
		--doanptt 180622
456
		@BUDGET_TYPE VARCHAR(20), @BRANCH_ID VARCHAR(20), @DEP_ID VARCHAR(20), @MONTH VARCHAR(20), @YEAR VARCHAR(20),
457
		@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)
458
		DECLARE XmlDataGood CURSOR LOCAL FOR
459
		SELECT * FROM OPENXML(@hdocBudget, 'Root/XmlDataGood',2) 
460
		WITH(TRADE_ID varchar(15),GD_ID varchar(15),AMT_APP decimal(18,2),AMT_DO decimal(18,2),AMT_EXE decimal(18,2),
461
		AMT_REMAIN decimal(18,2),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),REASON NVARCHAR(1000),TYPE_COST VARCHAR(15),
462
		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),
463
		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))
464
		OPEN XmlDataGood
465

    
466
		FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@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
467
		WHILE @@fetch_status=0 BEGIN
468
		--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
469
			SET @INDEX_NS = @INDEX_NS +1
470
			--KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
471
			IF(@p_TYPE_FUNCTION ='SEND')
472
			BEGIN
473
				IF(ISNULL(@AMT_EXE,0) =0)
474
				BEGIN
475
					ROLLBACK TRANSACTION
476
						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
477
						RETURN '-1'
478
				END
479
				IF((@AMT_EXE  > @AMT_REMAIN_GD) AND ((SELECT GD_TYPE_ID FROM CM_GOODS WHERE GD_ID =@GD_ID) ='NS'))
480
				BEGIN
481
						ROLLBACK TRANSACTION
482
						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
483
						RETURN '-1'
484
				END		
485
				IF(NOT EXISTS(SELECT * FROM PL_IMPORT_DT WHERE TRADE_ID =@TRADE_ID AND IMP_YEAR =YEAR(GETDATE()))
486
					  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())))
487
				BEGIN
488
							ROLLBACK TRANSACTION
489
							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
490
							RETURN '-1'
491
				END
492
			END
493

    
494
			DECLARE @p_BUDGET_ID VARCHAR(15);
495
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
496
			IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
497

    
498
			IF(@BUDGET_TYPE = 'nam')
499
			BEGIN
500
				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) 
501
				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, 'M' + CONVERT(VARCHAR(20), MONTH(GETDATE())), CONVERT(VARCHAR(20), YEAR(GETDATE())), @BUDGET_TYPE, @BRANCH_ID, @DEP_ID, @TLNAME, @RoleName, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @BRANCH_KIND)
502
			END
503
			ELSE
504
			BEGIN
505
				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) 
506
				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)
507
			END
508

    
509
			
510
		IF @@error<>0 GOTO ABORT;
511
		FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@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
512
		END;
513
		CLOSE XmlDataGood;
514
		DEALLOCATE XmlDataGood;
515
		--- END INSERT NGAN SACH
516
		---------------------------
517
		--Luanlt--
518
		------------------------
519
		IF(@p_REQ_TYPE = 'I')	
520
		BEGIN
521
			DECLARE XmlDataPay CURSOR LOCAL FOR SELECT * FROM OPENXML(@hDoc2, '/Root/XmlDataPay', 2)
522
			WITH(PAY_ADV_ID nvarchar(50),AMT_ADVANCED decimal(18, 0),AMT_DO decimal(18,2),
523
			AMT_REMAIN decimal(18,2),AMT_PAY decimal(18,2),AMT_USE decimal(18,2),AMT_REVERT DECIMAL(18,2),
524
			AMT_ADD DECIMAL(18,2),CURRENCY VARCHAR(15), RATE DECIMAL(18,2), TRN_DATE VARCHAR(15))
525
			OPEN XmlDataPay;
526

    
527
			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),
528
			@PDNTT_CODE_LIST VARCHAR(250)
529
			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
530
			WHILE @@fetch_status=0 
531
			BEGIN
532
				SET @REQ_PAY_ADV_CODE = (SELECT REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@PAY_ADV_ID)
533
				SET @INDEX_AD = @INDEX_AD +1
534
				SET @SUM_PYCMS_LINK =ISNULL((SELECT SUM(TOTAL_AMT) FROM TR_REQUEST_DOC WHERE PL_REQ_ID =@RECEIVE_ID_SERVICE AND AUTH_STATUS  IN ('U','A')),0)
535
				SET @SUM_TT_CT =(SELECT ISNULL(TOTAL_AMT,0) FROM PL_REQUEST_DOC WHERE REQ_ID =@RECEIVE_ID_SERVICE)
536
				SET @PYCMS_CODE_LIST = (select STUFF( (select '; ' + DTA.REQ_CODE FROM TR_REQUEST_DOC DTA WHERE PL_REQ_ID =@RECEIVE_ID_SERVICE
537
				FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))
538
				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)
539
				FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))
540
				--IF(@RECEIVE_ID_SERVICE IS NOT NULL AND @RECEIVE_ID_SERVICE <> '')
541
				--BEGIN
542
				--	SET @SUM_PYCMS_LINK = @SUM_PYCMS_LINK +@TOTAL_AMT_SERVICE
543
				--END
544
				--SET @SUM_KUY_KE_TT = @SUM_KUY_KE_TT + @TOTAL_AMT_SERVICE
545
				SET @SUM_TTCT_LINK =(SELECT SUM(TOTAL_AMT*ISNULL(RATE,1)) FROM TR_REQ_PAY_SERVICE WHERE 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)
546
				IF(@p_TYPE_FUNCTION ='SEND') 
547
					BEGIN
548
						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 <> '')
549
						BEGIN
550
							ROLLBACK TRANSACTION
551
							SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE,
552
							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:'
553
							+ CHAR(10) + N'* 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'+
554
						    + CHAR(10) +N'* 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'+
555
							+ CHAR(10) +N'* 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'  ErrorDesc
556
							RETURN '-1'
557
						END
558
				END
559
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
560
				IF(@p_TYPE_FUNCTION ='SEND')
561
				BEGIN
562
				-- KIEM TRA XEM CO PHIEU NAO DANG DUOC THANH TOAN HOAN TAM UNG MA CHUA DUYET HAY CHUA
563
				--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))
564
				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))
565
				BEGIN
566
					ROLLBACK TRANSACTION
567
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, 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
568
					RETURN '-1'
569
				END		
570
				-- KIEM TRA NEU SO TIEN DE NGHI HOAN TAM ƯNG LON HON SO TIEN CON LAI CAN PHAI TAM UNG
571
				IF(@AMT_REVERT>(@AMT_REMAIN -@AMT_USE) AND @AMT_REVERT >0)
572
				BEGIN
573
					ROLLBACK TRANSACTION
574
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, 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
575
					RETURN '-1'
576
				END		
577
				END
578
				DECLARE @p_REQ_PAYDT_ID VARCHAR(15);
579
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAYMENT_DT', @p_REQ_PAYDT_ID OUT;
580
				IF @p_REQ_PAYDT_ID='' OR @p_REQ_PAYDT_ID IS NULL GOTO ABORT;
581
				INSERT INTO TR_REQ_PAYMENT_DT
582
				VALUES (@p_REQ_PAYDT_ID,@PAY_ADV_ID,@p_REQ_PAY_ID , ISNULL(@AMT_ADVANCED,0) ,ISNULL(@AMT_DO,0),ISNULL(@AMT_REMAIN,0),
583
				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)
584
			IF @@error<>0 GOTO ABORT;
585
			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
586
			END
587
			CLOSE XmlDataPay;
588
			DEALLOCATE XmlDataPay;
589
--INSERT FROM CatCursor
590
			--CatCursor
591
			DECLARE @REQ_ADV_ID varchar(15),@CAT_NAME nvarchar(100),@TOTAL_AMT_CAT decimal(18,2), @DEPT_ID VARCHAR(15)
592
			DECLARE XmlDataCat CURSOR LOCAL FOR
593
			SELECT *
594
			FROM
595
			OPENXML(@hdoc, 'Root/XmlDataCat',2) 
596
			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))
597
			OPEN XmlDataCat
598
			SET @INDEX = 0
599
			FETCH NEXT FROM XmlDataCat INTO @REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@CURRENCY,@RATE
600
			WHILE @@fetch_status=0 
601
			BEGIN
602
				SET @INDEX = @INDEX +1
603
				DECLARE @p_REQ_PAY_CAT_ID VARCHAR(15);
604
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_CAT', @p_REQ_PAY_CAT_ID OUT;
605
				IF @p_REQ_PAY_CAT_ID='' OR @p_REQ_PAY_CAT_ID IS NULL GOTO ABORT;
606
				INSERT INTO TR_REQ_PAY_CAT
607
				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)
608
			IF @@error<>0 GOTO ABORT;
609
			FETCH NEXT FROM XmlDataCat INTO @REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@CURRENCY,@RATE
610
			END
611
			CLOSE XmlDataCat;
612
			DEALLOCATE XmlDataCat;
613
		END
614
		IF(@p_REQ_TYPE = 'D' OR @p_REQ_TYPE='I')
615
		BEGIN
616
			----------------------------
617
			--INSERT FROM ServiceCursor
618
			SET @INDEX = 0
619
			FETCH NEXT FROM XmlDataService INTO @REQ_PAY_SERVICE_NAME,@RECEIVE_ID_SERVICE,@RECEIVE_NAME_SERVICE,@REQ_PAY_REASON_SERVICE,@TOTAL_AMT_SERVICE,
620
			@REQ_PAY_TYPE_SERVICE,@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@DEPT_ID_SRV,@CURRENCY,@RATE
621
			WHILE @@fetch_status=0 
622
			BEGIN
623

    
624
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
625
				IF(@p_TYPE_FUNCTION ='SEND')
626
				BEGIN
627
					SET @INDEX = @INDEX +1
628
					--------------- begin validate--------------
629
					--IF(@p_TYPE_FUNCTION ='SEND' AND @p_REQ_TYPE ='D')
630
						--BEGIN
631
							IF(@DEPT_ID_SRV IS NULL OR @DEPT_ID_SRV ='')
632
							BEGIN
633
								ROLLBACK TRANSACTION
634
								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
635
								RETURN '-1'
636
							END	
637
				
638
							IF(@TOTAL_AMT_SERVICE IS NULL)
639
							BEGIN
640
								ROLLBACK TRANSACTION
641
								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
642
								RETURN '-1'
643
							END
644
				
645
							IF(@TOTAL_AMT_SERVICE < 0)
646
							BEGIN
647
								ROLLBACK TRANSACTION
648
								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
649
								RETURN '-1'
650
							END
651
						--END
652
					--------------- end validate ----------------
653
				END
654

    
655
				
656
				
657
				DECLARE @p_REQ_PAY_SERVICE_ID VARCHAR(15);
658
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SERVICE', @p_REQ_PAY_SERVICE_ID OUT;
659
				IF @p_REQ_PAY_SERVICE_ID='' OR @p_REQ_PAY_SERVICE_ID IS NULL GOTO ABORT;
660
				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)
661
				VALUES (@p_REQ_PAY_SERVICE_ID,@p_REQ_PAY_ID,@REQ_PAY_SERVICE_NAME,@RECEIVE_ID_SERVICE,@REQ_PAY_REASON_SERVICE,@TOTAL_AMT_SERVICE,
662
				@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)
663
				IF @@error<>0 GOTO ABORT;
664
				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,
665
				@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@DEPT_ID_SRV,@CURRENCY,@RATE
666
			END
667
			CLOSE XmlDataService;
668
			DEALLOCATE XmlDataService;
669
		END
670
		-- INSERT PO/ HỢP ĐỒNG
671
		IF((@p_REQ_TYPE = 'P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE ='I')
672
		BEGIN
673
				DECLARE XmlDataPO CURSOR LOCAL FOR
674
				SELECT *
675
				FROM
676
				OPENXML(@hdocPO, '/Root/XmlDataPO', 2)
677
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
678
				OPEN XmlDataPO;
679
				SET @INDEX_PO = 0
680
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
681
				WHILE @@fetch_status=0 
682
				BEGIN
683
					SET @INDEX_PO = @INDEX_PO +1
684
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
685
					--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID 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)))
686
					--BEGIN
687
					--	ROLLBACK TRANSACTION
688
					--	SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO/ hợp đồng số '+(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
689
					--	RETURN '-1'
690
					--END
691
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
692
					--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
693
					--BEGIN
694
					--	ROLLBACK TRANSACTION
695
					--	SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO/ hợp đồng số '+(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đang được thanh toán. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
696
					--	RETURN '-1'
697
					--END
698
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
699
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
700
					IF(@p_TYPE_FUNCTION ='SEND')
701
					BEGIN
702
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='C' AND REQ_PAY_ID 
703
					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)))
704
					BEGIN
705
						ROLLBACK TRANSACTION
706
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
707
						(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
708
						RETURN '-1'
709
					END
710
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
711
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='C' AND REQ_PAY_ID IN
712
							(SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE AUTH_STATUS_KT NOT IN ('A','E','R') OR AUTH_STATUS_KT IS NULL) AND REQ_PAY_ID <>@p_REQ_PAY_ID))
713
					BEGIN
714
						ROLLBACK TRANSACTION
715
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
716
						(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
717
						RETURN '-1'
718
					END
719
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
720
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P' AND REQ_PAY_ID 
721
					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)))
722
					BEGIN
723
						ROLLBACK TRANSACTION
724
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
725
						(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
726
						RETURN '-1'
727
					END
728
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
729
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P' AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE AUTH_STATUS_KT NOT IN ('A','E','R') OR AUTH_STATUS_KT IS NULL) AND REQ_PAY_ID <>@p_REQ_PAY_ID))
730
					BEGIN
731
						ROLLBACK TRANSACTION
732
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
733
						(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đang được thanh toán. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
734
						RETURN '-1'
735
					END
736
					--- KIEM TRA XEM PO NAY DUOC THANH TOAN HAY CHUA
737
					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' )))
738
					BEGIN
739
						ROLLBACK TRANSACTION
740
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
741
						(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 để thanh toán hoặc xóa bản nháp này!' ErrorDesc
742
						RETURN '-1'
743
					END
744
					END
745
					DECLARE @REQ_PAYDTID VARCHAR(15);
746
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
747
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
748
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
749
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
750
				IF @@error<>0 GOTO ABORT;
751
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
752
				END
753
				CLOSE XmlDataPO;
754
				DEALLOCATE XmlDataPO;
755
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
756
			----------------------------
757
--INSERT FROM ScheduleCursor
758
			--ScheduleCursor
759
			DECLARE @PO_ID varchar(15), @PAY_PHASE NVARCHAR(250), @AMT_ADVANCE decimal(18,2),
760
			@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),@AMT_PAY_REAL DECIMAL(18,2), @AMT_PAY_DO DECIMAL(18,2)
761
			DECLARE XmlDataSchedule CURSOR LOCAL FOR
762

    
763
			SELECT * FROM OPENXML(@hdocSchedule, 'Root/XmlDataSchedule',2)
764
			WITH(PO_ID varchar(15), PAY_PHASE varchar(15),AMT_PAY decimal(18,2),REQ_ADV_ID varchar(15),AMT_ADVANCE decimal(18,2),
765
			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),
766
			REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),AMT_PAY_DO DECIMAL(18,2),AMT_PAY_REAL DECIMAL(18,2))
767

    
768
			OPEN XmlDataSchedule
769
			SET @INDEX_PO = 0
770
			FETCH NEXT FROM XmlDataSchedule INTO @PO_ID, @PAY_PHASE,@AMT_PAY,@REQ_ADV_ID, @AMT_ADVANCE,@AMT_REMAIN,@REQ_AD_DT,
771
			@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_DO,@AMT_PAY_REAL
772
			WHILE @@fetch_status=0 
773
			BEGIN
774
				--IF(@AMT_REMAIN =0)
775
				--BEGIN
776
				--	SET @PROCESS ='3'
777
				--END
778
				--IF(@PROCESS <>'2')
779
				--BEGIN
780
				--	SET @TOTAL_SCHEDULE_AMT = @TOTAL_SCHEDULE_AMT +@AMT_REMAIN
781
				--END
782
				----
783
				SET @INDEX_PO = @INDEX_PO +1
784
				--IF(@p_TYPE_FUNCTION ='SEND')
785
				--BEGIN
786
				--	IF(ISNULL(@AMT_PAY_REAL,0) >ISNULL(@AMT_REMAIN,1))
787
				--	BEGIN
788
				--		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 không được vượt quá số tiền còn lại của kì thanh toán' ErrorDesc
789
				--		RETURN '-1'
790
				--	END
791
				--END
792
				SET @TOTAL_SCHEDULE_AMT =@TOTAL_SCHEDULE_AMT+(@AMT_PAY - @AMT_ADVANCE -@AMT_PAY_DO)
793
				
794
				DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
795
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
796
				IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
797
				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,
798
				CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE, AMT_PAY_REAL)
799
				VALUES (@p_REQ_PAY_SCHEDULE_ID,@p_REQ_PAY_ID,@PAY_ID, @AMT_PAY, @PAY_PHASE,@REQ_ADV_ID, @AMT_ADVANCE,
800
				--IIF(@PROCESS<>'2',(@AMT_PAY-@AMT_ADVANCE),0),
801
				@AMT_PAY_DO,
802
				@AMT_REMAIN,GETDATE(),CONVERT(DATETIME,@REQ_AD_DT,103),@PROCESS,@p_MAKER_ID,GETDATE(),'U','','PAY',
803
				@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@p_REQ_TYPE_CURRENCY,@p_RATE,@AMT_PAY_REAL)
804
			IF @@error<>0 GOTO ABORT;
805
			FETCH NEXT FROM XmlDataSchedule INTO @PO_ID, @PAY_PHASE, @AMT_PAY, @REQ_ADV_ID, @AMT_ADVANCE,@AMT_REMAIN,@REQ_AD_DT,
806
			@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_DO,@AMT_PAY_REAL
807
			END
808
			CLOSE XmlDataSchedule;
809
			DEALLOCATE XmlDataSchedule;
810
			-- VALIDATE DANH SACH HOAN UNG -- LUCTV BO SUNG 19-11-2019. CHUA BIET CO VALIDATE HAY KHONG NEN VALIDATE DUOI STORE
811
			--IF(@INDEX_PO =0)
812
			--BEGIN
813
			--	ROLLBACK TRANSACTION
814
			--	SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Danh sách các khoản hoàn tạm ứng không được phép trống' ErrorDesc
815
			--	RETURN '-1'
816
			--END
817
			-- VALIDATE SO TIEN
818
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
819
			--BEGIN
820
			--	ROLLBACK TRANSACTION
821
			--	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
822
			--	RETURN '-1'
823
			--END
824
			----
825
		END
826
		-- THANH TOAN HOP DONG DINH KY
827
		IF((@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y') OR @p_REQ_TYPE ='I')
828
		BEGIN
829
				
830
				/*DECLARE XmlDataPO CURSOR LOCAL FOR
831
				SELECT *
832
				FROM
833
				OPENXML(@hdocPO, '/Root/XmlDataPO', 2)
834
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
835
				OPEN XmlDataPO;
836
				SET @INDEX_PO = 0
837
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
838
				WHILE @@fetch_status=0 
839
				BEGIN
840
					SET @INDEX_PO = @INDEX_PO +1
841
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
842
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
843
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
844
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
845
					(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
846
				IF @@error<>0 GOTO ABORT;
847
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
848
				END
849
				CLOSE XmlDataPO;
850
				DEALLOCATE XmlDataPO;
851
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	*/
852
			----------------------------
853
			-- INSERT PRIOD
854
				DECLARE @INDEX_PERIOD INT, @CONTRACT_PERIOD_ID VARCHAR(15),@IS_PERIOD_CLOSED VARCHAR(1), @DELIVERY_DT VARCHAR(20)
855
				DECLARE XmlDataRecurring CURSOR FOR
856
				SELECT *
857
				FROM
858
				OPENXML(@hdocRecurring, '/Root/XmlDataRecurring', 2)
859
				WITH(CONTRACT_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15), DELIVERY_DT VARCHAR(20))
860
				OPEN XmlDataRecurring;
861
				SET @INDEX_PERIOD = 0
862
				FETCH NEXT FROM XmlDataRecurring INTO @CONTRACT_PERIOD_ID,@IS_PERIOD_CLOSED,@REF_TYPE, @DELIVERY_DT
863
				WHILE @@fetch_status=0 
864
				BEGIN
865
					DECLARE @REQ_PAYDTID_PERIOD VARCHAR(15);
866
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_PERIOD OUT;
867
					IF @REQ_PAYDTID_PERIOD='' OR @REQ_PAYDTID_PERIOD IS NULL GOTO ABORT;
868
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE, DELIVERY_DT) 
869
					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))
870
					IF @@error<>0 GOTO ABORT;
871
					FETCH NEXT FROM XmlDataRecurring INTO @CONTRACT_PERIOD_ID,@IS_PERIOD_CLOSED,@REF_TYPE, @DELIVERY_DT
872
				END
873
				CLOSE XmlDataRecurring;
874
				DEALLOCATE XmlDataRecurring;
875
			--INSERT DETAIL PERIOD	
876
				DECLARE XmlDataPeriod CURSOR LOCAL FOR
877
				SELECT *
878
				FROM
879
				OPENXML(@hdocPeriod, '/Root/XmlDataPeriod', 2)
880
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
881
				OLD_INDEX DECIMAL(18,0),NEW_INDEX DECIMAL(18,0),AMT_PAY DECIMAL(18,2),CURRENCY VARCHAR(5), 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),TYPE_COST VARCHAR(15), FR_LEVEL INT,TO_LEVEL INT)
882
				OPEN XmlDataPeriod;
883
				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),
884
				@FROM_DATE VARCHAR(20),@TO_DATE VARCHAR(20),@AD_PAY_ID VARCHAR(15), @_PROCESS VARCHAR(5),@PARENT_ID VARCHAR(15), @REASON_TTDK NVARCHAR(2000)
885
				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,
886
				@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK,@TYPE_COST, @FR_LEVEL ,@TO_LEVEL
887
				WHILE @@fetch_status=0 
888
				BEGIN
889
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
890
					IF(@p_TYPE_FUNCTION ='SEND')
891
					BEGIN
892
						IF(@NEW_INDEX <=@OLD_INDEX AND (@NEW_INDEX >0 AND @OLD_INDEX >0) )
893
						BEGIN
894
							ROLLBACK TRANSACTION
895
							SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'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
896
							RETURN '-1'
897
						END
898
						IF(@PROCESS ='2' AND (@AD_PAY_ID IS NULL OR @AD_PAY_ID =''))
899
						BEGIN
900
							ROLLBACK TRANSACTION
901
							SELECT '-1' Result,'' REQ_PAY_ID,N'Lưới chi tiết thanh toán định kì: Tại hình thức thanh toán Hoàn ứng, số phiếu tạm ứng không được phép để trống' ErrorDesc
902
							RETURN '-1'
903
						END
904
						IF( @PAY_ADV_ID IS NOT NULL AND @PAY_ADV_ID <> '' AND (SELECT ISNULL(REQ_AMT,0.00) - ISNULL(PAY_AMT,0.00) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@PAY_ADV_ID) <=0)
905
						BEGIN
906
							ROLLBACK TRANSACTION
907
							SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Bạn không được phép hoàn tạm ứng cho phiếu đã được hoàn ứng xong! Vui lòng gỡ khỏi danh sách kì thanh toán & hoàn ứng' ErrorDesc
908
							RETURN '-1'
909
						END
910
						-- NEU LÀ DINH KI THI HD PHAI KHAC NULL
911
						IF(@CONTRACT_ID IS NULL OR @CONTRACT_ID ='' )
912
						BEGIN
913
							ROLLBACK TRANSACTION
914
							SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'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
915
							RETURN '-1'
916
						END
917
						-- KIEM TRA CHI TIET HOP DONG PHAI NAM TRONG DANH SACH CAC HOP DONG
918
						IF(@CONTRACT_ID IS NOT NULL AND  @CONTRACT_ID <> '' )
919
						BEGIN
920
							IF(NOT EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REF_ID =@CONTRACT_ID))
921
							BEGIN
922
								ROLLBACK TRANSACTION
923
								SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'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
924
								RETURN '-1'
925
							END
926
						END
927
					END
928
					IF(@PROCESS ='2' AND (@AD_PAY_ID IS NULL OR @AD_PAY_ID =''))
929
					BEGIN
930
							ROLLBACK TRANSACTION
931
							SELECT '-1' Result,'' REQ_PAY_ID,N'Lưới chi tiết thanh toán định kì: Tại hình thức thanh toán Hoàn ứng, số phiếu tạm ứng không được phép để trống' ErrorDesc
932
							RETURN '-1'
933
					END
934
					IF( @PAY_ADV_ID IS NOT NULL AND @PAY_ADV_ID <> '' AND (SELECT ISNULL(REQ_AMT,0.00) - ISNULL(PAY_AMT,0.00) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@PAY_ADV_ID) <=0)
935
					BEGIN
936
							ROLLBACK TRANSACTION
937
							SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Bạn không được phép hoàn tạm ứng cho phiếu đã được hoàn ứng xong! Vui lòng gỡ khỏi danh sách kì thanh toán & hoàn ứng' ErrorDesc
938
							RETURN '-1'
939
					END
940
					DECLARE @PERIOD_ID VARCHAR(15);
941
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
942
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
943

    
944
					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, 
945
						TO_DATE,AD_PAY_ID,PROCESS,PARENT_ID,PAY_PHASE,REASON,TYPE_COST, FR_LEVEL ,TO_LEVEL)
946
					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,CONVERT(DATE,@FROM_DATE,103),
947
						CONVERT(DATE,@TO_DATE,103),@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK,@TYPE_COST, @FR_LEVEL ,@TO_LEVEL )
948

    
949
				-- LUCTV 16 03 2021 BO SUNG BANG LOG DE FIX LOI HOÀN TẠM ỨNG ĐỊNH KỲ NHƯNG SỐ PHIẾU BỊ TRỐNG
950
				INSERT INTO TR_REQ_PAY_PER_LOG VALUES (@p_REQ_PAY_ID, @PAY_ADV_ID)
951
				IF @@error<>0 GOTO ABORT;
952
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
953
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK,@TYPE_COST, @FR_LEVEL ,
954
				@TO_LEVEL
955
			END
956
			CLOSE XmlDataPeriod;
957
			DEALLOCATE XmlDataPeriod;
958

    
959
		END
960
		
961
--doanptt 15/02/2022		
962
-- INSERT JOB
963
-- DS PHIEU YEU CAU CONG TAC
964
				DECLARE @REQ_PAY_JOB_ID varchar(15) ,@REQ_PAY_ID varchar(15),@REQ_ID varchar(15), @REQ_CODE varchar(15), @MAKER_ID varchar(15),
965
				@CREATE_DT varchar(15), @PAY_TYPE_J VARCHAR(5), @PAY_PHASE_J NVARCHAR(250), @PAY_AMT DECIMAL(18,0), @PAY_DESC NVARCHAR(1000)
966
				, @AUTH_STATUS VARCHAR(1), @AUTH_STATUS_KT VARCHAR(1)
967
				DECLARE XmlDataJob CURSOR LOCAL FOR
968
				SELECT * FROM OPENXML(@hdocJob, 'Root/XmlDataJob',2) 
969
				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), 
970
				PAY_PHASE NVARCHAR(250), PAY_AMT DECIMAL(18,0), PAY_DESC NVARCHAR(1000), AUTH_STATUS VARCHAR(1), AUTH_STATUS_KT VARCHAR(1))
971
				OPEN XmlDataJob
972

    
973
--- INSERT PHIEU YEU CAU CONG TAC
974
				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 , 
975
				@PAY_AMT , @PAY_DESC, @AUTH_STATUS , @AUTH_STATUS_KT
976
				WHILE @@fetch_status=0 
977
				BEGIN
978
				/*--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
979
					SET @INDEX_NS = @INDEX_NS +1
980
					--KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
981
					IF(@p_TYPE_FUNCTION ='SEND')
982
					BEGIN
983
						IF(ISNULL(@AMT_EXE,0) =0)
984
						BEGIN
985
							ROLLBACK TRANSACTION
986
								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
987
								RETURN '-1'
988
						END
989
						IF((@AMT_EXE  > @AMT_REMAIN_GD) AND ((SELECT GD_TYPE_ID FROM CM_GOODS WHERE GD_ID =@GD_ID) ='NS'))
990
						BEGIN
991
								ROLLBACK TRANSACTION
992
								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
993
								RETURN '-1'
994
						END		
995
					END
996
					IF(NOT EXISTS(SELECT * FROM PL_IMPORT_DT WHERE TRADE_ID =@TRADE_ID AND IMP_YEAR =YEAR(GETDATE()))
997
						  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())))
998
					BEGIN
999
								ROLLBACK TRANSACTION
1000
								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
1001
								RETURN '-1'
1002
					END*/
1003

    
1004
					DECLARE @p_REQ_JOB_ID VARCHAR(15);
1005
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_JOB', @p_REQ_JOB_ID OUT;
1006
					IF @p_REQ_JOB_ID='' OR @p_REQ_JOB_ID IS NULL GOTO ABORT;
1007
					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)
1008
					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)
1009
					IF @@error<>0 GOTO ABORT;
1010
					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
1011
				END;
1012
				CLOSE XmlDataJob;
1013
				DEALLOCATE XmlDataJob;
1014
--- END INSERT PHIEU YEU CAU CONG TAC
1015

    
1016
-- INSERT JOB DT 
1017
-- DS CHI TIET PHIEU YEU CAU CONG TAC
1018
				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),
1019
				@CREATE_DT_DT varchar(15), @FULLNAME_DT NVARCHAR(250), @TLNAME_DT VARCHAR(15), @JOB_PLACE_DT NVARCHAR(MAX), @FRMDATE_DT VARCHAR(15), @TODATE_DT VARCHAR(15),
1020
				@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), 
1021
				@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)
1022
				DECLARE XmlDataJobDT CURSOR LOCAL FOR
1023
				SELECT * FROM OPENXML(@hdocJobDT, 'Root/XmlDataJobDT',2) 
1024
				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), 
1025
				FULLNAME nvarchar(250), TLNAME_DT VARCHAR(15), JOB_PLACE NVARCHAR(MAX), FRMDATE varchar(15), TODATE varchar(15),NUMBER_DAY decimal(18,0), DAY_RATE decimal(18,0), 
1026
				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) , 
1027
				AUTH_STATUS varchar(1), AUTH_STATUS_KT varchar(1)) 
1028
				OPEN XmlDataJobDT
1029

    
1030
--- INSERT CHI TIÊT PHIEU YEU CAU CONG TAC
1031
				FETCH NEXT FROM XmlDataJobDT INTO @REQ_PAY_JOB_DT_ID , @REQ_PAY_ID_DT, @REQ_ID_DT, @REQ_CODE_DT, @MAKER_ID_DT,
1032
				@CREATE_DT_DT , @FULLNAME_DT , @TLNAME_DT, @JOB_PLACE_DT , @FRMDATE_DT , @TODATE_DT ,
1033
				@NUMBER_DAY_DT, @DAY_RATE_DT , @JOB_COST_DT , @TYPE_TRANS_DT , @COST_MOVE_DT, 
1034
				@COST_RESIDENCE_DT, @COST_OTHER_DT , @COST_AMT_DT , @AUTH_STATUS_DT, @AUTH_STATUS_KT_DT
1035
				WHILE @@fetch_status=0 
1036
				BEGIN
1037
				/*--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
1038
					SET @INDEX_NS = @INDEX_NS +1
1039
					--KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1040
					IF(@p_TYPE_FUNCTION ='SEND')
1041
					BEGIN
1042
						IF(ISNULL(@AMT_EXE,0) =0)
1043
						BEGIN
1044
							ROLLBACK TRANSACTION
1045
								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
1046
								RETURN '-1'
1047
						END
1048
						IF((@AMT_EXE  > @AMT_REMAIN_GD) AND ((SELECT GD_TYPE_ID FROM CM_GOODS WHERE GD_ID =@GD_ID) ='NS'))
1049
						BEGIN
1050
								ROLLBACK TRANSACTION
1051
								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
1052
								RETURN '-1'
1053
						END		
1054
					END
1055
					IF(NOT EXISTS(SELECT * FROM PL_IMPORT_DT WHERE TRADE_ID =@TRADE_ID AND IMP_YEAR =YEAR(GETDATE()))
1056
						  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())))
1057
					BEGIN
1058
								ROLLBACK TRANSACTION
1059
								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
1060
								RETURN '-1'
1061
					END*/
1062

    
1063
					DECLARE @p_REQ_JOB_DT_ID VARCHAR(15);
1064
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_JOB_DT', @p_REQ_JOB_DT_ID OUT;
1065
					IF @p_REQ_JOB_DT_ID='' OR @p_REQ_JOB_DT_ID IS NULL GOTO ABORT;
1066
					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 , 
1067
													JOB_COST , TYPE_TRANS , COST_MOVE , COST_RESIDENCE , COST_OTHER , COST_AMT , AUTH_STATUS, AUTH_STATUS_KT)
1068
					VALUES (@p_REQ_JOB_DT_ID , @p_REQ_PAY_ID, @REQ_ID_DT, @REQ_CODE_DT, @MAKER_ID_DT,
1069
							GETDATE() , @FULLNAME_DT ,@TLNAME_DT, @JOB_PLACE_DT , CONVERT(DATE,@FRMDATE_DT,103) , CONVERT(DATE,@TODATE_DT,103) ,
1070
							@NUMBER_DAY_DT, @DAY_RATE_DT , @JOB_COST_DT , @TYPE_TRANS_DT , @COST_MOVE_DT, 
1071
							@COST_RESIDENCE_DT, @COST_OTHER_DT , 
1072
							ISNULL(@JOB_COST_DT, 0) + ISNULL(@COST_MOVE_DT, 0) + ISNULL(@COST_RESIDENCE_DT, 0) + ISNULL(@COST_OTHER_DT, 0), 
1073
							@AUTH_STATUS_DT, @AUTH_STATUS_KT_DT)
1074
					IF @@error<>0 GOTO ABORT;
1075
					FETCH NEXT FROM XmlDataJobDT INTO @REQ_PAY_JOB_DT_ID , @REQ_PAY_ID_DT, @REQ_ID_DT, @REQ_CODE_DT, @MAKER_ID_DT,
1076
									@CREATE_DT_DT , @FULLNAME_DT , @TLNAME_DT, @JOB_PLACE_DT , @FRMDATE_DT , @TODATE_DT ,
1077
									@NUMBER_DAY_DT, @DAY_RATE_DT , @JOB_COST_DT , @TYPE_TRANS_DT , @COST_MOVE_DT, 
1078
									@COST_RESIDENCE_DT, @COST_OTHER_DT , @COST_AMT_DT , @AUTH_STATUS_DT, @AUTH_STATUS_KT_DT
1079
				END;
1080
				CLOSE XmlDataJobDT;
1081
				DEALLOCATE XmlDataJobDT;
1082
--- END INSERT CHI TIET PHIEU YEU CAU CONG TAC
1083

    
1084

    
1085
--doanptt 17/02/2022		
1086
-- INSERT DRIVE
1087
-- DS PHIEU YEU CAU CONG TAC
1088
				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)
1089
				DECLARE XmlDataDrive CURSOR LOCAL FOR
1090
				SELECT * FROM OPENXML(@hdocDrive, 'Root/XmlDataDrive',2) 
1091
				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), 
1092
				PAY_PHASE NVARCHAR(250), PAY_AMT DECIMAL(18,0), PAY_DESC NVARCHAR(1000), AUTH_STATUS VARCHAR(1), AUTH_STATUS_KT VARCHAR(1), 
1093
				RATE_GAS_100KM decimal(18,0), CAR_TYPE NVARCHAR(150))
1094
				OPEN XmlDataDrive
1095

    
1096
--- INSERT PHIEU YEU CAU CONG TAC
1097
				FETCH NEXT FROM XmlDataDrive INTO @REQ_PAY_DRIVE_ID ,@REQ_PAY_ID ,@CAR_ID , @CAR_PLATE, @MAKER_ID , @CREATE_DT , @PAY_TYPE , @PAY_PHASE, 
1098
				@PAY_AMT , @PAY_DESC, @AUTH_STATUS , @AUTH_STATUS_KT, @RATE_GAS_100KM, @CAR_TYPE
1099
				WHILE @@fetch_status=0 
1100
				BEGIN
1101
				/*--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
1102
					SET @INDEX_NS = @INDEX_NS +1
1103
					--KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1104
					IF(@p_TYPE_FUNCTION ='SEND')
1105
					BEGIN
1106
						IF(ISNULL(@AMT_EXE,0) =0)
1107
						BEGIN
1108
							ROLLBACK TRANSACTION
1109
								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
1110
								RETURN '-1'
1111
						END
1112
						IF((@AMT_EXE  > @AMT_REMAIN_GD) AND ((SELECT GD_TYPE_ID FROM CM_GOODS WHERE GD_ID =@GD_ID) ='NS'))
1113
						BEGIN
1114
								ROLLBACK TRANSACTION
1115
								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
1116
								RETURN '-1'
1117
						END		
1118
					END
1119
					IF(NOT EXISTS(SELECT * FROM PL_IMPORT_DT WHERE TRADE_ID =@TRADE_ID AND IMP_YEAR =YEAR(GETDATE()))
1120
						  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())))
1121
					BEGIN
1122
								ROLLBACK TRANSACTION
1123
								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
1124
								RETURN '-1'
1125
					END*/
1126

    
1127
					DECLARE @p_REQ_DRIVE_ID VARCHAR(15);
1128
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_DRIVE', @p_REQ_DRIVE_ID OUT;
1129
					IF @p_REQ_DRIVE_ID='' OR @p_REQ_DRIVE_ID IS NULL GOTO ABORT;
1130
					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)
1131
					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)
1132
					IF @@error<>0 GOTO ABORT;
1133
					FETCH NEXT FROM XmlDataDrive INTO @REQ_PAY_DRIVE_ID ,@REQ_PAY_ID ,@CAR_ID , @CAR_PLATE, @MAKER_ID , @CREATE_DT , @PAY_TYPE , @PAY_PHASE, 
1134
					@PAY_AMT , @PAY_DESC, @AUTH_STATUS , @AUTH_STATUS_KT, @RATE_GAS_100KM, @CAR_TYPE
1135
				END;
1136
				CLOSE XmlDataDrive;
1137
				DEALLOCATE XmlDataDrive;
1138
--- END INSERT PHIEU YEU CAU CONG TAC
1139

    
1140
-- INSERT DRIVE DT 
1141
-- DS CHI TIET PHIEU YEU CAU CONG TAC
1142
				DECLARE @REQ_PAY_DRIVE_DT_ID varchar(15), @FULLNAME NVARCHAR(250), @BRANCH_REQ VARCHAR(15), 
1143
				@KM_START decimal(18,2), @KM_END varchar(250), @KM_USED decimal(18,2), 
1144
				@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),
1145
				@CREATE_SCHEDULE NVARCHAR(250), @TRUONGDONVI VARCHAR(15), @INVENTORY_GAS_START decimal(18,2)
1146
				DECLARE XmlDataDriveDT CURSOR LOCAL FOR
1147
				SELECT * FROM OPENXML(@hdocDriveDT, 'Root/XmlDataDriveDT',2) 
1148
				WITH(REQ_PAY_DRIVE_ID varchar(15), REQ_PAY_ID varchar(15), CAR_ID varchar(15), MAKER_ID varchar(15), CREATE_DT varchar(15), 
1149
				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), 
1150
				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), 
1151
				NOTES NVARCHAR(MAX), COST_INCURRED decimal(18,2), CREATE_SCHEDULE NVARCHAR(250), TRUONGDONVI VARCHAR(15) , 
1152
				AUTH_STATUS varchar(1), AUTH_STATUS_KT varchar(1), INVENTORY_GAS_START decimal(18,2)) 
1153
				OPEN XmlDataDriveDT
1154

    
1155
				DECLARE @INDEX_DRIVEDT INT = 0
1156

    
1157
--- INSERT CHI TIÊT PHIEU YEU CAU CONG TAC
1158
				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, 
1159
				@RATE_GAS_100KM, @KM_START, @KM_END, @KM_USED, @RATE_GAS, @REAL_GAS, @REDUNDANCY_GAS, @INVENTORY_GAS, @NOTES, @COST_INCURRED, @CREATE_SCHEDULE,
1160
				@TRUONGDONVI, @AUTH_STATUS, @AUTH_STATUS_KT, @INVENTORY_GAS_START
1161
				WHILE @@fetch_status=0 
1162
				BEGIN
1163
				/*--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
1164
					SET @INDEX_NS = @INDEX_NS +1
1165
					--KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1166
					IF(@p_TYPE_FUNCTION ='SEND')
1167
					BEGIN
1168
						IF(ISNULL(@AMT_EXE,0) =0)
1169
						BEGIN
1170
							ROLLBACK TRANSACTION
1171
								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
1172
								RETURN '-1'
1173
						END
1174
						IF((@AMT_EXE  > @AMT_REMAIN_GD) AND ((SELECT GD_TYPE_ID FROM CM_GOODS WHERE GD_ID =@GD_ID) ='NS'))
1175
						BEGIN
1176
								ROLLBACK TRANSACTION
1177
								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
1178
								RETURN '-1'
1179
						END		
1180
					END
1181
					IF(NOT EXISTS(SELECT * FROM PL_IMPORT WHERE TRADE_ID =@TRADE_ID AND IMP_YEAR =YEAR(GETDATE()))
1182
						  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())))
1183
					BEGIN
1184
								ROLLBACK TRANSACTION
1185
								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
1186
								RETURN '-1'
1187
					END*/
1188
					SET @INDEX_DRIVEDT = @INDEX_DRIVEDT + 1;
1189
                    --hieuhm 09/01/2022 kiểm tra số lít tồn chuyển kì sau không được nhỏ hơn 0
1190
                    --IF(CONVERT(INT,@INVENTORY_GAS) < 0)
1191
                    --BEGIN
1192
                    --    ROLLBACK TRANSACTION
1193
                    --    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
1194
                    --    RETURN '-1'
1195
                    --END
1196

    
1197
					DECLARE @p_REQ_DRIVE_DT_ID VARCHAR(15);
1198
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_DRIVE_DT', @p_REQ_DRIVE_DT_ID OUT;
1199
					IF @p_REQ_DRIVE_DT_ID='' OR @p_REQ_DRIVE_DT_ID IS NULL GOTO ABORT;
1200
					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,
1201
					RATE_GAS_100KM, KM_START, KM_END, KM_USED, RATE_GAS, REAL_GAS, REDUNDANCY_GAS, INVENTORY_GAS, COST_INCURRED, NOTES, CREATE_SCHEDULE, TRUONGDONVI,
1202
					AUTH_STATUS, AUTH_STATUS_KT, INVENTORY_GAS_START)
1203
					VALUES (@p_REQ_DRIVE_DT_ID , @p_REQ_PAY_ID, @CAR_ID, @MAKER_ID, @CREATE_DT, @BRANCH_REQ, @PAY_PHASE, @CAR_TYPE, @CAR_PLATE, 
1204
					@RATE_GAS_100KM, @KM_START, @KM_END, @KM_USED, @RATE_GAS, @REAL_GAS, @REDUNDANCY_GAS, @INVENTORY_GAS, @COST_INCURRED, @NOTES,
1205
					@CREATE_SCHEDULE, @TRUONGDONVI, @AUTH_STATUS, @AUTH_STATUS_KT, @INVENTORY_GAS_START)
1206
					IF @@error<>0 GOTO ABORT;
1207
					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, 
1208
					@RATE_GAS_100KM, @KM_START, @KM_END, @KM_USED, @RATE_GAS, @REAL_GAS, @REDUNDANCY_GAS, @INVENTORY_GAS, @NOTES, @COST_INCURRED, @CREATE_SCHEDULE,
1209
					@TRUONGDONVI, @AUTH_STATUS, @AUTH_STATUS_KT, @INVENTORY_GAS_START
1210
				END;
1211
				CLOSE XmlDataDriveDT;
1212
				DEALLOCATE XmlDataDriveDT;
1213
--- END INSERT CHI TIET PHIEU YEU CAU CONG TAC
1214

    
1215
-- INSERT REQUEST CAR
1216
-- DS PHIEU YEU CAU XE
1217
				DECLARE @REQ_PAY_REQUEST_CAR_ID varchar(15), @REQ_CAR_REQ_PAY_ID VARCHAR(15), @REQ_CAR_REQ_ID VARCHAR(15), 
1218
				@REQ_CAR_REQ_CODE varchar(25), @BRANCH_CREATE_FULLNAME nvarchar(1000), @DEP_CREATE_FULLNAME nvarchar(100), 
1219
				@REQ_CAR_NOTES NVARCHAR(1000), @REQ_CAR_MAKER_ID varchar(25), @REQ_CAR_CREATE_DT varchar(50), @REQ_CAR_CHECKER_ID varchar(25), @REQ_CAR_APPROVE_DT varchar(50)
1220

    
1221
				DECLARE XmlDataRequestCar CURSOR LOCAL FOR
1222
				SELECT * FROM OPENXML(@hdocRequestCar, 'Root/XmlDataReqCar',2) 
1223
				WITH(REQ_PAY_REQUEST_CAR_ID varchar(15), REQ_PAY_ID varchar(15), REQ_ID varchar(15), REQ_CODE varchar(25), MAKER_ID varchar(15), CREATE_DT varchar(50),
1224
				CHECKER_ID varchar(15), APPROVE_DT varchar(50), BRANCH_CREATE_FULLNAME nvarchar(1000), DEP_CREATE_FULLNAME nvarchar(1000), NOTES nvarchar(1000)) 
1225
				OPEN XmlDataRequestCar
1226

    
1227
--- INSERT PHIEU YEU CAU XE
1228
				FETCH NEXT FROM XmlDataRequestCar INTO @REQ_PAY_REQUEST_CAR_ID, @REQ_CAR_REQ_PAY_ID, @REQ_CAR_REQ_ID, @REQ_CAR_REQ_CODE, @REQ_CAR_MAKER_ID, @REQ_CAR_CREATE_DT,
1229
				@REQ_CAR_CHECKER_ID, @REQ_CAR_APPROVE_DT, @BRANCH_CREATE_FULLNAME, @DEP_CREATE_FULLNAME, @REQ_CAR_NOTES
1230
				WHILE @@fetch_status=0 
1231
				BEGIN
1232
					DECLARE @p_REQUEST_CAR_ID VARCHAR(15);
1233
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_REQUEST_CAR', @p_REQUEST_CAR_ID OUT;
1234
					IF @p_REQUEST_CAR_ID='' OR @p_REQUEST_CAR_ID IS NULL GOTO ABORT;
1235

    
1236
						
1237
					INSERT INTO [dbo].[TR_REQ_PAY_REQUEST_CAR]
1238
							   ([REQ_PAY_REQUEST_CAR_ID]
1239
							   ,[REQ_PAY_ID]
1240
							   ,[REQ_ID]
1241
							   ,[REQ_CODE]
1242
							   ,[MAKER_ID]
1243
							   ,[CREATE_DT]
1244
							   ,[CHECKER_ID]
1245
							   ,[APPROVE_DT]
1246
							   ,[BRANCH_CREATE_FULLNAME]
1247
							   ,[DEP_CREATE_FULLNAME]
1248
							   ,[NOTES])
1249
						 VALUES
1250
							   (@p_REQUEST_CAR_ID
1251
							   ,@p_REQ_PAY_ID
1252
							   ,@REQ_CAR_REQ_ID
1253
							   ,@REQ_CAR_REQ_CODE
1254
							   ,@REQ_CAR_MAKER_ID
1255
							   ,CONVERT(DATETIME, @REQ_CAR_CREATE_DT, 103)
1256
							   ,@REQ_CAR_CHECKER_ID
1257
							   ,CONVERT(DATETIME, @REQ_CAR_APPROVE_DT, 103)
1258
							   ,@BRANCH_CREATE_FULLNAME
1259
							   ,@DEP_CREATE_FULLNAME
1260
							   ,@REQ_CAR_NOTES)
1261

    
1262
					IF @@error<>0 GOTO ABORT;
1263
					FETCH NEXT FROM XmlDataRequestCar INTO @REQ_PAY_REQUEST_CAR_ID, @REQ_CAR_REQ_PAY_ID, @REQ_CAR_REQ_ID, @REQ_CAR_REQ_CODE, @REQ_CAR_MAKER_ID, @REQ_CAR_CREATE_DT,
1264
					@REQ_CAR_CHECKER_ID, @REQ_CAR_APPROVE_DT, @BRANCH_CREATE_FULLNAME, @DEP_CREATE_FULLNAME, @REQ_CAR_NOTES
1265
				END;
1266
				CLOSE XmlDataRequestCar;
1267
				DEALLOCATE XmlDataRequestCar;
1268
--- END INSERT PHIEU YEU CAU XE
1269

    
1270

    
1271
		--IF(1=1)
1272
		--GOTO ABORT
1273
COMMIT TRANSACTION
1274
IF(@p_TYPE_FUNCTION ='SEND') -- KIEM TRA NEU 2 BIEN XML KHAC NULL TUC LA DANG TRONG QUA TRINH LUU NHAP
1275
			BEGIN
1276
				DECLARE @BRANCH_TYPE_CR VARCHAR(15)
1277
				SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
1278
				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),
1279
				@SUM_SCHEDULE DECIMAL(18,0), @SUM_PERIOD DECIMAL(18,0), @SUM_PAY_BACK DECIMAL(18,0) =0, @SUM_ADD DECIMAL(18,0)
1280
				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)
1281
				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  
1282
				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  
1283
				AND TYPE_TRANSFER ='R'))
1284
				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)
1285
				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)
1286
				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)
1287
				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)
1288
				IF(@p_REQ_TYPE ='I')
1289
				BEGIN
1290
					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)
1291
					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)
1292
					SET @SUM_ADD =(SELECT ISNULL(SUM(AMT_ADD*ISNULL(RATE,1)),0) FROM TR_REQ_PAYMENT_DT WHERE PAY_ID =@p_REQ_PAY_ID)
1293
					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') -
1294
					(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')
1295
				END
1296
				IF(@p_REQ_TYPE ='P' AND @p_IS_PERIOD ='Y' AND @p_IS_PERIOD <>'' AND @p_IS_PERIOD IS NOT NULL)
1297
				BEGIN
1298
					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)
1299
					--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')
1300
					
1301
				END
1302
				IF(@p_REQ_TYPE ='P' AND (@p_IS_PERIOD ='N' OR (@p_IS_PERIOD ='' OR @p_IS_PERIOD IS NULL)))
1303
				BEGIN
1304
					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)	
1305
					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)
1306
				END
1307
				IF(@p_REQ_TYPE ='D')
1308
				BEGIN
1309
					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)
1310
				END
1311
				IF(@p_REQ_TYPE = 'D' AND ROUND(@SUM_NGAN_SACH,0) <> ROUND(@SUM_THANH_TOAN,0))
1312
				BEGIN
1313
					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
1314
					RETURN '-1'
1315
				END
1316
				IF(@p_REQ_TYPE <> 'D' AND ROUND(@SUM_NGAN_SACH,0) <> ROUND(@SUM_USE_REAL,0))
1317
				BEGIN
1318
					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
1319
					RETURN '-1'
1320
				END
1321
				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')
1322
				BEGIN
1323
					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
1324
					RETURN '-1'
1325
				END
1326
				IF(@p_REQ_TYPE <> 'I')
1327
				BEGIN
1328
					IF(NOT EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID  =@p_REQ_PAY_ID))
1329
					BEGIN
1330
						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
1331
						RETURN '-1'
1332
					END
1333
					IF(ROUND(@SUM_THANH_TOAN,0) <> ROUND(@SUM_PHUONG_THUC,0))
1334
					BEGIN
1335
					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(SUM(@SUM_THANH_TOAN),'#,#', 'vi-VN')  ErrorDesc
1336
					RETURN '-1'
1337
				END
1338
				END
1339
				ELSE
1340
				BEGIN
1341
					IF(ISNULL(@SUM_USE_REAL,0) >0)
1342
					BEGIN
1343
						IF(NOT EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID  =@p_REQ_PAY_ID))
1344
						BEGIN
1345
							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
1346
							RETURN '-1'	
1347
						END
1348
						IF(ROUND(@SUM_NGAN_SACH,0) <> ROUND(@SUM_USE_REAL,0))
1349
						BEGIN
1350
							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
1351
							RETURN '-1'
1352
						END
1353
						IF(ISNULL(@SUM_USE_REAL,0) <> (ISNULL(@SUM_SERVICE,0) + ISNULL(@SUM_PERIOD,0) + ISNULL(@SUM_SCHEDULE,0)))
1354
						BEGIN
1355
							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')
1356
							+ ' ' + FORMAT(SUM(@SUM_SERVICE),'#,#', 'vi-VN') + ' ' + FORMAT(SUM(@SUM_PERIOD),'#,#', 'vi-VN') + ' ' + FORMAT(SUM(@SUM_SCHEDULE),'#,#', 'vi-VN') ErrorDesc
1357
							RETURN '-1'
1358
						END
1359
					END
1360
					--IF(ABS((ISNULL(@SUM_ADD,0) - ISNULL(@SUM_PAY_BACK,0))) <> @SUM_PHUONG_THUC)
1361
					IF(((ISNULL(@SUM_ADD,0) - ISNULL(@SUM_PAY_BACK,0))) <> @SUM_PHUONG_THUC)
1362
					BEGIN
1363
						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')  ErrorDesc
1364
						RETURN '-1'
1365
					END
1366
				END
1367
				IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID  =@p_REQ_PAY_ID AND AUTH_STATUS='U'))
1368
				BEGIN
1369
					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
1370
					RETURN '-1'
1371
				END
1372
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
1373
				UPDATE TR_REQ_PAYMENT SET AUTH_STATUS ='U', PROCESS = NULL,CREATE_DT = GETDATE() WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1374
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
1375
				
1376
				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')
1377
				--- Luu log chinh sua
1378
				INSERT INTO TR_REQ_PAY_INVOICE_LOG SELECT * FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1379
				-----
1380
				UPDATE TR_REQ_PAY_SCHEDULE SET AMT_REMAIN =0.00 WHERE AMT_REMAIN <0
1381
				UPDATE TR_REQ_PAY_BUDGET SET AMT_APP= ROUND(AMT_APP,0), AMT_REMAIN = ROUND(AMT_REMAIN,0)
1382
				
1383
				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))
1384
				BEGIN
1385
					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
1386
					RETURN '4'
1387
				END
1388
				ELSE
1389
				BEGIN
1390
					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
1391
					RETURN '4'
1392
				END
1393
			END
1394
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, @p_REQ_PAY_CODE  AS REQ_PAY_CODE, N'Thêm mới thành công' ErrorDesc
1395
RETURN '0'
1396
ABORT:
1397
BEGIN
1398
		ROLLBACK TRANSACTION
1399
		--SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, '' ErrorDesc
1400
		RETURN '-1'
1401
End
1402

    
1403
GO
1404

    
1405

    
1406

    
1407
ALTER PROCEDURE [dbo].[TR_REQ_PAYMENT_Upd]
1408
@p_REQ_PAY_ID	varchar(15)= NULL,
1409
@p_REQ_PAY_CODE	varchar(50)	= NULL,
1410
@p_REQ_DT VARCHAR(20)= NULL,
1411
@p_BRANCH_ID	varchar(15)	= NULL,
1412
@p_DEP_ID	varchar(15)	= NULL,
1413
@p_REQ_REASON	nvarchar(MAX)	= NULL,
1414
@p_REQ_TYPE	varchar(15)	= NULL,
1415
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
1416
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
1417
@p_REF_ID	varchar(15)	= NULL,
1418
@p_RECEIVER_PO	nvarchar(250)	= NULL,
1419
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
1420
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
1421
@p_REQ_AMT	decimal(18, 2)	= NULL,
1422
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
1423
@p_MAKER_ID	varchar(15)	= NULL,
1424
@p_CREATE_DT	varchar(25)	= NULL,
1425
@p_EDITOR_ID	varchar(15)	= NULL,
1426
@p_AUTH_STATUS	varchar(1)	= NULL,
1427
@p_CHECKER_ID	varchar(15)	= NULL,
1428
@p_APPROVE_DT	varchar(25)	= NULL,
1429
@p_CREATE_DT_KT	varchar(25)	= NULL,
1430
@p_MAKER_ID_KT	varchar(15)	= NULL,
1431
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
1432
@p_CHECKER_ID_KT	varchar(1)	= NULL,
1433
@p_APPROVE_DT_KT  varchar(25)= null,
1434
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
1435
@p_BRANCH_CREATE	varchar(15)	= NULL,
1436
@p_NOTES	varchar(15)	= NULL,
1437
@p_RECORD_STATUS	varchar(1)	= NULL,
1438
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
1439
@p_TRANSFER_DT	varchar(25)	= NULL,
1440
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
1441
@p_PROCESS	varchar(15)	= NULL,
1442
@p_PAY_PHASE NVARCHAR(255) = NULL,
1443
@p_RATE	DECIMAL(18,2) = 0,
1444
@p_IS_PERIOD VARCHAR(5) = NULL,
1445
@p_AMT_PAY decimal(18, 0) = NULL,
1446
@p_XMP_TEMP XML = NULL,
1447
@p_XMP_TEMP_2 XML = NULL,
1448
@p_XMP_TEMP_METHOD XML = NULL,
1449
@p_XMP_TEMP_BUDGET XML = NULL,
1450
@p_XMP_TEMP_SERVICE XML = NULL,
1451
@p_XMP_TEMP_ATTACH XML = NULL,
1452
@p_XMP_TEMP_INVOICE XML = NULL,
1453
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
1454
@p_XMP_TEMP_PO XML = NULL,
1455
@p_XMP_TEMP_SCHEDULE XML = NULL,
1456
@p_XMP_TEMP_PERIOD XML = NULL,
1457
@p_XMP_ADVANCE_DT XML = NULL,
1458
--doanptt 15/02/2022
1459
@p_XMP_TEMP_PAY_JOB XML = NULL,
1460
@p_XMP_TEMP_PAY_JOB_DT XML = NULL,
1461
--doanptt 17/02/2022
1462
@p_XMP_TEMP_PAY_DRIVE XML = NULL,
1463
@p_XMP_TEMP_PAY_DRIVE_DT XML = NULL,
1464
@p_XMP_TEMP_PAY_REQUEST_CAR XML = NULL
1465

    
1466
AS
1467
-- BEGIN VALIDATE UPDATE
1468
	IF(@p_TYPE_FUNCTION <> 'SEND')
1469
	BEGIN
1470
		IF(NOT EXISTS(SELECT * FROM TR_REQ_PAYMENT where MAKER_ID = @p_MAKER_ID ))
1471
		BEGIN
1472
			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
1473
			RETURN '-1'
1474
		END
1475
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS ='U'))
1476
		BEGIN
1477
			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
1478
			RETURN '-1'
1479
		END
1480
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND  PROCESS IS NOT NULL AND PROCESS <>''))
1481
		BEGIN
1482
			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
1483
			RETURN '-1'
1484
		END
1485
		IF (@p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE ='')
1486
		BEGIN
1487
			SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu không được phép để trống' ErrorDesc
1488
			RETURN '-1'
1489
		END
1490
		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, '') <> ''))
1491
		BEGIN
1492
			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
1493
			RETURN '-1'
1494
		END
1495
	END
1496
	IF(@p_TYPE_FUNCTION = 'SEND')
1497
	BEGIN
1498
		IF(NOT EXISTS(SELECT * FROM TR_REQ_PAYMENT where MAKER_ID = @p_MAKER_ID ))
1499
		BEGIN
1500
			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
1501
			RETURN '-1'
1502
		END
1503
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS ='U'))
1504
		BEGIN
1505
			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
1506
			RETURN '-1'
1507
		END
1508
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS = 'A'))
1509
		BEGIN
1510
			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
1511
			RETURN '-1'
1512
		END
1513
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'A'))
1514
		BEGIN
1515
			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
1516
			RETURN '-1'
1517
		END
1518
		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, '')='')
1519
		BEGIN
1520
			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
1521
			RETURN '-1'
1522
		END
1523
		IF(@p_MAKER_ID <> (SELECT TOP 1 MAKER_ID FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID))
1524
		BEGIN
1525
			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
1526
			RETURN '-1'
1527
		END
1528
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID  =@p_REQ_PAY_ID AND AUTH_STATUS='U'))
1529
		BEGIN
1530
			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
1531
			RETURN '-1'
1532
		END
1533
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT where AUTH_STATUS <> 'E' AND ISNULL(AUTH_STATUS, '') <> '' AND REQ_PAY_ID = @p_REQ_PAY_ID ))
1534
		BEGIN
1535
			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
1536
			RETURN '-1'
1537
		END
1538
	END
1539
	
1540
-- END VALIDATE UPDATE
1541

    
1542
		--IF EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_CODE = @p_REQ_PAY_CODE AND REQ_PAY_ID <> @p_REQ_PAY_ID)
1543
		--BEGIN
1544
		--	SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu đã tồn tại trong hệ thống' ErrorDesc
1545
		--	RETURN '-1'
1546
		--END
1547
	-- doanppt 
1548
	IF(@p_REQ_TYPE = 'D')
1549
	BEGIN
1550
		DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1551
		DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1552
		DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1553
		DELETE FROM TR_REQ_PAYMENT_DT WHERE PAY_ID = @p_REQ_PAY_ID
1554
	END
1555
	IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
1556
	BEGIN
1557
		DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1558
		DELETE FROM TR_REQ_PAYMENT_DT WHERE PAY_ID = @p_REQ_PAY_ID
1559
	END
1560
	IF(@p_REQ_TYPE = 'P' AND (@p_IS_PERIOD='N' OR @p_IS_PERIOD IS NULL))
1561
	BEGIN
1562
		DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1563
		DELETE FROM TR_REQ_PAYMENT_DT WHERE PAY_ID = @p_REQ_PAY_ID
1564
	END
1565
	DECLARE @ROLE_KI_NHAY VARCHAR(50)
1566
	SET  @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER WHERE TLNANME =@p_TRASFER_USER_RECIVE)
1567
	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'))
1568
	BEGIN
1569
		PRINT @ROLE_KI_NHAY
1570
	END
1571
	ELSE
1572
	BEGIN
1573
		SET @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
1574
		IF(@ROLE_KI_NHAY IS NULL OR @ROLE_KI_NHAY ='')
1575
		BEGIN
1576
				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))
1577
		END
1578
	END
1579
	--SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
1580
	IF(@ROLE_KI_NHAY IS NOT NULL AND @ROLE_KI_NHAY <> '' AND @ROLE_KI_NHAY IN ('TP','GDDV','KTT','TPTC','TC','TPGD'))
1581
	BEGIN
1582
		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
1583
		RETURN '-1'
1584
	END
1585

    
1586
	BEGIN TRANSACTION
1587
	-- DECLARE
1588
		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,
1589
		@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,
1590
		@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), 
1591
		@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),
1592
		@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), 
1593
		@AMT_ADD DECIMAL(18,2), @TOTAL_SCHEDULE_AMT DECIMAL(18,0) =0
1594
		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
1595
		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, 
1596
		@hdocJobDT INT, @hdocDrive INT, @hdocDriveDT INT, @hdocRequestCar INT
1597
	-- EXEC XMP
1598
		EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
1599
		EXEC sp_xml_preparedocument @hDoc2 OUTPUT, @p_XMP_TEMP_2;
1600
		EXEC sp_xml_preparedocument @hDocMeThod OUTPUT, @p_XMP_TEMP_METHOD;
1601
		EXEC sp_xml_preparedocument @hdocBudget OUTPUT, @p_XMP_TEMP_BUDGET;
1602
		EXEC sp_xml_preparedocument @hdocService OUTPUT, @p_XMP_TEMP_SERVICE;
1603
		EXEC sp_xml_preparedocument @hdocAttach OUTPUT, @p_XMP_TEMP_ATTACH;
1604
		EXEC sp_xml_preparedocument @hdocInvoice OUTPUT, @p_XMP_TEMP_INVOICE;
1605
		EXEC sp_xml_preparedocument @hdocPO OUTPUT, @p_XMP_TEMP_PO;
1606
		EXEC sp_xml_preparedocument @hdocSchedule OUTPUT, @p_XMP_TEMP_SCHEDULE;
1607
		EXEC sp_xml_preparedocument @hdocPeriod OUTPUT, @p_XMP_TEMP_PERIOD;
1608
		EXEC sp_xml_preparedocument @hdocRecurring OUTPUT, @p_XMP_ADVANCE_DT;
1609
		--doanptt 15/02/2022
1610
		EXEC sp_xml_preparedocument @hdocJob OUTPUT, @p_XMP_TEMP_PAY_JOB;
1611
		EXEC sp_xml_preparedocument @hdocJobDT OUTPUT, @p_XMP_TEMP_PAY_JOB_DT;
1612
		--doanptt 17/02/2022
1613
		EXEC sp_xml_preparedocument @hdocDrive OUTPUT, @p_XMP_TEMP_PAY_DRIVE;
1614
		EXEC sp_xml_preparedocument @hdocDriveDT OUTPUT, @p_XMP_TEMP_PAY_DRIVE_DT;
1615
		EXEC sp_xml_preparedocument @hdocRequestCar OUTPUT, @p_XMP_TEMP_PAY_REQUEST_CAR;
1616

    
1617
-- BEGIN THONG TIN LUOI MASTER
1618
		UPDATE TR_REQ_PAYMENT 
1619
		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,
1620
		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, 
1621
		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
1622
		WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1623
		-- BUA DOAN NAY DE XU LY LOI KHONG TIM DUOC NHA CUNG CAP
1624
		UPDATE CM_SUPPLIER SET ACC_NUM ='' WHERE ACC_NUM IS NULL
1625
		UPDATE CM_SUPPLIER SET ACC_NUM_OUT ='' WHERE ACC_NUM_OUT IS NULL
1626
		--
1627
		UPDATE TR_REQ_PAY_SERVICE 
1628
		SET REQ_PAY_ID= 'XX'+ RIGHT(REQ_PAY_ID,13)
1629
		WHERE REQ_PAY_ID NOT IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE REQ_TYPE IN ('I','D'))
1630
		--
1631
		UPDATE TR_REQ_PAY_SCHEDULE 
1632
		SET REQ_PAY_ID= 'XX'+ RIGHT(REQ_PAY_ID,13)
1633
		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
1634
		IF @@Error <> 0 GOTO ABORT
1635
-- END THONG TIN LUOI MASTER
1636

    
1637
-- BEGIN THONG TIN HOA DON DINH KEM
1638
		DECLARE @PDN_TT_LIST_INVOICE NVARCHAR(1000)
1639
		DELETE FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1640
		DECLARE XmlData CURSOR FOR SELECT * FROM OPENXML(@hdocInvoice, '/Root/XmlData', 2)
1641
		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), 
1642
		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))
1643
		OPEN XmlData;
1644
		FETCH NEXT FROM XmlData INTO @TRANS_NO , @TRANS_DT  ,@INVOICE_SIGN ,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,
1645
		@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@TYPE_VAT,@TYPE_FUNC
1646
		WHILE @@fetch_status=0 
1647
		BEGIN
1648
		-- SET
1649
			SET @INDEX_IV = @INDEX_IV +1
1650
		-- BEGIN VALIDATE
1651
			IF(@p_TYPE_FUNCTION ='SEND') 
1652
			BEGIN
1653
				IF(LEN(@INVOICE_NO) < 1)
1654
				BEGIN
1655
					ROLLBACK TRANSACTION
1656
					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
1657
					RETURN '-1'
1658
				END	
1659

    
1660
				IF(LEN(@INVOICE_NO) > 8)
1661
				BEGIN
1662
					ROLLBACK TRANSACTION
1663
					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
1664
					RETURN '-1'
1665
				END
1666
				
1667
				SET @PDN_TT_LIST_INVOICE = (	SELECT STUFF	(	(	SELECT '; ' + DTA.REQ_PAY_CODE 
1668
																			FROM TR_REQ_PAYMENT DTA 
1669
																			WHERE REQ_PAY_ID IN (	SELECT REQ_PAY_ID 
1670
																									FROM TR_REQ_PAY_INVOICE 
1671
																									WHERE INVOICE_NO =@INVOICE_NO 
1672
																									AND INVOICE_NO_SIGN = @INVOICE_NO_SIGN 
1673
																									AND INVOICE_SIGN = @INVOICE_SIGN 
1674
																									AND TAX_NO =@TAX_NO 
1675
																									AND TAX =@TAX 
1676
																									AND AUTH_STATUS <>'D' 
1677
																									AND TYPE_FUNC ='HC' 
1678
																									AND REQ_PAY_ID IN	(	SELECT REQ_PAY_ID 
1679
																															FROM TR_REQ_PAYMENT 
1680
																															WHERE AUTH_STATUS NOT IN ('E','D') 
1681
																															AND MAKER_ID NOT IN	(	SELECT TLNANME 
1682
																																					FROM TL_USER 
1683
																																					WHERE RoleName ='DISABLE' 
1684
																																					OR AUTH_STATUS ='U'
1685
																																				)
1686
																														)
1687
																								)
1688
																			FOR XML PATH(''), TYPE
1689
																		).value('.[1]', 'nvarchar(max)'), 1, 2, ''
1690
																	)
1691
												)
1692

    
1693
				IF	(	EXISTS	(	SELECT * 
1694
										FROM TR_REQ_PAY_INVOICE 
1695
										WHERE INVOICE_NO = @INVOICE_NO 
1696
										AND INVOICE_NO_SIGN = @INVOICE_NO_SIGN 
1697
										AND INVOICE_SIGN =@INVOICE_SIGN 
1698
										AND TAX_NO = @TAX_NO 
1699
										AND TAX =@TAX 
1700
										AND TYPE_FUNC ='HC' 
1701
										AND AUTH_STATUS <>'D' AND 
1702
										REQ_PAY_ID IN	(	SELECT REQ_PAY_ID 
1703
															FROM TR_REQ_PAYMENT 
1704
															WHERE AUTH_STATUS NOT IN ('E','D') 
1705
															AND MAKER_ID NOT IN	(	SELECT TLNANME 
1706
																					FROM TL_USER 
1707
																					WHERE RoleName ='DISABLE' 
1708
																					OR AUTH_STATUS ='U'
1709
																				)
1710
														)
1711
								)
1712
					)
1713
				BEGIN
1714
					ROLLBACK TRANSACTION
1715
					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
1716
					RETURN '-1'
1717
				END
1718
				
1719
				IF(@GOODS_NAME IS NULL OR @GOODS_NAME ='')
1720
				BEGIN
1721
					ROLLBACK TRANSACTION
1722
					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
1723
					RETURN '-1'
1724
				END
1725
				-- TÊN NGƯỜI BÀN
1726
				IF(@SELLER IS NULL OR @SELLER ='')
1727
				BEGIN
1728
					ROLLBACK TRANSACTION
1729
					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
1730
					RETURN '-1'
1731
				END
1732

    
1733
				IF(@TAX_NO IS NULL OR @TAX_NO ='')
1734
				BEGIN
1735
					ROLLBACK TRANSACTION
1736
					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
1737
					RETURN '-1'
1738
				END
1739
				-- NGÀY HÓA ĐƠN
1740
				IF(@INVOICE_DT IS NULL OR @INVOICE_DT ='')
1741
				BEGIN
1742
					ROLLBACK TRANSACTION
1743
					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
1744
					RETURN '-1'
1745
				END
1746
				-- SỐ HÓA ĐƠN
1747
				IF(@INVOICE_NO IS NULL OR @INVOICE_NO ='')
1748
				BEGIN
1749
					ROLLBACK TRANSACTION
1750
					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
1751
					RETURN '-1'
1752
				END
1753
				-- KÍ HIỆU HÓA ĐƠN
1754
				IF(@INVOICE_NO_SIGN IS NULL OR @INVOICE_NO_SIGN ='')
1755
				BEGIN
1756
					ROLLBACK TRANSACTION
1757
					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
1758
					RETURN '-1'
1759
				END
1760
				-- KÍ HIỆU HÓA ĐƠN
1761
				IF(@PRICE IS NULL OR @PRICE =0)
1762
				BEGIN
1763
					ROLLBACK TRANSACTION
1764
					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
1765
					RETURN '-1'
1766
				END
1767
			END
1768
		-- END VALIDATE
1769

    
1770
			DECLARE @p_REQ_INV_ID VARCHAR(15);
1771
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_INVOICE', @p_REQ_INV_ID OUT;
1772
			IF @p_REQ_INV_ID='' OR @p_REQ_INV_ID IS NULL GOTO ABORT;
1773
			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,
1774
			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) 
1775
			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))) ,
1776
			@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)
1777
		IF @@error<>0 GOTO ABORT;
1778
		FETCH NEXT FROM XmlData
1779
		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
1780
		END;
1781
		CLOSE XmlData;
1782
		DEALLOCATE XmlData;
1783
-- END THONG TIN HOA DON DINH KEM
1784
-- BEGIN THONG TIN HANG MUC NGAN SACH VA CHI PHI
1785
	-- DELETE
1786
		DELETE FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID=@p_REQ_PAY_ID
1787
		DELETE FROM TR_REQ_BUDGET_MONTH_LIMIT_DETAIL WHERE REQ_PAY_ID=@p_REQ_PAY_ID
1788
		DELETE FROM TR_REQ_BUDGET_YEAR_LIMIT_DETAIL WHERE REQ_PAY_ID=@p_REQ_PAY_ID
1789
	-- DECLARE
1790
		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 ,
1791
		@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),
1792
		@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)
1793
	-- DECLARE CURSOR
1794
		DECLARE XmlDataGood CURSOR FOR SELECT * FROM OPENXML(@hdocBudget, 'Root/XmlDataGood',2) 
1795
		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), 
1796
		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),
1797
		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))
1798
	-- BEGIN CURSOR THONG TIN HANG MUC NGAN SACH VA CHI PHI
1799
		OPEN XmlDataGood		
1800
		FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID , @GD_CODE, @AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,
1801
		@RATE,@REASON,@TYPE_COST, @FR_LEVEL,@TO_LEVEL, @MONTH_RATE, @YEAR_RATE, @BUDGET_TYPE, @BRANCH_ID , @DEP_ID, @MONTH, @YEAR, 
1802
		@BRANCH_TYPE, @KHOI_ID, @TLNAME, @RoleName, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @BRANCH_KIND
1803
		WHILE @@fetch_status=0 BEGIN
1804
		-- SET
1805
			SET @INDEX_NS = @INDEX_NS +1
1806

    
1807
			DECLARE @p_BUDGET_ID VARCHAR(15);
1808
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
1809
			IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
1810

    
1811
			IF(@BUDGET_TYPE = 'nam')
1812
			BEGIN
1813
				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) 
1814
				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, 'M' + CONVERT(VARCHAR(20), MONTH(GETDATE())), CONVERT(VARCHAR(20), YEAR(GETDATE())), @BUDGET_TYPE, @BRANCH_ID, @DEP_ID, @TLNAME, @RoleName, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID,@BRANCH_KIND)
1815
			END
1816
			ELSE
1817
			BEGIN
1818
				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) 
1819
				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)
1820
			END
1821

    
1822
			
1823
			
1824
			IF @@error<>0 GOTO ABORT;
1825
		-- BEGIN VALIDATE
1826
			IF(@p_TYPE_FUNCTION ='SEND')
1827
			BEGIN
1828
				IF(ISNULL(@AMT_EXE,0) =0)
1829
				BEGIN
1830
					ROLLBACK TRANSACTION
1831
					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
1832
					RETURN '-1'
1833
				END
1834
				/*
1835
				IF((@AMT_EXE  > @AMT_REMAIN_GD) AND ((SELECT GD_TYPE_ID FROM CM_GOODS WHERE GD_ID =@GD_ID) ='NS'))
1836
				BEGIN
1837
						ROLLBACK TRANSACTION
1838
						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
1839
						RETURN '-1'
1840
				END
1841
				*/
1842
				
1843
				IF(NOT EXISTS(SELECT * FROM PL_IMPORT_DT WHERE TRADE_ID =@TRADE_ID AND IMP_YEAR =YEAR(GETDATE()))
1844
				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())))
1845
				BEGIN
1846
					ROLLBACK TRANSACTION
1847
					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
1848
					RETURN '-1'
1849
				END
1850

    
1851
--doanptt 180622 ghi log NSCP
1852
-- BEGIN CHECK HAN MUC CHI PHI THEO NAM
1853
				IF(@BUDGET_TYPE = 'nam')
1854
				BEGIN
1855
					SET @MONTH_RATE = 'M' + CONVERT(VARCHAR(20), MONTH(GETDATE()));
1856

    
1857
					IF(@YEAR_RATE = '' OR @YEAR_RATE IS NULL)
1858
					BEGIN
1859
						ROLLBACK TRANSACTION
1860
						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
1861
						RETURN '-1'
1862
					END
1863

    
1864
					IF(@BRANCH_TAKE_COST_ID = '' OR @BRANCH_TAKE_COST_ID IS NULL)
1865
					BEGIN
1866
						ROLLBACK TRANSACTION
1867
						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
1868
						RETURN '-1'
1869
					END
1870

    
1871
					IF(ISNULL(@YEAR_RATE, '') <> CONVERT(VARCHAR(20), YEAR(GETDATE())))
1872
					BEGIN
1873
						ROLLBACK TRANSACTION
1874
						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 giống với năm hiện tại' ErrorDesc
1875
						RETURN '-1'
1876
					END
1877

    
1878
					DECLARE @l_BUDGET_LIMIT_YEAR_DETAIL_ID VARCHAR(15);
1879
					EXEC SYS_CodeMasters_Gen 'BUDGET_LIMIT_YEAR_DETAIL', @l_BUDGET_LIMIT_YEAR_DETAIL_ID OUT;
1880

    
1881
					IF(@MONTH_RATE = 'M1')
1882
					BEGIN
1883
						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, BUDG_ID)
1884
						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, @p_BUDGET_ID)
1885
					END
1886
					IF(@MONTH_RATE = 'M2')
1887
					BEGIN
1888
						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, BUDG_ID)
1889
						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, @p_BUDGET_ID)
1890
					END
1891
					IF(@MONTH_RATE = 'M3')
1892
					BEGIN
1893
						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, BUDG_ID)
1894
						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, @p_BUDGET_ID)
1895
					END
1896
					IF(@MONTH_RATE = 'M4')
1897
					BEGIN
1898
						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, BUDG_ID)
1899
						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, @p_BUDGET_ID)
1900
					END
1901
					IF(@MONTH_RATE = 'M5')
1902
					BEGIN
1903
						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, BUDG_ID)
1904
						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, @p_BUDGET_ID)
1905
					END
1906
					IF(@MONTH_RATE = 'M6')
1907
					BEGIN
1908
						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, BUDG_ID)
1909
						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, @p_BUDGET_ID)
1910
					END
1911
					IF(@MONTH_RATE = 'M7')
1912
					BEGIN
1913
						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, BUDG_ID)
1914
						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, @p_BUDGET_ID)
1915
					END
1916
					IF(@MONTH_RATE = 'M8')
1917
					BEGIN
1918
						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, BUDG_ID)
1919
						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, @p_BUDGET_ID)
1920
					END
1921
					IF(@MONTH_RATE = 'M9')
1922
					BEGIN
1923
						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, BUDG_ID)
1924
						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, @p_BUDGET_ID)
1925
					END
1926
					IF(@MONTH_RATE = 'M10')
1927
					BEGIN
1928
						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, BUDG_ID)
1929
						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, @p_BUDGET_ID)
1930
					END
1931
					IF(@MONTH_RATE = 'M11')
1932
					BEGIN
1933
						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, BUDG_ID)
1934
						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, @p_BUDGET_ID)
1935
					END
1936
					IF(@MONTH_RATE = 'M12')
1937
					BEGIN
1938
						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, BUDG_ID)
1939
						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, @p_BUDGET_ID)
1940
					END
1941
					-- CHECK HẠN MỨC
1942
					
1943
					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) = '';
1944
					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
1945
					IF(@l_BUDGET_LIMIT_CURRENT_YEAR < @l_BUDGET_USED_CURRENT_YEAR)
1946
					BEGIN
1947
						ROLLBACK TRANSACTION
1948
						--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
1949
						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
1950
						RETURN '-1'
1951
					END
1952
					
1953
				END-- END CHECK HAN MUC NGAN SACH CHI PHI THEO NAM
1954
				ELSE IF(@BUDGET_TYPE = 'thang')
1955
				BEGIN	-- BEGIN CHECK HAN MUC NGAN SACH CHI PHI THEO THANG 
1956
				-- BEGIN KIỂM TRA HẠN MỨC
1957
					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) = '', @l_IS_POTENTIAL VARCHAR(20) = '';
1958
					-- lấy loại đơn vị
1959
					SET @l_BRANCH_TYPE = (SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID = @BRANCH_ID)
1960
					SET @l_IS_POTENTIAL = (SELECT IS_POTENTIAL FROM CM_BRANCH WHERE BRANCH_ID = @BRANCH_ID)
1961
					IF(@l_BRANCH_TYPE = 'HS')
1962
					BEGIN
1963
						SET @l_BRANCH_TYPE = 'ho'
1964
					END
1965
					ELSE IF(@l_BRANCH_TYPE = 'CN' OR (@l_IS_POTENTIAL = 'Y' AND @l_BRANCH_TYPE = 'PGD'))
1966
					BEGIN
1967
						SET @l_BRANCH_TYPE = 'dvkd'
1968
					END
1969
					ELSE
1970
					BEGIN
1971
						SET @l_BRANCH_TYPE = 'pgd'
1972
					END
1973

    
1974
					DECLARE @l_BUDGET_LIMIT_MONTH_DETAIL_ID VARCHAR(15);
1975
					EXEC SYS_CodeMasters_Gen 'BUDGET_LIMIT_MONTH_DETAIL', @l_BUDGET_LIMIT_MONTH_DETAIL_ID OUT;
1976

    
1977
					IF(@MONTH_RATE = '' OR @MONTH_RATE IS NULL)
1978
					BEGIN
1979
						ROLLBACK TRANSACTION
1980
						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
1981
						RETURN '-1'
1982
					END
1983
					IF(@YEAR_RATE = '' OR @YEAR_RATE IS NULL)
1984
					BEGIN
1985
						ROLLBACK TRANSACTION
1986
						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
1987
						RETURN '-1'
1988
					END
1989
					IF(@BRANCH_TAKE_COST_ID = '' OR @BRANCH_TAKE_COST_ID IS NULL)
1990
					BEGIN
1991
						ROLLBACK TRANSACTION
1992
						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
1993
						RETURN '-1'
1994
					END
1995

    
1996
					IF(ISNULL(@YEAR_RATE, '') <> CONVERT(VARCHAR(20), YEAR(GETDATE())))
1997
					BEGIN
1998
						ROLLBACK TRANSACTION
1999
						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 giống với năm hiện tại' ErrorDesc
2000
						RETURN '-1'
2001
					END
2002

    
2003
				-- END KIỂM TRA HẠN MỨC
2004
				-- BEGIN VALIDATE
2005
					IF(@MONTH_RATE = 'M1')
2006
					BEGIN
2007
						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,BUDG_ID)
2008
						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, @p_BUDGET_ID)
2009
					END
2010
					IF(@MONTH_RATE = 'M2')
2011
					BEGIN
2012
						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, BUDG_ID)
2013
						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, @p_BUDGET_ID)
2014
					END
2015
					IF(@MONTH_RATE = 'M3')
2016
					BEGIN
2017
						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, BUDG_ID)
2018
						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, @p_BUDGET_ID)
2019
					END
2020
					IF(@MONTH_RATE = 'M4')
2021
					BEGIN
2022
						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, BUDG_ID)
2023
						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, @p_BUDGET_ID)
2024
					END
2025
					IF(@MONTH_RATE = 'M5')
2026
					BEGIN
2027
						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, BUDG_ID)
2028
						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, @p_BUDGET_ID)
2029
					END
2030
					IF(@MONTH_RATE = 'M6')
2031
					BEGIN
2032
						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, BUDG_ID)
2033
						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, @p_BUDGET_ID)
2034
					END
2035
					IF(@MONTH_RATE = 'M7')
2036
					BEGIN
2037
						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, BUDG_ID)
2038
						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, @p_BUDGET_ID)
2039
					END
2040
					IF(@MONTH_RATE = 'M8')
2041
					BEGIN
2042
						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, BUDG_ID)
2043
						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, @p_BUDGET_ID)
2044
					END
2045
					IF(@MONTH_RATE = 'M9')
2046
					BEGIN
2047
						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, BUDG_ID)
2048
						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, @p_BUDGET_ID)
2049
					END
2050
					IF(@MONTH_RATE = 'M10')
2051
					BEGIN
2052
						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, BUDG_ID)
2053
						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, @p_BUDGET_ID)
2054
					END
2055
					IF(@MONTH_RATE = 'M11')
2056
					BEGIN
2057
						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, BUDG_ID)
2058
						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, @p_BUDGET_ID)
2059
					END
2060
					IF(@MONTH_RATE = 'M12')
2061
					BEGIN
2062
						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, BUDG_ID)
2063
						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, @p_BUDGET_ID)
2064
					END
2065
				-- END VALIDATE
2066
					
2067
				-- CHECK HẠN MỨC
2068
					print '@GD_ID: ' + @GD_ID;
2069
					print '@GD_CODE: ' + @GD_CODE;
2070
					print '@l_BRANCH_TYPE: ' + @l_BRANCH_TYPE;
2071
					print '@YEAR_RATE: ' + @YEAR_RATE;
2072
					print '@MONTH_RATE: ' + @MONTH_RATE;
2073
					print '@BRANCH_KIND: ' + @BRANCH_KIND;
2074
					print '@BRANCH_TAKE_COST_ID: ' + @BRANCH_TAKE_COST_ID;
2075
					print '@DEP_TAKE_COST_ID: ' + @DEP_TAKE_COST_ID;
2076
					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
2077
					IF(@l_BUDGET_LIMIT_CURRENT < @l_BUDGET_USED_CURRENT)
2078
					BEGIN
2079
						ROLLBACK TRANSACTION
2080
						--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
2081
						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
2082
						RETURN '-1'
2083
					END
2084
				END
2085
--END CHECK HAN MUC NGAN SACH CHI PHI THEO THANG
2086
			END
2087
		-- END VALIDATE
2088

    
2089
		FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID , @GD_CODE, @AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,
2090
		@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
2091
		END;
2092
		CLOSE XmlDataGood;
2093
		DEALLOCATE XmlDataGood;
2094
-- END THONG TIN HAMG MUC NGAN SACH VA CHI PHI
2095

    
2096

    
2097
-- BEGIN THONG TIN PHUONG THUC THANH TOAN
2098
	-- DELETE
2099
		DELETE FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID = @p_REQ_PAY_ID
2100
	--DECLARE
2101
		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),
2102
		@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)
2103
	-- SET
2104
		SET @INDEX = 0
2105
	-- DECLARE CURSOR
2106
		DECLARE XmlDataMethod CURSOR FOR SELECT * FROM OPENXML(@hdocMethod, 'Root/XmlDataMethod',2)
2107
		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),
2108
		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), 
2109
		BANKCODE_NAPAS VARCHAR(20), BANKCODE VARCHAR(20), BANKNAME NVARCHAR(250), SUB_ISSUED_BY NVARCHAR(250), RECEIVER_DEBIT NVARCHAR(20))
2110
	-- BEGIN CURSOR THONG TIN PHUONG THUC THANH TOAN
2111
		OPEN XmlDataMethod
2112
		FETCH NEXT FROM XmlDataMethod INTO  @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,
2113
		@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
2114
		WHILE @@fetch_status=0 
2115
		BEGIN
2116
		-- SET
2117
			SET @INDEX_METHOD = @INDEX_METHOD+1
2118
		-- BEGIN VALIDATE
2119
			IF(@p_TYPE_FUNCTION ='SEND')
2120
			BEGIN
2121

    
2122
				IF(@ACC_NO IS NULL OR @ACC_NO = '')
2123
				BEGIN
2124
					ROLLBACK TRANSACTION
2125
					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
2126
					RETURN '-1'
2127
				END
2128

    
2129
				IF((@BANKCODE IS NULL OR @BANKCODE = '') AND @CHECK_IN = 'O')
2130
				BEGIN
2131
					ROLLBACK TRANSACTION
2132
					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
2133
					RETURN '-1'
2134
				END
2135

    
2136
				IF(@REQ_PAY_TYPE = '1' AND (@ISSUED_DT = '' OR @ISSUED_DT IS NULL))
2137
				BEGIN
2138
					ROLLBACK TRANSACTION
2139
					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
2140
					RETURN '-1'
2141
				END
2142

    
2143
				IF(@ISSUED_BY = '' OR @ISSUED_BY IS NULL)
2144
				BEGIN
2145
					ROLLBACK TRANSACTION
2146
					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
2147
					RETURN '-1'
2148
				END
2149

    
2150
				IF(@ACC_NAME = '' OR @ACC_NAME IS NULL)
2151
				BEGIN
2152
					ROLLBACK TRANSACTION
2153
					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
2154
					RETURN '-1'
2155
				END
2156
			END
2157
		-- END VALIDATE
2158
			IF(@REQ_PAY_TYPE<>'1')
2159
			BEGIN
2160
				SET @ISSUED_DT = NULL
2161
			END
2162
			IF(@TYPE_TRANSFER IS NULL OR @TYPE_TRANSFER ='')
2163
			BEGIN
2164
				SET @TYPE_TRANSFER = 'A'
2165
			END
2166

    
2167
			DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
2168
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
2169
			IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
2170
			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)
2171
			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)
2172
		IF @@error<>0 GOTO ABORT;
2173
		FETCH NEXT FROM XmlDataMethod INTO @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,
2174
		@ACC_NO, @ACC_NAME,@ISSUED_BY, @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN,@TYPE_TRANSFER, @BANKCODE_NAPAS, @BANKCODE, @BANKNAME, @SUB_ISSUED_BY, @RECEIVER_DEBIT
2175
		END
2176
		CLOSE XmlDataMethod;
2177
		DEALLOCATE XmlDataMethod;
2178
	-- END CURSOR THONG TIN PHUONG THUC THANH TOAN
2179
-- END THONG TIN PHUONG THUC THANH TOAN
2180

    
2181
-- BEGIN THONG TIN HOP DONG DINH KEM & THONG TIN CHUNG TU KHAC DINH KEM
2182
	-- DELETE
2183
		DELETE FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID
2184
	-- DECLARE
2185
		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)
2186
	-- DECLARE CURSOR
2187
		DECLARE XmlAttach CURSOR FOR SELECT * FROM OPENXML(@hdocAttach, 'Root/XmlAttach',2) 
2188
		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))
2189
	-- BEGIN CURSOR THONG TIN CHUNG TU KHAC DINH KEM
2190
		OPEN XmlAttach
2191
		FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT, @LICENSE_DT
2192
			WHILE @@fetch_status=0 
2193
			BEGIN
2194
				
2195
				IF (@REF_DT='')
2196
				BEGIN
2197
					SET @REF_DT = NULL
2198
				END
2199
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
2200
				IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
2201
				INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],[AMT],REF_DT, LICENSE_DT) VALUES
2202
				(@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))
2203
			IF @@error<>0 GOTO ABORT;
2204
			FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT, @LICENSE_DT
2205
			END
2206
		CLOSE XmlAttach;
2207
		DEALLOCATE XmlAttach;    
2208
-- END THONG TIN HOP DONG DINH KEM & THONG TIN CHUNG TU KHAC DINH KEM
2209

    
2210
		------------------------
2211
	-- NEU LA THANH TOAN HOAN TAM UNG
2212
		IF(@p_REQ_TYPE = 'I')
2213
		BEGIN
2214
		-- DELETE
2215
			DELETE FROM TR_REQ_PAYMENT_DT WHERE PAY_ID = @p_REQ_PAY_ID
2216

    
2217
			DECLARE XmlDataPay CURSOR FOR SELECT * FROM OPENXML(@hDoc2, '/Root/XmlDataPay', 2)
2218
			WITH(PAY_ADV_ID nvarchar(50),AMT_ADVANCED decimal(18, 0),AMT_DO decimal(18,2),
2219
			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))
2220
		-- BEGIN CURSOR THONG TIN PHIEU DE NGHI TAM UNG
2221
			OPEN XmlDataPay; 
2222
			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
2223
			WHILE @@fetch_status=0 
2224
			BEGIN
2225
				SET @INDEX_AD = @INDEX_AD +1
2226
				SET @REQ_PAY_ADV_CODE = (SELECT REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@PAY_ADV_ID)
2227
		-- BEGIN VALIDATE
2228
				IF(@p_TYPE_FUNCTION ='SEND') 
2229
				BEGIN
2230
					-- KIEM TRA XEM CO PHIEU NAO DANG DUOC THANH TOAN HOAN TAM UNG MA CHUA DUYET HAY CHUA
2231
					--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))
2232
					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))
2233
					BEGIN
2234
						ROLLBACK TRANSACTION
2235
						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
2236
						RETURN '-1'
2237
					END
2238
					
2239
					-- KIEM TRA NEU SO TIEN DE NGHI HOAN TAM ƯNG LON HON SO TIEN CON LAI CAN PHAI TAM UNG
2240
					IF(@AMT_REVERT>(@AMT_REMAIN -@AMT_USE) AND @AMT_REVERT >0)
2241
					BEGIN
2242
						ROLLBACK TRANSACTION
2243
						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
2244
						RETURN '-1'
2245
					END
2246
					--KIEM TRA NEU SO PHIEU TAM UNG NAY DA THANH TOAN XONG THI KHONG CHO PHEP DUYET
2247
					IF((SELECT A.REQ_AMT - A.PAY_AMT FROM TR_REQ_ADVANCE_PAYMENT A WHERE A.REQ_PAY_ID = @PAY_ADV_ID)<=0)
2248
					BEGIN
2249
						ROLLBACK TRANSACTION
2250
						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
2251
						RETURN '-1'
2252
					END
2253
					
2254
				END
2255
		-- END VALIDATE
2256
				DECLARE @p_REQ_PAYDT_ID VARCHAR(15);
2257
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAYMENT_DT', @p_REQ_PAYDT_ID OUT;
2258
				IF @p_REQ_PAYDT_ID='' OR @p_REQ_PAYDT_ID IS NULL GOTO ABORT;
2259
				INSERT INTO TR_REQ_PAYMENT_DT
2260
				VALUES (@p_REQ_PAYDT_ID,@PAY_ADV_ID,@p_REQ_PAY_ID , ISNULL(@AMT_ADVANCED,0) ,ISNULL(@AMT_DO,0),ISNULL(@AMT_REMAIN,0),
2261
				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)
2262
			IF @@error<>0 GOTO ABORT;
2263
			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
2264
			END
2265
			CLOSE XmlDataPay;
2266
			DEALLOCATE XmlDataPay;
2267
		--END CURSOR THONG TIN PHIEU DE NGHI TAM UNG
2268
		--------------------------------------------------------------------------------------------------------------------
2269
		--INSERT FROM CatCursor
2270
		--DELETE
2271
			DELETE FROM TR_REQ_PAY_CAT WHERE REQ_PAY_ID = @p_REQ_PAY_ID
2272
			--CatCursor
2273
			DECLARE @REQ_ADV_ID varchar(15),@CAT_NAME nvarchar(100),@TOTAL_AMT_CAT decimal(18,2), @DEPT_ID VARCHAR(15)
2274
			DECLARE XmlDataCat CURSOR FOR
2275
			SELECT * FROM OPENXML(@hdoc, 'Root/XmlDataCat',2) 
2276
			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))
2277
			OPEN XmlDataCat
2278
			FETCH NEXT FROM XmlDataCat INTO @REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@CURRENCY,@RATE
2279
			WHILE @@fetch_status=0 
2280
			BEGIN
2281
				SET @INDEX = @INDEX +1
2282
				DECLARE @p_REQ_PAY_CAT_ID VARCHAR(15);
2283
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_CAT', @p_REQ_PAY_CAT_ID OUT;
2284
				IF @p_REQ_PAY_CAT_ID='' OR @p_REQ_PAY_CAT_ID IS NULL GOTO ABORT;
2285
				INSERT INTO TR_REQ_PAY_CAT
2286
				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)
2287
			IF @@error<>0 GOTO ABORT;
2288
			FETCH NEXT FROM XmlDataCat INTO @REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@CURRENCY,@RATE
2289
			END
2290
			CLOSE XmlDataCat;
2291
			DEALLOCATE XmlDataCat;
2292
		END
2293
	-- NEU LA THANH TOAN KHAC
2294
		IF(@p_REQ_TYPE = 'D' OR @p_REQ_TYPE ='I')
2295
		BEGIN
2296
		-- DELETE
2297
			DELETE FROM TR_REQ_PAY_SERVICE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
2298
		-- DECLARE
2299
			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), 
2300
			@PYCMS_CODE_LIST VARCHAR(MAX), @PYCMS_CODE_DRAFT_LIST VARCHAR(MAX), @PDNTT_CODE_LIST VARCHAR(MAX), @PDNTT_CODE_DRAFT_LIST VARCHAR(MAX)
2301
			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),
2302
			@REQ_PAY_TYPE_SERVICE varchar(1),@REQ_PAY_DESC_SERVICE nvarchar(MAX),@REQ_PAY_ENTRIES_SERVICE nvarchar(MAX),@DEPT_ID_SRV VARCHAR(15)
2303
		-- SET
2304
			SET @SUM_KUY_KE_TT=0
2305
			SET @INDEX = 0
2306
		-- DECLARE CURSOR
2307
			DECLARE XmlDataService CURSOR FOR SELECT * FROM OPENXML(@hdocService, 'Root/XmlDataService',2)
2308
			WITH(REQ_PAY_SERVICE_NAME nvarchar(100),RECEIVE_ID_SERVICE varchar(15),RECEIVE_NAME_SERVICE nvarchar(100),REQ_PAY_REASON_SERVICE nvarchar(MAX),
2309
			TOTAL_AMT_SERVICE decimal(18,2),REQ_PAY_TYPE_SERVICE varchar(1),REQ_PAY_DESC_SERVICE nvarchar(MAX),REQ_PAY_ENTRIES_SERVICE nvarchar(MAX), 
2310
			DEPT_ID VARCHAR(15),CURRENCY VARCHAR(15), RATE DECIMAL(18,2))
2311
		-- BEGIN CURSOR THONG TIN CAC DICH VU THANH TOAN
2312
			OPEN XmlDataService
2313
			FETCH NEXT FROM XmlDataService INTO @REQ_PAY_SERVICE_NAME,@RECEIVE_ID_SERVICE,@RECEIVE_NAME_SERVICE,@REQ_PAY_REASON_SERVICE,@TOTAL_AMT_SERVICE,
2314
			@REQ_PAY_TYPE_SERVICE,@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@DEPT_ID_SRV,@CURRENCY,@RATE
2315
			WHILE @@fetch_status=0 
2316
			BEGIN
2317
				SET @INDEX = @INDEX +1
2318
				SET @SUM_TTCT_LINK =(SELECT SUM(TOTAL_AMT*ISNULL(RATE,1)) FROM TR_REQ_PAY_SERVICE WHERE
2319
						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)
2320
				SET @SUM_PYCMS_LINK =ISNULL((SELECT SUM(TOTAL_AMT) FROM TR_REQUEST_DOC WHERE PL_REQ_ID =@RECEIVE_ID_SERVICE),0)
2321
				SET @SUM_TT_CT =(SELECT ISNULL(TOTAL_AMT,0) FROM PL_REQUEST_DOC WHERE REQ_ID =@RECEIVE_ID_SERVICE)
2322
				SET @PYCMS_CODE_LIST = (select STUFF( (select '; ' + DTA.REQ_CODE FROM TR_REQUEST_DOC DTA WHERE PL_REQ_ID =@RECEIVE_ID_SERVICE
2323
				FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))
2324
				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'
2325
				FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))
2326
				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
2327
				FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))
2328
				SET @PDNTT_CODE_DRAFT_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 AND AUTH_STATUS IN('E', 'R')
2329
				FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))
2330
			--------------- BEGIN VALIDATE --------------
2331
				IF(@p_TYPE_FUNCTION ='SEND')
2332
				BEGIN
2333
					IF(@DEPT_ID_SRV IS NULL OR @DEPT_ID_SRV ='')
2334
					BEGIN
2335
						ROLLBACK TRANSACTION
2336
						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
2337
						RETURN '-1'
2338
					END	
2339
				
2340
					IF(@TOTAL_AMT_SERVICE IS NULL)
2341
					BEGIN
2342
						ROLLBACK TRANSACTION
2343
						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
2344
						RETURN '-1'
2345
					END
2346
				
2347
					IF(@TOTAL_AMT_SERVICE < 0)
2348
					BEGIN
2349
						ROLLBACK TRANSACTION
2350
						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
2351
						RETURN '-1'
2352
					END
2353

    
2354
					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 <> '')
2355
					BEGIN
2356
						ROLLBACK TRANSACTION
2357
						SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE,
2358
						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:'
2359
						+ CHAR(10) + 
2360
						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'+
2361
						+ CHAR(10) + 
2362
						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'
2363
						+ CHAR(10) + 
2364
						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'
2365
						+ CHAR(10) + 
2366
						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'  
2367
						+ CHAR(10) + 
2368
						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,'')
2369
						+ CHAR(10) + 
2370
						N'</br>* Chú ý những PDN thanh toán sau đang lưu nháp hoặc từ chối & ăn ngân sách, vui lòng kiểm tra và xóa PDN thanh toán: ' + ISNULL(@PDNTT_CODE_DRAFT_LIST,'') ErrorDesc
2371
						RETURN '-1'
2372
					END
2373
				END
2374
			--------------- END VALIDATE ----------------
2375
				--IF(@RECEIVE_ID_SERVICE IS NOT NULL AND @RECEIVE_ID_SERVICE <> '')
2376
				--BEGIN
2377
				--	SET @SUM_PYCMS_LINK = @SUM_PYCMS_LINK +@TOTAL_AMT_SERVICE
2378
				--END
2379
				--SET @SUM_KUY_KE_TT = @SUM_KUY_KE_TT + @TOTAL_AMT_SERVICE
2380
				
2381
				DECLARE @p_REQ_PAY_SERVICE_ID VARCHAR(15);
2382
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SERVICE', @p_REQ_PAY_SERVICE_ID OUT;
2383
				IF @p_REQ_PAY_SERVICE_ID='' OR @p_REQ_PAY_SERVICE_ID IS NULL GOTO ABORT;
2384
				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)
2385
				VALUES (@p_REQ_PAY_SERVICE_ID,@p_REQ_PAY_ID,@REQ_PAY_SERVICE_NAME,@RECEIVE_ID_SERVICE,@REQ_PAY_REASON_SERVICE,@TOTAL_AMT_SERVICE,
2386
				@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)
2387
			IF @@error<>0 GOTO ABORT;
2388
			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,
2389
			@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@DEPT_ID_SRV,@CURRENCY,@RATE
2390
			END
2391
			CLOSE XmlDataService;
2392
			DEALLOCATE XmlDataService;
2393
		-- BEGIN CURSOR THONG TIN CAC DICH VU THANH TOAN
2394
		END
2395
		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')
2396
		BEGIN
2397
			DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID= @p_REQ_PAY_ID
2398
			DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID= @p_REQ_PAY_ID
2399
		END
2400
	-- NEU LA THANH TOAN PO HOP DONG
2401
		IF((@p_REQ_TYPE = 'P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE ='I')
2402
		BEGIN
2403
		-- DELETE
2404
			--DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID= @p_REQ_PAY_ID
2405
			/*
2406
			IF(@p_REQ_TYPE = 'P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL))
2407
			BEGIN
2408
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID= @p_REQ_PAY_ID
2409
			END
2410
			*/
2411
		-- DECLARE
2412
			DECLARE @INDEX_PO INT, @REF_ID VARCHAR(15),@IS_CLOSED VARCHAR(1)
2413
		--SET
2414
			SET @INDEX_PO = 0
2415
		-- DECLARE CURSOR
2416
			DECLARE XmlDataPO CURSOR FOR SELECT * FROM OPENXML(@hdocPO, '/Root/XmlDataPO', 2)
2417
			WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
2418
		-- BEGIN CURSOR THÔNG TIN PO/ HOP DONG
2419
			OPEN XmlDataPO;
2420
			FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
2421
			WHILE @@fetch_status=0 
2422
			BEGIN
2423
			-- SET
2424
				SET @INDEX_PO = @INDEX_PO +1
2425
			-- BEGIN VALIDATE
2426
				IF(@p_TYPE_FUNCTION ='SEND') 
2427
				BEGIN
2428
					DECLARE @PDN_TAMUNG_LIST VARCHAR(4000) --- LUCTV 19.10.2022
2429
					-- KIEM TRA PO DUOC DUYET HAY CHUA
2430
					--IF(EXISTS(SELECT * FROM TR_PO_MASTER WHERE PO_ID =@REF_ID AND AUTH_STATUS <>'A'))
2431
					--BEGIN
2432
					--ROLLBACK TRANSACTION
2433
					--	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ố '+
2434
					--	(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
2435
					--	RETURN '-1'
2436
					--END
2437
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2438
					--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='C' 
2439
					--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)))
2440
					--BEGIN
2441
					--	ROLLBACK TRANSACTION
2442
					--	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ố '+
2443
					--	(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
2444
					--	RETURN '-1'
2445
					--END
2446
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2447
					--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='C'
2448
					--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))
2449
					--BEGIN
2450
					--	ROLLBACK TRANSACTION
2451
					--	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ố '+
2452
					--	(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
2453
					--	RETURN '-1'
2454
					--END
2455
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2456
					--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P' 
2457
					--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)))
2458
					--BEGIN
2459
					--	ROLLBACK TRANSACTION
2460
					--	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ố '+
2461
					--	(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
2462
					--	RETURN '-1'
2463
					--END
2464
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2465
					--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')))
2466
					--BEGIN
2467
					--	ROLLBACK TRANSACTION
2468
					--	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ố '+
2469
					--	(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
2470
					--	RETURN '-1'
2471
					--END
2472
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2473
						--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='C' AND REQ_PAY_ID 
2474
						--IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
2475
						--BEGIN
2476
						--	ROLLBACK TRANSACTION
2477
						--	SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
2478
						--	(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
2479
						--	RETURN '-1'
2480
						--END
2481
						---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2482
						--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))
2483
						--BEGIN
2484
						--	ROLLBACK TRANSACTION
2485
						--	SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
2486
						--	(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
2487
						--	RETURN '-1'
2488
						--END
2489
						--IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REF_ID =@REF_ID AND PAY_ID =@PAY_ID AND 
2490
						--			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))
2491
						--BEGIN
2492
						--	ROLLBACK TRANSACTION
2493
						--	SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
2494
						--	(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
2495
						--	RETURN '-1'
2496
						--END
2497
						-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2498
						SET @PDN_TAMUNG_LIST = (select STUFF( (select '; ' + DTA.REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT DTA WHERE REQ_PAY_ID IN 
2499
						(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')
2500
						FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))
2501
						--- VALIDATE PO DANG TRONG QUA TRINH TAM UNG
2502
						IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P' AND REQ_PAY_ID 
2503
						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)))
2504
						BEGIN
2505
							ROLLBACK TRANSACTION
2506
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N':PO số '+
2507
							(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
2508
							RETURN '-1'
2509
						END
2510
						-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2511
						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')))
2512
						BEGIN
2513
							ROLLBACK TRANSACTION
2514
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
2515
							(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
2516
							RETURN '-1'
2517
						END
2518
				END
2519
			-- END VALIDATE
2520
				DECLARE @REQ_PAYDTID VARCHAR(15);
2521
				EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
2522
				IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
2523
				IF(LEFT(@REF_ID, 3) = 'TRC')
2524
				BEGIN
2525
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) 
2526
					VALUES (@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED, 'C')
2527
				END
2528
				ELSE
2529
				BEGIN
2530
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) 
2531
					VALUES (@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED, 'P')
2532
				END
2533
				
2534
			IF @@error<>0 GOTO ABORT;
2535
			FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
2536
			END
2537
			CLOSE XmlDataPO;
2538
			DEALLOCATE XmlDataPO;
2539
		-- END CURSOR THÔNG TIN PO/ HOP DONG
2540

    
2541
		-- DELETE
2542
			DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
2543
		-- DECLARE
2544
			DECLARE @PO_ID VARCHAR(15), @PAY_PHASE NVARCHAR(250), @AMT_ADVANCE DECIMAL(18,2),
2545
			@REQ_AD_DT VARCHAR(20),@PROCESS VARCHAR(15),@PAY_ID VARCHAR(15),@AMT_PAY_DO DECIMAL(18,2),@AMT_PAY_REAL DECIMAL(18,2)
2546
		-- DECLARE CURSOR THONG TIN CHI TIET LICH THANH TOAN PO/ HOP DONG
2547
			DECLARE XmlDataSchedule CURSOR FOR SELECT * FROM OPENXML(@hdocSchedule, 'Root/XmlDataSchedule',2)
2548
			WITH(PO_ID VARCHAR(15),PAY_PHASE VARCHAR(15),AMT_PAY DECIMAL(18,2),REQ_ADV_ID VARCHAR(15), AMT_ADVANCE DECIMAL(18,2),
2549
			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),
2550
			REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),AMT_PAY_DO DECIMAL(18,2),AMT_PAY_REAL DECIMAL(18,2))
2551
		-- BEGIN CURSOR THONG TIN CHI TIET LICH THANH TOAN PO/ HOP DONG 
2552
			OPEN XmlDataSchedule
2553
			SET @INDEX_PO = 0
2554
			FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@PAY_PHASE,@AMT_PAY, @REQ_ADV_ID,@AMT_ADVANCE,@AMT_REMAIN,@REQ_AD_DT,
2555
			@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_DO,@AMT_PAY_REAL
2556
			WHILE @@fetch_status=0 
2557
			BEGIN
2558
				--IF(@AMT_REMAIN =0)
2559
				--BEGIN
2560
				--	SET @PROCESS ='3'
2561
				--END
2562
				--IF(@PROCESS <>'2')
2563
				--BEGIN
2564
				--	SET @TOTAL_SCHEDULE_AMT = @TOTAL_SCHEDULE_AMT +@AMT_REMAIN
2565
				--END
2566
				SET @INDEX_PO = @INDEX_PO +1
2567
				SET @TOTAL_SCHEDULE_AMT = @TOTAL_SCHEDULE_AMT +(@AMT_PAY - @AMT_ADVANCE -@AMT_PAY_DO)
2568
			-- BEGIN VALIDATE
2569
				IF(@p_TYPE_FUNCTION ='SEND' AND @p_REQ_TYPE ='P')
2570
				BEGIN
2571
					IF(ISNULL(@AMT_PAY_REAL,0) < ISNULL(@AMT_ADVANCE ,0))
2572
					BEGIN
2573
						ROLLBACK TRANSACTION
2574
						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
2575
						RETURN '-1'
2576
					END
2577
				END
2578
			-- END VALIDATE
2579
				DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
2580
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
2581
				IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
2582

    
2583
				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,
2584
				CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE, AMT_PAY_REAL)
2585
				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,
2586
				--IIF(@PROCESS<>'2',(@AMT_PAY-@AMT_ADVANCE),0),
2587
				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)
2588
			IF @@error<>0 GOTO ABORT;
2589
			FETCH NEXT FROM XmlDataSchedule INTO @PO_ID, @PAY_PHASE, @AMT_PAY, @REQ_ADV_ID, @AMT_ADVANCE,@AMT_REMAIN,@REQ_AD_DT,
2590
			@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_DO,@AMT_PAY_REAL
2591
			END
2592
			CLOSE XmlDataSchedule;
2593
			DEALLOCATE XmlDataSchedule;
2594
		-- END CURSOR THONG TIN CHI TIET LICH THANH TOAN PO/ HOP DONG 
2595
			---- VALIDATE SO TIEN
2596
			--IF(@p_REQ_AMT > ISNULL(@TOTAL_SCHEDULE_AMT,0))
2597
			--BEGIN
2598
			--	ROLLBACK TRANSACTION
2599
			--	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
2600
			--	RETURN '-1'
2601
			--END
2602
	     ------
2603
		END
2604
	-- NEU LA THANH TOAN CAC HOP DONG DINH KY
2605
		IF((@p_REQ_TYPE = 'P' AND @p_IS_PERIOD = 'Y') OR @p_REQ_TYPE='I')
2606
		BEGIN
2607
		-- DELETE
2608
			--DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID= @p_REQ_PAY_ID
2609
			/*
2610
			IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD = 'Y')
2611
			BEGIN
2612
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID= @p_REQ_PAY_ID
2613
			END
2614
			*/
2615
		-- DECLARE
2616
			DECLARE @CONTRACT_PERIOD_ID VARCHAR(15),@IS_PERIOD_CLOSED VARCHAR(1), @DELIVERY_DT VARCHAR(20)
2617
		--DECLARE CURSOR THONG TIN HOP DONG DINH KY
2618
			DECLARE XmlDataRecurring CURSOR FOR SELECT * FROM OPENXML(@hdocRecurring, '/Root/XmlDataRecurring', 2)
2619
			WITH(CONTRACT_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15), DELIVERY_DT VARCHAR(20))
2620
		-- BEGIN CURSOR THONG TIN HOP DONG DINH KY
2621
			OPEN XmlDataRecurring;
2622
			FETCH NEXT FROM XmlDataRecurring INTO @CONTRACT_PERIOD_ID,@IS_PERIOD_CLOSED,@REF_TYPE, @DELIVERY_DT
2623
			WHILE @@fetch_status = 0 
2624
			BEGIN
2625
			-- SET
2626
				SET @INDEX_PO = @INDEX_PO +1
2627
			-- BEGIN VALIDATE
2628
				IF(@p_TYPE_FUNCTION ='SEND') 
2629
				BEGIN
2630
					IF(EXISTS(SELECT * FROM TR_PO_MASTER WHERE PO_ID =@REF_ID AND AUTH_STATUS <>'A'))
2631
					BEGIN
2632
						ROLLBACK TRANSACTION
2633
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
2634
						(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
2635
						RETURN '-1'
2636
					END
2637

    
2638
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P' AND REQ_PAY_ID 
2639
					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)))
2640
					BEGIN
2641
						ROLLBACK TRANSACTION
2642
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N':PO số '+
2643
						(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
2644
						RETURN '-1'
2645
					END
2646

    
2647
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2648
					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')))
2649
					BEGIN
2650
						ROLLBACK TRANSACTION
2651
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
2652
						(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
2653
						RETURN '-1'
2654
					END
2655
				END
2656
			-- END VALIDATE
2657
				DECLARE @REQ_PAYDTID_PERIOD VARCHAR(15);
2658
				EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_PERIOD OUT;
2659
				IF @REQ_PAYDTID_PERIOD='' OR @REQ_PAYDTID_PERIOD IS NULL GOTO ABORT;
2660
				INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE, DELIVERY_DT) 
2661
				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))
2662

    
2663
			IF @@error<>0 GOTO ABORT;
2664
			FETCH NEXT FROM XmlDataRecurring INTO @CONTRACT_PERIOD_ID,@IS_PERIOD_CLOSED,@REF_TYPE, @DELIVERY_DT
2665
			END
2666
			CLOSE XmlDataRecurring;
2667
			DEALLOCATE XmlDataRecurring;
2668
		-- END CURSOR THONG TIN HOP DONG DINH KY
2669

    
2670
		-- DECLARE
2671
			DECLARE @INDEX_PERIOD INT
2672
		--SET
2673
			SET @INDEX_PERIOD = 0
2674
		-- DELETE
2675
			DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID = @p_REQ_PAY_ID
2676
		-- DECLARE
2677
			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),
2678
			@TO_DATE VARCHAR(20),@AD_PAY_ID VARCHAR(15),  @_PROCESS VARCHAR(15),@PARENT_ID VARCHAR(15),@REASON_TTDK NVARCHAR(2000)
2679
		-- DECLARE CURSOR
2680
			DECLARE XmlDataPeriod CURSOR FOR SELECT * FROM OPENXML(@hdocPeriod, '/Root/XmlDataPeriod', 2)
2681
			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), 
2682
			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))
2683
		-- BEGIN CURSOR THONG TIN THANH TOAN HOP DONG DINH KY
2684
			OPEN XmlDataPeriod;
2685
			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, 
2686
			@PAY_PHASE, @REASON_TTDK
2687
			WHILE @@fetch_status=0 
2688
			BEGIN
2689
			-- SET
2690
				SET @INDEX_PERIOD = @INDEX_PERIOD +1
2691
			-- BEGIN VALIDATE
2692
				IF(@p_TYPE_FUNCTION ='SEND') 
2693
				BEGIN
2694
					IF(@NEW_INDEX <=@OLD_INDEX AND (@NEW_INDEX >0 AND @OLD_INDEX >0) )
2695
					BEGIN
2696
						ROLLBACK TRANSACTION
2697
						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
2698
						RETURN '-1'
2699
					END
2700
					-- NEU LÀ DINH KI THI HD PHAI KHAC NULL
2701
					IF(@CONTRACT_ID IS NULL OR @CONTRACT_ID ='' )
2702
					BEGIN
2703
						ROLLBACK TRANSACTION
2704
						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
2705
						RETURN '-1'
2706
					END
2707
					-- KIEM TRA CHI TIET HOP DONG PHAI NAM TRONG DANH SACH CAC HOP DONG
2708
					IF(@CONTRACT_ID IS NOT NULL AND  @CONTRACT_ID <> '' )
2709
					BEGIN
2710
						IF(NOT EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REF_ID =@CONTRACT_ID))
2711
						BEGIN
2712
							ROLLBACK TRANSACTION
2713
							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
2714
							RETURN '-1'
2715
						END
2716
					END
2717
					
2718
					IF(ISNULL(@PARENT_ID, '') = '' AND @_PROCESS = '2')
2719
					BEGIN
2720
						ROLLBACK TRANSACTION
2721
						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.'
2722
						+ CHAR(10) + 
2723
						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: '
2724
						+ CHAR(10) + 
2725
						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 +
2726
						+ CHAR(10) + 
2727
						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 
2728
						ErrorDesc
2729
						RETURN '-1'
2730
					END
2731
				END
2732
			-- END VALIDATE
2733
				DECLARE @PERIOD_ID VARCHAR(15);
2734
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
2735
				IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
2736
				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,
2737
				TO_DATE,AD_PAY_ID,PROCESS,PARENT_ID,PAY_PHASE,REASON)
2738
				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,
2739
				CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK)
2740
			IF @@error<>0 GOTO ABORT;
2741
			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, 
2742
			@PAY_PHASE, @REASON_TTDK
2743
			END
2744
			CLOSE XmlDataPeriod;
2745
			DEALLOCATE XmlDataPeriod;
2746
		END	
2747
	-- END CURSOR THONG TIN THANH TOAN HOP DONG DINH KY
2748
	
2749
--doanptt 15/02/2022		
2750
-- INSERT JOB
2751
-- DS PHIEU YEU CAU CONG TAC
2752
				DELETE FROM TR_REQ_PAY_JOB WHERE REQ_PAY_ID = @p_REQ_PAY_ID
2753
				DECLARE @INDEX_PYCCT INT = 0
2754
				DECLARE @REQ_PAY_JOB_ID varchar(15) ,@REQ_PAY_ID varchar(15),@REQ_ID varchar(15), @REQ_CODE varchar(15), @MAKER_ID varchar(15),
2755
				@CREATE_DT varchar(15), @PAY_TYPE_J VARCHAR(5), @PAY_PHASE_J NVARCHAR(250), @PAY_AMT DECIMAL(18,0), @PAY_DESC NVARCHAR(1000)
2756
				, @AUTH_STATUS VARCHAR(1), @AUTH_STATUS_KT VARCHAR(1), 
2757
				@REQ_PAY_JOB_DVKD_CODE VARCHAR(20), @REQ_PAY_JOB_HO_ID VARCHAR(20), @BRANCH_CREATE_JOB VARCHAR(20), @DEP_CREATE_JOB VARCHAR(20)
2758
				DECLARE XmlDataJob CURSOR LOCAL FOR
2759
				SELECT * FROM OPENXML(@hdocJob, 'Root/XmlDataJob',2) 
2760
				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), 
2761
				PAY_PHASE NVARCHAR(250), PAY_AMT DECIMAL(18,0), PAY_DESC NVARCHAR(1000), AUTH_STATUS VARCHAR(1), AUTH_STATUS_KT VARCHAR(1))
2762
				OPEN XmlDataJob
2763
--- INSERT PHIEU YEU CAU CONG TAC
2764
				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 , 
2765
				@PAY_AMT , @PAY_DESC, @AUTH_STATUS , @AUTH_STATUS_KT
2766
				WHILE @@fetch_status=0 
2767
				BEGIN
2768
					SET @INDEX_PYCCT = @INDEX_PYCCT +1
2769
					/*
2770
					SET @BRANCH_CREATE_JOB = (SELECT TOP 1 B.BRANCH_CODE FROM TR_REQUEST_JOB_FORM A LEFT JOIN CM_BRANCH B ON A.BRANCH_CREATE = B.BRANCH_ID WHERE A.REQ_ID = @REQ_ID)
2771
					SET @DEP_CREATE_JOB = (SELECT B.DEP_CODE FROM TR_REQUEST_JOB_FORM A LEFT JOIN CM_DEPARTMENT B ON A.DEP_CREATE = B.DEP_ID WHERE A.REQ_ID = @REQ_ID)
2772
					IF(@BRANCH_CREATE_JOB = 'DV0001')
2773
					BEGIN
2774
						SET @REQ_PAY_JOB_DVKD_CODE = 'AFT-' + @BRANCH_CREATE_JOB + '-' + @DEP_CREATE_JOB;
2775
					END
2776
					ELSE
2777
					BEGIN
2778
						SET @REQ_PAY_JOB_DVKD_CODE = 'AFT-' + @BRANCH_CREATE_JOB + '-000000'; 
2779
					END
2780
					*/
2781
					IF(@p_TYPE_FUNCTION ='SEND')
2782
					BEGIN
2783
						IF(ISNULL(@REQ_CODE, '') = '' OR ISNULL(@REQ_ID, '') = '')
2784
						BEGIN
2785
							ROLLBACK TRANSACTION
2786
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin thanh toán chi phí đi công tác, dòng '+ CONVERT(VARCHAR(5),@INDEX_PYCCT) + N': Số phiếu yêu cầu công tác không được để trống' ErrorDesc
2787
							RETURN '-1'
2788
						END
2789
						IF(ISNULL(@PAY_TYPE_J, '') = '')
2790
						BEGIN
2791
							ROLLBACK TRANSACTION
2792
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin thanh toán chi phí đi công tác, dòng '+ CONVERT(VARCHAR(5),@INDEX_PYCCT) + N': Loại chi phí không được để trống' ErrorDesc
2793
							RETURN '-1'
2794
						END
2795
						IF(ISNULL(@PAY_PHASE_J, '') = '')
2796
						BEGIN
2797
							ROLLBACK TRANSACTION
2798
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin thanh toán chi phí đi công tác, dòng '+ CONVERT(VARCHAR(5),@INDEX_PYCCT) + N': Kỳ thanh toán không được để trống' ErrorDesc
2799
							RETURN '-1'
2800
						END
2801
						/*
2802
						IF(EXISTS(SELECT REQ_PAY_JOB_ID  FROM TR_REQ_PAY_JOB WHERE REQ_ID = @REQ_ID AND PAY_TYPE = @PAY_TYPE_J AND @REQ_CODE <> @REQ_PAY_JOB_DVKD_CODE))
2803
						BEGIN
2804
							ROLLBACK TRANSACTION
2805
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin thanh toán chi phí đi công tác, dòng '+ CONVERT(VARCHAR(5),@INDEX_PYCCT) + N': Loại chi phí này đã được thanh toán. Vui lòng thanh toán chi phí khác hoặc chọn phiếu yêu cầu công tác khác' ErrorDesc
2806
							RETURN '-1'
2807
						END
2808
						*/
2809
					END
2810
					DECLARE @p_REQ_JOB_ID VARCHAR(15);
2811
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_JOB', @p_REQ_JOB_ID OUT;
2812
					IF @p_REQ_JOB_ID='' OR @p_REQ_JOB_ID IS NULL GOTO ABORT;
2813
					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)
2814
					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)
2815
					IF @@error<>0 GOTO ABORT;
2816
					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
2817
				END;
2818
				CLOSE XmlDataJob;
2819
				DEALLOCATE XmlDataJob;
2820
--- END INSERT PHIEU YEU CAU CONG TAC
2821

    
2822
-- INSERT JOB DT 
2823
-- DS CHI TIET PHIEU YEU CAU CONG TAC
2824
				DELETE FROM TR_REQ_PAY_JOB_DT WHERE REQ_PAY_ID = @p_REQ_PAY_ID
2825
				DECLARE @INDEX_PYCCT_DETAIL INT = 0
2826
				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),
2827
				@CREATE_DT_DT varchar(15), @FULLNAME_DT NVARCHAR(250), @TLNAME_DT VARCHAR(15), @JOB_PLACE_DT NVARCHAR(MAX), @FRMDATE_DT VARCHAR(15), @TODATE_DT VARCHAR(15),
2828
				@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), 
2829
				@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)
2830
				DECLARE XmlDataJobDT CURSOR LOCAL FOR
2831
				SELECT * FROM OPENXML(@hdocJobDT, 'Root/XmlDataJobDT',2) 
2832
				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), 
2833
				FULLNAME nvarchar(250), TLNAME_DT VARCHAR(15), JOB_PLACE NVARCHAR(MAX), FRMDATE varchar(15), TODATE varchar(15),NUMBER_DAY decimal(18,0), DAY_RATE decimal(18,0), 
2834
				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) , 
2835
				AUTH_STATUS varchar(1), AUTH_STATUS_KT varchar(1)) 
2836
				OPEN XmlDataJobDT
2837

    
2838
--- INSERT CHI TIÊT PHIEU YEU CAU CONG TAC
2839
				FETCH NEXT FROM XmlDataJobDT INTO @REQ_PAY_JOB_DT_ID , @REQ_PAY_ID_DT, @REQ_ID_DT, @REQ_CODE_DT, @MAKER_ID_DT,
2840
				@CREATE_DT_DT , @FULLNAME_DT , @TLNAME_DT, @JOB_PLACE_DT , @FRMDATE_DT , @TODATE_DT ,
2841
				@NUMBER_DAY_DT, @DAY_RATE_DT , @JOB_COST_DT , @TYPE_TRANS_DT , @COST_MOVE_DT, 
2842
				@COST_RESIDENCE_DT, @COST_OTHER_DT , @COST_AMT_DT , @AUTH_STATUS_DT, @AUTH_STATUS_KT_DT
2843
				WHILE @@fetch_status=0 
2844
				BEGIN
2845
					SET @INDEX_PYCCT_DETAIL = @INDEX_PYCCT_DETAIL + 1
2846
					IF(@p_TYPE_FUNCTION ='SEND')
2847
					BEGIN
2848
						IF(ISNULL(@REQ_ID, '') = '')
2849
						BEGIN
2850
							ROLLBACK TRANSACTION
2851
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới Chi tiết chi phí đi công tác, dòng '+ CONVERT(VARCHAR(5),@INDEX_PYCCT_DETAIL) + N': Số phiếu yêu cầu công tác không được để trống' ErrorDesc
2852
							RETURN '-1'
2853
						END
2854
					END
2855

    
2856
					DECLARE @p_REQ_JOB_DT_ID VARCHAR(15);
2857
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_JOB_DT', @p_REQ_JOB_DT_ID OUT;
2858
					IF @p_REQ_JOB_DT_ID='' OR @p_REQ_JOB_DT_ID IS NULL GOTO ABORT;
2859
					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 , 
2860
													JOB_COST , TYPE_TRANS , COST_MOVE , COST_RESIDENCE , COST_OTHER , COST_AMT , AUTH_STATUS, AUTH_STATUS_KT)
2861
					VALUES (@p_REQ_JOB_DT_ID , @p_REQ_PAY_ID, @REQ_ID_DT, @REQ_CODE_DT, @MAKER_ID_DT,
2862
							GETDATE() , @FULLNAME_DT ,@TLNAME_DT, @JOB_PLACE_DT , CONVERT(DATE,@FRMDATE_DT,103) , CONVERT(DATE,@TODATE_DT,103) ,
2863
							@NUMBER_DAY_DT, @DAY_RATE_DT , @JOB_COST_DT , @TYPE_TRANS_DT , @COST_MOVE_DT, 
2864
							@COST_RESIDENCE_DT, @COST_OTHER_DT , 
2865
							ISNULL(@JOB_COST_DT, 0) + ISNULL(@COST_MOVE_DT, 0) + ISNULL(@COST_RESIDENCE_DT, 0) + ISNULL(@COST_OTHER_DT, 0), 
2866
							@AUTH_STATUS_DT, @AUTH_STATUS_KT_DT)
2867
					IF @@error<>0 GOTO ABORT;
2868
					FETCH NEXT FROM XmlDataJobDT INTO @REQ_PAY_JOB_DT_ID , @REQ_PAY_ID_DT, @REQ_ID_DT, @REQ_CODE_DT, @MAKER_ID_DT,
2869
									@CREATE_DT_DT , @FULLNAME_DT , @TLNAME_DT, @JOB_PLACE_DT , @FRMDATE_DT , @TODATE_DT ,
2870
									@NUMBER_DAY_DT, @DAY_RATE_DT , @JOB_COST_DT , @TYPE_TRANS_DT , @COST_MOVE_DT, 
2871
									@COST_RESIDENCE_DT, @COST_OTHER_DT , @COST_AMT_DT , @AUTH_STATUS_DT, @AUTH_STATUS_KT_DT
2872
				END;
2873
				CLOSE XmlDataJobDT;
2874
				DEALLOCATE XmlDataJobDT;
2875
--- END INSERT CHI TIET PHIEU YEU CAU CONG TAC
2876

    
2877

    
2878
--doanptt 17/02/2022		
2879
-- INSERT DRIVE
2880
-- DS PHIEU YEU CAU CONG TAC
2881
				DELETE FROM TR_REQ_PAY_DRIVE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
2882
				DECLARE @INDEX_DRIVE INT = 0
2883
				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)
2884
				DECLARE XmlDataDrive CURSOR LOCAL FOR
2885
				SELECT * FROM OPENXML(@hdocDrive, 'Root/XmlDataDrive',2) 
2886
				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), 
2887
				PAY_PHASE NVARCHAR(250), PAY_AMT DECIMAL(18,0), PAY_DESC NVARCHAR(1000), AUTH_STATUS VARCHAR(1), AUTH_STATUS_KT VARCHAR(1), 
2888
				RATE_GAS_100KM decimal(18,0), CAR_TYPE NVARCHAR(150))
2889
				OPEN XmlDataDrive
2890

    
2891
--- INSERT PHIEU YEU CAU CONG TAC
2892
				FETCH NEXT FROM XmlDataDrive INTO @REQ_PAY_DRIVE_ID ,@REQ_PAY_ID ,@CAR_ID , @CAR_PLATE, @MAKER_ID , @CREATE_DT , @PAY_TYPE , @PAY_PHASE, 
2893
				@PAY_AMT , @PAY_DESC, @AUTH_STATUS , @AUTH_STATUS_KT, @RATE_GAS_100KM, @CAR_TYPE
2894
				WHILE @@fetch_status=0 
2895
				BEGIN
2896
					SET @INDEX_DRIVE = @INDEX_DRIVE + 1;
2897
					IF(@p_TYPE_FUNCTION ='SEND')
2898
					BEGIN
2899
						IF(ISNULL(@CAR_PLATE, '') = '')
2900
						BEGIN
2901
							ROLLBACK TRANSACTION
2902
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin thanh toán chi phí vận hành xe, dòng '+ CONVERT(VARCHAR(5),@INDEX_DRIVE)+ N': Số xe không được phép để trống' ErrorDesc
2903
							RETURN '-1'
2904
						END
2905
						IF(ISNULL(@PAY_TYPE, '') = '')
2906
						BEGIN
2907
							ROLLBACK TRANSACTION
2908
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin thanh toán chi phí vận hành xe, dòng '+ CONVERT(VARCHAR(5),@INDEX_DRIVE)+ N': Loại chi phí không được phép để trống' ErrorDesc
2909
							RETURN '-1'
2910
						END
2911
						IF(ISNULL(@PAY_PHASE, '') = '')
2912
						BEGIN
2913
							ROLLBACK TRANSACTION
2914
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin thanh toán chi phí vận hành xe, dòng '+ CONVERT(VARCHAR(5),@INDEX_DRIVE)+ N': Kỳ thanh toán không được phép để trống' ErrorDesc
2915
							RETURN '-1'
2916
						END
2917
					END
2918
					DECLARE @p_REQ_DRIVE_ID VARCHAR(15);
2919
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_DRIVE', @p_REQ_DRIVE_ID OUT;
2920
					IF @p_REQ_DRIVE_ID='' OR @p_REQ_DRIVE_ID IS NULL GOTO ABORT;
2921
					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)
2922
					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)
2923
					IF @@error<>0 GOTO ABORT;
2924
					FETCH NEXT FROM XmlDataDrive INTO @REQ_PAY_DRIVE_ID ,@REQ_PAY_ID ,@CAR_ID , @CAR_PLATE, @MAKER_ID , @CREATE_DT , @PAY_TYPE , @PAY_PHASE, 
2925
					@PAY_AMT , @PAY_DESC, @AUTH_STATUS , @AUTH_STATUS_KT, @RATE_GAS_100KM, @CAR_TYPE
2926
				END;
2927
				CLOSE XmlDataDrive;
2928
				DEALLOCATE XmlDataDrive;
2929
--- END INSERT PHIEU YEU CAU CONG TAC
2930

    
2931
-- INSERT DRIVE DT 
2932
-- DS CHI TIET PHIEU YEU CAU CONG TAC
2933
				DELETE FROM TR_REQ_PAY_DRIVE_DT WHERE REQ_PAY_ID = @p_REQ_PAY_ID
2934
				DECLARE @REQ_PAY_DRIVE_DT_ID varchar(15), @FULLNAME NVARCHAR(250), @BRANCH_REQ VARCHAR(15), 
2935
				@KM_START decimal(18,2), @KM_END varchar(250), @KM_USED decimal(18,2), 
2936
				@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),
2937
				@CREATE_SCHEDULE NVARCHAR(250), @TRUONGDONVI VARCHAR(15), @INVENTORY_GAS_START decimal(18,2)
2938
				DECLARE XmlDataDriveDT CURSOR LOCAL FOR
2939
				SELECT * FROM OPENXML(@hdocDriveDT, 'Root/XmlDataDriveDT',2) 
2940
				WITH(REQ_PAY_DRIVE_ID varchar(15), REQ_PAY_ID varchar(15), CAR_ID varchar(15), MAKER_ID varchar(15), CREATE_DT varchar(15), 
2941
				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), 
2942
				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), 
2943
				NOTES NVARCHAR(MAX), COST_INCURRED decimal(18,2), CREATE_SCHEDULE NVARCHAR(250), TRUONGDONVI VARCHAR(15) , 
2944
				AUTH_STATUS varchar(1), AUTH_STATUS_KT varchar(1), INVENTORY_GAS_START decimal(18,2)) 
2945
				OPEN XmlDataDriveDT
2946

    
2947
				DECLARE @INDEX_DRIVEDT INT = 0
2948

    
2949
--- INSERT CHI TIÊT PHIEU YEU CAU CONG TAC
2950
				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, 
2951
				@RATE_GAS_100KM, @KM_START, @KM_END, @KM_USED, @RATE_GAS, @REAL_GAS, @REDUNDANCY_GAS, @INVENTORY_GAS, @NOTES, @COST_INCURRED, @CREATE_SCHEDULE,
2952
				@TRUONGDONVI, @AUTH_STATUS, @AUTH_STATUS_KT, @INVENTORY_GAS_START
2953
				WHILE @@fetch_status=0 
2954
				BEGIN
2955
					SET @INDEX_DRIVEDT = @INDEX_DRIVEDT + 1;
2956
					IF(@p_TYPE_FUNCTION ='SEND')
2957
					BEGIN
2958
						IF(ISNULL(@CAR_PLATE, '') = '')
2959
						BEGIN
2960
							ROLLBACK TRANSACTION
2961
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới bảng kê chi phí sử dụng nhiên liệu, dòng '+ CONVERT(VARCHAR(5),@INDEX_DRIVE)+ N': Biển số không được phép để trống' ErrorDesc
2962
							RETURN '-1'
2963
						END
2964
					END
2965
					DECLARE @p_REQ_DRIVE_DT_ID VARCHAR(15);
2966
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_DRIVE_DT', @p_REQ_DRIVE_DT_ID OUT;
2967
					IF @p_REQ_DRIVE_DT_ID='' OR @p_REQ_DRIVE_DT_ID IS NULL GOTO ABORT;
2968

    
2969
					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,
2970
					RATE_GAS_100KM, KM_START, KM_END, KM_USED, RATE_GAS, REAL_GAS, REDUNDANCY_GAS, INVENTORY_GAS, COST_INCURRED, NOTES, CREATE_SCHEDULE, TRUONGDONVI,
2971
					AUTH_STATUS, AUTH_STATUS_KT, INVENTORY_GAS_START)
2972
					VALUES (@p_REQ_DRIVE_DT_ID , @p_REQ_PAY_ID, @CAR_ID, @MAKER_ID, @CREATE_DT, @BRANCH_REQ, @PAY_PHASE, @CAR_TYPE, @CAR_PLATE, 
2973
					@RATE_GAS_100KM, @KM_START, @KM_END, @KM_USED, @RATE_GAS, @REAL_GAS, @REDUNDANCY_GAS, @INVENTORY_GAS, @COST_INCURRED, @NOTES,
2974
					@CREATE_SCHEDULE, @TRUONGDONVI, @AUTH_STATUS, @AUTH_STATUS_KT, @INVENTORY_GAS_START)
2975
					IF @@error<>0 GOTO ABORT;
2976

    
2977
					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, 
2978
					@RATE_GAS_100KM, @KM_START, @KM_END, @KM_USED, @RATE_GAS, @REAL_GAS, @REDUNDANCY_GAS, @INVENTORY_GAS, @NOTES, @COST_INCURRED, @CREATE_SCHEDULE,
2979
					@TRUONGDONVI, @AUTH_STATUS, @AUTH_STATUS_KT, @INVENTORY_GAS_START
2980
				END;
2981
				CLOSE XmlDataDriveDT;
2982
				DEALLOCATE XmlDataDriveDT;
2983
--- END INSERT CHI TIET PHIEU YEU CAU CONG TAC
2984

    
2985
-- INSERT REQUEST CAR
2986
-- DS PHIEU YEU CAU XE
2987
				DELETE FROM TR_REQ_PAY_REQUEST_CAR WHERE REQ_PAY_ID = @p_REQ_PAY_ID
2988
				DECLARE @REQ_PAY_REQUEST_CAR_ID varchar(15), @REQ_CAR_REQ_PAY_ID VARCHAR(15), @REQ_CAR_REQ_ID VARCHAR(15), 
2989
				@REQ_CAR_REQ_CODE varchar(25), @BRANCH_CREATE_FULLNAME nvarchar(1000), @DEP_CREATE_FULLNAME nvarchar(100), 
2990
				@REQ_CAR_NOTES NVARCHAR(1000), @REQ_CAR_MAKER_ID varchar(25), @REQ_CAR_CREATE_DT varchar(50), @REQ_CAR_CHECKER_ID varchar(25), @REQ_CAR_APPROVE_DT varchar(50)
2991

    
2992
				DECLARE XmlDataRequestCar CURSOR LOCAL FOR
2993
				SELECT * FROM OPENXML(@hdocRequestCar, 'Root/XmlDataReqCar',2) 
2994
				WITH(REQ_PAY_REQUEST_CAR_ID varchar(15), REQ_PAY_ID varchar(15), REQ_ID varchar(15), REQ_CODE varchar(25), MAKER_ID varchar(15), CREATE_DT varchar(50),
2995
				CHECKER_ID varchar(15), APPROVE_DT varchar(50), BRANCH_CREATE_FULLNAME nvarchar(1000), DEP_CREATE_FULLNAME nvarchar(1000), NOTES nvarchar(1000)) 
2996
				OPEN XmlDataRequestCar
2997

    
2998
--- INSERT PHIEU YEU CAU XE
2999
				FETCH NEXT FROM XmlDataRequestCar INTO @REQ_PAY_REQUEST_CAR_ID, @REQ_CAR_REQ_PAY_ID, @REQ_CAR_REQ_ID, @REQ_CAR_REQ_CODE, @REQ_CAR_MAKER_ID, @REQ_CAR_CREATE_DT,
3000
				@REQ_CAR_CHECKER_ID, @REQ_CAR_APPROVE_DT, @BRANCH_CREATE_FULLNAME, @DEP_CREATE_FULLNAME, @REQ_CAR_NOTES
3001
				WHILE @@fetch_status=0 
3002
				BEGIN
3003
					DECLARE @p_REQUEST_CAR_ID VARCHAR(15);
3004
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_REQUEST_CAR', @p_REQUEST_CAR_ID OUT;
3005
					IF @p_REQUEST_CAR_ID='' OR @p_REQUEST_CAR_ID IS NULL GOTO ABORT;
3006

    
3007
						
3008
					INSERT INTO [dbo].[TR_REQ_PAY_REQUEST_CAR]
3009
							   ([REQ_PAY_REQUEST_CAR_ID]
3010
							   ,[REQ_PAY_ID]
3011
							   ,[REQ_ID]
3012
							   ,[REQ_CODE]
3013
							   ,[MAKER_ID]
3014
							   ,[CREATE_DT]
3015
							   ,[CHECKER_ID]
3016
							   ,[APPROVE_DT]
3017
							   ,[BRANCH_CREATE_FULLNAME]
3018
							   ,[DEP_CREATE_FULLNAME]
3019
							   ,[NOTES])
3020
						 VALUES
3021
							   (@p_REQUEST_CAR_ID
3022
							   ,@p_REQ_PAY_ID
3023
							   ,@REQ_CAR_REQ_ID
3024
							   ,@REQ_CAR_REQ_CODE
3025
							   ,@REQ_CAR_MAKER_ID
3026
							   ,CONVERT(DATETIME, @REQ_CAR_CREATE_DT, 103)
3027
							   ,@REQ_CAR_CHECKER_ID
3028
							   ,CONVERT(DATETIME, @REQ_CAR_APPROVE_DT, 103)
3029
							   ,@BRANCH_CREATE_FULLNAME
3030
							   ,@DEP_CREATE_FULLNAME
3031
							   ,@REQ_CAR_NOTES)
3032

    
3033
					IF @@error<>0 GOTO ABORT;
3034
					FETCH NEXT FROM XmlDataRequestCar INTO @REQ_PAY_REQUEST_CAR_ID, @REQ_CAR_REQ_PAY_ID, @REQ_CAR_REQ_ID, @REQ_CAR_REQ_CODE, @REQ_CAR_MAKER_ID, @REQ_CAR_CREATE_DT,
3035
					@REQ_CAR_CHECKER_ID, @REQ_CAR_APPROVE_DT, @BRANCH_CREATE_FULLNAME, @DEP_CREATE_FULLNAME, @REQ_CAR_NOTES
3036
				END;
3037
				CLOSE XmlDataRequestCar;
3038
				DEALLOCATE XmlDataRequestCar;
3039
--- END INSERT PHIEU YEU CAU XE
3040
COMMIT TRANSACTION
3041
-- BEIGN VALIDATE SEND APPROVE
3042
	IF(@p_TYPE_FUNCTION ='SEND') -- KIEM TRA NEU 2 BIEN XML KHAC NULL TUC LA DANG TRONG QUA TRINH LUU NHAP
3043
	BEGIN
3044
	-- VALIDATE CAC LUOI THANH TOAN
3045
		IF((SELECT COUNT(*) FROM TR_REQ_PAY_SERVICE WHERE REQ_PAY_ID = @p_REQ_PAY_ID) = 0 AND @p_REQ_TYPE = 'D')
3046
		BEGIN
3047
			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
3048
			RETURN '-1'
3049
		END
3050
		/*
3051
		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')
3052
		BEGIN
3053
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới thông tin PO/ hợp đồng không được để trống'  ErrorDesc
3054
			RETURN '-1'
3055
		END
3056
		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')
3057
		BEGIN
3058
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới thông tin hợp đồng định kỳ không được để trống'  ErrorDesc
3059
			RETURN '-1'
3060
		END
3061
		*/
3062

    
3063
	-- DECLARE
3064
		DECLARE @BRANCH_TYPE_CR VARCHAR(15)
3065
		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),
3066
		@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)
3067
	-- SET
3068
		SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
3069
		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)
3070
		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  
3071
		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  
3072
		AND TYPE_TRANSFER ='R'))
3073
		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)
3074
		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)
3075
		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)
3076
		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)
3077

    
3078
		PRINT '@SUM_THANH_TOAN: ' + CONVERT(VARCHAR(20),@SUM_THANH_TOAN);
3079
		PRINT '@SUM_PHUONG_THUC: ' + CONVERT(VARCHAR(20),@SUM_PHUONG_THUC);
3080
		PRINT '@SUM_NGAN_SACH: ' + CONVERT(VARCHAR(20),@SUM_NGAN_SACH);
3081
		PRINT '@SUM_SERVICE: ' + CONVERT(VARCHAR(20),@SUM_SERVICE);
3082
		PRINT '@SUM_PERIOD: ' + CONVERT(VARCHAR(20),@SUM_PERIOD);
3083
		PRINT '@SUM_SCHEDULE: ' + CONVERT(VARCHAR(20),@SUM_SCHEDULE);
3084

    
3085
		IF(@p_REQ_TYPE ='I')
3086
		BEGIN
3087
			/*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)
3088
							+	(SELECT ISNULL(SUM(AMT_PAY*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
3089
							+	(SELECT ISNULL(SUM(AMT_PAY_REAL*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)*/
3090
			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)
3091
			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)
3092
			SET @SUM_ADD =(SELECT ISNULL(SUM(AMT_ADD*ISNULL(RATE,1)),0) FROM TR_REQ_PAYMENT_DT WHERE PAY_ID =@p_REQ_PAY_ID)
3093
			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') -
3094
			(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')
3095
		END
3096
		IF(@p_REQ_TYPE ='P' AND @p_IS_PERIOD ='Y' AND @p_IS_PERIOD <>'' AND @p_IS_PERIOD IS NOT NULL)
3097
		BEGIN
3098
			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)
3099
			--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')
3100
					
3101
		END
3102
		IF(@p_REQ_TYPE ='P' AND (@p_IS_PERIOD ='N' OR (@p_IS_PERIOD ='' OR @p_IS_PERIOD IS NULL)))
3103
		BEGIN
3104
			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)	
3105
			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)
3106
		END
3107
		IF(@p_REQ_TYPE ='D')
3108
		BEGIN
3109
			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)
3110
		END
3111
		IF(@p_REQ_TYPE = 'D' AND ROUND(@SUM_NGAN_SACH,0) <> ROUND(@SUM_THANH_TOAN,0))
3112
		BEGIN
3113
			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
3114
			RETURN '-1'
3115
		END
3116
		PRINT '@SUM_USE_REAL: ' + CONVERT(VARCHAR(20),@SUM_USE_REAL);
3117
		PRINT '@@SUM_NGAN_SACH: ' + CONVERT(VARCHAR(20),ROUND(@SUM_NGAN_SACH,0));
3118
		PRINT '@@SUM_USE_REAL: ' + CONVERT(VARCHAR(20),ROUND(@SUM_USE_REAL,0));
3119
		IF(ROUND(@SUM_NGAN_SACH,0) <> ROUND(@SUM_USE_REAL,0))
3120
		BEGIN
3121
			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
3122
			RETURN '-1'
3123
		END
3124
		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')
3125
		BEGIN
3126
			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
3127
			RETURN '-1'
3128
		END
3129
		IF(@p_REQ_TYPE <> 'I')
3130
		BEGIN
3131
			IF(NOT EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID  =@p_REQ_PAY_ID))
3132
			BEGIN
3133
				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
3134
				RETURN '-1'
3135
			END
3136
			IF(ROUND(@SUM_THANH_TOAN,0) <> ROUND(@SUM_PHUONG_THUC,0))
3137
			BEGIN
3138
				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
3139
				RETURN '-1'
3140
			END
3141
		END
3142
		ELSE
3143
		BEGIN
3144
			print 'START thanh toan hoan tam ung'
3145
			IF(ISNULL(@SUM_USE_REAL,0) >0)
3146
			BEGIN
3147
				IF(NOT EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID  =@p_REQ_PAY_ID))
3148
				BEGIN
3149
					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
3150
					RETURN '-1'	
3151
				END
3152
				IF(ROUND(@SUM_NGAN_SACH,0) <> ROUND(@SUM_USE_REAL,0))
3153
				BEGIN
3154
					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
3155
					RETURN '-1'
3156
				END
3157
				IF(ISNULL(@SUM_USE_REAL,0) <> (ISNULL(@SUM_SERVICE,0) + ISNULL(@SUM_PERIOD,0) + ISNULL(@SUM_SCHEDULE,0)))
3158
				BEGIN
3159
					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
3160
					RETURN '-1'
3161
				END
3162
			END
3163
			--IF(ABS((ISNULL(@SUM_ADD,0) - ISNULL(@SUM_PAY_BACK,0))) <> @SUM_PHUONG_THUC)
3164
			IF(((ISNULL(@SUM_ADD,0) - ISNULL(@SUM_PAY_BACK,0))) <> @SUM_PHUONG_THUC)
3165
			BEGIN
3166
				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
3167
				RETURN '-1'
3168
			END
3169
		END
3170
		-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
3171
		IF(ISNULL(@p_TRASFER_USER_RECIVE, '') <> '')
3172
		BEGIN
3173
			UPDATE TR_REQ_PAYMENT SET AUTH_STATUS ='W', PROCESS = NULL WHERE REQ_PAY_ID =@p_REQ_PAY_ID
3174
		END
3175
		ELSE
3176
		BEGIN
3177
			UPDATE TR_REQ_PAYMENT SET AUTH_STATUS ='U', PROCESS = NULL WHERE REQ_PAY_ID =@p_REQ_PAY_ID
3178
		END
3179
		
3180
		INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
3181
				
3182
		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')
3183
		--- Luu log chinh sua
3184
		INSERT INTO TR_REQ_PAY_INVOICE_LOG SELECT * FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID =@p_REQ_PAY_ID
3185
		-----
3186
		UPDATE TR_REQ_PAY_SCHEDULE SET AMT_REMAIN =0.00 WHERE AMT_REMAIN <0
3187
		UPDATE TR_REQ_PAY_BUDGET SET AMT_APP= ROUND(AMT_APP,0), AMT_REMAIN = ROUND(AMT_REMAIN,0)
3188
				
3189
		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))
3190
		BEGIN
3191
			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
3192
			RETURN '4'
3193
		END
3194
		ELSE
3195
		BEGIN
3196
			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
3197
			RETURN '4'
3198
		END
3199
	END
3200
-- END VALIDATE SEND APPROVE	
3201

    
3202

    
3203
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
3204
RETURN '0'
3205
ABORT:
3206
BEGIN
3207
		ROLLBACK TRANSACTION
3208
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
3209
		RETURN '-1'
3210
End
3211

    
3212