Sie sind auf Seite 1von 26

CREATE OR REPLACE PACKAGE APPS.

wq_hr_element_interface
IS
/* WOQOD copyrights reserved. No part of this code should be copied or translated
direclty or indireclty without
the prior permission of WOQOD IT

INTERFACE: WOQOD Employee Element Entry Interface


DEVELOPED BY: HOTHMAN
DATE CREATED: 14-AUG-2014
DATE MODIFIED:
MODIFIED BY:
REASON: */
-- Common procedure to create any element for a employee.
--Required Parameters: session date, employee assignment id, element name
PROCEDURE wq_create_emp_element (
pv_input_value_name1 VARCHAR2 DEFAULT NULL,
pv_input_value_name2 VARCHAR2 DEFAULT NULL,
pv_input_value_name3 VARCHAR2 DEFAULT NULL,
pv_input_value_name4 VARCHAR2 DEFAULT NULL,
pv_input_value_name5 VARCHAR2 DEFAULT NULL,
pv_input_value_name6 VARCHAR2 DEFAULT NULL,
pv_input_value_name7 VARCHAR2 DEFAULT NULL,
pv_input_value_name8 VARCHAR2 DEFAULT NULL,
pv_input_value_name9 VARCHAR2 DEFAULT NULL,
pv_input_value_name10 VARCHAR2 DEFAULT NULL,
pv_entry_value1 VARCHAR2 DEFAULT NULL,
pv_entry_value2 VARCHAR2 DEFAULT NULL,
pv_entry_value3 VARCHAR2 DEFAULT NULL,
pv_entry_value4 VARCHAR2 DEFAULT NULL,
pv_entry_value5 VARCHAR2 DEFAULT NULL,
pv_entry_value6 VARCHAR2 DEFAULT NULL,
pv_entry_value7 VARCHAR2 DEFAULT NULL,
pv_entry_value8 VARCHAR2 DEFAULT NULL,
pv_entry_value9 VARCHAR2 DEFAULT NULL,
pv_entry_value10 VARCHAR2 DEFAULT NULL,
pd_session_date DATE,
pn_assignment_id NUMBER,
pv_element_name VARCHAR2,
pn_element_entry_id OUT NUMBER,
pv_errbuf OUT VARCHAR2,
pn_retcode OUT NUMBER
);

PROCEDURE wq_insert_bussiness_trip (errbuf OUT VARCHAR2, retcode OUT


NUMBER,pd_run_date date);

PROCEDURE wq_advance_salary_deduction (errbuf OUT VARCHAR2, retcode OUT NUMBER);

PROCEDURE wq_insert_education_allowance (errbuf OUT VARCHAR2, retcode OUT


NUMBER,pd_run_date date);

PROCEDURE wq_delete_element (pd_run_date DATE, pn_element varchar2, pn_employee


NUMBER);

PROCEDURE wq_send_mail (p_to IN VARCHAR2,p_from IN VARCHAR2,p_subject IN


VARCHAR2, p_text_msg IN VARCHAR2 DEFAULT NULL,p_cc IN VARCHAR2 DEFAULT NULL, p_bcc
IN VARCHAR2 DEFAULT NULL,
p_html_msg IN VARCHAR2 DEFAULT NULL, p_smtp_host IN VARCHAR2,p_smtp_port IN
NUMBER DEFAULT 25);

PROCEDURE wq_email_element (errbuf OUT VARCHAR2, retcode OUT NUMBER );

PROCEDURE wq_email_element1 (errbuf OUT VARCHAR2, retcode OUT NUMBER );


-- --------------------------------------------------------------------------
-- Name : Code to send email
-- Author : fdokku
-- Description : A package to hold string utilities. Used in wq_send_mail
procedure above
-- Requirements :
-- Ammedments :
-- --------------------------------------------------------------------------

TYPE t_split_array IS TABLE OF VARCHAR2(4000);

FUNCTION split_text (p_text IN CLOB,


p_delimeter IN VARCHAR2 DEFAULT ',')
RETURN t_split_array;

PROCEDURE print_clob (p_clob IN CLOB);

PROCEDURE print_clob_htp (p_clob IN CLOB);


-- ----------------------------------------------------------------------------

END wq_hr_element_interface;
/

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%

CREATE OR REPLACE PACKAGE BODY APPS.wq_hr_element_interface


IS
PROCEDURE wq_create_emp_element (
pv_input_value_name1 VARCHAR2 DEFAULT NULL,
pv_input_value_name2 VARCHAR2 DEFAULT NULL,
pv_input_value_name3 VARCHAR2 DEFAULT NULL,
pv_input_value_name4 VARCHAR2 DEFAULT NULL,
pv_input_value_name5 VARCHAR2 DEFAULT NULL,
pv_input_value_name6 VARCHAR2 DEFAULT NULL,
pv_input_value_name7 VARCHAR2 DEFAULT NULL,
pv_input_value_name8 VARCHAR2 DEFAULT NULL,
pv_input_value_name9 VARCHAR2 DEFAULT NULL,
pv_input_value_name10 VARCHAR2 DEFAULT NULL,
pv_entry_value1 VARCHAR2 DEFAULT NULL,
pv_entry_value2 VARCHAR2 DEFAULT NULL,
pv_entry_value3 VARCHAR2 DEFAULT NULL,
pv_entry_value4 VARCHAR2 DEFAULT NULL,
pv_entry_value5 VARCHAR2 DEFAULT NULL,
pv_entry_value6 VARCHAR2 DEFAULT NULL,
pv_entry_value7 VARCHAR2 DEFAULT NULL,
pv_entry_value8 VARCHAR2 DEFAULT NULL,
pv_entry_value9 VARCHAR2 DEFAULT NULL,
pv_entry_value10 VARCHAR2 DEFAULT NULL,
pd_session_date DATE,
pn_assignment_id NUMBER,
pv_element_name VARCHAR2,
pn_element_entry_id OUT NUMBER,
pv_errbuf OUT VARCHAR2,
pn_retcode OUT NUMBER
)
IS
ln_element_link_id pay_element_links_f.element_link_id%TYPE;
ld_effective_start_date DATE;
ld_effective_end_date DATE;
ln_element_entry_id pay_element_entries_f.element_entry_id%TYPE;
ln_object_version_number pay_element_entries_f.object_version_number%TYPE;
lb_create_warning BOOLEAN;
ln_element_type_id pay_element_types_f.element_type_id%TYPE;
ln_input_value_id1 NUMBER;
ln_input_value_id2 NUMBER;
ln_input_value_id3 NUMBER;
ln_input_value_id4 NUMBER;
ln_input_value_id5 NUMBER;
ln_input_value_id6 NUMBER;
ln_input_value_id7 NUMBER;
ln_input_value_id8 NUMBER;
ln_input_value_id9 NUMBER;
ln_input_value_id10 NUMBER;

