0% found this document useful (0 votes)
60 views25 pages

Item Workflow

This document contains code for an Oracle database package that handles workflows for item creation requests. It includes procedures for launching an approval workflow by creating a new workflow item, assigning attributes, and starting the workflow process. It also contains a procedure for approving the first approver that checks the workflow status and retrieves additional details about the request.

Uploaded by

Oracle developer
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
60 views25 pages

Item Workflow

This document contains code for an Oracle database package that handles workflows for item creation requests. It includes procedures for launching an approval workflow by creating a new workflow item, assigning attributes, and starting the workflow process. It also contains a procedure for approving the first approver that checks the workflow status and retrieves additional details about the request.

Uploaded by

Oracle developer
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 25

CREATE OR REPLACE PACKAGE BODY APPS.

xxdnl_item_creation_pkg
IS

PROCEDURE launch_workflow (p_item_request_id IN NUMBER)


IS
l_itemtype VARCHAR2 (30) := 'DNLITMAP';
l_itemkey VARCHAR2 (300);
ln_seq NUMBER;
nl VARCHAR2 (1) := fnd_global.NEWLINE;
lv_approver1 VARCHAR2 (240);
lv_approver2 VARCHAR2 (240);
lv_approver3 VARCHAR2 (240);
lv_approver4 VARCHAR2 (240);
lv_approver5 VARCHAR2 (240);
lv_approver6 VARCHAR2 (240);
lv_approver7 VARCHAR2 (240);
lv_approver8 VARCHAR2 (240);
lv_file_note VARCHAR2 (240);
lv_creator VARCHAR2 (240);
l_file_cnt number;
lv_adhoc_role_name varchar2(240) := 'XX_FYI_ROLE';
lv_adhoc_usr_role_name varchar2(240) := 'XX_FYI_ROLE';
lv_role_users varchar2(4000);
ln_role_users_count number;
ln_role_count number;
lv_ou_name varchar2(240);
lv_type varchar2(100);

CURSOR c_getapprovers(p_ou varchar2,p_type varchar2)


IS
select ATTRIBUTE1,ATTRIBUTE2,ATTRIBUTE3
from fnd_lookup_Values where lookup_type = 'XXDNL_ITEM_CREATION_APPROVERS'
and description = p_ou and tag = p_type;

cursor c_getcreator is
select user_name from fnd_user where user_id in
(select created_by from xxdnl_item_req_hdr where item_req_id =
p_item_request_id);

CURSOR c_Get_type
is
select operating_unit,ITEM_CLASS from xxdnl_item_req_hdr where item_req_id =
p_item_request_id;

---Added on 10/8/17 to remove duplicate wokflow issue.


CURSOR c_get_open_notification is
select count(ITEM_KEY) from apps.wf_notifications
where message_type = 'DNLITMAP' and status = 'OPEN'
and user_key = p_item_request_id
AND MESSAGE_NAME NOT LIKE '%FYI%';

ln_count_openwf number;

BEGIN

OPEN c_Get_type;
FETCH c_Get_type INTO lv_ou_name,lv_type;
CLOSE c_Get_type;

OPEN c_getapprovers(lv_ou_name,lv_type);

FETCH c_getapprovers
INTO lv_approver1, lv_approver2, lv_approver3;

CLOSE c_getapprovers;

OPEN c_getcreator;
FETCH c_getcreator INTO lv_creator ;
CLOSE c_getcreator;

if lv_approver1 is not null then

lv_role_users := lv_role_users ||' '|| lv_approver1;

end if;

if lv_approver2 is not null then

lv_role_users := lv_role_users ||' '|| lv_approver2;

end if;

if lv_approver3 is not null then

lv_role_users := lv_role_users ||' '|| lv_approver3;

end if;

OPEN c_get_open_notification;
fetch c_get_open_notification into ln_count_openwf ;
close c_get_open_notification;

IF ln_count_openwf = 0 THEN

SELECT XXDNL_ITEM_WORKFLOW_SEQ.NEXTVAL
INTO ln_seq
FROM DUAL;

l_itemkey := 'APPROVAL-' || ln_seq;

BEGIN
UPDATE xxdnl_item_req_hdr cp
SET cp.item_key = l_itemkey,
cp.item_type = l_itemtype
WHERE cp.item_req_id = p_item_request_id;

COMMIT;
END;

BEGIN

UPDATE xxdnl_item_req_hdr cp
SET APPROVER1_STATUS = NULL,
APPROVER1_DATE = NULL,
APPROVER1_COMMENTS = NULL,
APPROVER2_STATUS = NULL,
APPROVER2_DATE = NULL,
APPROVER2_COMMENTS = NULL,
APPROVER3_STATUS = NULL,
APPROVER3_DATE = NULL,
APPROVER3_COMMENTS = NULL
WHERE cp.item_req_id = p_item_request_id;

COMMIT;

EXCEPTION
WHEN OTHERS THEN
NULL;

END ;

wf_engine.createprocess (l_itemtype, l_itemkey, 'DNLITEMAP');


/*WF_ENGINE.SETITEMUSERKEY(ITEMTYPE => L_ITEMTYPE,
ITEMKEY => L_ITEMKEY,
USERKEY => 'USERKEY: ' || P_CAPEX_ID);*/
wf_engine.setitemuserkey (itemtype => l_itemtype,
itemkey => l_itemkey,
userkey => p_item_request_id
);

/*WF_ENGINE.SETITEMOWNER(ITEMTYPE => L_ITEMTYPE,


ITEMKEY => L_ITEMKEY,
OWNER => 'SYSADMIN');*/
wf_engine.setitemowner (itemtype => l_itemtype,
itemkey => l_itemkey,
owner => lv_creator
);
wf_engine.setitemattrnumber (itemtype => l_itemtype,
itemkey => l_itemkey,
aname => 'ITEM_REQ_ID',
avalue => p_item_request_id
);

wf_engine.setitemattrtext (itemtype => l_itemtype,


itemkey => l_itemkey,
aname => 'APPROVER1',
avalue => lv_approver1
);
wf_engine.setitemattrtext (itemtype => l_itemtype,
itemkey => l_itemkey,
aname => 'APPROVER2',
avalue => lv_approver2
);
wf_engine.setitemattrtext (itemtype => l_itemtype,
itemkey => l_itemkey,
aname => 'APPROVER3',
avalue => lv_approver3
);
wf_engine.setitemattrtext (itemtype => l_itemtype,
itemkey => l_itemkey,
aname => 'CREATOR',
avalue => lv_creator
);

