[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.13.12000000.2 2007/07/04 07:13:51 rkvadaka 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_acct_use_id = p_internal_bank_acct_id;
426
427 EXCEPTION
428 WHEN NO_DATA_FOUND THEN
429
430 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
431
432 FND_MESSAGE.SET_NAME('SQLAP', 'AP_CE_INVALID_BANK_ACCT');
433 FND_MSG_PUB.ADD;
434
435 FND_MSG_PUB.COUNT_AND_GET(
436 p_count => x_msg_count,
437 p_data => x_msg_data
438 );
439
440 print_debuginfo(l_module_name, 'EXIT',
441 G_LEVEL_PROCEDURE);
442 l_temp_status := 'E';
443
444 END;
445
446 l_debug_info := 'Checking Exchange Rate related info';
447 print_debuginfo(l_module_name, l_debug_info,
448 G_LEVEL_PROCEDURE);
449
450 IF (l_inv_rec.pmt_currency_code <> l_asp_rec.base_currency_code) THEN
451
452 l_check_rec.xrate_type := nvl(P_Exchange_Rate_Type,
453 l_asp_rec.xrate_type);
454
455 IF (l_check_rec.xrate_type = 'User' ) THEN
456
457 IF (P_exchange_rate is NULL) THEN
458
459 -- State that we need to to have an exchange rate if the
460 -- type is USER this is irrespective of the value of the
461 -- make_rate_mandatory_flag on AP_SYSTEM_PARAMETERS
462
463 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
464
465 FND_MESSAGE.SET_NAME('SQLAP', 'AP_NO_USER_XRATE');
466 FND_MSG_PUB.ADD;
467
468 FND_MSG_PUB.COUNT_AND_GET(
469 p_count => x_msg_count,
470 p_data => x_msg_data
471 );
472
473 print_debuginfo(l_module_name, 'EXIT',
474 G_LEVEL_PROCEDURE);
475 l_temp_status := 'E';
476
477 ELSE
478
479 l_check_rec.xrate := P_Exchange_Rate;
480
481 END IF;
482
483 ELSE -- exchange rate is other than USER
484
485 -- --------------------------------------------------------
486 -- To calculate the exchange_rate we need to see what the
487 -- the value of the system parameter make_rate_mandatory_flag
488 -- --------------------------------------------------------
489
490 l_check_rec.xrate_date := nvl(trunc(P_exchange_date),trunc(sysdate));
491 l_check_rec.xrate := ap_utilities_pkg.get_exchange_rate(
492 l_inv_rec.pmt_currency_code,
493 l_asp_rec.base_currency_code,
494 l_check_rec.xrate_type,
495 l_check_rec.xrate_date,
496 'APAYFULB');
497
498 IF (l_check_rec.xrate is NULL
499 AND l_asp_rec.make_rate_mandatory_flag = 'Y') THEN
500
501 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
502
503 FND_MESSAGE.SET_NAME('SQLAP', 'AP_NO_XRATE');
504 FND_MSG_PUB.ADD;
505
506 FND_MSG_PUB.COUNT_AND_GET(
507 p_count => x_msg_count,
508 p_data => x_msg_data
509 );
510
511 print_debuginfo(l_module_name, 'EXIT',
512 G_LEVEL_PROCEDURE);
513 l_temp_status := 'E';
514
515 END IF; -- mandatory_flag = Y
516
517 END IF; -- Exchange Rate = USER
518
519 END IF; -- currency_code <> base_currency_code
520
521 EXCEPTION
522
523 WHEN NO_DATA_FOUND THEN
524
525 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
526
527 FND_MESSAGE.SET_NAME('SQLAP', 'AP_INVOICE_CANNOT_BE_PAID');
528 FND_MSG_PUB.ADD;
529
530 FND_MSG_PUB.COUNT_AND_GET(
531 p_count => x_msg_count,
532 p_data => x_msg_data
533 );
534
535 print_debuginfo(l_module_name, 'EXIT',
536 G_LEVEL_PROCEDURE);
537 l_temp_status := 'E';
538
539 WHEN TOO_MANY_ROWS THEN
540
541 -- This means that the payment schedules for the one invoice may
542 -- have different payment methods. If that is the case, we cannot
543 -- handle in one payment.
544
545 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
546
547 FND_MESSAGE.SET_NAME('SQLAP', 'AP_MISMATCHED_PMT_SCHEDS');
548 FND_MSG_PUB.ADD;
549
550 FND_MSG_PUB.COUNT_AND_GET(
551 p_count => x_msg_count,
552 p_data => x_msg_data
553 );
554
555 print_debuginfo(l_module_name, 'EXIT',
556 G_LEVEL_PROCEDURE);
557 l_temp_status := 'E';
558
559 END;
560
561
562 l_debug_info := 'Check if the Invoice is being paid by a payment batch';
563 print_debuginfo(l_module_name, l_debug_info,
564 G_LEVEL_PROCEDURE);
565
566 SELECT count(*)
567 INTO l_num_invs_sel_for_pmt
568 FROM ap_selected_invoices_all
569 WHERE invoice_id = P_invoice_id;
570
571 IF (l_num_invs_sel_for_pmt > 0) THEN
572
573 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
574
575 FND_MESSAGE.SET_NAME('SQLAP', 'AP_INV_PAY_FAIL_SEL_BY_BATCH');
576 FND_MSG_PUB.ADD;
577
578 FND_MSG_PUB.COUNT_AND_GET(
579 p_count => x_msg_count,
580 p_data => x_msg_data
581 );
582
583 print_debuginfo(l_module_name, 'EXIT',
584 G_LEVEL_PROCEDURE);
585 l_temp_status := 'E';
586
587 END IF;
588
589 /*
590 || ==============================================================
591 || Verify if we should pay invoices for this supplier
592 || -------------------------------------------------------------
593 || We want to verify that if Oracle Payables should place all
594 || payments for this supplier on HOLD also, verify that the
595 || vendor site that we have selected in step 1 is Pay Site
596 || which is also active
597 || ==============================================================
598 */
599
600 l_debug_info := 'Verrify Supplier Site Address related info';
601 print_debuginfo(l_module_name, l_debug_info,
602 G_LEVEL_PROCEDURE);
603
604 BEGIN
605
606 SELECT nvl(asup.hold_all_payments_flag,'N'),
607 nvl(assp.pay_site_flag, 'N'),
608 asup.vendor_type_lookup_code
609 INTO l_hold_all_payments_flag,
610 l_active_pay_sites,
611 l_vendor_type_lookup_code
612 FROM ap_suppliers asup,
613 ap_supplier_sites_all assp
614 WHERE asup.vendor_id = l_inv_rec.vendor_id
615 AND asup.vendor_id = assp.vendor_id
616 AND assp.vendor_site_id = l_inv_rec.vendor_site_id;
617
618
619 IF (l_hold_all_payments_flag = 'Y' or l_active_pay_sites = 'N') THEN
620
621 RAISE NO_DATA_FOUND;
622
623 ELSE
624
625 IF l_vendor_type_lookup_code <> 'EMPLOYEE' THEN
626
627 SELECT hzl.Address1,
628 hzl.Address2,
629 hzl.Address3,
630 hzl.City,
631 hzl.Country,
632 hzl.Postal_Code,
633 hzl.Province,
634 hzl.State,
635 hzl.Address4,
636 hzl.County,
637 hzl.Address_Style,
638 asus.Vendor_Id,
639 asus.Vendor_Site_Id,
640 asus.Vendor_site_code,
641 nvl(asus.Pay_Site_Flag,'N'),
642 nvl(asus.Primary_Pay_Site_Flag,'N')
643 INTO l_apvs_rec.Address_Line1,
644 l_apvs_rec.Address_Line2,
645 l_apvs_rec.Address_Line3,
646 l_apvs_rec.City,
647 l_apvs_rec.Country,
648 l_apvs_rec.Zip,
649 l_apvs_rec.Province,
650 l_apvs_rec.State,
651 l_apvs_rec.Address_Line4,
652 l_apvs_rec.County,
653 l_apvs_rec.Address_Style,
654 l_apvs_rec.Vendor_Id,
655 l_apvs_rec.Vendor_Site_Id,
656 l_apvs_rec.Vendor_site_code,
657 l_apvs_rec.Pay_Site_Flag,
658 l_apvs_rec.Primary_Pay_Site
659 FROM ap_supplier_sites_all asus,
660 hz_locations hzl
661 WHERE asus.vendor_site_id = l_inv_rec.vendor_site_id
662 AND asus.location_id = hzl.location_id
663 AND nvl(trunc(asus.inactive_date),sysdate+1) > trunc(sysdate);
664
665
666 IF l_apvs_rec.Pay_Site_Flag = 'N' THEN
667
668 BEGIN
669
670 -- We want to search if there is a Primary Pay Site for
671 -- for this Vendor
672
673 SELECT hzl.Address1,
674 hzl.Address2,
675 hzl.Address3,
676 hzl.City,
677 hzl.Country,
678 hzl.Postal_Code,
679 hzl.Province,
680 hzl.State,
681 hzl.Address4,
682 hzl.County,
683 hzl.Address_Style,
684 asus.Vendor_Id,
685 asus.Vendor_Site_Id,
686 asus.Vendor_Site_Code,
687 nvl(asus.Pay_Site_Flag,'N'),
688 nvl(asus.Primary_Pay_Site_Flag,'N')
689 INTO l_apvs_rec.Address_Line1,
690 l_apvs_rec.Address_Line2,
691 l_apvs_rec.Address_Line3,
692 l_apvs_rec.City,
693 l_apvs_rec.Country,
694 l_apvs_rec.Zip,
695 l_apvs_rec.Province,
696 l_apvs_rec.State,
697 l_apvs_rec.Address_Line4,
698 l_apvs_rec.County,
699 l_apvs_rec.Address_Style,
700 l_apvs_rec.Vendor_Id,
701 l_apvs_rec.Vendor_Site_Id,
702 l_apvs_rec.Vendor_site_code,
703 l_apvs_rec.Pay_Site_Flag,
704 l_apvs_rec.Primary_Pay_Site
705 FROM ap_supplier_sites_all asus,
706 hz_locations hzl
707 WHERE asus.vendor_site_id = l_inv_rec.vendor_site_id
708 AND asus.location_id = hzl.location_id
709 AND nvl(trunc(asus.inactive_date),sysdate+1)
710 > trunc(sysdate)
711 AND nvl(asus.primary_pay_site_flag,'N') = 'Y';
712
713
714 EXCEPTION
715
716 WHEN NO_DATA_FOUND THEN
717
718 BEGIN
719
720 SELECT hzl.Address1,
721 hzl.Address2,
722 hzl.Address3,
723 hzl.City,
724 hzl.Country,
725 hzl.Postal_Code,
726 hzl.Province,
727 hzl.State,
728 hzl.Address4,
729 hzl.County,
730 hzl.Address_Style,
731 asus.Vendor_Id,
732 asus.Vendor_Site_Id,
733 asus.Vendor_site_code,
734 nvl(asus.Pay_Site_Flag,'N'),
735 nvl(asus.Primary_Pay_Site_Flag,'N')
736 INTO l_apvs_rec.Address_Line1,
737 l_apvs_rec.Address_Line2,
738 l_apvs_rec.Address_Line3,
739 l_apvs_rec.City,
740 l_apvs_rec.Country,
741 l_apvs_rec.Zip,
742 l_apvs_rec.Province,
743 l_apvs_rec.State,
744 l_apvs_rec.Address_Line4,
745 l_apvs_rec.County,
746 l_apvs_rec.Address_Style,
747 l_apvs_rec.Vendor_Id,
748 l_apvs_rec.Vendor_Site_Id,
749 l_apvs_rec.Vendor_site_code,
750 l_apvs_rec.Pay_Site_Flag,
751 l_apvs_rec.Primary_Pay_Site
752 FROM ap_supplier_sites_all asus,
753 hz_locations hzl
754 WHERE asus.vendor_site_id = l_inv_rec.vendor_site_id
755 AND asus.location_id = hzl.location_id
756 AND nvl(trunc(asus.inactive_date),sysdate+1)
757 > trunc(sysdate)
758 AND nvl(asus.pay_site_flag,'N') = 'Y'
759 AND rownum = 1;
760
761 -- We want to find ANY Pay Site for this Vendor
762
763 EXCEPTION
764
765 WHEN NO_DATA_FOUND THEN
766
767 NULL; -- Can't have no data found here as there
768 -- has to be another pay site (verify)
769
770 END;
771
772 END;
773
774 END IF; -- l_apvs_rec.Pay_Site_Flag = 'N'
775
776 END IF; -- l_vendor_type_lookup_code
777
778 END IF;
779
780 EXCEPTION
781
782 WHEN NO_DATA_FOUND Then
783
784 -- The Vendor Site that was on the invoice does not exist or
785 -- we cannot pay invoices for this vendor or the vendor has no
786 -- active pay sites
787
788 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
789
790 FND_MESSAGE.SET_NAME('SQLAP', 'AP_NO_VENDOR_SITE');
791 FND_MSG_PUB.ADD;
792
793 FND_MSG_PUB.COUNT_AND_GET(
794 p_count => x_msg_count,
795 p_data => x_msg_data
796 );
797
798 print_debuginfo(l_module_name, 'EXIT',
799 G_LEVEL_PROCEDURE);
800 l_temp_status := 'E';
801
802 END;
803
804 -- At this stage the we are assuming that the Vendor Site is a
805 -- pay site and is active
806
807
808 -- Verify if Processing Type of Payment Process Profile provided
809 -- is 'PRINTED', then Payment Document Id needs to be provided
810
811 l_debug_info := 'Deriving Proceeing Type for Payment Process Profile';
812 print_debuginfo(l_module_name, l_debug_info,
813 G_LEVEL_PROCEDURE);
814
815
816 BEGIN
817
818 SELECT processing_type,
819 print_instruction_immed_flag,
820 default_printer
821 INTO l_processing_type,
822 l_print_instr_immed_flag,
823 l_default_printer
824 FROM IBY_PAYMENT_PROFILES
825 WHERE payment_profile_id = p_payment_profile_id;
826
827 EXCEPTION
828 WHEN NO_DATA_FOUND THEN
829
830 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
831
832 FND_MESSAGE.SET_NAME('SQLAP', 'AP_IBY_INVALID_PAYMENT_PROF');
833 FND_MSG_PUB.ADD;
834
835 FND_MSG_PUB.COUNT_AND_GET(
836 p_count => x_msg_count,
837 p_data => x_msg_data
838 );
839
840 print_debuginfo(l_module_name, 'EXIT',
841 G_LEVEL_PROCEDURE);
842 l_temp_status := 'E';
843
844 END;
845
846 -- Verify payment document is needed or not
847 IF l_processing_type = 'PRINTED' THEN
848 IF p_payment_document_id IS NULL THEN
849
850 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
851
852 FND_MESSAGE.SET_NAME('SQLAP', 'AP_CE_PAYMENT_DOC_NEEDED');
853 FND_MSG_PUB.ADD;
854
855 FND_MSG_PUB.COUNT_AND_GET(
856 p_count => x_msg_count,
857 p_data => x_msg_data
858 );
859
860 print_debuginfo(l_module_name, 'EXIT',
861 G_LEVEL_PROCEDURE);
862 l_temp_status := 'E';
863
864 END IF;
865 END IF;
866
867 -- Verify whether payment_document_id provided is locked by
868 -- batch and also valid for the internal bank account that
869 -- is provided
870
871 l_debug_info := 'Check If Payment Document Id is Valid and Get the next check';
872 print_debuginfo(l_module_name, l_debug_info,
873 G_LEVEL_PROCEDURE);
874
875 IF p_payment_document_id IS NOT NULL THEN
876 BEGIN
877
878 SELECT payment_document_id
879 INTO l_payment_document_id
880 FROM CE_PAYMENT_DOCUMENTS
881 WHERE payment_document_id = p_payment_document_id
882 AND internal_bank_account_id = p_internal_bank_acct_id
883 AND payment_instruction_id IS NULL;
884
885 IBY_DISBURSE_UI_API_PUB_PKG.Validate_Paper_Doc_Number
886 (p_api_version => 1.0,
887 p_init_msg_list => p_init_msg_list,
888 p_payment_doc_id => p_payment_document_id,
889 x_paper_doc_num => l_next_check_number,
890 x_return_status => l_return_status,
891 x_msg_count => x_msg_count,
892 x_msg_data => x_msg_data,
893 show_warn_msgs_flag => 'T');
894
895 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
896
897 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
898 print_debuginfo(l_module_name, 'EXIT',
899 G_LEVEL_PROCEDURE);
900 l_temp_status := 'E';
901
902 END IF;
903
904 EXCEPTION
905
906 WHEN NO_DATA_FOUND THEN
907 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
908
909 FND_MESSAGE.SET_NAME('SQLAP', 'AP_PAY_DOCUMENT_ALREADY_IN_USE');
910 FND_MSG_PUB.ADD;
911
912 FND_MSG_PUB.COUNT_AND_GET(
913 p_count => x_msg_count,
914 p_data => x_msg_data
915 );
916
917 print_debuginfo(l_module_name, 'EXIT',
918 G_LEVEL_PROCEDURE);
919 l_temp_status := 'E';
920
921 END;
922 END IF;
923
924
925 /*
926 || =======================================================
927 || Need to get the party name from hz_parties as it
928 || it is needed for the insert into ap_checks
929 || =======================================================
930 */
931
932 l_debug_info := 'Get Supplier Party Name';
933 print_debuginfo(l_module_name, l_debug_info,
934 G_LEVEL_PROCEDURE);
935
936 BEGIN
937
938 SELECT asup.auto_calculate_interest_flag,
939 hp.party_name
940 INTO l_vendor_rec.Auto_calc_int_flag,
941 l_vendor_rec.Vendor_name
942 FROM ap_suppliers asup,
943 hz_parties hp
944 WHERE asup.vendor_id = l_inv_rec.vendor_id
945 AND asup.party_id = hp.party_id;
946
947 EXCEPTION
948
949 WHEN NO_DATA_FOUND THEN
950
951 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
952
953 FND_MESSAGE.SET_NAME('SQLAP', 'AP_PAY_NO_VENDOR');
954 FND_MSG_PUB.ADD;
955
956 FND_MSG_PUB.COUNT_AND_GET(
957 p_count => x_msg_count,
958 p_data => x_msg_data
959 );
960
961 print_debuginfo(l_module_name, 'EXIT',
962 G_LEVEL_PROCEDURE);
963 l_temp_status := 'E';
964
965 END;
966
967 /*
968 || ==============================================================
969 || - Lock Invoices
970 || --------------------------------------------------------------
971 || Payment workbench actually calls the following code to
972 || AP_PAY_IN_FULL_PKG.AP_LOCK_INVOICES
973 ||
974 || However all this code does is that it locks all the invoices
975 || that are passed in via the p_invoice_id_list parameter.
976 || It also will return the payment_method_code for each
977 || payment_num on the list p_payment_num_list.
978 ||
979 || It will also return the following bits of information needed
980 || to insert a row in the table AP_CHECKS_ALL
981 ||
982 || Currency_code,
983 || Payment_method,
984 || Vendor_id, <-- Already have this information
985 || Vendor_site_id <-- Alreadt have this information
986 ||
987 || For this requirement, we will always have a single invoice
988 || and a single payment so all we really need to do is to lock
989 || the invoice row
990 ||
991 || Any additional bits of information we need, we can select
992 || outside in this procedure.
993 || ==============================================================
994 */
995
996 l_debug_info := 'Lock The Invoice';
997 print_debuginfo(l_module_name, l_debug_info,
998 G_LEVEL_PROCEDURE);
999
1000 AP_INVOICES_PKG.LOCK_ROW(p_invoice_id,
1001 l_curr_calling_sequence);
1002
1003 /*
1004 || ==============================================================
1005 || -- - Get the the follwoing for the document :-
1006 || o Status_Lookup_Code
1007 || o Payment_Type_Flag
1008 || --------------------------------------------------------------
1009 */
1010
1011 -- Derive check_status based on payment method
1012 l_debug_info := 'Is Payment Method Bills Payable enabled ';
1013 print_debuginfo(l_module_name, l_debug_info,
1014 G_LEVEL_PROCEDURE);
1015
1016 BEGIN
1017
1018 SELECT support_bills_payable_flag,
1019 maturity_date_offset_days
1020 INTO l_bills_payable,
1021 l_maturity_date_offset_days
1022 FROM IBY_PAYMENT_METHODS_VL
1023 WHERE payment_method_code = l_inv_rec.payment_method;
1024
1025
1026 IF l_bills_payable = 'Y' THEN
1027 l_check_rec.status_lookup_code := 'ISSUED';
1028 l_maturity_date := NVL(trunc(p_check_date),trunc(sysdate))
1029 + NVL(l_maturity_date_offset_days, 0);
1030 ELSE
1031 l_check_rec.status_lookup_code := 'NEGOTIABLE';
1032 END IF;
1033
1034 EXCEPTION
1035 WHEN NO_DATA_FOUND THEN
1036
1037 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1038
1039 FND_MESSAGE.SET_NAME('SQLAP', 'AP_IBY_INVALID_PAYMENT_METHOD');
1040 FND_MSG_PUB.ADD;
1041
1042 FND_MSG_PUB.COUNT_AND_GET(
1043 p_count => x_msg_count,
1044 p_data => x_msg_data
1045 );
1046
1047 print_debuginfo(l_module_name, 'EXIT',
1048 G_LEVEL_PROCEDURE);
1049 l_temp_status := 'E';
1050
1051 END;
1052
1053 -- ---------------------------------------------------------------
1054 -- Note: We will only populate the Checkrun_ID for Automatic
1055 -- Payments i.e. Payments in a Batch for Quick and Manual
1056 -- Payments this value will be Null.
1057 -- ---------------------------------------------------------------
1058 -- ---------------------------------------------------------------
1059 -- Step 1 : Sequential Numbering Logic
1060 -- ---------------------------------------------------------------
1061
1062 FND_PROFILE.GET('UNIQUE:SEQ_NUMBERS',l_seq_num_profile);
1063
1064 --5007576, re-wrote the doc sequencing section below
1065
1066 l_doc_category_code := p_doc_category_code;
1067
1068 if l_seq_num_profile in ('P','A') then
1069
1070 if l_doc_category_code is not null then
1071
1072 begin
1073 SELECT 'row exists'
1074 INTO l_valid_sequence_exists
1075 FROM fnd_doc_sequence_categories
1076 WHERE code = l_doc_category_code
1077 AND table_name IN ('AP_CHECKS','AP_CHECKS_ALL');
1078 exception
1079 when no_data_found then
1080
1081 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1082 FND_MESSAGE.SET_NAME('SQLAP', 'AP_SEQ_NO_DOC_CAT');
1083 FND_MSG_PUB.ADD;
1084 FND_MSG_PUB.COUNT_AND_GET(p_count => x_msg_count,
1085 p_data => x_msg_data);
1086 print_debuginfo(l_module_name, 'EXIT',FND_LOG.G_CURRENT_RUNTIME_LEVEL);
1087 l_temp_status := 'E';
1088 return;
1089 end;
1090
1091 else
1092
1093
1094
1095 CE_BANK_AND_ACCOUNT_VALIDATION.get_pay_doc_cat(p_payment_document_id,
1096 p_payment_method_code,
1097 p_internal_bank_acct_id,
1098 l_doc_category_code);
1099 end if;
1100
1101
1102
1103
1104
1105
1106
1107 if l_doc_category_code = '-1' and l_seq_num_profile = 'A' then
1108
1109 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1110 FND_MESSAGE.SET_NAME('SQLAP', 'AP_SEQ_DOC_CAT_NO_FOUND');
1111 FND_MSG_PUB.ADD;
1112 FND_MSG_PUB.COUNT_AND_GET(p_count => x_msg_count,
1113 p_data => x_msg_data);
1114 print_debuginfo(l_module_name, 'EXIT',FND_LOG.G_CURRENT_RUNTIME_LEVEL);
1115 l_temp_status := 'E';
1116 return;
1117
1118 end if;
1119
1120
1121 if l_doc_category_code <> '-1' and
1122 l_asp_rec.pay_doc_override <> 'Y' and
1123 l_doc_category_code <> p_doc_category_code then
1124
1125 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1126 FND_MESSAGE.SET_NAME('SQLAP', 'AP_SEQ_DOC_NO_REQ');
1127 FND_MSG_PUB.ADD;
1128 FND_MSG_PUB.COUNT_AND_GET(p_count => x_msg_count,
1129 p_data => x_msg_data);
1130 print_debuginfo(l_module_name, 'EXIT',FND_LOG.G_CURRENT_RUNTIME_LEVEL);
1131 l_temp_status := 'E';
1132 return;
1133
1134 end if;
1135
1136
1137 --at this point if we haven't rejected we need to verify the sequence assignment is valid
1138 if l_doc_category_code <> '-1' then
1139
1140 l_return_code := fnd_seqnum.get_seq_info(
1141 app_id => 200,
1142 cat_code => l_doc_category_code,
1143 sob_id => l_asp_rec.set_of_books_id,
1144 met_code => 'A',
1145 trx_date => nvl(trunc(p_check_date), trunc(sysdate)),
1146 docseq_id => l_docseq_id,
1147 docseq_type => l_docseq_type,
1148 docseq_name => l_docseq_name,
1149 db_seq_name => l_db_seq_name,
1150 seq_ass_id => l_seq_ass_id,
1151 prd_tab_name => l_prd_tab_name,
1152 aud_tab_name => l_aud_tab_name,
1153 msg_flag => l_msg_flag);
1154
1155
1156
1157 --reject if invalid and seq numbering is always used
1158 if (l_return_code <> 0 or l_docseq_type = 'M') and l_seq_num_profile = 'A' then
1159
1160 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1161 FND_MESSAGE.SET_NAME('SQLAP', 'AP_SEQ_CREATE_ERROR');
1162 FND_MSG_PUB.ADD;
1163 FND_MSG_PUB.COUNT_AND_GET(p_count => x_msg_count,
1164 p_data => x_msg_data);
1165 print_debuginfo(l_module_name, 'EXIT',FND_LOG.G_CURRENT_RUNTIME_LEVEL);
1166 l_temp_status := 'E';
1167 return;
1168
1169 elsif l_return_code = 0 and l_docseq_type = 'A' then
1170
1171 --get seq value
1172 l_return_code := FND_SEQNUM.GET_SEQ_VAL(
1173 200,
1174 l_doc_category_code,
1175 l_asp_rec.set_of_books_id,
1176 'A',
1177 nvl(trunc(p_check_date), trunc(sysdate)),
1178 l_seqval,
1179 l_dbseqid,
1180 'N',
1181 'N');
1182
1183 if l_return_code <> 0 and l_seq_num_profile = 'A' then
1184
1185 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1186 FND_MESSAGE.SET_NAME('SQLAP', 'AP_SEQ_CREATE_ERROR');
1187 FND_MSG_PUB.ADD;
1188 FND_MSG_PUB.COUNT_AND_GET(p_count => x_msg_count,
1189 p_data => x_msg_data);
1190 print_debuginfo(l_module_name, 'EXIT',FND_LOG.G_CURRENT_RUNTIME_LEVEL);
1191 l_temp_status := 'E';
1192 return;
1193
1194 end if;
1195
1196 end if;
1197
1198 end if; --l_doc_category_code is not null then
1199
1200 end if; --l_seq_num_profile in ('P','A')
1201
1202 -- We call Get_Single_Payment_Amount to get the amount for the payment
1203 -- net of the available discount. We pass in NULL for the payment num
1204 -- parameter because we want the entire invoice (all pmt scheds)
1205 -- to be paid
1206
1207 l_debug_info := 'Getting the Check Amount';
1208 print_debuginfo(l_module_name, l_debug_info,
1209 G_LEVEL_PROCEDURE);
1210
1211 l_amount := AP_PAY_IN_FULL_PKG.AP_Get_Check_Amount(
1212 to_char(p_invoice_id),
1213 NULL,
1214 p_payment_type_flag,
1215 sysdate,
1216 l_inv_rec.Pmt_Currency_code,
1217 p_take_discount,
1218 l_asp_rec.Auto_Calc_Int_Flag,
1219 l_vendor_rec.auto_calc_int_flag,
1220 'APAYFULB');
1221
1222 IF ( l_inv_rec.Pmt_Currency_code <> l_asp_rec.base_currency_code ) THEN
1223
1224 IF ( l_check_rec.xrate_type = 'User' ) THEN
1225
1226 l_base_amount := ap_utilities_pkg.ap_round_currency(
1227 (l_amount*l_check_rec.xrate),
1228 l_asp_rec.base_currency_code);
1229
1230 ELSE -- exchange rate is other than USER
1231
1232 l_base_amount := gl_currency_api.convert_amount(
1233 l_inv_rec.pmt_currency_code,
1234 l_asp_rec.base_currency_code,
1235 l_check_rec.xrate_date,
1236 l_check_rec.xrate_type,
1237 l_amount);
1238
1239 END IF;
1240
1241 END IF;
1242
1243 -- Only when we are sure we want to insert should we select the
1244 -- check_id
1245
1246 /*
1247 || ==============================================================
1248 || Step ?: Get Check_ID for creaation of record in the table
1249 || AP_CHECKS
1250 || --------------------------------------------------------------
1251 */
1252
1253 -- First select the value for the CHECK_ID before insert
1254
1255 SELECT ap_checks_s.nextval
1256 INTO l_check_rec.check_id
1257 FROM sys.dual;
1258
1259 l_debug_info := 'Get Quick Check Id';
1260 print_debuginfo(l_module_name, l_debug_info,
1261 G_LEVEL_PROCEDURE);
1262
1263 IF (P_payment_type_flag = 'Q') THEN
1264
1265 SELECT alc1.displayed_field
1266 INTO l_quick_check_id
1267 FROM ap_lookup_codes alc1
1268 WHERE alc1.lookup_type = 'NLS TRANSLATION'
1269 AND alc1.lookup_code = 'QUICKCHECK ID';
1270
1271 l_check_rec.checkrun_name :=
1272 substrb(l_quick_check_id, 1,
1273 30 - nvl(lengthb(to_char(l_check_rec.check_id)), 0))
1274 ||to_char(l_check_rec.check_id);
1275 END IF;
1276
1277 /*
1278 || ==============================================================
1279 || Step ? - Create Check (record in the table AP_CHECKS
1280 || --------------------------------------------------------------
1281 */
1282
1283 l_debug_info := 'Calling Ap_Check_Pkg.Insert_Row';
1284 print_debuginfo(l_module_name, l_debug_info,
1285 G_LEVEL_PROCEDURE);
1286
1287 AP_CHECKS_PKG.Insert_Row(
1288 X_Rowid => l_dummy_rowid,
1289 X_Amount => l_amount,
1290 X_Ce_Bank_Acct_Use_Id => p_internal_bank_acct_id,
1291 X_Bank_Account_Name => l_check_rec.bank_account_name,
1292 X_Check_Date => nvl(trunc(p_check_date),
1293 trunc(sysdate)),
1294 X_Check_Id => l_check_rec.check_id,
1295 X_Check_Number => l_next_check_number,
1296 X_Currency_Code => l_inv_rec.Pmt_Currency_code,
1297 X_Last_Updated_By => FND_GLOBAL.USER_ID,
1298 X_Last_Update_Date => SYSDATE,
1299 X_Payment_Type_Flag => p_payment_type_flag,
1300 X_Address_Line1 => l_apvs_rec.Address_Line1,
1301 X_Address_Line2 => l_apvs_rec.Address_Line2,
1302 X_Address_Line3 => l_apvs_rec.Address_Line3,
1303 X_Checkrun_Name => l_check_rec.Checkrun_Name,
1304 X_Check_Format_Id => NULL,
1305 X_Check_Stock_Id => NULL,
1306 X_City => l_apvs_rec.City,
1307 X_Country => l_apvs_rec.Country,
1308 X_Created_By => FND_GLOBAL.USER_ID,
1309 X_Creation_Date => SYSDATE,
1310 X_Last_Update_Login => FND_GLOBAL.USER_ID,
1311 X_Status_Lookup_Code => l_check_rec.status_lookup_code,
1312 X_Vendor_Name => l_vendor_rec.vendor_name,
1313 X_Vendor_Site_Code => l_apvs_rec.vendor_site_code,
1314 X_External_Bank_Account_Id => l_inv_rec.external_bank_account_id,
1315 X_Zip => l_apvs_rec.Zip,
1316 X_Bank_Account_Num => NULL, -- For Electronic Pmts
1317 X_Bank_Account_Type => NULL, -- For Electronic Pmts
1318 X_Bank_Num => NULL, -- For Electronic Pmts
1319 X_Check_Voucher_Num => NULL,
1320 X_Cleared_Amount => NULL,
1321 X_Cleared_Date => NULL,
1322 X_Doc_Category_Code => l_Doc_Category_Code,
1323 X_Doc_Sequence_Id => l_dbseqid, -- Seq Num
1324 X_Doc_Sequence_Value => l_seqval, -- Seq Num
1325 X_Province => l_apvs_rec.Province, -- PO_VENDORS
1326 X_Released_Date => NULL,
1327 X_Released_By => NULL,
1328 X_State => l_apvs_rec.State,
1329 X_Stopped_Date => NULL,
1330 X_Stopped_By => NULL,
1331 X_Void_Date => NULL,
1332 X_Attribute1 => NULL,
1333 X_Attribute10 => NULL,
1334 X_Attribute11 => NULL,
1335 X_Attribute12 => NULL,
1336 X_Attribute13 => NULL,
1337 X_Attribute14 => NULL,
1338 X_Attribute15 => NULL,
1339 X_Attribute2 => NULL,
1340 X_Attribute3 => NULL,
1341 X_Attribute4 => NULL,
1342 X_Attribute5 => NULL,
1343 X_Attribute6 => NULL,
1344 X_Attribute7 => NULL,
1345 X_Attribute8 => NULL,
1346 X_Attribute9 => NULL,
1347 X_Attribute_Category => NULL,
1348 X_Future_Pay_Due_Date => l_maturity_date,
1349 X_Treasury_Pay_Date => NULL,
1350 X_Treasury_Pay_Number => NULL,
1351 X_Withholding_Status_Lkup_Code => NULL,
1352 X_Reconciliation_Batch_Id => NULL,
1353 X_Cleared_Base_Amount => NULL,
1354 X_Cleared_Exchange_Rate => NULL,
1355 X_Cleared_Exchange_Date => NULL,
1356 X_Cleared_Exchange_Rate_Type => NULL,
1357 X_Address_Line4 => l_apvs_rec.Address_Line4,
1358 X_County => l_apvs_rec.County,
1359 X_Address_Style => l_apvs_rec.Address_Style,
1360 X_Org_id => l_inv_rec.org_id,
1361 X_Vendor_Id => l_inv_rec.vendor_id,
1362 X_Vendor_Site_Id => l_apvs_rec.Vendor_Site_Id,
1363 X_Exchange_Rate => l_check_rec.xrate,
1364 X_Exchange_Date => l_check_rec.xrate_date,
1365 X_Exchange_Rate_Type => l_check_rec.xrate_type,
1366 X_Base_Amount => l_base_amount,
1367 X_Checkrun_Id => NULL,
1368 X_Calling_Sequence => 'APAYFULB.PLS',
1369 X_Global_Attribute_Category => NULL,
1370 X_Global_Attribute1 => NULL,
1371 X_Global_Attribute2 => NULL,
1372 X_Global_Attribute3 => NULL,
1373 X_Global_Attribute4 => NULL,
1374 X_Global_Attribute5 => NULL,
1375 X_Global_Attribute6 => NULL,
1376 X_Global_Attribute7 => NULL,
1377 X_Global_Attribute8 => NULL,
1378 X_Global_Attribute9 => NULL,
1379 X_Global_Attribute10 => NULL,
1380 X_Global_Attribute11 => NULL,
1381 X_Global_Attribute12 => NULL,
1382 X_Global_Attribute13 => NULL,
1383 X_Global_Attribute14 => NULL,
1384 X_Global_Attribute15 => NULL,
1385 X_Global_Attribute16 => NULL,
1386 X_Global_Attribute17 => NULL,
1387 X_Global_Attribute18 => NULL,
1388 X_Global_Attribute19 => NULL,
1389 X_Global_Attribute20 => NULL,
1390 X_transfer_priority => NULL,
1391 X_maturity_exchange_rate_type => NULL,
1392 X_maturity_exchange_date => NULL,
1393 X_maturity_exchange_rate => NULL,
1394 X_description => NULL,
1395 X_anticipated_value_date => NULL,
1396 X_actual_value_date => NULL,
1397 X_payment_profile_id => p_payment_profile_id,
1398 X_bank_charge_bearer => NULL,
1399 X_settlement_priority => NULL,
1400 X_payment_method_code => l_inv_rec.payment_method,
1401 X_payment_document_id => p_payment_document_id,
1402 X_party_id => l_inv_rec.party_id,
1403 X_party_site_id => l_inv_rec.party_site_id,
1404 X_legal_entity_id => l_check_rec.legal_entity_id,
1405 X_payment_id => NULL);
1406
1407
1408 l_debug_info := 'Calling Ap_Reconciliation_Pkg.Insert_Payment_History';
1409 print_debuginfo(l_module_name, l_debug_info,
1410 G_LEVEL_PROCEDURE);
1411 IF ( p_payment_type_flag = 'R' ) THEN
1412 l_transaction_type := 'REFUND RECORDED';
1413 ELSE
1414 l_transaction_type := 'PAYMENT CREATED';
1415 END IF;
1416
1417 l_debug_info := 'transaction type = ' || l_transaction_type;
1418 print_debuginfo(l_module_name, l_debug_info,
1419 G_LEVEL_PROCEDURE);
1420
1421 -- Bug3343314
1422 AP_RECONCILIATION_PKG.insert_payment_history
1423 (
1424 x_check_id => l_check_rec.check_id,
1425 x_transaction_type => l_transaction_type,
1426 x_accounting_date => nvl(trunc(p_check_date),
1427 trunc(sysdate)),
1428 x_trx_bank_amount => NULL,
1429 x_errors_bank_amount => NULL,
1430 x_charges_bank_amount => NULL,
1431 x_bank_currency_code => NULL,
1432 x_bank_to_base_xrate_type => NULL,
1433 x_bank_to_base_xrate_date => NULL,
1434 x_bank_to_base_xrate => NULL,
1435 x_trx_pmt_amount => l_amount,
1436 x_errors_pmt_amount => NULL,
1437 x_charges_pmt_amount => NULL,
1438 x_pmt_currency_code => l_inv_rec.pmt_currency_code,
1439 x_pmt_to_base_xrate_type => l_check_rec.xrate_type,
1440 x_pmt_to_base_xrate_date => l_check_rec.xrate_date,
1441 x_pmt_to_base_xrate => l_check_rec.xrate,
1442 x_trx_base_amount => l_base_amount,
1443 x_errors_base_amount => NULL,
1444 x_charges_base_amount => NULL,
1445 x_matched_flag => NULL,
1446 x_rev_pmt_hist_id => NULL,
1447 x_org_id => l_inv_rec.org_id,
1448 x_creation_date => SYSDATE,
1449 x_created_by => FND_GLOBAL.User_Id,
1450 x_last_update_date => SYSDATE,
1451 x_last_updated_by => FND_GLOBAL.User_Id,
1452 x_last_update_login => FND_GLOBAL.User_Id,
1453 x_program_update_date => NULL,
1454 x_program_application_id => NULL,
1455 x_program_id => NULL,
1456 x_request_id => NULL,
1457 x_calling_sequence => l_curr_calling_sequence,
1458 x_accounting_event_id => l_accounting_event_id
1459 );
1460
1461
1462 -- Any witholding distributions or Interest Invoices are created
1463 -- in the call to Create_Single_Payments.
1464
1465 l_debug_info := 'Calling Ap_Pay_In_Full_Pkg.Create_Payments';
1466 print_debuginfo(l_module_name, l_debug_info,
1467 G_LEVEL_PROCEDURE);
1468
1469 AP_PAY_IN_FULL_PKG.AP_Create_Payments(
1470 to_char(p_invoice_id),
1471 NULL,
1472 l_check_rec.check_id,
1473 p_payment_type_flag,
1474 l_inv_rec.Payment_Method,
1475 p_internal_bank_acct_id,
1476 null, -- bank_account_num
1477 null, -- bank_account_type,
1478 null, -- bank_num,
1479 nvl(trunc(p_check_date), trunc(sysdate)),
1480 l_period_name,
1481 l_inv_rec.Pmt_currency_code,
1482 l_asp_rec.base_currency_code,
1483 l_check_rec.Checkrun_Name,
1484 l_seqval,
1485 l_dbseqid,
1486 l_check_rec.xrate,
1487 l_check_rec.xrate_type,
1488 l_check_rec.xrate_date,
1489 p_take_discount, -- Pay In Full Take Discount
1490 l_asp_rec.auto_calc_int_flag,
1491 l_vendor_rec.auto_calc_int_flag,
1492 l_asp_rec.set_of_books_id,
1493 null, -- future_pay_code_combination_id
1494 FND_GLOBAL.USER_ID,
1495 FND_GLOBAL.USER_ID,
1496 'APXPAWKB',
1497 l_seq_num_profile,
1498 l_accounting_Event_id,
1499 l_inv_rec.org_id);
1500
1501
1502 l_debug_info := 'Calling IBY Single Payment API';
1503 print_debuginfo(l_module_name, l_debug_info,
1504 G_LEVEL_PROCEDURE);
1505
1506 IF l_temp_status <> 'E' THEN
1507
1508 IF p_payment_type_flag IN ('Q', 'M') THEN
1509
1510 IF p_payment_type_flag = 'Q' THEN
1511 l_manual_payment_flag := 'N';
1512
1513 --bug 5982788
1514
1515 select checkrun_name into l_check_rec.Checkrun_name
1516 from ap_checks_all
1517 where check_id = l_check_rec.check_id ;
1518
1519
1520 ELSIF p_payment_type_flag = 'M' THEN
1521
1522 l_manual_payment_flag := 'Y';
1523 --bug 5982788
1524 update ap_checks_all
1525 set checkrun_name = l_check_rec.check_id
1526 where check_id = l_check_rec.check_id ;
1527
1528
1529 select checkrun_name into l_check_rec.Checkrun_name
1530 from ap_checks_all
1531 where check_id = l_check_rec.check_id ;
1532
1533
1534 END IF;
1535
1536
1537 --Bug 5982788
1538
1539 IBY_DISBURSE_SINGLE_PMT_PKG.submit_single_payment(
1540 p_api_version => 1.0,
1541 p_init_msg_list => p_init_msg_list,
1542 p_calling_app_id => 200,
1543 p_calling_app_payreq_cd => l_check_rec.Checkrun_Name,
1544 p_is_manual_payment_flag => l_manual_payment_flag,
1545 p_payment_function => l_inv_rec.payment_function,
1546 p_internal_bank_account_id => p_internal_bank_acct_id,
1547 p_pay_process_profile_id => p_payment_profile_id,
1548 p_payment_method_cd => l_inv_rec.payment_method,
1549 p_legal_entity_id => l_check_rec.legal_entity_id,
1550 p_organization_id => l_inv_rec.org_id,
1551 p_organization_type => 'OPERATING_UNIT',
1552 p_payment_date => nvl(trunc(p_check_date),
1553 trunc(sysdate)),
1554 p_payment_amount => l_amount,
1555 p_payment_currency => l_inv_rec.pmt_currency_code,
1556 p_payee_party_id => l_inv_rec.party_id,
1557 p_payee_party_site_id => l_inv_rec.party_site_id,
1558 p_supplier_site_id => l_inv_rec.vendor_site_id,
1559 p_payee_bank_account_id => l_inv_rec.external_bank_account_id,
1560 p_override_pmt_complete_pt => 'Y',
1561 p_bill_payable_flag => NVL(l_bills_payable, 'N'),
1562 p_anticipated_value_date => NULL,
1563 p_maturity_date => l_maturity_date,
1564 p_payment_document_id => p_payment_document_id,
1565 p_paper_document_number => l_next_check_number,
1566 p_printer_name => l_default_printer,
1567 p_print_immediate_flag => l_print_instr_immed_flag,
1568 p_transmit_immediate_flag => Null,
1569 p_payee_address_line1 => l_apvs_rec.address_line1,
1570 p_payee_address_line2 => l_apvs_rec.address_line2,
1571 p_payee_address_line3 => l_apvs_rec.address_line3,
1572 p_payee_address_line4 => l_apvs_rec.address_line4,
1573 p_payee_address_city => l_apvs_rec.city,
1574 p_payee_address_county => l_apvs_rec.county,
1575 p_payee_address_state => l_apvs_rec.state,
1576 p_payee_address_zip => l_apvs_rec.zip,
1577 p_payee_address_country => l_apvs_rec.country,
1578 p_attribute_category => Null,
1579 p_attribute1 => Null,
1580 p_attribute2 => Null,
1581 p_attribute3 => Null,
1582 p_attribute4 => Null,
1583 p_attribute5 => Null,
1584 p_attribute6 => Null,
1585 p_attribute7 => Null,
1586 p_attribute8 => Null,
1587 p_attribute9 => Null,
1588 p_attribute10 => Null,
1589 p_attribute11 => Null,
1590 p_attribute12 => Null,
1591 p_attribute13 => Null,
1592 p_attribute14 => Null,
1593 p_attribute15 => Null,
1594 x_num_printed_docs => l_num_printed_docs,
1595 x_payment_id => l_payment_id,
1596 x_paper_doc_num => l_paper_doc_num,
1597 x_pmt_ref_num => l_pmt_ref_num,
1598 x_return_status => l_return_status,
1599 x_error_ids_tab => x_errorIds,
1600 x_msg_count => x_msg_count,
1601 x_msg_data => x_msg_data
1602 );
1603
1604 IF (l_return_status = FND_API.G_RET_STS_SUCCESS) THEN
1605
1606 UPDATE AP_CHECKS_ALL
1607 SET payment_id = l_payment_id
1608 WHERE check_id = l_check_rec.check_id;
1609
1610
1611 IF p_payment_type_flag <> 'M' THEN
1612 IF l_paper_doc_num IS NOT NULL THEN
1613 l_check_number := l_paper_doc_num;
1614 ELSE
1615 l_check_number := l_pmt_ref_num;
1616 END IF;
1617
1618 IF l_next_check_number <> l_check_number THEN
1619 UPDATE AP_CHECKS_ALL
1620 SET check_number = l_check_number
1621 WHERE check_id = l_check_rec.check_id;
1622 END IF;
1623 END IF;
1624
1625 x_return_status := l_return_status;
1626
1627 ELSE
1628
1629 x_return_status := l_return_status;
1630
1631 END IF;
1632
1633 END IF; -- p_payment_type_flag
1634
1635
1636 ELSE
1637
1638 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1639
1640 END IF; -- l_temp_status
1641
1642 EXCEPTION
1643
1644 WHEN OTHERS THEN
1645 print_debuginfo(l_module_name, 'Exception occured when '
1646 || 'Payable single payment API fialed. Single payment creation will '
1647 || 'be aborted and no records will be committed for '
1648 || 'the invoice_id: '
1649 || p_invoice_id, G_LEVEL_PROCEDURE
1650 );
1651 print_debuginfo(l_module_name, 'SQLCODE: ' || SQLCODE,
1652 G_LEVEL_PROCEDURE);
1653 print_debuginfo(l_module_name, 'SQLERRM: ' || SQLERRM,
1654 G_LEVEL_PROCEDURE);
1655
1656 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1657 print_debuginfo(l_module_name, 'EXIT',
1658 G_LEVEL_PROCEDURE);
1659
1660 RETURN;
1661 END AP_Pay_Invoice_In_Full;
1662
1663
1664 END AP_PAY_SINGLE_INVOICE_PKG;