HRMS Packages

create or replace PACKAGE BODY xxaa_abc_emp_int_pkg
AS

/****************************************************************************************
* Name : populate_conv_clock_num *
* Object Type : Procedure *
****************************************************************************************/

g_bulk_limit NUMBER := 500;
g_request_id NUMBER := fnd_global.conc_request_id;
g_effective_date DATE;
g_chunk_size NUMBER := 100;
g_debug_mode BOOLEAN := FALSE;

TYPE g_num_tab_typ IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
g_conc_mgr_table g_num_tab_typ;
g_conc_mgr_ndx PLS_INTEGER := 0;

g_curr_run_date DATE;
g_last_run_date DATE;
g_run_number NUMBER;

— —————————————————————————–
— Function to check if record is back dated
— —————————————————————————–
FUNCTION is_back_dated
( p_person_id NUMBER
, p_effective_date DATE
, p_end_date DATE
, p_record_id NUMBER
, p_mode VARCHAR2
, p_cur_query VARCHAR2
)
RETURN VARCHAR2
IS
— Local Variables
l_back_dated VARCHAR2(10) := ‘FALSE’;
l_rec_type VARCHAR2(50) := NULL ;
l_job_acc_exp_date VARCHAR2(20) := NULL ;

CURSOR csr_status_backdated(p_person_id NUMBER)
IS
SELECT ‘TRUE’
FROM xxaa_abc_emp_tab emp ,
xxaa_abc_emp_tab emp2,
per_all_assignments_f paaf
WHERE emp.person_id = emp2.person_id
AND emp.person_id = paaf.person_id
AND emp.record_id =( SELECT MAX(emp1.record_id)
FROM xxaa_abc_emp_tab emp1
WHERE emp1.person_id =emp.person_id
AND emp1.record_id <> p_record_id
AND NVL(emp1.future_use10,’X’)<>’FUTURE’)
AND emp.employment_status <> emp2.employment_status
AND emp2.person_id = p_person_id
AND emp2.record_id = p_record_id
AND paaf.assignment_id = (SELECT MAX(assignment_id) FROM per_all_assignments_f paaf2
WHERE TRUNC(SYSDATE) BETWEEN paaf2.effective_start_date AND paaf2.effective_end_date
AND paaf2.person_id=paaf.person_id)
AND TRUNC(SYSDATE) BETWEEN paaf.effective_start_date AND paaf.effective_end_date
AND paaf.effective_start_date <> TRUNC(SYSDATE);

CURSOR csr_curr_rec_type
IS
SELECT future_use10, pri_job_account_exp_date FROM xxaa_abc_emp_tab
WHERE record_id = p_record_id;

— Cursor to check back dated value for labour account
CURSOR csr_account_backdated(p_person_id NUMBER,p_job_acc_exp_date VARCHAR2)
IS
SELECT ‘TRUE’
FROM xxaa_abc_emp_tab emp
, per_all_assignments_f paaf
, per_jobs pj
, hr_locations_all hla
, fnd_lookup_values flv
, fnd_lookup_values flvd
,(SELECT ffvt.flex_value_meaning dept_code
, ffvt.description dept_display
FROM fnd_flex_value_sets ffvs
, fnd_flex_values ffv
, fnd_flex_values_tl ffvt
WHERE ffv.flex_value_set_id = ffvs.flex_value_set_id
AND ffv.flex_value_id = ffvt.flex_value_id
AND ffvs.flex_value_set_name = ‘ABC_RETAIL_DEPT’
) dept_map
WHERE emp.person_id = paaf.person_id
AND paaf.job_id = pj.job_id
AND paaf.location_id = hla.location_id
AND flv.lookup_type(+) = ‘xxaa_abc_STORE_CONTROL’
— AND flv.enabled_flag = ‘Y’
AND flv.attribute3(+) = paaf.location_id
— AND flv.attribute2 IS NOT NULL
AND flv.security_group_id(+) = 0
AND flvd.lookup_type(+) = ‘xxaa_ABC_DEPT_MAPPING’
AND flvd.enabled_flag(+) = ‘Y’
AND flvd.security_group_id(+) = 0
AND flvd.lookup_code(+) = paaf.ass_attribute1
AND dept_map.dept_code (+) = paaf.ass_attribute1
AND emp.record_id = (SELECT MAX(emp1.record_id)
FROM xxaa_abc_emp_tab emp1
WHERE emp1.person_id = p_person_id
AND emp1.record_id <> p_record_id
AND NVL(emp1.future_use10,’X’)<>’FUTURE’)
AND ( emp.job_code <> SUBSTR(pj.name,1,5)
OR emp.location <> hla.location_code
OR emp.department <> DECODE(flv.attribute9
,’Retail’,dept_map.dept_display
,’Convenience’,’Store’
,’Small Retail’,NVL(FLVD.ATTRIBUTE2,DEPT_MAP.DEPT_DISPLAY))
OR TRUNC(to_date(p_job_acc_exp_date,’DD-MON-RRRR HH24:MI:SS’))<>TRUNC(to_date(emp.pri_job_account_exp_date,’DD-MON-RRRR HH24:MI:SS’)) — V4.6
)
AND paaf.assignment_id = (SELECT MAX(assignment_id) FROM per_all_assignments_f paaf2
WHERE TRUNC(SYSDATE) BETWEEN paaf2.effective_start_date AND paaf2.effective_end_date
AND paaf2.person_id=paaf.person_id)
AND paaf.effective_start_date <> TRUNC(SYSDATE)
AND TRUNC(SYSDATE) BETWEEN paaf.effective_start_date AND paaf.effective_end_date
AND emp.person_id = p_person_id;

BEGIN
xxaa_abc_util_pkg.write_debug (‘V4.3 Begin is_back_dated ‘||p_person_id||’ for ‘||p_mode);
xxaa_abc_util_pkg.write_debug (‘V4.3 is_back_dated g_curr_run_date – ‘||g_curr_run_date||’;g_last_run_date – ‘||g_last_run_date||’;p_effective_date – ‘||p_effective_date||’;p_end_date – ‘||p_end_date||’;p_record_id – ‘||p_record_id);

IF g_curr_run_date is null
THEN
— Called from Resync Program or Cutover Program
l_back_dated := ‘FALSE’;
— xxaa_abc_util_pkg.write_debug (‘V4.3 is_back_dated resync or cutover record’); –V4.4
ELSIF p_effective_date > g_curr_run_date
THEN
— Future Record
l_back_dated := ‘FALSE’;
— xxaa_abc_util_pkg.write_debug (‘V4.3 is_back_dated future record’); –V4.4
ELSIF (p_effective_date < g_curr_run_date
AND p_end_date < g_curr_run_date)
THEN
— Past Record
l_back_dated := ‘FALSE’;
— xxaa_abc_util_pkg.write_debug (‘V4.3 is_back_dated past record’); –V4.4
ELSE

OPEN csr_curr_rec_type;
FETCH csr_curr_rec_type INTO l_rec_type,l_job_acc_exp_date;
CLOSE csr_curr_rec_type;

IF NVL(l_rec_type,’X’) IN (‘FUTURE’,’FUTURE_HIRE’) THEN
l_back_dated := ‘FALSE’;
ELSE
— Current Record
IF p_mode = ‘Status’
THEN
OPEN csr_status_backdated(p_person_id);
FETCH csr_status_backdated INTO l_back_dated;
CLOSE csr_status_backdated;
ELSIF p_mode = ‘Account’
THEN
OPEN csr_account_backdated(p_person_id,l_job_acc_exp_date);
FETCH csr_account_backdated INTO l_back_dated;
CLOSE csr_account_backdated;
END IF;
END IF;
END IF;

xxaa_abc_util_pkg.write_debug (‘End is_back_dated ‘||l_back_dated);

RETURN l_back_dated;
EXCEPTION
WHEN OTHERS THEN
xxaa_abc_util_pkg.write_log ( ‘Exception – is_back_dated – ‘||SQLERRM);
END is_back_dated;
— —————————————————————————–
— V4.3 Procedure to populate calendar records
— —————————————————————————–
PROCEDURE pop_calendar_records
(p_record_id NUMBER
,p_person_id NUMBER
,p_mode VARCHAR2
,p_effective_date VARCHAR2
)
IS
l_badge_data xxaa_abc_badges_tab;
l_status_data xxaa_abc_status_tab;
l_account_data xxaa_abc_pri_account_tab;
l_record_id NUMBER;
c_limit PLS_INTEGER := 100;
l_term_upp_limit NUMBER;

— Cursor to get back dated termination limit
CURSOR csr_get_term_limit
IS
SELECT meaning
FROM fnd_lookup_values
WHERE lookup_type =’xxaa_CLOCKNUM_REL_DAYS’
AND lookup_code =’TERM_LIMIT’
AND enabled_flag =’Y’;

— Cursor to get Badge Details
CURSOR csr_badge_details(p_person_id NUMBER)
IS
–Initial + Incremental
SELECT badge_data
FROM (SELECT xxaa_abc_badges_typ
( DECODE( NVL(paaf.ass_attribute6, ‘NA’), ‘NA’, NULL, SUBSTR(haou.name,2,4)||paaf.ass_attribute6)
, TO_CHAR(MIN(paaf.effective_start_date),’DD-MON-YYYY HH24:MI’)
, ’01-JAN-3000 00:00′
) badge_data
, SUBSTR(haou.name,2,4)||DECODE(paaf.ass_attribute6, ‘NA’, NULL, paaf.ass_attribute6) – lag(SUBSTR(haou.name,2,4)||DECODE(paaf.ass_attribute6, ‘NA’, NULL, paaf.ass_attribute6)) over(order by paaf.effective_start_date) badge_delta
FROM per_all_assignments_f paaf
, hr_all_organization_units haou
, per_periods_of_service ppos
WHERE paaf.organization_id = haou.organization_id
AND paaf.ass_attribute6 is not null
AND paaf.assignment_type = ‘E’
AND paaf.primary_flag = ‘Y’
AND paaf.ass_attribute30 IN (‘A’, ‘P’)
AND paaf.person_id = p_person_id
AND TRUNC(paaf.effective_end_date) >= TRUNC(NVL(g_effective_date, SYSDATE))
–Exclude during transfer to non-live
AND ( paaf.location_id IN ( SELECT attribute3
FROM fnd_lookup_values flv
WHERE lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND attribute2 IS NOT NULL
)
)
–Exclude during termination
AND paaf.person_id = ppos.person_id
/*AND ppos.actual_termination_date IS NULL
AND (ppos.date_start = (SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = paaf.person_id
AND TRUNC(SYSDATE) BETWEEN TRUNC(ppos1.date_start) AND NVL(TRUNC(ppos1.actual_termination_date), TO_DATE(’31-Dec-4712′)))
OR ppos.date_start = (SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = paaf.person_id
AND TRUNC(ppos1.date_start) >= TRUNC(SYSDATE))
OR ppos.actual_termination_date BETWEEN (TRUNC(SYSDATE)- l_term_upp_limit) AND (TRUNC(SYSDATE)))*/ –V5.1
AND ppos.period_of_service_id = (SELECT MAX(period_of_service_id) FROM per_periods_of_service a WHERE a.person_id = ppos.person_id AND ppos.actual_termination_date IS NULL) –V5.2
GROUP BY paaf.person_id
, paaf.ass_attribute6
, SUBSTR(haou.name,2,4)
, paaf.effective_start_date
)
WHERE badge_delta IS NULL
OR badge_delta <> 0
UNION
–Termination
SELECT badge_data
FROM (SELECT xxaa_abc_badges_typ
( DECODE( NVL(paaf.ass_attribute6, ‘NA’), ‘NA’, NULL, SUBSTR(haou.name,2,4)||paaf.ass_attribute6)
, DECODE(ROWNUM, 1, TO_CHAR(MIN(paaf.effective_start_date),’DD-MON-YYYY HH24:MI’), lag(TO_CHAR(MIN(paaf.effective_start_date),’DD-MON-YYYY HH24:MI’))over(order by paaf.effective_start_date))
, DECODE(ROWNUM, 1, ’01-JAN-3000 00:00′, TO_CHAR(actual_termination_date,’DD-MON-YYYY’)||’ 23:59′) –V4.7
) badge_data
, SUBSTR(haou.name,2,4)||DECODE(paaf.ass_attribute6, ‘NA’, NULL, paaf.ass_attribute6) – lag(SUBSTR(haou.name,2,4)||DECODE(paaf.ass_attribute6, ‘NA’, NULL, paaf.ass_attribute6)) over(order by paaf.effective_start_date) badge_delta
, paaf.assignment_status_type_id – lag(paaf.assignment_status_type_id) over(order by paaf.effective_start_date) status_delta
, ppos.actual_termination_date
FROM per_all_assignments_f paaf
, hr_all_organization_units haou
, per_periods_of_service ppos
WHERE paaf.organization_id = haou.organization_id
AND paaf.ass_attribute6 is not null
AND paaf.assignment_type = ‘E’
AND paaf.primary_flag = ‘Y’
AND paaf.ass_attribute30 IN (‘A’, ‘P’)
AND paaf.person_id = p_person_id
AND paaf.person_id = ppos.person_id
/* AND (ppos.date_start = (SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = paaf.person_id
AND TRUNC(SYSDATE) BETWEEN TRUNC(ppos1.date_start) AND NVL(TRUNC(ppos1.actual_termination_date), TO_DATE(’31-Dec-4712′)))
OR ppos.date_start = (SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = paaf.person_id
AND TRUNC(ppos1.date_start) >= TRUNC(SYSDATE))
OR ppos.actual_termination_date BETWEEN (TRUNC(SYSDATE)- l_term_upp_limit) AND (TRUNC(SYSDATE))) –V5.1
AND ppos.actual_termination_date IS NOT NULL*/
AND ppos.period_of_service_id = (SELECT MAX(period_of_service_id) FROM per_periods_of_service a WHERE a.person_id = ppos.person_id AND ppos.actual_termination_date IS NOT NULL) –V5.2
AND (TRUNC(paaf.effective_end_date) >= TRUNC(NVL(g_effective_date, SYSDATE))
OR TRUNC(paaf.effective_end_date) BETWEEN (TRUNC(SYSDATE)-l_term_upp_limit) AND (TRUNC(SYSDATE))) –V4.5
GROUP BY paaf.person_id
, paaf.ass_attribute6
, SUBSTR(haou.name,2,4)
, paaf.effective_start_date
, ppos.actual_termination_date
, paaf.assignment_status_type_id
, ROWNUM
)
WHERE badge_delta IS NULL
OR badge_delta <> 0
OR status_delta IS NULL
OR status_delta <> 0
UNION
–Transfer to Non-live
SELECT badge_data
FROM (SELECT xxaa_abc_badges_typ
( xket.badge_number
, xket.badge_number_effective_date
, TO_CHAR(MIN(paaf.effective_start_date-1),’DD-MON-YYYY’)||’ 23:59′ –V4.7
) badge_data
, SUBSTR(haou.name,2,4)||DECODE(paaf.ass_attribute6, ‘NA’, NULL, paaf.ass_attribute6) – lag(SUBSTR(haou.name,2,4)||DECODE(paaf.ass_attribute6, ‘NA’, NULL, paaf.ass_attribute6)) over(order by paaf.effective_start_date) badge_delta
FROM per_all_assignments_f paaf
, hr_all_organization_units haou
, xxaa_abc_emp_tab xket
WHERE paaf.organization_id = haou.organization_id
AND paaf.ass_attribute6 is not null
AND paaf.assignment_type = ‘E’
AND paaf.primary_flag = ‘Y’
AND paaf.ass_attribute30 IN (‘A’, ‘P’)
AND paaf.person_id = p_person_id
–AND TRUNC(paaf.effective_end_date) >= TRUNC(SYSDATE)
AND TRUNC(paaf.effective_end_date) >= TRUNC(NVL(g_effective_date, SYSDATE))
AND ( paaf.location_id NOT IN ( SELECT attribute3
FROM fnd_lookup_values flv
WHERE lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND attribute2 IS NOT NULL
)
)
AND xket.person_id = paaf.person_id
AND xket.record_id = (SELECT MAX(record_id) FROM xxaa_abc_emp_tab WHERE person_id = paaf.person_id
AND record_id < (SELECT MAX(record_id) FROM xxaa_abc_emp_tab WHERE person_id = paaf.person_id))
GROUP BY paaf.person_id
, paaf.ass_attribute6
, SUBSTR(haou.name,2,4)
, paaf.effective_start_date
, xket.badge_number
, xket.badge_number_effective_date
)
WHERE badge_delta IS NULL
OR badge_delta <> 0
UNION
–Transfer to Convenience to Supermarket V5.3
SELECT badge_data
FROM (SELECT xxaa_abc_badges_typ
( xket.badge_number
, xket.badge_number_effective_date
, TO_CHAR(MIN(paaf.effective_start_date-1),’DD-MON-YYYY’)||’ 23:59′ –V4.7
) badge_data
, SUBSTR(haou.name,2,4)||DECODE(paaf.ass_attribute6, ‘NA’, NULL, paaf.ass_attribute6) – lag(SUBSTR(haou.name,2,4)||DECODE(paaf.ass_attribute6, ‘NA’, NULL, paaf.ass_attribute6)) over(order by paaf.effective_start_date) badge_delta
FROM per_all_assignments_f paaf
, hr_all_organization_units haou
, xxaa_abc_emp_tab xket
WHERE paaf.organization_id = haou.organization_id
AND paaf.ass_attribute6 is not null
AND paaf.assignment_type = ‘E’
AND paaf.primary_flag = ‘Y’
AND paaf.ass_attribute30 IN (‘A’, ‘P’)
AND paaf.person_id = p_person_id
–AND TRUNC(paaf.effective_end_date) >= TRUNC(NVL(g_effective_date, SYSDATE))
AND TRUNC(paaf.effective_end_date) = TRUNC(TO_DATE(’31-DEC-4712′))
AND ( paaf.location_id IN ( SELECT attribute3
FROM fnd_lookup_values flv
WHERE lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND attribute2 IS NOT NULL
AND attribute1 = ‘Supermarket’
AND NOT EXISTS (SELECT ‘Y’ FROM fnd_lookup_values flv1 WHERE lookup_type = ‘xxaa_abc_STORE_EXCP_CONTROL’ AND flv1.lookup_code = flv.lookup_code
AND flv1.attribute1 = ‘Y’
AND flv1.enabled_flag = ‘Y’)
)
)
AND xket.person_id = paaf.person_id
AND xket.record_id = (SELECT MAX(record_id) FROM xxaa_abc_emp_tab WHERE person_id = paaf.person_id
AND record_id < (SELECT MAX(record_id) FROM xxaa_abc_emp_tab WHERE person_id = paaf.person_id))
GROUP BY paaf.person_id
, paaf.ass_attribute6
, SUBSTR(haou.name,2,4)
, paaf.effective_start_date
, xket.badge_number
, xket.badge_number_effective_date
)
WHERE badge_delta IS NULL
OR badge_delta <> 0;

— Cursor to get Employment Status
CURSOR csr_emp_status_details(p_person_id NUMBER)
IS
–Initial (Current + Future)
SELECT xxaa_abc_status_typ
( user_status
, DECODE (ROWNUM, 1, TO_CHAR(date_start,’DD-MON-YY’), TO_CHAR(min_effective_date,’DD-MON-YY’))
, ’01-JAN-3000′
, is_back_dated
( person_id
, min_effective_date
, NVL(lead(min_effective_date)over(order by min_effective_date)-1,’31-Dec-4712′)
, p_record_id
, ‘Status’
, NULL
)
) status_data
FROM (SELECT paaf.person_id person_id
, MIN(paaf.effective_start_date) min_effective_date
, past.user_status user_status
, paaf.assignment_status_type_id – lag(paaf.assignment_status_type_id) over(order by paaf.effective_start_date) status_delta
, ppos.date_start date_start
FROM per_all_assignments_f paaf
, per_assignment_status_types past
, per_periods_of_service ppos
WHERE past.assignment_status_type_id = paaf.assignment_status_type_id
AND paaf.assignment_type = ‘E’
AND paaf.primary_flag = ‘Y’
AND paaf.ass_attribute30 IN (‘A’,’P’)
AND paaf.person_id = p_person_id
AND paaf.person_id = ppos.person_id
/*AND ppos.actual_termination_date IS NULL
AND (ppos.date_start = (SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = paaf.person_id
AND TRUNC(SYSDATE) BETWEEN TRUNC(ppos1.date_start) AND NVL(TRUNC(ppos1.actual_termination_date), TO_DATE(’31-Dec-4712′)))
OR ppos.date_start = (SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = paaf.person_id
AND TRUNC(ppos1.date_start) >= TRUNC(SYSDATE))
OR ppos.actual_termination_date BETWEEN (TRUNC(SYSDATE)- l_term_upp_limit) AND (TRUNC(SYSDATE)))*/ –V5.1
AND ppos.period_of_service_id = (SELECT MAX(period_of_service_id) FROM per_periods_of_service a WHERE a.person_id = ppos.person_id AND ppos.actual_termination_date IS NULL) –V5.2
AND TRUNC(paaf.effective_end_date) >= TRUNC(NVL(g_effective_date, SYSDATE))
AND NOT EXISTS ( SELECT ‘Y’ FROM xxaa_abc_emp_tab xket WHERE xket.person_id = paaf.person_id AND record_mode = ‘UPDATE’)
AND ( paaf.location_id IN ( SELECT attribute3
FROM fnd_lookup_values flv
WHERE lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND attribute2 IS NOT NULL
)
)
GROUP BY paaf.person_id
, past.user_status
, paaf.assignment_status_type_id
, paaf.effective_start_date
, ppos.date_start
ORDER BY paaf.effective_start_date
)
WHERE status_delta IS NULL
OR status_delta <> 0
UNION
–Incremental (Current + Future)
SELECT xxaa_abc_status_typ
( user_status
, TO_CHAR(min_effective_date,’DD-MON-YY’)
, ’01-JAN-3000′
, is_back_dated
( person_id
, min_effective_date
, NVL(lead(min_effective_date)over(order by min_effective_date)-1,’31-Dec-4712′)
, p_record_id
, ‘Status’
, NULL — V4.6
)
) status_data
FROM (SELECT paaf.person_id person_id
, MIN(paaf.effective_start_date) min_effective_date
, past.user_status user_status
, paaf.assignment_status_type_id – lag(paaf.assignment_status_type_id) over(order by paaf.effective_start_date) status_delta
, ppos.date_start date_start
FROM per_all_assignments_f paaf
, per_assignment_status_types past
, per_periods_of_service ppos
WHERE past.assignment_status_type_id = paaf.assignment_status_type_id
AND paaf.assignment_type = ‘E’
AND paaf.primary_flag = ‘Y’
AND paaf.ass_attribute30 IN (‘A’,’P’)
AND paaf.person_id = p_person_id
AND paaf.person_id = ppos.person_id
/*AND (ppos.date_start = (SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = paaf.person_id
AND TRUNC(SYSDATE) BETWEEN TRUNC(ppos1.date_start) AND NVL(TRUNC(ppos1.actual_termination_date), TO_DATE(’31-Dec-4712′)))
OR ppos.date_start = (SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = paaf.person_id
AND TRUNC(ppos1.date_start) >= TRUNC(SYSDATE))
OR ppos.actual_termination_date BETWEEN (TRUNC(SYSDATE)- l_term_upp_limit) AND (TRUNC(SYSDATE))) */–V5.1
AND TRUNC(paaf.effective_end_date) >= TRUNC(NVL(g_effective_date, SYSDATE))
AND EXISTS ( SELECT ‘Y’ FROM xxaa_abc_emp_tab xket WHERE xket.person_id = paaf.person_id AND record_mode IN (‘UPDATE’, ‘RESYNC’))
–Exclude during transfer to non-live
AND ( paaf.location_id IN ( SELECT attribute3
FROM fnd_lookup_values flv
WHERE lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND attribute2 IS NOT NULL
)
)
–Exclude during termination
–AND ppos.actual_termination_date IS NULL
AND ppos.period_of_service_id = (SELECT MAX(period_of_service_id) FROM per_periods_of_service a WHERE a.person_id = ppos.person_id AND ppos.actual_termination_date IS NULL) –V5.2
GROUP BY paaf.person_id
, past.user_status
, paaf.assignment_status_type_id
, paaf.effective_start_date
, ppos.date_start
ORDER BY paaf.effective_start_date
)
WHERE status_delta IS NULL
OR status_delta <> 0
UNION
–Termination
SELECT xxaa_abc_status_typ
( user_status
, DECODE(ROWNUM, 1, TO_CHAR(min_effective_date,’DD-MON-YY’), TO_CHAR(actual_termination_date+1,’DD-MON-YY’))
, ’01-JAN-3000′
, is_back_dated
( person_id
, min_effective_date
, NVL(lead(min_effective_date)over(order by min_effective_date)-1,’31-Dec-4712′)
, p_record_id
, ‘Status’
, NULL — V4.6
)
) status_data
FROM (SELECT paaf.person_id person_id
, MIN(paaf.effective_start_date) min_effective_date
, past.user_status user_status
, paaf.assignment_status_type_id – lag(paaf.assignment_status_type_id) over(order by paaf.effective_start_date) status_delta
, ppos.actual_termination_date
FROM per_all_assignments_f paaf
, per_assignment_status_types past
, per_periods_of_service ppos
WHERE past.assignment_status_type_id = paaf.assignment_status_type_id
AND paaf.assignment_type = ‘E’
AND paaf.primary_flag = ‘Y’
AND paaf.ass_attribute30 IN (‘A’,’P’)
AND paaf.person_id = p_person_id
AND paaf.person_id = ppos.person_id
/*AND (ppos.date_start = (SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = paaf.person_id
AND TRUNC(SYSDATE) BETWEEN TRUNC(ppos1.date_start) AND NVL(TRUNC(ppos1.actual_termination_date), TO_DATE(’31-Dec-4712′)))
OR ppos.date_start = (SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = paaf.person_id
AND TRUNC(ppos1.date_start) >= TRUNC(SYSDATE))
OR ppos.actual_termination_date BETWEEN (TRUNC(SYSDATE)- l_term_upp_limit) AND (TRUNC(SYSDATE))) –V5.1
AND ppos.actual_termination_date IS NOT NULL*/
AND ppos.period_of_service_id = (SELECT MAX(period_of_service_id) FROM per_periods_of_service a WHERE a.person_id = ppos.person_id AND ppos.actual_termination_date IS NOT NULL) –V5.2
AND (TRUNC(paaf.effective_end_date) >= TRUNC(NVL(g_effective_date, SYSDATE))
OR TRUNC(paaf.effective_end_date) BETWEEN (TRUNC(SYSDATE)-l_term_upp_limit) AND (TRUNC(SYSDATE))) –V4.5
GROUP BY paaf.person_id
, past.user_status
, paaf.assignment_status_type_id
, paaf.effective_start_date
, ppos.actual_termination_date
ORDER BY paaf.effective_start_date
)
WHERE status_delta IS NULL
OR status_delta <> 0
UNION
–Transfer to non-live
SELECT xxaa_abc_status_typ
( employment_status
, TO_CHAR(min_effective_date,’DD-MON-YY’)
, ’01-JAN-3000′
, is_back_dated
( person_id
, min_effective_date
, NVL(lead(min_effective_date)over(order by min_effective_date)-1,’31-Dec-4712′)
, p_record_id
, ‘Status’
, NULL — V4.6
)
) status_data
FROM (SELECT paaf.person_id person_id
, MIN(paaf.effective_start_date) min_effective_date
, past.user_status user_status
, paaf.assignment_status_type_id – lag(paaf.assignment_status_type_id) over(order by paaf.effective_start_date) status_delta
, ppos.date_start date_start
, ‘Terminate Assignment’ employment_status
, paaf.location_id – lag(paaf.location_id) over(order by paaf.effective_start_date) loc_delta
FROM per_all_assignments_f paaf
, per_assignment_status_types past
, per_periods_of_service ppos
, xxaa_abc_emp_tab xket
WHERE past.assignment_status_type_id = paaf.assignment_status_type_id
AND paaf.assignment_type = ‘E’
AND paaf.primary_flag = ‘Y’
AND paaf.ass_attribute30 IN (‘A’,’P’)
AND paaf.person_id = p_person_id
AND paaf.person_id = ppos.person_id
/*AND ppos.actual_termination_date IS NULL
AND (ppos.date_start = (SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = paaf.person_id
AND TRUNC(SYSDATE) BETWEEN TRUNC(ppos1.date_start) AND NVL(TRUNC(ppos1.actual_termination_date), TO_DATE(’31-Dec-4712′)))
OR ppos.date_start = (SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = paaf.person_id
AND TRUNC(ppos1.date_start) >= TRUNC(SYSDATE))
OR ppos.actual_termination_date BETWEEN (TRUNC(SYSDATE)- l_term_upp_limit) AND (TRUNC(SYSDATE)))*/ –V5.1
AND ppos.period_of_service_id = (SELECT MAX(period_of_service_id) FROM per_periods_of_service a WHERE a.person_id = ppos.person_id AND ppos.actual_termination_date IS NULL) –V5.2
AND TRUNC(paaf.effective_end_date) >= TRUNC(NVL(g_effective_date, SYSDATE))
AND ( paaf.location_id NOT IN ( SELECT attribute3
FROM fnd_lookup_values flv
WHERE lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND attribute2 IS NOT NULL
)
)
AND xket.person_id = paaf.person_id
AND xket.record_id = (SELECT MAX(record_id) FROM xxaa_abc_emp_tab WHERE person_id = paaf.person_id
AND record_id < (SELECT MAX(record_id) FROM xxaa_abc_emp_tab WHERE person_id = paaf.person_id))
GROUP BY paaf.person_id
, past.user_status
, paaf.assignment_status_type_id
, paaf.effective_start_date
, ppos.date_start
, xket.employment_status
, paaf.location_id
ORDER BY paaf.effective_start_date
)
WHERE status_delta IS NULL
OR status_delta <> 0
OR loc_delta IS NULL
OR loc_delta <> 0;

