DBA Data[Home] [Help]

PACKAGE BODY: APPS.IEX_PAYMENTS_PUB

Source


1 PACKAGE BODY IEX_PAYMENTS_PUB as
2 /* $Header: iexpypyb.pls 120.15.12010000.2 2008/08/29 13:53:38 gnramasa ship $ */
3 
4 PG_DEBUG NUMBER; -- := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
5 
6 G_APP_ID   CONSTANT NUMBER := 695;
7 G_PKG_NAME CONSTANT VARCHAR2(30):= 'IEX_PAYMENTS_PUB';
8 G_FILE_NAME CONSTANT VARCHAR2(12) := 'iexpypyb.pls';
9 G_LOGIN_ID NUMBER; --  := FND_GLOBAL.Conc_Login_Id;
10 G_PROGRAM_ID NUMBER; --  := FND_GLOBAL.Conc_Program_Id;
11 G_USER_ID NUMBER; -- := FND_GLOBAL.User_Id;
12 G_REQUEST_ID NUMBER; --  := FND_GLOBAL.Conc_Request_Id;
13 G_ONLINE_CCPAY varchar2(5) := NVL(fnd_profile.value('IEX_ONLINE_CCPAY'),'N'); -- Fix a bug 5897567
14 
15 
16 procedure validate_input(
17 	P_PMT_REC			IN	IEX_PAYMENTS_PUB.PMT_REC_TYPE,
18 	P_PMTDTLS_TBL			IN	IEX_PAYMENTS_PUB.PMTDTLS_TBL_TYPE,
19 	P_PMTINSTR_REC			IN	IEX_PAYMENTS_PUB.PMTINSTR_REC_TYPE)
20 
21 is
22 	l_count		number; --  := P_PMTDTLS_TBL.COUNT;
23 	l_amount	number;
24 begin
25 	l_count		:= P_PMTDTLS_TBL.COUNT;
26 	/* validate payment target */
27 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
28 	iex_debug_pub.LogMessage('validate_input: Validating P_PMT_REC.PAYMENT_TARGET');
29 	iex_debug_pub.LogMessage('validate_input: P_PMT_REC.PAYMENT_TARGET = ' || P_PMT_REC.PAYMENT_TARGET);
30 END IF;
31 	if P_PMT_REC.PAYMENT_TARGET is null or
32 	   (P_PMT_REC.PAYMENT_TARGET <> 'ACCOUNTS' and
33 	   P_PMT_REC.PAYMENT_TARGET <> 'INVOICES' and
34 	   P_PMT_REC.PAYMENT_TARGET <> 'CNSLD' and
35 	   P_PMT_REC.PAYMENT_TARGET <> 'CONTRACTS')
36 	then
37 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
38 		iex_debug_pub.LogMessage('validate_input: P_PMT_REC.PAYMENT_TARGET failed validation');
39 END IF;
40 		FND_MESSAGE.SET_NAME('IEX','IEX_BAD_API_INPUT');
41 		FND_MESSAGE.SET_TOKEN('API_NAME', G_PKG_NAME || '.CREATE_PAYMENT');
42 		FND_MESSAGE.SET_TOKEN('API_PARAMETER', 'P_PMT_REC.PAYMENT_TARGET');
43 		FND_MSG_PUB.Add;
44 		RAISE FND_API.G_EXC_ERROR;
45 	end if;
46 
47 	/* validate total_amount */
48 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
49 	iex_debug_pub.LogMessage('validate_input: Validating P_PMT_REC.TOTAL_AMOUNT');
50 	iex_debug_pub.LogMessage('validate_input: P_PMT_REC.TOTAL_AMOUNT = ' || P_PMT_REC.TOTAL_AMOUNT);
51 END IF;
52 	if P_PMT_REC.TOTAL_AMOUNT is null or P_PMT_REC.TOTAL_AMOUNT <= 0
53 	then
54 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
55 		iex_debug_pub.LogMessage('validate_input: P_PMT_REC.TOTAL_AMOUNT failed validation');
56 END IF;
57 		FND_MESSAGE.SET_NAME('IEX','IEX_BAD_API_INPUT');
58 		FND_MESSAGE.SET_TOKEN('API_NAME', G_PKG_NAME || '.CREATE_PAYMENT');
59 		FND_MESSAGE.SET_TOKEN('API_PARAMETER', 'P_PMT_REC.TOTAL_AMOUNT');
60 		FND_MSG_PUB.Add;
61 		RAISE FND_API.G_EXC_ERROR;
62 	end if;
63 
64 	/* validate currency */
65 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
66 	iex_debug_pub.LogMessage('validate_input: Validating P_PMT_REC.CURRENCY_CODE');
67 	iex_debug_pub.LogMessage('validate_input: P_PMT_REC.CURRENCY_CODE = ' || P_PMT_REC.CURRENCY_CODE);
68 END IF;
69 	if P_PMT_REC.CURRENCY_CODE is null
70 	then
71 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
72 		iex_debug_pub.LogMessage('validate_input: P_PMT_REC.CURRENCY_CODE failed validation');
73 END IF;
74 		FND_MESSAGE.SET_NAME('IEX','IEX_BAD_API_INPUT');
75 		FND_MESSAGE.SET_TOKEN('API_NAME', G_PKG_NAME || '.CREATE_PAYMENT');
76 		FND_MESSAGE.SET_TOKEN('API_PARAMETER', 'P_PMT_REC.CURRENCY_CODE');
77 		FND_MSG_PUB.Add;
78 		RAISE FND_API.G_EXC_ERROR;
79 	end if;
80 
81 	/* validate exchange_rate_type */
82 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
83 	iex_debug_pub.LogMessage('validate_input: P_PMT_REC.PAYMENT_TARGET = ' || P_PMT_REC.PAYMENT_TARGET);
84 END IF;
85 	if P_PMT_REC.PAYMENT_TARGET = 'ACCOUNTS' or P_PMT_REC.PAYMENT_TARGET = 'INVOICES'
86 	then
87 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
88 		iex_debug_pub.LogMessage('validate_input: Validating P_PMT_REC.EXCHANGE_RATE_TYPE');
89 		iex_debug_pub.LogMessage('validate_input: P_PMT_REC.EXCHANGE_RATE_TYPE = ' || P_PMT_REC.EXCHANGE_RATE_TYPE);
90 END IF;
91 		if P_PMT_REC.EXCHANGE_RATE_TYPE is null
92 		then
93 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
94 			iex_debug_pub.LogMessage('validate_input: P_PMT_REC.EXCHANGE_RATE_TYPE failed validation');
95 END IF;
96 			FND_MESSAGE.SET_NAME('IEX','IEX_BAD_API_INPUT');
97 			FND_MESSAGE.SET_TOKEN('API_NAME', G_PKG_NAME || '.CREATE_PAYMENT');
98 			FND_MESSAGE.SET_TOKEN('API_PARAMETER', 'P_PMT_REC.EXCHANGE_RATE_TYPE');
99 			FND_MSG_PUB.Add;
100 			RAISE FND_API.G_EXC_ERROR;
101 		end if;
102 
103 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
104 		iex_debug_pub.LogMessage('validate_input: Validating P_PMT_REC.EXCHANGE_DATE');
105 		iex_debug_pub.LogMessage('validate_input: P_PMT_REC.EXCHANGE_DATE = ' || P_PMT_REC.EXCHANGE_DATE);
106 END IF;
107 		if P_PMT_REC.EXCHANGE_DATE is null
108 		then
109 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
110 			iex_debug_pub.LogMessage('validate_input: P_PMT_REC.EXCHANGE_DATE failed validation');
111 END IF;
112 			FND_MESSAGE.SET_NAME('IEX','IEX_BAD_API_INPUT');
113 			FND_MESSAGE.SET_TOKEN('API_NAME', G_PKG_NAME || '.CREATE_PAYMENT');
114 			FND_MESSAGE.SET_TOKEN('API_PARAMETER', 'P_PMT_REC.EXCHANGE_DATE');
115 			FND_MSG_PUB.Add;
116 			RAISE FND_API.G_EXC_ERROR;
117 		end if;
118 	end if;
119 
120 	if P_PMT_REC.PAYMENT_TARGET = 'CNSLD' or P_PMT_REC.PAYMENT_TARGET = 'CONTRACTS'	 then
121 		/* validate payee_id */
122 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
123 		iex_debug_pub.LogMessage('validate_input: Validating P_PMT_REC.PAYEE_ID');
124 		iex_debug_pub.LogMessage('validate_input: P_PMT_REC.PAYEE_ID = ' || P_PMT_REC.PAYEE_ID);
125 END IF;
126 		if P_PMT_REC.PAYEE_ID is null
127 		then
128 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
129 			iex_debug_pub.LogMessage('validate_input: P_PMT_REC.PAYEE_ID failed validation');
130 END IF;
131 			FND_MESSAGE.SET_NAME('IEX','IEX_BAD_API_INPUT');
132 			FND_MESSAGE.SET_TOKEN('API_NAME', G_PKG_NAME || '.CREATE_PAYMENT');
133 			FND_MESSAGE.SET_TOKEN('API_PARAMETER', 'P_PMT_REC.PAYEE_ID');
134 			FND_MSG_PUB.Add;
135 			RAISE FND_API.G_EXC_ERROR;
136 		end if;
137 	end if;
138 
139 	/* validate payment details */
140 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
141 	iex_debug_pub.LogMessage('validate_input: Validating P_PMTDTLS_TBL.COUNT');
142 	iex_debug_pub.LogMessage('validate_input: P_PMTDTLS_TBL.COUNT = ' || P_PMTDTLS_TBL.COUNT);
143 END IF;
144 	if l_count = 0 then
145 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
146 		iex_debug_pub.LogMessage('validate_input: P_PMTDTLS_TBL.COUNT failed validation');
147 END IF;
148 		FND_MESSAGE.SET_NAME('IEX','IEX_BAD_API_INPUT');
149 		FND_MESSAGE.SET_TOKEN('API_NAME', G_PKG_NAME || '.CREATE_PAYMENT');
150 		FND_MESSAGE.SET_TOKEN('API_PARAMETER', 'P_PMTDTLS_TBL.COUNT');
151 		FND_MSG_PUB.Add;
152 		RAISE FND_API.G_EXC_ERROR;
153 	end if;
154 
155 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
156 	iex_debug_pub.LogMessage('validate_input: Validating payment details');
157 END IF;
158 	FOR i IN 1..l_count LOOP
159 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
160 		iex_debug_pub.LogMessage('validate_input: Details record ' || i);
161 		iex_debug_pub.LogMessage('validate_input: Validating P_PMTDTLS_TBL(i).AMOUNT');
162 		iex_debug_pub.LogMessage('validate_input: P_PMTDTLS_TBL(i).AMOUNT = ' || P_PMTDTLS_TBL(i).AMOUNT);
163 END IF;
164 		if P_PMTDTLS_TBL(i).AMOUNT is null or P_PMTDTLS_TBL(i).AMOUNT <= 0 then
165 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
166 			iex_debug_pub.LogMessage('validate_input: P_PMTDTLS_TBL(i).AMOUNT failed validation');
167 END IF;
168 			FND_MESSAGE.SET_NAME('IEX','IEX_BAD_API_INPUT');
169 			FND_MESSAGE.SET_TOKEN('API_NAME', G_PKG_NAME || '.CREATE_PAYMENT');
170 			FND_MESSAGE.SET_TOKEN('API_PARAMETER', 'P_PMTDTLS_TBL(' || i || ').AMOUNT');
171 			FND_MSG_PUB.Add;
172 			RAISE FND_API.G_EXC_ERROR;
173 		end if;
174 		l_amount := l_amount + P_PMTDTLS_TBL(i).AMOUNT;
175 
176 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
177 		iex_debug_pub.LogMessage('validate_input: Validating P_PMTDTLS_TBL(i).CUST_ACCOUNT_ID');
178 		iex_debug_pub.LogMessage('validate_input: P_PMTDTLS_TBL(i).CUST_ACCOUNT_ID = ' || P_PMTDTLS_TBL(i).CUST_ACCOUNT_ID);
179 END IF;
180 		if P_PMTDTLS_TBL(i).CUST_ACCOUNT_ID is null then
181 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
182 			iex_debug_pub.LogMessage('validate_input: P_PMTDTLS_TBL(i).CUST_ACCOUNT_ID failed validation');
183 END IF;
184 			FND_MESSAGE.SET_NAME('IEX','IEX_BAD_API_INPUT');
185 			FND_MESSAGE.SET_TOKEN('API_NAME', G_PKG_NAME || '.CREATE_PAYMENT');
186 			FND_MESSAGE.SET_TOKEN('API_PARAMETER', 'P_PMTDTLS_TBL(' || i || ').CUST_ACCOUNT_ID');
187 			FND_MSG_PUB.Add;
188 			RAISE FND_API.G_EXC_ERROR;
189 		end if;
190 
191 		if P_PMT_REC.PAYMENT_TARGET = 'ACCOUNTS' then
192 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
193 			iex_debug_pub.LogMessage('validate_input: Validating P_PMTDTLS_TBL(i).CUST_SITE_USE_ID');
194 			iex_debug_pub.LogMessage('validate_input: P_PMTDTLS_TBL(i).CUST_ACCOUNT_ID = ' || P_PMTDTLS_TBL(i).CUST_ACCOUNT_ID);
195 END IF;
196 			if P_PMTDTLS_TBL(i).CUST_SITE_USE_ID is null then
197 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
198 				iex_debug_pub.LogMessage('validate_input: P_PMTDTLS_TBL(i).CUST_SITE_USE_ID failed validation');
199 END IF;
200 				FND_MESSAGE.SET_NAME('IEX','IEX_BAD_API_INPUT');
201 				FND_MESSAGE.SET_TOKEN('API_NAME', G_PKG_NAME || '.CREATE_PAYMENT');
202 				FND_MESSAGE.SET_TOKEN('API_PARAMETER', 'P_PMTDTLS_TBL(' || i || ').CUST_SITE_USE_ID');
203 				FND_MSG_PUB.Add;
204 				RAISE FND_API.G_EXC_ERROR;
205 			end if;
206 		elsif P_PMT_REC.PAYMENT_TARGET = 'INVOICES' then
207 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
208 			iex_debug_pub.LogMessage('validate_input: Validating P_PMTDTLS_TBL(i).CUST_SITE_USE_ID');
209 			iex_debug_pub.LogMessage('validate_input: P_PMTDTLS_TBL(i).CUST_SITE_USE_ID = ' || P_PMTDTLS_TBL(i).CUST_SITE_USE_ID);
210 END IF;
211 			if P_PMTDTLS_TBL(i).CUST_SITE_USE_ID is null then
212 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
213 				iex_debug_pub.LogMessage('validate_input: P_PMTDTLS_TBL(i).CUST_SITE_USE_ID failed validation');
214 END IF;
215 				FND_MESSAGE.SET_NAME('IEX','IEX_BAD_API_INPUT');
216 				FND_MESSAGE.SET_TOKEN('API_NAME', G_PKG_NAME || '.CREATE_PAYMENT');
217 				FND_MESSAGE.SET_TOKEN('API_PARAMETER', 'P_PMTDTLS_TBL(' || i || ').CUST_SITE_USE_ID');
218 				FND_MSG_PUB.Add;
219 				RAISE FND_API.G_EXC_ERROR;
220 			end if;
221 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
222 			iex_debug_pub.LogMessage('validate_input: Validating P_PMTDTLS_TBL(i).PAYMENT_SCHEDULE_ID');
223 			iex_debug_pub.LogMessage('validate_input: P_PMTDTLS_TBL(i).PAYMENT_SCHEDULE_ID = ' || P_PMTDTLS_TBL(i).PAYMENT_SCHEDULE_ID);
224 END IF;
225 			if P_PMTDTLS_TBL(i).PAYMENT_SCHEDULE_ID is null then
226 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
227 				iex_debug_pub.LogMessage('validate_input: P_PMTDTLS_TBL(i).PAYMENT_SCHEDULE_ID failed validation');
228 END IF;
229 				FND_MESSAGE.SET_NAME('IEX','IEX_BAD_API_INPUT');
230 				FND_MESSAGE.SET_TOKEN('API_NAME', G_PKG_NAME || '.CREATE_PAYMENT');
231 				FND_MESSAGE.SET_TOKEN('API_PARAMETER', 'P_PMTDTLS_TBL(' || i || ').PAYMENT_SCHEDULE_ID');
232 				FND_MSG_PUB.Add;
233 				RAISE FND_API.G_EXC_ERROR;
234 			end if;
235 		elsif P_PMT_REC.PAYMENT_TARGET = 'CNSLD' then
236 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
237 			iex_debug_pub.LogMessage('validate_input: Validating P_PMTDTLS_TBL(i).CNSLD_INVOICE_ID');
238 			iex_debug_pub.LogMessage('validate_input: P_PMTDTLS_TBL(i).CNSLD_INVOICE_ID = ' || P_PMTDTLS_TBL(i).CNSLD_INVOICE_ID);
239 END IF;
240 			if P_PMTDTLS_TBL(i).CNSLD_INVOICE_ID is null then
241 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
242 				iex_debug_pub.LogMessage('validate_input: P_PMTDTLS_TBL(i).CNSLD_INVOICE_ID failed validation');
243 END IF;
244 				FND_MESSAGE.SET_NAME('IEX','IEX_BAD_API_INPUT');
245 				FND_MESSAGE.SET_TOKEN('API_NAME', G_PKG_NAME || '.CREATE_PAYMENT');
246 				FND_MESSAGE.SET_TOKEN('API_PARAMETER', 'P_PMTDTLS_TBL(' || i || ').CNSLD_INVOICE_ID');
247 				FND_MSG_PUB.Add;
248 				RAISE FND_API.G_EXC_ERROR;
249 			end if;
250 		elsif P_PMT_REC.PAYMENT_TARGET = 'CONTRACTS' then
251 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
252 			iex_debug_pub.LogMessage('validate_input: Validating P_PMTDTLS_TBL(i).CONTRACT_ID');
253 			iex_debug_pub.LogMessage('validate_input: P_PMTDTLS_TBL(i).CONTRACT_ID = ' || P_PMTDTLS_TBL(i).CONTRACT_ID);
254 END IF;
255 			if P_PMTDTLS_TBL(i).CONTRACT_ID is null then
256 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
257 				iex_debug_pub.LogMessage('validate_input: P_PMTDTLS_TBL(i).CONTRACT_ID failed validation');
258 END IF;
259 				FND_MESSAGE.SET_NAME('IEX','IEX_BAD_API_INPUT');
260 				FND_MESSAGE.SET_TOKEN('API_NAME', G_PKG_NAME || '.CREATE_PAYMENT');
261 				FND_MESSAGE.SET_TOKEN('API_PARAMETER', 'P_PMTDTLS_TBL(' || i || ').CONTRACT_ID');
262 				FND_MSG_PUB.Add;
263 				RAISE FND_API.G_EXC_ERROR;
264 			end if;
265 		end if;
266 	END LOOP;
267 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
268 	iex_debug_pub.LogMessage('validate_input: Validating P_PMT_REC.TOTAL_AMOUNT and sum of P_PMTDTLS_TBL(i).AMOUNT');
269 	iex_debug_pub.LogMessage('validate_input: l_amount = ' || l_amount);
270 	iex_debug_pub.LogMessage('validate_input: P_PMT_REC.TOTAL_AMOUNT = ' ||P_PMT_REC.TOTAL_AMOUNT);
271 END IF;
272 	if l_amount <> P_PMT_REC.TOTAL_AMOUNT then
273 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
274 		iex_debug_pub.LogMessage('validate_input: l_amount <> P_PMT_REC.TOTAL_AMOUNT failed validation');
275 END IF;
276 		FND_MESSAGE.SET_NAME('IEX','IEX_BAD_API_INPUT');
277 		FND_MESSAGE.SET_TOKEN('API_NAME', G_PKG_NAME || '.CREATE_PAYMENT');
278 		FND_MESSAGE.SET_TOKEN('API_PARAMETER', 'P_PMT_REC.TOTAL_AMOUNT');
279 		FND_MSG_PUB.Add;
280 		RAISE FND_API.G_EXC_ERROR;
281 	end if;
282 
283 	/* validate payment instrument */
284 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
285 	iex_debug_pub.LogMessage('validate_input: Validating P_PMTINSTR_REC.USE_INSTRUMENT');
286 	iex_debug_pub.LogMessage('validate_input: P_PMTINSTR_REC.USE_INSTRUMENT = ' || P_PMTINSTR_REC.USE_INSTRUMENT);
287 END IF;
288 	if P_PMTINSTR_REC.USE_INSTRUMENT is null or
289 	   (P_PMTINSTR_REC.USE_INSTRUMENT <> 'CC' and
290 	   P_PMTINSTR_REC.USE_INSTRUMENT <> 'BA')
291 	then
292 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
293 		iex_debug_pub.LogMessage('validate_input: P_PMTINSTR_REC.USE_INSTRUMENT failed validation');
294 END IF;
295 		FND_MESSAGE.SET_NAME('IEX','IEX_BAD_API_INPUT');
296 		FND_MESSAGE.SET_TOKEN('API_NAME', G_PKG_NAME || '.CREATE_PAYMENT');
297 		FND_MESSAGE.SET_TOKEN('API_PARAMETER', 'P_PMTINSTR_REC.USE_INSTRUMENT');
298 		FND_MSG_PUB.Add;
299 		RAISE FND_API.G_EXC_ERROR;
300 	end if;
301 
302 /* -- begin - uptake funds capture  changes - varangan
303 	if P_PMTINSTR_REC.USE_INSTRUMENT = 'CC' then
304         IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
305 		iex_debug_pub.LogMessage('validate_input: Validating CC data');
306 		iex_debug_pub.LogMessage('validate_input: P_PMTINSTR_REC.CREDITCARDINSTR.CC_NUM = ' || P_PMTINSTR_REC.CREDITCARDINSTR.CC_NUM);
307 		iex_debug_pub.LogMessage('validate_input: P_PMTINSTR_REC.CREDITCARDINSTR.CC_TYPE = ' || P_PMTINSTR_REC.CREDITCARDINSTR.CC_TYPE);
308 		iex_debug_pub.LogMessage('validate_input: P_PMTINSTR_REC.CREDITCARDINSTR.CC_EXPDATE = ' || P_PMTINSTR_REC.CREDITCARDINSTR.CC_EXPDATE);
309         END IF;
310 		if P_PMTINSTR_REC.CREDITCARDINSTR.CC_NUM is null or
311 	   	   P_PMTINSTR_REC.CREDITCARDINSTR.CC_TYPE is null or
312 	   	   P_PMTINSTR_REC.CREDITCARDINSTR.CC_EXPDATE is null
313 		then
314         IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
315 			iex_debug_pub.LogMessage('validate_input: CC instrument failed validation');
316         END IF;
317 			FND_MESSAGE.SET_NAME('IEX','IEX_BAD_API_INPUT');
318 			FND_MESSAGE.SET_TOKEN('API_NAME', G_PKG_NAME || '.CREATE_PAYMENT');
319 			FND_MESSAGE.SET_TOKEN('API_PARAMETER', 'P_PMTINSTR_REC.CREDITCARDINSTR');
320 			FND_MSG_PUB.Add;
321 			RAISE FND_API.G_EXC_ERROR;
322 		end if;
323 	elsif P_PMTINSTR_REC.USE_INSTRUMENT = 'BA' then
324         IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
325 		  iex_debug_pub.LogMessage('validate_input: Validating BA data');
326 		iex_debug_pub.LogMessage('validate_input: P_PMTINSTR_REC.BANKACCTINSTR.BANK_ID = ' || P_PMTINSTR_REC.BANKACCTINSTR.BANK_ID);
327 		iex_debug_pub.LogMessage('validate_input: P_PMTINSTR_REC.BANKACCTINSTR.BANKACCT_NUM = ' || P_PMTINSTR_REC.BANKACCTINSTR.BANKACCT_NUM);
328 		iex_debug_pub.LogMessage('validate_input: P_PMTINSTR_REC.BANKACCTINSTR.BANKACCT_TYPE = ' || P_PMTINSTR_REC.BANKACCTINSTR.BANKACCT_TYPE);
329 		iex_debug_pub.LogMessage('validate_input: P_PMTINSTR_REC.BANKACCTINSTR.BANKACCT_HOLDERNAME = ' || P_PMTINSTR_REC.BANKACCTINSTR.BANKACCT_HOLDERNAME);
330         END IF;
331 		if P_PMTINSTR_REC.BANKACCTINSTR.BANK_ID is null or
332 	   	   P_PMTINSTR_REC.BANKACCTINSTR.BANKACCT_NUM is null or
333 	   	   P_PMTINSTR_REC.BANKACCTINSTR.BANKACCT_TYPE is null or
334 	   	   P_PMTINSTR_REC.BANKACCTINSTR.BANKACCT_HOLDERNAME is null
335 		then
336             IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
337 			iex_debug_pub.LogMessage('validate_input: BA instrument failed validation');
338             END IF;
339 			FND_MESSAGE.SET_NAME('IEX','IEX_BAD_API_INPUT');
340 			FND_MESSAGE.SET_TOKEN('API_NAME', G_PKG_NAME || '.CREATE_PAYMENT');
341 			FND_MESSAGE.SET_TOKEN('API_PARAMETER', 'P_PMTINSTR_REC.BANKACCTINSTR');
342 			FND_MSG_PUB.Add;
343 			RAISE FND_API.G_EXC_ERROR;
344 		end if;
345 	end if; */
346 
347 end;
348 
349 function get_fun_currency return varchar2 is
350 	l_return_status                  VARCHAR2(1);
351 	l_msg_count                      NUMBER;
352     	l_msg_data                       VARCHAR2(32767);
353     	l_fun_currency		     VARCHAR2(15);
354 begin
355 	-- get functional currency
356 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
357 	iex_debug_pub.LogMessage('get_fun_currency: Begin');
358 END IF;
359 	IEX_CURRENCY_PVT.GET_FUNCT_CURR(p_api_version => 1.0,
360 		p_init_msg_list => FND_API.G_FALSE,
361 		p_commit => FND_API.G_FALSE,
362 		P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
363 		x_return_status => l_return_status,
364 		x_msg_count => l_msg_count,
365 		x_msg_data => l_msg_data,
366 		x_functional_currency => l_fun_currency);
367 
368 	-- check for errors
369 	IF l_return_status<>'S' THEN
370 		null;
371 	END IF;
372 
373 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
374 	iex_debug_pub.LogMessage('get_fun_currency: l_fun_currency = ' || l_fun_currency);
375 END IF;
376 	return l_fun_currency;
377 end;
378 
379 PROCEDURE GET_PAYER_INFO(P_PAYER_PARTY_REL_ID	IN	NUMBER,
380 			P_PAYER_PARTY_ORG_ID	IN	NUMBER,
381 			P_PAYER_PARTY_PER_ID	IN	NUMBER,
382 			X_NOTE_PAYER_TYPE	OUT NOCOPY	VARCHAR2,
383 			X_NOTE_PAYER_NUM_ID	OUT NOCOPY	NUMBER,
384 			X_PAYER_NUM_ID		OUT NOCOPY	NUMBER,
385 			X_PAYER_ID		OUT NOCOPY	VARCHAR2,
386 			X_PAYER_NAME		OUT NOCOPY	VARCHAR2)
387 IS
388 	CURSOR get_payer_name_crs(p_party_id number) IS
389         select PARTY_NAME
390 		from hz_parties
391 		where party_id = p_party_id;
392 
393 BEGIN
394 
395 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
396 	iex_debug_pub.LogMessage('GET_PAYER_INFO: Begin of GET_PAYER_INFO');
397 	iex_debug_pub.LogMessage('GET_PAYER_INFO: PAYER_PARTY_REL_ID = ' || P_PAYER_PARTY_REL_ID);
398 	iex_debug_pub.LogMessage('GET_PAYER_INFO: PAYER_PARTY_ORG_ID = ' || P_PAYER_PARTY_ORG_ID);
399 	iex_debug_pub.LogMessage('GET_PAYER_INFO: PAYER_PARTY_PER_ID = ' || P_PAYER_PARTY_PER_ID);
400 END IF;
401 
402 	if P_PAYER_PARTY_REL_ID is not null and
403 	   P_PAYER_PARTY_ORG_ID is not null and
404 	   P_PAYER_PARTY_PER_ID is not null then
405 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
406 			iex_debug_pub.LogMessage('GET_PAYER_INFO: First case');
407 END IF;
408 			X_NOTE_PAYER_NUM_ID := P_PAYER_PARTY_REL_ID;
409 			X_NOTE_PAYER_TYPE := 'PARTY_RELATIONSHIP';
410 			X_PAYER_NUM_ID := P_PAYER_PARTY_ORG_ID;
411 	else
412 	   if P_PAYER_PARTY_REL_ID is null and
413 			P_PAYER_PARTY_ORG_ID is not null and
414 			P_PAYER_PARTY_PER_ID is null then
415 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
416 				iex_debug_pub.LogMessage('GET_PAYER_INFO: Second case');
417 END IF;
418 				X_NOTE_PAYER_NUM_ID := P_PAYER_PARTY_ORG_ID;
419 				X_NOTE_PAYER_TYPE := 'PARTY_ORGANIZATION';
420 				X_PAYER_NUM_ID := P_PAYER_PARTY_ORG_ID;
421 	   elsif P_PAYER_PARTY_REL_ID is null and
422 			P_PAYER_PARTY_ORG_ID is null and
423 			P_PAYER_PARTY_PER_ID is not null then
424 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
425 				iex_debug_pub.LogMessage('Third case');
426 END IF;
427 				X_NOTE_PAYER_NUM_ID := P_PAYER_PARTY_PER_ID;
428 				X_NOTE_PAYER_TYPE := 'PARTY_PERSON';
429 				X_PAYER_NUM_ID := P_PAYER_PARTY_PER_ID;
430 	   else
431 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
432 			iex_debug_pub.LogMessage('GET_PAYER_INFO: Neither');
433 END IF;
434 			FND_MESSAGE.SET_NAME('IEX','IEX_WRONG_PARTY');
435 			FND_MSG_PUB.Add;
436 			RAISE FND_API.G_EXC_ERROR;
437 	   end if;
438 	end if;
439 
440 	X_PAYER_ID := to_char(X_PAYER_NUM_ID);
441 
442 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
443 	iex_debug_pub.LogMessage('GET_PAYER_INFO: NOTE_PAYER_NUM_ID = ' || X_NOTE_PAYER_NUM_ID);
444 	iex_debug_pub.LogMessage('GET_PAYER_INFO: NOTE_PAYER_TYPE = ' || X_NOTE_PAYER_TYPE);
445 	iex_debug_pub.LogMessage('GET_PAYER_INFO: PAYER_NUM_ID = ' || X_PAYER_NUM_ID);
446 	iex_debug_pub.LogMessage('GET_PAYER_INFO: PAYER_ID = ' || X_PAYER_ID);
447 END IF;
448 
449 	OPEN get_payer_name_crs(X_PAYER_NUM_ID);
450 	FETCH get_payer_name_crs INTO X_PAYER_NAME;
451 
452 	if get_payer_name_crs%NOTFOUND then
453 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
454 		iex_debug_pub.LogMessage('No party');
455 END IF;
456 		CLOSE get_payer_name_crs;
457 		FND_MESSAGE.SET_NAME('IEX','IEX_WRONG_PARTY');
458 		FND_MSG_PUB.Add;
459 		RAISE FND_API.G_EXC_ERROR;
460 	end if;
461 	CLOSE get_payer_name_crs;
462 
463 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
464 	iex_debug_pub.LogMessage('GET_PAYER_INFO: PAYER_NAME = ' || X_PAYER_NAME);
465 END IF;
466 END;
467 
468 procedure get_ar_payment_method(p_payment_type in varchar2,
469 				x_payment_method out NOCOPY varchar2,
470 				x_payment_method_id out NOCOPY number)
471 is
472     l_api_name                  CONSTANT VARCHAR2(30) := 'GET_AR_PAYMENT_METHOD';
473 
474 begin
475 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
476 	iex_debug_pub.LogMessage(l_api_name || ': Start of API');
477 END IF;
478 	x_payment_method := null;
479 	x_payment_method_id := null;
480 
481 	if p_payment_type = 'CC' then
482 
483 		x_payment_method := fnd_profile.value('IEX_CCARD_REMITTANCE');
484 		if x_payment_method is null then
485 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
486 			iex_debug_pub.LogMessage(l_api_name || ': failed to get CC remittance');
487 END IF;
488 			FND_MESSAGE.SET_NAME('IEX', 'IEX_NO_CC_REMITTANCE');
489 			FND_MSG_PUB.Add;
490 			RAISE FND_API.G_EXC_ERROR;
491 		end if;
492 		x_payment_method_id := to_number(x_payment_method);
493 
494 	elsif p_payment_type = 'BA' then
495 
496 		x_payment_method := fnd_profile.value('IEX_EFT_REMITTANCE');
497 		if x_payment_method is null then
498 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
499 			iex_debug_pub.LogMessage(l_api_name || ': failed to get BA remittance');
500 END IF;
501 			FND_MESSAGE.SET_NAME('IEX', 'IEX_NO_EFT_REMITTANCE');
502 			FND_MSG_PUB.Add;
503 			RAISE FND_API.G_EXC_ERROR;
504 		end if;
505 		x_payment_method_id := to_number(x_payment_method);
506 
507 	end if;
508 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
509 	iex_debug_pub.LogMessage(l_api_name || ': x_payment_method = ' || x_payment_method);
510 	iex_debug_pub.LogMessage(l_api_name || ': x_payment_method_id = ' || x_payment_method_id);
511 	iex_debug_pub.LogMessage(l_api_name || ': End of API');
512 END IF;
513 end;
514 
515 procedure create_ar_cc_bank_account(p_cust_account_id in number,
516 				    p_cc_number in varchar2,
517 				    p_cc_exp_date in date,
518 				    p_cc_holder_name in varchar2,
519 				    p_currency in varchar2,
520 				    p_party_id in number,
521 				    x_bank_account_id out NOCOPY number,
522 				    x_bank_account_uses_id out NOCOPY number,
523 				    x_branch_id out NOCOPY number)
524 is
525     l_api_name                  CONSTANT VARCHAR2(30) := 'CREATE_AR_CC_BANK_ACCOUNT';
526 begin
527 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
528 	iex_debug_pub.LogMessage(l_api_name || ': Start of API');
529 END IF;
530 	x_bank_account_id := null;
531 	x_bank_account_uses_id := null;
532 	x_branch_id := 1;
533 
534 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
535 	--iex_debug_pub.LogMessage(l_api_name || ': CC number = ' || p_cc_number);
536 	iex_debug_pub.LogMessage(l_api_name || ': CC exp date = ' || p_cc_exp_date);
537 	iex_debug_pub.LogMessage(l_api_name || ': CC holder name = ' || p_cc_holder_name);
538 END IF;
539 
540 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
541 	iex_debug_pub.LogMessage(l_api_name || ': Creating cc bank account for cust_account_id ' || p_cust_account_id);
542 END IF;
543 /* obsoleted ar pkg ..fixed a bug 5130923
544 	arp_bank_pkg.process_cust_bank_account(
545 		p_trx_date           => trunc(sysdate),
546 		p_currency_code      => p_currency,
547 		p_cust_id            => p_cust_account_id,
548 		p_credit_card_num    => p_cc_number,
549 		p_exp_date           => p_cc_exp_date,
550 		p_acct_name          => p_cc_holder_name,
551 		p_bank_account_id    => x_bank_account_id,
552 		p_bank_account_uses_id => x_bank_account_uses_id,
553 		p_owning_party_id      => p_party_id,
554 		p_bank_branch_id       => x_branch_id,
555 		p_account_type         => 'BANK',
556 		p_payment_instrument   => 'CREDIT_CARD');      */
557 
558 
559 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
560         iex_debug_pub.LogMessage(l_api_name || ': Successfully created cc bank account');
561 	iex_debug_pub.LogMessage(l_api_name || ': CC bank_account_id = ' || x_bank_account_id);
562 	iex_debug_pub.LogMessage(l_api_name || ': CC bank_account_uses_id = ' || x_bank_account_uses_id);
563 	iex_debug_pub.LogMessage(l_api_name || ': CC bank_branch_id = ' || x_branch_id);
564 	iex_debug_pub.LogMessage(l_api_name || ': End of API');
565 END IF;
566 end;
567 
568 procedure create_ar_ba_bank_account(p_cust_account_id in number,
569 				    p_ba_routing_number in varchar,
570 				    p_ba_number in varchar2,
571 				    p_ba_type in varchar2,
572 				    p_ba_holder_name in varchar2,
573 				    p_currency in varchar2,
574 				    p_party_id in number,
575 				    x_bank_account_id out NOCOPY number,
576 				    x_bank_account_uses_id out NOCOPY number,
577 				    x_branch_id out NOCOPY number)
578 is
579     l_api_name                  CONSTANT VARCHAR2(30) := 'CREATE_AR_BA_BANK_ACCOUNT';
580 begin
581 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
582 	iex_debug_pub.LogMessage(l_api_name || ': Start of API');
583 END IF;
584 	x_bank_account_id := null;
585 	x_bank_account_uses_id := null;
586 	x_branch_id := null;
587 
588 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
589 	iex_debug_pub.LogMessage(l_api_name || ': BA routing = ' || p_ba_routing_number);
590 	iex_debug_pub.LogMessage(l_api_name || ': BA number = ' || p_ba_number);
591 	iex_debug_pub.LogMessage(l_api_name || ': BA type = ' || p_ba_type);
592 	iex_debug_pub.LogMessage(l_api_name || ': BA holder name = ' || p_ba_holder_name);
593 END IF;
594 
595 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
596 	iex_debug_pub.LogMessage(l_api_name || ': Validating routing number...');
597 END IF;
598 
599 /* obsoleted ar pkg ..fixed a bug 5130923
600 	if ARP_BANK_DIRECTORY.is_routing_number_valid(p_routing_number => p_ba_routing_number) = 0 then
601 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
602 		iex_debug_pub.LogMessage('Invalid routing number');
603 END IF;
604 		FND_MESSAGE.SET_NAME('IEX', 'IEX_INVALID_ROUTING_NUM');
605 		FND_MSG_PUB.Add;
606 		RAISE FND_API.G_EXC_ERROR;
607 	end if;
608 */
609 
610 
611 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
612 	iex_debug_pub.LogMessage(l_api_name || ': Creating/selecting bank branch...');
613 END IF;
614 
615 /* obsoleted ar pkg ..fixed a bug 5130923
616 	arp_bank_pkg.get_bank_branch_id(p_routing_number => p_ba_routing_number,
617         				x_branch_party_id => x_branch_id);
618 */
619 
620 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
621 	iex_debug_pub.LogMessage(l_api_name || ': branch_id = ' || x_branch_id);
622 END IF;
623 
624 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
625 	iex_debug_pub.LogMessage(l_api_name || ': Creating ba bank account for cust_account_id ' || p_cust_account_id);
626 END IF;
627 
628 /* obsoleted ar pkg ..fixed a bug 5130923
629 	arp_bank_pkg.process_cust_bank_account(
630 		p_trx_date           => trunc(sysdate),
631 	        p_currency_code      => p_currency,
632 	        p_cust_id            => p_cust_account_id,
633 	        p_credit_card_num    => p_ba_number,  				-- from account number on UI
634 	        p_exp_date           => null,
635 	        p_acct_name          => p_ba_holder_name, 			-- from holder name on UI
636 	        p_bank_account_id    => x_bank_account_id,
637 	        p_bank_account_uses_id => x_bank_account_uses_id,
638 	        p_owning_party_id      => p_party_id,
639 	        p_bank_branch_id       => x_branch_id, 				-- create branch with routing number from UI
640 	        p_account_type         => p_ba_type,  				-- from bank account type on UI
641 	        p_payment_instrument   => 'BANK_ACCOUNT');
642 */
643 
644 
645 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
646         iex_debug_pub.LogMessage(l_api_name || ': Successfully created ba bank account');
647 	iex_debug_pub.LogMessage(l_api_name || ': BA bank_account_id = ' || x_bank_account_id);
648 	iex_debug_pub.LogMessage(l_api_name || ': BA bank_account_uses_id = ' || x_bank_account_uses_id);
649 	iex_debug_pub.LogMessage(l_api_name || ': BA bank_branch_id = ' || x_branch_id);
650 	iex_debug_pub.LogMessage(l_api_name || ': End of API');
651 END IF;
652 end;
653 
654 PROCEDURE CREATE_AR_PAYMENT(
655     P_API_VERSION		    	IN      NUMBER,
656     P_INIT_MSG_LIST		    	IN      VARCHAR2,
657     P_COMMIT                    	IN      VARCHAR2,
658     P_VALIDATION_LEVEL	    		IN      NUMBER,
659     X_RETURN_STATUS		    	OUT NOCOPY VARCHAR2,
660     X_MSG_COUNT                 	OUT NOCOPY    NUMBER,
661     X_MSG_DATA	    	    		OUT NOCOPY    VARCHAR2,
662     P_PMT_REC			        IN	IEX_PAYMENTS_PUB.PMT_REC_TYPE,
663     P_PMTDTLS_TBL			IN	IEX_PAYMENTS_PUB.PMTDTLS_TBL_TYPE,
664     P_PMTINSTR_REC			IN	IEX_PAYMENTS_PUB.PMTINSTR_REC_TYPE,
665     P_PMT_METHOD            IN NUMBER, -- Included by varangan for profile bug#4558547
666     X_PMTRESP_REC			OUT NOCOPY	IEX_PAYMENTS_PUB.PMTRESP_REC_TYPE)
667 IS
668     l_api_name                  CONSTANT VARCHAR2(30) := 'CREATE_AR_PAYMENT';
669     l_api_version               CONSTANT NUMBER := 1.0;
670     l_return_status             VARCHAR2(1);
671     l_msg_count                 NUMBER;
672     l_msg_data                  VARCHAR2(32767);
673 
674     TYPE cr_id_tab IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
675 
676     l_cust_bank_acc_id			NUMBER;
677     l_bank_account_uses_id		NUMBER;
678     l_branch_id                 	NUMBER;
679     l_cr_id_tab			        cr_id_tab;
680     l_rowid                     	VARCHAR2(100);
681     l_payment_id                	NUMBER := null;
682     l_cr_id                     	NUMBER;
683     i                           	NUMBER;
684     j                           	NUMBER;
685     l_del_pay_ref_id		    	NUMBER;
686     l_pay_receipt_ref_id	    	NUMBER;
687     l_ar_pay_method1		    	VARCHAR2(100);
688     l_ar_pay_method			NUMBER;
689     l_cr_number			        NUMBER;
690     l_cr_number1			VARCHAR2(80);
691     l_del_id			        NUMBER;
692     l_note_payer_id			NUMBER;
693     l_payer_num_id			NUMBER;
694     l_payer_id			        VARCHAR2(80);
695     l_payer_name			HZ_PARTIES.PARTY_NAME%TYPE;  --Changed the datatype for bug#5652085 by ehuh 2/28/07
696     l_note_payer_type		    	VARCHAR2(100);
697     l_context_tab			IEX_NOTES_PVT.CONTEXTS_TBL_TYPE;
698     l_fun_currency			VARCHAR2(80);
699     l_template_id			NUMBER;
700     l_request_id   			number;
701     l_autofulfill			varchar2(1);
702     l_note_type			        varchar2(30);
703     l_source_object_id			NUMBER;
704     l_source_object_code		varchar2(20);
705 
706     l_call_payment_processor            varchar2(5);
707 
708     -- generate new payment
709     CURSOR pay_genid_crs IS
710     select IEX_PAYMENTS_S.NEXTVAL from dual;
711 
712     -- generate new del_pay_xref
713     CURSOR dpx_genid_crs IS
714     select IEX_DEL_PAY_XREF_S.NEXTVAL from dual;
715 
716     -- generate new pay_receipt
717     CURSOR pad_genid_crs IS
718     select IEX_PAY_RECEIPT_XREF_S.NEXTVAL from dual;
719 
720     -- generate new receipt number
721     CURSOR rc_genid_crs IS
722     select IEX_RECEIPT_NUMBER_S.NEXTVAL from dual;
723 
724     -- get del_id from iex_delinquencies table
725     CURSOR get_delid_crs(p_payment_schedule_id number) IS
726     select delinquency_id
727     from iex_delinquencies
728     where payment_schedule_id = p_payment_schedule_id;
729 
730 BEGIN
731 
732   /* AR processing */
733   BEGIN
734         SAVEPOINT CREATE_AR_PAYMENT_PVT1;
735 
736    	-- Standard call to check for call compatibility
737    	IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
738    		RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
739 
740   	END IF;
741 
742    	-- Initialize message list if p_init_msg_list is set to TRUE
743    	IF FND_API.To_Boolean(p_init_msg_list) THEN
744    		FND_MSG_PUB.initialize;
745    	END IF;
746 
747    	-- Initialize API return status to success
748    	l_return_status := FND_API.G_RET_STS_SUCCESS;
749 
750    	-- START OF BODY OF API
751 	IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
752 	    iex_debug_pub.LogMessage(l_api_name || ': Start of API');
753 	END IF;
754 
755         -- Fix a bug 5897567 02/21/07 by Ehuh
756         if G_ONLINE_CCPAY = 'Y' then l_call_payment_processor := FND_API.G_TRUE;
757         else
758             l_call_payment_processor := FND_API.G_FALSE;
759         end if;
760 
761 
762 	/* validate all input parameters */
763 	IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
764 	    iex_debug_pub.LogMessage(l_api_name || ': Before validate_input');
765 	END IF;
766 
767 	validate_input(P_PMT_REC => P_PMT_REC,
768 			P_PMTDTLS_TBL => P_PMTDTLS_TBL,
769 			P_PMTINSTR_REC => P_PMTINSTR_REC);
770 
771 	IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
772 	    iex_debug_pub.LogMessage(l_api_name || ': After validate_input');
773 	END IF;
774 
775 	/* validate payer parties and get payer info */
776 	IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
777 	    iex_debug_pub.LogMessage(l_api_name || ': Before GET_PAYER_INFO');
778 	END IF;
779 	GET_PAYER_INFO(P_PAYER_PARTY_REL_ID => P_PMT_REC.PAYER_PARTY_REL_ID,
780 			P_PAYER_PARTY_ORG_ID => P_PMT_REC.PAYER_PARTY_ORG_ID,
781 			P_PAYER_PARTY_PER_ID => P_PMT_REC.PAYER_PARTY_PER_ID,
782 			X_NOTE_PAYER_TYPE => l_note_payer_type,
783 			X_NOTE_PAYER_NUM_ID => l_note_payer_id,
784 			X_PAYER_NUM_ID => l_payer_num_id,
785 			X_PAYER_ID => l_payer_id,
786 			X_PAYER_NAME => l_payer_name);
787 
788         IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
789 	    iex_debug_pub.LogMessage(l_api_name || ': After GET_PAYER_INFO');
790 	    iex_debug_pub.LogMessage(l_api_name || ': GET_PAYER_INFO returns:');
791 	    iex_debug_pub.LogMessage(l_api_name || ': l_note_payer_type = ' || l_note_payer_type);
792 	    iex_debug_pub.LogMessage(l_api_name || ': l_note_payer_id = ' || l_note_payer_id);
793 	    iex_debug_pub.LogMessage(l_api_name || ': l_payer_num_id = ' || l_payer_num_id);
794 	    iex_debug_pub.LogMessage(l_api_name || ': l_payer_id = ' || l_payer_id);
795 	    iex_debug_pub.LogMessage(l_api_name || ': l_payer_name = ' || l_payer_name);
796 	END IF;
797 
798 	IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
799 	    iex_debug_pub.LogMessage(l_api_name || ': Creating IEX payment record...');
800    	end if ;
801 
802     	-- generate new payment id
803     	OPEN pay_genid_crs;
804 	FETCH pay_genid_crs INTO l_payment_id;
805 	CLOSE pay_genid_crs;
806 
807     	IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
808     	    iex_debug_pub.LogMessage(l_api_name || ': New payment_id = ' || l_payment_id);
809 	    iex_debug_pub.LogMessage(l_api_name || ': Before IEX_PAYMENTS_PKG.Insert_Row');
810     	END IF;
811 
812 	IEX_PAYMENTS_PKG.Insert_Row(
813         	X_ROWID => l_rowid,
814         	P_PAYMENT_ID => l_payment_id,
815         	P_OBJECT_VERSION_NUMBER => 1.0,
816         	P_PROGRAM_ID => 695,
817 	    	P_LAST_UPDATE_DATE => sysdate,
818         	P_LAST_UPDATED_BY => FND_GLOBAL.User_Id,
819 	    	P_LAST_UPDATE_LOGIN => G_LOGIN_ID,
820         	P_CREATION_DATE => sysdate,
821         	P_CREATED_BY => FND_GLOBAL.User_Id,
822         	P_PAYMENT_METHOD_ID => null,
823        		P_PAYMENT_METHOD => P_PMTINSTR_REC.USE_INSTRUMENT,
824         	P_IPAYMENT_TRANS_ID => null,
825         	P_IPAYMENT_STATUS => null,
826         	P_PAY_SVR_CONFIRMATION => null,
827         	P_CAMPAIGN_SCHED_ID => P_PMT_REC.CAMPAIGN_SCHED_ID,
828         	p_TANGIBLE_ID => null,
829         	p_PAYEE_ID => null,
830         	p_RESOURCE_ID => P_PMT_REC.RESOURCE_ID,
831         	P_ATTRIBUTE_CATEGORY => P_PMT_REC.ATTRIBUTES.ATTRIBUTE_CATEGORY,
832         	P_ATTRIBUTE1 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE1,
833         	P_ATTRIBUTE2 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE2,
834         	P_ATTRIBUTE3 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE3,
835         	P_ATTRIBUTE4 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE4,
836         	P_ATTRIBUTE5 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE5,
837         	P_ATTRIBUTE6 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE6,
838         	P_ATTRIBUTE7 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE7,
839         	P_ATTRIBUTE8 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE8,
840         	P_ATTRIBUTE9 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE9,
841         	P_ATTRIBUTE10 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE10,
842         	P_ATTRIBUTE11 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE11,
843         	P_ATTRIBUTE12 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE12,
844         	P_ATTRIBUTE13 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE13,
845         	P_ATTRIBUTE14 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE14,
846         	P_ATTRIBUTE15 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE15);
847 
848         IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
849     	   iex_debug_pub.LogMessage(l_api_name || ': After IEX_PAYMENTS_PKG.Insert_Row');
850         End if ;
851 
852         IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
853     	   iex_debug_pub.LogMessage(l_api_name || ': After') ;
854         END IF;
855    	X_PMTRESP_REC.PAYMENT_ID := l_payment_id;
856 
857     	IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
858 	   iex_debug_pub.LogMessage(l_api_name || ': l_payment_id=' || l_payment_id);
859     	END IF;
860 
861 	l_fun_currency := get_fun_currency;
862 	IF P_PMT_REC.PAYMENT_TARGET = 'ACCOUNTS' THEN
863 
864 
865 
866 	    IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
867 	       iex_debug_pub.LogMessage(l_api_name || ': Payment target ACCOUNTS');
868             END IF;
869 
870 	    -- run thru table of details, create bank accounts then create cash/apply receipts via AR APIs
871 	    FOR i IN 1..P_PMTDTLS_TBL.COUNT LOOP
872 
873             	IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
874 		      iex_debug_pub.LogMessage(l_api_name || ': processing payment details; loop ' || i);
875             	END IF;
876 
877 	        --Determine the Payment Instrument type that is used.
878             	IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
879 		      iex_debug_pub.LogMessage(l_api_name || ': Payment instrument is ' || P_PMTINSTR_REC.USE_INSTRUMENT);
880             	END IF;
881 
882         /*-- Begin - varangan - profile bug#4558547
883           	get_ar_payment_method(p_payment_type => P_PMTINSTR_REC.USE_INSTRUMENT,
884 	    	      x_payment_method => l_ar_pay_method1,
885 	    	      x_payment_method_id => l_ar_pay_method);
886         --   End- varangan - profile bug#4558547 */
887 
888 
889 	    /* commented for uptake funds transfer  --varangan
890         	IF P_PMTINSTR_REC.USE_INSTRUMENT = 'CC' THEN
891 
892 		    create_ar_cc_bank_account(p_cust_account_id => P_PMTDTLS_TBL(i).CUST_ACCOUNT_ID,
893 			p_cc_number => P_PMTINSTR_REC.CREDITCARDINSTR.CC_NUM,
894 			p_cc_exp_date => P_PMTINSTR_REC.CREDITCARDINSTR.CC_EXPDATE,
895 			p_cc_holder_name => P_PMTINSTR_REC.CREDITCARDINSTR.CC_HOLDERNAME,
896 			p_currency => P_PMT_REC.CURRENCY_CODE,
897 			p_party_id => l_payer_id,
898 			x_bank_account_id => l_cust_bank_acc_id,
899 			x_bank_account_uses_id => l_bank_account_uses_id,
900 			x_branch_id => l_branch_id);
901 
902 	        ELSIF P_PMTINSTR_REC.USE_INSTRUMENT = 'BA' THEN
903 
904 		    create_ar_ba_bank_account(p_cust_account_id => P_PMTDTLS_TBL(i).CUST_ACCOUNT_ID,
905 			p_ba_routing_number => P_PMTINSTR_REC.BANKACCTINSTR.BANK_ID,
906 			p_ba_number => P_PMTINSTR_REC.BANKACCTINSTR.BANKACCT_NUM,
907 			p_ba_type => P_PMTINSTR_REC.BANKACCTINSTR.BANKACCT_TYPE,
908 			p_ba_holder_name => P_PMTINSTR_REC.BANKACCTINSTR.BANKACCT_HOLDERNAME,
909 			p_currency => P_PMT_REC.CURRENCY_CODE,
910 			p_party_id => l_payer_id,
911 			x_bank_account_id => l_cust_bank_acc_id,
912 			x_bank_account_uses_id => l_bank_account_uses_id,
913 			x_branch_id => l_branch_id);
914 
915             	END IF;
916             commented for uptake funds transfer  --varangan */
917 
918 	    	-- generate new cash receipt number
919 	    	OPEN rc_genid_crs;
920 	    	FETCH rc_genid_crs INTO l_cr_number;
921 	    	CLOSE rc_genid_crs;
922 
923 	   	l_cr_number1 := 'IEX_' || to_char(l_cr_number);
924 		IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
925 		    iex_debug_pub.LogMessage(l_api_name || ': New cr id = ' || l_cr_number1);
926 		    iex_debug_pub.LogMessage(l_api_name || ': Before AR_RECEIPT_API_PUB.CREATE_CASH');
927 		END IF;
928 
929 		-- create cash receipts
930 		if l_fun_currency = P_PMT_REC.CURRENCY_CODE then
931 			/*AR_RECEIPT_API_PUB.CREATE_CASH(
932 			    P_API_VERSION => 1.0,
933 			    P_INIT_MSG_LIST => FND_API.G_FALSE,
934 			    P_COMMIT => FND_API.G_FALSE,
935 			    P_CURRENCY_CODE => P_PMT_REC.CURRENCY_CODE,
936 			    P_AMOUNT => P_PMTDTLS_TBL(i).AMOUNT,
937 			    P_RECEIPT_METHOD_ID => l_ar_pay_method,
938 			    P_RECEIPT_NUMBER => l_cr_number1,
939 			    P_CUSTOMER_ID => P_PMTDTLS_TBL(i).CUST_ACCOUNT_ID,
940 			    P_CUSTOMER_SITE_USE_ID => P_PMTDTLS_TBL(i).CUST_SITE_USE_ID,
941 			    P_CUSTOMER_BANK_ACCOUNT_ID => L_CUST_BANK_ACC_ID,
942 			    P_CR_ID => L_CR_ID,
943 			    X_RETURN_STATUS => L_RETURN_STATUS,
944 			    X_MSG_COUNT => L_MSG_COUNT,
945 			    X_MSG_DATA => L_MSG_DATA);
946             */
947 
948 
949 			AR_RECEIPT_API_PUB.CREATE_APPLY_ON_ACC(
950 			    P_API_VERSION => 1.0,
951 			    P_INIT_MSG_LIST => FND_API.G_FALSE,
952 			    P_COMMIT => FND_API.G_FALSE,
953 			    P_CURRENCY_CODE => P_PMT_REC.CURRENCY_CODE,
954 			    P_AMOUNT => P_PMTDTLS_TBL(i).AMOUNT,
955 			    P_RECEIPT_METHOD_ID => P_PMT_METHOD , -- l_ar_pay_method, commented for profile bug#4558547
956 			    P_RECEIPT_NUMBER => l_cr_number1,
957 			    P_CUSTOMER_ID => P_PMTDTLS_TBL(i).CUST_ACCOUNT_ID,
958 			    P_CUSTOMER_SITE_USE_ID => P_PMTDTLS_TBL(i).CUST_SITE_USE_ID,
959 			    P_CUSTOMER_BANK_ACCOUNT_ID => L_CUST_BANK_ACC_ID,
960 			    P_CR_ID => L_CR_ID,
961                             p_application_ref_num => NULL,
962                             p_secondary_application_ref_id => NULL,
963                             p_customer_reference => NULL,
964                             p_customer_reason => NULL,
965                             p_call_payment_processor => l_call_payment_processor, -- Fix a bug 5897567 02/06/07 by Ehuh
966 			    X_RETURN_STATUS => L_RETURN_STATUS,
967 			    X_MSG_COUNT => L_MSG_COUNT,
968 			    X_MSG_DATA => L_MSG_DATA,
969 			    -- Begin -- varangan --Bug4528444 -- included for payments uptake
970                             p_payment_trxn_extension_id => P_PMTDTLS_TBL(i).TRX_EXTN_ID);
971 			    -- End -- varangan -- Bug4528444 --included for payments uptake
972 		else
973             /*
974 			AR_RECEIPT_API_PUB.CREATE_CASH(
975 			    P_API_VERSION => 1.0,
976 			    P_INIT_MSG_LIST => FND_API.G_FALSE,
977 			    P_COMMIT => FND_API.G_FALSE,
978 			    P_CURRENCY_CODE => P_PMT_REC.CURRENCY_CODE,
979 			    P_EXCHANGE_RATE_TYPE => P_PMT_REC.EXCHANGE_RATE_TYPE,
980 			    P_EXCHANGE_RATE_DATE => P_PMT_REC.EXCHANGE_DATE,
981 			    P_AMOUNT => P_PMTDTLS_TBL(i).AMOUNT,
982 			    P_RECEIPT_METHOD_ID => l_ar_pay_method,
983 			    P_RECEIPT_NUMBER => l_cr_number1,
984 			    P_CUSTOMER_ID => P_PMTDTLS_TBL(i).CUST_ACCOUNT_ID,
985 			    P_CUSTOMER_SITE_USE_ID => P_PMTDTLS_TBL(i).CUST_SITE_USE_ID,
986 			    P_CUSTOMER_BANK_ACCOUNT_ID => L_CUST_BANK_ACC_ID,
987                     	    P_CR_ID => L_CR_ID,
988 			    X_RETURN_STATUS => L_RETURN_STATUS,
989 			    X_MSG_COUNT => L_MSG_COUNT,
990 			    X_MSG_DATA => L_MSG_DATA);
991             */
992 
993 
994 
995 			AR_RECEIPT_API_PUB.CREATE_APPLY_ON_ACC(
996 			    P_API_VERSION => 1.0,
997 			    P_INIT_MSG_LIST => FND_API.G_FALSE,
998 			    P_COMMIT => FND_API.G_FALSE,
999 			    P_CURRENCY_CODE => P_PMT_REC.CURRENCY_CODE,
1000 			    P_EXCHANGE_RATE_TYPE => P_PMT_REC.EXCHANGE_RATE_TYPE,
1001 			    P_EXCHANGE_RATE_DATE => P_PMT_REC.EXCHANGE_DATE,
1002 			    P_AMOUNT => P_PMTDTLS_TBL(i).AMOUNT,
1003 			    P_RECEIPT_METHOD_ID => P_PMT_METHOD,  --l_ar_pay_method, commented for profile bug#4558547
1004 			    P_RECEIPT_NUMBER => l_cr_number1,
1005 			    P_CUSTOMER_ID => P_PMTDTLS_TBL(i).CUST_ACCOUNT_ID,
1006 			    P_CUSTOMER_SITE_USE_ID => P_PMTDTLS_TBL(i).CUST_SITE_USE_ID,
1007 			    P_CUSTOMER_BANK_ACCOUNT_ID => L_CUST_BANK_ACC_ID,
1008            	            P_CR_ID => L_CR_ID,
1009                             p_application_ref_num => NULL,
1010                             p_secondary_application_ref_id => NULL,
1011                             p_customer_reference => NULL,
1012                             p_customer_reason => NULL,
1013                             p_call_payment_processor => l_call_payment_processor, -- Fix a bug 5897567 02/06/07 by Ehuh
1014 			    X_RETURN_STATUS => L_RETURN_STATUS,
1015 			    X_MSG_COUNT => L_MSG_COUNT,
1016 			    X_MSG_DATA => L_MSG_DATA,
1017 			    -- Begin -- varangan --Bug4528444 -- included for payments uptake
1018                             p_payment_trxn_extension_id => P_PMTDTLS_TBL(i).TRX_EXTN_ID);
1019    			    -- End -- varangan --Bug4528444 -- included for payments uptake
1020 
1021 		end if;
1022 
1023 		IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1024 		    iex_debug_pub.LogMessage(l_api_name || ': After AR_RECEIPT_API_PUB.CREATE_CASH');
1025 		    iex_debug_pub.LogMessage(l_api_name || ': Status = ' || L_RETURN_STATUS);
1026 		    iex_debug_pub.LogMessage(l_api_name || ': New cash_receipt_id = ' || l_cr_id);
1027 		END IF;
1028 
1029 		-- check for errors
1030 		IF l_return_status<>'S' THEN
1031 		    IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1032 			iex_debug_pub.LogMessage(l_api_name || ': AR_RECEIPT_API_PUB.CREATE_CASH failed');
1033 	        END IF;
1034 
1035                  x_return_status :=l_return_status;
1036   	         X_MSG_DATA:= L_MSG_DATA;
1037   	         X_MSG_COUNT := L_MSG_COUNT;
1038 
1039 		    FND_MESSAGE.SET_NAME('IEX', 'IEX_FAILED_CREATE_CR');
1040 		    FND_MSG_PUB.Add;
1041 		    return; --RAISE FND_API.G_EXC_ERROR;
1042 		END IF;
1043 
1044 
1045         /*
1046 		IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1047 		    iex_debug_pub.LogMessage(l_api_name || ': Before AR_RECEIPT_API_PUB.APPLY_ON_ACCOUNT');
1048 		END IF;
1049 
1050 		-- apply on_account
1051 		AR_RECEIPT_API_PUB.APPLY_ON_ACCOUNT(
1052 			P_API_VERSION => 1.0,
1053 			P_INIT_MSG_LIST => FND_API.G_FALSE,
1054 			P_COMMIT => FND_API.G_FALSE,
1055 			X_RETURN_STATUS => L_RETURN_STATUS,
1056 			X_MSG_COUNT => L_MSG_COUNT,
1057 			X_MSG_DATA => L_MSG_DATA,
1058 			P_RECEIPT_NUMBER => l_cr_number1);
1059 		IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1060 		    iex_debug_pub.LogMessage(l_api_name || ': After AR_RECEIPT_API_PUB.APPLY_ON_ACCOUNT');
1061 		    iex_debug_pub.LogMessage(l_api_name || ': Status = ' || L_RETURN_STATUS);
1062 		END IF;
1063 
1064 		-- check for errors
1065 		IF l_return_status<>FND_API.G_RET_STS_SUCCESS THEN
1066 		    IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1067 			iex_debug_pub.LogMessage(l_api_name || ': AR_RECEIPT_API_PUB.APPLY_ON_ACCOUNT failed');
1068 		    END IF;
1069 
1070 		    FND_MESSAGE.SET_NAME('IEX', 'IEX_FAILED_APPLY_ACC');
1071 		    FND_MSG_PUB.Add;
1072 		    RAISE FND_API.G_EXC_ERROR;
1073 		END IF;
1074         */
1075 
1076 		-- generate new pay_receipt id
1077 		OPEN pad_genid_crs;
1078 		FETCH pad_genid_crs INTO l_pay_receipt_ref_id;
1079 		CLOSE pad_genid_crs;
1080 
1081 		IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1082 		    iex_debug_pub.LogMessage(l_api_name || ': New pay_receipt_ref_id = ' || l_pay_receipt_ref_id);
1083 		    iex_debug_pub.LogMessage(l_api_name || ': Before call to IEX_PAY_RECEIPT_XREF_PKG.INSERT_ROW');
1084 		END IF;
1085 
1086 		IEX_PAY_RECEIPT_XREF_PKG.INSERT_ROW(
1087 			X_ROWID => l_rowid,
1088 			P_PAY_RECEIPT_XREF_ID => l_pay_receipt_ref_id,
1089 			P_LAST_UPDATE_DATE => sysdate,
1090 			P_LAST_UPDATED_BY => FND_GLOBAL.User_Id,
1091 			P_LAST_UPDATE_LOGIN => G_LOGIN_ID,
1092 			P_CREATION_DATE => sysdate,
1093 			P_CREATED_BY => FND_GLOBAL.User_Id,
1094 			P_PROGRAM_ID => 695,
1095 			P_OBJECT_VERSION_NUMBER => 1.0,
1096 			P_PAYMENT_ID => l_payment_id,
1097 			P_CASH_RECEIPT_ID => l_cr_id);
1098 
1099             	l_cr_id_tab(i) := l_cr_id;
1100 
1101             	IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1102 		    iex_debug_pub.LogMessage(l_api_name || ': After call to IEX_PAY_RECEIPT_XREF_PKG.INSERT_ROW');
1103             	End if ;
1104 	    END LOOP;
1105 
1106 	ELSIF P_PMT_REC.PAYMENT_TARGET = 'INVOICES' THEN
1107 
1108 
1109 	    IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1110 		iex_debug_pub.LogMessage(l_api_name || ': Payment target INVOICES');
1111             END IF;
1112 
1113 	    --Determine the Payment Instrument type that is used.
1114 	    IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1115 		iex_debug_pub.LogMessage(l_api_name || ': Payment instrument is ' || P_PMTINSTR_REC.USE_INSTRUMENT);
1116 	    END IF;
1117 
1118 
1119 	/* Begin - varangan - profile bug#4558547
1120          get_ar_payment_method(p_payment_type => P_PMTINSTR_REC.USE_INSTRUMENT,
1121 	        x_payment_method => l_ar_pay_method1,
1122 	    	x_payment_method_id => l_ar_pay_method);
1123 	    End - varangan - profile bug#4558547	*/
1124 
1125 
1126 	-- begin - uptake funds capture - varangan
1127      /*   IF P_PMTINSTR_REC.USE_INSTRUMENT = 'CC' THEN
1128 
1129 		create_ar_cc_bank_account(p_cust_account_id => P_PMTDTLS_TBL(1).CUST_ACCOUNT_ID,
1130 		    p_cc_number => P_PMTINSTR_REC.CREDITCARDINSTR.CC_NUM,
1131 		    p_cc_exp_date => P_PMTINSTR_REC.CREDITCARDINSTR.CC_EXPDATE,
1132 		    p_cc_holder_name => P_PMTINSTR_REC.CREDITCARDINSTR.CC_HOLDERNAME,
1133 		    p_currency => P_PMT_REC.CURRENCY_CODE,
1134 		    p_party_id => l_payer_id,
1135 		    x_bank_account_id => l_cust_bank_acc_id,
1136 		    x_bank_account_uses_id => l_bank_account_uses_id,
1137 		    x_branch_id => l_branch_id);
1138 
1139 	    ELSIF P_PMTINSTR_REC.USE_INSTRUMENT = 'BA' THEN
1140 
1141 		create_ar_ba_bank_account(p_cust_account_id => P_PMTDTLS_TBL(1).CUST_ACCOUNT_ID,
1142 		    p_ba_routing_number => P_PMTINSTR_REC.BANKACCTINSTR.BANK_ID,
1143 		    p_ba_number => P_PMTINSTR_REC.BANKACCTINSTR.BANKACCT_NUM,
1144 		    p_ba_type => P_PMTINSTR_REC.BANKACCTINSTR.BANKACCT_TYPE,
1145 		    p_ba_holder_name => P_PMTINSTR_REC.BANKACCTINSTR.BANKACCT_HOLDERNAME,
1146 		    p_currency => P_PMT_REC.CURRENCY_CODE,
1147 		    p_party_id => l_payer_id,
1148 		    x_bank_account_id => l_cust_bank_acc_id,
1149 		    x_bank_account_uses_id => l_bank_account_uses_id,
1150 		    x_branch_id => l_branch_id);
1151 
1152 	    END IF; */
1153    	-- end - uptake funds capture - varangan
1154 
1155       -- Start bug 6717279 gnramasa 25-Aug-08
1156       --FOR i IN 1..P_PMTDTLS_TBL.COUNT LOOP  -- to fix a bug 5128910
1157 
1158 
1159 	    -- generate new cash receipt number
1160 	    OPEN rc_genid_crs;
1161 	    FETCH rc_genid_crs INTO l_cr_number;
1162 	    CLOSE rc_genid_crs;
1163 
1164 	    l_cr_number1 := 'IEX_' || to_char(l_cr_number);
1165 
1166 	    IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1167 		iex_debug_pub.LogMessage(l_api_name || ': New cr id = ' || l_cr_number1);
1168 		iex_debug_pub.LogMessage(l_api_name || ': Before AR_RECEIPT_API_PUB.CREATE_CASH');
1169 	    END IF;
1170 
1171 	    IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1172               iex_debug_pub.logmessage('Creating Cash Receipt and Applying for the First Payment Schedule....');
1173               iex_debug_pub.logmessage('Pmt Schedule id =>' || P_PMTDTLS_TBL(1).PAYMENT_SCHEDULE_ID || ' Amount => ' || P_PMTDTLS_TBL(1).AMOUNT );
1174           End If ;
1175 
1176 	    if l_fun_currency = P_PMT_REC.CURRENCY_CODE then
1177                --if P_PMTDTLS_TBL(i).currency_code = P_PMT_REC.CURRENCY_CODE then
--commented for bug6717179
1178 	       IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1179 			iex_debug_pub.LogMessage(l_api_name || ': P_PMTDTLS_TBL(1).TRX_TO_CR_RATE = ' || P_PMTDTLS_TBL(1).TRX_TO_CR_RATE);
1180 	        END IF;
1181 		if P_PMTDTLS_TBL(1).TRX_TO_CR_RATE = 1 then
1182 		-- create cash receipt
1183             /*
1184 		    AR_RECEIPT_API_PUB.CREATE_CASH(
1185 		    P_API_VERSION => 1.0,
1186 		    P_INIT_MSG_LIST => FND_API.G_FALSE,
1187 		    P_COMMIT => FND_API.G_FALSE,
1188 		    P_CURRENCY_CODE => P_PMT_REC.CURRENCY_CODE,
1189 		    P_AMOUNT => P_PMT_REC.TOTAL_AMOUNT,
1190 		    P_RECEIPT_METHOD_ID => l_ar_pay_method,
1191 		    P_RECEIPT_NUMBER => l_cr_number1,
1192 		    P_CUSTOMER_ID => P_PMTDTLS_TBL(1).CUST_ACCOUNT_ID,
1193 		    P_CUSTOMER_SITE_USE_ID => P_PMTDTLS_TBL(1).CUST_SITE_USE_ID,
1194 		    P_CUSTOMER_BANK_ACCOUNT_ID => L_CUST_BANK_ACC_ID,
1195 		    P_CR_ID => l_cr_id,
1196 		    X_RETURN_STATUS => L_RETURN_STATUS,
1197 		    X_MSG_COUNT => L_MSG_COUNT,
1198 		    X_MSG_DATA => L_MSG_DATA);
1199 
1200             */
1201 
1202 
1203 		    AR_RECEIPT_API_PUB.CREATE_AND_APPLY(
1204 		        P_API_VERSION => 1.0,
1205 		        P_INIT_MSG_LIST => FND_API.G_FALSE,
1206 		        P_COMMIT => FND_API.G_FALSE,
1207 		        P_CURRENCY_CODE => P_PMT_REC.CURRENCY_CODE,
1208 		        P_AMOUNT => P_PMT_REC.TOTAL_AMOUNT, --P_PMTDTLS_TBL(i).AMOUNT, -- P_PMT_REC.TOTAL_AMOUNT,
1209 		        P_RECEIPT_METHOD_ID =>P_PMT_METHOD, -- l_ar_pay_method, for profile bug#4558547
1210 		        P_RECEIPT_NUMBER => l_cr_number1,
1211 		        P_CUSTOMER_ID => P_PMT_REC.CUST_ACCOUNT_ID, --P_PMTDTLS_TBL(i).CUST_ACCOUNT_ID,
1212 		        P_CUSTOMER_SITE_USE_ID => P_PMT_REC.CUST_SITE_USE_ID,  --P_PMTDTLS_TBL(i).CUST_SITE_USE_ID,
1213 		        P_CUSTOMER_BANK_ACCOUNT_ID => L_CUST_BANK_ACC_ID,
1214 		        P_CR_ID => l_cr_id,
1215 		        p_applied_payment_schedule_id => P_PMTDTLS_TBL(1).PAYMENT_SCHEDULE_ID, --P_PMTDTLS_TBL(i).PAYMENT_SCHEDULE_ID,
1216 		        p_amount_applied => P_PMTDTLS_TBL(1).AMOUNT, --P_PMTDTLS_TBL(i).AMOUNT,
1217                         p_call_payment_processor => l_call_payment_processor, -- Fix a bug 5897567 02/06/07 by Ehuh
1218 		        X_RETURN_STATUS => L_RETURN_STATUS,
1219 		        X_MSG_COUNT => L_MSG_COUNT,
1220 		        X_MSG_DATA => L_MSG_DATA,
1221 			-- Begin -- varangan --Bug4528444 -- included for payments uptake
1222                         p_payment_trxn_extension_id =>P_PMTDTLS_TBL(1).TRX_EXTN_ID
1223    			-- End -- varangan --Bug4528444 -- included for payments uptake
1224                         );
1225               else
1226 
1227                     AR_RECEIPT_API_PUB.CREATE_AND_APPLY(
1228                         P_API_VERSION => 1.0,
1229                         P_INIT_MSG_LIST => FND_API.G_FALSE,
1230                         P_COMMIT => FND_API.G_FALSE,
1231                         P_CURRENCY_CODE => P_PMT_REC.CURRENCY_CODE,
1232                         P_AMOUNT => P_PMT_REC.TOTAL_AMOUNT, --P_PMTDTLS_TBL(i).AMOUNT, -- P_PMT_REC.TOTAL_AMOUNT,
1233                         P_RECEIPT_METHOD_ID =>P_PMT_METHOD, -- l_ar_pay_method, for profile bug#4558547
1234                         P_RECEIPT_NUMBER => l_cr_number1,
1235                         P_CUSTOMER_ID => P_PMT_REC.CUST_ACCOUNT_ID, --P_PMTDTLS_TBL(i).CUST_ACCOUNT_ID,
1236                         P_CUSTOMER_SITE_USE_ID => P_PMT_REC.CUST_SITE_USE_ID,  --P_PMTDTLS_TBL(i).CUST_SITE_USE_ID,
1237                         P_CUSTOMER_BANK_ACCOUNT_ID => L_CUST_BANK_ACC_ID,
1238                         P_CR_ID => l_cr_id,
1239                         p_applied_payment_schedule_id => P_PMTDTLS_TBL(1).PAYMENT_SCHEDULE_ID, --P_PMTDTLS_TBL(i).PAYMENT_SCHEDULE_ID,
1240 			p_amount_applied => P_PMTDTLS_TBL(1).AMOUNT / P_PMTDTLS_TBL(1).TRX_TO_CR_RATE, --added by gnramasa bug 6717279
1241                         p_amount_applied_from  => P_PMTDTLS_TBL(1).AMOUNT,  --P_PMTDTLS_TBL(i).AMOUNT,
1242 			p_trans_to_receipt_rate => P_PMTDTLS_TBL(1).TRX_TO_CR_RATE,  --added by gnramasa bug 6717279
1243                         p_call_payment_processor => l_call_payment_processor, -- Fix a bug 5897567 02/06/07 by Ehuh
1244                         X_RETURN_STATUS => L_RETURN_STATUS,
1245                         X_MSG_COUNT => L_MSG_COUNT,
1246                         X_MSG_DATA => L_MSG_DATA,
1247                         -- Begin -- varangan --Bug4528444 -- included for payments uptake
1248                         p_payment_trxn_extension_id =>P_PMTDTLS_TBL(1).TRX_EXTN_ID
1249                         -- End -- varangan --Bug4528444 -- included for payments uptake
1250                         );
1251               end if;
1252 
1253 
1254 	    else
1255 		    -- create cash receipt
1256             /*
1257 		    AR_RECEIPT_API_PUB.CREATE_CASH(
1258 		        P_API_VERSION => 1.0,
1259 		        P_INIT_MSG_LIST => FND_API.G_FALSE,
1260 		        P_COMMIT => FND_API.G_FALSE,
1261 		        P_CURRENCY_CODE => P_PMT_REC.CURRENCY_CODE,
1262 		        P_EXCHANGE_RATE_TYPE => P_PMT_REC.EXCHANGE_RATE_TYPE,
1263 		        P_EXCHANGE_RATE_DATE => P_PMT_REC.EXCHANGE_DATE,
1264 		        P_AMOUNT => P_PMT_REC.TOTAL_AMOUNT,
1265 		        P_RECEIPT_METHOD_ID => l_ar_pay_method,
1266 		        P_RECEIPT_NUMBER => l_cr_number1,
1267 		        P_CUSTOMER_ID => P_PMTDTLS_TBL(1).CUST_ACCOUNT_ID,
1268 		        P_CUSTOMER_SITE_USE_ID => P_PMTDTLS_TBL(1).CUST_SITE_USE_ID,
1269 		        P_CUSTOMER_BANK_ACCOUNT_ID => L_CUST_BANK_ACC_ID,
1270 		        P_CR_ID => l_cr_id,
1271 		        X_RETURN_STATUS => L_RETURN_STATUS,
1272 		        X_MSG_COUNT => L_MSG_COUNT,
1273 		        X_MSG_DATA => L_MSG_DATA);
1274             */
1275 
1276 		if P_PMTDTLS_TBL(1).TRX_TO_CR_RATE = 1 then
1277 		    AR_RECEIPT_API_PUB.CREATE_AND_APPLY(
1278 		        P_API_VERSION => 1.0,
1279 		        P_INIT_MSG_LIST => FND_API.G_FALSE,
1280 		        P_COMMIT => FND_API.G_FALSE,
1281 		        P_CURRENCY_CODE => P_PMT_REC.CURRENCY_CODE,
1282 		        P_EXCHANGE_RATE_TYPE => P_PMT_REC.EXCHANGE_RATE_TYPE,
1283 		        P_EXCHANGE_RATE_DATE => P_PMT_REC.EXCHANGE_DATE,
1284 		        P_AMOUNT => P_PMT_REC.TOTAL_AMOUNT, --P_PMTDTLS_TBL(i).AMOUNT, -- P_PMT_REC.TOTAL_AMOUNT,
1285 		        P_RECEIPT_METHOD_ID => P_PMT_METHOD, --l_ar_pay_method, for profile bug#4558547
1286 		        P_RECEIPT_NUMBER => l_cr_number1,
1287 		        P_CUSTOMER_ID => P_PMT_REC.CUST_ACCOUNT_ID, --P_PMTDTLS_TBL(i).CUST_ACCOUNT_ID,
1288 		        P_CUSTOMER_SITE_USE_ID => P_PMT_REC.CUST_SITE_USE_ID,  --P_PMTDTLS_TBL(i).CUST_SITE_USE_ID,
1289 		        P_CUSTOMER_BANK_ACCOUNT_ID => L_CUST_BANK_ACC_ID,
1290 		        P_CR_ID => l_cr_id,
1291 			p_applied_payment_schedule_id => P_PMTDTLS_TBL(1).PAYMENT_SCHEDULE_ID, --P_PMTDTLS_TBL(i).PAYMENT_SCHEDULE_ID,
1292 			p_amount_applied => P_PMTDTLS_TBL(1).AMOUNT, --P_PMTDTLS_TBL(i).AMOUNT,
1293                         p_call_payment_processor => l_call_payment_processor, -- Fix a bug 5897567 02/06/07 by Ehuh
1294 		        X_RETURN_STATUS => L_RETURN_STATUS,
1295 		        X_MSG_COUNT => L_MSG_COUNT,
1296 		        X_MSG_DATA => L_MSG_DATA,
1297 			 -- Begin -- varangan --Bug4528444 -- included for payments uptake
1298                         p_payment_trxn_extension_id => P_PMTDTLS_TBL(1).TRX_EXTN_ID
1299                         -- End -- varangan --Bug4528444 -- included for payments uptake
1300                       );
1301 		else
1302 			AR_RECEIPT_API_PUB.CREATE_AND_APPLY(
1303 		        P_API_VERSION => 1.0,
1304 		        P_INIT_MSG_LIST => FND_API.G_FALSE,
1305 		        P_COMMIT => FND_API.G_FALSE,
1306 		        P_CURRENCY_CODE => P_PMT_REC.CURRENCY_CODE,
1307 		        P_EXCHANGE_RATE_TYPE => P_PMT_REC.EXCHANGE_RATE_TYPE,
1308 		        P_EXCHANGE_RATE_DATE => P_PMT_REC.EXCHANGE_DATE,
1309 		        P_AMOUNT => P_PMT_REC.TOTAL_AMOUNT, --P_PMTDTLS_TBL(i).AMOUNT, -- P_PMT_REC.TOTAL_AMOUNT,
1310 		        P_RECEIPT_METHOD_ID => P_PMT_METHOD, --l_ar_pay_method, for profile bug#4558547
1311 		        P_RECEIPT_NUMBER => l_cr_number1,
1312 		        P_CUSTOMER_ID => P_PMT_REC.CUST_ACCOUNT_ID, --P_PMTDTLS_TBL(i).CUST_ACCOUNT_ID,
1313 		        P_CUSTOMER_SITE_USE_ID => P_PMT_REC.CUST_SITE_USE_ID,  --P_PMTDTLS_TBL(i).CUST_SITE_USE_ID,
1314 		        P_CUSTOMER_BANK_ACCOUNT_ID => L_CUST_BANK_ACC_ID,
1315 		        P_CR_ID => l_cr_id,
1316 			p_applied_payment_schedule_id => P_PMTDTLS_TBL(1).PAYMENT_SCHEDULE_ID, --P_PMTDTLS_TBL(i).PAYMENT_SCHEDULE_ID,
1317 			p_amount_applied => P_PMTDTLS_TBL(1).AMOUNT / P_PMTDTLS_TBL(1).TRX_TO_CR_RATE, --P_PMTDTLS_TBL(1).AMOUNT, --P_PMTDTLS_TBL(i).AMOUNT,
1318                         p_call_payment_processor => l_call_payment_processor, -- Fix a bug 5897567 02/06/07 by Ehuh
1319 			p_amount_applied_from => P_PMTDTLS_TBL(1).AMOUNT, --added by gnramasa bug 6717279
1320 			p_trans_to_receipt_rate => P_PMTDTLS_TBL(1).TRX_TO_CR_RATE,  --added by gnramasa bug 6717279
1321 		        X_RETURN_STATUS => L_RETURN_STATUS,
1322 		        X_MSG_COUNT => L_MSG_COUNT,
1323 		        X_MSG_DATA => L_MSG_DATA,
1324 			 -- Begin -- varangan --Bug4528444 -- included for payments uptake
1325                         p_payment_trxn_extension_id => P_PMTDTLS_TBL(1).TRX_EXTN_ID
1326                         -- End -- varangan --Bug4528444 -- included for payments uptake
1327                       );
1328 		end if;
1329 
1330 
1331 	    end if;
1332 
1333 
1334 	    IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1335 		iex_debug_pub.LogMessage(l_api_name || ': After AR_RECEIPT_API_PUB.CREATE_CASH');
1336 		iex_debug_pub.LogMessage(l_api_name || ': Status = ' || L_RETURN_STATUS);
1337 		iex_debug_pub.LogMessage(l_api_name || ': New cash_receipt_id = ' || l_cr_id);
1338 	    END IF;
1339 
1340 	    -- check for errors
1341 	    IF l_return_status<>'S' THEN
1342 
1343 	     x_return_status :=l_return_status;
1344   	     X_MSG_DATA:= L_MSG_DATA;
1345   	     X_MSG_COUNT := L_MSG_COUNT;
1346 
1347 		IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1348 		    iex_debug_pub.LogMessage(l_api_name || ': AR_RECEIPT_API_PUB.CREATE_CASH failed');
1349 		END IF;
1350 		FND_MESSAGE.SET_NAME('IEX', 'IEX_FAILED_CREATE_CR');
1351 		FND_MSG_PUB.Add;
1352 		return;
1353 	    END IF;
1354 
1355 	    OPEN get_delid_crs(P_PMTDTLS_TBL(1).PAYMENT_SCHEDULE_ID);
1356 	    FETCH get_delid_crs INTO l_del_id;
1357 	    CLOSE get_delid_crs;
1358 
1359 		if l_del_id is not null then
1360 		    IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1361 			iex_debug_pub.LogMessage(l_api_name || ': Delinquency found. Going to insert row into IEX_DEL_PAY_XREF table');
1362    		    END IF;
1363 
1364 		    -- generate new del_payment_ref id
1365 		    OPEN dpx_genid_crs;
1366 		    FETCH dpx_genid_crs INTO l_del_pay_ref_id;
1367 		    CLOSE dpx_genid_crs;
1368 
1369 		    IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1370 			iex_debug_pub.LogMessage(l_api_name || ': Before IEX_DEL_PAY_XREF_PKG.INSERT_ROW');
1371    		    END IF;
1372 
1373 		    IEX_DEL_PAY_XREF_PKG.INSERT_ROW(
1374 			X_ROWID => l_rowid,
1375 			P_DEL_PAY_ID => l_del_pay_ref_id,
1376 			P_LAST_UPDATE_DATE => sysdate,
1377 			P_LAST_UPDATED_BY => FND_GLOBAL.User_Id,
1378 			P_LAST_UPDATE_LOGIN => G_LOGIN_ID,
1379 			P_CREATION_DATE => sysdate,
1380 			P_CREATED_BY => FND_GLOBAL.User_Id,
1381 			P_PROGRAM_ID => 695,
1382 			P_OBJECT_VERSION_NUMBER => 1.0,
1383 			P_DELINQUENCY_ID => l_del_id,
1384 			P_PAYMENT_ID => l_payment_id);
1385 
1386 		    IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1387 			iex_debug_pub.LogMessage(l_api_name || ': After call to IEX_DEL_PAY_XREF_PKG.INSERT_ROW');
1388 		    END IF;
1389 		else
1390 		    IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1391 			iex_debug_pub.LogMessage(l_api_name || ': Delinquency not found.');
1392 		    END IF;
1393 		end if;
1394 
1395 	    -- generate new pay_receipt_ref id
1396 	    OPEN pad_genid_crs;
1397 	    FETCH pad_genid_crs INTO l_pay_receipt_ref_id;
1398 	    CLOSE pad_genid_crs;
1399 
1400             IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1401 		iex_debug_pub.LogMessage(l_api_name || ': New pay_receipt_ref_id = ' || l_pay_receipt_ref_id);
1402 		iex_debug_pub.LogMessage(l_api_name || ': Before IEX_DEL_PAY_XREF_PKG.INSERT_ROW');
1403 	    END IF;
1404 
1405 	    IEX_PAY_RECEIPT_XREF_PKG.Insert_Row(
1406             	X_ROWID => l_rowid,
1407             	P_PAY_RECEIPT_XREF_ID => l_pay_receipt_ref_id,
1408                 P_LAST_UPDATE_DATE => sysdate,
1409             	P_LAST_UPDATED_BY => FND_GLOBAL.User_Id,
1410             	P_LAST_UPDATE_LOGIN => G_LOGIN_ID,
1411             	P_CREATION_DATE => sysdate,
1412             	P_CREATED_BY => FND_GLOBAL.User_Id,
1413             	P_PROGRAM_ID => 695,
1414             	P_OBJECT_VERSION_NUMBER => 1.0,
1415             	P_PAYMENT_ID => l_payment_id,
1416             	P_CASH_RECEIPT_ID => l_cr_id);
1417 
1418 	    IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1419 		iex_debug_pub.LogMessage(l_api_name || ': After IEX_DEL_PAY_XREF_PKG.INSERT_ROW');
1420             END IF;
1421 
1422 	    l_cr_id_tab(1) := l_cr_id;
1423 
1424 	    -- run thru table of details and apply via AR APIs
1425 	    -- bug 4868943 FOR i IN 2..P_PMTDTLS_TBL.COUNT LOOP
1426 	    -- move this loop to the above to make payment multiple (bug 5128910) FOR i IN 1..P_PMTDTLS_TBL.COUNT LOOP
1427 
1428 	FOR i IN 2..P_PMTDTLS_TBL.COUNT LOOP
1429 		IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1430 		    iex_debug_pub.LogMessage(l_api_name || ': processing payment details; loop ' || i);
1431 		    iex_debug_pub.LogMessage(l_api_name || ': Before AR_RECEIPT_API_PUB.APPLY');
1432 		END IF;
1433 
1434 		-- apply on invoices
1435 		IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1436 		    iex_debug_pub.LogMessage(l_api_name || ': P_PMTDTLS_TBL(i).TRX_TO_CR_RATE = ' || P_PMTDTLS_TBL(i).TRX_TO_CR_RATE);
1437 		END IF;
1438 
1439 --/* bug 4868943
1440 		if P_PMTDTLS_TBL(i).TRX_TO_CR_RATE = 1 then
1441 
1442 		    AR_RECEIPT_API_PUB.APPLY(
1443 			P_API_VERSION => 1.0,
1444 			P_INIT_MSG_LIST => FND_API.G_FALSE,
1445 			P_COMMIT => FND_API.G_FALSE,
1446 			X_RETURN_STATUS => L_RETURN_STATUS,
1447 			X_MSG_COUNT => L_MSG_COUNT,
1448 			X_MSG_DATA => L_MSG_DATA,
1449 			P_RECEIPT_NUMBER => l_cr_number1,
1450 			p_applied_payment_schedule_id => P_PMTDTLS_TBL(i).PAYMENT_SCHEDULE_ID,
1451 			p_amount_applied => P_PMTDTLS_TBL(i).AMOUNT);
1452 
1453 		else
1454 
1455 		    if P_PMTDTLS_TBL(i).TRX_TO_CR_RATE <> 0 then
1456 			AR_RECEIPT_API_PUB.APPLY(
1457 			    P_API_VERSION => 1.0,
1458 			    P_INIT_MSG_LIST => FND_API.G_FALSE,
1459 			    P_COMMIT => FND_API.G_FALSE,
1460 			    X_RETURN_STATUS => L_RETURN_STATUS,
1461 			    X_MSG_COUNT => L_MSG_COUNT,
1462 			    X_MSG_DATA => L_MSG_DATA,
1463 			    P_RECEIPT_NUMBER => l_cr_number1,
1464 			    p_applied_payment_schedule_id => P_PMTDTLS_TBL(i).PAYMENT_SCHEDULE_ID,
1465 			    p_amount_applied => P_PMTDTLS_TBL(i).AMOUNT / P_PMTDTLS_TBL(i).TRX_TO_CR_RATE,
1466 			    p_trans_to_receipt_rate => P_PMTDTLS_TBL(i).TRX_TO_CR_RATE,
1467 			    p_amount_applied_from => P_PMTDTLS_TBL(i).AMOUNT);
1468 
1469 		    else
1470 			IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1471 			    iex_debug_pub.LogMessage(l_api_name || ': because P_PMTDTLS_TBL(i).TRX_TO_CR_RATE = 0 we failed');
1472 			END IF;
1473 
1474                         x_return_status :=l_return_status;
1475   	                X_MSG_DATA:= L_MSG_DATA;
1476 
1477 			FND_MESSAGE.SET_NAME('IEX', 'IEX_FAILED_APPLY_APP');
1478 			FND_MSG_PUB.Add;
1479 			return; -- RAISE FND_API.G_EXC_ERROR;
1480 		    end if;
1481 		end if;
1482 
1483 		IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1484 		    iex_debug_pub.LogMessage(l_api_name || ': After AR_RECEIPT_API_PUB.APPLY');
1485 		    iex_debug_pub.LogMessage(l_api_name || ': Status = ' || L_RETURN_STATUS);
1486 		END IF;
1487 
1488 		-- check for errors
1489 		IF l_return_status<>FND_API.G_RET_STS_SUCCESS THEN
1490 		    X_RETURN_STATUS:=l_return_status;
1491 		    X_MSG_DATA:= L_MSG_DATA;
1492 
1493             IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1494 			iex_debug_pub.LogMessage(l_api_name || ': AR_RECEIPT_API_PUB.APPLY failed');
1495 		    END IF;
1496 
1497 		    FND_MESSAGE.SET_NAME('IEX', 'IEX_FAILED_APPLY_APP');
1498 		    FND_MSG_PUB.Add;
1499 		    RAISE FND_API.G_EXC_ERROR;
1500 		END IF;
1501 --*/
1502 
1503 		OPEN get_delid_crs(P_PMTDTLS_TBL(i).PAYMENT_SCHEDULE_ID);
1504 		FETCH get_delid_crs INTO l_del_id;
1505 		CLOSE get_delid_crs;
1506 
1507 		if l_del_id is not null then
1508 		    IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1509 			iex_debug_pub.LogMessage(l_api_name || ': Delinquency found. Going to insert row into IEX_DEL_PAY_XREF table');
1510    		    END IF;
1511 
1512 		    -- generate new del_payment_ref id
1513 		    OPEN dpx_genid_crs;
1514 		    FETCH dpx_genid_crs INTO l_del_pay_ref_id;
1515 		    CLOSE dpx_genid_crs;
1516 
1517 		    IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1518 			iex_debug_pub.LogMessage(l_api_name || ': Before IEX_DEL_PAY_XREF_PKG.INSERT_ROW');
1519    		    END IF;
1520 
1521 		    IEX_DEL_PAY_XREF_PKG.INSERT_ROW(
1522 			X_ROWID => l_rowid,
1523 			P_DEL_PAY_ID => l_del_pay_ref_id,
1524 			P_LAST_UPDATE_DATE => sysdate,
1525 			P_LAST_UPDATED_BY => FND_GLOBAL.User_Id,
1526 			P_LAST_UPDATE_LOGIN => G_LOGIN_ID,
1527 			P_CREATION_DATE => sysdate,
1528 			P_CREATED_BY => FND_GLOBAL.User_Id,
1529 			P_PROGRAM_ID => 695,
1530 			P_OBJECT_VERSION_NUMBER => 1.0,
1531 			P_DELINQUENCY_ID => l_del_id,
1532 			P_PAYMENT_ID => l_payment_id);
1533 
1534 		    IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1535 			iex_debug_pub.LogMessage(l_api_name || ': After call to IEX_DEL_PAY_XREF_PKG.INSERT_ROW');
1536 		    END IF;
1537 		else
1538 		    IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1539 			iex_debug_pub.LogMessage(l_api_name || ': Delinquency not found.');
1540 		    END IF;
1541 		end if;
1542 	    END LOOP;
1543 
1544 	    /*
1545 	    -- generate new pay_receipt_ref id
1546 	    OPEN pad_genid_crs;
1547 	    FETCH pad_genid_crs INTO l_pay_receipt_ref_id;
1548 	    CLOSE pad_genid_crs;
1549 
1550             IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1551 		iex_debug_pub.LogMessage(l_api_name || ': New pay_receipt_ref_id = ' || l_pay_receipt_ref_id);
1552 		iex_debug_pub.LogMessage(l_api_name || ': Before IEX_DEL_PAY_XREF_PKG.INSERT_ROW');
1553 	    END IF;
1554 
1555 	    IEX_PAY_RECEIPT_XREF_PKG.Insert_Row(
1556             	X_ROWID => l_rowid,
1557             	P_PAY_RECEIPT_XREF_ID => l_pay_receipt_ref_id,
1558                 P_LAST_UPDATE_DATE => sysdate,
1559             	P_LAST_UPDATED_BY => FND_GLOBAL.User_Id,
1560             	P_LAST_UPDATE_LOGIN => G_LOGIN_ID,
1561             	P_CREATION_DATE => sysdate,
1562             	P_CREATED_BY => FND_GLOBAL.User_Id,
1563             	P_PROGRAM_ID => 695,
1564             	P_OBJECT_VERSION_NUMBER => 1.0,
1565             	P_PAYMENT_ID => l_payment_id,
1566             	P_CASH_RECEIPT_ID => l_cr_id);
1567 
1568 
1569 
1570 	    IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1571 		iex_debug_pub.LogMessage(l_api_name || ': After IEX_DEL_PAY_XREF_PKG.INSERT_ROW');
1572          END IF;
1573 
	*/
