Project

General

Profile

CAP NHAT TAM UNG V2.txt

Luc Tran Van, 07/28/2020 10:09 AM

 
1
ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Ins]
2
@p_REQ_PAY_ID	varchar(15)= NULL,
3
@p_REQ_PAY_CODE	varchar(50)	= NULL,
4
@p_REQ_DT VARCHAR(10)= NULL,
5
@p_BRANCH_ID	varchar(15)	= NULL,
6
@p_DEP_ID	varchar(15)	= NULL,
7
@p_REQ_REASON	nvarchar(MAX)	= NULL,
8
@p_REQ_TYPE	varchar(15)	= NULL,
9
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
10
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
11
@p_REF_ID	varchar(15)	= NULL,
12
@p_RECEIVER_PO	nvarchar(250)	= NULL,
13
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
14
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
15
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
16
@p_REQ_AMT	decimal(18, 0)	= NULL,
17
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
18
@p_MAKER_ID	varchar(15)	= NULL,
19
@p_CREATE_DT	varchar(25)	= NULL,
20
@p_EDITOR_ID	varchar(15)	= NULL,
21
@p_AUTH_STATUS	varchar(1)	= NULL,
22
@p_CHECKER_ID	varchar(15)	= NULL,
23
@p_APPROVE_DT	varchar(25)	= NULL,
24
@p_CREATE_DT_KT	varchar(25)	= NULL,
25
@p_MAKER_ID_KT	varchar(15)	= NULL,
26
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
27
@p_CHECKER_ID_KT	varchar(1)	= NULL,
28
@p_APPROVE_DT_KT  varchar(25)= null,
29
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
30
@p_BRANCH_CREATE	varchar(15)	= NULL,
31
@p_NOTES	varchar(15)	= NULL,
32
@p_RECORD_STATUS	varchar(1)	= NULL,
33
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
34
@p_TRANSFER_DT	varchar(25)	= NULL,
35
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
36
@p_PROCESS	varchar(15)	= NULL,
37
@p_PAY_PHASE VARCHAR(15)= NULL,
38
@p_DVDM_ID VARCHAR(15) = NULL,
39
@p_RATE DECIMAL(18,0)= NULL,
40
@p_RECIVER_MONEY VARCHAR(15) = NULL,
41
@p_IS_PERIOD VARCHAR(5) = NULL,
42
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
43
@p_XMP_TEMP XML = NULL
44
AS
45
--Validation is here
46
/*
47
DECLARE @ERRORSYS NVARCHAR(15) = '' 
48
  IF ( NOT EXISTS ( SELECT * FROM ASS_COLLECT WHERE ))
49
	 SET @ERRORSYS = ''
50
IF @ERRORSYS <> '' 
51
BEGIN
52
	SELECT ErrorCode Result, ''  CAR_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
53
	RETURN '0'
54
END 
55
*/
56
	--DECLARE @ERRORSYS NVARCHAR(15) = '' 
57
	--IF EXISTS(SELECT * FROM TR_PO_MASTER WHERE REF_ID  = @p_REF_ID )
58
	--BEGIN
59
	--	SET @ERRORSYS = 'ASSC-00005'
60
	--	SELECT ErrorCode Result, '' COLLECT_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
61
	--	RETURN '0'
62
	--END
63
	IF(@p_REQ_TYPE ='I')
64
	BEGIN
65
		DECLARE @AMT_AD_PAY DECIMAL(18,0) =0
66
		DECLARE @AMT_AD_PAY_BACK DECIMAL(18,0) =0
67
		DECLARE @AMT_AD_PAY_REMAIN DECIMAL(18,0) =0
68
		SET @AMT_AD_PAY = (SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE REF_ID=@p_MAKER_ID AND AUTH_STATUS_KT='A' AND REQ_TYPE ='I')
69
		SET @AMT_AD_PAY_BACK = (SELECT SUM(D.AMT_USE) +SUM(D.AMT_REVERT) - SUM (D.AMT_ADD)
70
					FROM TR_REQ_PAYMENT_DT D
71
					LEFT JOIN TR_REQ_ADVANCE_PAYMENT X ON D.PAY_ADV_ID = X.REQ_PAY_ID  AND D.AUTH_STATUS_KT ='A'
72
					WHERE X.REF_ID =@p_REF_ID)
73
	 SET @AMT_AD_PAY_REMAIN =ISNULL(@AMT_AD_PAY,0) -ISNULL(@AMT_AD_PAY_BACK,0)
