Project

General

Profile

2207 FILE 1.txt

Luc Tran Van, 07/22/2020 10:41 AM

 
1
ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Upd]
2
@p_REQ_PAY_ID	varchar(15)= NULL,
3
@p_REQ_PAY_CODE	varchar(50)	= NULL,
4
@p_REQ_DT VARCHAR(20)= NULL,
5
@p_BRANCH_ID	varchar(15)	= NULL,
6
@p_DEP_ID	varchar(15)	= NULL,
7
@p_REQ_REASON	nvarchar(MAX)	= NULL,
8
@p_REQ_TYPE	varchar(15)	= NULL,
9
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
10
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
11
@p_REF_ID	varchar(15)	= NULL,
12
@p_RECEIVER_PO	nvarchar(250)	= NULL,
13
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
14
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
15
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
16
@p_REQ_AMT	decimal(18, 0)	= NULL,
17
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
18
@p_MAKER_ID	varchar(15)	= NULL,
19
@p_CREATE_DT	varchar(25)	= NULL,
20
@p_EDITOR_ID	varchar(15)	= NULL,
21
@p_AUTH_STATUS	varchar(1)	= NULL,
22
@p_CHECKER_ID	varchar(15)	= NULL,
23
@p_APPROVE_DT	varchar(25)	= NULL,
24
@p_CREATE_DT_KT	varchar(25)	= NULL,
25
@p_MAKER_ID_KT	varchar(15)	= NULL,
26
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
27
@p_CHECKER_ID_KT	varchar(1)	= NULL,
28
@p_APPROVE_DT_KT  varchar(25)= null,
29
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
30
@p_BRANCH_CREATE	varchar(15)	= NULL,
31
@p_NOTES	varchar(15)	= NULL,
32
@p_RECORD_STATUS	varchar(1)	= NULL,
33
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
34
@p_TRANSFER_DT	varchar(25)	= NULL,
35
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
36
@p_PROCESS	varchar(15)	= NULL,
37
@p_PAY_PHASE VARCHAR(15)= NULL,
38
@p_DVDM_ID VARCHAR(15)= NULL,
39
@p_RATE DECIMAL(18,0) =0,
40
@p_RECIVER_MONEY VARCHAR(15)= NULL,
41
@p_XMP_TEMP XML = NULL,
42
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
43
@p_IS_PERIOD VARCHAR(5) = NULL
44
AS
45
--Validation is here
46
/*
47
DECLARE @ERRORSYS NVARCHAR(15) = '' 
48
  IF ( NOT EXISTS ( SELECT * FROM ASS_COLLECT WHERE ))
49
	 SET @ERRORSYS = ''
50
IF @ERRORSYS <> '' 
51
BEGIN
52
	SELECT ErrorCode Result, ''  CAR_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
53
	RETURN '0'
54
END 
55
*/
56
	--Luanlt-2019/10/15 Disable Validation
57
	--DECLARE @ERRORSYS NVARCHAR(15) = '' 
58
	--IF EXISTS(SELECT * FROM TR_PO_MASTER WHERE REF_ID  = @p_REF_ID )
59
	--BEGIN
60
	--	SET @ERRORSYS = 'ASSC-00005'
61
	--	SELECT ErrorCode Result, '' REQ_PAY_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
62
	--	RETURN '-1'
63
	--END
64
	DECLARE @BRANCH_TYPE_CR VARCHAR(15)
65
	SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
66
	IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''
67
	BEGIN
68
		SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu không được để trống' ErrorDesc
69
		RETURN '-1'
70
	END
71
	IF (@p_REQ_TYPE='I' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT =''))
72
	BEGIN
73
		SELECT '-1' Result, '' REQ_PAY_ID, N'Tài khoản nhân viên tạm ứng không được để trống' ErrorDesc
74
		RETURN '-1'
75
	END
76
	IF EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_CODE = @p_REQ_PAY_CODE AND REQ_PAY_ID <> @p_REQ_PAY_ID)
77
	BEGIN
78
		SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu đã tồn tại trong hệ thống' ErrorDesc
79
		RETURN '-1'
80
	END
81
	IF(((SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)<>@p_RECEIVER_DEBIT) AND @p_REQ_TYPE='I')
82
	BEGIN
83
		SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản tạm ứng của nhân viên đã tồn tại trong hệ thống! Bạn không được phép chỉnh sửa' ErrorDesc
84
		RETURN '-1'
85
	END
86
	IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) AND @p_REQ_TYPE='I')
87
		BEGIN
88
			INSERT INTO CM_ACCOUNT_PAY (REF_ID,ACC_TYPE,ACC_NUM,ACC_NAME,FUNTION,MAKER_ID,AUTH_STATUS,CREATE_DT,TK_GL,TK_GL_NAME) VALUES (@p_REF_ID,'ADV_PAY',@p_RECEIVER_DEBIT,'TK TAM UNG CUA NHAN VIEN ' +@p_REF_ID,'I',@p_MAKER_ID,'U',GETDATE(),'361200001','TAM UNG DE HOAT DONG NGHIEP VU')
89
		END
90
	ELSE
91
		BEGIN
92
			IF(((SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)<>@p_RECEIVER_DEBIT) AND @p_REQ_TYPE='I')
93
			BEGIN
94
				ROLLBACK TRANSACTION
95
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản tạm ứng của nhân viên đã tồn tại trong hệ thống! Bạn không được phép chỉnh sửa' ErrorDesc
96
				RETURN '-1'
97
			END
98
	END
99
	-- 19-11-2019 LUCTV BO SUNG VALIDATE TRONG QUA TRINH TEST SAU KHI UAT
100
	-- NEU TAM UNG CHO NHA CUNG CAP THI DOT THANH TOAN KHONG DUOC PHEP NULL
101
	-- SO TIEN THANH TOÁN PHAI LON HON KHONG
102
		IF(@p_REQ_AMT <=0)
103
		BEGIN	
104
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền tạm ứng phải lớn hơn 0' ErrorDesc
105
			RETURN '-1'
106
		END
107
	 -- END VALIDATE TRONG QUA TRINH TEST UAT
108
		BEGIN TRANSACTION
109
		--IF(@p_DVDM_ID IS NULL OR @p_DVDM_ID ='')
110
		--BEGIN
