Project

General

Profile

CAP NHAT TAM UNG V4.txt

Luc Tran Van, 07/28/2020 10:13 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
			ELSE
108
			BEGIN
109
				SET @p_RECEIVER_DEBIT =(SELECT ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) 
110
			END
111

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

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