Project

General

Profile

ADVANCE_UPD.txt

Luc Tran Van, 11/25/2022 01:18 PM

 
1

    
2
ALTER   PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Upd]
3
@p_REQ_PAY_ID	varchar(15)= NULL,
4
@p_REQ_PAY_CODE	varchar(50)	= NULL,
5
@p_REQ_DT VARCHAR(20)= NULL,
6
@p_BRANCH_ID	varchar(15)	= NULL,
7
@p_DEP_ID	varchar(15)	= NULL,
8
@p_REQ_REASON	nvarchar(MAX)	= NULL,
9
@p_REQ_TYPE	varchar(15)	= NULL,
10
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
11
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
12
@p_REF_ID	varchar(15)	= NULL,
13
@p_RECEIVER_PO	nvarchar(250)	= NULL,
14
@p_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) =0,
41
@p_RECIVER_MONEY VARCHAR(15)= NULL,
42
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
43
@p_IS_PERIOD VARCHAR(5) = NULL,
44
@p_PAY_AMT DECIMAL(18,0)= NULL,
45
--doanptt 19/01/2022
46
@p_XMP_TEMP XML = NULL,
47
@p_XMP_CUS XML = NULL,
48
@p_XMP_PAY_ATTACH XML = NULL,
49
@p_XMP_PAY_INVOICE XML = NULL,
50
@p_XMP_ADVANCE_DT_2 XML = NULL,
51
@p_XMP_PAY_SCHEDULE XML = NULL,
52
@p_XMP_PAY_PERIOD XML = NULL,
53
@p_XMP_PAY_METHOD XML = NULL,
54
@p_XMP_PAY_BUDGET XML = NULL,
55
@p_XMP_ADVANCE_DT XML = NULL
56
AS
57
-- Begin Validation update
58
	IF(@p_TYPE_FUNCTION <> 'SEND')
59
	BEGIN
60
		IF(NOT EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT where MAKER_ID = @p_MAKER_ID ))
61
		BEGIN
62
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Bạn không được phép cập nhật phiếu đề nghị tạm ứng này. Chỉ người tạo phiếu mới được cập nhật phiếu' ErrorDesc
63
			RETURN '-1'
64
		END
65
		IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT where AUTH_STATUS = 'U' AND REQ_PAY_ID = @p_REQ_PAY_ID ))
66
		BEGIN
67
			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
68
			RETURN '-1'
69
		END
70
		IF (@p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE ='')
71
		BEGIN
72
			SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu không được để trống' ErrorDesc
73
			RETURN '-1'
74
		END
75
		IF (EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_CODE = @p_REQ_PAY_CODE AND REQ_PAY_ID <> @p_REQ_PAY_ID))
76
		BEGIN
77
			SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu đã tồn tại trong hệ thống' ErrorDesc
78
			RETURN '-1'
79
		END
80
		IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS <> 'E' AND AUTH_STATUS <> 'R' AND ISNULL(AUTH_STATUS, '') <> ''))
81
		BEGIN
82
			SELECT '-1' Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đã được kí xác nhận từ các cấp. Bạn không được quyền chỉnh sửa' ErrorDesc
83
			RETURN '-1'
84
		END
85
	END
86
	
87
-- End Validation update
88

    
89
/*
90
DECLARE @ERRORSYS NVARCHAR(15) = '' 
91
  IF ( NOT EXISTS ( SELECT * FROM ASS_COLLECT WHERE ))
92
	 SET @ERRORSYS = ''
93
IF @ERRORSYS <> '' 
94
BEGIN
95
	SELECT ErrorCode Result, ''  CAR_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
96
	RETURN '0'
97
END 
98
*/
99
	--Luanlt-2019/10/15 Disable Validation
100
	--DECLARE @ERRORSYS NVARCHAR(15) = '' 
101
	--IF EXISTS(SELECT * FROM TR_PO_MASTER WHERE REF_ID  = @p_REF_ID )
102
	--BEGIN
103
	--	SET @ERRORSYS = 'ASSC-00005'
104
	--	SELECT ErrorCode Result, '' REQ_PAY_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
105
	--	RETURN '-1'
106
	--END
107

    
108
	DECLARE @BRANCH_TYPE_CR VARCHAR(15), @ROLE_KI_NHAY VARCHAR(50)
109
	--SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
110
	--IF(@ROLE_KI_NHAY IS NOT NULL AND @ROLE_KI_NHAY <> '' AND @ROLE_KI_NHAY IN ('TP','GDDV','KTT','TPTC','TC'))
111
	--BEGIN
112
	--	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
113
	--	RETURN '-1'
114
	--END
115
		SET  @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER WHERE TLNANME =@p_TRASFER_USER_RECIVE)
116
		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'))
117
		BEGIN
118
		PRINT @ROLE_KI_NHAY
119
		END
120
		ELSE
121
		BEGIN
122
		SET @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
123
		IF(@ROLE_KI_NHAY IS NULL OR @ROLE_KI_NHAY ='')
124
		BEGIN
125
				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))
126
		END
127
		END
128
		--SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
129
		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')
130
		BEGIN
131
			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
132
			RETURN '-1'
133
		END
134
	SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
135
	DECLARE @ACC_NUM VARCHAR(15)
136
	SET @ACC_NUM = (SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)
137

    
138
------------------------------------------------------------------------------------ start validate phần master ------------------------------------------------------------------------------------------------------
139
	IF(@p_TYPE_FUNCTION = 'SEND')
140
	BEGIN
141
		IF (@p_BRANCH_ID IS NULL OR @p_BRANCH_ID ='')
142
		BEGIN
143
			SELECT '-1' Result, '' REQ_PAY_ID, N'Đơn vị yêu cầu không được để trống' ErrorDesc
144
			RETURN '-1'
145
		END
146
		IF (@p_DEP_ID IS NULL OR @p_DEP_ID ='')
147
		BEGIN