74
	 SET @p_REQ_TEMP_AMT =ISNULL(@AMT_AD_PAY_REMAIN,0)
75
	 END
76
BEGIN TRANSACTION
77
	-- LUCTV 17H51 BO SUNG LAY SO TIEN DA TAM UNG CUA NHAN VIEN --
78
		--SET @AMT_DO =(SELECT * FROM [dbo].TR_RE)
79
	--THIEUVQ 281119---
80
		IF (@p_REQ_TYPE='I')
81
		BEGIN
82
			--SET @p_REF_ID = @p_MAKER_ID
83
			--IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM = @p_RECEIVER_DEBIT))
84
			--BEGIN
85
			--	SET @p_RECEIVER_DEBIT = @p_RECEIVER_DEBIT+''
86
			--END
87
			--ELSE
88
			--BEGIN
89
			--	IF(EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM = @p_RECEIVER_DEBIT AND REF_ID != @p_REF_ID ) AND @p_TYPE_FUNCTION ='SEND')
90
			--	BEGIN
91
			--		SET @p_RECEIVER_DEBIT =(SELECT ACC_NUM FROM CM_ACCOUNT_PAY WHERE ACC_NUM = @p_RECEIVER_DEBIT)
92
			--	END
93
			--END
94
			IF(@p_RECEIVER_DEBIT IS NOT NULL AND @p_RECEIVER_DEBIT <>'')
95
			BEGIN
96
				IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID= @p_REF_ID AND ACC_NUM =@p_RECEIVER_DEBIT))
97
				BEGIN
98
					SET @p_RECEIVER_DEBIT =(SELECT ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) 
99
				END
100
				IF(EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID <> @p_REF_ID AND ACC_NUM =@p_RECEIVER_DEBIT))
101
				BEGIN
102
					ROLLBACK TRANSACTION
103
					SELECT '-1' Result, '' REQ_PAY_ID, N'Tài khoản tạm ứng này đã tồn tại và thuộc về nhân viên khác' ErrorDesc
104
					RETURN '-1'
105
				END
106
			END
107

    
108
		END
109
		EXEC [dbo].[ADVANCE_CODE_GenKey] 'TR_REQ_ADVANCE_PAYMENT', '',@p_REQ_TYPE, @p_REQ_PAY_CODE out
110
	--END--
111
		IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''
112
		BEGIN
113
			ROLLBACK TRANSACTION
114
			SELECT '-1' Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Mã số phiếu không được để trống' ErrorDesc
115
			RETURN '-1'
116
		END
117
		IF (@p_REQ_TYPE='I' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT ='') AND @p_TYPE_FUNCTION ='SEND')
118
		BEGIN
119
			ROLLBACK TRANSACTION
120
			SELECT '-1' Result, '' REQ_PAY_ID, N'Tài khoản nhân viên tạm ứng không được để trống' ErrorDesc
121
			RETURN '-1'
122
		END
123
		IF EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_CODE  = @p_REQ_PAY_CODE )
124
		BEGIN
125
			ROLLBACK TRANSACTION
126
			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
127
			RETURN '-1'
128
		END
129
		IF(LEN(ISNULL(@p_RECEIVER_DEBIT,''))>15 AND @p_REQ_TYPE ='I')
130
		BEGIN
131
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản tạm ứng này không được vượt quá 15 kí tự' ErrorDesc
132
				RETURN '-1'
133
		END
134
		-- START 19-11-2019
135
		-- LUCTV BO SUNG VALIDATE TRONG QUA TRINH TEST SAU UAT- KIEM TRA NEU DOT THANH TOAN CHUA CO THI KHONG DUOC THEM MOI
136
		--IF(@p_REQ_TYPE='P' AND (@p_PAY_PHASE IS NULL OR @p_PAY_PHASE =''))
137
		--BEGIN
138
		--	ROLLBACK TRANSACTION
139
		--	SELECT '-1' as Result, '' REQ_PAY_ID, N'Đợt thanh toán không được phép để trống' ErrorDesc
140
		--	RETURN '-1'
141
		--END
142
		---- NEU THANH TOAN XU LY NO THI NHAN VIEN NHAN TIEN TAM UNG KHONG DUOC PHEP TRONG
143
		--IF(@p_REQ_TYPE='D' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT =''))
144
		--BEGIN
