DBA Data[Home] [Help]

PACKAGE BODY: APPS.PAY_IN_FF_PKG

Source


1 PACKAGE BODY pay_in_ff_pkg AS
2 /* $Header: pyindedn.pkb 120.17 2011/05/18 12:07:56 nchinnam ship $ */
3 
4    g_debug BOOLEAN;
5    g_package     CONSTANT VARCHAR2(100) := 'pay_in_ff_pkg.';
6    p_token_name   pay_in_utils.char_tab_type;
7    p_token_value  pay_in_utils.char_tab_type;
8 
9 --------------------------------------------------------------------------
10 -- Name           : CHECK_RETAINER                                      --
11 -- Type           : Function                                            --
12 -- Access         : Public                                              --
13 -- Description    : Function checks if the employee is excluded or      --
14 --                  or not. Returns 1 if excluded elso 0                --
15 --                                                                      --
16 --                                                                      --
17 -- Parameters     :                                                     --
18 --             IN : p_assignment_id       IN NUMBER                     --
19 --                  p_payroll_action_id   IN VARCHAR2                   --
20 --                  p_effective_date      IN DATE                       --
21 --                                                                      --
22 -- Version    Date     Author   Bug      Description                    --
23 -- =====================================================================--
24 -- 1.0   15-Jun-04   ABHJAIN  3683543  Initial Version                  --
25 -- 1.1   02-Aug-04   VGSRINIV 3807912 Changed the lookup code for       --
26 --                                    Employee Category and increased   --
27 --                                    the size of l_emp_cat to 10       --
28 --------------------------------------------------------------------------
29 FUNCTION check_retainer (p_assignment_id     IN NUMBER
30                         ,p_payroll_action_id IN NUMBER)
31          RETURN NUMBER IS
32   CURSOR c_emp_cat IS
33   SELECT nvl(paa.employee_category,'X')
34     FROM per_all_assignments_f paa,
35          pay_payroll_actions ppa
36    WHERE paa.assignment_id = p_assignment_id
37      AND ppa.payroll_action_id = p_payroll_action_id
38      AND paa.payroll_id = ppa.payroll_id
39      AND ppa.effective_date BETWEEN paa.effective_start_date
40                                 AND paa.effective_end_date;
41 
42   l_emp_cat       VARCHAR2(10);
43   l_procedure     VARCHAR2(100);
44   l_message       VARCHAR2(1000);
45 BEGIN
46   g_debug:= hr_utility.debug_enabled;
47   l_procedure:= g_package ||'check_retainer';
48 
49   pay_in_utils.set_location(g_debug,'Entering : '||l_procedure,10);
50 
51   IF g_debug THEN
52      pay_in_utils.trace('**************************************************','********************');
53      pay_in_utils.trace('p_assignment_id',p_assignment_id);
54      pay_in_utils.trace('p_payroll_action_id',p_payroll_action_id);
55      pay_in_utils.trace('**************************************************','********************');
56  END IF;
57   OPEN c_emp_cat;
58     FETCH c_emp_cat INTO l_emp_cat;
59   CLOSE c_emp_cat;
60 
61   IF g_debug THEN
62     pay_in_utils.trace('l_emp_cat',l_emp_cat);
63   END IF;
64 
65   IF (l_emp_cat = 'IN_RE') THEN
66     pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure,30);
67     RETURN 1;
68   ELSE
69     pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure,40);
70     RETURN 0;
71   END IF;
72 
73 EXCEPTION
74      WHEN OTHERS THEN
75        l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
76        pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 50);
77        hr_utility.trace(l_message);
78        RETURN NULL;
79 END check_retainer;
80 
81 --------------------------------------------------------------------------
82 -- Name           : CHECK_EDLI                                          --
83 -- Type           : Function                                            --
84 -- Access         : Public                                              --
85 -- Description    : Function finds if the EDLI option is Yes or No      --
86 --                  for the employer             .                      --
87 --                                                                      --
88 -- Parameters     :                                                     --
89 --             IN : p_assignment_id       IN NUMBER                     --
90 --                  p_effective_date      IN DATE                       --
91 --                                                                      --
92 --                                                                      --
93 -- Version    Date     Author   Bug      Description                    --
94 -- =====================================================================--
95 -- 115.0   15-Jun-04   ABHJAIN  3683543  Initial Version                --
96 --                                                                      --
97 --------------------------------------------------------------------------
98 FUNCTION check_edli(p_assignment_id  IN NUMBER
99                    ,p_effective_date IN DATE)
100          RETURN VARCHAR2 IS
101   CURSOR c_get_edli IS
102   SELECT hoi.org_information7
103     FROM hr_organization_information hoi,
104          hr_soft_coding_keyflex hsk,
105          per_all_assignments_f paa
106    WHERE hoi.org_information_context = 'PER_IN_PF_DF'
107      AND hoi.organization_id = hsk.segment2
108      AND hsk.soft_coding_keyflex_id = paa.soft_coding_keyflex_id
109      AND paa.assignment_id = p_assignment_id
110      AND p_effective_date BETWEEN paa.effective_start_date
111                               AND paa.effective_end_date;
112   l_procedure     VARCHAR2(100);
113   l_edli VARCHAR2(1);
114   l_message       VARCHAR2(1000);
115 BEGIN
116   g_debug:= hr_utility.debug_enabled;
117   l_procedure:= g_package ||'check_retainer';
118 
119   pay_in_utils.set_location(g_debug,'Entering : '||l_procedure,10);
120 
121  IF g_debug THEN
122      pay_in_utils.trace('**************************************************','********************');
123      pay_in_utils.trace('p_assignment_id',p_assignment_id);
124      pay_in_utils.trace('p_effective_date',to_char(p_effective_date,'dd/mm/yyyy'));
125      pay_in_utils.trace('**************************************************','********************');
126  END IF;
127   OPEN  c_get_edli;
128     FETCH c_get_edli INTO l_edli;
129   CLOSE c_get_edli;
130 
131    IF g_debug THEN
132      pay_in_utils.trace('l_edli',l_edli);
133    END IF;
134 
135   pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure,20);
136   RETURN l_edli;
137 
138 EXCEPTION
139      WHEN OTHERS THEN
140        l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
141        pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 30);
142        hr_utility.trace(l_message);
143        RETURN NULL;
144 END check_edli;
145 
146 --------------------------------------------------------------------------
147 -- Name           : GET_ESI_CONT_AMT                                    --
148 -- Type           : Function                                            --
149 -- Access         : Public                                              --
150 -- Description    : Function finds the ESI Eligibile salary at the      --
151 --                  start of Contribution period/first pay period       --
152 --                  whichever falls later                               --
153 -- Parameters     :                                                     --
154 --             IN : p_assignment_action_id IN NUMBER                    --
155 --                  p_assignment_id        IN NUMBER                    --
156 --                  p_date_earned          IN DATE                      --
157 --                  p_eligible_amt         IN NUMBER                    --
158 --                                                                      --
159 -- Version    Date      Author   Bug      Description                   --
160 -- =====================================================================--
161 -- 115.0    04-Aug-2004 lnagaraj 3723655  Initial Version               --
162 -- 115.1    12-Aug-2004 lnagaraj          Changed cusor get_date        --
163 --                                     used _ASG_MTD instead of _ASG_RUN--
164 -- 115.2    25-Aug-2004 lnagaraj 3844554  Used _ASG_PTD instead of      --
165 --                                        _ASG_MTD                      --
166 -- 115.3    23-Sep-2004 statkar  3861752  Support for +ve offsets       --
167 -- 115.4    21-Oct-2005 lnagaraj 4680066  Added 'csr_bal_init' to       --
168 --                                        consider balance init         --
169 -- 115.5    07-Jun-2006 lnagaraj 6116283  Included last_day function    --
170 -- 115.7    25-May-2010 lnagaraj 9746737  Make eligibility period change--
171 --                                        to May for May-Sep2010 period --
172 --------------------------------------------------------------------------
173 FUNCTION get_esi_cont_amt(p_assignment_action_id IN NUMBER
174                          ,p_assignment_id        IN NUMBER
175                          ,p_date_earned          IN DATE
176                          ,p_eligible_amt         IN NUMBER
177                           )
178 RETURN NUMBER IS
179 
180  /* This cursor returns the defined balance id of 'ESI_ELIGIBLE_SALARY_ASG_PTD' */
181  CURSOR get_defined_bal_id IS
182  SELECT pdb.defined_balance_id
183   FROM  pay_defined_balances pdb,
184         pay_balance_dimensions pbd,
185         pay_balance_types pbt
186  WHERE pbt.balance_name ='ESI Eligible Salary'
187    AND pbd.database_item_suffix='_ASG_PTD' /* Bugfix 3844554 */
188    AND pbt.legislation_code='IN'
189    AND pdb.balance_type_id =pbt.balance_type_id
190    AND pdb.balance_dimension_id =pbd.balance_dimension_id;
191 
192 /* This cursor returns the latest of first pay period date  and contribution period start date */
193  CURSOR get_date(l_start date) IS
194         SELECT GREATEST( MIN(ppa.date_earned),l_start)
195         FROM    pay_payroll_actions ppa,
196                 pay_assignment_actions paa,
197                 per_all_assignments_f paf
198         WHERE paf.assignment_id =p_assignment_id
199         AND   paf.assignment_id=paa.assignment_id
200         AND   paa.payroll_action_id =ppa.payroll_action_id;
201 
202 -- Cursor for Max Assignment Action ID for the contribution period
203   CURSOR csr_casact (l_virtual_date IN DATE) IS
204     SELECT paa.assignment_action_id
205     FROM   pay_payroll_actions ppa
206           ,pay_assignment_actions paa
207     WHERE  paa.payroll_action_id = ppa.payroll_action_id
208     AND    paa.assignment_id     = p_assignment_id
209     AND    last_day(ppa.date_earned)  = l_virtual_date
210     AND    paa.source_action_id IS NULL
211     AND    ppa.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')-- Added as a part of bug fix 4774108
212     AND    ppa.action_type in ('Q','R','I','B')
213     ORDER BY paa.action_sequence DESC ;
214 
215 
216 -- Store the contribution Start Periods
217   l_half_year_start1 VARCHAR2(7);
218   l_half_year_start2 VARCHAR2(7);
219 
220   l_month NUMBER;
221   l_year NUMBER;
222   l_start DATE;
223   l_esi_cont_date DATE;
224   l_esi_contr_month DATE;
225   l_esi_eligible_amt   NUMBER;
226   l_defined_balance_id NUMBER;
227   l_date_earned DATE;
228   l_start_period DATE;
229 
230   l_procedure VARCHAR2(100);
231   l_virtual_asact_id NUMBER;
232   l_message VARCHAR2(1000);
233 
234 BEGIN
235   g_debug:= hr_utility.debug_enabled;
236   l_procedure := g_package ||'get_esi_cont_amt';
237   pay_in_utils.set_location(g_debug,'Entering: '||l_procedure, 10);
238 
239   l_half_year_start1:='01-04-';
240   l_half_year_start2:='01-10-';
241 
242   IF g_debug THEN
243     pay_in_utils.trace('**************************************************','********************');
244     pay_in_utils.trace ('p_assignment_action_id ',to_char(p_assignment_action_id));
245     pay_in_utils.trace ('p_assignment_id        ',to_char(p_assignment_id));
246     pay_in_utils.trace ('p_date_earned          ',to_char(p_date_earned,'DD-MM-YYYY'));
247     pay_in_utils.trace ('p_eligible_amt         ',to_char(p_eligible_amt));
248     pay_in_utils.trace('**************************************************','********************');
249   END IF;
250 
251   l_month :=TO_NUMBER(TO_CHAR(p_date_earned,'mm'));
252   l_year := TO_NUMBER(TO_CHAR(p_date_earned,'yyyy'));
253 
254   pay_in_utils.set_location(g_debug,l_procedure, 20);
255 
256   IF l_month BETWEEN 4 AND 9 THEN
257        l_start := TO_DATE(l_half_year_start1||TO_CHAR(l_year),'dd-mm-yyyy');
258   ELSIF l_month BETWEEN 10 and 12 THEN
259        l_start := TO_DATE(l_half_year_start2||TO_CHAR(l_year),'dd-mm-yyyy');
260   ELSE
261        l_start := TO_DATE(l_half_year_start2||TO_CHAR(l_year-1),'dd-mm-yyyy');
262   END IF;
263 
264   IF l_month BETWEEN 5 AND 9  and l_year =2010 THEN
265        l_start := TO_DATE('01-05-'||TO_CHAR(l_year),'dd-mm-yyyy');
266   END IF;
267 
268   pay_in_utils.set_location(g_debug,l_procedure, 30);
269 
270   OPEN get_date(l_start);
271   FETCH get_date INTO l_esi_cont_date;
272   CLOSE get_date;
273 
274   pay_in_utils.set_location(g_debug,l_procedure, 40);
275 
276   --Get the last date of the month to be considered for ESI Eligibility
277   l_esi_contr_month := last_day(l_esi_cont_date);
278 
279   --Get the last date of the current pay period
280   l_start_period    := last_day(p_date_earned);
281 
282   IF g_debug THEN
283     pay_in_utils.trace ('l_esi_contr_month : ' , to_char(l_esi_contr_month,'DD-MM-YYYY'));
284     pay_in_utils.trace ('l_start_period : ' , to_char(l_start_period,'DD-MM-YYYY'));
285   END IF;
286 
287   pay_in_utils.set_location(g_debug,l_procedure, 50);
288 
289 --
290 -- IF  Current month is to considered for finding ESI Eligibility
291 --     THEN return back the input value(p_eligible_amt)
292 --   ELSE
293 --      Call pay_balance_pkg.get_value
294 --
295 
296   IF l_start_period =l_esi_contr_month THEN
297 
298     l_esi_eligible_amt :=p_eligible_amt;
299     pay_in_utils.set_location(g_debug,l_procedure, 60);
300 
301   ELSE
302     pay_in_utils.set_location(g_debug,l_procedure, 70);
303     OPEN get_defined_bal_id;
304     FETCH get_defined_bal_id INTO l_defined_balance_id;
305     CLOSE get_defined_bal_id;
306 
307 
308     OPEN csr_casact (l_esi_contr_month);
309     FETCH csr_casact
310     INTO  l_virtual_asact_id;
311     CLOSE csr_casact;
312 
313 
314     pay_in_utils.set_location(g_debug,'Virtual ASACT ID : '||to_char(l_virtual_asact_id),80);
315 
316     l_esi_eligible_amt := pay_balance_pkg.get_value(
317                                p_defined_balance_id   => l_defined_balance_id,
318                                p_assignment_action_id => l_virtual_asact_id
319                              );
320 
321     pay_in_utils.set_location(g_debug,l_procedure, 80);
322 
323    END IF;
324 
325   IF g_debug THEN
326     pay_in_utils.trace ('l_esi_eligible_amt : ' , l_esi_eligible_amt);
327   END IF;
328 
329    pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 90);
330    RETURN l_esi_eligible_amt;
331 
332 EXCEPTION
333      WHEN OTHERS THEN
334        l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
335        pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 100);
336        hr_utility.trace(l_message);
337        RETURN NULL;
338 END get_esi_cont_amt;
339 
340 
341 --------------------------------------------------------------------------
342 -- Name           : GET_ESI_DISABILITY_DETAILS                          --
343 -- Type           : Function                                            --
344 -- Access         : Public                                              --
345 -- Description    : Function finds the Disability Details at the        --
346 --                  start of Contribution period/first pay period       --
347 --                  whichever falls later                               --
348 -- Parameters     :                                                     --
349 --             IN : p_assignment_id        IN NUMBER                    --
350 --                  p_date_earned          IN DATE                      --
351 --                                                                      --
352 -- Version    Date      Author   Bug      Description                   --
353 -- =====================================================================--
354 -- 115.0    04-Sep-2008  mdubasi 7357358  Initial Version               --
355 --------------------------------------------------------------------------
356 FUNCTION get_esi_disability_details( p_assignment_id in number
357                                     ,p_date_earned in date
358                                     ,p_disable_proof out  NOCOPY varchar2)
359 Return Number is
360 
361  /* This cursor returns the Disable Proof */
362   Cursor c_disab_details(l_esi_cont_date date) is
363    select pdf.dis_information1
364      from per_disabilities_f pdf,
365           per_all_assignments_f paa
366     where paa.assignment_id = p_assignment_id
367       and paa.person_id = pdf.person_id
368       and l_esi_cont_date between paa.effective_start_date and paa.effective_end_date
369       and l_esi_cont_date between pdf.effective_start_date and pdf.effective_end_date
370       order by nvl(pdf.dis_information1,'N') desc;
371 
372     /* This cursor returns the latest of first pay period date  and contribution period start date */
373  CURSOR get_date(l_start date) IS
374         SELECT GREATEST( MIN(ppa.date_earned),l_start)
375         FROM    pay_payroll_actions ppa,
376                 pay_assignment_actions paa,
377                 per_all_assignments_f paf
378         WHERE paf.assignment_id =p_assignment_id
379         AND   paf.assignment_id=paa.assignment_id
380         AND   paa.payroll_action_id =ppa.payroll_action_id;
381 
382 -- Store the contribution Start Periods
383   l_half_year_start1 VARCHAR2(7);
384   l_half_year_start2 VARCHAR2(7);
385 
386   l_month NUMBER;
387   l_year NUMBER;
388   l_start DATE;
389   l_esi_cont_date DATE;
390   l_proof Varchar2(10);
391   l_procedure   VARCHAR2(250);
392   l_message     VARCHAR2(250);
393 
394 BEGIN
395    g_debug     := hr_utility.debug_enabled;
396    l_procedure := g_package ||'get_esi_disability_details';
397    pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
398 
399   l_half_year_start1:='01-04-';
400   l_half_year_start2:='01-10-';
401 
402   IF g_debug THEN
403     pay_in_utils.trace('**************************************************','********************');
404     pay_in_utils.trace ('p_assignment_id        ',to_char(p_assignment_id));
405     pay_in_utils.trace ('p_date_earned          ',to_char(p_date_earned,'DD-MM-YYYY'));
406     pay_in_utils.trace('**************************************************','********************');
407   END IF;
408 
409   l_month := TO_NUMBER(TO_CHAR(p_date_earned,'mm'));
410   l_year := TO_NUMBER(TO_CHAR(p_date_earned,'yyyy'));
411 
412   pay_in_utils.set_location(g_debug,l_procedure, 20);
413 
414   IF l_month BETWEEN 4 AND 9 THEN
415        l_start := TO_DATE(l_half_year_start1||TO_CHAR(l_year),'dd-mm-yyyy');
416   ELSIF l_month BETWEEN 10 and 12 THEN
417        l_start := TO_DATE(l_half_year_start2||TO_CHAR(l_year),'dd-mm-yyyy');
418   ELSE
419        l_start := TO_DATE(l_half_year_start2||TO_CHAR(l_year-1),'dd-mm-yyyy');
420   END IF;
421 
422   pay_in_utils.set_location(g_debug,l_procedure, 30);
423 
424  /*To get latest of first pay period date  and contribution period start date*/
425 
426   OPEN get_date(l_start);
427   FETCH get_date INTO l_esi_cont_date;
428   CLOSE get_date;
429 
430   pay_in_utils.set_location(g_debug,l_procedure, 40);
431 
432   IF g_debug THEN
433     pay_in_utils.trace ('l_esi_cont_date : ' , to_char(l_esi_cont_date,'DD-MM-YYYY'));
434   END IF;
435 
436   pay_in_utils.set_location(g_debug,l_procedure, 50);
437 
438   l_proof := 'N';
439 
440   Open c_disab_details(l_esi_cont_date);
441   Fetch c_disab_details into l_proof;
442   Close c_disab_details;
443 
444   p_disable_proof := l_proof;
445 
446   pay_in_utils.set_location(g_debug,l_procedure, 60);
447 
448 
449   IF g_debug THEN
450    pay_in_utils.trace('p_disable_proof',p_disable_proof);
451   END IF;
452 
453   pay_in_utils.set_location(g_debug,l_procedure, 70);
454 
455 
456   pay_in_utils.trace('**************************************************','********************');
457   pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,80);
458   Return 0;
459 
460 END get_esi_disability_details;
461 
462 
463 --------------------------------------------------------------------------
464 -- Name           : ROUND_TO_5PAISE                                     --
465 -- Type           : Function                                            --
466 -- Access         : Public                                              --
467 -- Description    : Function to round to next higher multiple of 5 paise--
468 -- Parameters     :                                                     --
469 --             IN : p_number               IN NUMBER                    --
470 -- Version    Date      Author   Bug      Description                   --
471 -- =====================================================================--
472 -- 115.0    04-Aug-2004 lnagaraj 3723655  Initial Version               --
473 -- 115.1    25-Aug-2004 lnagaraj 3849905  Rounded the number to 2 places--
474 --                                        before rounding to the next   --
475 --                                        five paise                    --
476 
477 --------------------------------------------------------------------------
478 
479 FUNCTION round_to_5paise( p_number in number)
480 RETURN NUMBER IS
481   n       NUMBER;
482   l_number NUMBER;
483   l_procedure            VARCHAR2(100);
484 BEGIN
485   g_debug          := hr_utility.debug_enabled;
486   l_procedure := g_package ||'round_to_5paise';
487   pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
488 
489 
490   IF g_debug THEN
491      pay_in_utils.trace('p_number',to_char(p_number));
492   END IF;
493 
494   l_number := ROUND(p_number,2);
495   N        := CEIL (l_number*10)/10;
496 
497   IF g_debug THEN
498      pay_in_utils.trace('N',to_char(N));
499   END IF;
500 
501   IF (N-l_number) >= 0.05 THEN
502     RETURN (N-0.05);
503   ELSE
504     RETURN N;
505   END IF;
506 
507   pay_in_utils.set_location(g_debug,'LEAVING: '||l_procedure,20);
508 
509 END ROUND_TO_5PAISE;
510 
511 --------------------------------------------------------------------------
512 -- Name           : GET_ACCRUAL_PLAN                                    --
513 -- Type           : Function                                            --
514 -- Access         : Private                                             --
515 -- Description    : Function  to fetch the Accrual Plan id of the       --
516 --                  accrual category passed                             --
517 --             IN : p_assignment_id          NUMBER                     --
518 --                  p_effective_date         DATE                       --
519 --                  p_plan_category          VARCHAR2                   --
520 --            OUT : p_message                VARCHAR2                   --
521 --                  plan_id                  NUMBER                     --
522 --                                                                      --
523 -- Version    Date      Author   Bug      Description                   --
524 -- =====================================================================--
525 -- 115.0    19-Oct-2004 Vgsriniv  3847355  Initial Version              --
526 
527 --------------------------------------------------------------------------
528 FUNCTION get_accrual_plan ( p_assignment_id    IN    NUMBER
529                            ,p_effective_date   IN    DATE
530                            ,p_plan_category    IN    VARCHAR2
531                            ,p_message          OUT   NOCOPY VARCHAR2
532                           )
533 RETURN NUMBER
534 IS
535 
536     l_accrual_plan_id      NUMBER := NULL;
537     l_dummy                NUMBER ;
538     l_procedure            VARCHAR2(100);
539     l_message              VARCHAR2(1000);
540 
541   CURSOR csr_get_accrual_plan_id(p_assignment_id    NUMBER
542                                 ,p_effective_date   DATE
543                                 ,p_plan_category    VARCHAR2) IS
544     SELECT pap.accrual_plan_id
545     FROM   pay_accrual_plans pap,
546            pay_element_entries_f pee,
547            pay_element_links_f pel,
548            pay_element_types_f pet
549     WHERE  pee.assignment_id = p_assignment_id
550     AND    p_effective_date BETWEEN pee.effective_start_date AND pee.effective_end_date
551     AND    pel.element_link_id = pee.element_link_id
552     AND    pel.element_type_id = pet.element_type_id
553     AND    pap.accrual_plan_element_type_id = pet.element_type_id
554     AND    pap.accrual_category = p_plan_category ;
555 
556   BEGIN
557    g_debug          := hr_utility.debug_enabled;
558    l_procedure := g_package ||'get_accrual_plan';
559    pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
560 
561 
562   IF g_debug THEN
563      pay_in_utils.trace('**************************************************','********************');
564      pay_in_utils.trace('p_assignment_id ',to_char(p_assignment_id ));
565      pay_in_utils.trace('p_effective_date',to_char(p_effective_date));
566      pay_in_utils.trace('p_plan_category ',to_char(p_plan_category ));
567      pay_in_utils.trace('**************************************************','********************');
568   END IF;
569 
570     OPEN csr_get_accrual_plan_id(p_assignment_id, p_effective_date, p_plan_category) ;
571     FETCH csr_get_accrual_plan_id INTO l_accrual_plan_id;
572 
573     IF csr_get_accrual_plan_id%NOTFOUND
574     THEN
575       p_message := 'ERROR';
576       CLOSE csr_get_accrual_plan_id;
577     ELSE
578       p_message := 'SUCCESS';
579       CLOSE csr_get_accrual_plan_id;
580     END IF ;
581 
582    IF g_debug THEN
583      pay_in_utils.trace('**************************************************','********************');
584      pay_in_utils.trace('p_message ',p_message);
585      pay_in_utils.trace('l_accrual_plan_id ',to_char(l_accrual_plan_id ));
586      pay_in_utils.trace('**************************************************','********************');
587    END IF;
588 
589    pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 20);
590 
591    RETURN l_accrual_plan_id;
592 
593     EXCEPTION
594      WHEN OTHERS THEN
595        l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
596        pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 20);
597        hr_utility.trace(l_message);
598        RETURN NULL;
599 
600 END get_accrual_plan;
601 
602 --------------------------------------------------------------------------
603 -- Name           : GET_NET_ACCRUAL                                     --
604 -- Type           : Function                                            --
605 -- Access         : Public                                              --
606 -- Description    : Function to fetch the accrued leave balance as of   --
607 --                  the date passed                                     --
608 --             IN : p_assignment_id          NUMBER                     --
609 --                  p_payroll_id             NUMBER                     --
610 --                  p_business_group_id      NUMBER                     --
611 --                  p_calculation_date       DATE                       --
612 --                  p_plan_category          VARCHAR2                   --
613 --            OUT : p_message                VARCHAR2                   --
614 --                  accrual                  NUMBER                     --
615 --                                                                      --
616 -- Version    Date      Author   Bug      Description                   --
617 -- =====================================================================--
618 -- 115.0    19-Oct-2004 Vgsriniv  3847355  Initial Version              --
619 
620 --------------------------------------------------------------------------
621 
622 FUNCTION get_net_accrual ( p_assignment_id     IN  NUMBER
623                           ,p_payroll_id        IN  NUMBER
624                           ,p_business_group_id IN  NUMBER
625                           ,p_calculation_date  IN  DATE
626                           ,p_plan_category     IN  VARCHAR2
627                           ,p_message           OUT NOCOPY VARCHAR2
628                          )
629 RETURN NUMBER
630 IS
631     l_plan_id          NUMBER;
632     l_accrued_leave    NUMBER   := NULL;
633     l_start_date       DATE     := NULL;
634     l_end_date         DATE     := NULL;
635     l_accrual_end_date DATE     := NULL;
636     l_accrual          NUMBER   := NULL;
637     l_procedure    VARCHAR2(100);
638     l_message      VARCHAR2(1000);
639 
640 BEGIN
641 
642    g_debug:= hr_utility.debug_enabled;
643    l_procedure := g_package ||'get_net_accrual';
644    pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
645 
646   IF g_debug THEN
647      pay_in_utils.trace('**************************************************','********************');
648      pay_in_utils.trace('p_assignment_id    ',to_char(p_assignment_id    ));
649      pay_in_utils.trace('p_payroll_id       ',to_char(p_payroll_id       ));
650      pay_in_utils.trace('p_business_group_id',to_char(p_business_group_id));
651      pay_in_utils.trace('p_calculation_date ',to_char(p_calculation_date,'yyyy-mm-dd'));
652      pay_in_utils.trace('p_plan_category    ',p_plan_category);
653      pay_in_utils.trace('**************************************************','********************');
654 
655   END IF;
656 
657     l_plan_id := get_accrual_plan ( p_assignment_id    => p_assignment_id
658                                    ,p_effective_date   => p_calculation_date
659                                    ,p_plan_category    => p_plan_category
660                                    ,p_message          => p_message
661                                    );
662 
663     per_accrual_calc_functions.get_net_accrual(
664                           p_assignment_id      =>   p_assignment_id
665                          ,p_plan_id            =>   l_plan_id
666                          ,p_payroll_id         =>   p_payroll_id
667                          ,p_business_group_id  =>   p_business_group_id
668                          ,p_calculation_date   =>   p_calculation_date
669                          ,p_start_date         =>   l_start_date
670                          ,p_end_date           =>   l_end_date
671                          ,p_accrual_end_date   =>   l_accrual_end_date
672                          ,p_accrual            =>   l_accrual
673                          ,p_net_entitlement    =>   l_accrued_leave) ;
674 
675   IF g_debug THEN
676      pay_in_utils.trace('**************************************************','********************');
677      pay_in_utils.trace('l_accrued_leave ',to_char(l_accrued_leave));
678      pay_in_utils.trace('p_message    ',p_message);
679      pay_in_utils.trace('**************************************************','********************');
680   END IF;
681   pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 20);
682     RETURN l_accrued_leave;
683     EXCEPTION
684       WHEN OTHERS THEN
685         l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
686         pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 30);
687         hr_utility.trace(l_message);
688         RETURN NULL;
689 
690 
691 END get_net_accrual;
692 --------------------------------------------------------------------------
693 -- Name           : GET_PERIOD_NUMBER                                   --
694 -- Type           : Function                                            --
695 -- Access         : Public                                              --
696 -- Description    : Function to fetch the period number of the date     --
697 --                  passed                                              --
698 --             IN : p_payroll_id             NUMBER                     --
699 --                  p_date                   DATE                       --
700 --            OUT : Period Number            NUMBER                     --
701 --                                                                      --
702 -- Version    Date      Author   Bug      Description                   --
703 -- =====================================================================--
704 -- 115.0    19-Oct-2004 Vgsriniv  3847355  Initial Version              --
705 -- 115.1    12-May-2005 rpalli    3919203  Modified code to support     --
706 --                                         offset payrolls              --
707 --------------------------------------------------------------------------
708 
709 FUNCTION get_period_number (p_payroll_id IN NUMBER
710                            ,p_term_date IN DATE )
711 RETURN NUMBER IS
712 
713 CURSOR c_period_number IS
714 SELECT  decode(to_char(TPERIOD.end_date,'MM'),'04',1,'05',2,'06',3,
715                                               '07',4,'08',5,'09',6,
716                                               '10',7,'11',8,'12',9,
717                                               '01',10,'02',11,'03',12)
718     FROM per_time_periods TPERIOD,
719          per_time_period_types TPTYPE
720    WHERE TPERIOD.payroll_id = p_payroll_id
721      AND TPTYPE.period_type = TPERIOD.period_type
722      AND p_term_date between TPERIOD.start_date and TPERIOD.end_date;
723 
724 l_period_num   NUMBER;
725 l_procedure    VARCHAR2(100);
726 l_message      VARCHAR2(1000);
727 
728 BEGIN
729     g_debug          := hr_utility.debug_enabled;
730     l_procedure := g_package ||'get_period_number';
731     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
732 
733 
734   IF g_debug THEN
735      pay_in_utils.trace('**************************************************','********************');
736      pay_in_utils.trace('p_payroll_id',to_char(p_payroll_id    ));
737      pay_in_utils.trace('p_term_date ',to_char(p_term_date,'yyyy-mm-dd'));
738      pay_in_utils.trace('**************************************************','********************');
739   END IF;
740 
741     l_period_num := 12;
742 
743     OPEN c_period_number;
744     FETCH c_period_number INTO l_period_num;
745     CLOSE c_period_number;
746 
747     IF g_debug THEN
748      pay_in_utils.trace('l_period_num',to_char(l_period_num    ));
749     END IF;
750 
751     pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 30);
752 
753     RETURN l_period_num;
754 
755     EXCEPTION
756       WHEN OTHERS THEN
757         l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
758         pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 30);
759         hr_utility.trace(l_message);
760         RETURN NULL;
761 
762 
763 END get_period_number;
764 
765 --------------------------------------------------------------------------
766 -- Name           : SEC_80DD_PERCENT                                   --
767 -- Type           : Function                                            --
768 -- Access         : Public                                              --
769 -- Description    : Function to check if Sec 80 DD element is attached  --
770 --                  with 80-100 percent disability                      --
771 --             IN : p_assignment_id          NUMBER                     --
772 --                  p_date                   DATE                       --
773 --            OUT : Y/N                      VARCHAR2                   --
774 --                                                                      --
775 -- Version    Date      Author   Bug      Description                   --
776 -- ========|============|=======|========|==================================--
777 -- 115.0    04-Nov-2004 Vgsriniv 3936280  Initial Version              --
778 
779 --------------------------------------------------------------------------
780 
781 FUNCTION sec_80dd_percent ( p_assignment_id IN per_all_assignments_f.assignment_id%type
782                            ,p_date_earned IN date)
783 RETURN VARCHAR2 IS
784 
785   CURSOR c_80dd_80_percent is
786     SELECT count (*)
787       FROM pay_element_entry_values_f pev,
788            pay_element_entries_f pee,
789            pay_element_types_f pet,
790            pay_input_values_f piv
791      WHERE pet.element_name like 'Deduction under Section 80DD'
792        AND pet.legislation_code = 'IN'
793        AND pet.element_type_id = piv.element_type_id
794        AND piv.name = 'Disability Percentage'
795        AND piv.input_value_id = pev.input_value_id
796        AND pev.screen_entry_value = '80100'
797        AND pev.element_entry_id = pee.element_entry_id
798        AND pee.assignment_id = p_assignment_id
799        AND pee.element_type_id = pet.element_type_id
800        AND pee.entry_type = 'E'
801        AND p_date_earned BETWEEN pev.effective_start_date AND pev.effective_end_date
802        AND p_date_earned BETWEEN pee.effective_start_date AND pee.effective_end_date
803        AND p_date_earned BETWEEN pet.effective_start_date AND pet.effective_end_date
804        AND p_date_earned BETWEEN piv.effective_start_date AND piv.effective_end_date;
805 
806   l_80_percent number;
807   l_procedure varchar2(100);
808 
809 BEGIN
810 g_debug          := hr_utility.debug_enabled;
811 l_procedure := g_package ||'sec_80dd_percent';
812 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
813 
814 
815   IF g_debug THEN
816      pay_in_utils.trace('**************************************************','********************');
817      pay_in_utils.trace('p_assignment_id',to_char(p_assignment_id    ));
818      pay_in_utils.trace('p_date_earned ',to_char(p_date_earned,'yyyy-mm-dd'));
819      pay_in_utils.trace('**************************************************','********************');
820   END IF;
821 
822   OPEN c_80dd_80_percent;
823   FETCH c_80dd_80_percent INTO l_80_percent;
824   CLOSE c_80dd_80_percent;
825 
826 
827   IF g_debug THEN
828      pay_in_utils.trace('l_80_percent',l_80_percent);
829   END IF;
830 
831   IF l_80_percent > 0 THEN
832     RETURN 'Y';
833   ELSE
834     RETURN 'N';
835   END IF;
836 
837 pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,20);
838 
839 END sec_80dd_percent;
840 --------------------------------------------------------------------------
841 --                                                                      --
842 -- Name           : check_father_husband_name                           --
843 -- Type           : PROCEDURE                                           --
844 -- Access         : Public                                              --
845 -- Description    : Procedure to check contact details as the case maybe--
846 -- Parameters     :                                                     --
847 --             IN : p_effective_date          DATE                      --
848 --                  p_assignment_id           NUMBER                    --
849 --                  p_calling_procedure       VARCHAR2                  --
850 --             OUT:                                                     --
851 --                  p_message_name            VARCHAR2                  --
852 --                  p_token_value             VARCHAR2                  --
853 --                                                                      --
854 -- Change History :                                                     --
855 --------------------------------------------------------------------------
856 -- Rev#  Date       Userid    Description                               --
857 --------------------------------------------------------------------------
858 -- 1.0   01-Jan-05  aaagarwa  Created this procedure                    --
859 -- 1.1   25-Jul-05  snekkala  Modified to make father name mandatory of --
860 --                            gender and spouse mandatory if gender is  --
861 --                            Female and Marital Status is Married      --
862 -- 1.2   25-Jul-05  snekkala  Removed GSCC Errors                       --
863 --------------------------------------------------------------------------
864 PROCEDURE check_father_husband_name
865              (p_assignment_id           IN NUMBER
866              ,p_effective_date          IN DATE
867              ,p_message_name            OUT NOCOPY VARCHAR2
868              ,p_token_value             OUT NOCOPY VARCHAR2)
869 IS
870 /* Cursor to find the contact details */
871   CURSOR csr_contacts
872   IS
873     SELECT DISTINCT(DECODE(pcr.contact_type,'JP_FT','Father','F','Father','S','Spouse')) relation_type
874          , ppf.sex                                                                       sex
875 	 , ppf.marital_status                                                            marital_status
876       FROM per_people_f               ppf
877          , per_assignments_f          paf
878          , per_contact_relationships  pcr
879      WHERE paf.assignment_id  = p_assignment_id
880        AND paf.person_id      = ppf.person_id
881        AND pcr.person_id      = ppf.person_id
882        AND pcr.contact_type   IN ('JP_FT','F',DECODE(ppf.marital_status,'M','S'))
883        AND p_effective_date   BETWEEN ppf.effective_start_date AND ppf.effective_end_date
884        AND p_effective_date   BETWEEN paf.effective_start_date AND ppf.effective_end_date
885        AND p_effective_date   BETWEEN pcr.date_start           AND NVL(pcr.date_end,TO_DATE('4712/12/31','YYYY/MM/DD'))
886   ORDER BY DECODE(pcr.contact_type,'JP_FT','Father','F','Father','S','Spouse');
887 
888   l_sex            VARCHAR2(10);
889   l_name           VARCHAR2(100);
890   l_procedure      VARCHAR2(100);
891   l_marital_status VARCHAR2(10);
892   l_father_exists  NUMBER;
893   l_spouse_exists  NUMBER;
894 
895 BEGIN
896 
897   g_debug := hr_utility.debug_enabled ;
898   l_procedure := g_package||'check_father_husband_name' ;
899   pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
900 
901   IF g_debug THEN
902      pay_in_utils.trace('**************************************************','********************');
903      pay_in_utils.trace('p_assignment_id  ',to_char(p_assignment_id));
904      pay_in_utils.trace('p_effective_date ',to_char(p_effective_date,'yyyy-mm-dd'));
905      pay_in_utils.trace('**************************************************','********************');
906   END IF;
907 
908   p_message_name := 'SUCCESS';
909   p_token_value:=NULL;
910 
911   l_father_exists :=0;
912   l_spouse_exists :=0;
913 
914   FOR i in csr_contacts
915   LOOP
916      IF i.sex ='F' AND i.marital_status = 'M' AND i.relation_type ='Spouse' THEN
917         l_spouse_exists := 1;
918      ELSIF i.relation_type = 'Father' THEN
919         l_father_exists := 1;
920      END IF;
921      l_sex := i.sex;
922      l_marital_status := i.marital_status;
923   END LOOP;
924 
925   IF l_father_exists = 0 THEN
926      p_message_name := 'PER_IN_CONTACT_DETAILS';
927      p_token_value := 'Father';
928   ELSIF l_sex = 'F' AND l_marital_status = 'M' AND l_spouse_exists = 0 THEN
929      p_message_name := 'PER_IN_CONTACT_DETAILS';
930      p_token_value := 'Spouse';
931   END IF;
932 
933    IF g_debug THEN
934      pay_in_utils.trace('**************************************************','********************');
935      pay_in_utils.trace('p_message_name   ',p_message_name);
936      pay_in_utils.trace('p_token_value    ',p_token_value);
937      pay_in_utils.trace('**************************************************','********************');
938   END IF;
939   pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,20);
940   RETURN;
941 
942 END check_father_husband_name;
943 --------------------------------------------------------------------------
944 --                                                                      --
945 -- Name           : CHECK_GRE_UPDATE                                    --
946 -- Type           : PROCEDURE                                           --
947 -- Access         : Public                                              --
948 -- Description    : Procedure to validate GRE/Legal Entity Changes      --
949 -- Parameters     :                                                     --
950 --             IN : p_effective_date      DATE                          --
951 --                  p_dt_mode             VARCHAR2                      --
952 --                  p_assignment_id       NUMBER                        --
953 --                  p_gre_org             VARCHAR2                      --
954 --            OUT : p_message             VARCHAR2                      --
955 -- Change History :                                                     --
956 --------------------------------------------------------------------------
957 -- Rev#  Date       Userid    Description                               --
958 --------------------------------------------------------------------------
959 PROCEDURE check_gre_update
960          (p_effective_date   IN  DATE
961          ,p_dt_mode          IN  VARCHAR2
962          ,p_assignment_id    IN  NUMBER
963          ,p_gre_org          IN  VARCHAR2
964 	 ,p_pf_org           IN  VARCHAR2
965 	 ,p_esi_org          IN  VARCHAR2
966          ,p_gre              IN NUMBER
967 	 ,p_pf               IN NUMBER
968 	 ,p_esi              IN NUMBER
969          ,p_message          OUT NOCOPY VARCHAR2
970 	 ,p_token_name       OUT NOCOPY pay_in_utils.char_tab_type
971 	 ,p_token_value      OUT NOCOPY pay_in_utils.char_tab_type
972          )
973 IS
974 -- The cursor to obtain the maximum payroll run date for an assignment in a BG.
975    CURSOR c_max_pay_date
976    IS
977       SELECT ppa.date_earned
978       FROM   pay_payroll_actions    ppa
979             ,pay_assignment_actions paa
980       WHERE  ppa.payroll_action_id  = paa.payroll_action_id
981       AND    ppa.action_type IN ('Q','R')
982       AND    ppa.action_status = 'C'
983       AND    paa.source_action_id IS NULL
984       AND    ppa.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
985       AND    paa.assignment_id = p_assignment_id
986       ORDER BY ppa.date_earned DESC;
987 -- The cursor to obtain start and end date of the effective date's month.
988    CURSOR c_payroll_month_dates
989    IS
990       SELECT ADD_MONTHS(LAST_DAY(p_effective_date),-1)+1
991             ,LAST_DAY(p_effective_date)
992       FROM   dual;
993 
994 
995 -- The cursor to find out the total no of GRE/Legal entity chnages in a given month.
996    CURSOR c_gre_changes(p_start_date DATE
997                        ,p_end_date   DATE
998                        )
999    IS
1000       SELECT COUNT(DISTINCT scl.segment1)
1001       FROM   per_all_assignments_f asg
1002             ,hr_soft_coding_keyflex scl
1003       WHERE  asg.assignment_id = p_assignment_id
1004       AND    scl.soft_coding_keyflex_id = asg.soft_coding_keyflex_id
1005       AND    asg.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
1006       AND (  asg.effective_start_date BETWEEN p_start_date AND p_end_date
1007           OR
1008              asg.effective_end_date BETWEEN p_start_date AND p_end_date
1009           );
1010 
1011 -- The cursor to find the organization id of the GRE/Legal entity id
1012    CURSOR c_org_id(p_org_name hr_organization_units.name%type)
1013    IS
1014       SELECT organization_id
1015       FROM  hr_organization_units
1016       WHERE NAME = p_org_name
1017       AND   business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID');
1018 
1019 -- The cursor to find the most recent 'assignment start date' for the effective date
1020  CURSOR c_asg_start_date
1021  IS
1022      SELECT asg.effective_start_date
1023      FROM per_all_assignments_f asg
1024      WHERE p_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
1025      AND asg.assignment_id = p_assignment_id;
1026 
1027 -- The cursor to find the presence of an employee in the now selected GRE/Legal
1028 -- entity id in earlier part of the current month.
1029    CURSOR c_flag(p_latest_org_id  NUMBER
1030                 ,p_start_date     DATE
1031                 ,p_end_date       DATE
1032 
1033 		)
1034    IS
1035       SELECT 1
1036       FROM   per_all_assignments_f asg
1037             ,hr_soft_coding_keyflex scl
1038       WHERE  asg.assignment_id = p_assignment_id
1039       AND    scl.soft_coding_keyflex_id = asg.soft_coding_keyflex_id
1040       AND    asg.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
1041       AND    scl.segment1          = p_latest_org_id
1042       AND  ( asg.effective_start_date BETWEEN p_start_date AND p_end_date
1043           OR
1044              asg.effective_end_date BETWEEN p_start_date AND  p_end_date
1045             );
1046 
1047     l_max_date_earned        DATE;
1048     l_start_date             DATE;
1049     l_end_date               DATE;
1050     l_org_id                 NUMBER;
1051     l_gre_org_id             NUMBER;
1052     l_pf_org_id              NUMBER;
1053     l_esi_org_id             NUMBER;
1054     l_count                  NUMBER;
1055     l_le_start_date          DATE;
1056     l_le_end_date            DATE;
1057     l_flag                   NUMBER;
1058     l_asg_start_date         DATE;
1059     l_procedure varchar2(100);
1060 
1061 BEGIN
1062 g_debug          := hr_utility.debug_enabled;
1063 l_procedure := g_package ||'check_gre_update';
1064 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
1065 
1066 
1067 IF g_debug THEN
1068      pay_in_utils.trace('**************************************************','********************');
1069      pay_in_utils.trace('p_effective_date',to_char(p_effective_date,'yyyy-mm-dd'));
1070      pay_in_utils.trace('p_dt_mode       ',p_dt_mode);
1071      pay_in_utils.trace('p_assignment_id ',to_char(p_assignment_id));
1072      pay_in_utils.trace('p_gre_org       ',p_gre_org);
1073      pay_in_utils.trace('p_pf_org        ',p_pf_org );
1074      pay_in_utils.trace('p_esi_org       ',p_esi_org);
1075      pay_in_utils.trace('p_gre           ',to_char(p_gre));
1076      pay_in_utils.trace('p_pf            ',to_char(p_pf));
1077      pay_in_utils.trace('p_esi           ',to_char(p_esi));
1078      pay_in_utils.trace('**************************************************','********************');
1079 END IF;
1080 
1081   OPEN  c_max_pay_date;
1082   FETCH c_max_pay_date INTO l_max_date_earned;
1083   CLOSE c_max_pay_date;
1084 
1085   OPEN c_asg_start_date;
1086   FETCH c_asg_start_date INTO l_asg_start_date;
1087   CLOSE c_asg_start_date;
1088 
1089 
1090 
1091   OPEN  c_payroll_month_dates;
1092   FETCH c_payroll_month_dates INTO l_start_date,l_end_date;
1093   CLOSE c_payroll_month_dates;
1094 
1095   OPEN  c_org_id(p_gre_org);--Current GRE Organization
1096   FETCH c_org_id INTO l_gre_org_id;
1097   CLOSE c_org_id;
1098 
1099   OPEN  c_org_id(p_pf_org);--Current PF Organization
1100   FETCH c_org_id INTO l_pf_org_id;
1101   IF c_org_id%NOTFOUND THEN
1102     l_pf_org_id := -99;
1103   END IF;
1104   CLOSE c_org_id;
1105 
1106   OPEN  c_org_id(p_esi_org);--Current ESI Organization
1107   FETCH c_org_id INTO l_esi_org_id;
1108   IF c_org_id%NOTFOUND THEN
1109     l_esi_org_id := -99;
1110   END IF;
1111   CLOSE c_org_id;
1112 
1113   OPEN  c_gre_changes(l_start_date,l_end_date);--Total Changes in the GRE
1114   FETCH c_gre_changes INTO l_count;
1115   CLOSE c_gre_changes;
1116 
1117   p_message := 'SUCCESS';
1118 
1119 
1120   IF (l_max_date_earned > l_asg_start_date)
1121   THEN
1122           IF (p_gre IS NOT NULL) AND (p_gre <> l_gre_org_id)
1123           THEN
1124                   p_message := 'PER_IN_GRE_CHANGE_FORBIDDEN';
1125           ELSIF (p_pf IS NOT NULL) AND (p_pf <> l_pf_org_id)
1126 	  THEN
1127 	          p_message        := 'PER_IN_SCL_CHANGE_FORBIDDEN';
1128 		  p_token_name(1)  := 'ORG';
1129 		  p_token_value(1) := hr_general.decode_lookup('IN_MESSAGE_TOKENS','PF_ORG');
1130           ELSIF (p_esi IS NOT NULL) AND (p_esi <> l_esi_org_id)
1131 	  THEN
1132             hr_utility.trace('ven_Inside ESI Error message condition');
1133 	          p_message        := 'PER_IN_SCL_CHANGE_FORBIDDEN';
1134 		  p_token_name(1)  := 'ORG';
1135 		  p_token_value(1) := hr_general.decode_lookup('IN_MESSAGE_TOKENS','ESI_ORG');
1136           ELSE
1137           IF g_debug THEN
1138 	     pay_in_utils.trace('p_message       ',p_message);
1139 	  END IF;
1140           pay_in_utils.set_location(g_debug,'LEAVING: '||l_procedure,20);
1141                   RETURN;
1142           END IF;
1143   ELSIF (l_count > 2)
1144   THEN
1145           p_message := 'PER_IN_GRE_CHANGE_FORBIDDEN';
1146   ELSIF (l_count = 2)
1147   THEN
1148           l_le_start_date := pay_in_tax_utils.le_start_date(l_org_id,p_assignment_id,p_effective_date);
1149           l_le_end_date   := pay_in_tax_utils.le_end_date(l_org_id,p_assignment_id,p_effective_date);
1150 
1151           OPEN  c_flag(l_org_id,l_start_date,l_le_start_date - 1);
1152           FETCH c_flag INTO l_flag;
1153           CLOSE c_flag;
1154 
1155           IF (l_flag IS NULL)
1156           THEN
1157                 OPEN  c_flag(l_org_id,l_le_end_date + 1,l_end_date);
1158                 FETCH c_flag INTO l_flag;
1159                 CLOSE c_flag;
1160 
1161                 IF (l_flag IS NULL) THEN
1162 		  IF g_debug THEN
1163 		     pay_in_utils.trace('p_message       ',p_message       );
1164 		  END IF;
1165 		  pay_in_utils.set_location(g_debug,'LEAVING: '||l_procedure,30);
1166                    RETURN;
1167                 ELSE
1168                    p_message := 'PER_IN_GRE_CHANGE_FORBIDDEN';
1169                 END IF;
1170           ELSE
1171                 p_message := 'PER_IN_GRE_CHANGE_FORBIDDEN';
1172           END IF;
1173   ELSE
1174          IF g_debug THEN
1175 	     pay_in_utils.trace('p_message       ',p_message       );
1176 	  END IF;
1177           pay_in_utils.set_location(g_debug,'LEAVING: '||l_procedure,40);
1178           RETURN;
1179   END IF;
1180 
1181 END check_gre_update;
1182 --------------------------------------------------------------------------
1183 --                                                                      --
1184 -- Name           : CHECK_PF_UPDATE                                     --
1185 -- Type           : PROCEDURE                                           --
1186 -- Access         : Public                                              --
1187 -- Description    : Procedure to create PF ELement Entries              --
1188 -- Parameters     :                                                     --
1189 --             IN : p_effective_date      DATE                          --
1190 --                  p_dt_mode             VARCHAR2                      --
1191 --                  p_assignment_id       NUMBER                        --
1192 --                  p_pf_org              VARCHAR2                      --
1193 --            OUT : p_message             VARCHAR2                      --
1194 -- Change History :                                                     --
1195 --------------------------------------------------------------------------
1196 -- Rev#  Date       Userid    Description                               --
1197 --------------------------------------------------------------------------
1198 -- 1.0   05-Dec-04  statkar   Created this function                     --
1199 -- 1.1   27-Dec-04  lnagaraj  Used pay_in_utils.chk_element_link        --
1200 -- 1.2   24-Mar-05  aaagarwa  Modified cursor c_pf                      --
1201 -- 1.3   10-Apr-05  abhjain   Removed the automatic element entry code  --
1202 -- 1.4   25-Jul-05  snekkala  Removed check for PF organization         --
1203 -- 1.5   18-Aug-05  abhjain   Commented the call to check_father_husband_name--
1204 --------------------------------------------------------------------------
1205 PROCEDURE check_pf_update
1206          (p_effective_date   IN  DATE
1207          ,p_dt_mode          IN  VARCHAR2
1208          ,p_assignment_id    IN  NUMBER
1209          ,p_gre_org          IN  VARCHAR2
1210 	 ,p_pf_org           IN  VARCHAR2
1211 	 ,p_esi_org          IN  VARCHAR2
1212          ,p_message          OUT NOCOPY VARCHAR2
1213          ,p_gre              IN NUMBER
1214 	 ,p_pf               IN NUMBER
1215 	 ,p_esi              IN NUMBER
1216          )
1217 IS
1218 
1219     l_procedure              VARCHAR2(100);
1220     l_message_name           VARCHAR2(100);
1221     l_token_value            VARCHAR2(10);
1222 
1223 BEGIN
1224     g_debug := hr_utility.debug_enabled;
1225     l_procedure := g_package ||'check_pf_update';
1226     pay_in_utils.set_location(g_debug,'Entering : '||l_procedure,10);
1227 
1228     IF g_debug THEN
1229          pay_in_utils.trace('**************************************************','********************');
1230          pay_in_utils.trace('p_effective_date',to_char(p_effective_date,'yyyy-mm-dd'));
1231          pay_in_utils.trace('p_dt_mode      ',p_dt_mode      );
1232 	 pay_in_utils.trace('p_assignment_id',to_char(p_assignment_id));
1233 	 pay_in_utils.trace('p_gre_org      ',p_gre_org      );
1234 	 pay_in_utils.trace('p_pf_org       ',p_pf_org       );
1235 	 pay_in_utils.trace('p_esi_org      ',p_esi_org      );
1236 	 pay_in_utils.trace('p_gre          ',to_char(p_gre));
1237 	 pay_in_utils.trace('p_pf           ',to_char(p_pf));
1238 	 pay_in_utils.trace('p_esi          ',to_char(p_esi));
1239 	 pay_in_utils.trace('**************************************************','********************');
1240    END IF;
1241 
1242    l_message_name:='SUCCESS';
1243    pay_in_utils.null_message(p_token_name, p_token_value);
1244 /*
1245    check_father_husband_name
1246            (p_assignment_id  =>p_assignment_id
1247            ,p_effective_date =>p_effective_date
1248            ,p_message_name   =>l_message_name
1249            ,p_token_value    =>l_token_value
1250            );
1251    IF l_message_name = 'PER_IN_CONTACT_DETAILS' THEN
1252            hr_utility.set_message(800, 'PER_IN_CONTACT_DETAILS');
1253            hr_utility.set_message_token('RELATION',l_token_value);
1254            hr_utility.raise_error;
1255    ELSIF l_message_name <> 'SUCCESS' THEN
1256            hr_utility.set_message(800, l_message_name);
1257            hr_utility.raise_error;
1258    END IF;
1259 */
1260    check_gre_update
1261          (p_effective_date  => p_effective_date
1262          ,p_dt_mode         => p_dt_mode
1263          ,p_assignment_id   => p_assignment_id
1264          ,p_gre_org         => p_gre_org
1265 	 ,p_pf_org          => p_pf_org
1266 	 ,p_esi_org         => p_esi_org
1267          ,p_gre             => p_gre
1268 	 ,p_pf              => p_pf
1269 	 ,p_esi             => p_esi
1270          ,p_message         => l_message_name
1271  	 ,p_token_name      => p_token_name
1272 	 ,p_token_value     => p_token_value
1273          );
1274 
1275    IF l_message_name <> 'SUCCESS' THEN
1276            pay_in_utils.raise_message(800, l_message_name, p_token_name, p_token_value);
1277    END IF;
1278 
1279    IF g_debug THEN
1280    	 pay_in_utils.trace('p_message',p_message);
1281    END IF;
1282 
1283    pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure,170);
1284 
1285 END check_pf_update;
1286 
1287 --------------------------------------------------------------------------
1288 --                                                                      --
1289 -- Name           : CHECK_ESI_UPDATE                                    --
1290 -- Type           : PROCEDURE                                           --
1291 -- Access         : Public                                              --
1292 -- Description    : Procedure to create PF ELement Entries              --
1293 -- Parameters     :                                                     --
1294 --             IN : p_effective_date      DATE                          --
1295 --                  p_dt_mode             VARCHAR2                      --
1296 --                  p_assignment_id       NUMBER                        --
1297 --                  p_esi_org             VARCHAR2                      --
1298 --            OUT : p_message             VARCHAR2                      --
1299 -- Change History :                                                     --
1300 --------------------------------------------------------------------------
1301 -- Rev#  Date       Userid    Description                               --
1302 --------------------------------------------------------------------------
1303 -- 1.0   05-Dec-04  statkar   Created this function                     --
1304 -- 1.1   14-Dec-04  aaagarwa  Added code for deleting ESI element entry --
1305 --                            when payroll has not been run.            --
1306 -- 1.2   27-Dec-04  lnagaraj  Used pay_in_utils.chk_element_link        --
1307 -- 1.3   24-Mar-05  aaagarwa  Modified the cursor c_esi                 --
1308 -- 1.4   10-Apr-05  abhjain   NULLed out the procedure                  --
1309 --------------------------------------------------------------------------
1310 PROCEDURE check_esi_update
1311          (p_effective_date   IN  DATE
1312          ,p_dt_mode          IN  VARCHAR2
1313          ,p_assignment_id    IN  NUMBER
1314          ,p_esi_org          IN  VARCHAR2
1315          ,p_message          OUT NOCOPY VARCHAR2
1316          )
1317 IS
1318 BEGIN
1319 
1320   NULL;
1321 
1322 END check_esi_update;
1323 
1324 --------------------------------------------------------------------------
1325 --                                                                      --
1326 -- Name           : in_reset_input                                      --
1327 -- Type           : FUNCTION                                            --
1328 -- Access         : Public                                              --
1329 -- Description    : Procedure to reset remarks of PF Information element--
1330 -- Parameters     :                                                     --
1331 --             IN : p_assignment_id           NUMBER                    --
1332 --                  p_element_entry_id        NUMBER                    --
1333 --                  p_business_group_id       NUMBER                    --
1334 --                  p_element_type_id         NUMBER                    --
1335 --                  p_date_earned             DATE                      --
1336 --                                                                      --
1337 -- Change History :                                                     --
1338 --------------------------------------------------------------------------
1339 -- Rev#  Date       Userid    Description                               --
1340 --------------------------------------------------------------------------
1341 -- 1.0   02-Jan-05  aaagarwa  Created this procedure                    --
1342 --------------------------------------------------------------------------
1343 
1344 Function in_reset_input_values(
1345 		       p_assignment_id     NUMBER
1346                       ,p_business_group_id NUMBER
1347                       ,p_element_type_id   NUMBER
1348                       ,p_element_entry_id  NUMBER
1349                       ,p_date              DATE
1350                       ,p_input_value       VARCHAR2)
1351 RETURN NUMBER IS
1352    Cursor c_ovn
1353    IS
1354    Select object_version_number
1355    From  pay_element_entries_f
1356    Where element_type_id = p_element_type_id
1357    And   assignment_id   = p_assignment_id
1358    And   p_date Between effective_start_date and effective_end_date;
1359 
1360    Cursor c_input_value_id
1361    IS
1362    Select input_value_id
1363    From pay_input_values_f
1364    Where element_type_id  = p_element_type_id
1365    And   p_date Between effective_start_date AND effective_end_date
1366    And   name=p_input_value;
1367 
1368    l_input_val_id           NUMBER;
1369    l_ovn                    NUMBER;
1370    l_effective_start_date   DATE;
1371    l_effective_end_date     DATE;
1372    l_warning                BOOLEAN;
1373    l_procedure varchar2(100);
1374 
1375 BEGIN
1376 g_debug          := hr_utility.debug_enabled;
1377 l_procedure := g_package ||'in_reset_input_values';
1378 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
1379 
1380 
1381 IF g_debug THEN
1382      pay_in_utils.trace('**************************************************','********************');
1383      pay_in_utils.trace('p_assignment_id    ',to_char(p_assignment_id    ));
1384      pay_in_utils.trace('p_business_group_id',to_char(p_business_group_id));
1385      pay_in_utils.trace('p_element_type_id  ',to_char(p_element_type_id  ));
1386      pay_in_utils.trace('p_element_entry_id ',to_char(p_element_entry_id ));
1387      pay_in_utils.trace('p_date             ',to_char(p_date,'yyyy-mm-dd'));
1388      pay_in_utils.trace('p_input_value      ',p_input_value);
1389      pay_in_utils.trace('**************************************************','********************');
1390 END IF;
1391 
1392    OPEN  c_ovn;
1393    FETCH c_ovn INTO  l_ovn;
1394    CLOSE c_ovn;
1395 
1396    OPEN  c_input_value_id;
1397    FETCH c_input_value_id INTO l_input_val_id;
1398    CLOSE c_input_value_id;
1399 
1400      pay_element_entry_api.update_element_entry
1401          (p_datetrack_update_mode         =>  'UPDATE'
1402          ,p_effective_date                =>  p_date+1
1403          ,p_business_group_id             =>  p_business_group_id
1404          ,p_element_entry_id              =>  p_element_entry_id
1405          ,p_object_version_number         =>  l_ovn
1406          ,p_input_value_id4               =>  l_input_val_id
1407          ,p_entry_value4                  =>  ' '
1408          ,p_effective_start_date          =>  l_effective_start_date
1409          ,p_effective_end_date            =>  l_effective_end_date
1410          ,p_update_warning                =>  l_warning
1411          );
1412 
1413    IF g_debug THEN
1414      pay_in_utils.trace('1','1');
1415    END IF;
1416 
1417    pay_in_utils.set_location(g_debug,'LEAVING: '||l_procedure,20);
1418 
1419     RETURN 1;
1420     EXCEPTION
1421       When OTHERS THEN
1422       BEGIN
1423 	      IF g_debug THEN
1424 		pay_in_utils.trace('0','0');
1425 	     END IF;
1426 
1427 	     pay_in_utils.set_location(g_debug,'LEAVING: '||l_procedure,20);
1428 
1429      RETURN 0;
1430      END;
1431 END in_reset_input_values;
1432 
1433 --------------------------------------------------------------------------
1434 -- Name           : check_pf_location                                   --
1435 -- Type           : Procedure                                           --
1436 -- Access         : Public                                              --
1437 -- Description    : Proc to be called for validation                    --
1438 -- Parameters     :                                                     --
1439 --             IN : p_organization_id      IN NUMBER                    --
1440 -- Change History :                                                     --
1441 --------------------------------------------------------------------------
1442 -- Rev#  Date       Userid    Description                               --
1443 --------------------------------------------------------------------------
1444 -- 1.0   24-Jan-05  aaagarwa  Created this procedure for validating loc --
1445 --------------------------------------------------------------------------
1446 PROCEDURE check_pf_location
1447             (p_organization_id    IN  NUMBER
1448             ,p_calling_procedure  IN  VARCHAR2
1449             ,p_message_name       OUT NOCOPY VARCHAR2
1450             ,p_token_name         OUT NOCOPY pay_in_utils.char_tab_type
1451             ,p_token_value        OUT NOCOPY pay_in_utils.char_tab_type)
1452 IS
1453    l_procedure  VARCHAR2(100);
1454 
1455   CURSOR csr_loc IS
1456    SELECT location_id
1457    FROM   hr_all_organization_units
1458    WHERE  organization_id = p_organization_id;
1459 
1460    l_location_id    hr_all_organization_units.location_id%TYPE;
1461 
1462 BEGIN
1463   g_debug          := hr_utility.debug_enabled;
1464   l_procedure := g_package ||'check_pf_location';
1465   pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
1466 
1467   p_message_name := 'SUCCESS';
1468   pay_in_utils.null_message(p_token_name, p_token_value);
1469 
1470 
1471  IF g_debug THEN
1472      pay_in_utils.trace('**************************************************','********************');
1473      pay_in_utils.trace('p_organization_id  ',to_char(p_organization_id));
1474      pay_in_utils.trace('p_calling_procedure',p_calling_procedure);
1475      pay_in_utils.trace('**************************************************','********************');
1476  END IF;
1477 
1478   OPEN csr_loc ;
1479   FETCH csr_loc
1480   INTO  l_location_id;
1481   pay_in_utils.set_location(g_debug,l_procedure,20);
1482 
1483   IF l_location_id IS NULL THEN
1484     CLOSE csr_loc;
1485     pay_in_utils.set_location(g_debug,l_procedure,30);
1486     p_message_name := 'PER_IN_NO_STATE_ENTERED';
1487     RETURN;
1488   END IF;
1489   CLOSE csr_loc;
1490 
1491   IF g_debug THEN
1492      pay_in_utils.trace('p_message_name     ',p_message_name     );
1493   END IF;
1494  pay_in_utils.set_location(g_debug,l_procedure,40);
1495  RETURN;
1496 
1497  EXCEPTION
1498      WHEN OTHERS THEN
1499        p_message_name   := 'PER_IN_ORACLE_GENERIC_ERROR';
1500        p_token_name(1)  := 'FUNCTION';
1501        p_token_value(1) := l_procedure;
1502        p_token_name(2)  := 'SQLERRMC';
1503        p_token_value(2) := sqlerrm;
1504        RETURN;
1505 
1506 END check_pf_location;
1507 --------------------------------------------------------------------------
1508 --                                                                      --
1509 -- Name           : GET_LWF_STATE                                           --
1510 -- Type           : FUNCTION                                            --
1511 -- Access         : Public                                              --
1512 -- Description    : Function to return the state associated with factory--
1513 --                   /Establishement Org                                --
1514 -- Parameters     :                                                     --
1515 --             IN : p_org               VARCHAR2                        --
1516 --            OUT : N/A                                                 --
1517 --         Return : VARCHAR2                                            --
1518 -- Change History :                                                     --
1519 --------------------------------------------------------------------------
1520 -- Rev#  Date       Userid    Description                               --
1521 --------------------------------------------------------------------------
1522 -- 1.0   25-OCT-07  sivanara   Created this function                    --
1523 --------------------------------------------------------------------------
1524 
1525   FUNCTION get_lwf_state (p_organization_id  IN NUMBER)
1526   RETURN VARCHAR2
1527   IS
1528      l_message          VARCHAR2(255);
1529      CURSOR csr_state IS
1530        SELECT  hl.loc_information16
1531         FROM    hr_all_organization_units hou
1532 	              ,hr_locations hl
1533         WHERE  hou.organization_id = p_organization_id
1534         AND    hou.location_id = hl.location_id
1535         AND    hl.style = 'IN';
1536 --
1537     l_state   hr_lookups.lookup_code%TYPE;
1538     l_procedure VARCHAR2(100);
1539   BEGIN
1540      l_procedure := g_package||'get_lwf_state';
1541      g_debug          := hr_utility.debug_enabled;
1542      pay_in_utils.set_location(g_debug,'Entering : '||l_procedure, 10);
1543      OPEN csr_state ;
1544      FETCH csr_state INTO l_state;
1545      pay_in_utils.set_location (g_debug,'l_state = '||l_state,20);
1546      CLOSE csr_state;
1547      pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 30);
1548      RETURN l_state;
1549   EXCEPTION
1550      WHEN OTHERS THEN
1551        l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
1552        pay_in_utils.set_location(g_debug,' Leaving : '||l_procedure, 40);
1553        hr_utility.trace(l_message);
1554        RETURN NULL;
1555   END get_lwf_state;
1556 
1557 --------------------------------------------------------------------------
1558 -- Name           : get_org_id                                          --
1559 -- Type           : Function                                            --
1560 -- Access         : Public                                              --
1561 -- Description    : Function to get the Org Id of PF/ESI/PT Organization--
1562 --                  on a particular date                                --
1563 -- Parameters     :                                                     --
1564 --             IN : p_assignment_id        IN NUMBER                    --
1565 --                  p_business_group_id    IN NUMBER                    --
1566 --                  p_date                 IN DATE                      --
1567 --                  p_org_type             IN VARCHAR2                  --
1568 -- Change History :                                                     --
1569 --------------------------------------------------------------------------
1570 -- Rev#  Date       Userid    Description                               --
1571 --------------------------------------------------------------------------
1572 -- 1.0   08-Apr-05  abhjain   Created this function to get the org id   --
1573 --------------------------------------------------------------------------
1574 FUNCTION get_org_id(p_assignment_id     IN NUMBER
1575                    ,p_business_group_id IN NUMBER
1576                    ,p_date              IN DATE
1577                    ,p_org_type          IN VARCHAR2)
1578 RETURN NUMBER
1579 IS
1580   CURSOR cur_org (p_assignment_id      NUMBER
1581                  ,p_business_group_id  NUMBER
1582                  ,p_date               DATE)
1583        IS
1584    SELECT hsc.segment2
1585          ,hsc.segment3
1586          ,hsc.segment4
1587      FROM per_assignments_f      paf
1588          ,hr_soft_coding_keyflex hsc
1589     WHERE paf.assignment_id = p_assignment_id
1590       AND paf.soft_coding_keyflex_id = hsc.soft_coding_keyflex_id
1591       AND paf.business_group_id = p_business_group_id
1592       AND p_date BETWEEN paf.effective_start_date
1593                      AND paf.effective_end_date;
1594 
1595   l_segment2 hr_soft_coding_keyflex.segment1%TYPE;
1596   l_segment3 hr_soft_coding_keyflex.segment1%TYPE;
1597   l_segment4 hr_soft_coding_keyflex.segment1%TYPE;
1598   l_message   VARCHAR2(255);
1599   l_procedure VARCHAR2(100);
1600 
1601 BEGIN
1602 
1603   l_procedure := g_package||'get_org_id';
1604   g_debug          := hr_utility.debug_enabled;
1605   pay_in_utils.set_location(g_debug,'Entering : '||l_procedure, 10);
1606 
1607   IF g_debug THEN
1608      pay_in_utils.trace('**************************************************','********************');
1609      pay_in_utils.trace('p_assignment_id    ',to_char(p_assignment_id));
1610      pay_in_utils.trace('p_business_group_id',to_char(p_business_group_id));
1611      pay_in_utils.trace('p_date             ',to_char(p_date,'yyyy-mm-dd'));
1612      pay_in_utils.trace('p_org_type         ',p_org_type         );
1613      pay_in_utils.trace('**************************************************','********************');
1614 END IF;
1615 
1616   OPEN cur_org (p_assignment_id
1617                ,p_business_group_id
1618                ,p_date);
1619   FETCH cur_org into l_segment2
1620                     ,l_segment3
1621                     ,l_segment4;
1622   pay_in_utils.set_location (g_debug,'l_segment2 = '||l_segment2,20);
1623   pay_in_utils.set_location (g_debug,'l_segment3 = '||l_segment3,30);
1624   pay_in_utils.set_location (g_debug,'l_segment4 = '||l_segment4,40);
1625   CLOSE cur_org;
1626 
1627   IF p_org_type = 'PF' THEN
1628      return to_number(l_segment2);
1629   ELSIF p_org_type = 'PT' THEN
1630      return to_number(l_segment3);
1631   ELSIF p_org_type = 'ESI' THEN
1632      return to_number(l_segment4);
1633   END IF;
1634 
1635   pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 30);
1636 
1637 EXCEPTION
1638      WHEN OTHERS THEN
1639        l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
1640        pay_in_utils.set_location(g_debug,' Leaving : '||l_procedure, 30);
1641        hr_utility.trace(l_message);
1642        RETURN NULL;
1643 
1644 
1645 END get_org_id;
1646 
1647 END pay_in_ff_pkg;
1648