Download as pdf or txt
Download as pdf or txt
You are on page 1of 6

CREATE OR REPLACE PACKAGE BODY AP_PAYMENT_EVENT_WF_PKG as

/* $Header: appewfpb.pls 120.6 2011/03/03 07:06:55 sbonala ship $ */

PROCEDURE get_check_info (p_item_type IN VARCHAR2,


p_item_key IN VARCHAR2,
p_actid IN NUMBER,
p_funmode IN VARCHAR2,
p_result OUT NOCOPY VARCHAR2) IS

l_check_id ap_checks_all.check_id%type;
l_org_id ap_checks_all.org_id%type;
l_check_number ap_checks_all.check_number%type;
l_check_date varchar2(20);
l_currency_code ap_checks_all.currency_code%type;
l_payment_amount ap_checks_all.amount%type;
l_email_address IBY_EXTERNAL_PAYEES_ALL.remit_advice_email%type;

l_message_lines1 varchar2(4000):='';
l_message_lines2 varchar2(4000):='';
l_message_lines3 varchar2(4000):='';
l_message_lines4 varchar2(4000):='';
l_message_lines5 varchar2(4000):='';
l_message_lines6 varchar2(4000):='';
l_message_lines7 varchar2(4000):='';
l_message_lines8 varchar2(4000):='';
l_message_lines9 varchar2(4000):='';
l_message_lines10 varchar2(4000):='';
l_message_line varchar2(200):='';

l_role varchar2(100);
l_display_role_name varchar2(100);

--Bug#11774150
l_calendar_aware_alt NUMBER :=2;
l_calendar_aware NUMBER := 1;
l_calendar_unaware NUMBER := 0;

--Introduced calendar_aware parameter in fnd_date.date_to_chardate


--procedure for bug#11774150
CURSOR c_message_lines IS
SELECT '<TR><TD>'||invoice_num||
'</TD><TD>'||fnd_date.date_to_chardate(dateval=>ai.invoice_date,
calendar_aware=>l_calendar_unaware)||
'</TD><TD ALIGN="RIGHT">'||to_char(aip.discount_taken)||
'</TD><TD ALIGN="RIGHT">'||to_char(aip.amount)||'</TD></TR>'
FROM ap_invoice_payments aip, ap_invoices ai
WHERE aip.check_id = l_check_id
AND ai.invoice_id = aip.invoice_id
ORDER BY invoice_num;

BEGIN

/* Get the check_id stored in the attribute check_id */

l_check_id := wf_engine.getitemattrnumber(p_item_type,
p_item_key,
'CHECK_ID');

/* Get the org_id stored in the attribute check_id */

l_org_id := wf_engine.getitemattrnumber(p_item_type,
p_item_key,
'ORG_ID');

/* Set the Org ID context */

if l_org_id is not null


then
fnd_client_info.set_org_context(l_org_id);

end if;

/* Get Basic Check Info */

--Introduced calendar_aware parameter in fnd_date.date_to_chardate


--procedure for bug#11774150
SELECT check_number,
fnd_date.date_to_chardate(dateval=>check_date,calendar_aware=>l_calendar_unaware),
currency_code,
amount
INTO l_check_number,
l_check_date,
l_currency_code,
l_payment_amount
FROM ap_checks
WHERE check_id = l_check_id;

OPEN c_message_lines;

LOOP

FETCH c_message_lines INTO l_message_line;


EXIT WHEN c_message_lines%NOTFOUND;

IF length(l_message_lines1||l_message_line) <= 4000 THEN


l_message_lines1 := l_message_lines1 || l_message_line;
ELSIF length(l_message_lines2||l_message_line) <= 4000 THEN
l_message_lines2 := l_message_lines2 || l_message_line;
ELSIF length(l_message_lines3||l_message_line) <= 4000 THEN
l_message_lines3 := l_message_lines3 || l_message_line;
ELSIF length(l_message_lines4||l_message_line) <= 4000 THEN
l_message_lines4 := l_message_lines4 || l_message_line;
ELSIF length(l_message_lines5||l_message_line) <= 4000 THEN
l_message_lines5 := l_message_lines5 || l_message_line;
ELSIF length(l_message_lines6||l_message_line) <= 4000 THEN
l_message_lines6 := l_message_lines6 || l_message_line;
ELSIF length(l_message_lines7||l_message_line) <= 4000 THEN
l_message_lines7 := l_message_lines7 || l_message_line;
ELSIF length(l_message_lines8||l_message_line) <= 4000 THEN
l_message_lines8 := l_message_lines8 || l_message_line;
ELSIF length(l_message_lines9||l_message_line) <= 4000 THEN
l_message_lines9 := l_message_lines9 || l_message_line;
ELSIF length(l_message_lines10||l_message_line) <= 4000 THEN
l_message_lines10 := l_message_lines10 || l_message_line;
END IF;

END LOOP;

CLOSE c_message_lines;

/* Get Supplier's Remittance Email Address */


get_remit_email_address(l_check_id,l_email_address);

l_role := null;
l_display_role_name := null;

-- BUG 4281586 changed from MAILHTML to MAILHTM2


WF_DIRECTORY.createAdhocRole(role_name => l_role,
role_display_name => l_display_role_name,
email_address => l_email_address,
notification_preference => 'MAILHTM2');

/* Set Check Number to WorkFlow Attribute */


wf_engine.setitemattrnumber(P_item_type,
p_item_key,
'CHECK_NUMBER',
l_check_number);

/* Set Check Date to the WorkFlow Attribute */


wf_engine.setitemattrtext(p_item_type,
p_item_key,
'CHECK_DATE',
l_check_date);

/* Set Payment Currency Code to Workflow Attribute */


