Project

General

Profile

CAP NHAT UAT 172 29 5 51 2020.txt

Luc Tran Van, 12/07/2020 10:42 AM

 
1

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

    
115
		--END
116
		EXEC [dbo].[ADVANCE_CODE_GenKey] 'TR_REQ_ADVANCE_PAYMENT', '',@p_REQ_TYPE, @p_REQ_PAY_CODE out
117
	--END--
118
		IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''
119
		BEGIN
120
			ROLLBACK TRANSACTION
121
			SELECT '-1' Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Mã số phiếu không được để trống' ErrorDesc
122
			RETURN '-1'
123
		END
124
		IF (@p_REQ_TYPE='I' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT ='') AND @p_TYPE_FUNCTION ='SEND')
125
		BEGIN
126
			ROLLBACK TRANSACTION
127
			SELECT '-1' Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Tài khoản nhân viên tạm ứng không được để trống' ErrorDesc
128
			RETURN '-1'
129
		END
130
		IF EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_CODE  = @p_REQ_PAY_CODE )
131
		BEGIN
132
			ROLLBACK TRANSACTION
133
			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
134
			RETURN '-1'
135
		END
136
		IF(LEN(ISNULL(@p_RECEIVER_DEBIT,''))>15 AND @p_REQ_TYPE ='I')
137
		BEGIN
138
				ROLLBACK TRANSACTION
139
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Tài khoản tạm ứng này không được vượt quá 15 kí tự' ErrorDesc
140
				RETURN '-1'
141
		END
142
		-- START 19-11-2019
143
		-- LUCTV BO SUNG VALIDATE TRONG QUA TRINH TEST SAU UAT- KIEM TRA NEU DOT THANH TOAN CHUA CO THI KHONG DUOC THEM MOI
144
		--IF(@p_REQ_TYPE='P' AND (@p_PAY_PHASE IS NULL OR @p_PAY_PHASE =''))
145
		--BEGIN
146
		--	ROLLBACK TRANSACTION
147
		--	SELECT '-1' as Result, '' REQ_PAY_ID, N'Đợt thanh toán không được phép để trống' ErrorDesc
148
		--	RETURN '-1'
149
		--END
150
		---- NEU THANH TOAN XU LY NO THI NHAN VIEN NHAN TIEN TAM UNG KHONG DUOC PHEP TRONG
151
		--IF(@p_REQ_TYPE='D' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT =''))
152
		--BEGIN
153
		--	ROLLBACK TRANSACTION
154
		--	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
155
		--	RETURN '-1'
156
		--END
157
		-- SO TIEN THANH TOÁN PHAI LON HON KHONG
158
		IF(@p_REQ_AMT <=0)
159
		BEGIN
160
			ROLLBACK TRANSACTION
161
			SELECT '-1' as Result, '' REQ_PAY_ID,'' AS REQ_PAY_CODE, N'Số tiền tạm ứng phải lớn hơn 0' ErrorDesc
162
			RETURN '-1'
163
		END
164
		-----
165
		---- KIEM TRA NEU CHUA CHON KHOI PHE DUYET THI TU DONG CHUYEN VÊ KHOI TAI CHINH
166
		--IF(@p_DVDM_ID IS NULL OR @p_DVDM_ID ='')
167
		--BEGIN
168
		--	SET @p_DVDM_ID = (SELECT TOP 1 DVDM_ID FROM CM_DVDM WHERE DVDM_NAME ='KHOI TAI CHINH')
169
		--END
170
		--
171
		--KIEM TRA NEU TAI KHOAN NHAN VIEN TAM UNG NEU CHUA TON TAI TRONG HE THONG THI BAO LOI
172
		--IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) AND @p_REQ_TYPE='I')
173
		--BEGIN
174
		--	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')
175
		--END
176
		--ELSE
177
		--BEGIN
178
		--	IF(((SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)<>@p_RECEIVER_DEBIT) AND @p_REQ_TYPE='I')
179
		--	BEGIN
180
		--		ROLLBACK TRANSACTION
181
		--		SELECT '-1' as Result, '' REQ_PAY_ID, '' AS REQ_PAY_CODE, 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
182
		--		RETURN '-1'
183
		--	END
184
		--END
185
		
186
		--SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
187
		--IF(@ROLE_KI_NHAY IS NOT NULL AND @ROLE_KI_NHAY <> '' AND @ROLE_KI_NHAY IN ('TP','GDDV','KTT','TPTC','TC'))
188
		--BEGIN
189
		--	ROLLBACK TRANSACTION
190
		--	SELECT '-1' Result, '' REQ_PAY_ID, N'Bạn không được phép chọn cấp trưởng đơn vị làm cấp phê duyệt trung gian. Vui lòng bỏ qua hoặc chọn cấp phó phòng, trưởng bộ phận' ErrorDesc
191
		--	RETURN '-1'
192
		--END
193
		--DECLARE @ROLE_KI_NHAY VARCHAR(50)
194
		IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM =@p_RECEIVER_DEBIT AND REF_ID =  @p_REF_ID) AND @p_REQ_TYPE='I')
195
		BEGIN
196
				ROLLBACK TRANSACTION
197
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản tạm ứng số '+ @p_RECEIVER_DEBIT + N' không phải tài khoản của user: '+@p_REF_ID  ErrorDesc
198
				RETURN '-1'
199
		END
200
		SET  @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER WHERE TLNANME =@p_TRASFER_USER_RECIVE)
201
		IF(@ROLE_KI_NHAY IS NOT NULL AND @ROLE_KI_NHAY <>'' AND @ROLE_KI_NHAY IN ('TPGD','GDDV','PGD','PTGD','TGD','HDQT','TP','PP','TBP','KTT','GDK','KSV','TC','NVTC','TPTC'))
202
		BEGIN
203
		PRINT @ROLE_KI_NHAY
204
		END
205
		ELSE
206
		BEGIN
207
		SET @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
208
		IF(@ROLE_KI_NHAY IS NULL OR @ROLE_KI_NHAY ='')
209
		BEGIN
210
				SET @ROLE_KI_NHAY =(SELECT TOP 1 ROLE_NEW FROM TL_SYS_ROLE_MAPPING WHERE ROLE_OLD =(SELECT TOP 1 ROLENAME FROM TL_USER WHERE TLNANME=@p_TRASFER_USER_RECIVE))
211
		END
212
		END
213
		--SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
214
		IF(@ROLE_KI_NHAY IS NOT NULL AND @ROLE_KI_NHAY <> '' AND @ROLE_KI_NHAY IN ('TP','GDDV','KTT','TPTC','TC','TPGD') AND @p_REQ_TYPE <> 'I')
215
		BEGIN
216
			ROLLBACK TRANSACTION
217
			SELECT '-1' Result, '' REQ_PAY_ID, N'Bạn không được phép chọn cấp trưởng đơn vị làm cấp phê duyệt trung gian. Vui lòng bỏ qua hoặc chọn cấp phó phòng, trưởng bộ phận' ErrorDesc
218
			RETURN '-1'
219
		END
220
		EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_PAMENT', @p_REQ_PAY_ID out
221
		IF @p_REQ_PAY_ID='' OR @p_REQ_PAY_ID IS NULL GOTO ABORT
222
		INSERT INTO [dbo].[TR_REQ_ADVANCE_PAYMENT]
223
           ([REQ_PAY_ID]
224
           ,[REQ_PAY_CODE]
225
           ,[BRANCH_ID],[REQ_DT],
226
           [DEP_ID]
227
           ,[REQ_REASON]
228
           ,[REQ_TYPE],REQ_ENTRIES,
229
            [REQ_DESCRIPTION]
230
           ,REF_ID,
231
			RECEIVER_PO, RECEIVER_DEBIT
232
           ,[REQ_PAY_TYPE]
233
           ,[REQ_TYPE_CURRENCY]
234
           ,[REQ_AMT]
235
           ,[REQ_TEMP_AMT]
236
           ,[MAKER_ID]
237
           ,[CREATE_DT]
238
           ,[EDITOR_ID]
239
           ,[AUTH_STATUS]
240
           ,[CHECKER_ID]
241
           ,[APPROVE_DT]
242
           ,[CREATE_DT_KT]
243
           ,[MAKER_ID_KT]
244
           ,[AUTH_STATUS_KT]
245
           ,[CHECKER_ID_KT]
246
		   ,[APPROVE_DT_KT]
247
           ,[CONFIRM_NOTES]
248
           ,[BRANCH_CREATE]
249
           ,[NOTES],RECORD_STATUS,TRANSFER_MAKER,TRANSFER_DT,TRASFER_USER_RECIVE,PROCESS,PAY_PHASE,DVDM_ID,RATE,RECIVER_MONEY,IS_PERIOD)
250
			VALUES
251
           (@p_REQ_PAY_ID,
252
			@p_REQ_PAY_CODE,
253
			@p_BRANCH_ID,CONVERT(DATE,GETDATE(),103),
254
			@p_DEP_ID,
255
			@p_REQ_REASON,
256
			@p_REQ_TYPE,
257
			@P_REQ_ENTRIES,
258
			@p_REQ_DESCRIPTION,
259
			@p_REF_ID,
260
			@p_RECEIVER_PO,
261
			@p_RECEIVER_DEBIT,
262
			@p_REQ_PAY_TYPE,
263
			@p_REQ_TYPE_CURRENCY,
264
			@p_REQ_AMT,
265
			@p_REQ_TEMP_AMT,
266
			@p_MAKER_ID,
267
			GETDATE(),
268
			@p_EDITOR_ID,
269
			'E',
270
			NULL,
271
			NULL,
272
			NULL,
273
			NULL,
274
			NULL,
275
			NULL,
276
			NULL,
277
			NULL,
278
			@p_BRANCH_CREATE,
279
			@p_NOTES,'1',
280
			@p_TRANSFER_MAKER,
281
			NULL,
282
			@p_TRASFER_USER_RECIVE,
283
			@p_PROCESS,@p_PAY_PHASE,@p_DVDM_ID,@p_RATE,@p_RECIVER_MONEY,@p_IS_PERIOD)
284
			IF @@Error <> 0 GOTO ABORT
285
		--- INSERT VÀO BẢNG DETAIL NÊU TẠM ỨNG LÀ TẠM ỨNG THANH TOÁN
286
			DECLARE @hdoc INT
287
			EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
288
			
289
			-- KIEM TRA NEU TAM UNG THANH TOAN
290
			IF((@p_REQ_TYPE='P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE='D')
291
			BEGIN
292
				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,2),
293
				@AMT_REMAIN_SCHEDULE decimal(18,0),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),
294
				@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),
295
				@AMT_PAY_REAL DECIMAL(18,2), @IS_CLOSED VARCHAR(1)= NULL,@INDEX_NS INT =0,@REASON NVARCHAR(1000), @REF_TYPE VARCHAR(15)
296
				DECLARE XmlDataPO CURSOR FOR
297
				SELECT *
298
				FROM
299
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
300
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
301
				OPEN XmlDataPO;
302
				DECLARE @INDEX_PO INT =0
303
				SET @INDEX_PO = 0
304
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
305
				WHILE @@fetch_status=0 
306
				BEGIN
307
					SET @INDEX_PO = @INDEX_PO +1
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 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))
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/ 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
313
					--	RETURN '-1'
314
					--END
315
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
316
					--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)))
317
					--BEGIN
318
					--	ROLLBACK TRANSACTION
319
					--	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
320
					--	RETURN '-1'
321
					--END
322
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
323
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
324
					IF(@p_TYPE_FUNCTION ='SEND')
325
					BEGIN
326
							
327
				
328
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
329
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
330
					BEGIN
331
						ROLLBACK TRANSACTION
332
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
333
						(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
334
						RETURN '-1'
335
					END
336
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
337
					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))
338
					BEGIN
339
						ROLLBACK TRANSACTION
340
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
341
						(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
342
						RETURN '-1'
343
					END
344
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
345
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
346
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
347
					BEGIN
348
						ROLLBACK TRANSACTION
349
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
350
						(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
351
						RETURN '-1'
352
					END
353
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
354
					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))
355
					BEGIN
356
						ROLLBACK TRANSACTION
357
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
358
						(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
359
						RETURN '-1'
360
					END
361
					END
362
					DECLARE @REQ_PAYDTID VARCHAR(15);
363
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
364
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
365
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
366
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
367
				IF @@error<>0 GOTO ABORT;
368
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
369
				END
370
				CLOSE XmlDataPO;
371
				DEALLOCATE XmlDataPO;
372
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
373
				DECLARE XmlDataSchedule CURSOR FOR
374
				SELECT *
375
				FROM
376
				OPENXML(@hdoc, 'Root/XmlDataSchedule',2)
377
				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),
378
				AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
379
				REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
380
				OPEN XmlDataSchedule
381
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
382
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
383
				WHILE @@fetch_status=0 
384
				BEGIN
385
					DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
386
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
387
					IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
388
					INSERT INTO TR_REQ_PAY_SCHEDULE(
389
					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,
390
					CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE,AMT_PAY_REAL)