111
		--	SET @p_DVDM_ID = (SELECT TOP 1 DVDM_ID FROM CM_DVDM WHERE DVDM_NAME ='KHOI TAI CHINH')
112
		--END
113
		UPDATE TR_REQ_ADVANCE_PAYMENT SET 
114
		REF_ID = @p_REF_ID,
115
		DEP_ID= @p_DEP_ID,REQ_REASON = @p_REQ_REASON, REQ_PAY_TYPE = @p_REQ_PAY_TYPE,REQ_DT = CONVERT(DATE,@p_REQ_DT,103),
116
		REQ_AMT = @p_REQ_AMT,
117
		NOTES= @p_NOTES,
118
		REQ_TYPE= @p_REQ_TYPE,REQ_DESCRIPTION = @p_REQ_DESCRIPTION,RECEIVER_PO =@p_RECEIVER_PO, RECEIVER_DEBIT= @p_RECEIVER_DEBIT,
119
		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,
120
		AUTH_STATUS='E', DVDM_ID=@p_DVDM_ID, RATE =@p_RATE,REQ_TYPE_CURRENCY =@p_REQ_TYPE_CURRENCY, RECIVER_MONEY= @p_RECIVER_MONEY, TRASFER_USER_RECIVE =@p_TRASFER_USER_RECIVE,IS_PERIOD =@p_IS_PERIOD
121
		WHERE REQ_PAY_ID =@p_REQ_PAY_ID
122
		IF @@Error <> 0 GOTO ABORT
123
		--- INSERT VÀO BẢNG DETAIL NÊU TẠM ỨNG LÀ TẠM ỨNG THANH TOÁN
124
			DECLARE @hdoc INT
125
			EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
126
			
127
			-- KIEM TRA NEU TAM UNG THANH TOAN
128
			IF((@p_REQ_TYPE='P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE='D')
129
			BEGIN
130
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID=@p_REQ_PAY_ID
131
				DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID=@p_REQ_PAY_ID
132
				DECLARE @PO_ID varchar(15),@TERM_PAY varchar(15),@AMT_PAY_SCHEDULE decimal(18,0),@REQ_ADV_ID_SCHE VARCHAR(15),@AMT_ADVANCE_SCHEDULE decimal(18,0),@AMT_PAY_DO decimal(18,0),
133
				@AMT_REMAIN_SCHEDULE decimal(18,0),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),
134
				@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),
135
				@EMP_ID VARCHAR(15),@AMT_PAY_REAL DECIMAL(18,2),@CHECK_IN VARCHAR(15),@IS_CLOSED VARCHAR(1)= NULL,@INDEX_NS INT =0,@REASON NVARCHAR(1000),@REF_TYPE VARCHAR(15)
136
				DECLARE XmlDataPO CURSOR FOR
137
				SELECT *
138
				FROM
139
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
140
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
141
				OPEN XmlDataPO;
142
				DECLARE @INDEX_PO INT =0
143
				SET @INDEX_PO = 0
144
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
145
				WHILE @@fetch_status=0 
146
				BEGIN
147
					SET @INDEX_PO = @INDEX_PO +1
148
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
149
					IF(@p_TYPE_FUNCTION ='SEND')
150
					BEGIN
151
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
152
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
153
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
154
					BEGIN
155
						ROLLBACK TRANSACTION
156
						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ố '+
157
						(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
158
						RETURN '-1'
159
					END
160
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
161
					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))
162
					BEGIN
163
						ROLLBACK TRANSACTION
164
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
165
						(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
166
						RETURN '-1'
167
					END
168
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
169
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
170
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
171
					BEGIN
172
						ROLLBACK TRANSACTION
173
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
174
						(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
175
						RETURN '-1'
176
					END
177
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
178
					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))
179
					BEGIN
180
						ROLLBACK TRANSACTION
181
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
182
						(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
183
						RETURN '-1'
184
					END
185
					END
186
					DECLARE @REQ_PAYDTID VARCHAR(15);
187
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
188
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
189
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
190
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
191
				IF @@error<>0 GOTO ABORT;
192
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
193
				END
194
				CLOSE XmlDataPO;
195
				DEALLOCATE XmlDataPO;
196
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
197
				DECLARE XmlDataSchedule CURSOR FOR
198
				SELECT *
199
				FROM
200
				OPENXML(@hdoc, 'Root/XmlDataSchedule',2)
201
				WITH(PO_ID varchar(15),TERM_PAY varchar(15),AMT_PAY_SCHEDULE decimal(18,0),REQ_ADV_ID varchar(15),AMT_ADVANCE_SCHEDULE decimal(18,0), AMT_PAY_DO decimal(18,0),
202
				AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
203
				REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
204
				OPEN XmlDataSchedule
205
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
206
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
207
				WHILE @@fetch_status=0 
208
				BEGIN
209
					DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
210
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
211
					IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
212
					INSERT INTO TR_REQ_PAY_SCHEDULE(
213
					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,
214
					CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE, AMT_PAY_REAL)
215
					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,
216
					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)
217
				--- END KHAI BAO CURSOR
218
				IF @@error<>0 GOTO ABORT;
219
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
220
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
221
				END
222
				CLOSE XmlDataSchedule;
223
				DEALLOCATE XmlDataSchedule;
224
			END
225
		--- END TẠM ỨNG THANH TOÁN
226
		---- TẠM ỨNG HĐ ĐỊNH KÌ
227
			IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
228
			BEGIN
229
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID
230
				DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
231
				DECLARE XmlDataPO CURSOR FOR
232
				SELECT *
233
				FROM
234
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
235
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
236
				OPEN XmlDataPO;
237
				SET @INDEX_PO = 0
238
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
239
				WHILE @@fetch_status=0 
240
				BEGIN
241
					SET @INDEX_PO = @INDEX_PO +1
242
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
243
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
244
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
245
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
246
					(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
247
				IF @@error<>0 GOTO ABORT;
248
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
249
				END
250
				CLOSE XmlDataPO;
251
				DEALLOCATE XmlDataPO;
252
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
253
			----------------------------
254
			--INSERT FROM PERIOD	
255
				DECLARE XmlDataPeriod CURSOR FOR
256
				SELECT *
257
				FROM
258
				OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)
259
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
260
				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) )
261
				OPEN XmlDataPeriod;
262
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
263
				@OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),@AMT_PAY_PERIOD DECIMAL(18,2),@FROM_DATE VARCHAR(20),@TO_DATE VARCHAR(20),@PAY_PHASE NVARCHAR(250), @REASON_TTDK NVARCHAR(2000)
