Project

General

Profile

210702 UPDATE 02.txt

Luc Tran Van, 07/21/2020 09:14 AM

 
1
ALTER PROCEDURE [dbo].[TR_REQ_DOC_Ins_To_PO] @p_TR_REQ_ID VARCHAR(15)
2
AS
3
BEGIN TRANSACTION;
4
	DECLARE @l_SUP_ID VARCHAR(15)
5
	DECLARE @p_PO_CODE VARCHAR(15),
6
        @p_BRANCH_ID VARCHAR(20),
7
		@p_SUP_ID VARCHAR(20),
8
		@p_TOTAL_AMT DECIMAL(18,2),
9
		@p_MAKER_ID VARCHAR(20),
10
		@p_TR_REQ_CODE VARCHAR(20),
11
		@p_SUP_NAME NVARCHAR(200),
12
		@p_SUP_ADDR NVARCHAR(200),
13
		@p_BRANCH_RE VARCHAR(20),
14
        @p_PO_NAME NVARCHAR(100);
15
--- LAY DANH SACH NHA CUNG CAP CUA HANG HOA TRONG PYCMS - LUCTV 25052020
16
	DECLARE @TABLE_NCC TABLE (SUP_ID VARCHAR(15))
17
	INSERT INTO @TABLE_NCC SELECT SUP_ID FROM TR_REQUEST_DOC_DT WHERE REQ_DOC_ID =@p_TR_REQ_ID GROUP BY SUP_ID
18
	WHILE((SELECT COUNT(*) FROM @TABLE_NCC)>0)
19
	BEGIN
20
	SET @l_SUP_ID =(SELECT TOP 1 SUP_ID FROM @TABLE_NCC)
21
	--insert master		
22
	DECLARE @l_PO_ID VARCHAR(15);
23
	EXEC SYS_CodeMasters_Gen 'TR_PO_MASTER', @l_PO_ID OUT;
24
	IF @l_PO_ID = '' OR @l_PO_ID IS NULL
25
	GOTO ABORT;
26
	SELECT @p_BRANCH_ID=BRANCH_DVMS,@p_BRANCH_RE=BRANCH_CREATE,@p_TR_REQ_CODE=REQ_CODE,@p_PO_NAME=REQ_REASON,@p_MAKER_ID=USER_DVMS FROM dbo.TR_REQUEST_DOC WHERE REQ_ID=@p_TR_REQ_ID
27

    
28
	--SELECT TOP 1 @p_SUP_ID = SUP_ID FROM dbo.TR_REQUEST_DOC_DT WHERE REQ_DOC_ID=@p_TR_REQ_ID
29
	SET @p_SUP_ID =@l_SUP_ID
30
	SET @p_TOTAL_AMT= (SELECT SUM(TOTAL_AMT) FROM dbo.TR_REQUEST_DOC_DT WHERE REQ_DOC_ID=@p_TR_REQ_ID AND SUP_ID =@p_SUP_ID)
31
	--TU PHAT SINH SO PO
32
	DECLARE @ldate INT = (SELECT YEAR(GETDATE()) );
33
	EXEC [dbo].[TR_PO_MASTER_NO_Gen] @p_BRANCH_ID, @ldate, @p_PO_CODE OUT;
34
	IF @p_PO_CODE = ''
35
	   OR @p_PO_CODE IS NULL
36
		GOTO ABORT;
37

    
38
	INSERT INTO TR_PO_MASTER
39
	(
40
		[PO_TYPE],
41
		[PO_ID],
42
		[PO_CODE],
43
		[PO_NAME],
44
		[CONTRACT_ID],
45
		[SUP_ID],
46
		[SUP_NAME],
47
		[SUP_ADDR],
48
		[INPUT_DT],
49
		[PAYMENT_DT],
50
		[TOTAL_AMT],
51
		[REQ_DOC_ID],
52
		[DELIVERY_DT],
53
		[PAYAPP_DT],
54
		[NOTES],
55
		[RECORD_STATUS],
56
		[MAKER_ID],
57
		[CREATE_DT],
58
		[AUTH_STATUS],
59
		[CHECKER_ID],
60
		[APPROVE_DT],
61
		BRANCH_ID
62
	)
63
	VALUES
64
	(1, @l_PO_ID, @p_PO_CODE, @p_PO_NAME, '', @p_SUP_ID, @p_SUP_NAME, @p_SUP_ADDR, GETDATE(),
65
	 NULL, @p_TOTAL_AMT, @p_TR_REQ_ID, NULL,
66
	 NULL, '', '1', @p_MAKER_ID, GETDATE(),
67
	 'E', NULL, NULL, @p_BRANCH_ID);
68
	IF @@Error <> 0
69
		GOTO ABORT;
70
	PRINT 'INSERT MASTER SUCCESS';
71
	INSERT INTO dbo.TR_PO_MASTER_TEMP
72
	(
73
		PO_ID,
74
		TR_REQ_ID,
75
		TR_REQ_CODE
76
	)
77
	VALUES
78
	(   @l_PO_ID,      -- PO_ID - varchar(15)
79
		@p_TR_REQ_ID,  -- TR_REQ_ID - varchar(20)
80
		@p_TR_REQ_CODE -- TR_REQ_CODE - varchar(20)
81
	 );
82
	 DECLARE @HANGHOA_ID VARCHAR(20),@QUANTITY DECIMAL(18,0),@PRICE DECIMAL(18,2),@TOTAL_AMT DECIMAL(18,2),@HH_TYPE VARCHAR(20),@HH_NAME NVARCHAR(100)
83
	 DECLARE lstData CURSOR FOR
84
	 SELECT HANGHOA_ID,QUANTITY,PRICE,TOTAL_AMT FROM dbo.TR_REQUEST_DOC_DT WHERE REQ_DOC_ID=@p_TR_REQ_ID AND SUP_ID =@p_SUP_ID
85
		
86
	OPEN lstData
87
	FETCH NEXT FROM lstData INTO @HANGHOA_ID,@QUANTITY,@PRICE,@TOTAL_AMT
88
	WHILE @@FETCH_STATUS = 0
89
	BEGIN
90
	SELECT @HH_NAME= HH_NAME,@HH_TYPE=HH_TYPE_ID FROM dbo.CM_HANGHOA WHERE HH_ID=@HANGHOA_ID
91
	DECLARE @l_PD_ID VARCHAR(15)
92
			EXEC SYS_CodeMasters_Gen 'TR_PO_DETAIL', @l_PD_ID out
93
			IF @l_PD_ID='' OR @l_PD_ID IS NULL GOTO ABORT		
94

    
95
	 INSERT INTO dbo.TR_PO_DETAIL
96
	 (
97
		 PD_ID,
98
		 PO_ID,
99
		 PLAN_ID,
100
		 TRADE_ID,
101
		 GOODS_ID,
102
		 DESCRIPTION,
103
		 UNIT_ID,
104
		 QUANTITY,
105
		 PRICE,
106
		 TOTAL_AMT,
107
		 IS_DELIVERY,
108
		 DELIVERY_DT,
109
		 PAYMENT_STATUS,
110
		 AMOUNT_PAID,
111
		 PAID_DT,
112
		 INVOICENO,
113
		 NOTES,
114
		 RECEIVE_BRANCH,
115
		 RECEIVE_ADDR,
116
		 RECEIVE_PERSON,
117
		 RECEIVE_TEL,
118
		 RECORD_STATUS,
119
		 MAKER_ID,
120
		 CREATE_DT,
121
		 AUTH_STATUS,
122
		 CHECKER_ID,
123
		 APPROVE_DT,
124
		 EXP_DELIVERY_DT,
125
		 GOODS_NAME,
126
		 INVOICE_DT,
127
		 GOODSTYPE_REAL,
128
		 VAT,
129
		 PRICE_VAT,
130
		 CONTRACT_DT
131
	 )
132
	 VALUES
133
	 (   @l_PD_ID,        -- PD_ID - varchar(15)
134
		 @l_PO_ID,        -- PO_ID - varchar(15)
135
		 '',        -- PLAN_ID - varchar(15)
136
		 '',        -- TRADE_ID - varchar(15)
137
		 @HANGHOA_ID,        -- GOODS_ID - varchar(15)
138
		 N'',       -- DESCRIPTION - nvarchar(500)
139
		 '',        -- UNIT_ID - varchar(15)
140
		 @QUANTITY,      -- QUANTITY - decimal(18, 0)
141
		 ROUND(@PRICE/1.1,0),      -- PRICE - decimal(18, 0)
142
		 @TOTAL_AMT,      -- TOTAL_AMT - decimal(18, 0)
143
		 '',        -- IS_DELIVERY - varchar(1)
144
		 NULL, -- DELIVERY_DT - datetime
145
		 'CTT',        -- PAYMENT_STATUS - varchar(4)
146
		 NULL,      -- AMOUNT_PAID - decimal(18, 0)
147
		 NULL, -- PAID_DT - datetime
148
		 '',        -- INVOICENO - varchar(1000)
149
		 N'',       -- NOTES - nvarchar(1000)
150
		 @p_BRANCH_RE,        -- RECEIVE_BRANCH - varchar(15)
151
		 N'',       -- RECEIVE_ADDR - nvarchar(1000)
152
		 N'',       -- RECEIVE_PERSON - nvarchar(500)
153
		 '',        -- RECEIVE_TEL - varchar(100)
154
		 '',        -- RECORD_STATUS - varchar(1)
155
		 @p_MAKER_ID,        -- MAKER_ID - varchar(15)
156
		 GETDATE(), -- CREATE_DT - datetime
157
		 '',        -- AUTH_STATUS - varchar(50)
158
		 '',        -- CHECKER_ID - varchar(15)
159
		 NULL, -- APPROVE_DT - datetime
160
		 NULL, -- EXP_DELIVERY_DT - datetime
161
		 @HH_NAME,       -- GOODS_NAME - nvarchar(500)
162
		 NULL, -- INVOICE_DT - datetime
163
		 @HH_TYPE,        -- GOODSTYPE_REAL - varchar(15)
164
		 10,      -- VAT - decimal(18, 2)
165
		--@TOTAL_AMT -   (ROUND(@PRICE/1.1,0) *@QUANTITY),      -- PRICE_VAT - decimal(18, 0)
166
		 @PRICE -ROUND(@PRICE/1.1,0),
167
		 ''         -- CONTRACT_DT - varchar(15)
168
		 )
169
 
170
	   FETCH NEXT FROM lstData INTO @HANGHOA_ID,@QUANTITY,@PRICE,@TOTAL_AMT
171
	END
172
	 CLOSE lstData;
173
    DEALLOCATE lstData;
174

    
175
	SET @TOTAL_AMT=(SELECT SUM(TOTAL_AMT) AS TOTAL_AMT FROM dbo.TR_REQUEST_DOC_DT WHERE REQ_DOC_ID=@p_TR_REQ_ID AND SUP_ID =@p_SUP_ID)
176

    
177
	DECLARE @l_PAY_ID VARCHAR(15)
178
	EXEC SYS_CodeMasters_Gen 'TR_PO_PAYMENT', @l_PAY_ID out
179
	IF @l_PAY_ID='' OR @l_PAY_ID IS NULL GOTO ABORT
180
	INSERT INTO dbo.TR_PO_PAYMENT
181
	(
182
	    PAY_ID,
183
	    PO_ID,
184
	    PAY_PHASE,
185
	    EXP_DT,
186
	    [PERCENT],
187
	    AMOUNT,
188
	    NOTES,
189
	    RECORD_STATUS,
190
	    MAKER_ID,
191
	    CREATE_DT,
192
	    AUTH_STATUS,
193
	    CHECKER_ID,
194
	    APPROVE_DT
195
	)
196
	VALUES
197
	(   @l_PAY_ID,        -- PAY_ID - varchar(15)
198
	    @l_PO_ID,        -- PO_ID - varchar(15)
199
	    '1',        -- PAY_PHASE - varchar(20)
200
	    GETDATE(), -- EXP_DT - datetime
201
	    100,      -- PERCENT - decimal(18, 0)
202
	    @TOTAL_AMT ,      -- AMOUNT - decimal(18, 0)
203
	    N'',       -- NOTES - nvarchar(1000)
204
	    '1',        -- RECORD_STATUS - varchar(1)
205
	    @p_MAKER_ID,        -- MAKER_ID - varchar(15)
206
	    GETDATE(), -- CREATE_DT - datetime
207
	    'U',        -- AUTH_STATUS - varchar(50)
208
	    '',        -- CHECKER_ID - varchar(15)
209
	    NULL  -- APPROVE_DT - datetime
210
	    )
211
		EXEC SYS_CodeMasters_Gen 'TR_PO_PAYMENT', @l_PAY_ID out
212
	IF @l_PAY_ID='' OR @l_PAY_ID IS NULL GOTO ABORT
213
	--INSERT INTO dbo.TR_PO_PAYMENT
214
	--(
215
	--    PAY_ID,
216
	--    PO_ID,
217
	--    PAY_PHASE,
218
	--    EXP_DT,
219
	--    [PERCENT],
220
	--    AMOUNT,
221
	--    NOTES,
222
	--    RECORD_STATUS,
223
	--    MAKER_ID,
224
	--    CREATE_DT,
225
	--    AUTH_STATUS,
226
	--    CHECKER_ID,
227
	--    APPROVE_DT
228
	--)
229
	--VALUES
230
	--(   @l_PAY_ID,        -- PAY_ID - varchar(15)
231
	--    @l_PO_ID,        -- PO_ID - varchar(15)
232
	--    '2',        -- PAY_PHASE - varchar(20)
233
	--    GETDATE(), -- EXP_DT - datetime
234
	--    50,      -- PERCENT - decimal(18, 0)
235
	--    @TOTAL_AMT / 2 ,      -- AMOUNT - decimal(18, 0)
236
	--    N'',       -- NOTES - nvarchar(1000)
237
	--    '1',        -- RECORD_STATUS - varchar(1)
238
	--    @p_MAKER_ID,        -- MAKER_ID - varchar(15)
239
	--    GETDATE(), -- CREATE_DT - datetime
240
	--    'E',        -- AUTH_STATUS - varchar(50)
241
	--    '',        -- CHECKER_ID - varchar(15)
242
	--    NULL  -- APPROVE_DT - datetime
243
	--    )
244

    
245
	IF(@TOTAL_AMT <=5000000)
246
	BEGIN
247
		UPDATE dbo.TR_PO_MASTER SET AUTH_STATUS='A' WHERE PO_ID=@l_PO_ID
248
	END
249
	--XOA DI NHA CUNG CAP
250
	DELETE FROM @TABLE_NCC WHERE SUP_ID =(SELECT TOP 1 SUP_ID FROM @TABLE_NCC)
251
	--- KET THUC VONG LAP KIEM TRA DANH SACH NHA CUNG CAP PYCMS
252
	END
253
	COMMIT TRANSACTION;
254
	RETURN 1;
255
	ABORT:
256
	BEGIN
257
		ROLLBACK TRANSACTION;
258
		RETURN 1;
259
	END;
260
	ABORT1:
261
	BEGIN
262
		CLOSE lstData;
263
		DEALLOCATE lstData;
264
		ROLLBACK TRANSACTION;
265
		RETURN 1;
266
	END;
267

    
268

    
269
2
270

    
271
ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Upd]
272
@p_REQ_PAY_ID	varchar(15)= NULL,
273
@p_REQ_PAY_CODE	varchar(50)	= NULL,
274
@p_REQ_DT VARCHAR(20)= NULL,
275
@p_BRANCH_ID	varchar(15)	= NULL,
276
@p_DEP_ID	varchar(15)	= NULL,
277
@p_REQ_REASON	nvarchar(MAX)	= NULL,
278
@p_REQ_TYPE	varchar(15)	= NULL,
279
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
280
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
281
@p_REF_ID	varchar(15)	= NULL,
282
@p_RECEIVER_PO	nvarchar(250)	= NULL,
283
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
284
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
285
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
286
@p_REQ_AMT	decimal(18, 0)	= NULL,
287
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
288
@p_MAKER_ID	varchar(15)	= NULL,
289
@p_CREATE_DT	varchar(25)	= NULL,
290
@p_EDITOR_ID	varchar(15)	= NULL,
291
@p_AUTH_STATUS	varchar(1)	= NULL,
292
@p_CHECKER_ID	varchar(15)	= NULL,
293
@p_APPROVE_DT	varchar(25)	= NULL,
294
@p_CREATE_DT_KT	varchar(25)	= NULL,
295
@p_MAKER_ID_KT	varchar(15)	= NULL,
296
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
297
@p_CHECKER_ID_KT	varchar(1)	= NULL,
298
@p_APPROVE_DT_KT  varchar(25)= null,
299
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
300
@p_BRANCH_CREATE	varchar(15)	= NULL,
301
@p_NOTES	varchar(15)	= NULL,
302
@p_RECORD_STATUS	varchar(1)	= NULL,
303
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
304
@p_TRANSFER_DT	varchar(25)	= NULL,
305
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
306
@p_PROCESS	varchar(15)	= NULL,
307
@p_PAY_PHASE VARCHAR(15)= NULL,
308
@p_DVDM_ID VARCHAR(15)= NULL,
309
@p_RATE DECIMAL(18,0) =0,
310
@p_RECIVER_MONEY VARCHAR(15)= NULL,
311
@p_XMP_TEMP XML = NULL,
312
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
313
@p_IS_PERIOD VARCHAR(5) = NULL
314
AS
315
--Validation is here
316
/*
317
DECLARE @ERRORSYS NVARCHAR(15) = '' 
318
  IF ( NOT EXISTS ( SELECT * FROM ASS_COLLECT WHERE ))
319
	 SET @ERRORSYS = ''
320
IF @ERRORSYS <> '' 
321
BEGIN
322
	SELECT ErrorCode Result, ''  CAR_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
323
	RETURN '0'
324
END 
325
*/
326
	--Luanlt-2019/10/15 Disable Validation
327
	--DECLARE @ERRORSYS NVARCHAR(15) = '' 
328
	--IF EXISTS(SELECT * FROM TR_PO_MASTER WHERE REF_ID  = @p_REF_ID )
329
	--BEGIN
330
	--	SET @ERRORSYS = 'ASSC-00005'
331
	--	SELECT ErrorCode Result, '' REQ_PAY_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
332
	--	RETURN '-1'
333
	--END
334
	IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''
335
	BEGIN
336
		SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu không được để trống' ErrorDesc
337
		RETURN '-1'
338
	END
339
	IF (@p_REQ_TYPE='I' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT =''))
340
	BEGIN
341
		SELECT '-1' Result, '' REQ_PAY_ID, N'Tài khoản nhân viên tạm ứng không được để trống' ErrorDesc
342
		RETURN '-1'
343
	END
344
	IF EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_CODE = @p_REQ_PAY_CODE AND REQ_PAY_ID <> @p_REQ_PAY_ID)
345
	BEGIN
346
		SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu đã tồn tại trong hệ thống' ErrorDesc
347
		RETURN '-1'
348
	END
349
	IF(((SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)<>@p_RECEIVER_DEBIT) AND @p_REQ_TYPE='I')
350
	BEGIN
351
		SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản tạm ứng của nhân viên đã tồn tại trong hệ thống! Bạn không được phép chỉnh sửa' ErrorDesc
352
		RETURN '-1'
353
	END
354
	IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) AND @p_REQ_TYPE='I')
355
		BEGIN
356
			INSERT INTO CM_ACCOUNT_PAY (REF_ID,ACC_TYPE,ACC_NUM,ACC_NAME,FUNTION,MAKER_ID,AUTH_STATUS,CREATE_DT,TK_GL,TK_GL_NAME) VALUES (@p_REF_ID,'ADV_PAY',@p_RECEIVER_DEBIT,'TK TAM UNG CUA NHAN VIEN ' +@p_REF_ID,'I',@p_MAKER_ID,'U',GETDATE(),'361200001','TAM UNG DE HOAT DONG NGHIEP VU')
357
		END
358
	ELSE
359
		BEGIN
360
			IF(((SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)<>@p_RECEIVER_DEBIT) AND @p_REQ_TYPE='I')
361
			BEGIN
362
				ROLLBACK TRANSACTION
363
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản tạm ứng của nhân viên đã tồn tại trong hệ thống! Bạn không được phép chỉnh sửa' ErrorDesc
364
				RETURN '-1'
365
			END
366
	END
367
	-- 19-11-2019 LUCTV BO SUNG VALIDATE TRONG QUA TRINH TEST SAU KHI UAT
368
	-- NEU TAM UNG CHO NHA CUNG CAP THI DOT THANH TOAN KHONG DUOC PHEP NULL
369
	-- SO TIEN THANH TOÁN PHAI LON HON KHONG
370
		IF(@p_REQ_AMT <=0)
371
		BEGIN	
372
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền tạm ứng phải lớn hơn 0' ErrorDesc
373
			RETURN '-1'
374
		END
375
	 -- END VALIDATE TRONG QUA TRINH TEST UAT
376
		BEGIN TRANSACTION
377
		--IF(@p_DVDM_ID IS NULL OR @p_DVDM_ID ='')
378
		--BEGIN
379
		--	SET @p_DVDM_ID = (SELECT TOP 1 DVDM_ID FROM CM_DVDM WHERE DVDM_NAME ='KHOI TAI CHINH')
380
		--END
381
		UPDATE TR_REQ_ADVANCE_PAYMENT SET 
382
		REF_ID = @p_REF_ID,
383
		DEP_ID= @p_DEP_ID,REQ_REASON = @p_REQ_REASON, REQ_PAY_TYPE = @p_REQ_PAY_TYPE,REQ_DT = CONVERT(DATE,@p_REQ_DT,103),
384
		REQ_AMT = @p_REQ_AMT,
385
		NOTES= @p_NOTES,
386
		REQ_TYPE= @p_REQ_TYPE,REQ_DESCRIPTION = @p_REQ_DESCRIPTION,RECEIVER_PO =@p_RECEIVER_PO, RECEIVER_DEBIT= @p_RECEIVER_DEBIT,
387
		REQ_TEMP_AMT=@p_REQ_TEMP_AMT,REQ_ENTRIES = @P_REQ_ENTRIES,BRANCH_ID = @p_BRANCH_ID,REQ_PAY_CODE = @p_REQ_PAY_CODE, PAY_PHASE =@p_PAY_PHASE,
388
		AUTH_STATUS='E', DVDM_ID=@p_DVDM_ID, RATE =@p_RATE,REQ_TYPE_CURRENCY =@p_REQ_TYPE_CURRENCY, RECIVER_MONEY= @p_RECIVER_MONEY, TRASFER_USER_RECIVE =@p_TRASFER_USER_RECIVE,IS_PERIOD =@p_IS_PERIOD
389
		WHERE REQ_PAY_ID =@p_REQ_PAY_ID
390
		IF @@Error <> 0 GOTO ABORT
391
		--- INSERT VÀO BẢNG DETAIL NÊU TẠM ỨNG LÀ TẠM ỨNG THANH TOÁN
392
			DECLARE @hdoc INT
393
			EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
394
			
395
			-- KIEM TRA NEU TAM UNG THANH TOAN
