Project

General

Profile

advance_upd_060122.txt

Luc Tran Van, 01/06/2023 10:31 AM

 
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

    
355
					IF(LEFT(@REF_ID, 3) = 'TRC')
356
					BEGIN
357
						INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
358
						(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,'C')
359
					END
360
					ELSE
361
					BEGIN
362
						INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
363
						(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,'P')
364
					END
365
				IF @@error<>0 GOTO ABORT;
366
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
367
				END
368
				CLOSE XmlDataPO;
369
				DEALLOCATE XmlDataPO;
370
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
371
				DECLARE XmlDataSchedule CURSOR FOR
372
				SELECT *
373
				FROM
374
				OPENXML(@hdocSchedule, '/Root/XmlDataSchedule',2)
375
				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),
376
				AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
377
				REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
378
				OPEN XmlDataSchedule
379
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
380
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
381
				WHILE @@fetch_status=0 
382
				BEGIN
383
					DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
384
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
385
					IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
386
					INSERT INTO TR_REQ_PAY_SCHEDULE(
387
					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,
388
					CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE, AMT_PAY_REAL)
389
					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,
390
					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)
391
				--- END KHAI BAO CURSOR
392
				IF @@error<>0 GOTO ABORT;
393
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
394
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
395
				END
396
				CLOSE XmlDataSchedule;
397
				DEALLOCATE XmlDataSchedule;
398
			END
399
		--- END TẠM ỨNG THANH TOÁN
400
		---- TẠM ỨNG HĐ ĐỊNH KÌ
401
			IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
402
			BEGIN
403
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID
404
				DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
405
				DECLARE @END_DT VARCHAR(20)
406
				DECLARE XmlDataRecurring CURSOR FOR
407
				SELECT *
408
				FROM
409
				OPENXML(@hdocRecurring, '/Root/XmlDataRecurring', 2)
410
				WITH(CONTRACT_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15), END_DT VARCHAR(20))
411
				OPEN XmlDataRecurring;
412
				SET @INDEX_PO = 0
413
				FETCH NEXT FROM XmlDataRecurring INTO @REF_ID,@IS_CLOSED,@REF_TYPE, @END_DT
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, END_DT) 
421
					VALUES(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,'C', CONVERT(DATE,@END_DT,103))
422
				IF @@error<>0 GOTO ABORT;
423
				FETCH NEXT FROM XmlDataRecurring INTO @REF_ID,@IS_CLOSED,@REF_TYPE, @END_DT
424
				END
425
				CLOSE XmlDataRecurring;
426
				DEALLOCATE XmlDataRecurring;
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(@hdocPeriod, '/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), END_DT VARCHAR(20) )
436
				OPEN XmlDataPeriod;
437
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5), @OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),
438
				@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, @OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK, @END_DT
440
				WHILE @@fetch_status=0 
441
				BEGIN
442
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
443
					IF(@p_TYPE_FUNCTION ='SEND')
444
					BEGIN
445
					
446
					--IF(EXISTS(SELECT CONTRACT_ID 
447
					--FROM TR_CONTRACT 
448
					--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 <>''))
449
					
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
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0)
458
					BEGIN
459
						ROLLBACK TRANSACTION
460
						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
461
						RETURN '-1'
462
					END
463
					-- NEU LÀ DINH KI THI HD PHAI KHAC NULL
464
						IF(@CONTRACT_ID IS NULL OR @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ì: Cột Số hợp đồng không được phép để trống' ErrorDesc
468
							RETURN '-1'
469
						END
470
					-- KIEM TRA CHI TIET HOP DONG PHAI NAM TRONG DANH SACH CAC HOP DONG
471
						IF(@CONTRACT_ID IS NOT NULL AND  @CONTRACT_ID <> '' )
472
						BEGIN
473
							IF(NOT EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REF_ID =@CONTRACT_ID))
474
							BEGIN
475
								ROLLBACK TRANSACTION
476
								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
477
								RETURN '-1'
478
							END
479
						END
480
					END
481
					DECLARE @PERIOD_ID VARCHAR(15);
482
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
483
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
484
					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, 