264
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
265
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
266
				WHILE @@fetch_status=0 
267
				BEGIN
268
					--IF(CONVERT(DATE, @TO_DATE,103) <CONVERT(DATE,@FROM_DATE,103))
269
					--BEGIN
270
					--	ROLLBACK TRANSACTION
271
					--	SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Từ ngày không được lớn hơn đến ngày' ErrorDesc
272
					--	RETURN '-1'
273
					--END
274
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
275
					IF(@p_TYPE_FUNCTION ='SEND')
276
					BEGIN
277
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0)
278
					BEGIN
279
						ROLLBACK TRANSACTION
280
						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
281
						RETURN '-1'
282
					END
283
					END
284
					DECLARE @PERIOD_ID VARCHAR(15);
285
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
286
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
287
					INSERT INTO TR_REQ_PAY_PERIOD(PERIOD_ID,REQ_PAY_ID,PAY_TYPE, CONTRACT_ID,PAY_DT_REAL,OLD_INDEX,NEW_INDEX,AMT_PAY,AUTH_STATUS_KT,CURRENCY,RATE,FROM_DATE, TO_DATE,AD_PAY_ID,PROCESS,PAY_PHASE, REASON)
288
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'ADV_PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),
289
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,'U',@CURRENCY, @RATE,CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@p_REQ_PAY_ID,'0',@PAY_PHASE,@REASON_TTDK)
290
			IF @@error<>0 GOTO ABORT;
291
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
292
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
293
			END
294
			CLOSE XmlDataPeriod;
295
			DEALLOCATE XmlDataPeriod;
296
			-- VALIDATE SO TIEN
297
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
298
			--BEGIN
299
			--	ROLLBACK TRANSACTION
300
			--	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
301
			--	RETURN '-1'
302
			--END
303
			----
304
			END
305
		---- END TẠM ỨNG HĐ ĐỊNH KÌ
306
		--- INSERT PHƯƠNG THỨC THANH TOÁN
307
		----MethodCursor
308
			DELETE FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
309
			DECLARE @RECEIVE_ID varchar(15),@RECEIVE_NAME nvarchar(100),@REQ_PAY_REASON nvarchar(MAX),@TOTAL_AMT_METHOD decimal(18,0),@REQ_PAY_TYPE varchar(1),
310
					@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(50), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20)
311
			DECLARE XmlDataMethod CURSOR FOR
312
			SELECT *
313
			FROM
314
			OPENXML(@hdoc, 'Root/XmlDataMethod',2)
315
			WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,0),REQ_PAY_TYPE varchar(1),
316
			REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), ACC_NAME NVARCHAR(50), 
317
			ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15))
318
			OPEN XmlDataMethod
319
			FETCH NEXT FROM XmlDataMethod 
320
			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 
321
			WHILE @@fetch_status=0 
322
			BEGIN
323
				IF(@REQ_PAY_TYPE<>'1')
324
				BEGIN
325
					SET @ISSUED_DT = NULL
326
				END
327
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
328
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
329
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
330
				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,
331
				CREATE_DT,ACC_NO,ACC_NAME,ISSUED_BY,ISSUED_DT,CURRENCY,RATE,CHECK_IN)
332
				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,'',
333
				@p_MAKER_ID,GETDATE(),@ACC_NO,@ACC_NAME,@ISSED_BY, CONVERT(DATE, @ISSUED_DT, 103),@CURRENCY,@RATE,@CHECK_IN)
334
			IF @@error<>0 GOTO ABORT;
335
			FETCH NEXT FROM XmlDataMethod 
336
			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
337
			END
338
			CLOSE XmlDataMethod;
339
			DEALLOCATE XmlDataMethod
340
		----END INSERT PHƯƠNG THỨC THANH TOÁN
341
		----INSERT VAO BANG DS KHACH HANG
342
			DELETE FROM TR_REQ_ADVANCE_CUS WHERE REQ_PAY_ID = @p_REQ_PAY_ID
343
			DECLARE XmlDataCus CURSOR FOR
344
			SELECT *
345
			FROM
346
			OPENXML(@hdoc, '/Root/XmlDataCus', 2)
347
			WITH(CUS_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO DECIMAL(18,0),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
348
			OPEN XmlDataCus;
349
			FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
350
				WHILE @@fetch_status=0 
351
				BEGIN		
352
					INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
353
					VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
354
				--- END KHAI BAO CURSOR
355
				IF @@error<>0 GOTO ABORT;
356
				FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
357
				END
358
				CLOSE XmlDataCus;
359
				DEALLOCATE XmlDataCus;
360
		----END
361
		-- HANG MUC CHI PHI VA NGAN SACH
362
			DELETE FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID
363
			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)
364
			DECLARE XmlDataGood CURSOR FOR
365
			SELECT *
366
			FROM
367
			OPENXML(@hdoc, 'Root/XmlDataGood',2) 
368
			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))
369
			OPEN XmlDataGood
370
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
371
			WHILE @@fetch_status=0 BEGIN
372
				--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
373
				SET @INDEX_NS = @INDEX_NS +1
374
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
375
				IF(@p_TYPE_FUNCTION ='SEND')
376
				BEGIN
377
				IF((@AMT_EXE  > @AMT_REMAIN_GD))
378
				BEGIN
379
						ROLLBACK TRANSACTION
380
						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
381
						RETURN '-1'
382
				END	
383
				END
384
				DECLARE @p_BUDGET_ID VARCHAR(15);
385
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
386
				IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
387
				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) 
388
				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)
389
			IF @@error<>0 GOTO ABORT;
390
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
391
			END;
392
		CLOSE XmlDataGood;
393
		DEALLOCATE XmlDataGood;
394
		--- END INSERT NGAN SACH
395
		DELETE FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID
396
		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)
397
		DECLARE XmlAttach CURSOR FOR
398
		SELECT *
399
		FROM
400
		OPENXML(@hdoc, 'Root/XmlAttach',2) 
401
		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))
402
		OPEN XmlAttach
403
		--INSERT CHUNG TU DINH KEM
404
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
405
				WHILE @@fetch_status=0 
406
				BEGIN
407
					IF (@REF_DT='')
408
					BEGIN
409
						SET @REF_DT = NULL