391
					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,
392
					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)
393
				--- END KHAI BAO CURSOR
394
				IF @@error<>0 GOTO ABORT;
395
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
396
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
397
				END
398
				CLOSE XmlDataSchedule;
399
				DEALLOCATE XmlDataSchedule;
400
			END
401
		--- END TẠM ỨNG THANH TOÁN
402
		--- TẠM ỨNG HĐ ĐỊNH KỲ
403
		IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
404
		BEGIN
405
				
406
				DECLARE XmlDataPO CURSOR FOR
407
				SELECT *
408
				FROM
409
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
410
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
411
				OPEN XmlDataPO;
412
				SET @INDEX_PO = 0
413
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
414
				WHILE @@fetch_status=0 
415
				BEGIN
416
					SET @INDEX_PO = @INDEX_PO +1
417
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
418
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
419
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
420
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
421
					(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
422
				IF @@error<>0 GOTO ABORT;
423
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
424
				END
425
				CLOSE XmlDataPO;
426
				DEALLOCATE XmlDataPO;
427
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
428
			----------------------------
429
			--INSERT FROM PERIOD	
430
				DECLARE XmlDataPeriod CURSOR FOR
431
				SELECT *
432
				FROM
433
				OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)
434
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
435
				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))
436
				OPEN XmlDataPeriod;
437
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
438
				@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)
439
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
440
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
441
				WHILE @@fetch_status=0 
442
				BEGIN
443
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
444
					IF(@p_TYPE_FUNCTION ='SEND')
445
					BEGIN
446
					
447
						IF(EXISTS(SELECT CONTRACT_ID 
448
						FROM TR_CONTRACT 
449
						WHERE CONTRACT_ID = @REF_ID
450
						AND IS_CLOSED='Y' ))
451
						BEGIN
452
							ROLLBACK TRANSACTION
453
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tạm ứng hợp đồng định kì đã đóng' ErrorDesc
454
							RETURN '-1'
455
						END
456

    
457
					
458
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0  )
459
					BEGIN
460
						ROLLBACK TRANSACTION
461
						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
462
						RETURN '-1'
463
					END
464
					END
465
					DECLARE @PERIOD_ID VARCHAR(15);
466
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
467
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
468
					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)
469
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'ADV_PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),
470
				@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)
471
			IF @@error<>0 GOTO ABORT;
472
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
473
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
474
			END
475
			CLOSE XmlDataPeriod;
476
			DEALLOCATE XmlDataPeriod;
477
			-- VALIDATE SO TIEN
478
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
479
			--BEGIN
480
			--	ROLLBACK TRANSACTION
481
			--	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
482
			--	RETURN '-1'
483
			--END
484
			----
485
		END
486
		---- END TẠM ỨNG HỢP ĐỒNG ĐỊNH KÌ
487
		--- INSERT PHƯƠNG THỨC THANH TOÁN
488
		----MethodCursor
489
			DECLARE @RECEIVE_ID varchar(15),@RECEIVE_NAME nvarchar(100),@REQ_PAY_REASON nvarchar(MAX),@TOTAL_AMT_METHOD decimal(18,2),@REQ_PAY_TYPE varchar(1),
490
					@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(200), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20),@CHECK_IN VARCHAR(15)
491
			DECLARE XmlDataMethod CURSOR FOR
492
			SELECT *
493
			FROM
494
			OPENXML(@hdoc, 'Root/XmlDataMethod',2)
495
			WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2),REQ_PAY_TYPE varchar(1),
496
			REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), 
497
			ACC_NAME NVARCHAR(200), ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15))
498
			OPEN XmlDataMethod
499
			FETCH NEXT FROM XmlDataMethod 
500
			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
501
			WHILE @@fetch_status=0 
502
			BEGIN
503
				IF(@REQ_PAY_TYPE <>'1')
504
				BEGIN
505
					SET @ISSUED_DT = NULL
506
				END
507
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
508
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
509
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
510
				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,
511
				CREATE_DT,ACC_NO,ACC_NAME,ISSUED_BY,ISSUED_DT,CURRENCY,RATE,CHECK_IN)
512
				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,'',
513
				@p_MAKER_ID,GETDATE(),@ACC_NO,@ACC_NAME,@ISSED_BY, CONVERT(DATE, @ISSUED_DT, 103),@CURRENCY,@RATE,@CHECK_IN)
514
			IF @@error<>0 GOTO ABORT;
515
			FETCH NEXT FROM XmlDataMethod 
516
			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
517
			END
518
			CLOSE XmlDataMethod;
519
			DEALLOCATE XmlDataMethod
520
		----END INSERT PHƯƠNG THỨC THANH TOÁN
521
		----INSERT VAO BANG DS KHACH HANG
522
			DECLARE XmlDataCus CURSOR FOR
523
			SELECT *
524
			FROM
525
			OPENXML(@hdoc, '/Root/XmlDataCus', 2)
526
			WITH(CUS_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO DECIMAL(18,2),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
527
			OPEN XmlDataCus;
528
			FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
529
				WHILE @@fetch_status=0 
530
				BEGIN		
531
					INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
532
					VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
533
				--- END KHAI BAO CURSOR
534
				IF @@error<>0 GOTO ABORT;
535
				FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
536
				END
537
				CLOSE XmlDataCus;
538
				DEALLOCATE XmlDataCus;
539
		----END
540
			-- HANG MUC CHI PHI VA NGAN SACH
541
			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)
542
			DECLARE XmlDataGood CURSOR FOR
543
			SELECT *
544
			FROM
545
			OPENXML(@hdoc, 'Root/XmlDataGood',2) 
546
			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))
547
			OPEN XmlDataGood
548
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
549
			WHILE @@fetch_status=0 BEGIN
550
				--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
551
				SET @INDEX_NS = @INDEX_NS +1
552
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
553
				--IF(@p_TYPE_FUNCTION ='SEND')
554
				--BEGIN
555
				--IF((@AMT_EXE  > @AMT_REMAIN_GD))
556
				--BEGIN
557
				--		ROLLBACK TRANSACTION
558
				--		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
559
				--		RETURN '-1'
560
				--END
561
				--END
562
				IF(@p_TYPE_FUNCTION ='SEND')
563
				BEGIN
564
				IF(ISNULL(@AMT_EXE,0) =0)
565
				BEGIN
566
					ROLLBACK TRANSACTION
567
						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ế phải lớn hơn không.' ErrorDesc
568
						RETURN '-1'
569
				END
570
				IF((@AMT_EXE  > @AMT_REMAIN_GD) AND ((SELECT GD_TYPE_ID FROM CM_GOODS WHERE GD_ID =@GD_ID) ='NS'))
571
				BEGIN
572
						ROLLBACK TRANSACTION
573
						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
574
						RETURN '-1'
575
				END		
576
			END
577
				DECLARE @p_BUDGET_ID VARCHAR(15);
578
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
579
				IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
580
				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) 
581
				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)
582
			IF @@error<>0 GOTO ABORT;
583
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
584
			END;
585
		CLOSE XmlDataGood;
586
		DEALLOCATE XmlDataGood;
587
		--- END INSERT NGAN SACH
588
		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)
589
		DECLARE XmlAttach CURSOR FOR
590
		SELECT *
591
		FROM
592
		OPENXML(@hdoc, 'Root/XmlAttach',2) 
593
		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))
594
		OPEN XmlAttach
595
		--INSERT CHUNG TU DINH KEM
596
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
597
				WHILE @@fetch_status=0 
598
				BEGIN
599
					IF (@REF_DT='')
600
					BEGIN
601
						SET @REF_DT = NULL
602
					END
603
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
604
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
605
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT) VALUES
606
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT, CONVERT(DATE, @REF_DT,103))
607
				IF @@error<>0 GOTO ABORT;
608
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
609
				END
610
				CLOSE XmlAttach;
611
				DEALLOCATE XmlAttach;
612
		----END
613
		--- BAT DAU VALIDATE
614
		IF(@p_TYPE_FUNCTION ='SEND')
615
		BEGIN
616
			DECLARE @SUM_PTTT DECIMAL(18,0), @SUM_NS DECIMAL(18,0),@SUM_LICH_TT DECIMAL(18,0)
617
			SET @SUM_PTTT =(SELECT SUM(TOTAL_AMT * ISNULL(RATE,1)) FROM  TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
618
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID) AND @p_REQ_TYPE ='D')
619
			BEGIN
620
				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)
621
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_LICH_TT,0))
622
				BEGIN
623
					ROLLBACK TRANSACTION
624
					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
625
					RETURN '-1'
626
				END
627
			END
628
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
629
			BEGIN
630
				SET @SUM_NS =(SELECT SUM(AMT_EXE * ISNULL(RATE,1)) FROM  TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
631
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
632
				BEGIN
633
					ROLLBACK TRANSACTION
634
					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
635
					RETURN '-1'
636
				END
637
			END
638
			ELSE
639
			IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
640
			BEGIN
641
				ROLLBACK TRANSACTION
642
				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
643
				RETURN '-1'
644
			END
645
			
646
		END
647
		----END
648
		--- INSERT SẴN VÀO BẢNG TR_REQUEST_PROCESS
649
			IF(@p_REQ_TYPE ='I')
650
			BEGIN
651
				DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT DECIMAL(18,0))
652
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
653
				BEGIN
654
					--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'
655
					IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE (DEP_CODE LIKE '%06908%' OR DEP_CODE ='0690605') AND DEP_ID =@p_DEP_ID)
656
					BEGIN
657
						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'
658
					END
659
					ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
660
					BEGIN
661
						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'
662
					END
663
					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)
664
					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) 
665
					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))
666
					BEGIN
667
						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')
668
					END
669
					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)
670
					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) 
671
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
672
					BEGIN
673
						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'
674
					END
675
					ELSE
676
					BEGIN
677
						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'
678
					END
679
				END
680
				ELSE
681
				BEGIN
682
					IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
683
					BEGIN
684
						--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
685
						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
686
						--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'
687
					END
688
					ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
689
					BEGIN
690
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'
691
						--AND BRANCH_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE)
692
						AND BRANCH_ID = @p_BRANCH_CREATE
693
						--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'
694
					END
695
				END
696
				DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
697
				SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
698
				DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
699
				DECLARE CUR_PR CURSOR FOR  SELECT A.ROLE_ID, A.BRANCH_ID,A.AMT FROM @tmp A
700
				OPEN CUR_PR
701
				FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
702
				WHILE @@FETCH_STATUS =0 --AND @STOP=0
703
				BEGIN								
704
					SET @INDEX= @INDEX+1
705
					IF @INDEX = @SL_ROLE
706
						SET @ISLEAF = 'Y'
707
					ELSE
708
						SET @ISLEAF = 'N'
709
					SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
710

    
711
					IF(@INDEX=1 )
712
					BEGIN		
713
						SET @PARENT_ID = NULL
714
						SET @STATUS = 'C'							
715
						--INSERT INTO TR_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),'C',@ROLE_ID,@BRANCH_ID,NULL,NULL,NULL,@ISLEAF)
716
					END				
717
					ELSE 
718
					BEGIN
719
						SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
720
						SET @STATUS = 'U'
721
					END
722
						IF(@LIMIT_VALUE >= @p_REQ_AMT)
723
						BEGIN
724
							INSERT INTO dbo.PL_REQUEST_PROCESS
725
							(
726
								REQ_ID,
727
								PROCESS_ID,
728
								STATUS,
729
								ROLE_USER,
730
								BRANCH_ID,
731
								CHECKER_ID,
732
								APPROVE_DT,
733
								PARENT_PROCESS_ID,
734
								IS_LEAF, COST_ID, DVDM_ID, NOTES
735
							)
736
							VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
737
							--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y')
738
							BREAK;
739
						END
740
						ELSE
741
							INSERT INTO PL_REQUEST_PROCESS (
742
								REQ_ID,
743
								PROCESS_ID,
744
								STATUS,
745
								ROLE_USER,
746
								BRANCH_ID,
747
								CHECKER_ID,
748
								APPROVE_DT,
749
								PARENT_PROCESS_ID,
750
								IS_LEAF, COST_ID, DVDM_ID, NOTES
751
							) VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
752
					--END
753
					
754
					FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
755
				END
756
				CLOSE CUR_PR
757
				DEALLOCATE CUR_PR
758
			END
759
			--- CAP NHAT THANG CUOI CUNG LA Y
760
			--UPDATE TR_REQUEST_PROCESS SET IS_LEAF='Y' WHERE ID = (SELECT MAX(ID) FROM TR_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID)
761
		COMMIT TRANSACTION
762
		IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
763
		BEGIN
764
				--ROLLBACK TRANSACTION
765
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
766
				--UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
767
				--INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
768
				--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')
769
				--SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
770
				--RETURN '4'
771
				IF(@p_TYPE_FUNCTION ='SEND') -- KIEM TRA NEU 2 BIEN XML KHAC NULL TUC LA DANG TRONG QUA TRINH LUU NHAP