---Added on 05-OCT-2017 for role creation Start

/*
select count(1) into
ln_role_count
from apps.wf_local_roles
where name = lv_file_note;

IF ln_role_count = 0 THEN

wf_directory.createadhocrole(role_name => lv_file_note,


role_display_name => lv_file_note);
END IF;

SELECT COUNT (1)


INTO ln_role_users_count
FROM apps.wf_user_roles
WHERE ROLE_NAME = lv_file_note;

IF ln_role_users_count > 0 THEN


--------------------------------
--Removing users from Adhoc Role
--------------------------------
apps.wf_directory.removeusersfromadhocrole
(role_name => lv_file_note);

-- dbms_output.put_line("Users removed from Role!");


END IF;

wf_directory.adduserstoadhocrole(role_name=> lv_file_note,
role_users=> lv_role_users );

wf_engine.setitemattrtext (itemtype => l_itemtype,


itemkey => l_itemkey,
aname => 'FYI_ROLE',
avalue => lv_file_note
);

*/

---Added on 05-OCT-2017 for role creation End

wf_engine.setitemattrtext
(itemtype => l_itemtype,
itemkey => l_itemkey,
aname => 'FS_NOTIF',
avalue =>
'PLSQL:xxdnl_item_creation_pkg.get_notif/'
|| p_item_request_id
|| ':'
|| l_itemkey
|| ':'
|| '&'
|| '#NID'
);

---Start attachment

wf_engine.startprocess (l_itemtype, l_itemkey);


COMMIT;

END IF; --count wf condition ends.

END launch_workflow;

PROCEDURE approver1_approve (
itemtype IN VARCHAR2,
itemkey IN VARCHAR2,
actid IN NUMBER,
funcmode IN VARCHAR2,
RESULT IN OUT VARCHAR2
)
IS
/*V_CPXID atl_capex_hdr_all.CAPEX_ID%TYPE;
V_MGR_APP atl_capex_hdr_all.PROJECT_LEADER_NAME%TYPE;
V_MGR_WF_NOTE atl_capex_hdr_all.PROJECT_LEADER_MSG%TYPE;*/
CURSOR mgr_wf_note (p_filenote_id NUMBER)
IS
SELECT SUBSTR (b.text_value, 1, 1000) --21460
FROM wf_notifications a,
wf_notification_attributes b,
xxdnl_item_req_hdr c
WHERE a.notification_id = b.notification_id
AND a.item_key = c.item_key
AND a.MESSAGE_TYPE = 'DNLITMAP'
AND b.NAME = 'WF_NOTE'
AND a.status IN ('CLOSED', 'OPEN')
AND a.message_name = 'MSG_APPROVER1'
AND c.item_req_id = p_filenote_id;

CURSOR c_get_status(p_filenote_id NUMBER) is


select count(1) from
wf_notifications
where message_type = itemtype and
item_key = itemkey and
status = 'OPEN' and
message_name not like '%FYI%' and
user_key = p_filenote_id;

---Start

CURSOR c_getapprovers(p_filenote_hdr_id number)


IS
SELECT approver1_name, approver2_name, approver3_name,
approver4_name, approver5_name, approver6_name,
approver7_name, approver8_name, filenote_ref_no,
(SELECT user_name
FROM fnd_user
WHERE user_id = a.created_by)
FROM xxdpl_file_note_hdr a
WHERE filenote_hdr_id = p_filenote_hdr_id;

lv_approver1 VARCHAR2 (240);


lv_approver2 VARCHAR2 (240);
lv_approver3 VARCHAR2 (240);
lv_approver4 VARCHAR2 (240);
lv_approver5 VARCHAR2 (240);
lv_approver6 VARCHAR2 (240);
lv_approver7 VARCHAR2 (240);
lv_approver8 VARCHAR2 (240);
lv_file_note VARCHAR2 (240);
lv_creator VARCHAR2 (240);
l_file_cnt number;
lv_adhoc_role_name varchar2(240) := 'XX_FYI_ROLE';
lv_adhoc_usr_role_name varchar2(240) := 'XX_FYI_ROLE';
lv_role_users varchar2(4000);
ln_role_users_count number;
ln_role_count number;

----End

ln_filenote_id NUMBER;
lv_mgr_name VARCHAR2 (240);
v_mgr_wf_note VARCHAR2 (4000);
ln_status_cnt NUMBER;
BEGIN
ln_filenote_id :=
wf_engine.getitemattrnumber (itemtype => itemtype,
itemkey => itemkey,
aname => 'ITEM_REQ_ID'
);

BEGIN

OPEN c_get_status(ln_filenote_id);
FETCH c_get_status INTO ln_status_cnt;
CLOSE c_get_status;

END;

BEGIN
OPEN mgr_wf_note (ln_filenote_id);

FETCH mgr_wf_note
INTO v_mgr_wf_note;

CLOSE mgr_wf_note;

IF ln_filenote_id IS NOT NULL


THEN
BEGIN
UPDATE xxdnl_item_req_hdr h
SET h.approver1_status = 'COMPLETED',
h.approver1_date = SYSDATE,
/*H.PROJECT_LEADER_NAME = V_MGR_APP,*/
h.approver1_comments = v_mgr_wf_note
WHERE h.item_req_id = ln_filenote_id;

COMMIT;
END;

IF ln_status_cnt = 0 THEN

UPDATE xxdnl_item_req_hdr h
SET STATUS = 'APPROVED'
WHERE h.item_req_id = ln_filenote_id;
COMMIT;

END IF;

RESULT := 'COMPLETED:Y';
ELSE
RESULT := 'COMPLETED:N';
END IF;
--RESULT := 'COMPLETED:Y';
END;
END;