CURSOR get_input_values (
b_input_value_name VARCHAR2,
b_element_type_id NUMBER
)
IS
SELECT input_value_id
FROM pay_input_values_f
WHERE NAME = b_input_value_name
AND element_type_id = b_element_type_id;
BEGIN
BEGIN
SELECT element_type_id
INTO ln_element_type_id
FROM pay_element_types_f
WHERE SYSDATE BETWEEN effective_start_date AND effective_end_date
AND element_name = pv_element_name;
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG,
'Invalid Element Name: ' || pv_element_name
);
DBMS_OUTPUT.put_line (SQLERRM);
pn_retcode := 2;
pv_errbuf := 'Check log for Information';
END;

BEGIN
OPEN get_input_values (pv_input_value_name1, ln_element_type_id);
FETCH get_input_values
INTO ln_input_value_id1;

CLOSE get_input_values;
END;

BEGIN
OPEN get_input_values (pv_input_value_name2, ln_element_type_id);

FETCH get_input_values
INTO ln_input_value_id2;

CLOSE get_input_values;
END;

BEGIN
OPEN get_input_values (pv_input_value_name3, ln_element_type_id);

FETCH get_input_values
INTO ln_input_value_id3;

CLOSE get_input_values;
END;

BEGIN
OPEN get_input_values (pv_input_value_name4, ln_element_type_id);

FETCH get_input_values
INTO ln_input_value_id4;

CLOSE get_input_values;
END;

BEGIN
OPEN get_input_values (pv_input_value_name5, ln_element_type_id);

FETCH get_input_values
INTO ln_input_value_id5;

CLOSE get_input_values;
END;

BEGIN
OPEN get_input_values (pv_input_value_name6, ln_element_type_id);

FETCH get_input_values
INTO ln_input_value_id6;

CLOSE get_input_values;
END;

BEGIN
OPEN get_input_values (pv_input_value_name7, ln_element_type_id);

FETCH get_input_values
INTO ln_input_value_id7;

CLOSE get_input_values;
END;
BEGIN
OPEN get_input_values (pv_input_value_name8, ln_element_type_id);

FETCH get_input_values
INTO ln_input_value_id8;

CLOSE get_input_values;
END;

BEGIN
OPEN get_input_values (pv_input_value_name9, ln_element_type_id);

FETCH get_input_values
INTO ln_input_value_id9;

CLOSE get_input_values;
END;

BEGIN
OPEN get_input_values (pv_input_value_name10, ln_element_type_id);

FETCH get_input_values
INTO ln_input_value_id10;

CLOSE get_input_values;
END;

-- Get Element Link Id


-- ------------------------------
ln_element_link_id :=
hr_entry_api.get_link (p_assignment_id => pn_assignment_id,
p_element_type_id => ln_element_type_id,
p_session_date => pd_session_date
);
-- Create Element Entry
-- ------------------------------
pay_element_entry_api.create_element_entry
( -- Input data elements
-- -----------------------------
p_effective_date => pd_session_date,
p_business_group_id => fnd_profile.VALUE
('PER_BUSINESS_GROUP_ID'),
p_assignment_id => pn_assignment_id,
p_element_link_id => ln_element_link_id,
p_entry_type => 'E',
p_input_value_id1 => ln_input_value_id1,
p_entry_value1 => pv_entry_value1,
p_input_value_id2 => ln_input_value_id2,
p_entry_value2 => pv_entry_value2,
p_input_value_id3 => ln_input_value_id3,
p_entry_value3 => pv_entry_value3,
p_input_value_id4 => ln_input_value_id4,
p_entry_value4 => pv_entry_value4,
p_input_value_id5 => ln_input_value_id5,
p_entry_value5 => pv_entry_value5,
p_input_value_id6 => ln_input_value_id6,
p_entry_value6 => pv_entry_value6,
p_input_value_id7 => ln_input_value_id7,
p_entry_value7 => pv_entry_value7,
p_input_value_id8 => ln_input_value_id8,
p_entry_value8 => pv_entry_value8,
p_input_value_id9 => ln_input_value_id9,
p_entry_value9 => pv_entry_value9,
p_input_value_id10 => ln_input_value_id10,
p_entry_value10 => pv_entry_value10,
-- Output data elements
-- --------------------------------
p_effective_start_date => ld_effective_start_date,
p_effective_end_date => ld_effective_end_date,
p_element_entry_id => ln_element_entry_id,
p_object_version_number => ln_object_version_number,
p_create_warning => lb_create_warning
);
fnd_file.put_line (fnd_file.LOG,
'Element: '
|| pv_element_name
|| ' added with Element Entry Id: '
|| ln_element_entry_id
);
pn_element_entry_id := ln_element_entry_id;
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
fnd_file.put_line (fnd_file.LOG, 'Error Creating Element ');
DBMS_OUTPUT.put_line (SQLERRM);
pn_retcode := 2;
pv_errbuf := 'Check log for Information';
END wq_create_emp_element;

PROCEDURE wq_insert_bussiness_trip (
errbuf OUT VARCHAR2,
retcode OUT NUMBER,
pd_run_date DATE
)
IS
--ld_run_date DATE;
ln_id_flex_num NUMBER;
ln_assignment_id NUMBER;
ln_retcode3 NUMBER;
lv_errbuf3 VARCHAR2 (240);
ln_retcode2 NUMBER;
lv_errbuf2 VARCHAR2 (240);
ln_retcode1 NUMBER;
lv_errbuf1 VARCHAR2 (240);
ln_element_entry_id3 NUMBER;
ln_element_entry_id2 NUMBER;
ln_element_entry_id1 NUMBER;
lv_processed VARCHAR2 (1);
ld_session_date DATE;
lv_element_name1 VARCHAR2 (120);
lv_element_name2 VARCHAR2 (120);
lv_element_name3 VARCHAR2 (120);