396
			IF((@p_REQ_TYPE='P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE='D')
397
			BEGIN
398
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID=@p_REQ_PAY_ID
399
				DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID=@p_REQ_PAY_ID
400
				DECLARE @PO_ID varchar(15),@TERM_PAY varchar(15),@AMT_PAY_SCHEDULE decimal(18,0),@REQ_ADV_ID_SCHE VARCHAR(15),@AMT_ADVANCE_SCHEDULE decimal(18,0),@AMT_PAY_DO decimal(18,0),
401
				@AMT_REMAIN_SCHEDULE decimal(18,0),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),
402
				@REF_ID VARCHAR(15),@REQ_PAY_DESC NVARCHAR(500), @REQ_PAY_ENTRIES NVARCHAR(250),@CURRENCY VARCHAR(15),@RATE DECIMAL(18,0),@CUST_ID VARCHAR(15),
403
				@EMP_ID VARCHAR(15),@AMT_PAY_REAL DECIMAL(18,2),@CHECK_IN VARCHAR(15),@IS_CLOSED VARCHAR(1)= NULL,@INDEX_NS INT =0,@REASON NVARCHAR(1000),@REF_TYPE VARCHAR(15)
404
				DECLARE XmlDataPO CURSOR FOR
405
				SELECT *
406
				FROM
407
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
408
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
409
				OPEN XmlDataPO;
410
				DECLARE @INDEX_PO INT =0
411
				SET @INDEX_PO = 0
412
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
413
				WHILE @@fetch_status=0 
414
				BEGIN
415
					SET @INDEX_PO = @INDEX_PO +1
416
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
417
					IF(@p_TYPE_FUNCTION ='SEND')
418
					BEGIN
419
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
420
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
421
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
422
					BEGIN
423
						ROLLBACK TRANSACTION
424
						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ố '+
425
						(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
426
						RETURN '-1'
427
					END
428
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
429
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND 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))
430
					BEGIN
431
						ROLLBACK TRANSACTION
432
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
433
						(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
434
						RETURN '-1'
435
					END
436
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
437
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
438
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
439
					BEGIN
440
						ROLLBACK TRANSACTION
441
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
442
						(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
443
						RETURN '-1'
444
					END
445
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
446
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' 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))
447
					BEGIN
448
						ROLLBACK TRANSACTION
449
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
450
						(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
451
						RETURN '-1'
452
					END
453
					END
454
					DECLARE @REQ_PAYDTID VARCHAR(15);
455
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
456
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
457
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
458
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
459
				IF @@error<>0 GOTO ABORT;
460
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
461
				END
462
				CLOSE XmlDataPO;
463
				DEALLOCATE XmlDataPO;
464
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
465
				DECLARE XmlDataSchedule CURSOR FOR
466
				SELECT *
467
				FROM
468
				OPENXML(@hdoc, 'Root/XmlDataSchedule',2)
469
				WITH(PO_ID varchar(15),TERM_PAY varchar(15),AMT_PAY_SCHEDULE decimal(18,0),REQ_ADV_ID varchar(15),AMT_ADVANCE_SCHEDULE decimal(18,0), AMT_PAY_DO decimal(18,0),
470
				AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
471
				REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
472
				OPEN XmlDataSchedule
473
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
474
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
475
				WHILE @@fetch_status=0 
476
				BEGIN
477
					DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
478
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
479
					IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
480
					INSERT INTO TR_REQ_PAY_SCHEDULE(
481
					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,
482
					CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE, AMT_PAY_REAL)
483
					VALUES (@p_REQ_PAY_SCHEDULE_ID,@p_REQ_PAY_ID,@PAY_ID,@AMT_PAY_SCHEDULE,@TERM_PAY,@p_REQ_PAY_ID,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,@AMT_REMAIN_SCHEDULE,
484
					GETDATE(),CONVERT(DATETIME,@REQ_AD_DT,103),NULL,@p_MAKER_ID,GETDATE(),'U','','ADV_PAY',@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL)
485
				--- END KHAI BAO CURSOR
486
				IF @@error<>0 GOTO ABORT;
487
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
488
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
489
				END
490
				CLOSE XmlDataSchedule;
491
				DEALLOCATE XmlDataSchedule;
492
			END
493
		--- END TẠM ỨNG THANH TOÁN
494
		---- TẠM ỨNG HĐ ĐỊNH KÌ
495
			IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
496
			BEGIN
497
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID
498
				DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
499
				DECLARE XmlDataPO CURSOR FOR
500
				SELECT *
501
				FROM
502
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
503
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
504
				OPEN XmlDataPO;
505
				SET @INDEX_PO = 0
506
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
507
				WHILE @@fetch_status=0 
508
				BEGIN
509
					SET @INDEX_PO = @INDEX_PO +1
510
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
511
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
512
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
513
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
514
					(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
515
				IF @@error<>0 GOTO ABORT;
516
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
517
				END
518
				CLOSE XmlDataPO;
519
				DEALLOCATE XmlDataPO;
520
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
521
			----------------------------
522
			--INSERT FROM PERIOD	
523
				DECLARE XmlDataPeriod CURSOR FOR
524
				SELECT *
525
				FROM
526
				OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)
527
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
528
				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),PAY_PHASE NVARCHAR(250),REASON NVARCHAR(2000) )
529
				OPEN XmlDataPeriod;
530
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
531
				@OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),@AMT_PAY_PERIOD DECIMAL(18,2),@FROM_DATE VARCHAR(20),@TO_DATE VARCHAR(20),@PAY_PHASE NVARCHAR(250), @REASON_TTDK NVARCHAR(2000)
532
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
533
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
534
				WHILE @@fetch_status=0 
535
				BEGIN
536
					--IF(CONVERT(DATE, @TO_DATE,103) <CONVERT(DATE,@FROM_DATE,103))
537
					--BEGIN
538
					--	ROLLBACK TRANSACTION
539
					--	SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Từ ngày không được lớn hơn đến ngày' ErrorDesc
540
					--	RETURN '-1'
541
					--END
542
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
543
					IF(@p_TYPE_FUNCTION ='SEND')
544
					BEGIN
545
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0)
546
					BEGIN
547
						ROLLBACK TRANSACTION
548
						SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Chỉ số mới phải lớn hơn chỉ số cũ' ErrorDesc
549
						RETURN '-1'
550
					END
551
					END
552
					DECLARE @PERIOD_ID VARCHAR(15);
553
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
554
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
555
					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, TO_DATE,AD_PAY_ID,PROCESS,PAY_PHASE, REASON)
556
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'ADV_PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),
557
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,'U',@CURRENCY, @RATE,CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@p_REQ_PAY_ID,'0',@PAY_PHASE,@REASON_TTDK)
558
			IF @@error<>0 GOTO ABORT;
559
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
560
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
561
			END
562
			CLOSE XmlDataPeriod;
563
			DEALLOCATE XmlDataPeriod;
564
			-- VALIDATE SO TIEN
565
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
566
			--BEGIN
567
			--	ROLLBACK TRANSACTION
568
			--	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
569
			--	RETURN '-1'
570
			--END
571
			----
572
			END
573
		---- END TẠM ỨNG HĐ ĐỊNH KÌ
574
		--- INSERT PHƯƠNG THỨC THANH TOÁN
575
		----MethodCursor
576
			DELETE FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
577
			DECLARE @RECEIVE_ID varchar(15),@RECEIVE_NAME nvarchar(100),@REQ_PAY_REASON nvarchar(MAX),@TOTAL_AMT_METHOD decimal(18,0),@REQ_PAY_TYPE varchar(1),
578
					@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(50), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20)
579
			DECLARE XmlDataMethod CURSOR FOR
580
			SELECT *
581
			FROM
582
			OPENXML(@hdoc, 'Root/XmlDataMethod',2)
583
			WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,0),REQ_PAY_TYPE varchar(1),
584
			REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), ACC_NAME NVARCHAR(50), 
585
			ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15))
586
			OPEN XmlDataMethod
587
			FETCH NEXT FROM XmlDataMethod 
588
			INTO  @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@ACC_NO,@ACC_NAME,@ISSED_BY,@ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN 
589
			WHILE @@fetch_status=0 
590
			BEGIN
591
				IF(@REQ_PAY_TYPE<>'1')
592
				BEGIN
593
					SET @ISSUED_DT = NULL
594
				END
595
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
596
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
597
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
598
				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,
599
				CREATE_DT,ACC_NO,ACC_NAME,ISSUED_BY,ISSUED_DT,CURRENCY,RATE,CHECK_IN)
600
				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,'',
601
				@p_MAKER_ID,GETDATE(),@ACC_NO,@ACC_NAME,@ISSED_BY, CONVERT(DATE, @ISSUED_DT, 103),@CURRENCY,@RATE,@CHECK_IN)
602
			IF @@error<>0 GOTO ABORT;
603
			FETCH NEXT FROM XmlDataMethod 
604
			INTO @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@ACC_NO,@ACC_NAME , @ISSED_BY , @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN
605
			END
606
			CLOSE XmlDataMethod;
607
			DEALLOCATE XmlDataMethod
608
		----END INSERT PHƯƠNG THỨC THANH TOÁN
609
		----INSERT VAO BANG DS KHACH HANG
610
			DELETE FROM TR_REQ_ADVANCE_CUS WHERE REQ_PAY_ID = @p_REQ_PAY_ID
611
			DECLARE XmlDataCus CURSOR FOR
612
			SELECT *
613
			FROM
614
			OPENXML(@hdoc, '/Root/XmlDataCus', 2)
615
			WITH(CUS_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO DECIMAL(18,0),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
616
			OPEN XmlDataCus;
617
			FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
618
				WHILE @@fetch_status=0 
619
				BEGIN		
620
					INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
621
					VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
622
				--- END KHAI BAO CURSOR
623
				IF @@error<>0 GOTO ABORT;
624
				FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
625
				END
626
				CLOSE XmlDataCus;
627
				DEALLOCATE XmlDataCus;
628
		----END
629
		-- HANG MUC CHI PHI VA NGAN SACH
630
			DELETE FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID
631
			DECLARE @TRADE_ID varchar(15),@GD_ID varchar(15),@AMT_APP decimal(18,2),@AMT_DO decimal(18,2),@AMT_EXE decimal(18,2),@AMT_REMAIN_GD decimal(18,2)
632
			DECLARE XmlDataGood CURSOR FOR
633
			SELECT *
634
			FROM
635
			OPENXML(@hdoc, 'Root/XmlDataGood',2) 
636
			WITH(TRADE_ID varchar(15),GD_ID 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),REASON NVARCHAR(1000))
637
			OPEN XmlDataGood
638
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
639
			WHILE @@fetch_status=0 BEGIN
640
				--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
641
				SET @INDEX_NS = @INDEX_NS +1
642
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
643
				IF(@p_TYPE_FUNCTION ='SEND')
644
				BEGIN
645
				IF((@AMT_EXE  > @AMT_REMAIN_GD))
646
				BEGIN
647
						ROLLBACK TRANSACTION
648
						SELECT '-1' as Result, '' REQ_PAY_ID, 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
649
						RETURN '-1'
650
				END	
651
				END
652
				DECLARE @p_BUDGET_ID VARCHAR(15);
653
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
654
				IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
655
				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) 
656
				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(),@CURRENCY,@RATE,@REASON)
657
			IF @@error<>0 GOTO ABORT;
658
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
659
			END;
660
		CLOSE XmlDataGood;
661
		DEALLOCATE XmlDataGood;
662
		--- END INSERT NGAN SACH
663
		DELETE FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID
664
		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),@NOTES_ATT NVARCHAR(1000)
665
		DECLARE XmlAttach CURSOR FOR
666
		SELECT *
667
		FROM
668
		OPENXML(@hdoc, 'Root/XmlAttach',2) 
669
		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))
670
		OPEN XmlAttach
671
		--INSERT CHUNG TU DINH KEM
672
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
673
				WHILE @@fetch_status=0 
674
				BEGIN
675
					IF (@REF_DT='')
676
					BEGIN
677
						SET @REF_DT = NULL
678
					END
679
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
680
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
681
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT) VALUES
682
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT, CONVERT(DATE, @REF_DT,103))
683
				IF @@error<>0 GOTO ABORT;
684
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
685
				END
686
				CLOSE XmlAttach;
687
				DEALLOCATE XmlAttach;
688
		----END
689
		IF(@p_REQ_TYPE ='I')
690
			BEGIN
691
				DELETE FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID
692
				DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT DECIMAL(18,0))
693
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
694
				BEGIN
695
					INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001'
696
				END
697
				ELSE
698
				BEGIN
699
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
700
					BEGIN
701
						--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
702
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY' AND BRANCH_ID =@p_BRANCH_CREATE
703
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001'
704
				END
705
				ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
706
					BEGIN
707
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY' AND BRANCH_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE)
708
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001'
709
				END
710
				END
711
				DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
712
				SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
713
				DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
714
				DECLARE CUR_PR CURSOR FOR  SELECT A.ROLE_ID, A.BRANCH_ID,A.AMT FROM @tmp A
715
				OPEN CUR_PR
716
				FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
717
				WHILE @@FETCH_STATUS =0 --AND @STOP=0
718
				BEGIN								
719
					SET @INDEX= @INDEX+1
720
					IF @INDEX = @SL_ROLE
721
						SET @ISLEAF = 'Y'
722
					ELSE
723
						SET @ISLEAF = 'N'
724
					SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
725

    
726
					IF(@INDEX=1 )
727
					BEGIN		
728
						SET @PARENT_ID = NULL
729
						SET @STATUS = 'C'							
730
						--INSERT INTO TR_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),'C',@ROLE_ID,@BRANCH_ID,NULL,NULL,NULL,@ISLEAF)
731
					END				
732
					ELSE 
733
					BEGIN
734
						SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
735
						SET @STATUS = 'U'
736
					END
737
						IF(@LIMIT_VALUE >= @p_REQ_AMT)
738
						BEGIN
739
							INSERT INTO dbo.PL_REQUEST_PROCESS
740
							(
741
								REQ_ID,
742
								PROCESS_ID,
743
								STATUS,
744
								ROLE_USER,
745
								BRANCH_ID,
746
								CHECKER_ID,
747
								APPROVE_DT,
748
								PARENT_PROCESS_ID,
749
								IS_LEAF, COST_ID, DVDM_ID, NOTES
750
							)
751
							VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
752
							--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y')
753
							BREAK;
754
						END
755
						ELSE
756
							INSERT INTO PL_REQUEST_PROCESS (
757
								REQ_ID,
758
								PROCESS_ID,
759
								STATUS,
760
								ROLE_USER,
761
								BRANCH_ID,
762
								CHECKER_ID,
763
								APPROVE_DT,
764
								PARENT_PROCESS_ID,
765
								IS_LEAF, COST_ID, DVDM_ID, NOTES
766
							) VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
767
					--END
768
					
769
					FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
770
				END
771
				CLOSE CUR_PR
772
				DEALLOCATE CUR_PR
773
			END
774
COMMIT TRANSACTION
775
		IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
776
		BEGIN
777
				--ROLLBACK TRANSACTION
778
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
779
				UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
780
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
781
				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 tạm ứng và gửi phê duyệt')
782
				SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
783
				RETURN '4'
784
		END
785
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
786
RETURN '0'
787
ABORT:
788
BEGIN
789
		ROLLBACK TRANSACTION
790
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
791
		RETURN '-1'
792
End
793

    
794

    
795

    
796
3
797

    
798
ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Ins]
799
@p_REQ_PAY_ID	varchar(15)= NULL,
800
@p_REQ_PAY_CODE	varchar(50)	= NULL,
801
@p_REQ_DT VARCHAR(10)= NULL,
802
@p_BRANCH_ID	varchar(15)	= NULL,
803
@p_DEP_ID	varchar(15)	= NULL,
804
@p_REQ_REASON	nvarchar(MAX)	= NULL,
805
@p_REQ_TYPE	varchar(15)	= NULL,
806
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
807
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
808
@p_REF_ID	varchar(15)	= NULL,
809
@p_RECEIVER_PO	nvarchar(250)	= NULL,
810
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
811
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
812
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
813
@p_REQ_AMT	decimal(18, 0)	= NULL,
814
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
815
@p_MAKER_ID	varchar(15)	= NULL,
816
@p_CREATE_DT	varchar(25)	= NULL,
817
@p_EDITOR_ID	varchar(15)	= NULL,
818
@p_AUTH_STATUS	varchar(1)	= NULL,
819
@p_CHECKER_ID	varchar(15)	= NULL,
820
@p_APPROVE_DT	varchar(25)	= NULL,
821
@p_CREATE_DT_KT	varchar(25)	= NULL,
822
@p_MAKER_ID_KT	varchar(15)	= NULL,
823
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
824
@p_CHECKER_ID_KT	varchar(1)	= NULL,
825
@p_APPROVE_DT_KT  varchar(25)= null,
826
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
827
@p_BRANCH_CREATE	varchar(15)	= NULL,
828
@p_NOTES	varchar(15)	= NULL,
829
@p_RECORD_STATUS	varchar(1)	= NULL,
830
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
831
@p_TRANSFER_DT	varchar(25)	= NULL,
832
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
833
@p_PROCESS	varchar(15)	= NULL,
834
@p_PAY_PHASE VARCHAR(15)= NULL,
835
@p_DVDM_ID VARCHAR(15) = NULL,
836
@p_RATE DECIMAL(18,0)= NULL,
837
@p_RECIVER_MONEY VARCHAR(15) = NULL,
838
@p_IS_PERIOD VARCHAR(5) = NULL,
839
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
840
@p_XMP_TEMP XML = NULL
841
AS
842
--Validation is here
843
/*
844
DECLARE @ERRORSYS NVARCHAR(15) = '' 
845
  IF ( NOT EXISTS ( SELECT * FROM ASS_COLLECT WHERE ))
846
	 SET @ERRORSYS = ''
847
IF @ERRORSYS <> '' 
848
BEGIN
849
	SELECT ErrorCode Result, ''  CAR_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
850
	RETURN '0'
851
END 
852
*/
853
	--DECLARE @ERRORSYS NVARCHAR(15) = '' 
854
	--IF EXISTS(SELECT * FROM TR_PO_MASTER WHERE REF_ID  = @p_REF_ID )
855
	--BEGIN
856
	--	SET @ERRORSYS = 'ASSC-00005'
857
	--	SELECT ErrorCode Result, '' COLLECT_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
858
	--	RETURN '0'
859
	--END
860
	--DECLARE @AMT_AD_PAY DECIMAL(18,0) =0
861
BEGIN TRANSACTION
862
	-- LUCTV 17H51 BO SUNG LAY SO TIEN DA TAM UNG CUA NHAN VIEN --
863
		--SET @AMT_DO =(SELECT * FROM [dbo].TR_RE)
864
	--THIEUVQ 281119---
865
		EXEC [dbo].[ADVANCE_CODE_GenKey] 'TR_REQ_ADVANCE_PAYMENT', '',@p_REQ_TYPE, @p_REQ_PAY_CODE out
866
	--END--
867
		IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''
868
		BEGIN
869
			ROLLBACK TRANSACTION
870
			SELECT '-1' Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Mã số phiếu không được để trống' ErrorDesc
871
			RETURN '-1'
872
		END
873
		IF (@p_REQ_TYPE='I' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT =''))
874
		BEGIN
875
			ROLLBACK TRANSACTION
876
			SELECT '-1' Result, '' REQ_PAY_ID, N'Tài khoản nhân viên tạm ứng không được để trống' ErrorDesc
877
			RETURN '-1'
878
		END
879
		IF EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_CODE  = @p_REQ_PAY_CODE )
880
		BEGIN
881
			ROLLBACK TRANSACTION
882
			SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Số phiếu tạm ứng đã tồn tại trong hệ thống' ErrorDesc
883
			RETURN '-1'
884
		END
885
		-- START 19-11-2019
886
		-- LUCTV BO SUNG VALIDATE TRONG QUA TRINH TEST SAU UAT- KIEM TRA NEU DOT THANH TOAN CHUA CO THI KHONG DUOC THEM MOI
887
		--IF(@p_REQ_TYPE='P' AND (@p_PAY_PHASE IS NULL OR @p_PAY_PHASE =''))
888
		--BEGIN
889
		--	ROLLBACK TRANSACTION
890
		--	SELECT '-1' as Result, '' REQ_PAY_ID, N'Đợt thanh toán không được phép để trống' ErrorDesc
891
		--	RETURN '-1'
892
		--END
893
		---- NEU THANH TOAN XU LY NO THI NHAN VIEN NHAN TIEN TAM UNG KHONG DUOC PHEP TRONG
894
		--IF(@p_REQ_TYPE='D' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT =''))
895
		--BEGIN
896
		--	ROLLBACK TRANSACTION
897
		--	SELECT '-1' as Result, '' REQ_PAY_ID, N'Nhân viên nhận tạm ứng không được phép để trống' ErrorDesc
898
		--	RETURN '-1'
899
		--END
900
		-- SO TIEN THANH TOÁN PHAI LON HON KHONG
901
		IF(@p_REQ_AMT <=0)
902
		BEGIN
903
			ROLLBACK TRANSACTION
904
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền tạm ứng phải lớn hơn 0' ErrorDesc
905
			RETURN '-1'
906
		END
907
		-----
908
		---- KIEM TRA NEU CHUA CHON KHOI PHE DUYET THI TU DONG CHUYEN VÊ KHOI TAI CHINH
909
		--IF(@p_DVDM_ID IS NULL OR @p_DVDM_ID ='')
910
		--BEGIN
911
		--	SET @p_DVDM_ID = (SELECT TOP 1 DVDM_ID FROM CM_DVDM WHERE DVDM_NAME ='KHOI TAI CHINH')
912
		--END
913
		--
914
		--KIEM TRA NEU TAI KHOAN NHAN VIEN TAM UNG NEU CHUA TON TAI TRONG HE THONG THI BAO LOI
915
		IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) AND @p_REQ_TYPE='I')
916
		BEGIN
917
			INSERT INTO CM_ACCOUNT_PAY (REF_ID,ACC_TYPE,ACC_NUM,ACC_NAME,FUNTION,MAKER_ID,AUTH_STATUS,CREATE_DT,TK_GL,TK_GL_NAME) VALUES (@p_REF_ID,'ADV_PAY',@p_RECEIVER_DEBIT,'TK TAM UNG CUA NHAN VIEN ' +@p_REF_ID,'I',@p_MAKER_ID,'U',GETDATE(),'361200001','TAM UNG DE HOAT DONG NGHIEP VU')
918
		END
919
		ELSE
920
		BEGIN
921
			IF(((SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)<>@p_RECEIVER_DEBIT) AND @p_REQ_TYPE='I')
922
			BEGIN
923
				ROLLBACK TRANSACTION
924
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản tạm ứng của nhân viên đã tồn tại trong hệ thống! Bạn không được phép chỉnh sửa' ErrorDesc
925
				RETURN '-1'
926
			END
927
		END
928
		EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_PAMENT', @p_REQ_PAY_ID out
929
		IF @p_REQ_PAY_ID='' OR @p_REQ_PAY_ID IS NULL GOTO ABORT
930
		INSERT INTO [dbo].[TR_REQ_ADVANCE_PAYMENT]
931
           ([REQ_PAY_ID]
932
           ,[REQ_PAY_CODE]
933
           ,[BRANCH_ID],[REQ_DT],
934
           [DEP_ID]
935
           ,[REQ_REASON]
936
           ,[REQ_TYPE],REQ_ENTRIES,
937
            [REQ_DESCRIPTION]
938
           ,REF_ID,
939
			RECEIVER_PO, RECEIVER_DEBIT
940
           ,[REQ_PAY_TYPE]
941
           ,[REQ_TYPE_CURRENCY]
942
           ,[REQ_AMT]
943
           ,[REQ_TEMP_AMT]
944
           ,[MAKER_ID]
945
           ,[CREATE_DT]
946
           ,[EDITOR_ID]
947
           ,[AUTH_STATUS]
948
           ,[CHECKER_ID]
949
           ,[APPROVE_DT]
950
           ,[CREATE_DT_KT]
951
           ,[MAKER_ID_KT]
952
           ,[AUTH_STATUS_KT]
953
           ,[CHECKER_ID_KT]
954
		   ,[APPROVE_DT_KT]
955
           ,[CONFIRM_NOTES]
956
           ,[BRANCH_CREATE]
957
           ,[NOTES],RECORD_STATUS,TRANSFER_MAKER,TRANSFER_DT,TRASFER_USER_RECIVE,PROCESS,PAY_PHASE,DVDM_ID,RATE,RECIVER_MONEY,IS_PERIOD)
