DBA Data[Home] [Help]

PACKAGE BODY: APPS.HXT_TIM_COL_UTIL

Source


1 PACKAGE BODY HXT_TIM_COL_UTIL AS
2 /* $Header: hxtclut.pkb 120.4.12010000.2 2009/02/24 14:58:25 asrajago ship $ */
3 
4 /*-------------------------------------------------------------------------
5 ||
6 ||                     Private Module Definitions
7 ||
8 -------------------------------------------------------------------------*/
9 
10 /****************************************************
11 get_element_cat()
12 Gets earning category of the given element type.
13 ****************************************************/
14 PROCEDURE get_element_cat(i_element_type_id IN NUMBER,
15                           o_earning_cat OUT NOCOPY VARCHAR2 )
16 IS
17 BEGIN
18    SELECT eltv.hxt_earning_category
19      INTO o_earning_cat
20      FROM hxt_pay_element_types_f_ddf_v eltv
21     WHERE eltv.element_type_id = i_element_type_id;
22 EXCEPTION
23    WHEN no_data_found THEN
24       o_earning_cat := NULL;
25    WHEN OTHERS THEN
26       o_earning_cat := 'ERR';
27 END get_element_cat;
28 
29 
30 /*-------------------------------------------------------------------------
31 ||
32 ||                     Public Module Definitions
33 ||
34 -------------------------------------------------------------------------*/
35 
36 /********************************************************
37  Because customers will have different definitions
38  of what an Employee Number is, get_person_id exists
39  as a user exit.
40  For base system, this call will return
41  a valid person_id, last_name, and first_name from
42  the per_people_f using the input value employee_number
43  passed in as a parameter.
44 *********************************************************/
45 FUNCTION get_person_id(i_employee_number IN VARCHAR2,
46                        i_business_group_id IN NUMBER,
47                        i_date_worked IN DATE,
48                        o_person_id OUT NOCOPY NUMBER,
49                        o_last_name OUT NOCOPY VARCHAR2,
50 		       o_first_name OUT NOCOPY VARCHAR2)RETURN NUMBER IS
51 BEGIN
52   SELECT person_id,
53 	 last_name,
54          first_name
55     INTO o_person_id,
56 	 o_last_name,
57 	 o_first_name
58     FROM per_people_f
59    WHERE employee_number = i_employee_number
60      AND i_date_worked BETWEEN effective_start_date
61                            AND effective_end_date
62      AND business_group_id = i_business_group_id;
63 
64    RETURN 0;
65 
66   EXCEPTION
67     WHEN NO_DATA_FOUND THEN
68        RETURN 1;
69     WHEN OTHERS THEN
70        RETURN 2;
71 
72 END get_person_id;
73 /***********************************************
74   determine_pay_date()
75   Rules to define what day an employee is paid
76   based upon the time punch will vary. We will
77   pass in start_time, end_time, and the person_id
78   as arguments to this function.
79   Phase I merely sets the date worked = to the
80   start time. Future releases will need to determine
81   the date worked based upon the employee's
82   work schedule.
83 ************************************************/
84 FUNCTION determine_pay_date( i_start_time IN DATE,
85 			     i_end_time IN DATE,
86                              i_person_id IN NUMBER,
87                              o_date_worked OUT NOCOPY DATE) RETURN NUMBER IS
88 BEGIN
89   o_date_worked := trunc(i_start_time);
90   RETURN 0;
91 END determine_pay_date;
92 
93 /****************************************************
94 get_earn_pol_id()
95 Get the earning policy for an assignment number or
96 an earning policy name.
97 ****************************************************/
98 FUNCTION get_earn_pol_id(i_assignment_id IN NUMBER DEFAULT NULL,
99                          i_date_worked IN DATE,
100                          i_earn_pol_name IN VARCHAR2 DEFAULT NULL,
101                          o_earn_pol_id OUT NOCOPY earn_pol_id%TYPE) RETURN NUMBER
102 IS
103 
104 BEGIN
105    IF i_earn_pol_name IS NOT NULL THEN
106          /* Earning Policy override from API parameters. */
107          SELECT id
108            INTO o_earn_pol_id
109            FROM hxt_earning_policies
110           WHERE name = i_earn_pol_name
111             AND i_date_worked BETWEEN effective_start_date
112                                   AND effective_end_date;
113   ELSIF i_assignment_id IS NOT NULL THEN
114          /* No Earning Policy override, get EP for current assignment. */
115          SELECT ep.id
116            INTO o_earn_pol_id
117            FROM hxt_earning_policies ep,
118                 hxt_per_aei_ddf_v pafv
119           WHERE pafv.assignment_id = i_assignment_id
120             AND i_date_worked BETWEEN pafv.effective_start_date
121                                   AND pafv.effective_end_date
122             AND pafv.hxt_earning_policy = ep.id
123             AND i_date_worked BETWEEN ep.effective_start_date
124                                   AND ep.effective_end_date;
125    ELSE
126       RETURN 2;
127    END IF;
128    RETURN 0;
129 
130 EXCEPTION
131     WHEN NO_DATA_FOUND THEN
132        RETURN 1;
133     WHEN OTHERS THEN
134        RETURN 2;
135 
136 END get_earn_pol_id;
137 
138 /****************************************************
139 chk_element_link()
140 Check that the assignment is eligible for the element.
141 ****************************************************/
142 --
143 FUNCTION chk_element_link(p_asg_id           IN NUMBER,
144                           p_date_worked      IN DATE,
145                           p_element_type_id  IN NUMBER) RETURN NUMBER
146 IS
147 --
148 l_exists VARCHAR2(1);
149 --
150 BEGIN
151 
152    SELECT MAX('Y') --5574629
153      INTO l_exists
154      FROM pay_element_links_f ell,
155           per_all_assignments_f asm,
156           hxt_pay_element_types_f_ddf_v eltv
157     WHERE asm.assignment_id = p_asg_id
158       AND p_date_worked BETWEEN asm.effective_start_date
159                             AND asm.effective_end_date
160       AND ell.element_type_id = p_element_type_id
161       AND p_date_worked BETWEEN ell.effective_start_date
162                             AND ell.effective_end_date
163 -- Condition modified for Bug 2669059
164 --      AND eltv.element_type_id = p_element_type_id
165 	 AND eltv.element_type_id = ell.element_type_id
166       AND p_date_worked BETWEEN eltv.effective_start_date
167                             AND eltv.effective_end_date
168       AND eltv.hxt_earning_category is not null
169       AND nvl(ell.organization_id,nvl(asm.organization_id,-1)) =
170           nvl(asm.organization_id,-1)
171       AND (ell.people_group_id is null
172            or exists (SELECT 'x'
173                         FROM pay_assignment_link_usages_f usage
174                        WHERE usage.assignment_id = asm.assignment_id
175                          AND usage.element_link_id = ell.element_link_id
176                          AND p_date_worked BETWEEN usage.effective_start_date
177                                                AND usage.effective_end_date))
178       AND nvl(ell.job_id, nvl(asm.job_id,-1)) = nvl(asm.job_id,-1)
179       AND nvl(ell.position_id, nvl(asm.position_id,-1)) = nvl(asm.position_id,-1)
180       AND nvl(ell.grade_id,nvl(asm.grade_id,-1)) = nvl(asm.grade_id,-1)
181       AND nvl(ell.location_id,nvl(asm.location_id,-1)) = nvl(asm.location_id,-1)
182       AND nvl(ell.payroll_id,nvl(asm.payroll_id,-1)) = nvl(asm.payroll_id,-1)
183       AND nvl(ell.employment_category, nvl(asm.employment_category,-1)) =
184           nvl(asm.employment_category,-1)
185       AND nvl(ell.pay_basis_id,nvl(asm.pay_basis_id,-1)) =
186           nvl(asm.pay_basis_id,-1)
187       AND nvl(ell.business_group_id, nvl(asm.business_group_id,-1)) =
188           nvl(asm.business_group_id,-1);
189     RETURN 0;
190 EXCEPTION
191     WHEN NO_DATA_FOUND THEN
192        RETURN 1;
193     WHEN OTHERS THEN
194        RETURN 2;
195 
196 END chk_element_link;
197 
198 /****************************************************
199 get_element_type_id()
200 Get the element type id for an element name.
201 ****************************************************/
202 FUNCTION get_element_type_id(i_element_name IN VARCHAR2,
203  			     i_date_worked IN DATE,
204                              i_bg_id IN NUMBER,
205                              o_element_type_id OUT NOCOPY NUMBER)RETURN NUMBER
206 IS
207 BEGIN
208 /* SQL query modified for Bug 2597231 */
209    SELECT elt.element_type_id
210      INTO o_element_type_id
211      FROM pay_element_types_f elt,
212           pay_element_types_f_tl eltt
213     WHERE eltt.element_name = i_element_name
214       AND eltt.language = userenv('LANG')
215       AND elt.element_type_id = eltt.element_type_id
216       AND (elt.business_group_id = i_bg_id or elt.business_group_id is null)
217       AND ( legislation_code = ( SELECT legislation_code
218                                FROM per_business_groups
219                                WHERE business_group_id = i_bg_id) or
220            legislation_code is NULL )
221       AND i_date_worked BETWEEN elt.effective_start_date
222           AND elt.effective_end_date ;
223     RETURN 0;
224 EXCEPTION
225     WHEN NO_DATA_FOUND THEN
226        RETURN 1;
227     WHEN OTHERS THEN
228        RETURN 2;
229 
230 END get_element_type_id;
231 
232 
233 /****************************************************
234 get_grade_id()
235 Get the grade id for a grade code.
236 ****************************************************/
237 FUNCTION get_grade_id(i_grade_name IN VARCHAR2,
238                       i_business_group_id IN NUMBER,
239                       i_date_worked IN DATE,
240                       o_grade_id OUT NOCOPY NUMBER)RETURN NUMBER
241 IS
242 BEGIN
243   SELECT grade_id
244     INTO o_grade_id
245     FROM per_grades
246    WHERE name =  i_grade_name
247      AND business_group_id + 0 = i_business_group_id
248      AND i_date_worked BETWEEN date_from
249                            AND nvl(date_to,hr_general.end_of_time);
250    RETURN 0;
251 EXCEPTION
252     WHEN NO_DATA_FOUND THEN
253        RETURN 1;
254     WHEN OTHERS THEN
255        RETURN 2;
256 END get_grade_id;
257 
258 /****************************************************
259 get_location_id()
260 Get the location id for a location code.
261 ****************************************************/
262 FUNCTION get_location_id(i_location_code IN VARCHAR2,
263                          i_date_worked IN DATE,
264                          o_location_id OUT NOCOPY NUMBER)RETURN NUMBER
265 IS
266 BEGIN
267 
268    SELECT location_id
269      INTO o_location_id
270      FROM hr_locations
271     WHERE location_code = i_location_code
272       AND COUNTRY = 'US'
273       AND i_date_worked <= NVL(INACTIVE_DATE, i_date_worked);
274 
275     RETURN 0;
276 
277 EXCEPTION
278     WHEN NO_DATA_FOUND THEN
279        RETURN 1;
280     WHEN OTHERS THEN
281        RETURN 2;
282 
283 END get_location_id;
284 
285 
286 /****************************************************
287 get_project_id()
288 Get the project id for a project number.
289 ****************************************************/
290 FUNCTION get_project_id(i_project_number IN VARCHAR2,
291                         i_date_worked IN DATE,
292                         o_project_id OUT NOCOPY project_id%TYPE) RETURN NUMBER
293 IS
294 BEGIN
295 /* PWM 05-APR-00 Added organization id to select clause */
296    SELECT PRJ.PROJECT_ID
297      INTO o_project_id
298      FROM HXT_ALL_PROJECTS_V PRJ
299     WHERE PRJ.PROJECT_NUMBER = i_project_number;
300 
301 /* PWM 05-APR-00 Added organization id to select clause
302 */
303     RETURN 0;
304 
305 EXCEPTION
306     WHEN NO_DATA_FOUND THEN
307        RETURN 1;
308     WHEN OTHERS THEN
309        RETURN 2;
310 
311 END get_project_id;
312 
313 /****************************************************
314 get_task_id()
315 Get the task id for a task number.
316 ****************************************************/
317 FUNCTION get_task_id(i_task_number IN VARCHAR2,
318                      i_date_worked IN DATE,
319                      i_project_id IN NUMBER, /* PWM 05-APR-00 */
320                      o_task_id OUT NOCOPY NUMBER)RETURN NUMBER
321 IS
322 BEGIN
323    SELECT TAS.TASK_ID
324      INTO o_task_id
325      FROM HXT_ALL_TASKS_V TAS
326     WHERE TAS.task_number = i_task_number
327       AND TAS.project_id = i_project_id ;
328 
329     RETURN 0;
330 
331 EXCEPTION
332     WHEN NO_DATA_FOUND THEN
333        RETURN 1;
334     WHEN OTHERS THEN
335        RETURN 2;
336 
337 END get_task_id;
338 
339 
340 /*****************************************************
341 validate_separate_chk_flg()
342 Up-case and validate the separate check flag parameter.
343 *****************************************************/
344 FUNCTION validate_separate_chk_flg
345 		(io_separate_check_flag IN OUT NOCOPY VARCHAR2) RETURN NUMBER IS
346 BEGIN
347    io_separate_check_flag := UPPER(io_separate_check_flag);
348 
349    IF io_separate_check_flag IN ('Y','N') THEN
350       RETURN 0;
351    ELSE
352       RETURN 1;
353    END IF;
354 
355 END validate_separate_chk_flg;
356 
357 
358 /***********************************************************
359 validate_earn_reason_code()
360 Validate the earning reason code parameter of record_time
361 based on the date_worked and the earning_category for the
362 element_type_id for the hours_type parameter of record_time.
363 ************************************************************/
364 FUNCTION validate_earn_reason_code(i_earn_reason_code IN VARCHAR2,
365                                    i_date_worked      IN DATE) RETURN NUMBER
366                                    -- i_element_type_id IN NUMBER)RETURN NUMBER
367 IS
368 
369    -- hxt_earning_category VARCHAR2(30);
370    hold_reason_code VARCHAR2(80);
371 
372 BEGIN
373    -- get_element_cat(i_element_type_id, hxt_earning_category);
374    -- IF hxt_earning_category IS NULL OR
375       -- hxt_earning_category = 'ERR'
376    -- THEN
377       -- RETURN 1;
378    -- ELSE
379       SELECT fcl.meaning
380         INTO hold_reason_code
381         FROM hr_lookups fcl
382        WHERE fcl.lookup_code = i_earn_reason_code
383          AND i_date_worked BETWEEN NVL(fcl.start_date_active, i_date_worked)
384                                AND NVL(fcl.end_date_active, i_date_worked)
385          AND fcl.application_id = g_orcl_hr_app_id_cons
386          AND fcl.enabled_flag = 'Y'
387          AND fcl.lookup_type = 'ELE_ENTRY_REASON';
388 
389       RETURN 0;
390    -- END IF;
391 EXCEPTION
392    WHEN NO_DATA_FOUND THEN
393       RETURN 2;
394    WHEN OTHERS THEN
395       RETURN 3;
396 END validate_earn_reason_code;
397 
398 
399 /***********************************************************
400 validate_time_summary_id()
401 Validate the time summary id parameter of record_time.
402 ************************************************************/
403 FUNCTION validate_time_summary_id( i_time_summary_id IN NUMBER)RETURN NUMBER
404 IS
405 
406    l_dummy CHAR(1);
407 
408 BEGIN
409       SELECT '1'
410         INTO l_dummy
411         FROM hxt_sum_hours_worked
412        WHERE id = i_time_summary_id;
413 
414       RETURN 0;
415 EXCEPTION
416    WHEN NO_DATA_FOUND THEN
417       RETURN 1;
418    WHEN OTHERS THEN
419       RETURN 2;
420 END validate_time_summary_id;
421 
422 
423 /*******************************************************************
424 validate_cost_center_id()
425 This validates the foreign key via the non-table lookup item(s), an
426 selects the foreign key column(s) into the hidden base table item(s)
427 ********************************************************************/
428 FUNCTION validate_cost_center_id(i_cost_center_id IN NUMBER,
429                                  i_date_worked IN DATE )RETURN NUMBER
430 IS
431    hold_cost_center_id NUMBER(15);
432 BEGIN
433  --
434  -- Replace ADT code with TA36 cost allocation code.
435  --
436    SELECT PCAK.COST_ALLOCATION_KEYFLEX_ID
437      INTO hold_cost_center_id
438      FROM PAY_COST_ALLOCATION_KEYFLEX PCAK
439     WHERE PCAK.COST_ALLOCATION_KEYFLEX_ID = i_cost_center_id;
440    RETURN 0;
441 EXCEPTION
442     WHEN NO_DATA_FOUND THEN
443        RETURN 1;
444     WHEN OTHERS THEN
445        RETURN 2;
446 END validate_cost_center_id;
447 
448 
449 /*******************************************************************
450 validate_timecard_source()
451 Validates the timecard source parameter.
452 
453 Bug 2398037.
454 the comparison of meaning with i_timecard_source will fail in
455 non-english instances. Instead, we can use lookup code as the function
456 only checks for the existence of lookup.
457 
458 ********************************************************************/
459 FUNCTION validate_timecard_source(i_timecard_source IN VARCHAR2,
460                     i_date_worked IN DATE,
461                     o_timecard_source_code OUT NOCOPY VARCHAR2 )RETURN NUMBER IS
462 BEGIN
463    SELECT fcl.lookup_code
464      INTO o_timecard_source_code
465      FROM hr_lookups fcl
466 /*    WHERE fcl.meaning = i_timecard_source    bug 2398037 */
467       WHERE fcl.lookup_code = 'S'
468  AND i_date_worked BETWEEN NVL(fcl.start_date_active, i_date_worked)
469                             AND NVL(fcl.end_date_active, i_date_worked)
470       AND fcl.application_id = g_orcl_tm_app_id_cons
471       AND fcl.enabled_flag = 'Y'
472       AND fcl.lookup_type = 'HXT_TIMECARD_SOURCE';
473    RETURN 0;
474 EXCEPTION
475     WHEN NO_DATA_FOUND THEN
476        RETURN 1;
477     WHEN OTHERS THEN
478        RETURN 2;
479 END validate_timecard_source;
480 
481 
482 /*******************************************************************
483 validate_wage_code()
484 Validate the prevailing wage code.
485 ********************************************************************/
486 FUNCTION validate_wage_code(i_wage_code IN VARCHAR2,
487                                  i_date_worked IN DATE )RETURN NUMBER
488 IS
489    hold_wage_code VARCHAR2(10);
490 BEGIN
491    SELECT prev_wage_code
492      INTO hold_wage_code
493      FROM hxt_prev_wage_base pwb
494     WHERE pwb.prev_wage_code = i_wage_code
495       AND i_date_worked BETWEEN pwb.effective_start_date
496                             AND pwb.effective_end_date;
497    RETURN 0;
498 EXCEPTION
499     WHEN NO_DATA_FOUND THEN
500        RETURN 1;
501     WHEN OTHERS THEN
502        RETURN 2;
503 END validate_wage_code;
504 
505 
506 /*******************************************************************
507 get_session_date()
508 Get the current session date from fnd_sessions.
509 ********************************************************************/
510 FUNCTION get_session_date(o_sess_date OUT NOCOPY DATE )RETURN NUMBER
511 IS
512    hold_sess_date DATE;
513 BEGIN
514 
515    -- Bug 7359347
516    -- Check if there exists a cached value before querying on FND_SESSIONS.
517 
518    IF g_session_date.EXISTS(USERENV('SESSIONID'))
519    THEN
520       o_sess_date := g_session_date(USERENV('SESSIONID'));
521    ELSE
522       SELECT effective_date
523         INTO hold_sess_date
524         FROM fnd_sessions
525        WHERE session_id = USERENV('SESSIONID');
526 
527       o_sess_date := hold_sess_date;
528       -- Bug 7359347
529       -- cache the new value for next call.
530       g_session_date(USERENV('SESSIONID')) := hold_sess_date;
531 
532    END IF;
533 
534    RETURN 0;
535 EXCEPTION
536     WHEN NO_DATA_FOUND THEN
537        RETURN 1;
538 END get_session_date;
539 
540 
541 -- Bug 7359347
542 -- Following function picks up the session date from
543 -- the global g_session_date table instead of FND_SESSIONS if it exists.
544 -- It would call get_session_date above if the value doesnt exist.
545 -- Subsequently, the returned value is cached.
546 
547 FUNCTION return_session_date
548 RETURN DATE
549 IS
550 
551 l_retcode   NUMBER;
552 l_sessdate  DATE;
553 
554 BEGIN
555 
556    -- Check if this session already has one.
557    IF g_session_date.EXISTS(USERENV('SESSIONID'))
558    THEN
559       -- It has one, return it.
560       RETURN g_session_date(USERENV('SESSIONID'));
561    ELSE
562       -- Need to pick up one from FND_SESIONS.  Call the above function.
563       l_retcode := get_session_date(l_sessdate);
564    END IF;
565 
566    RETURN l_sessdate;
567 END return_session_date;
568 
569 
570 
571 
572 END HXT_TIM_COL_UTIL;