CURSOR cur_business_trips
IS
SELECT ppa.person_id, ppa.date_from, ppa.date_to,
ppa.analysis_criteria_id, ppa.last_update_date, segment1,
TO_CHAR (TO_DATE (segment2, 'YYYY/MM/DD HH24:MI:SS'),
'DD-MON-YYYY'
) segment2,
TO_CHAR (TO_DATE (segment3, 'YYYY/MM/DD HH24:MI:SS'),
'DD-MON-YYYY'
) segment3,
segment4, segment5,
TO_CHAR (TO_DATE (segment6, 'YYYY/MM/DD HH24:MI:SS'),
'DD-MON-YYYY'
) segment6,
TO_CHAR (TO_DATE (segment7, 'YYYY/MM/DD HH24:MI:SS'),
'DD-MON-YYYY'
) segment7,
segment8, segment9,
TO_CHAR (TO_DATE (segment10, 'YYYY/MM/DD HH24:MI:SS'),
'DD-MON-YYYY'
) segment10,
TO_CHAR (TO_DATE (segment11, 'YYYY/MM/DD HH24:MI:SS'),
'DD-MON-YYYY'
) segment11,
segment12, segment13, segment14, segment15, segment16,
segment17, segment18, segment19, segment20, segment21,
segment22, segment23, segment24, segment25, segment26,
segment27, segment28, segment29, segment30
FROM per_person_analyses ppa, per_analysis_criteria pac
WHERE ppa.id_flex_num = ln_id_flex_num
AND ppa.id_flex_num = pac.id_flex_num
AND ppa.analysis_criteria_id = pac.analysis_criteria_id
AND TRUNC (ppa.last_update_date) >= pd_run_date
AND segment18 IS NULL;
BEGIN
BEGIN
SELECT id_flex_num
INTO ln_id_flex_num
FROM fnd_id_flex_structures_tl
WHERE id_flex_structure_name = 'Business Trips' AND LANGUAGE = 'US';
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG,
'Invalid Special Info Flex Name');
DBMS_OUTPUT.put_line (SQLERRM);
retcode := 2;
errbuf := 'Error Processing Records';
END;

FOR rec IN cur_business_trips


LOOP
EXIT WHEN cur_business_trips%NOTFOUND;

BEGIN
SELECT assignment_id
INTO ln_assignment_id
FROM per_all_assignments_f
WHERE person_id = rec.person_id
AND SYSDATE BETWEEN effective_start_date AND effective_end_date;
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG, 'Invalid Person Id ');
DBMS_OUTPUT.put_line (SQLERRM);
retcode := 2;
errbuf := 'Error Processing Records';
END;

BEGIN
SELECT pay_paywsmee_pkg.processed (peef.element_entry_id,
peef.original_entry_id,
petf.processing_type,
peef.entry_type,
TRUNC (SYSDATE)
)
INTO lv_processed
FROM pay_element_entries_f peef, pay_element_types_f petf
WHERE peef.assignment_id = ln_assignment_id
AND TRUNC (SYSDATE) BETWEEN peef.effective_start_date
AND peef.effective_end_date
AND TRUNC (SYSDATE) BETWEEN petf.effective_start_date
AND petf.effective_end_date
AND peef.element_type_id = petf.element_type_id
AND peef.element_type_id = 238;
END;

IF lv_processed = 'Y'
THEN
SELECT ADD_MONTHS (TRUNC (SYSDATE), 1)
INTO ld_session_date
FROM DUAL;
ELSE
SELECT TRUNC (SYSDATE)
INTO ld_session_date
FROM DUAL;
END IF;

IF rec.segment9 IS NOT NULL


THEN
BEGIN
SELECT DECODE (rec.segment12,
'FAH', 'Business Trip FAHES',
'WI', 'Business Trip International',
'WOQ', 'Business Trip Woqod',
'WM', 'Business Trip Marine',
'QJET', 'Business Trip QJET',
'','Business Trip Woqod'
)
INTO lv_element_name3
FROM DUAL;

SELECT DECODE (rec.segment8,


'FAH', 'Business Trip FAHES',
'WI', 'Business Trip International',
'WOQ', 'Business Trip Woqod',
'WM', 'Business Trip Marine',
'QJET', 'Business Trip QJET',
'','Business Trip Woqod'
)
INTO lv_element_name2
FROM DUAL;

SELECT DECODE (rec.segment4,


'FAH', 'Business Trip FAHES',
'WI', 'Business Trip International',
'WOQ', 'Business Trip Woqod',
'WM', 'Business Trip Marine',
'QJET', 'Business Trip QJET',
'','Business Trip Woqod'
)
INTO lv_element_name1
FROM DUAL;
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG,
'Error Visit For.. in special info '
);
retcode := 2;
errbuf := 'Error Processing Records';
END;

wq_create_emp_element
(pv_input_value_name1 => 'Start Date',
pv_input_value_name2 => 'End Date',
pv_input_value_name3 => 'Comments',
pv_input_value_name4 => 'Country',
pv_entry_value1 => rec.segment10,
pv_entry_value2 => rec.segment11,
pv_entry_value3 => rec.segment13,
pv_entry_value4 => rec.segment9,
pd_session_date => ld_session_date,
pn_assignment_id => ln_assignment_id,
pv_element_name => lv_element_name3,
pn_element_entry_id =>
ln_element_entry_id3,
pv_errbuf => lv_errbuf3,
pn_retcode => ln_retcode3
);
wq_create_emp_element
(pv_input_value_name1 => 'Start Date',
pv_input_value_name2 => 'End Date',
pv_input_value_name3 => 'Comments',
pv_input_value_name4 => 'Country',
pv_entry_value1 => rec.segment6,
pv_entry_value2 => rec.segment7,
pv_entry_value3 => rec.segment15,
pv_entry_value4 => rec.segment5,
pd_session_date => ld_session_date,
pn_assignment_id => ln_assignment_id,
pv_element_name => lv_element_name2,
pn_element_entry_id =>
ln_element_entry_id2,
pv_errbuf => lv_errbuf2,
pn_retcode => ln_retcode2
);
wq_create_emp_element
(pv_input_value_name1 => 'Start Date',
pv_input_value_name2 => 'End Date',
pv_input_value_name3 => 'Comments',
pv_input_value_name4 => 'Country',
pv_entry_value1 => rec.segment2,
pv_entry_value2 => rec.segment3,
pv_entry_value3 => rec.segment14,
pv_entry_value4 => rec.segment1,
pd_session_date => ld_session_date,
pn_assignment_id => ln_assignment_id,
pv_element_name => lv_element_name1,
pn_element_entry_id =>
ln_element_entry_id1,
pv_errbuf => lv_errbuf1,
pn_retcode => ln_retcode1
);

