DBA Data[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;