772
				BEGIN
773
				DECLARE @BRANCH_TYPE_CR VARCHAR(15)
774
				SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
775
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL AND REQ_PAY_ID =@p_REQ_PAY_ID) AND @BRANCH_TYPE_CR ='HS' AND @p_REQ_TYPE ='I')
776
				BEGIN
777
					DECLARE @USER_TP VARCHAR(15) =''
778
					--SET @USER_TP =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID 
779
					--		AND (RoleName IN ('GDDV','TPTC','TC','KTT') OR RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='GDDV')))
780
					IF(@USER_TP IS NULL OR @USER_TP ='')
781
					BEGIN
782
						SET @USER_TP = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE SECUR_CODE =@p_DEP_ID 
783
							AND (RoleName IN ('GDDV','TPTC','TC','KTT')))
784
					END
785
					UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TP WHERE REQ_PAY_ID =@p_REQ_PAY_ID
786
				END
787
				ELSE IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL AND REQ_PAY_ID =@p_REQ_PAY_ID) AND @BRANCH_TYPE_CR ='PGD' AND @p_REQ_TYPE ='I')
788
				BEGIN
789
					DECLARE @USER_TPGD VARCHAR(15) =''
790
					SET @USER_TPGD =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND RoleName IN ('TPGD'))
791
					--SET @USER_TPGD =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND (RoleName IN ('TPGD') OR
792
					--RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='TPGD')))
793
					IF(@USER_TPGD IS NULL OR @USER_TPGD ='')
794
					BEGIN
795
						SET @USER_TPGD = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE TLSUBBRID =@p_BRANCH_CREATE 
796
							AND RoleName ='TPGD')
797
					END
798
					UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TPGD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
799
				END
800
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID  =@p_REQ_PAY_ID AND AUTH_STATUS='U'))
801
				BEGIN
802
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đã được gửi phê duyệt trước đó! Vui lòng đợi các cấp phê duyệt' ErrorDesc
803
					RETURN '-1'
804
				END
805
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE TRASFER_USER_RECIVE <> '' AND TRASFER_USER_RECIVE IS NOT NULL AND REQ_PAY_ID =@p_REQ_PAY_ID) AND @BRANCH_TYPE_CR ='PGD' AND @p_REQ_TYPE <>'I')
806
				BEGIN
807
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Ở cấp độ phòng giao dịch. Vui lòng không được chọn cấp phê duyệt trung gian' ErrorDesc
808
					RETURN '-1'
809
				END
810
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
811
				UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U', PROCESS = NULL WHERE REQ_PAY_ID =@p_REQ_PAY_ID
812
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
813
				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')
814
				SELECT '4' as Result, '' REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
815
				RETURN '4'
816
			END
817
		END
818
		SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,@p_REQ_PAY_CODE AS REQ_PAY_CODE, '' ErrorDesc
819
		RETURN '0'
820
ABORT:
821
BEGIN
822
		ROLLBACK TRANSACTION
823
		SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, '' ErrorDesc
824
		RETURN '-1'
825
End
826
¿
827

    
828
ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Upd]
829
@p_REQ_PAY_ID	varchar(15)= NULL,
830
@p_REQ_PAY_CODE	varchar(50)	= NULL,
831
@p_REQ_DT VARCHAR(20)= NULL,
832
@p_BRANCH_ID	varchar(15)	= NULL,
833
@p_DEP_ID	varchar(15)	= NULL,
834
@p_REQ_REASON	nvarchar(MAX)	= NULL,
835
@p_REQ_TYPE	varchar(15)	= NULL,
836
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
837
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
838
@p_REF_ID	varchar(15)	= NULL,
839
@p_RECEIVER_PO	nvarchar(250)	= NULL,
840
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
841
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
842
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
843
@p_REQ_AMT	decimal(18, 0)	= NULL,
844
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
845
@p_MAKER_ID	varchar(15)	= NULL,
846
@p_CREATE_DT	varchar(25)	= NULL,
847
@p_EDITOR_ID	varchar(15)	= NULL,
848
@p_AUTH_STATUS	varchar(1)	= NULL,
849
@p_CHECKER_ID	varchar(15)	= NULL,
850
@p_APPROVE_DT	varchar(25)	= NULL,
851
@p_CREATE_DT_KT	varchar(25)	= NULL,
852
@p_MAKER_ID_KT	varchar(15)	= NULL,
853
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
854
@p_CHECKER_ID_KT	varchar(1)	= NULL,
855
@p_APPROVE_DT_KT  varchar(25)= null,
856
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
857
@p_BRANCH_CREATE	varchar(15)	= NULL,
858
@p_NOTES	varchar(15)	= NULL,
859
@p_RECORD_STATUS	varchar(1)	= NULL,
860
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
861
@p_TRANSFER_DT	varchar(25)	= NULL,
862
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
863
@p_PROCESS	varchar(15)	= NULL,
864
@p_PAY_PHASE VARCHAR(15)= NULL,
865
@p_DVDM_ID VARCHAR(15)= NULL,
866
@p_RATE DECIMAL(18,0) =0,
867
@p_RECIVER_MONEY VARCHAR(15)= NULL,
868
@p_XMP_TEMP XML = NULL,
869
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
870
@p_IS_PERIOD VARCHAR(5) = NULL
871
AS
872
--Validation is here
873
/*
874
DECLARE @ERRORSYS NVARCHAR(15) = '' 
875
  IF ( NOT EXISTS ( SELECT * FROM ASS_COLLECT WHERE ))
876
	 SET @ERRORSYS = ''
877
IF @ERRORSYS <> '' 
878
BEGIN
879
	SELECT ErrorCode Result, ''  CAR_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
880
	RETURN '0'
881
END 
882
*/
883
	--Luanlt-2019/10/15 Disable Validation
884
	--DECLARE @ERRORSYS NVARCHAR(15) = '' 
885
	--IF EXISTS(SELECT * FROM TR_PO_MASTER WHERE REF_ID  = @p_REF_ID )
886
	--BEGIN
887
	--	SET @ERRORSYS = 'ASSC-00005'
888
	--	SELECT ErrorCode Result, '' REQ_PAY_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
889
	--	RETURN '-1'
890
	--END
891

    
892
	DECLARE @BRANCH_TYPE_CR VARCHAR(15), @ROLE_KI_NHAY VARCHAR(50)
893
	--SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
894
	--IF(@ROLE_KI_NHAY IS NOT NULL AND @ROLE_KI_NHAY <> '' AND @ROLE_KI_NHAY IN ('TP','GDDV','KTT','TPTC','TC'))
895
	--BEGIN
896
	--	SELECT '-1' Result, '' REQ_PAY_ID, N'Bạn không được phép chọn cấp trưởng đơn vị làm cấp phê duyệt trung gian. Vui lòng bỏ qua hoặc chọn cấp phó phòng, trưởng bộ phận' ErrorDesc
897
	--	RETURN '-1'
898
	--END
899
		SET  @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER WHERE TLNANME =@p_TRASFER_USER_RECIVE)
900
		IF(@ROLE_KI_NHAY IS NOT NULL AND @ROLE_KI_NHAY <>'' AND @ROLE_KI_NHAY IN ('TPGD','GDDV','PGD','PTGD','TGD','HDQT','TP','PP','TBP','KTT','GDK','KSV','TC','NVTC','TPTC'))
901
		BEGIN
902
		PRINT @ROLE_KI_NHAY
903
		END
904
		ELSE
905
		BEGIN
906
		SET @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
907
		IF(@ROLE_KI_NHAY IS NULL OR @ROLE_KI_NHAY ='')
908
		BEGIN
909
				SET @ROLE_KI_NHAY =(SELECT TOP 1 ROLE_NEW FROM TL_SYS_ROLE_MAPPING WHERE ROLE_OLD =(SELECT TOP 1 ROLENAME FROM TL_USER WHERE TLNANME=@p_TRASFER_USER_RECIVE))
910
		END
911
		END
912
		--SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
913
		IF(@ROLE_KI_NHAY IS NOT NULL AND @ROLE_KI_NHAY <> '' AND @ROLE_KI_NHAY IN ('TP','GDDV','KTT','TPTC','TC','TPGD')  AND @p_REQ_TYPE <> 'I')
914
		BEGIN
915
			SELECT '-1' Result, '' REQ_PAY_ID, N'Bạn không được phép chọn cấp trưởng đơn vị làm cấp phê duyệt trung gian. Vui lòng bỏ qua hoặc chọn cấp phó phòng, trưởng bộ phận' ErrorDesc
916
			RETURN '-1'
917
		END
918
	SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
919
	DECLARE @ACC_NUM VARCHAR(15)
920
	SET @ACC_NUM = (SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)
921
	IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''
922
	BEGIN
923
		SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu không được để trống' ErrorDesc
924
		RETURN '-1'
925
	END
926
	IF (@p_REQ_TYPE='I' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT =''))
927
	BEGIN
928
		SELECT '-1' Result, '' REQ_PAY_ID, N'Tài khoản nhân viên tạm ứng không được để trống' ErrorDesc
929
		RETURN '-1'
930
	END
931
	IF EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_CODE = @p_REQ_PAY_CODE AND REQ_PAY_ID <> @p_REQ_PAY_ID)
932
	BEGIN
933
		SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu đã tồn tại trong hệ thống' ErrorDesc
934
		RETURN '-1'
935
	END
936
	--IF(((SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)<>@p_RECEIVER_DEBIT) AND @p_REQ_TYPE='I')
937
	--IF(@ACC_NUM <>@p_RECEIVER_DEBIT AND @p_REQ_TYPE='I' AND LEN(ISNULL(@ACC_NUM,''))>0)
938
	--BEGIN
939
	--	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
940
	--	RETURN '-1'
941
	--END
942
	--IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) AND @p_REQ_TYPE='I')
943
	--	BEGIN
944
	--		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')
945
	--	END
946
	--ELSE
947
	--	BEGIN
948
	--		IF(@ACC_NUM <>@p_RECEIVER_DEBIT AND @p_REQ_TYPE='I' AND LEN(ISNULL(@ACC_NUM,''))>0)
949
	--		BEGIN
950
	--			--ROLLBACK TRANSACTION
951
	--			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
952
	--			RETURN '-1'
953
	--		END
954
	--END
955
	--IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM =@p_RECEIVER_DEBIT AND REF_ID = @p_REF_ID AND @p_REQ_TYPE='I'))
956
	--BEGIN
957

    
958
	--			SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản tạm ứng số '+ @p_RECEIVER_DEBIT + N' không phải tài khoản của user: '+@p_REF_ID  ErrorDesc
959
	--			RETURN '-1'
960
	--END
961
	IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM =@p_RECEIVER_DEBIT AND REF_ID =  @p_REF_ID) AND @p_REQ_TYPE='I')
962
	BEGIN
963
				ROLLBACK TRANSACTION
964
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản tạm ứng số '+ @p_RECEIVER_DEBIT + N' không phải tài khoản của user: '+@p_REF_ID  ErrorDesc
965
				RETURN '-1'
966
	END
967
	IF(LEN(ISNULL(@p_RECEIVER_DEBIT,''))>15 AND @p_REQ_TYPE ='I')
968
	BEGIN
969
				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
970
				RETURN '-1'
971
	END
972
	-- 19-11-2019 LUCTV BO SUNG VALIDATE TRONG QUA TRINH TEST SAU KHI UAT
973
	-- NEU TAM UNG CHO NHA CUNG CAP THI DOT THANH TOAN KHONG DUOC PHEP NULL
974
	-- SO TIEN THANH TOÁN PHAI LON HON KHONG
975
		IF(@p_REQ_AMT <=0)
976
		BEGIN	
977
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền tạm ứng phải lớn hơn 0' ErrorDesc
978
			RETURN '-1'
979
		END
980
	 -- END VALIDATE TRONG QUA TRINH TEST UAT
981
		BEGIN TRANSACTION
982
		--IF(@p_DVDM_ID IS NULL OR @p_DVDM_ID ='')
983
		--BEGIN
984
		--	SET @p_DVDM_ID = (SELECT TOP 1 DVDM_ID FROM CM_DVDM WHERE DVDM_NAME ='KHOI TAI CHINH')
985
		--END
986
		UPDATE TR_REQ_ADVANCE_PAYMENT SET 
987
		REF_ID = @p_REF_ID,
988
		DEP_ID= @p_DEP_ID,REQ_REASON = @p_REQ_REASON, REQ_PAY_TYPE = @p_REQ_PAY_TYPE,
989
		REQ_AMT = @p_REQ_AMT,
990
		NOTES= @p_NOTES,
991
		REQ_TYPE= @p_REQ_TYPE,REQ_DESCRIPTION = @p_REQ_DESCRIPTION,RECEIVER_PO =@p_RECEIVER_PO, RECEIVER_DEBIT= @p_RECEIVER_DEBIT,
992
		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,
993
		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
994
		WHERE REQ_PAY_ID =@p_REQ_PAY_ID