UPDATE per_analysis_criteria
SET segment18 =
ln_element_entry_id1
|| ','
|| ln_element_entry_id2
|| ','
|| ln_element_entry_id3
WHERE id_flex_num = ln_id_flex_num
AND analysis_criteria_id = rec.analysis_criteria_id;
ELSIF rec.segment5 IS NOT NULL
THEN
BEGIN
SELECT DECODE (rec.segment8,
'FAH', 'Business Trip FAHES',
'WI', 'Business Trip International',
'WOQ', 'Business Trip Woqod',
'WM', 'Business Trip Marine',
'QJET', 'Business Trip QJET',
'','Business Trip Woqod'
)
INTO lv_element_name2
FROM DUAL;

SELECT DECODE (rec.segment4,


'FAH', 'Business Trip FAHES',
'WI', 'Business Trip International',
'WOQ', 'Business Trip Woqod',
'WM', 'Business Trip Marine',
'QJET', 'Business Trip QJET',
'','Business Trip Woqod'
)
INTO lv_element_name1
FROM DUAL;
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG,
'Error Visit For.. in special info '
);
retcode := 2;
errbuf := 'Error Processing Records';
END;

wq_create_emp_element
(pv_input_value_name1 => 'Start Date',
pv_input_value_name2 => 'End Date',
pv_input_value_name3 => 'Comments',
pv_input_value_name4 => 'Country',
pv_entry_value1 => rec.segment6,
pv_entry_value2 => rec.segment7,
pv_entry_value3 => rec.segment15,
pv_entry_value4 => rec.segment5,
pd_session_date => ld_session_date,
pn_assignment_id => ln_assignment_id,
pv_element_name => lv_element_name2,
pn_element_entry_id =>
ln_element_entry_id2,
pv_errbuf => lv_errbuf2,
pn_retcode => ln_retcode2
);
wq_create_emp_element
(pv_input_value_name1 => 'Start Date',
pv_input_value_name2 => 'End Date',
pv_input_value_name3 => 'Comments',
pv_input_value_name4 => 'Country',
pv_entry_value1 => rec.segment2,
pv_entry_value2 => rec.segment3,
pv_entry_value3 => rec.segment14,
pv_entry_value4 => rec.segment1,
pd_session_date => ld_session_date,
pn_assignment_id => ln_assignment_id,
pv_element_name => lv_element_name1,
pn_element_entry_id =>
ln_element_entry_id1,
pv_errbuf => lv_errbuf1,
pn_retcode => ln_retcode1
);

UPDATE per_analysis_criteria
SET segment18 =
ln_element_entry_id1 || ',' || ln_element_entry_id2
WHERE id_flex_num = ln_id_flex_num
AND analysis_criteria_id = rec.analysis_criteria_id;
ELSE
BEGIN
SELECT DECODE (rec.segment4,
'FAH', 'Business Trip FAHES',
'WI', 'Business Trip International',
'WOQ', 'Business Trip Woqod',
'WM', 'Business Trip Marine',
'QJET', 'Business Trip QJET',
'','Business Trip Woqod'
)
INTO lv_element_name1
FROM DUAL;
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG,
'Error Visit For.. in special info '
);
retcode := 2;
errbuf := 'Error Processing Records';
END;

wq_create_emp_element
(pv_input_value_name1 => 'Start Date',
pv_input_value_name2 => 'End Date',
pv_input_value_name3 => 'Comments',
pv_input_value_name4 => 'Country',
pv_entry_value1 => rec.segment2,
pv_entry_value2 => rec.segment3,
pv_entry_value3 => rec.segment14,
pv_entry_value4 => rec.segment1,
pd_session_date => ld_session_date,
pn_assignment_id => ln_assignment_id,
pv_element_name => lv_element_name1,
pn_element_entry_id =>
ln_element_entry_id1,
pv_errbuf => lv_errbuf1,
pn_retcode => ln_retcode1
);

UPDATE per_analysis_criteria
SET segment18 = ln_element_entry_id1
WHERE id_flex_num = ln_id_flex_num
AND analysis_criteria_id = rec.analysis_criteria_id;
END IF;

IF ln_retcode1 = 2 OR ln_retcode2 = 2 OR ln_retcode3 = 2


THEN
retcode := 2;
errbuf := 'Error Processing Records';
ROLLBACK;
ELSE
COMMIT;
END IF;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG, 'Error Inserting Element ');
END wq_insert_bussiness_trip;

PROCEDURE wq_advance_salary_deduction (
errbuf OUT VARCHAR2,
retcode OUT NUMBER
)
IS
ln_element_entry_id NUMBER (15);
lv_errbuf VARCHAR2 (120);
ln_retcode NUMBER (1);
ln_element_type_id NUMBER (15);
ln_counter NUMBER := 0;
ln_sum NUMBER := 0;
ln_input_value_id NUMBER (15);