— Cursor to get Labour Account Details
CURSOR csr_account_details(p_person_id NUMBER)
IS
–Initial + Incremental
SELECT xxaa_abc_pri_account_typ
( ‘Sample’
|| ‘/’|| ‘Retail’
|| ‘/’|| attribute5
|| ‘/’|| attribute6
|| ‘/’|| attribute7
|| ‘/’|| attribute1
|| ‘/’|| attribute13
|| ‘/’||DECODE(attribute9, ‘Retail’,dept_display,’Convenience’, ‘Store’,’Small Retail’,d_attribute2)
|| ‘/’|| SUBSTR (job_name,INSTR (job_name, ‘|’) + 1,INSTR (SUBSTR (job_name, INSTR (job_name, ‘|’) + 1), ‘|’, -1) – 1)
, attribute1
|| ‘/’|| attribute5
|| ‘/’|| attribute6
|| ‘/’|| attribute7
|| ‘/’|| attribute8
|| ‘/’|| DECODE (attribute1, ‘Convenience’, ‘Store’, ‘Small Retail’,d_attribute2,’Retail’,dept_display)
|| ‘/’|| SUBSTR (job_name, 2, 4)
, TO_CHAR(min_effective_date,’DD-MON-YY’)
, ’01-JAN-3000′
, is_back_dated
( person_id
, min_effective_date
, NVL(lead(min_effective_date)over(order by min_effective_date)-1,’31-Dec-4712′)
, p_record_id
, ‘Account’
, NULL ) — V4.6
) account_data
FROM (SELECT paaf.person_id person_id
, MIN(paaf.effective_start_date) min_effective_date
, flv.attribute1
, flv.attribute5
, flv.attribute6
, flv.attribute7
, flv.attribute8
, flv.attribute13
, flv.attribute9
, dept_map.dept_display dept_display
, NVL(FLVD.ATTRIBUTE2,DEPT_MAP.DEPT_DISPLAY) d_attribute2 –V4.8
, pj.name job_name
, paaf.job_id – lag(paaf.job_id) over(order by paaf.effective_start_date) job_delta
, paaf.location_id – lag(paaf.location_id) over(order by paaf.effective_start_date) loc_delta
, CASE WHEN paaf.ass_attribute1 <> lag(paaf.ass_attribute1) over(order by paaf.effective_start_date)
THEN 1
ELSE 0
END dept_delta
FROM per_all_assignments_f paaf
, per_jobs pj
, hr_all_organization_units haou
, fnd_lookup_values flv
, fnd_lookup_values flvd
, (SELECT ffvt.flex_value_meaning dept_code
, ffvt.description dept_display
FROM fnd_flex_value_sets ffvs
, fnd_flex_values ffv
, fnd_flex_values_tl ffvt
WHERE ffv.flex_value_set_id = ffvs.flex_value_set_id
AND ffv.flex_value_id = ffvt.flex_value_id
AND ffvs.flex_value_set_name = ‘ABC_RETAIL_DEPT’
) dept_map
, per_periods_of_service ppos
WHERE paaf.organization_id = haou.organization_id
AND paaf.job_id = pj.job_id
AND flv.lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND flv.enabled_flag = ‘Y’
AND flv.lookup_code = SUBSTR(haou.name,2,4)
AND flv.security_group_id = 0
AND flvd.lookup_type(+) = ‘xxaa_ABC_DEPT_MAPPING’
AND flvd.enabled_flag(+) = ‘Y’
AND flvd.security_group_id(+) = 0
AND flvd.lookup_code(+) = paaf.ass_attribute1
AND dept_map.dept_code (+) = paaf.ass_attribute1
AND paaf.assignment_type = ‘E’
AND paaf.primary_flag = ‘Y’
AND paaf.ass_attribute30 IN (‘A’,’P’)
AND paaf.person_id = p_person_id
–AND TRUNC(paaf.effective_end_date) >= TRUNC(SYSDATE)
AND TRUNC(paaf.effective_end_date) >= TRUNC(NVL(g_effective_date, SYSDATE))
–Exclude during transfer to non-live
AND ( paaf.location_id IN ( SELECT attribute3
FROM fnd_lookup_values flv
WHERE lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND attribute2 IS NOT NULL
)
)
–Exclude during termination
AND paaf.person_id = ppos.person_id
/*AND ppos.actual_termination_date IS NULL
AND (ppos.date_start = (SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = paaf.person_id
AND TRUNC(SYSDATE) BETWEEN TRUNC(ppos1.date_start) AND NVL(TRUNC(ppos1.actual_termination_date), TO_DATE(’31-Dec-4712′)))
OR ppos.date_start = (SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = paaf.person_id
AND TRUNC(ppos1.date_start) >= TRUNC(SYSDATE))
OR ppos.actual_termination_date BETWEEN (TRUNC(SYSDATE)- l_term_upp_limit) AND (TRUNC(SYSDATE))) */–V5.1
AND ppos.period_of_service_id = (SELECT MAX(period_of_service_id) FROM per_periods_of_service a WHERE a.person_id = ppos.person_id AND ppos.actual_termination_date IS NULL) –V5.2
GROUP BY paaf.person_id
, flv.lookup_code,flv.attribute1,flv.attribute5,flv.attribute6,flv.attribute7,flv.attribute8,flv.attribute13,flv.attribute9
, dept_map.dept_display,flvd.attribute2
, pj.name
, paaf.effective_start_date
, paaf.job_id
, paaf.location_id
, paaf.ass_attribute1
ORDER BY MIN(paaf.effective_start_date)
)
WHERE job_delta IS NULL
OR job_delta <> 0
OR loc_delta IS NULL
OR loc_delta <> 0
OR dept_delta IS NULL
OR dept_delta <> 0
UNION
–Termination
SELECT xxaa_abc_pri_account_typ
( ‘Sample’
|| ‘/’|| ‘Retail’
|| ‘/’|| attribute5
|| ‘/’|| attribute6
|| ‘/’|| attribute7
|| ‘/’|| attribute1
|| ‘/’|| attribute13
|| ‘/’||DECODE(attribute9, ‘Retail’,dept_display,’Convenience’, ‘Store’,’Small Retail’,d_attribute2)
|| ‘/’|| SUBSTR (job_name,INSTR (job_name, ‘|’) + 1,INSTR (SUBSTR (job_name, INSTR (job_name, ‘|’) + 1), ‘|’, -1) – 1)
, attribute1
|| ‘/’|| attribute5
|| ‘/’|| attribute6
|| ‘/’|| attribute7
|| ‘/’|| attribute8
|| ‘/’|| DECODE (attribute1, ‘Convenience’, ‘Store’, ‘Small Retail’,d_attribute2,’Retail’,dept_display)
|| ‘/’|| SUBSTR (job_name, 2, 4)
, DECODE(ROWNUM, 1, TO_CHAR(min_effective_date,’DD-MON-YY’), lag(TO_CHAR(min_effective_date,’DD-MON-YY’))over(order by min_effective_date))
, DECODE(ROWNUM, 1, ’01-JAN-3000′, TO_CHAR(actual_termination_date,’DD-MON-YYYY’))
, is_back_dated
( person_id
, min_effective_date
, NVL(lead(min_effective_date)over(order by min_effective_date)-1,’31-Dec-4712′)
, p_record_id
, ‘Account’
, ‘TERMINATION’)
) account_data
FROM (SELECT paaf.person_id person_id
, MIN(paaf.effective_start_date) min_effective_date
, flv.attribute1
, flv.attribute5
, flv.attribute6
, flv.attribute7
, flv.attribute8
, flv.attribute13
, flv.attribute9
, dept_map.dept_display dept_display
, NVL(FLVD.ATTRIBUTE2,DEPT_MAP.DEPT_DISPLAY) d_attribute2
, pj.name job_name
, paaf.job_id – lag(paaf.job_id) over(order by paaf.effective_start_date) job_delta
, paaf.location_id – lag(paaf.location_id) over(order by paaf.effective_start_date) loc_delta
, CASE WHEN paaf.ass_attribute1 <> lag(paaf.ass_attribute1) over(order by paaf.effective_start_date)
THEN 1
ELSE 0
END dept_delta
, paaf.assignment_status_type_id – lag(paaf.assignment_status_type_id) over(order by paaf.effective_start_date) status_delta
, ppos.actual_termination_date
FROM per_all_assignments_f paaf
, per_jobs pj
, hr_all_organization_units haou
, fnd_lookup_values flv
, fnd_lookup_values flvd
, (SELECT ffvt.flex_value_meaning dept_code
, ffvt.description dept_display
FROM fnd_flex_value_sets ffvs
, fnd_flex_values ffv
, fnd_flex_values_tl ffvt
WHERE ffv.flex_value_set_id = ffvs.flex_value_set_id
AND ffv.flex_value_id = ffvt.flex_value_id
AND ffvs.flex_value_set_name = ‘ABC_RETAIL_DEPT’
) dept_map
, per_periods_of_service ppos
WHERE paaf.organization_id = haou.organization_id
AND paaf.job_id = pj.job_id
AND flv.lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND flv.enabled_flag = ‘Y’
AND flv.lookup_code = SUBSTR(haou.name,2,4)
AND flv.security_group_id = 0
AND flvd.lookup_type(+) = ‘xxaa_ABC_DEPT_MAPPING’
AND flvd.enabled_flag(+) = ‘Y’
AND flvd.security_group_id(+) = 0
AND flvd.lookup_code(+) = paaf.ass_attribute1
AND dept_map.dept_code (+) = paaf.ass_attribute1
AND paaf.assignment_type = ‘E’
AND paaf.primary_flag = ‘Y’
AND paaf.ass_attribute30 IN (‘A’,’P’)
AND paaf.person_id = p_person_id
AND ppos.person_id = paaf.person_id
–AND ppos.last_update_date BETWEEN NVL(g_last_run_date, SYSDATE) AND NVL(g_curr_run_date, SYSDATE)
/*AND ppos.actual_termination_date IS NOT NULL
AND (ppos.date_start = (SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = paaf.person_id
AND TRUNC(SYSDATE) BETWEEN TRUNC(ppos1.date_start) AND NVL(TRUNC(ppos1.actual_termination_date), TO_DATE(’31-Dec-4712′)))
OR ppos.date_start = (SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = paaf.person_id
AND TRUNC(ppos1.date_start) >= TRUNC(SYSDATE))
OR ppos.actual_termination_date BETWEEN (TRUNC(SYSDATE)- l_term_upp_limit) AND (TRUNC(SYSDATE)))*/ –V5.1
AND ppos.period_of_service_id = (SELECT MAX(period_of_service_id) FROM per_periods_of_service a WHERE a.person_id = ppos.person_id AND ppos.actual_termination_date IS NOT NULL) –V5.2
AND (TRUNC(paaf.effective_end_date) >= TRUNC(NVL(g_effective_date, SYSDATE))
OR TRUNC(paaf.effective_end_date) BETWEEN (TRUNC(SYSDATE)-l_term_upp_limit) AND (TRUNC(SYSDATE))) –V4.5
GROUP BY paaf.person_id
, flv.lookup_code,flv.attribute1,flv.attribute5,flv.attribute6,flv.attribute7,flv.attribute8,flv.attribute13,flv.attribute9
, dept_map.dept_display,flvd.attribute2
, pj.name
, paaf.effective_start_date
, paaf.job_id
, paaf.location_id
, paaf.ass_attribute1
, ppos.actual_termination_date
, paaf.assignment_status_type_id
ORDER BY MIN(paaf.effective_start_date)
)
WHERE job_delta IS NULL
OR job_delta <> 0
OR loc_delta IS NULL
OR loc_delta <> 0
OR dept_delta IS NULL
OR dept_delta <> 0
OR status_delta IS NULL
OR status_delta <> 0
UNION
–Transfer to non-live
SELECT xxaa_abc_pri_account_typ
( primary_job_account
, primary_labour_account
, PRI_JOB_ACCOUNT_EFFECTIVE_DATE
, TO_CHAR(min_effective_date-1,’DD-MON-YYYY’)
, is_back_dated
( person_id
, min_effective_date
, NVL(lead(min_effective_date)over(order by min_effective_date)-1,’31-Dec-4712′)
, p_record_id
, ‘Account’
, ‘TRANSFER_TO_NON_LIVE’)
) account_data
FROM (SELECT paaf.person_id person_id
, MIN(paaf.effective_start_date) min_effective_date
, paaf.job_id – lag(paaf.job_id) over(order by paaf.effective_start_date) job_delta
, paaf.location_id – lag(paaf.location_id) over(order by paaf.effective_start_date) loc_delta
, CASE WHEN paaf.ass_attribute1 <> lag(paaf.ass_attribute1) over(order by paaf.effective_start_date)
THEN 1
ELSE 0
END dept_delta
, xket.primary_job_account primary_job_account
, xket.primary_labour_account primary_labour_account
, xket.PRI_JOB_ACCOUNT_EFFECTIVE_DATE PRI_JOB_ACCOUNT_EFFECTIVE_DATE
FROM per_all_assignments_f paaf
, hr_all_organization_units haou
, xxaa_abc_emp_tab xket
WHERE paaf.organization_id = haou.organization_id
AND paaf.assignment_type = ‘E’
AND paaf.primary_flag = ‘Y’
AND paaf.ass_attribute30 IN (‘A’,’P’)
AND paaf.person_id = p_person_id
AND TRUNC(paaf.effective_end_date) >= TRUNC(NVL(g_effective_date, SYSDATE))
AND ( paaf.location_id NOT IN ( SELECT attribute3
FROM fnd_lookup_values flv
WHERE lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND attribute2 IS NOT NULL
)
)
AND xket.person_id = paaf.person_id
AND xket.record_id = (SELECT MAX(record_id) FROM xxaa_abc_emp_tab WHERE person_id = paaf.person_id
AND record_id < (SELECT MAX(record_id) FROM xxaa_abc_emp_tab WHERE person_id = paaf.person_id))
GROUP BY paaf.person_id
, paaf.effective_start_date
, paaf.job_id
, paaf.location_id
, paaf.ass_attribute1
, xket.primary_job_account
, xket.primary_labour_account
, xket.PRI_JOB_ACCOUNT_EFFECTIVE_DATE
ORDER BY MIN(paaf.effective_start_date)
)
WHERE job_delta IS NULL
OR job_delta <> 0
OR loc_delta IS NULL
OR loc_delta <> 0
OR dept_delta IS NULL
OR dept_delta <> 0;

BEGIN

g_effective_date := TO_DATE(p_effective_date,’RRRR/MM/DD HH24:MI:SS’);

xxaa_abc_util_pkg.write_debug(‘————————————————–‘);

xxaa_abc_util_pkg.write_debug (‘Begin pop_calendar_records g_last_run_date – ‘||g_last_run_date||’ g_curr_run_date – ‘||g_curr_run_date||’g_effective_date ‘||g_effective_date||’p_person_id – ‘||p_person_id||’ for p_record_id – ‘||p_record_id||’p_effective_date ‘||p_effective_date);
l_record_id := p_record_id;

OPEN csr_get_term_limit;
FETCH csr_get_term_limit INTO l_term_upp_limit;
CLOSE csr_get_term_limit;

— Update Badge Details
OPEN csr_badge_details(p_person_id);
LOOP
FETCH csr_badge_details
BULK COLLECT INTO l_badge_data LIMIT c_limit;
EXIT WHEN l_badge_data.COUNT = 0;
FOR i IN l_badge_data.first .. l_badge_data.last
LOOP
/*IF p_mode = ‘Calendar’
THEN
xxaa_abc_util_pkg.write_debug (‘V4.3 pop_calendar_records In calendar’);
INSERT INTO
TABLE(SELECT xxaa_abc_emp_data_stg.badge_details
FROM xxaa_abc_emp_data_stg
WHERE xxaa_abc_emp_data_stg.person_id = p_person_id)
VALUES(l_badge_data(i).badge_number,l_badge_data(i).effective_date,l_badge_data(i).expiration_date);
xxaa_abc_util_pkg.write_debug (‘V4.3 pop_calendar_records after calendar’);
ELSE*/
xxaa_abc_util_pkg.write_debug(‘Insert into BADGE_DETAILS column ‘||l_badge_data(i).badge_number||l_badge_data(i).effective_date||l_badge_data(i).expiration_date);
INSERT INTO
TABLE(SELECT xxaa_abc_emp_tab.badge_details
FROM xxaa_abc_emp_tab
WHERE xxaa_abc_emp_tab.record_id = l_record_id)
VALUES(l_badge_data(i).badge_number,l_badge_data(i).effective_date,l_badge_data(i).expiration_date);
–END IF;
END LOOP;
END LOOP;

IF p_mode = ‘Calendar’
THEN
DELETE FROM TABLE(SELECT xxaa_abc_emp_data_stg.badge_details
FROM xxaa_abc_emp_data_stg
WHERE xxaa_abc_emp_data_stg.person_id = p_person_id)
WHERE badge_number is null;
ELSE
DELETE FROM TABLE(SELECT xxaa_abc_emp_tab.badge_details
FROM xxaa_abc_emp_tab
WHERE xxaa_abc_emp_tab.record_id = l_record_id)
WHERE badge_number is null;
END IF;

— Employment Status Details
OPEN csr_emp_status_details(p_person_id);
LOOP
FETCH csr_emp_status_details
BULK COLLECT INTO l_status_data LIMIT c_limit;
— Employment Status Details
EXIT WHEN l_status_data.COUNT = 0;
FOR i IN l_status_data.first .. l_status_data.last
LOOP
/*IF p_mode = ‘Calendar’
THEN
INSERT INTO
TABLE(SELECT xxaa_abc_emp_data_stg.employment_details
FROM xxaa_abc_emp_data_stg
WHERE xxaa_abc_emp_data_stg.person_id = p_person_id)
VALUES(l_status_data(i).employment_status,l_status_data(i).effective_date,l_status_data(i).expiration_date,l_status_data(i).back_dated);
ELSE*/
xxaa_abc_util_pkg.write_debug(‘Insert into EMPLOYMENT_DETAILS column ‘||l_status_data(i).employment_status||l_status_data(i).effective_date||l_status_data(i).expiration_date||l_status_data(i).back_dated);
INSERT INTO
TABLE(SELECT xxaa_abc_emp_tab.employment_details
FROM xxaa_abc_emp_tab
WHERE xxaa_abc_emp_tab.record_id = l_record_id)
VALUES(l_status_data(i).employment_status,l_status_data(i).effective_date,l_status_data(i).expiration_date,l_status_data(i).back_dated);
–END IF;
END LOOP;
END LOOP;

IF p_mode = ‘Calendar’
THEN
DELETE FROM TABLE(SELECT xxaa_abc_emp_data_stg.employment_details
FROM xxaa_abc_emp_data_stg
WHERE xxaa_abc_emp_data_stg.person_id = p_person_id)
WHERE employment_status is null;
ELSE
DELETE FROM TABLE(SELECT xxaa_abc_emp_tab.employment_details
FROM xxaa_abc_emp_tab
WHERE xxaa_abc_emp_tab.record_id = l_record_id)
WHERE employment_status is null;
END IF;

— Account Details
OPEN csr_account_details(p_person_id);
LOOP
FETCH csr_account_details
BULK COLLECT INTO l_account_data LIMIT c_limit;
EXIT WHEN l_account_data.COUNT = 0;

FOR i IN l_account_data.first .. l_account_data.last
LOOP
/*IF p_mode = ‘Calendar’
THEN
INSERT INTO
TABLE(SELECT xxaa_abc_emp_data_stg.account_details
FROM xxaa_abc_emp_data_stg
WHERE xxaa_abc_emp_data_stg.person_id = p_person_id)
VALUES(l_account_data(i).job_account
,l_account_data(i).labour_account
,l_account_data(i).effective_date
,l_account_data(i).expiration_date
,l_account_data(i).back_dated);
ELSE*/
xxaa_abc_util_pkg.write_debug(‘Insert into ACCOUNT_DETAILS column ‘||l_account_data(i).job_account||l_account_data(i).labour_account||l_account_data(i).effective_date||l_account_data(i).expiration_date||l_account_data(i).back_dated);
INSERT INTO
TABLE(SELECT xxaa_abc_emp_tab.account_details
FROM xxaa_abc_emp_tab
WHERE xxaa_abc_emp_tab.record_id = l_record_id)
VALUES(l_account_data(i).job_account
,l_account_data(i).labour_account
,l_account_data(i).effective_date
,l_account_data(i).expiration_date
,l_account_data(i).back_dated);
–END IF;
END LOOP;
END LOOP;

IF p_mode = ‘Calendar’
THEN
DELETE FROM TABLE(SELECT xxaa_abc_emp_data_stg.account_details
FROM xxaa_abc_emp_data_stg
WHERE xxaa_abc_emp_data_stg.person_id = p_person_id)
WHERE job_account IS NULL;
ELSE
DELETE FROM TABLE(SELECT xxaa_abc_emp_tab.account_details
FROM xxaa_abc_emp_tab
WHERE xxaa_abc_emp_tab.record_id = l_record_id)
WHERE job_account IS NULL;
END IF;

xxaa_abc_util_pkg.write_debug(‘————————————————–‘);

EXCEPTION
WHEN OTHERS THEN
xxaa_abc_util_pkg.write_log ( ‘Exception – pop_calendar_records – ‘||SQLERRM);
END pop_calendar_records;
— —————————————————————————–
— V4.3 Function to check if record has been processed in current run
— —————————————————————————–
FUNCTION is_record_processed
(p_person_id NUMBER
,p_mode VARCHAR2)
RETURN VARCHAR2
IS
— Local Variables
l_curr_run_processed VARCHAR2(1) := ‘N’;

— Cursor to check if record has been created for employee in current run
CURSOR csr_curr_run_rec(p_person_id NUMBER)
IS
SELECT ‘Y’
FROM xxaa_abc_emp_tab xket
WHERE xket.person_id = p_person_id
AND xket.run_number = g_run_number;

— Cursor to check if record has been created for employee in current run
CURSOR csr_stg_run_rec(p_person_id NUMBER)
IS
SELECT ‘Y’
FROM xxaa_abc_emp_data_stg stg
WHERE stg.person_id = p_person_id;
BEGIN
l_curr_run_processed := ‘N’;

IF p_mode = ‘Normal’
THEN
— Check if person has already been processed in current run
OPEN csr_curr_run_rec(p_person_id);
FETCH csr_curr_run_rec INTO l_curr_run_processed;
CLOSE csr_curr_run_rec;
ELSE
— Check if person has already been processed in staging table
OPEN csr_stg_run_rec(p_person_id);
FETCH csr_stg_run_rec INTO l_curr_run_processed;
CLOSE csr_stg_run_rec;
END IF;
RETURN l_curr_run_processed;
EXCEPTION
WHEN OTHERS THEN
xxaa_abc_util_pkg.write_log ( ‘Exception – is_record_processed – ‘||SQLERRM);

END is_record_processed;
— —————————————————————————–
— V4.3 Procedure to check for future or past changes
— —————————————————————————–
PROCEDURE pop_past_future_change
(p_person_id NUMBER
,p_store_id NUMBER
,p_thread_id NUMBER
,p_last_run_date DATE
,p_curr_run_date DATE
)
IS
— Local Variables
l_person_id NUMBER;
l_is_record_processed VARCHAR2(1);
l_rec_count NUMBER;
l_rtc NUMBER;
l_rowcount NUMBER;
l_thread_id NUMBER := 1;
l_badge_number VARCHAR2(50);
l_badge_eff_date VARCHAR2(50);
l_emp_status_eff_date VARCHAR2(50);
l_emp_status VARCHAR2(100);
l_pri_lab_date VARCHAR2(50);
l_pri_lab_acnt VARCHAR2(100);
l_pri_job_date VARCHAR2(100);
l_pri_job_acnt VARCHAR2(1000);
l_record_type VARCHAR2(50);

— Cursor to check if a past or future change has taken place for a calendar entity
CURSOR csr_past_fut_chg
IS
–Future Initial for a store which go-live today (Initial records having future events)
SELECT papf.person_id, ‘INITIAL’ record_type — V4.5 Removed Distinct
FROM per_all_people_f papf
, per_all_assignments_f paaf
, per_periods_of_service ppos
, pay_people_groups ppg
, hr_all_organization_units haou
, fnd_lookup_values flv
WHERE 1=1
AND papf.person_id = paaf.person_id
AND papf.current_employee_flag = ‘Y’
AND paaf.assignment_type = ‘E’
AND paaf.primary_flag = ‘Y’
AND paaf.ass_attribute30 IN (‘A’,’P’)
–AND g_effective_date BETWEEN papf.effective_start_date AND papf.effective_end_date
AND papf.person_id = ppos.person_id
AND ppos.date_start = (SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = papf.person_id
AND g_effective_date BETWEEN ppos1.date_start
AND NVL(ppos1.actual_termination_date
, TO_DATE(’31-Dec-4712′))
)
AND ppg.segment3 IN (‘Retail 4 Weekly’,’Retail Salaried’)
AND paaf.people_group_id = ppg.people_group_id
AND paaf.organization_id = haou.organization_id
AND flv.lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND flv.enabled_flag = ‘Y’
AND flv.lookup_code = SUBSTR(haou.name,2,4)
AND flv.attribute2 IS NOT NULL
AND flv.security_group_id = 0
AND TO_DATE(flv.attribute2, ‘RRRR/MM/DD HH24:MI:SS’) <= g_effective_date
AND flv.lookup_code = NVL(TO_CHAR(p_store_id), flv.lookup_code)
AND paaf.person_id = NVL(p_person_id, paaf.person_id)
AND NOT EXISTS ( SELECT ‘Y’
FROM xxaa_abc_emp_header_tab xkeiht
WHERE 1=1
–AND xkeiht.store_id = SUBSTR(haou.name,2,4)
AND xkeiht.store_id = flv.lookup_code
)
AND (paaf.effective_start_date > TRUNC(g_effective_date) AND papf.effective_start_date > TRUNC(g_effective_date)
AND TRUNC(flv.last_update_date) BETWEEN p_last_run_date AND p_curr_run_date)
UNION ALL –V4.5
— Future Incremental
SELECT papf.person_id, ‘INCREMENTAL’ record_type — V4.5 Removed Distinct
FROM per_all_people_f papf
, per_all_assignments_f paaf
, per_periods_of_service ppos
, pay_people_groups ppg
, hr_all_organization_units haou
, fnd_lookup_values flv
WHERE 1=1
AND papf.person_id = paaf.person_id
AND papf.current_employee_flag = ‘Y’
AND paaf.assignment_type = ‘E’
AND paaf.primary_flag = ‘Y’
AND paaf.ass_attribute30 IN (‘A’,’P’)
AND g_effective_date BETWEEN papf.effective_start_date AND papf.effective_end_date
AND papf.person_id = ppos.person_id
AND ppos.date_start = (SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = papf.person_id
AND g_effective_date BETWEEN ppos1.date_start
AND NVL(ppos1.actual_termination_date
, TO_DATE(’31-Dec-4712′))
)
AND ppos.actual_termination_date IS NULL
AND ppg.segment3 IN (‘Retail 4 Weekly’,’Retail Salaried’)
AND paaf.people_group_id = ppg.people_group_id
AND paaf.organization_id = haou.organization_id
AND flv.lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND flv.enabled_flag = ‘Y’
AND flv.lookup_code = SUBSTR(haou.name,2,4)
AND flv.attribute2 IS NOT NULL
AND flv.security_group_id = 0
AND TO_DATE(flv.attribute2, ‘RRRR/MM/DD HH24:MI:SS’) <= g_effective_date
AND flv.lookup_code = NVL(TO_CHAR(p_store_id), flv.lookup_code)
AND paaf.person_id = NVL(p_person_id, paaf.person_id)
AND EXISTS ( SELECT ‘Y’
FROM xxaa_abc_emp_header_tab xkeiht
WHERE 1=1
–AND xkeiht.store_id = SUBSTR(haou.name,2,4)
AND xkeiht.store_id = flv.lookup_code
)
AND (paaf.effective_start_date > TRUNC(g_effective_date)
AND EXISTS (SELECT ‘Y’ from per_all_assignments_f paaf1
WHERE paaf1.person_id = paaf.person_id
AND paaf1.last_update_date BETWEEN p_last_run_date AND p_curr_run_date)
)
UNION ALL — V4.5
— Future Termination
SELECT xket.person_id, ‘TERMINATION’ record_type — V4.5 Removed Distinct
FROM per_periods_of_service ppos
, xxaa_abc_emp_tab xket
WHERE 1=1
AND ppos.actual_termination_date > g_effective_date
AND ppos.last_update_date BETWEEN p_last_run_date AND p_curr_run_date
AND xket.person_id = ppos.person_id
AND ppos.person_id = NVL(p_person_id, ppos.person_id)
AND ppos.actual_termination_date IS NOT NULL
AND xket.record_id = ( SELECT MAX(record_id)
FROM xxaa_abc_emp_tab
WHERE person_id = ppos.person_id)
UNION ALL — V4.5
— Future transfer to Non-Live store
SELECT papf.person_id, ‘NON_LIVE’ record_type — V4.5 Removed Distinct
FROM per_all_people_f papf
, per_all_assignments_f paaf
, per_periods_of_service ppos
, hr_all_organization_units haou
, xxaa_abc_emp_tab xket
WHERE 1 = 1
AND papf.person_id = paaf.person_id
AND papf.person_id = ppos.person_id
AND paaf.organization_id = haou.organization_id
AND paaf.person_id = xket.person_id
AND ( paaf.location_id NOT IN ( SELECT attribute3
FROM fnd_lookup_values flv
WHERE lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND attribute2 IS NOT NULL
)
)
AND papf.current_employee_flag = ‘Y’
AND paaf.assignment_type = ‘E’
AND paaf.ass_attribute30 = ‘A’
AND paaf.primary_flag = ‘Y’
AND xket.attribute1 IS NULL — ‘TRANSFERRED’
AND xket.record_id = ( SELECT MAX(record_id)
FROM xxaa_abc_emp_tab
WHERE person_id = paaf.person_id
)
AND paaf.person_id = NVL(p_person_id, paaf.person_id)
AND ppos.date_start = ( SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = papf.person_id
AND g_effective_date BETWEEN ppos1.date_start AND NVL ( ppos1.actual_termination_date,TO_DATE (’31-Dec-4712′))
)
AND g_effective_date BETWEEN papf.effective_start_date AND papf.effective_end_date
AND paaf.effective_start_date > TRUNC(g_effective_date)
AND SUBSTR (haou.name, 2, 4) = NVL (TO_CHAR (p_store_id), SUBSTR (haou.name, 2, 4))
AND ( papf.last_update_date BETWEEN p_last_run_date AND p_curr_run_date
OR paaf.last_update_date BETWEEN p_last_run_date AND p_curr_run_date);

