Auto Apply given receipts to Invoices in oracle apps

Introduction

This Post illustrates the steps required for Auto Apply given receipts to Invoices

Script to Auto Apply given receipts to invoices.

CREATE OR REPLACE PACKAGE BODY APPS.XX_RECEIPT_APPLICATION_PKG

IS

PROCEDURE MAIN(

errbuf                OUT      VARCHAR2,

retcode               OUT      NUMBER,

PR_GL_DATE            IN       VARCHAR2)

IS

 

v_date           date :=fnd_date.canonical_to_date(PR_GL_DATE);

v_end_date       date;

v_period_status  varchar2(20);

 

BEGIN

begin

SELECT ps.end_date “Period End Date” ,

DECODE(ps.closing_status, ‘O’,’Open’ ,

‘N’,’Never Opened’ ,

‘F’,’Future Enterable’ ,

‘C’,’Closed’ ,’Unknown’) “Period Status”

into v_end_date,v_period_status

from gl_period_statuses ps ,

gl_sets_of_books sob ,

fnd_application_vl fnd

where ps.application_id   IN (101)

and sob.set_of_books_id       = ps.set_of_books_id

and fnd.application_id        = ps.application_id

and ps.adjustment_period_flag = ‘N’

and sob.set_of_books_id       =2021

and v_date  BETWEEN TRUNC(ps.start_date) AND TRUNC(ps.end_date);

 

Exception

when no_data_found then

printlog(‘No data found while validating gl date passed in parameter’);

end;

 

printlog(‘date passed b ‘||v_end_date);

if v_period_status =’Open’ then

v_date:=v_end_date;

else

v_date:=SYSDATE;

end if;

RECEIPT_APPLICATION(v_date);

END;

PROCEDURE RECEIPT_APPLICATION(PR_GL_DATE VARCHAR2)

IS

 

CURSOR C1 IS

SELECT *

FROM xx_AR_RECEIPT_TEST;

— WHERE invoice_number = ‘INDOPD0000301341’;

 

l_return_status   varchar2(1);

l_msg_count       number;

l_msg_data        varchar2(240);

p_count           number := 0;

v_invoice_ps_id   number;

x_cash_receipt_id number;

v_apply_date      date:=PR_GL_DATE;

v_gl_date         date:=PR_GL_DATE;

x_inv_due_amount  number;

x_rec_due_amount  number;

x_err_flag        varchar(1);

x_err_msg         varchar2(1024);

 

BEGIN

—————————————–

— —- Set the applications context—–

—————————————–

begin

mo_global.set_policy_context(‘S’,gn_org_id);

end;

fnd_global.apps_initialize (gn_user_id, gn_resp_id, gn_resp_appl_id);

 

printlog(‘USER_ID=’||gn_user_id ||’,’||’RESP_ID=’ ||gn_resp_id||’,’||

‘APPLICATION_ID=’||gn_resp_appl_id);

 

printlog(‘Date Passed =’||v_apply_date);

FOR I IN C1 LOOP

 

x_err_flag        := ‘N’;

x_err_msg         := null;

v_invoice_ps_id   := null;

x_cash_receipt_id := null;

x_inv_due_amount  :=0;

x_rec_due_amount  :=0;

 

———————————————————————————–

——Validation to check invoice due amount remaining is not eqal to zero—–

———————————————————————————–

 

begin

SELECT aps.amount_due_remaining

into x_inv_due_amount

from ar_payment_schedules_all aps, hz_cust_accounts hca

where 1 = 1

and hca.account_number = i.bill_customer_number

and aps.customer_id    = hca.cust_account_id

and aps.trx_number     = i.invoice_number

and aps.status         = ‘OP’;

Exception

when NO_DATA_FOUND then

x_err_flag :=’Y’;

x_err_msg  := (‘No data found while validating invoice due amount for invoice number=’||i.invoice_number);

printlog(‘No data found while validating invoice due amount for invoice number=’||i.invoice_number);

when TOO_MANY_ROWS then

x_err_flag :=’Y’;