485
					TO_DATE,AD_PAY_ID,PROCESS,PAY_PHASE, REASON)
486
					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',
487
					@CURRENCY, @RATE,CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@p_REQ_PAY_ID,'0',@PAY_PHASE,@REASON_TTDK)
488
				IF @@error<>0 GOTO ABORT;
489
				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
490
			END
491
			CLOSE XmlDataPeriod;
492
			DEALLOCATE XmlDataPeriod;
493
			-- VALIDATE SO TIEN
494
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
495
			--BEGIN
496
			--	ROLLBACK TRANSACTION
497
			--	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
498
			--	RETURN '-1'
499
			--END
500
			----
501
			END
502
		---- END TẠM ỨNG HĐ ĐỊNH KÌ
503
		--- INSERT PHƯƠNG THỨC THANH TOÁN
504
		----MethodCursor
505
			DELETE FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
506
			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),
507
					@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(250), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20),
508
					@TYPE_TRANSFER VARCHAR(15), @BANKCODE_NAPAS VARCHAR(20), @BANKCODE VARCHAR(20), @BANKNAME VARCHAR(250), @SUB_ISSUED_BY VARCHAR(250), @RECEIVER_DEBIT VARCHAR(20)
509
			DECLARE @INDEX_PAY_METHOD DECIMAL(18,0) = 0;
510
			DECLARE XmlDataMethod CURSOR FOR
511
			SELECT *
512
			FROM
513
			OPENXML(@hdocPayMethod, '/Root/XmlDataMethod',2)
514
			WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2),REQ_PAY_TYPE varchar(1),
515
			REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), ACC_NAME NVARCHAR(250), 
516
			ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15),
517
			TYPE_TRANSFER VARCHAR(15), BANKCODE_NAPAS VARCHAR(20), BANKCODE VARCHAR(20), BANKNAME NVARCHAR(250), SUB_ISSUED_BY NVARCHAR(250), RECEIVER_DEBIT NVARCHAR(20))
518
			OPEN XmlDataMethod
519
			FETCH NEXT FROM XmlDataMethod 
520
			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 
521
			WHILE @@fetch_status=0 
522
			BEGIN
523
				SET @INDEX_PAY_METHOD = @INDEX_PAY_METHOD + 1;
524
					---------------------------start validate ------------------------------
525
					IF(@p_TYPE_FUNCTION ='SEND')
526
					BEGIN
527
						IF(@ACC_NO IS NULL OR @ACC_NO = '')
528
						BEGIN
529
							ROLLBACK TRANSACTION
530
							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
531
							RETURN '-1'
532
						END
533

    
534
						IF((@BANKCODE IS NULL OR @BANKCODE = '') AND @CHECK_IN = 'O')
535
						BEGIN
536
							ROLLBACK TRANSACTION
537
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin phương thức thanh toán, dòng ' + CONVERT(VARCHAR(5),@INDEX_PAY_METHOD)+N': Loại tài khoản là ngoài hệ thống! Vui lòng chọn lại Tên ngân hàng/nơi cấp CMND từ danh sách!' ErrorDesc
538
							RETURN '-1'
539
						END
540

    
541
						IF(@ACC_NAME IS NULL OR @ACC_NAME = '')
542
						BEGIN
543
							ROLLBACK TRANSACTION
544
							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
545
							RETURN '-1'
546
						END
547
						IF(@ISSED_BY IS NULL OR @ISSED_BY = '')
548
						BEGIN
549
							ROLLBACK TRANSACTION
550
							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
551
							RETURN '-1'
552
						END
553
						IF(@REQ_PAY_REASON IS NULL OR @REQ_PAY_REASON = '')
554
						BEGIN
555
							ROLLBACK TRANSACTION
556
							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
557
							RETURN '-1'
558
						END
559
						IF(@TOTAL_AMT_METHOD IS NULL OR @TOTAL_AMT_METHOD = 0)
560
						BEGIN
561
							ROLLBACK TRANSACTION
562
							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
563
							RETURN '-1'
564
						END
565
						IF(@REQ_PAY_TYPE = '1' AND (@ISSUED_DT IS NULL OR @ISSUED_DT = ''))
566
						BEGIN