PROCEDURE approver1_reject (
itemtype IN VARCHAR2,
itemkey IN VARCHAR2,
actid IN NUMBER,
funcmode IN VARCHAR2,
RESULT IN OUT VARCHAR2
)
IS
/*V_CPXID atl_capex_hdr_all.CAPEX_ID%TYPE;
V_MGR_APP atl_capex_hdr_all.PROJECT_LEADER_NAME%TYPE;
V_MGR_WF_NOTE atl_capex_hdr_all.PROJECT_LEADER_MSG%TYPE;*/
CURSOR mgr_wf_note (p_filenote_id NUMBER)
IS
SELECT SUBSTR (b.text_value, 1, 1000) --21460
FROM wf_notifications a,
wf_notification_attributes b,
xxdnl_item_req_hdr c
WHERE a.notification_id = b.notification_id
AND a.item_key = c.item_key
AND a.MESSAGE_TYPE = 'DNLITMAP'
AND b.NAME = 'WF_NOTE'
AND a.status IN ('CLOSED', 'OPEN')
AND a.message_name = 'MSG_APPROVER1'
AND c.item_req_id = p_filenote_id;

---Start

CURSOR c_getapprovers(p_filenote_hdr_id number)


IS
SELECT approver1_name, approver2_name, approver3_name,
approver4_name, approver5_name, approver6_name,
approver7_name, approver8_name, filenote_ref_no,
(SELECT user_name
FROM fnd_user
WHERE user_id = a.created_by)
FROM xxdpl_file_note_hdr a
WHERE filenote_hdr_id = p_filenote_hdr_id;

lv_approver1 VARCHAR2 (240);


lv_approver2 VARCHAR2 (240);
lv_approver3 VARCHAR2 (240);

lv_approver4 VARCHAR2 (240);


lv_approver5 VARCHAR2 (240);
lv_approver6 VARCHAR2 (240);
lv_approver7 VARCHAR2 (240);
lv_approver8 VARCHAR2 (240);
lv_file_note VARCHAR2 (240);
lv_creator VARCHAR2 (240);
l_file_cnt number;
lv_adhoc_role_name varchar2(240) := 'XX_FYI_ROLE';
lv_adhoc_usr_role_name varchar2(240) := 'XX_FYI_ROLE';
lv_role_users varchar2(4000);
ln_role_users_count number;
ln_role_count number;

---End

ln_filenote_id NUMBER;
lv_mgr_name VARCHAR2 (240);
v_mgr_wf_note VARCHAR2 (4000);
BEGIN
ln_filenote_id :=
wf_engine.getitemattrnumber (itemtype => itemtype,
itemkey => itemkey,
aname => 'ITEM_REQ_ID'
);

BEGIN
OPEN mgr_wf_note (ln_filenote_id);

FETCH mgr_wf_note
INTO v_mgr_wf_note;

CLOSE mgr_wf_note;

IF ln_filenote_id IS NOT NULL


THEN
BEGIN
UPDATE xxdnl_item_req_hdr h
SET h.approver1_status = 'REJECTED',
h.status = 'REJECTED',
h.approver1_date = SYSDATE,
/*H.PROJECT_LEADER_NAME = V_MGR_APP,*/
h.approver1_comments = v_mgr_wf_note
WHERE h.item_req_id = ln_filenote_id;

COMMIT;
END;
RESULT := 'COMPLETED:Y';
ELSE
RESULT := 'COMPLETED:N';
END IF;
--RESULT := 'COMPLETED:Y';
END;
END;

PROCEDURE approver2_approve (
itemtype IN VARCHAR2,
itemkey IN VARCHAR2,
actid IN NUMBER,
funcmode IN VARCHAR2,
RESULT IN OUT VARCHAR2
)
IS
/*V_CPXID atl_capex_hdr_all.CAPEX_ID%TYPE;
V_MGR_APP atl_capex_hdr_all.PROJECT_LEADER_NAME%TYPE;
V_MGR_WF_NOTE atl_capex_hdr_all.PROJECT_LEADER_MSG%TYPE;*/
CURSOR mgr_wf_note (p_filenote_id NUMBER)
IS
SELECT SUBSTR (b.text_value, 1, 1000) --21460
FROM wf_notifications a,
wf_notification_attributes b,
xxdnl_item_req_hdr c
WHERE a.notification_id = b.notification_id
AND a.item_key = c.item_key
AND a.MESSAGE_TYPE = 'DNLITMAP'
AND b.NAME = 'WF_NOTE'
AND a.status IN ('CLOSED', 'OPEN')
AND a.message_name = 'MSG_APPROVER2'
AND c.item_req_id = p_filenote_id;

CURSOR c_get_status(p_filenote_id NUMBER) is


select count(1) from
wf_notifications
where message_type = itemtype and
item_key = itemkey and
status = 'OPEN' and
message_name not like '%FYI%' and
user_key = p_filenote_id;

---Start

CURSOR c_getapprovers(p_filenote_hdr_id number)


IS
SELECT approver1_name, approver2_name, approver3_name,
approver4_name, approver5_name, approver6_name,
approver7_name, approver8_name, filenote_ref_no,
(SELECT user_name
FROM fnd_user
WHERE user_id = a.created_by)
FROM xxdpl_file_note_hdr a
WHERE filenote_hdr_id = p_filenote_hdr_id;

lv_approver1 VARCHAR2 (240);


lv_approver2 VARCHAR2 (240);
lv_approver3 VARCHAR2 (240);
lv_approver4 VARCHAR2 (240);
lv_approver5 VARCHAR2 (240);
lv_approver6 VARCHAR2 (240);
lv_approver7 VARCHAR2 (240);
lv_approver8 VARCHAR2 (240);
lv_file_note VARCHAR2 (240);
lv_creator VARCHAR2 (240);
l_file_cnt number;
lv_adhoc_role_name varchar2(240) := 'XX_FYI_ROLE';
lv_adhoc_usr_role_name varchar2(240) := 'XX_FYI_ROLE';
lv_role_users varchar2(4000);
ln_role_users_count number;
ln_role_count number;

----End

ln_filenote_id NUMBER;
lv_mgr_name VARCHAR2 (240);
v_mgr_wf_note VARCHAR2 (4000);
ln_status_cnt NUMBER;
BEGIN
ln_filenote_id :=
wf_engine.getitemattrnumber (itemtype => itemtype,
itemkey => itemkey,
aname => 'ITEM_REQ_ID'
);