410
					END
411
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
412
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
413
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT) VALUES
414
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT, CONVERT(DATE, @REF_DT,103))
415
				IF @@error<>0 GOTO ABORT;
416
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
417
				END
418
				CLOSE XmlAttach;
419
				DEALLOCATE XmlAttach;
420
		----END
421
		IF(@p_REQ_TYPE ='I')
422
			BEGIN
423
				DELETE FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID
424
				DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT DECIMAL(18,0))
425
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
426
				BEGIN
427
					--DECLARE @DEP_CODE VARCHAR(15)
428
					--SET @DEP_CODE =(SELECT * FROM CM_DEPARTMENT WHERE DEP_ID =@p_DEP_ID)
429
					IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06908%' AND DEP_ID =@p_DEP_ID)
430
					BEGIN
431
						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'
432
					END
433
					ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
434
					BEGIN
435
						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'
436
					END
437
					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)
438
					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) 
439
					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))
440
					BEGIN
441
						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')
442
					END
443
					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)
444
					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) 
445
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
446
					BEGIN
447
						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'
448
					END
449
					ELSE
450
					BEGIN
451
						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'
452
					END
453
				END
454
				ELSE
455
				BEGIN
456
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
457
					BEGIN
458
						--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
459
						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
460
						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'
461
				END
462
				ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
463
					BEGIN
464
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY' AND BRANCH_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE)
465
						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'
466
				END
467
				END
468
				DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
469
				SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
470
				DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
471
				DECLARE CUR_PR CURSOR FOR  SELECT A.ROLE_ID, A.BRANCH_ID,A.AMT FROM @tmp A
472
				OPEN CUR_PR
473
				FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
474
				WHILE @@FETCH_STATUS =0 --AND @STOP=0
475
				BEGIN								
476
					SET @INDEX= @INDEX+1
477
					IF @INDEX = @SL_ROLE
478
						SET @ISLEAF = 'Y'
479
					ELSE
480
						SET @ISLEAF = 'N'
481
					SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
482

    
483
					IF(@INDEX=1 )
484
					BEGIN		
485
						SET @PARENT_ID = NULL
486
						SET @STATUS = 'C'							
487
						--INSERT INTO TR_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),'C',@ROLE_ID,@BRANCH_ID,NULL,NULL,NULL,@ISLEAF)
488
					END				
489
					ELSE 
490
					BEGIN
491
						SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
492
						SET @STATUS = 'U'
493
					END
494
						IF(@LIMIT_VALUE >= @p_REQ_AMT)
495
						BEGIN
496
							INSERT INTO dbo.PL_REQUEST_PROCESS
497
							(
498
								REQ_ID,
499
								PROCESS_ID,
500
								STATUS,
501
								ROLE_USER,
502
								BRANCH_ID,
503
								CHECKER_ID,
504
								APPROVE_DT,
505
								PARENT_PROCESS_ID,
506
								IS_LEAF, COST_ID, DVDM_ID, NOTES
507
							)
508
							VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
509
							--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y')
510
							BREAK;
511
						END
512
						ELSE
513
							INSERT INTO PL_REQUEST_PROCESS (
514
								REQ_ID,
515
								PROCESS_ID,
516
								STATUS,
517
								ROLE_USER,
518
								BRANCH_ID,
519
								CHECKER_ID,
520
								APPROVE_DT,
521
								PARENT_PROCESS_ID,
522
								IS_LEAF, COST_ID, DVDM_ID, NOTES
523
							) VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
524
					--END
525
					
526
					FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
527
				END
528
				CLOSE CUR_PR
529
				DEALLOCATE CUR_PR
530
			END
531
COMMIT TRANSACTION
532
		IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
533
		BEGIN
534
				--ROLLBACK TRANSACTION
535
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
536
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL) AND @BRANCH_TYPE_CR ='HS')
537
				BEGIN
538
					DECLARE @USER_TP VARCHAR(15)
539
					SET @USER_TP =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND RoleName IN ('GDDV','TPTC','TC','KTT'))
540
					UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TP WHERE REQ_PAY_ID =@p_REQ_PAY_ID
541
				END
542
				UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
543
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
544
				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')
545
				SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
546
				RETURN '4'
547
		END
548
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
549
RETURN '0'
550
ABORT:
551
BEGIN
552
		ROLLBACK TRANSACTION
553
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
554
		RETURN '-1'
555
End
556

    
557
¿
558
ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Ins]
559
@p_REQ_PAY_ID	varchar(15)= NULL,
560
@p_REQ_PAY_CODE	varchar(50)	= NULL,
561
@p_REQ_DT VARCHAR(10)= NULL,
562
@p_BRANCH_ID	varchar(15)	= NULL,
563
@p_DEP_ID	varchar(15)	= NULL,
564
@p_REQ_REASON	nvarchar(MAX)	= NULL,
565
@p_REQ_TYPE	varchar(15)	= NULL,
566
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
567
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
568
@p_REF_ID	varchar(15)	= NULL,
569
@p_RECEIVER_PO	nvarchar(250)	= NULL,
570
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
571
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
572
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
573
@p_REQ_AMT	decimal(18, 0)	= NULL,
574
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
575
@p_MAKER_ID	varchar(15)	= NULL,
576
@p_CREATE_DT	varchar(25)	= NULL,
577
@p_EDITOR_ID	varchar(15)	= NULL,
578
@p_AUTH_STATUS	varchar(1)	= NULL,
579
@p_CHECKER_ID	varchar(15)	= NULL,
580
@p_APPROVE_DT	varchar(25)	= NULL,
581
@p_CREATE_DT_KT	varchar(25)	= NULL,
582
@p_MAKER_ID_KT	varchar(15)	= NULL,
583
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
584
@p_CHECKER_ID_KT	varchar(1)	= NULL,
585
@p_APPROVE_DT_KT  varchar(25)= null,
586
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
587
@p_BRANCH_CREATE	varchar(15)	= NULL,
588
@p_NOTES	varchar(15)	= NULL,
589
@p_RECORD_STATUS	varchar(1)	= NULL,
590
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
591
@p_TRANSFER_DT	varchar(25)	= NULL,
592
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
593
@p_PROCESS	varchar(15)	= NULL,
594
@p_PAY_PHASE VARCHAR(15)= NULL,
595
@p_DVDM_ID VARCHAR(15) = NULL,
596
@p_RATE DECIMAL(18,0)= NULL,
597
@p_RECIVER_MONEY VARCHAR(15) = NULL,
598
@p_IS_PERIOD VARCHAR(5) = NULL,
599
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
600
@p_XMP_TEMP XML = NULL
601
AS
602
--Validation is here
603
/*
604
DECLARE @ERRORSYS NVARCHAR(15) = '' 
605
  IF ( NOT EXISTS ( SELECT * FROM ASS_COLLECT WHERE ))
606
	 SET @ERRORSYS = ''
607
IF @ERRORSYS <> '' 
608
BEGIN
609
	SELECT ErrorCode Result, ''  CAR_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
610
	RETURN '0'
611
END 
612
*/
613
	--DECLARE @ERRORSYS NVARCHAR(15) = '' 