x_err_msg  := (‘Found too many rows while validating invoice due amount for invoice number=’||i.invoice_number);

printlog(‘Found too many rows while validating invoice due amount for invoice number=’||i.invoice_number);

end;

 

——————————————————————–

——Validation to check receipt amount is not eqal to zero—–

———————————————————————

 

begin

SELECT -aps.amount_due_remaining

into x_rec_due_amount

from ar_payment_schedules_all aps, hz_cust_accounts hca

where 1 = 1

and hca.account_number = i.bill_customer_number

and aps.customer_id    = hca.cust_account_id

and aps.trx_number     = i.receipt_number

and aps.status         = ‘OP’;

Exception

when NO_DATA_FOUND then

x_err_flag :=’Y’;

x_err_msg  := (‘No data found while validating receipt due amount for receipt number=’||i.receipt_number);

printlog(‘No data found while validating receipt due amount for receipt number=’||i.receipt_number);

when TOO_MANY_ROWS then

x_err_flag :=’Y’;

x_err_msg  := (‘Found too many rows while validating receipt due amount for receipt number=’||i.receipt_number);

printlog(‘Found too many rows while validating receipt due amount for receipt number=’||i.receipt_number);

end;

 

 

IF i.apply_amount>0 and x_inv_due_amount >0 and x_rec_due_amount>0  then

 

———————————————————————-

——Get payment schedule id for applying receipt to the invoice—–

———————————————————————-

begin

SELECT APS.Payment_Schedule_Id

into v_invoice_ps_id

from ar_payment_schedules_all aps, hz_cust_accounts hca

where 1 = 1

and hca.account_number = i.bill_customer_number

and aps.customer_id    = hca.cust_account_id

and aps.trx_number     = i.invoice_number

and aps.status         = ‘OP’;

exception

when NO_DATA_FOUND then

x_err_flag := ‘Y’;

x_err_msg  :=(‘NO1- While Validating Invoice matching records not found for the customer number=’||i.bill_customer_number

||’,’||’Invoice number=’||i.invoice_number||’,’||’Receipt number=’||i.receipt_number);

printlog(‘NO1- While Validating Invoice matching records not found for the customer number=’||i.bill_customer_number

||’,’||’Invoice number=’||i.invoice_number||’,’||’Receipt number=’||i.receipt_number);

when TOO_MANY_ROWS then

x_err_flag := ‘Y’;

x_err_msg  :=(‘TOO1- While Validating Invoice found Duplicate records for the customer number=’||i.bill_customer_number||’,’||’Invoice_number=’

||i.invoice_number||’,’||’Receipt number=’||i.receipt_number);

printlog(‘TOO1- While Validating Invoice found Duplicate records for the customer number=’||i.bill_customer_number||’,’||’Invoice_number=’

||i.invoice_number||’,’||’Receipt number=’||i.receipt_number);

when others then

x_err_flag := ‘Y’;

x_err_msg  :=(‘OT1- While Validating Invoice some error occured for the customer number=’||i.bill_customer_number||’,’||’Invoice_number=’

||i.invoice_number||’,’||’Receipt number=’||i.receipt_number);

printlog(‘OT1- While Validating Invoice some error occured for the customer number=’||i.bill_customer_number||’,’||’Invoice_number=’

||i.invoice_number||’,’||’Receipt number=’||i.receipt_number);

 

end;

 

———————————————————————-

——Get cash receipt  id for applying receipt to the invoice——–

———————————————————————-

begin

SELECT aps.cash_receipt_id

into x_cash_receipt_id

from ar_payment_schedules_all aps, hz_cust_accounts hca

where 1 = 1

and hca.account_number = i.bill_customer_number

and aps.customer_id = hca.cust_account_id

and aps.trx_number = i.receipt_number

and aps.status=’OP’;

exception

when NO_DATA_FOUND then

x_err_flag := ‘Y’;

x_err_msg  :=(‘NO2- While Validating Receipt matching records not found for the customer number=’||i.bill_customer_number

||’,’||’Invoice number=’||i.invoice_number||’,’||’Receipt number=’||i.receipt_number);