BEGIN

OPEN c_get_status(ln_filenote_id);
FETCH c_get_status INTO ln_status_cnt;
CLOSE c_get_status;

END;

BEGIN
OPEN mgr_wf_note (ln_filenote_id);

FETCH mgr_wf_note
INTO v_mgr_wf_note;

CLOSE mgr_wf_note;

IF ln_filenote_id IS NOT NULL


THEN
BEGIN
UPDATE xxdnl_item_req_hdr h
SET h.approver2_status = 'COMPLETED',
h.approver2_date = SYSDATE,
/*H.PROJECT_LEADER_NAME = V_MGR_APP,*/
h.approver2_comments = v_mgr_wf_note
WHERE h.item_req_id = ln_filenote_id;

COMMIT;
END;

IF ln_status_cnt = 0 THEN
UPDATE xxdnl_item_req_hdr h
SET STATUS = 'APPROVED'
WHERE h.item_req_id = ln_filenote_id;
COMMIT;

END IF;

RESULT := 'COMPLETED:Y';
ELSE
RESULT := 'COMPLETED:N';
END IF;
--RESULT := 'COMPLETED:Y';
END;
END;

PROCEDURE approver2_reject (
itemtype IN VARCHAR2,
itemkey IN VARCHAR2,
actid IN NUMBER,
funcmode IN VARCHAR2,
RESULT IN OUT VARCHAR2
)
IS
/*V_CPXID atl_capex_hdr_all.CAPEX_ID%TYPE;
V_MGR_APP atl_capex_hdr_all.PROJECT_LEADER_NAME%TYPE;
V_MGR_WF_NOTE atl_capex_hdr_all.PROJECT_LEADER_MSG%TYPE;*/
CURSOR mgr_wf_note (p_filenote_id NUMBER)
IS
SELECT SUBSTR (b.text_value, 1, 1000) --21460
FROM wf_notifications a,
wf_notification_attributes b,
xxdnl_item_req_hdr c
WHERE a.notification_id = b.notification_id
AND a.item_key = c.item_key
AND a.MESSAGE_TYPE = 'DNLITMAP'
AND b.NAME = 'WF_NOTE'
AND a.status IN ('CLOSED', 'OPEN')
AND a.message_name = 'MSG_APPROVER2'
AND c.item_req_id = p_filenote_id;

---Start

CURSOR c_getapprovers(p_filenote_hdr_id number)


IS
SELECT approver1_name, approver2_name, approver3_name,
approver4_name, approver5_name, approver6_name,
approver7_name, approver8_name, filenote_ref_no,
(SELECT user_name
FROM fnd_user
WHERE user_id = a.created_by)
FROM xxdpl_file_note_hdr a
WHERE filenote_hdr_id = p_filenote_hdr_id;

lv_approver1 VARCHAR2 (240);


lv_approver2 VARCHAR2 (240);
lv_approver3 VARCHAR2 (240);
lv_approver4 VARCHAR2 (240);
lv_approver5 VARCHAR2 (240);
lv_approver6 VARCHAR2 (240);
lv_approver7 VARCHAR2 (240);
lv_approver8 VARCHAR2 (240);
lv_file_note VARCHAR2 (240);
lv_creator VARCHAR2 (240);
l_file_cnt number;
lv_adhoc_role_name varchar2(240) := 'XX_FYI_ROLE';
lv_adhoc_usr_role_name varchar2(240) := 'XX_FYI_ROLE';
lv_role_users varchar2(4000);
ln_role_users_count number;
ln_role_count number;

---End

ln_filenote_id NUMBER;
lv_mgr_name VARCHAR2 (240);
v_mgr_wf_note VARCHAR2 (4000);
BEGIN
ln_filenote_id :=
wf_engine.getitemattrnumber (itemtype => itemtype,
itemkey => itemkey,
aname => 'ITEM_REQ_ID'
);

BEGIN
OPEN mgr_wf_note (ln_filenote_id);

FETCH mgr_wf_note
INTO v_mgr_wf_note;

CLOSE mgr_wf_note;

IF ln_filenote_id IS NOT NULL


THEN
BEGIN
UPDATE xxdnl_item_req_hdr h
SET h.approver2_status = 'REJECTED',
h.status = 'REJECTED',
h.approver2_date = SYSDATE,
/*H.PROJECT_LEADER_NAME = V_MGR_APP,*/
h.approver2_comments = v_mgr_wf_note
WHERE h.item_req_id = ln_filenote_id;

COMMIT;
END;

RESULT := 'COMPLETED:Y';
ELSE
RESULT := 'COMPLETED:N';
END IF;
--RESULT := 'COMPLETED:Y';
END;
END;
-----------------------------------------------------------------------------------
-------------------------------------------

PROCEDURE approver3_approve (
itemtype IN VARCHAR2,
itemkey IN VARCHAR2,
actid IN NUMBER,
funcmode IN VARCHAR2,
RESULT IN OUT VARCHAR2
)
IS
/*V_CPXID atl_capex_hdr_all.CAPEX_ID%TYPE;
V_MGR_APP atl_capex_hdr_all.PROJECT_LEADER_NAME%TYPE;
V_MGR_WF_NOTE atl_capex_hdr_all.PROJECT_LEADER_MSG%TYPE;*/
CURSOR mgr_wf_note (p_filenote_id NUMBER)
IS
SELECT SUBSTR (b.text_value, 1, 1000) --21460
FROM wf_notifications a,
wf_notification_attributes b,
xxdnl_item_req_hdr c
WHERE a.notification_id = b.notification_id
AND a.item_key = c.item_key
AND a.MESSAGE_TYPE = 'DNLITMAP'
AND b.NAME = 'WF_NOTE'
AND a.status IN ('CLOSED', 'OPEN')
AND a.message_name = 'MSG_APPROVER3'
AND c.item_req_id = p_filenote_id;

CURSOR c_get_status(p_filenote_id NUMBER) is


select count(1) from
wf_notifications
where message_type = itemtype and
item_key = itemkey and
status = 'OPEN' and
message_name not like '%FYI%' and
user_key = p_filenote_id;

---Start

CURSOR c_getapprovers(p_filenote_hdr_id number)