— Cursor to get details to populate into staging table
CURSOR csr_get_fp_emp_details(p_person_id NUMBER)
IS
/*SELECT *
FROM xxaa_abc_emp_tab
WHERE record_id = ( SELECT MAX(record_id)
FROM xxaa_abc_emp_tab
WHERE person_id = p_person_id
);*/
SELECT xket.person_id
, xket.assignment_id
, xket.employee_number
, xket.ni_number
, xket.title
, xket.first_name
, xket.last_name
, TO_CHAR(xket.date_of_birth, ‘DD-MON-YYYY’) date_of_birth –V5.5
, xket.age
, xket.payroll_number
, xket.organization
, xket.location
, xket.job
, xket.grade
, xket.normal_hours
, xket.trade_union_shop_steward
, xket.date_start date_start
, TO_NUMBER(xket.length_of_service) length_of_service
, xket.addr_line_1
, xket.addr_line_2
, xket.addr_line_3
, xket.city
, xket.county
, xket.postal_code
, xket.country
, xket.address_date_from
, xket.home_phone_number
, xket.home_phone_date_from
, xket.mobile_phone_number
, xket.mobile_phone_date_from
, xket.email_address
, xket.store_number
, xket.workforce_timekeeper_license
, xket.middle_initial
, past.user_status employment_status
, paaf.effective_start_date empl_status_effective_date
, xket.biometric_employee_flag
, xket.channel
, xket.zone
, xket.region
, xket.area
, xket.store
, xket.department
, xket.job_code job_code
, flv.attribute1
|| ‘/’
|| flv.attribute5
|| ‘/’
|| flv.attribute6
|| ‘/’
|| flv.attribute7
|| ‘/’
|| flv.attribute8
|| ‘/’
|| DECODE (flv.attribute9, ‘Convenience’, ‘Store’, ‘Small Retail’,NVL(FLVD.ATTRIBUTE2,DEPT_MAP.DEPT_DISPLAY),’Retail’,DEPT_MAP.DEPT_DISPLAY) –V4.1
|| ‘/’
|| SUBSTR (pj.name, 2, 4) primary_labour_account
, paaf.effective_start_date pri_lab_account_effective_date
, xket.device_group
, DECODE( NVL(paaf.ass_attribute6, ‘NA’), ‘NA’, NULL , SUBSTR(haou.name,2,4)||paaf.ass_attribute6) BADGE_NUMBER
, DECODE(l_record_type, ‘NON_LIVE’, xket.badge_number_effective_date,
DECODE( NVL(paaf.ass_attribute6, ‘NA’), ‘NA’, NULL, TO_CHAR(paaf.effective_start_date, ‘DD-MON-YYYY’)|| ‘ 00:00’)) badge_number_effective_date
, xket.pay_rule
, NULL live_date
, TO_DATE(xket.role_hire_date) role_hire_date
, xket.clock_indicator
, xket.store_type
, ‘INCREMENTAL’ type
, NULL attribute1
, xket.employment_expiration_date employment_expiration_date
, xket.badge_expiration_date badge_expiration_date
, xket.labour_account_expiration_date labour_account_expiration_date
, xket.pay_rule_effective_date pay_rule_effective_date –V4.2
, xket.job_acc_segment7 job_acc_segment7 –V2.3
, xket.job_name job_name –V2.3
, TO_CHAR(’01-JAN-3000′) pri_job_account_exp_date –V2.3
, ‘Sample’
|| ‘/’
|| ‘Retail’
|| ‘/’
|| flv.attribute5
|| ‘/’
|| flv.attribute6
|| ‘/’
|| flv.attribute7
|| ‘/’
|| flv.attribute1
|| ‘/’
|| flv.attribute13
|| ‘/’
||DECODE(FLV.ATTRIBUTE9, ‘Retail’,DEPT_MAP.DEPT_DISPLAY,’Convenience’, ‘Store’,
‘Small Retail’,NVL(FLVD.ATTRIBUTE2,DEPT_MAP.DEPT_DISPLAY)) –V4.1
|| ‘/’
|| SUBSTR (pj.name,INSTR (pj.name, ‘|’) + 1,INSTR (SUBSTR (pj.name, INSTR (pj.name, ‘|’) + 1), ‘|’, -1) – 1) primary_job_account
, TO_CHAR ((paaf.effective_start_date), ‘DD-MON-YYYY’) pri_job_account_effective_date
, xket.worker_type worker_type
, xket.right_to_work_type right_to_work_type –V4.2
, xket.curr_store_cps_config curr_store_cps_config –V4.2
, xket.curr_store_cps_config old_store_cps_config –V4.8
FROM per_all_people_f papf
, per_all_assignments_f paaf
, per_assignment_status_types past
, hr_all_organization_units haou
, per_jobs pj
, fnd_lookup_values flv
, fnd_lookup_values flvd
,(SELECT ffvt.flex_value_meaning dept_code
, ffvt.description dept_display
FROM fnd_flex_value_sets ffvs
, fnd_flex_values ffv
, fnd_flex_values_tl ffvt
WHERE ffv.flex_value_set_id = ffvs.flex_value_set_id
AND ffv.flex_value_id = ffvt.flex_value_id
AND ffvs.flex_value_set_name = ‘ABC_RETAIL_DEPT’
) dept_map –V4.1
, xxaa_rtw_audit xra –V4.2
, xxaa_abc_emp_tab xket
WHERE 1=1
AND papf.person_id = paaf.person_id
AND paaf.person_id = p_person_id
–AND record_type = p_record_type
AND papf.current_employee_flag = ‘Y’
AND paaf.assignment_type = ‘E’
AND paaf.primary_flag = ‘Y’
AND paaf.ass_attribute30 IN (‘A’,’P’) –V3.6
AND g_effective_date between papf.effective_start_date and papf.effective_end_date
AND past.assignment_status_type_id = paaf.assignment_status_type_id
AND paaf.organization_id = haou.organization_id
AND paaf.job_id = pj.job_id
AND flv.lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND flv.enabled_flag = ‘Y’
AND flv.lookup_code = SUBSTR(haou.name,2,4)
AND flv.security_group_id = 0
AND flvd.lookup_type(+) = ‘xxaa_ABC_DEPT_MAPPING’ –V4.1
AND flvd.enabled_flag(+) = ‘Y’
AND flvd.security_group_id(+) = 0
AND flvd.lookup_code(+) = paaf.ass_attribute1
AND dept_map.dept_code (+) = paaf.ass_attribute1 –V4.1
AND xra.person_id(+) = papf.person_id –V4.2
AND NVL(xra.version_number, 1) = NVL((SELECT MAX(version_number) FROM xxaa_rtw_audit WHERE person_id = xra.person_id), 1)
AND xket.person_id = papf.person_id
AND xket.record_id = ( SELECT MAX(record_id)
FROM xxaa_abc_emp_tab
WHERE person_id = papf.person_id
)
AND paaf.effective_start_date > TRUNC(g_effective_date)
ORDER BY paaf.effective_start_date;

— Type Variables
TYPE fp_emp_details_tbl_type IS TABLE OF csr_get_fp_emp_details%ROWTYPE;
l_fp_emp_details_tab fp_emp_details_tbl_type := fp_emp_details_tbl_type();

TYPE recon_emp_tbl_type IS TABLE OF xxaa_abc_emp_data_stg%ROWTYPE;
l_recon_emp_tab recon_emp_tbl_type := recon_emp_tbl_type();
l_recon_emp_live_tab recon_emp_tbl_type := recon_emp_tbl_type();

CURSOR csr_get_eff_date( l_person_id NUMBER
— , l_location VARCHAR2
)
IS
SELECT badge_number
, badge_number_effective_date
, empl_status_effective_date
, employment_status
, pri_lab_account_effective_date
, primary_labour_account
, pri_job_account_effective_date
, primary_job_account
FROM xxaa_abc_emp_tab
WHERE record_id = ( SELECT MAX(record_id)
FROM xxaa_abc_emp_tab
WHERE person_id = l_person_id
–AND location = l_location
AND attribute1 IS NULL
);

l_badge_exp_date VARCHAR2(50);
l_term_exp_date VARCHAR2(50);

–Cursor to get dates for termination
CURSOR csr_term(p_person_id NUMBER)
IS
SELECT –TO_CHAR(ppos.actual_termination_date, ‘DD-MON-YYYY’) || ‘ 23:59’ expiration_date
DECODE( NVL(paaf.ass_attribute6, ‘NA’), ‘NA’, NULL , TO_CHAR(ppos.actual_termination_date, ‘DD-MON-YYYY’) || ‘ 23:59’) expiration_date — V5.4
, TO_CHAR(ppos.actual_termination_date, ‘DD-MON-YYYY’) || ‘ 23:59’ expiration_date
FROM per_periods_of_service ppos, per_all_assignments_f paaf
WHERE 1=1
AND ppos.person_id = p_person_id
AND paaf.person_id = ppos.person_id
AND ppos.date_start = (SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = paaf.person_id
AND g_effective_date BETWEEN ppos1.date_start AND NVL(ppos1.actual_termination_date, TO_DATE(’31-Dec-4712′))
)
AND paaf.person_id = ppos.person_id
AND paaf.assignment_type = ‘E’
AND paaf.primary_flag = ‘Y’
AND paaf.ass_attribute30 IN (‘A’,’P’)
AND g_effective_date BETWEEN paaf.effective_start_date AND paaf.effective_end_date
ORDER BY ppos.period_of_service_id DESC;

l_nonlive_date VARCHAR2(50);
— Cursor to get dates for transfer to non-live
CURSOR csr_non_live(p_person_id NUMBER)
IS
SELECT (TO_CHAR(paaf.effective_start_date-1, ‘DD-MON-YYYY’)||’ 23:59′)
FROM per_all_assignments_f paaf WHERE person_id = p_person_id
AND ( paaf.location_id NOT IN ( SELECT attribute3
FROM fnd_lookup_values flv
WHERE lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND attribute2 IS NOT NULL
)
)
ORDER BY paaf.effective_start_date DESC;

BEGIN
xxaa_abc_util_pkg.write_debug (‘Begin pop_past_future_change ‘||’; p_last_run_date – ‘||p_last_run_date||’; p_curr_run_date – ‘||p_curr_run_date);

— Get records with past or future change
FOR rec_past_fut_chg IN csr_past_fut_chg
LOOP
xxaa_abc_util_pkg.write_log ( ‘Calendar event exists for person_id – ‘||rec_past_fut_chg.person_id||’ in ‘||rec_past_fut_chg.record_type);
l_record_type := rec_past_fut_chg.record_type;

OPEN csr_term(rec_past_fut_chg.person_id);
FETCH csr_term INTO l_badge_exp_date, l_term_exp_date;
CLOSE csr_term;

OPEN csr_non_live(rec_past_fut_chg.person_id);
FETCH csr_non_live INTO l_nonlive_date;
CLOSE csr_non_live;
— Create row for record in staging table
OPEN csr_get_fp_emp_details(rec_past_fut_chg.person_id);
LOOP
l_fp_emp_details_tab.DELETE;
l_rec_count := 0;
l_rtc := 0;

FETCH csr_get_fp_emp_details BULK COLLECT INTO l_fp_emp_details_tab;– LIMIT g_bulk_limit;

l_rowcount := csr_get_fp_emp_details%ROWCOUNT;
l_thread_id := p_thread_id;

FOR i IN 1..l_fp_emp_details_tab.COUNT
LOOP
l_recon_emp_tab.EXTEND;
l_rtc := l_rtc + 1;
l_rec_count := l_rec_count + 1;

–Cursor to fetch values from staging table
OPEN csr_get_eff_date(l_fp_emp_details_tab(i).person_id);
FETCH csr_get_eff_date INTO l_badge_number, l_badge_eff_date, l_emp_status_eff_date, l_emp_status
, l_pri_lab_date, l_pri_lab_acnt, l_pri_job_date, l_pri_job_acnt;
CLOSE csr_get_eff_date;

l_recon_emp_tab(l_rtc).person_id := l_fp_emp_details_tab(i).person_id;
l_recon_emp_tab(l_rtc).assignment_id := l_fp_emp_details_tab(i).assignment_id;
l_recon_emp_tab(l_rtc).thread_id := l_thread_id;
l_recon_emp_tab(l_rtc).employee_number := l_fp_emp_details_tab(i).employee_number;
l_recon_emp_tab(l_rtc).ni_number := l_fp_emp_details_tab(i).ni_number;
l_recon_emp_tab(l_rtc).title := l_fp_emp_details_tab(i).title;
l_recon_emp_tab(l_rtc).first_name := l_fp_emp_details_tab(i).first_name;
l_recon_emp_tab(l_rtc).last_name := l_fp_emp_details_tab(i).last_name;
l_recon_emp_tab(l_rtc).date_of_birth := l_fp_emp_details_tab(i).date_of_birth;
l_recon_emp_tab(l_rtc).age := l_fp_emp_details_tab(i).age;
l_recon_emp_tab(l_rtc).payroll_number := l_fp_emp_details_tab(i).payroll_number;
l_recon_emp_tab(l_rtc).organization := l_fp_emp_details_tab(i).organization;
l_recon_emp_tab(l_rtc).location := l_fp_emp_details_tab(i).location;
l_recon_emp_tab(l_rtc).job := l_fp_emp_details_tab(i).job;
l_recon_emp_tab(l_rtc).grade := l_fp_emp_details_tab(i).grade;
l_recon_emp_tab(l_rtc).normal_hours := l_fp_emp_details_tab(i).normal_hours;
l_recon_emp_tab(l_rtc).trade_union_shop_steward := l_fp_emp_details_tab(i).trade_union_shop_steward;
l_recon_emp_tab(l_rtc).date_start := l_fp_emp_details_tab(i).date_start;
l_recon_emp_tab(l_rtc).length_of_service := l_fp_emp_details_tab(i).length_of_service;
l_recon_emp_tab(l_rtc).addr_line_1 := l_fp_emp_details_tab(i).addr_line_1;
l_recon_emp_tab(l_rtc).addr_line_2 := l_fp_emp_details_tab(i).addr_line_2;
l_recon_emp_tab(l_rtc).addr_line_3 := l_fp_emp_details_tab(i).addr_line_3;
l_recon_emp_tab(l_rtc).city := l_fp_emp_details_tab(i).city;
l_recon_emp_tab(l_rtc).county := l_fp_emp_details_tab(i).county;
l_recon_emp_tab(l_rtc).postal_code := l_fp_emp_details_tab(i).postal_code;
l_recon_emp_tab(l_rtc).country := l_fp_emp_details_tab(i).country;
l_recon_emp_tab(l_rtc).address_date_from := l_fp_emp_details_tab(i).address_date_from;
l_recon_emp_tab(l_rtc).home_phone_number := l_fp_emp_details_tab(i).home_phone_number;
l_recon_emp_tab(l_rtc).home_phone_date_from := l_fp_emp_details_tab(i).home_phone_date_from;
l_recon_emp_tab(l_rtc).mobile_phone_number := l_fp_emp_details_tab(i).mobile_phone_number;
l_recon_emp_tab(l_rtc).mobile_phone_date_from := l_fp_emp_details_tab(i).mobile_phone_date_from;
l_recon_emp_tab(l_rtc).email_address := l_fp_emp_details_tab(i).email_address;
–BANK
l_recon_emp_tab(l_rtc).store_number := l_fp_emp_details_tab(i).store_number;
l_recon_emp_tab(l_rtc).workforce_timekeeper_license := l_fp_emp_details_tab(i).workforce_timekeeper_license;
l_recon_emp_tab(l_rtc).middle_initial := l_fp_emp_details_tab(i).middle_initial;
l_recon_emp_tab(l_rtc).biometric_employee_flag := l_fp_emp_details_tab(i).biometric_employee_flag;
l_recon_emp_tab(l_rtc).channel := l_fp_emp_details_tab(i).channel;
l_recon_emp_tab(l_rtc).zone := l_fp_emp_details_tab(i).zone;
l_recon_emp_tab(l_rtc).region := l_fp_emp_details_tab(i).region;
l_recon_emp_tab(l_rtc).area := l_fp_emp_details_tab(i).area;
l_recon_emp_tab(l_rtc).store := l_fp_emp_details_tab(i).store;
l_recon_emp_tab(l_rtc).department := l_fp_emp_details_tab(i).department;
l_recon_emp_tab(l_rtc).job_code := l_fp_emp_details_tab(i).job_code;
l_recon_emp_tab(l_rtc).device_group := l_fp_emp_details_tab(i).device_group;
l_recon_emp_tab(l_rtc).pay_rule := l_fp_emp_details_tab(i).pay_rule;
–l_recon_emp_tab(l_rtc).live_date := l_fp_emp_details_tab(i).live_date;
l_recon_emp_tab(l_rtc).run_number := g_run_number;
l_recon_emp_tab(l_rtc).role_hire_date := l_fp_emp_details_tab(i).role_hire_date;
l_recon_emp_tab(l_rtc).clock_indicator := l_fp_emp_details_tab(i).clock_indicator;
l_recon_emp_tab(l_rtc).store_type := l_fp_emp_details_tab(i).store_type;
l_recon_emp_tab(l_rtc).attribute1 := ‘Calendar’;
l_recon_emp_tab(l_rtc).attribute2 := l_fp_emp_details_tab(i).attribute1;
l_recon_emp_tab(l_rtc).attribute3 := ‘INCREMENTAL’;–l_fp_emp_details_tab(i).attribute3;
l_recon_emp_tab(l_rtc).creation_date := SYSDATE;
l_recon_emp_tab(l_rtc).last_updated_date := SYSDATE;
l_recon_emp_tab(l_rtc).request_id := g_request_id;
l_recon_emp_tab(l_rtc).employment_expiration_date := l_fp_emp_details_tab(i).employment_expiration_date;
l_recon_emp_tab(l_rtc).badge_expiration_date := l_fp_emp_details_tab(i).badge_expiration_date;
l_recon_emp_tab(l_rtc).labour_account_expiration_date := l_fp_emp_details_tab(i).labour_account_expiration_date;
l_recon_emp_tab(l_rtc).pay_rule_effective_date := l_fp_emp_details_tab(i).pay_rule_effective_date;
l_recon_emp_tab(l_rtc).job_acc_segment7 := l_fp_emp_details_tab(i).job_acc_segment7;
l_recon_emp_tab(l_rtc).job_name := l_fp_emp_details_tab(i).job_name;
l_recon_emp_tab(l_rtc).pri_job_account_exp_date := l_fp_emp_details_tab(i).pri_job_account_exp_date;
l_recon_emp_tab(l_rtc).worker_type := l_fp_emp_details_tab(i).worker_type;
l_recon_emp_tab(l_rtc).right_to_work_type := l_fp_emp_details_tab(i).right_to_work_type;
l_recon_emp_tab(l_rtc).curr_store_cps_config := l_fp_emp_details_tab(i).curr_store_cps_config;
l_recon_emp_tab(l_rtc).old_store_cps_config := l_fp_emp_details_tab(i).old_store_cps_config;
l_recon_emp_tab(l_rtc).last_run_date := p_last_run_date;
l_recon_emp_tab(l_rtc).curr_run_date := p_curr_run_date;
l_recon_emp_tab(l_rtc).future_use9 := ‘5’ ; — V4.5
l_recon_emp_tab(l_rtc).future_use10 := ‘FUTURE’;
l_recon_emp_tab(l_rtc).badge_details := xxaa_abc_badges_tab(xxaa_abc_badges_typ(null,null,null));
l_recon_emp_tab(l_rtc).employment_details := xxaa_abc_status_tab(xxaa_abc_status_typ(null,null,null,null));
l_recon_emp_tab(l_rtc).account_details := xxaa_abc_pri_account_tab(xxaa_abc_pri_account_typ(null,null,null,null,null));

IF l_record_type = ‘TERMINATION’
THEN l_recon_emp_tab(l_rtc).badge_expiration_date := l_badge_exp_date; –V5.4
l_recon_emp_tab(l_rtc).pri_job_account_exp_date := l_term_exp_date;
l_recon_emp_tab(l_rtc).labour_account_expiration_date := l_term_exp_date;
–l_recon_emp_tab(l_rtc).employment_status := ‘Terminate Assignment’;
l_fp_emp_details_tab(i).employment_status := ‘Terminate Assignment’;
END IF;

IF l_record_type = ‘NON_LIVE’
THEN l_recon_emp_tab(l_rtc).badge_expiration_date := l_nonlive_date;
l_recon_emp_tab(l_rtc).pri_job_account_exp_date := l_nonlive_date;
l_recon_emp_tab(l_rtc).labour_account_expiration_date := l_nonlive_date;
–l_recon_emp_tab(l_rtc).employment_status := ‘Terminate Assignment’;–V5.4
l_fp_emp_details_tab(i).employment_status := ‘Terminate Assignment’; –V5.4
END IF;

–To verify change in previous value with current value
IF l_emp_status <> l_fp_emp_details_tab(i).employment_status
THEN
l_recon_emp_tab(l_rtc).employment_status := l_fp_emp_details_tab(i).employment_status;
l_recon_emp_tab(l_rtc).empl_status_effective_date := l_fp_emp_details_tab(i).empl_status_effective_date;
ELSE
l_recon_emp_tab(l_rtc).employment_status := l_emp_status;
l_recon_emp_tab(l_rtc).empl_status_effective_date := l_emp_status_eff_date;
END IF;

IF NVL(l_badge_number,’NA’) <> NVL(l_fp_emp_details_tab(i).badge_number,’NA’) –V4.9
THEN
l_recon_emp_tab(l_rtc).badge_number := l_fp_emp_details_tab(i).badge_number;
l_recon_emp_tab(l_rtc).badge_number_effective_date := l_fp_emp_details_tab(i).badge_number_effective_date;
ELSE
l_recon_emp_tab(l_rtc).badge_number := l_badge_number;
l_recon_emp_tab(l_rtc).badge_number_effective_date := l_badge_eff_date;
END IF;

IF l_pri_lab_acnt <> l_fp_emp_details_tab(i).primary_labour_account
THEN
l_recon_emp_tab(l_rtc).primary_labour_account := l_fp_emp_details_tab(i).primary_labour_account;
l_recon_emp_tab(l_rtc).pri_lab_account_effective_date := l_fp_emp_details_tab(i).pri_lab_account_effective_date;
ELSE
l_recon_emp_tab(l_rtc).primary_labour_account := l_pri_lab_acnt;
l_recon_emp_tab(l_rtc).pri_lab_account_effective_date := l_pri_lab_date;
END IF;

IF l_pri_job_acnt <> l_fp_emp_details_tab(i).primary_job_account
THEN
l_recon_emp_tab(l_rtc).primary_job_account := l_fp_emp_details_tab(i).primary_job_account;
l_recon_emp_tab(l_rtc).pri_job_account_effective_date := l_fp_emp_details_tab(i).pri_job_account_effective_date;
ELSE
l_recon_emp_tab(l_rtc).primary_job_account := l_pri_job_acnt;
l_recon_emp_tab(l_rtc).pri_job_account_effective_date := l_pri_job_date;
END IF;

xxaa_abc_util_pkg.write_log(‘future_badge_number ‘|| l_fp_emp_details_tab(i).badge_number);
xxaa_abc_util_pkg.write_log(‘future_badge_number_effective_date ‘|| l_fp_emp_details_tab(i).badge_number_effective_date);
xxaa_abc_util_pkg.write_log(‘future_primary_labour_account ‘|| l_fp_emp_details_tab(i).primary_labour_account);
xxaa_abc_util_pkg.write_log(‘future_pri_lab_account_effective_date ‘|| l_fp_emp_details_tab(i).pri_lab_account_effective_date);
xxaa_abc_util_pkg.write_log(‘future_primary_job_account ‘|| l_fp_emp_details_tab(i).primary_job_account);
xxaa_abc_util_pkg.write_log(‘future_pri_job_account_effective_date ‘|| l_fp_emp_details_tab(i).pri_job_account_effective_date);

END LOOP;

FORALL i IN 1..l_recon_emp_tab.COUNT
INSERT INTO xxaa_abc_emp_data_stg VALUES l_recon_emp_tab(i);
COMMIT;

l_rtc := 0;
l_recon_emp_tab.DELETE;
EXIT WHEN l_fp_emp_details_tab.COUNT < g_bulk_limit;
END LOOP;
CLOSE csr_get_fp_emp_details;
END LOOP; — Future Past Changes Colleagues

COMMIT;

EXCEPTION
WHEN OTHERS THEN
xxaa_abc_util_pkg.write_log ( ‘Exception – pop_past_future_change – ‘||SQLERRM);

END pop_past_future_change;
— —————————————————————————–
— V4.3 Function to compare calendar columns
— —————————————————————————–
FUNCTION compare_cal_columns
(p_person_id NUMBER)
RETURN VARCHAR2
IS
— Local Variables
l_cal_chg_col VARCHAR2(100);

— Cursor to compare calendar status
CURSOR csr_compare_calendar(p_person_id NUMBER)
IS
SELECT CASE WHEN emp.badge_details <> stg.badge_details
THEN ‘BADGE_NUMBER|’
END
|| CASE WHEN emp.employment_details <> stg.employment_details THEN ‘EMPLOYMENT_STATUS|’ END
|| CASE WHEN emp.account_details <> stg.account_details THEN ‘PRIMARY_ACCOUNT|’ END
change_col
FROM xxaa_abc_emp_tab emp
, xxaa_abc_emp_data_stg stg
WHERE emp.person_id = stg.person_id
AND emp.record_id = (SELECT MAX(record_id)
FROM xxaa_abc_emp_tab emp1
WHERE emp1.person_id = p_person_id
)
AND stg.attribute1 = ‘Calendar’
AND ( emp.badge_details <> stg.badge_details
OR emp.account_details <> stg.account_details
OR emp.employment_details <> stg.employment_details
);

BEGIN
— Compare calendar column
xxaa_abc_util_pkg.write_debug (‘V4.3 compare_cal_columns ‘||p_person_id);

OPEN csr_compare_calendar(p_person_id);
FETCH csr_compare_calendar INTO l_cal_chg_col;
CLOSE csr_compare_calendar;

xxaa_abc_util_pkg.write_debug (‘V4.3 compare_cal_columns l_cal_chg_col – ‘||l_cal_chg_col);
RETURN l_cal_chg_col;
END compare_cal_columns;
— —————————————————————————–
— V4.3 Function to compare calendar columns
— —————————————————————————–
FUNCTION mod_cal_columns
(p_chg_columns VARCHAR2)
RETURN VARCHAR2
IS
— Local Variables
l_mod_chg_column VARCHAR2(2000);
l_badge_column VARCHAR2(2000);
l_status_cnt NUMBER;
l_badge_cnt NUMBER;
l_account_cnt NUMBER;

BEGIN

l_mod_chg_column := REPLACE(p_chg_columns,’|’,’~’);

l_status_cnt := NULL;
l_badge_cnt := NULL;
l_account_cnt := NULL;

xxaa_abc_util_pkg.write_debug (‘Begin of mod_cal_columns – ‘||l_mod_chg_column);

IF p_chg_columns LIKE ‘%EMPLOYMENT_STATUS%’
THEN
l_mod_chg_column := REPLACE(l_mod_chg_column,’EMPLOYMENT_STATUS’,’EMPLOYMENT_STATUS_DETAILS’);
END IF;

IF p_chg_columns LIKE ‘%EMPL_STATUS_EFFECTIVE_DATE%’
THEN
l_mod_chg_column := REPLACE(l_mod_chg_column,’EMPL_STATUS_EFFECTIVE_DATE’,’EMPLOYMENT_STATUS_DETAILS’);
END IF;

IF p_chg_columns LIKE ‘%EMPLOYMENT_EXPIRATION_DATE%’
THEN
l_mod_chg_column := REPLACE(l_mod_chg_column,’EMPLOYMENT_EXPIRATION_DATE’,’EMPLOYMENT_STATUS_DETAILS’);
END IF;

IF p_chg_columns LIKE ‘%PRIMARY_LABOUR_ACCOUNT%’
THEN
l_mod_chg_column := REPLACE(l_mod_chg_column,’PRIMARY_LABOUR_ACCOUNT’,’PRIMARY_LABOUR_ACCOUNT_DETAILS’);
END IF;

IF p_chg_columns LIKE ‘%PRI_LAB_ACCOUNT_EFFECTIVE_DATE%’
THEN
l_mod_chg_column := REPLACE(l_mod_chg_column,’PRI_LAB_ACCOUNT_EFFECTIVE_DATE’,’PRIMARY_LABOUR_ACCOUNT_DETAILS’);
END IF;

IF p_chg_columns LIKE ‘%LABOUR_ACCOUNT_EXPIRATION_DATE%’
THEN
l_mod_chg_column := REPLACE(l_mod_chg_column,’LABOUR_ACCOUNT_EXPIRATION_DATE’,’PRIMARY_LABOUR_ACCOUNT_DETAILS’);
END IF;

IF p_chg_columns LIKE ‘%PRIMARY_JOB_ACCOUNT%’
THEN
l_mod_chg_column := REPLACE(l_mod_chg_column,’PRIMARY_JOB_ACCOUNT’,’PRIMARY_LABOUR_ACCOUNT_DETAILS’);
END IF;

IF p_chg_columns LIKE ‘%PRI_JOB_ACCOUNT_EFFECTIVE_DATE%’
THEN
l_mod_chg_column := REPLACE(l_mod_chg_column,’PRI_JOB_ACCOUNT_EFFECTIVE_DATE’,’PRIMARY_LABOUR_ACCOUNT_DETAILS’);
END IF;

IF p_chg_columns LIKE ‘%PRI_JOB_ACCOUNT_EXP_DATE%’
THEN
l_mod_chg_column := REPLACE(l_mod_chg_column,’PRI_JOB_ACCOUNT_EXP_DATE’,’PRIMARY_LABOUR_ACCOUNT_DETAILS’);
END IF;

l_badge_column := REPLACE(p_chg_columns,’BADGE_NUMBER_EFFECTIVE_DATE’,’BADGE_NUM_EFFECTIVE_DATE’);

IF l_badge_column LIKE ‘%BADGE_NUMBER%’
THEN
l_mod_chg_column := REPLACE(REPLACE(l_mod_chg_column,’BADGE_NUMBER’,’BADGE_NUMBER_DETAILS’), ‘BADGE_NUMBER_DETAILS_EFFECTIVE_DATE’, ‘BADGE_NUMBER_DETAILS’);
END IF;

IF l_badge_column LIKE ‘%BADGE_NUM_EFFECTIVE_DATE%’
THEN
l_mod_chg_column := REPLACE(REPLACE(l_mod_chg_column,’BADGE_NUMBER_EFFECTIVE_DATE’,’BADGE_NUMBER_DETAILS’), ‘BADGE_NUMBER_DETAILS_EFFECTIVE_DATE’, ‘BADGE_NUMBER_DETAILS’);
END IF;

IF l_badge_column LIKE ‘%BADGE_EXPIRATION_DATE%’
THEN
l_mod_chg_column := REPLACE(l_mod_chg_column,’BADGE_EXPIRATION_DATE’,’BADGE_NUMBER_DETAILS’);
END IF;