958
			VALUES
959
           (@p_REQ_PAY_ID,
960
			@p_REQ_PAY_CODE,
961
			@p_BRANCH_ID,CONVERT(DATE,@p_REQ_DT,103),
962
			@p_DEP_ID,
963
			@p_REQ_REASON,
964
			@p_REQ_TYPE,
965
			@P_REQ_ENTRIES,
966
			@p_REQ_DESCRIPTION,
967
			@p_REF_ID,
968
			@p_RECEIVER_PO,
969
			@p_RECEIVER_DEBIT,
970
			@p_REQ_PAY_TYPE,
971
			@p_REQ_TYPE_CURRENCY,
972
			@p_REQ_AMT,
973
			@p_REQ_TEMP_AMT,
974
			@p_MAKER_ID,
975
			GETDATE(),
976
			@p_EDITOR_ID,
977
			'E',
978
			NULL,
979
			NULL,
980
			NULL,
981
			NULL,
982
			NULL,
983
			NULL,
984
			NULL,
985
			NULL,
986
			@p_BRANCH_CREATE,
987
			@p_NOTES,@p_RECORD_STATUS,
988
			@p_TRANSFER_MAKER,
989
			NULL,
990
			@p_TRASFER_USER_RECIVE,
991
			@p_PROCESS,@p_PAY_PHASE,@p_DVDM_ID,@p_RATE,@p_RECIVER_MONEY,@p_IS_PERIOD)
992
			IF @@Error <> 0 GOTO ABORT
993
		--- INSERT VÀO BẢNG DETAIL NÊU TẠM ỨNG LÀ TẠM ỨNG THANH TOÁN
994
			DECLARE @hdoc INT
995
			EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
996
			
997
			-- KIEM TRA NEU TAM UNG THANH TOAN
998
			IF((@p_REQ_TYPE='P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE='D')
999
			BEGIN
1000
				DECLARE @PO_ID varchar(15),@TERM_PAY varchar(15),@AMT_PAY_SCHEDULE decimal(18,0),@REQ_ADV_ID_SCHE VARCHAR(15),@AMT_ADVANCE_SCHEDULE decimal(18,0),@AMT_PAY_DO decimal(18,0),
1001
				@AMT_REMAIN_SCHEDULE decimal(18,0),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),
1002
				@REF_ID VARCHAR(15),@REQ_PAY_DESC NVARCHAR(500), @REQ_PAY_ENTRIES NVARCHAR(250),@CURRENCY VARCHAR(15),@RATE DECIMAL(18,0),@CUST_ID VARCHAR(15), @EMP_ID VARCHAR(15),
1003
				@AMT_PAY_REAL DECIMAL(18,2), @IS_CLOSED VARCHAR(1)= NULL,@INDEX_NS INT =0,@REASON NVARCHAR(1000), @REF_TYPE VARCHAR(15)
1004
				DECLARE XmlDataPO CURSOR FOR
1005
				SELECT *
1006
				FROM
1007
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
1008
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
1009
				OPEN XmlDataPO;
1010
				DECLARE @INDEX_PO INT =0
1011
				SET @INDEX_PO = 0
1012
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1013
				WHILE @@fetch_status=0 
1014
				BEGIN
1015
					SET @INDEX_PO = @INDEX_PO +1
1016
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1017
					--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) AND REQ_PAY_ID <>@p_REQ_PAY_ID))
1018
					--BEGIN
1019
					--	ROLLBACK TRANSACTION
1020
					--	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
1021
					--	RETURN '-1'
1022
					--END
1023
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1024
					--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)))
1025
					--BEGIN
1026
					--	ROLLBACK TRANSACTION
1027
					--	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
1028
					--	RETURN '-1'
1029
					--END
1030
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1031
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1032
					IF(@p_TYPE_FUNCTION ='SEND')
1033
					BEGIN
1034
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
1035
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
1036
					BEGIN
1037
						ROLLBACK TRANSACTION
1038
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
1039
						(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
1040
						RETURN '-1'
1041
					END
1042
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1043
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND 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))
1044
					BEGIN
1045
						ROLLBACK TRANSACTION
1046
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
1047
						(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
1048
						RETURN '-1'
1049
					END
1050
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1051
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
1052
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
1053
					BEGIN
1054
						ROLLBACK TRANSACTION
1055
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1056
						(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
1057
						RETURN '-1'
1058
					END
1059
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1060
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' 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))
1061
					BEGIN
1062
						ROLLBACK TRANSACTION
1063
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1064
						(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
1065
						RETURN '-1'
1066
					END
1067
					END
1068
					DECLARE @REQ_PAYDTID VARCHAR(15);
1069
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
1070
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
1071
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
1072
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
1073
				IF @@error<>0 GOTO ABORT;
1074
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1075
				END
1076
				CLOSE XmlDataPO;
1077
				DEALLOCATE XmlDataPO;
1078
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
1079
				DECLARE XmlDataSchedule CURSOR FOR
1080
				SELECT *
1081
				FROM
1082
				OPENXML(@hdoc, 'Root/XmlDataSchedule',2)
1083
				WITH(PO_ID varchar(15),TERM_PAY varchar(15),AMT_PAY_SCHEDULE decimal(18,0),REQ_ADV_ID varchar(15),AMT_ADVANCE_SCHEDULE decimal(18,0), AMT_PAY_DO decimal(18,0),
1084
				AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
1085
				REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
1086
				OPEN XmlDataSchedule
1087
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
1088
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
1089
				WHILE @@fetch_status=0 
1090
				BEGIN
1091
					DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
1092
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
1093
					IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
1094
					INSERT INTO TR_REQ_PAY_SCHEDULE(
1095
					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,
1096
					CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE,AMT_PAY_REAL)
1097
					VALUES (@p_REQ_PAY_SCHEDULE_ID,@p_REQ_PAY_ID,@PAY_ID,@AMT_PAY_SCHEDULE,@TERM_PAY,@p_REQ_PAY_ID,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,@AMT_REMAIN_SCHEDULE,
1098
					GETDATE(),CONVERT(DATETIME,@REQ_AD_DT,103),NULL,@p_MAKER_ID,GETDATE(),'U','','ADV_PAY',@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL)
1099
				--- END KHAI BAO CURSOR
1100
				IF @@error<>0 GOTO ABORT;
1101
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
1102
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
1103
				END
1104
				CLOSE XmlDataSchedule;
1105
				DEALLOCATE XmlDataSchedule;
1106
			END
1107
		--- END TẠM ỨNG THANH TOÁN
1108
		--- TẠM ỨNG HĐ ĐỊNH KỲ
1109
		IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
1110
		BEGIN
1111
				
1112
				DECLARE XmlDataPO CURSOR FOR
1113
				SELECT *
1114
				FROM
1115
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
1116
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
1117
				OPEN XmlDataPO;
1118
				SET @INDEX_PO = 0
1119
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1120
				WHILE @@fetch_status=0 
1121
				BEGIN
1122
					SET @INDEX_PO = @INDEX_PO +1
1123
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
1124
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
1125
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
1126
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
1127
					(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
1128
				IF @@error<>0 GOTO ABORT;
1129
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1130
				END
1131
				CLOSE XmlDataPO;
1132
				DEALLOCATE XmlDataPO;
1133
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
1134
			----------------------------
1135
			--INSERT FROM PERIOD	
1136
				DECLARE XmlDataPeriod CURSOR FOR
1137
				SELECT *
1138
				FROM
1139
				OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)
1140
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
1141
				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),PAY_PHASE NVARCHAR(250),REASON NVARCHAR(2000))
1142
				OPEN XmlDataPeriod;
1143
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
1144
				@OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),@AMT_PAY_PERIOD DECIMAL(18,2),@FROM_DATE VARCHAR(20),@TO_DATE VARCHAR(20),@PAY_PHASE NVARCHAR(250),@REASON_TTDK NVARCHAR(2000)
1145
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
1146
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
1147
				WHILE @@fetch_status=0 
1148
				BEGIN
1149
					--IF(CONVERT(DATE, @TO_DATE,103) <CONVERT(DATE,@FROM_DATE,103))
1150
					--BEGIN
1151
					--	ROLLBACK TRANSACTION
1152
					--	SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Từ ngày không được lớn hơn đến ngày' ErrorDesc
1153
					--	RETURN '-1'
1154
					--END
1155
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1156
					IF(@p_TYPE_FUNCTION ='SEND')
1157
					BEGIN
1158
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0  )
1159
					BEGIN
1160
						ROLLBACK TRANSACTION
1161
						SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Chỉ số mới phải lớn hơn chỉ số cũ' ErrorDesc
1162
						RETURN '-1'
1163
					END
1164
					END
1165
					DECLARE @PERIOD_ID VARCHAR(15);
1166
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
1167
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
1168
					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, TO_DATE,AD_PAY_ID,PROCESS,PAY_PHASE,REASON)
1169
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'ADV_PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),
1170
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,'U',@CURRENCY, @RATE,CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@p_REQ_PAY_ID,'0',@PAY_PHASE,@REASON_TTDK)
1171
			IF @@error<>0 GOTO ABORT;
1172
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
1173
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
1174
			END
1175
			CLOSE XmlDataPeriod;
1176
			DEALLOCATE XmlDataPeriod;
1177
			-- VALIDATE SO TIEN
1178
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
1179
			--BEGIN
1180
			--	ROLLBACK TRANSACTION
1181
			--	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
1182
			--	RETURN '-1'
1183
			--END
1184
			----
1185
		END
1186
		---- END TẠM ỨNG HỢP ĐỒNG ĐỊNH KÌ
1187
		--- INSERT PHƯƠNG THỨC THANH TOÁN
1188
		----MethodCursor
1189
			DECLARE @RECEIVE_ID varchar(15),@RECEIVE_NAME nvarchar(100),@REQ_PAY_REASON nvarchar(MAX),@TOTAL_AMT_METHOD decimal(18,0),@REQ_PAY_TYPE varchar(1),
1190
					@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(50), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20),@CHECK_IN VARCHAR(15)
1191
			DECLARE XmlDataMethod CURSOR FOR
1192
			SELECT *
1193
			FROM
1194
			OPENXML(@hdoc, 'Root/XmlDataMethod',2)
1195
			WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,0),REQ_PAY_TYPE varchar(1),
1196
			REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), 
1197
			ACC_NAME NVARCHAR(50), ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15))
1198
			OPEN XmlDataMethod
1199
			FETCH NEXT FROM XmlDataMethod 
1200
			INTO  @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@ACC_NO,@ACC_NAME ,@ISSED_BY , @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN
1201
			WHILE @@fetch_status=0 
1202
			BEGIN
1203
				IF(@REQ_PAY_TYPE <>'1')
1204
				BEGIN
1205
					SET @ISSUED_DT = NULL
1206
				END
1207
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
1208
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
1209
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
1210
				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,
1211
				CREATE_DT,ACC_NO,ACC_NAME,ISSUED_BY,ISSUED_DT,CURRENCY,RATE,CHECK_IN)
1212
				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,'',
1213
				@p_MAKER_ID,GETDATE(),@ACC_NO,@ACC_NAME,@ISSED_BY, CONVERT(DATE, @ISSUED_DT, 103),@CURRENCY,@RATE,@CHECK_IN)
1214
			IF @@error<>0 GOTO ABORT;
1215
			FETCH NEXT FROM XmlDataMethod 
1216
			INTO @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@ACC_NO,@ACC_NAME , @ISSED_BY , @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN
1217
			END
1218
			CLOSE XmlDataMethod;
1219
			DEALLOCATE XmlDataMethod
1220
		----END INSERT PHƯƠNG THỨC THANH TOÁN
1221
		----INSERT VAO BANG DS KHACH HANG
1222
			DECLARE XmlDataCus CURSOR FOR
1223
			SELECT *
1224
			FROM
1225
			OPENXML(@hdoc, '/Root/XmlDataCus', 2)
1226
			WITH(CUS_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO DECIMAL(18,0),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
1227
			OPEN XmlDataCus;
1228
			FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
1229
				WHILE @@fetch_status=0 
1230
				BEGIN		
1231
					INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
1232
					VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
1233
				--- END KHAI BAO CURSOR
1234
				IF @@error<>0 GOTO ABORT;
1235
				FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
1236
				END
1237
				CLOSE XmlDataCus;
1238
				DEALLOCATE XmlDataCus;
1239
		----END
1240
			-- HANG MUC CHI PHI VA NGAN SACH
1241
			DECLARE @TRADE_ID varchar(15),@GD_ID varchar(15),@AMT_APP decimal(18,2), @AMT_DO decimal(18,2), @AMT_EXE decimal(18,2),@AMT_REMAIN_GD decimal(18,2)
1242
			DECLARE XmlDataGood CURSOR FOR
1243
			SELECT *
1244
			FROM
1245
			OPENXML(@hdoc, 'Root/XmlDataGood',2) 
1246
			WITH(TRADE_ID varchar(15),GD_ID 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),REASON NVARCHAR(1000))
1247
			OPEN XmlDataGood
1248
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
1249
			WHILE @@fetch_status=0 BEGIN
1250
				--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
1251
				SET @INDEX_NS = @INDEX_NS +1
1252
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1253
				IF(@p_TYPE_FUNCTION ='SEND')
1254
				BEGIN
1255
				IF((@AMT_EXE  > @AMT_REMAIN_GD))
1256
				BEGIN
1257
						ROLLBACK TRANSACTION
1258
						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
1259
						RETURN '-1'
1260
				END
1261
				END
1262
				DECLARE @p_BUDGET_ID VARCHAR(15);
1263
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
1264
				IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
1265
				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) 
1266
				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(),@CURRENCY,@RATE,@REASON)
1267
			IF @@error<>0 GOTO ABORT;
1268
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
1269
			END;
1270
		CLOSE XmlDataGood;
1271
		DEALLOCATE XmlDataGood;
1272
		--- END INSERT NGAN SACH
1273
		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),@NOTES_ATT NVARCHAR(1000)
1274
		DECLARE XmlAttach CURSOR FOR
1275
		SELECT *
1276
		FROM
1277
		OPENXML(@hdoc, 'Root/XmlAttach',2) 
1278
		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))
1279
		OPEN XmlAttach
1280
		--INSERT CHUNG TU DINH KEM
1281
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
1282
				WHILE @@fetch_status=0 
1283
				BEGIN
1284
					IF (@REF_DT='')
1285
					BEGIN
1286
						SET @REF_DT = NULL
1287
					END
1288
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
1289
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
1290
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT) VALUES
1291
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT, CONVERT(DATE, @REF_DT,103))
1292
				IF @@error<>0 GOTO ABORT;
1293
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
1294
				END
1295
				CLOSE XmlAttach;
1296
				DEALLOCATE XmlAttach;
1297
		----END
1298
		--- INSERT SẴN VÀO BẢNG TR_REQUEST_PROCESS
1299
			IF(@p_REQ_TYPE ='I')
1300
			BEGIN
1301
				DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT DECIMAL(18,0))
1302
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
1303
				BEGIN
1304
					INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001'
1305
				END
1306
				ELSE
1307
				BEGIN
1308
					IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
1309
					BEGIN
1310
						--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
1311
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY' AND BRANCH_ID =@p_BRANCH_CREATE
1312
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001'
1313
					END
1314
					ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
1315
					BEGIN
1316
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY' AND BRANCH_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE)
1317
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001'
1318
					END
1319
				END
1320
				DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
1321
				SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
1322
				DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
1323
				DECLARE CUR_PR CURSOR FOR  SELECT A.ROLE_ID, A.BRANCH_ID,A.AMT FROM @tmp A
1324
				OPEN CUR_PR
1325
				FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
1326
				WHILE @@FETCH_STATUS =0 --AND @STOP=0
1327
				BEGIN								
1328
					SET @INDEX= @INDEX+1
1329
					IF @INDEX = @SL_ROLE
1330
						SET @ISLEAF = 'Y'
1331
					ELSE
1332
						SET @ISLEAF = 'N'
1333
					SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
1334

    
1335
					IF(@INDEX=1 )
1336
					BEGIN		
1337
						SET @PARENT_ID = NULL
1338
						SET @STATUS = 'C'							
1339
						--INSERT INTO TR_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),'C',@ROLE_ID,@BRANCH_ID,NULL,NULL,NULL,@ISLEAF)
1340
					END				
1341
					ELSE 
1342
					BEGIN
1343
						SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
1344
						SET @STATUS = 'U'
1345
					END
1346
						IF(@LIMIT_VALUE >= @p_REQ_AMT)
1347
						BEGIN
1348
							INSERT INTO dbo.PL_REQUEST_PROCESS
1349
							(
1350
								REQ_ID,
1351
								PROCESS_ID,
1352
								STATUS,
1353
								ROLE_USER,
1354
								BRANCH_ID,
1355
								CHECKER_ID,
1356
								APPROVE_DT,
1357
								PARENT_PROCESS_ID,
1358
								IS_LEAF, COST_ID, DVDM_ID, NOTES
1359
							)
1360
							VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
1361
							--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y')
1362
							BREAK;
1363
						END
1364
						ELSE
1365
							INSERT INTO PL_REQUEST_PROCESS (
1366
								REQ_ID,
1367
								PROCESS_ID,
1368
								STATUS,
1369
								ROLE_USER,
1370
								BRANCH_ID,
1371
								CHECKER_ID,
1372
								APPROVE_DT,
1373
								PARENT_PROCESS_ID,
1374
								IS_LEAF, COST_ID, DVDM_ID, NOTES
1375
							) VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
1376
					--END
1377
					
1378
					FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
1379
				END
1380
				CLOSE CUR_PR
1381
				DEALLOCATE CUR_PR
1382
			END
1383
			--- CAP NHAT THANG CUOI CUNG LA Y
1384
			--UPDATE TR_REQUEST_PROCESS SET IS_LEAF='Y' WHERE ID = (SELECT MAX(ID) FROM TR_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID)
1385
		COMMIT TRANSACTION
1386
		IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
1387
		BEGIN
1388
				--ROLLBACK TRANSACTION
1389
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
1390
				UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1391
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
1392
				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 tạm ứng và gửi phê duyệt')
1393
				SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
1394
				RETURN '4'
1395
		END
1396
		SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,@p_REQ_PAY_CODE AS REQ_PAY_CODE, '' ErrorDesc
1397
		RETURN '0'
1398
ABORT:
1399
BEGIN
1400
		ROLLBACK TRANSACTION
1401
		SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, '' ErrorDesc
1402
		RETURN '-1'
1403
End
1404

    
1405
4
1406
ALTER PROCEDURE [dbo].[TR_CONTRACT_PAYMENT_ById]
1407
@CONTRACT_ID varchar(15)
1408
AS
1409
IF((SELECT CONT_TYPE FROM TR_CONTRACT WHERE CONTRACT_ID =@CONTRACT_ID) ='DK')
1410
BEGIN
1411

    
1412
	SELECT '' AS PAY_ID,@CONTRACT_ID AS CONTRACT_ID,B.PAY_PHASE AS PAY_PHASE, B.PAY_DT_REAL AS EXPECTED_DT,100.0 AS [PERCENT],
1413
	B.AMT_PAY AS AMOUNT,'' AS PAY_STATUS,B.REASON AS NOTES,'' AS MAKER_ID,B.PAY_DT_REAL AS CREATE_DT,'A' AS AUTH_STATUS,'' AS CHECKER_ID,B.PAY_DT_REAL AS APPROVE_DT,B.PAY_DT_REAL AS PAY_DT, B.AMT_PAY AS PAY_AMOUNT,'' AS CONTRACT_CODE,
1414
	'' AS REQUEST_ID,'' AS CONTRACT_PARENT,
1415
	B.AMT_PAY AS AMT_ADVANCE, 0.0 AS AMT_PAY_DO,
1416
	CASE WHEN B.PROCESS ='2' THEN 'TTX' ELSE  'DTU' END AS CDVAL,'' AS CONTENT, 0.0 AS AMT_LINK,  0.0 AS REMAIN_AMT
1417
	FROM TR_REQ_PAY_PERIOD B
1418
	WHERE B.PAY_TYPE ='ADV_PAY' AND B.AUTH_STATUS_KT ='A' AND B.CONTRACT_ID =@CONTRACT_ID
1419
	UNION
1420
	SELECT '' AS PAY_ID,@CONTRACT_ID AS CONTRACT_ID,B.PAY_PHASE AS PAY_PHASE, B.PAY_DT_REAL AS EXPECTED_DT,100 AS [PERCENT],
1421
	B.AMT_PAY AS AMOUNT,'' AS PAY_STATUS,'' AS NOTES,'' AS MAKER_ID,B.PAY_DT_REAL AS CREATE_DT,'A' AS AUTH_STATUS,'' AS CHECKER_ID,B.PAY_DT_REAL AS APPROVE_DT,B.PAY_DT_REAL AS PAY_DT, B.AMT_PAY AS PAY_AMOUNT,'' AS CONTRACT_CODE,
1422
	'' AS REQUEST_ID,'' AS CONTRACT_PARENT,
1423
	0.0 AS AMT_ADVANCE, B.AMT_PAY AS AMT_PAY_DO,
1424
	'TTX' CDVAL,'' AS CONTENT, 0.0 AS AMT_LINK,  0.0 AS REMAIN_AMT
1425
	FROM TR_REQ_PAY_PERIOD B
1426
	WHERE B.PAY_TYPE ='PAY' AND B.PROCESS ='1' AND B.AUTH_STATUS_KT ='A'
1427
	AND B.CONTRACT_ID =@CONTRACT_ID
1428
END
1429
ELSE
1430
BEGIN
1431
	SELECT A.*, ISNULL(B.AMT_ADVANCE,0) AS AMT_ADVANCE, ISNULL(B2.AMT_PAY_DO,0) AS AMT_PAY_DO , 
1432
	ISNULL(C.CDVAL,(CASE WHEN ISNULL(B.AMT_ADVANCE,0) >0 AND ISNULL(B2.AMT_PAY_DO,0) =0 THEN 'DTU' WHEN ISNULL(B2.AMT_PAY_DO,0) >0 AND ISNULL((A.AMOUNT - ISNULL(B2.AMT_PAY_DO,0) - ISNULL(B.AMT_ADVANCE,0)-ISNULL(B3.AMT_LINK,0)),0) >0 THEN 'DTT' WHEN ISNULL((A.AMOUNT - ISNULL(B2.AMT_PAY_DO,0) - ISNULL(B.AMT_ADVANCE,0)-ISNULL(B3.AMT_LINK,0)),0) =0 THEN 'TTX' ELSE 'CTT' END)) AS CDVAL, 
1433
	C.CONTENT, ISNULL(B3.AMT_LINK,0) AS AMT_LINK,  ISNULL((A.AMOUNT - ISNULL(B2.AMT_PAY_DO,0) - ISNULL(B.AMT_ADVANCE,0) - ISNULL(B3.AMT_LINK,0)),0) AS REMAIN_AMT
1434
	FROM TR_CONTRACT_PAYMENT A
1435
	--- TINH SO TIEN DA TAM UNG
1436
	LEFT JOIN 
1437
	(
1438
	 SELECT P.PAY_ID , SUM(P.AMT_PAY_REAL) AMT_ADVANCE,
1439
	 MAX(P.AMT_PAY_DO) AMT_PAY_DO, MAX(P.AMT_PAY) AMT_PAY, MAX(P.PAYMENT_STATUS) PAYMENT_STATUS 
1440
	 FROM TR_REQ_PAY_SCHEDULE P 
1441
	 WHERE P.AUTH_STATUS_KT='A' AND TRN_TYPE='ADV_PAY'
1442
	 GROUP BY P.PAY_ID 
1443
	)