145
		--	ROLLBACK TRANSACTION
146
		--	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
147
		--	RETURN '-1'
148
		--END
149
		-- SO TIEN THANH TOÁN PHAI LON HON KHONG
150
		IF(@p_REQ_AMT <=0)
151
		BEGIN
152
			ROLLBACK TRANSACTION
153
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền tạm ứng phải lớn hơn 0' ErrorDesc
154
			RETURN '-1'
155
		END
156
		-----
157
		---- KIEM TRA NEU CHUA CHON KHOI PHE DUYET THI TU DONG CHUYEN VÊ KHOI TAI CHINH
158
		--IF(@p_DVDM_ID IS NULL OR @p_DVDM_ID ='')
159
		--BEGIN
160
		--	SET @p_DVDM_ID = (SELECT TOP 1 DVDM_ID FROM CM_DVDM WHERE DVDM_NAME ='KHOI TAI CHINH')
161
		--END
162
		--
163
		--KIEM TRA NEU TAI KHOAN NHAN VIEN TAM UNG NEU CHUA TON TAI TRONG HE THONG THI BAO LOI
164
		IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) AND @p_REQ_TYPE='I')
165
		BEGIN
166
			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')
167
		END
168
		ELSE
169
		BEGIN
170
			IF(((SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)<>@p_RECEIVER_DEBIT) AND @p_REQ_TYPE='I')
171
			BEGIN
172
				ROLLBACK TRANSACTION
173
				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
174
				RETURN '-1'
175
			END
176
		END
177
		EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_PAMENT', @p_REQ_PAY_ID out
178
		IF @p_REQ_PAY_ID='' OR @p_REQ_PAY_ID IS NULL GOTO ABORT
179
		INSERT INTO [dbo].[TR_REQ_ADVANCE_PAYMENT]
180
           ([REQ_PAY_ID]
181
           ,[REQ_PAY_CODE]
182
           ,[BRANCH_ID],[REQ_DT],
183
           [DEP_ID]
184
           ,[REQ_REASON]
185
           ,[REQ_TYPE],REQ_ENTRIES,
186
            [REQ_DESCRIPTION]
187
           ,REF_ID,
188
			RECEIVER_PO, RECEIVER_DEBIT
189
           ,[REQ_PAY_TYPE]
190
           ,[REQ_TYPE_CURRENCY]
191
           ,[REQ_AMT]
192
           ,[REQ_TEMP_AMT]
193
           ,[MAKER_ID]
194
           ,[CREATE_DT]
195
           ,[EDITOR_ID]
196
           ,[AUTH_STATUS]
197
           ,[CHECKER_ID]
198
           ,[APPROVE_DT]
199
           ,[CREATE_DT_KT]
200
           ,[MAKER_ID_KT]
201
           ,[AUTH_STATUS_KT]
202
           ,[CHECKER_ID_KT]
203
		   ,[APPROVE_DT_KT]
204
           ,[CONFIRM_NOTES]
205
           ,[BRANCH_CREATE]
206
           ,[NOTES],RECORD_STATUS,TRANSFER_MAKER,TRANSFER_DT,TRASFER_USER_RECIVE,PROCESS,PAY_PHASE,DVDM_ID,RATE,RECIVER_MONEY,IS_PERIOD)
207
			VALUES
208
           (@p_REQ_PAY_ID,
209
			@p_REQ_PAY_CODE,
210
			@p_BRANCH_ID,CONVERT(DATE,@p_REQ_DT,103),
211
			@p_DEP_ID,
212
			@p_REQ_REASON,
213
			@p_REQ_TYPE,
214
			@P_REQ_ENTRIES,
215
			@p_REQ_DESCRIPTION,
216
			@p_REF_ID,
217
			@p_RECEIVER_PO,
218
			@p_RECEIVER_DEBIT,
219
			@p_REQ_PAY_TYPE,
220
			@p_REQ_TYPE_CURRENCY,
221
			@p_REQ_AMT,
222
			@p_REQ_TEMP_AMT,
223
			@p_MAKER_ID,
224
			GETDATE(),
225
			@p_EDITOR_ID,
226
			'E',
227
			NULL,
228
			NULL,
229
			NULL,
230
			NULL,
231
			NULL,
232
			NULL,
233
			NULL,
234
			NULL,
235
			@p_BRANCH_CREATE,
236
			@p_NOTES,@p_RECORD_STATUS,
237
			@p_TRANSFER_MAKER,
238
			NULL,
239
			@p_TRASFER_USER_RECIVE,
240
			@p_PROCESS,@p_PAY_PHASE,@p_DVDM_ID,@p_RATE,@p_RECIVER_MONEY,@p_IS_PERIOD)