CURSOR cur_salaray_adv (
pn_element_type_id NUMBER,
pn_input_value_id NUMBER
)
IS
SELECT pee.assignment_id, pee.element_entry_id,
pee.effective_start_date, pee.effective_end_date,
pay_paywsmee_pkg.processed
(pee.element_entry_id,
pee.original_entry_id,
petf.processing_type,
pee.entry_type,
ADD_MONTHS (TRUNC (SYSDATE), -1)
) processed, -- Element Processed?
(SELECT prv.result_value
FROM pay_run_results prr,
pay_run_result_values prv
WHERE element_type_id = pn_element_type_id
AND prr.run_result_id = prv.run_result_id
AND prv.input_value_id = pn_input_value_id
AND prr.element_entry_id = pee.element_entry_id)
pay_value,
-- pay value
(SELECT paaf.assignment_number
FROM per_all_assignments_f paaf
WHERE paaf.assignment_id = pee.assignment_id
AND SYSDATE BETWEEN paaf.effective_start_date
AND paaf.effective_end_date) employee_no
FROM pay_element_entries_f pee, pay_element_types_f petf
WHERE pee.element_type_id = pn_element_type_id
AND pee.element_type_id = petf.element_type_id
AND ADD_MONTHS (TRUNC (SYSDATE), -1)
BETWEEN pee.effective_start_date
AND pee.effective_end_date
AND ADD_MONTHS (TRUNC (SYSDATE), -1)
BETWEEN petf.effective_start_date
AND petf.effective_end_date;
BEGIN

BEGIN
SELECT element_type_id
INTO ln_element_type_id
FROM pay_element_types_f
WHERE SYSDATE BETWEEN effective_start_date AND effective_end_date
AND element_name = 'Salary Advance New';
EXCEPTION
WHEN OTHERS
THEN
--fnd_file.put_line(fnd_file.LOG, 'Element Name: Salary Advance New is
not valid' );
retcode := 2;
raise_application_error( -20001, 'Error in element entry' );
errbuf := 'Check log for Information';
END;

BEGIN
SELECT input_value_id
INTO ln_input_value_id
FROM pay_input_values_f
WHERE element_type_id = ln_element_type_id AND NAME = 'Pay Value';
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG,
'Input Value: Pay Value is not valid'
);
retcode := 2;
raise_application_error( -20001, 'Error in element entry' );
errbuf := 'Check log for Information';
END;

FOR rec IN cur_salaray_adv (ln_element_type_id, ln_input_value_id)


LOOP
EXIT WHEN cur_salaray_adv%NOTFOUND;

IF rec.processed = 'Y'
THEN
ln_counter := ln_counter + 1;
ln_sum := ln_sum + rec.pay_value;
wq_create_emp_element
(pv_input_value_name1 => 'Amount',
pv_entry_value1 => rec.pay_value,
pv_input_value_name2 => 'Element Entry ID',
pv_entry_value2 =>
rec.element_entry_id,
pd_session_date => TRUNC (SYSDATE),
pn_assignment_id => rec.assignment_id,
pv_element_name => 'Auto Salary Advance
Ded',
pn_element_entry_id => ln_element_entry_id,
pv_errbuf => lv_errbuf,
pn_retcode => ln_retcode
);

IF ln_retcode = 2
THEN
retcode := 2;
errbuf := 'Check log for Information';
fnd_file.put_line
(fnd_file.LOG,
'Error Creating Element for Employee No: '
|| rec.employee_no
);
ELSE
fnd_file.put_line (fnd_file.LOG,
'Employee No: '
|| rec.employee_no
|| ', Pay Value: '
|| rec.pay_value
);
END IF;
END IF;
END LOOP;

IF retcode = 2
THEN
ROLLBACK;
fnd_file.put_line
(fnd_file.LOG,
'Process for Salary Advace Deduction Reverted. Please correct & Rerun
again.'
);
ELSE
COMMIT;
fnd_file.put_line (fnd_file.LOG, 'Total Count: ' || ln_counter);
fnd_file.put_line (fnd_file.LOG, 'Total Amount: ' || ln_sum);
END IF;
EXCEPTION
WHEN OTHERS
THEN
retcode := 2;
fnd_file.put_line
(fnd_file.LOG,
'Program Error: Please Check With System Administrator :)'
);
END wq_advance_salary_deduction;

PROCEDURE wq_insert_education_allowance (
errbuf OUT VARCHAR2,
retcode OUT NUMBER,
pd_run_date DATE
)
IS
--ld_run_date DATE;
ln_id_flex_num NUMBER;
ln_assignment_id NUMBER;
ln_retcode NUMBER;
lv_errbuf VARCHAR2 (240);
ln_element_entry_id NUMBER;
lv_processed VARCHAR2 (1);
ld_session_date DATE;

CURSOR cur_edu_allow
IS
SELECT ppa.person_id, ppa.date_from, ppa.date_to,
ppa.analysis_criteria_id, ppa.last_update_date,
pac.segment13, pac.segment14, pac.segment15, pac.segment16
FROM per_person_analyses ppa, per_analysis_criteria pac
WHERE ppa.id_flex_num = 50328
AND ppa.id_flex_num = pac.id_flex_num
AND ppa.analysis_criteria_id = pac.analysis_criteria_id
AND TRUNC (ppa.last_update_date) >= TRUNC (SYSDATE - 1)
AND segment16 IS NULL;
BEGIN
BEGIN
SELECT id_flex_num
INTO ln_id_flex_num
FROM fnd_id_flex_structures_tl
WHERE id_flex_structure_name = 'Education_Assistance'
AND LANGUAGE = 'US';
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG,
'Invalid Special Info Flex Name');
DBMS_OUTPUT.put_line (SQLERRM);
retcode := 2;
errbuf := 'Error Processing Records';
END;
FOR rec IN cur_edu_allow
LOOP
EXIT WHEN cur_edu_allow%NOTFOUND;

BEGIN
SELECT assignment_id
INTO ln_assignment_id
FROM per_all_assignments_f
WHERE person_id = rec.person_id
AND SYSDATE BETWEEN effective_start_date AND effective_end_date;
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG, 'Invalid Person Id ');
DBMS_OUTPUT.put_line (SQLERRM);
retcode := 2;
errbuf := 'Error Processing Records';
END;

BEGIN
-- check if current month payroll has been processed
SELECT pay_paywsmee_pkg.processed (peef.element_entry_id,
peef.original_entry_id,
petf.processing_type,
peef.entry_type,
TRUNC (SYSDATE)
)
INTO lv_processed
FROM pay_element_entries_f peef, pay_element_types_f petf
WHERE peef.assignment_id = ln_assignment_id
AND TRUNC (SYSDATE) BETWEEN peef.effective_start_date
AND peef.effective_end_date
AND TRUNC (SYSDATE) BETWEEN petf.effective_start_date
AND petf.effective_end_date
AND peef.element_type_id = petf.element_type_id
AND peef.element_type_id = 238;
END;