printlog(‘NO2- While Validating Receipt matching records not found for the customer number=’||i.bill_customer_number

||’,’||’Invoice number=’||i.invoice_number||’,’||’Receipt number=’||i.receipt_number);

when TOO_MANY_ROWS then

x_err_flag := ‘Y’;

x_err_msg  :=(‘TOO2- While Validating Receipt found Duplicate records for the customer number=’||i.bill_customer_number||’,’||’Invoice_number=’

||i.invoice_number||’,’||’Receipt number=’||i.receipt_number);

printlog(‘TOO2- While Validating Receipt found Duplicate records for the customer number=’||i.bill_customer_number||’,’||’Invoice_number=’

||i.invoice_number||’,’||’Receipt number=’||i.receipt_number);

when others then

x_err_flag := ‘Y’;

x_err_msg  :=(‘OT2- While Validating Receipt some error occured for the customer number=’||i.bill_customer_number||’,’||’Invoice_number=’

||i.invoice_number||’,’||’Receipt number=’||i.receipt_number);

printlog(‘OT2 – While Validating Receipt some error occured for the customer number=’||i.bill_customer_number||’,’||’Invoice_number=’

||i.invoice_number||’,’||’Receipt number=’||i.receipt_number);

end;

 

——————————————

——applying receipt to the invoice—–

——————————————

IF x_err_flag = ‘N’ THEN

 

AR_RECEIPT_API_PUB.APPLY(p_api_version                 => 1.0,

p_init_msg_list               => FND_API.G_TRUE,

p_commit                      => FND_API.G_TRUE,

p_validation_level            => FND_API.G_VALID_LEVEL_FULL,

p_cash_receipt_id             => x_cash_receipt_id,

p_apply_date                  => v_apply_date,

p_apply_gl_date               => v_gl_date,

p_applied_payment_schedule_id => v_invoice_ps_id,

p_org_id                      => gn_org_id,

p_amount_applied              => i.apply_amount,

x_return_status               => l_return_status,

x_msg_count                   => l_msg_count,

x_msg_data                    => l_msg_data);

 

 

printlog(‘ API Status =’ || l_return_status);

printlog(‘Error Count =’ || l_msg_count);

 

if l_msg_count = 1 Then

printlog(‘l_msg_data ‘ || l_msg_data);

x_err_flag:=’Y’;

x_err_msg := l_msg_data;

elsif l_msg_count > 1 Then

x_err_flag:=’Y’;

x_err_msg :=’Multiple errors during API execution, Please check the log for the errors’;

loop

p_count    := p_count + 1;

l_msg_data := FND_MSG_PUB.Get(FND_MSG_PUB.G_NEXT, FND_API.G_FALSE);

 

if l_msg_data is NULL Then

exit;

end if;

printlog(‘Message ‘ || p_count || ‘. ‘ || l_msg_data);

end loop;

 

else

printlog(‘Receipt Number=’||i.receipt_number||’,’||’Invoice Number=’||i.invoice_number||’,’||’apply amount=’||i.apply_amount);

end if;

END IF;

else

x_err_flag :=’Y’;

x_err_msg  :=(‘Apply amount given is 0  for the invoice number ‘||i.invoice_number||’ or remaining due amount is

0 or program ran into exception for either invoice or receipt—>Please check log’);

end if;

 

update xx_ar_receipt_test

set    error_flag    =x_err_flag,

error_msg     =x_err_msg

where  receipt_number=i.receipt_number

and    invoice_number=i.invoice_number;

commit;

END LOOP;

 

end;

 

PROCEDURE printlog (p_text_mesg VARCHAR2)

IS

BEGIN

fnd_file.put_line (fnd_file.LOG, p_text_mesg);

EXCEPTION

WHEN OTHERS

THEN

fnd_file.put_line (fnd_file.LOG, ‘Error in “printlog” procedure’);

END;

END XX_RECEIPT_APPLICATION_PKG;

Queries

Do drop a note by writing us at doyen.ebiz@gmail.com or use the comment section below to ask your questions.

 

Recent Posts