614
	--IF EXISTS(SELECT * FROM TR_PO_MASTER WHERE REF_ID  = @p_REF_ID )
615
	--BEGIN
616
	--	SET @ERRORSYS = 'ASSC-00005'
617
	--	SELECT ErrorCode Result, '' COLLECT_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
618
	--	RETURN '0'
619
	--END
620
	--DECLARE @AMT_AD_PAY DECIMAL(18,0) =0
621
BEGIN TRANSACTION
622
	-- LUCTV 17H51 BO SUNG LAY SO TIEN DA TAM UNG CUA NHAN VIEN --
623
		--SET @AMT_DO =(SELECT * FROM [dbo].TR_RE)
624
	--THIEUVQ 281119---
625
		IF (@p_REQ_TYPE='I')
626
		BEGIN
627
			SET @p_REF_ID = @p_MAKER_ID
628
			SET @p_RECEIVER_DEBIT =(SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_MAKER_ID)
629
		END
630
		EXEC [dbo].[ADVANCE_CODE_GenKey] 'TR_REQ_ADVANCE_PAYMENT', '',@p_REQ_TYPE, @p_REQ_PAY_CODE out
631
	--END--
632
		IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''
633
		BEGIN
634
			ROLLBACK TRANSACTION
635
			SELECT '-1' Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Mã số phiếu không được để trống' ErrorDesc
636
			RETURN '-1'
637
		END
638
		IF (@p_REQ_TYPE='I' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT ='') AND @p_TYPE_FUNCTION ='SEND')
639
		BEGIN
640
			ROLLBACK TRANSACTION
641
			SELECT '-1' Result, '' REQ_PAY_ID, N'Tài khoản nhân viên tạm ứng không được để trống' ErrorDesc
642
			RETURN '-1'
643
		END
644
		IF EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_CODE  = @p_REQ_PAY_CODE )
645
		BEGIN
646
			ROLLBACK TRANSACTION
647
			SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Số phiếu tạm ứng đã tồn tại trong hệ thống' ErrorDesc
648
			RETURN '-1'
649
		END
650
		-- START 19-11-2019
651
		-- LUCTV BO SUNG VALIDATE TRONG QUA TRINH TEST SAU UAT- KIEM TRA NEU DOT THANH TOAN CHUA CO THI KHONG DUOC THEM MOI
652
		--IF(@p_REQ_TYPE='P' AND (@p_PAY_PHASE IS NULL OR @p_PAY_PHASE =''))
653
		--BEGIN
654
		--	ROLLBACK TRANSACTION
655
		--	SELECT '-1' as Result, '' REQ_PAY_ID, N'Đợt thanh toán không được phép để trống' ErrorDesc
656
		--	RETURN '-1'
657
		--END
658
		---- NEU THANH TOAN XU LY NO THI NHAN VIEN NHAN TIEN TAM UNG KHONG DUOC PHEP TRONG
659
		--IF(@p_REQ_TYPE='D' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT =''))
660
		--BEGIN
661
		--	ROLLBACK TRANSACTION
662
		--	SELECT '-1' as Result, '' REQ_PAY_ID, N'Nhân viên nhận tạm ứng không được phép để trống' ErrorDesc
663
		--	RETURN '-1'
664
		--END
665
		-- SO TIEN THANH TOÁN PHAI LON HON KHONG
666
		IF(@p_REQ_AMT <=0)
667
		BEGIN
668
			ROLLBACK TRANSACTION
669
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền tạm ứng phải lớn hơn 0' ErrorDesc
670
			RETURN '-1'
671
		END
672
		-----
673
		---- KIEM TRA NEU CHUA CHON KHOI PHE DUYET THI TU DONG CHUYEN VÊ KHOI TAI CHINH
674
		--IF(@p_DVDM_ID IS NULL OR @p_DVDM_ID ='')
675
		--BEGIN
676
		--	SET @p_DVDM_ID = (SELECT TOP 1 DVDM_ID FROM CM_DVDM WHERE DVDM_NAME ='KHOI TAI CHINH')
677
		--END
678
		--
679
		--KIEM TRA NEU TAI KHOAN NHAN VIEN TAM UNG NEU CHUA TON TAI TRONG HE THONG THI BAO LOI
680
		IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) AND @p_REQ_TYPE='I')
681
		BEGIN
682
			INSERT INTO CM_ACCOUNT_PAY (REF_ID,ACC_TYPE,ACC_NUM,ACC_NAME,FUNTION,MAKER_ID,AUTH_STATUS,CREATE_DT,TK_GL,TK_GL_NAME) VALUES (@p_REF_ID,'ADV_PAY',@p_RECEIVER_DEBIT,'TK TAM UNG CUA NHAN VIEN ' +@p_REF_ID,'I',@p_MAKER_ID,'U',GETDATE(),'361200001','TAM UNG DE HOAT DONG NGHIEP VU')
683
		END
684
		ELSE
685
		BEGIN
686
			IF(((SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)<>@p_RECEIVER_DEBIT) AND @p_REQ_TYPE='I')
687
			BEGIN
688
				ROLLBACK TRANSACTION
689
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản tạm ứng của nhân viên đã tồn tại trong hệ thống! Bạn không được phép chỉnh sửa' ErrorDesc
690
				RETURN '-1'
691
			END
692
		END
693
		EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_PAMENT', @p_REQ_PAY_ID out
694
		IF @p_REQ_PAY_ID='' OR @p_REQ_PAY_ID IS NULL GOTO ABORT
695
		INSERT INTO [dbo].[TR_REQ_ADVANCE_PAYMENT]