148
			SELECT '-1' Result, '' REQ_PAY_ID, N'Phòng ban đề nghị không được để trống' ErrorDesc
149
			RETURN '-1'
150
		END
151
		IF (@p_REQ_TYPE IS NULL OR @p_REQ_TYPE ='')
152
		BEGIN
153
			SELECT '-1' Result, '' REQ_PAY_ID, N'Loại phiếu yêu cầu không được để trống' ErrorDesc
154
			RETURN '-1'
155
		END
156
		IF (@p_REQ_REASON IS NULL OR @p_REQ_REASON ='')
157
		BEGIN
158
			SELECT '-1' Result, '' REQ_PAY_ID, N'Lý do tạm ứng không được để trống' ErrorDesc
159
			RETURN '-1'
160
		END
161
		IF (@p_REQ_AMT IS NULL OR @p_REQ_AMT = 0)
162
		BEGIN
163
			SELECT '-1' Result, '' REQ_PAY_ID, N'Số tiền tạm ứng phải lớn hơn không' ErrorDesc
164
			RETURN '-1'
165
		END
166
		IF (@p_BRANCH_ID IS NULL OR @p_BRANCH_ID ='')
167
		BEGIN
168
			SELECT '-1' Result, '' REQ_PAY_ID, N'Đơn vị không được để trống' ErrorDesc
169
			RETURN '-1'
170
		END
171

    
172
		
173
		IF (@p_RECIVER_MONEY IS NOT NULL AND @p_RECIVER_MONEY ='' AND @p_REQ_TYPE = 'D')
174
		BEGIN
175
			SELECT '-1' Result, '' REQ_PAY_ID, N'Người nhận tiền tạm ứng không được để trống' ErrorDesc
176
			RETURN '-1'
177
		END
178

    
179
		IF(@p_REQ_TYPE='I')
180
		BEGIN
181
			IF((@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT = ''))
182
			BEGIN
183
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản người đề nghị tạm ứng không được để trống'  ErrorDesc
184
						RETURN '-1'
185
			END
186
			IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM =@p_RECEIVER_DEBIT AND REF_ID =  @p_REF_ID))
187
			BEGIN
188
						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
189
						RETURN '-1'
190
			END
191
			IF(LEN(ISNULL(@p_RECEIVER_DEBIT,''))>15)
192
			BEGIN
193
						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
194
						RETURN '-1'
195
			END
196
		END
197
	END
198
------------------------------------------------------------------------------------ end validate phần master ------------------------------------------------------------------------------------------------------
199

    
200

    
201
-- doanptt 19/01/2022 Khai báo lưới danh sách 
202
	DECLARE @hdocCus INT, @hdocPayAtach INT, @hdocPO INT, @hdocSchedule INT, @hdocRecurring INT, @hdocPeriod INT, @hdocPayMethod INT, @hdocPayBudget INT
203

    
204
		-- THONG TIN KHACH HANG
205
		EXEC sp_xml_preparedocument @hdocCus OUTPUT, @p_XMP_CUS;
206
		-- HOP DONG, CHUNG TU DINH KEM
207
		EXEC sp_xml_preparedocument @hdocPayAtach OUTPUT, @p_XMP_PAY_ATTACH;
208
		-- THONG TIN PO/ HOP DONG
209
		EXEC sp_xml_preparedocument @hdocPO OUTPUT, @p_XMP_ADVANCE_DT_2;
210
		-- DANH SACH CAC DOT THANH TOAN PO/ HOP DONG
211
		EXEC sp_xml_preparedocument @hdocSchedule OUTPUT, @p_XMP_PAY_SCHEDULE;
212
		-- THONG TIN HOP DONG DINH KY
213
		EXEC sp_xml_preparedocument @hdocRecurring OUTPUT, @p_XMP_ADVANCE_DT;
214
		-- THONG TIN DINH KY TAM UNG
215
		EXEC sp_xml_preparedocument @hdocPeriod OUTPUT, @p_XMP_PAY_PERIOD;
216
		-- THONG TIN PHUONG THUC THANH TOAN
217
		EXEC sp_xml_preparedocument @hdocPayMethod OUTPUT, @p_XMP_PAY_METHOD;
218
		-- THONG TIN HANG MUC NGAN SACH VA CHI PHI
219
		EXEC sp_xml_preparedocument @hdocPayBudget OUTPUT, @p_XMP_PAY_BUDGET;
220

    
221
		-------------------------------------------------------------- start validate các lưới -----------------------------------------------------------------------
222
-- BEGIN VALIDATE CAC DANH SACH
223
		IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='N' AND NOT EXISTS(SELECT * FROM OPENXML(@hdocPO, '/Root/XmlDataPO', 2) WITH(REQ_PAY_ID varchar(15))))
224
		BEGIN
225
			SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách PO/ hợp đồng không được để trống' ErrorDesc
226
			RETURN '-1'
227
		END
228
		IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='N' AND NOT EXISTS(SELECT * FROM OPENXML(@hdocSchedule, '/Root/XmlDataSchedule', 2) WITH(REQ_PAY_ID varchar(15))))
229
		BEGIN
230
			SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách thông tin chi tiết lịch thanh toán PO/ hợp đồng không được để trống' ErrorDesc
231
			RETURN '-1'
232
		END
233

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

    
240
		IF(@p_REQ_TYPE = 'P' AND (@p_IS_PERIOD='Y' OR @p_IS_PERIOD IS NULL) AND NOT EXISTS(SELECT * FROM OPENXML(@hdocPeriod, '/Root/XmlDataPeriod', 2) WITH(REQ_PAY_ID varchar(15))))
241
		BEGIN
242
			SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách thông tin định kỳ tạm ứng không được phép để trống' ErrorDesc
243
			RETURN '-1'
244
		END
245

    
246
		IF(@p_REQ_TYPE = 'D' AND NOT EXISTS(SELECT * FROM OPENXML(@hdocCus, '/Root/XmlDataCus', 2) WITH(CONTRACT_ID varchar(15))))
