Validate Task Flow Chart
Validate Task Flow Chart
IS
-- declaring local variables
VALID_VAC NUMBER := 0;
v_date DATE;
CURSOR c1
IS
SELECT PL.PERSON_ID,plans.START_DATE ,plans.END_DATE
FROM swd_hr.swd_emp_work_plans pl , SWD_WORK_PLANS_HR
plans
WHERE PL.PERSON_ID = V_PERSON_ID
and plans.plan_id = pl.plan_id
ORDER BY plans.END_DATE DESC;
BEGIN
-- FUNCTION logic
for i in c1
loop
if trunc(V_VAC_END) between trunc(i.START_DATE) and
trunc(i.END_DATE) then
return 1;
end if;
end loop;
return 0;
EXCEPTION
WHEN OTHERS
THEN
RETURN 0;
END CHECK_PLAN;
/
BEGIN
-- FUNCTION logic
select ATT.OUT_TIME into
V_out_time from SWD_HR.SWD_ATTENDANCE_TRX ATT
where ATT.PERSON_ID=V_PERSON_ID
and ATT.IN_DATE=to_date(v_Task_date);
Exception
when others then
return false;
END check_Task_out;
/
IS
-- declaring local variables
SELECT ATT.IN_TIME
INTO V_in_time
FROM SWD_WORK_PLANS_LINES pl_Lines
INNER JOIN SWD_EMP_WORK_PLANS Emp_PL
ON PL_LINES.PLAN_ID = EMP_PL.PLAN_ID
INNER JOIN SWD_WORK_SHIFTS SH ON PL_LINES.SHIFT_ID =
SH.SHIFT_ID
INNER JOIN SWD_HR.SWD_ATTENDANCE_TRX ATT
ON ATT.PERSON_ID = EMP_PL.PERSON_ID
WHERE 1 = 1
AND ATT.IN_DATE = TRUNC (v_Task_date)
AND ATT.PERSON_ID = V_PERSON_ID
AND TRUNC (v_Task_date) BETWEEN EMP_PL.START_DATE
AND EMP_PL.END_DATE
AND ATT.IN_TIME BETWEEN SH.SHIFT_START AND (SH.SHIFT_STOP -
200); /* if the employee attend his shift and come late unitll before
the shift ends by 2 hours */
IF V_in_time IS NULL
THEN
RETURN FALSE;
ELSE
RETURN TRUE;
END IF;
EXCEPTION
WHEN TOO_MANY_ROWS
THEN
RETURN TRUE;
WHEN OTHERS
THEN
RETURN FALSE;
END Check_valid_SHIFT;
/