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

Start typing and press Enter to search