247
		BEGIN
248
			SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách khách hàng không được để trống' ErrorDesc
249
			RETURN '-1'
250
		END
251
-- END VALIDATE CAC DANH SACH
252
		-------------------------------------------------------------- end validate các lưới -----------------------------------------------------------------------
253
	
254
	-- 19-11-2019 LUCTV BO SUNG VALIDATE TRONG QUA TRINH TEST SAU KHI UAT
255
	-- NEU TAM UNG CHO NHA CUNG CAP THI DOT THANH TOAN KHONG DUOC PHEP NULL
256
	-- SO TIEN THANH TOÁN PHAI LON HON KHONG
257
		IF(@p_REQ_AMT <=0)
258
		BEGIN	
259
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền tạm ứng phải lớn hơn 0' ErrorDesc
260
			RETURN '-1'
261
		END
262
	 -- END VALIDATE TRONG QUA TRINH TEST UAT
263
		BEGIN TRANSACTION
264
		--IF(@p_DVDM_ID IS NULL OR @p_DVDM_ID ='')
265
		--BEGIN
266
		--	SET @p_DVDM_ID = (SELECT TOP 1 DVDM_ID FROM CM_DVDM WHERE DVDM_NAME ='KHOI TAI CHINH')
267
		--END
268
		UPDATE TR_REQ_ADVANCE_PAYMENT SET 
269
		REF_ID = @p_REF_ID,
270
		DEP_ID= @p_DEP_ID,REQ_REASON = @p_REQ_REASON, REQ_PAY_TYPE = @p_REQ_PAY_TYPE,
271
		REQ_AMT = @p_REQ_AMT,
272
		NOTES= @p_NOTES,
273
		REQ_TYPE= @p_REQ_TYPE,REQ_DESCRIPTION = @p_REQ_DESCRIPTION,RECEIVER_PO =@p_RECEIVER_PO, RECEIVER_DEBIT= @p_RECEIVER_DEBIT,
274
		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,
275
		AUTH_STATUS='E', DVDM_ID=@p_DVDM_ID, RATE =@p_RATE,REQ_TYPE_CURRENCY =@p_REQ_TYPE_CURRENCY, RECIVER_MONEY= @p_RECIVER_MONEY, 
276
		TRASFER_USER_RECIVE =@p_TRASFER_USER_RECIVE,IS_PERIOD =@p_IS_PERIOD, PAY_AMT = @p_PAY_AMT
277
		WHERE REQ_PAY_ID =@p_REQ_PAY_ID
278
		IF @@Error <> 0 GOTO ABORT
279
		--- INSERT VÀO BẢNG DETAIL NÊU TẠM ỨNG LÀ TẠM ỨNG THANH TOÁN
280
			
281
			-- KIEM TRA NEU TAM UNG THANH TOAN
282
			IF((@p_REQ_TYPE='P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE='D')
283
			BEGIN
284
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID=@p_REQ_PAY_ID
285
				DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID=@p_REQ_PAY_ID
286
				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),
287
				@AMT_REMAIN_SCHEDULE decimal(18,0),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),
288
				@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),
289
				@EMP_ID VARCHAR(15),@AMT_PAY_REAL DECIMAL(18,2),@CHECK_IN VARCHAR(15),@IS_CLOSED VARCHAR(1)= NULL,@REASON NVARCHAR(1000),@REF_TYPE VARCHAR(15)
290
				DECLARE @TYPE_COST VARCHAR(25), @FR_LEVEL INT ,@TO_LEVEL INT
291
				DECLARE XmlDataPO CURSOR FOR
292
				SELECT *
293
				FROM
294
				OPENXML(@hdocPO, '/Root/XmlDataPO', 2)--Thông tin PO/ hợp đồng
295
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
296
				OPEN XmlDataPO;
297
				DECLARE @INDEX_PO INT =0
298
				SET @INDEX_PO = 0
299
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
300
				WHILE @@fetch_status=0 
301
				BEGIN
302
					SET @INDEX_PO = @INDEX_PO +1
303
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
304
					IF(@p_TYPE_FUNCTION ='SEND')
305
					BEGIN
306
					
307
					
308
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
309
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
310
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
311
					BEGIN
312
						ROLLBACK TRANSACTION
313
						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ố '+
314
						(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
315
						RETURN '-1'
316
					END
317
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
318
					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))
319
					BEGIN
320
						ROLLBACK TRANSACTION
321
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
322
						(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
323
						RETURN '-1'
324
					END
325
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
326
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
327
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
328
					BEGIN
329
						ROLLBACK TRANSACTION
330
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
331
						(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
332
						RETURN '-1'
333
					END
334
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
335
					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))
336
					BEGIN
337
						ROLLBACK TRANSACTION
338
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
339
						(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
340
						RETURN '-1'
341
					END
342
					--- KIEM TRA XEM PO NAY DUOC THANH TOAN HAY CHUA
343
					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' )))
344
					BEGIN
345
						ROLLBACK TRANSACTION
346
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
347
						(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
348
						RETURN '-1'
349
					END
350
					END
351
					DECLARE @REQ_PAYDTID VARCHAR(15);
352
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
353
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
354
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
355
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,'P')
356
				IF @@error<>0 GOTO ABORT;
357
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
358
				END
359
				CLOSE XmlDataPO;
360
				DEALLOCATE XmlDataPO;
361
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
362
				DECLARE XmlDataSchedule CURSOR FOR
363
				SELECT *
364
				FROM
365
				OPENXML(@hdocSchedule, '/Root/XmlDataSchedule',2)
366
				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),
367
				AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
368
				REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
369
				OPEN XmlDataSchedule
370
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
371
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
372
				WHILE @@fetch_status=0 
373
				BEGIN
374
					DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
375
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
376
					IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
377
					INSERT INTO TR_REQ_PAY_SCHEDULE(
378
					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,
379
					CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE, AMT_PAY_REAL)