IF lv_processed = 'Y'
THEN
-- if processed add element to next month
SELECT ADD_MONTHS (TRUNC (SYSDATE), 1)
INTO ld_session_date
FROM DUAL;
ELSE
SELECT TRUNC (SYSDATE)
INTO ld_session_date
FROM DUAL;
END IF;

wq_create_emp_element
(pv_input_value_name1 => 'Tution Fee',
pv_input_value_name2 => 'Books and Note Books',
pv_input_value_name3 => 'Transportation',
pv_entry_value1 => rec.segment13,
pv_entry_value2 => rec.segment14,
pv_entry_value3 => rec.segment15,
pd_session_date => ld_session_date,
pn_assignment_id => ln_assignment_id,
pv_element_name => 'Education Assistance
New',
pn_element_entry_id => ln_element_entry_id,
pv_errbuf => lv_errbuf,
pn_retcode => ln_retcode
);

UPDATE per_analysis_criteria
SET segment16 = ln_element_entry_id
WHERE id_flex_num = ln_id_flex_num
AND analysis_criteria_id = rec.analysis_criteria_id;

IF ln_retcode = 2
THEN
retcode := 2;
errbuf := 'Error Processing Records';
ROLLBACK;
ELSE
COMMIT;
END IF;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG, 'Error Inserting Element ');
END wq_insert_education_allowance;
PROCEDURE wq_delete_element (pd_run_date DATE, pn_element varchar2, pn_employee
NUMBER)
IS

ld_effective_start_date DATE;
ld_effective_end_date DATE;
lb_delete_warning BOOLEAN;
ln_object_version_number PAY_ELEMENT_ENTRIES_F.OBJECT_VERSION_NUMBER
%TYPE := 1;
ln_assignment_id NUMBER;
ln_element_entry_id NUMBER;
ln_element_type_id NUMBER;

BEGIN

SELECT ppa.assignment_id
INTO ln_assignment_id
FROM per_all_people_f ppf, per_all_assignments_f ppa
WHERE ppf.person_id = ppa.person_id
AND SYSDATE BETWEEN ppf.effective_start_date AND ppf.effective_end_date
AND SYSDATE BETWEEN ppa.effective_start_date AND ppa.effective_end_date
AND ppf.employee_number = pn_employee;

SELECT element_type_id
INTO ln_element_type_id
FROM pay_element_types_f
WHERE SYSDATE BETWEEN effective_start_date AND effective_end_date
AND element_name = pn_element;
SELECT pee.element_entry_id
INTO ln_element_entry_id
FROM pay_element_entries_f pee, pay_element_types_f petf
WHERE pee.element_type_id = ln_element_type_id
AND pee.assignment_id=ln_assignment_id
AND pee.element_type_id = petf.element_type_id
AND pd_run_date BETWEEN pee.effective_start_date AND
pee.effective_end_date
AND pd_run_date BETWEEN petf.effective_start_date AND
petf.effective_end_date;

-- Delete Element Entry


-- -------------------------------
pay_element_entry_api.delete_element_entry
( -- Input data elements
-- ------------------------------
p_datetrack_delete_mode => 'DELETE',
p_effective_date => pd_run_date,
p_element_entry_id => ln_element_entry_id,
-- Output data elements
-- --------------------------------
p_object_version_number => ln_object_version_number,
p_effective_start_date => ld_effective_start_date,
p_effective_end_date => ld_effective_end_date,
p_delete_warning => lb_delete_warning
);
dbms_output.put_line('Element Entry Id: '||ln_element_entry_id||' Deleted');
COMMIT;

EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
dbms_output.put_line(SQLERRM);
dbms_output.put_line('Error Deleting Element Entry');
END wq_delete_element;

PROCEDURE wq_send_mail (
p_to IN VARCHAR2,
p_from IN VARCHAR2,
p_subject IN VARCHAR2,
p_text_msg IN VARCHAR2 DEFAULT NULL,
p_cc IN VARCHAR2 DEFAULT NULL,
p_bcc IN VARCHAR2 DEFAULT NULL,
p_html_msg IN VARCHAR2 DEFAULT NULL,
p_smtp_host IN VARCHAR2,
p_smtp_port IN NUMBER DEFAULT 25
)
AS
l_mail_conn UTL_SMTP.connection;
l_boundary VARCHAR2 (50) := '----=*#abc1234321cba#*=';
PROCEDURE process_recipients (
p_mail_conn IN OUT UTL_SMTP.connection,
p_list IN VARCHAR2
)
AS
l_tab t_split_array;
BEGIN
IF TRIM (p_list) IS NOT NULL
THEN
l_tab := split_text (p_list);

FOR i IN 1 .. l_tab.COUNT
LOOP
UTL_SMTP.rcpt (p_mail_conn, TRIM (l_tab (i)));
END LOOP;
END IF;
END;
BEGIN
l_mail_conn := UTL_SMTP.open_connection (p_smtp_host, p_smtp_port);
UTL_SMTP.helo (l_mail_conn, p_smtp_host);
UTL_SMTP.mail (l_mail_conn, p_from);
process_recipients (l_mail_conn, p_to);
process_recipients (l_mail_conn, p_cc);
process_recipients (l_mail_conn, p_bcc);
UTL_SMTP.open_data (l_mail_conn);
UTL_SMTP.write_data (l_mail_conn,
'Date: '
|| TO_CHAR (SYSDATE, 'DD-MON-YYYY HH24:MI:SS')
|| UTL_TCP.crlf
);
UTL_SMTP.write_data (l_mail_conn, 'To: ' || p_to || UTL_TCP.crlf);

IF TRIM (p_cc) IS NOT NULL


THEN
UTL_SMTP.write_data (l_mail_conn,
'CC: ' || REPLACE (p_cc, ',', ';') || UTL_TCP.crlf
);
END IF;

IF TRIM (p_bcc) IS NOT NULL