696
           ([REQ_PAY_ID]
697
           ,[REQ_PAY_CODE]
698
           ,[BRANCH_ID],[REQ_DT],
699
           [DEP_ID]
700
           ,[REQ_REASON]
701
           ,[REQ_TYPE],REQ_ENTRIES,
702
            [REQ_DESCRIPTION]
703
           ,REF_ID,
704
			RECEIVER_PO, RECEIVER_DEBIT
705
           ,[REQ_PAY_TYPE]
706
           ,[REQ_TYPE_CURRENCY]
707
           ,[REQ_AMT]
708
           ,[REQ_TEMP_AMT]
709
           ,[MAKER_ID]
710
           ,[CREATE_DT]
711
           ,[EDITOR_ID]
712
           ,[AUTH_STATUS]
713
           ,[CHECKER_ID]
714
           ,[APPROVE_DT]
715
           ,[CREATE_DT_KT]
716
           ,[MAKER_ID_KT]
717
           ,[AUTH_STATUS_KT]
718
           ,[CHECKER_ID_KT]
719
		   ,[APPROVE_DT_KT]
720
           ,[CONFIRM_NOTES]
721
           ,[BRANCH_CREATE]
722
           ,[NOTES],RECORD_STATUS,TRANSFER_MAKER,TRANSFER_DT,TRASFER_USER_RECIVE,PROCESS,PAY_PHASE,DVDM_ID,RATE,RECIVER_MONEY,IS_PERIOD)
723
			VALUES
724
           (@p_REQ_PAY_ID,
725
			@p_REQ_PAY_CODE,
726
			@p_BRANCH_ID,CONVERT(DATE,@p_REQ_DT,103),
727
			@p_DEP_ID,
728
			@p_REQ_REASON,
729
			@p_REQ_TYPE,
730
			@P_REQ_ENTRIES,
731
			@p_REQ_DESCRIPTION,
732
			@p_REF_ID,
733
			@p_RECEIVER_PO,
734
			@p_RECEIVER_DEBIT,
735
			@p_REQ_PAY_TYPE,
736
			@p_REQ_TYPE_CURRENCY,
737
			@p_REQ_AMT,
738
			@p_REQ_TEMP_AMT,
739
			@p_MAKER_ID,
740
			GETDATE(),
741
			@p_EDITOR_ID,
742
			'E',
743
			NULL,
744
			NULL,
745
			NULL,
746
			NULL,
747
			NULL,
748
			NULL,
749
			NULL,
750
			NULL,
751
			@p_BRANCH_CREATE,
752
			@p_NOTES,@p_RECORD_STATUS,
753
			@p_TRANSFER_MAKER,
754
			NULL,
755
			@p_TRASFER_USER_RECIVE,
756
			@p_PROCESS,@p_PAY_PHASE,@p_DVDM_ID,@p_RATE,@p_RECIVER_MONEY,@p_IS_PERIOD)
757
			IF @@Error <> 0 GOTO ABORT
758
		--- INSERT VÀO BẢNG DETAIL NÊU TẠM ỨNG LÀ TẠM ỨNG THANH TOÁN
759
			DECLARE @hdoc INT
760
			EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
761
			
762
			-- KIEM TRA NEU TAM UNG THANH TOAN
763
			IF((@p_REQ_TYPE='P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE='D')
764
			BEGIN
765
				DECLARE @PO_ID varchar(15),@TERM_PAY varchar(15),@AMT_PAY_SCHEDULE decimal(18,0),@REQ_ADV_ID_SCHE VARCHAR(15),@AMT_ADVANCE_SCHEDULE decimal(18,0),@AMT_PAY_DO decimal(18,0),
766
				@AMT_REMAIN_SCHEDULE decimal(18,0),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),
767
				@REF_ID VARCHAR(15),@REQ_PAY_DESC NVARCHAR(500), @REQ_PAY_ENTRIES NVARCHAR(250),@CURRENCY VARCHAR(15),@RATE DECIMAL(18,0),@CUST_ID VARCHAR(15), @EMP_ID VARCHAR(15),
768
				@AMT_PAY_REAL DECIMAL(18,2), @IS_CLOSED VARCHAR(1)= NULL,@INDEX_NS INT =0,@REASON NVARCHAR(1000), @REF_TYPE VARCHAR(15)
769
				DECLARE XmlDataPO CURSOR FOR
770
				SELECT *
771
				FROM
772
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
773
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
774
				OPEN XmlDataPO;
775
				DECLARE @INDEX_PO INT =0
776
				SET @INDEX_PO = 0
777
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
778
				WHILE @@fetch_status=0 
779
				BEGIN
780
					SET @INDEX_PO = @INDEX_PO +1
781
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
782
					--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL) AND REQ_PAY_ID <>@p_REQ_PAY_ID))
783
					--BEGIN
784
					--	ROLLBACK TRANSACTION
785
					--	SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO/ hợp đồng số '+(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đang được tạm ứng. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
786
					--	RETURN '-1'
787
					--END
788
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
789
					--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
790
					--BEGIN
791
					--	ROLLBACK TRANSACTION
792
					--	SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO/ hợp đồng số '+(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đang được thanh toán. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
793
					--	RETURN '-1'
794
					--END
795
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
796
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
797
					IF(@p_TYPE_FUNCTION ='SEND')
798
					BEGIN
799
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
800
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
801
					BEGIN
802
						ROLLBACK TRANSACTION
803
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
804
						(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
805
						RETURN '-1'
806
					END
807
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
808
					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))
809
					BEGIN
810
						ROLLBACK TRANSACTION
811
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
812
						(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
813
						RETURN '-1'
814
					END
815
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
816
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
817
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
818
					BEGIN
819
						ROLLBACK TRANSACTION
820
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
821
						(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
822
						RETURN '-1'
823
					END
824
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
825
					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))
826
					BEGIN
827
						ROLLBACK TRANSACTION