380
					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,
381
					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)
382
				--- END KHAI BAO CURSOR
383
				IF @@error<>0 GOTO ABORT;
384
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
385
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
386
				END
387
				CLOSE XmlDataSchedule;
388
				DEALLOCATE XmlDataSchedule;
389
			END
390
		--- END TẠM ỨNG THANH TOÁN
391
		---- TẠM ỨNG HĐ ĐỊNH KÌ
392
			IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
393
			BEGIN
394
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID
395
				DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
396
				DECLARE @END_DT VARCHAR(20)
397
				DECLARE XmlDataRecurring CURSOR FOR
398
				SELECT *
399
				FROM
400
				OPENXML(@hdocRecurring, '/Root/XmlDataRecurring', 2)
401
				WITH(CONTRACT_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15), END_DT VARCHAR(20))
402
				OPEN XmlDataRecurring;
403
				SET @INDEX_PO = 0
404
				FETCH NEXT FROM XmlDataRecurring INTO @REF_ID,@IS_CLOSED,@REF_TYPE, @END_DT
405
				WHILE @@fetch_status=0 
406
				BEGIN
407
					SET @INDEX_PO = @INDEX_PO +1
408
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
409
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
410
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
411
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE, END_DT) 
412
					VALUES(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,'C', CONVERT(DATE,@END_DT,103))
413
				IF @@error<>0 GOTO ABORT;
414
				FETCH NEXT FROM XmlDataRecurring INTO @REF_ID,@IS_CLOSED,@REF_TYPE, @END_DT
415
				END
416
				CLOSE XmlDataRecurring;
417
				DEALLOCATE XmlDataRecurring;
418
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
419
			----------------------------
420
			--INSERT FROM PERIOD	
421
				DECLARE XmlDataPeriod CURSOR FOR
422
				SELECT *
423
				FROM
424
				OPENXML(@hdocPeriod, '/Root/XmlDataPeriod', 2)
425
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
426
				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), END_DT VARCHAR(20) )
427
				OPEN XmlDataPeriod;
428
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5), @OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),
429
				@AMT_PAY_PERIOD DECIMAL(18,2),@FROM_DATE VARCHAR(20),@TO_DATE VARCHAR(20),@PAY_PHASE NVARCHAR(250), @REASON_TTDK NVARCHAR(2000)
430
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE, @OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK, @END_DT
431
				WHILE @@fetch_status=0 
432
				BEGIN
433
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
434
					IF(@p_TYPE_FUNCTION ='SEND')
435
					BEGIN
436
					
437
					--IF(EXISTS(SELECT CONTRACT_ID 
438
					--FROM TR_CONTRACT 
439
					--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 <>''))
440
					
441
					----AND IS_CLOSED='Y' ))
442
					--BEGIN
443
					--	ROLLBACK TRANSACTION
444
					--	SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tạm ứng hợp đồng định kì đã đóng' ErrorDesc
445
					--	RETURN '-1'
446
					--END
447

    
448
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0)
449
					BEGIN
450
						ROLLBACK TRANSACTION
451
						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
452
						RETURN '-1'
453
					END
454
					-- NEU LÀ DINH KI THI HD PHAI KHAC NULL
455
						IF(@CONTRACT_ID IS NULL OR @CONTRACT_ID ='' )
456
						BEGIN
457
							ROLLBACK TRANSACTION
458
							SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin thanh toán hợp đồng định kì: Cột Số hợp đồng không được phép để trống' ErrorDesc
459
							RETURN '-1'
460
						END
461
					-- KIEM TRA CHI TIET HOP DONG PHAI NAM TRONG DANH SACH CAC HOP DONG
462
						IF(@CONTRACT_ID IS NOT NULL AND  @CONTRACT_ID <> '' )
463
						BEGIN
464
							IF(NOT EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REF_ID =@CONTRACT_ID))
465
							BEGIN
466
								ROLLBACK TRANSACTION
467
								SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin thanh toán hợp đồng định kì - Số hợp đồng phải nằm trong danh sách các hợp đồng được chọn trên lưới Hợp đồng định kì' ErrorDesc
468
								RETURN '-1'
469
							END
470
						END
471
					END
472
					DECLARE @PERIOD_ID VARCHAR(15);
473
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
474
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
475
					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, 
476
					TO_DATE,AD_PAY_ID,PROCESS,PAY_PHASE, REASON)
477
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'ADV_PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103), @OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,'U',
478
					@CURRENCY, @RATE,CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@p_REQ_PAY_ID,'0',@PAY_PHASE,@REASON_TTDK)
479
				IF @@error<>0 GOTO ABORT;
480
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE , @OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE, @TO_DATE,@PAY_PHASE,@REASON_TTDK, @END_DT
481
			END
482
			CLOSE XmlDataPeriod;
483
			DEALLOCATE XmlDataPeriod;
484
			-- VALIDATE SO TIEN
485
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
486
			--BEGIN
487
			--	ROLLBACK TRANSACTION
488
			--	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
489
			--	RETURN '-1'
490
			--END
491
			----
492
			END
493
		---- END TẠM ỨNG HĐ ĐỊNH KÌ
494
		--- INSERT PHƯƠNG THỨC THANH TOÁN
495
		----MethodCursor
496
			DELETE FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
497
			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),
498
					@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(250), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20),
499
					@TYPE_TRANSFER VARCHAR(15), @BANKCODE_NAPAS VARCHAR(20), @BANKCODE VARCHAR(20), @BANKNAME VARCHAR(250), @SUB_ISSUED_BY VARCHAR(250), @RECEIVER_DEBIT VARCHAR(20)
500
			DECLARE @INDEX_PAY_METHOD DECIMAL(18,0) = 0;
501
			DECLARE XmlDataMethod CURSOR FOR
502
			SELECT *
503
			FROM
504
			OPENXML(@hdocPayMethod, '/Root/XmlDataMethod',2)