THEN
UTL_SMTP.write_data (l_mail_conn,
'BCC: ' || REPLACE (p_bcc, ',', ';')
|| UTL_TCP.crlf
);
END IF;

UTL_SMTP.write_data (l_mail_conn, 'From: ' || p_from || UTL_TCP.crlf);


UTL_SMTP.write_data (l_mail_conn, 'Subject: ' || p_subject || UTL_TCP.crlf);
UTL_SMTP.write_data (l_mail_conn, 'Reply-To: ' || p_from || UTL_TCP.crlf);
UTL_SMTP.write_data (l_mail_conn, 'MIME-Version: 1.0' || UTL_TCP.crlf);
UTL_SMTP.write_data (l_mail_conn,
'Content-Type: multipart/alternative; boundary="'
|| l_boundary
|| '"'
|| UTL_TCP.crlf
|| UTL_TCP.crlf
);
IF p_text_msg IS NOT NULL
THEN
UTL_SMTP.write_data (l_mail_conn, '--' || l_boundary || UTL_TCP.crlf);
UTL_SMTP.write_data
(l_mail_conn,
'Content-Type: text/plain; charset="iso-8859-1"'
|| UTL_TCP.crlf
|| UTL_TCP.crlf
);
UTL_SMTP.write_data (l_mail_conn, p_text_msg);
UTL_SMTP.write_data (l_mail_conn, UTL_TCP.crlf || UTL_TCP.crlf);
END IF;

IF p_html_msg IS NOT NULL


THEN
UTL_SMTP.write_data (l_mail_conn, '--' || l_boundary || UTL_TCP.crlf);
UTL_SMTP.write_data (l_mail_conn,
'Content-Type: text/html; charset="iso-8859-1"'
|| UTL_TCP.crlf
|| UTL_TCP.crlf
);
UTL_SMTP.write_data (l_mail_conn, p_html_msg);
UTL_SMTP.write_data (l_mail_conn, UTL_TCP.crlf || UTL_TCP.crlf);
END IF;

UTL_SMTP.write_data (l_mail_conn,
'--' || l_boundary || '--' || UTL_TCP.crlf
);
UTL_SMTP.close_data (l_mail_conn);
UTL_SMTP.quit (l_mail_conn);
END wq_send_mail;

PROCEDURE wq_email_element (errbuf OUT VARCHAR2, retcode OUT NUMBER )


IS

lv_html VARCHAR2(32767);
ln_date_from NUMBER;

CURSOR cur_email_list(p_date_from NUMBER)


IS
SELECT emp_name||' ('||emp_no||')'
emp_name,emp_no,parent_dept,element_name,creation_date,email, 'QAR '||
trim(to_char(amount,'999,999,999.99')) amount,run_result_id
FROM woqod_employees_payments_v1
where creation_date>trunc(sysdate)-p_date_from;

BEGIN

BEGIN

SELECT TRUNC(SYSDATE) - MAX(CREATION_DATE)


INTO ln_date_from
FROM wq_employee_payment_temp;

EXCEPTION
WHEN OTHERS THEN
ln_date_from:=0;

END;

for cur in cur_email_list(ln_date_from)


loop
EXIT WHEN cur_email_list%NOTFOUND;

lv_html := '<html>
<body lang=EN-US>
<p><i> *** This is an automatically generated email, please do not reply
***</i></p>

<hr size=2 width="100%" align=center>

Your below entitlement has been processed in Administration Department.<br>


The payment will be credited to your account soon.<br><br>

<table border=0 cellpadding=0>


<tr>
<td>
<p class=MsoNormal align=right>Employee name:</p>
</td>
<td>
<p class=MsoNormal>'|| cur.emp_name ||'</p>
</td>
</tr>
<tr>
<td>
<p class=MsoNormal align=right>Department:</p>
</td>
<td>
<p class=MsoNormal>'|| cur.parent_dept ||'</p>
</td>
</tr>
<tr>
<td>
<p class=MsoNormal align=right>Entitlement:</p>
</td>
<td>
<p class=MsoNormal><font color="Red"><b>'|| cur.element_name ||'</b></font></p>
</td>
</tr>
<tr>
<td>
<p class=MsoNormal align=right>Amount:</p>
</td>
<td>
<p class=MsoNormal><font color="Red"><b>'|| cur.amount ||'</b></font></p>
</td>
</tr>
<tr>
<td>
<p class=MsoNormal align=right>Processed date:</p>
</td>
<td>
<p class=MsoNormal>'|| cur.creation_date ||'</p>
</td>
</tr>
<tr>
<td>
<p class=MsoNormal align=right>Process No:</p>
</td>
<td>
<p class=MsoNormal>'|| cur.run_result_id ||'</p>
</td>
</tr>
</table>

<p></p>

<div><span>

<hr size=2 width="100%" align=center>

</span></div>

<p class=MsoNormal><span>For further assistance please


contact our Helpdesk.</span></p>

</div>

</body>
</html>';

wq_send_mail(p_to => cur.email,


p_from => 'webmaster@woqod.com.qa',
p_subject => 'Employee Entitlement Payment Notification',
p_text_msg => 'Employee Entitlement Payment Notification.',
p_cc => '',
p_bcc => 'hothman@woqod.com.qa,mali@woqod.com.qa',
p_html_msg => lv_html,
p_smtp_host => 'woqexsrv.woqod.com');

fnd_file.put_line (fnd_file.LOG,'Email Sent to: '||cur.email||' with element: '||


cur.element_name);
INSERT INTO wq_employee_payment_temp VALUES
(cur.emp_no,cur.creation_date,cur.run_result_id);
end loop;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
retcode := 2;
fnd_file.put_line (fnd_file.LOG,'Program Error: Unable to send email.
Please Check With System Administrator :)' );
wq_send_mail(p_to => 'hothman@woqod.com.qa',
p_from => 'webmaster@woqod.com.qa',
p_subject => 'Error: Employee Entitlement Notification CC Program',
p_text_msg => 'Error: Employee Entitlement Notification CC Program',
p_cc => '',
p_bcc => 'hothman@woqod.com.qa,mali@woqod.com.qa',
p_html_msg => 'The Concurrent Program finished with error',
p_smtp_host => 'woqexsrv.woqod.com');
END wq_email_element;
PROCEDURE wq_email_element1 (errbuf OUT VARCHAR2, retcode OUT NUMBER )
IS

