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