505
			WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2),REQ_PAY_TYPE varchar(1),
506
			REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), ACC_NAME NVARCHAR(250), 
507
			ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15),
508
			TYPE_TRANSFER VARCHAR(15), BANKCODE_NAPAS VARCHAR(20), BANKCODE VARCHAR(20), BANKNAME NVARCHAR(250), SUB_ISSUED_BY NVARCHAR(250), RECEIVER_DEBIT NVARCHAR(20))
509
			OPEN XmlDataMethod
510
			FETCH NEXT FROM XmlDataMethod 
511
			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,@TYPE_TRANSFER, @BANKCODE_NAPAS, @BANKCODE, @BANKNAME, @SUB_ISSUED_BY, @RECEIVER_DEBIT 
512
			WHILE @@fetch_status=0 
513
			BEGIN
514
				SET @INDEX_PAY_METHOD = @INDEX_PAY_METHOD + 1;
515
					---------------------------start validate ------------------------------
516
					IF(@p_TYPE_FUNCTION ='SEND')
517
					BEGIN
518
						IF(@ACC_NO IS NULL OR @ACC_NO = '')
519
						BEGIN
520
							ROLLBACK TRANSACTION
521
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Phương thức thanh toán: Dòng ' + CAST(@INDEX_PAY_METHOD AS NVARCHAR(255)) + N': Số tài khoản/ CMND không được để trống'  ErrorDesc
522
							RETURN '-1'
523
						END
524
						IF(@ACC_NAME IS NULL OR @ACC_NAME = '')
525
						BEGIN
526
							ROLLBACK TRANSACTION
527
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Phương thức thanh toán: Dòng ' + CAST(@INDEX_PAY_METHOD AS NVARCHAR(255)) + N': Tên tài khoản/ người nhận không được để trống'  ErrorDesc
528
							RETURN '-1'
529
						END
530
						IF(@ISSED_BY IS NULL OR @ISSED_BY = '')
531
						BEGIN
532
							ROLLBACK TRANSACTION
533
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Phương thức thanh toán: Dòng ' + CAST(@INDEX_PAY_METHOD AS NVARCHAR(255)) + N': Ngân hàng/ nơi cấp CMND không được để trống'  ErrorDesc
534
							RETURN '-1'
535
						END
536
						IF(@REQ_PAY_REASON IS NULL OR @REQ_PAY_REASON = '')
537
						BEGIN
538
							ROLLBACK TRANSACTION
539
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Phương thức thanh toán: Dòng ' + CAST(@INDEX_PAY_METHOD AS NVARCHAR(255)) + N': Nội dung thanh toán không được để trống'  ErrorDesc
540
							RETURN '-1'
541
						END
542
						IF(@TOTAL_AMT_METHOD IS NULL OR @TOTAL_AMT_METHOD = 0)
543
						BEGIN
544
							ROLLBACK TRANSACTION
545
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Phương thức thanh toán: Dòng ' + CAST(@INDEX_PAY_METHOD AS NVARCHAR(255)) + N': Số tiền thanh toán phải lớn hơn 0'  ErrorDesc
546
							RETURN '-1'
547
						END
548
						IF(@REQ_PAY_TYPE = '1' AND (@ISSUED_DT IS NULL OR @ISSUED_DT = ''))
549
						BEGIN
550
							ROLLBACK TRANSACTION
551
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Phương thức thanh toán, dòng ' + CAST(@INDEX_PAY_METHOD AS NVARCHAR(255)) + N': Ngày cấp CMND không được để trống nếu phương thức thanh toán là bằng tiền mặt'  ErrorDesc
552
							RETURN '-1'
553
						END
554
						
555
					END
556
					-----------------------------end validate ----------------------------
557
				IF(@REQ_PAY_TYPE<>'1')
558
				BEGIN
559
					SET @ISSUED_DT = NULL
560
				END
561
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
562
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
563
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
564
				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,
565
				CREATE_DT,ACC_NO,ACC_NAME,ISSUED_BY,ISSUED_DT,CURRENCY,RATE,CHECK_IN, TYPE_TRANSFER, BANKCODE_NAPAS, BANKCODE, BANKNAME, SUB_ISSUED_BY, RECEIVER_DEBIT)
566
				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,'',
567
				@p_MAKER_ID,GETDATE(),@ACC_NO,@ACC_NAME,@ISSED_BY, CONVERT(DATE, @ISSUED_DT, 103),@CURRENCY,@RATE,@CHECK_IN,@TYPE_TRANSFER, @BANKCODE_NAPAS, @BANKCODE, @BANKNAME, @SUB_ISSUED_BY, @RECEIVER_DEBIT)
568
			IF @@error<>0 GOTO ABORT;
569
			FETCH NEXT FROM XmlDataMethod 
570
			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,@TYPE_TRANSFER, @BANKCODE_NAPAS, @BANKCODE, @BANKNAME, @SUB_ISSUED_BY, @RECEIVER_DEBIT
571
			END
572
			CLOSE XmlDataMethod;
573
			DEALLOCATE XmlDataMethod
574
		----END INSERT PHƯƠNG THỨC THANH TOÁN
575
		----INSERT VAO BANG DS KHACH HANG
576
			DELETE FROM TR_REQ_ADVANCE_CUS WHERE REQ_PAY_ID = @p_REQ_PAY_ID
577
			DECLARE XmlDataCus CURSOR FOR
578
			SELECT *
579
			FROM
580
			OPENXML(@hdocCus, '/Root/XmlDataCus', 2)
581
			WITH(CUST_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO decimal(18,2),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
582
			OPEN XmlDataCus;
583

    
584
			FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
585
				WHILE @@fetch_status=0 
586
				BEGIN		
587
					INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
588
					VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
589
				--- END KHAI BAO CURSOR
590
				IF @@error<>0 GOTO ABORT;
591
				FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
592
				END
593
				CLOSE XmlDataCus;
594
				DEALLOCATE XmlDataCus;
595
		----END
596
		-- HANG MUC CHI PHI VA NGAN SACH
597
			DELETE FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID
598
			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), @INDEX_NS INT =0