241
			IF @@Error <> 0 GOTO ABORT
242
		--- INSERT VÀO BẢNG DETAIL NÊU TẠM ỨNG LÀ TẠM ỨNG THANH TOÁN
243
			DECLARE @hdoc INT
244
			EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
245
			
246
			-- KIEM TRA NEU TAM UNG THANH TOAN
247
			IF((@p_REQ_TYPE='P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE='D')
248
			BEGIN
249
				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),
250
				@AMT_REMAIN_SCHEDULE decimal(18,0),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),
251
				@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),
252
				@AMT_PAY_REAL DECIMAL(18,2), @IS_CLOSED VARCHAR(1)= NULL,@INDEX_NS INT =0,@REASON NVARCHAR(1000), @REF_TYPE VARCHAR(15)
253
				DECLARE XmlDataPO CURSOR FOR
254
				SELECT *
255
				FROM
256
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
257
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
258
				OPEN XmlDataPO;
259
				DECLARE @INDEX_PO INT =0
260
				SET @INDEX_PO = 0
261
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
262
				WHILE @@fetch_status=0 
263
				BEGIN
264
					SET @INDEX_PO = @INDEX_PO +1
265
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
266
					--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))
267
					--BEGIN
268
					--	ROLLBACK TRANSACTION
269
					--	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
270
					--	RETURN '-1'
271
					--END
272
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
273
					--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)))
274
					--BEGIN
275
					--	ROLLBACK TRANSACTION
276
					--	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
277
					--	RETURN '-1'
278
					--END
279
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
280
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
281
					IF(@p_TYPE_FUNCTION ='SEND')
282
					BEGIN
283
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
284
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
285
					BEGIN
286
						ROLLBACK TRANSACTION
287
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
288
						(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
289
						RETURN '-1'
290
					END
291
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
292
					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))
293
					BEGIN
294
						ROLLBACK TRANSACTION
295
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
296
						(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
297
						RETURN '-1'
298
					END
299
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
300
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
301
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
302
					BEGIN
303
						ROLLBACK TRANSACTION
304
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
305
						(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
306
						RETURN '-1'
307
					END
308
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
309
					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))
310
					BEGIN
311
						ROLLBACK TRANSACTION
312
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
313
						(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
314
						RETURN '-1'
315
					END
316
					END
317
					DECLARE @REQ_PAYDTID VARCHAR(15);
318
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
319
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
320
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
321
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
322
				IF @@error<>0 GOTO ABORT;
323
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
324
				END
325
				CLOSE XmlDataPO;
326
				DEALLOCATE XmlDataPO;
327
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
328
				DECLARE XmlDataSchedule CURSOR FOR
329
				SELECT *
330
				FROM
331
				OPENXML(@hdoc, 'Root/XmlDataSchedule',2)
332
				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),
333
				AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
334
				REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
335
				OPEN XmlDataSchedule
336
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
337
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
338
				WHILE @@fetch_status=0 
339
				BEGIN
340
					DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
341
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
342
					IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
343
					INSERT INTO TR_REQ_PAY_SCHEDULE(
344
					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,
345
					CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE,AMT_PAY_REAL)
346
					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,
347
					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)
348
				--- END KHAI BAO CURSOR
349
				IF @@error<>0 GOTO ABORT;
350
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
351
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
352
				END
353
				CLOSE XmlDataSchedule;
354
				DEALLOCATE XmlDataSchedule;
355
			END
356
		--- END TẠM ỨNG THANH TOÁN
357
		--- TẠM ỨNG HĐ ĐỊNH KỲ
358
		IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
359
		BEGIN
360
				
361
				DECLARE XmlDataPO CURSOR FOR
362
				SELECT *
363
				FROM
364
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
365
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
366
				OPEN XmlDataPO;
367
				SET @INDEX_PO = 0
368
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
369
				WHILE @@fetch_status=0 
370
				BEGIN
371
					SET @INDEX_PO = @INDEX_PO +1