l_status_cnt := REGEXP_COUNT(l_mod_chg_column, ‘EMPLOYMENT_STATUS_DETAILS’, 1, ‘i’) ;
l_badge_cnt := REGEXP_COUNT(l_mod_chg_column, ‘BADGE_NUMBER_DETAILS’, 1, ‘i’) ;
l_account_cnt := REGEXP_COUNT(l_mod_chg_column, ‘PRIMARY_LABOUR_ACCOUNT_DETAILS’, 1, ‘i’) ;

IF l_status_cnt > 1
THEN
l_mod_chg_column := ‘EMPLOYMENT_STATUS_DETAILS~’||REGEXP_REPLACE(l_mod_chg_column,’EMPLOYMENT_STATUS_DETAILS~’,NULL);
END IF;

IF l_badge_cnt > 1
THEN
l_mod_chg_column := ‘BADGE_NUMBER_DETAILS~’||REGEXP_REPLACE(l_mod_chg_column,’BADGE_NUMBER_DETAILS~’,NULL);
END IF;

IF l_account_cnt > 1
THEN
l_mod_chg_column := ‘PRIMARY_LABOUR_ACCOUNT_DETAILS~’||REGEXP_REPLACE(l_mod_chg_column,’PRIMARY_LABOUR_ACCOUNT_DETAILS~’,NULL);
END IF;

l_mod_chg_column := REPLACE(l_mod_chg_column,’~’,’|’);

xxaa_abc_util_pkg.write_debug (‘End of mod_cal_columns – ‘||l_mod_chg_column);

RETURN l_mod_chg_column;

END mod_cal_columns;
— —————————————————————————–
— V4.3 Function to compare calendar columns
— —————————————————————————–
FUNCTION compare_cal_columns1
(p_person_id NUMBER
, p_chg_columns VARCHAR2)
RETURN VARCHAR2
IS
— Local Variables
l_cal_chg_col VARCHAR2(1000);

— Cursor to compare calendar status
CURSOR csr_current_calendar(p_person_id NUMBER)
IS
SELECT badge_details, employment_details, account_details
FROM xxaa_abc_emp_tab emp
WHERE emp.person_id = p_person_id
AND emp.record_id = (SELECT MAX(record_id)
FROM xxaa_abc_emp_tab emp1
WHERE emp1.person_id = p_person_id
);

l_badge_curr_data xxaa_abc_badges_tab;
l_status_curr_data xxaa_abc_status_tab;
l_account_curr_data xxaa_abc_pri_account_tab;

CURSOR csr_previous_calendar(p_person_id NUMBER)
IS
SELECT badge_details, employment_details, account_details
FROM xxaa_abc_emp_tab emp
WHERE emp.person_id = p_person_id
AND emp.record_id = (SELECT MAX(record_id) FROM xxaa_abc_emp_tab WHERE person_id = p_person_id
AND record_id < (SELECT MAX(record_id) FROM xxaa_abc_emp_tab WHERE person_id = p_person_id));

l_badge_prev_data xxaa_abc_badges_tab;
l_status_prev_data xxaa_abc_status_tab;
l_account_prev_data xxaa_abc_pri_account_tab;
l_mod_chg_column VARCHAR2(2000);

BEGIN
l_mod_chg_column := p_chg_columns;
xxaa_abc_util_pkg.write_log (‘Begin compare_cal_columns1: ‘||l_mod_chg_column);
OPEN csr_current_calendar(p_person_id);
FETCH csr_current_calendar INTO l_badge_curr_data, l_status_curr_data, l_account_curr_data;
CLOSE csr_current_calendar;

OPEN csr_previous_calendar(p_person_id);
FETCH csr_previous_calendar INTO l_badge_prev_data, l_status_prev_data, l_account_prev_data;
CLOSE csr_previous_calendar;

–xxaa_abc_util_pkg.write_log (‘l_badge_curr_data: ‘||l_badge_curr_data);
–xxaa_abc_util_pkg.write_log (‘l_badge_prev_data: ‘||l_badge_prev_data);

IF l_badge_curr_data = l_badge_prev_data
THEN
xxaa_abc_util_pkg.write_log (‘l_badge_curr_data’);
l_mod_chg_column := REPLACE(l_mod_chg_column,’BADGE_NUMBER_DETAILS’,”);
END IF;

–xxaa_abc_util_pkg.write_log (‘l_status_curr_data: ‘||l_status_curr_data);
–xxaa_abc_util_pkg.write_log (‘l_status_prev_data: ‘||l_status_prev_data);

IF l_status_curr_data = l_status_prev_data
THEN
xxaa_abc_util_pkg.write_log (‘l_status_curr_data’);
l_mod_chg_column := REPLACE(l_mod_chg_column,’EMPLOYMENT_STATUS_DETAILS’,”);
END IF;

–xxaa_abc_util_pkg.write_log (‘l_account_curr_data: ‘||l_account_curr_data);
–xxaa_abc_util_pkg.write_log (‘l_account_prev_data: ‘||l_account_prev_data);

IF l_account_curr_data = l_account_prev_data
THEN
xxaa_abc_util_pkg.write_log (‘l_account_curr_data’);
l_mod_chg_column := REPLACE(l_mod_chg_column,’PRIMARY_LABOUR_ACCOUNT_DETAILS’,”);
END IF;

xxaa_abc_util_pkg.write_log (‘End compare_cal_columns1: ‘||l_mod_chg_column);

RETURN l_mod_chg_column;

END compare_cal_columns1;
— —————————————————————————–
PROCEDURE process_threads( p_errbuf OUT NOCOPY VARCHAR2
, p_retcode OUT NOCOPY VARCHAR2
, p_effective_date IN VARCHAR2
, p_thread_no IN NUMBER
)
IS
l_proc_name CONSTANT VARCHAR2 (100) := ‘xxaa_abc_emp_int_pkg.process_threads’;
l_chg_columns VARCHAR2 (4000) := NULL;
l_chg_columns1 VARCHAR2 (4000) := NULL;
l_old_values VARCHAR2 (4000) := NULL;
l_new_values VARCHAR2 (4000) := NULL;
l_column_list VARCHAR2 (4000) := NULL;
l_errbuf VARCHAR2 (4000) := NULL;
l_retcode NUMBER;
l_store_number VARCHAR2 (20);
l_rec_store_number VARCHAR2 (20):= NULL; –V4.5
l_chg_store_number VARCHAR2 (20);
l_initial_rec_count NUMBER := 0;
l_inc_rec_count NUMBER := 0;
l_record_id NUMBER; — V4.3
l_record_processed VARCHAR2 (1) := ‘N’; — V4.3
l_cal_chg_column VARCHAR2(100); — V4.3
l_person_id NUMBER;
l_person_processed VARCHAR2 (1) := ‘N’; — V4.3
l_prev_store_id VARCHAR2 (20); — V4.5
l_old_store_cps_config VARCHAR2 (1):=NULL;

CURSOR csr_emp_records
IS
SELECT *
FROM xxaa_abc_emp_data_stg
WHERE thread_id = p_thread_no
ORDER BY store_number, person_id, future_use9; –4.4

— Cursor to get previous employee data from initial run
CURSOR csr_emp_init(l_person_id NUMBER)
IS
SELECT *
FROM xxaa_abc_emp_tab
WHERE 1 = 1
–AND status = ‘Processed’
–AND run_mode = ‘Write’
–AND person_id = l_person_id
AND record_id = ( SELECT MAX(record_id)
FROM xxaa_abc_emp_tab
WHERE person_id = l_person_id
);

rec_emp_init csr_emp_init%ROWTYPE;
v_data_stg NUMBER;
v_old_cps_config VARCHAR2(1);

— V4.2 Cursor to get Resync record
CURSOR csr_emp_resync(l_person_id NUMBER)
IS
SELECT TRUNC(creation_date)
FROM xxaa_abc_emp_tab
WHERE 1 = 1
AND status = ‘UNPROCESSED’
AND record_mode = ‘RESYNC’
AND record_id = ( SELECT MAX(record_id)
FROM xxaa_abc_emp_tab
WHERE person_id = l_person_id);

v_resync_date DATE;
v_rec_mode VARCHAR2(20);
lv_effective_date DATE;

CURSOR get_lookup_details
IS
SELECT tl.security_group_id
, tl.view_application_id
FROM fnd_lookup_types_tl tl,
fnd_lookup_types ltype
WHERE ltype.lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND ltype.lookup_type = tl.lookup_type
AND language = ‘US’;

rec_get_lookup_dtl get_lookup_details%ROWTYPE;

CURSOR csr_get_live_stores(l_store VARCHAR2)
IS
SELECT *
FROM fnd_lookup_values
WHERE lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND enabled_flag = ‘Y’
AND lookup_code = l_store
AND attribute2 IS NOT NULL;
–and TO_DATE (attribute2, ‘YYYY/MM/DD HH24:MI:SS’)<=SYSDATE;

rec_get_live_stores csr_get_live_stores%ROWTYPE;

l_header_store_c NUMBER;

FUNCTION xxaa_header_str_count(l_store_id number)
RETURN NUMBER IS
l_count NUMBER;
BEGIN
SELECT COUNT(*) INTO l_count
FROM xxaa_abc_EMP_HEADER_TAB
WHERE store_id = l_store_id;
RETURN (l_count);
END;

BEGIN

xxaa_abc_util_pkg.write_in_audit
( p_proc_name => l_proc_name
, p_param1 => NVL(p_effective_date,SYSDATE)
, p_param2 => NULL
, p_param3 => NULL
, x_audit_id => xxaa_abc_util_pkg.g_audit_id
);

xxaa_abc_util_pkg.write_log ( ‘Entering for effective date of process_threads:’|| p_effective_date);
xxaa_abc_util_pkg.start_time;
xxaa_abc_util_pkg.write_log ( ‘V4.3 process_threads g_run_number of process_threads = ‘||g_run_number);

FOR rec_emp_records IN csr_emp_records
LOOP
l_prev_store_id:=NULL; — V4.5

v_data_stg := csr_emp_records%ROWCOUNT;
xxaa_abc_util_pkg.write_log (‘xxaa_abc_EMP_DATA_STG Count: ‘||v_data_stg);

— V4.3
IF g_run_number IS NULL
THEN
g_run_number := rec_emp_records.run_number;
g_curr_run_date := rec_emp_records.curr_run_date;
g_last_run_date := rec_emp_records.last_run_date;
END IF;
— V4.3

xxaa_abc_util_pkg.write_log (‘Record Type: ‘||rec_emp_records.attribute1);
IF rec_emp_records.attribute1 IN (‘INCREMENTAL’,’Calendar’) — V4.3
THEN

l_person_processed := ‘N’;
l_person_processed := is_record_processed(rec_emp_records.person_id,’Normal’);

IF NVL(l_person_processed,’N’) = ‘N’
THEN
l_chg_columns := NULL;
l_chg_columns1 := NULL;
END IF;

–Get previous value for comparison
OPEN csr_emp_init (rec_emp_records.person_id);
FETCH csr_emp_init INTO rec_emp_init;
IF csr_emp_init%NOTFOUND
THEN
xxaa_abc_util_pkg.write_log (‘No previous record found. This is a New Hire’);
l_chg_columns := ‘ALL’;
ELSE
xxaa_abc_util_pkg.write_log (‘Begin of comparing previous records with new record of person_id – ‘||rec_emp_init.person_id);

–l_column_list := ‘EMPLOYEE_NUMBER~NI_NUMBER~TITLE~FIRST_NAME~LAST_NAME~PAYROLL_NUMBER~JOB~NORMAL_HOURS~DATE_START~LENGTH_OF_SERVICE~ADDR_LINE_1~ADDR_LINE_2~ADDR_LINE_3~CITY~COUNTY~POST_CODE~COUNTRY~HOME_PHONE_NUMBER~MOBILE_PHONE_NUMBER~EMAIL_ADDRESS~STORE_NUMBER~EMPLOYMENT_STATUS~EMPL_STATUS_EFFECTIVE_DATE~BIOMETRIC_EMPLOYEE_FLAG~PRIMARY_LABOUR_ACCOUNT~PRI_LAB_ACCOUNT_EFFECTIVE_DATE~DEVICE_GROUP~BADGE_NUMBER~BADGE_NUMBER_EFFECTIVE_DATE~PAY_RULE~ROLE_HIRE_DATE~STORE_TYPE~CLOCK_INDICATOR~MIDDLE_INITIAL~EMPLOYMENT_EXPIRATION_DATE~BADGE_EXPIRATION_DATE~LABOUR_ACCOUNT_EXPIRATION_DATE~PAY_RULE_EFFECTIVE_DATE~WORKFORCE_TIMEKEEPER_LICENSE~DATE_OF_BIRTH~WORK_PHONE_NUMBER~PRIMARY_JOB_ACCOUNT~PRI_JOB_ACCOUNT_EFFECTIVE_DATE~PRI_JOB_ACCOUNT_EXP_DATE~WORKER_TYPE~DEPARTMENT~GRADE~RIGHT_TO_WORK_TYPE~CURR_STORE_CPS_CONFIG~OLD_STORE_CPS_CONFIG~JOB_CODE~JOB_NAME~REGION~’; –V2.3

l_prev_store_id:= rec_emp_init.store_number; –V4.5
–CPS3 CHG_COL_LIST fields
l_column_list := ‘FIRST_NAME~LAST_NAME~NORMAL_HOURS~HOME_PHONE_NUMBER~MOBILE_PHONE_NUMBER~STORE_NUMBER~EMPLOYMENT_STATUS~EMPL_STATUS_EFFECTIVE_DATE~BIOMETRIC_EMPLOYEE_FLAG~PRIMARY_LABOUR_ACCOUNT~PRI_LAB_ACCOUNT_EFFECTIVE_DATE~DEVICE_GROUP~BADGE_NUMBER~BADGE_NUMBER_EFFECTIVE_DATE~ROLE_HIRE_DATE~STORE_TYPE~MIDDLE_INITIAL~EMPLOYMENT_EXPIRATION_DATE~BADGE_EXPIRATION_DATE~LABOUR_ACCOUNT_EXPIRATION_DATE~DATE_OF_BIRTH~PRIMARY_JOB_ACCOUNT~PRI_JOB_ACCOUNT_EFFECTIVE_DATE~PRI_JOB_ACCOUNT_EXP_DATE~WORKER_TYPE~DEPARTMENT~RIGHT_TO_WORK_TYPE~CURR_STORE_CPS_CONFIG~JOB_CODE~JOB_NAME~’;

l_old_values :=
rec_emp_init.first_name || ‘~’|| rec_emp_init.last_name || ‘~’|| rec_emp_init.normal_hours
|| ‘~’|| rec_emp_init.home_phone_number || ‘~’|| rec_emp_init.mobile_phone_number || ‘~’|| rec_emp_init.store_number
|| ‘~’|| rec_emp_init.employment_status || ‘~’|| rec_emp_init.empl_status_effective_date || ‘~’|| rec_emp_init.biometric_employee_flag
|| ‘~’|| rec_emp_init.primary_labour_account || ‘~’|| rec_emp_init.pri_lab_account_effective_date || ‘~’|| rec_emp_init.device_group
|| ‘~’|| rec_emp_init.badge_number || ‘~’|| rec_emp_init.badge_number_effective_date || ‘~’|| rec_emp_init.role_hire_date
|| ‘~’|| rec_emp_init.store_type || ‘~’|| rec_emp_init.middle_initial || ‘~’|| rec_emp_init.employment_expiration_date
|| ‘~’|| rec_emp_init.badge_expiration_date || ‘~’|| rec_emp_init.labour_account_expiration_date || ‘~’|| TO_CHAR(rec_emp_init.date_of_birth, ‘DD-MON-YYYY’) –V5.5
|| ‘~’|| rec_emp_init.primary_job_account || ‘~’|| rec_emp_init.pri_job_account_effective_date || ‘~’|| rec_emp_init.pri_job_account_exp_date
|| ‘~’|| rec_emp_init.worker_type || ‘~’|| rec_emp_init.department || ‘~’|| rec_emp_init.right_to_work_type
|| ‘~’|| rec_emp_init.curr_store_cps_config || ‘~’|| rec_emp_init.job_code || ‘~’|| rec_emp_init.job_name
|| ‘~’;

–xxaa_abc_util_pkg.write_log (‘l_old_values – ‘||l_old_values);
xxaa_abc_util_pkg.write_log (‘l_old_values – ‘||’FIRST_NAME: ‘||rec_emp_init.first_name||’LAST_NAME: ‘||rec_emp_init.last_name||’NORMAL_HOURS: ‘||rec_emp_init.normal_hours|| ‘HOME_PHONE_NUMBER: ‘||rec_emp_init.home_phone_number|| ‘MOBILE_PHONE_NUMBER: ‘||rec_emp_init.mobile_phone_number|| ‘STORE_NUMBER: ‘||rec_emp_init.store_number|| ‘ EMPLOYMENT_STATUS: ‘||rec_emp_init.employment_status|| ‘ EMPL_STATUS_EFFECTIVE_DATE: ‘||rec_emp_init.empl_status_effective_date|| ‘ BIOMETRIC_EMPLOYEE_FLAG: ‘||rec_emp_init.biometric_employee_flag|| ‘ PRIMARY_LABOUR_ACCOUNT: ‘||rec_emp_init.primary_labour_account|| ‘ PRI_LAB_ACCOUNT_EFFECTIVE_DATE: ‘||rec_emp_init.pri_lab_account_effective_date|| ‘ DEVICE_GROUP: ‘||rec_emp_init.device_group|| ‘ BADGE_NUMBER: ‘||rec_emp_init.badge_number|| ‘ BADGE_NUMBER_EFFECTIVE_DATE: ‘||rec_emp_init.badge_number_effective_date|| ‘ ROLE_HIRE_DATE: ‘||rec_emp_init.role_hire_date|| ‘ STORE_TYPE: ‘||rec_emp_init.store_type|| ‘ MIDDLE_INITIAL: ‘||rec_emp_init.middle_initial|| ‘ EMPLOYMENT_EXPIRATION_DATE: ‘||rec_emp_init.employment_expiration_date|| ‘ BADGE_EXPIRATION_DATE: ‘||rec_emp_init.badge_expiration_date|| ‘ LABOUR_ACCOUNT_EXPIRATION_DATE: ‘||rec_emp_init.labour_account_expiration_date|| ‘ DATE_OF_BIRTH: ‘||TO_CHAR(rec_emp_init.date_of_birth,’DD-MON-YYYY’)|| ‘ PRIMARY_JOB_ACCOUNT: ‘||rec_emp_init.primary_job_account|| ‘ PRI_JOB_ACCOUNT_EFFECTIVE_DATE: ‘||rec_emp_init.pri_job_account_effective_date|| ‘ PRI_JOB_ACCOUNT_EXP_DATE: ‘||rec_emp_init.pri_job_account_exp_date|| ‘ WORKER_TYPE: ‘||rec_emp_init.worker_type|| ‘ DEPARTMENT: ‘||rec_emp_init.department|| ‘ RIGHT_TO_WORK_TYPE: ‘||rec_emp_init.right_to_work_type|| ‘ CURR_STORE_CPS_CONFIG: ‘||rec_emp_init.curr_store_cps_config|| ‘ JOB_CODE: ‘||rec_emp_init.job_code|| ‘ JOB_NAME: ‘||rec_emp_init.job_name); –V5.5

l_new_values :=
rec_emp_records.first_name || ‘~’|| rec_emp_records.last_name || ‘~’|| rec_emp_records.normal_hours
|| ‘~’|| rec_emp_records.home_phone_number || ‘~’|| rec_emp_records.mobile_phone_number || ‘~’|| rec_emp_records.store_number
|| ‘~’|| rec_emp_records.employment_status || ‘~’|| rec_emp_records.empl_status_effective_date || ‘~’|| rec_emp_records.biometric_employee_flag
|| ‘~’|| rec_emp_records.primary_labour_account || ‘~’|| rec_emp_records.pri_lab_account_effective_date || ‘~’|| rec_emp_records.device_group
|| ‘~’|| rec_emp_records.badge_number || ‘~’|| rec_emp_records.badge_number_effective_date || ‘~’|| rec_emp_records.role_hire_date
|| ‘~’|| rec_emp_records.store_type || ‘~’|| rec_emp_records.middle_initial || ‘~’|| rec_emp_records.employment_expiration_date
|| ‘~’|| rec_emp_records.badge_expiration_date || ‘~’|| rec_emp_records.labour_account_expiration_date || ‘~’|| TO_CHAR(rec_emp_records.date_of_birth, ‘DD-MON-YYYY’) –V5.5
|| ‘~’|| rec_emp_records.primary_job_account || ‘~’|| rec_emp_records.pri_job_account_effective_date || ‘~’|| rec_emp_records.pri_job_account_exp_date
|| ‘~’|| rec_emp_records.worker_type || ‘~’|| rec_emp_records.department || ‘~’|| rec_emp_records.right_to_work_type
|| ‘~’|| rec_emp_records.curr_store_cps_config || ‘~’|| rec_emp_records.job_code || ‘~’|| rec_emp_records.job_name
|| ‘~’;

–xxaa_abc_util_pkg.write_log (‘l_new_values – ‘||l_new_values);
xxaa_abc_util_pkg.write_log (‘l_new_values – ‘||’FIRST_NAME: ‘||rec_emp_records.first_name||’LAST_NAME: ‘||rec_emp_records.last_name||’NORMAL_HOURS: ‘||rec_emp_records.normal_hours|| ‘HOME_PHONE_NUMBER: ‘||rec_emp_records.home_phone_number|| ‘MOBILE_PHONE_NUMBER: ‘||rec_emp_records.mobile_phone_number|| ‘STORE_NUMBER: ‘||rec_emp_records.store_number|| ‘ EMPLOYMENT_STATUS: ‘||rec_emp_records.employment_status|| ‘ EMPL_STATUS_EFFECTIVE_DATE: ‘||rec_emp_records.empl_status_effective_date|| ‘ BIOMETRIC_EMPLOYEE_FLAG: ‘||rec_emp_records.biometric_employee_flag|| ‘ PRIMARY_LABOUR_ACCOUNT: ‘||rec_emp_records.primary_labour_account|| ‘ PRI_LAB_ACCOUNT_EFFECTIVE_DATE: ‘||rec_emp_records.pri_lab_account_effective_date|| ‘ DEVICE_GROUP: ‘||rec_emp_records.device_group|| ‘ BADGE_NUMBER: ‘||rec_emp_records.badge_number|| ‘ BADGE_NUMBER_EFFECTIVE_DATE: ‘||rec_emp_records.badge_number_effective_date|| ‘ ROLE_HIRE_DATE: ‘||rec_emp_records.role_hire_date|| ‘ STORE_TYPE: ‘||rec_emp_records.store_type|| ‘ MIDDLE_INITIAL: ‘||rec_emp_records.middle_initial|| ‘ EMPLOYMENT_EXPIRATION_DATE: ‘||rec_emp_records.employment_expiration_date|| ‘ BADGE_EXPIRATION_DATE: ‘||rec_emp_records.badge_expiration_date|| ‘ LABOUR_ACCOUNT_EXPIRATION_DATE: ‘||rec_emp_records.labour_account_expiration_date|| ‘ DATE_OF_BIRTH: ‘||TO_CHAR(rec_emp_records.date_of_birth,’DD-MON-YYYY’)|| ‘ PRIMARY_JOB_ACCOUNT: ‘||rec_emp_records.primary_job_account|| ‘ PRI_JOB_ACCOUNT_EFFECTIVE_DATE: ‘||rec_emp_records.pri_job_account_effective_date|| ‘ PRI_JOB_ACCOUNT_EXP_DATE: ‘||rec_emp_records.pri_job_account_exp_date|| ‘ WORKER_TYPE: ‘||rec_emp_records.worker_type|| ‘ DEPARTMENT: ‘||rec_emp_records.department|| ‘ RIGHT_TO_WORK_TYPE: ‘||rec_emp_records.right_to_work_type|| ‘ CURR_STORE_CPS_CONFIG: ‘||rec_emp_records.curr_store_cps_config|| ‘ JOB_CODE: ‘||rec_emp_records.job_code|| ‘ JOB_NAME: ‘||rec_emp_records.job_name); –V5.5

–compare old vs current;
compare_rows ( l_column_list, l_old_values, l_new_values, l_chg_columns);

— V4.3 Compare Calendar Columns
/*IF rec_emp_records.attribute1 = ‘Calendar’
THEN
l_cal_chg_column := compare_cal_columns(rec_emp_records.person_id);
END IF;*/

IF l_chg_columns IS NOT NULL
THEN
l_chg_columns := mod_cal_columns(l_chg_columns);
END IF;

/*IF l_cal_chg_column IS NOT NULL
THEN
IF l_chg_columns IS NULL
THEN
l_chg_columns := SUBSTR(l_cal_chg_column,0,length(l_cal_chg_column)-1);
ELSE
l_chg_columns := l_chg_columns||’|’||SUBSTR(l_cal_chg_column,0,length(l_cal_chg_column)-1);
END IF;
END IF; */
— V4.3 End
END IF;
CLOSE csr_emp_init;

–V4.2
v_resync_date := NULL;
OPEN csr_emp_resync (rec_emp_init.person_id);
FETCH csr_emp_resync INTO v_resync_date;
CLOSE csr_emp_resync;

lv_effective_date := TRUNC(TO_DATE(p_effective_date,’RRRR/MM/DD HH24:MI:SS’))-1;

IF v_resync_date = lv_effective_date
THEN
v_rec_mode := ‘RESYNC’;
ELSE
v_rec_mode := ‘UPDATE’;
END IF;

–V4.2
IF rec_emp_records.age = 18 AND l_chg_columns IS NULL
THEN l_chg_columns := ‘AGE’;
ELSIF rec_emp_records.age = 18 AND l_chg_columns IS NOT NULL
THEN l_chg_columns := l_chg_columns||’|AGE’;
ELSE l_chg_columns := l_chg_columns;
END IF;

— V4.3
l_record_processed := ‘N’;
l_record_processed := is_record_processed(rec_emp_records.person_id,’Normal’);
xxaa_abc_util_pkg.write_debug (‘l_record_processed – ‘||l_record_processed);
xxaa_abc_util_pkg.write_debug (‘IF l_record_processed = Y, Then this record will not be inserted’);
— V4.3

l_chg_columns1 := l_chg_columns1||’|’||l_chg_columns||’|’;

l_record_id := NULL; — V4.3 commented –V4.4 Uncommented
IF l_chg_columns IS NOT NULL AND (NOT g_debug_mode)
AND NVL(l_record_processed,’N’) = ‘N’ — V4.3
THEN
l_inc_rec_count := l_inc_rec_count + 1;
l_record_id := xxaa_abc_emp_tab_s.NEXTVAL; — V4.3
xxaa_abc_util_pkg.write_log (‘Inserting record for the store : ‘||rec_emp_records.store_number||’ for person_id : ‘||rec_emp_records.person_id);

INSERT INTO xxaa_abc_emp_tab
(record_id
, person_id
, assignment_id
, employee_number
, ni_number
, title
, first_name
, last_name
, date_of_birth
, age
, payroll_number
, organization
, location
, job
, grade
, normal_hours
, trade_union_shop_steward
, date_start
, length_of_service
, addr_line_1
, addr_line_2
, addr_line_3
, city
, county
, postal_code
, country
, address_date_from
, home_phone_number
, home_phone_date_from
, mobile_phone_number
, mobile_phone_date_from
, work_phone_number –V2.3
, work_phone_date_from –V2.3
, email_address
, bank_sort_code
, bank_account_number
, store_number
, workforce_timekeeper_license
, middle_initial
, employment_status
, empl_status_effective_date
, biometric_employee_flag
, channel
, zone
, region
, area
, store
, department
, job_code
, primary_labour_account
, pri_lab_account_effective_date
, device_group
, badge_number
, badge_number_effective_date
, pay_rule
, run_number
, role_hire_date
, store_type
, clock_indicator
, employment_expiration_date
, badge_expiration_date
, labour_account_expiration_date
, pay_rule_effective_date
, attribute1
, attribute2
, attribute3
, attribute4
, attribute5
, attribute6
, attribute7
, attribute8
, attribute9
, attribute10
, created_by
, creation_date
, last_updated_by
, last_updated_date
, record_mode
, record_created_by
, chg_col_list
, run_mode
, status
, error_message
, worker_type –V2.3
, job_acc_segment7 –V2.3
, primary_job_account –V2.3
, job_name –V2.3
, pri_job_account_exp_date –V2.3
, pri_job_account_effective_date –V2.3
, future_use1
, future_use2
, future_use3
, future_use4
, future_use5
, future_use6
, future_use7
, future_use8
, future_use9
, future_use10
, right_to_work_type
, curr_store_cps_config — V4.2
, old_store_cps_config — V4.2
, badge_details — V4.3
, employment_details — V4.3
, account_details — V4.3
)
VALUES
( l_record_id
, rec_emp_records.person_id
, rec_emp_records.assignment_id
, rec_emp_records.employee_number
, rec_emp_records.ni_number
, rec_emp_records.title
, rec_emp_records.first_name
, rec_emp_records.last_name
, rec_emp_records.date_of_birth
, rec_emp_records.age
, rec_emp_records.payroll_number
, rec_emp_records.organization
, rec_emp_records.location
, rec_emp_records.job
, rec_emp_records.grade
, rec_emp_records.normal_hours
, rec_emp_records.trade_union_shop_steward
, rec_emp_records.date_start
, rec_emp_records.length_of_service
, rec_emp_records.addr_line_1
, rec_emp_records.addr_line_2
, rec_emp_records.addr_line_3
, rec_emp_records.city
, rec_emp_records.county
, rec_emp_records.postal_code
, rec_emp_records.country
, rec_emp_records.address_date_from
, rec_emp_records.home_phone_number
, rec_emp_records.home_phone_date_from
, rec_emp_records.mobile_phone_number
, rec_emp_records.mobile_phone_date_from
, rec_emp_records.work_phone_number –V2.3
, rec_emp_records.work_phone_date_from –V2.3
, rec_emp_records.email_address
, rec_emp_records.bank_sort_code
, rec_emp_records.bank_account_number
, rec_emp_records.store_number
, rec_emp_records.workforce_timekeeper_license
, rec_emp_records.middle_initial
, rec_emp_records.employment_status
, rec_emp_records.empl_status_effective_date
, rec_emp_records.biometric_employee_flag
, rec_emp_records.channel
, rec_emp_records.zone
, rec_emp_records.region
, rec_emp_records.area
, rec_emp_records.store
, rec_emp_records.department
, rec_emp_records.job_code
, rec_emp_records.primary_labour_account
, rec_emp_records.pri_lab_account_effective_date
, rec_emp_records.device_group
, rec_emp_records.badge_number
, rec_emp_records.badge_number_effective_date
, rec_emp_records.pay_rule
, rec_emp_records.run_number
, rec_emp_records.role_hire_date
, rec_emp_records.store_type
, rec_emp_records.clock_indicator
, rec_emp_records.employment_expiration_date
, rec_emp_records.badge_expiration_date
, rec_emp_records.labour_account_expiration_date
, rec_emp_records.pay_rule_effective_date
, rec_emp_records.attribute2
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, fnd_profile.VALUE (‘USER_ID’)
, SYSDATE
, fnd_profile.VALUE (‘USER_ID’)
, SYSDATE
, v_rec_mode — V4.2
, ‘INCREMENTAL’
, NULL–l_chg_columns
, ‘Write’
, ‘UNPROCESSED’
, NULL
, rec_emp_records.worker_type
, rec_emp_records.job_acc_segment7
, rec_emp_records.primary_job_account
, rec_emp_records.job_name
, rec_emp_records.pri_job_account_exp_date
, rec_emp_records.pri_job_account_effective_date
, NULL — future_use1
, NULL — future_use2
, NULL — future_use3
, NULL — future_use4
, NULL — future_use5
, NULL — future_use6
, NULL — future_use7
, NULL — future_use8
, rec_emp_records.future_use9 — future_use9 –V4.4
, rec_emp_records.future_use10 — future_use10
, rec_emp_records.right_to_work_type
, rec_emp_records.curr_store_cps_config
, rec_emp_records.old_store_cps_config
, xxaa_abc_badges_tab(xxaa_abc_badges_typ(null,null,null)) — V4.3
, xxaa_abc_status_tab(xxaa_abc_status_typ(null,null,null,null)) — V4.3
, xxaa_abc_pri_account_tab(xxaa_abc_pri_account_typ(null,null,null,null,null)) — V4.3
);