1444
	 B ON A.PAY_ID = B.PAY_ID 
1445
	LEFT JOIN 
1446
	(
1447
	SELECT P.PAY_ID , ISNULL(MAX(P.AMT_ADVANCE),0) AMT_ADVANCE,
1448
	 ISNULL(SUM(P.AMT_PAY_REAL),0) AMT_PAY_DO, ISNULL(MAX(P.AMT_PAY),0) AMT_PAY, MAX(P.PAYMENT_STATUS) PAYMENT_STATUS 
1449
	 FROM TR_REQ_PAY_SCHEDULE P 
1450
	 WHERE P.AUTH_STATUS_KT='A' AND TRN_TYPE='PAY'
1451
	 GROUP BY P.PAY_ID 
1452
	)
1453
	 B2 ON A.PAY_ID = B2.PAY_ID 
1454
	  -- LEFT JOIN DE LAY SO TIEN LINK TOI PHIEU TAM UNG
1455
	 LEFT JOIN 
1456
	(
1457
	SELECT P.PAY_ID , ISNULL(MAX(P.AMT_REMAIN),0) AS AMT_LINK,
1458
	 SUM((P.AMT_PAY_REAL)) AMT_PAY_DO, ISNULL(MAX(P.AMT_PAY),0) AMT_PAY, MAX(P.PAYMENT_STATUS) PAYMENT_STATUS 
1459
	 FROM TR_REQ_PAY_SCHEDULE P 
1460
	 WHERE P.AUTH_STATUS_KT='A' AND TRN_TYPE='PAY' AND P.REQ_ADV_ID IS NOT NULL AND P.REQ_ADV_ID <>''
1461
	 GROUP BY P.PAY_ID 
1462
	)
1463
	 B3 ON A.PAY_ID = B3.PAY_ID 
1464
	LEFT JOIN CM_ALLCODE C ON C.CDVAL = B.PAYMENT_STATUS AND C.CDNAME = 'PAYMENT_STATUS'
1465
	WHERE  A.CONTRACT_ID= @CONTRACT_ID
1466
END
1467

    
1468
6
1469

    
1470
ALTER PROC [dbo].[TR_REQ_PAY_DETAIL]
1471
@p_REQ_PAY_ID VARCHAR(15) = NULL
1472
AS
1473
BEGIN
1474
	
1475
	DECLARE @TABLE_RETURN_01 TABLE ([NAME] NVARCHAR(250))
1476
	DECLARE @TABLE_RETURN_01_DT TABLE (IND INT IDENTITY(1,1) NOT NULL,[NAME] NVARCHAR(250))
1477
	DECLARE @TABLE_RETURN_02 TABLE ([NAME] NVARCHAR(250))
1478
	DECLARE @TABLE_RETURN_02_DT TABLE (IND INT IDENTITY(1,1) NOT NULL,[NAME] NVARCHAR(250))
1479
	DECLARE @TABLE_RETURN_03 TABLE  (IND INT IDENTITY(1,1) NOT NULL,[NAME] NVARCHAR(250), AMT DECIMAL(18,0))
1480
	DECLARE @TABLE_RETURN_04 TABLE (IND INT IDENTITY(1,1) NOT NULL,[NAME] NVARCHAR(250), AMT DECIMAL(18,0))
1481
	DECLARE @TABLE_RETURN_06 TABLE ([NAME] NVARCHAR(250), AMT DECIMAL(18,0))
1482
	DECLARE @INDEX INT =1
1483
	DECLARE @INDEX_TT INT =0
1484
	IF(EXISTS(SELECT * FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REQ_PAY_TYPE ='1'))
1485
	BEGIN
1486
	  SET @INDEX_TT = @INDEX_TT+1
1487
	--INSERT INTO @TABLE_RETURN
1488
	--SELECT N'Tiền mặt' AS PHUONG_THUC, ISNULL(SUM (TOTAL_AMT),0) AS T1 FROM TR_REQ_PAY_METHOD
1489
	--WHERE REQ_PAY_TYPE ='1' AND REQ_PAY_ID = @p_REQ_PAY_ID
1490
	INSERT INTO @TABLE_RETURN_03
1491
	SELECT N'. Người nhận: '+ ACC_NAME + CHAR(10) + N'    CMND số: ' + ACC_NO + char(10) + N'    Được cấp bởi: '+ ISSUED_BY + N' ngày cấp: '+ CONVERT(VARCHAR,ISSUED_DT,103) AS ACC_NAME, SUM(TOTAL_AMT) AS T2 
1492
	FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REQ_PAY_TYPE ='1'
1493
	GROUP BY ACC_NO, ACC_NAME, ISSUED_BY, ISSUED_DT
1494
	-- INSERT BANG TAM THE HIEN SO TIEN
1495
	INSERT INTO @TABLE_RETURN_04
1496
	SELECT 'N'+ CHAR(10) + 'D'+char(10) AS ACC_NAME, SUM(TOTAL_AMT) AS T2 
1497
	FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REQ_PAY_TYPE ='1'
1498
	GROUP BY ACC_NO, ACC_NAME, ISSUED_BY, ISSUED_DT
1499
	END
1500
	IF(EXISTS(SELECT * FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REQ_PAY_TYPE ='0'))
1501
	BEGIN
1502
		SET @INDEX_TT = @INDEX_TT+1
1503
		--INSERT INTO @TABLE_RETURN
1504
		--SELECT N'Chuyển khoản' AS PHUONG_THUC,ISNULL(SUM (TOTAL_AMT),0) AS T3 FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_TYPE ='0' AND REQ_PAY_ID = @p_REQ_PAY_ID
1505
		INSERT INTO @TABLE_RETURN_03
1506
		SELECT N'. Đơn vị thụ hưởng: '+ ACC_NAME + CHAR(10)+ N'    Số tài khoản: ' + ACC_NO + char(10) + N'    Tại ngân hàng: '+ ISSUED_BY AS ACC_NAME, SUM(TOTAL_AMT) AS T4 
1507
		FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REQ_PAY_TYPE ='0'
1508
		GROUP BY ACC_NO, ACC_NAME, ISSUED_BY
1509
		-- INSERT BANG TAM THE HIEN SO TIEN
1510
		INSERT INTO @TABLE_RETURN_04
1511
		SELECT  'N'+ CHAR(10)+ 'S'+ char(10) AS ACC_NAME, SUM(TOTAL_AMT) AS T4 
1512
		FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REQ_PAY_TYPE ='0'
1513
		GROUP BY ACC_NO, ACC_NAME, ISSUED_BY
1514
	END
1515
	-- KIEM TRA NOI DUNG SU DUNG CHI PHI VA NGAN SACH
1516
	IF(EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
1517
	BEGIN
1518
		--INSERT INTO @TABLE_RETURN_01 VALUES (CONVERT(VARCHAR(15),@INDEX) +N'. Nội dung tạm ứng: ')
1519
		INSERT INTO @TABLE_RETURN_01 VALUES( N'A - Nội dung thanh toán: ')
1520
		INSERT INTO @TABLE_RETURN_01_DT SELECT N'. '+ A.REQ_PAY_REASON FROM TR_REQ_PAY_METHOD A WHERE A.REQ_PAY_ID =@p_REQ_PAY_ID
1521
		INSERT INTO @TABLE_RETURN_06 SELECT 'A', A.TOTAL_AMT FROM TR_REQ_PAY_METHOD A WHERE A.REQ_PAY_ID =@p_REQ_PAY_ID	
1522
	END
1523
	--- HĐ & CHỨNG TỪ ĐÍNH KÈM
1524
	IF(EXISTS(SELECT * FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
1525
	BEGIN
1526
		SET @INDEX = @INDEX+1
1527
		--INSERT INTO @TABLE_RETURN_01 SELECT CONVERT(VARCHAR(15),@INDEX)+ N'. Chứng từ đính kèm: '
1528
		INSERT INTO @TABLE_RETURN_02 SELECT N'B - Chứng từ đính kèm: '
1529
	END
1530
	IF(EXISTS(SELECT * FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND TYPE ='C'))
1531
	BEGIN
1532
		--INSERT INTO @TABLE_RETURN_01 SELECT N'Thông tin hợp đồng đính kèm: ' 
1533
		INSERT INTO @TABLE_RETURN_02_DT SELECT ' '+ N'. Hợp đồng số ' + REF_CODE + ISNULL(N' ngày '+  CONVERT(VARCHAR,REF_DT,101),'')+ N', số tiền '+ FORMAT( ISNULL(AMT,0),'#,#', 'vi-VN')  AS T1 FROM TR_REQ_PAY_ATTACH
1534
		WHERE REQ_PAY_ID = @p_REQ_PAY_ID AND [TYPE] ='C'
1535
	END
1536
	IF(EXISTS(SELECT * FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND TYPE ='R'))
1537
	BEGIN
1538
		--INSERT INTO @TABLE_RETURN_01 SELECT N'Thông tin chứng từ khác đính kèm: ' 
1539
		INSERT INTO @TABLE_RETURN_02_DT SELECT N'. '+ [DESCRIPTION]+ N', số tiền '+ FORMAT( ISNULL(AMT,0),'#,#', 'vi-VN') AS T1 FROM TR_REQ_PAY_ATTACH
1540
		WHERE REQ_PAY_ID = @p_REQ_PAY_ID AND [TYPE] ='R'
1541
	END
1542
	IF(EXISTS(SELECT * FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
1543
	BEGIN
1544
		--INSERT INTO @TABLE_RETURN_01 SELECT N'Thông tin chứng từ khác đính kèm: ' 
1545
		INSERT INTO @TABLE_RETURN_02_DT SELECT N'. Số hóa đơn '+ INVOICE_NO +ISNULL(N' ngày '+  CONVERT(VARCHAR,INVOICE_DT,101),'')+ N', số tiền '+ FORMAT( ISNULL(PRICE+VAT,0),'#,#', 'vi-VN') AS T1 FROM TR_REQ_PAY_INVOICE
1546
		WHERE REQ_PAY_ID = @p_REQ_PAY_ID AND TYPE_FUNC='HC'
1547
	END
1548
	SELECT * FROM @TABLE_RETURN_01
1549
	SELECT * FROM @TABLE_RETURN_01_DT
1550
	SELECT * FROM @TABLE_RETURN_02
1551
    SELECT * FROM @TABLE_RETURN_02_DT
1552
	SELECT * FROM @TABLE_RETURN_03
1553
	SELECT * FROM @TABLE_RETURN_04
1554
	SELECT * FROM @TABLE_RETURN_06
1555
	
1556
END
1557

    
1558
7
1559
ALTER PROC [dbo].[TR_REQ_PAY_BY_REF]
1560
@p_REF_ID VARCHAR(15) = NULL,
1561
@p_TYPE VARCHAR(15) = NULL
1562
AS
1563
BEGIN
1564
		SELECT B.REQ_PAY_CODE, B.MAKER_ID,A.REQ_PAY_DESC AS REQ_REASON,A.AMT_PAY_REAL AS REQ_AMT,B.PAY_AMT,B.REQ_DT,B.REQ_PAY_ID,B.CHECKER_ID,B.MAKER_ID_KT,B.CHECKER_ID_KT,B.APPROVE_DT_KT, A.PAY_PHASE AS REQ_TYPE_NAME,C.REF_TYPE,C.[TYPE]
1565
		FROM TR_REQ_PAY_SCHEDULE A
1566
		INNER JOIN TR_REQ_ADVANCE_PAYMENT B ON A.REQ_PAY_ID = B.REQ_PAY_ID
1567
		INNER JOIN TR_REQ_ADVANCE_DT C ON A.REF_ID = C.REF_ID  AND C.TYPE ='ADV_PAY'
1568
		WHERE A.REF_ID =@p_REF_ID
1569
		UNION
1570
		SELECT B.REQ_PAY_CODE, B.MAKER_ID,A.REASON AS REQ_REASON,A.AMT_PAY AS REQ_AMT,B.PAY_AMT,B.REQ_DT,B.REQ_PAY_ID,B.CHECKER_ID,B.MAKER_ID_KT,B.CHECKER_ID_KT,B.APPROVE_DT_KT, A.PAY_PHASE AS REQ_TYPE_NAME,C.REF_TYPE,C.[TYPE]
1571
		FROM TR_REQ_PAY_PERIOD A
1572
		INNER JOIN TR_REQ_ADVANCE_PAYMENT B ON A.REQ_PAY_ID = B.REQ_PAY_ID
1573
		INNER JOIN TR_REQ_ADVANCE_DT C ON A.CONTRACT_ID = C.REF_ID AND C.TYPE ='ADV_PAY'
1574
		WHERE A.CONTRACT_ID =@p_REF_ID 
1575
		UNION
1576
		SELECT B.REQ_PAY_CODE, B.MAKER_ID,A.REQ_PAY_DESC AS REQ_REASON,A.AMT_PAY_REAL AS REQ_AMT,0.0 AS PAY_AMT,B.REQ_DT,B.REQ_PAY_ID,B.CHECKER_ID,B.MAKER_ID_KT,B.CHECKER_ID_KT,B.APPROVE_DT_KT, A.PAY_PHASE AS REQ_TYPE_NAME,C.REF_TYPE,C.[TYPE]
1577
		FROM TR_REQ_PAY_SCHEDULE A
1578
		INNER JOIN TR_REQ_PAYMENT B ON A.REQ_PAY_ID = B.REQ_PAY_ID
1579
		INNER JOIN TR_REQ_ADVANCE_DT C ON A.REF_ID = C.REF_ID  AND C.TYPE ='PAY'
1580
		WHERE A.REF_ID =@p_REF_ID AND A.PROCESS =1
1581
		UNION
1582
		SELECT B.REQ_PAY_CODE, B.MAKER_ID,A.REASON AS REQ_REASON,A.AMT_PAY AS REQ_AMT,0.0 AS PAY_AMT,B.REQ_DT,B.REQ_PAY_ID,B.CHECKER_ID,B.MAKER_ID_KT,B.CHECKER_ID_KT,B.APPROVE_DT_KT, A.PAY_PHASE AS REQ_TYPE_NAME,C.REF_TYPE,C.[TYPE]
1583
		FROM TR_REQ_PAY_PERIOD A
1584
		INNER JOIN TR_REQ_PAYMENT B ON A.REQ_PAY_ID = B.REQ_PAY_ID
1585
		INNER JOIN TR_REQ_ADVANCE_DT C ON A.CONTRACT_ID = C.REF_ID  AND C.TYPE ='PAY'
1586
		WHERE A.CONTRACT_ID =@p_REF_ID  AND A.PROCESS =1
1587
		
1588
		--LEFT JOIN
1589
		--(
1590
		--	SELECT P.REQ_PAY_ID, P.REF_ID, SUM(AMT_PAY_REAL) AS ST_THANH_TOAN FROM TR_REQ_PAY_SCHEDULE P
1591
		--	GROUP BY P.REQ_PAY_ID, P.REF_ID
1592

    
1593
		--) X ON A.REQ_PAY_ID = X.REQ_PAY_ID AND A.REF_ID = X.REF_ID
1594
		--LEFT JOIN
1595
		--(
1596
		--	SELECT P.REQ_PAY_ID, P.CONTRACT_ID, SUM(AMT_PAY) AS ST_DK FROM TR_REQ_PAY_PERIOD P
1597
		--	GROUP BY P.REQ_PAY_ID, P.CONTRACT_ID
1598

    
1599
		--) X2 ON A.REQ_PAY_ID = X2.REQ_PAY_ID AND A.REF_ID = X2.CONTRACT_ID
1600
		--WHERE A.CONTRACT_ID =@p_REF_ID 
1601
		
1602
		--UNION
1603
		--SELECT B.REQ_PAY_CODE, B.MAKER_ID, B.REQ_REASON, ISNULL((ISNULL(X.ST_TAM_UNG,0.0) + ISNULL(X2.ST_DK,0.0)),0.0) AS REQ_AMT,0 AS PAY_AMT,B.REQ_DT,B.REQ_PAY_ID, B.CHECKER_ID,B.MAKER_ID_KT,B.CHECKER_ID_KT,B.APPROVE_DT_KT,'' AS REQ_TYPE_NAME,A.REF_TYPE,A.[TYPE] FROM TR_REQ_ADVANCE_DT A 
1604
		--INNER JOIN TR_REQ_PAYMENT B ON A.REQ_PAY_ID = B.REQ_PAY_ID
1605
		--LEFT JOIN
1606
		--(
1607
		--	SELECT P.REQ_PAY_ID, P.REF_ID, SUM(AMT_PAY_REAL) AS ST_TAM_UNG FROM TR_REQ_PAY_SCHEDULE P
1608
		--	GROUP BY P.REQ_PAY_ID, P.REF_ID
1609

    
1610
		--) X ON A.REQ_PAY_ID = X.REQ_PAY_ID AND A.REF_ID = X.REF_ID
1611
		--LEFT JOIN
1612
		--(
1613
		--	SELECT P.REQ_PAY_ID, P.CONTRACT_ID, SUM(AMT_PAY) AS ST_DK FROM TR_REQ_PAY_PERIOD P
1614
		--	GROUP BY P.REQ_PAY_ID, P.CONTRACT_ID
1615

    
1616
		--) X2 ON A.REQ_PAY_ID = X2.REQ_PAY_ID AND A.REF_ID = X2.CONTRACT_ID
1617
		--WHERE A.REF_ID =@p_REF_ID
1618
		
1619
END
1620

    
1621
8
1622

    
1623
ALTER PROCEDURE [dbo].[TR_REQ_PAYMENT_Upd]
1624
@p_REQ_PAY_ID	varchar(15)= NULL,
1625
@p_REQ_PAY_CODE	varchar(50)	= NULL,
1626
@p_REQ_DT VARCHAR(20)= NULL,
1627
@p_BRANCH_ID	varchar(15)	= NULL,
1628
@p_DEP_ID	varchar(15)	= NULL,
1629
@p_REQ_REASON	nvarchar(MAX)	= NULL,
1630
@p_REQ_TYPE	varchar(15)	= NULL,
1631
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
1632
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
1633
@p_REF_ID	varchar(15)	= NULL,
1634
@p_RECEIVER_PO	nvarchar(250)	= NULL,
1635
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
1636
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
1637
@p_REQ_AMT	decimal(18, 0)	= NULL,
1638
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
1639
@p_MAKER_ID	varchar(15)	= NULL,
1640
@p_CREATE_DT	varchar(25)	= NULL,
1641
@p_EDITOR_ID	varchar(15)	= NULL,
1642
@p_AUTH_STATUS	varchar(1)	= NULL,
1643
@p_CHECKER_ID	varchar(15)	= NULL,
1644
@p_APPROVE_DT	varchar(25)	= NULL,
1645
@p_CREATE_DT_KT	varchar(25)	= NULL,
1646
@p_MAKER_ID_KT	varchar(15)	= NULL,
1647
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
1648
@p_CHECKER_ID_KT	varchar(1)	= NULL,
1649
@p_APPROVE_DT_KT  varchar(25)= null,
1650
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
1651
@p_BRANCH_CREATE	varchar(15)	= NULL,
1652
@p_NOTES	varchar(15)	= NULL,
1653
@p_RECORD_STATUS	varchar(1)	= NULL,
1654
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
1655
@p_TRANSFER_DT	varchar(25)	= NULL,
1656
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
1657
@p_PROCESS	varchar(15)	= NULL,
1658
@p_PAY_PHASE VARCHAR(15) = NULL,
1659
@p_RATE	DECIMAL(18,2) = 0,
1660
@p_IS_PERIOD VARCHAR(5) = NULL,
1661
@p_XMP_TEMP XML = NULL,
1662
@p_XMP_TEMP_2 XML = NULL,
1663
@p_TYPE_FUNCTION VARCHAR(15) = NULL
1664
AS
1665
--Validation is here
1666
/*
1667
DECLARE @ERRORSYS NVARCHAR(15) = '' 
1668
  IF ( NOT EXISTS ( SELECT * FROM ASS_COLLECT WHERE ))
1669
	 SET @ERRORSYS = ''
1670
IF @ERRORSYS <> '' 
1671
BEGIN
1672
	SELECT ErrorCode Result, ''  CAR_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
1673
	RETURN '0'
1674
END 
1675
*/
1676

    
1677
	--Luanlt-2019/10/15 Disable Validation
1678
	--DECLARE @ERRORSYS NVARCHAR(15) = '' 
1679
	--IF EXISTS(SELECT * FROM TR_PO_MASTER WHERE REF_ID  = @p_REF_ID )
1680
	--BEGIN
1681
	--	SET @ERRORSYS = 'ASSC-00005'
1682
	--	SELECT ErrorCode Result, '' REQ_PAY_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
1683
	--	RETURN '-1'
1684
	--END
1685
		IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''
1686
		BEGIN
1687
			SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu không được phép để trống' ErrorDesc
1688
			RETURN '-1'
1689
		END
1690
		IF EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_CODE = @p_REQ_PAY_CODE AND REQ_PAY_ID <> @p_REQ_PAY_ID)
1691
		BEGIN
1692
			SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu đã tồn tại trong hệ thống' ErrorDesc
1693
			RETURN '-1'
1694
		END
1695
		BEGIN TRANSACTION
1696
		DECLARE @VAT decimal(18, 0) =NULL, @TRANS_NO nvarchar(50)=NULL,
1697
		 @TRANS_DT VARCHAR(20)=NULL,@INVOICE_SIGN nvarchar(50) = NULL,@INVOICE_NO_SIGN nvarchar(50) = NULL,@INVOICE_NO nvarchar(50) = NULL,@INVOICE_DT VARCHAR(20) = NULL,@SELLER nvarchar(50) = NULL,@TAX_NO nvarchar(15) = NULL,@GOODS_NAME nvarchar(500) = NULL,
1698
		 @PRICE decimal(18, 0) = NULL,@TAX decimal(18, 0) = NULL,@NOTES NVARCHAR(MAX) = NULL,@VAT_RATE DECIMAL(18,0),@ACC_NO VARCHAR(25),@ACC_NAME NVARCHAR(250),@ISSUED_BY NVARCHAR(250),
1699
		 @ISSUED_DT VARCHAR(20),@CURRENCY VARCHAR(15)= NULL,@RATE DECIMAL(18,2), @TYPE_VAT VARCHAR(15),@TYPE_FUNC VARCHAR(15)
1700
		DECLARE @PAY_ADV_ID VARCHAR(15),@TYPE_TRANS VARCHAR(15),@REQ_PAY_ADV_CODE VARCHAR(15),@REASON NVARCHAR(1000),@REF_TYPE VARCHAR(15)
1701
		DECLARE @AMT_ADVANCED DECIMAL(18,0),@AMT_DO DECIMAL(18,0),
1702
		@AMT_REMAIN DECIMAL(18,0),@AMT_PAY DECIMAL(18,0),@AMT_USE DECIMAL(18,0),@AMT_REVERT DECIMAL(18,2), @AMT_ADD DECIMAL(18,2)
1703
		DECLARE @TOTAL_SCHEDULE_AMT DECIMAL(18,0) =0
1704
		DECLARE @INDEX_AD INT =0, @INDEX_SV INT =0,@INDEX INT =0, @INDEX_IV INT =0, @INDEX_NS INT =0
1705
		DECLARE @hdoc INT, @hDoc2 INT
1706
		EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
1707
		EXEC sp_xml_preparedocument @hDoc2 OUTPUT, @p_XMP_TEMP_2;
1708
		DECLARE XmlData CURSOR FOR
1709
		SELECT *
1710
		FROM
1711
		OPENXML(@hdoc, '/Root/XmlData', 2)
1712
		WITH(TRANS_NO nvarchar(50),TRANS_DT VARCHAR(20),INVOICE_SIGN nvarchar(50),INVOICE_NO_SIGN nvarchar(50),
1713
		 INVOICE_NO nvarchar(50),INVOICE_DT VARCHAR(20) ,SELLER nvarchar(50),TAX_NO nvarchar(15),GOODS_NAME nvarchar(500) ,
1714
		PRICE decimal(18,2),TAX decimal(18, 2),VAT decimal(18,2),NOTE NVARCHAR(MAX),VAT_RATE decimal(18,2),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),TYPE_VAT VARCHAR(15),TYPE_FUNC VARCHAR(15))
1715
		OPEN XmlData;
1716
		--CURSOR 2
1717
		DECLARE XmlDataPay CURSOR FOR
1718
		SELECT *
1719
		FROM
1720
		OPENXML(@hDoc2, '/Root/XmlDataPay', 2)
1721
		WITH(PAY_ADV_ID nvarchar(50),AMT_ADVANCED decimal(18, 0),AMT_DO decimal(18,2),
1722
		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))
1723
		OPEN XmlDataPay;
1724
	------------------------
1725
		--Luanlt---
1726
		--MethodCursor
1727
		DECLARE @RECEIVE_ID varchar(15),@RECEIVE_NAME nvarchar(100),@REQ_PAY_REASON nvarchar(MAX),@TOTAL_AMT_METHOD decimal(18,2),
1728
		@REQ_PAY_TYPE varchar(1),@REQ_PAY_DESC nvarchar(MAX),@REQ_PAY_ENTRIES nvarchar(MAX),@CHECK_IN VARCHAR(15)
1729
		DECLARE XmlDataMethod CURSOR FOR
1730
		SELECT *
1731
		FROM
1732
		OPENXML(@hdoc, 'Root/XmlDataMethod',2)
1733
		WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2),
1734
		REQ_PAY_TYPE varchar(1),REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(25), 
1735
		ACC_NAME NVARCHAR(250),ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),CHECK_IN VARCHAR(15),TYPE_TRANS VARCHAR(15))