567
							ROLLBACK TRANSACTION
568
							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
569
							RETURN '-1'
570
						END
571
						
572
					END
573
					-----------------------------end validate ----------------------------
574
				IF(@REQ_PAY_TYPE<>'1')
575
				BEGIN
576
					SET @ISSUED_DT = NULL
577
				END
578
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
579
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
580
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
581
				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,
582
				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)
583
				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,'',
584
				@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)
585
			IF @@error<>0 GOTO ABORT;
586
			FETCH NEXT FROM XmlDataMethod 
587
			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
588
			END
589
			CLOSE XmlDataMethod;
590
			DEALLOCATE XmlDataMethod
591
		----END INSERT PHƯƠNG THỨC THANH TOÁN
592
		----INSERT VAO BANG DS KHACH HANG
593
			DELETE FROM TR_REQ_ADVANCE_CUS WHERE REQ_PAY_ID = @p_REQ_PAY_ID
594
			DECLARE XmlDataCus CURSOR FOR
595
			SELECT *
596
			FROM
597
			OPENXML(@hdocCus, '/Root/XmlDataCus', 2)
598
			WITH(CUST_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO decimal(18,2),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
599
			OPEN XmlDataCus;
600

    
601
			FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
602
				WHILE @@fetch_status=0 
603
				BEGIN		
604
					INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
605
					VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
606
				--- END KHAI BAO CURSOR
607
				IF @@error<>0 GOTO ABORT;
608
				FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
609
				END
610
				CLOSE XmlDataCus;
611
				DEALLOCATE XmlDataCus;
612
		----END
613
		-- HANG MUC CHI PHI VA NGAN SACH
614
			DELETE FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID
615
			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
616
			DECLARE XmlDataGood CURSOR LOCAL FOR
617
			SELECT *
618
			FROM
619
			OPENXML(@hdocPayBudget, '/Root/XmlDataGood',2) 
620
			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)
621
			OPEN XmlDataGood
622
			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
623
			WHILE @@fetch_status=0 BEGIN
624
				--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
625
				SET @INDEX_NS = @INDEX_NS +1
626
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
627
				--IF(@p_TYPE_FUNCTION ='SEND')
628
				--BEGIN
629
				--IF((@AMT_EXE  > @AMT_REMAIN_GD))
630
				--BEGIN
631
				--		ROLLBACK TRANSACTION
632
				--		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
633
				--		RETURN '-1'
634
				--END	
635
				--END
636
				IF(@p_TYPE_FUNCTION ='SEND')
637
				BEGIN
638
				IF(ISNULL(@AMT_EXE,0) =0)
639
				BEGIN
640
						ROLLBACK TRANSACTION
641
						CLOSE XmlDataGood;
642
						DEALLOCATE XmlDataGood;
643
						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
644
						RETURN '-1'
645
				END
646
				--		ROLLBACK TRANSACTION
647
				--		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
648
				--		RETURN '-1'
649
				--END		
650
			END
651
				DECLARE @p_BUDGET_ID VARCHAR(15);
652
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
653
				IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
654
				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) 
655
				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)
656
			IF @@error<>0 GOTO ABORT;
657
			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
658
			END;
659
		CLOSE XmlDataGood;
660
		DEALLOCATE XmlDataGood;
661
		--- END INSERT NGAN SACH
662
		DELETE FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID
663
		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)
664
		DECLARE XmlAttach CURSOR FOR
665
		SELECT *
666
		FROM
667
		OPENXML(@hdocPayAtach, '/Root/XmlAttach',2) 
668
		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))
669
		OPEN XmlAttach
670
		--INSERT CHUNG TU DINH KEM
671
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT, @LICENSE_DT
672
				WHILE @@fetch_status=0 
673
				BEGIN
674
					IF (@REF_DT='')
675
					BEGIN
676
						SET @REF_DT = NULL
677
					END
678
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
679
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
680
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT, LICENSE_DT) VALUES
681
					(@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))
682
				IF @@error<>0 GOTO ABORT;
683
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT, @LICENSE_DT
684
				END
685
				CLOSE XmlAttach;
686
				DEALLOCATE XmlAttach;
687
		----END