IS
SELECT approver1_name, approver2_name, approver3_name,
approver4_name, approver5_name, approver6_name,
approver7_name, approver8_name, filenote_ref_no,
(SELECT user_name
FROM fnd_user
WHERE user_id = a.created_by)
FROM xxdpl_file_note_hdr a
WHERE filenote_hdr_id = p_filenote_hdr_id;

lv_approver1 VARCHAR2 (240);


lv_approver2 VARCHAR2 (240);
lv_approver3 VARCHAR2 (240);
lv_approver4 VARCHAR2 (240);
lv_approver5 VARCHAR2 (240);
lv_approver6 VARCHAR2 (240);
lv_approver7 VARCHAR2 (240);
lv_approver8 VARCHAR2 (240);
lv_file_note VARCHAR2 (240);
lv_creator VARCHAR2 (240);
l_file_cnt number;
lv_adhoc_role_name varchar2(240) := 'XX_FYI_ROLE';
lv_adhoc_usr_role_name varchar2(240) := 'XX_FYI_ROLE';
lv_role_users varchar2(4000);
ln_role_users_count number;
ln_role_count number;

----End

ln_filenote_id NUMBER;
lv_mgr_name VARCHAR2 (240);
v_mgr_wf_note VARCHAR2 (4000);
ln_status_cnt NUMBER;
BEGIN
ln_filenote_id :=
wf_engine.getitemattrnumber (itemtype => itemtype,
itemkey => itemkey,
aname => 'ITEM_REQ_ID'
);

BEGIN

OPEN c_get_status(ln_filenote_id);
FETCH c_get_status INTO ln_status_cnt;
CLOSE c_get_status;

END;

BEGIN
OPEN mgr_wf_note (ln_filenote_id);

FETCH mgr_wf_note
INTO v_mgr_wf_note;

CLOSE mgr_wf_note;

IF ln_filenote_id IS NOT NULL


THEN
BEGIN
UPDATE xxdnl_item_req_hdr h
SET h.approver3_status = 'COMPLETED',
h.approver3_date = SYSDATE,
/*H.PROJECT_LEADER_NAME = V_MGR_APP,*/
h.approver3_comments = v_mgr_wf_note
WHERE h.item_req_id = ln_filenote_id;

COMMIT;
END;

IF ln_status_cnt = 0 THEN

UPDATE xxdnl_item_req_hdr h
SET STATUS = 'APPROVED'
WHERE h.item_req_id = ln_filenote_id;
COMMIT;

END IF;

RESULT := 'COMPLETED:Y';
ELSE
RESULT := 'COMPLETED:N';
END IF;
--RESULT := 'COMPLETED:Y';
END;
END;

PROCEDURE approver3_reject (
itemtype IN VARCHAR2,
itemkey IN VARCHAR2,
actid IN NUMBER,
funcmode IN VARCHAR2,
RESULT IN OUT VARCHAR2
)
IS
/*V_CPXID atl_capex_hdr_all.CAPEX_ID%TYPE;
V_MGR_APP atl_capex_hdr_all.PROJECT_LEADER_NAME%TYPE;
V_MGR_WF_NOTE atl_capex_hdr_all.PROJECT_LEADER_MSG%TYPE;*/
CURSOR mgr_wf_note (p_filenote_id NUMBER)
IS
SELECT SUBSTR (b.text_value, 1, 1000) --21460
FROM wf_notifications a,
wf_notification_attributes b,
xxdnl_item_req_hdr c
WHERE a.notification_id = b.notification_id
AND a.item_key = c.item_key
AND a.MESSAGE_TYPE = 'DNLITMAP'
AND b.NAME = 'WF_NOTE'
AND a.status IN ('CLOSED', 'OPEN')
AND a.message_name = 'MSG_APPROVER3'
AND c.item_req_id = p_filenote_id;

---Start

CURSOR c_getapprovers(p_filenote_hdr_id number)


IS
SELECT approver1_name, approver2_name, approver3_name,
approver4_name, approver5_name, approver6_name,
approver7_name, approver8_name, filenote_ref_no,
(SELECT user_name
FROM fnd_user
WHERE user_id = a.created_by)
FROM xxdpl_file_note_hdr a
WHERE filenote_hdr_id = p_filenote_hdr_id;

lv_approver1 VARCHAR2 (240);


lv_approver2 VARCHAR2 (240);
lv_approver3 VARCHAR2 (240);
lv_approver4 VARCHAR2 (240);
lv_approver5 VARCHAR2 (240);
lv_approver6 VARCHAR2 (240);
lv_approver7 VARCHAR2 (240);
lv_approver8 VARCHAR2 (240);
lv_file_note VARCHAR2 (240);
lv_creator VARCHAR2 (240);
l_file_cnt number;
lv_adhoc_role_name varchar2(240) := 'XX_FYI_ROLE';
lv_adhoc_usr_role_name varchar2(240) := 'XX_FYI_ROLE';
lv_role_users varchar2(4000);
ln_role_users_count number;
ln_role_count number;

---End

ln_filenote_id NUMBER;
lv_mgr_name VARCHAR2 (240);
v_mgr_wf_note VARCHAR2 (4000);
BEGIN
ln_filenote_id :=
wf_engine.getitemattrnumber (itemtype => itemtype,
itemkey => itemkey,
aname => 'ITEM_REQ_ID'
);

BEGIN
OPEN mgr_wf_note (ln_filenote_id);

FETCH mgr_wf_note
INTO v_mgr_wf_note;

CLOSE mgr_wf_note;

IF ln_filenote_id IS NOT NULL


THEN
BEGIN
UPDATE xxdnl_item_req_hdr h
SET h.approver3_status = 'REJECTED',
h.status = 'REJECTED',
h.approver3_date = SYSDATE,
/*H.PROJECT_LEADER_NAME = V_MGR_APP,*/
h.approver3_comments = v_mgr_wf_note
WHERE h.item_req_id = ln_filenote_id;

COMMIT;
END;

RESULT := 'COMPLETED:Y';
ELSE
RESULT := 'COMPLETED:N';
END IF;
--RESULT := 'COMPLETED:Y';
END;
END;