1736
		OPEN XmlDataMethod
1737
		----------
1738
		--CatCursor
1739
		DECLARE @REQ_ADV_ID varchar(15),@CAT_NAME nvarchar(100),@TOTAL_AMT_CAT decimal(18,2), @DEPT_ID VARCHAR(15)
1740
		DECLARE XmlDataCat CURSOR FOR
1741
		SELECT *
1742
		FROM
1743
		OPENXML(@hdoc, 'Root/XmlDataCat',2) 
1744
		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))
1745
		OPEN XmlDataCat
1746
	---------------
1747
	--ServiceCursor
1748
		DECLARE @REQ_PAY_SERVICE_NAME nvarchar(100),@RECEIVE_ID_SERVICE varchar(15),@RECEIVE_NAME_SERVICE nvarchar(100),@REQ_PAY_REASON_SERVICE nvarchar(MAX),
1749
		@TOTAL_AMT_SERVICE decimal(18,2),
1750
		@REQ_PAY_TYPE_SERVICE varchar(1),@REQ_PAY_DESC_SERVICE nvarchar(MAX),@REQ_PAY_ENTRIES_SERVICE nvarchar(MAX),@DEPT_ID_SRV VARCHAR(15)
1751
		DECLARE XmlDataService CURSOR FOR
1752
		SELECT *
1753
		FROM
1754
		OPENXML(@hdoc, 'Root/XmlDataService',2)
1755
		WITH(REQ_PAY_SERVICE_NAME nvarchar(100),RECEIVE_ID_SERVICE varchar(15),RECEIVE_NAME_SERVICE nvarchar(100),REQ_PAY_REASON_SERVICE nvarchar(MAX),
1756
		TOTAL_AMT_SERVICE decimal(18,2),REQ_PAY_TYPE_SERVICE varchar(1),REQ_PAY_DESC_SERVICE nvarchar(MAX),REQ_PAY_ENTRIES_SERVICE nvarchar(MAX), 
1757
		DEPT_ID VARCHAR(15),CURRENCY VARCHAR(15), RATE DECIMAL(18,2))
1758
		OPEN XmlDataService
1759
			---------------
1760
	--ScheduleCursor
1761
		DECLARE @PO_ID varchar(15),@TERM_PAY varchar(15),@AMT_PAY_SCHEDULE decimal(18,2),@REQ_ADV_ID_SCHE VARCHAR(15),@AMT_ADVANCE_SCHEDULE decimal(18,2),
1762
		@AMT_REMAIN_SCHEDULE decimal(18,2),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),@AMT_PAY_DO DECIMAL(18,2),@AMT_PAY_REAL DECIMAL(18,2)
1763
		DECLARE XmlDataSchedule CURSOR FOR
1764
		SELECT *
1765
		FROM
1766
		OPENXML(@hdoc, 'Root/XmlDataSchedule',2)
1767
		WITH(PO_ID varchar(15),TERM_PAY varchar(15),AMT_PAY_SCHEDULE decimal(18,2),REQ_ADV_ID varchar(15),AMT_ADVANCE_SCHEDULE decimal(18,2),
1768
		AMT_REMAIN_SCHEDULE decimal(18,2),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),REQ_PAY_DESC NVARCHAR(250),
1769
		REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),AMT_PAY_DO DECIMAL(18,2),AMT_PAY_REAL DECIMAL(18,2))
1770
		OPEN XmlDataSchedule
1771
	 --END luanlt---
1772
	-- DS HANG MUC NGAN SACH
1773
		DECLARE @TRADE_ID varchar(15),@GD_ID varchar(15),@AMT_APP decimal(18,2),@AMT_EXE decimal(18,2),@AMT_REMAIN_GD decimal(18,2)
1774
		DECLARE XmlDataGood CURSOR FOR
1775
		SELECT *
1776
		FROM
1777
		OPENXML(@hdoc, 'Root/XmlDataGood',2) 
1778
		WITH(TRADE_ID varchar(15),GD_ID 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),REASON NVARCHAR(1000))
1779
		OPEN XmlDataGood
1780
		---- END CURSOR HANG MUC NGAN SACH
1781
		--  DINH KEM CHUNG TU DINH KEM
1782
		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)
1783
		DECLARE XmlAttach CURSOR FOR
1784
		SELECT *
1785
		FROM
1786
		OPENXML(@hdoc, 'Root/XmlAttach',2) 
1787
		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))
1788
		OPEN XmlAttach
1789
		-- END
1790
		UPDATE TR_REQ_PAYMENT SET 
1791
		REF_ID = @p_REF_ID,
1792
		DEP_ID= @p_DEP_ID,REQ_REASON = @p_REQ_REASON, REQ_PAY_TYPE = @p_REQ_PAY_TYPE,REQ_AMT = @p_REQ_AMT,REQ_DT =CONVERT(DATE,@p_REQ_DT,103),
1793
		 NOTES= @p_NOTES,
1794
		REQ_TYPE= @p_REQ_TYPE,REQ_DESCRIPTION = @p_REQ_DESCRIPTION,RECEIVER_PO = @p_RECEIVER_PO,TRANSFER_MAKER =@p_TRANSFER_MAKER,
1795
		REQ_TEMP_AMT=@p_REQ_TEMP_AMT,REQ_ENTRIES = @P_REQ_ENTRIES,BRANCH_ID = @p_BRANCH_ID,REQ_PAY_CODE = @p_REQ_PAY_CODE, AUTH_STATUS='E', IS_PERIOD =@p_IS_PERIOD, TRASFER_USER_RECIVE =@p_TRASFER_USER_RECIVE
1796
		WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1797
		IF @@Error <> 0 GOTO ABORT
1798
		--Insert XmlData
1799
		DELETE FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1800
		FETCH NEXT FROM XmlData INTO @TRANS_NO , @TRANS_DT  ,@INVOICE_SIGN ,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,
1801
		@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@TYPE_VAT,@TYPE_FUNC
1802
		WHILE @@fetch_status=0 BEGIN
1803
		SET @INDEX_IV = @INDEX_IV +1
1804
		-- KHI NAO BAM GUI PHE DUYET HE THONG MOI CHECK VALIDATE
1805
		IF(@p_TYPE_FUNCTION ='SEND') 
1806
		BEGIN
1807
		IF(LEN(@INVOICE_NO) >7)
1808
				BEGIN
1809
					ROLLBACK TRANSACTION
1810
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số hóa đơn '+ @INVOICE_NO +N' không được vượt quá 7 kí tự' ErrorDesc
1811
					RETURN '-1'
1812
				END	
1813
		 IF(LEN(@INVOICE_NO) <7)
1814
				BEGIN
1815
					ROLLBACK TRANSACTION
1816
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số hóa đơn '+ @INVOICE_NO +N' phải đủ 7 kí tự' ErrorDesc
1817
					RETURN '-1'
1818
				END	
1819
		IF(EXISTS(SELECT * FROM TR_REQ_PAY_INVOICE WHERE INVOICE_NO =@INVOICE_NO AND INVOICE_NO_SIGN = @INVOICE_NO_SIGN AND INVOICE_SIGN =@INVOICE_SIGN AND TAX_NO =@TAX_NO AND TAX =@TAX))
1820
			BEGIN
1821
					ROLLBACK TRANSACTION
1822
					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
1823
			RETURN '-1'
1824
			END		
1825
		END
1826
			--SET @INDEX = @INDEX +1
1827
			DECLARE @p_REQ_INV_ID VARCHAR(15);
1828
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_INVOICE', @p_REQ_INV_ID OUT;
1829
			IF @p_REQ_INV_ID='' OR @p_REQ_INV_ID IS NULL GOTO ABORT;
1830
			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,
1831
			MAKER_ID,CREATE_DT,EDITOR_ID,AUTH_STATUS,CHECKER_ID,APPROVE_DT,
1832
			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) 
1833
			VALUES (@p_REQ_INV_ID,@p_REQ_PAY_ID , @TRANS_NO , NULL  ,@INVOICE_SIGN ,@INVOICE_NO ,CONVERT(DATE,@INVOICE_DT,103) ,@SELLER ,@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,
1834
			@p_MAKER_ID,GETDATE(),NULL,'U',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1',@INVOICE_NO_SIGN,@VAT_RATE,@CURRENCY,@RATE,@PRICE,@VAT,@PRICE+@VAT,@TYPE_VAT,@TYPE_FUNC)
1835
		IF @@error<>0 GOTO ABORT;
1836
			FETCH NEXT FROM XmlData
1837
			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
1838
		END;
1839
		CLOSE XmlData;
1840
		DEALLOCATE XmlData;
1841
		--- INSERT CAC HANG MUC NGAN SACH	
1842
		DELETE FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID=@p_REQ_PAY_ID	
1843
		--- INSERT CAC HANG MUC NGAN SACH		
1844
		FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
1845
		WHILE @@fetch_status=0 BEGIN
1846
			--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
1847
			SET @INDEX_NS = @INDEX_NS +1
1848
			-- KHI NAO BAM GUI PHE DUYET HE THONG MOI CHECK VALIDATE
1849
			IF(@p_TYPE_FUNCTION ='SEND') 
1850
			BEGIN
1851
				IF((@AMT_EXE  > @AMT_REMAIN_GD))
1852
				BEGIN
1853
						ROLLBACK TRANSACTION
1854
						SELECT '-1' as Result, '' REQ_PAY_ID, 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
1855
						RETURN '-1'
1856
				END	
1857
			END
1858
			DECLARE @p_BUDGET_ID VARCHAR(15);
1859
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
1860
			IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
1861
			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) 
1862
			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(),@CURRENCY,@RATE,@REASON)
1863
			IF @@error<>0 GOTO ABORT;
1864
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
1865
		END;
1866
		CLOSE XmlDataGood;
1867
		DEALLOCATE XmlDataGood;
1868
		--INSERT FROM MethodCursor
1869
			DELETE FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1870
			SET @INDEX = 0
1871
			FETCH NEXT FROM XmlDataMethod INTO  @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,
1872
			@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@ACC_NO, @ACC_NAME,@ISSUED_BY, @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN,@TYPE_TRANS
1873
			WHILE @@fetch_status=0 
1874
			BEGIN
1875
				IF(@REQ_PAY_TYPE<>'1')
1876
				BEGIN
1877
					SET @ISSUED_DT = NULL
1878
				END
1879
				SET @INDEX = @INDEX +1
1880
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
1881
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
1882
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
1883
				INSERT INTO TR_REQ_PAY_METHOD
1884
				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),@CURRENCY,@RATE,@CHECK_IN,@TYPE_TRANS)
1885
			IF @@error<>0 GOTO ABORT;
1886
			FETCH NEXT FROM XmlDataMethod INTO @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@ACC_NO, @ACC_NAME,@ISSUED_BY, @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN,@TYPE_TRANS
1887
			END
1888
			CLOSE XmlDataMethod;
1889
			DEALLOCATE XmlDataMethod;
1890
		--- END INSERT NGAN SACH
1891
		--- INSERT VAO BANG CHUNG TU DINH KEM
1892
		-- INSERT CHUNG TU DINH KEM
1893
			DELETE FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1894
		    --OPEN XmlAttach;
1895
			FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
1896
				WHILE @@fetch_status=0 
1897
				BEGIN
1898
					IF (@REF_DT='')
1899
					BEGIN
1900
						SET @REF_DT = NULL
1901
					END
1902
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
1903
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
1904
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],[AMT],REF_DT) VALUES
1905
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT,CONVERT(DATE,@REF_DT,103))
1906
				IF @@error<>0 GOTO ABORT;
1907
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
1908
				END
1909
			CLOSE XmlAttach;
1910
			DEALLOCATE XmlAttach;    
1911
		----END
1912
		------------------------
1913
		IF(@p_REQ_TYPE = 'I')
1914
		BEGIN
1915
			--BEGIN CURRSOR 2
1916
			DELETE FROM TR_REQ_PAYMENT_DT WHERE PAY_ID = @p_REQ_PAY_ID
1917
			FETCH NEXT FROM XmlDataPay INTO @PAY_ADV_ID, @AMT_ADVANCED ,@AMT_DO,@AMT_REMAIN,@AMT_PAY ,@AMT_USE ,@AMT_REVERT,@AMT_ADD,@CURRENCY,@RATE
1918
			WHILE @@fetch_status=0 
1919
			BEGIN
1920
				SET @INDEX_AD = @INDEX_AD +1
1921
				SET @REQ_PAY_ADV_CODE = (SELECT REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@PAY_ADV_ID)
1922
				SET @INDEX_AD = @INDEX_AD +1
1923
				-- KHI NAO BAM GUI PHE DUYET HE THONG MOI CHECK VALIDATE
1924
				IF(@p_TYPE_FUNCTION ='SEND') 
1925
				BEGIN
1926
					-- KIEM TRA XEM CO PHIEU NAO DANG DUOC THANH TOAN HOAN TAM UNG MA CHUA DUYET HAY CHUA
1927
					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))
1928
					BEGIN
1929
						ROLLBACK TRANSACTION
1930
						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
1931
						RETURN '-1'
1932
					END		
1933
					-- KIEM TRA NEU SO TIEN DE NGHI HOAN TAM ƯNG LON HON SO TIEN CON LAI CAN PHAI TAM UNG
1934
					IF(@AMT_REVERT>(@AMT_REMAIN -@AMT_USE) AND @AMT_REVERT >0)
1935
					BEGIN
1936
						ROLLBACK TRANSACTION
1937
						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
1938
						RETURN '-1'
1939
					END		
1940
				END
1941
				DECLARE @p_REQ_PAYDT_ID VARCHAR(15);
1942
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAYMENT_DT', @p_REQ_PAYDT_ID OUT;
1943
				IF @p_REQ_PAYDT_ID='' OR @p_REQ_PAYDT_ID IS NULL GOTO ABORT;
1944
				INSERT INTO TR_REQ_PAYMENT_DT
1945
				VALUES (@p_REQ_PAYDT_ID,@PAY_ADV_ID,@p_REQ_PAY_ID , ISNULL(@AMT_ADVANCED,0) ,ISNULL(@AMT_DO,0),ISNULL(@AMT_REMAIN,0),
1946
				ISNULL(@AMT_PAY,0) ,ISNULL(@AMT_USE,0) ,ISNULL(@AMT_REVERT,0), ISNULL(@AMT_ADD,0), GETDATE()  ,@p_MAKER_ID ,GETDATE() ,NULL ,NULL,'U' ,NULL ,NULL ,NULL ,NULL,NULL,@CURRENCY,@RATE)
1947
			IF @@error<>0 GOTO ABORT;
1948
			FETCH NEXT FROM XmlDataPay INTO @PAY_ADV_ID, @AMT_ADVANCED ,@AMT_DO,@AMT_REMAIN,@AMT_PAY ,@AMT_USE ,@AMT_REVERT,@AMT_ADD,@CURRENCY,@RATE
1949
			END
1950
			CLOSE XmlDataPay;
1951
			DEALLOCATE XmlDataPay;
1952
		--END CURSOR 2--------------------------
1953
			-------------------------
1954
			--INSERT FROM CatCursor
1955
			DELETE FROM TR_REQ_PAY_CAT WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1956
			FETCH NEXT FROM XmlDataCat INTO @REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@CURRENCY,@RATE
1957
			WHILE @@fetch_status=0 
1958
			BEGIN
1959
				SET @INDEX = @INDEX +1
1960
				DECLARE @p_REQ_PAY_CAT_ID VARCHAR(15);
1961
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_CAT', @p_REQ_PAY_CAT_ID OUT;
1962
				IF @p_REQ_PAY_CAT_ID='' OR @p_REQ_PAY_CAT_ID IS NULL GOTO ABORT;
1963
				INSERT INTO TR_REQ_PAY_CAT
1964
				VALUES (@p_REQ_PAY_CAT_ID,@p_REQ_PAY_ID,@REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@p_MAKER_ID,GETDATE(),@CURRENCY,@RATE)
1965
			IF @@error<>0 GOTO ABORT;
1966
			FETCH NEXT FROM XmlDataCat INTO @REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@CURRENCY,@RATE
1967
			END
1968
			CLOSE XmlDataCat;
1969
			DEALLOCATE XmlDataCat;
1970
			DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1971
			DECLARE XmlDataPeriod CURSOR FOR
1972
				SELECT *
1973
				FROM
1974
				OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)
1975
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
1976
				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))
1977
				OPEN XmlDataPeriod;
1978
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
1979
				@OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),@AMT_PAY_PERIOD DECIMAL(18,2),@FROM_DATE VARCHAR(20),@TO_DATE VARCHAR(20),@AD_PAY_ID VARCHAR(15), @_PROCESS VARCHAR(15),@PARENT_ID VARCHAR(15),@PAY_PHASE NVARCHAR(250),@REASON_TTDK NVARCHAR(2000)
1980
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
1981
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY,@RATE,@FROM_DATE,@TO_DATE,@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK
1982
				WHILE @@fetch_status=0 
1983
				BEGIN
1984
					--IF(CONVERT(DATE, @TO_DATE,103) <CONVERT(DATE,@FROM_DATE,103))
1985
					--BEGIN
1986
					--	ROLLBACK TRANSACTION
1987
					--	SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Từ ngày không được lớn hơn đến ngày' ErrorDesc
1988
					--	RETURN '-1'
1989
					--END
1990
					-- KHI NAO BAM GUI PHE DUYET HE THONG MOI CHECK VALIDATE
1991
					IF(@p_TYPE_FUNCTION ='SEND') 
1992
					BEGIN
1993
						IF(@NEW_INDEX <=@OLD_INDEX AND (@NEW_INDEX >0 AND @OLD_INDEX >0) )
1994
						BEGIN
1995
							ROLLBACK TRANSACTION
1996
							SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Chỉ số mới phải lớn hơn chỉ số cũ' ErrorDesc
1997
							RETURN '-1'
1998
						END
1999
					END
2000
					DECLARE @PERIOD_ID VARCHAR(15);
2001
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
2002
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
2003
					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,TO_DATE,AD_PAY_ID,PROCESS,PARENT_ID,PAY_PHASE,REASON)
2004
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),
2005
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,'U',@CURRENCY,@RATE,CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK)
2006
			IF @@error<>0 GOTO ABORT;
2007
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
2008
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY,@RATE,@FROM_DATE,@TO_DATE,@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK
2009
			END
2010
			CLOSE XmlDataPeriod;
2011
			DEALLOCATE XmlDataPeriod;
2012
			-- VALIDATE SO TIEN
2013
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
2014
			--BEGIN
2015
			--	ROLLBACK TRANSACTION
2016
			--	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
2017
			--	RETURN '-1'
2018
			--END
2019
		END
2020
		IF(@p_REQ_TYPE = 'D' OR @p_REQ_TYPE ='I')
2021
		BEGIN
2022
			----------------------------
2023
			DELETE FROM TR_REQ_PAY_SERVICE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
2024
			--INSERT FROM ServiceCursor
2025
			SET @INDEX = 0
2026
			FETCH NEXT FROM XmlDataService INTO @REQ_PAY_SERVICE_NAME,@RECEIVE_ID_SERVICE,@RECEIVE_NAME_SERVICE,@REQ_PAY_REASON_SERVICE,@TOTAL_AMT_SERVICE,
2027
			@REQ_PAY_TYPE_SERVICE,@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@DEPT_ID_SRV,@CURRENCY,@RATE
2028
			WHILE @@fetch_status=0 
2029
			BEGIN
2030
				SET @INDEX = @INDEX +1
2031
				DECLARE @p_REQ_PAY_SERVICE_ID VARCHAR(15);
2032
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SERVICE', @p_REQ_PAY_SERVICE_ID OUT;
2033
				IF @p_REQ_PAY_SERVICE_ID='' OR @p_REQ_PAY_SERVICE_ID IS NULL GOTO ABORT;
2034
				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)
2035
				VALUES (@p_REQ_PAY_SERVICE_ID,@p_REQ_PAY_ID,@REQ_PAY_SERVICE_NAME,@RECEIVE_ID_SERVICE,@REQ_PAY_REASON_SERVICE,@TOTAL_AMT_SERVICE,
2036
				@REQ_PAY_TYPE_SERVICE,@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@p_MAKER_ID,GETDATE(),@DEPT_ID_SRV,@CURRENCY,@RATE)
2037
			IF @@error<>0 GOTO ABORT;
2038
				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,
2039
				@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@DEPT_ID_SRV,@CURRENCY,@RATE
2040
			END
2041
			CLOSE XmlDataService;
2042
			DEALLOCATE XmlDataService;
2043
		END