lv_html VARCHAR2(32767);
--ln_date_from NUMBER;

CURSOR cur_email_list
IS
SELECT emp_name || ' (' || emp_no || ')' emp_name, emp_no, parent_dept,
element_name, creation_date, email,
'QAR ' || TRIM (TO_CHAR (amount, '999,999,999.99')) amount,
run_result_id
FROM woqod_employees_payments_v1
WHERE run_result_id NOT IN (SELECT run_result_id
FROM wq_employee_payment_temp);

BEGIN

for cur in cur_email_list


loop
EXIT WHEN cur_email_list%NOTFOUND;

lv_html := '<html>
<body lang=EN-US>
<p><i> *** This is an automatically generated email, please do not reply
***</i></p>

<hr size=2 width="100%" align=center>

Your below entitlement has been processed in Administration Department.<br>


The payment will be credited to your account soon.<br><br>

<table border=0 cellpadding=0>


<tr>
<td>
<p class=MsoNormal align=right>Employee name:</p>
</td>
<td>
<p class=MsoNormal>'|| cur.emp_name ||'</p>
</td>
</tr>
<tr>
<td>
<p class=MsoNormal align=right>Department:</p>
</td>
<td>
<p class=MsoNormal>'|| cur.parent_dept ||'</p>
</td>
</tr>
<tr>
<td>
<p class=MsoNormal align=right>Entitlement:</p>
</td>
<td>
<p class=MsoNormal><font color="Red"><b>'|| cur.element_name ||'</b></font></p>
</td>
</tr>
<tr>
<td>
<p class=MsoNormal align=right>Amount:</p>
</td>
<td>
<p class=MsoNormal><font color="Red"><b>'|| cur.amount ||'</b></font></p>
</td>
</tr>
<tr>
<td>
<p class=MsoNormal align=right>Processed date:</p>
</td>
<td>
<p class=MsoNormal>'|| cur.creation_date ||'</p>
</td>
</tr>
<tr>
<td>
<p class=MsoNormal align=right>Process No:</p>
</td>
<td>
<p class=MsoNormal>'|| cur.run_result_id ||'</p>
</td>
</tr>
</table>

<p></p>

<div><span>

<hr size=2 width="100%" align=center>

</span></div>

<p class=MsoNormal><span>For further assistance please


contact our Helpdesk.</span></p>

</div>

</body>
</html>';

wq_send_mail(p_to => cur.email,


p_from => 'webmaster@woqod.com.qa',
p_subject => 'Employee Entitlement Payment Notification',
p_text_msg => 'Employee Entitlement Payment Notification.',
p_cc => '',
p_bcc => 'hothman@woqod.com.qa,mali@woqod.com.qa',
p_html_msg => lv_html,
p_smtp_host => 'woqexsrv.woqod.com');

fnd_file.put_line (fnd_file.LOG,'Email Sent to: '||cur.email||' with element: '||


cur.element_name);
INSERT INTO wq_employee_payment_temp VALUES
(cur.emp_no,cur.creation_date,cur.run_result_id);
end loop;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
retcode := 2;
fnd_file.put_line (fnd_file.LOG,'Program Error: Unable to send email.
Please Check With System Administrator :)' );
wq_send_mail(p_to => 'hothman@woqod.com.qa',
p_from => 'webmaster@woqod.com.qa',
p_subject => 'Error: Employee Entitlement Notification CC Program',
p_text_msg => 'Error: Employee Entitlement Notification CC Program',
p_cc => '',
p_bcc => 'hothman@woqod.com.qa,mali@woqod.com.qa',
p_html_msg => 'The Concurrent Program finished with error',
p_smtp_host => 'woqexsrv.woqod.com');
END wq_email_element1;

/
***********************************************************************************
/
-- --------------------------------------------------------------------------
-- Name : Code to send email
-- Author : fdokku
-- Description : A package to hold string utilities. Used in wq_send_mail
procedure above
-- Requirements :
-- Ammedments :
-- --------------------------------------------------------------------------
-- DO NOT CHANGE CODE BELOW
-- ----------------------------------------------------------------------------
FUNCTION split_text (p_text IN CLOB,
p_delimeter IN VARCHAR2 DEFAULT ',')
RETURN t_split_array IS
-- ----------------------------------------------------------------------------
l_array t_split_array := t_split_array();
l_text CLOB := p_text;
l_idx NUMBER;
BEGIN
l_array.delete;

IF l_text IS NULL THEN


RAISE_APPLICATION_ERROR(-20000, 'P_TEXT parameter cannot be NULL');
END IF;

WHILE l_text IS NOT NULL LOOP


l_idx := INSTR(l_text, p_delimeter);
l_array.extend;
IF l_idx > 0 THEN
l_array(l_array.last) := SUBSTR(l_text, 1, l_idx - 1);
l_text := SUBSTR(l_text, l_idx + 1);
ELSE
l_array(l_array.last) := l_text;
l_text := NULL;
END IF;
END LOOP;
RETURN l_array;
END split_text;
PROCEDURE print_clob (p_clob IN CLOB) IS
-- ----------------------------------------------------------------------------
l_offset NUMBER := 1;
l_chunk NUMBER := 255;
BEGIN
LOOP
EXIT WHEN l_offset > DBMS_LOB.getlength(p_clob);
DBMS_OUTPUT.put_line(DBMS_LOB.substr(p_clob, l_chunk, l_offset));
l_offset := l_offset + l_chunk;
END LOOP;
END print_clob;
PROCEDURE print_clob_htp (p_clob IN CLOB) IS
-- ----------------------------------------------------------------------------
l_offset NUMBER := 1;
l_chunk NUMBER := 32767;
BEGIN
LOOP
EXIT WHEN l_offset > DBMS_LOB.getlength(p_clob);
HTP.prn(DBMS_LOB.substr(p_clob, l_chunk, l_offset));
l_offset := l_offset + l_chunk;
END LOOP;
END print_clob_htp;
-- --------------------
/
***********************************************************************************
/

END wq_hr_element_interface;
/

Das könnte Ihnen auch gefallen