— V4.3 Populate calendar columns
pop_calendar_records
(p_record_id => l_record_id
,p_person_id => rec_emp_records.person_id
,p_mode => ‘Normal’
,p_effective_date => p_effective_date
);
COMMIT;
xxaa_abc_util_pkg.write_debug (‘————————————————–‘);

BEGIN

OPEN csr_get_live_stores(rec_emp_records.store_number); –V4.5
FETCH csr_get_live_stores INTO rec_get_live_stores; –V4.5
CLOSE csr_get_live_stores; –V4.5

–Start of V4.5
IF NVL(l_rec_store_number,’X’)<>rec_emp_records.store_number THEN

l_rec_store_number:=rec_emp_records.store_number;
l_old_store_cps_config:=rec_get_live_stores.attribute15;

xxaa_abc_util_pkg.write_log (‘Old store cps config for store: ‘||rec_emp_records.store_number||’ : ‘||l_old_store_cps_config );

END IF;

–End of V4.5

IF rec_emp_records.curr_store_cps_config <> NVL(rec_emp_records.old_store_cps_config, ‘A’)
THEN
OPEN get_lookup_details;
FETCH get_lookup_details INTO rec_get_lookup_dtl;
CLOSE get_lookup_details;

xxaa_abc_util_pkg.write_debug (‘Updating store config values’);

xxaa_abc_util_pkg.write_debug (‘rec_emp_records.curr_store_cps_config: ‘||rec_emp_records.curr_store_cps_config);
xxaa_abc_util_pkg.write_debug (‘rec_emp_records.old_store_cps_config: ‘||rec_emp_records.old_store_cps_config);
xxaa_abc_util_pkg.write_debug (‘rec_get_live_stores.lookup_code: ‘||rec_get_live_stores.lookup_code);

fnd_lookup_values_pkg.update_row( x_lookup_type => ‘xxaa_abc_STORE_CONTROL’
, x_security_group_id => rec_get_lookup_dtl.security_group_id
, x_view_application_id => rec_get_lookup_dtl.view_application_id
, x_lookup_code => rec_get_live_stores.lookup_code
, x_tag => rec_get_live_stores.tag
, x_attribute_category => rec_get_live_stores.attribute_category
, x_attribute1 => rec_get_live_stores.attribute1
, x_attribute2 => rec_get_live_stores.attribute2
, x_attribute3 => rec_get_live_stores.attribute3
, x_attribute4 => rec_get_live_stores.attribute4
, x_enabled_flag => ‘Y’
, x_start_date_active => rec_get_live_stores.start_date_active
, x_end_date_active => rec_get_live_stores.end_date_active
, x_territory_code => rec_get_live_stores.territory_code
, x_attribute5 => rec_get_live_stores.attribute5
, x_attribute6 => rec_get_live_stores.attribute6
, x_attribute7 => rec_get_live_stores.attribute7
, x_attribute8 => rec_get_live_stores.attribute8
, x_attribute9 => rec_get_live_stores.attribute9
, x_attribute10 => rec_get_live_stores.attribute10
, x_attribute11 => rec_get_live_stores.attribute11
, x_attribute12 => rec_get_live_stores.attribute12
, x_attribute13 => rec_get_live_stores.attribute13
, x_attribute14 => rec_emp_records.curr_store_cps_config
, x_attribute15 => rec_emp_records.curr_store_cps_config
, x_meaning => rec_get_live_stores.meaning
, x_description => rec_get_live_stores.description
, x_last_update_date => SYSDATE
, x_last_updated_by => fnd_profile.VALUE (‘USER_ID’)
, x_last_update_login => fnd_profile.VALUE (‘USER_ID’) );
END IF;
COMMIT;
END;

END IF;

BEGIN

l_chg_columns1 := compare_cal_columns1(rec_emp_records.person_id, l_chg_columns1);

SELECT REPLACE (listagg (names, ‘,’) within GROUP (ORDER BY rn), ‘,’, ‘|’) INTO l_chg_columns1
FROM
(SELECT level rn
, regexp_substr ((SELECT REPLACE (listagg (l_chg_columns1, ‘|’) within GROUP (ORDER BY 1), ‘|’, ‘,’)
FROM DUAL), ‘[^,]+’, 1, level) names
, row_number () over (partition BY regexp_substr (
(SELECT REPLACE (listagg (l_chg_columns1, ‘|’) within GROUP (ORDER BY 1), ‘|’, ‘,’)
FROM DUAL
), ‘[^,]+’, 1, level) order by level) rnn
FROM DUAL
CONNECT BY regexp_substr (
(SELECT REPLACE (listagg (l_chg_columns1, ‘|’) within GROUP (ORDER BY 1), ‘|’, ‘,’)
FROM DUAL
), ‘[^,]+’, 1, level) IS NOT NULL
)
WHERE
rnn=1;
xxaa_abc_util_pkg.write_log(‘Values in CHG_COL_LIST : ‘||l_chg_columns1||’ for record_id : ‘||l_record_id);

BEGIN –V4.4

/*V5.0– Override record_mode AND chg_col_list in case of INCREMENTAL Re-Hire as part of Defect #623*/
IF NVL(v_rec_mode, ‘X’) = ‘UPDATE’
AND INSTR (NVL(l_chg_columns1, ‘X’), ‘ROLE_HIRE_DATE’) >= 1
THEN
v_rec_mode := ‘CREATE’;
l_chg_columns1 := ‘ALL’;

UPDATE xxaa_abc_emp_tab
SET chg_col_list = l_chg_columns1
,record_mode = v_rec_mode
WHERE record_id = l_record_id;

xxaa_abc_util_pkg.write_log(‘Updated successfully CHG_COL_lIST : ‘||l_chg_columns1||’, RECORD_MODE : ‘||v_rec_mode||’ for record_id : ‘||l_record_id);

ELSE

— Start of V5.5 —
IF l_chg_columns1 IS NOT NULL THEN

UPDATE xxaa_abc_emp_tab –Existing code
SET chg_col_list = l_chg_columns1
WHERE record_id = l_record_id;

xxaa_abc_util_pkg.write_log(‘Updated successfully CHG_COL_lIST : ‘||l_chg_columns1||’ for record_id : ‘||l_record_id); –V4.4
ELSE
DELETE FROM xxaa_abc_emp_tab WHERE record_id=l_record_id;

xxaa_abc_util_pkg.write_log(‘Deleted successfully as chg col list null for record: ‘||l_record_id); –V4.4
END IF;
— End of V5.5 —
END IF; /* V5.0 End */

EXCEPTION
WHEN OTHERS THEN xxaa_abc_util_pkg.write_log(‘Exception raised while updating record for the record_id -‘||l_record_id||’ : ‘||SQLERRM); –V4.4
END;
COMMIT; –V4.4
END;

ELSIF rec_emp_records.attribute1 = ‘INITIAL’ AND (NOT g_debug_mode)
THEN
l_store_number := rec_emp_records.store_number ;
l_header_store_c := xxaa_header_str_count(rec_emp_records.store_number); –V4.4

IF (l_store_number <> NVL(l_chg_store_number,0) AND (l_header_store_c = 0))
THEN
xxaa_abc_util_pkg.write_log(‘Inserting Store record into header table : ‘||l_store_number);

l_chg_store_number := l_store_number;
IF rec_emp_records.attribute3 = ‘Y’ –V2.0 to avoid multiple entries in the header table
THEN
BEGIN
INSERT INTO xxaa_abc_EMP_HEADER_TAB — Store numbers
( record_id
, store_id
, live_date
, ini_run_date
, attribute1
, attribute2
, attribute3
, attribute4
, attribute5
, attribute6
, attribute7
, attribute8
, attribute9
, attribute10
, created_by
, creation_date
, last_updated_by
, last_updated_date)
VALUES
( xxaa_abc_emp_header_tab_s.nextval
, l_store_number
, rec_emp_records.live_date
, TRUNC(SYSDATE)
, rec_emp_records.run_number –attribute1
, NULL –attribute2
, NULL –attribute3
, NULL –attribute4
, NULL –attribute5
, NULL –attribute6
, NULL –attribute7
, NULL –attribute8
, NULL –attribute9
, NULL –attribute10
, fnd_profile.value(‘USER_ID’) –created_by
, SYSDATE –creation_date
, fnd_profile.value(‘USER_ID’) –last_updated_by
, SYSDATE –last_updated_date
);
EXCEPTION
WHEN OTHERS THEN xxaa_abc_util_pkg.write_log(‘Exception raised while Inserting record for the store : ‘||rec_emp_records.store_number||’in Header table : ‘||SQLERRM);
END;
COMMIT;
END IF; –V2.0
END IF;

l_record_id := NULL; — V4.3
IF NOT g_debug_mode
THEN
l_initial_rec_count := l_initial_rec_count + 1;

l_record_id := xxaa_abc_emp_tab_s.NEXTVAL; — V4.3
INSERT INTO xxaa_abc_emp_tab
( record_id
, person_id
, assignment_id
, employee_number
, ni_number
, title
, first_name
, last_name
, date_of_birth
, age
, payroll_number
, organization
, location
, job
, grade
, normal_hours
, trade_union_shop_steward
, date_start
, length_of_service
, addr_line_1
, addr_line_2
, addr_line_3
, city
, county
, postal_code
, country
, address_date_from
, home_phone_number
, home_phone_date_from
, mobile_phone_number
, mobile_phone_date_from
, work_phone_number –V2.3
, work_phone_date_from –V2.3
, email_address
, bank_sort_code
, bank_account_number
, store_number
, workforce_timekeeper_license
, middle_initial
, employment_status
, empl_status_effective_date
, biometric_employee_flag
, channel
, zone
, region
, area
, store
, department
, job_code
, primary_labour_account
, pri_lab_account_effective_date
, device_group
, badge_number
, badge_number_effective_date
, pay_rule
, run_number
, role_hire_date
, store_type
, clock_indicator
, employment_expiration_date
, badge_expiration_date
, labour_account_expiration_date
, pay_rule_effective_date
, attribute1
, attribute2
, attribute3
, attribute4
, attribute5
, attribute6
, attribute7
, attribute8
, attribute9
, attribute10
, created_by
, creation_date
, last_updated_by
, last_updated_date
, record_mode –CREATE/UPDATE
, record_created_by –INITAL/INCREMENTAL
, chg_col_list –ALL
, run_mode –READ/WRITE
, status
, error_message
, worker_type –V2.3
, job_acc_segment7 –V2.3
, primary_job_account –V2.3
, job_name –V2.3
, pri_job_account_exp_date –V2.3
, pri_job_account_effective_date –V2.3
, future_use1
, future_use2
, future_use3
, future_use4
, future_use5
, future_use6
, future_use7
, future_use8
, future_use9
, future_use10
, right_to_work_type
, curr_store_cps_config
, old_store_cps_config
, badge_details — V4.3
, employment_details — V4.3
, account_details — V4.3
)
VALUES
( l_record_id
, rec_emp_records.person_id
, rec_emp_records.assignment_id
, rec_emp_records.employee_number
, rec_emp_records.ni_number
, rec_emp_records.title
, rec_emp_records.first_name
, rec_emp_records.last_name
, rec_emp_records.date_of_birth
, rec_emp_records.age
, rec_emp_records.payroll_number
, rec_emp_records.organization
, rec_emp_records.location
, rec_emp_records.job
, rec_emp_records.grade
, rec_emp_records.normal_hours
, rec_emp_records.trade_union_shop_steward
, rec_emp_records.date_start
, rec_emp_records.length_of_service
, rec_emp_records.addr_line_1
, rec_emp_records.addr_line_2
, rec_emp_records.addr_line_3
, rec_emp_records.city
, rec_emp_records.county
, rec_emp_records.postal_code
, rec_emp_records.country
, rec_emp_records.address_date_from
, rec_emp_records.home_phone_number
, rec_emp_records.home_phone_date_from
, rec_emp_records.mobile_phone_number
, rec_emp_records.mobile_phone_date_from
, rec_emp_records.work_phone_number –V2.3
, rec_emp_records.work_phone_date_from –V2.3
, rec_emp_records.email_address
, rec_emp_records.bank_sort_code
, rec_emp_records.bank_account_number
, rec_emp_records.store_number
, rec_emp_records.workforce_timekeeper_license
, rec_emp_records.middle_initial
, rec_emp_records.employment_status
, rec_emp_records.empl_status_effective_date
, rec_emp_records.biometric_employee_flag
, rec_emp_records.channel
, rec_emp_records.zone
, rec_emp_records.region
, rec_emp_records.area
, rec_emp_records.store
, rec_emp_records.department
, rec_emp_records.job_code
, rec_emp_records.primary_labour_account
, rec_emp_records.pri_lab_account_effective_date
, rec_emp_records.device_group
, rec_emp_records.badge_number
, rec_emp_records.badge_number_effective_date
, rec_emp_records.pay_rule
, rec_emp_records.run_number
, rec_emp_records.role_hire_date
, rec_emp_records.store_type
, rec_emp_records.clock_indicator
, rec_emp_records.employment_expiration_date
, rec_emp_records.badge_expiration_date
, rec_emp_records.labour_account_expiration_date
, rec_emp_records.pay_rule_effective_date
, rec_emp_records.attribute2 –attribute1
, NULL –attribute2
, NULL –attribute3
, NULL –attribute4
, NULL –attribute5
, NULL –attribute6
, NULL –attribute7
, NULL –attribute8
, NULL –attribute9
, NULL –attribute10
, fnd_profile.value(‘USER_ID’) –created_by
, SYSDATE –creation_date
, fnd_profile.value(‘USER_ID’) –last_updated_by
, SYSDATE –last_updated_date
, ‘CREATE’ –record_mode
, ‘INITIAL’ –record_created_by –INITAL/INCREMENTAL
, ‘ALL’ –chg_col_list
, NULL –run_mode
, ‘UNPROCESSED’– status
, NULL –error_message
, rec_emp_records.worker_type –V2.3
, rec_emp_records.job_acc_segment7 –V2.3
, rec_emp_records.primary_job_account –V2.3
, rec_emp_records.job_name –V2.3
, rec_emp_records.pri_job_account_exp_date –V2.3
, rec_emp_records.pri_job_account_effective_date –V2.3
, NULL — future_use1
, NULL — future_use2
, NULL — future_use3
, NULL — future_use4
, NULL — future_use5
, NULL — future_use6
, NULL — future_use7
, NULL — future_use8
, rec_emp_records.future_use9 — future_use9 — V4.4
, rec_emp_records.future_use10 — future_use10
, rec_emp_records.right_to_work_type
, rec_emp_records.curr_store_cps_config –V4.2
, rec_emp_records.old_store_cps_config –V4.2
, xxaa_abc_badges_tab(xxaa_abc_badges_typ(null,null,null)) — V4.3
, xxaa_abc_status_tab(xxaa_abc_status_typ(null,null,null,null)) — V4.3
, xxaa_abc_pri_account_tab(xxaa_abc_pri_account_typ(null,null,null,null,null)) — V4.3
);

xxaa_abc_util_pkg.write_debug (‘curr_store_cps_config1: ‘||rec_emp_records.curr_store_cps_config);
xxaa_abc_util_pkg.write_debug (‘old_store_cps_config1: ‘||rec_emp_records.old_store_cps_config);

— V4.3 Populate calendar columns
pop_calendar_records
(p_record_id => l_record_id
,p_person_id => rec_emp_records.person_id
,p_mode => ‘Normal’
,p_effective_date => p_effective_date
);
COMMIT;

BEGIN
IF rec_emp_records.curr_store_cps_config <> NVL(rec_emp_records.old_store_cps_config, ‘A’)
THEN
OPEN get_lookup_details;
FETCH get_lookup_details INTO rec_get_lookup_dtl;
CLOSE get_lookup_details;

OPEN csr_get_live_stores(rec_emp_records.store_number);
FETCH csr_get_live_stores INTO rec_get_live_stores;
CLOSE csr_get_live_stores;

xxaa_abc_util_pkg.write_debug (‘Updating store config values’);

fnd_lookup_values_pkg.update_row( x_lookup_type => ‘xxaa_abc_STORE_CONTROL’
, x_security_group_id => rec_get_lookup_dtl.security_group_id
, x_view_application_id => rec_get_lookup_dtl.view_application_id
, x_lookup_code => rec_get_live_stores.lookup_code
, x_tag => rec_get_live_stores.tag
, x_attribute_category => rec_get_live_stores.attribute_category
, x_attribute1 => rec_get_live_stores.attribute1
, x_attribute2 => rec_get_live_stores.attribute2
, x_attribute3 => rec_get_live_stores.attribute3
, x_attribute4 => rec_get_live_stores.attribute4
, x_enabled_flag => ‘Y’
, x_start_date_active => rec_get_live_stores.start_date_active
, x_end_date_active => rec_get_live_stores.end_date_active
, x_territory_code => rec_get_live_stores.territory_code
, x_attribute5 => rec_get_live_stores.attribute5
, x_attribute6 => rec_get_live_stores.attribute6
, x_attribute7 => rec_get_live_stores.attribute7
, x_attribute8 => rec_get_live_stores.attribute8
, x_attribute9 => rec_get_live_stores.attribute9
, x_attribute10 => rec_get_live_stores.attribute10
, x_attribute11 => rec_get_live_stores.attribute11
, x_attribute12 => rec_get_live_stores.attribute12
, x_attribute13 => rec_get_live_stores.attribute13
, x_attribute14 => rec_emp_records.curr_store_cps_config
, x_attribute15 => rec_emp_records.curr_store_cps_config
, x_meaning => rec_get_live_stores.meaning
, x_description => rec_get_live_stores.description
, x_last_update_date => SYSDATE
, x_last_updated_by => fnd_profile.VALUE (‘USER_ID’)
, x_last_update_login => fnd_profile.VALUE (‘USER_ID’) );
END IF;
COMMIT;
END;

xxaa_abc_util_pkg.write_debug (‘————————————————–‘);

ELSE
fnd_file.put_line (fnd_file.OUTPUT,’*********myTime Employee Interface*********’);
fnd_file.put_line (fnd_file.OUTPUT,’***************’||rec_emp_records.employee_number||’**************’);
fnd_file.put_line (fnd_file.OUTPUT,’NI Number : ‘||rec_emp_records.ni_number);
fnd_file.put_line (fnd_file.OUTPUT,’Title : ‘||rec_emp_records.title);
fnd_file.put_line (fnd_file.OUTPUT,’First Name : ‘||rec_emp_records.first_name);
fnd_file.put_line (fnd_file.OUTPUT,’Last Name : ‘||rec_emp_records.last_name);
fnd_file.put_line (fnd_file.OUTPUT,’Date of Birth : ‘||rec_emp_records.date_of_birth);
fnd_file.put_line (fnd_file.OUTPUT,’Age : ‘||rec_emp_records.age);
fnd_file.put_line (fnd_file.OUTPUT,’Payroll Number : ‘||rec_emp_records.payroll_number);
fnd_file.put_line (fnd_file.OUTPUT,’Organization : ‘||rec_emp_records.organization);
fnd_file.put_line (fnd_file.OUTPUT,’Location : ‘||rec_emp_records.location);
fnd_file.put_line (fnd_file.OUTPUT,’Job : ‘||rec_emp_records.job);
fnd_file.put_line (fnd_file.OUTPUT,’Grade : ‘||rec_emp_records.grade);
fnd_file.put_line (fnd_file.OUTPUT,’Tradde Union Shop Steward : ‘||rec_emp_records.trade_union_shop_steward);
fnd_file.put_line (fnd_file.OUTPUT,’Service Date Start : ‘||rec_emp_records.date_start);
fnd_file.put_line (fnd_file.OUTPUT,’Length of Service : ‘||rec_emp_records.length_of_service);
fnd_file.put_line (fnd_file.OUTPUT,’Address – Line 1 : ‘||rec_emp_records.addr_line_1);
fnd_file.put_line (fnd_file.OUTPUT,’Address – Line 2 : ‘||rec_emp_records.addr_line_2);
fnd_file.put_line (fnd_file.OUTPUT,’Address – Line 3 : ‘||rec_emp_records.addr_line_3);
fnd_file.put_line (fnd_file.OUTPUT,’City : ‘||rec_emp_records.city);
fnd_file.put_line (fnd_file.OUTPUT,’County : ‘||rec_emp_records.county);
fnd_file.put_line (fnd_file.OUTPUT,’Postal Code : ‘||rec_emp_records.postal_code);
fnd_file.put_line (fnd_file.OUTPUT,’Country : ‘||rec_emp_records.country);
fnd_file.put_line (fnd_file.OUTPUT,’Address Effective Date : ‘||rec_emp_records.address_date_from);
fnd_file.put_line (fnd_file.OUTPUT,’Home Phone Number : ‘||rec_emp_records.home_phone_number);
fnd_file.put_line (fnd_file.OUTPUT,’Home Phone Number – Effective Date : ‘||rec_emp_records.home_phone_date_from);
fnd_file.put_line (fnd_file.OUTPUT,’Mobile Phone Number : ‘||rec_emp_records.mobile_phone_number);
fnd_file.put_line (fnd_file.OUTPUT,’Mobile Phone Number – Effective Date : ‘||rec_emp_records.mobile_phone_date_from);
fnd_file.put_line (fnd_file.OUTPUT,’Work Phone Number : ‘||rec_emp_records.work_phone_number);
fnd_file.put_line (fnd_file.OUTPUT,’Work Phone Number – Effective Date : ‘||rec_emp_records.work_phone_date_from);
fnd_file.put_line (fnd_file.OUTPUT,’Email Address : ‘||rec_emp_records.email_address);
fnd_file.put_line (fnd_file.OUTPUT,’Bank Sort Code : ‘||rec_emp_records.bank_sort_code);
fnd_file.put_line (fnd_file.OUTPUT,’Bank Account Number : ‘||rec_emp_records.bank_account_number);
fnd_file.put_line (fnd_file.OUTPUT,’Store Number : ‘||rec_emp_records.store_number);
fnd_file.put_line (fnd_file.OUTPUT,’Workforce TimeKeeper License : ‘||rec_emp_records.workforce_timekeeper_license);
fnd_file.put_line (fnd_file.OUTPUT,’Middle Initial : ‘||rec_emp_records.middle_initial);
fnd_file.put_line (fnd_file.OUTPUT,’Employment Status : ‘||rec_emp_records.employment_status);
fnd_file.put_line (fnd_file.OUTPUT,’Employment Status – Effective Date : ‘||rec_emp_records.empl_status_effective_date);
fnd_file.put_line (fnd_file.OUTPUT,’Biometric Employee Flag : ‘||rec_emp_records.biometric_employee_flag);
fnd_file.put_line (fnd_file.OUTPUT,’Channel : ‘||rec_emp_records.channel);
fnd_file.put_line (fnd_file.OUTPUT,’Zone : ‘||rec_emp_records.zone);
fnd_file.put_line (fnd_file.OUTPUT,’Region : ‘||rec_emp_records.region);
fnd_file.put_line (fnd_file.OUTPUT,’Area : ‘||rec_emp_records.area);
fnd_file.put_line (fnd_file.OUTPUT,’Store : ‘||rec_emp_records.store);
fnd_file.put_line (fnd_file.OUTPUT,’Department : ‘||rec_emp_records.department);
fnd_file.put_line (fnd_file.OUTPUT,’Job Code : ‘||rec_emp_records.job_code);
fnd_file.put_line (fnd_file.OUTPUT,’Primary Labour Account : ‘||rec_emp_records.primary_labour_account);
fnd_file.put_line (fnd_file.OUTPUT,’Primary Labour Account – Effective Date : ‘||rec_emp_records.pri_lab_account_effective_date);
fnd_file.put_line (fnd_file.OUTPUT,’Device Group : ‘||rec_emp_records.device_group);
fnd_file.put_line (fnd_file.OUTPUT,’Badge Number : ‘||rec_emp_records.badge_number);
fnd_file.put_line (fnd_file.OUTPUT,’Badge Number – Effective Date : ‘||rec_emp_records.badge_number_effective_date);
fnd_file.put_line (fnd_file.OUTPUT,’Pay rule : ‘||rec_emp_records.pay_rule);
fnd_file.put_line (fnd_file.OUTPUT,’Role Hire Date : ‘||rec_emp_records.role_hire_date);
fnd_file.put_line (fnd_file.OUTPUT,’Store Type : ‘||rec_emp_records.store_type);
fnd_file.put_line (fnd_file.OUTPUT,’Clock Indicator : ‘||rec_emp_records.clock_indicator);
fnd_file.put_line (fnd_file.OUTPUT,’Employment Expiration Date : ‘||rec_emp_records.employment_expiration_date);
fnd_file.put_line (fnd_file.OUTPUT,’Badge Expiration Date : ‘||rec_emp_records.badge_expiration_date);
fnd_file.put_line (fnd_file.OUTPUT,’Labour Account Expiration Date : ‘||rec_emp_records.labour_account_expiration_date);
fnd_file.put_line (fnd_file.OUTPUT,’Pay Rule Effective Date : ‘||rec_emp_records.pay_rule_effective_date);
fnd_file.put_line (fnd_file.OUTPUT,’Worker Type : ‘||rec_emp_records.worker_type);
fnd_file.put_line (fnd_file.OUTPUT,’Job Acc Segment7 : ‘||rec_emp_records.job_acc_segment7);
fnd_file.put_line (fnd_file.OUTPUT,’Primary Job Account : ‘||rec_emp_records.primary_job_account);
fnd_file.put_line (fnd_file.OUTPUT,’Job Name : ‘||rec_emp_records.job_name);
fnd_file.put_line (fnd_file.OUTPUT,’Pri Job Account Exp Date : ‘||rec_emp_records.pri_job_account_exp_date);
fnd_file.put_line (fnd_file.OUTPUT,’Pri Job Account Effective Date : ‘||rec_emp_records.pri_job_account_effective_date);
fnd_file.put_line (fnd_file.OUTPUT,’Right To Work Type : ‘||rec_emp_records.right_to_work_type);
END IF;
END IF;

— Start of V4.5 —
/*IF (rec_emp_records.curr_store_cps_config IS NULL OR rec_emp_records.old_store_cps_config IS NULL) AND l_record_id IS NOT NULL AND l_prev_store_id IS NOT NULL
THEN
pop_curr_old_cps_config(l_record_id,rec_emp_records.future_use10,rec_emp_records.store_number,l_prev_store_id,l_old_store_cps_config);
COMMIT;
END IF;*/
— End of V4.5 —

END LOOP;

IF NOT g_debug_mode
THEN
xxaa_abc_util_pkg.write_log ( ‘Number of Initial Records Processed by thread ‘||p_thread_no||’ – ‘||l_initial_rec_count);
xxaa_abc_util_pkg.write_log ( ‘Number of Incremental Records Processed by thread ‘||p_thread_no||’ – ‘||l_inc_rec_count);
xxaa_abc_util_pkg.write_log ( ‘Total Records Processed by the thread ‘||p_thread_no||’ – ‘||(l_inc_rec_count+l_initial_rec_count));
END IF;
–COMMIT;
EXCEPTION
WHEN OTHERS THEN xxaa_abc_util_pkg.write_log ( ‘Exception – process_threads – ‘||SQLERRM);
p_retcode := ‘2’;
END process_threads;

PROCEDURE call_conc_program ( p_prog_name IN VARCHAR2
, p_app_short_name IN VARCHAR2
, p_effective_date IN DATE
, p_thread_id IN NUMBER
, p_request_id OUT NUMBER
)
IS

l_request_id NUMBER;
l_procedure VARCHAR2(50) := ‘.call_conc_program’;

BEGIN
l_request_id := fnd_request.submit_request( p_app_short_name
, p_prog_name
, NULL
, SYSDATE
, FALSE
, TO_CHAR(p_effective_date,’RRRR/MM/DD HH24:MI:SS’)
, p_thread_id
);
p_request_id := l_request_id;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
xxaa_abc_util_pkg.write_log ( ‘Exception – call_conc_program – ‘||SQLERRM);
END call_conc_program;

PROCEDURE invoke_threads( p_thread_id IN NUMBER)
IS

l_request_id NUMBER := NULL;
l_procedure VARCHAR2(50) := ‘.invoke_threads’;
i NUMBER := 0;

BEGIN

FOR i IN 1 .. p_thread_id
LOOP
call_conc_program( ‘xxaa_abc_EMP_INT_CHILD’
, ‘xxaaDATA’
, g_effective_date
, i
, l_request_id
);
g_conc_mgr_ndx := g_conc_mgr_ndx + 1;
g_conc_mgr_table(g_conc_mgr_ndx) := l_request_id;
xxaa_abc_util_pkg.write_log ( ‘Child Program ‘||i||’ Submitted – ‘||l_request_id);
END LOOP;