2044
		IF((@p_REQ_TYPE = 'P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE ='I')
2045
		BEGIN
2046
			----------------------------
2047
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID= @p_REQ_PAY_ID
2048
				DECLARE @INDEX_PO INT, @REF_ID VARCHAR(15),@IS_CLOSED VARCHAR(1)
2049
				DECLARE XmlDataPO CURSOR FOR
2050
				SELECT *
2051
				FROM
2052
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
2053
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
2054
				OPEN XmlDataPO;
2055
				SET @INDEX_PO = 0
2056
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
2057
				WHILE @@fetch_status=0 
2058
				BEGIN
2059
					SET @INDEX_PO = @INDEX_PO +1
2060
					-- KHI NAO BAM GUI PHE DUYET HE THONG MOI CHECK VALIDATE
2061
					IF(@p_TYPE_FUNCTION ='SEND') 
2062
					BEGIN
2063
						-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2064
						IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
2065
						IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
2066
						BEGIN
2067
							ROLLBACK TRANSACTION
2068
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
2069
							(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
2070
							RETURN '-1'
2071
						END
2072
						-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2073
						IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND 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))
2074
						BEGIN
2075
							ROLLBACK TRANSACTION
2076
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
2077
							(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
2078
							RETURN '-1'
2079
						END
2080
						-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2081
						IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
2082
						IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
2083
						BEGIN
2084
							ROLLBACK TRANSACTION
2085
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N':PO số '+
2086
							(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
2087
							RETURN '-1'
2088
						END
2089
						-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2090
						IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' 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))
2091
						BEGIN
2092
							ROLLBACK TRANSACTION
2093
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
2094
							(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
2095
							RETURN '-1'
2096
						END
2097
					END
2098
					DECLARE @REQ_PAYDTID VARCHAR(15);
2099
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
2100
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
2101
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
2102
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
2103
				IF @@error<>0 GOTO ABORT;
2104
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
2105
				END
2106
				CLOSE XmlDataPO;
2107
				DEALLOCATE XmlDataPO;
2108
			--INSERT FROM ScheduleCursor
2109
			DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
2110
			SET @INDEX_PO = 0
2111
			FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,
2112
			@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_DO,@AMT_PAY_REAL
2113
			WHILE @@fetch_status=0 
2114
			BEGIN
2115
				--IF(@AMT_REMAIN_SCHEDULE =0)
2116
				--BEGIN
2117
				--	SET @PROCESS ='3'
2118
				--END
2119
				--IF(@PROCESS <>'2')
2120
				--BEGIN
2121
				--	SET @TOTAL_SCHEDULE_AMT = @TOTAL_SCHEDULE_AMT +@AMT_REMAIN_SCHEDULE
2122
				--END
2123
				SET @TOTAL_SCHEDULE_AMT = @TOTAL_SCHEDULE_AMT +(@AMT_PAY_SCHEDULE -@AMT_ADVANCE_SCHEDULE -@AMT_PAY_DO)
2124
				----
2125
				SET @INDEX_PO = @INDEX_PO +1
2126
				DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
2127
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
2128
				IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
2129
				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,
2130
				CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE, AMT_PAY_REAL)
2131
				VALUES (@p_REQ_PAY_SCHEDULE_ID,@p_REQ_PAY_ID,@PAY_ID,@AMT_PAY_SCHEDULE,@TERM_PAY,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,
2132
				--IIF(@PROCESS<>'2',(@AMT_PAY_SCHEDULE-@AMT_ADVANCE_SCHEDULE),0),
2133
				@AMT_PAY_DO,
2134
				@AMT_REMAIN_SCHEDULE,GETDATE(),CONVERT(DATETIME,@REQ_AD_DT,103),@PROCESS,@p_MAKER_ID,GETDATE(),'U','','PAY',@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL)
2135
				IF @@error<>0 GOTO ABORT;
2136
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,
2137
				@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_DO,@AMT_PAY_REAL
2138
			END
2139
			CLOSE XmlDataSchedule;
2140
			DEALLOCATE XmlDataSchedule;
2141
			---- VALIDATE SO TIEN
2142
			--IF(@p_REQ_AMT > ISNULL(@TOTAL_SCHEDULE_AMT,0))
2143
			--BEGIN
2144
			--	ROLLBACK TRANSACTION
2145
			--	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
2146
			--	RETURN '-1'
2147
			--END
2148
	     ------
2149
		END
2150
		-- NEU LA THANH TOAN CAC HOP DONG DINH KY
2151
		ELSE IF((@p_REQ_TYPE = 'P' AND @p_IS_PERIOD = 'Y') OR @p_REQ_TYPE='I')
2152
		BEGIN
2153
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID=@p_REQ_PAY_ID
2154
				DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID = @p_REQ_PAY_ID
2155
				DECLARE XmlDataPO CURSOR FOR
2156
				SELECT *
2157
				FROM
2158
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
2159
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
2160
				OPEN XmlDataPO;
2161
				SET @INDEX_PO = 0
2162
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
2163
				WHILE @@fetch_status=0 
2164
				BEGIN
2165
					SET @INDEX_PO = @INDEX_PO +1
2166
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
2167
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
2168
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
2169
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
2170
					(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
2171
				IF @@error<>0 GOTO ABORT;
2172
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
2173
				END
2174
				CLOSE XmlDataPO;
2175
				DEALLOCATE XmlDataPO;
2176
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
2177
			----------------------------
2178
			--INSERT FROM PERIOD	
2179
				DECLARE XmlDataPeriod CURSOR FOR
2180
				SELECT *
2181
				FROM
2182
				OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)
2183
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
2184
				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), 
2185
				PROCESS VARCHAR(5),PARENT_ID VARCHAR(15),PAY_PHASE NVARCHAR(250),REASON NVARCHAR(2000))
2186
				OPEN XmlDataPeriod;
2187
				--DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
2188
				--@OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),@AMT_PAY_PERIOD DECIMAL(18,2),@FROM_DATE VARCHAR(20),@TO_DATE VARCHAR(20),@AD_PAY_ID VARCHAR(15), @_PROCESS VARCHAR(15),@PARENT_ID VARCHAR(15),@PAY_PHASE NVARCHAR(250)
2189
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
2190
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY,@RATE,@FROM_DATE,@TO_DATE,@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK
2191
				WHILE @@fetch_status=0 
2192
				BEGIN
2193
					--IF(CONVERT(DATE, @TO_DATE,103) <CONVERT(DATE,@FROM_DATE,103))
2194
					--BEGIN
2195
					--	ROLLBACK TRANSACTION
2196
					--	SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Từ ngày không được lớn hơn đến ngày' ErrorDesc
2197
					--	RETURN '-1'
2198
					--END
2199
					-- KHI NAO BAM GUI PHE DUYET HE THONG MOI CHECK VALIDATE
2200
					IF(@p_TYPE_FUNCTION ='SEND') 
2201
					BEGIN
2202
						IF(@NEW_INDEX <=@OLD_INDEX AND (@NEW_INDEX >0 AND @OLD_INDEX >0) )
2203
						BEGIN
2204
							ROLLBACK TRANSACTION
2205
							SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Chỉ số mới phải lớn hơn chỉ số cũ' ErrorDesc
2206
							RETURN '-1'
2207
						END
2208
					END
2209
					--DECLARE @PERIOD_ID VARCHAR(15);
2210
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
2211
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
2212
					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,TO_DATE,AD_PAY_ID,PROCESS,PARENT_ID,PAY_PHASE,REASON)
2213
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),
2214
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,'U',@CURRENCY,@RATE,CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK)
2215
			IF @@error<>0 GOTO ABORT;
2216
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
2217
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY,@RATE,@FROM_DATE,@TO_DATE,@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK
2218
			END
2219
			CLOSE XmlDataPeriod;
2220
			DEALLOCATE XmlDataPeriod;
2221
			---- VALIDATE SO TIEN
2222
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
2223
			--BEGIN
2224
			--	ROLLBACK TRANSACTION
2225
			--	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
2226
			--	RETURN '-1'
2227
			--END
2228
			--
2229
			END	
2230
COMMIT TRANSACTION
2231
			IF(@p_TYPE_FUNCTION ='SEND') -- KIEM TRA NEU 2 BIEN XML KHAC NULL TUC LA DANG TRONG QUA TRINH LUU NHAP
2232
			BEGIN
2233
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
2234
				UPDATE TR_REQ_PAYMENT SET AUTH_STATUS ='U', PROCESS = NULL WHERE REQ_PAY_ID =@p_REQ_PAY_ID
2235
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
2236
				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 tạm ứng và gửi phê duyệt')
2237
				SELECT '4' as Result, '' REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
2238
				RETURN '4'
2239
			END
2240
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
2241
RETURN '0'
2242
ABORT:
2243
BEGIN
2244
		CLOSE XmlData;
2245
		DEALLOCATE XmlData;
2246
		CLOSE XmlDataPay;
2247
		DEALLOCATE XmlDataPay;
2248
		Close XmlDataMethod;
2249
		Close XmlDataCat;
2250
		CLOSE XmlDataService;
2251
		CLOSE XmlDataSchedule;
2252
		Deallocate XmlDataMethod;
2253
		Deallocate XmlDataCat;
2254
		DEALLOCATE XmlDataService;
2255
		DEALLOCATE XmlDataSchedule;
2256
		ROLLBACK TRANSACTION
2257
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
2258
		RETURN '-1'
2259
End
2260

    
2261
9
2262

    
2263
ALTER PROCEDURE [dbo].[TR_REQ_PAYMENT_Ins]
2264
@p_REQ_PAY_ID	varchar(15)= NULL,
2265
@p_REQ_PAY_CODE	varchar(50)	= NULL,
2266
@p_REQ_DT VARCHAR(20)= NULL,
2267
@p_BRANCH_ID	varchar(15)	= NULL,
2268
@p_DEP_ID	varchar(15)	= NULL,
2269
@p_REQ_REASON	nvarchar(MAX)	= NULL,
2270
@p_REQ_TYPE	varchar(15)	= NULL,
2271
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
2272
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
2273
@p_REF_ID	varchar(15)	= NULL,
2274
@p_RECEIVER_PO	nvarchar(250)	= NULL,
2275
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
2276
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
2277
@p_REQ_AMT	decimal(18, 0)	= NULL,
2278
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
2279
@p_MAKER_ID	varchar(15)	= NULL,
2280
@p_CREATE_DT	varchar(25)	= NULL,
2281
@p_EDITOR_ID	varchar(15)	= NULL,
2282
@p_AUTH_STATUS	varchar(1)	= NULL,
2283
@p_CHECKER_ID	varchar(15)	= NULL,
2284
@p_APPROVE_DT	varchar(25)	= NULL,
2285
@p_CREATE_DT_KT	varchar(25)	= NULL,
2286
@p_MAKER_ID_KT	varchar(15)	= NULL,
2287
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
2288
@p_CHECKER_ID_KT	varchar(1)	= NULL,
2289
@p_APPROVE_DT_KT  varchar(25)= null,
2290
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
2291
@p_BRANCH_CREATE	varchar(15)	= NULL,
2292
@p_NOTES	varchar(15)	= NULL,
2293
@p_RECORD_STATUS	varchar(1)	= NULL,
2294
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
2295
@p_TRANSFER_DT	varchar(25)	= NULL,
2296
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
2297
@p_PROCESS	varchar(15)	= NULL,
2298
@p_PAY_PHASE VARCHAR(15) = NULL,
2299
@p_RATE	DECIMAL(18,2) = 0,
2300
@p_IS_PERIOD VARCHAR(5) = NULL,
2301
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
2302
@p_XMP_TEMP XML = NULL,
2303
@p_XMP_TEMP_2 XML = NULL
2304

    
2305
AS
2306
	BEGIN TRANSACTION
2307
		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,
2308
		@INVOICE_NO nvarchar(50) = NULL,@INVOICE_DT VARCHAR(20) = NULL,@SELLER nvarchar(50) = NULL,@TAX_NO nvarchar(15) = NULL,@GOODS_NAME nvarchar(500) = NULL,
2309
		@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),
2310
		@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_TRANS VARCHAR(15),
2311
		@TYPE_VAT VARCHAR(15),@TYPE_FUNC VARCHAR(15),@REASON NVARCHAR(1000),@REF_TYPE VARCHAR(15)
2312
		DECLARE @PAY_ADV_ID VARCHAR(15), @REQ_PAY_ADV_CODE VARCHAR(15)
2313
		DECLARE @AMT_ADVANCED decimal(18,2),@AMT_DO decimal(18,2),
2314
		@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)
2315
		DECLARE @TOTAL_SCHEDULE_AMT decimal(18,2) =0
2316
		DECLARE @INDEX_PO INT =0, @INDEX_AD INT =0, @INDEX_IV INT=0,@INDEX_NS INT =0
2317
		DECLARE @hdoc INT, @hDoc2 INT
2318
		EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
2319
		EXEC sp_xml_preparedocument @hDoc2 OUTPUT, @p_XMP_TEMP_2;
2320
		DECLARE XmlData CURSOR LOCAL FOR
2321
		SELECT *
2322
		FROM
2323
		OPENXML(@hdoc, '/Root/XmlData', 2)
2324
		WITH(TRANS_NO nvarchar(50),TRANS_DT VARCHAR(20),INVOICE_SIGN nvarchar(50),INVOICE_NO_SIGN nvarchar(50),
2325
		 INVOICE_NO nvarchar(50),INVOICE_DT VARCHAR(20) ,SELLER nvarchar(50),TAX_NO nvarchar(15),GOODS_NAME nvarchar(500) ,
2326
		PRICE decimal(18,2),TAX decimal(18, 2),VAT decimal(18,2),NOTE NVARCHAR(MAX),VAT_RATE decimal(18,2),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),TYPE_VAT VARCHAR(15), TYPE_FUNC VARCHAR(15))
2327
		OPEN XmlData;
2328
		--CURSOR 2
2329
		DECLARE XmlDataPay CURSOR LOCAL FOR
2330
		SELECT *
2331
		FROM
2332
		OPENXML(@hDoc2, '/Root/XmlDataPay', 2)
2333
		WITH(PAY_ADV_ID nvarchar(50),AMT_ADVANCED decimal(18, 0),AMT_DO decimal(18,2),
2334
		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),CURRENCY VARCHAR(15), RATE DECIMAL(18,2))
2335
		OPEN XmlDataPay;
2336
	------------------------
2337
		--Luanlt---
2338
		--MethodCursor
2339
		DECLARE @RECEIVE_ID varchar(15),@RECEIVE_NAME nvarchar(100),@REQ_PAY_REASON nvarchar(MAX),@TOTAL_AMT_METHOD decimal(18,2),
2340
		@REQ_PAY_TYPE varchar(1),@REQ_PAY_DESC nvarchar(MAX),@REQ_PAY_ENTRIES nvarchar(MAX),@CHECK_IN VARCHAR(15)
2341
		DECLARE XmlDataMethod CURSOR LOCAL FOR
2342
		SELECT *
2343
		FROM
2344
		OPENXML(@hdoc, 'Root/XmlDataMethod',2)
2345
		WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2),
2346
		REQ_PAY_TYPE varchar(1),REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(25), 
2347
		ACC_NAME NVARCHAR(250),ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),CHECK_IN VARCHAR(15),TYPE_TRANS VARCHAR(15))
2348
		OPEN XmlDataMethod
2349
		----------
2350
		--CatCursor
2351
		DECLARE @REQ_ADV_ID varchar(15),@CAT_NAME nvarchar(100),@TOTAL_AMT_CAT decimal(18,2), @DEPT_ID VARCHAR(15)
2352
		DECLARE XmlDataCat CURSOR LOCAL FOR
2353
		SELECT *
2354
		FROM
2355
		OPENXML(@hdoc, 'Root/XmlDataCat',2) 
2356
		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))
2357
		OPEN XmlDataCat
2358
	---------------
2359
	--ServiceCursor
2360
		DECLARE @REQ_PAY_SERVICE_NAME nvarchar(100),@RECEIVE_ID_SERVICE varchar(15),@RECEIVE_NAME_SERVICE nvarchar(100),@REQ_PAY_REASON_SERVICE nvarchar(MAX),
2361
		@TOTAL_AMT_SERVICE decimal(18,2),
2362
		@REQ_PAY_TYPE_SERVICE varchar(1),@REQ_PAY_DESC_SERVICE nvarchar(MAX),@REQ_PAY_ENTRIES_SERVICE nvarchar(MAX),@DEPT_ID_SRV VARCHAR(15)
2363
		DECLARE XmlDataService CURSOR LOCAL FOR
2364
		SELECT *
2365
		FROM
2366
		OPENXML(@hdoc, 'Root/XmlDataService',2)
2367
		WITH(REQ_PAY_SERVICE_NAME nvarchar(100),RECEIVE_ID_SERVICE varchar(15),RECEIVE_NAME_SERVICE nvarchar(100),REQ_PAY_REASON_SERVICE nvarchar(MAX),
2368
		TOTAL_AMT_SERVICE decimal(18,2),REQ_PAY_TYPE_SERVICE varchar(1),REQ_PAY_DESC_SERVICE nvarchar(MAX),REQ_PAY_ENTRIES_SERVICE nvarchar(MAX), 
2369
		DEPT_ID VARCHAR(15),CURRENCY VARCHAR(15), RATE DECIMAL(18,2))
2370
		OPEN XmlDataService
2371
			---------------
2372
	--ScheduleCursor
2373
		DECLARE @PO_ID varchar(15),@TERM_PAY varchar(15),@AMT_PAY_SCHEDULE decimal(18,2),@REQ_ADV_ID_SCHE VARCHAR(15),@AMT_ADVANCE_SCHEDULE decimal(18,2),
2374
		@AMT_REMAIN_SCHEDULE decimal(18,2),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),@AMT_PAY_REAL DECIMAL(18,2), @AMT_PAY_DO DECIMAL(18,2)
2375
		DECLARE XmlDataSchedule CURSOR LOCAL FOR
2376
		SELECT *
2377
		FROM
2378
		OPENXML(@hdoc, 'Root/XmlDataSchedule',2)
2379
		WITH(PO_ID varchar(15),TERM_PAY varchar(15),AMT_PAY_SCHEDULE decimal(18,2),REQ_ADV_ID varchar(15),AMT_ADVANCE_SCHEDULE decimal(18,2),
2380
		AMT_REMAIN_SCHEDULE decimal(18,2),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),REQ_PAY_DESC NVARCHAR(250),
2381
		REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),AMT_PAY_DO DECIMAL(18,2),AMT_PAY_REAL DECIMAL(18,2))
2382
		OPEN XmlDataSchedule
2383
	--END luanlt---
2384
	-- DS HANG MUC NGAN SACH
2385
		DECLARE @TRADE_ID varchar(15),@GD_ID varchar(15),@AMT_APP decimal(18,2),@AMT_EXE decimal(18,2),@AMT_REMAIN_GD decimal(18,2)
2386
		DECLARE XmlDataGood CURSOR LOCAL FOR
2387
		SELECT *
2388
		FROM
2389
		OPENXML(@hdoc, 'Root/XmlDataGood',2) 
2390
		WITH(TRADE_ID varchar(15),GD_ID 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),REASON NVARCHAR(1000))
2391
		OPEN XmlDataGood
2392
	---- END CURSOR
2393
	--CatCursor
2394
		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)
2395
		DECLARE XmlAttach CURSOR LOCAL FOR
2396
		SELECT *
2397
		FROM
2398
		OPENXML(@hdoc, 'Root/XmlAttach',2) 
2399
		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))
2400
		OPEN XmlAttach
2401
	--THIEUVQ 281119---
2402
		EXEC [dbo].[PAY_CODE_GenKey] 'TR_REQ_PAYMENT', '','', @p_REQ_PAY_CODE out
2403
	--END--
2404
		DECLARE @INDEX INT  =0
2405
		IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''
2406
		BEGIN
2407
			ROLLBACK TRANSACTION
2408
			SELECT '-1' Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Mã số phiếu không được để trống' ErrorDesc
2409
			RETURN '-1'
2410
		END
2411
		IF EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_CODE  = @p_REQ_PAY_CODE )
2412
		BEGIN
2413
			ROLLBACK TRANSACTION
2414
			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
2415
			RETURN '-1'
2416
		END
2417
		EXEC SYS_CodeMasters_Gen 'TR_REQ_PAYMENT', @p_REQ_PAY_ID out
2418
		IF @p_REQ_PAY_ID='' OR @p_REQ_PAY_ID IS NULL GOTO ABORT
2419
		INSERT INTO [dbo].[TR_REQ_PAYMENT]
2420
           ([REQ_PAY_ID]
2421
           ,[REQ_PAY_CODE],[REQ_DT]
2422
           ,[BRANCH_ID]
2423
           ,[DEP_ID]
2424
           ,[REQ_REASON]
2425
           ,[REQ_TYPE],REQ_ENTRIES,
2426
            [REQ_DESCRIPTION]
2427
           ,REF_ID,
2428
			RECEIVER_PO
2429
           ,[REQ_PAY_TYPE]
2430
           ,[REQ_TYPE_CURRENCY]
2431
           ,[REQ_AMT]
2432
           ,[REQ_TEMP_AMT]
2433
           ,[MAKER_ID]
2434
           ,[CREATE_DT]
2435
           ,[EDITOR_ID]
2436
           ,[AUTH_STATUS]
2437
           ,[CHECKER_ID]
2438
           ,[APPROVE_DT]
2439
           ,[CREATE_DT_KT]
2440
           ,[MAKER_ID_KT]
2441
           ,[AUTH_STATUS_KT]
2442
           ,[CHECKER_ID_KT]
2443
		   ,[APPROVE_DT_KT]
2444
           ,[CONFIRM_NOTE]
2445
           ,[BRANCH_CREATE]
2446
           ,[NOTES],RECORD_STATUS,TRANSFER_MAKER,TRANSFER_DT,TRASFER_USER_RECIVE,PROCESS, PAY_PHASE,IS_PERIOD)
2447
			VALUES
2448
           (@p_REQ_PAY_ID,
2449
			@p_REQ_PAY_CODE,CONVERT(DATE,@p_REQ_DT,103),
2450
			@p_BRANCH_ID,
2451
			@p_DEP_ID,
2452
			@p_REQ_REASON,
2453
			@p_REQ_TYPE,
2454
			@P_REQ_ENTRIES,
2455
			@p_REQ_DESCRIPTION,
2456
			@p_REF_ID,
2457
			@p_RECEIVER_PO,
2458
			@p_REQ_PAY_TYPE,
2459
			@p_REQ_TYPE_CURRENCY,
2460
			@p_REQ_AMT,
2461
			@p_REQ_TEMP_AMT,
2462
			@p_MAKER_ID,
2463
			GETDATE(),
2464
			@p_EDITOR_ID,
2465
			'E',
2466
			NULL,
2467
			NULL,
2468
			NULL,
2469
			NULL,
2470
			NULL,
2471
			NULL,
2472
			NULL,
2473
			NULL,
2474
			@p_BRANCH_CREATE,
2475
			@p_NOTES,@p_RECORD_STATUS,
2476
			@p_TRANSFER_MAKER,
2477
			NULL,
2478
			@p_TRASFER_USER_RECIVE,
2479
			NULL,@p_PAY_PHASE,ISNULL(@p_IS_PERIOD,'N'))
2480
		IF @@Error <> 0 GOTO ABORT
2481
		--- INSERT LICH THANH TOAN
2482
			--INSERT FROM MethodCursor
2483
			SET @INDEX = 0
2484
			FETCH NEXT FROM XmlDataMethod INTO  @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,
2485
			@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@ACC_NO, @ACC_NAME,@ISSUED_BY, @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN,@TYPE_TRANS
2486
			WHILE @@fetch_status=0 
2487
			BEGIN
2488
				IF(@REQ_PAY_TYPE<>'1')
2489
				BEGIN
2490
					SET @ISSUED_DT = NULL
2491
				END
2492
				SET @INDEX = @INDEX +1
2493
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
2494
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
2495
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
2496
				INSERT INTO TR_REQ_PAY_METHOD
2497
				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),@CURRENCY,@RATE,@CHECK_IN,@TYPE_TRANS)
2498
			IF @@error<>0 GOTO ABORT;
2499
			FETCH NEXT FROM XmlDataMethod INTO @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,@REQ_PAY_DESC,
2500
			@REQ_PAY_ENTRIES,@ACC_NO, @ACC_NAME,@ISSUED_BY, @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN,@TYPE_TRANS
2501
			END
2502
			CLOSE XmlDataMethod;
2503
			DEALLOCATE XmlDataMethod;
2504
			-------------------------
2505
		-- INSERT CHUNG TU DINH KEM
2506
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
2507
				WHILE @@fetch_status=0 
2508
				BEGIN
2509
					IF (@REF_DT='')
2510
					BEGIN
2511
						SET @REF_DT = NULL
2512
					END
2513
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
2514
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
2515
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT) VALUES
2516
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT, CONVERT(DATE, @REF_DT,103))
2517
				IF @@error<>0 GOTO ABORT;