995
		IF @@Error <> 0 GOTO ABORT
996
		--- INSERT VÀO BẢNG DETAIL NÊU TẠM ỨNG LÀ TẠM ỨNG THANH TOÁN
997
			DECLARE @hdoc INT
998
			EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
999
			
1000
			-- KIEM TRA NEU TAM UNG THANH TOAN
1001
			IF((@p_REQ_TYPE='P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE='D')
1002
			BEGIN
1003
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID=@p_REQ_PAY_ID
1004
				DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID=@p_REQ_PAY_ID
1005
				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,2),
1006
				@AMT_REMAIN_SCHEDULE decimal(18,0),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),
1007
				@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),
1008
				@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)
1009
				DECLARE XmlDataPO CURSOR FOR
1010
				SELECT *
1011
				FROM
1012
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
1013
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
1014
				OPEN XmlDataPO;
1015
				DECLARE @INDEX_PO INT =0
1016
				SET @INDEX_PO = 0
1017
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1018
				WHILE @@fetch_status=0 
1019
				BEGIN
1020
					SET @INDEX_PO = @INDEX_PO +1
1021
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1022
					IF(@p_TYPE_FUNCTION ='SEND')
1023
					BEGIN
1024
					
1025
					
1026
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1027
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
1028
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
1029
					BEGIN
1030
						ROLLBACK TRANSACTION
1031
						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ố '+
1032
						(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
1033
						RETURN '-1'
1034
					END
1035
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1036
					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))
1037
					BEGIN
1038
						ROLLBACK TRANSACTION
1039
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
1040
						(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
1041
						RETURN '-1'
1042
					END
1043
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1044
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
1045
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
1046
					BEGIN
1047
						ROLLBACK TRANSACTION
1048
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1049
						(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
1050
						RETURN '-1'
1051
					END
1052
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1053
					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))
1054
					BEGIN
1055
						ROLLBACK TRANSACTION
1056
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1057
						(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
1058
						RETURN '-1'
1059
					END
1060
					--- KIEM TRA XEM PO NAY DUOC THANH TOAN HAY CHUA
1061
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REF_ID IN (SELECT PO_ID FROM TR_PO_MASTER WHERE IS_CLOSED ='Y' )))
1062
					BEGIN
1063
						ROLLBACK TRANSACTION
1064
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1065
						(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đã được thanh toán. Vui lòng hủy bản nháp!' ErrorDesc
1066
						RETURN '-1'
1067
					END
1068
					END
1069
					DECLARE @REQ_PAYDTID VARCHAR(15);
1070
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
1071
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
1072
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
1073
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
1074
				IF @@error<>0 GOTO ABORT;
1075
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1076
				END
1077
				CLOSE XmlDataPO;
1078
				DEALLOCATE XmlDataPO;
1079
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
1080
				DECLARE XmlDataSchedule CURSOR FOR
1081
				SELECT *
1082
				FROM
1083
				OPENXML(@hdoc, 'Root/XmlDataSchedule',2)
1084
				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,2),
1085
				AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
1086
				REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
1087
				OPEN XmlDataSchedule
1088
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
1089
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
1090
				WHILE @@fetch_status=0 
1091
				BEGIN
1092
					DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
1093
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
1094
					IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
1095
					INSERT INTO TR_REQ_PAY_SCHEDULE(
1096
					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,
1097
					CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE, AMT_PAY_REAL)
1098
					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,
1099
					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)
1100
				--- END KHAI BAO CURSOR
1101
				IF @@error<>0 GOTO ABORT;
1102
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
1103
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
1104
				END
1105
				CLOSE XmlDataSchedule;
1106
				DEALLOCATE XmlDataSchedule;
1107
			END
1108
		--- END TẠM ỨNG THANH TOÁN
1109
		---- TẠM ỨNG HĐ ĐỊNH KÌ
1110
			IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
1111
			BEGIN
1112
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1113
				DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1114
				DECLARE XmlDataPO CURSOR FOR
1115
				SELECT *
1116
				FROM
1117
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
1118
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
1119
				OPEN XmlDataPO;
1120
				SET @INDEX_PO = 0
1121
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1122
				WHILE @@fetch_status=0 
1123
				BEGIN
1124
					SET @INDEX_PO = @INDEX_PO +1
1125
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
1126
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
1127
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
1128
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
1129
					(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
1130
				IF @@error<>0 GOTO ABORT;
1131
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1132
				END
1133
				CLOSE XmlDataPO;
1134
				DEALLOCATE XmlDataPO;
1135
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
1136
			----------------------------
1137
			--INSERT FROM PERIOD	
1138
				DECLARE XmlDataPeriod CURSOR FOR
1139
				SELECT *
1140
				FROM
1141
				OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)
1142
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
1143
				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) )
1144
				OPEN XmlDataPeriod;
1145
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
1146
				@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)
1147
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
1148
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
1149
				WHILE @@fetch_status=0 
1150
				BEGIN
1151
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1152
					IF(@p_TYPE_FUNCTION ='SEND')
1153
					BEGIN
1154
					
1155
					--IF(EXISTS(SELECT CONTRACT_ID 
1156
					--FROM TR_CONTRACT 
1157
					--WHERE CONTRACT_ID = @REF_ID AND CONVERT(DATE,END_DT,103) < CONVERT(DATE,GETDATE(),103) AND END_DT IS NOT NULL AND CONT_TYPE ='DK' AND CONT_TYPE IS NOT NULL AND  CONT_TYPE <>''))
1158
					
1159
					----AND IS_CLOSED='Y' ))
1160
					--BEGIN
1161
					--	ROLLBACK TRANSACTION
1162
					--	SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tạm ứng hợp đồng định kì đã đóng' ErrorDesc
1163
					--	RETURN '-1'
1164
					--END
1165

    
1166
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0)
1167
					BEGIN
1168
						ROLLBACK TRANSACTION
1169
						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
1170
						RETURN '-1'
1171
					END
1172
					END
1173
					DECLARE @PERIOD_ID VARCHAR(15);
1174
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
1175
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
1176
					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)
1177
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'ADV_PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),
1178
				@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)
1179
			IF @@error<>0 GOTO ABORT;
1180
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
1181
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
1182
			END
1183
			CLOSE XmlDataPeriod;
1184
			DEALLOCATE XmlDataPeriod;
1185
			-- VALIDATE SO TIEN
1186
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
1187
			--BEGIN
1188
			--	ROLLBACK TRANSACTION
1189
			--	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
1190
			--	RETURN '-1'
1191
			--END
1192
			----
1193
			END
1194
		---- END TẠM ỨNG HĐ ĐỊNH KÌ
1195
		--- INSERT PHƯƠNG THỨC THANH TOÁN
1196
		----MethodCursor
1197
			DELETE FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1198
			DECLARE @RECEIVE_ID varchar(15),@RECEIVE_NAME nvarchar(100),@REQ_PAY_REASON nvarchar(MAX),@TOTAL_AMT_METHOD decimal(18,2),@REQ_PAY_TYPE varchar(1),
1199
					@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(250), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20)
1200
			DECLARE XmlDataMethod CURSOR FOR
1201
			SELECT *
1202
			FROM
1203
			OPENXML(@hdoc, 'Root/XmlDataMethod',2)
1204
			WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2),REQ_PAY_TYPE varchar(1),
1205
			REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), ACC_NAME NVARCHAR(250), 
1206
			ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15))
1207
			OPEN XmlDataMethod
1208
			FETCH NEXT FROM XmlDataMethod 
1209
			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 
1210
			WHILE @@fetch_status=0 
1211
			BEGIN
1212
				IF(@REQ_PAY_TYPE<>'1')
1213
				BEGIN
1214
					SET @ISSUED_DT = NULL
1215
				END
1216
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
1217
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
1218
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
1219
				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,
1220
				CREATE_DT,ACC_NO,ACC_NAME,ISSUED_BY,ISSUED_DT,CURRENCY,RATE,CHECK_IN)
1221
				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,'',
1222
				@p_MAKER_ID,GETDATE(),@ACC_NO,@ACC_NAME,@ISSED_BY, CONVERT(DATE, @ISSUED_DT, 103),@CURRENCY,@RATE,@CHECK_IN)
1223
			IF @@error<>0 GOTO ABORT;
1224
			FETCH NEXT FROM XmlDataMethod 
1225
			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
1226
			END
1227
			CLOSE XmlDataMethod;
1228
			DEALLOCATE XmlDataMethod
1229
		----END INSERT PHƯƠNG THỨC THANH TOÁN
1230
		----INSERT VAO BANG DS KHACH HANG
1231
			DELETE FROM TR_REQ_ADVANCE_CUS WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1232
			DECLARE XmlDataCus CURSOR FOR
1233
			SELECT *
1234
			FROM
1235
			OPENXML(@hdoc, '/Root/XmlDataCus', 2)
1236
			WITH(CUS_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO decimal(18,2),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
1237
			OPEN XmlDataCus;
1238
			FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
1239
				WHILE @@fetch_status=0 
1240
				BEGIN		
1241
					INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
1242
					VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
1243
				--- END KHAI BAO CURSOR
1244
				IF @@error<>0 GOTO ABORT;
1245
				FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
1246
				END
1247
				CLOSE XmlDataCus;
1248
				DEALLOCATE XmlDataCus;
1249
		----END
1250
		-- HANG MUC CHI PHI VA NGAN SACH
1251
			DELETE FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1252
			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)
1253
			DECLARE XmlDataGood CURSOR FOR
1254
			SELECT *
1255
			FROM
1256
			OPENXML(@hdoc, 'Root/XmlDataGood',2) 
1257
			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))
1258
			OPEN XmlDataGood
1259
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
1260
			WHILE @@fetch_status=0 BEGIN
1261
				--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
1262
				SET @INDEX_NS = @INDEX_NS +1
1263
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1264
				--IF(@p_TYPE_FUNCTION ='SEND')
1265
				--BEGIN
1266
				--IF((@AMT_EXE  > @AMT_REMAIN_GD))
1267
				--BEGIN
1268
				--		ROLLBACK TRANSACTION
1269
				--		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
1270
				--		RETURN '-1'
1271
				--END	
1272
				--END
1273
				IF(@p_TYPE_FUNCTION ='SEND')
1274
				BEGIN
1275
				IF(ISNULL(@AMT_EXE,0) =0)
1276
				BEGIN
1277
					ROLLBACK TRANSACTION
1278
						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ế phải lớn hơn không.' ErrorDesc
1279
						RETURN '-1'
1280
				END
1281
				--IF((@AMT_EXE  > @AMT_REMAIN_GD) AND ((SELECT GD_TYPE_ID FROM CM_GOODS WHERE GD_ID =@GD_ID) ='NS'))
1282
				--BEGIN
1283
				--		ROLLBACK TRANSACTION
1284
				--		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
1285
				--		RETURN '-1'
1286
				--END		
1287
			END
1288
				DECLARE @p_BUDGET_ID VARCHAR(15);
1289
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
1290
				IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
1291
				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) 
1292
				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)
1293
			IF @@error<>0 GOTO ABORT;
1294
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
1295
			END;
1296
		CLOSE XmlDataGood;
1297
		DEALLOCATE XmlDataGood;
1298
		--- END INSERT NGAN SACH
1299
		DELETE FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1300
		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)
1301
		DECLARE XmlAttach CURSOR FOR
1302
		SELECT *
1303
		FROM
1304
		OPENXML(@hdoc, 'Root/XmlAttach',2) 
1305
		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))
1306
		OPEN XmlAttach
1307
		--INSERT CHUNG TU DINH KEM
1308
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
1309
				WHILE @@fetch_status=0 
1310
				BEGIN
1311
					IF (@REF_DT='')
1312
					BEGIN
1313
						SET @REF_DT = NULL
1314
					END
1315
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
1316
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
1317
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT) VALUES
1318
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT, CONVERT(DATE, @REF_DT,103))
1319
				IF @@error<>0 GOTO ABORT;
1320
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
1321
				END
1322
				CLOSE XmlAttach;
1323
				DEALLOCATE XmlAttach;
1324
		----END
1325
		--- BAT DAU VALIDATE
1326
		IF(@p_TYPE_FUNCTION ='SEND')
1327
		BEGIN
1328
			DECLARE @SUM_PTTT DECIMAL(18,0), @SUM_NS DECIMAL(18,0),@SUM_LICH_TT DECIMAL(18,0)
1329
			SET @SUM_PTTT =(SELECT SUM(TOTAL_AMT * ISNULL(RATE,1)) FROM  TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1330
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID) AND @p_REQ_TYPE ='D')
1331
			BEGIN
1332
				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)
1333
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_LICH_TT,0))
1334
				BEGIN
1335
					ROLLBACK TRANSACTION
1336
					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
1337
					RETURN '-1'
1338
				END
1339
			END
1340
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
1341
			BEGIN