EXCEPTION
WHEN OTHERS THEN
xxaa_abc_util_pkg.write_log ( ‘Exception – invoke_threads – ‘||SQLERRM);
END invoke_threads;

PROCEDURE populate_emp_data ( p_err_buf OUT VARCHAR2
, p_ret_code OUT NUMBER
, p_effective_date IN VARCHAR2
, p_store_id IN VARCHAR2
, p_person_id IN NUMBER DEFAULT NULL
)
IS

— Local variables
l_proc_name CONSTANT VARCHAR2 (100) := ‘xxaa_abc_emp_int_pkg.populate_emp_data’;
l_location_id NUMBER;
l_request_id NUMBER;
l_req_phase VARCHAR2 (50);
l_req_status BOOLEAN;
l_status VARCHAR2 (50);
l_req_dev_phase VARCHAR2 (50);
l_req_dev_status VARCHAR2 (50);
l_req_message VARCHAR2 (50);
l_rec_count NUMBER;
l_emp_processed NUMBER;
l_rtc NUMBER;
l_exist VARCHAR2(1);
l_type VARCHAR2(25);
l_abc_location VARCHAR2(100);
–V2.1
l_per_id NUMBER;
l_assignment_id NUMBER;
–V2.1 End
l_badge_number VARCHAR2(50);
l_badge_eff_date VARCHAR2(50);
l_pay_effect_date VARCHAR2(50);
l_emp_status_eff_date VARCHAR2(50);
l_emp_status VARCHAR2(100);
l_pri_lab_date VARCHAR2(50); –V1.6 End
l_pri_lab_acnt VARCHAR2(100);
l_e_status VARCHAR2(100);
l_status_eff_date VARCHAR2(100);
l_pay_rule_date VARCHAR2(50);
l_location VARCHAR2(100);
l_job VARCHAR2(100);
l_thread_id NUMBER := 1;
l_status_code NUMBER := 1;
l_start_time NUMBER;
l_cnt NUMBER := 0;
l_no NUMBER := 0;
l_new_eff_date DATE;
l_transfer_mode VARCHAR2(10);
l_count NUMBER;
l_run_number NUMBER;
l_last_run_date DATE;
l_curr_run_date DATE;
l_rowcount NUMBER;
l_header_flag VARCHAR2(1);

–V2.2 Start
l_home_phone_end DATE;
l_mobile_phone_end DATE;
–V2.2 End
–V2.3 Start
l_work_phone_end DATE;
l_worker_type VARCHAR2(100);
–l_primary_job_account VARCHAR2(1000);
l_pri_job_date VARCHAR2(100);
l_pri_job_acnt VARCHAR2(1000);
l_old_cps_config NUMBER;
–V2.3 End

CURSOR csr_get_location_id
IS
SELECT location_id
FROM hr_all_organization_units
WHERE SUBSTR (name, 2, 4) = TO_CHAR(p_store_id)
AND NAME LIKE ‘A%’;

CURSOR csr_get_newly_live_stores
IS
SELECT DISTINCT flv.attribute2
FROM fnd_lookup_values flv
WHERE flv.lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND flv.enabled_flag = ‘Y’
AND TO_DATE (flv.attribute2, ‘RRRR/MM/DD HH24:MI:SS’) <= g_effective_date
AND flv.attribute3 = NVL(l_location_id, attribute3)
AND flv.attribute4 = ‘N’
AND ( flv.attribute1 = ‘Convenience’
OR ( flv.attribute1 = ‘Supermarket’
AND flv.lookup_code IN
(SELECT flv1.lookup_code
FROM fnd_lookup_values flv1
WHERE flv1.lookup_type =
‘xxaa_abc_STORE_EXCP_CONTROL’
AND flv1.attribute1 = ‘Y’
AND flv1.enabled_flag = ‘Y’
AND NVL (p_store_id, flv.lookup_code) =
flv1.lookup_code)));

l_live_store_date VARCHAR2(50);

–Cursor to get concurrent program last run completion date
CURSOR csr_get_last_run_date
IS
SELECT actual_completion_date
FROM fnd_concurrent_requests fcr
WHERE fcr.request_id = ( SELECT MAX (request_id)
FROM fnd_concurrent_requests fcr1
, fnd_concurrent_programs_tl fcpt
WHERE fcpt.concurrent_program_id = fcr1.concurrent_program_id
AND fcpt.user_concurrent_program_name = ‘xxaa ABC Employee Interface Batch’
AND fcr1.status_code IN (‘C’, ‘G’)
);

–Cursor to get concurrent program current run start date
CURSOR csr_get_curr_run_date
IS
SELECT actual_start_date
FROM fnd_concurrent_requests fcr
WHERE fcr.request_id = ( SELECT MAX (request_id)
FROM fnd_concurrent_requests fcr1
, fnd_concurrent_programs_tl fcpt
WHERE fcpt.concurrent_program_id = fcr1.concurrent_program_id
AND fcpt.user_concurrent_program_name = ‘xxaa ABC Employee Interface Batch’
AND fcr1.status_code = ‘R’
AND fcr1.phase_code = ‘R’
);

–Cursor to get concurrent program last run completion date
CURSOR csr_get_clck_last_run_date
IS
SELECT actual_completion_date
FROM fnd_concurrent_requests fcr
WHERE fcr.request_id = ( SELECT MAX (request_id)
FROM fnd_concurrent_requests fcr1
, fnd_concurrent_programs_tl fcpt
WHERE fcpt.concurrent_program_id = fcr1.concurrent_program_id
AND fcpt.user_concurrent_program_name = ‘xxaa ABC Convenience Clock Number Allocation’
AND fcr1.status_code IN (‘C’, ‘G’)
);

— Cursor to get latest employee data for incremental run
CURSOR csr_get_emp_details
IS
–Initial (Convenience + Supermarket)
SELECT /*+ PARALLEL */ –V4.4
papf.person_id
, paaf.assignment_id
, papf.employee_number
, papf.national_identifier ni_number
, papf.title
, papf.first_name
, papf.last_name
, TO_CHAR(papf.date_of_birth, ‘DD-MON-YYYY’) date_of_birth –V5.5
, (MONTHS_BETWEEN(g_effective_date, papf.date_of_birth) / 12) age
, ppg.segment4 payroll_number
, haou.name organization
, hla.location_code location
, pj.name job
, pg.name grade
, paaf.normal_hours
, DECODE (paaf.ass_attribute18,’Y’,’Yes’,’N’,’No’,NULL) trade_union_shop_steward
, ppos.date_start date_start
, ROUND(MONTHS_BETWEEN(g_effective_date, ppos.adjusted_svc_date) / 12,2) length_of_service
, pa.address_line1 addr_line_1
, pa.address_line2 addr_line_2
, pa.address_line3 addr_line_3
, pa.town_or_city city
, pa.region_1 county
, pa.postal_code postal_code
, pa.country country
, pa.date_from address_date_from
, pph.phone_number home_phone_number
, pph.date_from home_phone_date_from
, ppm.phone_number mobile_phone_number
, ppm.date_from mobile_phone_date_from
, ppw.phone_number work_phone_number
, ppw.date_from work_phone_date_from
, papf.email_address email_address
, SUBSTR(haou.name,2,4) store_number
, ‘TRUE’ workforce_timekeeper_license
, UPPER(substr(papf.middle_names,1,1)) middle_initial
, past.user_status employment_status
, ppos.date_start empl_status_effective_date
, ‘TRUE’ biometric_employee_flag
, flv.attribute1 channel
, flv.attribute5 zone
, flv.attribute6 region
, flv.attribute7 area
, FLV.ATTRIBUTE8 STORE_CODE
, DECODE(FLV.ATTRIBUTE9,’Retail’,DEPT_MAP.DEPT_DISPLAY,’Convenience’,’Store’,
‘Small Retail’,NVL(FLVD.ATTRIBUTE2,DEPT_MAP.DEPT_DISPLAY)) department –V4.1 and V4.8
, SUBSTR(pj.name,1,5) job_code
, flv.attribute1
||’/’|| flv.attribute5
||’/’|| flv.attribute6
||’/’|| FLV.ATTRIBUTE7
||’/’|| FLV.ATTRIBUTE8
||’/’|| DECODE(FLV.ATTRIBUTE9,’Convenience’,’Store’,
‘Small Retail’,NVL(FLVD.ATTRIBUTE2,DEPT_MAP.DEPT_DISPLAY),’Retail’,DEPT_MAP.DEPT_DISPLAY) –V4.1 and V4.8
||’/’|| SUBSTR(pj.name,2,4) primary_labour_account
, paaf.effective_start_date pri_lab_account_effective_date
, flv.attribute11 device_group
–, SUBSTR(haou.name,2,4)||paaf.ass_attribute6 badge_number –V1.2
, DECODE( NVL(paaf.ass_attribute6, ‘NA’), ‘NA’, NULL, SUBSTR(haou.name,2,4)||paaf.ass_attribute6) badge_number
, DECODE( NVL(paaf.ass_attribute6, ‘NA’), ‘NA’, NULL, TO_CHAR(paaf.effective_start_date, ‘DD-MON-YYYY’)|| ‘ 00:00’)badge_number_effective_date
, ‘Punch Capture’ pay_rule
, flv.attribute2 live_date
–, paaf.effective_start_date role_hire_date
, ppos.date_start role_hire_date –V3.8
, ‘TRUE’ clock_indicator
, flv.attribute9 store_type
, ‘INITIAL’ type
, NULL attribute1
, TO_CHAR(’01-JAN-3000′) employment_expiration_date
, DECODE( NVL(paaf.ass_attribute6, ‘NA’), ‘NA’, NULL, TO_CHAR(’01-JAN-3000 00:00′)) badge_expiration_date
, TO_CHAR(’01-JAN-3000′) labour_account_expiration_date
–, TO_CHAR((SYSDATE),’DD-MON-YYYY’) pay_rule_effective_date –V4.2
, TO_CHAR( paaf.effective_start_date,’DD-MON-YY’) pay_rule_effective_date –V4.2
, flv.lookup_code || ‘-‘ || UPPER(flv.meaning) job_acc_segment7 –V2.3
, SUBSTR(pj.name,INSTR(pj.name,’|’)+1,INSTR(SUBSTR(pj.name,INSTR(pj.name,’|’)+1),’|’,-1)-1) job_name –V2.3
, TO_CHAR(’01-JAN-3000′) pri_job_account_exp_date –V2.3
, ‘Sample’
|| ‘/’
|| ‘Retail’
|| ‘/’
|| flv.attribute5
|| ‘/’
|| flv.attribute6
|| ‘/’
|| flv.attribute7
|| ‘/’
|| flv.attribute1
|| ‘/’
|| flv.attribute13
|| ‘/’
–|| DECODE(flv.attribute9, ‘Retail’, flvd.description, ‘Small Retail’, flvd.tag, ‘Convenience’, ‘Store’) –V4.1
||DECODE(FLV.ATTRIBUTE9, ‘Retail’,DEPT_MAP.DEPT_DISPLAY,’Convenience’, ‘Store’,
‘Small Retail’,NVL(FLVD.ATTRIBUTE2,DEPT_MAP.DEPT_DISPLAY) ) –V4.1 and V4.8