2518
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
2519
				END
2520
				CLOSE XmlAttach;
2521
				DEALLOCATE XmlAttach;
2522
		----END
2523
		--Insert XmlData
2524
		FETCH NEXT FROM XmlData INTO @TRANS_NO , @TRANS_DT  ,@INVOICE_SIGN ,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,
2525
		@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@TYPE_VAT,@TYPE_FUNC
2526
		WHILE @@fetch_status=0 BEGIN
2527
			-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
2528
			IF(@p_TYPE_FUNCTION ='SEND')
2529
			BEGIN
2530
			SET @INDEX_IV = @INDEX_IV+1
2531
			IF(LEN(@INVOICE_NO) >7)
2532
				BEGIN
2533
					ROLLBACK TRANSACTION
2534
					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' không được vượt quá 7 kí tự' ErrorDesc
2535
					RETURN '-1'
2536
				END	
2537
				 IF(LEN(@INVOICE_NO) <7)
2538
				BEGIN
2539
					ROLLBACK TRANSACTION
2540
					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' phải đủ 7 kí tự' ErrorDesc
2541
					RETURN '-1'
2542
				END	
2543
				IF(EXISTS(SELECT * FROM TR_REQ_PAY_INVOICE WHERE INVOICE_NO =@INVOICE_NO AND INVOICE_NO_SIGN = @INVOICE_NO_SIGN AND INVOICE_SIGN =@INVOICE_SIGN AND TAX_NO =@TAX_NO AND TAX =@TAX))
2544
				BEGIN
2545
					ROLLBACK TRANSACTION
2546
					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
2547
					RETURN '-1'
2548
				END	
2549
			END
2550
			SET @INDEX = @INDEX +1
2551
			DECLARE @p_REQ_INV_ID VARCHAR(15);
2552
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_INVOICE', @p_REQ_INV_ID OUT;
2553
			IF @p_REQ_INV_ID='' OR @p_REQ_INV_ID IS NULL GOTO ABORT;
2554
			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,
2555
		MAKER_ID,CREATE_DT,EDITOR_ID,AUTH_STATUS,CHECKER_ID,APPROVE_DT,
2556
		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) 
2557
		VALUES (@p_REQ_INV_ID,@p_REQ_PAY_ID , @TRANS_NO , NULL  ,@INVOICE_SIGN ,@INVOICE_NO ,CONVERT(DATE,@INVOICE_DT,103) ,@SELLER ,@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,
2558
		@p_MAKER_ID,GETDATE(),NULL,'U',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1',@INVOICE_NO_SIGN,@VAT_RATE,@CURRENCY,@RATE,@PRICE,@VAT,@PRICE+@VAT,@TYPE_VAT,@TYPE_FUNC)
2559
		IF @@error<>0 GOTO ABORT;
2560
		FETCH NEXT FROM XmlData
2561
		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
2562
		END;
2563
		CLOSE XmlData;
2564
		DEALLOCATE XmlData;
2565
		--- INSERT CAC HANG MUC NGAN SACH		
2566
		FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
2567
		WHILE @@fetch_status=0 BEGIN
2568
		--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
2569
			SET @INDEX_NS = @INDEX_NS +1
2570
			-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
2571
			IF(@p_TYPE_FUNCTION ='SEND')
2572
			BEGIN
2573
				IF((@AMT_EXE  > @AMT_REMAIN_GD))
2574
				BEGIN
2575
						ROLLBACK TRANSACTION
2576
						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
2577
						RETURN '-1'
2578
				END		
2579
			END
2580
			DECLARE @p_BUDGET_ID VARCHAR(15);
2581
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
2582
			IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
2583
			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) 
2584
			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(),@CURRENCY,@RATE,@REASON)
2585
		IF @@error<>0 GOTO ABORT;
2586
		FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
2587
		END;
2588
		CLOSE XmlDataGood;
2589
		DEALLOCATE XmlDataGood;
2590
		--- END INSERT NGAN SACH
2591
		---------------------------
2592
		--Luanlt--
2593
		------------------------
2594
		IF(@p_REQ_TYPE = 'I')	
2595
		BEGIN
2596
			FETCH NEXT FROM XmlDataPay INTO @PAY_ADV_ID, @AMT_ADVANCED ,@AMT_DO,@AMT_REMAIN,@AMT_PAY ,@AMT_USE ,@AMT_REVERT,@AMT_ADD,@CURRENCY,@RATE
2597
			WHILE @@fetch_status=0 
2598
			BEGIN
2599
				SET @REQ_PAY_ADV_CODE = (SELECT REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@PAY_ADV_ID)
2600
				SET @INDEX_AD = @INDEX_AD +1
2601
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
2602
				IF(@p_TYPE_FUNCTION ='SEND')
2603
				BEGIN
2604
				-- KIEM TRA XEM CO PHIEU NAO DANG DUOC THANH TOAN HOAN TAM UNG MA CHUA DUYET HAY CHUA
2605
				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))
2606
				BEGIN
2607
					ROLLBACK TRANSACTION
2608
					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
2609
					RETURN '-1'
2610
				END		
2611
				-- KIEM TRA NEU SO TIEN DE NGHI HOAN TAM ƯNG LON HON SO TIEN CON LAI CAN PHAI TAM UNG
2612
				IF(@AMT_REVERT>(@AMT_REMAIN -@AMT_USE) AND @AMT_REVERT >0)
2613
				BEGIN
2614
					ROLLBACK TRANSACTION
2615
					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
2616
					RETURN '-1'
2617
				END		
2618
				END
2619
				DECLARE @p_REQ_PAYDT_ID VARCHAR(15);
2620
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAYMENT_DT', @p_REQ_PAYDT_ID OUT;
2621
				IF @p_REQ_PAYDT_ID='' OR @p_REQ_PAYDT_ID IS NULL GOTO ABORT;
2622
				INSERT INTO TR_REQ_PAYMENT_DT
2623
				VALUES (@p_REQ_PAYDT_ID,@PAY_ADV_ID,@p_REQ_PAY_ID , ISNULL(@AMT_ADVANCED,0) ,ISNULL(@AMT_DO,0),ISNULL(@AMT_REMAIN,0),
2624
				ISNULL(@AMT_PAY,0) ,ISNULL(@AMT_USE,0) ,ISNULL(@AMT_REVERT,0), ISNULL(@AMT_ADD,0), GETDATE()  ,@p_MAKER_ID ,GETDATE() ,NULL ,NULL,'U' ,NULL ,NULL ,NULL ,NULL,NULL,@CURRENCY,@RATE)
2625
			IF @@error<>0 GOTO ABORT;
2626
			FETCH NEXT FROM XmlDataPay INTO @PAY_ADV_ID, @AMT_ADVANCED ,@AMT_DO,@AMT_REMAIN,@AMT_PAY ,@AMT_USE ,@AMT_REVERT,@AMT_ADD,@CURRENCY,@RATE
2627
			END
2628
			CLOSE XmlDataPay;
2629
			DEALLOCATE XmlDataPay;
2630
			--INSERT FROM CatCursor
2631
			SET @INDEX = 0
2632
			FETCH NEXT FROM XmlDataCat INTO @REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@CURRENCY,@RATE
2633
			WHILE @@fetch_status=0 
2634
			BEGIN
2635
				SET @INDEX = @INDEX +1
2636
				DECLARE @p_REQ_PAY_CAT_ID VARCHAR(15);
2637
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_CAT', @p_REQ_PAY_CAT_ID OUT;
2638
				IF @p_REQ_PAY_CAT_ID='' OR @p_REQ_PAY_CAT_ID IS NULL GOTO ABORT;
2639
				INSERT INTO TR_REQ_PAY_CAT
2640
				VALUES (@p_REQ_PAY_CAT_ID,@p_REQ_PAY_ID,@REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@p_MAKER_ID,GETDATE(),@CURRENCY,@RATE)
2641
			IF @@error<>0 GOTO ABORT;
2642
			FETCH NEXT FROM XmlDataCat INTO @REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@CURRENCY,@RATE
2643
			END
2644
			CLOSE XmlDataCat;
2645
			DEALLOCATE XmlDataCat;
2646
		END
2647
		IF(@p_REQ_TYPE = 'D' OR @p_REQ_TYPE='I')
2648
		BEGIN
2649
			----------------------------
2650
			--INSERT FROM ServiceCursor
2651
			SET @INDEX = 0
2652
			FETCH NEXT FROM XmlDataService INTO @REQ_PAY_SERVICE_NAME,@RECEIVE_ID_SERVICE,@RECEIVE_NAME_SERVICE,@REQ_PAY_REASON_SERVICE,@TOTAL_AMT_SERVICE,
2653
			@REQ_PAY_TYPE_SERVICE,@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@DEPT_ID_SRV,@CURRENCY,@RATE
2654
			WHILE @@fetch_status=0 
2655
			BEGIN
2656
				SET @INDEX = @INDEX +1
2657
				DECLARE @p_REQ_PAY_SERVICE_ID VARCHAR(15);
2658
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SERVICE', @p_REQ_PAY_SERVICE_ID OUT;
2659
				IF @p_REQ_PAY_SERVICE_ID='' OR @p_REQ_PAY_SERVICE_ID IS NULL GOTO ABORT;
2660
				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)
2661
				VALUES (@p_REQ_PAY_SERVICE_ID,@p_REQ_PAY_ID,@REQ_PAY_SERVICE_NAME,@RECEIVE_ID_SERVICE,@REQ_PAY_REASON_SERVICE,@TOTAL_AMT_SERVICE,
2662
				@REQ_PAY_TYPE_SERVICE,@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@p_MAKER_ID,GETDATE(),@DEPT_ID_SRV,@CURRENCY,@RATE)
2663
			IF @@error<>0 GOTO ABORT;
2664
			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,
2665
			@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@DEPT_ID_SRV,@CURRENCY,@RATE
2666
			END
2667
			CLOSE XmlDataService;
2668
			DEALLOCATE XmlDataService;
2669
		END
2670
		IF((@p_REQ_TYPE = 'P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE ='I')
2671
		BEGIN
2672
				DECLARE XmlDataPO CURSOR LOCAL FOR
2673
				SELECT *
2674
				FROM
2675
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
2676
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
2677
				OPEN XmlDataPO;
2678
				SET @INDEX_PO = 0
2679
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
2680
				WHILE @@fetch_status=0 
2681
				BEGIN
2682
					SET @INDEX_PO = @INDEX_PO +1
2683
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2684
					--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)))
2685
					--BEGIN
2686
					--	ROLLBACK TRANSACTION
2687
					--	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
2688
					--	RETURN '-1'
2689
					--END
2690
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2691
					--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)))
2692
					--BEGIN
2693
					--	ROLLBACK TRANSACTION
2694
					--	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
2695
					--	RETURN '-1'
2696
					--END
2697
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2698
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
2699
					IF(@p_TYPE_FUNCTION ='SEND')
2700
					BEGIN
2701
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
2702
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
2703
					BEGIN
2704
						ROLLBACK TRANSACTION
2705
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
2706
						(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
2707
						RETURN '-1'
2708
					END
2709
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2710
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND 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))
2711
					BEGIN
2712
						ROLLBACK TRANSACTION
2713
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
2714
						(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
2715
						RETURN '-1'
2716
					END
2717
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2718
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
2719
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
2720
					BEGIN
2721
						ROLLBACK TRANSACTION
2722
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
2723
						(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
2724
						RETURN '-1'
2725
					END
2726
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2727
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' 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))
2728
					BEGIN
2729
						ROLLBACK TRANSACTION
2730
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
2731
						(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
2732
						RETURN '-1'
2733
					END
2734
					END
2735
					DECLARE @REQ_PAYDTID VARCHAR(15);
2736
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
2737
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
2738
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
2739
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
2740
				IF @@error<>0 GOTO ABORT;
2741
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
2742
				END
2743
				CLOSE XmlDataPO;
2744
				DEALLOCATE XmlDataPO;
2745
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
2746
			----------------------------
2747
			--INSERT FROM ScheduleCursor
2748
			SET @INDEX_PO = 0
2749
			FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,
2750
			@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_DO,@AMT_PAY_REAL
2751
			WHILE @@fetch_status=0 
2752
			BEGIN
2753
				--IF(@AMT_REMAIN_SCHEDULE =0)
2754
				--BEGIN
2755
				--	SET @PROCESS ='3'
2756
				--END
2757
				--IF(@PROCESS <>'2')
2758
				--BEGIN
2759
				--	SET @TOTAL_SCHEDULE_AMT = @TOTAL_SCHEDULE_AMT +@AMT_REMAIN_SCHEDULE
2760
				--END
2761
				----
2762
				SET @TOTAL_SCHEDULE_AMT =@TOTAL_SCHEDULE_AMT+(@AMT_PAY_SCHEDULE -@AMT_ADVANCE_SCHEDULE-@AMT_PAY_DO)
2763
				SET @INDEX_PO = @INDEX_PO +1
2764
				DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
2765
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
2766
				IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
2767
				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,
2768
				CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE, AMT_PAY_REAL)
2769
				VALUES (@p_REQ_PAY_SCHEDULE_ID,@p_REQ_PAY_ID,@PAY_ID,@AMT_PAY_SCHEDULE,@TERM_PAY,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,
2770
				--IIF(@PROCESS<>'2',(@AMT_PAY_SCHEDULE-@AMT_ADVANCE_SCHEDULE),0),
2771
				@AMT_PAY_DO,
2772
				@AMT_REMAIN_SCHEDULE,GETDATE(),CONVERT(DATETIME,@REQ_AD_DT,103),@PROCESS,@p_MAKER_ID,GETDATE(),'U','','PAY',
2773
				@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL)
2774
			IF @@error<>0 GOTO ABORT;
2775
			FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,
2776
			@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_DO,@AMT_PAY_REAL
2777
			END
2778
			CLOSE XmlDataSchedule;
2779
			DEALLOCATE XmlDataSchedule;
2780
			-- VALIDATE DANH SACH HOAN UNG -- LUCTV BO SUNG 19-11-2019. CHUA BIET CO VALIDATE HAY KHONG NEN VALIDATE DUOI STORE
2781
			--IF(@INDEX_PO =0)
2782
			--BEGIN
2783
			--	ROLLBACK TRANSACTION
2784
			--	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
2785
			--	RETURN '-1'
2786
			--END
2787
			-- VALIDATE SO TIEN
2788
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
2789
			--BEGIN
2790
			--	ROLLBACK TRANSACTION
2791
			--	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
2792
			--	RETURN '-1'
2793
			--END
2794
			----
2795
		END
2796
		IF((@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y') OR @p_REQ_TYPE ='I')
2797
		BEGIN
2798
				
2799
				DECLARE XmlDataPO CURSOR LOCAL FOR
2800
				SELECT *
2801
				FROM
2802
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
2803
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
2804
				OPEN XmlDataPO;
2805
				SET @INDEX_PO = 0
2806
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
2807
				WHILE @@fetch_status=0 
2808
				BEGIN
2809
					SET @INDEX_PO = @INDEX_PO +1
2810
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
2811
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
2812
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
2813
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
2814
					(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
2815
				IF @@error<>0 GOTO ABORT;
2816
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
2817
				END
2818
				CLOSE XmlDataPO;
2819
				DEALLOCATE XmlDataPO;
2820
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
2821
			----------------------------
2822
			--INSERT FROM PERIOD	
2823
				DECLARE XmlDataPeriod CURSOR LOCAL FOR
2824
				SELECT *
2825
				FROM
2826
				OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)
2827
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
2828
				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))
2829
				OPEN XmlDataPeriod;
2830
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
2831
				@OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),@AMT_PAY_PERIOD DECIMAL(18,2),@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_TTDK NVARCHAR(2000)
2832
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
2833
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK
2834
				WHILE @@fetch_status=0 
2835
				BEGIN
2836
					--IF(CONVERT(DATE, @TO_DATE,103) <CONVERT(DATE,@FROM_DATE,103))
2837
					--BEGIN
2838
					--	ROLLBACK TRANSACTION
2839
					--	SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Từ ngày không được lớn hơn đến ngày' ErrorDesc
2840
					--	RETURN '-1'
2841
					--END
2842
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
2843
					IF(@p_TYPE_FUNCTION ='SEND')
2844
					BEGIN
2845
					IF(@NEW_INDEX <=@OLD_INDEX AND (@NEW_INDEX >0 AND @OLD_INDEX >0) )
2846
					BEGIN
2847
						ROLLBACK TRANSACTION
2848
						SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Chỉ số mới phải lớn hơn chỉ số cũ' ErrorDesc
2849
						RETURN '-1'
2850
					END
2851
					END
2852
					DECLARE @PERIOD_ID VARCHAR(15);
2853
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
2854
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
2855
					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, TO_DATE,AD_PAY_ID,PROCESS,PARENT_ID,PAY_PHASE,REASON)
2856
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),
2857
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,'U',@CURRENCY, @RATE,CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK)
2858
			IF @@error<>0 GOTO ABORT;
2859
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
2860
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK
2861
			END
2862
			CLOSE XmlDataPeriod;
2863
			DEALLOCATE XmlDataPeriod;
2864
			-- VALIDATE SO TIEN
2865
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
2866
			--BEGIN
2867
			--	ROLLBACK TRANSACTION
2868
			--	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
2869
			--	RETURN '-1'
2870
			--END
2871
			----
2872
		END
2873
COMMIT TRANSACTION
2874
IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
2875
		BEGIN
2876
				--ROLLBACK TRANSACTION
2877
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
2878
				UPDATE TR_REQ_PAYMENT SET AUTH_STATUS ='U' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
2879
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
2880
				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')
2881
				SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
2882
				RETURN '4'
2883
		END
2884
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, @p_REQ_PAY_CODE  AS REQ_PAY_CODE,'' ErrorDesc
2885
RETURN '0'
2886
ABORT:
2887
BEGIN
2888
		ROLLBACK TRANSACTION
2889
		CLOSE XmlData;
2890
		DEALLOCATE XmlData;
2891
		CLOSE XmlDataPay;
2892
		DEALLOCATE XmlDataPay;
2893
		Close XmlDataMethod;
2894
		Close XmlDataCat;
2895
		CLOSE XmlDataService;
2896
		CLOSE XmlDataSchedule;
2897
		Deallocate XmlDataMethod;
2898
		Deallocate XmlDataCat;
2899
		DEALLOCATE XmlDataService;
2900
		DEALLOCATE XmlDataSchedule;
2901
		SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, '' ErrorDesc
2902
		RETURN '-1'
2903
End
2904

    
2905
10
2906

    
2907
ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Appr]
2908
--Luanlt 2019/17/10 - Sửa params
2909
@p_REQ_PAY_ID	varchar(15)= NULL,
2910
@p_CHECKER_ID	varchar(15)	= NULL,
2911
@p_AUTH_STATUS varchar(15) = NULL,
2912
@p_COST_ID VARCHAR(15) = NULL
2913
AS
2914
BEGIN TRANSACTION
2915
		IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE MAKER_ID =@p_CHECKER_ID AND REQ_PAY_ID =@p_REQ_PAY_ID)
2916
		BEGIN
2917
			ROLLBACK TRANSACTION
2918
			SELECT '-1' as Result, ''  REQ_PAY_ID, N'Người phê duyệt phiếu phải khác với người tạo phiếu! Bạn không được phép duyệt đối tượng này' ErrorDesc
2919
			RETURN '-1'
2920
		END
2921
		-- KIEM TRA NEU DANG TRA VE THI PHAI CHO CAP NHAT LAI THONG TIN MOI DUOC PHEP DUYET
2922
		IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS ='R' AND REQ_PAY_ID =@p_REQ_PAY_ID)
2923
		BEGIN
2924
			ROLLBACK TRANSACTION
2925
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đang được trả về bộ phận yêu cầu. Vui lòng cập nhật lại thông tin trước khi duyệt' ErrorDesc
2926
			RETURN '-1'
2927
		END
2928
		-- KIEM TRA NEU DANG TRA VE THI PHAI CHO CAP NHAT LAI THONG TIN MOI DUOC PHEP DUYET
2929
		IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT ='R' AND REQ_PAY_ID =@p_REQ_PAY_ID)
2930
		BEGIN
2931
			ROLLBACK TRANSACTION
2932
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đang được trả về bộ phận yêu cầu. Vui lòng cập nhật lại thông tin trước khi duyệt' ErrorDesc
2933
			RETURN '-1'
2934
		END
2935
		-- KIEM TRA NEU DANG TRA VE THI PHAI CHO CAP NHAT LAI THONG TIN MOI DUOC PHEP DUYET
2936
		IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT ='A' AND REQ_PAY_ID =@p_REQ_PAY_ID)
2937
		BEGIN
2938
			ROLLBACK TRANSACTION
2939
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đã được KSV phê duyệt trước đó' ErrorDesc
2940
			RETURN '-1'
2941
		END
2942
		--CAP NHAT CODE TRONG QUA TRINH TEST UAT
2943
		IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REQ_TYPE='I'))
2944
		BEGIN
2945
			DECLARE @ROLE_ID VARCHAR(200), @BRANCH_TYPE VARCHAR(15), @TOTAL_ADVANCE DECIMAL(18,0), @TOTAL_PAYBACK DECIMAL(18,0), @BRANCH_ID VARCHAR(15),
2946
			@DEP_ID VARCHAR(15), @COSTCENTER_ID VARCHAR(15)= NULL, @BRANCH_RQ VARCHAR(15) = NULL,@DEP_ID_RQ VARCHAR(15), @BRANCH_LOGIN VARCHAR(15),@LIMIT_ONE_OF DECIMAL(18,2)
2947
			DECLARE @LIMIT_AMT DECIMAL(18,0), @REQ_AMT DECIMAL(18,2) =0, @TONG_PGD DECIMAL(18,0), @TONG_PGD_HOAN DECIMAL(18,0)
2948
			SET @REQ_AMT = (SELECT REQ_AMT *ISNULL(RATE,1) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
2949
			SET @ROLE_ID = (SELECT ROLENAME FROM TL_USER WHERE TLNANME=@p_CHECKER_ID)
2950
			SET @BRANCH_ID = (SELECT TLSUBBRID FROM TL_USER WHERE TLNANME =@p_CHECKER_ID)
2951
			SET @BRANCH_RQ =(SELECT BRANCH_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
2952
			SET @DEP_ID_RQ =(SELECT DEP_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
2953
			SET @BRANCH_TYPE = (SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)
2954
			DECLARE @tmp table(BRANCH_ID varchar(15))
2955
			INSERT into @tmp  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@BRANCH_ID)
2956

    
2957
			DECLARE @tmp_CN table(BRANCH_ID varchar(15))
2958
			INSERT into @tmp_CN  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@BRANCH_RQ)
2959
			--DECLARE @DEP_ID_LG VARCHAR(15) = NULL	
2960
			--SET @DEP_ID_LG =(SELECT SECUR_CODE FROM TL_USER WHERE TLNANME=@p_CHECKER_ID)
2961
			DECLARE @TMP_DVDM TABLE(DVDM_ID VARCHAR(15))
2962
			INSERT INTO @TMP_DVDM
2963
			SELECT A.DVDM_ID--, A.COST_CODE, A.COST_NAME, B.DEP_ID --, C.DEP_CODE, C.DEP_NAME
2964
			FROM PL_COSTCENTER A
2965
			LEFT JOIN PL_COSTCENTER_DT B ON A.COST_ID = B.COST_ID
2966
			WHERE B.DEP_ID = @DEP_ID_RQ
2967
			GROUP BY A.DVDM_ID
2968
			-- KHAI BAO BRANCH CUA USER DUYET
2969
			SET @BRANCH_LOGIN = (SELECT TLSUBBRID FROM TL_USER WHERE TLNANME =@p_CHECKER_ID)
2970
			IF(NOT EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE ROLE_USER=@ROLE_ID AND REQ_ID = @p_REQ_PAY_ID))