599
			DECLARE XmlDataGood CURSOR LOCAL FOR
600
			SELECT *
601
			FROM
602
			OPENXML(@hdocPayBudget, '/Root/XmlDataGood',2) 
603
			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),TYPE_COST VARCHAR(25) , FR_LEVEL INT  ,TO_LEVEL INT)
604
			OPEN XmlDataGood
605
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON,@TYPE_COST , @FR_LEVEL  ,@TO_LEVEL
606
			WHILE @@fetch_status=0 BEGIN
607
				--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
608
				SET @INDEX_NS = @INDEX_NS +1
609
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
610
				--IF(@p_TYPE_FUNCTION ='SEND')
611
				--BEGIN
612
				--IF((@AMT_EXE  > @AMT_REMAIN_GD))
613
				--BEGIN
614
				--		ROLLBACK TRANSACTION
615
				--		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
616
				--		RETURN '-1'
617
				--END	
618
				--END
619
				IF(@p_TYPE_FUNCTION ='SEND')
620
				BEGIN
621
				IF(ISNULL(@AMT_EXE,0) =0)
622
				BEGIN
623
						ROLLBACK TRANSACTION
624
						CLOSE XmlDataGood;
625
						DEALLOCATE XmlDataGood;
626
						SELECT '-1' as Result, @p_REQ_PAY_ID REQ_PAY_ID,@p_REQ_PAY_CODE  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(NVARCHAR(5),@INDEX_NS)+ N': Ngân sách sử dụng thực tế phải lớn hơn 0.' ErrorDesc
627
						RETURN '-1'
628
				END
629
				--		ROLLBACK TRANSACTION
630
				--		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
631
				--		RETURN '-1'
632
				--END		
633
			END
634
				DECLARE @p_BUDGET_ID VARCHAR(15);
635
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
636
				IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
637
				INSERT INTO TR_REQ_PAY_BUDGET(BUDG_ID,GD_ID,REQ_PAY_ID,TRADE_ID,AMT_APP,AMT_DO,AMT_EXE,AMT_REMAIN,MAKER_ID,CREATE_DT,CURRENCY,RATE,REASON,TYPE_COST , FR_LEVEL  ,TO_LEVEL) 
638
				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,@TYPE_COST , @FR_LEVEL  ,@TO_LEVEL)
639
			IF @@error<>0 GOTO ABORT;
640
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON,@TYPE_COST , @FR_LEVEL  ,@TO_LEVEL
641
			END;
642
		CLOSE XmlDataGood;
643
		DEALLOCATE XmlDataGood;
644
		--- END INSERT NGAN SACH
645
		DELETE FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID
646
		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), @LICENSE_DT VARCHAR(20)
647
		DECLARE XmlAttach CURSOR FOR
648
		SELECT *
649
		FROM
650
		OPENXML(@hdocPayAtach, '/Root/XmlAttach',2) 
651
		WITH(ATTACH_ID varchar(15),CON_ID varchar(100),CONT_CODE VARCHAR(50), CON_NOTES NVARCHAR(1000),CON_DESC NVARCHAR(1000),CON_TYPE VARCHAR(15),AMT_ATT DECIMAL(18,2),REF_DT VARCHAR(20), LICENSE_DT VARCHAR(20))
652
		OPEN XmlAttach
653
		--INSERT CHUNG TU DINH KEM
654
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT, @LICENSE_DT
655
				WHILE @@fetch_status=0 
656
				BEGIN
657
					IF (@REF_DT='')
658
					BEGIN
659
						SET @REF_DT = NULL
660
					END
661
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
662
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
663
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT, LICENSE_DT) VALUES
664
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT, CONVERT(DATE, @REF_DT,103), CONVERT(DATE, @LICENSE_DT,103))
665
				IF @@error<>0 GOTO ABORT;
666
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT, @LICENSE_DT
667
				END
668
				CLOSE XmlAttach;
669
				DEALLOCATE XmlAttach;
670
		----END
671
		--- BAT DAU VALIDATE
672
		IF(@p_TYPE_FUNCTION ='SEND')
673
		BEGIN
674
			DECLARE @SUM_PTTT DECIMAL(18,0), @SUM_NS DECIMAL(18,0),@SUM_LICH_TT DECIMAL(18,0)
675
			SET @SUM_PTTT =(SELECT SUM(TOTAL_AMT * ISNULL(RATE,1)) FROM  TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
676
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID) AND @p_REQ_TYPE ='D')
677
			BEGIN
678
				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)
679
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_LICH_TT,0))
680
				BEGIN
681
					ROLLBACK TRANSACTION
682
					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
683
					RETURN '-1'
684
				END
685
			END
686
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
687
			BEGIN
688
				SET @SUM_NS =(SELECT SUM(AMT_EXE * ISNULL(RATE,1)) FROM  TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
689
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_NS,0))
690
				BEGIN
691
					ROLLBACK TRANSACTION
692
					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
693
					RETURN '-1'
694
				END
695
			END
696
			ELSE
697
			IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
698
			BEGIN
699
				ROLLBACK TRANSACTION
700
				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
701
				RETURN '-1'
702
			END
703
			
704
		END
705
		----END
706
		IF(@p_REQ_TYPE ='I')
707
			BEGIN
708
				DELETE FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID
709
				DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT decimal(18,2))
710
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
711
				BEGIN
712
					--DECLARE @DEP_CODE VARCHAR(15)
713
					--SET @DEP_CODE =(SELECT * FROM CM_DEPARTMENT WHERE DEP_ID =@p_DEP_ID)
714
					IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE (DEP_CODE LIKE '%06908%' OR DEP_CODE ='0690605') AND DEP_ID =@p_DEP_ID) --- LUCTV 14.10.22 BO SUNG THEM PHONG BAN