1342
				SET @SUM_NS =(SELECT SUM(AMT_EXE * ISNULL(RATE,1)) FROM  TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1343
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
1344
				BEGIN
1345
					ROLLBACK TRANSACTION
1346
					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
1347
					RETURN '-1'
1348
				END
1349
			END
1350
			ELSE
1351
			IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
1352
			BEGIN
1353
				ROLLBACK TRANSACTION
1354
				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
1355
				RETURN '-1'
1356
			END
1357
			
1358
		END
1359
		----END
1360
		IF(@p_REQ_TYPE ='I')
1361
			BEGIN
1362
				DELETE FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID
1363
				DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT decimal(18,2))
1364
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
1365
				BEGIN
1366
					--DECLARE @DEP_CODE VARCHAR(15)
1367
					--SET @DEP_CODE =(SELECT * FROM CM_DEPARTMENT WHERE DEP_ID =@p_DEP_ID)
1368
					IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE (DEP_CODE LIKE '%06908%' OR DEP_CODE ='0690605') AND DEP_ID =@p_DEP_ID)
1369
					BEGIN
1370
						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'
1371
					END
1372
					ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
1373
					BEGIN
1374
						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'
1375
					END
1376
					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)
1377
					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) 
1378
					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))
1379
					BEGIN
1380
						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')
1381
					END
1382
					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)
1383
					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) 
1384
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
1385
					BEGIN
1386
						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'
1387
					END
1388
					ELSE
1389
					BEGIN
1390
						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'
1391
					END
1392
				END
1393
				ELSE
1394
				BEGIN
1395
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
1396
					BEGIN
1397
						--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
1398
						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
1399
						--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'
1400
				END
1401
				ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
1402
					BEGIN
1403
						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
1404
						--BRANCH_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE)
1405
						--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'
1406
				END
1407
				END
1408
				DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
1409
				SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
1410
				DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
1411
				DECLARE CUR_PR CURSOR FOR  SELECT A.ROLE_ID, A.BRANCH_ID,A.AMT FROM @tmp A
1412
				OPEN CUR_PR
1413
				FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
1414
				WHILE @@FETCH_STATUS =0 --AND @STOP=0
1415
				BEGIN								
1416
					SET @INDEX= @INDEX+1
1417
					IF @INDEX = @SL_ROLE
1418
						SET @ISLEAF = 'Y'
1419
					ELSE
1420
						SET @ISLEAF = 'N'
1421
					SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
1422

    
1423
					IF(@INDEX=1 )
1424
					BEGIN		
1425
						SET @PARENT_ID = NULL
1426
						SET @STATUS = 'C'							
1427
						--INSERT INTO TR_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),'C',@ROLE_ID,@BRANCH_ID,NULL,NULL,NULL,@ISLEAF)
1428
					END				
1429
					ELSE 
1430
					BEGIN
1431
						SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
1432
						SET @STATUS = 'U'
1433
					END
1434
						IF(@LIMIT_VALUE >= @p_REQ_AMT)
1435
						BEGIN
1436
							INSERT INTO dbo.PL_REQUEST_PROCESS
1437
							(
1438
								REQ_ID,
1439
								PROCESS_ID,
1440
								STATUS,
1441
								ROLE_USER,
1442
								BRANCH_ID,
1443
								CHECKER_ID,
1444
								APPROVE_DT,
1445
								PARENT_PROCESS_ID,
1446
								IS_LEAF, COST_ID, DVDM_ID, NOTES
1447
							)
1448
							VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
1449
							--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y')
1450
							BREAK;
1451
						END
1452
						ELSE
1453
							INSERT INTO PL_REQUEST_PROCESS (
1454
								REQ_ID,
1455
								PROCESS_ID,
1456
								STATUS,
1457
								ROLE_USER,
1458
								BRANCH_ID,
1459
								CHECKER_ID,
1460
								APPROVE_DT,
1461
								PARENT_PROCESS_ID,
1462
								IS_LEAF, COST_ID, DVDM_ID, NOTES
1463
							) VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
1464
					--END
1465
					
1466
					FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
1467
				END
1468
				CLOSE CUR_PR
1469
				DEALLOCATE CUR_PR
1470
			END
1471
COMMIT TRANSACTION
1472
		IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
1473
		BEGIN
1474
				
1475
				--ROLLBACK TRANSACTION
1476
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
1477
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE (TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL) AND REQ_PAY_ID =@p_REQ_PAY_ID ) AND @BRANCH_TYPE_CR ='HS'  AND @p_REQ_TYPE ='I')
1478
				BEGIN
1479
					DECLARE @USER_TP VARCHAR(15) =''
1480
					--SET @USER_TP =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID 
1481
					--		AND (RoleName IN ('GDDV','TPTC','TC','KTT') OR RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='GDDV')))
1482
					IF(@USER_TP IS NULL OR @USER_TP ='')
1483
					BEGIN
1484
						SET @USER_TP = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE SECUR_CODE =@p_DEP_ID 
1485
							AND (RoleName IN ('GDDV','TPTC','TC','KTT')))
1486
					END
1487
					UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TP WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1488
				END
1489
				--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL AND REQ_PAY_ID =@p_REQ_PAY_ID) AND @BRANCH_TYPE_CR ='PGD' AND @p_REQ_TYPE ='I')
1490
				--BEGIN
1491
				--	DECLARE @USER_TPGD VARCHAR(15) =''
1492
				--	SET @USER_TPGD =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND (RoleName IN ('TPGD')))
1493
				--	IF(@USER_TPGD IS NULL OR @USER_TPGD ='')
1494
				--	BEGIN
1495
				--		SET @USER_TPGD = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE TLSUBBRID =@p_BRANCH_CREATE 
1496
				--			AND RoleName ='TPGD')
1497
				--	END
1498
				--	UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TPGD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1499
				--END
1500
				DECLARE @SUM_THANH_TOAN DECIMAL(18,0) =0, @SUM_PHUONG_THUC DECIMAL(18,0) =0
1501
				SET @SUM_THANH_TOAN =(SELECT ISNULL(SUM(REQ_AMT * ISNULL(RATE,1)),0) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1502
				SET @SUM_PHUONG_THUC =(SELECT ISNULL(SUM(TOTAL_AMT * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1503
				IF(ROUND(@SUM_THANH_TOAN,0) <> ROUND(@SUM_PHUONG_THUC,0))
1504
				BEGIN
1505
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền phương thức thanh toán phải bằng số tiền bạn cần thanh toán là: ' + FORMAT(SUM(@SUM_THANH_TOAN),'#,#', 'vi-VN')  ErrorDesc
1506
					RETURN '-1'
1507
				END
1508
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE TRASFER_USER_RECIVE <>'' AND TRASFER_USER_RECIVE IS NOT NULL AND REQ_PAY_ID =@p_REQ_PAY_ID) AND @BRANCH_TYPE_CR ='PGD' AND @p_REQ_TYPE <>'I')
1509
				BEGIN
1510
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Ở cấp độ phòng giao dịch. Vui lòng không được chọn cấp phê duyệt trung gian' ErrorDesc
1511
					RETURN '-1'
1512
				END
1513
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID  =@p_REQ_PAY_ID AND AUTH_STATUS='U'))
1514
				BEGIN
1515
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đã được gửi phê duyệt trước đó! Vui lòng đợi các cấp phê duyệt' ErrorDesc
1516
					RETURN '-1'
1517
				END
1518
				--IF(NOT EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID  =@p_REQ_PAY_ID AND @p_REQ_TYPE='P' AND (@p_IS_PERIOD IS NULL OR @p_IS_PERIOD ='' OR @p_IS_PERIOD ='N')))
1519
				--BEGIN
1520
				--	SELECT '-1' as Result, '' REQ_PAY_ID, N'Thông tin hạng mục ngân sách và chi phí không được để trống. Vui lòng chọn ngân sách và chi phí' ErrorDesc
1521
				--	RETURN '-1'
1522
				--END
1523
				UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U',CREATE_DT = GETDATE() WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1524
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
1525
				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')
1526
				SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
1527
				RETURN '4'
1528
		END
1529
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
1530
RETURN '0'
1531
ABORT:
1532
BEGIN
1533
		ROLLBACK TRANSACTION
1534
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
1535
		RETURN '-1'
1536
End
1537
¿
1538

    
1539
ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Appr]
1540
--Luanlt 2019/17/10 - Sửa params
1541
@p_REQ_PAY_ID	varchar(15)= NULL,
1542
@p_CHECKER_ID	varchar(15)	= NULL,
1543
@p_AUTH_STATUS varchar(15) = NULL,
1544
@p_COST_ID VARCHAR(15) = NULL
1545
AS
1546
BEGIN TRANSACTION
1547
		DECLARE @BRANCH_CREATE VARCHAR(15), @p_DEP_ID VARCHAR(15) 
1548
		--PRINT @BRANCH_CREATE 
1549
		SET @BRANCH_CREATE =(SELECT BRANCH_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1550
		DECLARE @DEP_CODE_NEXT VARCHAR(15)
1551
		IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_CREATE)<>'HS')
1552
		BEGIN
1553
			SET @p_DEP_ID =(SELECT TOP 1 DEP_ID FROM CM_DEPARTMENT WHERE LEFT(DEP_CODE,5) IN (SELECT TOP 1 LEFT(DVDM_CODE,5) FROM CM_DVDM WHERE DVDM_ID =@p_COST_ID))
1554
			SET @DEP_CODE_NEXT = (SELECT DEP_CODE FROM CM_DEPARTMENT WHERE DEP_ID =@p_DEP_ID)
1555
			--PRINT @DEP_CODE_NEXT
1556
		END
1557
		ELSE
1558
		BEGIN
1559
			SET @p_DEP_ID =(SELECT DEP_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID=@p_REQ_PAY_ID)
1560
			SET @DEP_CODE_NEXT = (SELECT DEP_CODE FROM CM_DEPARTMENT WHERE DEP_ID =@p_DEP_ID)
1561
		END
1562
		IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE MAKER_ID =@p_CHECKER_ID AND REQ_PAY_ID =@p_REQ_PAY_ID)
1563
		BEGIN
1564
			ROLLBACK TRANSACTION
1565
			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
1566
			RETURN '-1'
1567
		END
1568
		-- KIEM TRA NEU DANG TRA VE THI PHAI CHO CAP NHAT LAI THONG TIN MOI DUOC PHEP DUYET
1569
		IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS ='R' AND REQ_PAY_ID =@p_REQ_PAY_ID)
1570
		BEGIN
1571
			ROLLBACK TRANSACTION
1572
			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
1573
			RETURN '-1'
1574
		END
1575
		-- KIEM TRA NEU DANG TRA VE THI PHAI CHO CAP NHAT LAI THONG TIN MOI DUOC PHEP DUYET
1576
		IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT ='R' AND REQ_PAY_ID =@p_REQ_PAY_ID)
1577
		BEGIN
1578
			ROLLBACK TRANSACTION
1579
			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
1580
			RETURN '-1'
1581
		END
1582
		-- KIEM TRA NEU DANG TRA VE THI PHAI CHO CAP NHAT LAI THONG TIN MOI DUOC PHEP DUYET
1583
		IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT ='A' AND REQ_PAY_ID =@p_REQ_PAY_ID)
1584
		BEGIN
1585
			ROLLBACK TRANSACTION
1586
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đã được KSV phê duyệt trước đó' ErrorDesc
1587
			RETURN '-1'
1588
		END
1589
		IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS ='A' AND REQ_PAY_ID =@p_REQ_PAY_ID)
1590
		BEGIN
1591
			ROLLBACK TRANSACTION
1592
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đã được phê duyệt trước đó' ErrorDesc
1593
			RETURN '-1'
1594
		END
1595
		--- KHAI BAO CHUUNG
1596
		   DECLARE @ROLE_ID VARCHAR(200), @BRANCH_TYPE VARCHAR(15), @TOTAL_ADVANCE DECIMAL(18,0), @TOTAL_PAYBACK DECIMAL(18,0), @BRANCH_ID VARCHAR(15),
1597
			@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)
1598
			DECLARE @LIMIT_AMT DECIMAL(18,0), @REQ_AMT DECIMAL(18,2) =0, @TONG_PGD DECIMAL(18,0), @TONG_PGD_HOAN DECIMAL(18,0)
