Project

General

Profile

script_upd_LIVE_080823.txt

Luc Tran Van, 08/08/2023 12:39 AM

 
1
ALTER PROCEDURE [dbo].[TR_REQ_PAYMENT_AUTO_EDIT_ENTRIES_Search]
2
@p_ENTRY_AUTO_ID		VARCHAR(15)= NULL,
3
@p_REQ_PAY_AUTO_ID		VARCHAR(20)	= NULL,
4
@p_REQ_PAY_AUTO_CODE	VARCHAR(20)	= NULL,
5
@p_MAKER_ID				VARCHAR(15)	= NULL,
6
@p_CREATE_DT			VARCHAR(25)	= NULL,
7
@p_AUTH_STATUS			VARCHAR(1)	= NULL,
8
@p_CHECKER_ID			VARCHAR(15)	= NULL,
9
@p_APPROVE_DT			VARCHAR(25)	= NULL,
10
@p_RECORD_STATUS		VARCHAR(1)	= NULL,
11
@p_TOP					INT = 300,
12
@p_LEVEL				VARCHAR(10) = NULL,
13
@p_FROM_DATE			VARCHAR(20)= NULL,
14
@p_TO_DATE				VARCHAR(20) = NULL,
15
@p_USER_LOGIN			VARCHAR(15)= NULL
16
AS
17
BEGIN -- PAGING
18

    
19
	IF(@p_TOP IS NULL OR @p_TOP=0)
20
	BEGIN
21
	-- PAGING BEGIN
22
		SELECT A.*, B.REQ_PAY_AUTO_CODE, ALLCODE.CONTENT AS AUTH_STATUS_NAME, TL1.TLFullName AS CREATE_FULL_NAME, TL2.TLFullName AS APPROVE_FULL_NAME,
23
		B.REQ_PAY_AUTO_TYPE, B.REQ_PAY_AUTO_STATUS, B.REQ_PAY_AUTO_EFFECTIVE_DT, B.CREATE_DT AS CREATE_DT_PAYMENT_AUTO, B.TRANSFER_USER_RECEIVE, B.CONFIRM_NOTE, B.CONTRACT_ID, B.REQ_PAY_AUTO_SERVICE_TYPE, B.NOTIFI_EXPIRED_DT,
24
		-- Thong tin PYC
25
		TL3.TLFullName AS MAKER_NAME, B.CREATE_DT AS CREATE_PAYMENT_AUTO_DT, BR.BRANCH_NAME AS BRANCH_NAME, DEP.DEP_NAME AS DEP_NAME, TL4.TLFullName AS TRANSFER_USER_RECEIVE_NAME, C.CONTRACT_CODE, C.[CONTRACT_NAME]
26
		-- SELECT END
27
		FROM TR_REQ_PAYMENT_AUTO_EDIT_ENTRIES A
28
		INNER JOIN TR_REQ_PAYMENT_AUTO B ON A.REQ_PAY_AUTO_ID = B.REQ_PAY_AUTO_ID
29
		LEFT JOIN CM_ALLCODE ALLCODE ON A.AUTH_STATUS = ALLCODE.CDVAL AND ALLCODE.CDNAME = 'AUTH_STATUS' AND ALLCODE.CDTYPE = 'TR_PO'
30
		LEFT JOIN TL_USER TL1 ON A.MAKER_ID = TL1.TLNANME
31
		LEFT JOIN TL_USER TL2 ON A.CHECKER_ID = TL2.TLNANME
32
		-- Thong tin PYC
33
		LEFT JOIN TL_USER TL3 ON B.MAKER_ID = TL3.TLNANME
34
		LEFT JOIN CM_BRANCH BR ON B.BRANCH_ID = BR.BRANCH_ID
35
		LEFT JOIN CM_DEPARTMENT DEP ON B.DEP_ID = DEP.DEP_ID
36
		LEFT JOIN TL_USER TL4 ON B.TRANSFER_USER_RECEIVE = TL4.TLNANME
37
		LEFT JOIN TR_CONTRACT C ON B.CONTRACT_ID = C.CONTRACT_ID
38
			
39
		WHERE 1=1 
40
		AND (A.ENTRY_AUTO_ID = @p_ENTRY_AUTO_ID OR ISNULL(@p_ENTRY_AUTO_ID, '') = '')
41
		AND (A.AUTH_STATUS = @p_AUTH_STATUS OR ISNULL(@p_AUTH_STATUS, '') = '')
42
		AND (B.REQ_PAY_AUTO_CODE LIKE '%' + @p_REQ_PAY_AUTO_CODE +'%' OR ISNULL(@p_REQ_PAY_AUTO_CODE, '') = '')
43
		AND(CONVERT(DATE, A.CREATE_DT) >= CONVERT(DATE, @p_FROM_DATE, 103) OR ISNULL(@p_FROM_DATE, '') = '')
44
		AND(CONVERT(DATE, A.CREATE_DT) <= CONVERT(DATE, @p_TO_DATE, 103) OR ISNULL(@p_TO_DATE, '') = '')
45
				  
46
		ORDER BY A.CREATE_DT DESC
47
	-- PAGING END
48
	END;
49
    ELSE 
50
	BEGIN
51
	-- PAGING BEGIN
52
        SELECT TOP(CONVERT(INT,@p_TOP)) A.*, B.REQ_PAY_AUTO_CODE, ALLCODE.CONTENT AS AUTH_STATUS_NAME, TL1.TLFullName AS CREATE_FULL_NAME, TL2.TLFullName AS APPROVE_FULL_NAME,
53
		B.REQ_PAY_AUTO_TYPE, B.REQ_PAY_AUTO_STATUS, B.REQ_PAY_AUTO_EFFECTIVE_DT, B.CREATE_DT AS CREATE_DT_PAYMENT_AUTO, B.TRANSFER_USER_RECEIVE, B.CONFIRM_NOTE, B.CONTRACT_ID, B.REQ_PAY_AUTO_SERVICE_TYPE, B.NOTIFI_EXPIRED_DT,
54
		-- Thong tin PYC
55
		TL3.TLFullName AS MAKER_NAME, B.CREATE_DT AS CREATE_PAYMENT_AUTO_DT, BR.BRANCH_NAME AS BRANCH_NAME, DEP.DEP_NAME AS DEP_NAME, TL4.TLFullName AS TRANSFER_USER_RECEIVE_NAME, C.CONTRACT_CODE, C.[CONTRACT_NAME]
56
		-- SELECT END
57
		FROM TR_REQ_PAYMENT_AUTO_EDIT_ENTRIES A
58
		INNER JOIN TR_REQ_PAYMENT_AUTO B ON A.REQ_PAY_AUTO_ID = B.REQ_PAY_AUTO_ID
59
		LEFT JOIN CM_ALLCODE ALLCODE ON A.AUTH_STATUS = ALLCODE.CDVAL AND ALLCODE.CDNAME = 'AUTH_STATUS' AND ALLCODE.CDTYPE = 'TR_PO'
60
		LEFT JOIN TL_USER TL1 ON A.MAKER_ID = TL1.TLNANME
61
		LEFT JOIN TL_USER TL2 ON A.CHECKER_ID = TL2.TLNANME
62
		-- Thong tin PYC
63
		LEFT JOIN TL_USER TL3 ON B.MAKER_ID = TL3.TLNANME
64
		LEFT JOIN CM_BRANCH BR ON B.BRANCH_ID = BR.BRANCH_ID
65
		LEFT JOIN CM_DEPARTMENT DEP ON B.DEP_ID = DEP.DEP_ID
66
		LEFT JOIN TL_USER TL4 ON B.TRANSFER_USER_RECEIVE = TL4.TLNANME
67
		LEFT JOIN TR_CONTRACT C ON B.CONTRACT_ID = C.CONTRACT_ID
68
			
69
		WHERE 1=1 
70
		AND (A.ENTRY_AUTO_ID = @p_ENTRY_AUTO_ID OR ISNULL(@p_ENTRY_AUTO_ID, '') = '')
71
		AND (A.AUTH_STATUS = @p_AUTH_STATUS OR ISNULL(@p_AUTH_STATUS, '') = '')
72
		AND (B.REQ_PAY_AUTO_CODE LIKE '%' + @p_REQ_PAY_AUTO_CODE +'%' OR ISNULL(@p_REQ_PAY_AUTO_CODE, '') = '')
73
		AND(CONVERT(DATE, A.CREATE_DT) >= CONVERT(DATE, @p_FROM_DATE, 103) OR ISNULL(@p_FROM_DATE, '') = '')
74
		AND(CONVERT(DATE, A.CREATE_DT) <= CONVERT(DATE, @p_TO_DATE, 103) OR ISNULL(@p_TO_DATE, '') = '')
75
				  
76
		ORDER BY A.CREATE_DT DESC
77
	-- PAGING END
78
    END;
79
END -- PAGING
80

    
81
GO
82

    
83
ALTER PROCEDURE [dbo].[TR_REQ_PAY_AUTO_CREATE_REQ_PAYMENT_FROM_SYSTEM_INVOICE]
84
@p_XMP_RECURRING XML
85
AS
86
BEGIN TRANSACTION
87

    
88
	DECLARE @list_req_payment NVARCHAR(MAX) = ''
89
-- DS CAC KY DA THANH TOAN
90
	DECLARE @billRef VARCHAR(20), @billCode VARCHAR(20), @customerName NVARCHAR(MAX), @amount VARCHAR(20), @accountNo VARCHAR(20), @accountType VARCHAR(20), 
91
	@createdTime VARCHAR(21), @partner VARCHAR(20), @resultCode VARCHAR(20), @resultDesc NVARCHAR(MAX), @transDesc NVARCHAR(MAX), @coreXref VARCHAR(20), @partnerAccount VARCHAR(20), 
92
	@billCodeAlias VARCHAR(20), @prvCode VARCHAR(20), @sevCode VARCHAR(20), @year VARCHAR(20), @customerAddress VARCHAR(20), @month VARCHAR(20), 
93
	@accountName VARCHAR(20), @accountNoRec VARCHAR(20), @accountNameRec VARCHAR(20), @billDate VARCHAR(20)
94

    
95
	DECLARE @hDocRecurring INT EXEC sp_xml_preparedocument @hDocRecurring OUTPUT, @p_XMP_RECURRING;
96
	DECLARE XmlAutoRecurring CURSOR LOCAL FOR
97
	SELECT * FROM OPENXML(@hDocRecurring, 'Root/XmlAutoRecurring',2) 
98
	WITH(billRef VARCHAR(20), billCode VARCHAR(20), customerName NVARCHAR(MAX), amount VARCHAR(20), accountNo VARCHAR(20), accountType VARCHAR(20), createdTime VARCHAR(30),
99
	[partner] VARCHAR(20), resultCode VARCHAR(20), resultDesc NVARCHAR(MAX), transDesc NVARCHAR(MAX), coreXref VARCHAR(20), partnerAccount VARCHAR(20), [month] VARCHAR(20))
100
	OPEN XmlAutoRecurring
101

    
102
--- DUYET QUA TUNG KY THANH TOAN
103
	FETCH NEXT FROM XmlAutoRecurring INTO @billRef, @billCode, @customerName, @amount, @accountNo, @accountType, @createdTime,
104
	@partner, @resultCode, @resultDesc, @transDesc, @coreXref, @partnerAccount, @month
105
	WHILE @@fetch_status=0 
106
	BEGIN
107
		-- LUU LOG KY THANH TOAN
108
		INSERT INTO TR_REQ_PAY_AUTO_RECURRING_LOG(billRef, billCode, customerName, amount, accountNo, accountType, createdTime,
109
		[partner], resultCode, resultDesc, transDesc, coreXref, partnerAccount, MAKER_ID, CREATE_DT)
110
		VALUES (@billRef, @billCode, @customerName, @amount, @accountNo, @accountType, CONVERT(DATE, @createdTime, 103),
111
		@partner, @resultCode, @resultDesc, @transDesc, @coreXref, @partnerAccount, 'admin', GETDATE())
112

    
113
		IF(@resultCode NOT IN  ('00', '100'))
114
		BEGIN
115
			PRINT 'KY THANH TOAN KHONG HOP LE' + @billRef
116
			-- THEM VAO LOG CAC KY THANH TOAN LOI
117
		END
118
		ELSE IF(@accountType <> 'A')
119
		BEGIN
120
			PRINT 'KHONG PHAI THANH TOAN BANG THE' + @billRef
121
		END
122
		ELSE IF(EXISTS(SELECT * FROM TR_REQ_PAY_AUTO_RECURRING_HISTORY WHERE billRef = @billRef AND @billCode = billCode AND @coreXref = coreXref))
123
		BEGIN
124
			PRINT 'KY THANH TOAN DA TON TAI TRONG HE THONG - DA THUC HIEN THANH TOAN TREN AMS: ' + @billRef
125
		END
126
		ELSE IF(NOT EXISTS(SELECT * FROM TR_REQ_PAY_AUTO_RECURRING WHERE BILLCODE = @billCode))
127
		BEGIN
128
			PRINT 'KHONG CO BILLCODE TRONG HE THONG AMS: ' + @billCode
129
		END
130
		ELSE IF(NOT EXISTS	(SELECT *	FROM TR_REQ_PAY_AUTO_RECURRING A
131
										LEFT JOIN TR_REQ_PAYMENT_AUTO B ON A.REQ_PAY_AUTO_ID = B.REQ_PAY_AUTO_ID 
132
										WHERE A.BILLCODE = @billCode
133
							)
134
				)
135
		BEGIN
136
			PRINT 'KHONG CO PHIEU YEU CAU THANH TOAN TU DONG TRONG HE THONG AMS: ' + @billCode
137
		END
138
		ELSE
139
		BEGIN
140
			DECLARE @REQ_PAY_ID VARCHAR(20), @REQ_PAY_CODE VARCHAR(20), @CONTRACT_ID VARCHAR(20), @CONTRACT_CODE VARCHAR(20), @CONTRACT_NAME NVARCHAR(500),
141
			@BRANCH_ID NVARCHAR(20), @REQ_PAY_AUTO_SERVICE_TYPE VARCHAR(50), @REQ_PAY_AUTO_SERVICE_TYPE_NAME NVARCHAR(200), @DEP_ID VARCHAR(20), @BRANCH_CREATE VARCHAR(20), 
142
			@REQ_PAY_AUTO_ID VARCHAR(20), @TRANSFER_USER_RECEIVE VARCHAR(20), @TRANS_GLCODE VARCHAR(20), @TRANS_GLNAME NVARCHAR(500)
143
			
144
			PRINT 'GET DATA BILLCODE'
145
			-- LAY DATA CUA BILLCODE DANG KY TRONG AMS
146
			SELECT TOP 1 @CONTRACT_ID = B.CONTRACT_ID, @CONTRACT_CODE = E.CONTRACT_CODE, @CONTRACT_NAME = E.[CONTRACT_NAME], 
147
			@BRANCH_ID = B.BRANCH_ID, @REQ_PAY_AUTO_SERVICE_TYPE = B.REQ_PAY_AUTO_SERVICE_TYPE, @REQ_PAY_AUTO_SERVICE_TYPE_NAME = D.CONTENT, @DEP_ID = B.DEP_ID, 
148
			@BRANCH_CREATE = B.BRANCH_CREATE, @REQ_PAY_AUTO_ID = B.REQ_PAY_AUTO_ID, @TRANSFER_USER_RECEIVE = B.TRANSFER_USER_RECEIVE, 
149
			@TRANS_GLCODE = A.TRANS_GLCODE, @TRANS_GLNAME = A.TRANS_GLNAME
150
			FROM TR_REQ_PAY_AUTO_RECURRING A
151
			LEFT JOIN TR_REQ_PAYMENT_AUTO B ON A.REQ_PAY_AUTO_ID = B.REQ_PAY_AUTO_ID
152
			LEFT JOIN CM_BRANCH C ON B.BRANCH_ID = C.BRANCH_ID
153
			LEFT JOIN CM_ALLCODE D ON B.REQ_PAY_AUTO_SERVICE_TYPE = D.CDVAL AND D.CDNAME = 'PAY_SER_AUTO' AND CDTYPE = 'REQ_AUTO'
154
			LEFT JOIN TR_CONTRACT E ON B.CONTRACT_ID = E.CONTRACT_ID
155
			WHERE BILLCODE = @billCode
156
			PRINT 'LUU LOG KY THANH TOAN'
157
			print @createdTime
158
			-- LUU LOG KY THANH TOAN
159
			INSERT INTO TR_REQ_PAY_AUTO_RECURRING_HISTORY(billRef, billCode, customerName, amount, accountNo, accountType, createdTime,
160
			[partner], resultCode, resultDesc, transDesc, coreXref, partnerAccount, MAKER_ID, CREATE_DT)
161
			VALUES (@billRef, @billCode, @customerName, @amount, @accountNo, @accountType, CONVERT(DATE, @createdTime, 103),
162
			@partner, @resultCode, @resultDesc, @transDesc, @coreXref, @partnerAccount, 'admin', GETDATE())
163

    
164
			-------------------- BEGIN TAO PHIEU DE NGHI THANH TOAN TU DONG ----------------------------------
165

    
166
			-- BEGIN KHOI TAO GIA TRI
167
			-- ID PDN THANH TOAN
168
			PRINT 'GEN ID PDN THANH TOAN'
169
			EXEC [dbo].[PAY_CODE_GenKey] 'TR_REQ_PAYMENT', '','', @REQ_PAY_CODE out
170
			IF EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_CODE  = @REQ_PAY_CODE )
171
			BEGIN
172
				ROLLBACK TRANSACTION
173
				SELECT '-1' as Result, @list_req_payment LIST_REQ_PAYMENT, N'Số phiếu đề nghị thanh toán đã tồn tại trong hệ thống' ErrorDesc
174
				RETURN '-1'
175
			END
176
			PRINT 'GEN MA CODE PDN THANH TOAN'
177
			-- MA CODE PDN THANH TOAN
178
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAYMENT', @REQ_PAY_ID out
179
			IF @REQ_PAY_ID='' OR @REQ_PAY_ID IS NULL GOTO ABORT
180
			PRINT 'GET DON VI QUAN LY HOP DONG'
181
			DECLARE @BRANCH_MANAGE_ID NVARCHAR(250) =	(	SELECT TOP 1 BRANCH_ID 
182
															FROM CM_BRANCH 
183
															WHERE BRANCH_ID = (	SELECT TOP 1 BRANCH_ID FROM TR_CONTRACT WHERE CONTRACT_ID = @CONTRACT_ID)
184
														)
185
			
186
			DECLARE @BRANCH_MANAGE_NAME NVARCHAR(250) = (	SELECT TOP 1 BRANCH_NAME 
187
															FROM CM_BRANCH 
188
															WHERE BRANCH_ID = (	SELECT TOP 1 BRANCH_ID FROM TR_CONTRACT WHERE CONTRACT_ID = @CONTRACT_ID)
189
														)
190

    
191
			-- NOI DUNG THANH TOAN, DUNG CHO NHIEU TABLE
192
			DECLARE @PAY_AUTO_DESC_DETAIL NVARCHAR(1000) = ''
193
			DECLARE @PAY_AUTO_TRN_DESC_DETAIL VARCHAR(1000) = ''
194

    
195
			DECLARE @l_Month VARCHAR(2), @l_Year VARCHAR(4)
196
			-- NEU LA DIEN HOAC NUOC: t; DIEN THOAI HOAC INTERNET: t-1
197
			IF(ISNULL(@REQ_PAY_AUTO_SERVICE_TYPE, '') = 'ELECTRIC' OR ISNULL(@REQ_PAY_AUTO_SERVICE_TYPE, '') = 'WATER')
198
			BEGIN
199
				SET @l_Month =  RIGHT('0' + CAST(DATEPART(MM, GETDATE()) AS VARCHAR(2)), 2);
200
				SET @l_Year =  RIGHT(YEAR(GETDATE()), 4);
201
			END
202
			ELSE
203
			BEGIN
204
				SET @l_Month =  RIGHT('0' + CAST(DATEPART(MM, DATEADD(MONTH, -1, GETDATE())) AS VARCHAR(2)), 2);
205
				SET @l_Year =  RIGHT(YEAR(DATEADD(MONTH, -1, GETDATE())), 4);
206
			END
207

    
208
			IF(ISNULL(@month, '') = '')
209
			BEGIN
210
				PRINT 'HOP DONG KHONG CO MA CODE: ' + @PAY_AUTO_DESC_DETAIL
211
				SET @month = @l_Month + '/' + @l_Year
212
				SET @PAY_AUTO_DESC_DETAIL = @BRANCH_MANAGE_NAME + N' thanh toán chi phí ' + @REQ_PAY_AUTO_SERVICE_TYPE_NAME + ' ' + @l_Month + '/' + @l_Year + N' theo GDNTT số ' + @REQ_PAY_CODE
213
				SET @PAY_AUTO_TRN_DESC_DETAIL = UPPER(dbo.fChuyenCoDauThanhKhongDau(@BRANCH_MANAGE_NAME + N' thanh toán chi phí ' + @REQ_PAY_AUTO_SERVICE_TYPE_NAME + ' ' + @l_Month + '/' + @l_Year + N' theo GDNTT số ' + @REQ_PAY_CODE))
214
			END
215
			ELSE
216
			BEGIN
217
				PRINT 'HOP DONG CO MA CODE: ' + @PAY_AUTO_DESC_DETAIL
218
				SET @PAY_AUTO_DESC_DETAIL = @BRANCH_MANAGE_NAME + N' thanh toán chi phí ' + @REQ_PAY_AUTO_SERVICE_TYPE_NAME + N', ' + @month + N' theo GDNTT số ' + @REQ_PAY_CODE
219
				SET @PAY_AUTO_TRN_DESC_DETAIL = UPPER(dbo.fChuyenCoDauThanhKhongDau(@BRANCH_MANAGE_NAME + N' thanh toán chi phí ' + @REQ_PAY_AUTO_SERVICE_TYPE_NAME + N', ' + @month + N' theo GDNTT số ' + @REQ_PAY_CODE))
220
			END
221

    
222
			-- END KHOI TAO GIA TRI
223
			PRINT 'TAO PHIEU DE NGHI THANH TOAN'
224
			INSERT INTO [dbo].[TR_REQ_PAYMENT]
225
			(REQ_PAY_ID, REQ_PAY_CODE, BRANCH_ID, DEP_ID, REQ_REASON, REQ_TYPE, 
226
			REQ_ENTRIES, REQ_DESCRIPTION, REF_ID, PAY_PHASE, RECEIVER_PO, --NULL
227
			REQ_PAY_TYPE, REQ_DT, REQ_TYPE_CURRENCY, REQ_AMT, REQ_TEMP_AMT, 
228
			MAKER_ID, CREATE_DT, EDITOR_ID, AUTH_STATUS, CHECKER_ID, APPROVE_DT, --HC
229
			CREATE_DT_KT, MAKER_ID_KT, AUTH_STATUS_KT, CHECKER_ID_KT, APPROVE_DT_KT, CONFIRM_NOTE, --KT
230
			BRANCH_CREATE, NOTES, RECORD_STATUS, TRANSFER_MAKER, TRANSFER_DT, TRASFER_USER_RECIVE, PROCESS, RATE, IS_PERIOD, AMT_PAY, IS_CREATE_AUTO, TYPE_AUTO, SYSTEM_INVOICE_ID, IS_CREATE_AUTO_DONE)
231
			VALUES
232
			(@REQ_PAY_ID, @REQ_PAY_CODE, @BRANCH_ID, @DEP_ID, @PAY_AUTO_DESC_DETAIL, 'P', 
233
			NULL, NULL,  NULL, NULL, NULL,  --NULL
234
			'1', GETDATE(), 'VND', @amount, NULL, 
235
			'admin', GETDATE(), NULL, 'A', 'admin', GETDATE(),  --HC
236
			GETDATE(), 'admin', 'A', 'admin', GETDATE(), NULL, --KT
237
			@BRANCH_CREATE, NULL, '1', 'admin', GETDATE(), NULL, '0', 1, 'Y', NULL, 'Y', 'B', @billRef, 'N')
238
			PRINT 'TAO LUOI PDN THANH TOAN CHO PYC TTTD'
239
			-- TẠO LƯỚI PHIEU DE NGHI THANH TOAN CHO PYC
240
			INSERT INTO [dbo].[TR_REQ_PAY_AUTO_PAYMENTS]
241
			(REQ_PAY_AUTO_ID, REQ_PAY_ID, REQ_PAY_CODE, BRANCH_ID, DEP_ID, REQ_REASON, REQ_TYPE, 
242
			REQ_ENTRIES, REQ_DESCRIPTION, REF_ID, PAY_PHASE, RECEIVER_PO, --NULL
243
			REQ_PAY_TYPE, REQ_DT, REQ_TYPE_CURRENCY, REQ_AMT, REQ_TEMP_AMT, 
244
			MAKER_ID, CREATE_DT, EDITOR_ID, AUTH_STATUS, CHECKER_ID, APPROVE_DT, --HC
245
			CREATE_DT_KT, MAKER_ID_KT, AUTH_STATUS_KT, CHECKER_ID_KT, APPROVE_DT_KT, CONFIRM_NOTE, --KT
246
			BRANCH_CREATE, NOTES, RECORD_STATUS, TRANSFER_MAKER, TRANSFER_DT, TRASFER_USER_RECIVE, PROCESS, RATE, IS_PERIOD, AMT_PAY)
247
			VALUES
248
			(@REQ_PAY_AUTO_ID ,@REQ_PAY_ID, @REQ_PAY_CODE, @BRANCH_ID, @DEP_ID, @PAY_AUTO_DESC_DETAIL, 'P', 
249
			NULL, NULL,  NULL, NULL, NULL,  --NULL
250
			'1', GETDATE(), 'VND', @amount, NULL, 
251
			'admin', GETDATE(), NULL, 'A', 'admin', GETDATE(),  --HC
252
			GETDATE(), 'admin', 'A', 'admin', GETDATE(), NULL, --KT
253
			@BRANCH_CREATE, NULL, '1', 'admin', GETDATE(), NULL, '0', 1, 'Y', NULL)
254
			PRINT 'THEM LICH SU XU LY'
255
			INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
256
			VALUES(@REQ_PAY_ID,'AUTO_APPR','admin',GETDATE(), N'Hệ thống tạo phiếu thanh toán tự động',N'Hệ thống tạo phiếu thanh toán tự động')
257

    
258
			
259
			-------------------- END TAO PHIEU DE NGHI THANH TOAN TU DONG ----------------------------------
260

    
261
			-- TẠO LƯỚI THÔNG TIN HỢP ĐỒNG ĐỊNH KỲ
262
			PRINT 'TAO LUOI THONG TIN HDDK'
263
			DECLARE @REQ_PAYDTID_PERIOD VARCHAR(15);
264
			EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_PERIOD OUT;
265
			IF @REQ_PAYDTID_PERIOD='' OR @REQ_PAYDTID_PERIOD IS NULL GOTO ABORT;
266
			INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID, REQ_PAY_ID,REF_ID, [TYPE], MAKER_ID, CREATE_DT, IS_CLOSED, REF_TYPE, DELIVERY_DT) 
267
			VALUES(@REQ_PAYDTID_PERIOD, @REQ_PAY_ID, @CONTRACT_ID, 'PAY', 'admin', GETDATE(), 'N', 'C', CONVERT(DATE,NULL,103))
268
			
269
			-- TẠO LƯỚI THÔNG TIN THANH TOÁN HỢP ĐỒNG ĐỊNH KỲ
270
			PRINT 'TAO LUOI THONG TIN THANH TOAN HDDK'
271
			DECLARE @PERIOD_ID VARCHAR(15);
272
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
273
			IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
274
			INSERT INTO TR_REQ_PAY_PERIOD(PERIOD_ID, REQ_PAY_ID, PAY_TYPE, CONTRACT_ID, PAY_DT_REAL ,OLD_INDEX, NEW_INDEX, AMT_PAY, 
275
			AUTH_STATUS_KT, CURRENCY, RATE, FROM_DATE, TO_DATE,AD_PAY_ID, PROCESS, PARENT_ID, PAY_PHASE, REASON, TYPE_COST,FR_LEVEL , TO_LEVEL)
276
			VALUES (@PERIOD_ID, @REQ_PAY_ID,'PAY', @CONTRACT_ID, NULL, NULL , NULL , @amount, 
277
			'A', 'VND', '1', NULL, NULL, NULL, '1', NULL, @month, @PAY_AUTO_DESC_DETAIL, NULL, NULL, NULL )
278

    
279
-- TẠO LƯỚI THÔNG TIN HẠCH TOÁN
280

    
281
	-- BEGIN BUT TOAN CHI PHI
282
				PRINT 'BUT TOAN CHI PHI'
283
				DECLARE @FUNCTION_TYPE VARCHAR(15), @TRN_TYPE NVARCHAR(40), @REF_ID VARCHAR(15), @ENTRY_PAIR varchar(50), @DR_CR varchar(2), @DR_CR_NAME nvarchar(50), 
284
				@ACCT varchar(100), @ACCT_NAME varchar(500), @AMT DECIMAL(18,2), @EXC_RATE DECIMAL(18,2), @TRN_DATE VARCHAR(20), @TRN_DESC nvarchar(1000), @AUTH_STATUS varchar(2), @APPROVE_DT varchar(20),
285
				@CREATE_DT_KT varchar(20), @APPROVE_DT_KT varchar(20), @IS_TRANSFER_EXTERNAL varchar(20), @DEP_ID_ENTRY varchar(20), 
286
				@CURRENCY varchar(20), @MAKER_ID varchar(20), @CREATE_DT varchar(20), @CHECKER_ID varchar(20), @MAKER_ID_KT varchar(20), @AUTH_STATUS_KT varchar(2), @CHECKER_ID_KT varchar(20), 
287
				@RECORD_STATUS varchar(20)
288
				DECLARE @l_TR_REQ_PAY_ENTRIES_D VARCHAR(15);
289

    
290
				DECLARE @TYPE_BUDGET_ALLOCAITON_ENTRIES VARCHAR(20), @PERCENT_BUDGET_ALLOCAITON_ENTRIES DECIMAL(18,2), @AMT_BUDGET_ALLOCAITON_ENTRIES DECIMAL(18,2)
291

    
292
				DECLARE @RES VARCHAR(10)
293
				DECLARE @TOTAL_CREDIT_AMT DECIMAL(18,0) = @amount;
294
				DECLARE @TAX DECIMAL(18,1) = 0.1
295
				DECLARE @TOTAL_PERCENT DECIMAL(18,2) = 0, @TOTAL_PERCENT_AMT DECIMAL(18,0) = 0;
296
				DECLARE @TOTAL_MONEY DECIMAL(18,2) = 0, @TOTAL_MONEY_AMT DECIMAL(18,0) = (SELECT SUM(ISNULL(AMT_BUDGET_ALLOCAITON, 0)) FROM TR_REQ_PAY_AUTO_ENTRIES);
297
				
298
				-- KHAI BAO CONST
299
				DECLARE @PERCENT_VAT DECIMAL(18,2) = 1.1;
300
				/*
301
				-- NEU LA HOA DON DIEN THI THUE SE LA 8%. VIEC NAY CO HIEU LUC DEN HET NAM 2023
302
				IF	(	(	SELECT TOP 1 ISNULL(B.REQ_PAY_AUTO_SERVICE_TYPE, '')
303
							FROM TR_REQ_PAY_AUTO_RECURRING A
304
							INNER JOIN TR_REQ_PAYMENT_AUTO B ON A.REQ_PAY_AUTO_ID = B.REQ_PAY_AUTO_ID
305
							WHERE A.BILLCODE = @billCode
306
						) = 'ELECTRIC'
307
					)
308
				BEGIN
309
					SET @PERCENT_VAT = 1.08;
310
				END
311
				*/
312

    
313
				-- CO THUE
314
				IF(EXISTS(SELECT * FROM TR_REQ_PAY_AUTO_ENTRIES WHERE REQ_PAY_AUTO_ID = @REQ_PAY_AUTO_ID AND ACCT = '353200002'))
315
				BEGIN
316
				-- SET THUE DUA VAO VAT TREN LUOI HACH TOAN
317
					SET @PERCENT_VAT = 1 + (SELECT TOP 1 VAT FROM TR_REQ_PAY_AUTO_ENTRIES WHERE REQ_PAY_AUTO_ID = @REQ_PAY_AUTO_ID AND ACCT = '353200002')/100
318

    
319
					IF(EXISTS(SELECT * FROM TR_REQ_PAY_AUTO_BUDGET_ALLOCATION WHERE REQ_PAY_AUTO_ID = @REQ_PAY_AUTO_ID AND TYPE_BUDGET_ALLOCAITON = 'PERCENT' AND 1=2))-- THEM DIEU KIEN 1=2 VI CHUC NANG NAY CHUA HOAT DONG
320
					BEGIN
321
						PRINT 'CO THUE, CO PHAN CHIA'
322
					-- CREATE CURSOR CÁC ĐẦU CÓ --> LẤY ĐƯỢC CÁC CẶP BÚT TOÁN
323
						DECLARE cursorEntries_C CURSOR LOCAL FOR 
324
						SELECT REQ_PAY_AUTO_ID, ENTRY_PAIR
325
						FROM TR_REQ_PAY_AUTO_ENTRIES
326
						WHERE REQ_PAY_AUTO_ID = @REQ_PAY_AUTO_ID AND DR_CR = 'C'
327

    
328
						Open cursorEntries_C
329
						FETCH NEXT FROM cursorEntries_C INTO @REQ_PAY_AUTO_ID, @ENTRY_PAIR
330
						WHILE @@FETCH_STATUS = 0
331
						BEGIN
332
						-- BEGIN CHẠY TỪNG CẶP BÚT TOÁN
333
							DECLARE cursorEntries CURSOR LOCAL FOR 
334
							SELECT REQ_PAY_AUTO_ID, FUNCTION_TYPE, TRN_TYPE, REF_ID, ENTRY_PAIR, DR_CR, DR_CR_NAME, ACCT, ACCT_NAME, BRANCH_ID, DEP_ID, AMT, CURRENCY, EXC_RATE,
335
							TRN_DATE, TRN_DESC, MAKER_ID, CREATE_DT, AUTH_STATUS, CHECKER_ID, APPROVE_DT, MAKER_ID_KT, CREATE_DT_KT, AUTH_STATUS_KT, CHECKER_ID_KT, APPROVE_DT_KT, RECORD_STATUS,
336
							IS_TRANSFER_EXTERNAL, TYPE_BUDGET_ALLOCAITON, PERCENT_BUDGET_ALLOCAITON, AMT_BUDGET_ALLOCAITON
337
							FROM TR_REQ_PAY_AUTO_ENTRIES
338
							WHERE REQ_PAY_AUTO_ID = @REQ_PAY_AUTO_ID AND ENTRY_PAIR = @ENTRY_PAIR
339

    
340
							Open cursorEntries
341
							FETCH NEXT FROM cursorEntries INTO @REQ_PAY_AUTO_ID, @FUNCTION_TYPE, @TRN_TYPE, @REF_ID, @ENTRY_PAIR, @DR_CR, @DR_CR_NAME, @ACCT, @ACCT_NAME, @BRANCH_ID, @DEP_ID_ENTRY, @AMT, @CURRENCY, @EXC_RATE,
342
							@TRN_DATE, @TRN_DESC, @MAKER_ID, @CREATE_DT, @AUTH_STATUS, @CHECKER_ID, @APPROVE_DT, @MAKER_ID_KT, @CREATE_DT_KT, @AUTH_STATUS_KT, @CHECKER_ID_KT, @APPROVE_DT_KT, @RECORD_STATUS, 
343
							@IS_TRANSFER_EXTERNAL, @TYPE_BUDGET_ALLOCAITON_ENTRIES, @PERCENT_BUDGET_ALLOCAITON_ENTRIES, @AMT_BUDGET_ALLOCAITON_ENTRIES
344
							WHILE @@FETCH_STATUS = 0
345
							BEGIN
346

    
347
								EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ENTRIES', @l_TR_REQ_PAY_ENTRIES_D OUT;
348
								IF @l_TR_REQ_PAY_ENTRIES_D='' OR @l_TR_REQ_PAY_ENTRIES_D IS NULL GOTO ABORT;
349
								SET @PERCENT_BUDGET_ALLOCAITON_ENTRIES = (SELECT TOP 1 ISNULL(PERCENT_BUDGET_ALLOCAITON, 0) FROM TR_REQ_PAY_AUTO_ENTRIES WHERE REQ_PAY_AUTO_ID = @REQ_PAY_AUTO_ID AND ENTRY_PAIR = @ENTRY_PAIR AND ACCT <> '353200002')
350

    
351
								IF(@DR_CR = 'D')
352
								BEGIN
353
									IF(ISNULL(@TOTAL_PERCENT, 0) + ISNULL(@PERCENT_BUDGET_ALLOCAITON_ENTRIES, 0) = 100)
354
									BEGIN
355
										PRINT 'DONG NO CUOI'
356
										DECLARE @A_CREDIT_AMT DECIMAL(18,0) = @amount - @TOTAL_PERCENT_AMT
357
										DECLARE @A_DEBIT_AMT DECIMAL(18,0) = @A_CREDIT_AMT/@PERCENT_VAT
358
										DECLARE @A_3532_AMT DECIMAL(18,0) = @A_CREDIT_AMT - @A_DEBIT_AMT
359
										print '@A_CREDIT_AMT: ' + CONVERT(VARCHAR(15),@A_CREDIT_AMT) 
360
										print '@A_DEBIT_AMT: ' + CONVERT(VARCHAR(15),@A_DEBIT_AMT) 
361
										print '@A_3532_AMT: ' + CONVERT(VARCHAR(15),@A_3532_AMT) 
362

    
363
										IF(ISNULL(@ACCT, '') = '353200002')
364
										BEGIN
365
											print '@ACCT 3532: ' + @ACCT
366
											print '@A_3532_AMT 3532: ' + CONVERT(VARCHAR(15),@A_3532_AMT) 
367
											INSERT INTO [TR_REQ_PAY_ENTRIES] ([REQ_PAY_DT_ID],[REQ_PAY_ID],[FUNCTION_TYPE],[TRN_TYPE],[REF_ID],[ENTRY_PAIR],[DR_CR],[DR_CR_NAME],[ACCT],[ACCT_NAME],[BRANCH_ID],[DEP_ID], [AMT],[CURRENCY],[EXC_RATE],
368
											[TRN_DATE],[TRN_DESC],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT],[MAKER_ID_KT],[CREATE_DT_KT],[AUTH_STATUS_KT],[CHECKER_ID_KT],[APPROVE_DT_KT],[RECORD_STATUS],[IS_TRANSFER_EXTERNAL])
369
											VALUES (@l_TR_REQ_PAY_ENTRIES_D, @REQ_PAY_ID, @FUNCTION_TYPE, @TRN_TYPE, @REF_ID, @ENTRY_PAIR, @DR_CR, @DR_CR_NAME, @ACCT, @ACCT_NAME, @BRANCH_ID, @DEP_ID_ENTRY, @A_3532_AMT, @CURRENCY, @EXC_RATE,
370
											@TRN_DATE, @PAY_AUTO_TRN_DESC_DETAIL, 'admin', @CREATE_DT, @AUTH_STATUS, 'admin', @APPROVE_DT, 'admin', @CREATE_DT_KT, @AUTH_STATUS_KT, 'admin', @APPROVE_DT_KT, @RECORD_STATUS, @IS_TRANSFER_EXTERNAL)
371
										END
372
										ELSE
373
										BEGIN
374
											INSERT INTO [TR_REQ_PAY_ENTRIES] ([REQ_PAY_DT_ID],[REQ_PAY_ID],[FUNCTION_TYPE],[TRN_TYPE],[REF_ID],[ENTRY_PAIR],[DR_CR],[DR_CR_NAME],[ACCT],[ACCT_NAME],[BRANCH_ID],[DEP_ID], [AMT],[CURRENCY],[EXC_RATE],
375
											[TRN_DATE],[TRN_DESC],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT],[MAKER_ID_KT],[CREATE_DT_KT],[AUTH_STATUS_KT],[CHECKER_ID_KT],[APPROVE_DT_KT],[RECORD_STATUS],[IS_TRANSFER_EXTERNAL])
376
											VALUES (@l_TR_REQ_PAY_ENTRIES_D, @REQ_PAY_ID, @FUNCTION_TYPE, @TRN_TYPE, @REF_ID, @ENTRY_PAIR, @DR_CR, @DR_CR_NAME, @ACCT, @ACCT_NAME, @BRANCH_ID, @DEP_ID_ENTRY, @A_DEBIT_AMT, @CURRENCY, @EXC_RATE,
377
											@TRN_DATE, @PAY_AUTO_TRN_DESC_DETAIL, 'admin', @CREATE_DT, @AUTH_STATUS, 'admin', @APPROVE_DT, 'admin', @CREATE_DT_KT, @AUTH_STATUS_KT, 'admin', @APPROVE_DT_KT, @RECORD_STATUS, @IS_TRANSFER_EXTERNAL)
378
										END
379
									END
380
									ELSE
381
									BEGIN
382
										PRINT 'CHUA PHAI DONG NO CUOI'
383
										DECLARE @B_CREDIT_AMT DECIMAL(18,0) = CONVERT(DECIMAL, @amount*@PERCENT_BUDGET_ALLOCAITON_ENTRIES/100)
384
										DECLARE @B_DEBIT_AMT DECIMAL(18,0) = @B_CREDIT_AMT/@PERCENT_VAT
385
										DECLARE @B_3532_AMT DECIMAL(18,0) = @B_CREDIT_AMT - @B_DEBIT_AMT
386
										print '@B_CREDIT_AMT: ' + CONVERT(VARCHAR(15),@B_CREDIT_AMT)
387
										print '@B_DEBIT_AMT: ' + CONVERT(VARCHAR(15),@B_DEBIT_AMT)
388
										print '@B_3532_AMT: ' +CONVERT(VARCHAR(15),@B_3532_AMT) 
389

    
390
										IF(ISNULL(@ACCT, '') = '353200002')
391
										BEGIN
392
											print '@ACCT 3532: ' + @ACCT
393
											print '@B_3532_AMT hach toan: ' +CONVERT(VARCHAR(15),@B_3532_AMT) 
394
											INSERT INTO [TR_REQ_PAY_ENTRIES] ([REQ_PAY_DT_ID],[REQ_PAY_ID],[FUNCTION_TYPE],[TRN_TYPE],[REF_ID],[ENTRY_PAIR],[DR_CR],[DR_CR_NAME],[ACCT],[ACCT_NAME],[BRANCH_ID],[DEP_ID], [AMT],[CURRENCY],[EXC_RATE],
395
											[TRN_DATE],[TRN_DESC],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT],[MAKER_ID_KT],[CREATE_DT_KT],[AUTH_STATUS_KT],[CHECKER_ID_KT],[APPROVE_DT_KT],[RECORD_STATUS],[IS_TRANSFER_EXTERNAL])
396
											VALUES (@l_TR_REQ_PAY_ENTRIES_D, @REQ_PAY_ID, @FUNCTION_TYPE, @TRN_TYPE, @REF_ID, @ENTRY_PAIR, @DR_CR, @DR_CR_NAME, @ACCT, @ACCT_NAME, @BRANCH_ID, @DEP_ID_ENTRY, @B_3532_AMT, @CURRENCY, @EXC_RATE,
397
											@TRN_DATE, @PAY_AUTO_TRN_DESC_DETAIL, 'admin', @CREATE_DT, @AUTH_STATUS, 'admin', @APPROVE_DT, 'admin', @CREATE_DT_KT, @AUTH_STATUS_KT, 'admin', @APPROVE_DT_KT, @RECORD_STATUS, @IS_TRANSFER_EXTERNAL)
398
										END
399
										ELSE
400
										BEGIN
401
											INSERT INTO [TR_REQ_PAY_ENTRIES] ([REQ_PAY_DT_ID],[REQ_PAY_ID],[FUNCTION_TYPE],[TRN_TYPE],[REF_ID],[ENTRY_PAIR],[DR_CR],[DR_CR_NAME],[ACCT],[ACCT_NAME],[BRANCH_ID],[DEP_ID], [AMT],[CURRENCY],[EXC_RATE],
402
											[TRN_DATE],[TRN_DESC],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT],[MAKER_ID_KT],[CREATE_DT_KT],[AUTH_STATUS_KT],[CHECKER_ID_KT],[APPROVE_DT_KT],[RECORD_STATUS],[IS_TRANSFER_EXTERNAL])
403
											VALUES (@l_TR_REQ_PAY_ENTRIES_D, @REQ_PAY_ID, @FUNCTION_TYPE, @TRN_TYPE, @REF_ID, @ENTRY_PAIR, @DR_CR, @DR_CR_NAME, @ACCT, @ACCT_NAME, @BRANCH_ID, @DEP_ID_ENTRY, @B_DEBIT_AMT, @CURRENCY, @EXC_RATE,
404
											@TRN_DATE, @PAY_AUTO_TRN_DESC_DETAIL, 'admin', @CREATE_DT, @AUTH_STATUS, 'admin', @APPROVE_DT, 'admin', @CREATE_DT_KT, @AUTH_STATUS_KT, 'admin', @APPROVE_DT_KT, @RECORD_STATUS, @IS_TRANSFER_EXTERNAL)
405
										END
406
									END
407
								END
408
								ELSE
409
								BEGIN
410
									IF(ISNULL(@TOTAL_PERCENT, 0) + ISNULL(@PERCENT_BUDGET_ALLOCAITON_ENTRIES, 0) = 100)
411
									BEGIN
412
										PRINT 'DONG CO CUOI'
413
										INSERT INTO [TR_REQ_PAY_ENTRIES] ([REQ_PAY_DT_ID],[REQ_PAY_ID],[FUNCTION_TYPE],[TRN_TYPE],[REF_ID],[ENTRY_PAIR],[DR_CR],[DR_CR_NAME],[ACCT],[ACCT_NAME],[BRANCH_ID],[DEP_ID], [AMT],[CURRENCY],[EXC_RATE],
414
										[TRN_DATE],[TRN_DESC],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT],[MAKER_ID_KT],[CREATE_DT_KT],[AUTH_STATUS_KT],[CHECKER_ID_KT],[APPROVE_DT_KT],[RECORD_STATUS],[IS_TRANSFER_EXTERNAL])
415
										VALUES (@l_TR_REQ_PAY_ENTRIES_D, @REQ_PAY_ID, @FUNCTION_TYPE, @TRN_TYPE, @REF_ID, @ENTRY_PAIR, @DR_CR, @DR_CR_NAME, @ACCT, @ACCT_NAME, @BRANCH_ID, @DEP_ID_ENTRY, @amount - @TOTAL_PERCENT_AMT, @CURRENCY, @EXC_RATE,
416
										@TRN_DATE, @PAY_AUTO_TRN_DESC_DETAIL, 'admin', @CREATE_DT, @AUTH_STATUS, 'admin', @APPROVE_DT, 'admin', @CREATE_DT_KT, @AUTH_STATUS_KT, 'admin', @APPROVE_DT_KT, @RECORD_STATUS, @IS_TRANSFER_EXTERNAL)
417
									END
418
									ELSE
419
									BEGIN
420
										PRINT 'CHUA PHAI DONG CO CUOI'
421
										INSERT INTO [TR_REQ_PAY_ENTRIES] ([REQ_PAY_DT_ID],[REQ_PAY_ID],[FUNCTION_TYPE],[TRN_TYPE],[REF_ID],[ENTRY_PAIR],[DR_CR],[DR_CR_NAME],[ACCT],[ACCT_NAME],[BRANCH_ID],[DEP_ID], [AMT],[CURRENCY],[EXC_RATE],
422
										[TRN_DATE],[TRN_DESC],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT],[MAKER_ID_KT],[CREATE_DT_KT],[AUTH_STATUS_KT],[CHECKER_ID_KT],[APPROVE_DT_KT],[RECORD_STATUS],[IS_TRANSFER_EXTERNAL])
423
										VALUES (@l_TR_REQ_PAY_ENTRIES_D, @REQ_PAY_ID, @FUNCTION_TYPE, @TRN_TYPE, @REF_ID, @ENTRY_PAIR, @DR_CR, @DR_CR_NAME, @ACCT, @ACCT_NAME, @BRANCH_ID, @DEP_ID_ENTRY, CONVERT(DECIMAL, @amount*@PERCENT_BUDGET_ALLOCAITON_ENTRIES/100), @CURRENCY, @EXC_RATE,
424
										@TRN_DATE, @PAY_AUTO_TRN_DESC_DETAIL, 'admin', @CREATE_DT, @AUTH_STATUS, 'admin', @APPROVE_DT, 'admin', @CREATE_DT_KT, @AUTH_STATUS_KT, 'admin', @APPROVE_DT_KT, @RECORD_STATUS, @IS_TRANSFER_EXTERNAL)
425
									END
426
										
427
								END
428

    
429
							IF @@error<>0 GOTO ABORT;
430
							FETCH NEXT FROM cursorEntries INTO @REQ_PAY_AUTO_ID, @FUNCTION_TYPE, @TRN_TYPE, @REF_ID, @ENTRY_PAIR, @DR_CR, @DR_CR_NAME, @ACCT, @ACCT_NAME, @BRANCH_ID, @DEP_ID_ENTRY, @AMT, @CURRENCY, @EXC_RATE,
431
							@TRN_DATE, @TRN_DESC, @MAKER_ID, @CREATE_DT, @AUTH_STATUS, @CHECKER_ID, @APPROVE_DT, @MAKER_ID_KT, @CREATE_DT_KT, @AUTH_STATUS_KT, @CHECKER_ID_KT, @APPROVE_DT_KT, @RECORD_STATUS,
432
							@IS_TRANSFER_EXTERNAL, @TYPE_BUDGET_ALLOCAITON_ENTRIES, @PERCENT_BUDGET_ALLOCAITON_ENTRIES, @AMT_BUDGET_ALLOCAITON_ENTRIES
433
							END
434
							CLOSE cursorEntries
435
							DEALLOCATE cursorEntries
436
						-- END CHẠY TỪNG CẶP BÚT TOÁN
437
								
438
							SET @TOTAL_PERCENT = @TOTAL_PERCENT + @PERCENT_BUDGET_ALLOCAITON_ENTRIES;
439
							SET @TOTAL_PERCENT_AMT = @TOTAL_PERCENT_AMT + @amount*@PERCENT_BUDGET_ALLOCAITON_ENTRIES/100
440

    
441
						IF @@error<>0 GOTO ABORT;
442
						FETCH NEXT FROM cursorEntries_C INTO @REQ_PAY_AUTO_ID, @ENTRY_PAIR
443
						END
444
						CLOSE cursorEntries_C
445
						DEALLOCATE cursorEntries_C
446

    
447
							
448
						--- BAN BUT TOAN VAO CORE
449
						EXEC [dbo].[PAY_ENTRIES_POST_SetApp] @REQ_PAY_ID,'admin','admin', @RES OUT
450
					END
451
					ELSE
452
					BEGIN
453
						PRINT 'CO THUE, KHONG PHAN CHIA 2 NO - 1 CO'
454
						DECLARE @DEBIT_AMT_1 DECIMAL(18,0) = @TOTAL_CREDIT_AMT/@PERCENT_VAT
455
						DECLARE @3532_AMT DECIMAL(18,0) = @TOTAL_CREDIT_AMT - @DEBIT_AMT_1
456

    
457
						DECLARE cursorEntries CURSOR LOCAL FOR 
458
						SELECT REQ_PAY_AUTO_ID, FUNCTION_TYPE, TRN_TYPE, REF_ID, ENTRY_PAIR, DR_CR, DR_CR_NAME, ACCT, ACCT_NAME, BRANCH_ID, DEP_ID, AMT, CURRENCY, EXC_RATE,
459
						TRN_DATE, TRN_DESC, MAKER_ID, CREATE_DT, AUTH_STATUS, CHECKER_ID, APPROVE_DT, MAKER_ID_KT, CREATE_DT_KT, AUTH_STATUS_KT, CHECKER_ID_KT, APPROVE_DT_KT, RECORD_STATUS, IS_TRANSFER_EXTERNAL
460
						FROM TR_REQ_PAY_AUTO_ENTRIES
461
						WHERE REQ_PAY_AUTO_ID = @REQ_PAY_AUTO_ID
462
						Open cursorEntries
463
						FETCH NEXT FROM cursorEntries INTO @REQ_PAY_AUTO_ID, @FUNCTION_TYPE, @TRN_TYPE, @REF_ID, @ENTRY_PAIR, @DR_CR, @DR_CR_NAME, @ACCT, @ACCT_NAME, @BRANCH_ID, @DEP_ID_ENTRY, @AMT, @CURRENCY, @EXC_RATE,
464
						@TRN_DATE, @TRN_DESC, @MAKER_ID, @CREATE_DT, @AUTH_STATUS, @CHECKER_ID, @APPROVE_DT, @MAKER_ID_KT, @CREATE_DT_KT, @AUTH_STATUS_KT, @CHECKER_ID_KT, @APPROVE_DT_KT, @RECORD_STATUS, @IS_TRANSFER_EXTERNAL
465
						WHILE @@FETCH_STATUS = 0
466
						BEGIN
467

    
468
							EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ENTRIES', @l_TR_REQ_PAY_ENTRIES_D OUT;
469
							IF @l_TR_REQ_PAY_ENTRIES_D='' OR @l_TR_REQ_PAY_ENTRIES_D IS NULL GOTO ABORT;
470

    
471
							IF(@DR_CR = 'D')	-- Nợ
472
							BEGIN
473
								IF(@ACCT = '353200002')
474
								BEGIN
475
									print '3532'
476
									INSERT INTO [TR_REQ_PAY_ENTRIES] ([REQ_PAY_DT_ID],[REQ_PAY_ID],[FUNCTION_TYPE],[TRN_TYPE],[REF_ID],[ENTRY_PAIR],[DR_CR],[DR_CR_NAME],[ACCT],[ACCT_NAME],[BRANCH_ID],[DEP_ID], [AMT],[CURRENCY],[EXC_RATE],
477
									[TRN_DATE],[TRN_DESC],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT],[MAKER_ID_KT],[CREATE_DT_KT],[AUTH_STATUS_KT],[CHECKER_ID_KT],[APPROVE_DT_KT],[RECORD_STATUS],[IS_TRANSFER_EXTERNAL])
478
									VALUES (@l_TR_REQ_PAY_ENTRIES_D, @REQ_PAY_ID, @FUNCTION_TYPE, @TRN_TYPE, @REF_ID, '1', @DR_CR, @DR_CR_NAME, @ACCT, @ACCT_NAME, @BRANCH_ID, @DEP_ID_ENTRY, @3532_AMT, @CURRENCY, @EXC_RATE,
479
									@TRN_DATE, @PAY_AUTO_TRN_DESC_DETAIL, 'admin', @CREATE_DT, @AUTH_STATUS, 'admin', @APPROVE_DT, 'admin', @CREATE_DT_KT, @AUTH_STATUS_KT, 'admin', @APPROVE_DT_KT, @RECORD_STATUS, @IS_TRANSFER_EXTERNAL)
480
								END
481
								ELSE
482
								BEGIN
483
									print 'No TKCP'
484
									INSERT INTO [TR_REQ_PAY_ENTRIES] ([REQ_PAY_DT_ID],[REQ_PAY_ID],[FUNCTION_TYPE],[TRN_TYPE],[REF_ID],[ENTRY_PAIR],[DR_CR],[DR_CR_NAME],[ACCT],[ACCT_NAME],[BRANCH_ID],[DEP_ID], [AMT],[CURRENCY],[EXC_RATE],
485
									[TRN_DATE],[TRN_DESC],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT],[MAKER_ID_KT],[CREATE_DT_KT],[AUTH_STATUS_KT],[CHECKER_ID_KT],[APPROVE_DT_KT],[RECORD_STATUS],[IS_TRANSFER_EXTERNAL])
486
									VALUES (@l_TR_REQ_PAY_ENTRIES_D, @REQ_PAY_ID, @FUNCTION_TYPE, @TRN_TYPE, @REF_ID, '1', @DR_CR, @DR_CR_NAME, @ACCT, @ACCT_NAME, @BRANCH_ID, @DEP_ID_ENTRY, @DEBIT_AMT_1, @CURRENCY, @EXC_RATE,
487
									@TRN_DATE, @PAY_AUTO_TRN_DESC_DETAIL, 'admin', @CREATE_DT, @AUTH_STATUS, 'admin', @APPROVE_DT, 'admin', @CREATE_DT_KT, @AUTH_STATUS_KT, 'admin', @APPROVE_DT_KT, @RECORD_STATUS, @IS_TRANSFER_EXTERNAL)
488
								END
489
							END
490
							ELSE
491
							BEGIN
492
								print 'Co TKTT'
493
								INSERT INTO [TR_REQ_PAY_ENTRIES] ([REQ_PAY_DT_ID],[REQ_PAY_ID],[FUNCTION_TYPE],[TRN_TYPE],[REF_ID],[ENTRY_PAIR],[DR_CR],[DR_CR_NAME],[ACCT],[ACCT_NAME],[BRANCH_ID],[DEP_ID], [AMT],[CURRENCY],[EXC_RATE],
494
								[TRN_DATE],[TRN_DESC],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT],[MAKER_ID_KT],[CREATE_DT_KT],[AUTH_STATUS_KT],[CHECKER_ID_KT],[APPROVE_DT_KT],[RECORD_STATUS],[IS_TRANSFER_EXTERNAL])
495
								VALUES (@l_TR_REQ_PAY_ENTRIES_D, @REQ_PAY_ID, @FUNCTION_TYPE, @TRN_TYPE, @REF_ID, '1', @DR_CR, @DR_CR_NAME, @ACCT, @ACCT_NAME, @BRANCH_ID, @DEP_ID_ENTRY, @amount, @CURRENCY, @EXC_RATE,
496
								@TRN_DATE, @PAY_AUTO_TRN_DESC_DETAIL, 'admin', @CREATE_DT, @AUTH_STATUS, 'admin', @APPROVE_DT, 'admin', @CREATE_DT_KT, @AUTH_STATUS_KT, 'admin', @APPROVE_DT_KT, @RECORD_STATUS, @IS_TRANSFER_EXTERNAL)
497
							END
498

    
499
							
500
						IF @@error<>0 GOTO ABORT;
501
						FETCH NEXT FROM cursorEntries INTO @REQ_PAY_AUTO_ID, @FUNCTION_TYPE, @TRN_TYPE, @REF_ID, @ENTRY_PAIR, @DR_CR, @DR_CR_NAME, @ACCT, @ACCT_NAME, @BRANCH_ID, @DEP_ID_ENTRY, @AMT, @CURRENCY, @EXC_RATE,
502
						@TRN_DATE, @TRN_DESC, @MAKER_ID, @CREATE_DT, @AUTH_STATUS, @CHECKER_ID, @APPROVE_DT, @MAKER_ID_KT, @CREATE_DT_KT, @AUTH_STATUS_KT, @CHECKER_ID_KT, @APPROVE_DT_KT, @RECORD_STATUS, @IS_TRANSFER_EXTERNAL
503
						END
504
						CLOSE cursorEntries
505
						DEALLOCATE cursorEntries
506
						--- BAN BUT TOAN VAO CORE
507
						EXEC [dbo].[PAY_ENTRIES_POST_SetApp] @REQ_PAY_ID,'admin','admin', @RES OUT
508
					END
509
				END
510
				-- KHONG THUE
511
				ELSE	
512
				BEGIN
513
					IF(EXISTS(SELECT * FROM TR_REQ_PAY_AUTO_BUDGET_ALLOCATION WHERE REQ_PAY_AUTO_ID = @REQ_PAY_AUTO_ID))
514
					BEGIN
515
						PRINT 'KHONG THUE, CO PHAN CHIA'
516
						IF(EXISTS(SELECT * FROM TR_REQ_PAY_AUTO_BUDGET_ALLOCATION WHERE REQ_PAY_AUTO_ID = @REQ_PAY_AUTO_ID AND TYPE_BUDGET_ALLOCAITON = 'PERCENT'))
517
						BEGIN
518
							PRINT 'KHONG THUE, CO PHAN CHIA, PHAN CHIA THEO TY LE'
519
						-- CREATE CURSOR CÁC ĐẦU CÓ
520
							DECLARE cursorEntries_C CURSOR LOCAL FOR 
521
							SELECT REQ_PAY_AUTO_ID, ENTRY_PAIR
522
							FROM TR_REQ_PAY_AUTO_ENTRIES
523
							WHERE REQ_PAY_AUTO_ID = @REQ_PAY_AUTO_ID AND DR_CR = 'C'
524

    
525
							Open cursorEntries_C
526
							FETCH NEXT FROM cursorEntries_C INTO @REQ_PAY_AUTO_ID, @ENTRY_PAIR
527
							WHILE @@FETCH_STATUS = 0
528
							BEGIN
529
							-- BEGIN CHẠY TỪNG CẶP BÚT TOÁN
530
								DECLARE cursorEntries CURSOR LOCAL FOR 
531
								SELECT REQ_PAY_AUTO_ID, FUNCTION_TYPE, TRN_TYPE, REF_ID, ENTRY_PAIR, DR_CR, DR_CR_NAME, ACCT, ACCT_NAME, BRANCH_ID, DEP_ID, AMT, CURRENCY, EXC_RATE,
532
								TRN_DATE, TRN_DESC, MAKER_ID, CREATE_DT, AUTH_STATUS, CHECKER_ID, APPROVE_DT, MAKER_ID_KT, CREATE_DT_KT, AUTH_STATUS_KT, CHECKER_ID_KT, APPROVE_DT_KT, RECORD_STATUS,
533
								IS_TRANSFER_EXTERNAL, TYPE_BUDGET_ALLOCAITON, PERCENT_BUDGET_ALLOCAITON, AMT_BUDGET_ALLOCAITON
534
								FROM TR_REQ_PAY_AUTO_ENTRIES
535
								WHERE REQ_PAY_AUTO_ID = @REQ_PAY_AUTO_ID AND ENTRY_PAIR = @ENTRY_PAIR
536

    
537
								Open cursorEntries
538
								FETCH NEXT FROM cursorEntries INTO @REQ_PAY_AUTO_ID, @FUNCTION_TYPE, @TRN_TYPE, @REF_ID, @ENTRY_PAIR, @DR_CR, @DR_CR_NAME, @ACCT, @ACCT_NAME, @BRANCH_ID, @DEP_ID_ENTRY, @AMT, @CURRENCY, @EXC_RATE,
539
								@TRN_DATE, @TRN_DESC, @MAKER_ID, @CREATE_DT, @AUTH_STATUS, @CHECKER_ID, @APPROVE_DT, @MAKER_ID_KT, @CREATE_DT_KT, @AUTH_STATUS_KT, @CHECKER_ID_KT, @APPROVE_DT_KT, @RECORD_STATUS, 
540
								@IS_TRANSFER_EXTERNAL, @TYPE_BUDGET_ALLOCAITON_ENTRIES, @PERCENT_BUDGET_ALLOCAITON_ENTRIES, @AMT_BUDGET_ALLOCAITON_ENTRIES
541
								WHILE @@FETCH_STATUS = 0
542
								BEGIN
543

    
544
									EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ENTRIES', @l_TR_REQ_PAY_ENTRIES_D OUT;
545
									IF @l_TR_REQ_PAY_ENTRIES_D='' OR @l_TR_REQ_PAY_ENTRIES_D IS NULL GOTO ABORT;
546

    
547
									IF(@DR_CR = 'D')
548
									BEGIN
549
										IF(ISNULL(@TOTAL_PERCENT, 0) + ISNULL(@PERCENT_BUDGET_ALLOCAITON_ENTRIES, 0) = 100)
550
										BEGIN
551
											PRINT 'DONG NO CUOI'
552
											INSERT INTO [TR_REQ_PAY_ENTRIES] ([REQ_PAY_DT_ID],[REQ_PAY_ID],[FUNCTION_TYPE],[TRN_TYPE],[REF_ID],[ENTRY_PAIR],[DR_CR],[DR_CR_NAME],[ACCT],[ACCT_NAME],[BRANCH_ID],[DEP_ID], [AMT],[CURRENCY],[EXC_RATE],
553
											[TRN_DATE],[TRN_DESC],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT],[MAKER_ID_KT],[CREATE_DT_KT],[AUTH_STATUS_KT],[CHECKER_ID_KT],[APPROVE_DT_KT],[RECORD_STATUS],[IS_TRANSFER_EXTERNAL])
554
											VALUES (@l_TR_REQ_PAY_ENTRIES_D, @REQ_PAY_ID, @FUNCTION_TYPE, @TRN_TYPE, @REF_ID, @ENTRY_PAIR, @DR_CR, @DR_CR_NAME, @ACCT, @ACCT_NAME, @BRANCH_ID, @DEP_ID_ENTRY, @amount - @TOTAL_PERCENT_AMT, @CURRENCY, @EXC_RATE,
555
											@TRN_DATE, @PAY_AUTO_TRN_DESC_DETAIL, 'admin', @CREATE_DT, @AUTH_STATUS, 'admin', @APPROVE_DT, 'admin', @CREATE_DT_KT, @AUTH_STATUS_KT, 'admin', @APPROVE_DT_KT, @RECORD_STATUS, @IS_TRANSFER_EXTERNAL)
556
										END
557
										ELSE
558
										BEGIN
559
											PRINT 'CHUA PHAI DONG NO CUOI'
560

    
561
											INSERT INTO [TR_REQ_PAY_ENTRIES] ([REQ_PAY_DT_ID],[REQ_PAY_ID],[FUNCTION_TYPE],[TRN_TYPE],[REF_ID],[ENTRY_PAIR],[DR_CR],[DR_CR_NAME],[ACCT],[ACCT_NAME],[BRANCH_ID],[DEP_ID], [AMT],[CURRENCY],[EXC_RATE],
562
											[TRN_DATE],[TRN_DESC],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT],[MAKER_ID_KT],[CREATE_DT_KT],[AUTH_STATUS_KT],[CHECKER_ID_KT],[APPROVE_DT_KT],[RECORD_STATUS],[IS_TRANSFER_EXTERNAL])
563
											VALUES (@l_TR_REQ_PAY_ENTRIES_D, @REQ_PAY_ID, @FUNCTION_TYPE, @TRN_TYPE, @REF_ID, @ENTRY_PAIR, @DR_CR, @DR_CR_NAME, @ACCT, @ACCT_NAME, @BRANCH_ID, @DEP_ID_ENTRY, CONVERT(DECIMAL, @amount*@PERCENT_BUDGET_ALLOCAITON_ENTRIES/100), @CURRENCY, @EXC_RATE,
564
											@TRN_DATE, @PAY_AUTO_TRN_DESC_DETAIL, 'admin', @CREATE_DT, @AUTH_STATUS, 'admin', @APPROVE_DT, 'admin', @CREATE_DT_KT, @AUTH_STATUS_KT, 'admin', @APPROVE_DT_KT, @RECORD_STATUS, @IS_TRANSFER_EXTERNAL)
565
										END
566
									END
567
									ELSE
568
									BEGIN
569
										IF(ISNULL(@TOTAL_PERCENT, 0) + ISNULL(@PERCENT_BUDGET_ALLOCAITON_ENTRIES, 0) = 100)
570
										BEGIN
571
											PRINT 'DONG CO CUOI'
572
											INSERT INTO [TR_REQ_PAY_ENTRIES] ([REQ_PAY_DT_ID],[REQ_PAY_ID],[FUNCTION_TYPE],[TRN_TYPE],[REF_ID],[ENTRY_PAIR],[DR_CR],[DR_CR_NAME],[ACCT],[ACCT_NAME],[BRANCH_ID],[DEP_ID], [AMT],[CURRENCY],[EXC_RATE],
573
											[TRN_DATE],[TRN_DESC],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT],[MAKER_ID_KT],[CREATE_DT_KT],[AUTH_STATUS_KT],[CHECKER_ID_KT],[APPROVE_DT_KT],[RECORD_STATUS],[IS_TRANSFER_EXTERNAL])
574
											VALUES (@l_TR_REQ_PAY_ENTRIES_D, @REQ_PAY_ID, @FUNCTION_TYPE, @TRN_TYPE, @REF_ID, @ENTRY_PAIR, @DR_CR, @DR_CR_NAME, @ACCT, @ACCT_NAME, @BRANCH_ID, @DEP_ID_ENTRY, @amount - @TOTAL_PERCENT_AMT, @CURRENCY, @EXC_RATE,
575
											@TRN_DATE, @PAY_AUTO_TRN_DESC_DETAIL, 'admin', @CREATE_DT, @AUTH_STATUS, 'admin', @APPROVE_DT, 'admin', @CREATE_DT_KT, @AUTH_STATUS_KT, 'admin', @APPROVE_DT_KT, @RECORD_STATUS, @IS_TRANSFER_EXTERNAL)
576
										END
577
										ELSE
578
										BEGIN
579
											PRINT 'CHUA PHAI DONG CO CUOI'
580
											INSERT INTO [TR_REQ_PAY_ENTRIES] ([REQ_PAY_DT_ID],[REQ_PAY_ID],[FUNCTION_TYPE],[TRN_TYPE],[REF_ID],[ENTRY_PAIR],[DR_CR],[DR_CR_NAME],[ACCT],[ACCT_NAME],[BRANCH_ID],[DEP_ID], [AMT],[CURRENCY],[EXC_RATE],
581
											[TRN_DATE],[TRN_DESC],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT],[MAKER_ID_KT],[CREATE_DT_KT],[AUTH_STATUS_KT],[CHECKER_ID_KT],[APPROVE_DT_KT],[RECORD_STATUS],[IS_TRANSFER_EXTERNAL])
582
											VALUES (@l_TR_REQ_PAY_ENTRIES_D, @REQ_PAY_ID, @FUNCTION_TYPE, @TRN_TYPE, @REF_ID, @ENTRY_PAIR, @DR_CR, @DR_CR_NAME, @ACCT, @ACCT_NAME, @BRANCH_ID, @DEP_ID_ENTRY, CONVERT(DECIMAL, @amount*@PERCENT_BUDGET_ALLOCAITON_ENTRIES/100), @CURRENCY, @EXC_RATE,
583
											@TRN_DATE, @PAY_AUTO_TRN_DESC_DETAIL, 'admin', @CREATE_DT, @AUTH_STATUS, 'admin', @APPROVE_DT, 'admin', @CREATE_DT_KT, @AUTH_STATUS_KT, 'admin', @APPROVE_DT_KT, @RECORD_STATUS, @IS_TRANSFER_EXTERNAL)
584
										END
585
										
586
									END
587

    
588
								IF @@error<>0 GOTO ABORT;
589
								FETCH NEXT FROM cursorEntries INTO @REQ_PAY_AUTO_ID, @FUNCTION_TYPE, @TRN_TYPE, @REF_ID, @ENTRY_PAIR, @DR_CR, @DR_CR_NAME, @ACCT, @ACCT_NAME, @BRANCH_ID, @DEP_ID_ENTRY, @AMT, @CURRENCY, @EXC_RATE,
590
								@TRN_DATE, @TRN_DESC, @MAKER_ID, @CREATE_DT, @AUTH_STATUS, @CHECKER_ID, @APPROVE_DT, @MAKER_ID_KT, @CREATE_DT_KT, @AUTH_STATUS_KT, @CHECKER_ID_KT, @APPROVE_DT_KT, @RECORD_STATUS,
591
								@IS_TRANSFER_EXTERNAL, @TYPE_BUDGET_ALLOCAITON_ENTRIES, @PERCENT_BUDGET_ALLOCAITON_ENTRIES, @AMT_BUDGET_ALLOCAITON_ENTRIES
592
								END
593
								CLOSE cursorEntries
594
								DEALLOCATE cursorEntries
595
							-- END CHẠY TỪNG CẶP BÚT TOÁN
596
								
597
								SET @TOTAL_PERCENT = @TOTAL_PERCENT + @PERCENT_BUDGET_ALLOCAITON_ENTRIES;
598
								SET @TOTAL_PERCENT_AMT = @TOTAL_PERCENT_AMT + @amount*@PERCENT_BUDGET_ALLOCAITON_ENTRIES/100
599

    
600
							IF @@error<>0 GOTO ABORT;
601
							FETCH NEXT FROM cursorEntries_C INTO @REQ_PAY_AUTO_ID, @ENTRY_PAIR
602
							END
603
							CLOSE cursorEntries_C
604
							DEALLOCATE cursorEntries_C
605

    
606
							
607
							--- BAN BUT TOAN VAO CORE
608
							EXEC [dbo].[PAY_ENTRIES_POST_SetApp] @REQ_PAY_ID,'admin','admin', @RES OUT
609
						END
610
						ELSE
611
						BEGIN
612
							PRINT 'KHONG THUE, CO PHAN CHIA, PHAN CHIA THEO SO TIEN'
613
						END
614
					END
615
					ELSE
616
					BEGIN
617
						PRINT 'KHONG THUE, KHONG PHAN CHIA 1 NO - 1 CO'
618

    
619
						DECLARE cursorEntries CURSOR LOCAL FOR 
620
						SELECT REQ_PAY_AUTO_ID, FUNCTION_TYPE, TRN_TYPE, REF_ID, ENTRY_PAIR, DR_CR, DR_CR_NAME, ACCT, ACCT_NAME, BRANCH_ID, DEP_ID, AMT, CURRENCY, EXC_RATE,
621
						TRN_DATE, TRN_DESC, MAKER_ID, CREATE_DT, AUTH_STATUS, CHECKER_ID, APPROVE_DT, MAKER_ID_KT, CREATE_DT_KT, AUTH_STATUS_KT, CHECKER_ID_KT, APPROVE_DT_KT, RECORD_STATUS, IS_TRANSFER_EXTERNAL
622
						FROM TR_REQ_PAY_AUTO_ENTRIES
623
						WHERE REQ_PAY_AUTO_ID = @REQ_PAY_AUTO_ID
624
						Open cursorEntries
625
				
626
						FETCH NEXT FROM cursorEntries INTO @REQ_PAY_AUTO_ID, @FUNCTION_TYPE, @TRN_TYPE, @REF_ID, @ENTRY_PAIR, @DR_CR, @DR_CR_NAME, @ACCT, @ACCT_NAME, @BRANCH_ID, @DEP_ID_ENTRY, @AMT, @CURRENCY, @EXC_RATE,
627
						@TRN_DATE, @TRN_DESC, @MAKER_ID, @CREATE_DT, @AUTH_STATUS, @CHECKER_ID, @APPROVE_DT, @MAKER_ID_KT, @CREATE_DT_KT, @AUTH_STATUS_KT, @CHECKER_ID_KT, @APPROVE_DT_KT, @RECORD_STATUS, @IS_TRANSFER_EXTERNAL
628
						WHILE @@FETCH_STATUS = 0
629
						BEGIN
630
							DECLARE @l_TR_REQ_PAY_ENTRIES VARCHAR(15);
631
							EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ENTRIES', @l_TR_REQ_PAY_ENTRIES OUT;
632
							IF @l_TR_REQ_PAY_ENTRIES='' OR @l_TR_REQ_PAY_ENTRIES IS NULL GOTO ABORT;
633

    
634
							INSERT INTO [TR_REQ_PAY_ENTRIES] ([REQ_PAY_DT_ID],[REQ_PAY_ID],[FUNCTION_TYPE],[TRN_TYPE],[REF_ID],[ENTRY_PAIR],[DR_CR],[DR_CR_NAME],[ACCT],[ACCT_NAME],[BRANCH_ID],[DEP_ID], [AMT],[CURRENCY],[EXC_RATE],
635
							[TRN_DATE],[TRN_DESC],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT],[MAKER_ID_KT],[CREATE_DT_KT],[AUTH_STATUS_KT],[CHECKER_ID_KT],[APPROVE_DT_KT],[RECORD_STATUS],[IS_TRANSFER_EXTERNAL])
636
							VALUES (@l_TR_REQ_PAY_ENTRIES, @REQ_PAY_ID, @FUNCTION_TYPE, @TRN_TYPE, @REF_ID, @ENTRY_PAIR, @DR_CR, @DR_CR_NAME, @ACCT, @ACCT_NAME, @BRANCH_ID, @DEP_ID_ENTRY, CONVERT(DECIMAL(18,2), @amount), 'VND', @EXC_RATE,
637
							@TRN_DATE, @PAY_AUTO_TRN_DESC_DETAIL, 'admin', GETDATE(), @AUTH_STATUS, 'admin', @APPROVE_DT, 'admin', GETDATE(), 'A', 'admin', @APPROVE_DT_KT, '1', @IS_TRANSFER_EXTERNAL)
638

    
639
						IF @@error<>0 GOTO ABORT;
640
						FETCH NEXT FROM cursorEntries INTO @REQ_PAY_AUTO_ID, @FUNCTION_TYPE, @TRN_TYPE, @REF_ID, @ENTRY_PAIR, @DR_CR, @DR_CR_NAME, @ACCT, @ACCT_NAME, @BRANCH_ID, @DEP_ID_ENTRY, @AMT, @CURRENCY, @EXC_RATE,
641
						@TRN_DATE, @TRN_DESC, @MAKER_ID, @CREATE_DT, @AUTH_STATUS, @CHECKER_ID, @APPROVE_DT, @MAKER_ID_KT, @CREATE_DT_KT, @AUTH_STATUS_KT, @CHECKER_ID_KT, @APPROVE_DT_KT, @RECORD_STATUS, @IS_TRANSFER_EXTERNAL
642
						END
643
						CLOSE cursorEntries
644
						DEALLOCATE cursorEntries
645

    
646
						--- BAN BUT TOAN VAO CORE
647
						EXEC [dbo].[PAY_ENTRIES_POST_SetApp] @REQ_PAY_ID,'admin','admin', @RES OUT 
648
					END
649
				END
650
				
651
	-- END BUT TOAN CHI PHI
652

    
653

    
654

    
655
	-- BEGIN BUT TOAN HE THONG: BUT TOAN SO 0
656
			-- NỢ
657
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ENTRIES', @l_TR_REQ_PAY_ENTRIES_D OUT;
658
				INSERT INTO [TR_REQ_PAY_ENTRIES] ([REQ_PAY_DT_ID],[REQ_PAY_ID],[FUNCTION_TYPE],[TRN_TYPE],[REF_ID],
659
				[ENTRY_PAIR],[DR_CR],[DR_CR_NAME],
660
				[ACCT],[ACCT_NAME],[BRANCH_ID],[DEP_ID],
661
				[AMT],[CURRENCY],[EXC_RATE],[TRN_DATE],[TRN_DESC],
662
				[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT],[MAKER_ID_KT],[CREATE_DT_KT],[AUTH_STATUS_KT],[CHECKER_ID_KT],[APPROVE_DT_KT],[RECORD_STATUS],[IS_TRANSFER_EXTERNAL])
663
				VALUES(@l_TR_REQ_PAY_ENTRIES_D, @REQ_PAY_ID,NULL,'PAYMENT',NULL,
664
				'0', N'D', N'Nợ',
665
				@accountNo, @customerName, N'DV0001', N'',
666
				CONVERT(DECIMAL(18,2), @amount), N'VND', 1.00, GETDATE(), @transDesc,
667
				'admin',GETDATE(),'A','admin', GETDATE(),'admin',GETDATE(),'A','admin',GETDATE(),'1',NULL)
668

    
669
				DECLARE @l_PAY_ENTRIES_POST_D VARCHAR(15);
670
				EXEC SYS_CodeMasters_Gen 'PAY_ENTRIES_POST', @l_PAY_ENTRIES_POST_D OUT;
671
				INSERT INTO [PAY_ENTRIES_POST] ([ET_ID],[REF_NO],[TRN_ID],[REF_ID],[TRN_TYPE],
672
							[ENTRY_PAIR],[DO_BRN],[DRCR],[ACCT],[BRN_ID],[DEPT_ID],
673
							[AMT],[CURRENCY],[EXC_RATE],[EXP_TO_CORE],[TRN_DATE],[TRN_DESC],[MAKER_ID],[CHECKER_ID])
674
				VALUES	(@l_PAY_ENTRIES_POST_D, @coreXref, @REQ_PAY_ID, @l_TR_REQ_PAY_ENTRIES_D,'PAYMENT',
675
						'0',N'DV0001',N'D',
676
						@accountNo,N'DV0001',N'',
677
						CONVERT(DECIMAL(18,2), @amount),N'VND',1.00,N'1',GETDATE(),
678
						@transDesc,'admin','admin')
679

    
680
			-- CÓ
681
				DECLARE @l_TR_REQ_PAY_ENTRIES_C VARCHAR(15);
682
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ENTRIES', @l_TR_REQ_PAY_ENTRIES_C OUT;
683
				INSERT INTO [TR_REQ_PAY_ENTRIES] ([REQ_PAY_DT_ID],[REQ_PAY_ID],[FUNCTION_TYPE],[TRN_TYPE],[REF_ID],
684
				[ENTRY_PAIR],[DR_CR],[DR_CR_NAME],
685
				[ACCT],[ACCT_NAME],[BRANCH_ID],[DEP_ID],
686
				[AMT],[CURRENCY],[EXC_RATE],[TRN_DATE],[TRN_DESC],
687
				[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT],[MAKER_ID_KT],[CREATE_DT_KT],[AUTH_STATUS_KT],[CHECKER_ID_KT],[APPROVE_DT_KT],[RECORD_STATUS],[IS_TRANSFER_EXTERNAL])
688
				VALUES(@l_TR_REQ_PAY_ENTRIES_C, @REQ_PAY_ID,NULL,'PAYMENT',NULL,
689
				'0',N'C',N'Có',
690
				@partnerAccount, @partner,N'DV0001',N'',
691
				CONVERT(DECIMAL(18,2), @amount),N'VND',1.00,GETDATE(),@transDesc,
692
				'admin',GETDATE(),'A','admin', GETDATE(),'admin',GETDATE(),'A','admin',GETDATE(),'1',NULL)
693

    
694
				DECLARE @l_PAY_ENTRIES_POST_C VARCHAR(15);
695
				EXEC SYS_CodeMasters_Gen 'PAY_ENTRIES_POST', @l_PAY_ENTRIES_POST_C OUT;
696
				INSERT INTO [PAY_ENTRIES_POST] ([ET_ID],[REF_NO],[TRN_ID],[REF_ID],[TRN_TYPE],
697
							[ENTRY_PAIR],[DO_BRN],[DRCR],[ACCT],[BRN_ID],[DEPT_ID],
698
							[AMT],[CURRENCY],[EXC_RATE],[EXP_TO_CORE],[TRN_DATE],[TRN_DESC],[MAKER_ID],[CHECKER_ID])
699
				VALUES	(@l_PAY_ENTRIES_POST_C, @coreXref, @REQ_PAY_ID,@l_TR_REQ_PAY_ENTRIES_C,'PAYMENT',
700
						'0',N'DV0001',N'C',
701
						@partnerAccount,N'DV0001',N'',
702
						CONVERT(DECIMAL(18,2), @amount),N'VND',1.00,N'1',GETDATE(),
703
						@transDesc, 'admin', 'admin')
704
	-- END BUT TOAN HE THONG: BUT TOAN SO 0
705

    
706
			-- Mỗi lần chỉ quét 1 bill hợp lệ
707
			CLOSE XmlAutoRecurring;
708
			DEALLOCATE XmlAutoRecurring;
709
			COMMIT TRANSACTION
710
			SELECT '0' as Result, @list_req_payment LIST_REQ_PAYMENT, N'Quét bill thành công!' ErrorDesc
711
			RETURN '0'
712

    
713
		END
714
		
715
	IF @@error<>0 GOTO ABORT;
716
	FETCH NEXT FROM XmlAutoRecurring INTO @billRef, @billCode, @customerName, @amount, @accountNo, @accountType, @createdTime,
717
	@partner, @resultCode, @resultDesc, @transDesc, @coreXref, @partnerAccount, @month
718
	END;
719
	CLOSE XmlAutoRecurring;
720
	DEALLOCATE XmlAutoRecurring;
721
	
722
COMMIT TRANSACTION
723

    
724
SELECT '0' as Result, @list_req_payment LIST_REQ_PAYMENT, N'Quét bill thành công!' ErrorDesc
725
RETURN '0'
726

    
727
ABORT:
728
BEGIN
729
	ROLLBACK TRANSACTION
730
	SELECT '-1' as Result, @list_req_payment LIST_REQ_PAYMENT, N'Lỗi không xác định' ErrorDesc
731
	RETURN '-1'
732
End
733

    
734
GO
735

    
736
ALTER PROCEDURE [dbo].[TR_REQ_PAYMENT_AUTO_Search]
737
@p_REQ_PAY_AUTO_ID	VARCHAR(20)= NULL,
738
@p_REQ_PAY_AUTO_CODE	VARCHAR(20)= NULL,
739
@p_REQ_PAY_AUTO_NAME	VARCHAR(20)= NULL,
740
@p_REQ_PAY_AUTO_DT	VARCHAR(20)= NULL,
741
@p_REQ_PAY_AUTO_TYPE	VARCHAR(20)= NULL,
742
@p_REQ_PAY_AUTO_SERVICE_TYPE	VARCHAR(20)= NULL,
743
@p_REQ_PAY_AUTO_STATUS	VARCHAR(20)= NULL,
744
@p_REQ_PAY_AUTO_EFFECTIVE_DT	VARCHAR(20)= NULL,
745
@p_BRANCH_ID	VARCHAR(20)= NULL,
746
@p_BRANCH_CODE	VARCHAR(20)= NULL,
747
@p_BRANCH_NAME	VARCHAR(20)= NULL,
748
@p_DEP_ID	VARCHAR(20)= NULL,
749
@p_DEP_CODE	VARCHAR(20)= NULL,
750
@p_DEP_NAME	VARCHAR(20)= NULL,
751
@p_BRANCH_CREATE	VARCHAR(20)= NULL,
752
@p_BRANCH_CREATE_CODE	VARCHAR(20)= NULL,
753
@p_BRANCH_CREATE_NAME	VARCHAR(20)= NULL,
754
@p_TRANSFER_USER_RECEIVE	VARCHAR(20)= NULL,
755
@p_TRANSFER_USER_RECEIVE_NAME	VARCHAR(20)= NULL,
756
@p_CONFIRM_NOTE	VARCHAR(20)= NULL,
757
@p_CONTRACT_ID	VARCHAR(20)= NULL,
758
@p_CONTRACT_CODE	VARCHAR(20)= NULL,
759
@p_CONTRACT_NAME	VARCHAR(20)= NULL,
760
@p_PROCESS	VARCHAR(20)= NULL,
761
@p_TRANSFER_MAKER	VARCHAR(20)= NULL,
762
@p_TRANSFER_DT	VARCHAR(20)= NULL,
763
@p_MAKER_ID	VARCHAR(20)= NULL,
764
@p_MAKER_NAME	VARCHAR(20)= NULL,
765
@p_CREATE_DT	VARCHAR(20)= NULL,
766
@p_EDITOR_ID	VARCHAR(20)= NULL,
767
@p_EDITOR_NAME	VARCHAR(20)= NULL,
768
@p_EDIT_DT	VARCHAR(20)= NULL,
769
@p_CHECKER_ID	VARCHAR(20)= NULL,
770
@p_CHECKER_NAME	VARCHAR(20)= NULL,
771
@p_APPROVE_DT	VARCHAR(20)= NULL,
772
@p_AUTH_STATUS	VARCHAR(20)= NULL,
773
@p_MAKER_ID_KT	VARCHAR(20)= NULL,
774
@p_MAKER_KT_NAME	VARCHAR(20)= NULL,
775
@p_CREATE_DT_KT	VARCHAR(20)= NULL,
776
@p_CHECKER_ID_KT	VARCHAR(20)= NULL,
777
@p_CHECKER_KT_NAME	VARCHAR(20)= NULL,
778
@p_APPROVE_DT_KT	VARCHAR(20)= NULL,
779
@p_AUTH_STATUS_KT	VARCHAR(20)= NULL,
780
@p_AUTH_STATUS_KT_DESC	VARCHAR(20)= NULL,
781
@p_RECORD_STATUS	VARCHAR(20)= NULL,
782
@p_FRMDATE	VARCHAR(20)= NULL,
783
@p_TODATE	VARCHAR(20)= NULL,
784
@p_LEVEL	VARCHAR(20)= NULL,
785
@p_USER_LOGIN	VARCHAR(20)= NULL,
786
@p_IS_SEND_APPR	VARCHAR(20)= NULL,
787
@p_TYPE_SEARCH	VARCHAR(20)= NULL,
788
@p_BRANCH_LOGIN	VARCHAR(20)= NULL,
789
@p_EXEC_USER_KT	nvarchar(20)	= NULL,
790
@p_IS_UPDATE_KT VARCHAR(15) = NULL,
791
@p_BRANCH_MANAGE_ID	VARCHAR(20)= NULL,
792
@p_TOP INT = NULL
793
AS
794
/*
795
1. Trạng thái chờ duyệt ở DVKD: Sẽ kiếm thấy các phiếu chờ người đó xử lý, hoặc do người đó gửi phê duyệt
796
	- Do người này gửi duyệt(U-0)
797
	- Do người này đề nghị tạm dừng(A-6)
798
	- Do người này đề nghị khôi phục(A-9)
799
	- Do người này đề nghị hủy phiếu(A-15)
800

    
801
*/
802
BEGIN -- PAGING
803
-- BEGIN KHAI BÁO
804
	IF(@p_TYPE_SEARCH = 'HC')
805
	BEGIN
806
		SET @p_LEVEL = 'UNIT'
807
	END
808
	IF(ISNULL(@p_BRANCH_ID, '') = '')
809
	BEGIN
810
		SET @p_BRANCH_ID = @p_BRANCH_CREATE
811
	END
812
	IF(@p_BRANCH_LOGIN <> 'DV0001')
813
	BEGIN
814
		SET @p_DEP_ID = NULL
815
	END
816
-- ĐƠN VỊ YÊU CẦU
817
	DECLARE @tmp_branch TABLE(BRANCH_ID VARCHAR(15))
818
	DECLARE @tmp_dep TABLE(DEP_ID VARCHAR(15))
819
	DECLARE @DEP_ID VARCHAR(15) = NULL
820
	INSERT INTO @tmp_branch  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@p_BRANCH_ID)
821
	DECLARE @BRANCH_TYPE VARCHAR(15)
822
	SET @BRANCH_TYPE =(SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID=(SELECT BRANCH_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_AUTO_ID))
823

    
824
-- ĐƠN VỊ ĐĂNG NHẬP
825
	DECLARE @tmp_branch_login TABLE(BRANCH_ID VARCHAR(15))
826
	DECLARE @tmp_dep_login TABLE(DEP_ID VARCHAR(15))
827
	INSERT INTO @tmp_branch_login  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@p_BRANCH_LOGIN)
828
	INSERT INTO @tmp_branch_login VALUES (@p_BRANCH_LOGIN)
829
	INSERT INTO @tmp_branch_login	SELECT BRANCH_ID 
830
									FROM TL_SYS_ROLE_MAPPING 
831
									WHERE TLNAME =@P_USER_LOGIN 
832
									AND (CONVERT(DATE,GETDATE(),103) >= CONVERT(DATE,EFF_DATE, 103) OR EFF_DATE IS NULL OR EFF_DATE ='')
833
									AND (CONVERT(DATE, GETDATE(),103) <=CONVERT(DATE,EXP_DATE, 103) OR EXP_DATE IS NULL OR EXP_DATE ='') 
834
									AND RECORD_STATUS = '1'
835
	DECLARE @BRANCH_TYPE_LG VARCHAR(15)
836
	SET @BRANCH_TYPE_LG = (SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID=@p_BRANCH_LOGIN)
837
-- PHÒNG BAN ĐĂNG NHẬP
838
	DECLARE @DEP_ID_LG VARCHAR(15) = NULL
839
	SET @DEP_ID_LG =(SELECT SECUR_CODE FROM TL_USER WHERE TLNANME=@p_USER_LOGIN)
840
	INSERT INTO @tmp_dep_login VALUES (@DEP_ID_LG)
841
	INSERT INTO @tmp_dep_login SELECT DEP_ID FROM CM_DEPARTMENT WHERE FATHER_ID =@DEP_ID_LG
842
	INSERT INTO @tmp_dep_login	SELECT DEP_ID 
843
								FROM TL_SYS_ROLE_MAPPING 
844
								WHERE TLNAME =@P_USER_LOGIN 
845
								AND (CONVERT(DATE,GETDATE(),103) >= CONVERT(DATE,EFF_DATE, 103) OR EFF_DATE IS NULL OR EFF_DATE ='')
846
								AND (CONVERT(DATE, GETDATE(),103) <=CONVERT(DATE,EXP_DATE, 103) OR EXP_DATE IS NULL OR EXP_DATE ='') 
847
								AND RECORD_STATUS = '1'
848
-- ĐƠN VỊ ỦY QUYỀN KIÊM NHIỆM
849
DECLARE @tmp_branch_auth TABLE (BRANCH_ID VARCHAR(15))
850
INSERT INTO @tmp_branch_auth VALUES (@p_BRANCH_LOGIN)
851
INSERT INTO @tmp_branch_auth	SELECT BRANCH_ID 
852
								FROM TL_SYS_ROLE_MAPPING 
853
								WHERE TLNAME =@P_USER_LOGIN 
854
								AND (CONVERT(DATE,GETDATE(),103) >= CONVERT(DATE,EFF_DATE, 103) OR EFF_DATE IS NULL OR EFF_DATE ='')
855
								AND (CONVERT(DATE, GETDATE(),103) <=CONVERT(DATE,EXP_DATE, 103) OR EXP_DATE IS NULL OR EXP_DATE ='') 
856
								AND RECORD_STATUS = '1'
857
-- PHÒNG BAN ỦY QUYỀN KIÊM NHIỆM
858
DECLARE @tmp_dep_auth TABLE (DEP_ID VARCHAR(15))
859
INSERT INTO @tmp_dep_auth VALUES (@DEP_ID_LG)
860
INSERT INTO @tmp_dep_auth	SELECT DEP_ID 
861
							FROM TL_SYS_ROLE_MAPPING 
862
							WHERE TLNAME =@P_USER_LOGIN 
863
							AND (CONVERT(DATE,GETDATE(),103) >= CONVERT(DATE,EFF_DATE, 103) OR EFF_DATE IS NULL OR EFF_DATE ='')
864
							AND (CONVERT(DATE, GETDATE(),103) <=CONVERT(DATE,EXP_DATE, 103) OR EXP_DATE IS NULL OR EXP_DATE ='') 
865
							AND RECORD_STATUS = '1'
866
INSERT INTO @tmp_dep_auth SELECT DEP_ID FROM CM_DEPARTMENT WHERE FATHER_ID =@DEP_ID_LG
867

    
868
-- ROLE
869
	DECLARE @ROLE_ID VARCHAR(20)
870
	SET @ROLE_ID = (SELECT TOP 1 RoleName FROM TL_USER WHERE TLNANME=@p_USER_LOGIN)
871
	DECLARE @TABLE_ROLE TABLE (ROLE_AUTH VARCHAR(50))  
872
	INSERT INTO @TABLE_ROLE VALUES (@ROLE_ID)
873
	INSERT INTO @TABLE_ROLE SELECT ROLE_NEW 
874
							FROM TL_SYS_ROLE_MAPPING 
875
							WHERE ROLE_OLD =@ROLE_ID AND TLNAME =@P_USER_LOGIN  
876
							AND (CONVERT(DATE,GETDATE(),103) >= CONVERT(DATE,EFF_DATE, 103) OR EFF_DATE IS NULL OR EFF_DATE ='')
877
							AND (CONVERT(DATE, GETDATE(),103) <=CONVERT(DATE,EXP_DATE, 103) OR EXP_DATE IS NULL OR EXP_DATE ='') 
878
							AND RECORD_STATUS = '1'
879
	
880
-- NEU USER KHONG CHON TU NGAY THI TU NGAY BANG NGAY 1 1 HANG THANG 20211116
881
	DECLARE @DATE DATE
882
	IF ((@p_FRMDATE IS NULL OR @p_FRMDATE ='') AND ISNULL(@p_REQ_PAY_AUTO_ID,'')='' AND @p_AUTH_STATUS ='') -- MỤC ĐÍCH NẾU NHƯ XEM CHI TIẾT 1 PĐN THANH TOÁN DẠNG POPUP THÌ BỎ QUA ĐIỀU KIỆN NÀY, TỪ NGÀY VẪN LÀ NULL
883
	BEGIN
884
		SET @DATE = CONVERT(DATE,GETDATE(),103)
885
		SET @DATE = DATEADD(MONTH,-2,@DATE)
886
	END
887
	ELSE
888
	BEGIN
889
		SET @DATE = CONVERT(DATE,@p_FRMDATE,103)
890
	END
891
-- CHECK NGUOI DUYET
892
	DECLARE @IS_TDV VARCHAR(1) = 'N'
893
	IF	(		
894
				(	SELECT COUNT(*) 
895
					FROM @TABLE_ROLE A 
896
					WHERE A.ROLE_AUTH IN ('TPGD','GDDV','PGD','PTGD','TGD','HDQT','TP','PP','KTT','GDK','KSV','TC','NVTC','TPTC','PPGD')
897
				) = 0
898
		)
899
	BEGIN
900
		SET @IS_TDV = 'N'
901
	END
902
	ELSE
903
	BEGIN
904
		SET @IS_TDV = 'Y'
905
	END
906
-- END KHAI BÁO
907
	IF(@p_TYPE_SEARCH = 'HC')
908
	BEGIN
909
		IF(@p_TOP IS NULL OR @p_TOP=0)
910
		BEGIN
911
			IF(@DEP_ID_LG = 'DEP000000000022')
912
			BEGIN
913
	-- PAGING BEGIN
914
				SELECT A.*,
915
				--B.BRANCH_CODE, B.BRANCH_NAME,
916
				CASE	WHEN	(	SELECT TOP 1 BRANCH_ID 
917
									FROM TR_CONTRACT 
918
									WHERE CONTRACT_ID = A.CONTRACT_ID
919
								) <> 'DV0001'
920
								THEN  B.BRANCH_NAME + ISNULL	(	' - ' + (	SELECT TOP 1 BRANCH_NAME 
921
																						FROM CM_BRANCH 
922
																						WHERE BRANCH_ID =	(	SELECT TOP 1 BRANCH_ID 
923
																												FROM TR_CONTRACT 
924
																												WHERE CONTRACT_ID = A.CONTRACT_ID
925
																											)
926
																			),''
927
																)
928
						ELSE B.BRANCH_NAME 
929
				END BRANCH_NAME,
930
				C.DEP_CODE, C.DEP_NAME, 
931
				D.CONTRACT_CODE, D.[CONTRACT_NAME], 
932
				E.TLFullName AS MAKER_NAME, 
933
				F.TLFullName AS MAKER_NAME_KT, 
934
				G.TLFullName AS CHECKER_NAME_KT,
935
				H.CONTENT AS REQ_PAY_AUTO_STATUS_NAME,
936
				--I.CONTENT AS REQ_PAY_AUTO_TYPE_NAME,
937
				CASE 
938
					WHEN A.REQ_PAY_AUTO_TYPE = 'A' THEN N.CONTENT
939
					ELSE O.CONTENT
940
				END REQ_PAY_AUTO_TYPE_NAME,
941
				J.CONTENT AS AUTH_STATUS_NAME,
942
				K.CONTENT AS AUTH_STATUS_KT_NAME,
943
				L.TLFullName AS TRANSFER_USER_RECEIVE_NAME,
944
				M.BRANCH_CODE AS BRANCH_MANAGE_CODE, M.BRANCH_NAME AS BRANCH_MANAGE_NAME
945
		-- SELECT END
946
				FROM TR_REQ_PAYMENT_AUTO A
947
				LEFT JOIN CM_BRANCH B ON A.BRANCH_ID = B.BRANCH_ID
948
				LEFT JOIN CM_DEPARTMENT C ON A.DEP_ID = C.DEP_ID
949
				LEFT JOIN TR_CONTRACT D ON A.CONTRACT_ID = D.CONTRACT_ID
950
				LEFT JOIN TL_USER E ON A.MAKER_ID = E.TLNANME
951
				LEFT JOIN TL_USER F ON A.MAKER_ID_KT = F.TLNANME
952
				LEFT JOIN TL_USER G ON A.CHECKER_ID_KT = G.TLNANME
953
				LEFT JOIN CM_ALLCODE H ON A.REQ_PAY_AUTO_STATUS = H.CDVAL AND H.CDNAME = 'PAY_AUTO_STATUS' AND H.CDTYPE = 'REQ_AUTO'
954
				LEFT JOIN CM_ALLCODE I ON A.REQ_PAY_AUTO_TYPE = I.CDVAL AND I.CDNAME = 'PAY_TYPE_AUTO' AND I.CDTYPE = 'REQ_AUTO'
955
				LEFT JOIN CM_ALLCODE J ON A.AUTH_STATUS = J.CDVAL AND J.CDNAME = 'AUTH_STATUS' AND J.CDTYPE = 'TR_REQ_PAYMENT'
956
				LEFT JOIN CM_ALLCODE K ON A.AUTH_STATUS_KT = K.CDVAL AND K.CDNAME = 'AUTH_STATUS_KT' AND K.CDTYPE = 'TR_REQ_PAYMENT'
957
				LEFT JOIN TL_USER L ON A.TRANSFER_USER_RECEIVE = L.TLNANME
958
				LEFT JOIN CM_BRANCH M ON A.BRANCH_MANAGE_ID = M.BRANCH_ID
959
				LEFT JOIN CM_ALLCODE N ON A.REQ_PAY_AUTO_SERVICE_TYPE = N.CDVAL AND N.CDNAME = 'PAY_SER_AUTO_TS' AND N.CDTYPE = 'REQ_AUTO'
960
				LEFT JOIN CM_ALLCODE O ON A.REQ_PAY_AUTO_SERVICE_TYPE = O.CDVAL AND O.CDNAME = 'PAY_SER_AUTO' AND O.CDTYPE = 'REQ_AUTO'
961
				WHERE 1=1 
962
				-- BEGIN FILTER
963
				AND	(	A.REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID OR ISNULL(@p_REQ_PAY_AUTO_ID, '') = '')
964
				AND	(	A.REQ_PAY_AUTO_CODE LIKE '%' + @p_REQ_PAY_AUTO_CODE +'%' OR ISNULL(@p_REQ_PAY_AUTO_CODE, '') = '')
965
				--AND	(	A.AUTH_STATUS = @p_AUTH_STATUS OR ISNULL(@p_AUTH_STATUS, '') = '')
966
				AND (	(@p_AUTH_STATUS = A.AUTH_STATUS)	-- dùng cho: lưu nháp, phiếu bị hủy
967
					OR	(@p_AUTH_STATUS = 'W' AND A.PROCESS IN ('0', '6', '9', '15')) -- chờ cấp trung gian xác nhận
968
					OR	(@p_AUTH_STATUS = 'G' AND A.PROCESS IN ('1', '7', '10', '16')) -- cấp trung gian xác nhận
969
					OR	(@p_AUTH_STATUS = 'U' AND A.PROCESS IN ('0', '6', '9', '15')) -- chờ duyệt CTG
970
					OR	(@p_AUTH_STATUS = 'U' AND A.PROCESS IN ('0', '1', '6', '7', '9', '10', '15', '16')) -- chờ duyệt TDV
971
					OR	(@p_AUTH_STATUS = 'A' AND A.PROCESS IN ('1', '2', '7', '8', '10', '11', '16', '17')) -- đã duyệt
972
					OR	(@p_AUTH_STATUS = 'R' AND ISNULL(A.PROCESS, '') IN ('', '7.1', '8.1', '10.1', '11.1', '14.1', '16.1', '17.1', '20.1') AND ISNULL(A.AUTH_STATUS, '') <> 'E') -- từ chối
973
					OR (ISNULL(@p_AUTH_STATUS, '') = '')
974
					)
975
				AND	(	A.REQ_PAY_AUTO_TYPE = @p_REQ_PAY_AUTO_TYPE OR ISNULL(@p_REQ_PAY_AUTO_TYPE, '') = '')
976
				AND	(	A.AUTH_STATUS_KT = @p_AUTH_STATUS_KT OR ISNULL(@p_AUTH_STATUS_KT, '') = '')
977
				AND	(	M.BRANCH_ID = @p_BRANCH_MANAGE_ID OR ISNULL(@p_BRANCH_MANAGE_ID, '') = '')
978
				AND	(	A.CONTRACT_ID = @p_CONTRACT_ID OR ISNULL(@p_CONTRACT_ID, '') = '')
979
				AND	(	A.REQ_PAY_AUTO_STATUS = @p_REQ_PAY_AUTO_STATUS OR ISNULL(@p_REQ_PAY_AUTO_STATUS, '') = '')
980
				AND	(	CONVERT(DATE, A.CREATE_DT) >= CONVERT(DATE, @p_FRMDATE, 103) OR ISNULL(@p_FRMDATE, '')= '' OR A.CREATE_DT IS NULL)
981
				AND	(	CONVERT(DATE, A.CREATE_DT) <= CONVERT(DATE, @p_TODATE, 103) OR ISNULL(@p_TODATE, '')= '' OR A.CREATE_DT IS NULL)
982
				AND	(	A.BRANCH_ID = @p_BRANCH_ID 
983
						OR ISNULL(@p_BRANCH_ID, '') = ''
984
						OR A.BRANCH_ID IN	(	SELECT BRANCH_ID 
985
												FROM @tmp_branch
986
											)
987
					)
988
				AND	(	A.DEP_ID = @p_DEP_ID 
989
						OR ISNULL(@p_DEP_ID, '') = ''
990
					)
991
				AND	(	A.MAKER_ID = @p_MAKER_ID OR ISNULL(@p_MAKER_ID, '') = '')
992
				AND	(	A.MAKER_ID_KT = @p_MAKER_ID_KT OR ISNULL(@p_MAKER_ID_KT, '') = '')
993
				-- END FILTER
994
			ORDER BY A.CREATE_DT DESC
995
	-- PAGING END
996
			END
997
			ELSE
998
			BEGIN-- DVKD Search
999
	-- PAGING BEGIN
1000
				SELECT A.*,
1001
				--B.BRANCH_CODE, B.BRANCH_NAME,
1002
				CASE	WHEN	(	SELECT TOP 1 BRANCH_ID 
1003
									FROM TR_CONTRACT 
1004
									WHERE CONTRACT_ID = A.CONTRACT_ID
1005
								) <> 'DV0001'
1006
								THEN  B.BRANCH_NAME + ISNULL	(	' - ' + (	SELECT TOP 1 BRANCH_NAME 
1007
																						FROM CM_BRANCH 
1008
																						WHERE BRANCH_ID =	(	SELECT TOP 1 BRANCH_ID 
1009
																												FROM TR_CONTRACT 
1010
																												WHERE CONTRACT_ID = A.CONTRACT_ID
1011
																											)
1012
																			),''
1013
																)
1014
						ELSE B.BRANCH_NAME 
1015
				END BRANCH_NAME,
1016
				C.DEP_CODE, C.DEP_NAME, 
1017
				D.CONTRACT_CODE, D.[CONTRACT_NAME], 
1018
				E.TLFullName AS MAKER_NAME, 
1019
				F.TLFullName AS MAKER_NAME_KT, 
1020
				G.TLFullName AS CHECKER_NAME_KT,
1021
				H.CONTENT AS REQ_PAY_AUTO_STATUS_NAME,
1022
				--I.CONTENT AS REQ_PAY_AUTO_TYPE_NAME,
1023
				CASE 
1024
					WHEN A.REQ_PAY_AUTO_TYPE = 'A' THEN N.CONTENT
1025
					ELSE O.CONTENT
1026
				END REQ_PAY_AUTO_TYPE_NAME,
1027
				J.CONTENT AS AUTH_STATUS_NAME,
1028
				K.CONTENT AS AUTH_STATUS_KT_NAME,
1029
				L.TLFullName AS TRANSFER_USER_RECEIVE_NAME,
1030
				M.BRANCH_CODE AS BRANCH_MANAGE_CODE, M.BRANCH_NAME AS BRANCH_MANAGE_NAME
1031
		-- SELECT END
1032
				FROM TR_REQ_PAYMENT_AUTO A
1033
				LEFT JOIN CM_BRANCH B ON A.BRANCH_ID = B.BRANCH_ID
1034
				LEFT JOIN CM_DEPARTMENT C ON A.DEP_ID = C.DEP_ID
1035
				LEFT JOIN TR_CONTRACT D ON A.CONTRACT_ID = D.CONTRACT_ID
1036
				LEFT JOIN TL_USER E ON A.MAKER_ID = E.TLNANME
1037
				LEFT JOIN TL_USER F ON A.MAKER_ID_KT = F.TLNANME
1038
				LEFT JOIN TL_USER G ON A.CHECKER_ID_KT = G.TLNANME
1039
				LEFT JOIN CM_ALLCODE H ON A.REQ_PAY_AUTO_STATUS = H.CDVAL AND H.CDNAME = 'PAY_AUTO_STATUS' AND H.CDTYPE = 'REQ_AUTO'
1040
				LEFT JOIN CM_ALLCODE I ON A.REQ_PAY_AUTO_TYPE = I.CDVAL AND I.CDNAME = 'PAY_TYPE_AUTO' AND I.CDTYPE = 'REQ_AUTO'
1041
				LEFT JOIN CM_ALLCODE J ON A.AUTH_STATUS = J.CDVAL AND J.CDNAME = 'AUTH_STATUS' AND J.CDTYPE = 'TR_REQ_PAYMENT'
1042
				LEFT JOIN CM_ALLCODE K ON A.AUTH_STATUS_KT = K.CDVAL AND K.CDNAME = 'AUTH_STATUS_KT' AND K.CDTYPE = 'TR_REQ_PAYMENT'
1043
				LEFT JOIN TL_USER L ON A.TRANSFER_USER_RECEIVE = L.TLNANME
1044
				LEFT JOIN CM_BRANCH M ON A.BRANCH_MANAGE_ID = M.BRANCH_ID
1045
				LEFT JOIN CM_ALLCODE N ON A.REQ_PAY_AUTO_SERVICE_TYPE = N.CDVAL AND N.CDNAME = 'PAY_SER_AUTO_TS' AND N.CDTYPE = 'REQ_AUTO'
1046
				LEFT JOIN CM_ALLCODE O ON A.REQ_PAY_AUTO_SERVICE_TYPE = O.CDVAL AND O.CDNAME = 'PAY_SER_AUTO' AND O.CDTYPE = 'REQ_AUTO'
1047
				WHERE 1=1 
1048
				-- BEGIN FILTER
1049
				AND	(	A.REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID OR ISNULL(@p_REQ_PAY_AUTO_ID, '') = '')
1050
				AND	(	A.REQ_PAY_AUTO_CODE LIKE '%' + @p_REQ_PAY_AUTO_CODE +'%' OR ISNULL(@p_REQ_PAY_AUTO_CODE, '') = '')
1051
				--AND	(	A.AUTH_STATUS = @p_AUTH_STATUS OR ISNULL(@p_AUTH_STATUS, '') = '')
1052
				AND (	(@p_AUTH_STATUS = A.AUTH_STATUS)	-- dùng cho: lưu nháp, phiếu bị hủy
1053
					OR	(@p_AUTH_STATUS = 'W' AND A.PROCESS IN ('0', '6', '9', '15')) -- chờ cấp trung gian xác nhận
1054
					OR	(@p_AUTH_STATUS = 'G' AND A.PROCESS IN ('1', '7', '10', '16')) -- cấp trung gian xác nhận
1055
					OR	(@p_AUTH_STATUS = 'U' AND @IS_TDV = 'N' AND A.PROCESS IN ('0', '6', '9', '15')) -- chờ duyệt CTG
1056
					OR	(@p_AUTH_STATUS = 'U' AND @IS_TDV = 'Y' AND A.PROCESS IN ('0', '1', '6', '7', '9', '10', '15', '16')) -- chờ duyệt TDV
1057
					OR	(@p_AUTH_STATUS = 'A' AND A.PROCESS IN ('1', '2', '7', '8', '10', '11', '16', '17')) -- đã duyệt
1058
					OR	(@p_AUTH_STATUS = 'R' AND ISNULL(A.PROCESS, '') IN ('', '7.1', '8.1', '10.1', '11.1', '14.1', '16.1', '17.1', '20.1') AND ISNULL(A.AUTH_STATUS, '') <> 'E') -- từ chối
1059
					OR (ISNULL(@p_AUTH_STATUS, '') = '')
1060
					)
1061
				AND	(	A.REQ_PAY_AUTO_TYPE = @p_REQ_PAY_AUTO_TYPE OR ISNULL(@p_REQ_PAY_AUTO_TYPE, '') = '')
1062
				AND	(	A.AUTH_STATUS_KT = @p_AUTH_STATUS_KT OR ISNULL(@p_AUTH_STATUS_KT, '') = '')
1063
				AND	(	M.BRANCH_ID = @p_BRANCH_MANAGE_ID OR ISNULL(@p_BRANCH_MANAGE_ID, '') = '')
1064
				AND	(	A.CONTRACT_ID = @p_CONTRACT_ID OR ISNULL(@p_CONTRACT_ID, '') = '')
1065
				AND	(	A.REQ_PAY_AUTO_STATUS = @p_REQ_PAY_AUTO_STATUS OR ISNULL(@p_REQ_PAY_AUTO_STATUS, '') = '')
1066
				AND(	CONVERT(DATE, A.CREATE_DT) >= CONVERT(DATE, @p_FRMDATE, 103) OR ISNULL(@p_FRMDATE, '')= '' OR A.CREATE_DT IS NULL)
1067
				AND(	CONVERT(DATE, A.CREATE_DT) <= CONVERT(DATE, @p_TODATE, 103) OR ISNULL(@p_TODATE, '')= '' OR A.CREATE_DT IS NULL)
1068
				AND	(	A.MAKER_ID = @p_MAKER_ID OR ISNULL(@p_MAKER_ID, '') = '')
1069
				AND	(	A.MAKER_ID_KT = @p_MAKER_ID_KT OR ISNULL(@p_MAKER_ID_KT, '') = '')
1070
				-- END FILTER
1071
				-- BEGIN VALIDATE FLOW
1072
				AND	(
1073
						(
1074
								(	A.MAKER_ID = @p_USER_LOGIN)
1075
						)-- NGUOI TAO
1076
					OR	(
1077
							(	A.TRANSFER_USER_RECEIVE = @p_USER_LOGIN AND A.AUTH_STATUS IN ('U', 'R', 'A', 'N') AND PROCESS IN ('0', '6', '9', '15') )
1078
						)-- NGUOI DUYET TRUNG GIAN
1079
					OR	(
1080
							(	A.AUTH_STATUS IN ('R', 'A', 'N') AND @IS_TDV = 'Y')
1081
						OR	(	A.AUTH_STATUS = 'U' AND ISNULL(A.TRANSFER_USER_RECEIVE, '') = '' AND @IS_TDV = 'Y')
1082
						OR	(	A.AUTH_STATUS = 'U' AND ISNULL(A.TRANSFER_USER_RECEIVE, '') <> '' AND ISNULL(A.PROCESS, '') = '1' AND @IS_TDV = 'Y')
1083
						)-- TRUONG DON VI
1084
					OR	(
1085
							A.AUTH_STATUS = 'A'
1086
							
1087
						)-- VA NHUNG PHIEU DA DUYET
1088
					)
1089
				AND	(	(	@p_LEVEL='ALL' 
1090
							AND	(	A.BRANCH_ID IN	(	SELECT BRANCH_ID 
1091
														FROM @tmp_branch
1092
													) -- PYC cua don vi minh va cac don vi con
1093
									OR A.BRANCH_ID IN (SELECT * FROM @tmp_branch_auth) -- PYC cua don vi kiem nhiem
1094
								)
1095
						)
1096
						OR	(	@p_LEVEL='UNIT' 
1097
								AND	(	A.BRANCH_ID = @p_BRANCH_ID	-- PYC cua don vi minh
1098
										OR A.BRANCH_ID IN (SELECT * FROM @tmp_branch_auth) -- PYC cua don vi kiem nhiem
1099
									)
1100
							)
1101
					)
1102
				AND	(	A.DEP_ID = @p_DEP_ID 
1103
						OR ISNULL(@p_DEP_ID, '') = ''
1104
					)
1105
							
1106
				AND	(
1107
						A.DEP_ID IN	(
1108
										SELECT * 
1109
										FROM @tmp_dep_auth
1110
									)
1111
						OR A.BRANCH_ID <> 'DV0001'
1112
					)
1113
				-- END VALIDATE FLOW
1114
			ORDER BY A.CREATE_DT DESC
1115
	-- PAGING END
1116
			END
1117
		END;
1118
		ELSE -- TOP IS NOT NULL
1119
		BEGIN
1120
			IF(@DEP_ID_LG = 'DEP000000000022')
1121
			BEGIN
1122
	-- PAGING BEGIN
1123
				SELECT A.*,
1124
				--B.BRANCH_CODE, B.BRANCH_NAME,
1125
				CASE	WHEN	(	SELECT TOP 1 BRANCH_ID 
1126
									FROM TR_CONTRACT 
1127
									WHERE CONTRACT_ID = A.CONTRACT_ID
1128
								) <> 'DV0001'
1129
								THEN  B.BRANCH_NAME + ISNULL	(	' - ' + (	SELECT TOP 1 BRANCH_NAME 
1130
																						FROM CM_BRANCH 
1131
																						WHERE BRANCH_ID =	(	SELECT TOP 1 BRANCH_ID 
1132
																												FROM TR_CONTRACT 
1133
																												WHERE CONTRACT_ID = A.CONTRACT_ID
1134
																											)
1135
																			),''
1136
																)
1137
						ELSE B.BRANCH_NAME 
1138
				END BRANCH_NAME,
1139
				C.DEP_CODE, C.DEP_NAME, 
1140
				D.CONTRACT_CODE, D.[CONTRACT_NAME], 
1141
				E.TLFullName AS MAKER_NAME, 
1142
				F.TLFullName AS MAKER_NAME_KT, 
1143
				G.TLFullName AS CHECKER_NAME_KT,
1144
				H.CONTENT AS REQ_PAY_AUTO_STATUS_NAME,
1145
				--I.CONTENT AS REQ_PAY_AUTO_TYPE_NAME,
1146
				CASE 
1147
					WHEN A.REQ_PAY_AUTO_TYPE = 'A' THEN N.CONTENT
1148
					ELSE O.CONTENT
1149
				END REQ_PAY_AUTO_TYPE_NAME,
1150
				J.CONTENT AS AUTH_STATUS_NAME,
1151
				K.CONTENT AS AUTH_STATUS_KT_NAME,
1152
				L.TLFullName AS TRANSFER_USER_RECEIVE_NAME,
1153
				M.BRANCH_CODE AS BRANCH_MANAGE_CODE, M.BRANCH_NAME AS BRANCH_MANAGE_NAME
1154
		-- SELECT END
1155
				FROM TR_REQ_PAYMENT_AUTO A
1156
				LEFT JOIN CM_BRANCH B ON A.BRANCH_ID = B.BRANCH_ID
1157
				LEFT JOIN CM_DEPARTMENT C ON A.DEP_ID = C.DEP_ID
1158
				LEFT JOIN TR_CONTRACT D ON A.CONTRACT_ID = D.CONTRACT_ID
1159
				LEFT JOIN TL_USER E ON A.MAKER_ID = E.TLNANME
1160
				LEFT JOIN TL_USER F ON A.MAKER_ID_KT = F.TLNANME
1161
				LEFT JOIN TL_USER G ON A.CHECKER_ID_KT = G.TLNANME
1162
				LEFT JOIN CM_ALLCODE H ON A.REQ_PAY_AUTO_STATUS = H.CDVAL AND H.CDNAME = 'PAY_AUTO_STATUS' AND H.CDTYPE = 'REQ_AUTO'
1163
				LEFT JOIN CM_ALLCODE I ON A.REQ_PAY_AUTO_TYPE = I.CDVAL AND I.CDNAME = 'PAY_TYPE_AUTO' AND I.CDTYPE = 'REQ_AUTO'
1164
				LEFT JOIN CM_ALLCODE J ON A.AUTH_STATUS = J.CDVAL AND J.CDNAME = 'AUTH_STATUS' AND J.CDTYPE = 'TR_REQ_PAYMENT'
1165
				LEFT JOIN CM_ALLCODE K ON A.AUTH_STATUS_KT = K.CDVAL AND K.CDNAME = 'AUTH_STATUS_KT' AND K.CDTYPE = 'TR_REQ_PAYMENT'
1166
				LEFT JOIN TL_USER L ON A.TRANSFER_USER_RECEIVE = L.TLNANME
1167
				LEFT JOIN CM_BRANCH M ON A.BRANCH_MANAGE_ID = M.BRANCH_ID
1168
				LEFT JOIN CM_ALLCODE N ON A.REQ_PAY_AUTO_SERVICE_TYPE = N.CDVAL AND N.CDNAME = 'PAY_SER_AUTO_TS' AND N.CDTYPE = 'REQ_AUTO'
1169
				LEFT JOIN CM_ALLCODE O ON A.REQ_PAY_AUTO_SERVICE_TYPE = O.CDVAL AND O.CDNAME = 'PAY_SER_AUTO' AND O.CDTYPE = 'REQ_AUTO'
1170
				WHERE 1=1 
1171
				-- BEGIN FILTER
1172
				AND	(	A.REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID OR ISNULL(@p_REQ_PAY_AUTO_ID, '') = '')
1173
				AND	(	A.REQ_PAY_AUTO_CODE LIKE '%' + @p_REQ_PAY_AUTO_CODE +'%' OR ISNULL(@p_REQ_PAY_AUTO_CODE, '') = '')
1174
				--AND	(	A.AUTH_STATUS = @p_AUTH_STATUS OR ISNULL(@p_AUTH_STATUS, '') = '')
1175
				AND (	(@p_AUTH_STATUS = A.AUTH_STATUS)	-- dùng cho: lưu nháp, phiếu bị hủy
1176
					OR	(@p_AUTH_STATUS = 'W' AND A.PROCESS IN ('0', '6', '9', '15')) -- chờ cấp trung gian xác nhận
1177
					OR	(@p_AUTH_STATUS = 'G' AND A.PROCESS IN ('1', '7', '10', '16')) -- cấp trung gian xác nhận
1178
					OR	(@p_AUTH_STATUS = 'U' AND A.PROCESS IN ('0', '6', '9', '15')) -- chờ duyệt CTG
1179
					OR	(@p_AUTH_STATUS = 'U' AND A.PROCESS IN ('0', '1', '6', '7', '9', '10', '15', '16')) -- chờ duyệt TDV
1180
					OR	(@p_AUTH_STATUS = 'A' AND A.PROCESS IN ('1', '2', '7', '8', '10', '11', '16', '17')) -- đã duyệt
1181
					OR	(@p_AUTH_STATUS = 'R' AND ISNULL(A.PROCESS, '') IN ('', '7.1', '8.1', '10.1', '11.1', '14.1', '16.1', '17.1', '20.1') AND ISNULL(A.AUTH_STATUS, '') <> 'E') -- từ chối
1182
					OR (ISNULL(@p_AUTH_STATUS, '') = '')
1183
					)
1184
				AND	(	A.REQ_PAY_AUTO_TYPE = @p_REQ_PAY_AUTO_TYPE OR ISNULL(@p_REQ_PAY_AUTO_TYPE, '') = '')
1185
				AND	(	A.AUTH_STATUS_KT = @p_AUTH_STATUS_KT OR ISNULL(@p_AUTH_STATUS_KT, '') = '')
1186
				AND	(	M.BRANCH_ID = @p_BRANCH_MANAGE_ID OR ISNULL(@p_BRANCH_MANAGE_ID, '') = '')
1187
				AND	(	A.CONTRACT_ID = @p_CONTRACT_ID OR ISNULL(@p_CONTRACT_ID, '') = '')
1188
				AND	(	A.REQ_PAY_AUTO_STATUS = @p_REQ_PAY_AUTO_STATUS OR ISNULL(@p_REQ_PAY_AUTO_STATUS, '') = '')
1189
				AND	(	CONVERT(DATE, A.CREATE_DT) >= CONVERT(DATE, @p_FRMDATE, 103) OR ISNULL(@p_FRMDATE, '')= '' OR A.CREATE_DT IS NULL)
1190
				AND	(	CONVERT(DATE, A.CREATE_DT) <= CONVERT(DATE, @p_TODATE, 103) OR ISNULL(@p_TODATE, '')= '' OR A.CREATE_DT IS NULL)
1191
				AND	(	A.BRANCH_ID = @p_BRANCH_ID 
1192
						OR ISNULL(@p_BRANCH_ID, '') = ''
1193
						OR A.BRANCH_ID IN	(	SELECT BRANCH_ID 
1194
												FROM @tmp_branch
1195
											)
1196
					)
1197
				AND	(	A.DEP_ID = @p_DEP_ID 
1198
						OR ISNULL(@p_DEP_ID, '') = ''
1199
					)
1200
				AND	(	A.MAKER_ID = @p_MAKER_ID OR ISNULL(@p_MAKER_ID, '') = '')
1201
				AND	(	A.MAKER_ID_KT = @p_MAKER_ID_KT OR ISNULL(@p_MAKER_ID_KT, '') = '')
1202
				-- END FILTER
1203
			ORDER BY A.CREATE_DT DESC
1204
	-- PAGING END
1205
			END--END @DEP_ID_LG = 'DEP000000000022'
1206
			ELSE
1207
			BEGIN
1208
	-- PAGING BEGIN
1209
				SELECT A.*,
1210
				--B.BRANCH_CODE, B.BRANCH_NAME,
1211
				CASE	WHEN	(	SELECT TOP 1 BRANCH_ID 
1212
									FROM TR_CONTRACT 
1213
									WHERE CONTRACT_ID = A.CONTRACT_ID
1214
								) <> 'DV0001'
1215
								THEN  B.BRANCH_NAME + ISNULL	(	' - ' + (	SELECT TOP 1 BRANCH_NAME 
1216
																						FROM CM_BRANCH 
1217
																						WHERE BRANCH_ID =	(	SELECT TOP 1 BRANCH_ID 
1218
																												FROM TR_CONTRACT 
1219
																												WHERE CONTRACT_ID = A.CONTRACT_ID
1220
																											)
1221
																			),''
1222
																)
1223
						ELSE B.BRANCH_NAME 
1224
				END BRANCH_NAME,
1225
				C.DEP_CODE, C.DEP_NAME, 
1226
				D.CONTRACT_CODE, D.[CONTRACT_NAME], 
1227
				E.TLFullName AS MAKER_NAME, 
1228
				F.TLFullName AS MAKER_NAME_KT, 
1229
				G.TLFullName AS CHECKER_NAME_KT,
1230
				H.CONTENT AS REQ_PAY_AUTO_STATUS_NAME,
1231
				--I.CONTENT AS REQ_PAY_AUTO_TYPE_NAME,
1232
				CASE 
1233
					WHEN A.REQ_PAY_AUTO_TYPE = 'A' THEN N.CONTENT
1234
					ELSE O.CONTENT
1235
				END REQ_PAY_AUTO_TYPE_NAME,
1236
				J.CONTENT AS AUTH_STATUS_NAME,
1237
				K.CONTENT AS AUTH_STATUS_KT_NAME,
1238
				L.TLFullName AS TRANSFER_USER_RECEIVE_NAME,
1239
				M.BRANCH_CODE AS BRANCH_MANAGE_CODE, M.BRANCH_NAME AS BRANCH_MANAGE_NAME
1240
		-- SELECT END
1241
				FROM TR_REQ_PAYMENT_AUTO A
1242
				LEFT JOIN CM_BRANCH B ON A.BRANCH_ID = B.BRANCH_ID
1243
				LEFT JOIN CM_DEPARTMENT C ON A.DEP_ID = C.DEP_ID
1244
				LEFT JOIN TR_CONTRACT D ON A.CONTRACT_ID = D.CONTRACT_ID
1245
				LEFT JOIN TL_USER E ON A.MAKER_ID = E.TLNANME
1246
				LEFT JOIN TL_USER F ON A.MAKER_ID_KT = F.TLNANME
1247
				LEFT JOIN TL_USER G ON A.CHECKER_ID_KT = G.TLNANME
1248
				LEFT JOIN CM_ALLCODE H ON A.REQ_PAY_AUTO_STATUS = H.CDVAL AND H.CDNAME = 'PAY_AUTO_STATUS' AND H.CDTYPE = 'REQ_AUTO'
1249
				LEFT JOIN CM_ALLCODE I ON A.REQ_PAY_AUTO_TYPE = I.CDVAL AND I.CDNAME = 'PAY_TYPE_AUTO' AND I.CDTYPE = 'REQ_AUTO'
1250
				LEFT JOIN CM_ALLCODE J ON A.AUTH_STATUS = J.CDVAL AND J.CDNAME = 'AUTH_STATUS' AND J.CDTYPE = 'TR_REQ_PAYMENT'
1251
				LEFT JOIN CM_ALLCODE K ON A.AUTH_STATUS_KT = K.CDVAL AND K.CDNAME = 'AUTH_STATUS_KT' AND K.CDTYPE = 'TR_REQ_PAYMENT'
1252
				LEFT JOIN TL_USER L ON A.TRANSFER_USER_RECEIVE = L.TLNANME
1253
				LEFT JOIN CM_BRANCH M ON A.BRANCH_MANAGE_ID = M.BRANCH_ID
1254
				LEFT JOIN CM_ALLCODE N ON A.REQ_PAY_AUTO_SERVICE_TYPE = N.CDVAL AND N.CDNAME = 'PAY_SER_AUTO_TS' AND N.CDTYPE = 'REQ_AUTO'
1255
				LEFT JOIN CM_ALLCODE O ON A.REQ_PAY_AUTO_SERVICE_TYPE = O.CDVAL AND O.CDNAME = 'PAY_SER_AUTO' AND O.CDTYPE = 'REQ_AUTO'
1256
				WHERE 1=1 
1257
				-- BEGIN FILTER
1258
				AND	(	A.REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID OR ISNULL(@p_REQ_PAY_AUTO_ID, '') = '')
1259
				AND	(	A.REQ_PAY_AUTO_CODE LIKE '%' + @p_REQ_PAY_AUTO_CODE +'%' OR ISNULL(@p_REQ_PAY_AUTO_CODE, '') = '')
1260
				--AND	(	A.AUTH_STATUS = @p_AUTH_STATUS OR ISNULL(@p_AUTH_STATUS, '') = '')
1261
				AND (	(@p_AUTH_STATUS = A.AUTH_STATUS)	-- dùng cho: lưu nháp, phiếu bị hủy
1262
					OR	(@p_AUTH_STATUS = 'W' AND A.PROCESS IN ('0', '6', '9', '15')) -- chờ cấp trung gian xác nhận
1263
					OR	(@p_AUTH_STATUS = 'G' AND A.PROCESS IN ('1', '7', '10', '16')) -- cấp trung gian xác nhận
1264
					OR	(@p_AUTH_STATUS = 'U' AND @IS_TDV = 'N' AND A.PROCESS IN ('0', '6', '9', '15')) -- chờ duyệt CTG
1265
					OR	(@p_AUTH_STATUS = 'U' AND @IS_TDV = 'Y' AND A.PROCESS IN ('0', '1', '6', '7', '9', '10', '15', '16')) -- chờ duyệt TDV
1266
					OR	(@p_AUTH_STATUS = 'A' AND A.PROCESS IN ('1', '2', '7', '8', '10', '11', '16', '17')) -- đã duyệt
1267
					OR	(@p_AUTH_STATUS = 'R' AND ISNULL(A.PROCESS, '') IN ('', '7.1', '8.1', '10.1', '11.1', '14.1', '16.1', '17.1', '20.1') AND ISNULL(A.AUTH_STATUS, '') <> 'E') -- từ chối
1268
					OR (ISNULL(@p_AUTH_STATUS, '') = '')
1269
					)
1270
				AND	(	A.REQ_PAY_AUTO_TYPE = @p_REQ_PAY_AUTO_TYPE OR ISNULL(@p_REQ_PAY_AUTO_TYPE, '') = '')
1271
				AND	(	A.AUTH_STATUS_KT = @p_AUTH_STATUS_KT OR ISNULL(@p_AUTH_STATUS_KT, '') = '')
1272
				AND	(	M.BRANCH_ID = @p_BRANCH_MANAGE_ID OR ISNULL(@p_BRANCH_MANAGE_ID, '') = '')
1273
				AND	(	A.CONTRACT_ID = @p_CONTRACT_ID OR ISNULL(@p_CONTRACT_ID, '') = '')
1274
				AND	(	A.REQ_PAY_AUTO_STATUS = @p_REQ_PAY_AUTO_STATUS OR ISNULL(@p_REQ_PAY_AUTO_STATUS, '') = '')
1275
				AND(	CONVERT(DATE, A.CREATE_DT) >= CONVERT(DATE, @p_FRMDATE, 103) OR ISNULL(@p_FRMDATE, '')= '' OR A.CREATE_DT IS NULL)
1276
				AND(	CONVERT(DATE, A.CREATE_DT) <= CONVERT(DATE, @p_TODATE, 103) OR ISNULL(@p_TODATE, '')= '' OR A.CREATE_DT IS NULL)
1277
				AND	(	A.MAKER_ID = @p_MAKER_ID OR ISNULL(@p_MAKER_ID, '') = '')
1278
				AND	(	A.MAKER_ID_KT = @p_MAKER_ID_KT OR ISNULL(@p_MAKER_ID_KT, '') = '')
1279
				-- END FILTER
1280
				-- BEGIN VALIDATE FLOW
1281
				AND	(
1282
						(
1283
								(	A.MAKER_ID = @p_USER_LOGIN)
1284
						)-- NGUOI TAO
1285
					OR	(
1286
							(	A.TRANSFER_USER_RECEIVE = @p_USER_LOGIN AND A.AUTH_STATUS IN ('U', 'R', 'A', 'N') AND PROCESS IN ('0', '6', '9', '15') )
1287
						)-- NGUOI DUYET TRUNG GIAN
1288
					OR	(
1289
							(	A.AUTH_STATUS IN ('R', 'A', 'N') AND @IS_TDV = 'Y')
1290
						OR	(	A.AUTH_STATUS = 'U' AND ISNULL(A.TRANSFER_USER_RECEIVE, '') = '' AND @IS_TDV = 'Y')
1291
						OR	(	A.AUTH_STATUS = 'U' AND ISNULL(A.TRANSFER_USER_RECEIVE, '') <> '' AND ISNULL(A.PROCESS, '') = '1' AND @IS_TDV = 'Y')
1292
						)-- TRUONG DON VI
1293
					OR	(
1294
							A.AUTH_STATUS = 'A'
1295
							
1296
						)-- VA NHUNG PHIEU DA DUYET
1297
					)
1298
				AND	(	(	@p_LEVEL='ALL' 
1299
							AND	(	A.BRANCH_ID IN	(	SELECT BRANCH_ID 
1300
														FROM @tmp_branch
1301
													) -- PYC cua don vi minh va cac don vi con
1302
									OR A.BRANCH_ID IN (SELECT * FROM @tmp_branch_auth) -- PYC cua don vi kiem nhiem
1303
								)
1304
						)
1305
						OR	(	@p_LEVEL='UNIT' 
1306
								AND	(	A.BRANCH_ID = @p_BRANCH_ID	-- PYC cua don vi minh
1307
										OR A.BRANCH_ID IN (SELECT * FROM @tmp_branch_auth) -- PYC cua don vi kiem nhiem
1308
									)
1309
							)
1310
					)
1311
				AND	(	A.DEP_ID = @p_DEP_ID 
1312
						OR ISNULL(@p_DEP_ID, '') = ''
1313
					)
1314
							
1315
				AND	(
1316
						A.DEP_ID IN	(
1317
										SELECT * 
1318
										FROM @tmp_dep_auth
1319
									)
1320
						OR A.BRANCH_ID <> 'DV0001'
1321
					)
1322
				-- END VALIDATE FLOW
1323
			ORDER BY A.CREATE_DT DESC
1324
	-- PAGING END
1325
			END
1326
		END;
1327
	END
1328
	ELSE IF(@p_TYPE_SEARCH = 'KT')
1329
	BEGIN
1330
		IF(@p_TOP IS NULL OR @p_TOP = 0)
1331
		BEGIN
1332
	-- PAGING BEGIN
1333
				SELECT A.*,
1334
				--B.BRANCH_CODE, B.BRANCH_NAME,
1335
				CASE	WHEN	(	SELECT TOP 1 BRANCH_ID 
1336
									FROM TR_CONTRACT 
1337
									WHERE CONTRACT_ID = A.CONTRACT_ID
1338
								) <> 'DV0001'
1339
								THEN  B.BRANCH_NAME + ISNULL	(	' - ' + (	SELECT TOP 1 BRANCH_NAME 
1340
																						FROM CM_BRANCH 
1341
																						WHERE BRANCH_ID =	(	SELECT TOP 1 BRANCH_ID 
1342
																												FROM TR_CONTRACT 
1343
																												WHERE CONTRACT_ID = A.CONTRACT_ID
1344
																											)
1345
																			),''
1346
																)
1347
						ELSE B.BRANCH_NAME 
1348
				END BRANCH_NAME,
1349
				C.DEP_CODE, C.DEP_NAME, 
1350
				D.CONTRACT_CODE, D.[CONTRACT_NAME], 
1351
				E.TLFullName AS MAKER_NAME, 
1352
				F.TLFullName AS MAKER_NAME_KT, 
1353
				G.TLFullName AS CHECKER_NAME_KT,
1354
				H.CONTENT AS REQ_PAY_AUTO_STATUS_NAME,
1355
				--I.CONTENT AS REQ_PAY_AUTO_TYPE_NAME,
1356
				CASE 
1357
					WHEN A.REQ_PAY_AUTO_TYPE = 'A' THEN N.CONTENT
1358
					ELSE O.CONTENT
1359
				END REQ_PAY_AUTO_TYPE_NAME,
1360
				J.CONTENT AS AUTH_STATUS_NAME,
1361
				K.CONTENT AS AUTH_STATUS_KT_NAME,
1362
				L.TLFullName AS TRANSFER_USER_RECEIVE_NAME,
1363
				M.BRANCH_CODE AS BRANCH_MANAGE_CODE, M.BRANCH_NAME AS BRANCH_MANAGE_NAME
1364
		-- SELECT END
1365
				FROM TR_REQ_PAYMENT_AUTO A
1366
				LEFT JOIN CM_BRANCH B ON A.BRANCH_ID = B.BRANCH_ID
1367
				LEFT JOIN CM_DEPARTMENT C ON A.DEP_ID = C.DEP_ID
1368
				LEFT JOIN TR_CONTRACT D ON A.CONTRACT_ID = D.CONTRACT_ID
1369
				LEFT JOIN TL_USER E ON A.MAKER_ID = E.TLNANME
1370
				LEFT JOIN TL_USER F ON A.MAKER_ID_KT = F.TLNANME
1371
				LEFT JOIN TL_USER G ON A.CHECKER_ID_KT = G.TLNANME
1372
				LEFT JOIN CM_ALLCODE H ON A.REQ_PAY_AUTO_STATUS = H.CDVAL AND H.CDNAME = 'PAY_AUTO_STATUS' AND H.CDTYPE = 'REQ_AUTO'
1373
				LEFT JOIN CM_ALLCODE I ON A.REQ_PAY_AUTO_TYPE = I.CDVAL AND I.CDNAME = 'PAY_TYPE_AUTO' AND I.CDTYPE = 'REQ_AUTO'
1374
				LEFT JOIN CM_ALLCODE J ON A.AUTH_STATUS = J.CDVAL AND J.CDNAME = 'AUTH_STATUS' AND J.CDTYPE = 'TR_REQ_PAYMENT'
1375
				LEFT JOIN CM_ALLCODE K ON A.AUTH_STATUS_KT = K.CDVAL AND K.CDNAME = 'AUTH_STATUS_KT' AND K.CDTYPE = 'TR_REQ_PAYMENT'
1376
				LEFT JOIN TL_USER L ON A.TRANSFER_USER_RECEIVE = L.TLNANME
1377
				LEFT JOIN CM_BRANCH M ON A.BRANCH_MANAGE_ID = M.BRANCH_ID
1378
				LEFT JOIN PL_REQUEST_PROCESS_CHILD PC3 ON PC3.REQ_ID = A.REQ_PAY_AUTO_ID AND PC3.STATUS_JOB ='C' 
1379
				LEFT JOIN CM_ALLCODE N ON A.REQ_PAY_AUTO_SERVICE_TYPE = N.CDVAL AND N.CDNAME = 'PAY_SER_AUTO_TS' AND N.CDTYPE = 'REQ_AUTO'
1380
				LEFT JOIN CM_ALLCODE O ON A.REQ_PAY_AUTO_SERVICE_TYPE = O.CDVAL AND O.CDNAME = 'PAY_SER_AUTO' AND O.CDTYPE = 'REQ_AUTO'
1381
				WHERE 1=1 
1382
				-- BEGIN FILTER
1383
				AND A.AUTH_STATUS IN ('A', 'N', 'D')
1384
				AND	(	A.REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID OR ISNULL(@p_REQ_PAY_AUTO_ID, '') = '')
1385
				AND	(	A.REQ_PAY_AUTO_CODE LIKE '%' + @p_REQ_PAY_AUTO_CODE +'%' OR ISNULL(@p_REQ_PAY_AUTO_CODE, '') = '')
1386
				--AND	(	A.AUTH_STATUS = @p_AUTH_STATUS OR ISNULL(@p_AUTH_STATUS, '') = '')
1387
				AND (	(@p_AUTH_STATUS_KT = A.AUTH_STATUS_KT) -- dùng cho từ chối
1388
					OR	(@p_AUTH_STATUS_KT = 'U' AND A.PROCESS IN ('3', '12', '18')) -- chờ duyệt
1389
					OR	(@p_AUTH_STATUS_KT = 'P' AND A.PROCESS IN ('4', '13', '13.1', '19', '19.1')) -- đang xử lý
1390
					OR	(@p_AUTH_STATUS_KT = 'S' AND A.PROCESS IN ('4', '13.1', '19.1')) -- đề xuất từ chối
1391
					OR	(@p_AUTH_STATUS_KT = 'A' AND A.PROCESS IN ('5', '14', '20')) -- đã duyệt
1392
					OR	(@p_AUTH_STATUS_KT = 'R' AND A.PROCESS IN ('20.2', '14.2')) -- từ chối
1393
					OR (ISNULL(@p_AUTH_STATUS_KT, '') = '' AND A.PROCESS  IN ('2', '11', '17')) -- khi KSV chưa điều phối
1394
					OR (ISNULL(@p_AUTH_STATUS_KT, '') = '')
1395
					)
1396
				AND	(	A.REQ_PAY_AUTO_TYPE = @p_REQ_PAY_AUTO_TYPE OR ISNULL(@p_REQ_PAY_AUTO_TYPE, '') = '')
1397
				--AND	(	A.AUTH_STATUS_KT = @p_AUTH_STATUS_KT OR ISNULL(@p_AUTH_STATUS_KT, '') = '')
1398
				AND	(	M.BRANCH_ID = @p_BRANCH_MANAGE_ID OR ISNULL(@p_BRANCH_MANAGE_ID, '') = '')
1399
				AND	(	A.CONTRACT_ID = @p_CONTRACT_ID OR ISNULL(@p_CONTRACT_ID, '') = '')
1400
				AND	(	A.REQ_PAY_AUTO_STATUS = @p_REQ_PAY_AUTO_STATUS OR ISNULL(@p_REQ_PAY_AUTO_STATUS, '') = '')
1401
				AND(	CONVERT(DATE, A.CREATE_DT) >= CONVERT(DATE, @p_FRMDATE, 103) OR ISNULL(@p_FRMDATE, '')= '' OR A.CREATE_DT IS NULL)
1402
				AND(	CONVERT(DATE, A.CREATE_DT) <= CONVERT(DATE, @p_TODATE, 103) OR ISNULL(@p_TODATE, '')= '' OR A.CREATE_DT IS NULL)
1403
				AND	(	(	@p_LEVEL='ALL' 
1404
							AND	(	A.BRANCH_ID IN	(	SELECT BRANCH_ID 
1405
														FROM @tmp_branch
1406
													) -- PYC cua don vi minh
1407
									OR A.BRANCH_ID IN (SELECT * FROM @tmp_branch_auth) -- PYC cua don vi kiem nhiem
1408
								)
1409
						)
1410
						OR	(	
1411
									@p_LEVEL='UNIT' 
1412
								AND A.BRANCH_ID = @p_BRANCH_ID
1413
							)
1414
					)
1415
				AND	(	A.DEP_ID = @p_DEP_ID 
1416
						OR ISNULL(@p_DEP_ID, '') = ''
1417
					)
1418
				AND	(	A.MAKER_ID = @p_MAKER_ID OR ISNULL(@p_MAKER_ID, '') = '')
1419
				AND	(	A.MAKER_ID_KT = @p_MAKER_ID_KT OR ISNULL(@p_MAKER_ID_KT, '') = '')
1420
				AND(	PC3.TLNAME = @p_EXEC_USER_KT OR @p_EXEC_USER_KT = '' OR @p_EXEC_USER_KT IS NULL OR PC3.TLNAME = '' OR PC3.TLNAME IS NULL)
1421
				AND	(
1422
						(
1423
							EXISTS	(	SELECT TOP 1 * FROM PL_REQUEST_PROCESS_CHILD X WHERE	REQ_ID = A.REQ_PAY_AUTO_ID 
1424
																								AND (
1425
																										X.TLNAME= @p_USER_LOGIN 
1426
																										OR X.TLNAME =@p_EXEC_USER_KT
1427
																									)
1428
									)
1429
						) 
1430
						OR	(A.MAKER_ID_KT = @p_MAKER_ID_KT OR PC3.TLNAME = @p_MAKER_ID_KT)
1431
						OR (SELECT COUNT(*) FROM @TABLE_ROLE WHERE ROLE_AUTH = 'KSV') > 0
1432
						OR ISNULL(@p_EXEC_USER_KT, '') = ''
1433
					)	
1434
				AND	(	(	A.MAKER_ID_KT IS NOT NULL 
1435
							AND @p_IS_UPDATE_KT='Y'
1436
						)
1437
						OR	(	(	A.MAKER_ID_KT IS NULL 
1438
									AND @p_IS_UPDATE_KT='N'
1439
								)
1440
							)
1441
						OR @p_IS_UPDATE_KT IS NULL 
1442
						OR @p_IS_UPDATE_KT=''
1443
					)
1444
				-- END FILTER
1445
			ORDER BY A.CREATE_DT DESC
1446
	-- PAGING END
1447
		END;
1448
		ELSE 
1449
		BEGIN
1450
	-- PAGING BEGIN
1451
				SELECT A.*,
1452
				--B.BRANCH_CODE, B.BRANCH_NAME,
1453
				CASE	WHEN	(	SELECT TOP 1 BRANCH_ID 
1454
									FROM TR_CONTRACT 
1455
									WHERE CONTRACT_ID = A.CONTRACT_ID
1456
								) <> 'DV0001'
1457
								THEN  B.BRANCH_NAME + ISNULL	(	' - ' + (	SELECT TOP 1 BRANCH_NAME 
1458
																						FROM CM_BRANCH 
1459
																						WHERE BRANCH_ID =	(	SELECT TOP 1 BRANCH_ID 
1460
																												FROM TR_CONTRACT 
1461
																												WHERE CONTRACT_ID = A.CONTRACT_ID
1462
																											)
1463
																			),''
1464
																)
1465
						ELSE B.BRANCH_NAME 
1466
				END BRANCH_NAME,
1467
				C.DEP_CODE, C.DEP_NAME, 
1468
				D.CONTRACT_CODE, D.[CONTRACT_NAME], 
1469
				E.TLFullName AS MAKER_NAME, 
1470
				F.TLFullName AS MAKER_NAME_KT, 
1471
				G.TLFullName AS CHECKER_NAME_KT,
1472
				H.CONTENT AS REQ_PAY_AUTO_STATUS_NAME,
1473
				--I.CONTENT AS REQ_PAY_AUTO_TYPE_NAME,
1474
				CASE 
1475
					WHEN A.REQ_PAY_AUTO_TYPE = 'A' THEN N.CONTENT
1476
					ELSE O.CONTENT
1477
				END REQ_PAY_AUTO_TYPE_NAME,
1478
				J.CONTENT AS AUTH_STATUS_NAME,
1479
				K.CONTENT AS AUTH_STATUS_KT_NAME,
1480
				L.TLFullName AS TRANSFER_USER_RECEIVE_NAME,
1481
				M.BRANCH_CODE AS BRANCH_MANAGE_CODE, M.BRANCH_NAME AS BRANCH_MANAGE_NAME
1482
	-- SELECT END
1483
				FROM TR_REQ_PAYMENT_AUTO A
1484
				LEFT JOIN CM_BRANCH B ON A.BRANCH_ID = B.BRANCH_ID
1485
				LEFT JOIN CM_DEPARTMENT C ON A.DEP_ID = C.DEP_ID
1486
				LEFT JOIN TR_CONTRACT D ON A.CONTRACT_ID = D.CONTRACT_ID
1487
				LEFT JOIN TL_USER E ON A.MAKER_ID = E.TLNANME
1488
				LEFT JOIN TL_USER F ON A.MAKER_ID_KT = F.TLNANME
1489
				LEFT JOIN TL_USER G ON A.CHECKER_ID_KT = G.TLNANME
1490
				LEFT JOIN CM_ALLCODE H ON A.REQ_PAY_AUTO_STATUS = H.CDVAL AND H.CDNAME = 'PAY_AUTO_STATUS' AND H.CDTYPE = 'REQ_AUTO'
1491
				LEFT JOIN CM_ALLCODE I ON A.REQ_PAY_AUTO_TYPE = I.CDVAL AND I.CDNAME = 'PAY_TYPE_AUTO' AND I.CDTYPE = 'REQ_AUTO'
1492
				LEFT JOIN CM_ALLCODE J ON A.AUTH_STATUS = J.CDVAL AND J.CDNAME = 'AUTH_STATUS' AND J.CDTYPE = 'TR_REQ_PAYMENT'
1493
				LEFT JOIN CM_ALLCODE K ON A.AUTH_STATUS_KT = K.CDVAL AND K.CDNAME = 'AUTH_STATUS_KT' AND K.CDTYPE = 'TR_REQ_PAYMENT'
1494
				LEFT JOIN TL_USER L ON A.TRANSFER_USER_RECEIVE = L.TLNANME
1495
				LEFT JOIN CM_BRANCH M ON A.BRANCH_MANAGE_ID = M.BRANCH_ID
1496
				LEFT JOIN PL_REQUEST_PROCESS_CHILD PC3 ON PC3.REQ_ID = A.REQ_PAY_AUTO_ID AND PC3.STATUS_JOB ='C' 
1497
				LEFT JOIN CM_ALLCODE N ON A.REQ_PAY_AUTO_SERVICE_TYPE = N.CDVAL AND N.CDNAME = 'PAY_SER_AUTO_TS' AND N.CDTYPE = 'REQ_AUTO'
1498
				LEFT JOIN CM_ALLCODE O ON A.REQ_PAY_AUTO_SERVICE_TYPE = O.CDVAL AND O.CDNAME = 'PAY_SER_AUTO' AND O.CDTYPE = 'REQ_AUTO'
1499
				WHERE 1=1 
1500
				-- BEGIN FILTER
1501
				AND A.AUTH_STATUS IN ('A', 'N', 'D')
1502
				AND	(	A.REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID OR ISNULL(@p_REQ_PAY_AUTO_ID, '') = '')
1503
				AND	(	A.REQ_PAY_AUTO_CODE LIKE '%' + @p_REQ_PAY_AUTO_CODE +'%' OR ISNULL(@p_REQ_PAY_AUTO_CODE, '') = '')
1504
				--AND	(	A.AUTH_STATUS = @p_AUTH_STATUS OR ISNULL(@p_AUTH_STATUS, '') = '')
1505
				AND (	(@p_AUTH_STATUS_KT = A.AUTH_STATUS_KT) -- dùng cho từ chối
1506
					OR	(@p_AUTH_STATUS_KT = 'U' AND A.PROCESS IN ('3', '12', '18')) -- chờ duyệt
1507
					OR	(@p_AUTH_STATUS_KT = 'P' AND A.PROCESS IN ('4', '13', '13.1', '19', '19.1')) -- đang xử lý
1508
					OR	(@p_AUTH_STATUS_KT = 'S' AND A.PROCESS IN ('4', '13.1', '19.1')) -- đề xuất từ chối
1509
					OR	(@p_AUTH_STATUS_KT = 'A' AND A.PROCESS IN ('5', '14', '20')) -- đã duyệt
1510
					OR	(@p_AUTH_STATUS_KT = 'R' AND A.PROCESS IN ('20.2', '14.2')) -- từ chối
1511
					OR (ISNULL(@p_AUTH_STATUS_KT, '') = '' AND A.PROCESS  IN ('2', '11', '17')) -- khi KSV chưa điều phối
1512
					OR (ISNULL(@p_AUTH_STATUS_KT, '') = '')
1513
					)
1514
				AND	(	A.REQ_PAY_AUTO_TYPE = @p_REQ_PAY_AUTO_TYPE OR ISNULL(@p_REQ_PAY_AUTO_TYPE, '') = '')
1515
				--AND	(	A.AUTH_STATUS_KT = @p_AUTH_STATUS_KT OR ISNULL(@p_AUTH_STATUS_KT, '') = '')
1516
				AND	(	M.BRANCH_ID = @p_BRANCH_MANAGE_ID OR ISNULL(@p_BRANCH_MANAGE_ID, '') = '')
1517
				AND	(	A.CONTRACT_ID = @p_CONTRACT_ID OR ISNULL(@p_CONTRACT_ID, '') = '')
1518
				AND	(	A.REQ_PAY_AUTO_STATUS = @p_REQ_PAY_AUTO_STATUS OR ISNULL(@p_REQ_PAY_AUTO_STATUS, '') = '')
1519
				AND(	CONVERT(DATE, A.CREATE_DT) >= CONVERT(DATE, @p_FRMDATE, 103) OR ISNULL(@p_FRMDATE, '')= '' OR A.CREATE_DT IS NULL)
1520
				AND(	CONVERT(DATE, A.CREATE_DT) <= CONVERT(DATE, @p_TODATE, 103) OR ISNULL(@p_TODATE, '')= '' OR A.CREATE_DT IS NULL)
1521
				AND	(	(	@p_LEVEL='ALL' 
1522
							AND	(	A.BRANCH_ID IN	(	SELECT BRANCH_ID 
1523
														FROM @tmp_branch
1524
													) -- PYC cua don vi minh
1525
									OR A.BRANCH_ID IN (SELECT * FROM @tmp_branch_auth) -- PYC cua don vi kiem nhiem
1526
								)
1527
						)
1528
						OR	(	
1529
									@p_LEVEL='UNIT' 
1530
								AND A.BRANCH_ID = @p_BRANCH_ID
1531
							)
1532
					)
1533
				AND	(	A.DEP_ID = @p_DEP_ID 
1534
						OR ISNULL(@p_DEP_ID, '') = ''
1535
					)
1536
				AND	(	A.MAKER_ID = @p_MAKER_ID OR ISNULL(@p_MAKER_ID, '') = '')
1537
				AND	(	A.MAKER_ID_KT = @p_MAKER_ID_KT OR ISNULL(@p_MAKER_ID_KT, '') = '')
1538
				AND(	PC3.TLNAME = @p_EXEC_USER_KT OR @p_EXEC_USER_KT = '' OR @p_EXEC_USER_KT IS NULL OR PC3.TLNAME = '' OR PC3.TLNAME IS NULL)
1539
				AND	(
1540
						(
1541
							EXISTS	(	SELECT TOP 1 * FROM PL_REQUEST_PROCESS_CHILD X WHERE	REQ_ID = A.REQ_PAY_AUTO_ID 
1542
																								AND (
1543
																										X.TLNAME= @p_USER_LOGIN 
1544
																										OR X.TLNAME =@p_EXEC_USER_KT
1545
																									)
1546
									)
1547
						) 
1548
						OR	(A.MAKER_ID_KT = @p_MAKER_ID_KT OR PC3.TLNAME = @p_MAKER_ID_KT)
1549
						OR (SELECT COUNT(*) FROM @TABLE_ROLE WHERE ROLE_AUTH = 'KSV') > 0
1550
					)	
1551
				AND	(	(	A.MAKER_ID_KT IS NOT NULL 
1552
							AND @p_IS_UPDATE_KT='Y'
1553
						)
1554
						OR	(	(	A.MAKER_ID_KT IS NULL 
1555
									AND @p_IS_UPDATE_KT='N'
1556
								)
1557
							)
1558
						OR @p_IS_UPDATE_KT IS NULL 
1559
						OR @p_IS_UPDATE_KT=''
1560
					)
1561
				
1562
				-- END FILTER
1563
			ORDER BY A.CREATE_DT DESC
1564
	-- PAGING END
1565
	   END;
1566
	END
1567

    
1568
END -- PAGING
1569

    
1570
GO
1571

    
1572
ALTER   PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Upd]
1573
@p_REQ_PAY_ID	varchar(15)= NULL,
1574
@p_REQ_PAY_CODE	varchar(50)	= NULL,
1575
@p_REQ_DT VARCHAR(20)= NULL,
1576
@p_BRANCH_ID	varchar(15)	= NULL,
1577
@p_DEP_ID	varchar(15)	= NULL,
1578
@p_REQ_REASON	nvarchar(MAX)	= NULL,
1579
@p_REQ_TYPE	varchar(15)	= NULL,
1580
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
1581
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
1582
@p_REF_ID	varchar(15)	= NULL,
1583
@p_RECEIVER_PO	nvarchar(250)	= NULL,
1584
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
1585
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
1586
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
1587
@p_REQ_AMT	decimal(18, 0)	= NULL,
1588
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
1589
@p_MAKER_ID	varchar(15)	= NULL,
1590
@p_CREATE_DT	varchar(25)	= NULL,
1591
@p_EDITOR_ID	varchar(15)	= NULL,
1592
@p_AUTH_STATUS	varchar(1)	= NULL,
1593
@p_CHECKER_ID	varchar(15)	= NULL,
1594
@p_APPROVE_DT	varchar(25)	= NULL,
1595
@p_CREATE_DT_KT	varchar(25)	= NULL,
1596
@p_MAKER_ID_KT	varchar(15)	= NULL,
1597
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
1598
@p_CHECKER_ID_KT	varchar(1)	= NULL,
1599
@p_APPROVE_DT_KT  varchar(25)= null,
1600
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
1601
@p_BRANCH_CREATE	varchar(15)	= NULL,
1602
@p_NOTES	varchar(15)	= NULL,
1603
@p_RECORD_STATUS	varchar(1)	= NULL,
1604
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
1605
@p_TRANSFER_DT	varchar(25)	= NULL,
1606
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
1607
@p_PROCESS	varchar(15)	= NULL,
1608
@p_PAY_PHASE VARCHAR(15)= NULL,
1609
@p_DVDM_ID VARCHAR(15)= NULL,
1610
@p_RATE DECIMAL(18,0) =0,
1611
@p_RECIVER_MONEY VARCHAR(15)= NULL,
1612
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
1613
@p_IS_PERIOD VARCHAR(5) = NULL,
1614
@p_PAY_AMT DECIMAL(18,0)= NULL,
1615
--doanptt 19/01/2022
1616
@p_XMP_TEMP XML = NULL,
1617
@p_XMP_CUS XML = NULL,
1618
@p_XMP_PAY_ATTACH XML = NULL,
1619
@p_XMP_PAY_INVOICE XML = NULL,
1620
@p_XMP_ADVANCE_DT_2 XML = NULL,
1621
@p_XMP_PAY_SCHEDULE XML = NULL,
1622
@p_XMP_PAY_PERIOD XML = NULL,
1623
@p_XMP_PAY_METHOD XML = NULL,
1624
@p_XMP_PAY_BUDGET XML = NULL,
1625
@p_XMP_ADVANCE_DT XML = NULL
1626
AS
1627
-- Begin Validation update
1628
	IF(@p_TYPE_FUNCTION <> 'SEND')
1629
	BEGIN
1630
		IF(NOT EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT where MAKER_ID = @p_MAKER_ID ))
1631
		BEGIN
1632
			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
1633
			RETURN '-1'
1634
		END
1635
		IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT where AUTH_STATUS = 'U' AND REQ_PAY_ID = @p_REQ_PAY_ID ))
1636
		BEGIN
1637
			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
1638
			RETURN '-1'
1639
		END
1640
		IF (@p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE ='')
1641
		BEGIN
1642
			SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu không được để trống' ErrorDesc
1643
			RETURN '-1'
1644
		END
1645
		IF (EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_CODE = @p_REQ_PAY_CODE AND REQ_PAY_ID <> @p_REQ_PAY_ID))
1646
		BEGIN
1647
			SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu đã tồn tại trong hệ thống' ErrorDesc
1648
			RETURN '-1'
1649
		END
1650
		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, '') <> ''))
1651
		BEGIN
1652
			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
1653
			RETURN '-1'
1654
		END
1655
	END
1656
	
1657
-- End Validation update
1658

    
1659
	DECLARE @BRANCH_TYPE_CR VARCHAR(15), @ROLE_KI_NHAY VARCHAR(50)
1660
	SET  @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER WHERE TLNANME =@p_TRASFER_USER_RECIVE)
1661
	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'))
1662
	BEGIN
1663
		PRINT @ROLE_KI_NHAY
1664
	END
1665
	ELSE
1666
	BEGIN
1667
		SET @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
1668
		IF(@ROLE_KI_NHAY IS NULL OR @ROLE_KI_NHAY ='')
1669
		BEGIN
1670
				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))
1671
		END
1672
	END
1673
	--SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
1674
	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')
1675
	BEGIN
1676
		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
1677
		RETURN '-1'
1678
	END
1679
	SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
1680
	DECLARE @ACC_NUM VARCHAR(15)
1681
	SET @ACC_NUM = (SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)
1682

    
1683
------------------------------------------------------------------------------------ start validate phần master ------------------------------------------------------------------------------------------------------
1684
	IF(@p_TYPE_FUNCTION = 'SEND')
1685
	BEGIN
1686
		IF (@p_BRANCH_ID IS NULL OR @p_BRANCH_ID ='')
1687
		BEGIN
1688
			SELECT '-1' Result, '' REQ_PAY_ID, N'Đơn vị yêu cầu không được để trống' ErrorDesc
1689
			RETURN '-1'
1690
		END
1691
		IF (@p_DEP_ID IS NULL OR @p_DEP_ID ='')
1692
		BEGIN
1693
			SELECT '-1' Result, '' REQ_PAY_ID, N'Phòng ban đề nghị không được để trống' ErrorDesc
1694
			RETURN '-1'
1695
		END
1696
		IF (@p_REQ_TYPE IS NULL OR @p_REQ_TYPE ='')
1697
		BEGIN
1698
			SELECT '-1' Result, '' REQ_PAY_ID, N'Loại phiếu yêu cầu không được để trống' ErrorDesc
1699
			RETURN '-1'
1700
		END
1701
		IF (@p_REQ_REASON IS NULL OR @p_REQ_REASON ='')
1702
		BEGIN
1703
			SELECT '-1' Result, '' REQ_PAY_ID, N'Lý do tạm ứng không được để trống' ErrorDesc
1704
			RETURN '-1'
1705
		END
1706
		IF (@p_REQ_AMT IS NULL OR @p_REQ_AMT = 0)
1707
		BEGIN
1708
			SELECT '-1' Result, '' REQ_PAY_ID, N'Số tiền tạm ứng phải lớn hơn không' ErrorDesc
1709
			RETURN '-1'
1710
		END
1711
		IF (@p_BRANCH_ID IS NULL OR @p_BRANCH_ID ='')
1712
		BEGIN
1713
			SELECT '-1' Result, '' REQ_PAY_ID, N'Đơn vị không được để trống' ErrorDesc
1714
			RETURN '-1'
1715
		END
1716
		IF (@p_RECIVER_MONEY IS NOT NULL AND @p_RECIVER_MONEY ='' AND @p_REQ_TYPE = 'D')
1717
		BEGIN
1718
			SELECT '-1' Result, '' REQ_PAY_ID, N'Người nhận tiền tạm ứng không được để trống' ErrorDesc
1719
			RETURN '-1'
1720
		END
1721

    
1722
		IF(@p_REQ_TYPE='I')
1723
		BEGIN
1724
			IF((@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT = ''))
1725
			BEGIN
1726
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản người đề nghị tạm ứng không được để trống'  ErrorDesc
1727
				RETURN '-1'
1728
			END
1729
			IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM =@p_RECEIVER_DEBIT AND REF_ID =  @p_REF_ID))
1730
			BEGIN
1731
				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
1732
				RETURN '-1'
1733
			END
1734
			IF(LEN(ISNULL(@p_RECEIVER_DEBIT,''))>15)
1735
			BEGIN
1736
				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
1737
				RETURN '-1'
1738
			END
1739
		END
1740
	END
1741
------------------------------------------------------------------------------------ end validate phần master ------------------------------------------------------------------------------------------------------
1742

    
1743

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

    
1747
	-- THONG TIN KHACH HANG
1748
	EXEC sp_xml_preparedocument @hdocCus OUTPUT, @p_XMP_CUS;
1749
	-- HOP DONG, CHUNG TU DINH KEM
1750
	EXEC sp_xml_preparedocument @hdocPayAtach OUTPUT, @p_XMP_PAY_ATTACH;
1751
	-- THONG TIN PO/ HOP DONG
1752
	EXEC sp_xml_preparedocument @hdocPO OUTPUT, @p_XMP_ADVANCE_DT_2;
1753
	-- DANH SACH CAC DOT THANH TOAN PO/ HOP DONG
1754
	EXEC sp_xml_preparedocument @hdocSchedule OUTPUT, @p_XMP_PAY_SCHEDULE;
1755
	-- THONG TIN HOP DONG DINH KY
1756
	EXEC sp_xml_preparedocument @hdocRecurring OUTPUT, @p_XMP_ADVANCE_DT;
1757
	-- THONG TIN DINH KY TAM UNG
1758
	EXEC sp_xml_preparedocument @hdocPeriod OUTPUT, @p_XMP_PAY_PERIOD;
1759
	-- THONG TIN PHUONG THUC THANH TOAN
1760
	EXEC sp_xml_preparedocument @hdocPayMethod OUTPUT, @p_XMP_PAY_METHOD;
1761
	-- THONG TIN HANG MUC NGAN SACH VA CHI PHI
1762
	EXEC sp_xml_preparedocument @hdocPayBudget OUTPUT, @p_XMP_PAY_BUDGET;
1763

    
1764
		-------------------------------------------------------------- start validate các lưới -----------------------------------------------------------------------
1765
-- BEGIN VALIDATE CAC DANH SACH
1766
	IF(@p_TYPE_FUNCTION = 'SEND')
1767
	BEGIN
1768
		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))))
1769
		BEGIN
1770
			SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách PO/ hợp đồng không được để trống' ErrorDesc
1771
			RETURN '-1'
1772
		END
1773
		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))))
1774
		BEGIN
1775
			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
1776
			RETURN '-1'
1777
		END
1778

    
1779
		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))))
1780
		BEGIN
1781
			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
1782
			RETURN '-1'
1783
		END
1784

    
1785
		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))))
1786
		BEGIN
1787
			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
1788
			RETURN '-1'
1789
		END
1790

    
1791
		IF(@p_REQ_TYPE = 'D' AND NOT EXISTS(SELECT * FROM OPENXML(@hdocCus, '/Root/XmlDataCus', 2) WITH(CONTRACT_ID varchar(15))))
1792
		BEGIN
1793
			SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách khách hàng không được để trống' ErrorDesc
1794
			RETURN '-1'
1795
		END
1796
	END
1797

    
1798
-- END VALIDATE CAC DANH SACH
1799
		-------------------------------------------------------------- end validate các lưới -----------------------------------------------------------------------
1800
	-- SO TIEN THANH TOÁN PHAI LON HON KHONG
1801
	IF(@p_REQ_AMT <=0)
1802
	BEGIN	
1803
		SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền tạm ứng phải lớn hơn 0' ErrorDesc
1804
		RETURN '-1'
1805
	END
1806
BEGIN TRANSACTION
1807
		UPDATE TR_REQ_ADVANCE_PAYMENT SET 
1808
		REF_ID = @p_REF_ID,
1809
		DEP_ID= @p_DEP_ID,REQ_REASON = @p_REQ_REASON, REQ_PAY_TYPE = @p_REQ_PAY_TYPE,
1810
		REQ_AMT = @p_REQ_AMT,
1811
		NOTES= @p_NOTES,
1812
		REQ_TYPE= @p_REQ_TYPE,REQ_DESCRIPTION = @p_REQ_DESCRIPTION,RECEIVER_PO =@p_RECEIVER_PO, RECEIVER_DEBIT= @p_RECEIVER_DEBIT,
1813
		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,
1814
		AUTH_STATUS='E', DVDM_ID=@p_DVDM_ID, RATE =@p_RATE,REQ_TYPE_CURRENCY =@p_REQ_TYPE_CURRENCY, RECIVER_MONEY= @p_RECIVER_MONEY, 
1815
		TRASFER_USER_RECIVE =@p_TRASFER_USER_RECIVE,IS_PERIOD =@p_IS_PERIOD, PAY_AMT = 0
1816
		WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1817
		IF @@Error <> 0 GOTO ABORT
1818
--- INSERT VÀO BẢNG DETAIL NÊU TẠM ỨNG LÀ TẠM ỨNG THANH TOÁN
1819
		-- KIEM TRA NEU TAM UNG THANH TOAN
1820
		IF((@p_REQ_TYPE='P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE='D')
1821
		BEGIN
1822
			DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID=@p_REQ_PAY_ID
1823
			DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID=@p_REQ_PAY_ID
1824
			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),
1825
			@AMT_REMAIN_SCHEDULE decimal(18,0),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),
1826
			@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),
1827
			@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)
1828
			DECLARE @TYPE_COST VARCHAR(25), @FR_LEVEL INT ,@TO_LEVEL INT
1829
			DECLARE XmlDataPO CURSOR FOR
1830
			SELECT *
1831
			FROM OPENXML(@hdocPO, '/Root/XmlDataPO', 2)--Thông tin PO/ hợp đồng
1832
			WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
1833
			OPEN XmlDataPO;
1834
			DECLARE @INDEX_PO INT =0
1835
			SET @INDEX_PO = 0
1836
			FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1837
			WHILE @@fetch_status=0 
1838
			BEGIN
1839
				SET @INDEX_PO = @INDEX_PO +1
1840
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1841
				IF(@p_TYPE_FUNCTION ='SEND')
1842
				BEGIN
1843
					
1844
					
1845
				-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1846
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
1847
				IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
1848
				BEGIN
1849
					ROLLBACK TRANSACTION
1850
					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ố '+
1851
					(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
1852
					RETURN '-1'
1853
				END
1854
				-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1855
				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))
1856
				BEGIN
1857
					ROLLBACK TRANSACTION
1858
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
1859
					(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
1860
					RETURN '-1'
1861
				END
1862
				-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1863
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
1864
				IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
1865
				BEGIN
1866
					ROLLBACK TRANSACTION
1867
					SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1868
					(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
1869
					RETURN '-1'
1870
				END
1871
				-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1872
				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))
1873
				BEGIN
1874
					ROLLBACK TRANSACTION
1875
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1876
					(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
1877
					RETURN '-1'
1878
				END
1879
				--- KIEM TRA XEM PO NAY DUOC THANH TOAN HAY CHUA
1880
				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' )))
1881
				BEGIN
1882
					ROLLBACK TRANSACTION
1883
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1884
					(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
1885
					RETURN '-1'
1886
				END
1887
				END
1888
				DECLARE @REQ_PAYDTID VARCHAR(15);
1889
				EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
1890
				IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
1891

    
1892
				IF(LEFT(@REF_ID, 3) = 'TRC')
1893
				BEGIN
1894
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
1895
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,'C')
1896
				END
1897
				ELSE
1898
				BEGIN
1899
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
1900
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,'P')
1901
				END
1902
			IF @@error<>0 GOTO ABORT;
1903
			FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1904
			END
1905
			CLOSE XmlDataPO;
1906
			DEALLOCATE XmlDataPO;
1907
			--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
1908
			DECLARE XmlDataSchedule CURSOR FOR
1909
			SELECT *
1910
			FROM
1911
			OPENXML(@hdocSchedule, '/Root/XmlDataSchedule',2)
1912
			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),
1913
			AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
1914
			REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
1915
			OPEN XmlDataSchedule
1916
			FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
1917
			@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
1918
			WHILE @@fetch_status=0 
1919
			BEGIN
1920
				DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
1921
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
1922
				IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
1923
				INSERT INTO TR_REQ_PAY_SCHEDULE(
1924
				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,
1925
				CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE, AMT_PAY_REAL)
1926
				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,
1927
				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)
1928
			--- END KHAI BAO CURSOR
1929
			IF @@error<>0 GOTO ABORT;
1930
			FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
1931
			@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
1932
			END
1933
			CLOSE XmlDataSchedule;
1934
			DEALLOCATE XmlDataSchedule;
1935
		END
1936
--- END TẠM ỨNG THANH TOÁN
1937

    
1938
---- BEGIN TẠM ỨNG HĐ ĐỊNH KÌ
1939
			IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
1940
			BEGIN
1941
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1942
				DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1943
				DECLARE @END_DT VARCHAR(20)
1944
				DECLARE XmlDataRecurring CURSOR FOR
1945
				SELECT *
1946
				FROM OPENXML(@hdocRecurring, '/Root/XmlDataRecurring', 2)
1947
				WITH(CONTRACT_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15), END_DT VARCHAR(20))
1948
				OPEN XmlDataRecurring;
1949
				SET @INDEX_PO = 0
1950
				FETCH NEXT FROM XmlDataRecurring INTO @REF_ID,@IS_CLOSED,@REF_TYPE, @END_DT
1951
				WHILE @@fetch_status=0 
1952
				BEGIN
1953
					SET @INDEX_PO = @INDEX_PO +1
1954
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
1955
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
1956
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
1957
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE, END_DT) 
1958
					VALUES(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,'C', CONVERT(DATE,@END_DT,103))
1959
				IF @@error<>0 GOTO ABORT;
1960
				FETCH NEXT FROM XmlDataRecurring INTO @REF_ID,@IS_CLOSED,@REF_TYPE, @END_DT
1961
				END
1962
				CLOSE XmlDataRecurring;
1963
				DEALLOCATE XmlDataRecurring;
1964
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
1965
			----------------------------
1966
			--INSERT FROM PERIOD	
1967
				DECLARE XmlDataPeriod CURSOR FOR
1968
				SELECT *
1969
				FROM
1970
				OPENXML(@hdocPeriod, '/Root/XmlDataPeriod', 2)
1971
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
1972
				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) )
1973
				OPEN XmlDataPeriod;
1974
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5), @OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),
1975
				@AMT_PAY_PERIOD DECIMAL(18,2),@FROM_DATE VARCHAR(20),@TO_DATE VARCHAR(20),@PAY_PHASE NVARCHAR(250), @REASON_TTDK NVARCHAR(2000)
1976
				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
1977
				WHILE @@fetch_status=0 
1978
				BEGIN
1979
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1980
					IF(@p_TYPE_FUNCTION ='SEND')
1981
					BEGIN
1982
					
1983
					--IF(EXISTS(SELECT CONTRACT_ID 
1984
					--FROM TR_CONTRACT 
1985
					--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 <>''))
1986
					
1987
					----AND IS_CLOSED='Y' ))
1988
					--BEGIN
1989
					--	ROLLBACK TRANSACTION
1990
					--	SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tạm ứng hợp đồng định kì đã đóng' ErrorDesc
1991
					--	RETURN '-1'
1992
					--END
1993

    
1994
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0)
1995
					BEGIN
1996
						ROLLBACK TRANSACTION
1997
						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
1998
						RETURN '-1'
1999
					END
2000
					-- NEU LÀ DINH KI THI HD PHAI KHAC NULL
2001
						IF(@CONTRACT_ID IS NULL OR @CONTRACT_ID ='' )
2002
						BEGIN
2003
							ROLLBACK TRANSACTION
2004
							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
2005
							RETURN '-1'
2006
						END
2007
					-- KIEM TRA CHI TIET HOP DONG PHAI NAM TRONG DANH SACH CAC HOP DONG
2008
						IF(@CONTRACT_ID IS NOT NULL AND  @CONTRACT_ID <> '' )
2009
						BEGIN
2010
							IF(NOT EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REF_ID =@CONTRACT_ID))
2011
							BEGIN
2012
								ROLLBACK TRANSACTION
2013
								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
2014
								RETURN '-1'
2015
							END
2016
						END
2017
					END
2018
					DECLARE @PERIOD_ID VARCHAR(15);
2019
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
2020
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
2021
					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, 
2022
					TO_DATE,AD_PAY_ID,PROCESS,PAY_PHASE, REASON)
2023
					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',
2024
					@CURRENCY, @RATE,CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@p_REQ_PAY_ID,'0',@PAY_PHASE,@REASON_TTDK)
2025
				IF @@error<>0 GOTO ABORT;
2026
				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
2027
			END
2028
			CLOSE XmlDataPeriod;
2029
			DEALLOCATE XmlDataPeriod;
2030
			-- VALIDATE SO TIEN
2031
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
2032
			--BEGIN
2033
			--	ROLLBACK TRANSACTION
2034
			--	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
2035
			--	RETURN '-1'
2036
			--END
2037
			----
2038
			END
2039
---- END TẠM ỨNG HĐ ĐỊNH KÌ
2040

    
2041
--- INSERT PHƯƠNG THỨC THANH TOÁN
2042
		DELETE FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
2043
		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),
2044
				@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(250), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20),
2045
				@TYPE_TRANSFER VARCHAR(15), @BANKCODE_NAPAS VARCHAR(20), @BANKCODE VARCHAR(20), @BANKNAME NVARCHAR(250), @SUB_ISSUED_BY NVARCHAR(250), @RECEIVER_DEBIT VARCHAR(20)
2046
		DECLARE @INDEX_PAY_METHOD DECIMAL(18,0) = 0;
2047
		DECLARE XmlDataMethod CURSOR FOR
2048
		SELECT *
2049
		FROM
2050
		OPENXML(@hdocPayMethod, '/Root/XmlDataMethod',2)
2051
		WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2),REQ_PAY_TYPE varchar(1),
2052
		REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), ACC_NAME NVARCHAR(250), 
2053
		ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15),
2054
		TYPE_TRANSFER VARCHAR(15), BANKCODE_NAPAS VARCHAR(20), BANKCODE VARCHAR(20), BANKNAME NVARCHAR(250), SUB_ISSUED_BY NVARCHAR(250), RECEIVER_DEBIT NVARCHAR(20))
2055
		OPEN XmlDataMethod
2056
		FETCH NEXT FROM XmlDataMethod 
2057
		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 
2058
		WHILE @@fetch_status=0 
2059
		BEGIN
2060
			SET @INDEX_PAY_METHOD = @INDEX_PAY_METHOD + 1;
2061
				---------------------------start validate ------------------------------
2062
				IF(@p_TYPE_FUNCTION ='SEND')
2063
				BEGIN
2064
					IF(@ACC_NO IS NULL OR @ACC_NO = '')
2065
					BEGIN
2066
						ROLLBACK TRANSACTION
2067
						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
2068
						RETURN '-1'
2069
					END
2070

    
2071
					IF((@BANKCODE IS NULL OR @BANKCODE = '') AND @CHECK_IN = 'O')
2072
					BEGIN
2073
						ROLLBACK TRANSACTION
2074
						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
2075
						RETURN '-1'
2076
					END
2077

    
2078
					IF(@ACC_NAME IS NULL OR @ACC_NAME = '')
2079
					BEGIN
2080
						ROLLBACK TRANSACTION
2081
						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
2082
						RETURN '-1'
2083
					END
2084
					IF(@ISSED_BY IS NULL OR @ISSED_BY = '')
2085
					BEGIN
2086
						ROLLBACK TRANSACTION
2087
						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
2088
						RETURN '-1'
2089
					END
2090
					IF(@REQ_PAY_REASON IS NULL OR @REQ_PAY_REASON = '')
2091
					BEGIN
2092
						ROLLBACK TRANSACTION
2093
						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
2094
						RETURN '-1'
2095
					END
2096
					IF(@TOTAL_AMT_METHOD IS NULL OR @TOTAL_AMT_METHOD = 0)
2097
					BEGIN
2098
						ROLLBACK TRANSACTION
2099
						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
2100
						RETURN '-1'
2101
					END
2102
					IF(@REQ_PAY_TYPE = '1' AND (@ISSUED_DT IS NULL OR @ISSUED_DT = ''))
2103
					BEGIN
2104
						ROLLBACK TRANSACTION
2105
						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
2106
						RETURN '-1'
2107
					END
2108
					IF(ISNULL(@CHECK_IN, '') = 'O' AND @TYPE_TRANSFER = 'R')
2109
					BEGIN
2110
						ROLLBACK TRANSACTION
2111
						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': Với hình thức thanh toán là Trích từ tài khoản, Loại tài khoản phải là Trong hệ thống' ErrorDesc
2112
						RETURN '-1'
2113
					END
2114
						
2115
				END
2116
				-----------------------------end validate ----------------------------
2117
			IF(@REQ_PAY_TYPE<>'1')
2118
			BEGIN
2119
				SET @ISSUED_DT = NULL
2120
			END
2121
			DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
2122
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
2123
			IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
2124
			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,
2125
			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)
2126
			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,'',
2127
			@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)
2128
		IF @@error<>0 GOTO ABORT;
2129
		FETCH NEXT FROM XmlDataMethod 
2130
		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
2131
		END
2132
		CLOSE XmlDataMethod;
2133
		DEALLOCATE XmlDataMethod
2134
----END INSERT PHƯƠNG THỨC THANH TOÁN
2135

    
2136
---- BEGIN INSERT VAO BANG DS KHACH HANG
2137
		DECLARE @INDEX_CUS DECIMAL(18,0) = 0;
2138
		DELETE FROM TR_REQ_ADVANCE_CUS WHERE REQ_PAY_ID = @p_REQ_PAY_ID
2139
		DECLARE XmlDataCus CURSOR FOR
2140
		SELECT * FROM
2141
		OPENXML(@hdocCus, '/Root/XmlDataCus', 2)
2142
		WITH(CUST_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO decimal(18,2),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
2143
		OPEN XmlDataCus;
2144

    
2145
		FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
2146
		WHILE @@fetch_status=0 
2147
		BEGIN		
2148
			SET @INDEX_CUS = @INDEX_CUS + 1;
2149
			IF(@p_TYPE_FUNCTION ='SEND')
2150
			BEGIN
2151
				IF(ISNULL(@CUST_ID, '') = '' OR ISNULL(@EMP_ID, '') = '')
2152
				BEGIN
2153
					ROLLBACK TRANSACTION
2154
					SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Thông tin khách hàng, dòng ' + CAST(@INDEX_CUS AS NVARCHAR(255)) + N': Mã khách hàng không được để trống'  ErrorDesc
2155
					RETURN '-1'
2156
				END
2157
			END
2158

    
2159
			INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
2160
			VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
2161
		--- END KHAI BAO CURSOR
2162
		IF @@error<>0 GOTO ABORT;
2163
		FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
2164
		END
2165
		CLOSE XmlDataCus;
2166
		DEALLOCATE XmlDataCus;
2167
---- END INSERT VAO BANG DS KHACH HANG
2168

    
2169
-- BEGIN HANG MUC NGAN SACH VA CHI PHI
2170
		DELETE FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID
2171
		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
2172
		DECLARE XmlDataGood CURSOR LOCAL FOR
2173
		SELECT *
2174
		FROM
2175
		OPENXML(@hdocPayBudget, '/Root/XmlDataGood',2) 
2176
		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)
2177
		OPEN XmlDataGood
2178
		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
2179
		WHILE @@fetch_status=0 
2180
		BEGIN
2181
			--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
2182
			SET @INDEX_NS = @INDEX_NS +1
2183
			-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
2184
			--IF(@p_TYPE_FUNCTION ='SEND')
2185
			--BEGIN
2186
			--IF((@AMT_EXE  > @AMT_REMAIN_GD))
2187
			--BEGIN
2188
			--		ROLLBACK TRANSACTION
2189
			--		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
2190
			--		RETURN '-1'
2191
			--END	
2192
			--END
2193
			IF(@p_TYPE_FUNCTION ='SEND')
2194
			BEGIN
2195
			IF(ISNULL(@AMT_EXE,0) =0)
2196
			BEGIN
2197
					ROLLBACK TRANSACTION
2198
					CLOSE XmlDataGood;
2199
					DEALLOCATE XmlDataGood;
2200
					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
2201
					RETURN '-1'
2202
			END
2203
			--		ROLLBACK TRANSACTION
2204
			--		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
2205
			--		RETURN '-1'
2206
			--END		
2207
		END
2208
			DECLARE @p_BUDGET_ID VARCHAR(15);
2209
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
2210
			IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
2211
			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) 
2212
			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)
2213
		IF @@error<>0 GOTO ABORT;
2214
		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
2215
		END;
2216
		CLOSE XmlDataGood;
2217
		DEALLOCATE XmlDataGood;
2218
--- END HANG MUC NGAN SACH VA CHI PHI
2219

    
2220
-- BEGIN INSERT CHUNG TU DINH KEM
2221
		DELETE FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID
2222
		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)
2223
		DECLARE XmlAttach CURSOR FOR
2224
		SELECT *
2225
		FROM
2226
		OPENXML(@hdocPayAtach, '/Root/XmlAttach',2) 
2227
		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))
2228
		OPEN XmlAttach
2229
			FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT, @LICENSE_DT
2230
			WHILE @@fetch_status=0 
2231
			BEGIN
2232
				IF (@REF_DT='')
2233
				BEGIN
2234
					SET @REF_DT = NULL
2235
				END
2236
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
2237
				IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
2238
				INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT, LICENSE_DT) VALUES
2239
				(@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))
2240
		IF @@error<>0 GOTO ABORT;
2241
		FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT, @LICENSE_DT
2242
		END
2243
		CLOSE XmlAttach;
2244
		DEALLOCATE XmlAttach;
2245
-- BEGIN INSERT CHUNG TU DINH KEM
2246

    
2247
--- BAT DAU VALIDATE
2248
		IF(@p_TYPE_FUNCTION ='SEND')
2249
		BEGIN
2250
			DECLARE @SUM_PTTT DECIMAL(18,0), @SUM_NS DECIMAL(18,0),@SUM_LICH_TT DECIMAL(18,0)
2251
			SET @SUM_PTTT =(SELECT SUM(TOTAL_AMT * ISNULL(RATE,1)) FROM  TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
2252
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID) AND @p_REQ_TYPE ='D')
2253
			BEGIN
2254
				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)
2255
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_LICH_TT,0))
2256
				BEGIN
2257
					ROLLBACK TRANSACTION
2258
					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
2259
					RETURN '-1'
2260
				END
2261
			END
2262
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
2263
			BEGIN
2264
				SET @SUM_NS =(SELECT SUM(AMT_EXE * ISNULL(RATE,1)) FROM  TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
2265
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_NS,0))
2266
				BEGIN
2267
					ROLLBACK TRANSACTION
2268
					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
2269
					RETURN '-1'
2270
				END
2271
			END
2272
			ELSE
2273
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
2274
				BEGIN
2275
					ROLLBACK TRANSACTION
2276
					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
2277
					RETURN '-1'
2278
				END
2279
			
2280
		END
2281
		----END
2282
		IF(@p_REQ_TYPE ='I')
2283
		BEGIN
2284
			DELETE FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID
2285
			DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT decimal(18,2))
2286
	-- BEGIN SELECT CAC CAP PHE DUYET --
2287
	-- HOI SO
2288
			IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
2289
			BEGIN
2290
			-- KHOI TAI CHINH
2291
				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
2292
				BEGIN
2293
					-- KHOI TAI CHINH SE KHONG CO PTGD NUA MA CHI CO GDK - LUCTV 29032021
2294
					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'
2295
				END
2296
			-- KHOI HO TRO
2297
				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
2298
				BEGIN
2299
					-- KHOI HO TRO SE KHONG CO PTGD NUA MA CHI CO KDK - LUCTV 29032021
2300
					 --LUCTV 14062023_secretkey KHOI HO TRO CHI CÒN CÓ PTGD, KHÔNG CÓ GDK NỮA, 15062023_secretkey 
2301
					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 = 'PTGD'
2302
				END
2303
			-- PHONG TRUYEN THONG VA THUONG HIEU
2304
				ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE ='0690405XXX' AND DEP_ID =@p_DEP_ID)  --- VÔ HIỆU H
2305
				BEGIN
2306
						-- KHOI TAI CHINH SE KHONG CO PTGD NUA MA CHI CO KDK - LUCTV 29032021
2307
					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'
2308
				END
2309
			-- KHOI VAN HANH
2310
				ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
2311
				BEGIN
2312
					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
2313
				END
2314
			-- KHONG CO TGD VA PTGD
2315
				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)
2316
				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) 
2317
				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)
2318
				OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%799%' AND DEP_ID =@p_DEP_ID)
2319
				OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%899%' AND DEP_ID =@p_DEP_ID))
2320
				BEGIN
2321
					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
2322
				END
2323
			-- KHOI QUAN LY RUI RO, KHOI CNTT,...
2324
				ELSE IF 
2325
				(EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06907XX%' AND DEP_ID =@p_DEP_ID) -- KHOI QUAN LY RUI RO
2326
				OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06909XX%' AND DEP_ID =@p_DEP_ID) -- KHOI CNTT
2327
				OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06911%' AND DEP_ID =@p_DEP_ID) -- KHOI THAM DINH TIN DUNG
2328
				OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06921%' AND DEP_ID =@p_DEP_ID) -- KHOI KHCN - KHACH HANG CA NHAN
2329
				OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID)) -- KHOI KHOI KHDN & DINH CHE
2330
				BEGIN
2331
					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
2332
				END
2333
				 --LUCTV 14062023_secretkey KHOI QLRR, CNTT CHI CÒN CÓ PTGD, KHÔNG CÓ GDK NỮA
2334
				ELSE IF(EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06907%' AND DEP_ID =@p_DEP_ID) -- KHOI QUAN LY RUI RO
2335
				OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06909%' AND DEP_ID =@p_DEP_ID)) -- KHOI CNTT
2336
				BEGIN
2337
					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
2338
				END
2339
			-- CON LAI
2340
				ELSE
2341
				BEGIN
2342
					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
2343
				END
2344
			END
2345
	-- CN & PGD
2346
			ELSE
2347
			BEGIN
2348
			-- ROLE GDDV HOAC KIEM NHIEM GDDV
2349
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
2350
				BEGIN
2351
						--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
2352
						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' 
2353
						--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'
2354
				END
2355
			-- ROLE TPGD HOAC KIEM NHIEM TPGD
2356
				ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
2357
				BEGIN
2358
						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'
2359
						--BRANCH_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE)
2360
						--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'
2361
				END
2362
			END
2363
	-- END SELECT CAC CAP PHE DUYET --
2364

    
2365
			DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
2366
			SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
2367
			DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
2368
	-- BEGIN THEM CAC CAP PHE DUYET VAO TABLE PL_REQUEST_PROCESS --
2369
			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
2370
			OPEN CUR_PR
2371
			FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
2372
			WHILE @@FETCH_STATUS =0 --AND @STOP=0
2373
			BEGIN
2374
				-- DOANPTT 261022: DONG NHAT PROCESS GIUA DON VI VA HOI SO
2375
			-- HOI SO
2376
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
2377
				BEGIN
2378
					SET @INDEX= @INDEX+1
2379

    
2380
					IF @INDEX = @SL_ROLE
2381
					SET @ISLEAF = 'Y'
2382
					ELSE
2383
					SET @ISLEAF = 'N'
2384
					SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
2385

    
2386
					IF(@INDEX=1 )
2387
					BEGIN		
2388
						SET @PARENT_ID = NULL
2389
						SET @STATUS = 'C'							
2390
					END				
2391
					ELSE 
2392
					BEGIN
2393
						SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
2394
						SET @STATUS = 'U'
2395
					END
2396
				END
2397
			-- CN & PGD
2398
				ELSE
2399
				BEGIN
2400
					SET @INDEX= 0
2401
					IF @INDEX = @SL_ROLE - 1
2402
					SET @ISLEAF = 'Y'
2403
					ELSE
2404
					SET @ISLEAF = 'N'
2405
					SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
2406

    
2407
					IF(@INDEX = 0 )
2408
					BEGIN		
2409
						SET @PARENT_ID = NULL
2410
						SET @STATUS = 'C'							
2411
					END				
2412
					ELSE 
2413
					BEGIN
2414
						SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
2415
						SET @STATUS = 'U'
2416
					END
2417
				END
2418
				/*
2419
				IF(@ROLE_ID = 'TKTGD')
2420
				BEGIN
2421
					SET @INDEX = 3
2422
				END
2423
				*/
2424
				IF(@LIMIT_VALUE >= @p_REQ_AMT)
2425
				BEGIN
2426
					INSERT INTO dbo.PL_REQUEST_PROCESS(
2427
					REQ_ID,
2428
					PROCESS_ID,
2429
					STATUS,
2430
					ROLE_USER,
2431
					BRANCH_ID,
2432
					CHECKER_ID,
2433
					APPROVE_DT,
2434
					PARENT_PROCESS_ID,
2435
					IS_LEAF, COST_ID, DVDM_ID, NOTES
2436
					)
2437
					VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
2438
					--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y','')
2439
					IF(@ROLE_ID <> 'TKTGD' AND @ROLE_ID <> 'TKHDQT')
2440
					BEGIN
2441
						BREAK;
2442
					END
2443
				END
2444
				ELSE
2445
				BEGIN
2446
					INSERT INTO PL_REQUEST_PROCESS (
2447
					REQ_ID,
2448
					PROCESS_ID,
2449
					STATUS,
2450
					ROLE_USER,
2451
					BRANCH_ID,
2452
					CHECKER_ID,
2453
					APPROVE_DT,
2454
					PARENT_PROCESS_ID,
2455
					IS_LEAF, COST_ID, DVDM_ID, NOTES
2456
					) 
2457
					VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
2458
				END
2459
					
2460
				FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
2461
			END
2462
			CLOSE CUR_PR
2463
			DEALLOCATE CUR_PR
2464
		END
2465
COMMIT TRANSACTION
2466
-- BEIGN VALIDATE SEND APPROVE
2467
		IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
2468
		BEGIN
2469
			IF(@p_MAKER_ID <> (SELECT TOP 1 MAKER_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID))
2470
			BEGIN
2471
				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
2472
				RETURN '-1'
2473
			END
2474
			IF(NOT EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT where MAKER_ID = @p_MAKER_ID ))
2475
			BEGIN
2476
				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
2477
				RETURN '-1'
2478
			END
2479
			IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT where AUTH_STATUS = 'U' AND REQ_PAY_ID = @p_REQ_PAY_ID ))
2480
			BEGIN
2481
				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
2482
				RETURN '-1'
2483
			END
2484
			IF (@p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE ='')
2485
			BEGIN
2486
				SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu không được để trống' ErrorDesc
2487
				RETURN '-1'
2488
			END
2489
			IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS <> 'E' AND ISNULL(AUTH_STATUS, '') <> ''))
2490
			BEGIN
2491
				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
2492
				RETURN '-1'
2493
			END
2494
			--ROLLBACK TRANSACTION
2495
			-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
2496
			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')
2497
			BEGIN
2498
				DECLARE @USER_TP VARCHAR(15) =''
2499
				--SET @USER_TP =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID 
2500
				--		AND (RoleName IN ('GDDV','TPTC','TC','KTT') OR RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='GDDV')))
2501
				IF(@USER_TP IS NULL OR @USER_TP ='')
2502
				BEGIN
2503
					SET @USER_TP = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE SECUR_CODE =@p_DEP_ID 
2504
						AND (RoleName IN ('TBP','PP')))
2505
				END
2506
				--UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TP WHERE REQ_PAY_ID =@p_REQ_PAY_ID
2507
			END
2508
			DECLARE @SUM_TEMP_PAY DECIMAL, @SUM_PAY DECIMAL
2509
			IF (@p_REQ_TYPE ='I')
2510
			BEGIN
2511
				SET @SUM_TEMP_PAY = (SELECT SUM(REQ_AMT*ISNULL(RATE,1)) 
2512
				FROM TR_REQ_ADVANCE_PAYMENT WHERE  REF_ID =@p_REF_ID AND AUTH_STATUS ='A' AND  REQ_TYPE ='I')
2513
				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')
2514
				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
2515
			END
2516
			DECLARE @SUM_THANH_TOAN DECIMAL(18,0) =0, @SUM_PHUONG_THUC DECIMAL(18,0) =0
2517
			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)
2518
			--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)
2519
			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 AND TYPE_TRANSFER ='A') -
2520
			(SELECT ISNULL(SUM(TOTAL_AMT * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND TYPE_TRANSFER ='R')
2521
			IF(ROUND(@SUM_THANH_TOAN,0) <> ROUND(@SUM_PHUONG_THUC,0))
2522
			BEGIN
2523
				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
2524
				RETURN '-1'
2525
			END
2526
			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')
2527
			BEGIN
2528
				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
2529
				RETURN '-1'
2530
			END
2531

    
2532
				
2533
			--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')))
2534
			--BEGIN
2535
			--	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
2536
			--	RETURN '-1'
2537
			--END
2538
			UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U',CREATE_DT = GETDATE() WHERE REQ_PAY_ID =@p_REQ_PAY_ID
2539
			UPDATE PL_REQUEST_PROCESS SET ROLE_USER ='GDDV' WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER ='PGD'
2540
			UPDATE PL_REQUEST_PROCESS SET ROLE_USER ='TPGD' WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER ='PPGD'
2541
			INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
2542
			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')
2543
			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))
2544
			BEGIN
2545
				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
2546
				RETURN '4'
2547
			END
2548
			ELSE
2549
			BEGIN
2550
				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
2551
				RETURN '4'
2552
			END
2553
			--SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
2554
			--RETURN '4'
2555
		END
2556
		-- FIX PHONG HO LOI LIEN QUAN DEN VIEC TAI KHOAN TAM UNG BI SAI
2557
		----DECLARE  @REQ_PAY_ID varchar(15), @l_REF_ID varchar(15)
2558
		----DECLARE cursorProduct CURSOR LOCAL FOR
2559
		----SELECT REQ_PAY_ID,REF_ID FROM TR_REQ_ADVANCE_PAYMENT A WHERE A.REQ_TYPE ='I'
2560
		----Open cursorProduct
2561
		----FETCH NEXT FROM cursorProduct INTO @REQ_PAY_ID, @l_REF_ID
2562
		----WHILE @@FETCH_STATUS = 0
2563
		----BEGIN
2564
		----   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
2565
		----FETCH NEXT FROM cursorProduct INTO  @REQ_PAY_ID, @l_REF_ID
2566
		----END
2567
-- END VALIDATE SEND APPROVE
2568

    
2569
	SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
2570
	RETURN '0'
2571
ABORT:
2572
BEGIN
2573
		ROLLBACK TRANSACTION
2574
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
2575
		RETURN '-1'
2576
End
2577

    
2578
GO
2579

    
2580
ALTER PROCEDURE [dbo].[TR_REQ_PAYMENT_Upd]
2581
@p_REQ_PAY_ID	varchar(15)= NULL,
2582
@p_REQ_PAY_CODE	varchar(50)	= NULL,
2583
@p_REQ_DT VARCHAR(20)= NULL,
2584
@p_BRANCH_ID	varchar(15)	= NULL,
2585
@p_DEP_ID	varchar(15)	= NULL,
2586
@p_REQ_REASON	nvarchar(MAX)	= NULL,
2587
@p_REQ_TYPE	varchar(15)	= NULL,
2588
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
2589
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
2590
@p_REF_ID	varchar(15)	= NULL,
2591
@p_RECEIVER_PO	nvarchar(250)	= NULL,
2592
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
2593
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
2594
@p_REQ_AMT	decimal(18, 2)	= NULL,
2595
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
2596
@p_MAKER_ID	varchar(15)	= NULL,
2597
@p_CREATE_DT	varchar(25)	= NULL,
2598
@p_EDITOR_ID	varchar(15)	= NULL,
2599
@p_AUTH_STATUS	varchar(1)	= NULL,
2600
@p_CHECKER_ID	varchar(15)	= NULL,
2601
@p_APPROVE_DT	varchar(25)	= NULL,
2602
@p_CREATE_DT_KT	varchar(25)	= NULL,
2603
@p_MAKER_ID_KT	varchar(15)	= NULL,
2604
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
2605
@p_CHECKER_ID_KT	varchar(1)	= NULL,
2606
@p_APPROVE_DT_KT  varchar(25)= null,
2607
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
2608
@p_BRANCH_CREATE	varchar(15)	= NULL,
2609
@p_NOTES	varchar(15)	= NULL,
2610
@p_RECORD_STATUS	varchar(1)	= NULL,
2611
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
2612
@p_TRANSFER_DT	varchar(25)	= NULL,
2613
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
2614
@p_PROCESS	varchar(15)	= NULL,
2615
@p_PAY_PHASE NVARCHAR(255) = NULL,
2616
@p_RATE	DECIMAL(18,2) = 0,
2617
@p_IS_PERIOD VARCHAR(5) = NULL,
2618
@p_AMT_PAY decimal(18, 0) = NULL,
2619
@p_XMP_TEMP XML = NULL,
2620
@p_XMP_TEMP_2 XML = NULL,
2621
@p_XMP_TEMP_METHOD XML = NULL,
2622
@p_XMP_TEMP_BUDGET XML = NULL,
2623
@p_XMP_TEMP_SERVICE XML = NULL,
2624
@p_XMP_TEMP_ATTACH XML = NULL,
2625
@p_XMP_TEMP_INVOICE XML = NULL,
2626
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
2627
@p_XMP_TEMP_PO XML = NULL,
2628
@p_XMP_TEMP_SCHEDULE XML = NULL,
2629
@p_XMP_TEMP_PERIOD XML = NULL,
2630
@p_XMP_ADVANCE_DT XML = NULL,
2631
--doanptt 15/02/2022
2632
@p_XMP_TEMP_PAY_JOB XML = NULL,
2633
@p_XMP_TEMP_PAY_JOB_DT XML = NULL,
2634
--doanptt 17/02/2022
2635
@p_XMP_TEMP_PAY_DRIVE XML = NULL,
2636
@p_XMP_TEMP_PAY_DRIVE_DT XML = NULL,
2637
@p_XMP_TEMP_PAY_REQUEST_CAR XML = NULL,
2638
@p_XMP_TEMP_TEMPLATE_REQUEST_DOC XML = NULL
2639

    
2640
AS
2641
-- BEGIN VALIDATE UPDATE
2642
	IF(@p_XMP_TEMP_TEMPLATE_REQUEST_DOC.exist('*') = 0)
2643
	BEGIN
2644
		SET @p_XMP_TEMP_TEMPLATE_REQUEST_DOC = NULL;
2645
	END
2646

    
2647
	IF(@p_TYPE_FUNCTION <> 'SEND')
2648
	BEGIN
2649
		IF(NOT EXISTS(SELECT * FROM TR_REQ_PAYMENT where MAKER_ID = @p_MAKER_ID ))
2650
		BEGIN
2651
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Bạn không được phép cập nhật phiếu đề nghị thanh toán này. Chỉ người tạo phiếu mới được cập nhật phiếu' ErrorDesc
2652
			RETURN '-1'
2653
		END
2654
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS ='U'))
2655
		BEGIN
2656
			SELECT '-1' Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đã được gửi phê duyệt thành công trước đó. Bạn không được quyền chỉnh sửa' ErrorDesc
2657
			RETURN '-1'
2658
		END
2659
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND  PROCESS IS NOT NULL AND PROCESS <>''))
2660
		BEGIN
2661
			SELECT '-1' Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đã được kí xác nhận từ các cấp. Bạn không được quyền chỉnh sửa' ErrorDesc
2662
			RETURN '-1'
2663
		END
2664
		IF (@p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE ='')
2665
		BEGIN
2666
			SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu không được phép để trống' ErrorDesc
2667
			RETURN '-1'
2668
		END
2669
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS <> 'E' AND AUTH_STATUS <> 'R' AND ISNULL(AUTH_STATUS, '') <> ''))
2670
		BEGIN
2671
			SELECT '-1' Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đã được kí xác nhận từ các cấp. Bạn không được quyền chỉnh sửa' ErrorDesc
2672
			RETURN '-1'
2673
		END
2674
	END
2675
	IF(@p_TYPE_FUNCTION = 'SEND')
2676
	BEGIN
2677
		IF(NOT EXISTS(SELECT * FROM TR_REQ_PAYMENT where MAKER_ID = @p_MAKER_ID ))
2678
		BEGIN
2679
			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
2680
			RETURN '-1'
2681
		END
2682
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS ='U'))
2683
		BEGIN
2684
			SELECT '-1' Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đã được gửi phê duyệt thành công trước đó. Bạn không được quyền chỉnh sửa' ErrorDesc
2685
			RETURN '-1'
2686
		END
2687
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS = 'A'))
2688
		BEGIN
2689
			SELECT '-1' Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đã được phê duyệt. Bạn không được quyền chỉnh sửa' ErrorDesc
2690
			RETURN '-1'
2691
		END
2692
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'A'))
2693
		BEGIN
2694
			SELECT '-1' Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đã được kiểm soát viên phê duyệt. Bạn không được quyền chỉnh sửa' ErrorDesc
2695
			RETURN '-1'
2696
		END
2697
		IF (ISNULL(@p_REQ_PAY_CODE, '')='' OR ISNULL(@p_REQ_TYPE, '')='' OR ISNULL(@p_MAKER_ID, '')='' OR ISNULL(@p_BRANCH_ID, '')='' OR ISNULL(@p_DEP_ID, '')='' OR ISNULL(@p_REQ_REASON, '')='')
2698
		BEGIN
2699
			SELECT '-1' Result, '' REQ_PAY_ID, N'Các trường dữ liệu không được phép để trống: mã số phiếu, loại thanh toán, người đề nghị thanh toán, đơn vị đề nghị thanh toán, phòng ban đề nghị, số tiền thanh toán, lý do thanh toán. Vui lòng kiểm tra lại thông tin' ErrorDesc
2700
			RETURN '-1'
2701
		END
2702
		IF(@p_MAKER_ID <> (SELECT TOP 1 MAKER_ID FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID))
2703
		BEGIN
2704
			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ị thanh toán của người khác'  ErrorDesc
2705
			RETURN '-1'
2706
		END
2707
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID  =@p_REQ_PAY_ID AND AUTH_STATUS='U'))
2708
		BEGIN
2709
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đã được gửi phê duyệt trước đó! Vui lòng đợi các cấp phê duyệt' ErrorDesc
2710
			RETURN '-1'
2711
		END
2712
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT where AUTH_STATUS <> 'E' AND ISNULL(AUTH_STATUS, '') <> '' AND REQ_PAY_ID = @p_REQ_PAY_ID ))
2713
		BEGIN
2714
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đã được gửi phê duyệt trước đó hoặc đang bị từ chối! Vui lòng kiểm tra lại thông tin' ErrorDesc
2715
			RETURN '-1'
2716
		END
2717
	END
2718
	
2719
-- END VALIDATE UPDATE
2720

    
2721
		--IF EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_CODE = @p_REQ_PAY_CODE AND REQ_PAY_ID <> @p_REQ_PAY_ID)
2722
		--BEGIN
2723
		--	SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu đã tồn tại trong hệ thống' ErrorDesc
2724
		--	RETURN '-1'
2725
		--END
2726
	-- doanppt 
2727
	IF(@p_REQ_TYPE = 'D')
2728
	BEGIN
2729
		DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID = @p_REQ_PAY_ID
2730
		DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID = @p_REQ_PAY_ID
2731
		DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
2732
		DELETE FROM TR_REQ_PAYMENT_DT WHERE PAY_ID = @p_REQ_PAY_ID
2733
	END
2734
	IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
2735
	BEGIN
2736
		DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
2737
		DELETE FROM TR_REQ_PAYMENT_DT WHERE PAY_ID = @p_REQ_PAY_ID
2738
	END
2739
	IF(@p_REQ_TYPE = 'P' AND (@p_IS_PERIOD='N' OR @p_IS_PERIOD IS NULL))
2740
	BEGIN
2741
		DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID = @p_REQ_PAY_ID
2742
		DELETE FROM TR_REQ_PAYMENT_DT WHERE PAY_ID = @p_REQ_PAY_ID
2743
	END
2744
	DECLARE @ROLE_KI_NHAY VARCHAR(50)
2745
	SET  @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER WHERE TLNANME =@p_TRASFER_USER_RECIVE)
2746
	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'))
2747
	BEGIN
2748
		PRINT @ROLE_KI_NHAY
2749
	END
2750
	ELSE
2751
	BEGIN
2752
		SET @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
2753
		IF(@ROLE_KI_NHAY IS NULL OR @ROLE_KI_NHAY ='')
2754
		BEGIN
2755
				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))
2756
		END
2757
	END
2758
	--SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
2759
	IF(@ROLE_KI_NHAY IS NOT NULL AND @ROLE_KI_NHAY <> '' AND @ROLE_KI_NHAY IN ('TP','GDDV','KTT','TPTC','TC','TPGD'))
2760
	BEGIN
2761
		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
2762
		RETURN '-1'
2763
	END
2764

    
2765
	BEGIN TRANSACTION
2766
	-- DECLARE
2767
		DECLARE @VAT decimal(18, 0) =NULL, @TRANS_NO nvarchar(50)=NULL, @TRANS_DT VARCHAR(20)=NULL,@INVOICE_SIGN nvarchar(50) = NULL,@INVOICE_NO_SIGN nvarchar(50) = NULL,@INVOICE_NO nvarchar(50) = NULL,
2768
		@INVOICE_DT VARCHAR(20) = NULL, @SELLER nvarchar(500) = NULL,@TAX_NO nvarchar(15) = NULL,@GOODS_NAME nvarchar(500) = NULL, @PRICE decimal(18, 0) = NULL,@TAX decimal(18, 0) = NULL,
2769
		@NOTES NVARCHAR(MAX) = NULL,@VAT_RATE DECIMAL(18,0),@ACC_NO VARCHAR(50),@ACC_NAME NVARCHAR(250),@ISSUED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20),@CURRENCY VARCHAR(15)= NULL,@RATE DECIMAL(18,2), 
2770
		@TYPE_VAT VARCHAR(15),@TYPE_FUNC VARCHAR(15), @PAY_ADV_ID VARCHAR(15),@TYPE_TRANSFER VARCHAR(15),@REQ_PAY_ADV_CODE VARCHAR(15),@REASON NVARCHAR(1000),
2771
		@REF_TYPE VARCHAR(15), @TRN_DATE VARCHAR(15), @AMT_ADVANCED DECIMAL(18,0),@AMT_DO DECIMAL(18,0), @AMT_REMAIN DECIMAL(18,0),@AMT_PAY DECIMAL(18,0),@AMT_USE DECIMAL(18,2),@AMT_REVERT DECIMAL(18,2), 
2772
		@AMT_ADD DECIMAL(18,2), @TOTAL_SCHEDULE_AMT DECIMAL(18,0) =0
2773
		DECLARE @INDEX_AD INT =0, @INDEX_SV INT =0,@INDEX INT =0, @INDEX_IV INT =0, @INDEX_NS INT =0, @INDEX_INVOICE INT = 0, @INDEX_METHOD INT = 0
2774
		DECLARE @hdoc INT, @hDoc2 INT, @hDocMeThod INT, @hdocBudget INT, @hdocService INT, @hdocAttach INT, @hdocInvoice INT, @hdocPO INT, @hdocSchedule INT, @hdocPeriod INT, @hdocRecurring INT, @hdocJob INT, 
2775
		@hdocJobDT INT, @hdocDrive INT, @hdocDriveDT INT, @hdocRequestCar INT, @hdocTemplateRequestDoc INT
2776
	-- EXEC XMP
2777
		EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
2778
		EXEC sp_xml_preparedocument @hDoc2 OUTPUT, @p_XMP_TEMP_2;
2779
		EXEC sp_xml_preparedocument @hDocMeThod OUTPUT, @p_XMP_TEMP_METHOD;
2780
		EXEC sp_xml_preparedocument @hdocBudget OUTPUT, @p_XMP_TEMP_BUDGET;
2781
		EXEC sp_xml_preparedocument @hdocService OUTPUT, @p_XMP_TEMP_SERVICE;
2782
		EXEC sp_xml_preparedocument @hdocAttach OUTPUT, @p_XMP_TEMP_ATTACH;
2783
		EXEC sp_xml_preparedocument @hdocInvoice OUTPUT, @p_XMP_TEMP_INVOICE;
2784
		EXEC sp_xml_preparedocument @hdocPO OUTPUT, @p_XMP_TEMP_PO;
2785
		EXEC sp_xml_preparedocument @hdocSchedule OUTPUT, @p_XMP_TEMP_SCHEDULE;
2786
		EXEC sp_xml_preparedocument @hdocPeriod OUTPUT, @p_XMP_TEMP_PERIOD;
2787
		EXEC sp_xml_preparedocument @hdocRecurring OUTPUT, @p_XMP_ADVANCE_DT;
2788
		--doanptt 15/02/2022
2789
		-- THONG TIN THANH TOAN CHI PHI DI CONG TAC
2790
		EXEC sp_xml_preparedocument @hdocJob OUTPUT, @p_XMP_TEMP_PAY_JOB;
2791
		-- CHI TIET CHI PHI DI CONG TAC
2792
		EXEC sp_xml_preparedocument @hdocJobDT OUTPUT, @p_XMP_TEMP_PAY_JOB_DT;
2793
		--doanptt 17/02/2022
2794
		-- THONG TIN THANH TOAN CHI PHI VAN HANH XE
2795
		EXEC sp_xml_preparedocument @hdocDrive OUTPUT, @p_XMP_TEMP_PAY_DRIVE;
2796
		-- BANG KE CHI PHI SU DUNG NHIEN LIEU
2797
		EXEC sp_xml_preparedocument @hdocDriveDT OUTPUT, @p_XMP_TEMP_PAY_DRIVE_DT;
2798
		-- PHIEU YEU CAU XE
2799
		EXEC sp_xml_preparedocument @hdocRequestCar OUTPUT, @p_XMP_TEMP_PAY_REQUEST_CAR;
2800
		-- TO TRINH NGHIEP VU
2801
		EXEC sp_xml_preparedocument @hdocTemplateRequestDoc OUTPUT, @p_XMP_TEMP_TEMPLATE_REQUEST_DOC;
2802

    
2803
-- BEGIN THONG TIN LUOI MASTER
2804
		UPDATE TR_REQ_PAYMENT 
2805
		SET REF_ID = @p_REF_ID, DEP_ID= @p_DEP_ID,REQ_REASON = @p_REQ_REASON, REQ_PAY_TYPE = @p_REQ_PAY_TYPE,REQ_AMT = @p_REQ_AMT, NOTES= @p_NOTES, REQ_TYPE= @p_REQ_TYPE,REQ_DESCRIPTION = @p_REQ_DESCRIPTION,
2806
		RECEIVER_PO = @p_RECEIVER_PO,TRANSFER_MAKER =@p_TRANSFER_MAKER, REQ_TEMP_AMT=@p_REQ_TEMP_AMT,REQ_ENTRIES = @P_REQ_ENTRIES,BRANCH_ID = @p_BRANCH_ID, 
2807
		AUTH_STATUS='E', IS_PERIOD =@p_IS_PERIOD, TRASFER_USER_RECIVE =@p_TRASFER_USER_RECIVE, RATE = @p_RATE, AMT_PAY = @p_AMT_PAY, AUTH_STATUS_KT = NULL, REQ_TYPE_CURRENCY = @p_REQ_TYPE_CURRENCY
2808
		WHERE REQ_PAY_ID =@p_REQ_PAY_ID
2809
		-- BUA DOAN NAY DE XU LY LOI KHONG TIM DUOC NHA CUNG CAP
2810
		UPDATE CM_SUPPLIER SET ACC_NUM ='' WHERE ACC_NUM IS NULL
2811
		UPDATE CM_SUPPLIER SET ACC_NUM_OUT ='' WHERE ACC_NUM_OUT IS NULL
2812
		--
2813
		UPDATE TR_REQ_PAY_SERVICE 
2814
		SET REQ_PAY_ID= 'XX'+ RIGHT(REQ_PAY_ID,13)
2815
		WHERE REQ_PAY_ID NOT IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE REQ_TYPE IN ('I','D'))
2816
		--
2817
		UPDATE TR_REQ_PAY_SCHEDULE 
2818
		SET REQ_PAY_ID= 'XX'+ RIGHT(REQ_PAY_ID,13)
2819
		WHERE REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE REQ_TYPE ='P' AND IS_PERIOD IS NOT NULL AND IS_PERIOD <>'' AND IS_PERIOD='Y') AND TRN_TYPE ='PAY' AND REQ_PAY_ID =@p_REQ_PAY_ID
2820
		IF @@Error <> 0 GOTO ABORT
2821
-- END THONG TIN LUOI MASTER
2822

    
2823
-- BEGIN THONG TIN HOA DON DINH KEM
2824
		DECLARE @PDN_TT_LIST_INVOICE NVARCHAR(1000)
2825
		DELETE FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
2826
		DECLARE XmlData CURSOR FOR SELECT * FROM OPENXML(@hdocInvoice, '/Root/XmlData', 2)
2827
		WITH(TRANS_NO nvarchar(50),TRANS_DT VARCHAR(20),INVOICE_SIGN nvarchar(50),INVOICE_NO_SIGN nvarchar(50), INVOICE_NO nvarchar(50),INVOICE_DT VARCHAR(20) ,SELLER nvarchar(500),TAX_NO nvarchar(15), 
2828
		GOODS_NAME nvarchar(500), PRICE decimal(18,0),TAX decimal(18, 0),VAT decimal(18,0),NOTE NVARCHAR(MAX),VAT_RATE decimal(18,2),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),TYPE_VAT VARCHAR(15),TYPE_FUNC VARCHAR(15))
2829
		OPEN XmlData;
2830
		FETCH NEXT FROM XmlData INTO @TRANS_NO , @TRANS_DT  ,@INVOICE_SIGN ,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,
2831
		@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@TYPE_VAT,@TYPE_FUNC
2832
		WHILE @@fetch_status=0 
2833
		BEGIN
2834
		-- SET
2835
			SET @INDEX_IV = @INDEX_IV +1
2836
		-- BEGIN VALIDATE
2837
			IF(@p_TYPE_FUNCTION ='SEND') 
2838
			BEGIN
2839
				IF(LEN(@INVOICE_NO) < 1)
2840
				BEGIN
2841
					ROLLBACK TRANSACTION
2842
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Hóa đơn đính kèm, dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số hóa đơn '+ @INVOICE_NO +N' không được để trống' ErrorDesc
2843
					RETURN '-1'
2844
				END	
2845

    
2846
				IF(LEN(@INVOICE_NO) > 8)
2847
				BEGIN
2848
					ROLLBACK TRANSACTION
2849
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Hóa đơn đính kèm, dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số hóa đơn '+ @INVOICE_NO +N' phải bé hơn 9 ký tự' ErrorDesc
2850
					RETURN '-1'
2851
				END
2852
				
2853
				SET @PDN_TT_LIST_INVOICE = (	SELECT STUFF	(	(	SELECT '; ' + DTA.REQ_PAY_CODE 
2854
																			FROM TR_REQ_PAYMENT DTA 
2855
																			WHERE REQ_PAY_ID IN (	SELECT REQ_PAY_ID 
2856
																									FROM TR_REQ_PAY_INVOICE 
2857
																									WHERE INVOICE_NO =@INVOICE_NO 
2858
																									AND INVOICE_NO_SIGN = @INVOICE_NO_SIGN 
2859
																									AND INVOICE_SIGN = @INVOICE_SIGN 
2860
																									AND TAX_NO =@TAX_NO 
2861
																									AND TAX =@TAX 
2862
																									AND AUTH_STATUS <>'D' 
2863
																									AND TYPE_FUNC ='HC' 
2864
																									AND REQ_PAY_ID IN	(	SELECT REQ_PAY_ID 
2865
																															FROM TR_REQ_PAYMENT 
2866
																															WHERE AUTH_STATUS NOT IN ('E','D') 
2867
																															AND MAKER_ID NOT IN	(	SELECT TLNANME 
2868
																																					FROM TL_USER 
2869
																																					WHERE RoleName ='DISABLE' 
2870
																																					OR AUTH_STATUS ='U'
2871
																																				)
2872
																														)
2873
																								)
2874
																			FOR XML PATH(''), TYPE
2875
																		).value('.[1]', 'nvarchar(max)'), 1, 2, ''
2876
																	)
2877
												)
2878

    
2879
				IF	(	EXISTS	(	SELECT * 
2880
										FROM TR_REQ_PAY_INVOICE 
2881
										WHERE INVOICE_NO = @INVOICE_NO 
2882
										AND INVOICE_NO_SIGN = @INVOICE_NO_SIGN 
2883
										AND INVOICE_SIGN =@INVOICE_SIGN 
2884
										AND TAX_NO = @TAX_NO 
2885
										AND TAX =@TAX 
2886
										AND TYPE_FUNC ='HC' 
2887
										AND AUTH_STATUS <>'D' AND 
2888
										REQ_PAY_ID IN	(	SELECT REQ_PAY_ID 
2889
															FROM TR_REQ_PAYMENT 
2890
															WHERE AUTH_STATUS NOT IN ('E','D') 
2891
															AND MAKER_ID NOT IN	(	SELECT TLNANME 
2892
																					FROM TL_USER 
2893
																					WHERE RoleName ='DISABLE' 
2894
																					OR AUTH_STATUS ='U'
2895
																				)
2896
														)
2897
								)
2898
					)
2899
				BEGIN
2900
					ROLLBACK TRANSACTION
2901
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số hóa đơn '+ @INVOICE_NO +N' đã tồn tại trong hệ thống. Danh sách những phiếu đề nghị thanh toán đã sử dụng: '+ ISNULL(@PDN_TT_LIST_INVOICE,'') ErrorDesc
2902
					RETURN '-1'
2903
				END
2904
				
2905
				IF(@GOODS_NAME IS NULL OR @GOODS_NAME ='')
2906
				BEGIN
2907
					ROLLBACK TRANSACTION
2908
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Tên mặt hàng trong lưới hóa đơn không được để trống' ErrorDesc
2909
					RETURN '-1'
2910
				END
2911
				-- TÊN NGƯỜI BÀN
2912
				IF(@SELLER IS NULL OR @SELLER ='')
2913
				BEGIN
2914
					ROLLBACK TRANSACTION
2915
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Người bán trong lưới hóa đơn không được để trống' ErrorDesc
2916
					RETURN '-1'
2917
				END
2918

    
2919
				IF(@TAX_NO IS NULL OR @TAX_NO ='')
2920
				BEGIN
2921
					ROLLBACK TRANSACTION
2922
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Mã số thuế trong lưới hóa đơn không được để trống' ErrorDesc
2923
					RETURN '-1'
2924
				END
2925
				-- NGÀY HÓA ĐƠN
2926
				IF(@INVOICE_DT IS NULL OR @INVOICE_DT ='')
2927
				BEGIN
2928
					ROLLBACK TRANSACTION
2929
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Ngày hóa đơn trong lưới hóa đơn không được để trống' ErrorDesc
2930
					RETURN '-1'
2931
				END
2932
				-- SỐ HÓA ĐƠN
2933
				IF(@INVOICE_NO IS NULL OR @INVOICE_NO ='')
2934
				BEGIN
2935
					ROLLBACK TRANSACTION
2936
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số hóa đơn trong lưới hóa đơn không được để trống' ErrorDesc
2937
					RETURN '-1'
2938
				END
2939
				-- KÍ HIỆU HÓA ĐƠN
2940
				IF(@INVOICE_NO_SIGN IS NULL OR @INVOICE_NO_SIGN ='')
2941
				BEGIN
2942
					ROLLBACK TRANSACTION
2943
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Kí hiệu số hóa đơn trong lưới hóa đơn không được để trống' ErrorDesc
2944
					RETURN '-1'
2945
				END
2946
				-- KÍ HIỆU HÓA ĐƠN
2947
				IF(@PRICE IS NULL OR @PRICE =0)
2948
				BEGIN
2949
					ROLLBACK TRANSACTION
2950
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số tiền hóa đơn trong lưới hóa đơn không được để trống' ErrorDesc
2951
					RETURN '-1'
2952
				END
2953
			END
2954
		-- END VALIDATE
2955

    
2956
			DECLARE @p_REQ_INV_ID VARCHAR(15);
2957
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_INVOICE', @p_REQ_INV_ID OUT;
2958
			IF @p_REQ_INV_ID='' OR @p_REQ_INV_ID IS NULL GOTO ABORT;
2959
			INSERT INTO TR_REQ_PAY_INVOICE(REQ_PAYDT_ID,REQ_PAY_ID,TRANS_NO,TRANS_DT,INVOICE_SIGN,INVOICE_NO,INVOICE_DT,SELLER,TAX_NO,GOODS_NAME,PRICE,TAX,VAT,NOTE, MAKER_ID,CREATE_DT,EDITOR_ID,AUTH_STATUS,
2960
			CHECKER_ID,APPROVE_DT, CREATE_DT_KT,MAKER_ID_KT,AUTH_STATUS_KT,CHECKER_ID_KT,APPROVE_DT_KT,RECORD_STATUS,INVOICE_NO_SIGN,VAT_RATE,CURRENCY,RATE,PRICE_KT,VAT_KT,TOTAL_AMT_KT,TYPE_VAT,TYPE_FUNC) 
2961
			VALUES (@p_REQ_INV_ID,@p_REQ_PAY_ID , @TRANS_NO , NULL  ,@INVOICE_SIGN ,@INVOICE_NO ,CONVERT(DATE,@INVOICE_DT,103) ,UPPER(([dbo].[RemoveVietNamese](@SELLER))),@TAX_NO ,UPPER(([dbo].[RemoveVietNamese](@GOODS_NAME))) ,
2962
			@PRICE ,@TAX,@VAT,@NOTES, @p_MAKER_ID,GETDATE(),NULL,'U',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1',@INVOICE_NO_SIGN,@VAT_RATE, 'VND' , 1,@PRICE,@VAT,@PRICE+@VAT,@TYPE_VAT,@TYPE_FUNC)
2963
		IF @@error<>0 GOTO ABORT;
2964
		FETCH NEXT FROM XmlData
2965
		INTO @TRANS_NO , @TRANS_DT,@INVOICE_SIGN,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@TYPE_VAT,@TYPE_FUNC
2966
		END;
2967
		CLOSE XmlData;
2968
		DEALLOCATE XmlData;
2969
-- END THONG TIN HOA DON DINH KEM
2970
-- BEGIN THONG TIN HANG MUC NGAN SACH VA CHI PHI
2971
	-- DELETE
2972
		DELETE FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID=@p_REQ_PAY_ID
2973
		DELETE FROM TR_REQ_BUDGET_MONTH_LIMIT_DETAIL WHERE REQ_PAY_ID=@p_REQ_PAY_ID
2974
		DELETE FROM TR_REQ_BUDGET_YEAR_LIMIT_DETAIL WHERE REQ_PAY_ID=@p_REQ_PAY_ID
2975
	-- DECLARE
2976
		DECLARE @TRADE_ID varchar(15),@GD_ID varchar(15), @GD_CODE varchar(15), @AMT_APP decimal(18,2),@AMT_EXE decimal(18,2), @AMT_REMAIN_GD decimal(18,2),@TYPE_COST VARCHAR(15), @FR_LEVEL INT ,
2977
		@TO_LEVEL INT, @MONTH_RATE VARCHAR(4), @YEAR_RATE VARCHAR(4), @BUDGET_TYPE VARCHAR(20), @BRANCH_ID VARCHAR(20), @DEP_ID VARCHAR(20), @MONTH VARCHAR(20), @YEAR VARCHAR(20),
2978
		@BRANCH_TYPE VARCHAR(20), @KHOI_ID VARCHAR(20), @TLNAME VARCHAR(20), @RoleName VARCHAR(20), @BRANCH_TAKE_COST_ID VARCHAR(20), @DEP_TAKE_COST_ID VARCHAR(20), @KHOI_TAKE_COST_ID VARCHAR(20), @BRANCH_KIND VARCHAR(20)
2979
	-- DECLARE CURSOR
2980
		DECLARE XmlDataGood CURSOR FOR SELECT * FROM OPENXML(@hdocBudget, 'Root/XmlDataGood',2) 
2981
		WITH(TRADE_ID varchar(15),GD_ID varchar(15),GD_CODE 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), 
2982
		REASON NVARCHAR(1000),TYPE_COST VARCHAR(15), FR_LEVEL INT ,TO_LEVEL INT, MONTH_RATE VARCHAR(4), YEAR_RATE VARCHAR(4), BUDGET_TYPE VARCHAR(20),  BRANCH_ID VARCHAR(20), DEP_ID VARCHAR(20), MONTH VARCHAR(20), YEAR VARCHAR(20),
2983
		BRANCH_TYPE VARCHAR(20), KHOI_ID VARCHAR(20), TLNAME VARCHAR(20), RoleName VARCHAR(20), BRANCH_TAKE_COST_ID VARCHAR(20), DEP_TAKE_COST_ID VARCHAR(20), KHOI_TAKE_COST_ID VARCHAR(20), BRANCH_KIND VARCHAR(20))
2984
	-- BEGIN CURSOR THONG TIN HANG MUC NGAN SACH VA CHI PHI
2985
		OPEN XmlDataGood		
2986
		FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID , @GD_CODE, @AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,
2987
		@RATE,@REASON,@TYPE_COST, @FR_LEVEL,@TO_LEVEL, @MONTH_RATE, @YEAR_RATE, @BUDGET_TYPE, @BRANCH_ID , @DEP_ID, @MONTH, @YEAR, 
2988
		@BRANCH_TYPE, @KHOI_ID, @TLNAME, @RoleName, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @BRANCH_KIND
2989
		WHILE @@fetch_status=0 BEGIN
2990
		-- SET
2991
			SET @INDEX_NS = @INDEX_NS +1
2992

    
2993
			DECLARE @p_BUDGET_ID VARCHAR(15);
2994
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
2995
			IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
2996

    
2997
			IF(@BUDGET_TYPE = 'nam')
2998
			BEGIN
2999
				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, MONTH_RATE, YEAR_RATE, BUDGET_TYPE, BRANCH_ID ,DEP_ID, TLNAME, ROLENAME, BRANCH_TAKE_COST_ID, DEP_TAKE_COST_ID, KHOI_TAKE_COST_ID,BRANCH_KIND) 
3000
				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(), @p_REQ_TYPE_CURRENCY , @p_RATE,@REASON,@TYPE_COST, @FR_LEVEL,@TO_LEVEL, 'M' + CONVERT(VARCHAR(20), MONTH(GETDATE())), CONVERT(VARCHAR(20), YEAR(GETDATE())), @BUDGET_TYPE, @BRANCH_ID, @DEP_ID, @TLNAME, @RoleName, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID,@BRANCH_KIND)
3001
			END
3002
			ELSE
3003
			BEGIN
3004
				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, MONTH_RATE, YEAR_RATE, BUDGET_TYPE, BRANCH_ID ,DEP_ID, TLNAME, ROLENAME, BRANCH_TAKE_COST_ID, DEP_TAKE_COST_ID, KHOI_TAKE_COST_ID,BRANCH_KIND) 
3005
				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(), @p_REQ_TYPE_CURRENCY , @p_RATE,@REASON,@TYPE_COST, @FR_LEVEL,@TO_LEVEL,  @MONTH_RATE, @YEAR_RATE, @BUDGET_TYPE, @BRANCH_ID, @DEP_ID, @TLNAME, @RoleName, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID,@BRANCH_KIND)
3006
			END
3007

    
3008
			
3009
			
3010
			IF @@error<>0 GOTO ABORT;
3011
		-- BEGIN VALIDATE
3012
			IF(@p_TYPE_FUNCTION ='SEND')
3013
			BEGIN
3014
				IF(ISNULL(@AMT_EXE,0) =0)
3015
				BEGIN
3016
					ROLLBACK TRANSACTION
3017
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Số tiền sử dụng thực tế phải lớn hơn không.' ErrorDesc
3018
					RETURN '-1'
3019
				END
3020
				/*
3021
				IF((@AMT_EXE  > @AMT_REMAIN_GD) AND ((SELECT GD_TYPE_ID FROM CM_GOODS WHERE GD_ID =@GD_ID) ='NS'))
3022
				BEGIN
3023
						ROLLBACK TRANSACTION
3024
						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
3025
						RETURN '-1'
3026
				END
3027
				*/
3028
				
3029
				IF(NOT EXISTS(SELECT * FROM PL_IMPORT_DT WHERE TRADE_ID =@TRADE_ID AND IMP_YEAR =YEAR(GETDATE()))
3030
				AND NOT EXISTS (SELECT * FROM PL_MASTER WHERE PLAN_ID =(SELECT TOP 1 PLAN_ID FROM PL_TRADEDETAIL WHERE TRADE_ID =@TRADE_ID) AND YEAR =YEAR(GETDATE())))
3031
				BEGIN
3032
					ROLLBACK TRANSACTION
3033
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Ngân sách sử dụng phải chọn lại ngân sách của năm hiện tại. Không được phép sử dụng ngân sách năm cũ.' ErrorDesc
3034
					RETURN '-1'
3035
				END
3036

    
3037
--doanptt 180622 ghi log NSCP
3038
-- BEGIN CHECK HAN MUC CHI PHI THEO NAM
3039
				IF(@BUDGET_TYPE = 'nam')
3040
				BEGIN
3041
					SET @MONTH_RATE = 'M' + CONVERT(VARCHAR(20), MONTH(GETDATE()));
3042

    
3043
					IF(@YEAR_RATE = '' OR @YEAR_RATE IS NULL)
3044
					BEGIN
3045
						ROLLBACK TRANSACTION
3046
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(NVARCHAR(5),@INDEX_NS)+ N': Năm định mức không được để trống' ErrorDesc
3047
						RETURN '-1'
3048
					END
3049

    
3050
					IF(@BRANCH_TAKE_COST_ID = '' OR @BRANCH_TAKE_COST_ID IS NULL)
3051
					BEGIN
3052
						ROLLBACK TRANSACTION
3053
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(NVARCHAR(5),@INDEX_NS)+ N': Đơn vị chịu chi phí không được để trống' ErrorDesc
3054
						RETURN '-1'
3055
					END
3056

    
3057
					IF(ISNULL(@YEAR_RATE, '') <> CONVERT(VARCHAR(20), YEAR(GETDATE())))
3058
					BEGIN
3059
						ROLLBACK TRANSACTION
3060
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(NVARCHAR(5),@INDEX_NS)+ N': Năm định mức không giống với năm hiện tại' ErrorDesc
3061
						RETURN '-1'
3062
					END
3063

    
3064
					DECLARE @l_BUDGET_LIMIT_YEAR_DETAIL_ID VARCHAR(15);
3065
					EXEC SYS_CodeMasters_Gen 'BUDGET_LIMIT_YEAR_DETAIL', @l_BUDGET_LIMIT_YEAR_DETAIL_ID OUT;
3066

    
3067
					IF(@MONTH_RATE = 'M1')
3068
					BEGIN
3069
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID, DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3070
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @YEAR_RATE, @AMT_EXE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND, @p_BUDGET_ID)
3071
					END
3072
					IF(@MONTH_RATE = 'M2')
3073
					BEGIN
3074
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3075
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @YEAR_RATE, 0, @AMT_EXE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND, @p_BUDGET_ID)
3076
					END
3077
					IF(@MONTH_RATE = 'M3')
3078
					BEGIN
3079
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3080
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @YEAR_RATE, 0, 0, @AMT_EXE, 0, 0, 0, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND, @p_BUDGET_ID)
3081
					END
3082
					IF(@MONTH_RATE = 'M4')
3083
					BEGIN
3084
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3085
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @YEAR_RATE,0,0,0, @AMT_EXE, 0, 0, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND, @p_BUDGET_ID)
3086
					END
3087
					IF(@MONTH_RATE = 'M5')
3088
					BEGIN
3089
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3090
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @YEAR_RATE, 0, 0, 0, 0, @AMT_EXE, 0, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND, @p_BUDGET_ID)
3091
					END
3092
					IF(@MONTH_RATE = 'M6')
3093
					BEGIN
3094
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID, DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5,	 M6,   M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3095
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName,	@YEAR_RATE, 0, 0, 0, 0, 0, @AMT_EXE, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1',			'A',		NULL,			NULL, @BRANCH_KIND, @p_BUDGET_ID)
3096
					END
3097
					IF(@MONTH_RATE = 'M7')
3098
					BEGIN
3099
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3100
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @YEAR_RATE, 0, 0, 0, 0, 0, 0, @AMT_EXE, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND, @p_BUDGET_ID)
3101
					END
3102
					IF(@MONTH_RATE = 'M8')
3103
					BEGIN
3104
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3105
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @YEAR_RATE, 0, 0, 0, 0, 0, 0, 0, @AMT_EXE, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND, @p_BUDGET_ID)
3106
					END
3107
					IF(@MONTH_RATE = 'M9')
3108
					BEGIN
3109
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3110
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @YEAR_RATE, 0, 0, 0, 0, 0, 0, 0, 0, @AMT_EXE, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND, @p_BUDGET_ID)
3111
					END
3112
					IF(@MONTH_RATE = 'M10')
3113
					BEGIN
3114
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3115
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @YEAR_RATE, 0, 0, 0, 0, 0, 0, 0, 0, 0, @AMT_EXE,0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND, @p_BUDGET_ID)
3116
					END
3117
					IF(@MONTH_RATE = 'M11')
3118
					BEGIN
3119
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3120
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @YEAR_RATE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @AMT_EXE, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND, @p_BUDGET_ID)
3121
					END
3122
					IF(@MONTH_RATE = 'M12')
3123
					BEGIN
3124
						INSERT INTO TR_REQ_BUDGET_YEAR_LIMIT_DETAIL(BUDGET_YEAR_LIMIT_DETAIL_ID,REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, KHOI_ID, TLNAME, ROLENAME, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3125
						VALUES(@l_BUDGET_LIMIT_YEAR_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @YEAR_RATE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @AMT_EXE, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND, @p_BUDGET_ID)
3126
					END
3127
					-- CHECK HẠN MỨC
3128
					
3129
					DECLARE @l_HAVE_BUDGET_LIMIT_YEAR decimal(18,0), @l_BUDGET_LIMIT_CURRENT_YEAR decimal(18,0) =0, @l_BUDGET_USED_CURRENT_YEAR decimal(18,0) =0 , @l_BRANCH_TYPE_YEAR VARCHAR(20) = '';
3130
					EXEC TR_BUDGET_CHECK_LIMIT_YEAR_Byid @GD_ID, @GD_CODE ,@BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @TLNAME, @RoleName, @MONTH_RATE, @YEAR_RATE, @BRANCH_KIND, @l_BUDGET_LIMIT_CURRENT_YEAR out, @l_BUDGET_USED_CURRENT_YEAR out
3131
					IF(@l_BUDGET_LIMIT_CURRENT_YEAR < @l_BUDGET_USED_CURRENT_YEAR)
3132
					BEGIN
3133
						ROLLBACK TRANSACTION
3134
						--SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(NVARCHAR(5),@INDEX_NS)+ N': Số tiền sử dụng ngân sách vượt quá định mức ngân sách. Hạn mức hiện tại là ' + FORMAT(@l_BUDGET_LIMIT_CURRENT_YEAR,'#,#', 'vi-VN') + N', số tiền đã sử dụng đến hiện tại là ' + FORMAT(@l_BUDGET_USED_CURRENT_YEAR,'#,#', 'vi-VN')  ErrorDesc
3135
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(NVARCHAR(5),@INDEX_NS)+ N': Số tiền sử dụng ngân sách vượt quá định mức ngân sách.' ErrorDesc
3136
						RETURN '-1'
3137
					END
3138
					
3139
				END-- END CHECK HAN MUC NGAN SACH CHI PHI THEO NAM
3140
				ELSE IF(@BUDGET_TYPE = 'thang')
3141
				BEGIN	-- BEGIN CHECK HAN MUC NGAN SACH CHI PHI THEO THANG 
3142
				-- BEGIN KIỂM TRA HẠN MỨC
3143
					DECLARE @l_HAVE_BUDGET_LIMIT decimal(18,0), @l_BUDGET_LIMIT_CURRENT decimal(18,0) =0, @l_BUDGET_USED_CURRENT decimal(18,0) =0 , @l_BRANCH_TYPE VARCHAR(20) = '', @l_IS_POTENTIAL VARCHAR(20) = '';
3144
					-- lấy loại đơn vị
3145
					SET @l_BRANCH_TYPE = (SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID = @BRANCH_ID)
3146
					SET @l_IS_POTENTIAL = (SELECT IS_POTENTIAL FROM CM_BRANCH WHERE BRANCH_ID = @BRANCH_ID)
3147
					IF(@l_BRANCH_TYPE = 'HS')
3148
					BEGIN
3149
						SET @l_BRANCH_TYPE = 'ho'
3150
					END
3151
					ELSE IF(@l_BRANCH_TYPE = 'CN' OR (@l_IS_POTENTIAL = 'Y' AND @l_BRANCH_TYPE = 'PGD'))
3152
					BEGIN
3153
						SET @l_BRANCH_TYPE = 'dvkd'
3154
					END
3155
					ELSE
3156
					BEGIN
3157
						SET @l_BRANCH_TYPE = 'pgd'
3158
					END
3159

    
3160
					DECLARE @l_BUDGET_LIMIT_MONTH_DETAIL_ID VARCHAR(15);
3161
					EXEC SYS_CodeMasters_Gen 'BUDGET_LIMIT_MONTH_DETAIL', @l_BUDGET_LIMIT_MONTH_DETAIL_ID OUT;
3162

    
3163
					IF(@MONTH_RATE = '' OR @MONTH_RATE IS NULL)
3164
					BEGIN
3165
						ROLLBACK TRANSACTION
3166
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(NVARCHAR(5),@INDEX_NS)+ N': Tháng định mức không được để trống' ErrorDesc
3167
						RETURN '-1'
3168
					END
3169
					IF(@YEAR_RATE = '' OR @YEAR_RATE IS NULL)
3170
					BEGIN
3171
						ROLLBACK TRANSACTION
3172
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(NVARCHAR(5),@INDEX_NS)+ N': Năm định mức không được để trống' ErrorDesc
3173
						RETURN '-1'
3174
					END
3175
					IF(@BRANCH_TAKE_COST_ID = '' OR @BRANCH_TAKE_COST_ID IS NULL)
3176
					BEGIN
3177
						ROLLBACK TRANSACTION
3178
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(NVARCHAR(5),@INDEX_NS)+ N': Đơn vị chịu chi phí không được để trống' ErrorDesc
3179
						RETURN '-1'
3180
					END
3181

    
3182
					IF(ISNULL(@YEAR_RATE, '') <> CONVERT(VARCHAR(20), YEAR(GETDATE())))
3183
					BEGIN
3184
						ROLLBACK TRANSACTION
3185
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(NVARCHAR(5),@INDEX_NS)+ N': Năm định mức không giống với năm hiện tại' ErrorDesc
3186
						RETURN '-1'
3187
					END
3188

    
3189
				-- END KIỂM TRA HẠN MỨC
3190
				-- BEGIN VALIDATE
3191
					IF(@MONTH_RATE = 'M1')
3192
					BEGIN
3193
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND,BUDG_ID)
3194
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @YEAR_RATE, @AMT_EXE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND, @p_BUDGET_ID)
3195
					END
3196
					IF(@MONTH_RATE = 'M2')
3197
					BEGIN
3198
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3199
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @YEAR_RATE, 0, @AMT_EXE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND, @p_BUDGET_ID)
3200
					END
3201
					IF(@MONTH_RATE = 'M3')
3202
					BEGIN
3203
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3204
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @YEAR_RATE, 0, 0, @AMT_EXE, 0, 0, 0, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND, @p_BUDGET_ID)
3205
					END
3206
					IF(@MONTH_RATE = 'M4')
3207
					BEGIN
3208
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3209
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @YEAR_RATE,0,0,0, @AMT_EXE, 0, 0, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND, @p_BUDGET_ID)
3210
					END
3211
					IF(@MONTH_RATE = 'M5')
3212
					BEGIN
3213
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3214
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @YEAR_RATE, 0, 0, 0, 0, @AMT_EXE, 0, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND, @p_BUDGET_ID)
3215
					END
3216
					IF(@MONTH_RATE = 'M6')
3217
					BEGIN
3218
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID,		 GD_ID , BRANCH_ID,  DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5,	 M6,   M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3219
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID,	@YEAR_RATE, 0, 0, 0, 0, 0, @AMT_EXE, 0, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1',			'A',		NULL,			NULL, @BRANCH_KIND, @p_BUDGET_ID)
3220
					END
3221
					IF(@MONTH_RATE = 'M7')
3222
					BEGIN
3223
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3224
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @YEAR_RATE, 0, 0, 0, 0, 0, 0, @AMT_EXE, 0, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND, @p_BUDGET_ID)
3225
					END
3226
					IF(@MONTH_RATE = 'M8')
3227
					BEGIN
3228
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3229
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @YEAR_RATE, 0, 0, 0, 0, 0, 0, 0, @AMT_EXE, 0, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND, @p_BUDGET_ID)
3230
					END
3231
					IF(@MONTH_RATE = 'M9')
3232
					BEGIN
3233
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3234
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @YEAR_RATE, 0, 0, 0, 0, 0, 0, 0, 0, @AMT_EXE, 0, 0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND, @p_BUDGET_ID)
3235
					END
3236
					IF(@MONTH_RATE = 'M10')
3237
					BEGIN
3238
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3239
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @YEAR_RATE, 0, 0, 0, 0, 0, 0, 0, 0, 0, @AMT_EXE,0, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND, @p_BUDGET_ID)
3240
					END
3241
					IF(@MONTH_RATE = 'M11')
3242
					BEGIN
3243
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3244
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @YEAR_RATE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @AMT_EXE, 0, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND, @p_BUDGET_ID)
3245
					END
3246
					IF(@MONTH_RATE = 'M12')
3247
					BEGIN
3248
						INSERT INTO TR_REQ_BUDGET_MONTH_LIMIT_DETAIL(BUDGET_MONTH_LIMIT_DETAIL_ID, REQ_PAY_ID, GD_ID , BRANCH_ID,DEP_ID, BUDGET_YEAR, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, MAKER_ID, CREATE_DT, RECORD_STATUS, AUTH_STATUS, CHECKER_ID , APPROVE_DT, BRANCH_KIND, BUDG_ID)
3249
						VALUES(@l_BUDGET_LIMIT_MONTH_DETAIL_ID, @p_REQ_PAY_ID, @GD_ID, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @YEAR_RATE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @AMT_EXE, @p_MAKER_ID, GETDATE(), '1', 'A', NULL, NULL, @BRANCH_KIND, @p_BUDGET_ID)
3250
					END
3251
				-- END VALIDATE
3252
					
3253
				-- CHECK HẠN MỨC
3254
					print '@GD_ID: ' + @GD_ID;
3255
					print '@GD_CODE: ' + @GD_CODE;
3256
					print '@l_BRANCH_TYPE: ' + @l_BRANCH_TYPE;
3257
					print '@YEAR_RATE: ' + @YEAR_RATE;
3258
					print '@MONTH_RATE: ' + @MONTH_RATE;
3259
					print '@BRANCH_KIND: ' + @BRANCH_KIND;
3260
					print '@BRANCH_TAKE_COST_ID: ' + @BRANCH_TAKE_COST_ID;
3261
					print '@DEP_TAKE_COST_ID: ' + @DEP_TAKE_COST_ID;
3262
					EXEC TR_BUDGET_CHECK_LIMIT_MONTH_Byid @GD_ID, @GD_CODE ,@l_BRANCH_TYPE, @YEAR_RATE , @MONTH_RATE, @BRANCH_KIND, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID , @l_BUDGET_LIMIT_CURRENT out, @l_BUDGET_USED_CURRENT out
3263
					IF(@l_BUDGET_LIMIT_CURRENT < @l_BUDGET_USED_CURRENT)
3264
					BEGIN
3265
						ROLLBACK TRANSACTION
3266
						--SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(NVARCHAR(5),@INDEX_NS)+ N': Số tiền sử dụng ngân sách vượt quá định mức ngân sách. Hạn mức hiện tại là ' + FORMAT(@l_BUDGET_LIMIT_CURRENT,'#,#', 'vi-VN') + N', số tiền đã sử dụng đến hiện tại là ' + FORMAT(@l_BUDGET_USED_CURRENT,'#,#', 'vi-VN')  ErrorDesc
3267
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin hạng mục ngân sách và chi phí, dòng '+ CONVERT(NVARCHAR(5),@INDEX_NS)+ N': Số tiền sử dụng ngân sách vượt quá định mức ngân sách.' ErrorDesc
3268
						RETURN '-1'
3269
					END
3270
				END
3271
--END CHECK HAN MUC NGAN SACH CHI PHI THEO THANG
3272
			END
3273
		-- END VALIDATE
3274

    
3275
		FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID , @GD_CODE, @AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,
3276
		@RATE,@REASON,@TYPE_COST, @FR_LEVEL,@TO_LEVEL, @MONTH_RATE, @YEAR_RATE, @BUDGET_TYPE, @BRANCH_ID , @DEP_ID, @MONTH, @YEAR, @BRANCH_TYPE, @KHOI_ID, @TLNAME, @RoleName, @BRANCH_TAKE_COST_ID, @DEP_TAKE_COST_ID, @KHOI_TAKE_COST_ID, @BRANCH_KIND
3277
		END;
3278
		CLOSE XmlDataGood;
3279
		DEALLOCATE XmlDataGood;
3280
-- END THONG TIN HAMG MUC NGAN SACH VA CHI PHI
3281

    
3282

    
3283
-- BEGIN THONG TIN PHUONG THUC THANH TOAN
3284
	-- DELETE
3285
		DELETE FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID = @p_REQ_PAY_ID
3286
	--DECLARE
3287
		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),@REQ_PAY_DESC nvarchar(MAX),
3288
		@REQ_PAY_ENTRIES nvarchar(MAX),@CHECK_IN VARCHAR(15), @BANKCODE_NAPAS VARCHAR(20), @BANKCODE VARCHAR(20), @BANKNAME VARCHAR(250), @SUB_ISSUED_BY NVARCHAR(250), @RECEIVER_DEBIT VARCHAR(20)
3289
		DECLARE @BRANCH_NAME_REC NVARCHAR(150) = '', @BRANCH_NAME_ISSUED_BY NVARCHAR(150) = '';
3290
	-- SET
3291
		SET @INDEX = 0
3292
	-- DECLARE CURSOR
3293
		DECLARE XmlDataMethod CURSOR FOR SELECT * FROM OPENXML(@hdocMethod, 'Root/XmlDataMethod',2)
3294
		WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2), REQ_PAY_TYPE varchar(1),REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),
3295
		ACC_NO VARCHAR(250), ACC_NAME NVARCHAR(250),ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),CHECK_IN VARCHAR(15),TYPE_TRANSFER VARCHAR(15), 
3296
		BANKCODE_NAPAS VARCHAR(20), BANKCODE VARCHAR(20), BANKNAME NVARCHAR(250), SUB_ISSUED_BY NVARCHAR(250), RECEIVER_DEBIT NVARCHAR(20))
3297
	-- BEGIN CURSOR THONG TIN PHUONG THUC THANH TOAN
3298
		OPEN XmlDataMethod
3299
		FETCH NEXT FROM XmlDataMethod INTO  @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,
3300
		@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@ACC_NO, @ACC_NAME,@ISSUED_BY, @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN,@TYPE_TRANSFER, @BANKCODE_NAPAS, @BANKCODE, @BANKNAME, @SUB_ISSUED_BY, @RECEIVER_DEBIT
3301
		WHILE @@fetch_status=0 
3302
		BEGIN
3303
		-- SET
3304
			SET @INDEX_METHOD = @INDEX_METHOD+1
3305
		-- BEGIN VALIDATE
3306
			IF(@p_TYPE_FUNCTION ='SEND')
3307
			BEGIN
3308

    
3309
				IF(@ACC_NO IS NULL OR @ACC_NO = '')
3310
				BEGIN
3311
					ROLLBACK TRANSACTION
3312
					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_METHOD)+N': số tài khoản '+ N' không được để trống' ErrorDesc
3313
					RETURN '-1'
3314
				END
3315
				
3316
				IF(@ISSUED_BY = '' OR @ISSUED_BY IS NULL)
3317
				BEGIN
3318
					ROLLBACK TRANSACTION
3319
					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_METHOD)+N': Tên ngân hàng/nơi cấp CMND '+ N' không được để trống' ErrorDesc
3320
					RETURN '-1'
3321
				END
3322

    
3323
				IF((@BANKCODE IS NULL OR @BANKCODE = '') AND @CHECK_IN = 'O')
3324
				BEGIN
3325
					ROLLBACK TRANSACTION
3326
					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_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
3327
					RETURN '-1'
3328
				END
3329

    
3330
				IF((SELECT ISNULL(BANKNAME, '') FROM BANK_OUTSIDE WHERE BANKCODE = @BANKCODE) <> ISNULL(@ISSUED_BY, '') AND @CHECK_IN = 'O')
3331
				BEGIN
3332
					ROLLBACK TRANSACTION
3333
					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_METHOD)+N': Loại tài khoản là ngoài hệ thống! Tên tài khoản không hợp lệ, vui lòng chọn lại Tên ngân hàng/nơi cấp CMND từ danh sách!' ErrorDesc
3334
					RETURN '-1'
3335
				END
3336

    
3337
				IF(@REQ_PAY_TYPE = '1' AND (@ISSUED_DT = '' OR @ISSUED_DT IS NULL))
3338
				BEGIN
3339
					ROLLBACK TRANSACTION
3340
					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_METHOD)+N': Ngày cấp CMND '+ N' không được để trống nếu phương thức thanh toán là bằng tiền mặt' ErrorDesc
3341
					RETURN '-1'
3342
				END
3343

    
3344
				IF(@ACC_NAME = '' OR @ACC_NAME IS NULL)
3345
				BEGIN
3346
					ROLLBACK TRANSACTION
3347
					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_METHOD)+N': Tên tài khoản/người nhận '+ N' không được để trống' ErrorDesc
3348
					RETURN '-1'
3349
				END
3350

    
3351
				IF(ISNULL(@CHECK_IN, '') = 'I' AND (LEFT(@ISSUED_BY, 3) <> 'BVB' OR LEN(@ISSUED_BY) < 7))
3352
				BEGIN
3353
					ROLLBACK TRANSACTION
3354
					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_METHOD)+N': Tên ngân hàng/nơi cấp CMND '+ N' không hợp lệ! Với loại tài khoản trong hệ thống, vui lòng chọn ngân hàng từ danh sách tại cột "Tên ngân hàng/nơi cấp CMND"' ErrorDesc
3355
					RETURN '-1'
3356
				END
3357
				
3358
				SET @BRANCH_NAME_REC = ISNULL((SELECT TOP 1 BRANCH_NAME FROM CM_BRANCH WHERE BRANCH_CODE = LEFT(@ACC_NO, 3)), '');
3359
				SET @BRANCH_NAME_ISSUED_BY = ISNULL(STUFF(@ISSUED_BY, 1, 6, ''),'')
3360
				IF(ISNULL(@CHECK_IN, '') = 'I' AND @BRANCH_NAME_REC <> @BRANCH_NAME_ISSUED_BY AND LEN(@ACC_NO) = 13)
3361
				BEGIN
3362
					ROLLBACK TRANSACTION
3363
					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_METHOD)+N': Tên ngân hàng/nơi cấp CMND '+ N' không hợp lệ! Vui lòng chọn đúng chi nhánh ngân hàng ứng với số tài khoản từ danh sách tại cột "Tên ngân hàng/nơi cấp CMND"' ErrorDesc
3364
					RETURN '-1'
3365
				END
3366
				IF(ISNULL(@CHECK_IN, '') = 'O' AND @TYPE_TRANSFER = 'R')
3367
				BEGIN
3368
					ROLLBACK TRANSACTION
3369
					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_METHOD)+N': Với hình thức thanh toán là Trích từ tài khoản, Loại tài khoản phải là Trong hệ thống' ErrorDesc
3370
					RETURN '-1'
3371
				END
3372
			END
3373
		-- END VALIDATE
3374
			IF(@REQ_PAY_TYPE<>'1')
3375
			BEGIN
3376
				SET @ISSUED_DT = NULL
3377
			END
3378
			IF(@TYPE_TRANSFER IS NULL OR @TYPE_TRANSFER ='')
3379
			BEGIN
3380
				SET @TYPE_TRANSFER = 'A'
3381
			END
3382

    
3383
			DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
3384
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
3385
			IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
3386
			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, 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)
3387
			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,'',@p_MAKER_ID,GETDATE(),@ACC_NO, @ACC_NAME,@ISSUED_BY,CONVERT(DATE,@ISSUED_DT,103), @p_REQ_TYPE_CURRENCY , @p_RATE,@CHECK_IN,@TYPE_TRANSFER, @BANKCODE_NAPAS, @BANKCODE, @BANKNAME, @SUB_ISSUED_BY, @RECEIVER_DEBIT)
3388
		IF @@error<>0 GOTO ABORT;
3389
		FETCH NEXT FROM XmlDataMethod INTO @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,
3390
		@ACC_NO, @ACC_NAME,@ISSUED_BY, @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN,@TYPE_TRANSFER, @BANKCODE_NAPAS, @BANKCODE, @BANKNAME, @SUB_ISSUED_BY, @RECEIVER_DEBIT
3391
		END
3392
		CLOSE XmlDataMethod;
3393
		DEALLOCATE XmlDataMethod;
3394
	-- END CURSOR THONG TIN PHUONG THUC THANH TOAN
3395
-- END THONG TIN PHUONG THUC THANH TOAN
3396

    
3397
-- BEGIN THONG TIN HOP DONG DINH KEM & THONG TIN CHUNG TU KHAC DINH KEM
3398
	-- DELETE
3399
		DELETE FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID
3400
	-- DECLARE
3401
		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), @LICENSE_DT VARCHAR(15)
3402
	-- DECLARE CURSOR
3403
		DECLARE XmlAttach CURSOR FOR SELECT * FROM OPENXML(@hdocAttach, 'Root/XmlAttach',2) 
3404
		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(15))
3405
	-- BEGIN CURSOR THONG TIN CHUNG TU KHAC DINH KEM
3406
		OPEN XmlAttach
3407
		FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT, @LICENSE_DT
3408
			WHILE @@fetch_status=0 
3409
			BEGIN
3410
				
3411
				IF (@REF_DT='')
3412
				BEGIN
3413
					SET @REF_DT = NULL
3414
				END
3415
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
3416
				IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
3417
				INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],[AMT],REF_DT, LICENSE_DT) VALUES
3418
				(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT,CONVERT(DATE,@REF_DT,103) ,CONVERT(DATE, @LICENSE_DT,103))
3419
			IF @@error<>0 GOTO ABORT;
3420
			FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT, @LICENSE_DT
3421
			END
3422
		CLOSE XmlAttach;
3423
		DEALLOCATE XmlAttach;    
3424
-- END THONG TIN HOP DONG DINH KEM & THONG TIN CHUNG TU KHAC DINH KEM
3425

    
3426
		------------------------
3427
	-- NEU LA THANH TOAN HOAN TAM UNG
3428
		IF(@p_REQ_TYPE = 'I')
3429
		BEGIN
3430
		-- DELETE
3431
			DELETE FROM TR_REQ_PAYMENT_DT WHERE PAY_ID = @p_REQ_PAY_ID
3432

    
3433
			DECLARE XmlDataPay CURSOR FOR SELECT * FROM OPENXML(@hDoc2, '/Root/XmlDataPay', 2)
3434
			WITH(PAY_ADV_ID nvarchar(50),AMT_ADVANCED decimal(18, 0),AMT_DO decimal(18,2),
3435
			AMT_REMAIN decimal(18,2),AMT_PAY decimal(18,2),AMT_USE decimal(18,2),AMT_REVERT DECIMAL(18,0),AMT_ADD DECIMAL(18,2),CURRENCY VARCHAR(15), RATE DECIMAL(18,2), TRN_DATE VARCHAR(15))
3436
		-- BEGIN CURSOR THONG TIN PHIEU DE NGHI TAM UNG
3437
			OPEN XmlDataPay; 
3438
			FETCH NEXT FROM XmlDataPay INTO @PAY_ADV_ID, @AMT_ADVANCED ,@AMT_DO,@AMT_REMAIN,@AMT_PAY ,@AMT_USE ,@AMT_REVERT,@AMT_ADD,@CURRENCY,@RATE, @TRN_DATE
3439
			WHILE @@fetch_status=0 
3440
			BEGIN
3441
				SET @INDEX_AD = @INDEX_AD +1
3442
				SET @REQ_PAY_ADV_CODE = (SELECT REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@PAY_ADV_ID)
3443
		-- BEGIN VALIDATE
3444
				IF(@p_TYPE_FUNCTION ='SEND') 
3445
				BEGIN
3446
					-- KIEM TRA XEM CO PHIEU NAO DANG DUOC THANH TOAN HOAN TAM UNG MA CHUA DUYET HAY CHUA
3447
					--IF(EXISTS (SELECT * FROM TR_REQ_PAYMENT_DT WHERE (PAY_ADV_ID =@PAY_ADV_ID AND (AUTH_STATUS_KT <>'A' OR AUTH_STATUS_KT IS NULL)) AND PAY_ID <> @p_REQ_PAY_ID))
3448
					IF(EXISTS (SELECT * FROM TR_REQ_PAYMENT_DT WHERE (PAY_ADV_ID =@PAY_ADV_ID AND (AUTH_STATUS ='A' AND ISNULL(AUTH_STATUS_KT,'') <> 'A')) AND PAY_ID <> @p_REQ_PAY_ID))
3449
					BEGIN
3450
						ROLLBACK TRANSACTION
3451
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_AD)+ N': Phiếu tạm ứng số '+@REQ_PAY_ADV_CODE+ N' đang được thanh toán hoàn tạm ứng. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
3452
						RETURN '-1'
3453
					END
3454
					
3455
					-- KIEM TRA NEU SO TIEN DE NGHI HOAN TAM ƯNG LON HON SO TIEN CON LAI CAN PHAI TAM UNG
3456
					IF(@AMT_REVERT>(@AMT_REMAIN -@AMT_USE) AND @AMT_REVERT >0)
3457
					BEGIN
3458
						ROLLBACK TRANSACTION
3459
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_AD)+ N': Số tiền hoàn ứng không được vượt quá '+FORMAT((@AMT_REMAIN -@AMT_USE),'#,#', 'vi-VN') ErrorDesc
3460
						RETURN '-1'
3461
					END
3462
					--KIEM TRA NEU SO PHIEU TAM UNG NAY DA THANH TOAN XONG THI KHONG CHO PHEP DUYET
3463
					IF((SELECT A.REQ_AMT - A.PAY_AMT FROM TR_REQ_ADVANCE_PAYMENT A WHERE A.REQ_PAY_ID = @PAY_ADV_ID)<=0)
3464
					BEGIN
3465
						ROLLBACK TRANSACTION
3466
						SELECT '-1' Result,'' REQ_PAY_ID,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_AD)+ N': Phiếu tạm ứng này đã được hoàn tạm ứng xong. Vui lòng xóa khỏi danh sách hoàn tạm ứng' ErrorDesc
3467
						RETURN '-1'
3468
					END
3469
					
3470
				END
3471
		-- END VALIDATE
3472
				DECLARE @p_REQ_PAYDT_ID VARCHAR(15);
3473
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAYMENT_DT', @p_REQ_PAYDT_ID OUT;
3474
				IF @p_REQ_PAYDT_ID='' OR @p_REQ_PAYDT_ID IS NULL GOTO ABORT;
3475
				INSERT INTO TR_REQ_PAYMENT_DT
3476
				VALUES (@p_REQ_PAYDT_ID,@PAY_ADV_ID,@p_REQ_PAY_ID , ISNULL(@AMT_ADVANCED,0) ,ISNULL(@AMT_DO,0),ISNULL(@AMT_REMAIN,0),
3477
				ISNULL(ISNULL(@AMT_USE,0) + ISNULL(@AMT_REVERT,0) - ISNULL(@AMT_ADD,0),0) ,ISNULL(@AMT_USE,0) ,ISNULL(@AMT_REVERT,0), ISNULL(@AMT_ADD,0), CONVERT(DATE,@TRN_DATE,103)  ,@p_MAKER_ID ,GETDATE() ,NULL ,NULL,'U' ,NULL ,NULL ,NULL ,NULL,NULL, @p_REQ_TYPE_CURRENCY , @p_RATE)
3478
			IF @@error<>0 GOTO ABORT;
3479
			FETCH NEXT FROM XmlDataPay INTO @PAY_ADV_ID, @AMT_ADVANCED ,@AMT_DO,@AMT_REMAIN,@AMT_PAY ,@AMT_USE ,@AMT_REVERT,@AMT_ADD,@CURRENCY,@RATE, @TRN_DATE
3480
			END
3481
			CLOSE XmlDataPay;
3482
			DEALLOCATE XmlDataPay;
3483
		--END CURSOR THONG TIN PHIEU DE NGHI TAM UNG
3484
		--------------------------------------------------------------------------------------------------------------------
3485
		--INSERT FROM CatCursor
3486
		--DELETE
3487
			DELETE FROM TR_REQ_PAY_CAT WHERE REQ_PAY_ID = @p_REQ_PAY_ID
3488
			--CatCursor
3489
			DECLARE @REQ_ADV_ID varchar(15),@CAT_NAME nvarchar(100),@TOTAL_AMT_CAT decimal(18,2), @DEPT_ID VARCHAR(15)
3490
			DECLARE XmlDataCat CURSOR FOR
3491
			SELECT * FROM OPENXML(@hdoc, 'Root/XmlDataCat',2) 
3492
			WITH(REQ_ADV_ID VARCHAR(15),CAT_NAME nvarchar(100),TOTAL_AMT decimal(18,2), DEPT_ID VARCHAR(15),CURRENCY VARCHAR(15), RATE DECIMAL(18,2))
3493
			OPEN XmlDataCat
3494
			FETCH NEXT FROM XmlDataCat INTO @REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@CURRENCY,@RATE
3495
			WHILE @@fetch_status=0 
3496
			BEGIN
3497
				SET @INDEX = @INDEX +1
3498
				DECLARE @p_REQ_PAY_CAT_ID VARCHAR(15);
3499
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_CAT', @p_REQ_PAY_CAT_ID OUT;
3500
				IF @p_REQ_PAY_CAT_ID='' OR @p_REQ_PAY_CAT_ID IS NULL GOTO ABORT;
3501
				INSERT INTO TR_REQ_PAY_CAT
3502
				VALUES (@p_REQ_PAY_CAT_ID,@p_REQ_PAY_ID,@REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@p_MAKER_ID,GETDATE(), @p_REQ_TYPE_CURRENCY , @p_RATE)
3503
			IF @@error<>0 GOTO ABORT;
3504
			FETCH NEXT FROM XmlDataCat INTO @REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@CURRENCY,@RATE
3505
			END
3506
			CLOSE XmlDataCat;
3507
			DEALLOCATE XmlDataCat;
3508
		END
3509
	-- NEU LA THANH TOAN KHAC
3510
		IF(@p_REQ_TYPE = 'D' OR @p_REQ_TYPE ='I')
3511
		BEGIN
3512
		-- DELETE
3513
			DELETE FROM TR_REQ_PAY_SERVICE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
3514
		-- DECLARE
3515
			DECLARE @SUM_TTCT_LINK DECIMAL(18,0), @SUM_TT_CT DECIMAL(18,0), @SUM_KUY_KE_TT DECIMAL(18,0),@SUM_PYCMS_LINK DECIMAL(18,0), 
3516
			@PYCMS_CODE_LIST VARCHAR(MAX), @PYCMS_CODE_DRAFT_LIST VARCHAR(MAX), @PDNTT_CODE_LIST VARCHAR(MAX), @PDNTT_CODE_DRAFT_LIST VARCHAR(MAX)
3517
			DECLARE @REQ_PAY_SERVICE_NAME nvarchar(100),@RECEIVE_ID_SERVICE varchar(15),@RECEIVE_NAME_SERVICE nvarchar(100),@REQ_PAY_REASON_SERVICE nvarchar(MAX), @TOTAL_AMT_SERVICE decimal(18,2),
3518
			@REQ_PAY_TYPE_SERVICE varchar(1),@REQ_PAY_DESC_SERVICE nvarchar(MAX),@REQ_PAY_ENTRIES_SERVICE nvarchar(MAX),@DEPT_ID_SRV VARCHAR(15)
3519
		-- SET
3520
			SET @SUM_KUY_KE_TT=0
3521
			SET @INDEX = 0
3522
		-- DECLARE CURSOR
3523
			DECLARE XmlDataService CURSOR FOR SELECT * FROM OPENXML(@hdocService, 'Root/XmlDataService',2)
3524
			WITH(REQ_PAY_SERVICE_NAME nvarchar(100),RECEIVE_ID_SERVICE varchar(15),RECEIVE_NAME_SERVICE nvarchar(100),REQ_PAY_REASON_SERVICE nvarchar(MAX),
3525
			TOTAL_AMT_SERVICE decimal(18,2),REQ_PAY_TYPE_SERVICE varchar(1),REQ_PAY_DESC_SERVICE nvarchar(MAX),REQ_PAY_ENTRIES_SERVICE nvarchar(MAX), 
3526
			DEPT_ID VARCHAR(15),CURRENCY VARCHAR(15), RATE DECIMAL(18,2))
3527
		-- BEGIN CURSOR THONG TIN CAC DICH VU THANH TOAN
3528
			OPEN XmlDataService
3529
			FETCH NEXT FROM XmlDataService INTO @REQ_PAY_SERVICE_NAME,@RECEIVE_ID_SERVICE,@RECEIVE_NAME_SERVICE,@REQ_PAY_REASON_SERVICE,@TOTAL_AMT_SERVICE,
3530
			@REQ_PAY_TYPE_SERVICE,@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@DEPT_ID_SRV,@CURRENCY,@RATE
3531
			WHILE @@fetch_status=0 
3532
			BEGIN
3533
				SET @INDEX = @INDEX +1
3534
				SET @SUM_TTCT_LINK =(SELECT SUM(TOTAL_AMT*ISNULL(RATE,1)) FROM TR_REQ_PAY_SERVICE WHERE
3535
						REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT) AND REQ_PAY_ID <> @p_REQ_PAY_ID AND EMP_ID =@RECEIVE_ID_SERVICE)
3536
				SET @SUM_PYCMS_LINK =ISNULL((SELECT SUM(TOTAL_AMT) FROM TR_REQUEST_DOC WHERE PL_REQ_ID =@RECEIVE_ID_SERVICE),0)
3537
				SET @SUM_TT_CT =(SELECT ISNULL(TOTAL_AMT,0) FROM PL_REQUEST_DOC WHERE REQ_ID =@RECEIVE_ID_SERVICE)
3538
				SET @PYCMS_CODE_LIST = (select STUFF( (select '; ' + DTA.REQ_CODE FROM TR_REQUEST_DOC DTA WHERE PL_REQ_ID =@RECEIVE_ID_SERVICE
3539
				FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))
3540
				SET @PYCMS_CODE_DRAFT_LIST = (select STUFF( (select '; ' + DTA.REQ_CODE FROM TR_REQUEST_DOC DTA WHERE PL_REQ_ID =@RECEIVE_ID_SERVICE AND AUTH_STATUS = 'E'
3541
				FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))
3542
				SET @PDNTT_CODE_LIST = (select STUFF( (select '; ' + DTA.REQ_PAY_CODE FROM TR_REQ_PAYMENT DTA WHERE REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAY_SERVICE WHERE EMP_ID =@RECEIVE_ID_SERVICE) AND REQ_PAY_ID <> @p_REQ_PAY_ID
3543
				FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))
3544
				SET @PDNTT_CODE_DRAFT_LIST = (select STUFF( (select '; ' + DTA.REQ_PAY_CODE FROM TR_REQ_PAYMENT DTA WHERE REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAY_SERVICE WHERE EMP_ID =@RECEIVE_ID_SERVICE) AND REQ_PAY_ID <> @p_REQ_PAY_ID AND AUTH_STATUS IN('E', 'R')
3545
				FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))
3546
			--------------- BEGIN VALIDATE --------------
3547
				IF(@p_TYPE_FUNCTION ='SEND')
3548
				BEGIN
3549
					IF(@DEPT_ID_SRV IS NULL OR @DEPT_ID_SRV ='')
3550
					BEGIN
3551
						ROLLBACK TRANSACTION
3552
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin các dịch vụ thanh toán, dòng '+ CONVERT(VARCHAR(5),@INDEX)+ N': Phòng ban chịu chi phí không được để trống' ErrorDesc
3553
						RETURN '-1'
3554
					END	
3555
				
3556
					IF(@TOTAL_AMT_SERVICE IS NULL)
3557
					BEGIN
3558
						ROLLBACK TRANSACTION
3559
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin các dịch vụ thanh toán, dòng '+ CONVERT(VARCHAR(5),@INDEX)+ N': Số tiền thanh toán không được để trống' ErrorDesc
3560
						RETURN '-1'
3561
					END
3562
				
3563
					IF(@TOTAL_AMT_SERVICE < 0)
3564
					BEGIN
3565
						ROLLBACK TRANSACTION
3566
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin các dịch vụ thanh toán, dòng '+ CONVERT(VARCHAR(5),@INDEX)+ N': Số tiền thanh toán không thể nhỏ hơn 0' ErrorDesc
3567
						RETURN '-1'
3568
					END
3569

    
3570
					IF(((ISNULL(@SUM_TTCT_LINK,0) +ISNULL(@SUM_PYCMS_LINK,0) + ISNULL(@TOTAL_AMT_SERVICE,0)) > ISNULL(@SUM_TT_CT,0)) AND @RECEIVE_ID_SERVICE IS NOT NULL AND @RECEIVE_ID_SERVICE <> '')
3571
					BEGIN
3572
						ROLLBACK TRANSACTION
3573
						SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE,
3574
						N'Dòng '+ CONVERT(VARCHAR(5),@INDEX)+N': Thông tin chi tiết về hạn mức sử dụng của tờ trình số: '+(SELECT TOP 1 ISNULL(REQ_CODE,'') FROM PL_REQUEST_DOC WHERE REQ_ID =@RECEIVE_ID_SERVICE)+N' như sau:'
3575
						+ CHAR(10) + 
3576
						N'</br>* Số tiền các phiếu yêu cầu mua sắm số:'+ISNULL(@PYCMS_CODE_LIST,'')+N' đã sử dụng: '+FORMAT(ISNULL(@SUM_PYCMS_LINK,0),'#,#', 'vi-VN') +' VND'+
3577
						+ CHAR(10) + 
3578
						N'</br>* Số tiền ở các phiếu thanh toán số: '+ISNULL(@PDNTT_CODE_LIST,'')+N' đã sử dụng: '+ FORMAT(ISNULL(@SUM_TTCT_LINK,0),'#,#', 'vi-VN') +' VND'
3579
						+ CHAR(10) + 
3580
						N'</br>* Bạn đang thanh toán cho phiếu này với số tiền: '+ FORMAT(ISNULL(@TOTAL_AMT_SERVICE,0),'#,#', 'vi-VN') +' VND'
3581
						+ CHAR(10) + 
3582
						N'</br>* Số tiền còn lại được phép thanh toán là: '+FORMAT(ISNULL(@SUM_TT_CT,0) -ISNULL(@SUM_TTCT_LINK,0) -ISNULL(@SUM_PYCMS_LINK,0),'#,#', 'vi-VN') +' VND'  
3583
						+ CHAR(10) + 
3584
						N'</br>* Chú ý những PYCMS sau đang lưu nháp & ăn ngân sách, vui lòng kiểm tra và xóa PYCMS: ' + ISNULL(@PYCMS_CODE_DRAFT_LIST,'')
3585
						+ CHAR(10) + 
3586
						N'</br>* Chú ý những PDN thanh toán sau đang lưu nháp hoặc từ chối & ăn ngân sách, vui lòng kiểm tra và xóa PDN thanh toán: ' + ISNULL(@PDNTT_CODE_DRAFT_LIST,'') ErrorDesc
3587
						RETURN '-1'
3588
					END
3589
				END
3590
			--------------- END VALIDATE ----------------
3591
				--IF(@RECEIVE_ID_SERVICE IS NOT NULL AND @RECEIVE_ID_SERVICE <> '')
3592
				--BEGIN
3593
				--	SET @SUM_PYCMS_LINK = @SUM_PYCMS_LINK +@TOTAL_AMT_SERVICE
3594
				--END
3595
				--SET @SUM_KUY_KE_TT = @SUM_KUY_KE_TT + @TOTAL_AMT_SERVICE
3596
				
3597
				DECLARE @p_REQ_PAY_SERVICE_ID VARCHAR(15);
3598
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SERVICE', @p_REQ_PAY_SERVICE_ID OUT;
3599
				IF @p_REQ_PAY_SERVICE_ID='' OR @p_REQ_PAY_SERVICE_ID IS NULL GOTO ABORT;
3600
				INSERT INTO TR_REQ_PAY_SERVICE(SERVICE_ID,REQ_PAY_ID,[SERVICE_NAME],EMP_ID,REQ_PAY_REASON,TOTAL_AMT,REQ_PAY_TYPE,REQ_PAY_DESC,REQ_PAY_ENTRIES,MAKER_ID,CREATE_DT,DEPT_ID,CURRENCY,RATE)
3601
				VALUES (@p_REQ_PAY_SERVICE_ID,@p_REQ_PAY_ID,@REQ_PAY_SERVICE_NAME,@RECEIVE_ID_SERVICE,@REQ_PAY_REASON_SERVICE,@TOTAL_AMT_SERVICE,
3602
				@REQ_PAY_TYPE_SERVICE,@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@p_MAKER_ID,GETDATE(),@DEPT_ID_SRV, @p_REQ_TYPE_CURRENCY , @p_RATE)
3603
			IF @@error<>0 GOTO ABORT;
3604
			FETCH NEXT FROM XmlDataService INTO @REQ_PAY_SERVICE_NAME,@RECEIVE_ID_SERVICE,@RECEIVE_NAME_SERVICE,@REQ_PAY_REASON_SERVICE,@TOTAL_AMT_SERVICE,@REQ_PAY_TYPE_SERVICE,
3605
			@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@DEPT_ID_SRV,@CURRENCY,@RATE
3606
			END
3607
			CLOSE XmlDataService;
3608
			DEALLOCATE XmlDataService;
3609
		-- BEGIN CURSOR THONG TIN CAC DICH VU THANH TOAN
3610
		END
3611
		IF((@p_REQ_TYPE = 'P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR (@p_REQ_TYPE = 'P' AND @p_IS_PERIOD = 'Y') OR @p_REQ_TYPE ='I')
3612
		BEGIN
3613
			DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID= @p_REQ_PAY_ID
3614
		END
3615
	-- NEU LA THANH TOAN PO HOP DONG
3616
		IF((@p_REQ_TYPE = 'P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE ='I')
3617
		BEGIN
3618
		-- DELETE
3619
			--DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID= @p_REQ_PAY_ID
3620
			/*
3621
			IF(@p_REQ_TYPE = 'P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL))
3622
			BEGIN
3623
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID= @p_REQ_PAY_ID
3624
			END
3625
			*/
3626
		-- DECLARE
3627
			DECLARE @INDEX_PO INT, @REF_ID VARCHAR(15),@IS_CLOSED VARCHAR(1)
3628
		--SET
3629
			SET @INDEX_PO = 0
3630
		-- DECLARE CURSOR
3631
			DECLARE XmlDataPO CURSOR FOR SELECT * FROM OPENXML(@hdocPO, '/Root/XmlDataPO', 2)
3632
			WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
3633
		-- BEGIN CURSOR THÔNG TIN PO/ HOP DONG
3634
			OPEN XmlDataPO;
3635
			FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
3636
			WHILE @@fetch_status=0 
3637
			BEGIN
3638
			-- SET
3639
				SET @INDEX_PO = @INDEX_PO +1
3640
			-- BEGIN VALIDATE
3641
				IF(@p_TYPE_FUNCTION ='SEND') 
3642
				BEGIN
3643
					DECLARE @PDN_TAMUNG_LIST VARCHAR(4000) --- LUCTV 19.10.2022
3644
					-- KIEM TRA PO DUOC DUYET HAY CHUA
3645
					--IF(EXISTS(SELECT * FROM TR_PO_MASTER WHERE PO_ID =@REF_ID AND AUTH_STATUS <>'A'))
3646
					--BEGIN
3647
					--ROLLBACK TRANSACTION
3648
					--	SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin PO/ hợp đồng, dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
3649
					--	(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' chưa được phê duyệt. Vui lòng phê duyệt PO trước khi tạo phiếu thanh toán' ErrorDesc
3650
					--	RETURN '-1'
3651
					--END
3652
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
3653
					--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='C' 
3654
					--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)))
3655
					--BEGIN
3656
					--	ROLLBACK TRANSACTION
3657
					--	SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Thông tin PO/ hợp đồng, dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
3658
					--	(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
3659
					--	RETURN '-1'
3660
					--END
3661
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
3662
					--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='C'
3663
					--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))
3664
					--BEGIN
3665
					--	ROLLBACK TRANSACTION
3666
					--	SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin PO/ hợp đồng, dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
3667
					--	(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
3668
					--	RETURN '-1'
3669
					--END
3670
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
3671
					--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P' 
3672
					--AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT NOT IN ('A','E','R') OR AUTH_STATUS_KT IS NULL)))
3673
					--BEGIN
3674
					--	ROLLBACK TRANSACTION
3675
					--	SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Thông tin PO/ hợp đồng, dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N':PO số '+
3676
					--	(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
3677
					--	RETURN '-1'
3678
					--END
3679
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
3680
					--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P' AND REF_ID IN (SELECT PO_ID FROM TR_PO_MASTER WHERE IS_CLOSED='Y')))
3681
					--BEGIN
3682
					--	ROLLBACK TRANSACTION
3683
					--	SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin PO/ hợp đồng, dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
3684
					--	(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đã được thanh toán xong. Vui lòng chọn PO khác để tạm ứng hoặc xóa bản nháp này' ErrorDesc
3685
					--	RETURN '-1'
3686
					--END
3687
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
3688
						--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='C' AND REQ_PAY_ID 
3689
						--IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
3690
						--BEGIN
3691
						--	ROLLBACK TRANSACTION
3692
						--	SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
3693
						--	(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
3694
						--	RETURN '-1'
3695
						--END
3696
						---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
3697
						--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_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))
3698
						--BEGIN
3699
						--	ROLLBACK TRANSACTION
3700
						--	SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
3701
						--	(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
3702
						--	RETURN '-1'
3703
						--END
3704
						--IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REF_ID =@REF_ID AND PAY_ID =@PAY_ID AND 
3705
						--			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))
3706
						--BEGIN
3707
						--	ROLLBACK TRANSACTION
3708
						--	SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
3709
						--	(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
3710
						--	RETURN '-1'
3711
						--END
3712
						-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
3713
						SET @PDN_TAMUNG_LIST = (select STUFF( (select '; ' + DTA.REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT DTA WHERE REQ_PAY_ID IN 
3714
						(SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P') AND ISNULL(AUTH_STATUS_KT,'') NOT IN ('A','E','R')
3715
						FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))
3716
						--- VALIDATE PO DANG TRONG QUA TRINH TAM UNG
3717
						IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P' AND REQ_PAY_ID 
3718
						IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT NOT IN ('A','E','R') OR AUTH_STATUS_KT IS NULL)))
3719
						BEGIN
3720
							ROLLBACK TRANSACTION
3721
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N':PO số '+
3722
							(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.Danh sách phiếu tạm ứng đang sử dụng: '+ ISNULL(@PDN_TAMUNG_LIST,'') ErrorDesc
3723
							RETURN '-1'
3724
						END
3725
						-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
3726
						IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P' AND REF_ID IN (SELECT PO_ID FROM TR_PO_MASTER WHERE IS_CLOSED='Y')))
3727
						BEGIN
3728
							ROLLBACK TRANSACTION
3729
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
3730
							(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đã được thanh toán xong. Vui lòng chọn PO khác để tạm ứng hoặc xóa bản nháp này' ErrorDesc
3731
							RETURN '-1'
3732
						END
3733
				END
3734
			-- END VALIDATE
3735
				DECLARE @REQ_PAYDTID VARCHAR(15);
3736
				EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
3737
				IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
3738
				IF(LEFT(@REF_ID, 3) = 'TRC')
3739
				BEGIN
3740
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) 
3741
					VALUES (@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED, 'C')
3742
				END
3743
				ELSE
3744
				BEGIN
3745
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) 
3746
					VALUES (@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED, 'P')
3747
				END
3748
				
3749
			IF @@error<>0 GOTO ABORT;
3750
			FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
3751
			END
3752
			CLOSE XmlDataPO;
3753
			DEALLOCATE XmlDataPO;
3754
		-- END CURSOR THÔNG TIN PO/ HOP DONG
3755

    
3756
		-- DELETE
3757
			DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
3758
		-- DECLARE
3759
			DECLARE @PO_ID VARCHAR(15), @PAY_PHASE NVARCHAR(250), @AMT_ADVANCE DECIMAL(18,2),
3760
			@REQ_AD_DT VARCHAR(20),@PROCESS VARCHAR(15),@PAY_ID VARCHAR(15),@AMT_PAY_DO DECIMAL(18,2),@AMT_PAY_REAL DECIMAL(18,2)
3761
		-- DECLARE CURSOR THONG TIN CHI TIET LICH THANH TOAN PO/ HOP DONG
3762
			DECLARE XmlDataSchedule CURSOR FOR SELECT * FROM OPENXML(@hdocSchedule, 'Root/XmlDataSchedule',2)
3763
			WITH(PO_ID VARCHAR(15),PAY_PHASE VARCHAR(15),AMT_PAY DECIMAL(18,2),REQ_ADV_ID VARCHAR(15), AMT_ADVANCE DECIMAL(18,2),
3764
			AMT_REMAIN DECIMAL(18,2),REQ_AD_DT VARCHAR(20),PROCESS VARCHAR(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),REQ_PAY_DESC NVARCHAR(250),
3765
			REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),AMT_PAY_DO DECIMAL(18,2),AMT_PAY_REAL DECIMAL(18,2))
3766
		-- BEGIN CURSOR THONG TIN CHI TIET LICH THANH TOAN PO/ HOP DONG 
3767
			OPEN XmlDataSchedule
3768
			SET @INDEX_PO = 0
3769
			FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@PAY_PHASE,@AMT_PAY, @REQ_ADV_ID,@AMT_ADVANCE,@AMT_REMAIN,@REQ_AD_DT,
3770
			@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_DO,@AMT_PAY_REAL
3771
			WHILE @@fetch_status=0 
3772
			BEGIN
3773
				--IF(@AMT_REMAIN =0)
3774
				--BEGIN
3775
				--	SET @PROCESS ='3'
3776
				--END
3777
				--IF(@PROCESS <>'2')
3778
				--BEGIN
3779
				--	SET @TOTAL_SCHEDULE_AMT = @TOTAL_SCHEDULE_AMT +@AMT_REMAIN
3780
				--END
3781
				SET @INDEX_PO = @INDEX_PO +1
3782
				SET @TOTAL_SCHEDULE_AMT = @TOTAL_SCHEDULE_AMT +(@AMT_PAY - @AMT_ADVANCE -@AMT_PAY_DO)
3783
			-- BEGIN VALIDATE
3784
				IF(@p_TYPE_FUNCTION ='SEND' AND @p_REQ_TYPE ='P')
3785
				BEGIN
3786
					IF(ISNULL(@AMT_PAY_REAL,0) < ISNULL(@AMT_ADVANCE ,0))
3787
					BEGIN
3788
						ROLLBACK TRANSACTION
3789
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Số tiền thanh toán thực tế tối thiểu phải bằng số tiền đã tạm ứng : ' +FORMAT(SUM(@AMT_ADVANCE),'#,#', 'vi-VN')  ErrorDesc
3790
						RETURN '-1'
3791
					END
3792
				END
3793
			-- END VALIDATE
3794
				DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
3795
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
3796
				IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
3797

    
3798
				INSERT INTO TR_REQ_PAY_SCHEDULE (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,
3799
				CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE, AMT_PAY_REAL)
3800
				VALUES (@p_REQ_PAY_SCHEDULE_ID,@p_REQ_PAY_ID,@PAY_ID, @AMT_PAY, @PAY_PHASE, @REQ_ADV_ID, @AMT_ADVANCE, @AMT_PAY_DO, @AMT_REMAIN,
3801
				--IIF(@PROCESS<>'2',(@AMT_PAY-@AMT_ADVANCE),0),
3802
				GETDATE(),CONVERT(DATETIME,@REQ_AD_DT,103),@PROCESS,@p_MAKER_ID,GETDATE(),'U','','PAY',@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES, @p_REQ_TYPE_CURRENCY , @p_RATE,@AMT_PAY_REAL)
3803
			IF @@error<>0 GOTO ABORT;
3804
			FETCH NEXT FROM XmlDataSchedule INTO @PO_ID, @PAY_PHASE, @AMT_PAY, @REQ_ADV_ID, @AMT_ADVANCE,@AMT_REMAIN,@REQ_AD_DT,
3805
			@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_DO,@AMT_PAY_REAL
3806
			END
3807
			CLOSE XmlDataSchedule;
3808
			DEALLOCATE XmlDataSchedule;
3809
		-- END CURSOR THONG TIN CHI TIET LICH THANH TOAN PO/ HOP DONG 
3810
			---- VALIDATE SO TIEN
3811
			--IF(@p_REQ_AMT > ISNULL(@TOTAL_SCHEDULE_AMT,0))
3812
			--BEGIN
3813
			--	ROLLBACK TRANSACTION
3814
			--	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
3815
			--	RETURN '-1'
3816
			--END
3817
	     ------
3818
		END
3819
	-- NEU LA THANH TOAN CAC HOP DONG DINH KY
3820
		IF((@p_REQ_TYPE = 'P' AND @p_IS_PERIOD = 'Y') OR @p_REQ_TYPE='I')
3821
		BEGIN
3822
		-- DELETE
3823
			--DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID= @p_REQ_PAY_ID
3824
			/*
3825
			IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD = 'Y')
3826
			BEGIN
3827
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID= @p_REQ_PAY_ID
3828
			END
3829
			*/
3830
		-- DECLARE
3831
			DECLARE @CONTRACT_PERIOD_ID VARCHAR(15),@IS_PERIOD_CLOSED VARCHAR(1), @DELIVERY_DT VARCHAR(20)
3832
		--DECLARE CURSOR THONG TIN HOP DONG DINH KY
3833
			DECLARE XmlDataRecurring CURSOR FOR SELECT * FROM OPENXML(@hdocRecurring, '/Root/XmlDataRecurring', 2)
3834
			WITH(CONTRACT_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15), DELIVERY_DT VARCHAR(20))
3835
		-- BEGIN CURSOR THONG TIN HOP DONG DINH KY
3836
			OPEN XmlDataRecurring;
3837
			FETCH NEXT FROM XmlDataRecurring INTO @CONTRACT_PERIOD_ID,@IS_PERIOD_CLOSED,@REF_TYPE, @DELIVERY_DT
3838
			WHILE @@fetch_status = 0 
3839
			BEGIN
3840
			-- SET
3841
				SET @INDEX_PO = @INDEX_PO +1
3842
			-- BEGIN VALIDATE
3843
				IF(@p_TYPE_FUNCTION ='SEND') 
3844
				BEGIN
3845
					IF(EXISTS(SELECT * FROM TR_PO_MASTER WHERE PO_ID =@REF_ID AND AUTH_STATUS <>'A'))
3846
					BEGIN
3847
						ROLLBACK TRANSACTION
3848
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
3849
						(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' chưa được phê duyệt. Vui lòng phê duyệt PO trước khi tạo phiếu thanh toán' ErrorDesc
3850
						RETURN '-1'
3851
					END
3852

    
3853
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P' AND REQ_PAY_ID 
3854
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT NOT IN ('A','E','R') OR AUTH_STATUS_KT IS NULL)))
3855
					BEGIN
3856
						ROLLBACK TRANSACTION
3857
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N':PO số '+
3858
						(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
3859
						RETURN '-1'
3860
					END
3861

    
3862
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
3863
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P' AND REF_ID IN (SELECT PO_ID FROM TR_PO_MASTER WHERE IS_CLOSED='Y')))
3864
					BEGIN
3865
						ROLLBACK TRANSACTION
3866
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
3867
						(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đã được thanh toán xong. Vui lòng chọn PO khác để tạm ứng hoặc xóa bản nháp này' ErrorDesc
3868
						RETURN '-1'
3869
					END
3870
				END
3871
			-- END VALIDATE
3872
				DECLARE @REQ_PAYDTID_PERIOD VARCHAR(15);
3873
				EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_PERIOD OUT;
3874
				IF @REQ_PAYDTID_PERIOD='' OR @REQ_PAYDTID_PERIOD IS NULL GOTO ABORT;
3875
				INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE, DELIVERY_DT) 
3876
				VALUES(@REQ_PAYDTID_PERIOD,@p_REQ_PAY_ID,@CONTRACT_PERIOD_ID,'PAY',@p_MAKER_ID,GETDATE(),@IS_PERIOD_CLOSED,'C', CONVERT(DATE,@DELIVERY_DT,103))
3877

    
3878
			IF @@error<>0 GOTO ABORT;
3879
			FETCH NEXT FROM XmlDataRecurring INTO @CONTRACT_PERIOD_ID,@IS_PERIOD_CLOSED,@REF_TYPE, @DELIVERY_DT
3880
			END
3881
			CLOSE XmlDataRecurring;
3882
			DEALLOCATE XmlDataRecurring;
3883
		-- END CURSOR THONG TIN HOP DONG DINH KY
3884

    
3885
		-- DECLARE
3886
			DECLARE @INDEX_PERIOD INT
3887
		--SET
3888
			SET @INDEX_PERIOD = 0
3889
		-- DELETE
3890
			DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID = @p_REQ_PAY_ID
3891
		-- DECLARE
3892
			DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5), @OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),@AMT_PAY_PERIOD DECIMAL(18,2), @FROM_DATE VARCHAR(20),
3893
			@TO_DATE VARCHAR(20),@AD_PAY_ID VARCHAR(15),  @_PROCESS VARCHAR(15),@PARENT_ID VARCHAR(15),@REASON_TTDK NVARCHAR(2000)
3894
		-- DECLARE CURSOR
3895
			DECLARE XmlDataPeriod CURSOR FOR SELECT * FROM OPENXML(@hdocPeriod, '/Root/XmlDataPeriod', 2)
3896
			WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5), OLD_INDEX DECIMAL(18,0),NEW_INDEX DECIMAL(18,0),AMT_PAY DECIMAL(18,2),CURRENCY VARCHAR(5), 
3897
			RATE DECIMAL(18,0),FROM_DATE VARCHAR(20), TO_DATE VARCHAR(20), AD_PAY_ID VARCHAR(15), PROCESS VARCHAR(5),PARENT_ID VARCHAR(15),PAY_PHASE NVARCHAR(250),REASON NVARCHAR(2000))
3898
		-- BEGIN CURSOR THONG TIN THANH TOAN HOP DONG DINH KY
3899
			OPEN XmlDataPeriod;
3900
			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, @AD_PAY_ID, @_PROCESS, @PARENT_ID, 
3901
			@PAY_PHASE, @REASON_TTDK
3902
			WHILE @@fetch_status=0 
3903
			BEGIN
3904
			-- SET
3905
				SET @INDEX_PERIOD = @INDEX_PERIOD +1
3906
			-- BEGIN VALIDATE
3907
				IF(@p_TYPE_FUNCTION ='SEND') 
3908
				BEGIN
3909
					IF(@NEW_INDEX <=@OLD_INDEX AND (@NEW_INDEX >0 AND @OLD_INDEX >0) )
3910
					BEGIN
3911
						ROLLBACK TRANSACTION
3912
						SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PERIOD)+ N' lưới thông tin thanh toán hợp đồng định kì: Chỉ số mới phải lớn hơn chỉ số cũ' ErrorDesc
3913
						RETURN '-1'
3914
					END
3915
					-- NEU LÀ DINH KI THI HD PHAI KHAC NULL
3916
					IF(@CONTRACT_ID IS NULL OR @CONTRACT_ID ='' )
3917
					BEGIN
3918
						ROLLBACK TRANSACTION
3919
						SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PERIOD)+ N' lưới 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
3920
						RETURN '-1'
3921
					END
3922
					-- KIEM TRA CHI TIET HOP DONG PHAI NAM TRONG DANH SACH CAC HOP DONG
3923
					IF(@CONTRACT_ID IS NOT NULL AND  @CONTRACT_ID <> '' )
3924
					BEGIN
3925
						IF(NOT EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REF_ID =@CONTRACT_ID))
3926
						BEGIN
3927
							ROLLBACK TRANSACTION
3928
							SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PERIOD)+ N' lưới 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
3929
							RETURN '-1'
3930
						END
3931
					END
3932
					
3933
					IF(ISNULL(@PARENT_ID, '') = '' AND @_PROCESS = '2')
3934
					BEGIN
3935
						ROLLBACK TRANSACTION
3936
						SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PERIOD)+ N' lưới thông tin thanh toán hợp đồng định kì: Không được để trống cột số phiếu tạm ứng.'
3937
						+ CHAR(10) + 
3938
						N'</br> Nếu hợp đồng định kỳ này có kỳ tạm ứng, vui lòng làm như sau để hoàn ứng: '
3939
						+ CHAR(10) + 
3940
						N'</br> Bước 1: Tại lưới thông tin hợp đồng định kỳ, xóa dòng hợp động kịnh kỳ cần hoàn ứng( hợp đồng có ID hợp đồng(hệ thống): ' + @CONTRACT_ID +
3941
						+ CHAR(10) + 
3942
						N'</br> Bước2: Tại lưới thông tin hợp đồng định kỳ, chọn lại hợp đồng cần hoàn ứng( hợp đồng có ID hợp đồng(hệ thống): ' + @CONTRACT_ID 
3943
						ErrorDesc
3944
						RETURN '-1'
3945
					END
3946
				END
3947
			-- END VALIDATE
3948
				DECLARE @PERIOD_ID VARCHAR(15);
3949
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
3950
				IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
3951
				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,
3952
				TO_DATE,AD_PAY_ID,PROCESS,PARENT_ID,PAY_PHASE,REASON)
3953
				VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103), @OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,'U', @p_REQ_TYPE_CURRENCY , @p_RATE,
3954
				CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK)
3955
			IF @@error<>0 GOTO ABORT;
3956
			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, @AD_PAY_ID, @_PROCESS, @PARENT_ID, 
3957
			@PAY_PHASE, @REASON_TTDK
3958
			END
3959
			CLOSE XmlDataPeriod;
3960
			DEALLOCATE XmlDataPeriod;
3961
		END	
3962
	-- END CURSOR THONG TIN THANH TOAN HOP DONG DINH KY
3963
	
3964
--doanptt 15/02/2022		
3965
-- INSERT JOB
3966
-- DS PHIEU YEU CAU CONG TAC
3967
				DELETE FROM TR_REQ_PAY_JOB WHERE REQ_PAY_ID = @p_REQ_PAY_ID
3968
				DECLARE @INDEX_PYCCT INT = 0
3969
				DECLARE @REQ_PAY_JOB_ID varchar(15) ,@REQ_PAY_ID varchar(15),@REQ_ID varchar(15), @REQ_CODE varchar(15), @MAKER_ID varchar(15),
3970
				@CREATE_DT varchar(15), @PAY_TYPE_J VARCHAR(5), @PAY_PHASE_J NVARCHAR(250), @PAY_AMT DECIMAL(18,0), @PAY_DESC NVARCHAR(1000)
3971
				, @AUTH_STATUS VARCHAR(1), @AUTH_STATUS_KT VARCHAR(1), 
3972
				@REQ_PAY_JOB_DVKD_CODE VARCHAR(20), @REQ_PAY_JOB_HO_ID VARCHAR(20), @BRANCH_CREATE_JOB VARCHAR(20), @DEP_CREATE_JOB VARCHAR(20)
3973
				DECLARE XmlDataJob CURSOR LOCAL FOR
3974
				SELECT * FROM OPENXML(@hdocJob, 'Root/XmlDataJob',2) 
3975
				WITH(REQ_PAY_JOB_ID varchar(15) ,REQ_PAY_ID varchar(15),REQ_ID varchar(15), REQ_CODE varchar(15), MAKER_ID varchar(15),CREATE_DT varchar(15), PAY_TYPE VARCHAR(5), 
3976
				PAY_PHASE NVARCHAR(250), PAY_AMT DECIMAL(18,0), PAY_DESC NVARCHAR(1000), AUTH_STATUS VARCHAR(1), AUTH_STATUS_KT VARCHAR(1))
3977
				OPEN XmlDataJob
3978
--- INSERT PHIEU YEU CAU CONG TAC
3979
				FETCH NEXT FROM XmlDataJob INTO @REQ_PAY_JOB_ID ,@REQ_PAY_ID ,@REQ_ID , @REQ_CODE, @MAKER_ID , @CREATE_DT , @PAY_TYPE_J , @PAY_PHASE_J , 
3980
				@PAY_AMT , @PAY_DESC, @AUTH_STATUS , @AUTH_STATUS_KT
3981
				WHILE @@fetch_status=0 
3982
				BEGIN
3983
					SET @INDEX_PYCCT = @INDEX_PYCCT +1
3984
					/*
3985
					SET @BRANCH_CREATE_JOB = (SELECT TOP 1 B.BRANCH_CODE FROM TR_REQUEST_JOB_FORM A LEFT JOIN CM_BRANCH B ON A.BRANCH_CREATE = B.BRANCH_ID WHERE A.REQ_ID = @REQ_ID)
3986
					SET @DEP_CREATE_JOB = (SELECT B.DEP_CODE FROM TR_REQUEST_JOB_FORM A LEFT JOIN CM_DEPARTMENT B ON A.DEP_CREATE = B.DEP_ID WHERE A.REQ_ID = @REQ_ID)
3987
					IF(@BRANCH_CREATE_JOB = 'DV0001')
3988
					BEGIN
3989
						SET @REQ_PAY_JOB_DVKD_CODE = 'AFT-' + @BRANCH_CREATE_JOB + '-' + @DEP_CREATE_JOB;
3990
					END
3991
					ELSE
3992
					BEGIN
3993
						SET @REQ_PAY_JOB_DVKD_CODE = 'AFT-' + @BRANCH_CREATE_JOB + '-000000'; 
3994
					END
3995
					*/
3996
					IF(@p_TYPE_FUNCTION ='SEND')
3997
					BEGIN
3998
						IF(ISNULL(@REQ_CODE, '') = '' OR ISNULL(@REQ_ID, '') = '')
3999
						BEGIN
4000
							ROLLBACK TRANSACTION
4001
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin thanh toán chi phí đi công tác, dòng '+ CONVERT(VARCHAR(5),@INDEX_PYCCT) + N': Số phiếu yêu cầu công tác không được để trống' ErrorDesc
4002
							RETURN '-1'
4003
						END
4004
						IF(ISNULL(@PAY_TYPE_J, '') = '')
4005
						BEGIN
4006
							ROLLBACK TRANSACTION
4007
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin thanh toán chi phí đi công tác, dòng '+ CONVERT(VARCHAR(5),@INDEX_PYCCT) + N': Loại chi phí không được để trống' ErrorDesc
4008
							RETURN '-1'
4009
						END
4010
						IF(ISNULL(@PAY_PHASE_J, '') = '')
4011
						BEGIN
4012
							ROLLBACK TRANSACTION
4013
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin thanh toán chi phí đi công tác, dòng '+ CONVERT(VARCHAR(5),@INDEX_PYCCT) + N': Kỳ thanh toán không được để trống' ErrorDesc
4014
							RETURN '-1'
4015
						END
4016
						/*
4017
						IF(EXISTS(SELECT REQ_PAY_JOB_ID  FROM TR_REQ_PAY_JOB WHERE REQ_ID = @REQ_ID AND PAY_TYPE = @PAY_TYPE_J AND @REQ_CODE <> @REQ_PAY_JOB_DVKD_CODE))
4018
						BEGIN
4019
							ROLLBACK TRANSACTION
4020
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin thanh toán chi phí đi công tác, dòng '+ CONVERT(VARCHAR(5),@INDEX_PYCCT) + N': Loại chi phí này đã được thanh toán. Vui lòng thanh toán chi phí khác hoặc chọn phiếu yêu cầu công tác khác' ErrorDesc
4021
							RETURN '-1'
4022
						END
4023
						*/
4024
					END
4025
					DECLARE @p_REQ_JOB_ID VARCHAR(15);
4026
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_JOB', @p_REQ_JOB_ID OUT;
4027
					IF @p_REQ_JOB_ID='' OR @p_REQ_JOB_ID IS NULL GOTO ABORT;
4028
					INSERT INTO TR_REQ_PAY_JOB(REQ_PAY_JOB_ID ,REQ_PAY_ID ,REQ_ID , REQ_CODE, MAKER_ID, CREATE_DT , PAY_TYPE , PAY_PHASE , PAY_AMT , PAY_DESC, AUTH_STATUS , AUTH_STATUS_KT)
4029
					VALUES (@p_REQ_JOB_ID ,@p_REQ_PAY_ID ,@REQ_ID , @REQ_CODE, @MAKER_ID , GETDATE() , @PAY_TYPE_J , @PAY_PHASE_J , @PAY_AMT , @PAY_DESC, @AUTH_STATUS , @AUTH_STATUS_KT)
4030
					IF @@error<>0 GOTO ABORT;
4031
					FETCH NEXT FROM XmlDataJob INTO @REQ_PAY_JOB_ID ,@REQ_PAY_ID ,@REQ_ID , @REQ_CODE, @MAKER_ID , @CREATE_DT , @PAY_TYPE_J , @PAY_PHASE_J, @PAY_AMT , @PAY_DESC, @AUTH_STATUS , @AUTH_STATUS_KT
4032
				END;
4033
				CLOSE XmlDataJob;
4034
				DEALLOCATE XmlDataJob;
4035
--- END INSERT PHIEU YEU CAU CONG TAC
4036

    
4037
-- INSERT JOB DT 
4038
-- DS CHI TIET PHIEU YEU CAU CONG TAC
4039
				DELETE FROM TR_REQ_PAY_JOB_DT WHERE REQ_PAY_ID = @p_REQ_PAY_ID
4040
				DECLARE @INDEX_PYCCT_DETAIL INT = 0
4041
				DECLARE @REQ_PAY_JOB_DT_ID varchar(15) , @REQ_PAY_ID_DT varchar(15), @REQ_ID_DT varchar(15), @REQ_CODE_DT varchar(15), @MAKER_ID_DT varchar(15),
4042
				@CREATE_DT_DT varchar(15), @FULLNAME_DT NVARCHAR(250), @TLNAME_DT VARCHAR(15), @JOB_PLACE_DT NVARCHAR(MAX), @FRMDATE_DT VARCHAR(15), @TODATE_DT VARCHAR(15),
4043
				@NUMBER_DAY_DT decimal(18,0), @DAY_RATE_DT decimal(18,0), @JOB_COST_DT decimal(18,0), @TYPE_TRANS_DT varchar(250), @COST_MOVE_DT decimal(18,0), 
4044
				@COST_RESIDENCE_DT decimal(18,0), @COST_OTHER_DT decimal(18,0), @COST_AMT_DT decimal(18,0), @AUTH_STATUS_DT VARCHAR(1), @AUTH_STATUS_KT_DT VARCHAR(1)
4045
				DECLARE XmlDataJobDT CURSOR LOCAL FOR
4046
				SELECT * FROM OPENXML(@hdocJobDT, 'Root/XmlDataJobDT',2) 
4047
				WITH(REQ_PAY_JOB_DT_ID varchar(15), REQ_PAY_ID varchar(15), REQ_ID varchar(15), REQ_CODE varchar(15), MAKER_ID varchar(15), CREATE_DT varchar(15), 
4048
				FULLNAME nvarchar(250), TLNAME_DT VARCHAR(15), JOB_PLACE NVARCHAR(MAX), FRMDATE varchar(15), TODATE varchar(15),NUMBER_DAY decimal(18,0), DAY_RATE decimal(18,0), 
4049
				JOB_COST decimal(18,0), TYPE_TRANS varchar(15), COST_MOVE decimal(18,0), COST_RESIDENCE decimal(18,0), COST_OTHER decimal(18,0), COST_AMT decimal(18,0) , 
4050
				AUTH_STATUS varchar(1), AUTH_STATUS_KT varchar(1)) 
4051
				OPEN XmlDataJobDT
4052

    
4053
--- INSERT CHI TIÊT PHIEU YEU CAU CONG TAC
4054
				FETCH NEXT FROM XmlDataJobDT INTO @REQ_PAY_JOB_DT_ID , @REQ_PAY_ID_DT, @REQ_ID_DT, @REQ_CODE_DT, @MAKER_ID_DT,
4055
				@CREATE_DT_DT , @FULLNAME_DT , @TLNAME_DT, @JOB_PLACE_DT , @FRMDATE_DT , @TODATE_DT ,
4056
				@NUMBER_DAY_DT, @DAY_RATE_DT , @JOB_COST_DT , @TYPE_TRANS_DT , @COST_MOVE_DT, 
4057
				@COST_RESIDENCE_DT, @COST_OTHER_DT , @COST_AMT_DT , @AUTH_STATUS_DT, @AUTH_STATUS_KT_DT
4058
				WHILE @@fetch_status=0 
4059
				BEGIN
4060
					SET @INDEX_PYCCT_DETAIL = @INDEX_PYCCT_DETAIL + 1
4061
					IF(@p_TYPE_FUNCTION ='SEND')
4062
					BEGIN
4063
						IF(ISNULL(@REQ_ID, '') = '')
4064
						BEGIN
4065
							ROLLBACK TRANSACTION
4066
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới Chi tiết chi phí đi công tác, dòng '+ CONVERT(VARCHAR(5),@INDEX_PYCCT_DETAIL) + N': Số phiếu yêu cầu công tác không được để trống' ErrorDesc
4067
							RETURN '-1'
4068
						END
4069
					END
4070

    
4071
					DECLARE @p_REQ_JOB_DT_ID VARCHAR(15);
4072
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_JOB_DT', @p_REQ_JOB_DT_ID OUT;
4073
					IF @p_REQ_JOB_DT_ID='' OR @p_REQ_JOB_DT_ID IS NULL GOTO ABORT;
4074
					INSERT INTO TR_REQ_PAY_JOB_DT(REQ_PAY_JOB_DT_ID , REQ_PAY_ID , REQ_ID , REQ_CODE, MAKER_ID , CREATE_DT , FULLNAME, TLNAME, JOB_PLACE , FRMDATE , TODATE ,NUMBER_DAY , DAY_RATE , 
4075
													JOB_COST , TYPE_TRANS , COST_MOVE , COST_RESIDENCE , COST_OTHER , COST_AMT , AUTH_STATUS, AUTH_STATUS_KT)
4076
					VALUES (@p_REQ_JOB_DT_ID , @p_REQ_PAY_ID, @REQ_ID_DT, @REQ_CODE_DT, @MAKER_ID_DT,
4077
							GETDATE() , @FULLNAME_DT ,@TLNAME_DT, @JOB_PLACE_DT , CONVERT(DATE,@FRMDATE_DT,103) , CONVERT(DATE,@TODATE_DT,103) ,
4078
							@NUMBER_DAY_DT, @DAY_RATE_DT , @JOB_COST_DT , @TYPE_TRANS_DT , @COST_MOVE_DT, 
4079
							@COST_RESIDENCE_DT, @COST_OTHER_DT , 
4080
							ISNULL(@JOB_COST_DT, 0) + ISNULL(@COST_MOVE_DT, 0) + ISNULL(@COST_RESIDENCE_DT, 0) + ISNULL(@COST_OTHER_DT, 0), 
4081
							@AUTH_STATUS_DT, @AUTH_STATUS_KT_DT)
4082
					IF @@error<>0 GOTO ABORT;
4083
					FETCH NEXT FROM XmlDataJobDT INTO @REQ_PAY_JOB_DT_ID , @REQ_PAY_ID_DT, @REQ_ID_DT, @REQ_CODE_DT, @MAKER_ID_DT,
4084
									@CREATE_DT_DT , @FULLNAME_DT , @TLNAME_DT, @JOB_PLACE_DT , @FRMDATE_DT , @TODATE_DT ,
4085
									@NUMBER_DAY_DT, @DAY_RATE_DT , @JOB_COST_DT , @TYPE_TRANS_DT , @COST_MOVE_DT, 
4086
									@COST_RESIDENCE_DT, @COST_OTHER_DT , @COST_AMT_DT , @AUTH_STATUS_DT, @AUTH_STATUS_KT_DT
4087
				END;
4088
				CLOSE XmlDataJobDT;
4089
				DEALLOCATE XmlDataJobDT;
4090
--- END INSERT CHI TIET PHIEU YEU CAU CONG TAC
4091

    
4092

    
4093
--doanptt 17/02/2022		
4094
-- INSERT DRIVE
4095
-- DS PHIEU YEU CAU CONG TAC
4096
				DELETE FROM TR_REQ_PAY_DRIVE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
4097
				DECLARE @INDEX_DRIVE INT = 0
4098
				DECLARE @REQ_PAY_DRIVE_ID varchar(15), @CAR_ID varchar(15), @CAR_PLATE varchar(15), @RATE_GAS_100KM decimal(18,0), @CAR_TYPE NVARCHAR(150)
4099
				DECLARE XmlDataDrive CURSOR LOCAL FOR
4100
				SELECT * FROM OPENXML(@hdocDrive, 'Root/XmlDataDrive',2) 
4101
				WITH(REQ_PAY_DRIVE_ID varchar(15) ,REQ_PAY_ID varchar(15), CAR_ID varchar(15), CAR_PLATE varchar(15), MAKER_ID varchar(15),CREATE_DT varchar(15), PAY_TYPE VARCHAR(5), 
4102
				PAY_PHASE NVARCHAR(250), PAY_AMT DECIMAL(18,0), PAY_DESC NVARCHAR(1000), AUTH_STATUS VARCHAR(1), AUTH_STATUS_KT VARCHAR(1), 
4103
				RATE_GAS_100KM decimal(18,0), CAR_TYPE NVARCHAR(150))
4104
				OPEN XmlDataDrive
4105

    
4106
--- INSERT PHIEU YEU CAU CONG TAC
4107
				FETCH NEXT FROM XmlDataDrive INTO @REQ_PAY_DRIVE_ID ,@REQ_PAY_ID ,@CAR_ID , @CAR_PLATE, @MAKER_ID , @CREATE_DT , @PAY_TYPE , @PAY_PHASE, 
4108
				@PAY_AMT , @PAY_DESC, @AUTH_STATUS , @AUTH_STATUS_KT, @RATE_GAS_100KM, @CAR_TYPE
4109
				WHILE @@fetch_status=0 
4110
				BEGIN
4111
					SET @INDEX_DRIVE = @INDEX_DRIVE + 1;
4112
					IF(@p_TYPE_FUNCTION ='SEND')
4113
					BEGIN
4114
						IF(ISNULL(@CAR_PLATE, '') = '')
4115
						BEGIN
4116
							ROLLBACK TRANSACTION
4117
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin thanh toán chi phí vận hành xe, dòng '+ CONVERT(VARCHAR(5),@INDEX_DRIVE)+ N': Số xe không được phép để trống' ErrorDesc
4118
							RETURN '-1'
4119
						END
4120
						IF(ISNULL(@PAY_TYPE, '') = '')
4121
						BEGIN
4122
							ROLLBACK TRANSACTION
4123
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin thanh toán chi phí vận hành xe, dòng '+ CONVERT(VARCHAR(5),@INDEX_DRIVE)+ N': Loại chi phí không được phép để trống' ErrorDesc
4124
							RETURN '-1'
4125
						END
4126
						IF(ISNULL(@PAY_PHASE, '') = '')
4127
						BEGIN
4128
							ROLLBACK TRANSACTION
4129
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin thanh toán chi phí vận hành xe, dòng '+ CONVERT(VARCHAR(5),@INDEX_DRIVE)+ N': Kỳ thanh toán không được phép để trống' ErrorDesc
4130
							RETURN '-1'
4131
						END
4132
					END
4133
					DECLARE @p_REQ_DRIVE_ID VARCHAR(15);
4134
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_DRIVE', @p_REQ_DRIVE_ID OUT;
4135
					IF @p_REQ_DRIVE_ID='' OR @p_REQ_DRIVE_ID IS NULL GOTO ABORT;
4136
					INSERT INTO TR_REQ_PAY_DRIVE(REQ_PAY_DRIVE_ID ,REQ_PAY_ID ,CAR_ID , CAR_PLATE , MAKER_ID, CREATE_DT , PAY_TYPE , PAY_PHASE , PAY_AMT , PAY_DESC, AUTH_STATUS , AUTH_STATUS_KT, RATE_GAS_100KM, CAR_TYPE)
4137
					VALUES (@p_REQ_DRIVE_ID ,@p_REQ_PAY_ID ,@CAR_ID , @CAR_PLATE, @MAKER_ID , GETDATE() , @PAY_TYPE , @PAY_PHASE , @PAY_AMT , @PAY_DESC, @AUTH_STATUS , @AUTH_STATUS_KT, @RATE_GAS_100KM, @CAR_TYPE)
4138
					IF @@error<>0 GOTO ABORT;
4139
					FETCH NEXT FROM XmlDataDrive INTO @REQ_PAY_DRIVE_ID ,@REQ_PAY_ID ,@CAR_ID , @CAR_PLATE, @MAKER_ID , @CREATE_DT , @PAY_TYPE , @PAY_PHASE, 
4140
					@PAY_AMT , @PAY_DESC, @AUTH_STATUS , @AUTH_STATUS_KT, @RATE_GAS_100KM, @CAR_TYPE
4141
				END;
4142
				CLOSE XmlDataDrive;
4143
				DEALLOCATE XmlDataDrive;
4144
--- END INSERT PHIEU YEU CAU CONG TAC
4145

    
4146
-- INSERT DRIVE DT 
4147
-- DS CHI TIET PHIEU YEU CAU CONG TAC
4148
				DELETE FROM TR_REQ_PAY_DRIVE_DT WHERE REQ_PAY_ID = @p_REQ_PAY_ID
4149
				DECLARE @REQ_PAY_DRIVE_DT_ID varchar(15), @FULLNAME NVARCHAR(250), @BRANCH_REQ VARCHAR(15), 
4150
				@KM_START decimal(18,2), @KM_END varchar(250), @KM_USED decimal(18,2), 
4151
				@RATE_GAS decimal(18,2), @REAL_GAS decimal(18,2), @REDUNDANCY_GAS decimal(18,2), @INVENTORY_GAS decimal(18,2), @COST_INCURRED decimal(18,2),
4152
				@CREATE_SCHEDULE NVARCHAR(250), @TRUONGDONVI VARCHAR(15), @INVENTORY_GAS_START decimal(18,2)
4153
				DECLARE XmlDataDriveDT CURSOR LOCAL FOR
4154
				SELECT * FROM OPENXML(@hdocDriveDT, 'Root/XmlDataDriveDT',2) 
4155
				WITH(REQ_PAY_DRIVE_ID varchar(15), REQ_PAY_ID varchar(15), CAR_ID varchar(15), MAKER_ID varchar(15), CREATE_DT varchar(15), 
4156
				BRANCH_REQ varchar(15), PAY_PHASE NVARCHAR(250), CAR_TYPE Nvarchar(250), CAR_PLATE varchar(15),RATE_GAS_100KM decimal(18,2), KM_START decimal(18,2), 
4157
				KM_END decimal(18,2), KM_USED varchar(15), RATE_GAS decimal(18,2), REAL_GAS decimal(18,2), REDUNDANCY_GAS decimal(18,2), INVENTORY_GAS decimal(18,2), 
4158
				NOTES NVARCHAR(MAX), COST_INCURRED decimal(18,2), CREATE_SCHEDULE NVARCHAR(250), TRUONGDONVI VARCHAR(15) , 
4159
				AUTH_STATUS varchar(1), AUTH_STATUS_KT varchar(1), INVENTORY_GAS_START decimal(18,2)) 
4160
				OPEN XmlDataDriveDT
4161

    
4162
				DECLARE @INDEX_DRIVEDT INT = 0
4163

    
4164
--- INSERT CHI TIÊT PHIEU YEU CAU CONG TAC
4165
				FETCH NEXT FROM XmlDataDriveDT INTO @REQ_PAY_DRIVE_ID , @REQ_PAY_ID, @CAR_ID, @MAKER_ID, @CREATE_DT, @BRANCH_REQ, @PAY_PHASE, @CAR_TYPE, @CAR_PLATE, 
4166
				@RATE_GAS_100KM, @KM_START, @KM_END, @KM_USED, @RATE_GAS, @REAL_GAS, @REDUNDANCY_GAS, @INVENTORY_GAS, @NOTES, @COST_INCURRED, @CREATE_SCHEDULE,
4167
				@TRUONGDONVI, @AUTH_STATUS, @AUTH_STATUS_KT, @INVENTORY_GAS_START
4168
				WHILE @@fetch_status=0 
4169
				BEGIN
4170
					SET @INDEX_DRIVEDT = @INDEX_DRIVEDT + 1;
4171
					IF(@p_TYPE_FUNCTION ='SEND')
4172
					BEGIN
4173
						IF(ISNULL(@CAR_PLATE, '') = '')
4174
						BEGIN
4175
							ROLLBACK TRANSACTION
4176
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới bảng kê chi phí sử dụng nhiên liệu, dòng '+ CONVERT(VARCHAR(5),@INDEX_DRIVE)+ N': Biển số không được phép để trống' ErrorDesc
4177
							RETURN '-1'
4178
						END
4179
					END
4180
					DECLARE @p_REQ_DRIVE_DT_ID VARCHAR(15);
4181
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_DRIVE_DT', @p_REQ_DRIVE_DT_ID OUT;
4182
					IF @p_REQ_DRIVE_DT_ID='' OR @p_REQ_DRIVE_DT_ID IS NULL GOTO ABORT;
4183

    
4184
					INSERT INTO TR_REQ_PAY_DRIVE_DT(REQ_PAY_DRIVE_DT_ID, REQ_PAY_ID, CAR_ID, MAKER_ID, CREATE_DT, BRANCH_REQ, PAY_PHASE, CAR_TYPE, CAR_PLATE,
4185
					RATE_GAS_100KM, KM_START, KM_END, KM_USED, RATE_GAS, REAL_GAS, REDUNDANCY_GAS, INVENTORY_GAS, COST_INCURRED, NOTES, CREATE_SCHEDULE, TRUONGDONVI,
4186
					AUTH_STATUS, AUTH_STATUS_KT, INVENTORY_GAS_START)
4187
					VALUES (@p_REQ_DRIVE_DT_ID , @p_REQ_PAY_ID, @CAR_ID, @MAKER_ID, @CREATE_DT, @BRANCH_REQ, @PAY_PHASE, @CAR_TYPE, @CAR_PLATE, 
4188
					@RATE_GAS_100KM, @KM_START, @KM_END, @KM_USED, @RATE_GAS, @REAL_GAS, @REDUNDANCY_GAS, @INVENTORY_GAS, @COST_INCURRED, @NOTES,
4189
					@CREATE_SCHEDULE, @TRUONGDONVI, @AUTH_STATUS, @AUTH_STATUS_KT, @INVENTORY_GAS_START)
4190
					IF @@error<>0 GOTO ABORT;
4191

    
4192
					FETCH NEXT FROM XmlDataDriveDT INTO @REQ_PAY_DRIVE_ID , @REQ_PAY_ID, @CAR_ID, @MAKER_ID, @CREATE_DT, @BRANCH_REQ, @PAY_PHASE, @CAR_TYPE, @CAR_PLATE, 
4193
					@RATE_GAS_100KM, @KM_START, @KM_END, @KM_USED, @RATE_GAS, @REAL_GAS, @REDUNDANCY_GAS, @INVENTORY_GAS, @NOTES, @COST_INCURRED, @CREATE_SCHEDULE,
4194
					@TRUONGDONVI, @AUTH_STATUS, @AUTH_STATUS_KT, @INVENTORY_GAS_START
4195
				END;
4196
				CLOSE XmlDataDriveDT;
4197
				DEALLOCATE XmlDataDriveDT;
4198
--- END INSERT CHI TIET PHIEU YEU CAU CONG TAC
4199

    
4200
-- INSERT REQUEST CAR
4201
-- DS PHIEU YEU CAU XE
4202
				DELETE FROM TR_REQ_PAY_REQUEST_CAR WHERE REQ_PAY_ID = @p_REQ_PAY_ID
4203
				DECLARE @REQ_PAY_REQUEST_CAR_ID varchar(15), @REQ_CAR_REQ_PAY_ID VARCHAR(15), @REQ_CAR_REQ_ID VARCHAR(15), 
4204
				@REQ_CAR_REQ_CODE varchar(25), @BRANCH_CREATE_FULLNAME nvarchar(1000), @DEP_CREATE_FULLNAME nvarchar(100), 
4205
				@REQ_CAR_NOTES NVARCHAR(1000), @REQ_CAR_MAKER_ID varchar(25), @REQ_CAR_CREATE_DT varchar(50), @REQ_CAR_CHECKER_ID varchar(25), @REQ_CAR_APPROVE_DT varchar(50)
4206

    
4207
				DECLARE XmlDataRequestCar CURSOR LOCAL FOR
4208
				SELECT * FROM OPENXML(@hdocRequestCar, 'Root/XmlDataReqCar',2) 
4209
				WITH(REQ_PAY_REQUEST_CAR_ID varchar(15), REQ_PAY_ID varchar(15), REQ_ID varchar(15), REQ_CODE varchar(25), MAKER_ID varchar(15), CREATE_DT varchar(50),
4210
				CHECKER_ID varchar(15), APPROVE_DT varchar(50), BRANCH_CREATE_FULLNAME nvarchar(1000), DEP_CREATE_FULLNAME nvarchar(1000), NOTES nvarchar(1000)) 
4211
				OPEN XmlDataRequestCar
4212

    
4213
--- INSERT PHIEU YEU CAU XE
4214
				FETCH NEXT FROM XmlDataRequestCar INTO @REQ_PAY_REQUEST_CAR_ID, @REQ_CAR_REQ_PAY_ID, @REQ_CAR_REQ_ID, @REQ_CAR_REQ_CODE, @REQ_CAR_MAKER_ID, @REQ_CAR_CREATE_DT,
4215
				@REQ_CAR_CHECKER_ID, @REQ_CAR_APPROVE_DT, @BRANCH_CREATE_FULLNAME, @DEP_CREATE_FULLNAME, @REQ_CAR_NOTES
4216
				WHILE @@fetch_status=0 
4217
				BEGIN
4218
					DECLARE @p_REQUEST_CAR_ID VARCHAR(15);
4219
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_REQUEST_CAR', @p_REQUEST_CAR_ID OUT;
4220
					IF @p_REQUEST_CAR_ID='' OR @p_REQUEST_CAR_ID IS NULL GOTO ABORT;
4221

    
4222
						
4223
					INSERT INTO [dbo].[TR_REQ_PAY_REQUEST_CAR]
4224
							   ([REQ_PAY_REQUEST_CAR_ID]
4225
							   ,[REQ_PAY_ID]
4226
							   ,[REQ_ID]
4227
							   ,[REQ_CODE]
4228
							   ,[MAKER_ID]
4229
							   ,[CREATE_DT]
4230
							   ,[CHECKER_ID]
4231
							   ,[APPROVE_DT]
4232
							   ,[BRANCH_CREATE_FULLNAME]
4233
							   ,[DEP_CREATE_FULLNAME]
4234
							   ,[NOTES])
4235
						 VALUES
4236
							   (@p_REQUEST_CAR_ID
4237
							   ,@p_REQ_PAY_ID
4238
							   ,@REQ_CAR_REQ_ID
4239
							   ,@REQ_CAR_REQ_CODE
4240
							   ,@REQ_CAR_MAKER_ID
4241
							   ,CONVERT(DATETIME, @REQ_CAR_CREATE_DT, 103)
4242
							   ,@REQ_CAR_CHECKER_ID
4243
							   ,CONVERT(DATETIME, @REQ_CAR_APPROVE_DT, 103)
4244
							   ,@BRANCH_CREATE_FULLNAME
4245
							   ,@DEP_CREATE_FULLNAME
4246
							   ,@REQ_CAR_NOTES)
4247

    
4248
					IF @@error<>0 GOTO ABORT;
4249
					FETCH NEXT FROM XmlDataRequestCar INTO @REQ_PAY_REQUEST_CAR_ID, @REQ_CAR_REQ_PAY_ID, @REQ_CAR_REQ_ID, @REQ_CAR_REQ_CODE, @REQ_CAR_MAKER_ID, @REQ_CAR_CREATE_DT,
4250
					@REQ_CAR_CHECKER_ID, @REQ_CAR_APPROVE_DT, @BRANCH_CREATE_FULLNAME, @DEP_CREATE_FULLNAME, @REQ_CAR_NOTES
4251
				END;
4252
				CLOSE XmlDataRequestCar;
4253
				DEALLOCATE XmlDataRequestCar;
4254
--- END INSERT PHIEU YEU CAU XE
4255

    
4256
-- INSERT TEMPLATE_REQUEST
4257
-- DS TO TRINH NGHIEP VU
4258
				DELETE FROM CM_TEMPLATE_REQUEST_DOC WHERE TRN_ID = @p_REQ_PAY_ID
4259
				DECLARE @REQUEST_TEMPLATE_ID VARCHAR(20), @REQUEST_TEMPLATE_CODE VARCHAR(20), @REQUEST_TEMPLATE_NAME NVARCHAR(500), 
4260
				@TYPE_TEMPLATE_NAME NVARCHAR(500), @REPORT_NO NVARCHAR(500), @BRANCH_NAME NVARCHAR(100), @REPORT_DT VARCHAR(25), @APPROVE_DT VARCHAR(25)
4261

    
4262
				DECLARE XmlDataTemplateRequestDoc CURSOR LOCAL FOR
4263
				SELECT * FROM OPENXML(@hdocTemplateRequestDoc, 'Root/XmlDataTemplateRequestDoc',2) 
4264
				WITH(REQUEST_TEMPLATE_ID VARCHAR(20), REQUEST_TEMPLATE_CODE VARCHAR(20), REQUEST_TEMPLATE_NAME NVARCHAR(500), 
4265
				TYPE_TEMPLATE_NAME NVARCHAR(500), REPORT_NO NVARCHAR(500), BRANCH_NAME NVARCHAR(100), REPORT_DT VARCHAR(25), APPROVE_DT VARCHAR(25)) 
4266
				OPEN XmlDataTemplateRequestDoc
4267

    
4268
--- INSERT TO TRINH NGHIEP VU
4269
				FETCH NEXT FROM XmlDataTemplateRequestDoc INTO @REQUEST_TEMPLATE_ID, @REQUEST_TEMPLATE_CODE, @REQUEST_TEMPLATE_NAME, 
4270
				@TYPE_TEMPLATE_NAME, @REPORT_NO, @BRANCH_NAME, @REPORT_DT, @APPROVE_DT
4271
				WHILE @@fetch_status=0 
4272
				BEGIN
4273
					DECLARE @l_CM_TEMPLATE_REQUEST_DOC_ID VARCHAR(15);
4274
					EXEC SYS_CodeMasters_Gen 'CM_TEMPLATE_REQUEST_DOC', @l_CM_TEMPLATE_REQUEST_DOC_ID OUT;
4275
					IF @l_CM_TEMPLATE_REQUEST_DOC_ID='' OR @l_CM_TEMPLATE_REQUEST_DOC_ID IS NULL GOTO ABORT;
4276

    
4277
						
4278
					INSERT INTO [dbo].[CM_TEMPLATE_REQUEST_DOC]
4279
					([CM_TEMPLATE_REQUEST_DOC_ID] ,[TRN_ID] ,[REQUEST_TEMPLATE_ID] ,[MAKER_ID] ,[CREATE_DT] )
4280
					VALUES (@l_CM_TEMPLATE_REQUEST_DOC_ID ,@p_REQ_PAY_ID ,@REQUEST_TEMPLATE_ID ,@p_MAKER_ID , GETDATE())
4281

    
4282
				IF @@error<>0 GOTO ABORT;
4283
				FETCH NEXT FROM XmlDataTemplateRequestDoc INTO @REQUEST_TEMPLATE_ID, @REQUEST_TEMPLATE_CODE, @REQUEST_TEMPLATE_NAME, 
4284
				@TYPE_TEMPLATE_NAME, @REPORT_NO, @BRANCH_NAME, @REPORT_DT, @APPROVE_DT
4285
				END;
4286
				CLOSE XmlDataTemplateRequestDoc;
4287
				DEALLOCATE XmlDataTemplateRequestDoc;
4288
--- END INSERT TO TRINH NGHIEP VU
4289

    
4290
COMMIT TRANSACTION
4291
-- BEIGN VALIDATE SEND APPROVE
4292
	IF(@p_TYPE_FUNCTION ='SEND') -- KIEM TRA NEU 2 BIEN XML KHAC NULL TUC LA DANG TRONG QUA TRINH LUU NHAP
4293
	BEGIN
4294
	-- VALIDATE CAC LUOI THANH TOAN
4295
		IF((SELECT COUNT(*) FROM TR_REQ_PAY_SERVICE WHERE REQ_PAY_ID = @p_REQ_PAY_ID) = 0 AND @p_REQ_TYPE = 'D')
4296
		BEGIN
4297
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới thông tin các dịch vụ thanh toán không được để trống'  ErrorDesc
4298
			RETURN '-1'
4299
		END
4300
		/*
4301
		*/
4302
		ELSE IF((SELECT COUNT(*) FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID = @p_REQ_PAY_ID) = 0 AND @p_REQ_TYPE = 'P' AND @p_IS_PERIOD <> 'Y')
4303
		BEGIN
4304
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới thông tin PO/ hợp đồng không được để trống'  ErrorDesc
4305
			RETURN '-1'
4306
		END
4307
		ELSE IF((SELECT COUNT(*) FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID = @p_REQ_PAY_ID) = 0 AND @p_REQ_TYPE = 'P' AND @p_IS_PERIOD = 'Y')
4308
		BEGIN
4309
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới thông tin hợp đồng định kỳ không được để trống'  ErrorDesc
4310
			RETURN '-1'
4311
		END
4312

    
4313
	-- DECLARE
4314
		DECLARE @BRANCH_TYPE_CR VARCHAR(15)
4315
		DECLARE @SUM_THANH_TOAN DECIMAL(18,0) =0, @SUM_PHUONG_THUC DECIMAL(18,0) =0, @SUM_NGAN_SACH DECIMAL(18,2) =0, @SUM_USE_REAL DECIMAL(18,2), @SUM_SERVICE DECIMAL(18,0),
4316
		@SUM_SCHEDULE DECIMAL(18,0), @SUM_PERIOD DECIMAL(18,0), @SUM_PAY_BACK DECIMAL(18,0) =0, @SUM_ADD DECIMAL(18,0), @SUM_USE_I DECIMAL(18,0)
4317
	-- SET
4318
		SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
4319
		SET @SUM_THANH_TOAN =(SELECT ISNULL(SUM(REQ_AMT * ISNULL(RATE,1)),0) FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
4320
		SET @SUM_PHUONG_THUC =ABS((SELECT ISNULL(SUM(TOTAL_AMT * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID  
4321
		AND (TYPE_TRANSFER ='A' OR TYPE_TRANSFER IS NULL OR TYPE_TRANSFER ='')) - (SELECT ISNULL(SUM(TOTAL_AMT * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID  
4322
		AND TYPE_TRANSFER ='R'))
4323
		SET @SUM_NGAN_SACH =(SELECT ISNULL(SUM(AMT_EXE * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
4324
		SET @SUM_SERVICE =(SELECT ISNULL(SUM(TOTAL_AMT * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_SERVICE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
4325
		SET @SUM_PERIOD =(SELECT ISNULL(SUM(AMT_PAY * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
4326
		SET @SUM_SCHEDULE =(SELECT ISNULL(SUM(AMT_PAY_REAL * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
4327

    
4328
		PRINT '@SUM_THANH_TOAN: ' + CONVERT(VARCHAR(20),@SUM_THANH_TOAN);
4329
		PRINT '@SUM_PHUONG_THUC: ' + CONVERT(VARCHAR(20),@SUM_PHUONG_THUC);
4330
		PRINT '@SUM_NGAN_SACH: ' + CONVERT(VARCHAR(20),@SUM_NGAN_SACH);
4331
		PRINT '@SUM_SERVICE: ' + CONVERT(VARCHAR(20),@SUM_SERVICE);
4332
		PRINT '@SUM_PERIOD: ' + CONVERT(VARCHAR(20),@SUM_PERIOD);
4333
		PRINT '@SUM_SCHEDULE: ' + CONVERT(VARCHAR(20),@SUM_SCHEDULE);
4334

    
4335
		IF(@p_REQ_TYPE ='I')
4336
		BEGIN
4337
			/*SET @SUM_USE_I =	(SELECT ISNULL(SUM(TOTAL_AMT*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_SERVICE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
4338
							+	(SELECT ISNULL(SUM(AMT_PAY*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
4339
							+	(SELECT ISNULL(SUM(AMT_PAY_REAL*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)*/
4340
			SET @SUM_USE_REAL =(SELECT ISNULL(SUM(AMT_USE*ISNULL(RATE,1)),0) FROM TR_REQ_PAYMENT_DT WHERE PAY_ID =@p_REQ_PAY_ID)
4341
			SET @SUM_PAY_BACK =(SELECT ISNULL(SUM(AMT_REVERT*ISNULL(RATE,1)),0) FROM TR_REQ_PAYMENT_DT WHERE PAY_ID =@p_REQ_PAY_ID)
4342
			SET @SUM_ADD =(SELECT ISNULL(SUM(AMT_ADD*ISNULL(RATE,1)),0) FROM TR_REQ_PAYMENT_DT WHERE PAY_ID =@p_REQ_PAY_ID)
4343
			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 AND TYPE_TRANSFER ='A') -
4344
			(SELECT ISNULL(SUM(TOTAL_AMT * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND TYPE_TRANSFER ='R')
4345
		END
4346
		IF(@p_REQ_TYPE ='P' AND @p_IS_PERIOD ='Y' AND @p_IS_PERIOD <>'' AND @p_IS_PERIOD IS NOT NULL)
4347
		BEGIN
4348
			SET @SUM_USE_REAL =(SELECT ISNULL(SUM(AMT_PAY*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
4349
			--SET @SUM_PAY_BACK =(SELECT ISNULL(SUM(AMT_PAY*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND PROCESS <> '0')
4350
					
4351
		END
4352
		IF(@p_REQ_TYPE ='P' AND (@p_IS_PERIOD ='N' OR (@p_IS_PERIOD ='' OR @p_IS_PERIOD IS NULL)))
4353
		BEGIN
4354
			SET @SUM_USE_REAL =(SELECT ISNULL(SUM(AMT_PAY_REAL*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)	
4355
			SET @SUM_PAY_BACK =(SELECT ISNULL(SUM(AMT_ADVANCE*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
4356
		END
4357
		IF(@p_REQ_TYPE ='D')
4358
		BEGIN
4359
			SET @SUM_USE_REAL =(SELECT ISNULL(SUM(TOTAL_AMT*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_SERVICE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
4360
		END
4361
		IF(@p_REQ_TYPE = 'D' AND ROUND(@SUM_NGAN_SACH,0) <> ROUND(@SUM_THANH_TOAN,0))
4362
		BEGIN
4363
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền sử dụng ngân sách và chi phí phải bằng số tiền bạn cần thanh toán là: ' + FORMAT(SUM(@SUM_THANH_TOAN),'#,#', 'vi-VN') ErrorDesc
4364
			RETURN '-1'
4365
		END
4366
		PRINT '@SUM_USE_REAL: ' + CONVERT(VARCHAR(20),@SUM_USE_REAL);
4367
		PRINT '@@SUM_NGAN_SACH: ' + CONVERT(VARCHAR(20),ROUND(@SUM_NGAN_SACH,0));
4368
		PRINT '@@SUM_USE_REAL: ' + CONVERT(VARCHAR(20),ROUND(@SUM_USE_REAL,0));
4369
		IF(ROUND(@SUM_NGAN_SACH,0) <> ROUND(@SUM_USE_REAL,0))
4370
		BEGIN
4371
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền sử dụng ngân sách và chi phí phải bằng số tiền bạn sử dụng thực tế là: ' +  FORMAT(SUM(@SUM_USE_REAL),'#,#', 'vi-VN')  ErrorDesc
4372
			RETURN '-1'
4373
		END
4374
		IF(EXISTS(SELECT * FROM TR_REQ_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')
4375
		BEGIN
4376
			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
4377
			RETURN '-1'
4378
		END
4379
		IF(@p_REQ_TYPE <> 'I')
4380
		BEGIN
4381
			IF(NOT EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID  =@p_REQ_PAY_ID))
4382
			BEGIN
4383
				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
4384
				RETURN '-1'
4385
			END
4386
			IF(ROUND(@SUM_THANH_TOAN,0) <> ROUND(@SUM_PHUONG_THUC,0))
4387
			BEGIN
4388
				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(ISNULL(@SUM_THANH_TOAN, 0),'#,#', 'vi-VN') ErrorDesc
4389
				RETURN '-1'
4390
			END
4391
		END
4392
		ELSE
4393
		BEGIN
4394
			print 'START thanh toan hoan tam ung'
4395
			IF(ISNULL(@SUM_USE_REAL,0) >0)
4396
			BEGIN
4397
				IF(NOT EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID  =@p_REQ_PAY_ID))
4398
				BEGIN
4399
					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
4400
					RETURN '-1'	
4401
				END
4402
				IF(ROUND(@SUM_NGAN_SACH,0) <> ROUND(@SUM_USE_REAL,0))
4403
				BEGIN
4404
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền sử dụng ngân sách và chi phí phải bằng số tiền sử dụng thực tế trên lưới hoàn tạm ứng: ' + FORMAT(SUM(@SUM_USE_REAL),'#,#', 'vi-VN')  ErrorDesc
4405
					RETURN '-1'
4406
				END
4407
				IF(ISNULL(@SUM_USE_REAL,0) <> (ISNULL(@SUM_SERVICE,0) + ISNULL(@SUM_PERIOD,0) + ISNULL(@SUM_SCHEDULE,0)))
4408
				BEGIN
4409
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Tổng số tiền thanh toán dịch vụ, thanh toán nhà cung cấp, thanh toán định kì phải bằng số tiền sử dụng thực tế trên lưới hoàn tạm ứng: ' + FORMAT(SUM(@SUM_USE_REAL),'#,#', 'vi-VN') ErrorDesc
4410
					RETURN '-1'
4411
				END
4412
			END
4413
			--IF(ABS((ISNULL(@SUM_ADD,0) - ISNULL(@SUM_PAY_BACK,0))) <> @SUM_PHUONG_THUC)
4414
			IF(((ISNULL(@SUM_ADD,0) - ISNULL(@SUM_PAY_BACK,0))) <> @SUM_PHUONG_THUC)
4415
			BEGIN
4416
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền phương thức thanh toán (hiệu số thanh toán và trích từ tai khoản) tương ứng với số tiền chi bổ sung trừ số tiền hoàn tạm ứng: ' + FORMAT(ABS((ISNULL(@SUM_ADD,0) - ISNULL(@SUM_PAY_BACK,0))),'#,#', 'vi-VN') + ' ' + CAST(@SUM_PHUONG_THUC as nvarchar)  ErrorDesc
4417
				RETURN '-1'
4418
			END
4419
		END
4420
		-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
4421
		IF(ISNULL(@p_TRASFER_USER_RECIVE, '') <> '')
4422
		BEGIN
4423
			UPDATE TR_REQ_PAYMENT SET AUTH_STATUS ='W', PROCESS = NULL WHERE REQ_PAY_ID =@p_REQ_PAY_ID
4424
		END
4425
		ELSE
4426
		BEGIN
4427
			UPDATE TR_REQ_PAYMENT SET AUTH_STATUS ='U', PROCESS = NULL WHERE REQ_PAY_ID =@p_REQ_PAY_ID
4428
		END
4429
		
4430
		INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
4431
				
4432
		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 thanh toán và gửi phê duyệt')
4433
		--- Luu log chinh sua
4434
		INSERT INTO TR_REQ_PAY_INVOICE_LOG SELECT * FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID =@p_REQ_PAY_ID
4435
		-----
4436
		UPDATE TR_REQ_PAY_SCHEDULE SET AMT_REMAIN =0.00 WHERE AMT_REMAIN <0
4437
		UPDATE TR_REQ_PAY_BUDGET SET AMT_APP= ROUND(AMT_APP,0), AMT_REMAIN = ROUND(AMT_REMAIN,0)
4438
				
4439
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE (TRASFER_USER_RECIVE <> '' AND TRASFER_USER_RECIVE IS NOT NULL) AND REQ_PAY_ID =@p_REQ_PAY_ID))
4440
		BEGIN
4441
			SELECT '4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, N'Đơn vị gửi phiếu phê duyệt phiếu đề nghị thanh toán 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
4442
			RETURN '4'
4443
		END
4444
		ELSE
4445
		BEGIN
4446
			SELECT '4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, N'Đơn vị gửi phiếu phê duyệt phiếu đề nghị thanh toán 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
4447
			RETURN '4'
4448
		END
4449
	END
4450
-- END VALIDATE SEND APPROVE	
4451

    
4452

    
4453
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
4454
RETURN '0'
4455
ABORT:
4456
BEGIN
4457
		ROLLBACK TRANSACTION
4458
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
4459
		RETURN '-1'
4460
End
4461

    
4462
GO
4463

    
4464
--08082023_secretkey