372
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
373
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
374
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
375
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
376
					(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
377
				IF @@error<>0 GOTO ABORT;
378
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
379
				END
380
				CLOSE XmlDataPO;
381
				DEALLOCATE XmlDataPO;
382
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
383
			----------------------------
384
			--INSERT FROM PERIOD	
385
				DECLARE XmlDataPeriod CURSOR FOR
386
				SELECT *
387
				FROM
388
				OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)
389
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
390
				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))
391
				OPEN XmlDataPeriod;
392
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
393
				@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)
394
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
395
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
396
				WHILE @@fetch_status=0 
397
				BEGIN
398
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
399
					IF(@p_TYPE_FUNCTION ='SEND')
400
					BEGIN
401
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0  )
402
					BEGIN
403
						ROLLBACK TRANSACTION
404
						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
405
						RETURN '-1'
406
					END
407
					END
408
					DECLARE @PERIOD_ID VARCHAR(15);
409
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
410
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
411
					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)
412
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'ADV_PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),
413
				@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)
414
			IF @@error<>0 GOTO ABORT;
415
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
416
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
417
			END
418
			CLOSE XmlDataPeriod;
419
			DEALLOCATE XmlDataPeriod;
420
			-- VALIDATE SO TIEN
421
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
422
			--BEGIN
423
			--	ROLLBACK TRANSACTION
424
			--	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
425
			--	RETURN '-1'
426
			--END
427
			----
428
		END
429
		---- END TẠM ỨNG HỢP ĐỒNG ĐỊNH KÌ
430
		--- INSERT PHƯƠNG THỨC THANH TOÁN
431
		----MethodCursor
432
			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),
433
					@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(50), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20),@CHECK_IN VARCHAR(15)
434
			DECLARE XmlDataMethod CURSOR FOR
435
			SELECT *
436
			FROM
437
			OPENXML(@hdoc, 'Root/XmlDataMethod',2)
438
			WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,0),REQ_PAY_TYPE varchar(1),
439
			REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), 
440
			ACC_NAME NVARCHAR(50), ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15))
441
			OPEN XmlDataMethod
442
			FETCH NEXT FROM XmlDataMethod 
443
			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
444
			WHILE @@fetch_status=0 
445
			BEGIN
446
				IF(@REQ_PAY_TYPE <>'1')
447
				BEGIN
448
					SET @ISSUED_DT = NULL
449
				END
450
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
451
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
452
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
453
				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,
454
				CREATE_DT,ACC_NO,ACC_NAME,ISSUED_BY,ISSUED_DT,CURRENCY,RATE,CHECK_IN)
455
				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,'',
456
				@p_MAKER_ID,GETDATE(),@ACC_NO,@ACC_NAME,@ISSED_BY, CONVERT(DATE, @ISSUED_DT, 103),@CURRENCY,@RATE,@CHECK_IN)
457
			IF @@error<>0 GOTO ABORT;
458
			FETCH NEXT FROM XmlDataMethod 
459
			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
460
			END
461
			CLOSE XmlDataMethod;
462
			DEALLOCATE XmlDataMethod
463
		----END INSERT PHƯƠNG THỨC THANH TOÁN
464
		----INSERT VAO BANG DS KHACH HANG
465
			DECLARE XmlDataCus CURSOR FOR
466
			SELECT *
467
			FROM
468
			OPENXML(@hdoc, '/Root/XmlDataCus', 2)
469
			WITH(CUS_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO DECIMAL(18,0),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
470
			OPEN XmlDataCus;
471
			FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
472
				WHILE @@fetch_status=0 
473
				BEGIN		
474
					INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
475
					VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
476
				--- END KHAI BAO CURSOR
477
				IF @@error<>0 GOTO ABORT;
478
				FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
479
				END
480
				CLOSE XmlDataCus;
481
				DEALLOCATE XmlDataCus;
482
		----END
483
			-- HANG MUC CHI PHI VA NGAN SACH
484
			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)
485
			DECLARE XmlDataGood CURSOR FOR
486
			SELECT *
487
			FROM
488
			OPENXML(@hdoc, 'Root/XmlDataGood',2) 
489
			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))
490
			OPEN XmlDataGood
491
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
492
			WHILE @@fetch_status=0 BEGIN
493
				--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
494
				SET @INDEX_NS = @INDEX_NS +1
495
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
496
				--IF(@p_TYPE_FUNCTION ='SEND')
497
				--BEGIN
498
				--IF((@AMT_EXE  > @AMT_REMAIN_GD))