PROCEDURE approver1_exists (
itemtype IN VARCHAR2,
itemkey IN VARCHAR2,
actid IN NUMBER,
funcmode IN VARCHAR2,
RESULT IN OUT VARCHAR2
)
IS
CURSOR c_mgr_exists (p_filenote_id NUMBER)
IS
SELECT approver3_name
FROM xxdpl_file_note_hdr
WHERE filenote_hdr_id = p_filenote_id;
ln_filenote_id NUMBER;
lv_mgr VARCHAR2 (240);
lv_approver1 varchar2(240);
BEGIN
lv_approver1 :=
wf_engine.getitemattrtext (itemtype => itemtype,
itemkey => itemkey,
aname => 'APPROVER1'
);

BEGIN
OPEN c_mgr_exists (ln_filenote_id);

FETCH c_mgr_exists
INTO lv_mgr;

CLOSE c_mgr_exists;

IF lv_approver1 IS NOT NULL


THEN
RESULT := wf_engine.eng_completed || ':' || 'Y';
ELSE
RESULT := wf_engine.eng_completed || ':' || 'N';
END IF;
END;
END;

PROCEDURE approver2_exists (
itemtype IN VARCHAR2,
itemkey IN VARCHAR2,
actid IN NUMBER,
funcmode IN VARCHAR2,
RESULT IN OUT VARCHAR2
)
IS
CURSOR c_mgr_exists (p_filenote_id NUMBER)
IS
SELECT approver3_name
FROM xxdpl_file_note_hdr
WHERE filenote_hdr_id = p_filenote_id;

ln_filenote_id NUMBER;
lv_mgr VARCHAR2 (240);
lv_approver2 varchar2(240);
BEGIN
lv_approver2 :=
wf_engine.getitemattrtext (itemtype => itemtype,
itemkey => itemkey,
aname => 'APPROVER2'
);

BEGIN
OPEN c_mgr_exists (ln_filenote_id);

FETCH c_mgr_exists
INTO lv_mgr;

CLOSE c_mgr_exists;
IF lv_approver2 IS NOT NULL
THEN
RESULT := wf_engine.eng_completed || ':' || 'Y';
ELSE
RESULT := wf_engine.eng_completed || ':' || 'N';
END IF;
END;
END;

PROCEDURE approver3_exists (
itemtype IN VARCHAR2,
itemkey IN VARCHAR2,
actid IN NUMBER,
funcmode IN VARCHAR2,
RESULT IN OUT VARCHAR2
)
IS
CURSOR c_mgr_exists (p_filenote_id NUMBER)
IS
SELECT approver3_name
FROM xxdpl_file_note_hdr
WHERE filenote_hdr_id = p_filenote_id;

ln_filenote_id NUMBER;
lv_mgr VARCHAR2 (240);
lv_approver3 varchar2(240);
BEGIN
lv_approver3 :=
wf_engine.getitemattrtext (itemtype => itemtype,
itemkey => itemkey,
aname => 'APPROVER3'
);

BEGIN
OPEN c_mgr_exists (ln_filenote_id);

FETCH c_mgr_exists
INTO lv_mgr;

CLOSE c_mgr_exists;

IF lv_approver3 IS NOT NULL


THEN
RESULT := wf_engine.eng_completed || ':' || 'Y';
ELSE
RESULT := wf_engine.eng_completed || ':' || 'N';
END IF;
END;
END;

--Notification start

PROCEDURE get_notif (
p_item_req_id IN VARCHAR2,
display_type IN VARCHAR2,
document IN OUT NOCOPY VARCHAR2,
document_type IN OUT NOCOPY VARCHAR2
)
IS
l_document VARCHAR2 (32000) := '';
nl VARCHAR2 (1) := fnd_global.NEWLINE;

CURSOR c_getdetails
IS
SELECT b.item_code, b.description,b.long_description, c.organization_code,
b.primary_uom_code, b.template_name,
b.creation_date,b.PROJECT_NO,b.task_no,operating_unit,item_class,b.asset_category,
(select user_name from fnd_user where user_id = b.created_by) created_by

FROM xxdnl_item_req_hdr a,
xxdnl_item_req_lines b,
xxdnl_item_org_assignment c
WHERE a.item_req_id = b.item_req_id
AND a.item_req_id = c.item_req_id
and c.organization_id not in (0,4814)
and rownum <=40
AND a.item_req_id =
SUBSTR (p_item_req_id,
1,
INSTR (p_item_req_id, ':') - 1
);

CURSOR C_getapprovers is
select * from xxdnl_item_req_hdr where item_req_id =
SUBSTR (p_item_req_id,
1,
INSTR (p_item_req_id, ':') - 1
);

lc_details C_getapprovers%ROWTYPE;

CURSOR c_approvername(P_OU VARCHAR2, P_ITEM_CLASS VARCHAR2) is


select ATTRIBUTE1,ATTRIBUTE2,ATTRIBUTE3
from fnd_lookup_Values where lookup_type = 'XXDNL_ITEM_CREATION_APPROVERS'
and description = P_OU AND TAG = P_ITEM_CLASS;

lv_particulars varchar2(4000);
lv_agreement varchar2(4000);
lv_approver1 varchar2(240);
lv_approver2 varchar2(240);
lv_approver3 varchar2(240);

BEGIN

open C_getapprovers;
fetch C_getapprovers into lc_details;
close C_getapprovers;

open c_approvername(lc_details.operating_unit,lc_details.item_class);
fetch c_approvername into lv_approver1,lv_approver2,lv_approver3;
close c_approvername;

l_document := l_document || '<BR><table width = 80% width = 80%


class="OraTableContent"cellpadding="1" cellspacing="0" border="1" >' ||
'<tr ><td class="OraTableColumnHeader"colspan=8>Item
Details</td></tr>' ||

'<td class="OraTableColumnHeader"scope="col" align="LEFT"