1599
			SET @REQ_AMT = (SELECT REQ_AMT *ISNULL(RATE,1) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1600
			--SET @ROLE_ID = (SELECT ROLENAME FROM TL_USER WHERE TLNANME=@p_CHECKER_ID)
1601
			SET @ROLE_ID = (SELECT ROLENAME FROM TL_USER WHERE TLNANME=@p_CHECKER_ID)
1602
			--SET  @ROLE_ID =(SELECT TOP 1 RoleName FROM TL_USER WHERE TLNANME =@p_USER_LOGIN)
1603
			IF(@ROLE_ID IS NOT NULL AND @ROLE_ID <>'' AND @ROLE_ID IN ('TPGD','GDDV','PGD','PTGD','TGD','HDQT','TP','PP','TBP','KTT','GDK','KSV','TC','NVTC','TPTC'))
1604
			BEGIN
1605
				PRINT @ROLE_ID
1606
			END
1607
			ELSE
1608
			BEGIN
1609
				SET @ROLE_ID =(SELECT TOP 1 RoleName FROM TL_USER_V2 WHERE TLNANME =@p_CHECKER_ID)
1610
				IF(@ROLE_ID IS NULL OR @ROLE_ID ='')
1611
				BEGIN
1612
					SET @ROLE_ID =(SELECT TOP 1 ROLE_NEW FROM TL_SYS_ROLE_MAPPING WHERE ROLE_OLD =(SELECT TOP 1 ROLENAME FROM TL_USER WHERE TLNANME=@p_CHECKER_ID))
1613
				END
1614
			END
1615
			SET @BRANCH_ID = (SELECT TLSUBBRID FROM TL_USER WHERE TLNANME =@p_CHECKER_ID)
1616
			SET @BRANCH_RQ =(SELECT BRANCH_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1617
			SET @DEP_ID_RQ =(SELECT DEP_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1618
			SET @BRANCH_TYPE = (SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)
1619
			DECLARE @tmp table(BRANCH_ID varchar(15))
1620
			INSERT into @tmp  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@BRANCH_ID)
1621
			DECLARE @tmp_CN table(BRANCH_ID varchar(15))
1622
			IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)='CN')
1623
			BEGIN
1624
				--INSERT into @tmp_CN  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@BRANCH_RQ)
1625
				INSERT into @tmp_CN  VALUES (@BRANCH_RQ)
1626
			END
1627
			ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)='PGD')
1628
			BEGIN
1629
				--DECLARE @FATHER_ID VARCHAR(15) = NULL
1630
				--SET @FATHER_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)
1631
				--INSERT into @tmp_CN  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@FATHER_ID)
1632
				INSERT into @tmp_CN  VALUES (@BRANCH_RQ)
1633
			END
1634
			--DECLARE @DEP_ID_LG VARCHAR(15) = NULL	
1635
			--SET @DEP_ID_LG =(SELECT SECUR_CODE FROM TL_USER WHERE TLNANME=@p_CHECKER_ID)
1636
			DECLARE @TMP_DVDM TABLE(DVDM_ID VARCHAR(15))
1637
			INSERT INTO @TMP_DVDM
1638
			SELECT A.DVDM_ID--, A.COST_CODE, A.COST_NAME, B.DEP_ID --, C.DEP_CODE, C.DEP_NAME
1639
			FROM PL_COSTCENTER A
1640
			LEFT JOIN PL_COSTCENTER_DT B ON A.COST_ID = B.COST_ID
1641
			WHERE B.DEP_ID = @DEP_ID_RQ
1642
			GROUP BY A.DVDM_ID
1643
			-- KHAI BAO BRANCH CUA USER DUYET
1644
			SET @BRANCH_LOGIN = (SELECT TLSUBBRID FROM TL_USER WHERE TLNANME =@p_CHECKER_ID)
1645
			DECLARE @LIMIT_REMAIN DECIMAL(18,0)
1646
		--CAP NHAT CODE TRONG QUA TRINH TEST UAT
1647
		IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REQ_TYPE='I'))
1648
		BEGIN
1649
			IF(NOT EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE ROLE_USER=@ROLE_ID AND REQ_ID = @p_REQ_PAY_ID))
1650
			BEGIN
1651
					ROLLBACK TRANSACTION
1652
					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
1653
					RETURN '-1'
1654
			END
1655
			--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'))
1656
			--BEGIN
1657
			--		ROLLBACK TRANSACTION
1658
			--		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
1659
			--		RETURN '-1'
1660
			--END
1661
			-- KIEM TRA AUTH_STATUS TRUYEN XUONG LA GI, A: DUYET, C: CONFIRM  
1662
			IF(@p_AUTH_STATUS='U') -- KIEM TRA HAN MUC CON LAI CUA USER VA THONG BAO CHO NGUOI DUYET
1663
			BEGIN
1664
			-- BAT DAU DUYET THEO NGAN SACH			
1665
			--- LAY HAN MUC CUA USER
1666
			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)
1667

    
1668
			print @LIMIT_AMT
1669
			--
1670
			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)
1671
			IF(@ROLE_ID ='GDK' AND ((SELECT SECUR_CODE FROM TL_USER WHERE TLNANME =@p_CHECKER_ID) ='DEP000000000011'))
1672
			BEGIN
1673
				SET @LIMIT_AMT =1000000000
1674
				
1675
			END
1676
			IF(@ROLE_ID ='PTGD' AND ((SELECT SECUR_CODE FROM TL_USER WHERE TLNANME =@p_CHECKER_ID) ='DEP000000000011'))
1677
			BEGIN
1678
				SET @LIMIT_AMT =3000000000
1679
				
1680
			END
1681
			-- NEU LA HOI SO THI LAY TONG SO TIEN TAM UNG CUA CAC PHONG BAN CHUNG VOI KHOI CUA PHIEU DANG DUOC DUYET
1682
			SET @TONG_PGD =(SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE BRANCH_ID = @BRANCH_RQ
1683
					 AND REQ_TYPE ='I' AND AUTH_STATUS ='A') + @REQ_AMT
1684
			SET @TONG_PGD_HOAN =(
1685
						--SELECT (SUM(B.AMT_USE) - SUM(B.AMT_ADD) + SUM (B.AMT_REVERT))
1686
						--FROM TR_REQ_PAYMENT_DT B
1687
						--INNER JOIN TR_REQ_PAYMENT A ON B.PAY_ID = A.REQ_PAY_ID
1688
						--INNER JOIN TR_REQ_ADVANCE_PAYMENT C ON C.REQ_PAY_ID = B.PAY_ADV_ID
1689
						SELECT SUM (ISNULL(A.PAY_AMT,0)) FROM TR_REQ_ADVANCE_PAYMENT A
1690
						WHERE A.BRANCH_ID = @BRANCH_RQ
1691
						AND A.AUTH_STATUS_KT ='A' AND A.REQ_TYPE='I') 
1692
				IF(@BRANCH_TYPE='HS')
1693
				BEGIN
1694
					SET @TOTAL_ADVANCE =ISNULL((SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE
1695
					 DEP_ID IN
1696
					 (SELECT A.DEP_ID FROM PL_COSTCENTER_DT A
1697
						LEFT JOIN PL_COSTCENTER B ON A.COST_ID = B.COST_ID
1698
						WHERE B.DVDM_ID IN (SELECT DVDM_ID FROM @TMP_DVDM) AND A.BRANCH_ID =@BRANCH_RQ)
1699
					 AND REQ_TYPE ='I' AND AUTH_STATUS ='A'),0)
1700
					SET @TOTAL_PAYBACK =
1701
					ISNULL(
1702
					(
1703
						SELECT (SUM(ISNULL(C.PAY_AMT,0)))
1704
						FROM TR_REQ_ADVANCE_PAYMENT C
1705
						WHERE C.DEP_ID IN 
1706
						(SELECT A.DEP_ID FROM PL_COSTCENTER_DT A
1707
						LEFT JOIN PL_COSTCENTER B ON A.COST_ID = B.COST_ID
1708
						WHERE B.DVDM_ID IN (SELECT DVDM_ID FROM @TMP_DVDM) AND A.BRANCH_ID =@BRANCH_ID)
1709
						AND C.AUTH_STATUS_KT ='A' AND C.REQ_TYPE='I'
1710
					),0)
1711
				END
1712
				-- 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
1713
				ELSE IF(@BRANCH_TYPE <>'HS')
1714
				BEGIN
1715
					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)
1716
					 AND REQ_TYPE ='I' AND AUTH_STATUS='A')
1717
					SET @TOTAL_PAYBACK =
1718
					(
1719
						SELECT (SUM(ISNULL(B.PAY_AMT,0)))
1720
						FROM TR_REQ_ADVANCE_PAYMENT B
1721
						WHERE B.BRANCH_ID IN 
1722
						(SELECT BRANCH_ID FROM @tmp_CN)
1723
						AND B.AUTH_STATUS_KT ='A' AND B.REQ_TYPE='I'
1724
					)
1725
				END
1726
				
1727
				SET @LIMIT_REMAIN =ISNULL(@TOTAL_ADVANCE,0) - ISNULL(@TOTAL_PAYBACK,0)
1728
				-- KIEM TRA NEU LA CHU TICH HDQT THI PHE DUYET LUON, KHONG CAN XET HAN MUC GI
1729
				IF(EXISTS(SELECT * FROM TL_USER WHERE TLNANME=@p_CHECKER_ID AND RoleName ='HDQT'))
1730
				BEGIN
1731
					ROLLBACK TRANSACTION
1732
					SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
1733
					--N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
1734
					--+ CHAR(10) +
1735
					--N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
1736
					--+ CHAR(10) + CHAR(13) +
1737
					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')
1738
					+ CHAR(10) + 
1739
					N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
1740
					RETURN '-4'
1741
				END
1742
				IF(@LIMIT_AMT <(SELECT REQ_AMT * ISNULL(RATE,1) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID) + @LIMIT_REMAIN)
1743
				BEGIN
1744
					ROLLBACK TRANSACTION
1745
					SELECT '-2' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,
1746
					N'Tổng hạn mức phê duyệt là: '+ FORMAT(@LIMIT_AMT,'#,#', 'vi-VN') + CHAR(10)+
1747
					N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
1748
					+ CHAR(10) + CHAR(13)+
1749
					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') 
1750
					+ CHAR(10) +
1751
					N'Số tiền tạm ứng đã vượt mức phê duyệt là: '+ FORMAT((@LIMIT_REMAIN +@REQ_AMT) -@LIMIT_AMT,'#,#', 'vi-VN') 
1752
					+ CHAR(10) +
1753
					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
1754
					RETURN '-2'
1755
				END
1756
				--- NEU DU HAN MUC THI THONG BAO DE NGUOI DUYET CAN NHAC CO NEN DUYET PHIEU HAY KHONG
1757
				IF(@LIMIT_AMT >=(SELECT REQ_AMT * ISNULL(RATE,1) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID) +@LIMIT_REMAIN)
1758
				BEGIN
1759
					IF(@REQ_AMT >@LIMIT_ONE_OF)
1760
					BEGIN
1761
						ROLLBACK TRANSACTION
1762
						SELECT '-2' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
1763
						N'Tổng hạn mức phê duyệt là: '+ FORMAT(@LIMIT_AMT,'#,#', 'vi-VN') 
1764
						+ CHAR(10)+
1765
						N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
1766
						+ CHAR(10) + CHAR(13) +
1767
						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') 
1768
						+ CHAR(10) + 
1769
						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') 
1770
						+ CHAR(10) + 
1771
						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
1772
						RETURN '-2'
1773
					END
1774
					ELSE
1775
					BEGIN
1776
						-- KIEM TRA NEU LA PGD THI CANH BAO
1777
						IF(@BRANCH_TYPE ='HS')
1778
						BEGIN
1779
							IF(EXISTS(SELECT * FROM TL_USER WHERE TLNANME=@p_CHECKER_ID AND RoleName NOT IN('TGD','HQDT')))
1780
							BEGIN
1781
								ROLLBACK TRANSACTION
1782
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
1783
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
1784
								+ CHAR(10) + CHAR(13) +  
1785
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
1786
								+ CHAR(10) + 
1787
								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')
1788
								+ CHAR(10) + 
1789
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
1790
								RETURN '-4'
1791
							END
1792
							ELSE
1793
							BEGIN
1794
								ROLLBACK TRANSACTION
1795
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
1796
								--N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
1797
								--+ CHAR(10) + CHAR(13) +  
1798
								--N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
1799
								--+ CHAR(10) + 
1800
								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')
1801
								+ CHAR(10) + 
1802
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
1803
								RETURN '-4'
1804
							END
1805
						END
1806
						ELSE IF(@BRANCH_TYPE ='CN')
1807
						BEGIN
1808
							IF(ISNULL(@TONG_PGD,0) -ISNULL(@TONG_PGD_HOAN,0) > 40000000)
1809
							BEGIN
1810
								ROLLBACK TRANSACTION
1811
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
1812
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
1813
								+ CHAR(10) + 
1814
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
1815
								+ CHAR(10) + CHAR(13) +
1816
								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')
1817
								+ CHAR(10) +
1818
								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')
1819
								+ CHAR(10) + 
1820
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
1821
								RETURN '-4'
1822
							END
1823
							ELSE
1824
							BEGIN
1825
								IF(EXISTS(SELECT * FROM TL_USER WHERE TLNANME=@p_CHECKER_ID AND RoleName NOT IN('TGD','HQDT')))
1826
								BEGIN
1827
									ROLLBACK TRANSACTION
1828
									SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
1829
									N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
1830
									+ CHAR(10) +
1831
									N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
1832
									+ CHAR(10) + CHAR(13) +
1833
									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')
1834
									+ CHAR(10) + 
1835
									N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
1836
									RETURN '-4'
1837
								END