499
				--BEGIN
500
				--		ROLLBACK TRANSACTION
501
				--		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
502
				--		RETURN '-1'
503
				--END
504
				--END
505
				DECLARE @p_BUDGET_ID VARCHAR(15);
506
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
507
				IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
508
				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) 
509
				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)
510
			IF @@error<>0 GOTO ABORT;
511
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
512
			END;
513
		CLOSE XmlDataGood;
514
		DEALLOCATE XmlDataGood;
515
		--- END INSERT NGAN SACH
516
		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)
517
		DECLARE XmlAttach CURSOR FOR
518
		SELECT *
519
		FROM
520
		OPENXML(@hdoc, 'Root/XmlAttach',2) 
521
		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))
522
		OPEN XmlAttach
523
		--INSERT CHUNG TU DINH KEM
524
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
525
				WHILE @@fetch_status=0 
526
				BEGIN
527
					IF (@REF_DT='')
528
					BEGIN
529
						SET @REF_DT = NULL
530
					END
531
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
532
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
533
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT) VALUES
534
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT, CONVERT(DATE, @REF_DT,103))
535
				IF @@error<>0 GOTO ABORT;
536
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
537
				END
538
				CLOSE XmlAttach;
539
				DEALLOCATE XmlAttach;
540
		----END
541
		--- BAT DAU VALIDATE
542
		IF(@p_TYPE_FUNCTION ='SEND')
543
		BEGIN
544
			DECLARE @SUM_PTTT DECIMAL(18,0), @SUM_NS DECIMAL(18,0),@SUM_LICH_TT DECIMAL(18,0)
545
			SET @SUM_PTTT =(SELECT SUM(TOTAL_AMT * ISNULL(RATE,1)) FROM  TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
546
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID) AND @p_REQ_TYPE ='D')
547
			BEGIN
548
				SET @SUM_LICH_TT =(SELECT SUM(AMT_PAY_REAL* ISNULL(RATE,1)) FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
549
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_LICH_TT,0))
550
				BEGIN
551
					ROLLBACK TRANSACTION
552
					SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tổng số tiền lịch thanh toán PO và hợp đồng liên quan đến khách hàng xử lý nợ phải bằng số tiền tạm ứng' ErrorDesc
553
					RETURN '-1'
554
				END
555
			END
556
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
557
			BEGIN
558
				SET @SUM_NS =(SELECT SUM(AMT_EXE * ISNULL(RATE,1)) FROM  TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
559
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
560
				BEGIN
561
					ROLLBACK TRANSACTION
562
					SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tổng số tiền sử dụng ngân sách và chi phí phải bằng số tiền tạm ứng' ErrorDesc
563
					RETURN '-1'
564
				END
565
			END
566
			ELSE
567
			IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
568
			BEGIN
569
				ROLLBACK TRANSACTION
570
				SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tổng số tiền phương thức thanh toán phải bằng số tiền tạm ứng' ErrorDesc
571
				RETURN '-1'
572
			END
573
			
574
		END
575
		----END
576
		--- INSERT SẴN VÀO BẢNG TR_REQUEST_PROCESS
577
			IF(@p_REQ_TYPE ='I')
578
			BEGIN
579
				DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT DECIMAL(18,0))
580
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
581
				BEGIN
582
					--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'
583
					IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06908%' AND DEP_ID =@p_DEP_ID)
584
					BEGIN
585
						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' AND A.ROLE_ID <>'GDK'
586
					END
587
					ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
588
					BEGIN
589
						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' AND A.ROLE_ID <>'GDK'
590
					END
