How to Delegation required for absence and business trip
Transcription
How to Delegation required for absence and business trip
Delegation should be required for absence and business trip request 1. Add Error Message to Message “Application Developer >> Application >> Message” and add 2 records like the table below: Name XX_DELEGATION_EXIST XX_DELEGATION_EXIST Lang AR US App Human Resources Human Resources Current Message text البد من عمل تفويض قبل القيام بأجازة أو مهمة عمل Delegation (Vacation Rule) should be created first. 2. Submit request “Generate Messages” from application developer Responsibility for both languages (AR, US). 3. Add Function a. To Specs FUNCTION XX_DELEGATION_EXIST(V_person_ID IN NUMBER,V_START_DATE IN DATE,V_END_DATE IN DATE)RETURN VARCHAR2; b. To the body: FUNCTION XX_DELEGATION_EXIST ( v_person_id IN NUMBER, v_start_date IN DATE, v_end_date IN DATE ) RETURN VARCHAR2 AS v_user_name VARCHAR2 (10); v_user_name_exist NUMBER (10); v_count NUMBER; v_supervisor_count NUMBER; BEGIN -- Check if the employee has Username to the system. SELECT COUNT (user_name) INTO v_user_name_exist FROM applsys.fnd_user usr, hr.per_all_people_f ppl WHERE usr.employee_id = v_person_id AND (TRUNC (usr.end_date) >= TRUNC (SYSDATE) OR usr.end_date IS NULL) AND usr.employee_id = ppl.person_id AND TRUNC (SYSDATE) BETWEEN TRUNC (ppl.effective_start_date) AND TRUNC (ppl.effective_end_date) AND SUBSTR (usr.user_name, LENGTH (usr.user_name) - 2, 3) = SUBSTR (ppl.employee_number, LENGTH (ppl.employee_number) - 2, 3); -- Get User_Name IF (v_user_name_exist = 0) THEN RETURN 'Y'; ELSE SELECT user_name INTO v_user_name FROM applsys.fnd_user usr, hr.per_all_people_f ppl WHERE usr.employee_id = v_person_id AND (TRUNC (usr.end_date) >= TRUNC (SYSDATE) OR usr.end_date IS NULL) AND usr.employee_id = ppl.person_id AND TRUNC (SYSDATE) BETWEEN TRUNC (ppl.effective_start_date) AND TRUNC (ppl.effective_end_date); -- ND usr.user_name = ppl.employee_number; -- in case the Developer assigned his user to existing exployee. END IF; -- Check if the employee has subordinates or not SELECT NVL (COUNT (*), 0) INTO v_supervisor_count FROM hr.per_all_assignments_f WHERE supervisor_id = v_person_id AND TRUNC (SYSDATE) BETWEEN TRUNC (effective_start_date) AND TRUNC (effective_end_date); -- check if delegation exist for employee or not IF v_supervisor_count > -1 THEN SELECT NVL (COUNT (*), 0) INTO v_count FROM applsys.wf_routing_rules wfr WHERE --V_START_DATE between wfr.BEGIN_DATE and nvl(wfr.end_date,to_date('01-012417','dd-mm-yyyy')) ( TO_DATE (v_start_date, 'dd-mm-yyyy') = TO_DATE (wfr.begin_date, 'dd-mm-yyyy') OR v_start_date BETWEEN wfr.begin_date AND NVL (wfr.end_date, TO_DATE ('01-01-2417', 'dd-mm-yyyy') ) ) AND wfr.ROLE = v_user_name AND v_end_date <= wfr.end_date; -- check if delegation exist IF v_count >0 THEN RETURN 'Y'; ELSE RETURN 'N'; END IF; ELSE RETURN 'Y'; END IF; EXCEPTION WHEN OTHERS THEN RETURN 'N'; END; 4. Add Validation in (EIT UserHook/ SIT Validation / Absence Userhook,...) -- for absence you will add start, end date instead of the segments SELECT NVL(XX_DELEGATION_EXIST( SUBSTR(:NEW.segment30,15) ,fnd_date.canonical_to_date (:NEW.segment7),fnd_date.canonical_to_date (:NEW.segment8)),0) INTO l_Delegation_Exist FROM dual; IF l_Delegation_Exist = 'N' THEN hr_utility.set_message (800, 'XX_DELEGATION_EXIST'); hr_utility.raise_error; END IF; 5. Test: should give message like this is vacation rule does not exist for the same period (from professional screens or self services)