[Home] [Help]
PACKAGE BODY: APPS.AP_PAY_SINGLE_INVOICE_PKG
Source
1 PACKAGE BODY AP_PAY_SINGLE_INVOICE_PKG AS
2 /* $Header: appayinb.pls 120.15 2011/09/19 17:48:07 bgoyal ship $ */
3
4 --
5 -- Declare global variables
6 --
7 G_PKG_NAME CONSTANT VARCHAR2(30) := 'AP_PAY_SINGLE_INVOICE_PKG';
8 G_MSG_UERROR CONSTANT NUMBER := FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR;
9 G_MSG_ERROR CONSTANT NUMBER := FND_MSG_PUB.G_MSG_LVL_ERROR;
10 G_MSG_SUCCESS CONSTANT NUMBER := FND_MSG_PUB.G_MSG_LVL_SUCCESS;
11 G_MSG_HIGH CONSTANT NUMBER := FND_MSG_PUB.G_MSG_LVL_DEBUG_HIGH;
12 G_MSG_MEDIUM CONSTANT NUMBER := FND_MSG_PUB.G_MSG_LVL_DEBUG_MEDIUM;
13 G_MSG_LOW CONSTANT NUMBER := FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW;
14 G_LINES_PER_FETCH CONSTANT NUMBER := 1000;
15
16 G_CURRENT_RUNTIME_LEVEL CONSTANT NUMBER := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
17 G_LEVEL_UNEXPECTED CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
18 G_LEVEL_ERROR CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
19 G_LEVEL_EXCEPTION CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
20 G_LEVEL_EVENT CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
21 G_LEVEL_PROCEDURE CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
22 G_LEVEL_STATEMENT CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
23 G_MODULE_NAME CONSTANT VARCHAR2(100) := 'AP.PLSQL.AP_PAY_SINGLE_INVOICE_PKG';
24
25 PROCEDURE print_debuginfo
26 (p_module IN VARCHAR2,
27 p_debug_text IN VARCHAR2,
28 p_debug_level IN NUMBER)
29 IS
30
31 BEGIN
32
33 --
34 -- Writing debug text to the pl/sql debug file.
35 --
36
37 -- DBMS_OUTPUT.put_line(p_module || p_debug_text);
38 IF (p_debug_level >= G_CURRENT_RUNTIME_LEVEL) THEN
39 fnd_log.string(p_debug_level,
40 p_module,
41 substr(RPAD(p_module,55)||' : '||
42 p_debug_text,0,150));
43 END IF;
44
45 -- if in a concurrent request, also add to the CP log
46 IF fnd_global.CONC_REQUEST_ID <> -1 THEN
47 FND_FILE.put_line(FND_FILE.LOG,
48 substr(RPAD(p_module,55)||' : '||
49 p_debug_text,0,150));
50 END IF;
51
52 EXCEPTION
53 WHEN OTHERS THEN
54 NULL;
55 END print_debuginfo;
56
57 -- Bug 2842080
58
59 PROCEDURE AP_Pay_Invoice_In_Full
60 (p_api_version IN NUMBER,
61 p_init_msg_list IN VARCHAR2,
62 p_invoice_id IN NUMBER,
63 p_payment_type_flag IN VARCHAR2,
64 p_internal_bank_acct_id IN NUMBER,
65 p_payment_method_code IN VARCHAR2,
66 p_payment_profile_id IN NUMBER,
67 p_payment_document_id IN NUMBER,
68 p_take_discount IN VARCHAR2 DEFAULT 'Y',
69 p_check_date IN DATE,
70 p_doc_category_code IN VARCHAR2,
71 p_exchange_rate_type IN VARCHAR2,
72 p_exchange_rate IN NUMBER,
73 p_exchange_date IN DATE,
74 x_return_status OUT NOCOPY VARCHAR2,
75 x_msg_count OUT NOCOPY NUMBER,
76 x_msg_data OUT NOCOPY VARCHAR2,
77 x_errorIds OUT NOCOPY
78 IBY_DISBURSE_SINGLE_PMT_PKG.trxnErrorIdsTab)
79 IS
80
81 l_amount NUMBER;
82 l_base_amount NUMBER;
83 l_num_invs_sel_for_pmt NUMBER;
84 l_return_code NUMBER;
85 l_application_id NUMBER;
86
87 l_name VARCHAR2(80);
88 l_dummy_rowid VARCHAR2(18);
89 l_seq_num_profile VARCHAR2(80);
90
91 l_hold_all_payments_flag ap_suppliers.hold_all_payments_flag%TYPE;
92 l_active_pay_sites ap_supplier_sites_all.pay_site_flag%TYPE;
93 l_accounting_event_id NUMBER(38);
94 l_quick_check_id AP_CHECKS.checkrun_name%type;
95 l_next_check_number AP_CHECKS.check_number%type;
96 l_check_number AP_CHECKS.check_number%type;
97 l_period_name GL_PERIOD_STATUSES.period_name%TYPE;
98
99 l_debug_info VARCHAR2(100);
100 l_curr_calling_sequence VARCHAR2(2000);
101
102
103 l_doc_category_code varchar2(30);
104 l_seqval number;
105 l_dbseqid number;
106 l_docseq_id number;
107 l_docseq_type varchar(1);
108 l_docseq_name varchar2(30);
109 l_db_seq_name varchar2(30);
110 l_seq_ass_id number;
111 l_prd_tab_name varchar2(30);
112 l_aud_tab_name varchar2(30);
113 l_msg_flag varchar(1);
114 l_valid_sequence_exists varchar2(30);
115
116
117
118
119 l_payment_type_flag ap_checks.payment_type_flag%TYPE; -- Bug3343314
120 l_creation_date ap_checks.creation_date%TYPE; -- Bug3343314
121 l_created_by ap_checks.created_by%TYPE; -- Bug3343314
122 l_last_update_date ap_checks.last_update_date%TYPE; -- Bug3343314
123 l_last_updated_by ap_checks.last_updated_by%TYPE; -- Bug3343314
124 l_last_update_login ap_checks.last_update_login%TYPE; -- Bug3343314
125 l_org_id NUMBER;
126 l_bank_account_id ce_bank_acct_uses_all.bank_acct_use_id%TYPE;
127 l_bank_account_name ce_bank_accounts.bank_account_name%TYPE;
128 l_processing_type iby_payment_profiles.processing_type%TYPE;
129 l_print_instr_immed_flag iby_payment_profiles.print_instruction_immed_flag%TYPE;
130 l_default_printer iby_payment_profiles.default_printer%TYPE;
131 l_payment_document_id ce_payment_documents.payment_document_id %TYPE;
132 l_bills_payable iby_payment_methods_vl.support_bills_payable_flag%TYPE;
133 l_maturity_date_offset_days iby_payment_methods_vl.maturity_date_offset_days%TYPE;
134 l_maturity_date ap_checks.future_pay_due_date%TYPE;
135 l_vendor_type_lookup_code ap_suppliers.vendor_type_lookup_code%TYPE;
136
137 l_return_status VARCHAR2(100);
138 l_return_message VARCHAR2(3000);
139 l_msg_count NUMBER;
140 l_msg_data VARCHAR2(3000);
141 l_temp_status VARCHAR2(1);
142
143 l_is_duplicate BOOLEAN := TRUE;
144 l_module_name VARCHAR2(200) := G_PKG_NAME ||
145 '.ap_pay_invoice_in_full';
146
147 l_api_version CONSTANT NUMBER := 1.0;
148 l_api_name CONSTANT VARCHAR2(30) := 'ap_pay_invoice_in_full';
149
150 l_errbuf VARCHAR2(5000);
151 l_retcode VARCHAR2(2000);
152
153 l_transaction_type AP_PAYMENT_HISTORY_ALL.TRANSACTION_TYPE%TYPE;
154
155 TYPE r_ap_system_param_info IS RECORD
156 (
157 Auto_Calc_Int_Flag AP_SYSTEM_PARAMETERS_ALL.Auto_Calculate_Interest_Flag%TYPE
158 ,Base_Currency_Code AP_SYSTEM_PARAMETERS_ALL.Base_Currency_Code%TYPE
159 ,Pay_Doc_Override AP_SYSTEM_PARAMETERS_ALL.Pay_Doc_Category_Override%TYPE
160 ,Make_Rate_Mandatory_Flag AP_SYSTEM_PARAMETERS_ALL.Make_Rate_Mandatory_Flag%TYPE
161 ,Set_Of_Books_id AP_SYSTEM_PARAMETERS_ALL.Set_Of_Books_id%TYPE
162 ,Default_Exchange_Rate_Type AP_SYSTEM_PARAMETERS_ALL.Default_Exchange_Rate_Type%TYPE
163 ,Multi_Currency_Flag AP_SYSTEM_PARAMETERS_ALL.Multi_Currency_Flag%TYPE
164 ,Xrate_type AP_SYSTEM_PARAMETERS_ALL.default_exchange_rate_type%TYPE
165 );
166
167 TYPE r_check_info IS RECORD
168 (
169 Xrate AP_CHECKS_ALL.exchange_rate%TYPE
170 ,Xrate_date AP_CHECKS_ALL.exchange_date%TYPE
171 ,Xrate_type AP_CHECKS_ALL.exchange_rate_type%TYPE
172 ,Check_id AP_CHECKS_ALL.check_id%TYPE
173 ,Checkrun_Name AP_CHECKS_ALL.checkrun_name%TYPE
174 ,Internal_Bank_Acct_Id CE_BANK_ACCT_USES_ALL.bank_acct_use_id%TYPE
175 ,Bank_Account_Name CE_BANK_ACCOUNTS.bank_account_name%TYPE
176 ,Bank_Account_Num CE_BANK_ACCOUNTS.bank_account_num%TYPE
177 ,Bank_Account_Type CE_BANK_ACCOUNTS.account_classification%TYPE
178 ,Bank_Num CE_BANK_BRANCHES_V.branch_number%TYPE
179 ,Legal_Entity_Id CE_BANK_ACCOUNTS.account_owner_org_id%TYPE
180 ,Status_Lookup_Code AP_CHECKS_ALL.status_lookup_code%TYPE
181 );
182
183 TYPE r_ap_ven_sites_info IS RECORD
184 (
185 Address_Line1 HZ_LOCATIONS.Address1%TYPE
186 ,Address_Line2 HZ_LOCATIONS.Address2%TYPE
187 ,Address_Line3 HZ_LOCATIONS.Address3%TYPE
188 ,City HZ_LOCATIONS.City%TYPE
189 ,country HZ_LOCATIONS.Country%TYPE
190 ,Vendor_site_code AP_SUPPLIER_SITES_ALL.Vendor_Site_Code%TYPE
191 ,Zip HZ_LOCATIONS.Postal_Code%TYPE
192 ,Province HZ_LOCATIONS.Province%TYPE
193 ,State HZ_LOCATIONS.State%TYPE
194 ,Address_Line4 HZ_LOCATIONS.Address4%TYPE
195 ,County HZ_LOCATIONS.Country%TYPE
196 ,Address_Style HZ_LOCATIONS.Address_Style%TYPE
197 ,Vendor_Id AP_SUPPLIERS.Vendor_ID%TYPE
198 ,Vendor_Site_Id AP_SUPPLIER_SITES_ALL.Vendor_Site_ID%TYPE
199 ,Pay_Site_Flag AP_SUPPLIER_SITES_ALL.Pay_Site_Flag%TYPE
200 ,Primary_Pay_Site AP_SUPPLIER_SITES_ALL.Primary_Pay_Site_Flag%TYPE
201 );
202
203 TYPE r_vendor_info IS RECORD
204 (
205 Auto_calc_int_flag AP_SUPPLIERS.Auto_calculate_interest_flag%TYPE
206 ,Vendor_name AP_SUPPLIERS.Vendor_name%TYPE
207 );
208
209
210 TYPE r_apinv_info IS RECORD
211 (
212 Vendor_id AP_INVOICES_ALL.vendor_id%TYPE
213 ,Vendor_Site_id AP_INVOICES_ALL.vendor_site_id%TYPE
214 ,Party_Id AP_INVOICES_ALL.party_id%TYPE
215 ,Party_Site_Id AP_INVOICES_ALL.party_site_id%TYPE
216 ,External_Bank_Account_Id AP_PAYMENT_SCHEDULES_ALL.external_bank_account_id%TYPE
217 ,Pmt_Currency_code AP_INVOICES_ALL.payment_currency_code%TYPE
218 ,Payment_Method AP_INVOICES_ALL.Payment_Method_Code%TYPE
219 ,Inv_Currency_code AP_INVOICES_ALL.invoice_currency_code%TYPE
220 ,Org_id AP_INVOICES_ALL.org_id%TYPE
221 ,Payment_Function AP_INVOICES_ALL.payment_function%TYPE
222 ,Pay_Proc_Trxn_Type_Code AP_INVOICES_ALL.pay_proc_trxn_type_code%TYPE
223 );
224
225 l_vendor_rec r_vendor_info;
226 l_inv_rec r_apinv_info;
227 l_apvs_rec r_ap_ven_sites_info;
228 l_check_rec r_check_info;
229 l_asp_rec r_ap_system_param_info;
230
231 l_manual_payment_flag VARCHAR2(1);
232 l_num_printed_docs NUMBER;
233 l_paper_doc_num IBY_PAYMENTS_ALL.paper_document_number%TYPE;
234 l_pmt_ref_num IBY_PAYMENTS_ALL.payment_reference_number%TYPE;
235 l_errorIds IBY_DISBURSE_SINGLE_PMT_PKG.trxnErrorIdsTab;
236 l_msg_index_out NUMBER;
237 l_payment_id NUMBER;
238 l_error_msg VARCHAR2(2000);
239
240 BEGIN
241
242 print_debuginfo(l_module_name, 'ENTER',
243 G_LEVEL_PROCEDURE);
244 print_debuginfo(l_module_name, 'p_invoice_id : ' || p_invoice_id,
245 G_LEVEL_PROCEDURE);
246 print_debuginfo(l_module_name, 'p_payment_type_flag: '||p_payment_type_flag,
247 G_LEVEL_PROCEDURE);
248 print_debuginfo(l_module_name, 'p_internal_bank_acct_id: '||p_internal_bank_acct_id,
249 G_LEVEL_PROCEDURE);
250 print_debuginfo(l_module_name, 'p_payment_method: '||p_payment_method_code,
251 G_LEVEL_PROCEDURE);
252 print_debuginfo(l_module_name, 'p_payment_profile_id: '||p_payment_profile_id,
253 G_LEVEL_PROCEDURE);
254 print_debuginfo(l_module_name, 'p_payment_document_id: '||p_payment_document_id,
255 G_LEVEL_PROCEDURE);
256 print_debuginfo(l_module_name, 'p_take_discount: '||p_take_discount,
257 G_LEVEL_PROCEDURE);
258 print_debuginfo(l_module_name, 'p_doc_category_code: '||p_doc_category_code,
259 G_LEVEL_PROCEDURE);
260 print_debuginfo(l_module_name, 'p_exchange_rate_type: '||p_exchange_rate_type,
261 G_LEVEL_PROCEDURE);
262 print_debuginfo(l_module_name, 'p_exchange_rate: '||to_char(p_exchange_rate),
263 G_LEVEL_PROCEDURE);
264 print_debuginfo(l_module_name, 'p_exchange_date: '||p_exchange_date,
265 G_LEVEL_PROCEDURE);
266
267 /* standard call to check for api compatibility */
268 IF NOT FND_API.Compatible_API_Call(
269 l_api_version,
270 p_api_version,
271 l_api_name,
272 G_PKG_NAME) THEN
273
274 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
275
276 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
277
278 END IF;
279
280 /* initialize message list if p_init_msg_list is set to TRUE. */
281 IF FND_API.to_Boolean(p_init_msg_list) THEN
282 FND_MSG_PUB.initialize;
283 END IF;
284
285 /* initialize API return status to success */
286 x_return_status := FND_API.G_RET_STS_SUCCESS;
287 l_temp_status := 'S';
288
289 l_debug_info := 'Get invoice_info';
290 print_debuginfo(l_module_name, l_debug_info,
291 G_LEVEL_PROCEDURE);
292
293 BEGIN
294
295
296 -- All we want to make sure here is that can we pay the invoice
297 -- that has been passed in (invoice_id)
298 l_debug_info := 'Select the Invoice if it can be paid ';
299 print_debuginfo(l_module_name, l_debug_info,
300 G_LEVEL_PROCEDURE);
301
302 SELECT apiv.vendor_id,
303 apiv.vendor_site_id,
304 apiv.party_id,
305 apiv.party_site_id,
306 apiv.external_bank_account_id,
307 ai.payment_currency_code,
308 ai.invoice_currency_code,
309 ai.payment_method_code,
310 ai.org_id,
311 NVL(ai.payment_function, 'PAYABLES_DISB'),
312 NVL(ai.pay_proc_trxn_type_code, 'PAYABLES_DOC')
313 INTO l_inv_rec.vendor_id,
314 l_inv_rec.vendor_site_id,
315 l_inv_rec.party_id,
316 l_inv_rec.party_site_id,
317 l_inv_rec.external_bank_account_id,
318 l_inv_rec.pmt_currency_code,
319 l_inv_rec.inv_currency_code,
320 l_inv_rec.payment_method,
321 l_inv_rec.org_id,
322 l_inv_rec.payment_function,
323 l_inv_rec.pay_proc_trxn_type_code
324 FROM ap_invoices_ready_to_pay_v apiv,
325 ap_invoices_all ai
326 WHERE apiv.invoice_id = ai.invoice_id
327 AND apiv.invoice_id = p_invoice_id
328 AND apiv.payment_method_code = NVL(p_payment_method_code,
329 apiv.payment_method_code)
330 GROUP BY apiv.vendor_id,
331 apiv.vendor_site_id,
332 apiv.party_id,
333 apiv.party_site_id,
334 apiv.external_bank_account_id,
335 ai.payment_currency_code,
336 ai.invoice_currency_code,
337 ai.payment_method_code,
338 ai.org_id,
339 ai.payment_function,
340 ai.pay_proc_trxn_type_code;
341
342 l_debug_info := 'Get system parameter info ';
343 print_debuginfo(l_module_name, l_debug_info,
344 G_LEVEL_PROCEDURE);
345
346 l_debug_info := 'Select System Option based on Invoice Org Id ';
347 print_debuginfo(l_module_name, l_debug_info,
348 G_LEVEL_PROCEDURE);
349
350 SELECT nvl(asp.auto_calculate_interest_flag,'N'),
351 asp.base_currency_code,
352 nvl(asp.pay_doc_category_override, 'N'),
353 nvl(make_rate_mandatory_flag,'N'),
354 set_of_books_id,
355 nvl(default_exchange_rate_type, 'User'),
356 nvl(multi_currency_flag,'N')
357 INTO l_asp_rec.auto_calc_int_flag,
358 l_asp_rec.base_currency_code,
359 l_asp_rec.pay_doc_override,
360 l_asp_rec.make_rate_mandatory_flag,
361 l_asp_rec.set_of_books_id,
362 l_asp_rec.xrate_type,
363 l_asp_rec.multi_currency_flag
364 FROM ap_system_parameters_all asp
365 WHERE org_id = l_inv_rec.org_id;
366
367 -- In the Payment work bench user has the option to to change the
368 -- payment date, so here we check to see if what they have passed
369 -- or the current date is within an open period.
370
371 l_debug_info := 'Get open period name ';
372 print_debuginfo(l_module_name, l_debug_info,
373 G_LEVEL_PROCEDURE);
374 l_period_name := ap_utilities_pkg.get_current_gl_date(p_check_date,
375 l_inv_rec.org_id);
376
377 IF l_period_name IS NULL THEN
378
379 -- We call the ap debug pkg to get the message onto the stack. We pass
380 -- in a TRUE value for the P_called_Online parameter (the last param)
381 -- because we don't want the ap debug pkg to get it off the stack at
382 -- the same time.
383
384 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
385
386 FND_MESSAGE.SET_NAME('SQLAP', 'AP_PERIOD_NOT_OPEN');
387 FND_MSG_PUB.ADD;
388
389 FND_MSG_PUB.COUNT_AND_GET(
390 p_count => x_msg_count,
391 p_data => x_msg_data
392 );
393
394 print_debuginfo(l_module_name, 'EXIT',
395 G_LEVEL_PROCEDURE);
396 l_temp_status := 'E';
397
398 END IF;
399
400 l_debug_info := 'Checking For Valid Internal Bank Account';
401 print_debuginfo(l_module_name, l_debug_info,
402 G_LEVEL_PROCEDURE);
403
404 BEGIN
405
406 SELECT BA.account_owner_org_id legal_entity_id,
407 BA.bank_account_name,
408 BA.bank_account_num,
409 BA.account_classification,
410 CBB.branch_number
411 INTO l_check_rec.legal_entity_id,
412 l_check_rec.bank_account_name,
413 l_check_rec.bank_account_num,
414 l_check_rec.bank_account_type,
415 l_check_rec.bank_num
416 FROM CE_BANK_ACCOUNTS BA,
417 CE_BANK_BRANCHES_V CBB,
418 CE_BANK_ACCT_USES_OU_V CBAU
419 WHERE CBAU.BANK_ACCOUNT_ID = BA.BANK_ACCOUNT_ID
420 AND CBB.branch_party_id = BA.bank_branch_id
421 AND SYSDATE < NVL(BA.END_DATE,SYSDATE+1)
422 AND BA.ACCOUNT_CLASSIFICATION = 'INTERNAL'
423 AND CBAU.ap_use_enable_flag = 'Y'
424 AND CBAU.org_id = l_inv_rec.org_id
425 AND CBAU.bank_account_id = p_internal_bank_acct_id; /* Added for bug#12971160 */
426 /*AND CBAU.bank_acct_use_id = p_internal_bank_acct_id; Commented for bug#12971160 */
427
428 EXCEPTION
429 WHEN NO_DATA_FOUND THEN
430
431 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
432
433 FND_MESSAGE.SET_NAME('SQLAP', 'AP_CE_INVALID_BANK_ACCT');
434 FND_MSG_PUB.ADD;
435
436 FND_MSG_PUB.COUNT_AND_GET(
437 p_count => x_msg_count,
438 p_data => x_msg_data
439 );
440
441 print_debuginfo(l_module_name, 'EXIT',
442 G_LEVEL_PROCEDURE);
443 l_temp_status := 'E';
444
445 END;
446
447 l_debug_info := 'Checking Exchange Rate related info';
448 print_debuginfo(l_module_name, l_debug_info,
449 G_LEVEL_PROCEDURE);
450
451 IF (l_inv_rec.pmt_currency_code <> l_asp_rec.base_currency_code) THEN
452
453 l_check_rec.xrate_type := nvl(P_Exchange_Rate_Type,
454 l_asp_rec.xrate_type);
455
456 IF (l_check_rec.xrate_type = 'User' ) THEN
457
458 IF (P_exchange_rate is NULL) THEN
459
460 -- State that we need to to have an exchange rate if the
461 -- type is USER this is irrespective of the value of the
462 -- make_rate_mandatory_flag on AP_SYSTEM_PARAMETERS
463
464 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
465
466 FND_MESSAGE.SET_NAME('SQLAP', 'AP_NO_USER_XRATE');
467 FND_MSG_PUB.ADD;
468
469 FND_MSG_PUB.COUNT_AND_GET(
470 p_count => x_msg_count,
471 p_data => x_msg_data
472 );
473
474 print_debuginfo(l_module_name, 'EXIT',
475 G_LEVEL_PROCEDURE);
476 l_temp_status := 'E';
477
478 ELSE
479
480 l_check_rec.xrate := P_Exchange_Rate;
481
482 END IF;
483
484 ELSE -- exchange rate is other than USER
485
486 -- --------------------------------------------------------
487 -- To calculate the exchange_rate we need to see what the
488 -- the value of the system parameter make_rate_mandatory_flag
489 -- --------------------------------------------------------
490
491 l_check_rec.xrate_date := nvl(trunc(P_exchange_date),trunc(sysdate));
492 l_check_rec.xrate := ap_utilities_pkg.get_exchange_rate(
493 l_inv_rec.pmt_currency_code,
494 l_asp_rec.base_currency_code,
495 l_check_rec.xrate_type,
496 l_check_rec.xrate_date,
497 'APAYFULB');
498
499 IF (l_check_rec.xrate is NULL
500 AND l_asp_rec.make_rate_mandatory_flag = 'Y') THEN
501
502 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
503
504 FND_MESSAGE.SET_NAME('SQLAP', 'AP_NO_XRATE');
505 FND_MSG_PUB.ADD;
506
507 FND_MSG_PUB.COUNT_AND_GET(
508 p_count => x_msg_count,
509 p_data => x_msg_data
510 );
511
512 print_debuginfo(l_module_name, 'EXIT',
513 G_LEVEL_PROCEDURE);
514 l_temp_status := 'E';
515
516 END IF; -- mandatory_flag = Y
517
518 END IF; -- Exchange Rate = USER
519
520 END IF; -- currency_code <> base_currency_code
521
522 EXCEPTION
523
524 WHEN NO_DATA_FOUND THEN
525
526 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
527
528 FND_MESSAGE.SET_NAME('SQLAP', 'AP_INVOICE_CANNOT_BE_PAID');
529 FND_MSG_PUB.ADD;
530
531 FND_MSG_PUB.COUNT_AND_GET(
532 p_count => x_msg_count,
533 p_data => x_msg_data
534 );
535
536 print_debuginfo(l_module_name, 'EXIT',
537 G_LEVEL_PROCEDURE);
538 l_temp_status := 'E';
539
540 WHEN TOO_MANY_ROWS THEN
541
542 -- This means that the payment schedules for the one invoice may
543 -- have different payment methods. If that is the case, we cannot
544 -- handle in one payment.
545
546 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
547
548 FND_MESSAGE.SET_NAME('SQLAP', 'AP_MISMATCHED_PMT_SCHEDS');
549 FND_MSG_PUB.ADD;
550
551 FND_MSG_PUB.COUNT_AND_GET(
552 p_count => x_msg_count,
553 p_data => x_msg_data
554 );
555
556 print_debuginfo(l_module_name, 'EXIT',
557 G_LEVEL_PROCEDURE);
558 l_temp_status := 'E';
559
560 END;
561
562
563 l_debug_info := 'Check if the Invoice is being paid by a payment batch';
564 print_debuginfo(l_module_name, l_debug_info,
565 G_LEVEL_PROCEDURE);
566
567 SELECT count(*)
568 INTO l_num_invs_sel_for_pmt
569 FROM ap_selected_invoices_all
570 WHERE invoice_id = P_invoice_id;
571
572 IF (l_num_invs_sel_for_pmt > 0) THEN
573
574 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
575
576 FND_MESSAGE.SET_NAME('SQLAP', 'AP_INV_PAY_FAIL_SEL_BY_BATCH');
577 FND_MSG_PUB.ADD;
578
579 FND_MSG_PUB.COUNT_AND_GET(
580 p_count => x_msg_count,
581 p_data => x_msg_data
582 );
583
584 print_debuginfo(l_module_name, 'EXIT',
585 G_LEVEL_PROCEDURE);
586 l_temp_status := 'E';
587
588 END IF;
589
590 /*
591 || ==============================================================
592 || Verify if we should pay invoices for this supplier
593 || -------------------------------------------------------------
594 || We want to verify that if Oracle Payables should place all
595 || payments for this supplier on HOLD also, verify that the
596 || vendor site that we have selected in step 1 is Pay Site
597 || which is also active
598 || ==============================================================
599 */
600
601 l_debug_info := 'Verrify Supplier Site Address related info';
602 print_debuginfo(l_module_name, l_debug_info,
603 G_LEVEL_PROCEDURE);
604
605 BEGIN
606
607 SELECT nvl(asup.hold_all_payments_flag,'N'),
608 nvl(assp.pay_site_flag, 'N'),
609 asup.vendor_type_lookup_code
610 INTO l_hold_all_payments_flag,
611 l_active_pay_sites,
612 l_vendor_type_lookup_code
613 FROM ap_suppliers asup,
614 ap_supplier_sites_all assp
615 WHERE asup.vendor_id = l_inv_rec.vendor_id
616 AND asup.vendor_id = assp.vendor_id
617 AND assp.vendor_site_id = l_inv_rec.vendor_site_id;
618
619
620 IF (l_hold_all_payments_flag = 'Y' or l_active_pay_sites = 'N') THEN
621
622 RAISE NO_DATA_FOUND;
623
624 ELSE
625
626 IF l_vendor_type_lookup_code <> 'EMPLOYEE' THEN
627
628 SELECT hzl.Address1,
629 hzl.Address2,
630 hzl.Address3,
631 hzl.City,
632 hzl.Country,
633 hzl.Postal_Code,
634 hzl.Province,
635 hzl.State,
636 hzl.Address4,
637 hzl.County,
638 hzl.Address_Style,
639 asus.Vendor_Id,
640 asus.Vendor_Site_Id,
641 asus.Vendor_site_code,
642 nvl(asus.Pay_Site_Flag,'N'),
643 nvl(asus.Primary_Pay_Site_Flag,'N')
644 INTO l_apvs_rec.Address_Line1,
645 l_apvs_rec.Address_Line2,
646 l_apvs_rec.Address_Line3,
647 l_apvs_rec.City,
648 l_apvs_rec.Country,
649 l_apvs_rec.Zip,
650 l_apvs_rec.Province,
651 l_apvs_rec.State,
652 l_apvs_rec.Address_Line4,
653 l_apvs_rec.County,
654 l_apvs_rec.Address_Style,
655 l_apvs_rec.Vendor_Id,
656 l_apvs_rec.Vendor_Site_Id,
657 l_apvs_rec.Vendor_site_code,
658 l_apvs_rec.Pay_Site_Flag,
659 l_apvs_rec.Primary_Pay_Site
660 FROM ap_supplier_sites_all asus,
661 hz_locations hzl
662 WHERE asus.vendor_site_id = l_inv_rec.vendor_site_id
663 AND asus.location_id = hzl.location_id
664 AND nvl(trunc(asus.inactive_date),sysdate+1) > trunc(sysdate);
665
666
667 IF l_apvs_rec.Pay_Site_Flag = 'N' THEN
668
669 BEGIN
670
671 -- We want to search if there is a Primary Pay Site for
672 -- for this Vendor
673
674 SELECT hzl.Address1,
675 hzl.Address2,
676 hzl.Address3,
677 hzl.City,
678 hzl.Country,
679 hzl.Postal_Code,
680 hzl.Province,
681 hzl.State,
682 hzl.Address4,
683 hzl.County,
684 hzl.Address_Style,
685 asus.Vendor_Id,
686 asus.Vendor_Site_Id,
687 asus.Vendor_Site_Code,
688 nvl(asus.Pay_Site_Flag,'N'),
689 nvl(asus.Primary_Pay_Site_Flag,'N')
690 INTO l_apvs_rec.Address_Line1,
691 l_apvs_rec.Address_Line2,
692 l_apvs_rec.Address_Line3,
693 l_apvs_rec.City,
694 l_apvs_rec.Country,
695 l_apvs_rec.Zip,
696 l_apvs_rec.Province,
697 l_apvs_rec.State,
698 l_apvs_rec.Address_Line4,
699 l_apvs_rec.County,
700 l_apvs_rec.Address_Style,
701 l_apvs_rec.Vendor_Id,
702 l_apvs_rec.Vendor_Site_Id,
703 l_apvs_rec.Vendor_site_code,
704 l_apvs_rec.Pay_Site_Flag,
705 l_apvs_rec.Primary_Pay_Site
706 FROM ap_supplier_sites_all asus,
707 hz_locations hzl
708 WHERE asus.vendor_site_id = l_inv_rec.vendor_site_id
709 AND asus.location_id = hzl.location_id
710 AND nvl(trunc(asus.inactive_date),sysdate+1)
711 > trunc(sysdate)
712 AND nvl(asus.primary_pay_site_flag,'N') = 'Y';
713
714
715 EXCEPTION
716
717 WHEN NO_DATA_FOUND THEN
718
719 BEGIN
720
721 SELECT hzl.Address1,
722 hzl.Address2,
723 hzl.Address3,
724 hzl.City,
725 hzl.Country,
726 hzl.Postal_Code,
727 hzl.Province,
728 hzl.State,
729 hzl.Address4,
730 hzl.County,
731 hzl.Address_Style,
732 asus.Vendor_Id,
733 asus.Vendor_Site_Id,
734 asus.Vendor_site_code,
735 nvl(asus.Pay_Site_Flag,'N'),
736 nvl(asus.Primary_Pay_Site_Flag,'N')
737 INTO l_apvs_rec.Address_Line1,
738 l_apvs_rec.Address_Line2,
739 l_apvs_rec.Address_Line3,
740 l_apvs_rec.City,
741 l_apvs_rec.Country,
742 l_apvs_rec.Zip,
743 l_apvs_rec.Province,
744 l_apvs_rec.State,
745 l_apvs_rec.Address_Line4,
746 l_apvs_rec.County,
747 l_apvs_rec.Address_Style,
748 l_apvs_rec.Vendor_Id,
749 l_apvs_rec.Vendor_Site_Id,
750 l_apvs_rec.Vendor_site_code,
751 l_apvs_rec.Pay_Site_Flag,
752 l_apvs_rec.Primary_Pay_Site
753 FROM ap_supplier_sites_all asus,
754 hz_locations hzl
755 WHERE asus.vendor_site_id = l_inv_rec.vendor_site_id
756 AND asus.location_id = hzl.location_id
757 AND nvl(trunc(asus.inactive_date),sysdate+1)
758 > trunc(sysdate)
759 AND nvl(asus.pay_site_flag,'N') = 'Y'
760 AND rownum = 1;
761
762 -- We want to find ANY Pay Site for this Vendor
763
764 EXCEPTION
765
766 WHEN NO_DATA_FOUND THEN
767
768 NULL; -- Can't have no data found here as there
769 -- has to be another pay site (verify)
770
771 END;
772
773 END;
774
775 END IF; -- l_apvs_rec.Pay_Site_Flag = 'N'
776
777 END IF; -- l_vendor_type_lookup_code
778
779 END IF;
780
781 EXCEPTION
782
783 WHEN NO_DATA_FOUND Then
784
785 -- The Vendor Site that was on the invoice does not exist or
786 -- we cannot pay invoices for this vendor or the vendor has no
787 -- active pay sites
788
789 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
790
791 FND_MESSAGE.SET_NAME('SQLAP', 'AP_NO_VENDOR_SITE');
792 FND_MSG_PUB.ADD;
793
794 FND_MSG_PUB.COUNT_AND_GET(
795 p_count => x_msg_count,
796 p_data => x_msg_data
797 );
798
799 print_debuginfo(l_module_name, 'EXIT',
800 G_LEVEL_PROCEDURE);
801 l_temp_status := 'E';
802
803 END;
804
805 -- At this stage the we are assuming that the Vendor Site is a
806 -- pay site and is active
807
808
809 -- Verify if Processing Type of Payment Process Profile provided
810 -- is 'PRINTED', then Payment Document Id needs to be provided
811
812 l_debug_info := 'Deriving Proceeing Type for Payment Process Profile';
813 print_debuginfo(l_module_name, l_debug_info,
814 G_LEVEL_PROCEDURE);
815
816
817 BEGIN
818
819 SELECT processing_type,
820 print_instruction_immed_flag,
821 default_printer
822 INTO l_processing_type,
823 l_print_instr_immed_flag,
824 l_default_printer
825 FROM IBY_PAYMENT_PROFILES
826 WHERE payment_profile_id = p_payment_profile_id;
827
828 EXCEPTION
829 WHEN NO_DATA_FOUND THEN
830
831 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
832
833 FND_MESSAGE.SET_NAME('SQLAP', 'AP_IBY_INVALID_PAYMENT_PROF');
834 FND_MSG_PUB.ADD;
835
836 FND_MSG_PUB.COUNT_AND_GET(
837 p_count => x_msg_count,
838 p_data => x_msg_data
839 );
840
841 print_debuginfo(l_module_name, 'EXIT',
842 G_LEVEL_PROCEDURE);
843 l_temp_status := 'E';
844
845 END;
846
847 -- Verify payment document is needed or not
848 IF l_processing_type = 'PRINTED' THEN
849 IF p_payment_document_id IS NULL THEN
850
851 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
852
853 FND_MESSAGE.SET_NAME('SQLAP', 'AP_CE_PAYMENT_DOC_NEEDED');
854 FND_MSG_PUB.ADD;
855
856 FND_MSG_PUB.COUNT_AND_GET(
857 p_count => x_msg_count,
858 p_data => x_msg_data
859 );
860
861 print_debuginfo(l_module_name, 'EXIT',
862 G_LEVEL_PROCEDURE);
863 l_temp_status := 'E';
864
865 END IF;
866 END IF;
867
868 -- Verify whether payment_document_id provided is locked by
869 -- batch and also valid for the internal bank account that
870 -- is provided
871
872 l_debug_info := 'Check If Payment Document Id is Valid and Get the next check';
873 print_debuginfo(l_module_name, l_debug_info,
874 G_LEVEL_PROCEDURE);
875
876 IF p_payment_document_id IS NOT NULL THEN
877 BEGIN
878
879 SELECT payment_document_id
880 INTO l_payment_document_id
881 FROM CE_PAYMENT_DOCUMENTS
882 WHERE payment_document_id = p_payment_document_id
883 AND internal_bank_account_id = p_internal_bank_acct_id
884 AND payment_instruction_id IS NULL;
885
886 IBY_DISBURSE_UI_API_PUB_PKG.Validate_Paper_Doc_Number
887 (p_api_version => 1.0,
888 p_init_msg_list => p_init_msg_list,
889 p_payment_doc_id => p_payment_document_id,
890 x_paper_doc_num => l_next_check_number,
891 x_return_status => l_return_status,
892 x_msg_count => x_msg_count,
893 x_msg_data => x_msg_data,
894 show_warn_msgs_flag => 'T');
895
896 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
897
898 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
899 print_debuginfo(l_module_name, 'EXIT',
900 G_LEVEL_PROCEDURE);
901 l_temp_status := 'E';
902
903 END IF;
904
905 EXCEPTION
906
907 WHEN NO_DATA_FOUND THEN
908 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
909
910 FND_MESSAGE.SET_NAME('SQLAP', 'AP_PAY_DOCUMENT_ALREADY_IN_USE');
911 FND_MSG_PUB.ADD;
912
913 FND_MSG_PUB.COUNT_AND_GET(
914 p_count => x_msg_count,
915 p_data => x_msg_data
916 );
917
918 print_debuginfo(l_module_name, 'EXIT',
919 G_LEVEL_PROCEDURE);
920 l_temp_status := 'E';
921
922 END;
923 END IF;
924
925
926 /*
927 || =======================================================
928 || Need to get the party name from hz_parties as it
929 || it is needed for the insert into ap_checks
930 || =======================================================
931 */
932
933 l_debug_info := 'Get Supplier Party Name';
934 print_debuginfo(l_module_name, l_debug_info,
935 G_LEVEL_PROCEDURE);
936
937 BEGIN
938
939 SELECT asup.auto_calculate_interest_flag,
940 hp.party_name
941 INTO l_vendor_rec.Auto_calc_int_flag,
942 l_vendor_rec.Vendor_name
943 FROM ap_suppliers asup,
944 hz_parties hp
945 WHERE asup.vendor_id = l_inv_rec.vendor_id
946 AND asup.party_id = hp.party_id;
947
948 EXCEPTION
949
950 WHEN NO_DATA_FOUND THEN
951
952 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
953
954 FND_MESSAGE.SET_NAME('SQLAP', 'AP_PAY_NO_VENDOR');
955 FND_MSG_PUB.ADD;
956
957 FND_MSG_PUB.COUNT_AND_GET(
958 p_count => x_msg_count,
959 p_data => x_msg_data
960 );
961
962 print_debuginfo(l_module_name, 'EXIT',
963 G_LEVEL_PROCEDURE);
964 l_temp_status := 'E';
965
966 END;
967
968 /*
969 || ==============================================================
970 || - Lock Invoices
971 || --------------------------------------------------------------
972 || Payment workbench actually calls the following code to
973 || AP_PAY_IN_FULL_PKG.AP_LOCK_INVOICES
974 ||
975 || However all this code does is that it locks all the invoices
976 || that are passed in via the p_invoice_id_list parameter.
977 || It also will return the payment_method_code for each
978 || payment_num on the list p_payment_num_list.
979 ||
980 || It will also return the following bits of information needed
981 || to insert a row in the table AP_CHECKS_ALL
982 ||
983 || Currency_code,
984 || Payment_method,
985 || Vendor_id, <-- Already have this information
986 || Vendor_site_id <-- Alreadt have this information
987 ||
988 || For this requirement, we will always have a single invoice
989 || and a single payment so all we really need to do is to lock
990 || the invoice row
991 ||
992 || Any additional bits of information we need, we can select
993 || outside in this procedure.
994 || ==============================================================
995 */
996
997 l_debug_info := 'Lock The Invoice';
998 print_debuginfo(l_module_name, l_debug_info,
999 G_LEVEL_PROCEDURE);
1000
1001 AP_INVOICES_PKG.LOCK_ROW(p_invoice_id,
1002 l_curr_calling_sequence);
1003
1004 /*
1005 || ==============================================================
1006 || -- - Get the the follwoing for the document :-
1007 || o Status_Lookup_Code
1008 || o Payment_Type_Flag
1009 || --------------------------------------------------------------
1010 */
1011
1012 -- Derive check_status based on payment method
1013 l_debug_info := 'Is Payment Method Bills Payable enabled ';
1014 print_debuginfo(l_module_name, l_debug_info,
1015 G_LEVEL_PROCEDURE);
1016
1017 BEGIN
1018
1019 SELECT support_bills_payable_flag,
1020 maturity_date_offset_days
1021 INTO l_bills_payable,
1022 l_maturity_date_offset_days
1023 FROM IBY_PAYMENT_METHODS_VL
1024 WHERE payment_method_code = l_inv_rec.payment_method;
1025
1026
1027 IF l_bills_payable = 'Y' THEN
1028 l_check_rec.status_lookup_code := 'ISSUED';
1029 l_maturity_date := NVL(trunc(p_check_date),trunc(sysdate))
1030 + NVL(l_maturity_date_offset_days, 0);
1031 ELSE
1032 l_check_rec.status_lookup_code := 'NEGOTIABLE';
1033 END IF;
1034
1035 EXCEPTION
1036 WHEN NO_DATA_FOUND THEN
1037
1038 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1039
1040 FND_MESSAGE.SET_NAME('SQLAP', 'AP_IBY_INVALID_PAYMENT_METHOD');
1041 FND_MSG_PUB.ADD;
1042
1043 FND_MSG_PUB.COUNT_AND_GET(
1044 p_count => x_msg_count,
1045 p_data => x_msg_data
1046 );
1047
1048 print_debuginfo(l_module_name, 'EXIT',
1049 G_LEVEL_PROCEDURE);
1050 l_temp_status := 'E';
1051
1052 END;
1053
1054 -- ---------------------------------------------------------------
1055 -- Note: We will only populate the Checkrun_ID for Automatic
1056 -- Payments i.e. Payments in a Batch for Quick and Manual
1057 -- Payments this value will be Null.
1058 -- ---------------------------------------------------------------
1059 -- ---------------------------------------------------------------
1060 -- Step 1 : Sequential Numbering Logic
1061 -- ---------------------------------------------------------------
1062
1063 FND_PROFILE.GET('UNIQUE:SEQ_NUMBERS',l_seq_num_profile);
1064
1065 --5007576, re-wrote the doc sequencing section below
1066
1067 l_doc_category_code := p_doc_category_code;
1068
1069 if l_seq_num_profile in ('P','A') then
1070
1071 if l_doc_category_code is not null then
1072
1073 begin
1074 SELECT 'row exists'
1075 INTO l_valid_sequence_exists
1076 FROM fnd_doc_sequence_categories
1077 WHERE code = l_doc_category_code
1078 AND table_name IN ('AP_CHECKS','AP_CHECKS_ALL');
1079 exception
1080 when no_data_found then
1081
1082 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1083 FND_MESSAGE.SET_NAME('SQLAP', 'AP_SEQ_NO_DOC_CAT');
1084 FND_MSG_PUB.ADD;
1085 FND_MSG_PUB.COUNT_AND_GET(p_count => x_msg_count,
1086 p_data => x_msg_data);
1087 print_debuginfo(l_module_name, 'EXIT',FND_LOG.G_CURRENT_RUNTIME_LEVEL);
1088 l_temp_status := 'E';
1089 return;
1090 end;
1091
1092 else
1093
1094
1095
1096 CE_BANK_AND_ACCOUNT_VALIDATION.get_pay_doc_cat(p_payment_document_id,
1097 p_payment_method_code,
1098 p_internal_bank_acct_id,
1099 l_doc_category_code);
1100 end if;
1101
1102
1103
1104
1105
1106
1107
1108 if l_doc_category_code = '-1' and l_seq_num_profile = 'A' then
1109
1110 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1111 FND_MESSAGE.SET_NAME('SQLAP', 'AP_SEQ_DOC_CAT_NO_FOUND');
1112 FND_MSG_PUB.ADD;
1113 FND_MSG_PUB.COUNT_AND_GET(p_count => x_msg_count,
1114 p_data => x_msg_data);
1115 print_debuginfo(l_module_name, 'EXIT',FND_LOG.G_CURRENT_RUNTIME_LEVEL);
1116 l_temp_status := 'E';
1117 return;
1118
1119 end if;
1120
1121
1122 if l_doc_category_code <> '-1' and
1123 l_asp_rec.pay_doc_override <> 'Y' and
1124 l_doc_category_code <> p_doc_category_code then
1125
1126 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1127 FND_MESSAGE.SET_NAME('SQLAP', 'AP_SEQ_DOC_NO_REQ');
1128 FND_MSG_PUB.ADD;
1129 FND_MSG_PUB.COUNT_AND_GET(p_count => x_msg_count,
1130 p_data => x_msg_data);
1131 print_debuginfo(l_module_name, 'EXIT',FND_LOG.G_CURRENT_RUNTIME_LEVEL);
1132 l_temp_status := 'E';
1133 return;
1134
1135 end if;
1136
1137
1138 --at this point if we haven't rejected we need to verify the sequence assignment is valid
1139 if l_doc_category_code <> '-1' then
1140
1141 l_return_code := fnd_seqnum.get_seq_info(
1142 app_id => 200,
1143 cat_code => l_doc_category_code,
1144 sob_id => l_asp_rec.set_of_books_id,
1145 met_code => 'A',
1146 trx_date => nvl(trunc(p_check_date), trunc(sysdate)),
1147 docseq_id => l_docseq_id,
1148 docseq_type => l_docseq_type,
1149 docseq_name => l_docseq_name,
1150 db_seq_name => l_db_seq_name,
1151 seq_ass_id => l_seq_ass_id,
1152 prd_tab_name => l_prd_tab_name,
1153 aud_tab_name => l_aud_tab_name,
1154 msg_flag => l_msg_flag);
1155
1156
1157
1158 --reject if invalid and seq numbering is always used
1159 if (l_return_code <> 0 or l_docseq_type = 'M') and l_seq_num_profile = 'A' then
1160
1161 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1162 FND_MESSAGE.SET_NAME('SQLAP', 'AP_SEQ_CREATE_ERROR');
1163 FND_MSG_PUB.ADD;
1164 FND_MSG_PUB.COUNT_AND_GET(p_count => x_msg_count,
1165 p_data => x_msg_data);
1166 print_debuginfo(l_module_name, 'EXIT',FND_LOG.G_CURRENT_RUNTIME_LEVEL);
1167 l_temp_status := 'E';
1168 return;
1169
1170 elsif l_return_code = 0 and l_docseq_type = 'A' then
1171
1172 --get seq value
1173 l_return_code := FND_SEQNUM.GET_SEQ_VAL(
1174 200,
1175 l_doc_category_code,
1176 l_asp_rec.set_of_books_id,
1177 'A',
1178 nvl(trunc(p_check_date), trunc(sysdate)),
1179 l_seqval,
1180 l_dbseqid,
1181 'N',
1182 'N');
1183
1184 if l_return_code <> 0 and l_seq_num_profile = 'A' then
1185
1186 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1187 FND_MESSAGE.SET_NAME('SQLAP', 'AP_SEQ_CREATE_ERROR');
1188 FND_MSG_PUB.ADD;
1189 FND_MSG_PUB.COUNT_AND_GET(p_count => x_msg_count,
1190 p_data => x_msg_data);
1191 print_debuginfo(l_module_name, 'EXIT',FND_LOG.G_CURRENT_RUNTIME_LEVEL);
1192 l_temp_status := 'E';
1193 return;
1194
1195 end if;
1196
1197 end if;
1198
1199 end if; --l_doc_category_code is not null then
1200
1201 end if; --l_seq_num_profile in ('P','A')
1202
1203 -- We call Get_Single_Payment_Amount to get the amount for the payment
1204 -- net of the available discount. We pass in NULL for the payment num
1205 -- parameter because we want the entire invoice (all pmt scheds)
1206 -- to be paid
1207
1208 l_debug_info := 'Getting the Check Amount';
1209 print_debuginfo(l_module_name, l_debug_info,
1210 G_LEVEL_PROCEDURE);
1211
1212 l_amount := AP_PAY_IN_FULL_PKG.AP_Get_Check_Amount(
1213 to_char(p_invoice_id),
1214 NULL,
1215 p_payment_type_flag,
1216 sysdate,
1217 l_inv_rec.Pmt_Currency_code,
1218 p_take_discount,
1219 l_asp_rec.Auto_Calc_Int_Flag,
1220 l_vendor_rec.auto_calc_int_flag,
1221 'APAYFULB');
1222
1223 IF ( l_inv_rec.Pmt_Currency_code <> l_asp_rec.base_currency_code ) THEN
1224
1225 IF ( l_check_rec.xrate_type = 'User' ) THEN
1226
1227 l_base_amount := ap_utilities_pkg.ap_round_currency(
1228 (l_amount*l_check_rec.xrate),
1229 l_asp_rec.base_currency_code);
1230
1231 ELSE -- exchange rate is other than USER
1232
1233 l_base_amount := gl_currency_api.convert_amount(
1234 l_inv_rec.pmt_currency_code,
1235 l_asp_rec.base_currency_code,
1236 l_check_rec.xrate_date,
1237 l_check_rec.xrate_type,
1238 l_amount);
1239
1240 END IF;
1241
1242 END IF;
1243
1244 -- Only when we are sure we want to insert should we select the
1245 -- check_id
1246
1247 /*
1248 || ==============================================================
1249 || Step ?: Get Check_ID for creaation of record in the table
1250 || AP_CHECKS
1251 || --------------------------------------------------------------
1252 */
1253
1254 -- First select the value for the CHECK_ID before insert
1255
1256 SELECT ap_checks_s.nextval
1257 INTO l_check_rec.check_id
1258 FROM sys.dual;
1259
1260 l_debug_info := 'Get Quick Check Id';
1261 print_debuginfo(l_module_name, l_debug_info,
1262 G_LEVEL_PROCEDURE);
1263
1264 IF (P_payment_type_flag = 'Q') THEN
1265
1266 SELECT alc1.displayed_field
1267 INTO l_quick_check_id
1268 FROM ap_lookup_codes alc1
1269 WHERE alc1.lookup_type = 'NLS TRANSLATION'
1270 AND alc1.lookup_code = 'QUICKCHECK ID';
1271
1272 l_check_rec.checkrun_name :=
1273 substrb(l_quick_check_id, 1,
1274 30 - nvl(lengthb(to_char(l_check_rec.check_id)), 0))
1275 ||to_char(l_check_rec.check_id);
1276 END IF;
1277
1278 /*
1279 || ==============================================================
1280 || Step ? - Create Check (record in the table AP_CHECKS
1281 || --------------------------------------------------------------
1282 */
1283
1284 l_debug_info := 'Calling Ap_Check_Pkg.Insert_Row';
1285 print_debuginfo(l_module_name, l_debug_info,
1286 G_LEVEL_PROCEDURE);
1287
1288 AP_CHECKS_PKG.Insert_Row(
1289 X_Rowid => l_dummy_rowid,
1290 X_Amount => l_amount,
1291 X_Ce_Bank_Acct_Use_Id => p_internal_bank_acct_id,
1292 X_Bank_Account_Name => l_check_rec.bank_account_name,
1293 X_Check_Date => nvl(trunc(p_check_date),
1294 trunc(sysdate)),
1295 X_Check_Id => l_check_rec.check_id,
1296 X_Check_Number => l_next_check_number,
1297 X_Currency_Code => l_inv_rec.Pmt_Currency_code,
1298 X_Last_Updated_By => FND_GLOBAL.USER_ID,
1299 X_Last_Update_Date => SYSDATE,
1300 X_Payment_Type_Flag => p_payment_type_flag,
1301 X_Address_Line1 => l_apvs_rec.Address_Line1,
1302 X_Address_Line2 => l_apvs_rec.Address_Line2,
1303 X_Address_Line3 => l_apvs_rec.Address_Line3,
1304 X_Checkrun_Name => l_check_rec.Checkrun_Name,
1305 X_Check_Format_Id => NULL,
1306 X_Check_Stock_Id => NULL,
1307 X_City => l_apvs_rec.City,
1308 X_Country => l_apvs_rec.Country,
1309 X_Created_By => FND_GLOBAL.USER_ID,
1310 X_Creation_Date => SYSDATE,
1311 X_Last_Update_Login => FND_GLOBAL.USER_ID,
1312 X_Status_Lookup_Code => l_check_rec.status_lookup_code,
1313 X_Vendor_Name => l_vendor_rec.vendor_name,
1314 X_Vendor_Site_Code => l_apvs_rec.vendor_site_code,
1315 X_External_Bank_Account_Id => l_inv_rec.external_bank_account_id,
1316 X_Zip => l_apvs_rec.Zip,
1317 X_Bank_Account_Num => NULL, -- For Electronic Pmts
1318 X_Bank_Account_Type => NULL, -- For Electronic Pmts
1319 X_Bank_Num => NULL, -- For Electronic Pmts
1320 X_Check_Voucher_Num => NULL,
1321 X_Cleared_Amount => NULL,
1322 X_Cleared_Date => NULL,
1323 X_Doc_Category_Code => l_Doc_Category_Code,
1324 X_Doc_Sequence_Id => l_dbseqid, -- Seq Num
1325 X_Doc_Sequence_Value => l_seqval, -- Seq Num
1326 X_Province => l_apvs_rec.Province, -- PO_VENDORS
1327 X_Released_Date => NULL,
1328 X_Released_By => NULL,
1329 X_State => l_apvs_rec.State,
1330 X_Stopped_Date => NULL,
1331 X_Stopped_By => NULL,
1332 X_Void_Date => NULL,
1333 X_Attribute1 => NULL,
1334 X_Attribute10 => NULL,
1335 X_Attribute11 => NULL,
1336 X_Attribute12 => NULL,
1337 X_Attribute13 => NULL,
1338 X_Attribute14 => NULL,
1339 X_Attribute15 => NULL,
1340 X_Attribute2 => NULL,
1341 X_Attribute3 => NULL,
1342 X_Attribute4 => NULL,
1343 X_Attribute5 => NULL,
1344 X_Attribute6 => NULL,
1345 X_Attribute7 => NULL,
1346 X_Attribute8 => NULL,
1347 X_Attribute9 => NULL,
1348 X_Attribute_Category => NULL,
1349 X_Future_Pay_Due_Date => l_maturity_date,
1350 X_Treasury_Pay_Date => NULL,
1351 X_Treasury_Pay_Number => NULL,
1352 X_Withholding_Status_Lkup_Code => NULL,
1353 X_Reconciliation_Batch_Id => NULL,
1354 X_Cleared_Base_Amount => NULL,
1355 X_Cleared_Exchange_Rate => NULL,
1356 X_Cleared_Exchange_Date => NULL,
1357 X_Cleared_Exchange_Rate_Type => NULL,
1358 X_Address_Line4 => l_apvs_rec.Address_Line4,
1359 X_County => l_apvs_rec.County,
1360 X_Address_Style => l_apvs_rec.Address_Style,
1361 X_Org_id => l_inv_rec.org_id,
1362 X_Vendor_Id => l_inv_rec.vendor_id,
1363 X_Vendor_Site_Id => l_apvs_rec.Vendor_Site_Id,
1364 X_Exchange_Rate => l_check_rec.xrate,
1365 X_Exchange_Date => l_check_rec.xrate_date,
1366 X_Exchange_Rate_Type => l_check_rec.xrate_type,
1367 X_Base_Amount => l_base_amount,
1368 X_Checkrun_Id => NULL,
1369 X_Calling_Sequence => 'APAYFULB.PLS',
1370 X_Global_Attribute_Category => NULL,
1371 X_Global_Attribute1 => NULL,
1372 X_Global_Attribute2 => NULL,
1373 X_Global_Attribute3 => NULL,
1374 X_Global_Attribute4 => NULL,
1375 X_Global_Attribute5 => NULL,
1376 X_Global_Attribute6 => NULL,
1377 X_Global_Attribute7 => NULL,
1378 X_Global_Attribute8 => NULL,
1379 X_Global_Attribute9 => NULL,
1380 X_Global_Attribute10 => NULL,
1381 X_Global_Attribute11 => NULL,
1382 X_Global_Attribute12 => NULL,
1383 X_Global_Attribute13 => NULL,
1384 X_Global_Attribute14 => NULL,
1385 X_Global_Attribute15 => NULL,
1386 X_Global_Attribute16 => NULL,
1387 X_Global_Attribute17 => NULL,
1388 X_Global_Attribute18 => NULL,
1389 X_Global_Attribute19 => NULL,
1390 X_Global_Attribute20 => NULL,
1391 X_transfer_priority => NULL,
1392 X_maturity_exchange_rate_type => NULL,
1393 X_maturity_exchange_date => NULL,
1394 X_maturity_exchange_rate => NULL,
1395 X_description => NULL,
1396 X_anticipated_value_date => NULL,
1397 X_actual_value_date => NULL,
1398 X_payment_profile_id => p_payment_profile_id,
1399 X_bank_charge_bearer => NULL,
1400 X_settlement_priority => NULL,
1401 X_payment_method_code => l_inv_rec.payment_method,
1402 X_payment_document_id => p_payment_document_id,
1403 X_party_id => l_inv_rec.party_id,
1404 X_party_site_id => l_inv_rec.party_site_id,
1405 X_legal_entity_id => l_check_rec.legal_entity_id,
1406 X_payment_id => NULL);
1407
1408
1409 l_debug_info := 'Calling Ap_Reconciliation_Pkg.Insert_Payment_History';
1410 print_debuginfo(l_module_name, l_debug_info,
1411 G_LEVEL_PROCEDURE);
1412 IF ( p_payment_type_flag = 'R' ) THEN
1413 l_transaction_type := 'REFUND RECORDED';
1414 ELSE
1415 l_transaction_type := 'PAYMENT CREATED';
1416 END IF;
1417
1418 l_debug_info := 'transaction type = ' || l_transaction_type;
1419 print_debuginfo(l_module_name, l_debug_info,
1420 G_LEVEL_PROCEDURE);
1421
1422 -- Bug3343314
1423 AP_RECONCILIATION_PKG.insert_payment_history
1424 (
1425 x_check_id => l_check_rec.check_id,
1426 x_transaction_type => l_transaction_type,
1427 x_accounting_date => nvl(trunc(p_check_date),
1428 trunc(sysdate)),
1429 x_trx_bank_amount => NULL,
1430 x_errors_bank_amount => NULL,
1431 x_charges_bank_amount => NULL,
1432 x_bank_currency_code => NULL,
1433 x_bank_to_base_xrate_type => NULL,
1434 x_bank_to_base_xrate_date => NULL,
1435 x_bank_to_base_xrate => NULL,
1436 x_trx_pmt_amount => l_amount,
1437 x_errors_pmt_amount => NULL,
1438 x_charges_pmt_amount => NULL,
1439 x_pmt_currency_code => l_inv_rec.pmt_currency_code,
1440 x_pmt_to_base_xrate_type => l_check_rec.xrate_type,
1441 x_pmt_to_base_xrate_date => l_check_rec.xrate_date,
1442 x_pmt_to_base_xrate => l_check_rec.xrate,
1443 x_trx_base_amount => l_base_amount,
1444 x_errors_base_amount => NULL,
1445 x_charges_base_amount => NULL,
1446 x_matched_flag => NULL,
1447 x_rev_pmt_hist_id => NULL,
1448 x_org_id => l_inv_rec.org_id,
1449 x_creation_date => SYSDATE,
1450 x_created_by => FND_GLOBAL.User_Id,
1451 x_last_update_date => SYSDATE,
1452 x_last_updated_by => FND_GLOBAL.User_Id,
1453 x_last_update_login => FND_GLOBAL.User_Id,
1454 x_program_update_date => NULL,
1455 x_program_application_id => NULL,
1456 x_program_id => NULL,
1457 x_request_id => NULL,
1458 x_calling_sequence => l_curr_calling_sequence,
1459 x_accounting_event_id => l_accounting_event_id
1460 );
1461
1462
1463 -- Any witholding distributions or Interest Invoices are created
1464 -- in the call to Create_Single_Payments.
1465
1466 l_debug_info := 'Calling Ap_Pay_In_Full_Pkg.Create_Payments';
1467 print_debuginfo(l_module_name, l_debug_info,
1468 G_LEVEL_PROCEDURE);
1469
1470 AP_PAY_IN_FULL_PKG.AP_Create_Payments(
1471 to_char(p_invoice_id),
1472 NULL,
1473 l_check_rec.check_id,
1474 p_payment_type_flag,
1475 l_inv_rec.Payment_Method,
1476 p_internal_bank_acct_id,
1477 null, -- bank_account_num
1478 null, -- bank_account_type,
1479 null, -- bank_num,
1480 nvl(trunc(p_check_date), trunc(sysdate)),
1481 l_period_name,
1482 l_inv_rec.Pmt_currency_code,
1483 l_asp_rec.base_currency_code,
1484 l_check_rec.Checkrun_Name,
1485 l_seqval,
1486 l_dbseqid,
1487 l_check_rec.xrate,
1488 l_check_rec.xrate_type,
1489 l_check_rec.xrate_date,
1490 p_take_discount, -- Pay In Full Take Discount
1491 l_asp_rec.auto_calc_int_flag,
1492 l_vendor_rec.auto_calc_int_flag,
1493 l_asp_rec.set_of_books_id,
1494 null, -- future_pay_code_combination_id
1495 FND_GLOBAL.USER_ID,
1496 FND_GLOBAL.USER_ID,
1497 'APXPAWKB',
1498 l_seq_num_profile,
1499 l_accounting_Event_id,
1500 l_inv_rec.org_id);
1501
1502
1503 l_debug_info := 'Calling IBY Single Payment API';
1504 print_debuginfo(l_module_name, l_debug_info,
1505 G_LEVEL_PROCEDURE);
1506
1507 IF l_temp_status <> 'E' THEN
1508
1509 IF p_payment_type_flag IN ('Q', 'M') THEN
1510
1511 IF p_payment_type_flag = 'Q' THEN
1512 l_manual_payment_flag := 'N';
1513
1514 --bug 5982788
1515
1516 select checkrun_name into l_check_rec.Checkrun_name
1517 from ap_checks_all
1518 where check_id = l_check_rec.check_id ;
1519
1520
1521 ELSIF p_payment_type_flag = 'M' THEN
1522
1523 l_manual_payment_flag := 'Y';
1524 --bug 5982788
1525 update ap_checks_all
1526 set checkrun_name = l_check_rec.check_id
1527 where check_id = l_check_rec.check_id ;
1528
1529
1530 select checkrun_name into l_check_rec.Checkrun_name
1531 from ap_checks_all
1532 where check_id = l_check_rec.check_id ;
1533
1534
1535 END IF;
1536
1537
1538 --Bug 5982788
1539
1540 IBY_DISBURSE_SINGLE_PMT_PKG.submit_single_payment(
1541 p_api_version => 1.0,
1542 p_init_msg_list => p_init_msg_list,
1543 p_calling_app_id => 200,
1544 p_calling_app_payreq_cd => l_check_rec.Checkrun_Name,
1545 p_is_manual_payment_flag => l_manual_payment_flag,
1546 p_payment_function => l_inv_rec.payment_function,
1547 p_internal_bank_account_id => p_internal_bank_acct_id,
1548 p_pay_process_profile_id => p_payment_profile_id,
1549 p_payment_method_cd => l_inv_rec.payment_method,
1550 p_legal_entity_id => l_check_rec.legal_entity_id,
1551 p_organization_id => l_inv_rec.org_id,
1552 p_organization_type => 'OPERATING_UNIT',
1553 p_payment_date => nvl(trunc(p_check_date),
1554 trunc(sysdate)),
1555 p_payment_amount => l_amount,
1556 p_payment_currency => l_inv_rec.pmt_currency_code,
1557 p_payee_party_id => l_inv_rec.party_id,
1558 p_payee_party_site_id => l_inv_rec.party_site_id,
1559 p_supplier_site_id => l_inv_rec.vendor_site_id,
1560 p_payee_bank_account_id => l_inv_rec.external_bank_account_id,
1561 p_override_pmt_complete_pt => 'Y',
1562 p_bill_payable_flag => NVL(l_bills_payable, 'N'),
1563 p_anticipated_value_date => NULL,
1564 p_maturity_date => l_maturity_date,
1565 p_payment_document_id => p_payment_document_id,
1566 p_paper_document_number => l_next_check_number,
1567 p_printer_name => l_default_printer,
1568 p_print_immediate_flag => l_print_instr_immed_flag,
1569 p_transmit_immediate_flag => Null,
1570 p_payee_address_line1 => l_apvs_rec.address_line1,
1571 p_payee_address_line2 => l_apvs_rec.address_line2,
1572 p_payee_address_line3 => l_apvs_rec.address_line3,
1573 p_payee_address_line4 => l_apvs_rec.address_line4,
1574 p_payee_address_city => l_apvs_rec.city,
1575 p_payee_address_county => l_apvs_rec.county,
1576 p_payee_address_state => l_apvs_rec.state,
1577 p_payee_address_zip => l_apvs_rec.zip,
1578 p_payee_address_country => l_apvs_rec.country,
1579 p_attribute_category => Null,
1580 p_attribute1 => Null,
1581 p_attribute2 => Null,
1582 p_attribute3 => Null,
1583 p_attribute4 => Null,
1584 p_attribute5 => Null,
1585 p_attribute6 => Null,
1586 p_attribute7 => Null,
1587 p_attribute8 => Null,
1588 p_attribute9 => Null,
1589 p_attribute10 => Null,
1590 p_attribute11 => Null,
1591 p_attribute12 => Null,
1592 p_attribute13 => Null,
1593 p_attribute14 => Null,
1594 p_attribute15 => Null,
1595 x_num_printed_docs => l_num_printed_docs,
1596 x_payment_id => l_payment_id,
1597 x_paper_doc_num => l_paper_doc_num,
1598 x_pmt_ref_num => l_pmt_ref_num,
1599 x_return_status => l_return_status,
1600 x_error_ids_tab => x_errorIds,
1601 x_msg_count => x_msg_count,
1602 x_msg_data => x_msg_data
1603 );
1604
1605 IF (l_return_status = FND_API.G_RET_STS_SUCCESS) THEN
1606
1607 UPDATE AP_CHECKS_ALL
1608 SET payment_id = l_payment_id
1609 WHERE check_id = l_check_rec.check_id;
1610
1611
1612 IF p_payment_type_flag <> 'M' THEN
1613 IF l_paper_doc_num IS NOT NULL THEN
1614 l_check_number := l_paper_doc_num;
1615 ELSE
1616 l_check_number := l_pmt_ref_num;
1617 END IF;
1618
1619 IF l_next_check_number <> l_check_number THEN
1620 UPDATE AP_CHECKS_ALL
1621 SET check_number = l_check_number
1622 WHERE check_id = l_check_rec.check_id;
1623 END IF;
1624 END IF;
1625
1626 x_return_status := l_return_status;
1627
1628 ELSE
1629
1630 x_return_status := l_return_status;
1631
1632 END IF;
1633
1634 END IF; -- p_payment_type_flag
1635
1636
1637 ELSE
1638
1639 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1640
1641 END IF; -- l_temp_status
1642
1643 EXCEPTION
1644
1645 WHEN OTHERS THEN
1646 print_debuginfo(l_module_name, 'Exception occured when '
1647 || 'Payable single payment API fialed. Single payment creation will '
1648 || 'be aborted and no records will be committed for '
1649 || 'the invoice_id: '
1650 || p_invoice_id, G_LEVEL_PROCEDURE
1651 );
1652 print_debuginfo(l_module_name, 'SQLCODE: ' || SQLCODE,
1653 G_LEVEL_PROCEDURE);
1654 print_debuginfo(l_module_name, 'SQLERRM: ' || SQLERRM,
1655 G_LEVEL_PROCEDURE);
1656
1657 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1658 print_debuginfo(l_module_name, 'EXIT',
1659 G_LEVEL_PROCEDURE);
1660
1661 RETURN;
1662 END AP_Pay_Invoice_In_Full;
1663
1664
1665 END AP_PAY_SINGLE_INVOICE_PKG;