valign="baseline"><b>Item Code</b></td>' ||
'<td class="OraTableColumnHeader"scope="col" align="LEFT"
valign="baseline"><b>Description</b></td>' ||
-- '<td class="OraTableColumnHeader"scope="col" align="LEFT"
valign="baseline"><b>Long Description</b></td>' ||
'<td class="OraTableColumnHeader"scope="col" align="LEFT"
valign="baseline"><b>Organization Code</b></td>' ||
'<td class="OraTableColumnHeader"scope="col" align="LEFT"
valign="baseline"><b>Primary UOM Code</b></td>' ||
'<td class="OraTableColumnHeader"scope="col" align="LEFT"
valign="baseline"><b>Template Name</b></td>' ||
'<td class="OraTableColumnHeader"scope="col" align="LEFT"
valign="baseline"><b>Project No</b></td>' ||
'<td class="OraTableColumnHeader"scope="col" align="LEFT"
valign="baseline"><b>Task No</b></td>' ||
'<td class="OraTableColumnHeader"scope="col" align="LEFT"
valign="baseline"><b>Asset Category</b></td>' ||
'</tr>';

FOR I IN c_getdetails LOOP

l_document := l_document || '<tr>' || '<td align="lift" valign="baseline"


class="OraTableCellText OraTableBorder1100">' ||
i.ITEM_CODE || '</td><td align="left" valign="baseline"
class="OraTableCellText OraTableBorder1100">' ||
i.DESCRIPTION || '</td><td align="left" valign="baseline"
class="OraTableCellText OraTableBorder1100">' ||
-- i.LONG_DESCRIPTION || '</td><td align="left"
valign="baseline" class="OraTableCellText OraTableBorder1100">' ||
i.ORGANIZATION_CODE || '</td><td align="left"
valign="baseline" class="OraTableCellText OraTableBorder1100">' ||
i.PRIMARY_UOM_CODE || '</td><td align="left"
valign="baseline" class="OraTableCellText OraTableBorder1100">' ||
i.TEMPLATE_NAME || '</td><td align="left" valign="baseline"
class="OraTableCellText OraTableBorder1100">' ||
i.PROJECT_NO || '</td><td align="left" valign="baseline"
class="OraTableCellText OraTableBorder1100">' ||
i.TASK_NO || '</td><td align="left" valign="baseline"
class="OraTableCellText OraTableBorder1100">' ||
i.asset_category || '</td>' ;--||

END LOOP;

l_document := l_document || '</tr></table><BR>';

--Approval start

l_document := l_document || '</tr></table><BR>';

l_document := l_document || '<BR><table width = 80% width = 80%


class="OraTableContent"cellpadding="1" cellspacing="0" border="1" >' ||
'<tr ><td class="OraTableColumnHeader"colspan=8>Approval
Details</td></tr>' ||

'<td class="OraTableColumnHeader"scope="col" width = 25%


align="LEFT" valign="baseline"><b>Name</b></td>' ||
'<td class="OraTableColumnHeader"scope="col" width = 15%
align="LEFT" valign="baseline"><b>Date</b></td>' ||
'<td class="OraTableColumnHeader"scope="col" width = 15%
align="LEFT" valign="baseline"><b>Status</b></td>' ||
'<td class="OraTableColumnHeader"scope="col" align="LEFT"
valign="baseline"><b>Message</b></td>' ||
'</tr>';

IF lv_approver1 IS NOT NULL THEN


l_document := l_document || '<tr>' || '<td align="lift"
valign="baseline" class="OraTableCellText OraTableBorder1100">' ||
lv_approver1 || '</td><td align="left" valign="baseline"
class="OraTableCellText OraTableBorder1100">' ||
lc_details.APPROVER1_DATE|| '</td><td align="left"
valign="baseline" class="OraTableCellText OraTableBorder1100">' ||
lc_details.APPROVER1_STATUS || '</td><td align="left"
valign="baseline" class="OraTableCellText OraTableBorder1100">' ||

lc_details.APPROVER1_COMMENTS|| '</td>' ||
'</tr>';
END IF;

IF lv_approver2 IS NOT NULL THEN


l_document := l_document || '<tr>' || '<td align="lift"
valign="baseline" class="OraTableCellText OraTableBorder1100">' ||
lv_approver2 || '</td><td align="left" valign="baseline"
class="OraTableCellText OraTableBorder1100">' ||
lc_details.APPROVER2_DATE|| '</td><td align="left"
valign="baseline" class="OraTableCellText OraTableBorder1100">' ||
lc_details.APPROVER2_STATUS || '</td><td align="left"
valign="baseline" class="OraTableCellText OraTableBorder1100">' ||

lc_details.APPROVER2_COMMENTS|| '</td>' ||
'</tr>';
END IF;

IF lv_approver3 IS NOT NULL THEN


l_document := l_document || '<tr>' || '<td align="lift"
valign="baseline" class="OraTableCellText OraTableBorder1100">' ||
lv_approver3 || '</td><td align="left" valign="baseline"
class="OraTableCellText OraTableBorder1100">' ||
lc_details.APPROVER3_DATE|| '</td><td align="left"
valign="baseline" class="OraTableCellText OraTableBorder1100">' ||
lc_details.APPROVER3_STATUS || '</td><td align="left"
valign="baseline" class="OraTableCellText OraTableBorder1100">' ||

lc_details.APPROVER3_COMMENTS|| '</td>' ||
'</tr>';
END IF;

l_document := l_document || '</tr></table><BR>';

--end

l_document := l_document || '<BR><table width = 80% width


= 80% class="OraTableContent"cellpadding="1" cellspacing="0" border="1" >' ||
'<tr ><td class="OraTableColumnHeader"colspan=8>Item
Details</td></tr>' ||
'<td class="OraTableColumnHeader"scope="col" align="LEFT"
valign="baseline"><b>Item Status</b></td>' ||
'<td class="OraTableColumnHeader"scope="col" align="LEFT"
valign="baseline"><b>Item Message</b></td>' ||

'</tr>';

l_document := l_document || '<tr>' || '<td align="lift" valign="baseline"


class="OraTableCellText OraTableBorder1100">' ||
NVL(lc_details.item_status,'PENDING') || '</td><td
align="left" valign="baseline" class="OraTableCellText OraTableBorder1100">' ||
lc_details.item_msg || '</td>';

l_document := l_document || '</tr></table><BR>';

document := l_document;

--approval end

END;

--Notification end

PROCEDURE create_item (
itemtype IN VARCHAR2,
itemkey IN VARCHAR2,
actid IN NUMBER,
funcmode IN VARCHAR2,
RESULT IN OUT VARCHAR2
)
IS