|| ‘/’
|| SUBSTR (pj.name,INSTR (pj.name, ‘|’) + 1,INSTR (SUBSTR (pj.name, INSTR (pj.name, ‘|’) + 1), ‘|’, -1) – 1) primary_job_account
, TO_CHAR ( (paaf.effective_start_date), ‘DD-MON-YYYY’) pri_job_account_effective_date
, flvw.meaning worker_type
, xra.rtw_type right_to_work_type –V4.2
, flv.attribute14 curr_store_cps_config –V4.2
, flv.attribute15 old_store_cps_config –V4.2
, ‘INITIAL’ cur_query
, ‘3’ rec_priority –V4.4
FROM per_all_people_f papf
, per_all_assignments_f paaf
, per_assignment_status_types past
, per_periods_of_service ppos
, pay_people_groups ppg
, hr_all_organization_units haou
, hr_locations_all hla
, per_jobs pj
, per_grades pg
, per_addresses pa
, per_phones ppm
, per_phones pph
, per_phones ppw
, fnd_lookup_values flv
, fnd_lookup_values flvd
, fnd_lookup_values flvw
,(SELECT ffvt.flex_value_meaning dept_code
, ffvt.description dept_display
FROM fnd_flex_value_sets ffvs
, fnd_flex_values ffv
, fnd_flex_values_tl ffvt
WHERE ffv.flex_value_set_id = ffvs.flex_value_set_id
AND ffv.flex_value_id = ffvt.flex_value_id
AND ffvs.flex_value_set_name = ‘ABC_RETAIL_DEPT’
) dept_map –V4.1
, xxaa_rtw_audit xra –V4.2
WHERE 1=1
AND papf.person_id = paaf.person_id
AND paaf.person_id = NVL(p_person_id, paaf.person_id)
AND papf.current_employee_flag = ‘Y’
AND paaf.assignment_type = ‘E’
AND paaf.primary_flag = ‘Y’
AND paaf.ass_attribute30 IN (‘A’,’P’) –V3.6
AND g_effective_date between papf.effective_start_date and papf.effective_end_date
AND g_effective_date BETWEEN paaf.effective_start_date AND paaf.effective_end_date
AND past.assignment_status_type_id = paaf.assignment_status_type_id
AND papf.person_id = ppos.person_id
AND ppos.date_start = (SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = papf.person_id
AND g_effective_date BETWEEN ppos1.date_start
AND NVL(ppos1.actual_termination_date
, TO_DATE(’31-Dec-4712′))
)
AND ppg.segment3 IN (‘Retail 4 Weekly’,’Retail Salaried’)
AND paaf.people_group_id = ppg.people_group_id
AND paaf.organization_id = haou.organization_id
AND paaf.location_id = hla.location_id
AND paaf.job_id = pj.job_id
AND paaf.grade_id = pg.grade_id
AND papf.person_id = pa.person_id
AND pa.primary_flag = ‘Y’
AND g_effective_date between pa.date_from and NVL(pa.date_to, to_date(’31-Dec-4712′))
–V1.7 Start
AND ppm.phone_type(+) = ‘M’
AND ppm.parent_table(+) = ‘PER_ALL_PEOPLE_F’
AND ppm.parent_id(+) = papf.person_id
AND pph.phone_type(+) = ‘H1’
AND pph.parent_table(+) = ‘PER_ALL_PEOPLE_F’
AND pph.parent_id(+) = papf.person_id
AND ppw.phone_type(+) = ‘W1’
AND ppw.parent_table(+) = ‘PER_ALL_PEOPLE_F’
AND ppw.parent_id(+) = papf.person_id
AND ( TRUNC(g_effective_date) BETWEEN NVL(pph.date_from, g_effective_date) AND NVL(pph.date_to, TO_DATE(’31-Dec-4712′)) –V1.7
–V2.2 Start
OR ( NVL (pph.date_to, TO_DATE (’31-Dec-4712′)) < g_effective_date
AND NOT EXISTS ( SELECT ‘Y’
FROM per_phones
WHERE phone_type = ‘H1’
AND parent_id = papf.person_id
AND NVL(date_from, g_effective_date) < NVL(pph.date_to, TO_DATE (’31-Dec-4712′))
)
)
OR ( NVL (pph.date_from, TO_DATE (’31-Dec-4712′)) > g_effective_date
AND NOT EXISTS ( SELECT ‘Y’
FROM per_phones
WHERE phone_type = ‘H1’
AND parent_id = papf.person_id
AND TRUNC(g_effective_date) BETWEEN date_from AND NVL(date_to, TO_DATE (’31-Dec-4712′))
)
)
)
–V2.2 End
AND ( TRUNC(g_effective_date) BETWEEN NVL(ppm.date_from, g_effective_date) AND NVL(ppm.date_to, TO_DATE(’31-Dec-4712′)) –V1.7
–V2.2 Start
OR ( NVL (ppm.date_to, TO_DATE (’31-Dec-4712′)) < g_effective_date
AND NOT EXISTS ( SELECT ‘Y’
FROM per_phones
WHERE phone_type = ‘M’
AND parent_id = papf.person_id
AND NVL(date_from, g_effective_date) < NVL(ppm.date_to, TO_DATE (’31-Dec-4712′))
)
)
OR ( NVL (ppm.date_from, TO_DATE (’31-Dec-4712′)) > g_effective_date
AND NOT EXISTS ( SELECT ‘Y’
FROM per_phones
WHERE phone_type = ‘M’
AND parent_id = papf.person_id
AND TRUNC(g_effective_date) BETWEEN date_from AND NVL(date_to, TO_DATE (’31-Dec-4712′))
)
)
)
–V2.2 End
–V1.7 End
AND ( TRUNC(g_effective_date) BETWEEN NVL(ppw.date_from, g_effective_date) AND NVL(ppw.date_to, TO_DATE(’31-Dec-4712′)) –V1.7
–V2.2 Start
OR ( NVL (ppw.date_to, TO_DATE (’31-Dec-4712′)) < g_effective_date
AND NOT EXISTS ( SELECT ‘Y’
FROM per_phones
WHERE phone_type = ‘W1’
AND parent_id = papf.person_id
AND NVL(date_from, g_effective_date) < NVL(ppw.date_to, TO_DATE (’31-Dec-4712′))
)
)
OR ( NVL (ppw.date_from, TO_DATE (’31-Dec-4712′)) > g_effective_date
AND NOT EXISTS ( SELECT ‘Y’
FROM per_phones
WHERE phone_type = ‘W1’
AND parent_id = papf.person_id
AND TRUNC(g_effective_date) BETWEEN date_from AND NVL(date_to, TO_DATE (’31-Dec-4712′))
)
)
)
–V2.2 End
AND flv.lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND flv.enabled_flag = ‘Y’
AND flv.lookup_code = SUBSTR(haou.name,2,4)
AND flv.attribute2 IS NOT NULL
AND flv.security_group_id = 0
AND To_date(flv.attribute2,’RRRR/MM/DD HH24:MI:SS’) <= g_effective_date
AND flvd.lookup_type(+) = ‘xxaa_ABC_DEPT_MAPPING’ –V4.1
AND flvd.enabled_flag(+) = ‘Y’
AND flvd.security_group_id(+) = 0
AND flvd.lookup_code(+) = paaf.ass_attribute1
AND flvw.lookup_type = ‘EMP_CAT’
AND flvw.enabled_flag=’Y’
AND flvw.lookup_code = paaf.employment_category
AND dept_map.dept_code (+) = paaf.ass_attribute1 –V4.1
AND xra.person_id(+) = papf.person_id –V4.2
AND NVL(xra.version_number, 1) = NVL((SELECT MAX(version_number) FROM xxaa_rtw_audit WHERE person_id = xra.person_id), 1)
AND flv.lookup_code = NVL(TO_CHAR(p_store_id), flv.lookup_code)
AND NOT EXISTS ( SELECT ‘Y’
FROM xxaa_abc_emp_header_tab xkeiht
WHERE 1=1
–AND xkeiht.store_id = SUBSTR(haou.name,2,4)
AND xkeiht.store_id = flv.lookup_code
)
UNION ALL –V4.4
–Incremental (Convenience + Supermarket) + Transfer to Live
SELECT /*+ PARALLEL */ –V4.4
papf.person_id
, paaf.assignment_id
, papf.employee_number
, papf.national_identifier ni_number
, papf.title
, papf.first_name
, papf.last_name
, TO_CHAR(papf.date_of_birth, ‘DD-MON-YYYY’) date_of_birth –V5.5
, MONTHS_BETWEEN(g_effective_date, papf.date_of_birth)/12 age –V4.2
, ppg.segment4 payroll_number
, haou.name organization
, hla.location_code location
, pj.name job
, pg.name grade
, paaf.normal_hours
, DECODE (paaf.ass_attribute18, ‘Y’, ‘Yes’, ‘N’, ‘No’, NULL) trade_union_shop_steward
, ppos.date_start date_start
, ROUND (MONTHS_BETWEEN (g_effective_date, ppos.adjusted_svc_date) / 12, 2) length_of_service
, pa.address_line1 addr_line_1
, pa.address_line2 addr_line_2
, pa.address_line3 addr_line_3
, pa.town_or_city city
, pa.region_1 county
, pa.postal_code postal_code
, pa.country country
, pa.date_from address_date_from
, pph.phone_number home_phone_number
, pph.date_from home_phone_date_from
, ppm.phone_number mobile_phone_number
, ppm.date_from mobile_phone_date_from
, ppw.phone_number work_phone_number
, ppw.date_from work_phone_date_from
, papf.email_address email_address
, SUBSTR (haou.name, 2, 4) store_number
, ‘TRUE’ workforce_timekeeper_license
, UPPER (SUBSTR (papf.middle_names, 1, 1)) middle_initial
, past.user_status employment_status
, paaf.effective_start_date empl_status_effective_date
, ‘TRUE’ biometric_employee_flag
, flv.attribute1 channel
, flv.attribute5 zone
, flv.attribute6 region
, flv.attribute7 area
, FLV.ATTRIBUTE8 STORE_CODE
, DECODE(FLV.ATTRIBUTE9,’Retail’,DEPT_MAP.DEPT_DISPLAY,’Convenience’,’Store’,
‘Small Retail’,NVL(FLVD.ATTRIBUTE2,DEPT_MAP.DEPT_DISPLAY)) department –V4.1 and V4.8
, SUBSTR (pj.name, 1,5) job_code
, flv.attribute1
|| ‘/’
|| flv.attribute5
|| ‘/’
|| flv.attribute6
|| ‘/’
|| flv.attribute7
|| ‘/’
|| flv.attribute8
|| ‘/’
|| DECODE (flv.attribute9, ‘Convenience’, ‘Store’, ‘Small Retail’,NVL(FLVD.ATTRIBUTE2,DEPT_MAP.DEPT_DISPLAY),’Retail’,DEPT_MAP.DEPT_DISPLAY) –V4.1 and V4.8
|| ‘/’
|| SUBSTR (pj.name, 2, 4) primary_labour_account
, paaf.effective_start_date pri_lab_account_effective_date
, flv.attribute11 device_group
, DECODE( NVL(paaf.ass_attribute6, ‘NA’), ‘NA’, NULL , SUBSTR(haou.name,2,4)||paaf.ass_attribute6) BADGE_NUMBER
, DECODE( NVL(paaf.ass_attribute6, ‘NA’), ‘NA’, NULL, TO_CHAR(paaf.effective_start_date, ‘DD-MON-YYYY’)|| ‘ 00:00’) badge_number_effective_date
, ‘Punch Capture’ pay_rule
, flv.attribute2 live_date
–, paaf.effective_start_date role_hire_date
, ppos.date_start role_hire_date –V3.8
, ‘TRUE’ clock_indicator
, flv.attribute9 store_type
, ‘INCREMENTAL’ type
, NULL attribute1
, TO_CHAR(’01-JAN-3000′) employment_expiration_date
, DECODE( NVL(paaf.ass_attribute6, ‘NA’), ‘NA’, NULL, TO_CHAR(’01-JAN-3000 00:00′)) badge_expiration_date
, TO_CHAR(’01-JAN-3000′) labour_account_expiration_date
–, TO_CHAR((SYSDATE),’DD-MON-YYYY’) pay_rule_effective_date –V4.2
, TO_CHAR( paaf.effective_start_date,’DD-MON-YY’) pay_rule_effective_date –V4.2
, flv.lookup_code || ‘-‘ || UPPER(flv.meaning) job_acc_segment7 –V2.3
, SUBSTR(pj.name,INSTR(pj.name,’|’)+1,INSTR(SUBSTR(pj.name,INSTR(pj.name,’|’)+1),’|’,-1)-1) job_name –V2.3
, TO_CHAR(’01-JAN-3000′) pri_job_account_exp_date –V2.3
, ‘Sample’
|| ‘/’
|| ‘Retail’
|| ‘/’
|| flv.attribute5
|| ‘/’
|| flv.attribute6
|| ‘/’
|| flv.attribute7
|| ‘/’
|| flv.attribute1
|| ‘/’
|| flv.attribute13
|| ‘/’
–|| DECODE(flv.attribute9, ‘Retail’, flvd.description, ‘Small Retail’, flvd.tag, ‘Convenience’, ‘Store’) –V4.1
||DECODE(FLV.ATTRIBUTE9, ‘Retail’,DEPT_MAP.DEPT_DISPLAY,’Convenience’, ‘Store’,
‘Small Retail’,NVL(FLVD.ATTRIBUTE2,DEPT_MAP.DEPT_DISPLAY)) –V4.1 and V4.8
|| ‘/’
|| SUBSTR (pj.name,INSTR (pj.name, ‘|’) + 1,INSTR (SUBSTR (pj.name, INSTR (pj.name, ‘|’) + 1), ‘|’, -1) – 1) primary_job_account
, TO_CHAR ((paaf.effective_start_date), ‘DD-MON-YYYY’) pri_job_account_effective_date
, flvw.meaning worker_type
, xra.rtw_type right_to_work_type –V4.2
, flv.attribute14 curr_store_cps_config –V4.2
, flv.attribute15 old_store_cps_config –V4.2
, ‘INCREMENTAL’ cur_query
, ‘7’ rec_priority –V4.4
FROM per_all_people_f papf
, per_all_assignments_f paaf
, per_assignment_status_types past
, per_periods_of_service ppos
, pay_people_groups ppg
, hr_all_organization_units haou
, hr_locations_all hla
, per_jobs pj
, per_grades pg
, per_addresses pa
, per_phones ppm
, per_phones pph
, per_phones ppw
, fnd_lookup_values flv
, fnd_lookup_values flvd
, fnd_lookup_values flvw
,(SELECT ffvt.flex_value_meaning dept_code
, ffvt.description dept_display
FROM fnd_flex_value_sets ffvs
, fnd_flex_values ffv
, fnd_flex_values_tl ffvt
WHERE ffv.flex_value_set_id = ffvs.flex_value_set_id
AND ffv.flex_value_id = ffvt.flex_value_id
AND ffvs.flex_value_set_name = ‘ABC_RETAIL_DEPT’
) dept_map –V4.1
, xxaa_rtw_audit xra –V4.2
WHERE 1=1
AND papf.person_id = paaf.person_id
AND paaf.person_id = NVL(p_person_id, paaf.person_id)
AND papf.current_employee_flag = ‘Y’
AND paaf.assignment_type = ‘E’
AND paaf.primary_flag = ‘Y’
AND paaf.ass_attribute30 IN (‘A’,’P’) –V3.6
AND g_effective_date between papf.effective_start_date and papf.effective_end_date
AND g_effective_date BETWEEN paaf.effective_start_date AND paaf.effective_end_date
AND past.assignment_status_type_id = paaf.assignment_status_type_id
AND papf.person_id = ppos.person_id
AND ppos.date_start = (SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = papf.person_id
AND g_effective_date BETWEEN ppos1.date_start
AND NVL(ppos1.actual_termination_date
, TO_DATE(’31-Dec-4712′))
)
AND ppg.segment3 IN (‘Retail 4 Weekly’,’Retail Salaried’)
AND paaf.people_group_id = ppg.people_group_id
AND paaf.organization_id = haou.organization_id
AND paaf.location_id = hla.location_id
AND paaf.job_id = pj.job_id
AND paaf.grade_id = pg.grade_id
AND papf.person_id = pa.person_id
AND pa.primary_flag = ‘Y’
AND g_effective_date between pa.date_from and NVL(pa.date_to, to_date(’31-Dec-4712′))
–V1.7 Start
AND ppm.phone_type(+) = ‘M’
AND ppm.parent_table(+) = ‘PER_ALL_PEOPLE_F’
AND ppm.parent_id(+) = papf.person_id
AND pph.phone_type(+) = ‘H1’
AND pph.parent_table(+) = ‘PER_ALL_PEOPLE_F’
AND pph.parent_id(+) = papf.person_id
AND ppw.phone_type(+) = ‘W1’
AND ppw.parent_table(+) = ‘PER_ALL_PEOPLE_F’
AND ppw.parent_id(+) = papf.person_id
AND ( TRUNC(g_effective_date) BETWEEN NVL(pph.date_from, g_effective_date) AND NVL(pph.date_to, TO_DATE(’31-Dec-4712′)) –V1.7
–V2.2 Start
OR ( NVL (pph.date_to, TO_DATE (’31-Dec-4712′)) < g_effective_date
AND NOT EXISTS ( SELECT ‘Y’
FROM per_phones
WHERE phone_type = ‘H1’
AND parent_id = papf.person_id
AND NVL(date_from, g_effective_date) < NVL(pph.date_to, TO_DATE (’31-Dec-4712′))
)
)
OR ( NVL (pph.date_from, TO_DATE (’31-Dec-4712′)) > g_effective_date
AND NOT EXISTS ( SELECT ‘Y’
FROM per_phones
WHERE phone_type = ‘H1’
AND parent_id = papf.person_id
AND TRUNC(g_effective_date) BETWEEN date_from AND NVL(date_to, TO_DATE (’31-Dec-4712′))
)
)
)
–V2.2 End
AND ( TRUNC(g_effective_date) BETWEEN NVL(ppm.date_from, g_effective_date) AND NVL(ppm.date_to, TO_DATE(’31-Dec-4712′)) –V1.7
–V2.2 Start
OR ( NVL (ppm.date_to, TO_DATE (’31-Dec-4712′)) < g_effective_date
AND NOT EXISTS ( SELECT ‘Y’
FROM per_phones
WHERE phone_type = ‘M’
AND parent_id = papf.person_id
AND NVL(date_from, g_effective_date) < NVL(ppm.date_to, TO_DATE (’31-Dec-4712′))
)
)
OR ( NVL (ppm.date_from, TO_DATE (’31-Dec-4712′)) > g_effective_date
AND NOT EXISTS ( SELECT ‘Y’
FROM per_phones
WHERE phone_type = ‘M’
AND parent_id = papf.person_id
AND TRUNC(g_effective_date) BETWEEN date_from AND NVL(date_to, TO_DATE (’31-Dec-4712′))
)
)
)
–V2.2 End
–V1.7 End
AND ( TRUNC(g_effective_date) BETWEEN NVL(ppw.date_from, g_effective_date) AND NVL(ppw.date_to, TO_DATE(’31-Dec-4712′)) –V1.7
–V2.2 Start
OR ( NVL (ppw.date_to, TO_DATE (’31-Dec-4712′)) < g_effective_date
AND NOT EXISTS ( SELECT ‘Y’
FROM per_phones
WHERE phone_type = ‘W1’
AND parent_id = papf.person_id
AND NVL(date_from, g_effective_date) < NVL(ppw.date_to, TO_DATE (’31-Dec-4712′))
)
)
OR ( NVL (ppw.date_from, TO_DATE (’31-Dec-4712′)) > g_effective_date
AND NOT EXISTS ( SELECT ‘Y’
FROM per_phones
WHERE phone_type = ‘W1’
AND parent_id = papf.person_id
AND TRUNC(g_effective_date) BETWEEN date_from AND NVL(date_to, TO_DATE (’31-Dec-4712′))
)
)
)
–V2.2 End
AND flv.lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND flv.enabled_flag = ‘Y’
AND flv.lookup_code = SUBSTR(haou.name,2,4)
AND flv.attribute2 IS NOT NULL
AND flv.security_group_id = 0
AND To_date(flv.attribute2,’RRRR/MM/DD HH24:MI:SS’) <= g_effective_date
AND flvd.lookup_type(+) = ‘xxaa_ABC_DEPT_MAPPING’ –V4.1
AND flvd.enabled_flag(+) = ‘Y’
AND flvd.security_group_id(+) = 0
AND flvd.lookup_code(+) = paaf.ass_attribute1
AND flvw.lookup_type = ‘EMP_CAT’
AND flvw.enabled_flag=’Y’
AND flvw.lookup_code = paaf.employment_category
AND dept_map.dept_code (+) = paaf.ass_attribute1 –V4.1
AND xra.person_id(+) = papf.person_id –V4.2
AND NVL(xra.version_number, 1) = NVL((SELECT MAX(version_number) FROM xxaa_rtw_audit WHERE person_id = xra.person_id), 1)
AND flv.lookup_code = NVL(TO_CHAR(p_store_id),flv.lookup_code)
AND EXISTS ( SELECT ‘Y’
FROM xxaa_abc_emp_header_tab xkeiht
WHERE 1=1
–AND xkeiht.store_id = SUBSTR(haou.name,2,4)
AND xkeiht.store_id = flv.lookup_code
)
AND ( papf.last_update_date BETWEEN l_last_run_date AND l_curr_run_date
OR paaf.last_update_date BETWEEN l_last_run_date AND l_curr_run_date
OR pph.last_update_date BETWEEN l_last_run_date AND l_curr_run_date
OR ppm.last_update_date BETWEEN l_last_run_date AND l_curr_run_date
OR ppw.last_update_date BETWEEN l_last_run_date AND l_curr_run_date
OR pa.last_update_date BETWEEN l_last_run_date AND l_curr_run_date
OR xra.last_update_date BETWEEN l_last_run_date AND l_curr_run_date –V4.8
OR (flv.last_update_date BETWEEN l_last_run_date AND l_curr_run_date
AND flv.attribute14 <> flv.attribute15)
OR papf.effective_start_date = TRUNC(g_effective_date)
OR paaf.effective_start_date = TRUNC(g_effective_date)
OR pph.date_from = TRUNC(g_effective_date)
OR ppm.date_from = TRUNC(g_effective_date)
OR pa.date_from = TRUNC(g_effective_date)
)
UNION ALL –V4.4
–Termination
SELECT /*+ PARALLEL */ –V4.4
xket.person_id
, xket.assignment_id
, xket.employee_number
, xket.ni_number
, xket.title
, xket.first_name
, xket.last_name
, TO_CHAR(xket.date_of_birth, ‘DD-MON-YYYY’) date_of_birth –V5.5
, xket.age
, xket.payroll_number
, xket.organization
, xket.location
, xket.job
, xket.grade
, xket.normal_hours
, xket.trade_union_shop_steward
, xket.date_start date_start
, TO_NUMBER(xket.length_of_service) length_of_service
, xket.addr_line_1
, xket.addr_line_2
, xket.addr_line_3
, xket.city
, xket.county
, xket.postal_code
, xket.country
, xket.address_date_from
, xket.home_phone_number
, xket.home_phone_date_from
, xket.mobile_phone_number
, xket.mobile_phone_date_from
, xket.work_phone_number
, xket.work_phone_date_from
, xket.email_address
, xket.store_number
, ‘FALSE’ workforce_timekeeper_license–xket.workforce_timekeeper_license –V1.9
, xket.middle_initial
, ‘Terminate Assignment’ employment_status
, ppos.actual_termination_date+1 empl_status_effective_date
, xket.biometric_employee_flag
, xket.channel
, xket.zone
, xket.region
, xket.area
, xket.store
, xket.department
, xket.job_code
, xket.primary_labour_account
, TO_DATE(xket.pri_lab_account_effective_date) pri_lab_account_effective_date
, xket.device_group
, xket.badge_number
–, TO_CHAR(ppos.actual_termination_date, ‘DD-MON-YYYY HH:MM’) badge_number_effective_date–xket.badge_number_effective_date V1.3
, TO_CHAR(xket.badge_number_effective_date) badge_number_effective_date
, xket.pay_rule
, NULL
, TO_DATE(xket.role_hire_date) role_hire_date
, xket.clock_indicator
, xket.store_type
, ‘INCREMENTAL’ type
, ‘TERMINATED’ attribute1
–, TO_CHAR(ppos.actual_termination_date+1, ‘DD-MON-YYYY’) employment_expiration_date
, TO_CHAR(’01-JAN-3000′) employment_expiration_date
, DECODE( NVL(xket.badge_number, ‘NA’), ‘NA’, NULL, TO_CHAR(ppos.actual_termination_date, ‘DD-MON-YYYY’) || ‘ 23:59’)badge_expiration_date
–, TO_CHAR(’01-JAN-3000′) labour_account_expiration_date
, TO_CHAR(ppos.actual_termination_date, ‘DD-MON-YYYY’) || ‘ 23:59’ labour_account_expiration_date –V5.4
, xket.pay_rule_effective_date pay_rule_effective_date
, xket.job_acc_segment7 job_acc_segment7 –V2.3
, xket.job_name job_name –V2.3
, TO_CHAR(ppos.actual_termination_date, ‘DD-MON-YYYY’) || ‘ 23:59’ pri_job_account_exp_date –V2.3
, xket.primary_job_account primary_job_account
, xket.pri_job_account_effective_date pri_job_account_effective_date
, xket.worker_type worker_type
, xket.right_to_work_type right_to_work_type –V4.2
, xket.curr_store_cps_config curr_store_cps_config –V4.2
, xket.old_store_cps_config old_store_cps_config –V4.2
, ‘TERMINATION’ cur_query
, ‘1’ rec_priority –V4.4
FROM per_periods_of_service ppos
, xxaa_abc_emp_tab xket
WHERE 1=1 –ppos.person_id = 6463366
AND NVL(ppos.actual_termination_date, TO_DATE(’01-Jan-1951′)) <= g_effective_date
–V2.0 Start
–AND ppos.last_update_date BETWEEN l_last_run_date AND l_curr_run_date
AND (( ppos.last_update_date BETWEEN l_last_run_date AND l_curr_run_date)
OR (ppos.actual_termination_date = TRUNC(g_effective_date))
)
–V2.0 End
AND xket.person_id = ppos.person_id
AND ppos.person_id = NVL(p_person_id, ppos.person_id)
AND ppos.actual_termination_date IS NOT NULL –V1.8
AND xket.record_id = ( SELECT MAX(record_id)
FROM xxaa_abc_emp_tab
WHERE person_id = ppos.person_id
)
UNION ALL –V4.4
–Transfer to Non-Live
SELECT /*+ PARALLEL */ –V4.4
xket.person_id
, xket.assignment_id
, xket.employee_number
, xket.ni_number
, xket.title
, xket.first_name
, xket.last_name
, TO_CHAR(xket.date_of_birth, ‘DD-MON-YYYY’) –V5.5
, xket.age
, xket.payroll_number
, xket.organization
, xket.location
, xket.job
, xket.grade
, xket.normal_hours
, xket.trade_union_shop_steward
, xket.date_start
, TO_NUMBER(xket.length_of_service) length_of_service
, xket.addr_line_1
, xket.addr_line_2
, xket.addr_line_3
, xket.city
, xket.county
, xket.postal_code
, xket.country
, xket.address_date_from
, xket.home_phone_number
, xket.home_phone_date_from
, xket.mobile_phone_number
, xket.mobile_phone_date_from
, xket.work_phone_number
, xket.work_phone_date_from
, xket.email_address
, xket.store_number
, ‘FALSE’ workforce_timekeeper_license –xket.workforce_timekeeper_license–V1.9
, xket.middle_initial
, ‘Terminate Assignment’
–, paaf.effective_start_date–V1.3
, TO_DATE(DECODE(NVL(paaf.ass_attribute6, ‘NA’), ‘NA’, paaf.effective_start_date, ppos.date_start)) empl_status_effective_date
, xket.biometric_employee_flag
, xket.channel
, xket.zone
, xket.region
, xket.area
, xket.store
, xket.department
, xket.job_code
, xket.primary_labour_account
, TO_DATE(DECODE( NVL(paaf.ass_attribute6, ‘NA’), ‘NA’, xket.pri_lab_account_effective_date, paaf.effective_start_date)) pri_lab_account_effective_date
, xket.device_group
–, DECODE( NVL(paaf.ass_attribute6, ‘NA’), ‘NA’, xket.badge_number, SUBSTR(haou.NAME,2,4)||paaf.ass_attribute6) badge_number –V2.0
, xket.badge_number badge_number –V2.0
, DECODE( NVL(paaf.ass_attribute6, ‘NA’), ‘NA’, TO_CHAR(xket.badge_number_effective_date),
TO_CHAR(paaf.effective_start_date, ‘DD-MON-YYYY’)|| ‘ 00:00’) badge_number_effective_date
, xket.pay_rule
, NULL live_date
, TO_DATE(xket.role_hire_date) role_hire_date
, xket.clock_indicator
, xket.store_type
, ‘INCREMENTAL’ type
, ‘TRANSFERRED’ attribute1
, TO_CHAR(’01-JAN-3000′) employment_expiration_date
, DECODE( NVL(paaf.ass_attribute6, ‘NA’), ‘NA’, TO_CHAR(paaf.effective_start_date-1, ‘DD-MON-YYYY’)||’ 23:59′) badge_expiration_date
, TO_CHAR(’01-JAN-3000′) labour_account_expiration_date
, xket.pay_rule_effective_date pay_rule_effective_date
, xket.job_acc_segment7 job_acc_segment7 –V2.3
, xket.job_name job_name –V2.3
, DECODE( NVL(paaf.ass_attribute6, ‘NA’), ‘NA’, TO_CHAR(paaf.effective_start_date-1, ‘DD-MON-YYYY’)||’ 23:59′, TO_CHAR(’01-JAN-3000′)) pri_job_account_exp_date
, xket.primary_job_account primary_job_account
, xket.pri_job_account_effective_date pri_job_account_effective_date
, xket.worker_type worker_type
, xket.right_to_work_type right_to_work_type –V4.2
, xket.curr_store_cps_config curr_store_cps_config –V4.2
, xket.old_store_cps_config old_store_cps_config –V4.2
, ‘TRANSFER_TO_NON_LIVE’ cur_query
, ‘2’ rec_priority –V4.4
FROM per_all_people_f papf
, per_all_assignments_f paaf
, per_periods_of_service ppos
, hr_all_organization_units haou
, xxaa_abc_emp_tab xket
WHERE 1 = 1
AND papf.person_id = paaf.person_id
AND papf.person_id = ppos.person_id
AND paaf.organization_id = haou.organization_id
AND paaf.person_id = xket.person_id
AND ( paaf.location_id NOT IN ( SELECT attribute3
FROM fnd_lookup_values flv
WHERE lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND attribute2 IS NOT NULL
)
)
AND papf.current_employee_flag = ‘Y’
AND paaf.assignment_type = ‘E’
AND paaf.ass_attribute30 IN (‘A’,’P’) –V4.4
AND paaf.primary_flag = ‘Y’
AND paaf.effective_start_date <= g_effective_date –V2.0
AND papf.effective_start_date <= g_effective_date –V2.0
AND xket.attribute1 IS NULL — ‘TRANSFERRED’
AND xket.record_id = ( SELECT MAX(record_id)
FROM xxaa_abc_emp_tab
WHERE person_id = paaf.person_id
)
AND paaf.person_id = NVL(p_person_id, paaf.person_id)
AND ppos.date_start = ( SELECT ppos1.date_start
FROM per_periods_of_service ppos1
WHERE ppos1.person_id = papf.person_id
AND g_effective_date BETWEEN ppos1.date_start AND NVL ( ppos1.actual_termination_date,TO_DATE (’31-Dec-4712′))
)
AND g_effective_date BETWEEN papf.effective_start_date AND papf.effective_end_date
AND g_effective_date BETWEEN paaf.effective_start_date AND paaf.effective_end_date
AND SUBSTR(haou.name, 2, 4) = NVL (TO_CHAR (p_store_id), SUBSTR(haou.name, 2, 4))
AND ( papf.last_update_date BETWEEN l_last_run_date AND l_curr_run_date
OR paaf.last_update_date BETWEEN l_last_run_date AND l_curr_run_date
OR paaf.effective_start_date = TRUNC(g_effective_date)
–V2.0 End
)
UNION ALL –V4.4
–Age_18
SELECT /*+ PARALLEL */ –V4.4
xket.person_id
, xket.assignment_id
, xket.employee_number
, xket.ni_number
, xket.title
, xket.first_name
, xket.last_name
, TO_CHAR(xket.date_of_birth, ‘DD-MON-YYYY’) –V5.5
, MONTHS_BETWEEN(g_effective_date, papf.date_of_birth)/12 age –V4.2
, xket.payroll_number
, xket.organization
, xket.location
, xket.job
, xket.grade
, xket.normal_hours
, xket.trade_union_shop_steward
, xket.date_start
, TO_NUMBER(xket.length_of_service) length_of_service
, xket.addr_line_1
, xket.addr_line_2
, xket.addr_line_3
, xket.city
, xket.county
, xket.postal_code
, xket.country
, xket.address_date_from
, xket.home_phone_number
, xket.home_phone_date_from
, xket.mobile_phone_number
, xket.mobile_phone_date_from
, xket.work_phone_number
, xket.work_phone_date_from
, xket.email_address
, xket.store_number
, xket.workforce_timekeeper_license–V1.9
, xket.middle_initial
, xket.employment_status
, TO_DATE(xket.empl_status_effective_date) empl_status_effective_date
, xket.biometric_employee_flag
, xket.channel
, xket.zone
, xket.region
, xket.area
, xket.store
, xket.department
, xket.job_code
, xket.primary_labour_account
, TO_DATE(xket.pri_lab_account_effective_date)
, xket.device_group
, xket.badge_number
, xket.badge_number_effective_date
, xket.pay_rule
, NULL live_date
, TO_DATE(xket.role_hire_date) role_hire_date
, xket.clock_indicator
, xket.store_type
, ‘INCREMENTAL’ type
, NULL attribute1
, TO_CHAR(’01-JAN-3000′) employment_expiration_date
, xket.badge_expiration_date
, TO_CHAR(’01-JAN-3000′) labour_account_expiration_date
, xket.pay_rule_effective_date pay_rule_effective_date
, xket.job_acc_segment7 job_acc_segment7 –V2.3
, xket.job_name job_name –V2.3
, xket.pri_job_account_exp_date
, xket.primary_job_account
, xket.pri_job_account_effective_date
, xket.worker_type
, xket.right_to_work_type
, xket.curr_store_cps_config
, xket.old_store_cps_config
, ‘AGE_18’ cur_query
, ‘6’ rec_priority –V4.4
FROM per_all_people_f papf
, xxaa_abc_emp_tab xket
WHERE 1 = 1
AND papf.current_employee_flag = ‘Y’
AND papf.person_id = NVL(p_person_id, papf.person_id)
AND MONTHS_BETWEEN(g_effective_date, papf.date_of_birth)/12 = 18
AND g_effective_date BETWEEN papf.effective_start_date AND papf.effective_end_date
AND papf.last_update_date NOT BETWEEN l_last_run_date AND l_curr_run_date
AND xket.attribute1 IS NULL
AND xket.record_id = ( SELECT MAX(record_id)
FROM xxaa_abc_emp_tab
WHERE person_id = papf.person_id)
UNION ALL –V4.4
–Initial Future for a store which went live earlier (New hire with future date)
SELECT /*+ PARALLEL */ –V4.4
papf.person_id
, paaf.assignment_id
, papf.employee_number
, papf.national_identifier ni_number
, papf.title
, papf.first_name
, papf.last_name
, TO_CHAR(papf.date_of_birth, ‘DD-MON-YYYY’) date_of_birth –V5.5
, MONTHS_BETWEEN(g_effective_date, papf.date_of_birth)/12 age –V4.2
, ppg.segment4 payroll_number
, haou.name organization
, hla.location_code location
, pj.name job
, pg.name grade
, paaf.normal_hours
, DECODE (paaf.ass_attribute18, ‘Y’, ‘Yes’, ‘N’, ‘No’, NULL) trade_union_shop_steward
, ppos.date_start date_start
, ROUND (MONTHS_BETWEEN (g_effective_date, ppos.adjusted_svc_date) / 12, 2) length_of_service
, pa.address_line1 addr_line_1
, pa.address_line2 addr_line_2
, pa.address_line3 addr_line_3
, pa.town_or_city city
, pa.region_1 county
, pa.postal_code postal_code
, pa.country country
, pa.date_from address_date_from
, pph.phone_number home_phone_number
, pph.date_from home_phone_date_from
, ppm.phone_number mobile_phone_number
, ppm.date_from mobile_phone_date_from
, ppw.phone_number work_phone_number
, ppw.date_from work_phone_date_from
, papf.email_address email_address
, SUBSTR (haou.name, 2, 4) store_number
, ‘TRUE’ workforce_timekeeper_license
, UPPER (SUBSTR (papf.middle_names, 1, 1)) middle_initial
, past.user_status employment_status
, paaf.effective_start_date empl_status_effective_date
, ‘TRUE’ biometric_employee_flag
, flv.attribute1 channel
, flv.attribute5 zone
, flv.attribute6 region
, flv.attribute7 area
, FLV.ATTRIBUTE8 STORE_CODE
, DECODE(FLV.ATTRIBUTE9,’Retail’,DEPT_MAP.DEPT_DISPLAY,’Convenience’,’Store’,
‘Small Retail’,NVL(FLVD.ATTRIBUTE2,DEPT_MAP.DEPT_DISPLAY)) department –V4.1 and V4.8
, SUBSTR (pj.name, 1,5) job_code
, flv.attribute1
|| ‘/’
|| flv.attribute5
|| ‘/’
|| flv.attribute6
|| ‘/’
|| flv.attribute7
|| ‘/’
|| flv.attribute8
|| ‘/’
|| DECODE (flv.attribute9, ‘Convenience’, ‘Store’, ‘Small Retail’,NVL(FLVD.ATTRIBUTE2,DEPT_MAP.DEPT_DISPLAY),’Retail’,DEPT_MAP.DEPT_DISPLAY) –V4.1 and V4.8
|| ‘/’
|| SUBSTR (pj.name, 2, 4) primary_labour_account
, paaf.effective_start_date pri_lab_account_effective_date
, flv.attribute11 device_group
, DECODE( NVL(paaf.ass_attribute6, ‘NA’), ‘NA’, NULL , SUBSTR(haou.name,2,4)||paaf.ass_attribute6) BADGE_NUMBER
, DECODE( NVL(paaf.ass_attribute6, ‘NA’), ‘NA’, NULL, TO_CHAR(paaf.effective_start_date, ‘DD-MON-YYYY’)|| ‘ 00:00’) badge_number_effective_date
, ‘Punch Capture’ pay_rule
, flv.attribute2 live_date
–, paaf.effective_start_date role_hire_date
, ppos.date_start role_hire_date –V3.8
, ‘TRUE’ clock_indicator
, flv.attribute9 store_type
, ‘INCREMENTAL’ type
, NULL attribute1
, TO_CHAR(’01-JAN-3000′) employment_expiration_date
, DECODE( NVL(paaf.ass_attribute6, ‘NA’), ‘NA’, NULL, TO_CHAR(’01-JAN-3000 00:00′)) badge_expiration_date
, TO_CHAR(’01-JAN-3000′) labour_account_expiration_date
–, TO_CHAR((SYSDATE),’DD-MON-YYYY’) pay_rule_effective_date –V4.2
, TO_CHAR( paaf.effective_start_date,’DD-MON-YY’) pay_rule_effective_date –V4.2
, flv.lookup_code || ‘-‘ || UPPER(flv.meaning) job_acc_segment7 –V2.3
, SUBSTR(pj.name,INSTR(pj.name,’|’)+1,INSTR(SUBSTR(pj.name,INSTR(pj.name,’|’)+1),’|’,-1)-1) job_name –V2.3
, TO_CHAR(’01-JAN-3000′) pri_job_account_exp_date –V2.3
, ‘Sample’
|| ‘/’
|| ‘Retail’
|| ‘/’
|| flv.attribute5
|| ‘/’
|| flv.attribute6
|| ‘/’
|| flv.attribute7
|| ‘/’
|| flv.attribute1
|| ‘/’
|| flv.attribute13
|| ‘/’
–|| DECODE(flv.attribute9, ‘Retail’, flvd.description, ‘Small Retail’, flvd.tag, ‘Convenience’, ‘Store’) –V4.1
||DECODE(FLV.ATTRIBUTE9, ‘Retail’,DEPT_MAP.DEPT_DISPLAY,’Convenience’, ‘Store’,
‘Small Retail’,NVL(FLVD.ATTRIBUTE2,DEPT_MAP.DEPT_DISPLAY)) –V4.1 and V4.8
|| ‘/’
|| SUBSTR (pj.name,INSTR (pj.name, ‘|’) + 1,INSTR (SUBSTR (pj.name, INSTR (pj.name, ‘|’) + 1), ‘|’, -1) – 1) primary_job_account
, TO_CHAR ((paaf.effective_start_date), ‘DD-MON-YYYY’) pri_job_account_effective_date
, flvw.meaning worker_type
, xra.rtw_type right_to_work_type –V4.2
, flv.attribute14 curr_store_cps_config –V4.2
, flv.attribute15 old_store_cps_config –V4.2
, ‘FUTURE_HIRE’ cur_query
, ‘4’ rec_priority –V4.4
FROM per_all_people_f papf
, per_all_assignments_f paaf
, per_assignment_status_types past
, per_periods_of_service ppos
, pay_people_groups ppg
, hr_all_organization_units haou
, hr_locations_all hla
, per_jobs pj
, per_grades pg
, per_addresses pa
, per_phones ppm
, per_phones pph
, per_phones ppw
, fnd_lookup_values flv
, fnd_lookup_values flvd
, fnd_lookup_values flvw
,(SELECT ffvt.flex_value_meaning dept_code
, ffvt.description dept_display
FROM fnd_flex_value_sets ffvs
, fnd_flex_values ffv
, fnd_flex_values_tl ffvt
WHERE ffv.flex_value_set_id = ffvs.flex_value_set_id
AND ffv.flex_value_id = ffvt.flex_value_id
AND ffvs.flex_value_set_name = ‘ABC_RETAIL_DEPT’
) dept_map –V4.1
, xxaa_rtw_audit xra –V4.2
WHERE 1=1
AND papf.person_id = paaf.person_id
AND paaf.person_id = NVL(p_person_id, paaf.person_id)
AND papf.current_employee_flag = ‘Y’
AND paaf.assignment_type = ‘E’
AND paaf.primary_flag = ‘Y’
AND paaf.ass_attribute30 IN (‘A’,’P’) –V3.6
–AND g_effective_date between papf.effective_start_date and papf.effective_end_date
–AND g_effective_date BETWEEN paaf.effective_start_date AND paaf.effective_end_date
AND past.assignment_status_type_id = paaf.assignment_status_type_id
AND papf.person_id = ppos.person_id
AND ppos.date_start > g_effective_date
AND ppg.segment3 IN (‘Retail 4 Weekly’,’Retail Salaried’)
AND paaf.people_group_id = ppg.people_group_id
AND paaf.organization_id = haou.organization_id
AND paaf.location_id = hla.location_id
AND paaf.job_id = pj.job_id
AND paaf.grade_id = pg.grade_id
AND papf.person_id = pa.person_id
AND pa.primary_flag = ‘Y’
–AND pa.date_from > g_effective_date
AND pa.date_to IS NULL
–V1.7 Start
AND ppm.phone_type(+) = ‘M’
AND ppm.parent_table(+) = ‘PER_ALL_PEOPLE_F’
AND ppm.parent_id(+) = papf.person_id
AND pph.phone_type(+) = ‘H1’
AND pph.parent_table(+) = ‘PER_ALL_PEOPLE_F’
AND pph.parent_id(+) = papf.person_id
AND ppw.phone_type(+) = ‘W1’
AND ppw.parent_table(+) = ‘PER_ALL_PEOPLE_F’
AND ppw.parent_id(+) = papf.person_id
AND flv.lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND flv.enabled_flag = ‘Y’
AND flv.lookup_code = SUBSTR(haou.name,2,4)
AND flv.attribute2 IS NOT NULL
AND flv.security_group_id = 0
AND To_date(flv.attribute2,’RRRR/MM/DD HH24:MI:SS’) <= g_effective_date
AND flvd.lookup_type(+) = ‘xxaa_ABC_DEPT_MAPPING’ –V4.1
AND flvd.enabled_flag(+) = ‘Y’
AND flvd.security_group_id(+) = 0
AND flvd.lookup_code(+) = paaf.ass_attribute1
AND flvw.lookup_type = ‘EMP_CAT’
AND flvw.enabled_flag=’Y’
AND flvw.lookup_code = paaf.employment_category
AND dept_map.dept_code (+) = paaf.ass_attribute1 –V4.1
AND xra.person_id(+) = papf.person_id –V4.2
AND NVL(xra.version_number, 1) = (SELECT NVL(MAX(version_number), 1) FROM xxaa_rtw_audit WHERE person_id = xra.person_id)
AND flv.lookup_code = NVL(TO_CHAR(p_store_id),flv.lookup_code)
AND EXISTS ( SELECT ‘Y’
FROM xxaa_abc_emp_header_tab xkeiht
WHERE 1=1
–AND xkeiht.store_id = SUBSTR(haou.name,2,4)
AND xkeiht.store_id = flv.lookup_code
)
AND ( papf.last_update_date BETWEEN l_last_run_date AND l_curr_run_date
AND paaf.last_update_date BETWEEN l_last_run_date AND l_curr_run_date
AND papf.effective_start_date > TRUNC(g_effective_date)
AND paaf.effective_start_date > TRUNC(g_effective_date)
);

CURSOR csr_is_colleague_exist(l_assignment_id NUMBER) –V2.1
IS
SELECT ‘Y’
FROM xxaa_abc_emp_tab
WHERE 1 = 1
–AND person_id = l_person_id –V2.1
AND assignment_id = l_assignment_id; –V2.1

CURSOR csr_get_existing_abc_loc(l_person_id NUMBER)
IS
SELECT location
, person_id
, assignment_id
FROM xxaa_abc_emp_tab
WHERE record_id = ( SELECT MAX(record_id)
FROM xxaa_abc_emp_tab
WHERE person_id = l_person_id
);

–V1.6
CURSOR csr_get_eff_date( l_person_id NUMBER
— , l_location VARCHAR2
)
IS
SELECT badge_number
, badge_number_effective_date
, pay_rule_effective_date
, empl_status_effective_date
, employment_status
, pri_lab_account_effective_date
, primary_labour_account
, pri_job_account_effective_date
, primary_job_account
, location
, person_id
, assignment_id
, curr_store_cps_config
FROM xxaa_abc_emp_tab
WHERE record_id = ( SELECT MAX(record_id)
FROM xxaa_abc_emp_tab
WHERE person_id = l_person_id
–AND location = l_location
AND attribute1 IS NULL
);
–V1.6 End

CURSOR csr_get_emp_status( l_person_id NUMBER)
IS
SELECT employment_status
, empl_status_effective_date
FROM xxaa_abc_emp_tab
WHERE record_id = ( SELECT MAX(record_id)
FROM xxaa_abc_emp_tab
WHERE person_id = l_person_id
);

TYPE emp_details_tbl_type IS TABLE OF csr_get_emp_details%ROWTYPE;
l_emp_details_tab emp_details_tbl_type := emp_details_tbl_type();

TYPE recon_emp_tbl_type IS TABLE OF xxaa_abc_emp_data_stg%ROWTYPE;
l_recon_emp_tab recon_emp_tbl_type := recon_emp_tbl_type();
l_recon_emp_live_tab recon_emp_tbl_type := recon_emp_tbl_type();

CURSOR csr_get_existing_rec(l_person_id NUMBER)
IS
SELECT *
FROM xxaa_abc_emp_tab
WHERE record_id = ( SELECT MAX(record_id)
FROM xxaa_abc_emp_tab
WHERE person_id = l_person_id
);

TYPE l_emp_details_live_tab_type IS TABLE OF csr_get_existing_rec%ROWTYPE;
l_emp_details_live_tab l_emp_details_live_tab_type := l_emp_details_live_tab_type();

CURSOR csr_get_new_eff_date(l_assignment_id NUMBER)
IS
SELECT effective_start_date
FROM per_all_assignments_f
WHERE assignment_id = l_assignment_id
AND assignment_type = ‘E’
AND ass_attribute30 IN (‘A’,’P’) –V3.6
AND g_effective_date BETWEEN effective_start_date AND effective_end_date;

CURSOR csr_get_pay_rule_date(l_person_id NUMBER)
IS
SELECT pay_rule_effective_date
FROM xxaa_abc_emp_tab
WHERE 1 = 1
AND record_id = ( SELECT MAX(record_id)
FROM xxaa_abc_emp_tab
WHERE person_id = l_person_id
);

CURSOR csr_get_home_phone( p_person_id NUMBER
, p_date_from DATE
)
IS
SELECT date_to
FROM per_phones
WHERE phone_type = ‘H1’
AND parent_id = p_person_id
AND date_from = p_date_from;

CURSOR csr_get_mobile_phone( p_person_id NUMBER
, p_date_from DATE
)
IS
SELECT date_to
FROM per_phones
WHERE phone_type = ‘M’
AND parent_id = p_person_id
AND date_from = p_date_from;

CURSOR csr_get_work_phone( p_person_id NUMBER
, p_date_from DATE
)
IS
SELECT date_to
FROM per_phones
WHERE phone_type = ‘W1’
AND parent_id = p_person_id
AND date_from = p_date_from;

BEGIN
g_effective_date := TO_DATE(p_effective_date,’RRRR/MM/DD HH24:MI:SS’);

EXECUTE IMMEDIATE ‘TRUNCATE TABLE xxaadata.xxaa_abc_emp_data_stg’;

l_start_time := xxaa_abc_util_pkg.get_time;
l_run_number := xxaa_abc_emp_tab_run_s.NEXTVAL;
g_run_number := l_run_number; –V4.3