688
		--- BAT DAU VALIDATE
689
		IF(@p_TYPE_FUNCTION ='SEND')
690
		BEGIN
691
			DECLARE @SUM_PTTT DECIMAL(18,0), @SUM_NS DECIMAL(18,0),@SUM_LICH_TT DECIMAL(18,0)
692
			SET @SUM_PTTT =(SELECT SUM(TOTAL_AMT * ISNULL(RATE,1)) FROM  TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
693
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID) AND @p_REQ_TYPE ='D')
694
			BEGIN
695
				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)
696
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_LICH_TT,0))
697
				BEGIN
698
					ROLLBACK TRANSACTION
699
					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
700
					RETURN '-1'
701
				END
702
			END
703
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
704
			BEGIN
705
				SET @SUM_NS =(SELECT SUM(AMT_EXE * ISNULL(RATE,1)) FROM  TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
706
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_NS,0))
707
				BEGIN
708
					ROLLBACK TRANSACTION
709
					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
710
					RETURN '-1'
711
				END
712
			END
713
			ELSE
714
			IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
715
			BEGIN
716
				ROLLBACK TRANSACTION
717
				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
718
				RETURN '-1'
719
			END
720
			
721
		END
722
		----END
723
		IF(@p_REQ_TYPE ='I')
724
			BEGIN
725
				DELETE FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID
726
				DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT decimal(18,2))
727
		-- BEGIN SELECT CAC CAP PHE DUYET --
728
		-- HOI SO
729
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
730
				BEGIN
731
				-- KHOI TAI CHINH
732
					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
733
					BEGIN
734
						-- KHOI TAI CHINH SE KHONG CO PTGD NUA MA CHI CO GDK - LUCTV 29032021
735
						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'
736
						--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'
737
						--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
738
					END
739
				-- KHOI HO TRO
740
					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, DO GDK HO TRO CO HAN MUC RIENG KHAC VOI CAC GDK KHAC
741
					BEGIN
742
						-- KHOI HO TRO SE KHONG CO PTGD NUA MA CHI CO KDK - LUCTV 29032021
743
						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'
744
						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')
745
					END
746
				-- PHONG TRUYEN THONG VA THUONG HIEU
747
					ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE ='0690405' AND DEP_ID =@p_DEP_ID) 
748
					BEGIN
749
							-- KHOI TAI CHINH SE KHONG CO PTGD NUA MA CHI CO KDK - LUCTV 29032021
750
						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'
751
						--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'
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 <>'GDK' ORDER BY LIMIT_VALUE ASC
753
					END
754
				-- KHOI VAN HANH
755
					ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
756
					BEGIN
757
						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
758
					END
759
				-- KHONG CO TGD VA PTGD
760
					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)
761
					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) 
762
					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)
763
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%799%' AND DEP_ID =@p_DEP_ID)
764
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%899%' AND DEP_ID =@p_DEP_ID))
765
					BEGIN
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 ='DV0001' AND A.ROLE_ID NOT IN ('GDK','PTGD') ORDER BY LIMIT_VALUE ASC
767
					END
768
				-- KHOI QUAN LY RUI RO, KHOI CNTT,...
769
					ELSE IF (EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06907%' AND DEP_ID =@p_DEP_ID) -- KHOI QUAN LY RUI RO
770
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06909%' AND DEP_ID =@p_DEP_ID) -- KHOI CNTT
771
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06911%' AND DEP_ID =@p_DEP_ID) -- KHOI THAM DINH TIN DUNG
772
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06921%' AND DEP_ID =@p_DEP_ID) -- KHOI KHCN - KHACH HANG CA NHAN
773
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID)) -- KHOI KHOI KHDN & DINH CHE
774
					BEGIN
775
						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
776
					END
777
				-- CON LAI
778
					ELSE
779
					BEGIN
780
						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
781
					END
782
				END
783
		-- CN & PGD
784
				ELSE
785
				BEGIN
786
				-- ROLE GDDV HOAC KIEM NHIEM GDDV
787
					IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
788
					BEGIN
789
							--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
790
							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' 
791
							--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'
792
					END
793
				-- ROLE TPGD HOAC KIEM NHIEM TPGD