2971
			BEGIN
2972
					ROLLBACK TRANSACTION
2973
					SELECT '-1' as Result, ''  REQ_PAY_ID, N'Bạn không có quyền phê duyệt phiếu tạm ứng nội bộ. Vui lòng chọn giao dịch khác để duyệt' ErrorDesc
2974
					RETURN '-1'
2975
			END
2976
			IF(EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE ROLE_USER=@ROLE_ID AND REQ_ID = @p_REQ_PAY_ID AND BRANCH_ID= @BRANCH_ID AND STATUS ='P'))
2977
			BEGIN
2978
					ROLLBACK TRANSACTION
2979
					SELECT '-1' as Result, ''  REQ_PAY_ID, N'Bạn đã thực hiện xác nhận phiếu tạm ứng trước đó' ErrorDesc
2980
					RETURN '-1'
2981
			END
2982
			-- KIEM TRA AUTH_STATUS TRUYEN XUONG LA GI, A: DUYET, C: CONFIRM  
2983
			IF(@p_AUTH_STATUS='U') -- KIEM TRA HAN MUC CON LAI CUA USER VA THONG BAO CHO NGUOI DUYET
2984
			BEGIN
2985
			-- BAT DAU DUYET THEO NGAN SACH			
2986
			--- LAY HAN MUC CUA USER
2987
			SET @LIMIT_AMT =(SELECT LIMIT_VALUE FROM TL_SYSROLE_LIMIT WHERE ROLE_ID=@ROLE_ID AND  LIMIT_TYPE='ADV_PAY' AND BRANCH_ID =@BRANCH_LOGIN)
2988

    
2989
			print @LIMIT_AMT
2990
			--
2991
			SET @LIMIT_ONE_OF =(SELECT LIMIT_PERCENT FROM TL_SYSROLE_LIMIT WHERE ROLE_ID=@ROLE_ID AND  LIMIT_TYPE='ADV_PAY' AND BRANCH_ID =@BRANCH_LOGIN)
2992
			-- NEU LA HOI SO THI LAY TONG SO TIEN TAM UNG CUA CAC PHONG BAN CHUNG VOI KHOI CUA PHIEU DANG DUOC DUYET
2993
			SET @TONG_PGD =(SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE BRANCH_ID = @BRANCH_RQ
2994
					 AND REQ_TYPE ='I' AND AUTH_STATUS ='A') + @REQ_AMT
2995
			SET @TONG_PGD_HOAN =(
2996
						SELECT (SUM(B.AMT_USE) - SUM(B.AMT_ADD) + SUM (B.AMT_REVERT))
2997
						FROM TR_REQ_PAYMENT_DT B
2998
						INNER JOIN TR_REQ_PAYMENT A ON B.PAY_ID = A.REQ_PAY_ID
2999
						INNER JOIN TR_REQ_ADVANCE_PAYMENT C ON C.REQ_PAY_ID = B.PAY_ADV_ID
3000
						WHERE A.BRANCH_ID = @BRANCH_RQ
3001
						AND A.AUTH_STATUS_KT ='A' AND C.REQ_TYPE='I') 
3002
				IF(@BRANCH_TYPE='HS')
3003
				BEGIN
3004
					SET @TOTAL_ADVANCE =ISNULL((SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE
3005
					 DEP_ID IN
3006
					 (SELECT A.DEP_ID FROM PL_COSTCENTER_DT A
3007
						LEFT JOIN PL_COSTCENTER B ON A.COST_ID = B.COST_ID
3008
						WHERE B.DVDM_ID IN (SELECT DVDM_ID FROM @TMP_DVDM) AND A.BRANCH_ID =@BRANCH_RQ)
3009
					 AND REQ_TYPE ='I' AND AUTH_STATUS ='A'),0)
3010
					SET @TOTAL_PAYBACK =
3011
					ISNULL(
3012
					(
3013
						SELECT (SUM(B.AMT_USE) - SUM(B.AMT_ADD) + SUM (B.AMT_REVERT))
3014
						FROM TR_REQ_PAYMENT_DT B
3015
						INNER JOIN TR_REQ_PAYMENT A ON B.PAY_ID = A.REQ_PAY_ID
3016
						INNER JOIN TR_REQ_ADVANCE_PAYMENT C ON C.REQ_PAY_ID = B.PAY_ADV_ID
3017
						WHERE A.DEP_ID IN 
3018
						(SELECT A.DEP_ID FROM PL_COSTCENTER_DT A
3019
						LEFT JOIN PL_COSTCENTER B ON A.COST_ID = B.COST_ID
3020
						WHERE B.DVDM_ID IN (SELECT DVDM_ID FROM @TMP_DVDM) AND A.BRANCH_ID =@BRANCH_ID)
3021
						AND A.AUTH_STATUS ='A' AND C.REQ_TYPE='I'
3022
					),0)
3023
				END
3024
			
3025
				-- NEU PHIEU DUOC TAO KHAC VOI HOI SO THI TIEN HANH TINH TONG SO TIEN TAM UNG CUA CN VA PHONG GIAO DICH TRUC THUOC
3026
				ELSE IF(@BRANCH_TYPE <>'HS')
3027
				BEGIN
3028
					SET @TOTAL_ADVANCE =(SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE BRANCH_ID IN (SELECT BRANCH_ID FROM @tmp_CN)
3029
					 AND REQ_TYPE ='I' AND AUTH_STATUS ='A')
3030
					SET @TOTAL_PAYBACK =
3031
					(
3032
						SELECT (SUM(B.AMT_USE) - SUM(B.AMT_ADD) + SUM (B.AMT_REVERT))
3033
						FROM TR_REQ_PAYMENT_DT B
3034
						INNER JOIN TR_REQ_PAYMENT A ON B.PAY_ID = A.REQ_PAY_ID
3035
						INNER JOIN TR_REQ_ADVANCE_PAYMENT C ON C.REQ_PAY_ID = B.PAY_ADV_ID
3036
						WHERE A.BRANCH_ID IN 
3037
						(SELECT BRANCH_ID FROM @tmp_CN)
3038
						AND A.AUTH_STATUS_KT ='A' AND C.REQ_TYPE='I'
3039
					)
3040
				END
3041
				DECLARE @LIMIT_REMAIN DECIMAL(18,0)
3042
				SET @LIMIT_REMAIN =ISNULL(@TOTAL_ADVANCE,0) - ISNULL(@TOTAL_PAYBACK,0)
3043
				print @LIMIT_REMAIN
3044
				IF(@LIMIT_AMT <(SELECT REQ_AMT * ISNULL(RATE,1) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID) + @LIMIT_REMAIN)
3045
				BEGIN
3046
					ROLLBACK TRANSACTION
3047
					SELECT '-2' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,
3048
					N'Tổng hạn mức phê duyệt là: '+ FORMAT(@LIMIT_AMT,'#,#', 'vi-VN') + CHAR(10)+
3049
					N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
3050
					+ CHAR(10) + CHAR(13)+
3051
					N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN +@REQ_AMT ,'#,#', 'vi-VN') 
3052
					+ CHAR(10) +
3053
					N'Số tiền tạm ứng đã vượt mức phê duyệt là: '+ FORMAT(@LIMIT_AMT,'#,#', 'vi-VN') 
3054
					+ CHAR(10) +
3055
					N'Bạn muốn chuyển giao dịch lên cấp cao hơn để duyệt hay tiếp tục chờ duyệt' ErrorDesc
3056
					RETURN '-2'
3057
				END
3058
				--- NEU DU HAN MUC THI THONG BAO DE NGUOI DUYET CAN NHAC CO NEN DUYET PHIEU HAY KHONG
3059
				IF(@LIMIT_AMT >=(SELECT REQ_AMT * ISNULL(RATE,1) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID) +@LIMIT_REMAIN)
3060
				BEGIN
3061
					IF(@REQ_AMT >@LIMIT_ONE_OF)
3062
					BEGIN
3063
						ROLLBACK TRANSACTION
3064
						SELECT '-2' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
3065
						N'Tổng hạn mức phê duyệt là: '+ FORMAT(@LIMIT_AMT,'#,#', 'vi-VN') 
3066
						+ CHAR(10)+
3067
						N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
3068
						+ CHAR(10) + CHAR(13) +
3069
						N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN +@REQ_AMT ,'#,#', 'vi-VN') 
3070
						+ CHAR(10) + 
3071
						N'Số tiền tạm ứng đã vượt mức so với số tiền của một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
3072
						+ CHAR(10) + 
3073
						N'Bạn muốn chuyển giao dịch lên cấp cao hơn để duyệt hay tiếp tục chờ duyệt' ErrorDesc
3074
						RETURN '-2'
3075
					END
3076
					ELSE
3077
					BEGIN
3078
						-- KIEM TRA NEU LA PGD THI CANH BAO
3079
						IF(@BRANCH_TYPE ='HS')
3080
						BEGIN
3081
							ROLLBACK TRANSACTION
3082
						SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
3083
						N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
3084
						+ CHAR(10) + CHAR(13) +  
3085
						N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
3086
						+ CHAR(10) + 
3087
						N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN+@REQ_AMT,'#,#', 'vi-VN')
3088
						+ CHAR(10) + 
3089
						N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
3090
						RETURN '-4'
3091
						END
3092
						ELSE IF(@BRANCH_TYPE ='CN')
3093
						BEGIN
3094
							IF(ISNULL(@TONG_PGD,0) -ISNULL(@TONG_PGD_HOAN,0) > 40000000)
3095
							BEGIN
3096
								ROLLBACK TRANSACTION
3097
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
3098
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
3099
								+ CHAR(10) + 
3100
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
3101
								+ CHAR(10) + CHAR(13) +
3102
								N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN+@REQ_AMT,'#,#', 'vi-VN')
3103
								+ CHAR(10) +
3104
								N'Số tiền tạm ứng đang vượt quá số tổng hạn mức tạm ứng của 1 CN: '+ FORMAT(40000000,'#,#', 'vi-VN') +N'. Số tiền vượt là: '+ FORMAT(ISNULL(@TONG_PGD,0) -ISNULL(@TONG_PGD_HOAN,0)-40000000,'#,#', 'vi-VN')
3105
								+ CHAR(10) + 
3106
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
3107
								RETURN '-4'
3108
							END
3109
							ELSE
3110
							BEGIN
3111
								ROLLBACK TRANSACTION
3112
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
3113
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
3114
								+ CHAR(10) +
3115
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
3116
								+ CHAR(10) + CHAR(13) +
3117
								N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN+@REQ_AMT,'#,#', 'vi-VN')
3118
								+ CHAR(10) + 
3119
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
3120
								RETURN '-4'
3121
							END
3122
						END
3123
						ELSE IF(@BRANCH_TYPE ='PGD')
3124
						BEGIN
3125
							IF(ISNULL(@TONG_PGD,0) -ISNULL(@TONG_PGD_HOAN,0) > 10000000)
3126
							BEGIN
3127
								ROLLBACK TRANSACTION
3128
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,
3129
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')+ CHAR(10) +
3130
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
3131
								+ CHAR(10) + CHAR(13) + 
3132
								N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN+@REQ_AMT,'#,#', 'vi-VN')
3133
								+ CHAR(10) + 
3134
								N'Số tiền tạm ứng đang vượt quá số tổng hạn mức tạm ứng của 1 PGD: '+ FORMAT(10000000,'#,#', 'vi-VN') +N'. Số tiền vượt là: '+ FORMAT(ISNULL(@TONG_PGD,0) -ISNULL(@TONG_PGD_HOAN,0)-10000000,'#,#', 'vi-VN')
3135
								+ CHAR(10) + 
3136
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
3137
								RETURN '-4'
3138
							END
3139
							ELSE
3140
							BEGIN
3141
								ROLLBACK TRANSACTION
3142
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
3143
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
3144
								+ CHAR(10) + 
3145
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
3146
								+ CHAR(10) + CHAR(13) +
3147
								N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN+@REQ_AMT,'#,#', 'vi-VN')
3148
								+ CHAR(10) + 
3149
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
3150
								RETURN '-4'
3151
							END
3152
						END
3153
					END
3154
				END
3155
			-- NEU THOA MAN CAC DIEU KIEN SE TIEN HANH DUYET
3156
			END -- END DU HAN MUC DUYET
3157
			ELSE IF(@p_AUTH_STATUS='A')
3158
			BEGIN
3159
				UPDATE TR_REQ_ADVANCE_PAYMENT
3160
				SET    AUTH_STATUS='A', CHECKER_ID = @p_CHECKER_ID, APPROVE_DT =  GETDATE(), AUTH_STATUS_KT='U'
3161
				WHERE  REQ_PAY_ID = @p_REQ_PAY_ID
3162
				--- CAP NHAT LAI TINH TRANG TRONG REQUEST_PROCESS
3163
				DECLARE @PROCESS_CURR VARCHAR(5)
3164
				SET @PROCESS_CURR =(SELECT PROCESS_ID FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID AND ROLE_USER =@ROLE_ID)
3165
				INSERT INTO PL_PROCESS VALUES (@p_REQ_PAY_ID,@PROCESS_CURR,@p_CHECKER_ID, GETDATE(),(SELECT ROLE_DESC + N' duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID),N'Các cấp phê duyệt theo hạn mức')
3166
				--- CAP NHAT PROCESS CUA PHIEU DE NGHI TAM UNG LA DA DUYET
3167
				UPDATE TR_REQ_ADVANCE_PAYMENT SET PROCESS=@PROCESS_CURR WHERE REQ_PAY_ID=@p_REQ_PAY_ID
3168
				--
3169
				UPDATE PL_REQUEST_PROCESS SET STATUS ='A', NOTES = (SELECT ROLE_DESC + N' duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID) WHERE  ROLE_USER =@ROLE_ID AND REQ_ID = @p_REQ_PAY_ID
3170
			
3171
			END
3172
			ELSE -- NEW KHONG DU HAN MUC THI BAT DAU XAC NHAN VA DUYET THEO HAN MUC
3173
			BEGIN
3174
				DECLARE @t_REQ_AMT DECIMAL(18,0) = (SELECT REQ_AMT FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID=@p_REQ_PAY_ID)
3175
				--- NEU GIAM DOC KHOI VAN CHUA DU HAN MUC THI GIAM DOC KHOI XAC NHAN VÀ TIEP TUC BUOC TIEP THEO LA PHO TONG GIAM DOC
3176
				DECLARE @MAX_STEP INT, @NEXT_ROLE VARCHAR(20), @MESSAGE NVARCHAR(100), @PROCESS_ID_NEXT VARCHAR(5), @PROCESS_PARENT VARCHAR(5),
3177
				@BRANCH_ID_PROC VARCHAR(15), @NEX_ROLE_STEP VARCHAR(25), @CURRENT_PROCESS VARCHAR(15)
3178
				SET @CURRENT_PROCESS =(SELECT PROCESS_ID FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID AND ROLE_USER=@ROLE_ID)
3179
				SET @NEX_ROLE_STEP = (SELECT ROLE_USER FROM PL_REQUEST_PROCESS WHERE PARENT_PROCESS_ID =@CURRENT_PROCESS AND REQ_ID = @p_REQ_PAY_ID )
3180
				--SET @MAX_STEP = CONVERT(INT,(SELECT MAX(PROCESS_ID) FROM TR_REQUEST_PROCESS WHERE REQ_ID =@p_REQ_PAY_ID))
3181
				SET @PROCESS_ID_NEXT = CONVERT(VARCHAR(5),@CURRENT_PROCESS+1)
3182
				--SET @PROCESS_PARENT = CONVERT(VARCHAR(5),@MAX_STEP)
3183
				SET @BRANCH_ID_PROC= (SELECT BRANCH_ID FROM TL_SYSROLE_LIMIT WHERE ROLE_ID=@NEXT_ROLE AND LIMIT_TYPE='ADV_PAY')
3184
				IF(NOT EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE ROLE_USER=@NEX_ROLE_STEP AND REQ_ID= @p_REQ_PAY_ID))
3185
				BEGIN
3186
					SET @NEXT_ROLE =(SELECT TOP 1 ROLE_ID FROM TL_SYSROLE_LIMIT WHERE LIMIT_VALUE >@t_REQ_AMT 
3187
					AND ROLE_ID NOT IN (SELECT ROLE_USER FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID) AND LIMIT_TYPE ='ADV_PAY')
3188
					SET @BRANCH_ID_PROC= (SELECT BRANCH_ID FROM TL_SYSROLE_LIMIT WHERE ROLE_ID=@NEXT_ROLE AND LIMIT_TYPE='ADV_PAY')
3189
					SET @MESSAGE = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @NEXT_ROLE)
3190
					INSERT INTO PL_REQUEST_PROCESS (REQ_ID,PROCESS_ID,STATUS,ROLE_USER,BRANCH_ID,CHECKER_ID,APPROVE_DT,PARENT_PROCESS_ID,IS_LEAF, COST_ID, DVDM_ID, NOTES)  
3191
					VALUES (@p_REQ_PAY_ID,@PROCESS_ID_NEXT,'C',@NEXT_ROLE,@BRANCH_ID_PROC,@NEXT_ROLE,GETDATE(),@PROCESS_PARENT,'Y',NULL,@p_COST_ID,@MESSAGE)
3192
					INSERT INTO PL_PROCESS VALUES (@p_REQ_PAY_ID,@CURRENT_PROCESS,@p_CHECKER_ID, GETDATE(),(SELECT ROLE_DESC + N' xác nhận' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID),N'Các cấp phê duyệt theo hạn mức')
3193
				END
3194
				ELSE
3195
				BEGIN
3196
					SET @NEXT_ROLE =@NEX_ROLE_STEP
3197
					UPDATE PL_REQUEST_PROCESS SET STATUS='C',DVDM_ID=@p_COST_ID WHERE ROLE_USER =@NEXT_ROLE AND REQ_ID = @p_REQ_PAY_ID	
3198
					INSERT INTO PL_PROCESS VALUES (@p_REQ_PAY_ID,@CURRENT_PROCESS,@p_CHECKER_ID, GETDATE(),(SELECT ROLE_DESC + N' xác nhận' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID),N'Các cấp phê duyệt theo hạn mức')
3199
				END
3200
				--				
3201
				IF @@Error <> 0 GOTO ABORT
3202
					-- UPDATE STATUS CUA STEP HIEN TAI
3203
				UPDATE PL_REQUEST_PROCESS SET STATUS='P',IS_LEAF ='N', NOTES = (SELECT ROLE_DESC + N' xác nhận' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID) WHERE ROLE_USER =@ROLE_ID AND REQ_ID = @p_REQ_PAY_ID		
3204
				--INSERT VAO TR_PROCESS		
3205
				UPDATE TR_REQ_ADVANCE_PAYMENT SET PROCESS =@CURRENT_PROCESS , AUTH_STATUS='U',DVDM_ID = @p_COST_ID WHERE REQ_PAY_ID =@p_REQ_PAY_ID	
3206
				--- 
3207
				UPDATE PL_REQUEST_PROCESS SET DVDM_ID= @p_COST_ID WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER <>@ROLE_ID
3208
		  END
3209
		END	
3210
		ELSE
3211
		BEGIN
3212
			--- NEU LA TAM UNG NHA CUNG CAP THI CHECK XEM KI TAM UNG DO DA HOAN THANH HAY CHUA, NEU DA HOAN THANH THI KHONG CHO DUYET
3213
			DECLARE @PAY_ID VARCHAR(15), @SUM_OF_PAY_ID DECIMAL(18,2), @SUM_ADVANCE DECIMAL(18,2),
3214
			@AMOUNT DECIMAL(18,2),@AMT_PAY_DO DECIMAL(18,2),@SCH_ID VARCHAR(15),@AMT_ADVANCE DECIMAL(18,0)
3215
			DECLARE CUR_SH CURSOR FOR SELECT A.PAY_ID,A.AMT_PAY, A.AMT_PAY_DO,A.SCHEDULE_ID,A.AMT_ADVANCE FROM TR_REQ_PAY_SCHEDULE A WHERE A.REQ_PAY_ID= @p_REQ_PAY_ID
3216
			OPEN CUR_SH
3217
			FETCH NEXT FROM CUR_SH INTO @PAY_ID,@AMOUNT,@AMT_PAY_DO,@SCH_ID,@AMT_ADVANCE
3218
			WHILE @@FETCH_STATUS =0
3219
			BEGIN
3220
				SET @SUM_OF_PAY_ID =(SELECT SUM(AMT_PAY_DO) FROM TR_REQ_PAY_SCHEDULE WHERE PAY_ID =@PAY_ID AND AUTH_STATUS_KT='A')
3221
				SET @SUM_ADVANCE =(SELECT SUM(AMT_ADVANCE) FROM TR_REQ_PAY_SCHEDULE WHERE PAY_ID =@PAY_ID AND AUTH_STATUS_KT='A')
3222
				IF(@SUM_OF_PAY_ID +@AMT_PAY_DO >@AMOUNT)
3223
				BEGIN
3224
					ROLLBACK TRANSACTION
3225
					SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, N'Số tiền tạm ứng đã vượt mức số tiền còn lại cần phải thanh toán'
3226
					RETURN '-1'
3227
				END
3228
				IF(@SUM_OF_PAY_ID+@AMT_PAY_DO+@SUM_ADVANCE < @AMOUNT)
3229
				BEGIN
3230
					UPDATE TR_REQ_PAY_SCHEDULE SET PAYMENT_STATUS ='DTU' WHERE SCHEDULE_ID=@SCH_ID
3231
				END
3232
				ELSE IF(@SUM_OF_PAY_ID+@AMT_PAY_DO+@SUM_ADVANCE = @AMOUNT)
3233
				BEGIN
3234
					UPDATE TR_REQ_PAY_SCHEDULE SET PAYMENT_STATUS ='DTT' WHERE SCHEDULE_ID=@SCH_ID
3235
				END
3236
				ELSE IF(@SUM_OF_PAY_ID=0 AND @SUM_ADVANCE =0 )
3237
				BEGIN
3238
					UPDATE TR_REQ_PAY_SCHEDULE SET PAYMENT_STATUS ='CTT' WHERE SCHEDULE_ID=@SCH_ID
3239
				END
3240
				FETCH NEXT FROM CUR_SH INTO @PAY_ID,@AMOUNT,@AMT_PAY_DO,@SCH_ID,@AMT_ADVANCE
3241
			END
3242
			CLOSE CUR_SH
3243
			DEALLOCATE CUR_SH 
3244
			UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS='A', CHECKER_ID=@p_CHECKER_ID, APPROVE_DT = GETDATE(),AUTH_STATUS_KT='U' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
3245
			SET @p_AUTH_STATUS ='A'
3246
			--- INSERT 1 DONG VAO PL_PROCESS
3247
			-- INSERT VAO BANG PL_PROCESS 1 DONG TRA VE
3248
			INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
3249
				   VALUES(@p_REQ_PAY_ID,'APP',@p_CHECKER_ID,GETDATE(), N'Trưởng đơn vị đã phê duyệt',N'Trưởng đơn vị phê duyệt')			
3250
		END	
3251
		IF @@Error <> 0 GOTO ABORT
3252
COMMIT TRANSACTION
3253
	IF(@p_AUTH_STATUS='A')
3254
	BEGIN
3255
		SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,'' ErrorDesc
3256
		RETURN '0'
3257
	END
3258
	ELSE
3259
	BEGIN
3260
		SELECT '1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,'' ErrorDesc
3261
		RETURN '1'
3262
	END
3263
ABORT:
3264
BEGIN
3265
		ROLLBACK TRANSACTION
3266
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
3267
		RETURN '-1'
3268
END