715
					BEGIN
716
						-- KHOI TAI CHINH SE KHONG CO PTGD NUA MA CHI CO KDK - LUCTV 29032021
717
						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'
718
						--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'
719
						--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' ORDER BY LIMIT_VALUE ASC
720
					END
721
					ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE (DEP_CODE LIKE'06906%') AND DEP_ID =@p_DEP_ID) --- DOANPTT 261022 BO SUNG HAN MUC GDK HO TRO
722
					BEGIN
723
						-- KHOI HO TRO SE KHONG CO PTGD NUA MA CHI CO KDK - LUCTV 29032021
724
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID, 1000000000 FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID = 'GDK'
725
						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 ('PTGD', 'GDK')
726
					END
727
					ELSE
728
					BEGIN
729
						IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE ='0690405' AND DEP_ID =@p_DEP_ID)
730
						BEGIN
731
								-- KHOI TAI CHINH SE KHONG CO PTGD NUA MA CHI CO KDK - LUCTV 29032021
732
							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'
733
							--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'
734
							--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' ORDER BY LIMIT_VALUE ASC
735
						END
736
						ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
737
						BEGIN
738
							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' ORDER BY LIMIT_VALUE ASC
739
						END
740
						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)
741
						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) 
742
						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)
743
						OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%799%' AND DEP_ID =@p_DEP_ID)
744
						OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%899%' AND DEP_ID =@p_DEP_ID))
745
						BEGIN
746
							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') ORDER BY LIMIT_VALUE ASC
747
						END
748
						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)
749
						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) 
750
						OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
751
						BEGIN
752
							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' ORDER BY LIMIT_VALUE ASC
753
						END
754
						ELSE
755
						BEGIN
756
							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' ORDER BY LIMIT_VALUE ASC
757
						END
758
					END
759
					
760
				END
761
				ELSE
762
				BEGIN
763
					IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
764
					BEGIN
765
							--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
766
							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 AND ROLE_ID ='GDDV' 
767
							--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'
768
					END
769
					ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
770
					BEGIN
771
							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 AND ROLE_ID ='TPGD'
772
							--BRANCH_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE)
773
							--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'
774
					END
775
				END
776
				DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
777
				SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
778
				DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
779
				DECLARE CUR_PR CURSOR FOR  SELECT A.ROLE_ID, A.BRANCH_ID,A.AMT FROM @tmp A ORDER BY A.AMT ASC
780
				OPEN CUR_PR
781
				FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
782
				WHILE @@FETCH_STATUS =0 --AND @STOP=0
783
				BEGIN
784
					-- DOANPTT 261022: DONG NHAT PROCESS GIUA DON VI VA HOI SO
785
					IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
786
					BEGIN
787
						SET @INDEX= @INDEX+1
788

    
789
						IF @INDEX = @SL_ROLE
790
						SET @ISLEAF = 'Y'
791
						ELSE
792
						SET @ISLEAF = 'N'
793
						SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
794

    
795
						IF(@INDEX=1 )
796
						BEGIN		
797
							SET @PARENT_ID = NULL
798
							SET @STATUS = 'C'							
799
						END				
800
						ELSE 
801
						BEGIN
802
							SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
803
							SET @STATUS = 'U'
804
						END
805
					END
806
					ELSE
807
					BEGIN
808
						SET @INDEX= 0
809
						IF @INDEX = @SL_ROLE - 1
810
						SET @ISLEAF = 'Y'
811
						ELSE
812
						SET @ISLEAF = 'N'
813
						SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
814

    
815
						IF(@INDEX = 0 )
816
						BEGIN		
817
							SET @PARENT_ID = NULL
818
							SET @STATUS = 'C'							
819
						END				
820
						ELSE 
821
						BEGIN
822
							SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
823
							SET @STATUS = 'U'
824
						END
825
					END
826
					
827
					IF(@ROLE_ID = 'TKTGD')
828
					BEGIN
829
						SET @INDEX = 3
830
					END
831

    
832
					IF(@LIMIT_VALUE >= @p_REQ_AMT)
833
					BEGIN
834
						INSERT INTO dbo.PL_REQUEST_PROCESS(
835
						REQ_ID,
836
						PROCESS_ID,
837
						STATUS,
838
						ROLE_USER,
839
						BRANCH_ID,
840
						CHECKER_ID,
841
						APPROVE_DT,
842
						PARENT_PROCESS_ID,
843
						IS_LEAF, COST_ID, DVDM_ID, NOTES
844
						)
845
						VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
846
						--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y','')
847
						IF(@ROLE_ID <> 'TKTGD' AND @ROLE_ID <> 'TKHDQT')
848
						BEGIN
849
							BREAK;
850
						END
851
					END
852
					ELSE
853
					BEGIN
854
						INSERT INTO PL_REQUEST_PROCESS (
855
						REQ_ID,
856
						PROCESS_ID,
857
						STATUS,
858
						ROLE_USER,
859
						BRANCH_ID,
860
						CHECKER_ID,
861
						APPROVE_DT,
862
						PARENT_PROCESS_ID,
863
						IS_LEAF, COST_ID, DVDM_ID, NOTES
864
						) 
865
						VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
866
					END
867
					
868
					FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
869
				END
870
				CLOSE CUR_PR
871
				DEALLOCATE CUR_PR
872
			END
873
COMMIT TRANSACTION
874
-- BEIGN VALIDATE SEND APPROVE
875
		IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
876
		BEGIN
877
			IF(@p_MAKER_ID <> (SELECT TOP 1 MAKER_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID))
878
			BEGIN
879
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Gửi phê duyệt thất bại! Bạn không được quyền gửi phê duyệt phiếu đề nghị tạm ứng của người khác tạo'  ErrorDesc
880
				RETURN '-1'
881
			END
882
			IF(NOT EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT where MAKER_ID = @p_MAKER_ID ))
883
			BEGIN