CURSOR c_get(p_item_req_id number)


IS
SELECT b.item_code, b.description, c.organization_id,
c.organization_code, b.primary_uom_code, b.attribute_category,
b.attribute1, b.attribute2, b.attribute3, b.template_id,
b.template_name, b.creation_date, b.created_by,
b.long_description,
decode(c.organization_code,
'NPJ', dnlcust.get_glid ('21-086-211-20905-9999-999'),
'RPJ', dnlcust.get_glid ('31-086-552-20905-9999-999'),
'TPJ', dnlcust.get_glid ('41-086-419-20905-9999-999'),
'DPJ', dnlcust.get_glid ('61-086-757-20905-9999-999'),
'PPJ', dnlcust.get_glid ('81-086-907-20905-9999-999'),
'DRC', dnlcust.get_glid ('12-812-612-20906-9999-999'),
'CEX', dnlcust.get_glid ('11-999-999-20906-9999-999'),
null) expense_account,
decode(c.organization_code,
'DNL',null,
'DCT',null,
b.project_id) project_id,
decode(c.organization_code,
'DNL',null,
'DCT',null,
b.task_id) task_id,
decode(c.organization_code,
'DNL',null,
'DCT',null,
b.ASSET_CATEGORY_ID) ASSET_CATEGORY_ID,
b.LOCATOR_CONTROL
FROM xxdnl_item_req_hdr a,
xxdnl_item_req_lines b,
xxdnl_item_org_assignment c
WHERE a.item_req_id = b.item_req_id
AND a.item_req_id = c.item_req_id
AND a.item_req_id = p_item_req_id;

CURSOR c_getuser(p_item_req_id number)


IS
SELECT CREATED_BY,RESP_ID FROM xxdnl_item_req_hdr A
WHERE a.item_req_id = p_item_req_id;

ln_item_Req_id NUMBER;
lv_mgr VARCHAR2 (240);
lv_approver3 varchar2(240);
ln_user_id number;
ln_resp_id number;

-------------start

v_organization_id NUMBER := 0;
v_request_id NUMBER := 0;
v_phase VARCHAR2(240);
v_status VARCHAR2(240);
v_request_phase VARCHAR2(240);
v_request_status VARCHAR2(240);
v_finished BOOLEAN;
v_message VARCHAR2(240);

-------------end
BEGIN

ln_item_req_id :=
wf_engine.getitemattrnumber (itemtype => itemtype,
itemkey => itemkey,
aname => 'ITEM_REQ_ID'
);

BEGIN

DELETE FROM mtl_system_items_interface;


COMMIT;

open c_getuser(ln_item_req_id);
fetch c_getuser into ln_user_id, ln_Resp_id ;
close c_getuser;

FOR i IN c_get(ln_item_req_id)
LOOP
INSERT INTO mtl_system_items_interface
(process_flag, allow_item_desc_update_flag,
transaction_type, item_number, segment1, description,
organization_id, organization_code,
primary_uom_code, set_process_id, attribute_category,
attribute1, attribute2, attribute3, template_id,
template_name, creation_date, created_by,

long_description,expense_account,ATTRIBUTE12,ATTRIBUTE13,asset_category_id,LOCATION
_CONTROL_CODE
)
VALUES (1, 'Y',
'CREATE', i.item_code, i.item_code, i.description,
i.organization_id, i.organization_code,
i.primary_uom_code, 1, i.attribute_category,
i.attribute1, i.attribute2, i.attribute3, i.template_id,
i.template_name, TO_DATE(i.creation_date, 'DD-MON-YYYY
HH24:MI:SS'), i.created_by,

i.long_description,i.expense_account,i.project_id,i.task_id,i.asset_category_id,
decode(i.LOCATOR_CONTROL,'Y',2,1)
);
END LOOP;

COMMIT;

--Calling item import program

--Submit the item import program in Create Mode to Create New Item
BEGIN

fnd_global.APPS_INITIALIZE(ln_user_id,ln_resp_id,401);
dbms_output.put_line('--Submitting Item Import Program for Item--');
v_request_id := Fnd_Request.submit_request (
application => 'INV',
program => 'INCOIN',
description => NULL,
start_time => SYSDATE,
sub_request => FALSE,
argument1 => 1,
argument2 => 1,
argument3 => 1, --Group ID option (All)
argument4 => 1, -- Group ID Dummy
argument5 => 1, -- Delete processed Record
argument6 => 1, -- Set Process id
argument7 => 1 -- Create item
);
COMMIT;
dbms_output.put_line('Item Import Program submitted');

IF ( v_request_id = 0 ) THEN
dbms_output.put_line( 'Item Import Program Not Submitted');
END IF;

-- Wait for request to run the import Program to Finish


v_finished := fnd_concurrent.wait_for_request (request_id => v_request_id,
interval => 0,
max_wait => 0,
phase => v_phase,
status => v_status,
dev_phase => v_request_phase,
dev_status => v_request_status,
message => v_message);

dbms_output.put_line('Request Phase : '|| v_request_phase );


dbms_output.put_line('Request Status : ' || v_request_status );
dbms_output.put_line('Request id : '||v_request_id );

--Testing end status


IF ( UPPER(v_request_status) = 'NORMAL') THEN
dbms_output.put_line( 'Item Import Program Completed Normally');

UPDATE xxdnl_item_req_hdr
SET ITEM_STATUS = 'NORMAL'
WHERE ITEM_REQ_ID = ln_item_req_id;
COMMIT;
ELSE
dbms_output.put_line( 'Item Import Program completed with error. Check
Mtl_interface_error table for the transaction_id');

UPDATE xxdnl_item_req_hdr
SET ITEM_STATUS = 'ERROR',
ITEM_MSG = v_message
WHERE ITEM_REQ_ID = ln_item_req_id;
COMMIT;

END IF;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Error in Submitting Item Import Program and error is '||
SUBSTR(SQLERRM,1,200));
END;

---Calling item import program end;

IF lv_approver3 IS NOT NULL


THEN
RESULT := wf_engine.eng_completed || ':' || 'Y';
ELSE
RESULT := wf_engine.eng_completed || ':' || 'N';
END IF;
END;
END;

END xxdnl_item_creation_pkg;
/

You might also like