794
					ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
795
					BEGIN
796
							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'
797
							--BRANCH_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE)
798
							--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'
799
					END
800
				END
801
		-- END SELECT CAC CAP PHE DUYET --
802

    
803
				DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
804
				SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
805
				DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
806
		-- BEGIN THEM CAC CAP PHE DUYET VAO TABLE PL_REQUEST_PROCESS --
807
				DECLARE CUR_PR CURSOR FOR  SELECT A.ROLE_ID, A.BRANCH_ID,A.AMT FROM @tmp A ORDER BY A.AMT ASC -- SAP XEP LAI CAC CAP DUYET THEO HAN MUC PHE DUYET
808
				OPEN CUR_PR
809
				FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
810
				WHILE @@FETCH_STATUS =0 --AND @STOP=0
811
				BEGIN
812
					-- DOANPTT 261022: DONG NHAT PROCESS GIUA DON VI VA HOI SO
813
				-- HOI SO
814
					IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
815
					BEGIN
816
						SET @INDEX= @INDEX+1
817

    
818
						IF @INDEX = @SL_ROLE
819
						SET @ISLEAF = 'Y'
820
						ELSE
821
						SET @ISLEAF = 'N'
822
						SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
823

    
824
						IF(@INDEX=1 )
825
						BEGIN		
826
							SET @PARENT_ID = NULL
827
							SET @STATUS = 'C'							
828
						END				
829
						ELSE 
830
						BEGIN
831
							SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
832
							SET @STATUS = 'U'
833
						END
834
					END
835
				-- CN & PGD
836
					ELSE
837
					BEGIN
838
						SET @INDEX= 0
839
						IF @INDEX = @SL_ROLE - 1
840
						SET @ISLEAF = 'Y'
841
						ELSE
842
						SET @ISLEAF = 'N'
843
						SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
844

    
845
						IF(@INDEX = 0 )
846
						BEGIN		
847
							SET @PARENT_ID = NULL
848
							SET @STATUS = 'C'							
849
						END				
850
						ELSE 
851
						BEGIN
852
							SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
853
							SET @STATUS = 'U'
854
						END
855
					END
856
					/*
857
					IF(@ROLE_ID = 'TKTGD')
858
					BEGIN
859
						SET @INDEX = 3
860
					END
861
					*/
862
					IF(@LIMIT_VALUE >= @p_REQ_AMT)
863
					BEGIN
864
						INSERT INTO dbo.PL_REQUEST_PROCESS(
865
						REQ_ID,
866
						PROCESS_ID,
867
						STATUS,
868
						ROLE_USER,
869
						BRANCH_ID,
870
						CHECKER_ID,
871
						APPROVE_DT,
872
						PARENT_PROCESS_ID,
873
						IS_LEAF, COST_ID, DVDM_ID, NOTES
874
						)
875
						VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
876
						--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y','')
877
						IF(@ROLE_ID <> 'TKTGD' AND @ROLE_ID <> 'TKHDQT')
878
						BEGIN
879
							BREAK;
880
						END
881
					END
882
					ELSE
883
					BEGIN
884
						INSERT INTO PL_REQUEST_PROCESS (
885
						REQ_ID,
886
						PROCESS_ID,
887
						STATUS,
888
						ROLE_USER,
889
						BRANCH_ID,
890
						CHECKER_ID,
891
						APPROVE_DT,
892
						PARENT_PROCESS_ID,
893
						IS_LEAF, COST_ID, DVDM_ID, NOTES
894
						) 
895
						VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
896
					END
897
					
898
					FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
899
				END
900
				CLOSE CUR_PR
901
				DEALLOCATE CUR_PR
902
			END
903
COMMIT TRANSACTION
904
-- BEIGN VALIDATE SEND APPROVE
905
		IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
906
		BEGIN
907
			IF(@p_MAKER_ID <> (SELECT TOP 1 MAKER_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID))
908
			BEGIN
909
				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
910
				RETURN '-1'
911
			END
912
			IF(NOT EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT where MAKER_ID = @p_MAKER_ID ))
913
			BEGIN
914
				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
915
				RETURN '-1'
916
			END