828
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
829
						(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
830
						RETURN '-1'
831
					END
832
					END
833
					DECLARE @REQ_PAYDTID VARCHAR(15);
834
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
835
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
836
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
837
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
838
				IF @@error<>0 GOTO ABORT;
839
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
840
				END
841
				CLOSE XmlDataPO;
842
				DEALLOCATE XmlDataPO;
843
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
844
				DECLARE XmlDataSchedule CURSOR FOR
845
				SELECT *
846
				FROM
847
				OPENXML(@hdoc, 'Root/XmlDataSchedule',2)
848
				WITH(PO_ID varchar(15),TERM_PAY varchar(15),AMT_PAY_SCHEDULE decimal(18,0),REQ_ADV_ID varchar(15),AMT_ADVANCE_SCHEDULE decimal(18,0), AMT_PAY_DO decimal(18,0),
849
				AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
850
				REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
851
				OPEN XmlDataSchedule
852
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
853
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
854
				WHILE @@fetch_status=0 
855
				BEGIN
856
					DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
857
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
858
					IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
859
					INSERT INTO TR_REQ_PAY_SCHEDULE(
860
					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,
861
					CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE,AMT_PAY_REAL)
862
					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,
863
					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)
864
				--- END KHAI BAO CURSOR
865
				IF @@error<>0 GOTO ABORT;
866
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
867
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
868
				END
869
				CLOSE XmlDataSchedule;
870
				DEALLOCATE XmlDataSchedule;
871
			END
872
		--- END TẠM ỨNG THANH TOÁN
873
		--- TẠM ỨNG HĐ ĐỊNH KỲ
874
		IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
875
		BEGIN
876
				
877
				DECLARE XmlDataPO CURSOR FOR
878
				SELECT *
879
				FROM
880
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
881
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
882
				OPEN XmlDataPO;
883
				SET @INDEX_PO = 0
884
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
885
				WHILE @@fetch_status=0 
886
				BEGIN
887
					SET @INDEX_PO = @INDEX_PO +1
888
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
889
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
890
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
891
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
892
					(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
893
				IF @@error<>0 GOTO ABORT;
894
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
895
				END
896
				CLOSE XmlDataPO;
897
				DEALLOCATE XmlDataPO;
898
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
899
			----------------------------
900
			--INSERT FROM PERIOD	
901
				DECLARE XmlDataPeriod CURSOR FOR
902
				SELECT *
903
				FROM
904
				OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)
905
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
906
				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))
907
				OPEN XmlDataPeriod;
908
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
909
				@OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),@AMT_PAY_PERIOD DECIMAL(18,2),@FROM_DATE VARCHAR(20),@TO_DATE VARCHAR(20),@PAY_PHASE NVARCHAR(250),@REASON_TTDK NVARCHAR(2000)
910
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
911
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
912
				WHILE @@fetch_status=0 
913
				BEGIN
914
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
915
					IF(@p_TYPE_FUNCTION ='SEND')
916
					BEGIN
917
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0  )
918
					BEGIN
919
						ROLLBACK TRANSACTION
920
						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
921
						RETURN '-1'
922
					END
923
					END
924
					DECLARE @PERIOD_ID VARCHAR(15);
925
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
926
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
927
					INSERT INTO TR_REQ_PAY_PERIOD(PERIOD_ID,REQ_PAY_ID,PAY_TYPE, CONTRACT_ID,PAY_DT_REAL,OLD_INDEX,NEW_INDEX,AMT_PAY,AUTH_STATUS_KT,CURRENCY,RATE,FROM_DATE, TO_DATE,AD_PAY_ID,PROCESS,PAY_PHASE,REASON)
928
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'ADV_PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),
929
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,'U',@CURRENCY, @RATE,CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@p_REQ_PAY_ID,'0',@PAY_PHASE,@REASON_TTDK)
930
			IF @@error<>0 GOTO ABORT;
931
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
932
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
933
			END
934
			CLOSE XmlDataPeriod;
935
			DEALLOCATE XmlDataPeriod;
936
			-- VALIDATE SO TIEN
937
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
938
			--BEGIN
939
			--	ROLLBACK TRANSACTION
940
			--	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
941
			--	RETURN '-1'
942
			--END
943
			----
944
		END
945
		---- END TẠM ỨNG HỢP ĐỒNG ĐỊNH KÌ
946
		--- INSERT PHƯƠNG THỨC THANH TOÁN
947
		----MethodCursor
948
			DECLARE @RECEIVE_ID varchar(15),@RECEIVE_NAME nvarchar(100),@REQ_PAY_REASON nvarchar(MAX),@TOTAL_AMT_METHOD decimal(18,0),@REQ_PAY_TYPE varchar(1),
949
					@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(50), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20),@CHECK_IN VARCHAR(15)
950
			DECLARE XmlDataMethod CURSOR FOR
951
			SELECT *
952
			FROM
953
			OPENXML(@hdoc, 'Root/XmlDataMethod',2)
954
			WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,0),REQ_PAY_TYPE varchar(1),
955
			REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), 
956
			ACC_NAME NVARCHAR(50), ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15))
957
			OPEN XmlDataMethod
958
			FETCH NEXT FROM XmlDataMethod 
959
			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
960
			WHILE @@fetch_status=0 
961
			BEGIN
962
				IF(@REQ_PAY_TYPE <>'1')
963
				BEGIN
964
					SET @ISSUED_DT = NULL
965
				END
966
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
967
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
968
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
969
				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,
970
				CREATE_DT,ACC_NO,ACC_NAME,ISSUED_BY,ISSUED_DT,CURRENCY,RATE,CHECK_IN)
971
				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,'',
972
				@p_MAKER_ID,GETDATE(),@ACC_NO,@ACC_NAME,@ISSED_BY, CONVERT(DATE, @ISSUED_DT, 103),@CURRENCY,@RATE,@CHECK_IN)
973
			IF @@error<>0 GOTO ABORT;
974
			FETCH NEXT FROM XmlDataMethod 
975
			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
976
			END
977
			CLOSE XmlDataMethod;
978
			DEALLOCATE XmlDataMethod
979
		----END INSERT PHƯƠNG THỨC THANH TOÁN
980
		----INSERT VAO BANG DS KHACH HANG
981
			DECLARE XmlDataCus CURSOR FOR
982
			SELECT *
983
			FROM
984
			OPENXML(@hdoc, '/Root/XmlDataCus', 2)
985
			WITH(CUS_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO DECIMAL(18,0),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
986
			OPEN XmlDataCus;
987
			FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
988
				WHILE @@fetch_status=0 
989
				BEGIN		
990
					INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
991
					VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
992
				--- END KHAI BAO CURSOR
993
				IF @@error<>0 GOTO ABORT;
994
				FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
995
				END
996
				CLOSE XmlDataCus;
997
				DEALLOCATE XmlDataCus;
998
		----END
999
			-- HANG MUC CHI PHI VA NGAN SACH
1000
			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)