xxaa_abc_util_pkg.write_in_audit
( p_proc_name => l_proc_name
, p_param1 => NVL(g_effective_date,SYSDATE)
, p_param2 => p_store_id
, p_param3 => l_run_number
, x_audit_id => xxaa_abc_util_pkg.g_audit_id
);

xxaa_abc_util_pkg.write_log ( ‘Entering for effective date :’|| g_effective_date|| ‘; p_store_id: ‘|| p_store_id || ‘; p_person_id: ‘|| p_person_id);
xxaa_abc_util_pkg.start_time;
xxaa_abc_util_pkg.write_debug (‘V4.3 1 g_run_number ‘||g_run_number);

IF p_store_id IS NOT NULL
THEN
OPEN csr_get_location_id;
FETCH csr_get_location_id INTO l_location_id;
CLOSE csr_get_location_id;
xxaa_abc_util_pkg.write_log (‘Location_id – ‘||l_location_id);
END IF;

IF p_person_id IS NOT NULL
THEN
g_debug_mode := TRUE;
END IF;

OPEN csr_get_newly_live_stores;
LOOP
FETCH csr_get_newly_live_stores INTO l_live_store_date;

IF csr_get_newly_live_stores%NOTFOUND
THEN
xxaa_abc_util_pkg.write_log (‘No new Live Stores’);
EXIT WHEN csr_get_newly_live_stores%NOTFOUND;
ELSIF p_person_id IS NULL
THEN
xxaa_abc_util_pkg.write_log (‘Submitting Clock Number Program with the date – ‘||l_live_store_date);
l_request_id := fnd_request.submit_request
( application => ‘xxaaDATA’
, program => ‘xxaa_abc_UPD_CONV_CLOCK_NUMBER’
, description => NULL
, start_time => NULL
, sub_request => FALSE
, argument1 => l_live_store_date
, argument2 => p_person_id
, argument3 => p_store_id
);
COMMIT;
xxaa_abc_util_pkg.write_log (‘Request submitted – ‘||l_request_id);

IF l_request_id = 0
THEN
xxaa_abc_util_pkg.write_log (‘Request not submitted’);
p_ret_code := 1;
p_err_buf := ‘Request not submitted’;
ELSE
LOOP
l_req_status := fnd_concurrent.wait_for_request
( l_request_id
, 15
, 0
, l_req_phase
, l_status
, l_req_dev_phase
, l_req_dev_status
, l_req_message
);
EXIT
WHEN UPPER(l_req_phase) = ‘COMPLETED’ OR UPPER (l_status) IN (‘CANCELLED’, ‘ERROR’, ‘TERMINATED’);
END LOOP;
END IF;

xxaa_abc_util_pkg.write_log (‘Clock Number Allocation Program Completion status – ‘||l_status);
xxaa_abc_util_pkg.write_log (‘Clock Number Allocation Program Completion Phase – ‘||l_req_dev_phase);

IF l_status = ‘Normal’
THEN
p_ret_code := 0;
END IF;
END IF;

END LOOP;
CLOSE csr_get_newly_live_stores;

l_curr_run_date := NULL;
l_last_run_date := NULL;

OPEN csr_get_last_run_date;
FETCH csr_get_last_run_date INTO l_last_run_date;
CLOSE csr_get_last_run_date;

xxaa_abc_util_pkg.write_log ( ‘l_last_run_date :’|| TO_CHAR(l_last_run_date, ‘DD-MON-YYYY HH24:MI:SS’));

OPEN csr_get_curr_run_date;
FETCH csr_get_curr_run_date INTO l_curr_run_date;
CLOSE csr_get_curr_run_date;

IF NVL(l_request_id, 0) > 0
THEN
OPEN csr_get_clck_last_run_date;
FETCH csr_get_clck_last_run_date INTO l_curr_run_date;
CLOSE csr_get_clck_last_run_date;
END IF;

xxaa_abc_util_pkg.write_log ( ‘l_curr_run_date :’|| TO_CHAR(l_curr_run_date, ‘DD-MON-YYYY HH24:MI:SS’));

— V4.3 Setting run date globals
g_curr_run_date := l_curr_run_date;
g_last_run_date := l_last_run_date;

OPEN csr_get_emp_details;
LOOP
l_emp_details_tab.DELETE;
l_rec_count := 0;
l_rtc := 0;
l_no := 0;

FETCH csr_get_emp_details BULK COLLECT INTO l_emp_details_tab;– LIMIT g_bulk_limit;

l_rowcount := csr_get_emp_details%ROWCOUNT;
xxaa_abc_util_pkg.write_log(‘Main query count ‘|| l_rowcount);

FOR i IN 1..l_emp_details_tab.COUNT
LOOP
l_recon_emp_tab.EXTEND;
l_rtc := l_rtc + 1;
l_rec_count := l_rec_count + 1;
l_transfer_mode := NULL;
l_abc_location := NULL;

IF l_rec_count > g_chunk_size
THEN
l_thread_id := l_thread_id + 1;
l_rec_count := 1;
END IF;

xxaa_abc_util_pkg.write_log(‘Cursor csr_get_emp_details query ‘|| l_emp_details_tab(i).cur_query);
xxaa_abc_util_pkg.write_log(‘Person_ID ‘|| l_emp_details_tab(i).person_id);

OPEN csr_is_colleague_exist(l_emp_details_tab(i).assignment_id); –V2.1
FETCH csr_is_colleague_exist INTO l_exist;
CLOSE csr_is_colleague_exist;

–V2.0 avoid multiple entries in header table
IF l_emp_details_tab(i).TYPE = ‘INCREMENTAL’
THEN
l_header_flag := ‘N’;
ELSIF l_emp_details_tab(i).TYPE = ‘INITIAL’
THEN
l_header_flag := ‘Y’;
END IF; –V2.0 End

IF NVL(l_exist, ‘N’) = ‘Y’
THEN
l_type := ‘INCREMENTAL’;
ELSE
l_type := ‘INITIAL’;
END IF;

–Cursor to fetch values from staging table
OPEN csr_get_eff_date(l_emp_details_tab(i).person_id);
FETCH csr_get_eff_date INTO l_badge_number, l_badge_eff_date, l_pay_effect_date, l_emp_status_eff_date, l_emp_status
, l_pri_lab_date, l_pri_lab_acnt, l_pri_job_date, l_pri_job_acnt, l_abc_location, l_per_id, l_assignment_id, l_old_cps_config;
CLOSE csr_get_eff_date;

–Incremental records
IF NVL(l_exist, ‘N’) = ‘Y’
THEN
–To verify change in previous value with current value
IF l_emp_status <> l_emp_details_tab(i).employment_status
THEN
l_recon_emp_tab(l_rtc).employment_status := l_emp_details_tab(i).employment_status;
l_recon_emp_tab(l_rtc).empl_status_effective_date := l_emp_details_tab(i).empl_status_effective_date;
ELSE
l_recon_emp_tab(l_rtc).employment_status := l_emp_status;
l_recon_emp_tab(l_rtc).empl_status_effective_date := l_emp_status_eff_date;
END IF;

IF NVL(l_badge_number,’NA’) <> NVL(l_emp_details_tab(i).badge_number,’NA’) –V4.9
THEN
l_recon_emp_tab(l_rtc).badge_number := l_emp_details_tab(i).badge_number;
l_recon_emp_tab(l_rtc).badge_number_effective_date := l_emp_details_tab(i).badge_number_effective_date;
ELSE
l_recon_emp_tab(l_rtc).badge_number := l_badge_number;
l_recon_emp_tab(l_rtc).badge_number_effective_date := l_badge_eff_date;
END IF;

IF l_pri_lab_acnt <> l_emp_details_tab(i).primary_labour_account
THEN
l_recon_emp_tab(l_rtc).primary_labour_account := l_emp_details_tab(i).primary_labour_account;
l_recon_emp_tab(l_rtc).pri_lab_account_effective_date := l_emp_details_tab(i).pri_lab_account_effective_date;
ELSE
l_recon_emp_tab(l_rtc).primary_labour_account := l_pri_lab_acnt;
l_recon_emp_tab(l_rtc).pri_lab_account_effective_date := l_pri_lab_date;
END IF;

IF NVL(l_pri_job_acnt,’X’) <> l_emp_details_tab(i).primary_job_account –V4.5
THEN

l_recon_emp_tab(l_rtc).primary_job_account := l_emp_details_tab(i).primary_job_account;
l_recon_emp_tab(l_rtc).pri_job_account_effective_date := l_emp_details_tab(i).pri_job_account_effective_date;
ELSE

l_recon_emp_tab(l_rtc).primary_job_account := l_pri_job_acnt;
l_recon_emp_tab(l_rtc).pri_job_account_effective_date := l_pri_job_date;
END IF;

l_recon_emp_tab(l_rtc).pay_rule_effective_date := l_pay_effect_date;
l_recon_emp_tab(l_rtc).old_store_cps_config := l_old_cps_config; –V4.2
ELSE –Initial records
l_recon_emp_tab(l_rtc).employment_status := l_emp_details_tab(i).employment_status;
l_recon_emp_tab(l_rtc).empl_status_effective_date := l_emp_details_tab(i).empl_status_effective_date;
l_recon_emp_tab(l_rtc).badge_number := l_emp_details_tab(i).badge_number;
l_recon_emp_tab(l_rtc).badge_number_effective_date := l_emp_details_tab(i).badge_number_effective_date;
l_recon_emp_tab(l_rtc).primary_labour_account := l_emp_details_tab(i).primary_labour_account;
l_recon_emp_tab(l_rtc).pri_lab_account_effective_date := l_emp_details_tab(i).pri_lab_account_effective_date;
l_recon_emp_tab(l_rtc).primary_job_account := l_emp_details_tab(i).primary_job_account;
l_recon_emp_tab(l_rtc).pri_job_account_effective_date := l_emp_details_tab(i).pri_job_account_effective_date;
l_recon_emp_tab(l_rtc).pay_rule_effective_date := l_emp_details_tab(i).pay_rule_effective_date;
l_recon_emp_tab(l_rtc).old_store_cps_config := l_emp_details_tab(i).old_store_cps_config; –V4.2
END IF;
–V1.6 End

xxaa_abc_util_pkg.write_log(‘badge_number ‘|| l_recon_emp_tab(l_rtc).badge_number);
xxaa_abc_util_pkg.write_log(‘badge_number_effective_date ‘|| l_recon_emp_tab(l_rtc).badge_number_effective_date);
xxaa_abc_util_pkg.write_log(‘primary_labour_account ‘|| l_recon_emp_tab(l_rtc).primary_labour_account);
xxaa_abc_util_pkg.write_log(‘pri_lab_account_effective_date ‘|| l_recon_emp_tab(l_rtc).pri_lab_account_effective_date);
xxaa_abc_util_pkg.write_log(‘primary_job_account ‘|| l_recon_emp_tab(l_rtc).primary_job_account);
xxaa_abc_util_pkg.write_log(‘pri_job_account_effective_date ‘|| l_recon_emp_tab(l_rtc).pri_job_account_effective_date);
xxaa_abc_util_pkg.write_log(’employment_status ‘|| l_recon_emp_tab(l_rtc).employment_status);
xxaa_abc_util_pkg.write_log(’empl_status_effective_date ‘|| l_recon_emp_tab(l_rtc).empl_status_effective_date);

l_recon_emp_tab(l_rtc).future_use9 := l_emp_details_tab(i).rec_priority; –V4.4
l_recon_emp_tab(l_rtc).future_use10 := l_emp_details_tab(i).cur_query;
l_recon_emp_tab(l_rtc).person_id := l_emp_details_tab(i).person_id;
l_recon_emp_tab(l_rtc).assignment_id := l_emp_details_tab(i).assignment_id;
l_recon_emp_tab(l_rtc).thread_id := l_thread_id;
l_recon_emp_tab(l_rtc).employee_number := l_emp_details_tab(i).employee_number;
l_recon_emp_tab(l_rtc).ni_number := l_emp_details_tab(i).ni_number;
l_recon_emp_tab(l_rtc).title := l_emp_details_tab(i).title;
l_recon_emp_tab(l_rtc).first_name := l_emp_details_tab(i).first_name;
l_recon_emp_tab(l_rtc).last_name := l_emp_details_tab(i).last_name;
l_recon_emp_tab(l_rtc).date_of_birth := l_emp_details_tab(i).date_of_birth;
l_recon_emp_tab(l_rtc).age := l_emp_details_tab(i).age;
l_recon_emp_tab(l_rtc).payroll_number := l_emp_details_tab(i).payroll_number;
l_recon_emp_tab(l_rtc).organization := l_emp_details_tab(i).organization;
l_recon_emp_tab(l_rtc).location := l_emp_details_tab(i).location;
l_recon_emp_tab(l_rtc).job := l_emp_details_tab(i).job;
l_recon_emp_tab(l_rtc).grade := l_emp_details_tab(i).grade;
l_recon_emp_tab(l_rtc).normal_hours := l_emp_details_tab(i).normal_hours;
l_recon_emp_tab(l_rtc).trade_union_shop_steward := l_emp_details_tab(i).trade_union_shop_steward;
l_recon_emp_tab(l_rtc).date_start := l_emp_details_tab(i).date_start;
l_recon_emp_tab(l_rtc).length_of_service := l_emp_details_tab(i).length_of_service;
l_recon_emp_tab(l_rtc).addr_line_1 := l_emp_details_tab(i).addr_line_1;
l_recon_emp_tab(l_rtc).addr_line_2 := l_emp_details_tab(i).addr_line_2;
l_recon_emp_tab(l_rtc).addr_line_3 := l_emp_details_tab(i).addr_line_3;
l_recon_emp_tab(l_rtc).city := l_emp_details_tab(i).city;
l_recon_emp_tab(l_rtc).county := l_emp_details_tab(i).county;
l_recon_emp_tab(l_rtc).postal_code := l_emp_details_tab(i).postal_code;
l_recon_emp_tab(l_rtc).country := l_emp_details_tab(i).country;
l_recon_emp_tab(l_rtc).address_date_from := l_emp_details_tab(i).address_date_from;

–V2.2 Start

OPEN csr_get_home_phone(l_emp_details_tab(i).person_id, l_emp_details_tab(i).home_phone_date_from);
FETCH csr_get_home_phone INTO l_home_phone_end;
CLOSE csr_get_home_phone;

IF l_emp_details_tab(i).home_phone_date_from > TRUNC(g_effective_date)
THEN
l_recon_emp_tab(l_rtc).home_phone_number := NULL;
l_recon_emp_tab(l_rtc).home_phone_date_from := NULL;
ELSE
IF NVL(l_home_phone_end, TO_DATE(’31-Dec-4712′)) < TRUNC(g_effective_date)
THEN
l_recon_emp_tab(l_rtc).home_phone_number := NULL;
l_recon_emp_tab(l_rtc).home_phone_date_from := NULL;
ELSE
l_recon_emp_tab(l_rtc).home_phone_number := l_emp_details_tab(i).home_phone_number;
l_recon_emp_tab(l_rtc).home_phone_date_from := l_emp_details_tab(i).home_phone_date_from;
END IF;
END IF;

IF l_emp_details_tab(i).rec_priority = 4
THEN
l_recon_emp_tab(l_rtc).home_phone_number := l_emp_details_tab(i).home_phone_number;
l_recon_emp_tab(l_rtc).home_phone_date_from := l_emp_details_tab(i).home_phone_date_from;
END IF;

OPEN csr_get_mobile_phone(l_emp_details_tab(i).person_id, l_emp_details_tab(i).mobile_phone_date_from);
FETCH csr_get_mobile_phone INTO l_mobile_phone_end;
CLOSE csr_get_mobile_phone;

IF l_emp_details_tab(i).mobile_phone_date_from > TRUNC(g_effective_date)
THEN
l_recon_emp_tab(l_rtc).mobile_phone_number := NULL;
l_recon_emp_tab(l_rtc).mobile_phone_date_from := NULL;
ELSE
IF NVL(l_mobile_phone_end, TO_DATE(’31-Dec-4712′)) < TRUNC(g_effective_date)
THEN
l_recon_emp_tab(l_rtc).mobile_phone_number := NULL;
l_recon_emp_tab(l_rtc).mobile_phone_date_from := NULL;
ELSE
l_recon_emp_tab(l_rtc).mobile_phone_number := l_emp_details_tab(i).mobile_phone_number;
l_recon_emp_tab(l_rtc).mobile_phone_date_from := l_emp_details_tab(i).mobile_phone_date_from;
END IF;
END IF;
–V2.2 End

IF l_emp_details_tab(i).rec_priority = 4
THEN
l_recon_emp_tab(l_rtc).mobile_phone_number := l_emp_details_tab(i).home_phone_number;
l_recon_emp_tab(l_rtc).mobile_phone_date_from := l_emp_details_tab(i).home_phone_date_from;
END IF;

–V2.3 Start
OPEN csr_get_work_phone(l_emp_details_tab(i).person_id, l_emp_details_tab(i).work_phone_date_from);
FETCH csr_get_work_phone INTO l_work_phone_end;
CLOSE csr_get_work_phone;

IF l_emp_details_tab(i).work_phone_date_from > TRUNC(g_effective_date)
THEN
l_recon_emp_tab(l_rtc).work_phone_number := NULL;
l_recon_emp_tab(l_rtc).work_phone_date_from := NULL;
ELSE
IF NVL(l_work_phone_end, TO_DATE(’31-Dec-4712′)) < TRUNC(g_effective_date)
THEN
l_recon_emp_tab(l_rtc).work_phone_number := NULL;
l_recon_emp_tab(l_rtc).work_phone_date_from := NULL;
ELSE
l_recon_emp_tab(l_rtc).work_phone_number := l_emp_details_tab(i).work_phone_number;
l_recon_emp_tab(l_rtc).work_phone_date_from := l_emp_details_tab(i).work_phone_date_from;
END IF;
END IF;

IF l_emp_details_tab(i).rec_priority = 4
THEN
l_recon_emp_tab(l_rtc).work_phone_number := l_emp_details_tab(i).home_phone_number;
l_recon_emp_tab(l_rtc).work_phone_date_from := l_emp_details_tab(i).home_phone_date_from;
END IF;

l_recon_emp_tab(l_rtc).worker_type := l_emp_details_tab(i).worker_type;
l_recon_emp_tab(l_rtc).right_to_work_type := l_emp_details_tab(i).right_to_work_type; –V4.2
l_recon_emp_tab(l_rtc).curr_store_cps_config := l_emp_details_tab(i).curr_store_cps_config; –V4.2
–l_recon_emp_tab(l_rtc).old_store_cps_config := l_emp_details_tab(i).old_store_cps_config; –V4.2
l_recon_emp_tab(l_rtc).job_acc_segment7 := l_emp_details_tab(i).job_acc_segment7;
l_recon_emp_tab(l_rtc).job_name := l_emp_details_tab(i).job_name;
–V2.3 End
l_recon_emp_tab(l_rtc).email_address := l_emp_details_tab(i).email_address;
l_recon_emp_tab(l_rtc).store_number := l_emp_details_tab(i).store_number;
l_recon_emp_tab(l_rtc).workforce_timekeeper_license := l_emp_details_tab(i).workforce_timekeeper_license;
l_recon_emp_tab(l_rtc).middle_initial := l_emp_details_tab(i).middle_initial;
l_recon_emp_tab(l_rtc).employment_status := l_emp_details_tab(i).employment_status;
–V1.6 commented below
–l_recon_emp_tab(l_rtc).empl_status_effective_date := l_emp_details_tab(i).empl_status_effective_date;
l_recon_emp_tab(l_rtc).biometric_employee_flag := l_emp_details_tab(i).biometric_employee_flag;
l_recon_emp_tab(l_rtc).channel := l_emp_details_tab(i).channel;
l_recon_emp_tab(l_rtc).zone := l_emp_details_tab(i).zone;
l_recon_emp_tab(l_rtc).region := l_emp_details_tab(i).region;
l_recon_emp_tab(l_rtc).area := l_emp_details_tab(i).area;
l_recon_emp_tab(l_rtc).store := l_emp_details_tab(i).store_code;
l_recon_emp_tab(l_rtc).department := l_emp_details_tab(i).department;
l_recon_emp_tab(l_rtc).job_code := l_emp_details_tab(i).job_code;
–V1.6 Commented below
–l_recon_emp_tab(l_rtc).pri_lab_account_effective_date := l_emp_details_tab(i).pri_lab_account_effective_date;
— l_recon_emp_tab(l_rtc).device_group := l_emp_details_tab(i).device_group;
l_recon_emp_tab(l_rtc).badge_number := l_emp_details_tab(i).badge_number; –V1.2
–V1.6 Commented below
–l_recon_emp_tab(l_rtc).badge_number_effective_date := l_emp_details_tab(i).badge_number_effective_date;
l_recon_emp_tab(l_rtc).pay_rule := l_emp_details_tab(i).pay_rule;
l_recon_emp_tab(l_rtc).live_date := l_emp_details_tab(i).live_date;
l_recon_emp_tab(l_rtc).run_number := l_run_number;
–l_recon_emp_tab(l_rtc).role_hire_date := NVL(l_role_hire_date, l_emp_details_tab(i).role_hire_date);
l_recon_emp_tab(l_rtc).role_hire_date := TO_DATE(l_emp_details_tab(i).role_hire_date, ‘DD-MON-YY’); –V3.8
l_recon_emp_tab(l_rtc).clock_indicator := l_emp_details_tab(i).clock_indicator;
l_recon_emp_tab(l_rtc).store_type := l_emp_details_tab(i).store_type;
l_recon_emp_tab(l_rtc).employment_expiration_date := l_emp_details_tab(i).employment_expiration_date;
–l_recon_emp_tab(l_rtc).badge_expiration_date := l_emp_details_tab(i).badge_expiration_date;

–V3.7
IF TO_DATE(l_emp_details_tab(i).badge_expiration_date, ‘DD/MM/RRRR HH24:MI:SS’) < TO_DATE(l_emp_details_tab(i).badge_number_effective_date, ‘DD/MM/RRRR HH24:MI:SS’)
THEN
l_recon_emp_tab(l_rtc).badge_expiration_date := TO_CHAR(TRUNC(TO_DATE (l_emp_details_tab(i).badge_number_effective_date, ‘DD/MM/RRRR HH24:MI:SS’)),’DD-MON-YYYY’)||’ 23:59′;
l_recon_emp_tab(l_rtc).pri_job_account_exp_date := TO_CHAR(TRUNC(TO_DATE (l_pri_job_date, ‘DD/MM/RRRR HH24:MI:SS’)),’DD-MON-YYYY’)||’ 23:59′;
l_recon_emp_tab(l_rtc).device_group := NULL;
ELSE
l_recon_emp_tab(l_rtc).badge_expiration_date := l_emp_details_tab(i).badge_expiration_date;
l_recon_emp_tab(l_rtc).pri_job_account_exp_date := l_emp_details_tab(i).pri_job_account_exp_date;
l_recon_emp_tab(l_rtc).device_group := l_emp_details_tab(i).device_group;
END IF;

l_recon_emp_tab(l_rtc).labour_account_expiration_date := l_emp_details_tab(i).labour_account_expiration_date;

–V2.1 – Rehire Scenario
IF l_emp_details_tab(i).person_id = l_per_id AND l_emp_details_tab(i).assignment_id <> l_assignment_id
THEN
l_type := ‘INCREMENTAL’;
END IF;
–V2.1 End
xxaa_abc_util_pkg.write_log(‘—————————————————————–‘);

l_recon_emp_tab(l_rtc).attribute1 := l_type;
l_recon_emp_tab(l_rtc).attribute2 := l_emp_details_tab(i).attribute1;
l_recon_emp_tab(l_rtc).attribute3 := l_header_flag;
l_recon_emp_tab(l_rtc).creation_date := SYSDATE;
l_recon_emp_tab(l_rtc).last_updated_date := SYSDATE;
l_recon_emp_tab(l_rtc).request_id := g_request_id;
l_recon_emp_tab(l_rtc).last_run_date := l_last_run_date; — V4.3
l_recon_emp_tab(l_rtc).curr_run_date := l_curr_run_date; — V4.3

–V2.1 Clear local variables
l_exist := ”;
l_abc_location := ”;
l_per_id := ”;
l_assignment_id := ”;
l_badge_eff_date := ”;
l_pay_effect_date := ”;
l_emp_status_eff_date := ”;
l_emp_status := ”;
l_pri_lab_date := ”;
l_pri_lab_acnt := ”;
l_e_status := ”;
l_status_eff_date := ”;
l_pay_rule_date := ”;
l_header_flag := ”;
l_location_id := ”;
l_live_store_date := ”;
l_rowcount := ”;
–l_last_run_date := ”;
–l_curr_run_date := ”;
l_pri_job_acnt := ”;
l_pri_job_date := ”;
l_old_cps_config := ”;
–V2.1 End
END LOOP;

FORALL i IN 1..l_recon_emp_tab.COUNT
INSERT INTO xxaa_abc_emp_data_stg VALUES l_recon_emp_tab(i);
COMMIT;

l_emp_processed := l_rtc + l_no;
l_rtc := 0;
l_recon_emp_tab.DELETE;

EXIT WHEN l_emp_details_tab.COUNT < g_bulk_limit;
END LOOP;
CLOSE csr_get_emp_details;

xxaa_abc_util_pkg.write_log ( ‘Number of records Staged – ‘||l_emp_processed);
xxaa_abc_util_pkg.write_debug (‘V4.3 1.2 g_run_number ‘||g_run_number);

— V4.3 Populate staging table
pop_past_future_change
(p_person_id => p_person_id
,p_store_id => p_store_id
,p_thread_id => l_thread_id
,p_last_run_date => g_last_run_date
,p_curr_run_date => g_curr_run_date
);

invoke_threads(l_thread_id);
xxaa_abc_util_pkg.write_debug (‘V4.3 1.3 g_run_number ‘||g_run_number);
xxaa_abc_util_pkg.stop_time (‘Total for ‘ || l_proc_name, l_start_time);
EXCEPTION
WHEN OTHERS THEN
xxaa_abc_util_pkg.write_exception (‘xxaa_abc_emp_int_pkg.populate_emp_data failed :’ || SQLERRM);
xxaa_abc_util_pkg.write_log ( ‘SQLERRM – ‘||SQLERRM);
ROLLBACK;
END populate_emp_data;

PROCEDURE compare_rows ( p_column_list IN VARCHAR2
, p_old_values IN VARCHAR2
, p_new_values IN VARCHAR2
, p_chg_cols OUT VARCHAR2
)
IS

CURSOR c_chg_columns
IS
SELECT LISTAGG (colname, ‘~’) WITHIN GROUP (ORDER BY sequence) diff_cols
FROM ( SELECT LEVEL sequence,
REGEXP_SUBSTR (p_column_list,
‘[^~]+’,
1,
LEVEL)
colname,
DECODE (
NVL (
REGEXP_SUBSTR (
REPLACE (p_old_values, ‘~’, ‘~ ‘), —V1.5
‘[^~]+’,
1,
LEVEL),
”),
NVL (
REGEXP_SUBSTR (
REPLACE (p_new_values, ‘~’, ‘~ ‘), —V1.5
‘[^~]+’,
1,
LEVEL),
”), ‘MATCH’,
‘MISMATCH’)
compare
FROM DUAL
CONNECT BY LEVEL <= REGEXP_COUNT (p_column_list, ‘[^~]+’)
)
WHERE compare = ‘MISMATCH’;

l_chg_cols c_chg_columns%ROWTYPE;

BEGIN
–xxaa_abc_util_pkg.write_debug (‘Inside Compare_Rows – ‘||p_column_list);

OPEN c_chg_columns;
FETCH c_chg_columns INTO l_chg_cols;
CLOSE c_chg_columns;

–xxaa_abc_util_pkg.write_debug (‘p_chg_cols – Before Replace – ‘||p_chg_cols);
p_chg_cols := REPLACE(l_chg_cols.diff_cols, ‘~’, ‘|’);
–xxaa_abc_util_pkg.write_debug (‘p_chg_cols – After Replace – ‘||p_chg_cols);

–xxaa_abc_util_pkg.write_log (p_chg_cols);
END compare_rows;

— Start of V4.5 —
PROCEDURE pop_curr_old_cps_config(p_record_id IN NUMBER ,p_cur_query IN VARCHAR2, p_curr_store_id IN VARCHAR2,p_prev_store_id IN VARCHAR2,p_old_store_cps_config IN VARCHAR2) IS

CURSOR csr_get_lkp_dtls(p_store_id IN VARCHAR2)
IS
SELECT flv.attribute14
FROM fnd_lookup_values flv
WHERE lookup_type = ‘xxaa_abc_STORE_CONTROL’
AND lookup_code=p_store_id;

l_record_id NUMBER;
l_curr_store_cps_config VARCHAR2(5);
l_old_store_cps_config VARCHAR2(5);

BEGIN

l_record_id:=NULL;
l_curr_store_cps_config:=NULL;
l_old_store_cps_config :=NULL;

l_record_id:=p_record_id;

OPEN csr_get_lkp_dtls(p_curr_store_id);
FETCH csr_get_lkp_dtls into l_curr_store_cps_config;
CLOSE csr_get_lkp_dtls;

IF p_curr_store_id<>p_prev_store_id THEN

OPEN csr_get_lkp_dtls(p_prev_store_id);
FETCH csr_get_lkp_dtls into l_old_store_cps_config;
CLOSE csr_get_lkp_dtls;

ELSE

l_old_store_cps_config:=p_old_store_cps_config;
END IF;

IF p_cur_query IN (‘TERMINATION’,’TRANSFER_TO_NON_LIVE’,’AGE_18′,’FUTURE’)
THEN

UPDATE xxaa_abc_emp_tab
SET curr_store_cps_config=l_curr_store_cps_config,old_store_cps_config=l_old_store_cps_config,chg_col_list=chg_col_list||’|CURR_STORE_CPS_CONFIG’
WHERE record_id = l_record_id;
ELSE
UPDATE xxaa_abc_emp_tab
SET curr_store_cps_config=l_curr_store_cps_config,old_store_cps_config=l_old_store_cps_config
WHERE record_id = l_record_id;
END IF;

xxaa_abc_util_pkg.write_log ( ‘Sucessfully updating staging table with store config values for record : ‘||l_record_id);

EXCEPTION
WHEN OTHERS THEN
xxaa_abc_util_pkg.write_log ( ‘Exception while updating staging table with store config values – ‘||SQLERRM|| ‘ for record ‘|| l_record_id);

END;
— End of V4.5 —

END xxaa_abc_emp_int_pkg;