591
					ELSE IF (EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06900%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06901%' AND DEP_ID =@p_DEP_ID)
592
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06902%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06903%' AND DEP_ID =@p_DEP_ID) 
593
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06904%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06920%' AND DEP_ID =@p_DEP_ID))
594
					BEGIN
595
						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' AND A.ROLE_ID NOT IN ('GDK','PTGD')
596
					END
597
					ELSE IF (EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06907%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06909%' AND DEP_ID =@p_DEP_ID)
598
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06911%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06921%' AND DEP_ID =@p_DEP_ID) 
599
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
600
					BEGIN
601
						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' AND A.ROLE_ID <>'PTGD'
602
					END
603
					ELSE
604
					BEGIN
605
						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'
606
					END
607
				END
608
				ELSE
609
				BEGIN
610
					IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
611
					BEGIN
612
						--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
613
						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
614
						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'
615
					END
616
					ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
617
					BEGIN
618
						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)
619
						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'
620
					END
621
				END
622
				DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
623
				SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
624
				DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
625
				DECLARE CUR_PR CURSOR FOR  SELECT A.ROLE_ID, A.BRANCH_ID,A.AMT FROM @tmp A
626
				OPEN CUR_PR
627
				FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
628
				WHILE @@FETCH_STATUS =0 --AND @STOP=0
629
				BEGIN								
630
					SET @INDEX= @INDEX+1
631
					IF @INDEX = @SL_ROLE
632
						SET @ISLEAF = 'Y'
633
					ELSE
634
						SET @ISLEAF = 'N'
635
					SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
636

    
637
					IF(@INDEX=1 )
638
					BEGIN		
639
						SET @PARENT_ID = NULL
640
						SET @STATUS = 'C'							
641
						--INSERT INTO TR_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),'C',@ROLE_ID,@BRANCH_ID,NULL,NULL,NULL,@ISLEAF)
642
					END				
643
					ELSE 
644
					BEGIN
645
						SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
646
						SET @STATUS = 'U'
647
					END
648
						IF(@LIMIT_VALUE >= @p_REQ_AMT)
649
						BEGIN
650
							INSERT INTO dbo.PL_REQUEST_PROCESS
651
							(
652
								REQ_ID,
653
								PROCESS_ID,
654
								STATUS,
655
								ROLE_USER,
656
								BRANCH_ID,
657
								CHECKER_ID,
658
								APPROVE_DT,
659
								PARENT_PROCESS_ID,
660
								IS_LEAF, COST_ID, DVDM_ID, NOTES
661
							)
662
							VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
663
							--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y')
664
							BREAK;
665
						END
666
						ELSE
667
							INSERT INTO PL_REQUEST_PROCESS (
668
								REQ_ID,
669
								PROCESS_ID,
670
								STATUS,
671
								ROLE_USER,
672
								BRANCH_ID,
673
								CHECKER_ID,
674
								APPROVE_DT,
675
								PARENT_PROCESS_ID,
676
								IS_LEAF, COST_ID, DVDM_ID, NOTES
677
							) VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
678
					--END
679
					
680
					FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
681
				END
682
				CLOSE CUR_PR
683
				DEALLOCATE CUR_PR
684
			END
685
			--- CAP NHAT THANG CUOI CUNG LA Y
686
			--UPDATE TR_REQUEST_PROCESS SET IS_LEAF='Y' WHERE ID = (SELECT MAX(ID) FROM TR_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID)
687
		COMMIT TRANSACTION
688
		IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
689
		BEGIN
690
				--ROLLBACK TRANSACTION
691
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
692
				--UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
693
				--INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
694
				--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')
695
				--SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
696
				--RETURN '4'
697
				IF(@p_TYPE_FUNCTION ='SEND') -- KIEM TRA NEU 2 BIEN XML KHAC NULL TUC LA DANG TRONG QUA TRINH LUU NHAP
698
				BEGIN
699
				DECLARE @BRANCH_TYPE_CR VARCHAR(15)
700
				SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
701
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL) AND @BRANCH_TYPE_CR ='HS' AND @p_REQ_TYPE ='I')
702
				BEGIN
703
					DECLARE @USER_TP VARCHAR(15)
704
					SET @USER_TP =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND RoleName IN ('GDDV','TPTC','TC','KTT'))
705
					UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TP WHERE REQ_PAY_ID =@p_REQ_PAY_ID
706
				END
707
				ELSE IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL) AND @BRANCH_TYPE_CR ='PGD')
708
				BEGIN
709
					DECLARE @USER_TPGD VARCHAR(15)
710
					SET @USER_TPGD =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND RoleName IN ('TPGD'))
711
					UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TPGD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
712
				END
713
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
714
				UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U', PROCESS = NULL WHERE REQ_PAY_ID =@p_REQ_PAY_ID
715
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
716
				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')
717
				SELECT '4' as Result, '' REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
718
				RETURN '4'
719
			END
720
		END
721
		SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,@p_REQ_PAY_CODE AS REQ_PAY_CODE, '' ErrorDesc
722
		RETURN '0'
723
ABORT:
724
BEGIN
725
		ROLLBACK TRANSACTION
726
		SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, '' ErrorDesc
727
		RETURN '-1'
728
End