1574        --END LOOP;
1575 
1576 
1577 	END IF;
1578 
1579 
1580 	/* commit AR processing */
1581     	COMMIT WORK;
1582 
1583 
1584 
1585     	FND_MESSAGE.SET_NAME('IEX', 'IEX_AR_SUCCESS');
1586     	FND_MSG_PUB.Add;
1587 
1588     	x_return_status := FND_API.G_RET_STS_SUCCESS;
1589 commit;
1590 
1591     EXCEPTION
1592         WHEN FND_API.G_EXC_ERROR THEN
1593     	    ROLLBACK TO CREATE_AR_PAYMENT_PVT1;
1594     	      If X_RETURN_STATUS is Null Then
1595     	        x_return_status := FND_API.G_RET_STS_ERROR;
1596   	          End If;
1597 	        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
1598         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1599     	    ROLLBACK TO CREATE_AR_PAYMENT_PVT1;
1600 	        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1601 	        FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
1602 	WHEN OTHERS THEN
1603 	    ROLLBACK TO CREATE_AR_PAYMENT_PVT1;
1604 	    x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1605 	    IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
1606         	FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
1607 	    END IF;
1608 	FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
1609     END;
1610 
1611     if x_return_status <> FND_API.G_RET_STS_SUCCESS then
1612   	return;
1613     end if;
1614 
1615     /* creating note */
1616     BEGIN
1617 	SAVEPOINT CREATE_PAYMENT_PVT2;
1618 
1619 	l_note_type := fnd_profile.value('AST_NOTES_DEFAULT_TYPE');
1620 	IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1621 	    iex_debug_pub.LogMessage(l_api_name || ':  l_note_type = ' ||  l_note_type);
1622 	END IF;
1623 
1624 	/* if note is passed - insert it */
1625 	if P_PMT_REC.NOTE is not null and l_note_type is not null then
1626 	    IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1627 		iex_debug_pub.LogMessage(l_api_name || ': Note is not null');
1628 	    END IF;
1629 
1630 	    IF P_PMT_REC.PAYMENT_TARGET = 'ACCOUNTS' or P_PMT_REC.PAYMENT_TARGET = 'INVOICES' THEN
1631 
1632 		i := 1;
1633 		/* adding parties into note context */
1634 		l_context_tab(i).context_type := 'PARTY';
1635 		l_context_tab(i).context_id := l_note_payer_id;
1636 		i := i + 1;
1637 		if l_note_payer_type = 'PARTY_RELATIONSHIP' then
1638 		    l_context_tab(i).context_type := 'PARTY';
1639 		    l_context_tab(i).context_id := P_PMT_REC.PAYER_PARTY_ORG_ID;
1640 		    i := i + 1;
1641 		    l_context_tab(i).context_type := 'PARTY';
1642 		    l_context_tab(i).context_id := P_PMT_REC.PAYER_PARTY_PER_ID;
1643 		    i := i + 1;
1644 		end if;
1645 
1646 		FOR j IN 1..l_cr_id_tab.COUNT LOOP
1647 		    /* adding account to note context */
1648 		    l_context_tab(i).context_type := 'IEX_ACCOUNT';
1649 		    l_context_tab(i).context_id := P_PMTDTLS_TBL(j).CUST_ACCOUNT_ID;
1650 		    i := i + 1;
1651 
1652 		    /* adding bill-to to note context */
1653 		    l_context_tab(i).context_type := 'IEX_BILLTO';
1654 		    l_context_tab(i).context_id := P_PMTDTLS_TBL(j).CUST_SITE_USE_ID;
1655 		    i := i + 1;
1656 
1657 		    /* adding payments to note context */
1658 		    if j = 1 then
1659 			l_source_object_id := l_cr_id_tab(j);
1660 			l_source_object_code := 'IEX_PAYMENT';
1661 		    else
1662 			l_context_tab(i).context_type := 'IEX_PAYMENT';
1663 			l_context_tab(i).context_id := l_cr_id_tab(j);
1664 			i := i + 1;
1665 		    end if;
1666 		END LOOP;
1667 
1668 		/* adding invoice psa to note context */
1669 		if P_PMT_REC.PAYMENT_TARGET = 'INVOICES' then
1670 		    /* adding psa to note context */
1671 		    FOR j IN 1..P_PMTDTLS_TBL.COUNT LOOP
1672 			l_context_tab(i).context_type := 'IEX_INVOICES';
1673 			l_context_tab(i).context_id := P_PMTDTLS_TBL(j).PAYMENT_SCHEDULE_ID;
1674 			i := i + 1;
1675 		    END LOOP;
1676 		end if;
1677 
1678 		-- for debug purpose only
1679 		IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1680 		    iex_debug_pub.LogMessage(l_api_name || ': l_source_object_id = ' || l_source_object_id);
1681 		    iex_debug_pub.LogMessage(l_api_name || ': l_source_object_code = ' || l_source_object_code);
1682 		END IF;
1683 
1684 		FOR i IN 1..l_context_tab.COUNT LOOP
1685 		    IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1686 			iex_debug_pub.LogMessage(l_api_name || ': l_context_tab(' || i || ').context_type = ' || l_context_tab(i).context_type);
1687 			iex_debug_pub.LogMessage(l_api_name || ': l_context_tab(' || i || ').context_id = ' || l_context_tab(i).context_id);
1688 		    END IF;
1689 		END LOOP;
1690 
1691 		IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1692 		     iex_debug_pub.LogMessage(l_api_name || ': Before call to IEX_NOTES_PVT.Create_Note');
1693             	END IF;
1694 
1695 		IEX_NOTES_PVT.Create_Note(
1696 		    P_API_VERSION => l_api_version,
1697 		    P_INIT_MSG_LIST => FND_API.G_FALSE,
1698 		    P_COMMIT => FND_API.G_FALSE,
1699 		    P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
1700 		    X_RETURN_STATUS => l_return_status,
1701 		    X_MSG_COUNT => l_msg_count,
1702 		    X_MSG_DATA => l_msg_data,
1703 		    p_source_object_id => l_source_object_id,
1704 		    p_source_object_code => l_source_object_code,
1705 		    p_note_type => l_note_type,
1706 		    p_notes	=> P_PMT_REC.NOTE,
1707 		    p_contexts_tbl => l_context_tab,
1708 		    x_note_id => X_PMTRESP_REC.NOTE_ID);
1709 
1710 		IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1711 		    iex_debug_pub.LogMessage(l_api_name || ': After call to IEX_NOTES_PVT.Create_Note');
1712 		    iex_debug_pub.LogMessage(l_api_name || ': Status = ' || L_RETURN_STATUS);
1713             	END IF;
1714 
1715 		-- check for errors
1716 		IF l_return_status<>FND_API.G_RET_STS_SUCCESS THEN
1717 		    IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1718 			iex_debug_pub.LogMessage(l_api_name || ': IEX_NOTES_PVT.Create_Note failed');
1719    		    END IF;
1720 		    RAISE FND_API.G_EXC_ERROR;
1721 		END IF;
1722 	    END IF;
1723 	End if;
1724 
1725 	/* commit note creation */
1726     	COMMIT WORK;
1727 	x_return_status := FND_API.G_RET_STS_SUCCESS;
1728     	-- Standard call to get message count and if count is 1, get message info
1729     	FND_MSG_PUB.Count_And_Get(
1730 	    p_encoded => FND_API.G_FALSE,
1731 	    p_count => x_msg_count,
1732 	    p_data => x_msg_data);
1733 
1734     EXCEPTION
1735         WHEN FND_API.G_EXC_ERROR THEN
1736 	    ROLLBACK TO CREATE_PAYMENT_PVT2;
1737 	    x_return_status := FND_API.G_RET_STS_ERROR;
1738 	    FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
1739     	WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1740 	    ROLLBACK TO CREATE_PAYMENT_PVT2;
1741 	    x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1742 	    FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
1743 	WHEN OTHERS THEN
1744 	    ROLLBACK TO CREATE_PAYMENT_PVT2;
1745 	    x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1746 	    IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1747 		FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
1748 	    END IF;
1749 	    FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
1750     END;
1751 END ;
1752 
1753 PROCEDURE CREATE_OKL_PAYMENT(
1754    	P_API_VERSION		    	IN      NUMBER,
1755    	P_INIT_MSG_LIST		    	IN      VARCHAR2,
1756    	P_COMMIT                    	IN      VARCHAR2,
1757    	P_VALIDATION_LEVEL	    	IN      NUMBER,
1758    	X_RETURN_STATUS		    	OUT NOCOPY    VARCHAR2,
1759    	X_MSG_COUNT                 	OUT NOCOPY    NUMBER,
1760    	X_MSG_DATA	    	    	OUT NOCOPY    VARCHAR2,
1761 	P_PMT_REC			IN	IEX_PAYMENTS_PUB.PMT_REC_TYPE,
1762 	P_PMTDTLS_TBL			IN	IEX_PAYMENTS_PUB.PMTDTLS_TBL_TYPE,
1763 	P_PMTINSTR_REC			IN	IEX_PAYMENTS_PUB.PMTINSTR_REC_TYPE,
1764 	X_PMTRESP_REC			OUT NOCOPY	IEX_PAYMENTS_PUB.PMTRESP_REC_TYPE)
1765 IS
1766     	l_api_name                  CONSTANT VARCHAR2(30) := 'CREATE_OKL_PAYMENT';
1767     	l_api_version               CONSTANT NUMBER := 1.0;
1768    	l_return_status             VARCHAR2(1);
1769     	l_msg_count                 NUMBER;
1770    	l_msg_data                  VARCHAR2(32767);
1771 
1772    	-- iPayment capture types
1773 
1774 
1775    	/*  Begin - Bug428444 -- varangan -- remove this comment while implementing OKL payment in R12 codeline
1776 
1777 	l_payee_rec                 iby_payment_adapter_pub.payee_rec_type;
1778    	l_payer_rec                 iby_payment_adapter_pub.payer_rec_type;
1779    	l_pmtinstr_rec              iby_payment_adapter_pub.pmtinstr_rec_type;
1780    	l_tangible_rec              iby_payment_adapter_pub.tangible_rec_type;
1781    	l_pmtreqtrxn_rec            iby_payment_adapter_pub.pmtreqtrxn_rec_type;
1782    	l_reqresp_rec               iby_payment_adapter_pub.reqresp_rec_type;
1783    	l_RiskInfo_rec		    IBY_Payment_Adapter_Pub.RiskInfo_rec_type;
1784 	l_capturetrxn_rec	    IBY_Payment_Adapter_Pub.CaptureTrxn_rec_type;
1785 	l_capresp_rec		    IBY_Payment_Adapter_Pub.CaptureResp_rec_type;
1786 
1787 	-- iPayment instrument types
1788 	l_pmtInstrRec               IBY_INSTRREG_PUB.PmtInstr_rec_type;
1789 
1790 	TYPE pay_okl_cnsld_id_tab IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
1791 	TYPE pay_okl_contract_id_tab IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
1792 
1793 	l_pay_okl_cnsld_id_tab		pay_okl_cnsld_id_tab;
1794 	l_pay_okl_contract_id_tab	pay_okl_contract_id_tab;
1795    	l_instr_id                  	NUMBER;     -- cc_id/ba_id
1796    	l_rowid                     	VARCHAR2(100);
1797    	l_payment_id                	NUMBER;
1798    	i                           	NUMBER;
1799    	j                           	NUMBER;
1800 	l_tangible_id			NUMBER;
1801 	l_ar_pay_method1		VARCHAR2(100);
1802 	l_ar_pay_method			NUMBER;
1803 	l_note_payer_id			NUMBER;
1804 	l_payer_num_id			NUMBER;
1805 	l_payer_id			VARCHAR2(80);
1806 	l_payer_name			HZ_PARTIES.PARTY_NAME%TYPE;  --Changed the datatype for bug#5652085 by ehuh 2/28/07
1807 	l_note_payer_type		VARCHAR2(100);
1808 	l_context_tab			IEX_NOTES_PVT.CONTEXTS_TBL_TYPE;
1809 	l_pay_okl_ref_id		NUMBER;
1810 	l_template_id			NUMBER;
1811    	l_request_id   			number;
1812     	l_autofulfill			varchar2(1);
1813     	l_disable_ipayment		varchar2(1);
1814     	l_note_type			varchar2(30);
1815     	l_source_object_id		NUMBER;
1816     	l_source_object_code		varchar2(20);
1817 
1818    	-- generate new payment
1819    	CURSOR pay_genid_crs IS
1820    	select IEX_PAYMENTS_S.NEXTVAL from dual;
1821 
1822    	-- generate new tangible id
1823    	CURSOR tang_genid_crs IS
1824    	select IEX_IPAYMENT_TANGIBLE_S.NEXTVAL from dual;
1825 
1826    	-- generate new pay_okl_xref id
1827    	CURSOR pox_genid_crs IS
1828    	select iex_pay_okl_xref_s.NEXTVAL from dual;
1829 
1830 	CURSOR get_baid_crs(p_BANKID VARCHAR2,
1831 			    p_BANKACCOUNTID VARCHAR2,
1832 			    p_PAYER_ID VARCHAR2) IS
1833 		select INSTRID
1834 		from iby_bankacct_v
1835 		where
1836 		BANKID = p_BANKID and
1837 		BANKACCOUNTID = p_BANKACCOUNTID and
1838 		OWNERID = p_PAYER_ID;
1839 
1840 	CURSOR get_ccid_crs(p_CCNUMBER VARCHAR2,
1841 			    p_PAYER_ID VARCHAR2) IS
1842 		select INSTRID
1843 		from iby_creditcard_v
1844 		where
1845 		CCNUMBER = p_CCNUMBER and
1846 		OWNERID = p_PAYER_ID;
1847 
1848 		-- End - Bug428444 -- varangan -- remove this comment while implementing OKL payment in R12 codeline */
1849 
1850 BEGIN
1851 
1852  NUll; -- Remove it while coding OKL payment flow
1853 
1854  /*  Begin - Bug428444 -- varangan -- remove this comment while implementing OKL payment in R12 codeline
1855 
1856 
1857   -- First part of API: standard checking, iPayment processing
1858   BEGIN
1859   --   First part of API savepoint
1860     SAVEPOINT CREATE_OKL_PAYMENT_PVT1;
1861 
1862    	-- Standard call to check for call compatibility
1863    	IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
1864    		RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1865    	END IF;
1866 
1867    	-- Initialize message list if p_init_msg_list is set to TRUE
1868    	IF FND_API.To_Boolean(p_init_msg_list) THEN
1869    		FND_MSG_PUB.initialize;
1870    	END IF;
1871 
1872    	-- Initialize API return status to success
1873    	l_return_status := FND_API.G_RET_STS_SUCCESS;
1874 
1875    	-- START OF BODY OF API
1876 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1877 	iex_debug_pub.LogMessage(l_api_name || ': Start of CREATE_PAYMENT');
1878 END IF;
1879 
1880 	-- validate all input parameters
1881 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1882 	iex_debug_pub.LogMessage(l_api_name || ': Before validate_input');
1883 END IF;
1884 	validate_input(P_PMT_REC => P_PMT_REC,
1885 			P_PMTDTLS_TBL => P_PMTDTLS_TBL,
1886 			P_PMTINSTR_REC => P_PMTINSTR_REC);
1887 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1888 	iex_debug_pub.LogMessage(l_api_name || ': After validate_input');
1889 END IF;
1890 
1891 	-- validate payer parties and get payer info
1892 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1893 	iex_debug_pub.LogMessage(l_api_name || ': Before GET_PAYER_INFO');
1894 END IF;
1895 	GET_PAYER_INFO(P_PAYER_PARTY_REL_ID => P_PMT_REC.PAYER_PARTY_REL_ID,
1896 		P_PAYER_PARTY_ORG_ID => P_PMT_REC.PAYER_PARTY_ORG_ID,
1897 		P_PAYER_PARTY_PER_ID => P_PMT_REC.PAYER_PARTY_PER_ID,
1898 		X_NOTE_PAYER_TYPE => l_note_payer_type,
1899 		X_NOTE_PAYER_NUM_ID => l_note_payer_id,
1900 		X_PAYER_NUM_ID => l_payer_num_id,
1901 		X_PAYER_ID => l_payer_id,
1902 		X_PAYER_NAME => l_payer_name);
1903 
1904 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1905 	iex_debug_pub.LogMessage(l_api_name || ': After GET_PAYER_INFO');
1906 	iex_debug_pub.LogMessage(l_api_name || ': GET_PAYER_INFO returns:');
1907 	iex_debug_pub.LogMessage(l_api_name || ': l_note_payer_type = ' || l_note_payer_type);
1908 	iex_debug_pub.LogMessage(l_api_name || ': l_note_payer_id = ' || l_note_payer_id);
1909 	iex_debug_pub.LogMessage(l_api_name || ': l_payer_num_id = ' || l_payer_num_id);
1910 	iex_debug_pub.LogMessage(l_api_name || ': l_payer_id = ' || l_payer_id);
1911 	iex_debug_pub.LogMessage(l_api_name || ': l_payer_name = ' || l_payer_name);
1912 END IF;
1913 
1914 	l_disable_ipayment := fnd_profile.value('IEX_DISABLE_IPAYMENT');
1915 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1916 	iex_debug_pub.LogMessage(l_api_name || ': l_disable_ipayment = ' || l_disable_ipayment);
1917 END IF;
1918 
1919 	if l_disable_ipayment is null or (l_disable_ipayment is not null and l_disable_ipayment = 'N') then
1920 
1921 	--Determine the Payment Instrument type that is used.
1922 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1923 	iex_debug_pub.LogMessage(l_api_name || ': Determine instrument');
1924 END IF;
1925 	IF P_PMTINSTR_REC.USE_INSTRUMENT = 'CC' THEN
1926 
1927 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1928 		iex_debug_pub.LogMessage(l_api_name || ': Instrument is CC');
1929 END IF;
1930 
1931 	    	l_ar_pay_method1 := fnd_profile.value('IEX_CCARD_REMITTANCE');
1932 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1933 		iex_debug_pub.LogMessage(l_api_name || ': CC remittance = ' || l_ar_pay_method1);
1934 END IF;
1935 		if l_ar_pay_method1 is null then
1936 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1937 			iex_debug_pub.LogMessage(l_api_name || ': failed to get CC remittance');
1938 END IF;
1939 			FND_MESSAGE.SET_NAME('IEX', 'IEX_NO_CC_REMITTANCE');
1940 			FND_MSG_PUB.Add;
1941 			RAISE FND_API.G_EXC_ERROR;
1942 		end if;
1943 		l_ar_pay_method := to_number(l_ar_pay_method1);
1944 
1945 		-- first check for existance of instrument. if does not exist add instrument
1946 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1947 		iex_debug_pub.LogMessage(l_api_name || ': Search for CC');
1948 END IF;
1949 		OPEN get_ccid_crs(IBY_INSTRREG_PUB.encode(P_PMTINSTR_REC.CREDITCARDINSTR.CC_NUM), l_payer_id);
1950 		FETCH get_ccid_crs INTO l_instr_id;
1951 		CLOSE get_ccid_crs;
1952 
1953 		if l_instr_id is null then
1954 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1955 			iex_debug_pub.LogMessage(l_api_name || ': CC is not found');
1956 			iex_debug_pub.LogMessage(l_api_name || ': Going to insert new cc');
1957 END IF;
1958 
1959 			l_pmtInstrRec.InstrumentType := 'CREDITCARD';
1960 			l_pmtInstrRec.CreditCardInstr.FINAME := P_PMTINSTR_REC.CREDITCARDINSTR.FINAME;
1961 			l_pmtInstrRec.CreditCardInstr.CC_TYPE := P_PMTINSTR_REC.CREDITCARDINSTR.CC_TYPE;
1962 			l_pmtInstrRec.CreditCardInstr.CC_NUM := P_PMTINSTR_REC.CREDITCARDINSTR.CC_NUM;
1963 			l_pmtInstrRec.CreditCardInstr.CC_EXPDATE := P_PMTINSTR_REC.CREDITCARDINSTR.CC_EXPDATE;
1964 			l_pmtInstrRec.CreditCardInstr.CC_HOLDERNAME := P_PMTINSTR_REC.CREDITCARDINSTR.CC_HOLDERNAME;
1965 
1966 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1967 			iex_debug_pub.LogMessage(l_api_name || ': Before ORAINSTRADD call');
1968 END IF;
1969 --Begin-fix bug #4479607-07072005-jypark-comment invalid api call to fix compile error
1970 --			IBY_INSTRREG_PUB.ORAINSTRADD
1971 --			(
1972 --				p_api_version => 1.0,
1973 --				p_init_msg_list => FND_API.G_FALSE,
1974 --				p_commit => FND_API.G_FALSE,
1975 --				x_return_status => l_return_status,
1976 --				x_msg_count => l_msg_count,
1977 --				x_msg_data => l_msg_data,
1978 --				p_payer_id => l_payer_id,
1979 --				p_pmtInstrRec => l_pmtInstrRec,
1980 --				x_instr_id => l_instr_id);
1981 --
1982 --End-fix bug #4479607-07072005-jypark-comment invalid api call to fix compile error
1983 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1984 			iex_debug_pub.LogMessage(l_api_name || ': After ORAINSTRADD call');
1985 			iex_debug_pub.LogMessage(l_api_name || ': l_return_status = ' || l_return_status);
1986 END IF;
1987 
1988 			-- check for errors
1989 			IF l_return_status<>FND_API.G_RET_STS_SUCCESS THEN
1990 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1991 				iex_debug_pub.LogMessage(l_api_name || ': IBY_INSTRREG_PUB.ORAINSTRADD failed');
1992 END IF;
1993 				FND_MESSAGE.SET_NAME('IEX', 'IEX_FAILED_INSERT_INSTR');
1994 				FND_MSG_PUB.Add;
1995 				RAISE FND_API.G_EXC_ERROR;
1996 			END IF;
1997 		else
1998 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
1999 			iex_debug_pub.LogMessage(l_api_name || ': CC is found; id = ' || l_instr_id);
2000 			iex_debug_pub.LogMessage(l_api_name || ': Exp date is different');
2001 			iex_debug_pub.LogMessage(l_api_name || ': Going to modify new cc');
2002 END IF;
2003 
2004 			l_pmtInstrRec.InstrumentType := 'CREDITCARD';
2005 			l_pmtInstrRec.CreditCardInstr.INSTR_ID := l_instr_id;
2006 			l_pmtInstrRec.CreditCardInstr.FINAME := P_PMTINSTR_REC.CREDITCARDINSTR.FINAME;
2007 			l_pmtInstrRec.CreditCardInstr.CC_EXPDATE := P_PMTINSTR_REC.CREDITCARDINSTR.CC_EXPDATE;
2008 			l_pmtInstrRec.CreditCardInstr.CC_HOLDERNAME := P_PMTINSTR_REC.CREDITCARDINSTR.CC_HOLDERNAME;
2009 
2010 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2011 			iex_debug_pub.LogMessage(l_api_name || ': Before ORAINSTRMOD call');
2012 END IF;
2013 			IBY_INSTRREG_PUB.ORAINSTRMOD
2014 			(
2015 				p_api_version => 1.0,
2016 				p_init_msg_list => FND_API.G_FALSE,
2017 				p_commit => FND_API.G_FALSE,
2018 				x_return_status => l_return_status,
2019 				x_msg_count => l_msg_count,
2020 				x_msg_data => l_msg_data,
2021 				p_payer_id => l_payer_id,
2022 				p_pmtInstrRec => l_pmtInstrRec,
2023 			    -- Begin -- varangan --Bug4528444 -- payments uptake
2024 				p_validation_level => FND_API.G_VALID_LEVEL_FULL
2025 				    --, x_result => l_result_rec  -- temporarily commenting, since IBY code is in progress
2026    			    -- End -- varangan --Bug4528444 --  payments uptake
2027 			);
2028 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2029 			iex_debug_pub.LogMessage(l_api_name || ': After ORAINSTRMOD call');
2030 			iex_debug_pub.LogMessage('l_return_status = ' || l_return_status);
2031 END IF;
2032 
2033 			-- check for errors
2034 			IF l_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2035 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2036 				iex_debug_pub.LogMessage(l_api_name || ': IBY_INSTRREG_PUB.ORAINSTRMOD failed');
2037 END IF;
2038 				FND_MESSAGE.SET_NAME('IEX', 'IEX_FAILED_UPDATE_INSTR');
2039 				FND_MSG_PUB.Add;
2040 				RAISE FND_API.G_EXC_ERROR;
2041 			END IF;
2042 		end if;
2043 
2044 		l_pmtreqtrxn_rec.PmtMode := 'ONLINE';
2045 		l_pmtreqtrxn_rec.auth_type := 'AUTHONLY';
2046 		l_pmtinstr_rec.PmtInstr_ID := l_instr_id;
2047 
2048 
2049 		--  l_pmtinstr_rec.CreditCardInstr.FINAME := P_PMTINSTR_REC.CREDITCARDINSTR.FINAME;
2050     	--	l_pmtinstr_rec.CreditCardInstr.cc_type := P_PMTINSTR_REC.CREDITCARDINSTR.CC_TYPE;
2051     	--	l_pmtinstr_rec.CreditCardInstr.cc_num := P_PMTINSTR_REC.CREDITCARDINSTR.CC_NUM;
2052     	--	l_pmtinstr_rec.CreditCardInstr.cc_expdate := P_PMTINSTR_REC.CREDITCARDINSTR.CC_EXPDATE;
2053 		--  l_pmtinstr_rec.CreditCardInstr.CC_HOLDERNAME := P_PMTINSTR_REC.CREDITCARDINSTR.CC_HOLDERNAME;
2054 
2055 
2056 	ELSIF P_PMTINSTR_REC.USE_INSTRUMENT = 'BA' THEN
2057 
2058 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2059 		iex_debug_pub.LogMessage(l_api_name || ': Instrument is BA');
2060 END IF;
2061 
2062 		l_ar_pay_method1 := fnd_profile.value('IEX_EFT_REMITTANCE');
2063 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2064 		iex_debug_pub.LogMessage(l_api_name || ': BA remittance = ' || l_ar_pay_method1);
2065 END IF;
2066 		if l_ar_pay_method1 is null then
2067 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2068 			iex_debug_pub.LogMessage(l_api_name || ': failed to get BA remittance');
2069 END IF;
2070 			FND_MESSAGE.SET_NAME('IEX', 'IEX_NO_EFT_REMITTANCE');
2071 			FND_MSG_PUB.Add;
2072 			RAISE FND_API.G_EXC_ERROR;
2073 		end if;
2074 		l_ar_pay_method := to_number(l_ar_pay_method1);
2075 
2076 	    	-- first check for existance of instrument. if does not exist add instrument
2077 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2078 		iex_debug_pub.LogMessage(l_api_name || ': Search for BA');
2079 END IF;
2080 		OPEN get_baid_crs(P_PMTINSTR_REC.BANKACCTINSTR.BANK_ID,
2081 						IBY_INSTRREG_PUB.encode(P_PMTINSTR_REC.BANKACCTINSTR.BANKACCT_NUM),
2082 						l_payer_id);
2083 		FETCH get_baid_crs INTO l_instr_id;
2084 		CLOSE get_baid_crs;
2085 
2086 		if l_instr_id is null then
2087 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2088 			iex_debug_pub.LogMessage(l_api_name || ': BA is not found');
2089 			iex_debug_pub.LogMessage(l_api_name || ': Going to insert new ba');
2090 END IF;
2091 
2092 			l_pmtInstrRec.InstrumentType := 'BANKACCOUNT';
2093 			l_pmtInstrRec.BankAcctInstr.FIName := P_PMTINSTR_REC.BANKACCTINSTR.FINAME;
2094 			l_pmtInstrRec.BankAcctInstr.Bank_Id := P_PMTINSTR_REC.BANKACCTINSTR.BANK_ID;
2095 			l_pmtInstrRec.BankAcctInstr.Branch_Id := P_PMTINSTR_REC.BANKACCTINSTR.BRANCH_ID;
2096 			l_pmtInstrRec.BankAcctInstr.BankAcct_Type := P_PMTINSTR_REC.BANKACCTINSTR.BANKACCT_TYPE;
2097 			l_pmtInstrRec.BankAcctInstr.BankAcct_Num := P_PMTINSTR_REC.BANKACCTINSTR.BANKACCT_NUM;
2098 			l_pmtInstrRec.BankAcctInstr.BankAcct_HolderName := P_PMTINSTR_REC.BANKACCTINSTR.BANKACCT_HOLDERNAME;
2099 
2100 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2101 			iex_debug_pub.LogMessage(l_api_name || ': Before ORAINSTRADD call');
2102 END IF;
2103 --Begin-fix bug #4479607-07072005-jypark-comment invalid api call to fix compile error
2104 --			IBY_INSTRREG_PUB.ORAINSTRADD(
2105 --				p_api_version => 1.0,
2106 --				p_init_msg_list => FND_API.G_FALSE,
2107 --				p_commit => FND_API.G_FALSE,
2108 --				x_return_status => l_return_status,
2109 --				x_msg_count => l_msg_count,
2110 --				x_msg_data => l_msg_data,
2111 --				p_payer_id => l_payer_id,
2112 --				p_pmtInstrRec => l_pmtInstrRec,
2113 --				x_instr_id => l_instr_id);
2114 --End-fix bug #4479607-07072005-jypark-comment invalid api call to fix compile error
2115 
2116 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2117 			iex_debug_pub.LogMessage(l_api_name || ': After ORAINSTRADD call');
2118 			iex_debug_pub.LogMessage('l_return_status = ' || l_return_status);
2119 END IF;
2120 
2121 			-- check for errors
2122 			IF l_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2123 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2124 				iex_debug_pub.LogMessage(l_api_name || ': IBY_INSTRREG_PUB.ORAINSTRADD failed');
2125 END IF;
2126 				FND_MESSAGE.SET_NAME('IEX', 'IEX_FAILED_INSERT_INSTR');
2127 				FND_MSG_PUB.Add;
2128 				RAISE FND_API.G_EXC_ERROR;
2129 			END IF;
2130 		else
2131 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2132 			iex_debug_pub.LogMessage(l_api_name || ': BA is found; id = ' || l_instr_id);
2133 END IF;
2134 		end if;
2135 
2136 		l_pmtreqtrxn_rec.PmtMode := 'OFFLINE';
2137 		l_pmtreqtrxn_rec.Settlement_Date := sysdate + 100;
2138 		l_pmtreqtrxn_rec.Check_Flag := 'true';
2139 		l_pmtinstr_rec.PmtInstr_ID := l_instr_id;
2140 
2141 
2142 	--	l_pmtinstr_rec.BankAcctInstr.FIName := P_PMTINSTR_REC.BANKACCTINSTR.FINAME;
2143 	--	l_pmtinstr_rec.BankAcctInstr.Bank_Id := P_PMTINSTR_REC.BANKACCTINSTR.BANK_ID;
2144 	--	l_pmtinstr_rec.BankAcctInstr.Branch_Id := P_PMTINSTR_REC.BANKACCTINSTR.BRANCH_ID;
2145 	--	l_pmtinstr_rec.BankAcctInstr.BankAcct_Type := P_PMTINSTR_REC.BANKACCTINSTR.BANKACCT_TYPE;
2146 	--	l_pmtinstr_rec.BankAcctInstr.BankAcct_Num := P_PMTINSTR_REC.BANKACCTINSTR.BANKACCT_NUM;
2147 	--	l_pmtinstr_rec.BankAcctInstr.BankAcct_HolderName := P_PMTINSTR_REC.BANKACCTINSTR.BANKACCT_HOLDERNAME;
2148 
2149 	END IF;
2150 
2151 	l_payee_rec.Payee_ID := P_PMT_REC.PAYEE_ID;
2152 	l_payer_rec.Payer_ID := l_payer_id;
2153 	--l_payer_rec.Payer_Name := l_payer_name;
2154 
2155 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2156 	iex_debug_pub.LogMessage(l_api_name || ': Payee_ID =' || l_payee_rec.Payee_ID);
2157 	iex_debug_pub.LogMessage(l_api_name || ': Payer_ID =' || l_payer_rec.Payer_ID);
2158 END IF;
2159 
2160     	OPEN tang_genid_crs;
2161     	FETCH tang_genid_crs INTO l_tangible_id;
2162     	CLOSE tang_genid_crs;
2163 
2164     	l_tangible_rec.tangible_id := 'IEX_' || to_char(l_tangible_id);
2165     	l_tangible_rec.tangible_amount := P_PMT_REC.TOTAL_AMOUNT;
2166     	l_tangible_rec.currency_code := P_PMT_REC.CURRENCY_CODE;
2167     	l_tangible_rec.RefInfo := 'IEX_' || to_char(l_tangible_id);
2168 
2169 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2170 	iex_debug_pub.LogMessage(l_api_name || ': PmtInstr_ID =' || l_pmtinstr_rec.PmtInstr_ID);
2171 	iex_debug_pub.LogMessage(l_api_name || ': tangible_id = ' || l_tangible_rec.tangible_id);
2172 	iex_debug_pub.LogMessage(l_api_name || ': tangible_amount = ' || l_tangible_rec.tangible_amount);
2173 	iex_debug_pub.LogMessage(l_api_name || ': currency_code = ' || l_tangible_rec.currency_code);
2174 	iex_debug_pub.LogMessage(l_api_name || ': RefInfo = ' || l_tangible_rec.RefInfo);
2175 END IF;
2176 
2177 	if P_PMTINSTR_REC.USE_INSTRUMENT = 'CC' then
2178 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2179 		iex_debug_pub.LogMessage(l_api_name || ': Going to auth CC...');
2180 		iex_debug_pub.LogMessage(l_api_name || ': G_APP_ID = ' || G_APP_ID);
2181 END IF;
2182 
2183     		-- call iPayment API to authorize payment
2184     		IBY_Payment_Adapter_Pub.OraPmtReq(
2185 			p_api_version   => p_Api_Version,
2186 			p_init_msg_list => FND_API.G_FALSE,
2187 			p_commit    => FND_API.G_FALSE,
2188 			p_ecapp_id  => 695,
2189 			p_payee_rec => l_payee_rec,
2190 			p_payer_rec => l_Payer_rec,
2191 			p_pmtinstr_rec  => l_pmtinstr_rec,
2192 			p_tangible_rec  => l_tangible_rec,
2193 			p_pmtreqtrxn_rec => l_pmtreqtrxn_rec,
2194 			p_riskinfo_rec  => l_RiskInfo_rec,
2195 			x_return_status => l_return_status,
2196 			x_msg_count => l_msg_count,
2197 			x_msg_data  => l_msg_data,
2198 			x_reqresp_rec => l_reqresp_rec);
2199 
2200 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2201 		iex_debug_pub.LogMessage(l_api_name || ': CC authorization returns:');
2202 		iex_debug_pub.LogMessage(l_api_name || ': l_return_status=' || l_return_status || '; l_msg_count=' || l_msg_count);
2203 		iex_debug_pub.LogMessage(l_api_name || ': status = ' || l_reqresp_rec.response.status);
2204 		iex_debug_pub.LogMessage(l_api_name || ': ErrCode = ' || l_reqresp_rec.response.ErrCode);
2205 		iex_debug_pub.LogMessage(l_api_name || ': ErrMessage = ' || l_reqresp_rec.response.ErrMessage);
2206 		iex_debug_pub.LogMessage(l_api_name || ': NLS_LANG = ' || l_reqresp_rec.response.NLS_LANG);
2207 		iex_debug_pub.LogMessage(l_api_name || ': trxn_id = ' || l_reqresp_rec.trxn_id);
2208 		iex_debug_pub.LogMessage(l_api_name || ': trxn_type = ' || l_reqresp_rec.trxn_type);
2209 		iex_debug_pub.LogMessage(l_api_name || ': trxn_date = ' || l_reqresp_rec.trxn_date);
2210 		iex_debug_pub.LogMessage(l_api_name || ': AuthCode = ' || l_reqresp_rec.AuthCode);
2211 		iex_debug_pub.LogMessage(l_api_name || ': ErrorLocation = ' || l_reqresp_rec.ErrorLocation);
2212 		iex_debug_pub.LogMessage(l_api_name || ': BEPErrCode = ' || l_reqresp_rec.BEPErrCode);
2213 		iex_debug_pub.LogMessage(l_api_name || ': BEPErrMessage = ' || l_reqresp_rec.BEPErrMessage);
2214 		iex_debug_pub.LogMessage(l_api_name || ': AuxMsg = ' || l_reqresp_rec.AuxMsg);
2215 		iex_debug_pub.LogMessage(l_api_name || ': RefCode = ' || l_reqresp_rec.RefCode);
2216 END IF;
2217 
2218     		-- check for iPayment errors
2219     		IF l_return_status<>'S' THEN
2220 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2221 			iex_debug_pub.LogMessage(l_api_name || ': IBY_Payment_Adapter_Pub.OraPmtReq failed');
2222 END IF;
2223 			FND_MESSAGE.SET_NAME('IEX', 'IEX_FAILED_AUTH_PAYMENT');
2224     			FND_MESSAGE.SET_TOKEN('STATUS', l_reqresp_rec.response.status);
2225     			FND_MESSAGE.SET_TOKEN('ERR_LOC', l_reqresp_rec.ErrorLocation);
2226     			FND_MESSAGE.SET_TOKEN('ERR_CODE', l_capresp_rec.response.ErrCode);
2227     			FND_MESSAGE.SET_TOKEN('ERR_MSG', l_reqresp_rec.response.ErrMessage);
2228     			FND_MESSAGE.SET_TOKEN('BEP_ERR_CODE', l_reqresp_rec.BEPErrCode);
2229     			FND_MESSAGE.SET_TOKEN('BEP_ERR_MSG', l_capresp_rec.BEPErrMessage);
2230     			FND_MSG_PUB.initialize;
2231 			FND_MSG_PUB.Add;
2232         		RAISE FND_API.G_EXC_ERROR;
2233     		END IF;
2234 
2235 		l_capturetrxn_rec.Trxn_ID := l_reqresp_rec.trxn_id;
2236 		l_capturetrxn_rec.PmtMode := 'ONLINE';
2237 		l_capturetrxn_rec.Currency := l_tangible_rec.currency_code;
2238 		l_capturetrxn_rec.Price := l_tangible_rec.tangible_amount;
2239 
2240 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2241 		iex_debug_pub.LogMessage(l_api_name || ': Going to capture CC payment...');
2242 END IF;
2243 		IBY_Payment_Adapter_Pub.OraPmtCapture (
2244 			p_api_version   => 1.0,
2245 			p_init_msg_list => FND_API.G_FALSE,
2246 			p_commit    => FND_API.G_FALSE,
2247 			p_ecapp_id  => 695,
2248 			p_capturetrxn_rec => l_capturetrxn_rec,
2249 			x_return_status => l_return_status,
2250 			x_msg_count => l_msg_count,
2251 			x_msg_data  => l_msg_data,
2252 			x_capresp_rec => l_capresp_rec);
2253 
2254 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2255 		iex_debug_pub.LogMessage(l_api_name || ': CC capture returns:');
2256 		iex_debug_pub.LogMessage(l_api_name || ': l_return_status=' || l_return_status || '; l_msg_count=' || l_msg_count);
2257 		iex_debug_pub.LogMessage(l_api_name || ': status = ' || l_capresp_rec.response.status);
2258 		iex_debug_pub.LogMessage(l_api_name || ': ErrCode = ' || l_capresp_rec.response.ErrCode);
2259 		iex_debug_pub.LogMessage(l_api_name || ': ErrMessage = ' || l_capresp_rec.response.ErrMessage);
2260 		iex_debug_pub.LogMessage(l_api_name || ': NLS_LANG = ' || l_capresp_rec.response.NLS_LANG);
2261 		iex_debug_pub.LogMessage(l_api_name || ': trxn_id = ' || l_capresp_rec.trxn_id);
2262 		iex_debug_pub.LogMessage(l_api_name || ': trxn_type = ' || l_capresp_rec.trxn_type);
2263 		iex_debug_pub.LogMessage(l_api_name || ': trxn_date = ' || l_capresp_rec.trxn_date);
2264 		iex_debug_pub.LogMessage(l_api_name || ': RefCode = ' || l_capresp_rec.RefCode);
2265 		iex_debug_pub.LogMessage(l_api_name || ': ErrorLocation = ' || l_capresp_rec.ErrorLocation);
2266 		iex_debug_pub.LogMessage(l_api_name || ': BEPErrCode = ' || l_capresp_rec.BEPErrCode);
2267 		iex_debug_pub.LogMessage(l_api_name || ': BEPErrMessage = ' || l_capresp_rec.BEPErrMessage);
2268 END IF;
2269 
2270     		-- check for iPayment errors
2271     		IF l_return_status<>'S' THEN
2272 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2273 			iex_debug_pub.LogMessage(l_api_name || ': IBY_Payment_Adapter_Pub.OraPmtCapture failed');
2274 END IF;
2275 			FND_MESSAGE.SET_NAME('IEX', 'IEX_FAILED_CAPTURE_PAYMENT');
2276     			FND_MESSAGE.SET_TOKEN('STATUS', l_reqresp_rec.response.status);
2277     			FND_MESSAGE.SET_TOKEN('ERR_LOC', l_reqresp_rec.ErrorLocation);
2278     			FND_MESSAGE.SET_TOKEN('ERR_CODE', l_capresp_rec.response.ErrCode);
2279     			FND_MESSAGE.SET_TOKEN('ERR_MSG', l_reqresp_rec.response.ErrMessage);
2280     			FND_MESSAGE.SET_TOKEN('BEP_ERR_CODE', l_reqresp_rec.BEPErrCode);
2281     			FND_MESSAGE.SET_TOKEN('BEP_ERR_MSG', l_capresp_rec.BEPErrMessage);
2282     			FND_MSG_PUB.initialize;
2283 			FND_MSG_PUB.Add;
2284         		RAISE FND_API.G_EXC_ERROR;
2285     		END IF;
2286 	elsif P_PMTINSTR_REC.USE_INSTRUMENT = 'BA' then
2287 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2288 		iex_debug_pub.LogMessage(l_api_name || ': Going to process BA payment...');
2289 END IF;
2290 
2291     		-- call iPayment API to process BA payment
2292     		IBY_Payment_Adapter_Pub.OraPmtReq(
2293 			p_api_version   => p_Api_Version,
2294 			p_init_msg_list => FND_API.G_FALSE,
2295 			p_commit    => FND_API.G_FALSE,
2296 			p_ecapp_id  => 695,
2297 			p_payee_rec => l_payee_rec,
2298 			p_payer_rec => l_Payer_rec,
2299 			p_pmtinstr_rec  => l_pmtinstr_rec,
2300 			p_tangible_rec  => l_tangible_rec,
2301 			p_pmtreqtrxn_rec => l_pmtreqtrxn_rec,
2302 			p_riskinfo_rec  => l_RiskInfo_rec,
2303 			x_return_status => l_return_status,
2304 			x_msg_count => l_msg_count,
2305 			x_msg_data  => l_msg_data,
2306 			x_reqresp_rec => l_reqresp_rec);
2307 
2308 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2309 		iex_debug_pub.LogMessage(l_api_name || ': BA capture returns:');
2310 		iex_debug_pub.LogMessage(l_api_name || ': l_return_status=' || l_return_status || '; l_msg_count=' || l_msg_count);
2311 		iex_debug_pub.LogMessage(l_api_name || ': status = ' || l_reqresp_rec.response.status);
2312 		iex_debug_pub.LogMessage(l_api_name || ': ErrCode = ' || l_reqresp_rec.response.ErrCode);
2313 		iex_debug_pub.LogMessage(l_api_name || ': ErrMessage = ' || l_reqresp_rec.response.ErrMessage);
2314 		iex_debug_pub.LogMessage(l_api_name || ': NLS_LANG = ' || l_reqresp_rec.response.NLS_LANG);
2315 		iex_debug_pub.LogMessage(l_api_name || ': trxn_id = ' || l_reqresp_rec.trxn_id);
2316 		iex_debug_pub.LogMessage(l_api_name || ': trxn_type = ' || l_reqresp_rec.trxn_type);
2317 		iex_debug_pub.LogMessage(l_api_name || ': trxn_date = ' || l_reqresp_rec.trxn_date);
2318 		iex_debug_pub.LogMessage(l_api_name || ': AuthCode = ' || l_reqresp_rec.AuthCode);
2319 		iex_debug_pub.LogMessage(l_api_name || ': ErrorLocation = ' || l_reqresp_rec.ErrorLocation);
2320 		iex_debug_pub.LogMessage(l_api_name || ': BEPErrMessage = ' || l_reqresp_rec.BEPErrMessage);
2321 		iex_debug_pub.LogMessage(l_api_name || ': AuxMsg = ' || l_reqresp_rec.AuxMsg);
2322 		iex_debug_pub.LogMessage(l_api_name || ': RefCode = ' || l_reqresp_rec.RefCode);
2323 END IF;
2324 
2325     		-- check for iPayment errors
2326     		IF l_return_status<>'S' THEN
2327 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2328 			iex_debug_pub.LogMessage(l_api_name || ': IBY_Payment_Adapter_Pub.OraPmtReq failed');
2329 END IF;
2330 			FND_MESSAGE.SET_NAME('IEX', 'IEX_FAILED_CAPTURE_PAYMENT');
2331     			FND_MESSAGE.SET_TOKEN('STATUS', l_reqresp_rec.response.status);
2332     			FND_MESSAGE.SET_TOKEN('ERR_LOC', l_reqresp_rec.ErrorLocation);
2333     			FND_MESSAGE.SET_TOKEN('ERR_CODE', l_capresp_rec.response.ErrCode);
2334     			FND_MESSAGE.SET_TOKEN('ERR_MSG', l_reqresp_rec.response.ErrMessage);
2335     			FND_MESSAGE.SET_TOKEN('BEP_ERR_CODE', l_reqresp_rec.BEPErrCode);
2336     			FND_MESSAGE.SET_TOKEN('BEP_ERR_MSG', l_capresp_rec.BEPErrMessage);
2337     			FND_MSG_PUB.initialize;
2338 			FND_MSG_PUB.Add;
2339         		RAISE FND_API.G_EXC_ERROR;
2340     		END IF;
2341 	end if;
2342 
2343 
2344 --	l_pmtinstr_rec.PmtInstr_ID := 11111;
2345 --	l_reqresp_rec.trxn_id := 12345;
2346 --	l_reqresp_rec.Trxn_Type := 1;
2347 --	l_reqresp_rec.Trxn_Date := sysdate;
2348 --	l_reqresp_rec.AuthCode := 'test';
2349 --	l_reqresp_rec.response.status := 1;
2350 
2351 
2352 	else -- iPayment processing is disabled
2353 		l_pmtinstr_rec.PmtInstr_ID := null;
2354 		l_reqresp_rec.trxn_id := null;
2355 		l_reqresp_rec.Trxn_Type := null;
2356 		l_reqresp_rec.Trxn_Date := null;
2357 		l_reqresp_rec.AuthCode := 'No iPayment processing';
2358 		l_reqresp_rec.response.status := null;
2359 		l_tangible_rec.tangible_id := 'No iPayment processing';
2360 		l_payee_rec.Payee_ID := 'No iPayment processing';
2361 		l_ar_pay_method := to_number(fnd_profile.value('IEX_CCARD_REMITTANCE'));
2362 	end if;
2363 
2364 	X_PMTRESP_REC.INSTRUMENT_ID := l_pmtinstr_rec.PmtInstr_ID;
2365 	X_PMTRESP_REC.INSTRUMENT_TYPE := P_PMTINSTR_REC.USE_INSTRUMENT;
2366 	X_PMTRESP_REC.TRXN_ID := l_reqresp_rec.trxn_id;
2367 	X_PMTRESP_REC.TRXN_TYPE := l_reqresp_rec.Trxn_Type;
2368 	X_PMTRESP_REC.TRXN_DATE := l_reqresp_rec.Trxn_Date;
2369 	X_PMTRESP_REC.AUTHCODE := l_reqresp_rec.AuthCode;
2370 	X_PMTRESP_REC.PAYEE_ID := l_payee_rec.Payee_ID;
2371 	X_PMTRESP_REC.TANGIBLE_ID := l_tangible_rec.tangible_id;
2372 
2373 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2374 	iex_debug_pub.LogMessage(l_api_name || ': Return data:');
2375 	iex_debug_pub.LogMessage(l_api_name || ': INSTRUMENT_ID = ' || X_PMTRESP_REC.INSTRUMENT_ID);
2376 	iex_debug_pub.LogMessage(l_api_name || ': INSTRUMENT_TYPE = ' || X_PMTRESP_REC.INSTRUMENT_TYPE);
2377 	iex_debug_pub.LogMessage(l_api_name || ': TRXN_ID = ' || X_PMTRESP_REC.TRXN_ID);
2378 	iex_debug_pub.LogMessage(l_api_name || ': TRXN_TYPE = ' || X_PMTRESP_REC.TRXN_TYPE);
2379 	iex_debug_pub.LogMessage(l_api_name || ': TRXN_DATE = ' || X_PMTRESP_REC.TRXN_DATE);
2380 	iex_debug_pub.LogMessage(l_api_name || ': AUTHCODE = ' || X_PMTRESP_REC.AUTHCODE);
2381 	iex_debug_pub.LogMessage(l_api_name || ': PAYEE_ID = ' || X_PMTRESP_REC.PAYEE_ID);
2382 	iex_debug_pub.LogMessage(l_api_name || ': TANGIBLE_ID = ' || X_PMTRESP_REC.TANGIBLE_ID);
2383 END IF;
2384 
2385        	COMMIT WORK;
2386 	x_return_status := FND_API.G_RET_STS_SUCCESS;
2387 
2388   EXCEPTION
2389     WHEN FND_API.G_EXC_ERROR THEN
2390       x_return_status := FND_API.G_RET_STS_ERROR;
2391       FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
2392     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2393       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2394       FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
2395     WHEN OTHERS THEN
2396       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2397       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2398       THEN
2399         FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
2400       END IF;
2401       FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
2402   END;
2403 
2404   if x_return_status <> FND_API.G_RET_STS_SUCCESS then
2405   	return;
2406   end if;
2407 
2408   -- Continue: creating IEX payment record
2409   BEGIN
2410     	SAVEPOINT CREATE_OKL_PAYMENT_PVT1;
2411 
2412     	-- generate new payment id
2413     	OPEN pay_genid_crs;
2414 	FETCH pay_genid_crs INTO l_payment_id;
2415 	CLOSE pay_genid_crs;
2416 
2417 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2418 	iex_debug_pub.LogMessage(l_api_name || ': New payment_id = ' || l_payment_id);
2419 	iex_debug_pub.LogMessage(l_api_name || ': Before IEX_PAYMENTS_PKG.Insert_Row');
2420 END IF;
2421     	IEX_PAYMENTS_PKG.Insert_Row(
2422         	X_ROWID => l_rowid,
2423         	P_PAYMENT_ID => l_payment_id,
2424         	P_OBJECT_VERSION_NUMBER => 1.0,
2425         	P_PROGRAM_ID => 695,
2426 	        P_LAST_UPDATE_DATE => sysdate,
2427         	P_LAST_UPDATED_BY => FND_GLOBAL.User_Id,
2428 	        P_LAST_UPDATE_LOGIN => G_LOGIN_ID,
2429         	P_CREATION_DATE => sysdate,
2430         	P_CREATED_BY => FND_GLOBAL.User_Id,
2431         	P_PAYMENT_METHOD_ID => l_pmtinstr_rec.PmtInstr_ID,
2432        	 	P_PAYMENT_METHOD => P_PMTINSTR_REC.USE_INSTRUMENT,
2433         	P_IPAYMENT_TRANS_ID => l_reqresp_rec.trxn_id,
2434         	P_IPAYMENT_STATUS => l_reqresp_rec.response.status,
2435         	P_PAY_SVR_CONFIRMATION => l_reqresp_rec.AuthCode,
2436         	P_CAMPAIGN_SCHED_ID => P_PMT_REC.CAMPAIGN_SCHED_ID,
2437         	p_TANGIBLE_ID => l_tangible_rec.tangible_id,
2438         	p_PAYEE_ID => l_payee_rec.Payee_ID,
2439         	p_RESOURCE_ID => P_PMT_REC.RESOURCE_ID,
2440         	P_ATTRIBUTE_CATEGORY => P_PMT_REC.ATTRIBUTES.ATTRIBUTE_CATEGORY,
2441         	P_ATTRIBUTE1 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE1,
2442         	P_ATTRIBUTE2 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE2,
2443         	P_ATTRIBUTE3 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE3,
2444         	P_ATTRIBUTE4 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE4,
2445         	P_ATTRIBUTE5 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE5,
2446         	P_ATTRIBUTE6 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE6,
2447         	P_ATTRIBUTE7 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE7,
2448         	P_ATTRIBUTE8 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE8,
2449         	P_ATTRIBUTE9 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE9,
2450         	P_ATTRIBUTE10 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE10,
2451         	P_ATTRIBUTE11 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE11,
2452         	P_ATTRIBUTE12 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE12,
2453         	P_ATTRIBUTE13 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE13,
2454         	P_ATTRIBUTE14 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE14,
2455         	P_ATTRIBUTE15 => P_PMT_REC.ATTRIBUTES.ATTRIBUTE15);
2456 
2457 	IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2458 	   iex_debug_pub.LogMessage(l_api_name || ': After IEX_PAYMENTS_PKG.Insert_Row');
2459     END IF;
2460    	X_PMTRESP_REC.PAYMENT_ID := l_payment_id;
2461     IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2462 	   iex_debug_pub.LogMessage(l_api_name || ': l_payment_id=' || l_payment_id);
2463     END IF;
2464 
2465 	-- commit first part of API: made iPayment money transfer and created IEX payment record with iPayment info
2466        	COMMIT WORK;
2467 	FND_MESSAGE.SET_NAME('IEX', 'IEX_IPAY_SUCCESS');
2468 	FND_MSG_PUB.Add;
2469 	x_return_status := FND_API.G_RET_STS_SUCCESS;
2470 
2471   EXCEPTION
2472     WHEN FND_API.G_EXC_ERROR THEN
2473       ROLLBACK TO CREATE_OKL_PAYMENT_PVT1;
2474       x_return_status := FND_API.G_RET_STS_ERROR;
2475       FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
2476     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2477       ROLLBACK TO CREATE_OKL_PAYMENT_PVT1;
2478       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2479       FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
2480     WHEN OTHERS THEN
2481       ROLLBACK TO CREATE_OKL_PAYMENT_PVT1;
2482       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2483       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2484       THEN
2485         FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
2486       END IF;
2487       FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
2488   END;
2489 
2490   if x_return_status <> FND_API.G_RET_STS_SUCCESS then
2491   	return;
2492   end if;
2493 
2494   -- Second part of API: OKL processing
2495   BEGIN
2496     	--Second part of API savepoint
2497     	SAVEPOINT CREATE_OKL_PAYMENT_PVT2;
2498 
2499 	--l_fun_currency := get_fun_currency;
2500 	IF P_PMT_REC.PAYMENT_TARGET = 'CNSLD' THEN
2501 
2502 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2503 		iex_debug_pub.LogMessage(l_api_name || ': Payment target CNSLD');
2504 END IF;
2505 
2506 		-- run thru table of details and call OKL payment API
2507 		FOR i IN 1..P_PMTDTLS_TBL.COUNT LOOP
2508 
2509 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2510 			iex_debug_pub.LogMessage(l_api_name || ': Details record ' || i);
2511 			iex_debug_pub.LogMessage(l_api_name || ': Input for OKL_PAYMENT_PUB.CREATE_INTERNAL_TRANS:');
2512 			iex_debug_pub.LogMessage(l_api_name || ': p_customer_id = ' || P_PMTDTLS_TBL(i).CUST_ACCOUNT_ID);
2513 			iex_debug_pub.LogMessage(l_api_name || ': p_invoice_id = ' || P_PMTDTLS_TBL(i).CNSLD_INVOICE_ID);
2514 			iex_debug_pub.LogMessage(l_api_name || ': p_payment_method_id = ' || l_ar_pay_method);
2515 			iex_debug_pub.LogMessage(l_api_name || ': p_payment_ref_number = ' || 'IEX_' || l_payment_id);
2516 			iex_debug_pub.LogMessage(l_api_name || ': p_payment_amount = ' || P_PMTDTLS_TBL(i).AMOUNT);
2517 			iex_debug_pub.LogMessage(l_api_name || ': p_currency_code = ' || P_PMT_REC.CURRENCY_CODE);
2518 			iex_debug_pub.LogMessage(l_api_name || ': p_payment_date = ' || sysdate);
2519 			iex_debug_pub.LogMessage(l_api_name || ': Before OKL_PAYMENT_PUB.CREATE_INTERNAL_TRANS');
2520 END IF;
2521   			OKL_PAYMENT_PUB.CREATE_INTERNAL_TRANS(
2522      				p_api_version => 1.0,
2523      				p_init_msg_list => FND_API.G_FALSE,
2524      				p_customer_id => P_PMTDTLS_TBL(i).CUST_ACCOUNT_ID,
2525      				p_invoice_id => P_PMTDTLS_TBL(i).CNSLD_INVOICE_ID,
2526      				p_payment_method_id => l_ar_pay_method,
2527      				p_payment_ref_number => 'IEX_OKL_' || l_payment_id,
2528      				p_payment_amount => P_PMTDTLS_TBL(i).AMOUNT,
2529      				p_currency_code => P_PMT_REC.CURRENCY_CODE,
2530      				p_payment_date => sysdate,
2531      				x_payment_id => l_pay_okl_cnsld_id_tab(i),
2532      				x_return_status => L_RETURN_STATUS,
2533      				x_msg_count => L_MSG_COUNT,
2534      				x_msg_data  => L_MSG_DATA);
2535 
2536 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2537 			iex_debug_pub.LogMessage(l_api_name || ': After OKL_PAYMENT_PUB.CREATE_INTERNAL_TRANS');
2538 			iex_debug_pub.LogMessage(l_api_name || ': Status = ' || L_RETURN_STATUS);
2539 END IF;
2540 
2541 			-- check for errors
2542 			IF l_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2543 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2544 				iex_debug_pub.LogMessage(l_api_name || ': OKL_PAYMENT_PUB.CREATE_INTERNAL_TRANS failed');
2545 END IF;
2546 				FND_MESSAGE.SET_NAME('IEX', 'IEX_FAILED_PAY_OKL_CNSLD');
2547 				FND_MSG_PUB.Add;
2548 				RAISE FND_API.G_EXC_ERROR;
2549 			END IF;
2550 
2551         		-- generate new pay_okl_ref id
2552         		OPEN pox_genid_crs;
2553 			FETCH pox_genid_crs INTO l_pay_okl_ref_id;
2554 			CLOSE pox_genid_crs;
2555 
2556 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2557 			iex_debug_pub.LogMessage(l_api_name || ': New pay_okl_ref_id = ' || l_pay_okl_ref_id);
2558 			iex_debug_pub.LogMessage(l_api_name || ': Before IEX_PAY_OKL_XREF_PKG.INSERT_ROW');
2559 END IF;
2560 
2561         		IEX_PAY_OKL_XREF_PKG.Insert_Row(
2562             			X_ROWID => l_rowid,
2563             			P_PAY_OKL_XREF_ID => l_pay_okl_ref_id,
2564             			P_LAST_UPDATE_DATE => sysdate,
2565             			P_LAST_UPDATED_BY => FND_GLOBAL.User_Id,
2566             			P_LAST_UPDATE_LOGIN => G_LOGIN_ID,
2567             			P_CREATION_DATE => sysdate,
2568             			P_CREATED_BY => FND_GLOBAL.User_Id,
2569             			P_PROGRAM_ID => 695,
2570             			P_OBJECT_VERSION_NUMBER => 1.0,
2571             			P_PAYMENT_ID => l_payment_id,
2572             			P_CNSLD_INVOICE_ID => P_PMTDTLS_TBL(i).CNSLD_INVOICE_ID,
2573             			P_CONTRACT_ID => null,
2574             			P_OKL_PAYMENT_ID => l_pay_okl_cnsld_id_tab(i));
2575 
2576 			IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2577 			     iex_debug_pub.LogMessage(l_api_name || ': After IEX_PAY_OKL_XREF_PKG.INSERT_ROW');
2578             END IF;
2579 
2580 		END LOOP;
2581 
2582 	ELSIF P_PMT_REC.PAYMENT_TARGET = 'CONTRACTS' THEN
2583 
2584 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2585 		iex_debug_pub.LogMessage(l_api_name || ': Payment target CONTRACTS');
2586 END IF;
2587 
2588 		-- run thru table of details and call OKL payment API
2589 		FOR i IN 1..P_PMTDTLS_TBL.COUNT LOOP
2590 
2591             IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2592 			     iex_debug_pub.LogMessage(l_api_name || ': Details record ' || i);
2593 			     iex_debug_pub.LogMessage(l_api_name || ': Before OKL_PAYMENT_PUB.CREATE_INTERNAL_TRANS');
2594             END IF;
2595   			OKL_PAYMENT_PUB.CREATE_INTERNAL_TRANS(
2596      				p_api_version => 1.0,
2597      				p_init_msg_list => FND_API.G_FALSE,
2598      				p_customer_id => P_PMTDTLS_TBL(i).CUST_ACCOUNT_ID,
2599      				p_contract_id => P_PMTDTLS_TBL(i).CONTRACT_ID,
2600      				p_payment_method_id => l_ar_pay_method,
2601      				p_payment_ref_number => 'IEX_OKL_' || l_payment_id,
2602      				p_payment_amount => P_PMTDTLS_TBL(i).AMOUNT,
2603      				p_currency_code => P_PMT_REC.CURRENCY_CODE,
2604      				p_payment_date => sysdate,
2605      				x_payment_id => l_pay_okl_contract_id_tab(i),
2606      				x_return_status => L_RETURN_STATUS,
2607      				x_msg_count => L_MSG_COUNT,
2608      				x_msg_data  => L_MSG_DATA);
2609 
2610             IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2611 			     iex_debug_pub.LogMessage(l_api_name || ': After OKL_PAYMENT_PUB.CREATE_INTERNAL_TRANS');
2612 			     iex_debug_pub.LogMessage(l_api_name || ': Status = ' || L_RETURN_STATUS);
2613             END IF;
2614 
2615 			-- check for errors
2616 			IF l_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2617                 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2618 				    iex_debug_pub.LogMessage(l_api_name || ': OKL_PAYMENT_PUB.CREATE_INTERNAL_TRANS failed');
2619                 END IF;
2620 				FND_MESSAGE.SET_NAME('IEX', 'IEX_FAILED_PAY_OKL_CONTRACT');
2621 				FND_MSG_PUB.Add;
2622 				RAISE FND_API.G_EXC_ERROR;
2623 			END IF;
2624 
2625         		-- generate new pay_okl_ref id
2626         		OPEN pox_genid_crs;
2627 			FETCH pox_genid_crs INTO l_pay_okl_ref_id;
2628 			CLOSE pox_genid_crs;
2629 
2630             IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2631 			     iex_debug_pub.LogMessage(l_api_name || ': New pay_okl_ref_id = ' || l_pay_okl_ref_id);
2632 			     iex_debug_pub.LogMessage(l_api_name || ': Before IEX_PAY_OKL_XREF_PKG.INSERT_ROW');
2633             END IF;
2634 
2635         		IEX_PAY_OKL_XREF_PKG.Insert_Row(
2636             			X_ROWID => l_rowid,
2637             			P_PAY_OKL_XREF_ID => l_pay_okl_ref_id,
2638             			P_LAST_UPDATE_DATE => sysdate,
2639             			P_LAST_UPDATED_BY => FND_GLOBAL.User_Id,
2640             			P_LAST_UPDATE_LOGIN => G_LOGIN_ID,
2641             			P_CREATION_DATE => sysdate,
2642             			P_CREATED_BY => FND_GLOBAL.User_Id,
2643             			P_PROGRAM_ID => 695,
2644             			P_OBJECT_VERSION_NUMBER => 1.0,
2645             			P_PAYMENT_ID => l_payment_id,
2646             			p_CNSLD_INVOICE_ID => null,
2647             			P_CONTRACT_ID => P_PMTDTLS_TBL(i).CONTRACT_ID,
2648             			p_OKL_PAYMENT_ID => l_pay_okl_contract_id_tab(i));
2649 
2650 			IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2651 			     iex_debug_pub.LogMessage(l_api_name || ': After IEX_PAY_OKL_XREF_PKG.INSERT_ROW');
2652             END IF;
2653 
2654 		END LOOP;
2655 
2656 	END IF;
2657 
2658 	-- commit second part of API: AR/OKL processing
2659     COMMIT WORK;
2660 
2661     FND_MESSAGE.SET_NAME('IEX', 'IEX_OKL_SUCCESS');
2662 	FND_MSG_PUB.Add;
2663 
2664 	x_return_status := FND_API.G_RET_STS_SUCCESS;
2665 
2666   EXCEPTION
2667     WHEN FND_API.G_EXC_ERROR THEN
2668       ROLLBACK TO CREATE_OKL_PAYMENT_PVT2;
2669       x_return_status := FND_API.G_RET_STS_ERROR;
2670       FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
2671     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2672       ROLLBACK TO CREATE_OKL_PAYMENT_PVT2;
2673       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2674       FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
2675     WHEN OTHERS THEN
2676       ROLLBACK TO CREATE_OKL_PAYMENT_PVT2;
2677       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2678       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2679       THEN
2680         FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
2681       END IF;
2682       FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
2683   END;
2684 
2685   if x_return_status <> FND_API.G_RET_STS_SUCCESS then
2686   	return;
2687   end if;
2688 
2689   -- Third part of API: creating note
2690   BEGIN
2691     	-- Third part of API savepoint
2692     	SAVEPOINT CREATE_OKL_PAYMENT_PVT3;
2693 
2694 	l_note_type := fnd_profile.value('AST_NOTES_DEFAULT_TYPE');
2695     IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2696 	   iex_debug_pub.LogMessage(l_api_name || ':  l_note_type = ' ||  l_note_type);
2697     END IF;
2698 
2699 	-- if note is passed - insert it
2700 	if P_PMT_REC.NOTE is not null and l_note_type is not null then
2701         IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2702 		  iex_debug_pub.LogMessage(l_api_name || ': Note is not null');
2703         END IF;
2704 
2705 		IF P_PMT_REC.PAYMENT_TARGET = 'CNSLD' or P_PMT_REC.PAYMENT_TARGET = 'CONTRACTS' THEN
2706 
2707 			i := 1;
2708 			-- adding parties into note context
2709 			l_context_tab(i).context_type := 'PARTY';
2710 			l_context_tab(i).context_id := l_note_payer_id;
2711 			i := i + 1;
2712 			if l_note_payer_type = 'PARTY_RELATIONSHIP' then
2713 				l_context_tab(i).context_type := 'PARTY';
2714 				l_context_tab(i).context_id := P_PMT_REC.PAYER_PARTY_ORG_ID;
2715 				i := i + 1;
2716 				l_context_tab(i).context_type := 'PARTY';
2717 				l_context_tab(i).context_id := P_PMT_REC.PAYER_PARTY_PER_ID;
2718 				i := i + 1;
2719 			end if;
2720 
2721 			FOR j IN 1..P_PMTDTLS_TBL.COUNT LOOP
2722 				-- adding account to note context
2723 				l_context_tab(i).context_type := 'IEX_ACCOUNT';
2724 				l_context_tab(i).context_id := P_PMTDTLS_TBL(j).CUST_ACCOUNT_ID;
2725 				i := i + 1;
2726 
2727 				-- adding bill-to to note context
2728 				l_context_tab(i).context_type := 'IEX_BILLTO';
2729 				l_context_tab(i).context_id := P_PMTDTLS_TBL(j).CUST_SITE_USE_ID;
2730 				i := i + 1;
2731 
2732 				-- adding contracts/cnsld invoices to note context
2733 				IF P_PMT_REC.PAYMENT_TARGET = 'CNSLD' THEN
2734 					if j = 1 then
2735 						l_source_object_id := P_PMTDTLS_TBL(j).CNSLD_INVOICE_ID;
2736 						l_source_object_code := 'IEX_CNSLD';
2737 					else
2738 						l_context_tab(i).context_type := 'IEX_CNSLD';
2739 						l_context_tab(i).context_id := P_PMTDTLS_TBL(j).CNSLD_INVOICE_ID;
2740 						i := i + 1;
2741 					end if;
2742 				ELSIF P_PMT_REC.PAYMENT_TARGET = 'CONTRACTS' THEN
2743 					if j = 1 then
2744 						l_source_object_id := P_PMTDTLS_TBL(j).CONTRACT_ID;
2745 						l_source_object_code := 'IEX_K_HEADER';
2746 					else
2747 						l_context_tab(i).context_type := 'IEX_K_HEADER';
2748 						l_context_tab(i).context_id := P_PMTDTLS_TBL(j).CONTRACT_ID;
2749 						i := i + 1;
2750 					end if;
2751 				END IF;
2752 
2753 			END LOOP;
2754 
2755 			-- for debug purpose only
2756             IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2757 			     iex_debug_pub.LogMessage(l_api_name || ': l_source_object_id = ' || l_source_object_id);
2758 			     iex_debug_pub.LogMessage(l_api_name || ': l_source_object_code = ' || l_source_object_code);
2759             END IF;
2760             FOR i IN 1..l_context_tab.COUNT LOOP
2761                 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2762 				    iex_debug_pub.LogMessage(l_api_name || ': l_context_tab(' || i || ').context_type = ' || l_context_tab(i).context_type);
2763 				    iex_debug_pub.LogMessage(l_api_name || ': l_context_tab(' || i || ').context_id = ' || l_context_tab(i).context_id);
2764                 END IF;
2765 			END LOOP;
2766 
2767 			IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2768 			     iex_debug_pub.LogMessage(l_api_name || ': Before call to IEX_NOTES_PVT.Create_Note');
2769             END IF;
2770 			IEX_NOTES_PVT.Create_Note(
2771 				P_API_VERSION => l_api_version,
2772 				P_INIT_MSG_LIST => FND_API.G_FALSE,
2773 				P_COMMIT => FND_API.G_FALSE,
2774 				P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
2775 				X_RETURN_STATUS => l_return_status,
2776 				X_MSG_COUNT => l_msg_count,
2777 				X_MSG_DATA => l_msg_data,
2778 				p_source_object_id => l_source_object_id,
2779 				p_source_object_code => l_source_object_code,
2780 				p_note_type => l_note_type,
2781 				p_notes	=> P_PMT_REC.NOTE,
2782 				p_contexts_tbl => l_context_tab,
2783 				x_note_id => X_PMTRESP_REC.NOTE_ID);
2784 			IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2785 			     iex_debug_pub.LogMessage(l_api_name || ': After call to IEX_NOTES_PVT.Create_Note');
2786 			     iex_debug_pub.LogMessage(l_api_name || ': Status = ' || L_RETURN_STATUS);
2787             END IF;
2788 
2789 			-- check for errors
2790 			IF l_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2791 				IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
2792 				    iex_debug_pub.LogMessage(l_api_name || ': IEX_NOTES_PVT.Create_Note failed');
2793                 END IF;
2794 				RAISE FND_API.G_EXC_ERROR;
2795 			END IF;
2796 
2797 		END IF;
2798 	end if;
2799 
2800 	-- commit third part of API: note creation
2801        	COMMIT WORK;
2802 	x_return_status := FND_API.G_RET_STS_SUCCESS;
2803     	-- Standard call to get message count and if count is 1, get message info
2804     	FND_MSG_PUB.Count_And_Get(
2805                p_encoded => FND_API.G_FALSE,
2806                p_count => x_msg_count,
2807                p_data => x_msg_data);
2808 
2809   EXCEPTION
2810     WHEN FND_API.G_EXC_ERROR THEN
2811       ROLLBACK TO CREATE_OKL_PAYMENT_PVT3;
2812       x_return_status := FND_API.G_RET_STS_ERROR;
2813       FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
2814     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2815       ROLLBACK TO CREATE_OKL_PAYMENT_PVT3;
2816       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2817       FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
2818     WHEN OTHERS THEN
2819       ROLLBACK TO CREATE_OKL_PAYMENT_PVT3;
2820       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2821       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2822       THEN
2823         FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
2824       END IF;
2825       FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
2826   END;
2827 
2828 
2829  -- End - Bug428444 -- varangan -- remove this comment while implementing OKL payment in R12 codeline */
2830 
2831 END;
2832 
2833 PROCEDURE CREATE_PAYMENT(
2834    	P_API_VERSION		    	IN      NUMBER,
2835    	P_INIT_MSG_LIST		    	IN      VARCHAR2,
2836    	P_COMMIT                    	IN      VARCHAR2,
2837    	P_VALIDATION_LEVEL	    	IN      NUMBER,
2838    	X_RETURN_STATUS		    	OUT NOCOPY    VARCHAR2,
2839    	X_MSG_COUNT                 	OUT NOCOPY    NUMBER,
2840    	X_MSG_DATA	    	    	OUT NOCOPY    VARCHAR2,
2841 	P_PMT_REC			    IN	IEX_PAYMENTS_PUB.PMT_REC_TYPE,
2842 	P_PMTDTLS_TBL			IN	IEX_PAYMENTS_PUB.PMTDTLS_TBL_TYPE,
2843 	P_PMTINSTR_REC			IN	IEX_PAYMENTS_PUB.PMTINSTR_REC_TYPE,
2844 	P_PMT_METHOD            IN NUMBER, -- Included by varangan for profile bug#4558547
2845 	X_PMTRESP_REC			OUT NOCOPY	IEX_PAYMENTS_PUB.PMTRESP_REC_TYPE ) IS
2846 
2847 BEGIN
2848 
2849     IF P_PMT_REC.PAYMENT_TARGET = 'ACCOUNTS' or P_PMT_REC.PAYMENT_TARGET = 'INVOICES' THEN
2850 
2851         /* If its AR payment call CREATE_AR_PAYMENT */
2852         CREATE_AR_PAYMENT(
2853    	        P_API_VERSION => P_API_VERSION,
2854    	        P_INIT_MSG_LIST	=> P_INIT_MSG_LIST,
2855    	        P_COMMIT => P_COMMIT,
2856    	        P_VALIDATION_LEVEL => P_VALIDATION_LEVEL,
2857    	        X_RETURN_STATUS	=> X_RETURN_STATUS,
2858    	        X_MSG_COUNT => X_MSG_COUNT,
2859    	        X_MSG_DATA => X_MSG_DATA,
2860 	        P_PMT_REC => P_PMT_REC,
2861 	        P_PMTDTLS_TBL => P_PMTDTLS_TBL,
2862 	        P_PMTINSTR_REC => P_PMTINSTR_REC,
2863 	        P_PMT_METHOD => P_PMT_METHOD, -- Included by varangan for profile bug#4558547
2864 	        X_PMTRESP_REC => X_PMTRESP_REC);
2865     ELSE
2866          x_return_status := FND_API.G_RET_STS_SUCCESS;
2867 
2868         /* -- Begin -- Commenting out for Payments Uptake
2869            -- Varangan- 4528444
2870            -- since OKL not yet designed payments uptake in R12
2871 
2872           -- If its OKL payment call CREATE_OKL_PAYMENT
2873            CREATE_OKL_PAYMENT(
2874    	        P_API_VERSION => P_API_VERSION,
2875    	        P_INIT_MSG_LIST	=> P_INIT_MSG_LIST,
2876    	        P_COMMIT => P_COMMIT,
2877    	        P_VALIDATION_LEVEL => P_VALIDATION_LEVEL,
2878    	        X_RETURN_STATUS	=> X_RETURN_STATUS,
2879    	        X_MSG_COUNT => X_MSG_COUNT,
2880    	        X_MSG_DATA => X_MSG_DATA,
2881 	        P_PMT_REC => P_PMT_REC,
2882 	        P_PMTDTLS_TBL => P_PMTDTLS_TBL,
2883 	        P_PMTINSTR_REC => P_PMTINSTR_REC,
2884 	        X_PMTRESP_REC => X_PMTRESP_REC);
2885 
2886          -- End -- Commenting out for Payments Uptake */
2887      END IF;
2888 END;
2889 begin
2890   PG_DEBUG  := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
2891   G_LOGIN_ID  := FND_GLOBAL.Conc_Login_Id;
2892   G_PROGRAM_ID  := FND_GLOBAL.Conc_Program_Id;
2893   G_USER_ID  := FND_GLOBAL.User_Id;
2894   G_REQUEST_ID  := FND_GLOBAL.Conc_Request_Id;
2895 END ;