917
			IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT where AUTH_STATUS = 'U' AND REQ_PAY_ID = @p_REQ_PAY_ID ))
918
			BEGIN
919
				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
920
				RETURN '-1'
921
			END
922
			IF (@p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE ='')
923
			BEGIN
924
				SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu không được để trống' ErrorDesc
925
				RETURN '-1'
926
			END
927
			IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS <> 'E' AND ISNULL(AUTH_STATUS, '') <> ''))
928
			BEGIN
929
				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
930
				RETURN '-1'
931
			END
932
			--ROLLBACK TRANSACTION
933
			-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
934
			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')
935
			BEGIN
936
				DECLARE @USER_TP VARCHAR(15) =''
937
				--SET @USER_TP =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID 
938
				--		AND (RoleName IN ('GDDV','TPTC','TC','KTT') OR RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='GDDV')))
939
				IF(@USER_TP IS NULL OR @USER_TP ='')
940
				BEGIN
941
					SET @USER_TP = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE SECUR_CODE =@p_DEP_ID 
942
						AND (RoleName IN ('TBP','PP')))
943
				END
944
				--UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TP WHERE REQ_PAY_ID =@p_REQ_PAY_ID
945
			END
946
			DECLARE @SUM_TEMP_PAY DECIMAL, @SUM_PAY DECIMAL
947
			IF (@p_REQ_TYPE ='I')
948
			BEGIN
949
				SET @SUM_TEMP_PAY = (SELECT SUM(REQ_AMT*ISNULL(RATE,1)) 
950
				FROM TR_REQ_ADVANCE_PAYMENT WHERE  REF_ID =@p_REF_ID AND AUTH_STATUS ='A' AND  REQ_TYPE ='I')
951
				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')
952
				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
953
			END
954
			DECLARE @SUM_THANH_TOAN DECIMAL(18,0) =0, @SUM_PHUONG_THUC DECIMAL(18,0) =0
955
			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)
956
			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)
957
			IF(ROUND(@SUM_THANH_TOAN,0) <> ROUND(@SUM_PHUONG_THUC,0))
958
			BEGIN
959
				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
960
				RETURN '-1'
961
			END
962
			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')
963
			BEGIN
964
				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
965
				RETURN '-1'
966
			END
967

    
968
				
969
			--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')))
970
			--BEGIN
971
			--	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
972
			--	RETURN '-1'
973
			--END
974
			UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U',CREATE_DT = GETDATE() WHERE REQ_PAY_ID =@p_REQ_PAY_ID
975
			UPDATE PL_REQUEST_PROCESS SET ROLE_USER ='GDDV' WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER ='PGD'
976
			UPDATE PL_REQUEST_PROCESS SET ROLE_USER ='TPGD' WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER ='PPGD'
977
			INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
978
			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')
979
			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))
980
			BEGIN
981
				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
982
				RETURN '4'
983
			END
984
			ELSE
985
			BEGIN
986
				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
987
				RETURN '4'
988
			END
989
			--SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
990
			--RETURN '4'
991
		END
992
		-- FIX PHONG HO LOI LIEN QUAN DEN VIEC TAI KHOAN TAM UNG BI SAI
993
		----DECLARE  @REQ_PAY_ID varchar(15), @l_REF_ID varchar(15)
994
		----DECLARE cursorProduct CURSOR LOCAL FOR
995
		----SELECT REQ_PAY_ID,REF_ID FROM TR_REQ_ADVANCE_PAYMENT A WHERE A.REQ_TYPE ='I'
996
		----Open cursorProduct
997
		----FETCH NEXT FROM cursorProduct INTO @REQ_PAY_ID, @l_REF_ID
998
		----WHILE @@FETCH_STATUS = 0
999
		----BEGIN
1000
		----   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
1001
		----FETCH NEXT FROM cursorProduct INTO  @REQ_PAY_ID, @l_REF_ID
1002
		----END
1003
-- END VALIDATE SEND APPROVE
1004

    
1005
	SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
1006
	RETURN '0'
1007
ABORT:
1008
BEGIN
1009
		ROLLBACK TRANSACTION
1010
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
1011
		RETURN '-1'
1012
End