1001
			DECLARE XmlDataGood CURSOR FOR
1002
			SELECT *
1003
			FROM
1004
			OPENXML(@hdoc, 'Root/XmlDataGood',2) 
1005
			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))
1006
			OPEN XmlDataGood
1007
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
1008
			WHILE @@fetch_status=0 BEGIN
1009
				--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
1010
				SET @INDEX_NS = @INDEX_NS +1
1011
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1012
				IF(@p_TYPE_FUNCTION ='SEND')
1013
				BEGIN
1014
				IF((@AMT_EXE  > @AMT_REMAIN_GD))
1015
				BEGIN
1016
						ROLLBACK TRANSACTION
1017
						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
1018
						RETURN '-1'
1019
				END
1020
				END
1021
				DECLARE @p_BUDGET_ID VARCHAR(15);
1022
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
1023
				IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
1024
				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) 
1025
				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)
1026
			IF @@error<>0 GOTO ABORT;
1027
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
1028
			END;
1029
		CLOSE XmlDataGood;
1030
		DEALLOCATE XmlDataGood;
1031
		--- END INSERT NGAN SACH
1032
		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)
1033
		DECLARE XmlAttach CURSOR FOR
1034
		SELECT *
1035
		FROM
1036
		OPENXML(@hdoc, 'Root/XmlAttach',2) 
1037
		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))
1038
		OPEN XmlAttach
1039
		--INSERT CHUNG TU DINH KEM
1040
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
1041
				WHILE @@fetch_status=0 
1042
				BEGIN
1043
					IF (@REF_DT='')
1044
					BEGIN
1045
						SET @REF_DT = NULL
1046
					END
1047
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
1048
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
1049
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT) VALUES
1050
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT, CONVERT(DATE, @REF_DT,103))
1051
				IF @@error<>0 GOTO ABORT;
1052
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
1053
				END
1054
				CLOSE XmlAttach;
1055
				DEALLOCATE XmlAttach;
1056
		----END
1057
		--- INSERT SẴN VÀO BẢNG TR_REQUEST_PROCESS
1058
			IF(@p_REQ_TYPE ='I')
1059
			BEGIN
1060
				DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT DECIMAL(18,0))
1061
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
1062
				BEGIN
1063
					--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'
1064
					IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06908%' AND DEP_ID =@p_DEP_ID)
1065
					BEGIN
1066
						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'
1067
					END
1068
					ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
1069
					BEGIN
1070
						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'
1071
					END
1072
					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)
1073
					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) 
1074
					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))
1075
					BEGIN
1076
						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')
1077
					END
1078
					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)
1079
					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) 
1080
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
1081
					BEGIN
1082
						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'
1083
					END
1084
					ELSE
1085
					BEGIN
1086
						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'
1087
					END
1088
				END
1089
				ELSE
1090
				BEGIN
1091
					IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
1092
					BEGIN
1093
						--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
1094
						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
1095
						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'
1096
					END
1097
					ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
1098
					BEGIN
1099
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY' AND BRANCH_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE)
1100
						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'
1101
					END
1102
				END
1103
				DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
1104
				SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
1105
				DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
1106
				DECLARE CUR_PR CURSOR FOR  SELECT A.ROLE_ID, A.BRANCH_ID,A.AMT FROM @tmp A
1107
				OPEN CUR_PR
1108
				FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
1109
				WHILE @@FETCH_STATUS =0 --AND @STOP=0
1110
				BEGIN								
1111
					SET @INDEX= @INDEX+1
1112
					IF @INDEX = @SL_ROLE
1113
						SET @ISLEAF = 'Y'
1114
					ELSE
1115
						SET @ISLEAF = 'N'
1116
					SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
1117

    
1118
					IF(@INDEX=1 )
1119
					BEGIN		
1120
						SET @PARENT_ID = NULL
1121
						SET @STATUS = 'C'							
1122
						--INSERT INTO TR_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),'C',@ROLE_ID,@BRANCH_ID,NULL,NULL,NULL,@ISLEAF)
1123
					END				
1124
					ELSE 
1125
					BEGIN
1126
						SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
1127
						SET @STATUS = 'U'
1128
					END
1129
						IF(@LIMIT_VALUE >= @p_REQ_AMT)
1130
						BEGIN
1131
							INSERT INTO dbo.PL_REQUEST_PROCESS
1132
							(
1133
								REQ_ID,
1134
								PROCESS_ID,
1135
								STATUS,
1136
								ROLE_USER,
1137
								BRANCH_ID,
1138
								CHECKER_ID,
1139
								APPROVE_DT,
1140
								PARENT_PROCESS_ID,
1141
								IS_LEAF, COST_ID, DVDM_ID, NOTES
1142
							)
1143
							VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
1144
							--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y')
1145
							BREAK;
1146
						END
1147
						ELSE
1148
							INSERT INTO PL_REQUEST_PROCESS (
1149
								REQ_ID,
1150
								PROCESS_ID,
1151
								STATUS,
1152
								ROLE_USER,
1153
								BRANCH_ID,
1154
								CHECKER_ID,
1155
								APPROVE_DT,
1156
								PARENT_PROCESS_ID,
1157
								IS_LEAF, COST_ID, DVDM_ID, NOTES
1158
							) VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
1159
					--END
1160
					
1161
					FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
1162
				END
1163
				CLOSE CUR_PR
1164
				DEALLOCATE CUR_PR
1165
			END
1166
			--- CAP NHAT THANG CUOI CUNG LA Y
1167
			--UPDATE TR_REQUEST_PROCESS SET IS_LEAF='Y' WHERE ID = (SELECT MAX(ID) FROM TR_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID)
1168
		COMMIT TRANSACTION
1169
		IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
1170
		BEGIN
1171
				--ROLLBACK TRANSACTION
1172
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
1173
				UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1174
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
1175
				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')
1176
				SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
1177
				RETURN '4'
1178
		END
1179
		SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,@p_REQ_PAY_CODE AS REQ_PAY_CODE, '' ErrorDesc
1180
		RETURN '0'
1181
ABORT:
1182
BEGIN
1183
		ROLLBACK TRANSACTION
1184
		SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, '' ErrorDesc
1185
		RETURN '-1'
1186
End