1838
								ELSE
1839
								BEGIN
1840
									ROLLBACK TRANSACTION
1841
									SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
1842
									--N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
1843
									--+ CHAR(10) +
1844
									--N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
1845
									--+ CHAR(10) + CHAR(13) +
1846
									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')
1847
									+ CHAR(10) + 
1848
									N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
1849
									RETURN '-4'
1850
								END
1851
							END
1852
						END
1853
						ELSE IF(@BRANCH_TYPE ='PGD')
1854
						BEGIN
1855
							IF(ISNULL(@TONG_PGD,0) -ISNULL(@TONG_PGD_HOAN,0) > 10000000)
1856
							BEGIN
1857
								ROLLBACK TRANSACTION
1858
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,
1859
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')+ CHAR(10) +
1860
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
1861
								+ CHAR(10) + CHAR(13) + 
1862
								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')
1863
								+ CHAR(10) + 
1864
								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')
1865
								+ CHAR(10) + 
1866
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
1867
								RETURN '-4'
1868
							END
1869
							ELSE
1870
							BEGIN
1871
								ROLLBACK TRANSACTION
1872
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
1873
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
1874
								+ CHAR(10) + 
1875
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
1876
								+ CHAR(10) + CHAR(13) +
1877
								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')
1878
								+ CHAR(10) + 
1879
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
1880
								RETURN '-4'
1881
							END
1882
						END
1883
					END
1884
				END
1885
			-- NEU THOA MAN CAC DIEU KIEN SE TIEN HANH DUYET
1886
			END -- END DU HAN MUC DUYET
1887
			ELSE IF(@p_AUTH_STATUS='A')
1888
			BEGIN
1889
				UPDATE TR_REQ_ADVANCE_PAYMENT
1890
				SET    AUTH_STATUS='A', CHECKER_ID = @p_CHECKER_ID, APPROVE_DT =  GETDATE(), AUTH_STATUS_KT='U'
1891
				WHERE  REQ_PAY_ID = @p_REQ_PAY_ID
1892
				--- CAP NHAT LAI TINH TRANG TRONG REQUEST_PROCESS
1893
				DECLARE @PROCESS_CURR VARCHAR(5)
1894
				SET @PROCESS_CURR =(SELECT PROCESS_ID FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID AND ROLE_USER =@ROLE_ID)
1895
				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')
1896
				--- CAP NHAT PROCESS CUA PHIEU DE NGHI TAM UNG LA DA DUYET
1897
				UPDATE TR_REQ_ADVANCE_PAYMENT SET PROCESS=@PROCESS_CURR WHERE REQ_PAY_ID=@p_REQ_PAY_ID
1898
				--
1899
				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
1900
			DECLARE @l_REQ_AMT DECIMAL(18,0) = (SELECT REQ_AMT*ISNULL(RATE,1) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID=@p_REQ_PAY_ID)
1901
			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)
1902
			--
1903
			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)
1904
			IF(@ROLE_ID ='GDK' AND ((SELECT SECUR_CODE FROM TL_USER WHERE TLNANME =@p_CHECKER_ID) ='DEP000000000011'))
1905
			BEGIN
1906
				SET @LIMIT_AMT =1000000000
1907
				
1908
			END
1909
			IF(@ROLE_ID ='PTGD' AND ((SELECT SECUR_CODE FROM TL_USER WHERE TLNANME =@p_CHECKER_ID) ='DEP000000000011'))
1910
			BEGIN
1911
				SET @LIMIT_AMT =3000000000
1912
				
1913
			END
1914
			-- NEU LA HOI SO THI LAY TONG SO TIEN TAM UNG CUA CAC PHONG BAN CHUNG VOI KHOI CUA PHIEU DANG DUOC DUYET
1915
			SET @TONG_PGD =(SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE BRANCH_ID = @BRANCH_RQ
1916
					 AND REQ_TYPE ='I' AND AUTH_STATUS ='A') + @REQ_AMT
1917
			SET @TONG_PGD_HOAN =(
1918
						--SELECT (SUM(B.AMT_USE) - SUM(B.AMT_ADD) + SUM (B.AMT_REVERT))
1919
						--FROM TR_REQ_PAYMENT_DT B
1920
						--INNER JOIN TR_REQ_PAYMENT A ON B.PAY_ID = A.REQ_PAY_ID
1921
						--INNER JOIN TR_REQ_ADVANCE_PAYMENT C ON C.REQ_PAY_ID = B.PAY_ADV_ID
1922
						SELECT SUM (ISNULL(A.PAY_AMT,0)) FROM TR_REQ_ADVANCE_PAYMENT A
1923
						WHERE A.BRANCH_ID = @BRANCH_RQ
1924
						AND A.AUTH_STATUS_KT ='A' AND A.REQ_TYPE='I') 
1925
				IF(@BRANCH_TYPE='HS')
1926
				BEGIN
1927
					SET @TOTAL_ADVANCE =ISNULL((SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE
1928
					 DEP_ID IN
1929
					 (SELECT A.DEP_ID FROM PL_COSTCENTER_DT A
1930
						LEFT JOIN PL_COSTCENTER B ON A.COST_ID = B.COST_ID
1931
						WHERE B.DVDM_ID IN (SELECT DVDM_ID FROM @TMP_DVDM) AND A.BRANCH_ID =@BRANCH_RQ)
1932
					 AND REQ_TYPE ='I' AND AUTH_STATUS ='A'),0)
1933
					SET @TOTAL_PAYBACK =
1934
					ISNULL(
1935
					(
1936
						SELECT (SUM(ISNULL(C.PAY_AMT,0)))
1937
						FROM TR_REQ_ADVANCE_PAYMENT C
1938
						WHERE C.DEP_ID IN 
1939
						(SELECT A.DEP_ID FROM PL_COSTCENTER_DT A
1940
						LEFT JOIN PL_COSTCENTER B ON A.COST_ID = B.COST_ID
1941
						WHERE B.DVDM_ID IN (SELECT DVDM_ID FROM @TMP_DVDM) AND A.BRANCH_ID =@BRANCH_ID)
1942
						AND C.AUTH_STATUS_KT ='A' AND C.REQ_TYPE='I'
1943
					),0)
1944
				END
1945
				-- 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
1946
				ELSE IF(@BRANCH_TYPE <>'HS')
1947
				BEGIN
1948
					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)
1949
					 AND REQ_TYPE ='I' AND AUTH_STATUS='A')
1950
					SET @TOTAL_PAYBACK =
1951
					(
1952
						SELECT (SUM(ISNULL(B.PAY_AMT,0)))
1953
						FROM TR_REQ_ADVANCE_PAYMENT B
1954
						WHERE B.BRANCH_ID IN 
1955
						(SELECT BRANCH_ID FROM @tmp_CN)
1956
						AND B.AUTH_STATUS_KT ='A' AND B.REQ_TYPE='I'
1957
					)
1958
				END
1959
				SET @LIMIT_REMAIN =ISNULL(@TOTAL_ADVANCE,0) - ISNULL(@TOTAL_PAYBACK,0)
1960
				--- INSERT VAO BANG LOG
1961
				INSERT INTO TR_REQ_ADVANCE_LIMIT_LOG  VALUES (@p_REQ_PAY_ID,@LIMIT_REMAIN,GETDATE())
1962
				----
1963
			END
1964
			ELSE -- NEW KHONG DU HAN MUC THI BAT DAU XAC NHAN VA DUYET THEO HAN MUC
1965
			BEGIN
1966
				DECLARE @t_REQ_AMT DECIMAL(18,0) = (SELECT REQ_AMT*ISNULL(RATE,1) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID=@p_REQ_PAY_ID)
1967
			
1968
				--PRINT @t_REQ_AMT
1969
				--- 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
1970
				DECLARE @MAX_STEP INT, @NEXT_ROLE VARCHAR(20), @MESSAGE NVARCHAR(100), @PROCESS_ID_NEXT VARCHAR(5), @PROCESS_PARENT VARCHAR(5),
1971
				@BRANCH_ID_PROC VARCHAR(15), @NEX_ROLE_STEP VARCHAR(25), @CURRENT_PROCESS VARCHAR(15)
1972
				SET @CURRENT_PROCESS =(SELECT PROCESS_ID FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID AND ROLE_USER=@ROLE_ID)
1973
				SET @NEX_ROLE_STEP = (SELECT ROLE_USER FROM PL_REQUEST_PROCESS WHERE PARENT_PROCESS_ID =@CURRENT_PROCESS AND REQ_ID = @p_REQ_PAY_ID )
1974
				--PRINT @NEX_ROLE_STEP
1975
				--SET @MAX_STEP = CONVERT(INT,(SELECT MAX(PROCESS_ID) FROM TR_REQUEST_PROCESS WHERE REQ_ID =@p_REQ_PAY_ID))
1976
				SET @PROCESS_ID_NEXT = CONVERT(VARCHAR(5),@CURRENT_PROCESS+1)
1977
				--SET @PROCESS_PARENT = CONVERT(VARCHAR(5),@MAX_STEP)
1978
				DECLARE @TMP_ROLE TABLE (ROLE_ID VARCHAR(15), BRANCH_ID VARCHAR(15), LIMIT_VALUE DECIMAL(18,0),LIMIT_TYPE VARCHAR(15))
1979
				--IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06908%' AND DEP_ID =@p_DEP_ID)
1980
					IF(LEFT(@DEP_CODE_NEXT,5) ='06908' OR @DEP_CODE_NEXT ='0690605')
1981
					BEGIN
1982
						INSERT INTO @TMP_ROLE  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE,A.LIMIT_TYPE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID <>'GDK'
1983
					END
1984
					--ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
1985
					ELSE IF(LEFT(@DEP_CODE_NEXT,5) ='06910')
1986
					BEGIN
1987
						INSERT INTO @TMP_ROLE  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE,A.LIMIT_TYPE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID <>'GDK'
1988
					END
1989
					--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)
1990
					--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) 
1991
					--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))
1992
					ELSE IF((LEFT(@DEP_CODE_NEXT,5) ='06900') OR (LEFT(@DEP_CODE_NEXT,5)) ='06901' OR (LEFT(@DEP_CODE_NEXT,5))='06904'
1993
					OR (LEFT(@DEP_CODE_NEXT,5))='06902' OR (LEFT(@DEP_CODE_NEXT,5))='06903'  OR (LEFT(@DEP_CODE_NEXT,5))='06920')
1994
					BEGIN
1995
						INSERT INTO @TMP_ROLE  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE,A.LIMIT_TYPE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID NOT IN ('GDK','PTGD')
1996
					END
1997
					--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)
1998
					--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) 
1999
					--OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
2000
					ELSE IF((LEFT(@DEP_CODE_NEXT,5) ='06907') OR (LEFT(@DEP_CODE_NEXT,5)) ='06909' OR (LEFT(@DEP_CODE_NEXT,5))='06911'
2001
					OR (LEFT(@DEP_CODE_NEXT,5))='06922' OR (LEFT(@DEP_CODE_NEXT,5))='06921'  OR (LEFT(@DEP_CODE_NEXT,5))='06920')
2002
					BEGIN
2003
						INSERT INTO @TMP_ROLE  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE,A.LIMIT_TYPE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID <>'PTGD'
2004
					END
2005
					ELSE
2006
					BEGIN
2007
						INSERT INTO @TMP_ROLE  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE,A.LIMIT_TYPE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001'
2008
					END
2009
				SET @BRANCH_ID_PROC= (SELECT BRANCH_ID FROM @TMP_ROLE WHERE ROLE_ID=@NEXT_ROLE AND LIMIT_TYPE='ADV_PAY')
2010
				print @DEP_CODE_NEXT
2011
				print @BRANCH_ID_PROC 
2012
			    print @NEX_ROLE_STEP
2013
				IF(NOT EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE ROLE_USER=@NEX_ROLE_STEP AND REQ_ID= @p_REQ_PAY_ID))
2014
				BEGIN
2015
					--SET @NEXT_ROLE =(SELECT TOP 1 ROLE_ID FROM @TMP_ROLE WHERE LIMIT_VALUE >@t_REQ_AMT 
2016
					SET @NEXT_ROLE =(SELECT TOP 1 ROLE_ID FROM @TMP_ROLE WHERE 1 =1
2017
					AND ROLE_ID NOT IN (SELECT ROLE_USER FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID) AND LIMIT_TYPE ='ADV_PAY')
2018
					--print @NEXT_ROLE
2019
					SET @BRANCH_ID_PROC= (SELECT BRANCH_ID FROM @TMP_ROLE WHERE ROLE_ID=@NEXT_ROLE AND LIMIT_TYPE='ADV_PAY')
2020
					SET @MESSAGE = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @NEXT_ROLE)
2021
					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)  
2022
					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)
2023
					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')
2024
				END
2025
				ELSE
2026
				BEGIN
2027
					--print @NEX_ROLE_STEP
2028
					SET @NEXT_ROLE =@NEX_ROLE_STEP