884
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Bạn không được phép cập nhật phiếu đề nghị tạm ứng này. Chỉ người tạo phiếu mới được cập nhật phiếu' ErrorDesc
885
				RETURN '-1'
886
			END
887
			IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT where AUTH_STATUS = 'U' AND REQ_PAY_ID = @p_REQ_PAY_ID ))
888
			BEGIN
889
				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
890
				RETURN '-1'
891
			END
892
			IF (@p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE ='')
893
			BEGIN
894
				SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu không được để trống' ErrorDesc
895
				RETURN '-1'
896
			END
897
			IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS <> 'E' AND ISNULL(AUTH_STATUS, '') <> ''))
898
			BEGIN
899
				SELECT '-1' Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đã được kí xác nhận từ các cấp. Bạn không được quyền chỉnh sửa' ErrorDesc
900
				RETURN '-1'
901
			END
902
			--ROLLBACK TRANSACTION
903
			-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
904
			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')
905
			BEGIN
906
				DECLARE @USER_TP VARCHAR(15) =''
907
				--SET @USER_TP =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID 
908
				--		AND (RoleName IN ('GDDV','TPTC','TC','KTT') OR RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='GDDV')))
909
				IF(@USER_TP IS NULL OR @USER_TP ='')
910
				BEGIN
911
					SET @USER_TP = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE SECUR_CODE =@p_DEP_ID 
912
						AND (RoleName IN ('TBP','PP')))
913
				END
914
				--UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TP WHERE REQ_PAY_ID =@p_REQ_PAY_ID
915
			END
916
			DECLARE @SUM_TEMP_PAY DECIMAL, @SUM_PAY DECIMAL
917
			IF (@p_REQ_TYPE ='I')
918
			BEGIN
919
				SET @SUM_TEMP_PAY = (SELECT SUM(REQ_AMT*ISNULL(RATE,1)) 
920
				FROM TR_REQ_ADVANCE_PAYMENT WHERE  REF_ID =@p_REF_ID AND AUTH_STATUS ='A' AND  REQ_TYPE ='I')
921
				SET  @SUM_PAY = (SELECT SUM (ISNULL(PAY_AMT,0)) FROM TR_REQ_ADVANCE_PAYMENT WHERE REF_ID =@p_REF_ID  AND AUTH_STATUS_KT ='A' AND REQ_TYPE ='I')
922
				UPDATE TR_REQ_ADVANCE_PAYMENT SET REQ_TEMP_AMT =ISNULL(@SUM_TEMP_PAY,0) -ISNULL(@SUM_PAY,0) WHERE REQ_PAY_ID =@p_REQ_PAY_ID
923
			END
924
			DECLARE @SUM_THANH_TOAN DECIMAL(18,0) =0, @SUM_PHUONG_THUC DECIMAL(18,0) =0
925
			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)
926
			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)
927
			IF(ROUND(@SUM_THANH_TOAN,0) <> ROUND(@SUM_PHUONG_THUC,0))
928
			BEGIN
929
				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
930
				RETURN '-1'
931
			END
932
			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')
933
			BEGIN
934
				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
935
				RETURN '-1'
936
			END
937

    
938
				
939
			--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')))
940
			--BEGIN
941
			--	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
942
			--	RETURN '-1'
943
			--END
944
			UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U',CREATE_DT = GETDATE() WHERE REQ_PAY_ID =@p_REQ_PAY_ID
945
			UPDATE PL_REQUEST_PROCESS SET ROLE_USER ='GDDV' WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER ='PGD'
946
			UPDATE PL_REQUEST_PROCESS SET ROLE_USER ='TPGD' WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER ='PPGD'
947
			INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
948
			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')
949
			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))
950
			BEGIN
951
				SELECT '4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, N'Đơn vị gửi phiếu phê duyệt phiếu đề nghị tạm ứng số: ' + ISNULL(@p_REQ_PAY_CODE,'') + N' thành công. Vui lòng đợi cấp phê duyệt trung gian xác nhận phiếu' ErrorDesc
952
				RETURN '4'
953
			END
954
			ELSE
955
			BEGIN
956
				SELECT '4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, N'Đơn vị gửi phiếu phê duyệt phiếu đề nghị tạm ứng số: ' + ISNULL(@p_REQ_PAY_CODE,'') + N' thành công. Vui lòng đợi trưởng đơn vị phê duyệt phiếu' ErrorDesc
957
				RETURN '4'
958
			END
959
			--SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
960
			--RETURN '4'
961
		END
962
		-- FIX PHONG HO LOI LIEN QUAN DEN VIEC TAI KHOAN TAM UNG BI SAI
963
		----DECLARE  @REQ_PAY_ID varchar(15), @l_REF_ID varchar(15)
964
		----DECLARE cursorProduct CURSOR LOCAL FOR
965
		----SELECT REQ_PAY_ID,REF_ID FROM TR_REQ_ADVANCE_PAYMENT A WHERE A.REQ_TYPE ='I'
966
		----Open cursorProduct
967
		----FETCH NEXT FROM cursorProduct INTO @REQ_PAY_ID, @l_REF_ID
968
		----WHILE @@FETCH_STATUS = 0
969
		----BEGIN
970
		----   UPDATE TR_REQ_ADVANCE_PAYMENT SET RECEIVER_DEBIT =(SELECT TOP 1 ISNULL(ACC_NUM,'') FROM CM_ACCOUNT_PAY WHERE REF_ID =@l_REF_ID AND ACC_TYPE ='ADV_PAY' ) WHERE REQ_PAY_ID =@REQ_PAY_ID
971
		----FETCH NEXT FROM cursorProduct INTO  @REQ_PAY_ID, @l_REF_ID
972
		----END
973
-- END VALIDATE SEND APPROVE
974

    
975
	SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
976
	RETURN '0'
977
ABORT:
978
BEGIN
979
		ROLLBACK TRANSACTION
980
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
981
		RETURN '-1'
982
End