wf_engine.setitemattrtext(p_item_type,
p_item_key,
'PAYMENT_CURRENCY',
l_currency_code);

/* Set Check Amount to the Workflow Attribute */


wf_engine.setitemattrnumber(p_item_type,
p_item_key,
'CHECK_AMOUNT',
l_payment_amount);

/* Set Email Address to Workflow Adhoc Role */


wf_engine.setitemattrtext(p_item_type,
p_item_key,
'EMAIL_ADDRESS',
l_role);

/* Set Invoices List Information to the Invoices List Attribute */


wf_engine.setitemattrtext(p_item_type,
p_item_key,
'INVOICES_LIST1',
l_message_lines1);
wf_engine.setitemattrtext(p_item_type,
p_item_key,
'INVOICES_LIST2',
l_message_lines2);
wf_engine.setitemattrtext(p_item_type,
p_item_key,
'INVOICES_LIST3',
l_message_lines3);
wf_engine.setitemattrtext(p_item_type,
p_item_key,
'INVOICES_LIST4',
l_message_lines4);
wf_engine.setitemattrtext(p_item_type,
p_item_key,
'INVOICES_LIST5',
l_message_lines5);
wf_engine.setitemattrtext(p_item_type,
p_item_key,
'INVOICES_LIST6',
l_message_lines6);
wf_engine.setitemattrtext(p_item_type,
p_item_key,
'INVOICES_LIST7',
l_message_lines7);
wf_engine.setitemattrtext(p_item_type,
p_item_key,
'INVOICES_LIST8',
l_message_lines8);
wf_engine.setitemattrtext(p_item_type,
p_item_key,
'INVOICES_LIST9',
l_message_lines9);
wf_engine.setitemattrtext(p_item_type,
p_item_key,
'INVOICES_LIST10',
l_message_lines10);

END get_check_info;
-------------------------------------------------------------------------------
------- Procedure get_remit_email_address returns the Remittance Email Address
------- of the Supplier. This procedure is called by get_check_info and rule_function
------- procedures
-------------------------------------------------------------------------------

PROCEDURE get_remit_email_address (p_check_id in NUMBER,


p_email_address out NOCOPY VARCHAR2) is

l_vendor_id po_vendor_sites_all.vendor_id%type;
l_vendor_site_id po_vendor_sites_all.vendor_site_id%type;

BEGIN

SELECT vendor_id,
vendor_site_id
INTO l_vendor_id,
l_vendor_site_id
FROM ap_checks
WHERE check_id = p_check_id;

--bug6119080, changed the query to fetch the email address from the
--correct table.
SELECT remit_advice_email
INTO p_email_address
FROM IBY_EXTERNAL_PAYEES_ALL
WHERE supplier_site_id = l_vendor_site_id;

END get_remit_email_address;

-------------------------------------------------------------------------------
------- Procedure get_remit_email_address returns the Remittance Email Address
------- of the Supplier. This procedure is called by get_check_info and rule_function
------- procedures
-------------------------------------------------------------------------------------------

PROCEDURE get_check_status (p_check_id in NUMBER,


p_check_status out NOCOPY VARCHAR2) is

BEGIN

SELECT status_lookup_code
INTO p_check_status
FROM ap_checks
WHERE check_id = p_check_id;

END get_check_status;

------ Procedure rule_function is called by the Subscription program. Rule Function determines
------ whether WorkFlow Program should be called.
------ Rule Defined is that to call the Workflow program only if the Remittance Email Address
------ is available for the Supplier.
-------------------------------------------------------------------------------------------

FUNCTION rule_function (p_subscription in RAW,


p_event in out NOCOPY WF_EVENT_T) return varchar2 is

l_rule VARCHAR2(20);
l_parameter_list wf_parameter_list_t := wf_parameter_list_t();
l_parameter_t wf_parameter_t:= wf_parameter_t(null, null);
i_parameter_name l_parameter_t.name%type;
i_parameter_value l_parameter_t.value%type;
i pls_integer;

l_check_id l_parameter_t.value%type;
l_org_id l_parameter_t.value%type;
l_email_address IBY_EXTERNAL_PAYEES_ALL.remit_advice_email%type;
l_check_status ap_checks_all.status_lookup_code%type;

BEGIN

l_parameter_list := p_event.getParameterList();
if l_parameter_list is not null
then
i := l_parameter_list.FIRST;
while ( i <= l_parameter_list.LAST )
loop
i_parameter_name := null;
i_parameter_value := null;

i_parameter_name := l_parameter_list(i).getName();
i_parameter_value := l_parameter_list(i).getValue();

if i_parameter_name is not null


then
if i_parameter_name = 'CHECK_ID'
then
l_check_id := i_parameter_value;
elsif i_parameter_name = 'ORG_ID'
then
l_org_id := i_parameter_value;
end if;
end if;
i := l_parameter_list.NEXT(i);
end loop;

end if;

/* Set the Org_id Context */

if l_org_id is not null


then

--bug6119080, commented the existing code and added the new the code
--to properly set the org context.

-- fnd_client_info.set_org_context(l_org_id);
mo_global.set_policy_context('S',l_org_id);

end if;

/* Convert check_id into number as function get_value returns


it as a varchar2 */

get_remit_email_address(to_number(l_check_id),l_email_address);

/* Get the status of the Check */

get_check_status(to_number(l_check_id),l_check_status);

/* if email address is missing, then do not execute WF program */

if l_email_address is not null


then

/* if check is voided, then do not execute WF program */

if l_check_status <> 'VOIDED'


then

l_rule := wf_rule.default_rule(p_subscription,p_event);
end if;

end if;

return ('SUCCESS');

END rule_function;

END AP_PAYMENT_EVENT_WF_PKG;

You might also like