2029
					UPDATE PL_REQUEST_PROCESS SET STATUS='C',DVDM_ID=@p_COST_ID WHERE ROLE_USER =@NEXT_ROLE AND REQ_ID = @p_REQ_PAY_ID	
2030
					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')
2031
				END
2032
				--				
2033
				IF @@Error <> 0 GOTO ABORT
2034
					-- UPDATE STATUS CUA STEP HIEN TAI
2035
				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		
2036
				--INSERT VAO TR_PROCESS		
2037
				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	
2038
				--- 
2039
				UPDATE PL_REQUEST_PROCESS SET DVDM_ID= @p_COST_ID WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER <>@ROLE_ID
2040
		  END
2041
		END	
2042
		ELSE
2043
		BEGIN
2044
			--- 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
2045
			DECLARE @PAY_ID VARCHAR(15), @SUM_OF_PAY_ID DECIMAL(18,2), @SUM_ADVANCE DECIMAL(18,2),
2046
			@AMOUNT DECIMAL(18,2),@AMT_PAY_DO DECIMAL(18,2),@SCH_ID VARCHAR(15),@AMT_ADVANCE DECIMAL(18,0)
2047
			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
2048
			OPEN CUR_SH
2049
			FETCH NEXT FROM CUR_SH INTO @PAY_ID,@AMOUNT,@AMT_PAY_DO,@SCH_ID,@AMT_ADVANCE
2050
			WHILE @@FETCH_STATUS =0
2051
			BEGIN
2052
				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')
2053
				SET @SUM_ADVANCE =(SELECT SUM(AMT_ADVANCE) FROM TR_REQ_PAY_SCHEDULE WHERE PAY_ID =@PAY_ID AND AUTH_STATUS_KT='A')
2054
				IF(@SUM_OF_PAY_ID +@AMT_PAY_DO >@AMOUNT)
2055
				BEGIN
2056
					ROLLBACK TRANSACTION
2057
					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'
2058
					RETURN '-1'
2059
				END
2060
				IF(@SUM_OF_PAY_ID+@AMT_PAY_DO+@SUM_ADVANCE < @AMOUNT)
2061
				BEGIN
2062
					UPDATE TR_REQ_PAY_SCHEDULE SET PAYMENT_STATUS ='DTU' WHERE SCHEDULE_ID=@SCH_ID
2063
				END
2064
				ELSE IF(@SUM_OF_PAY_ID+@AMT_PAY_DO+@SUM_ADVANCE = @AMOUNT)
2065
				BEGIN
2066
					UPDATE TR_REQ_PAY_SCHEDULE SET PAYMENT_STATUS ='DTT' WHERE SCHEDULE_ID=@SCH_ID
2067
				END
2068
				ELSE IF(@SUM_OF_PAY_ID=0 AND @SUM_ADVANCE =0 )
2069
				BEGIN
2070
					UPDATE TR_REQ_PAY_SCHEDULE SET PAYMENT_STATUS ='CTT' WHERE SCHEDULE_ID=@SCH_ID
2071
				END
2072
				FETCH NEXT FROM CUR_SH INTO @PAY_ID,@AMOUNT,@AMT_PAY_DO,@SCH_ID,@AMT_ADVANCE
2073
			END
2074
			CLOSE CUR_SH
2075
			DEALLOCATE CUR_SH 
2076

    
2077
			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
2078
			SET @p_AUTH_STATUS ='A'
2079
			--- INSERT 1 DONG VAO PL_PROCESS
2080
			-- INSERT VAO BANG PL_PROCESS 1 DONG TRA VE
2081
			INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
2082
				   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')			
2083
		END	
2084
		IF @@Error <> 0 GOTO ABORT
2085
COMMIT TRANSACTION
2086
	IF(@p_AUTH_STATUS='A')
2087
	BEGIN
2088
		SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,N'12345' +@DEP_CODE_NEXT ErrorDesc
2089
		RETURN '0'
2090
	END
2091
	ELSE
2092
	BEGIN
2093
		SELECT '1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,'' ErrorDesc
2094
		RETURN '1'
2095
	END
2096
ABORT:
2097
BEGIN
2098
		ROLLBACK TRANSACTION
2099
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
2100
		RETURN '-1'
2101
END
2102
¿
2103

    
2104
ALTER PROC [dbo].[TL_SYSROLE_LIMIT_Auto]
2105
@p_BRANCH_ID VARCHAR(15) = NULL,
2106
@p_LIMIT_TYPE VARCHAR(15) = NULL
2107
AS
2108
BEGIN TRANSACTION
2109
IF(@p_LIMIT_TYPE='ADV_PAY')
2110
BEGIN
2111
	DECLARE @BRANCH_ID VARCHAR(15), @BRANCH_NAMME NVARCHAR(200), @BRANCH_TYPE VARCHAR(15),@p_LIMIT_ID VARCHAR(15), @TOTAL_PGD DECIMAL(18,0), @DMMS_ID VARCHAR(15), @LIMIT_PGD DECIMAL(18,0),
2112
	@LIMIT_CN DECIMAL(18,0)
2113
	SET @LIMIT_PGD =10000000
2114
	SET @LIMIT_CN =40000000
2115
	DECLARE CUR_DV CURSOR
2116
	FOR SELECT A.BRANCH_ID, A.BRANCH_NAME, A.BRANCH_TYPE FROM CM_BRANCH A WHERE A.BRANCH_TYPE IN ('CN','PGD') AND (A.BRANCH_ID =@p_BRANCH_ID OR  @p_BRANCH_ID IS NULL OR @p_BRANCH_ID ='')
2117
	OPEN CUR_DV
2118
	FETCH NEXT FROM CUR_DV INTO @BRANCH_ID,@BRANCH_NAMME,@BRANCH_TYPE
2119
	WHILE @@FETCH_STATUS = 0
2120
	BEGIN
2121
		--SET @TOTAL_PGD =(SELECT COUNT(*) FROM CM_BRANCH WHERE FATHER_ID =@BRANCH_ID)*10000000
2122
		SET @TOTAL_PGD =0
2123
		EXEC SYS_CodeMasters_Gen 'TL_SYSROLE_LIMIT', @p_LIMIT_ID out
2124
		IF(@BRANCH_TYPE ='CN' AND NOT EXISTS(SELECT * FROM TL_SYSROLE_LIMIT WHERE BRANCH_ID =@BRANCH_ID AND LIMIT_TYPE='ADV_PAY' AND ROLE_ID ='GDDV'))
2125
			BEGIN
2126
				INSERT INTO TL_SYSROLE_LIMIT VALUES (@p_LIMIT_ID,'GDDV',@LIMIT_CN+@TOTAL_PGD,@BRANCH_NAMME,'admin','A','tscd_hoiso',GETDATE(),'1',@BRANCH_ID,'ADV_PAY', @LIMIT_CN, NULL)
2127
			END
2128
		ELSE IF(@BRANCH_TYPE ='PGD' AND  NOT EXISTS(SELECT * FROM TL_SYSROLE_LIMIT WHERE BRANCH_ID =@BRANCH_ID AND LIMIT_TYPE='ADV_PAY' AND ROLE_ID ='TPGD' AND @BRANCH_TYPE ='PGD'))
2129
			BEGIN
2130
				INSERT INTO TL_SYSROLE_LIMIT VALUES (@p_LIMIT_ID,'TPGD',@LIMIT_PGD,@BRANCH_NAMME,'admin','A','tscd_hoiso',GETDATE(),'1',@BRANCH_ID,'ADV_PAY', @LIMIT_PGD, NULL)
2131
			END
2132
		ELSE
2133
			BEGIN
2134
				UPDATE TL_SYSROLE_LIMIT SET LIMIT_VALUE =@LIMIT_CN +@TOTAL_PGD, LIMIT_PERCENT= LIMIT_VALUE WHERE BRANCH_ID =@BRANCH_ID AND LIMIT_TYPE ='ADV_PAY' AND ROLE_ID ='GDDV'
2135
			END
2136
		-- KIỂM  TRA XEM ĐÃ KHAI BÁO ĐƠN VỊ / CHI NHÁNH NÀY TRONG CM_DMMS HAY CHƯA
2137
		IF(NOT EXISTS (SELECT * FROM CM_DMMS WHERE BRANCH_ID =@p_BRANCH_ID))
2138
		BEGIN
2139
			 EXEC SYS_CodeMasters_Gen 'CM_DMMS', @DMMS_ID out
2140
			 INSERT INTO CM_DMMS (DMMS_ID,BRANCH_ID, DEP_ID,DVDM_ID) VALUES (@DMMS_ID,@BRANCH_ID,(SELECT TOP 1 DEP_ID FROM CM_DEPARTMENT WHERE BRANCH_ID =@BRANCH_ID),'')
2141
		END
2142
		FETCH NEXT FROM CUR_DV INTO @BRANCH_ID,@BRANCH_NAMME,@BRANCH_TYPE
2143
		END
2144
	CLOSE CUR_DV
2145
	DEALLOCATE CUR_DV
2146
END
2147
ELSE
2148
BEGIN
2149
-- INSERT HAN MUC CHO HOI SO
2150
-- GIAM DOC KHOI
2151
	IF(NOT EXISTS(SELECT * FROM TL_SYSROLE_LIMIT WHERE BRANCH_ID ='DV0001' AND LIMIT_TYPE='ADV_PAY' AND ROLE_ID ='GDK'))
2152
	BEGIN
2153
		EXEC SYS_CodeMasters_Gen 'TL_SYSROLE_LIMIT', @p_LIMIT_ID out
2154
		INSERT INTO TL_SYSROLE_LIMIT VALUES (@p_LIMIT_ID,'GDK',100000000,N'HAN MUC GIAM DOC KHOI','admin','A','tscd_hoiso',GETDATE(),'1','DV0001','ADV_PAY',50000000,NULL)
2155
	END
2156
	BEGIN
2157
		UPDATE TL_SYSROLE_LIMIT SET LIMIT_VALUE =100000000, LIMIT_PERCENT= 50000000 WHERE BRANCH_ID ='DV0001' AND LIMIT_TYPE ='ADV_PAY' AND ROLE_ID ='GDK'
2158
	END
2159
	-- PHO TONG GIAM DOC
2160
	IF(NOT EXISTS(SELECT * FROM TL_SYSROLE_LIMIT WHERE BRANCH_ID ='DV0001' AND LIMIT_TYPE='ADV_PAY' AND ROLE_ID ='PTGD'))
2161
	BEGIN
2162
		EXEC SYS_CodeMasters_Gen 'TL_SYSROLE_LIMIT', @p_LIMIT_ID out
2163
		INSERT INTO TL_SYSROLE_LIMIT VALUES (@p_LIMIT_ID,'PTGD',200000000,N'HAN MUC PHE DUYET PHO TONG GIAM DOC','admin','A','tscd_hoiso',GETDATE(),'1','DV0001','ADV_PAY',100000000,NULL)
2164
	END
2165
	BEGIN
2166
		UPDATE TL_SYSROLE_LIMIT SET LIMIT_VALUE =200000000, LIMIT_PERCENT= 100000000 WHERE BRANCH_ID ='DV0001' AND LIMIT_TYPE ='ADV_PAY' AND ROLE_ID ='PTGD'
2167
	END
2168
	IF(NOT EXISTS(SELECT * FROM TL_SYSROLE_LIMIT WHERE BRANCH_ID ='DV0001' AND LIMIT_TYPE='ADV_PAY' AND ROLE_ID ='TGD'))
2169
	BEGIN
2170
		EXEC SYS_CodeMasters_Gen 'TL_SYSROLE_LIMIT', @p_LIMIT_ID out
2171
		INSERT INTO TL_SYSROLE_LIMIT VALUES (@p_LIMIT_ID,'TGD',2000000000,N'HAN MUC PHE DUYET TONG GIAM DOC','admin','A','tscd_hoiso',GETDATE(),'1','DV0001','ADV_PAY',500000000,NULL)
2172
	END
2173
	BEGIN
2174
		UPDATE TL_SYSROLE_LIMIT SET LIMIT_VALUE =2000000000, LIMIT_PERCENT= 500000000 WHERE BRANCH_ID ='DV0001' AND LIMIT_TYPE ='ADV_PAY' AND ROLE_ID ='TGD'
2175
	END
2176
END
2177
COMMIT TRANSACTION
2178
SELECT '0' as Result, ''  LIMIT_ID, (SELECT TOP 1 LIMIT_VALUE FROM TL_SYSROLE_LIMIT WHERE BRANCH_ID =@p_BRANCH_ID AND LIMIT_TYPE ='ADV_PAY') AS LIMIT_VALUE,'' ErrorDesc
2179
RETURN '0'
2180
ABORT:
2181
BEGIN
2182
		ROLLBACK TRANSACTION
2183
		SELECT '-1' as Result, '' LIMIT_ID, 0.0 AS LIMIT_VALUE, '' ErrorDesc
2184
		RETURN '-1'
2185
END
2186

    
2187

    
2188

    
2189

    
2190