DBA Data[Home] [Help]

PACKAGE BODY: APPS.BEN_ENROLMENT_REQUIREMENTS1

Source


1 PACKAGE BODY ben_enrolment_requirements1 AS
2 /* $Header: bendenr1.pkb 120.2.12010000.2 2008/08/05 14:38:34 ubhat ship $ */
3 -------------------------------------------------------------------------------
4 /*
5 +=============================================================================+
6 |                       Copyright (c) 1998 Oracle Corporation                 |
7 |                          Redwood Shores, California, USA                    |
8 |                               All rights reserved.                          |
9 +=============================================================================+
10 --
11 History
12      Date       Who          Version   What?
13      ----       ---          -------   -----
14      24 Jan 06  mhoyes       115.0     Created.
15      13-Feb-05  mhoyes       115.4   - bug5031107. Moved locally defined procedures
16                                        to ben_enrolment_requirements1.
17      28-Apr-05  mhoyes       115.5   - bug5152911. Added GetPenPerIDMxESD.
18                                        Re-wrote cursor c_getpenesd in plsql.
19 */
20 -------------------------------------------------------------------------------
21 PROCEDURE determine_ben_settings(
22   p_pl_id                     IN     ben_ler_chg_pl_nip_enrt_f.pl_id%TYPE,
23   p_ler_id                    IN     ben_ler_chg_pl_nip_enrt_f.ler_id%TYPE,
24   p_lf_evt_ocrd_dt            IN     DATE,
25   p_ptip_id                   IN     ben_ler_chg_ptip_enrt_f.ptip_id%TYPE,
26   p_pgm_id                    IN     ben_ler_chg_pgm_enrt_f.pgm_id%TYPE,
27   p_plip_id                   IN     ben_ler_chg_plip_enrt_f.plip_id%TYPE,
28   p_oipl_id                   IN     ben_ler_chg_oipl_enrt_f.oipl_id%TYPE,
29   p_just_prclds_chg_flag      IN     BOOLEAN DEFAULT FALSE,
30   p_enrt_cd                   OUT NOCOPY    ben_ler_chg_oipl_enrt_f.enrt_cd%TYPE,
31   p_enrt_rl                   OUT NOCOPY    ben_ler_chg_oipl_enrt_f.enrt_rl%TYPE,
32   p_auto_enrt_mthd_rl         OUT NOCOPY    ben_ler_chg_oipl_enrt_f.auto_enrt_mthd_rl%TYPE,
33   p_crnt_enrt_prclds_chg_flag OUT NOCOPY    ben_ler_chg_oipl_enrt_f.crnt_enrt_prclds_chg_flag%TYPE,
34   p_dflt_flag                 OUT NOCOPY    ben_ler_chg_oipl_enrt_f.dflt_flag%TYPE,
35   p_enrt_mthd_cd              OUT NOCOPY    ben_ler_chg_pgm_enrt_f.enrt_mthd_cd%TYPE,
36   p_stl_elig_cant_chg_flag    OUT NOCOPY    ben_ler_chg_oipl_enrt_f.stl_elig_cant_chg_flag%TYPE,
37   p_tco_chg_enrt_cd           OUT NOCOPY    ben_ler_chg_ptip_enrt_f.tco_chg_enrt_cd%TYPE,
38   p_ler_chg_oipl_found_flag   OUT NOCOPY    VARCHAR2,
39   p_ler_chg_found_flag        OUT NOCOPY    VARCHAR2,
40   p_enrt_cd_level             OUT NOCOPY    VARCHAR2 ) IS
41   -- ========================
42   -- define the local cursors
43   -- ========================
44   CURSOR csr_oipl IS
45     SELECT   oipl.auto_enrt_flag,
46              oipl.auto_enrt_mthd_rl,
47              oipl.crnt_enrt_prclds_chg_flag,
48              oipl.dflt_flag,
49              oipl.enrt_cd,
50              oipl.enrt_rl,
51              oipl.ler_chg_oipl_enrt_id,
52              oipl.stl_elig_cant_chg_flag
53     FROM     ben_ler_chg_oipl_enrt_f oipl
54     WHERE    oipl.oipl_id = p_oipl_id
55     AND      oipl.ler_id = p_ler_id
56     AND      p_lf_evt_ocrd_dt BETWEEN oipl.effective_start_date
57                  AND oipl.effective_end_date;
58   --
59   CURSOR csr_pgm IS
60     SELECT   pgm.auto_enrt_mthd_rl,
61              pgm.crnt_enrt_prclds_chg_flag,
62              pgm.enrt_cd,
63              pgm.enrt_mthd_cd,
64              pgm.enrt_rl,
65              pgm.ler_chg_pgm_enrt_id,
66              pgm.stl_elig_cant_chg_flag
67     FROM     ben_ler_chg_pgm_enrt_f pgm
68     WHERE    pgm.pgm_id = p_pgm_id
69     AND      pgm.ler_id = p_ler_id
70     AND      p_lf_evt_ocrd_dt BETWEEN pgm.effective_start_date
71                  AND pgm.effective_end_date;
72   --
73   CURSOR csr_ptip IS
74     SELECT   ptip.crnt_enrt_prclds_chg_flag,
75              ptip.enrt_cd,
76              ptip.enrt_mthd_cd,
77              ptip.enrt_rl,
78              ptip.ler_chg_ptip_enrt_id,
79              ptip.stl_elig_cant_chg_flag,
80              ptip.tco_chg_enrt_cd
81     FROM     ben_ler_chg_ptip_enrt_f ptip
82     WHERE    ptip.ptip_id = p_ptip_id
83     AND      ptip.ler_id = p_ler_id
84     AND      p_lf_evt_ocrd_dt BETWEEN ptip.effective_start_date
85                  AND ptip.effective_end_date;
86   --
87   CURSOR csr_plip IS
88     SELECT   plip.auto_enrt_mthd_rl,
89              plip.crnt_enrt_prclds_chg_flag,
90              plip.dflt_flag,
91              plip.enrt_cd,
92              plip.enrt_mthd_cd,
93              plip.enrt_rl,
94              plip.ler_chg_plip_enrt_id,
95              plip.stl_elig_cant_chg_flag,
96              plip.tco_chg_enrt_cd
97     FROM     ben_ler_chg_plip_enrt_f plip
98     WHERE    plip.plip_id = p_plip_id
99     AND      plip.ler_id = p_ler_id
100     AND      p_lf_evt_ocrd_dt BETWEEN plip.effective_start_date
101                  AND plip.effective_end_date;
102   --
103   CURSOR csr_pl_nip IS
104     SELECT   pl_nip.auto_enrt_mthd_rl,
105              pl_nip.crnt_enrt_prclds_chg_flag,
106              pl_nip.dflt_flag,
107              pl_nip.enrt_cd,
108              pl_nip.enrt_mthd_cd,
109              pl_nip.enrt_rl,
110              pl_nip.ler_chg_pl_nip_enrt_id,
111              pl_nip.stl_elig_cant_chg_flag,
112              pl_nip.tco_chg_enrt_cd
113     FROM     ben_ler_chg_pl_nip_enrt_f pl_nip
114     WHERE    pl_nip.pl_id = p_pl_id
115     AND      pl_nip.ler_id = p_ler_id
116     AND      p_lf_evt_ocrd_dt BETWEEN pl_nip.effective_start_date
117                  AND pl_nip.effective_end_date;
118   -- ======================
119   -- define local variables
120   -- ======================
121   oipl_auto_enrt_flag            ben_ler_chg_oipl_enrt_f.auto_enrt_flag%TYPE;
122   oipl_auto_enrt_mthd_rl         ben_ler_chg_oipl_enrt_f.auto_enrt_mthd_rl%TYPE;
123   oipl_crnt_enrt_prclds_chg_flag ben_ler_chg_oipl_enrt_f.crnt_enrt_prclds_chg_flag%TYPE;
124   oipl_dflt_flag                 ben_ler_chg_oipl_enrt_f.dflt_flag%TYPE;
125   oipl_enrt_cd                   ben_ler_chg_oipl_enrt_f.enrt_cd%TYPE;
126   oipl_enrt_rl                   ben_ler_chg_oipl_enrt_f.enrt_rl%TYPE;
127   oipl_ler_chg_oipl_enrt_id      ben_ler_chg_oipl_enrt_f.ler_chg_oipl_enrt_id%TYPE;
128   oipl_stl_elig_cant_chg_flag    ben_ler_chg_oipl_enrt_f.stl_elig_cant_chg_flag%TYPE;
129   pgm_auto_enrt_mthd_rl          ben_ler_chg_pgm_enrt_f.auto_enrt_mthd_rl%TYPE;
130   pgm_crnt_enrt_prclds_chg_flag  ben_ler_chg_pgm_enrt_f.crnt_enrt_prclds_chg_flag%TYPE;
131   pgm_enrt_cd                    ben_ler_chg_pgm_enrt_f.enrt_cd%TYPE;
132   pgm_enrt_mthd_cd               ben_ler_chg_pgm_enrt_f.enrt_mthd_cd%TYPE;
133   pgm_enrt_rl                    ben_ler_chg_pgm_enrt_f.enrt_rl%TYPE;
134   pgm_ler_chg_pgm_enrt_id        ben_ler_chg_pgm_enrt_f.ler_chg_pgm_enrt_id%TYPE;
135   pgm_stl_elig_cant_chg_flag     ben_ler_chg_pgm_enrt_f.stl_elig_cant_chg_flag%TYPE;
136   pnip_auto_enrt_mthd_rl         ben_ler_chg_pl_nip_enrt_f.auto_enrt_mthd_rl%TYPE;
137   pnip_crnt_enrt_prclds_chg_flag ben_ler_chg_pl_nip_enrt_f.crnt_enrt_prclds_chg_flag%TYPE;
138   pnip_dflt_flag                 ben_ler_chg_pl_nip_enrt_f.dflt_flag%TYPE;
139   pnip_enrt_cd                   ben_ler_chg_pl_nip_enrt_f.enrt_cd%TYPE;
140   pnip_enrt_mthd_cd              ben_ler_chg_pl_nip_enrt_f.enrt_mthd_cd%TYPE;
141   pnip_enrt_rl                   ben_ler_chg_pl_nip_enrt_f.enrt_rl%TYPE;
142   pnip_ler_chg_pnip_enrt_id      ben_ler_chg_pl_nip_enrt_f.ler_chg_pl_nip_enrt_id%TYPE;
143   pnip_stl_elig_cant_chg_flag    ben_ler_chg_pl_nip_enrt_f.stl_elig_cant_chg_flag%TYPE;
144   pnip_tco_chg_enrt_cd           ben_ler_chg_pl_nip_enrt_f.tco_chg_enrt_cd%TYPE;
145   plip_auto_enrt_mthd_rl         ben_ler_chg_plip_enrt_f.auto_enrt_mthd_rl%TYPE;
146   plip_crnt_enrt_prclds_chg_flag ben_ler_chg_plip_enrt_f.crnt_enrt_prclds_chg_flag%TYPE;
147   plip_dflt_flag                 ben_ler_chg_plip_enrt_f.dflt_flag%TYPE;
148   plip_enrt_cd                   ben_ler_chg_plip_enrt_f.enrt_cd%TYPE;
149   plip_enrt_mthd_cd              ben_ler_chg_plip_enrt_f.enrt_mthd_cd%TYPE;
150   plip_enrt_rl                   ben_ler_chg_plip_enrt_f.enrt_rl%TYPE;
151   plip_ler_chg_plip_enrt_id      ben_ler_chg_plip_enrt_f.ler_chg_plip_enrt_id%TYPE;
152   plip_stl_elig_cant_chg_flag    ben_ler_chg_plip_enrt_f.stl_elig_cant_chg_flag%TYPE;
153   plip_tco_chg_enrt_cd           ben_ler_chg_plip_enrt_f.tco_chg_enrt_cd%TYPE;
154   ptip_crnt_enrt_prclds_chg_flag ben_ler_chg_ptip_enrt_f.crnt_enrt_prclds_chg_flag%TYPE;
155   ptip_enrt_cd                   ben_ler_chg_ptip_enrt_f.enrt_cd%TYPE;
156   ptip_enrt_mthd_cd              ben_ler_chg_ptip_enrt_f.enrt_mthd_cd%TYPE;
157   ptip_enrt_rl                   ben_ler_chg_ptip_enrt_f.enrt_rl%TYPE;
158   ptip_ler_chg_ptip_enrt_id      ben_ler_chg_ptip_enrt_f.ler_chg_ptip_enrt_id%TYPE;
159   ptip_stl_elig_cant_chg_flag    ben_ler_chg_ptip_enrt_f.stl_elig_cant_chg_flag%TYPE;
160   ptip_tco_chg_enrt_cd           ben_ler_chg_ptip_enrt_f.tco_chg_enrt_cd%TYPE;
161 BEGIN
162   --
163   g_debug := hr_utility.debug_enabled;
164   --
165 -- ============================================
166 -- open,fetch and close each cursor if required
167 -- ============================================
168   IF p_ler_id IS NOT NULL THEN
169     IF p_oipl_id IS NOT NULL THEN
170       OPEN csr_oipl;
171       FETCH csr_oipl INTO oipl_auto_enrt_flag,
172                           oipl_auto_enrt_mthd_rl,
173                           oipl_crnt_enrt_prclds_chg_flag,
174                           oipl_dflt_flag,
175                           oipl_enrt_cd,
176                           oipl_enrt_rl,
177                           oipl_ler_chg_oipl_enrt_id,
178                           oipl_stl_elig_cant_chg_flag;
179       CLOSE csr_oipl;
180     END IF;
181     IF p_pl_id IS NOT NULL THEN
182       OPEN csr_pl_nip;
183       FETCH csr_pl_nip INTO pnip_auto_enrt_mthd_rl,
184                             pnip_crnt_enrt_prclds_chg_flag,
185                             pnip_dflt_flag,
186                             pnip_enrt_cd,
187                             pnip_enrt_mthd_cd,
188                             pnip_enrt_rl,
189                             pnip_ler_chg_pnip_enrt_id,
190                             pnip_stl_elig_cant_chg_flag,
191                             pnip_tco_chg_enrt_cd;
192       CLOSE csr_pl_nip;
193     END IF;
194     IF p_plip_id IS NOT NULL THEN
195       OPEN csr_plip;
196       FETCH csr_plip INTO plip_auto_enrt_mthd_rl,
197                           plip_crnt_enrt_prclds_chg_flag,
198                           plip_dflt_flag,
199                           plip_enrt_cd,
200                           plip_enrt_mthd_cd,
201                           plip_enrt_rl,
202                           plip_ler_chg_plip_enrt_id,
203                           plip_stl_elig_cant_chg_flag,
204                           plip_tco_chg_enrt_cd;
205       CLOSE csr_plip;
206     END IF;
207     IF p_ptip_id IS NOT NULL THEN
208       OPEN csr_ptip;
209       FETCH csr_ptip INTO ptip_crnt_enrt_prclds_chg_flag,
210                           ptip_enrt_cd,
211                           ptip_enrt_mthd_cd,
212                           ptip_enrt_rl,
213                           ptip_ler_chg_ptip_enrt_id,
214                           ptip_stl_elig_cant_chg_flag,
215                           ptip_tco_chg_enrt_cd;
216       CLOSE csr_ptip;
217     END IF;
218     IF p_pgm_id IS NOT NULL THEN
219       OPEN csr_pgm;
220       FETCH csr_pgm INTO pgm_auto_enrt_mthd_rl,
221                          pgm_crnt_enrt_prclds_chg_flag,
222                          pgm_enrt_cd,
223                          pgm_enrt_mthd_cd,
224                          pgm_enrt_rl,
225                          pgm_ler_chg_pgm_enrt_id,
226                          pgm_stl_elig_cant_chg_flag;
227       CLOSE csr_pgm;
228     END IF;
229     -- ==========================================
230     -- determine and SET the OUT parameter values
231     -- ==========================================
232     -- --------------------------------
233     -- set: p_crnt_enrt_prclds_chg_flag
234     -- --------------------------------
235     IF oipl_crnt_enrt_prclds_chg_flag IS NULL THEN
236       IF pnip_crnt_enrt_prclds_chg_flag IS NULL THEN
237         IF plip_crnt_enrt_prclds_chg_flag IS NULL THEN
238           IF ptip_crnt_enrt_prclds_chg_flag IS NULL THEN
239             p_crnt_enrt_prclds_chg_flag :=  pgm_crnt_enrt_prclds_chg_flag;
240           ELSE
241             p_crnt_enrt_prclds_chg_flag :=  ptip_crnt_enrt_prclds_chg_flag;
242           END IF;
243         ELSE
244           p_crnt_enrt_prclds_chg_flag :=  plip_crnt_enrt_prclds_chg_flag;
245         END IF;
246       ELSE
247         p_crnt_enrt_prclds_chg_flag :=  pnip_crnt_enrt_prclds_chg_flag;
248       END IF;
249     ELSE
250       p_crnt_enrt_prclds_chg_flag :=  oipl_crnt_enrt_prclds_chg_flag;
251     END IF;
252     -- test to see if only the p_crnt_enrt_prclds_chg_flag is required
253     --IF p_just_prclds_chg_flag THEN
254     --  RETURN;
255     --END IF;
256     -- ----------------------------
257     -- set: p_enrt_cd and p_enrt_rl
258     -- ----------------------------
259     --
260    if g_debug then
261      hr_utility.set_location( 'oipl' || oipl_enrt_cd , 10) ;
262      hr_utility.set_location( 'pl' || pnip_enrt_cd , 10) ;
263      hr_utility.set_location( 'plip' || plip_enrt_cd , 10);
264      hr_utility.set_location( 'ptip' || ptip_enrt_cd , 10) ;
265      hr_utility.set_location( 'oipl id ' || p_oipl_id , 10) ;
266      hr_utility.set_location( 'ptip id ' || p_ptip_id , 10) ;
267      hr_utility.set_location( 'plip id ' || p_plip_id , 10) ;
268    end if;
269    --
270       IF oipl_enrt_cd IS NULL THEN
271       IF pnip_enrt_cd IS NULL THEN
272         IF plip_enrt_cd IS NULL THEN
273           IF ptip_enrt_cd IS NULL THEN
274             p_enrt_cd      :=  pgm_enrt_cd;
275             p_enrt_rl      :=  pgm_enrt_rl;
276             p_enrt_cd_level:= 'PGM' ;
277           ELSE
278             p_enrt_cd :=  ptip_enrt_cd;
279             p_enrt_rl :=  ptip_enrt_rl;
280             p_enrt_cd_level := 'PTIP' ;
281           END IF;
282         ELSE
283           p_enrt_cd :=  plip_enrt_cd;
284           p_enrt_rl :=  plip_enrt_rl;
285           p_enrt_cd_level := 'PLIP' ;
286         END IF;
287       ELSE
288         p_enrt_cd :=  pnip_enrt_cd;
289         p_enrt_rl :=  pnip_enrt_rl;
290         p_enrt_cd_level := 'PL' ;
291       END IF;
292     ELSE
293       p_enrt_cd :=  oipl_enrt_cd;
294       p_enrt_rl :=  oipl_enrt_rl;
295       p_enrt_cd_level := 'OIPL' ;
296     END IF;
297     --
298     if g_debug then
299       hr_utility.set_location( 'p_enrt_cd_level  ' || p_enrt_cd_level , 10) ;
300     end if;
301     --
302      IF p_just_prclds_chg_flag THEN
303       RETURN;
304     END IF;
305 
306     -- ------------------------
307     -- set: p_auto_enrt_mthd_rl
308     -- ------------------------
309     IF oipl_auto_enrt_mthd_rl IS NULL THEN
310       IF pnip_auto_enrt_mthd_rl IS NULL THEN
311         IF plip_auto_enrt_mthd_rl IS NULL THEN
312           p_auto_enrt_mthd_rl :=  pgm_auto_enrt_mthd_rl;
313         ELSE
314           p_auto_enrt_mthd_rl :=  plip_auto_enrt_mthd_rl;
315         END IF;
316       ELSE
317         p_auto_enrt_mthd_rl :=  pnip_auto_enrt_mthd_rl;
318       END IF;
319     ELSE
320       p_auto_enrt_mthd_rl :=  oipl_auto_enrt_mthd_rl;
321     END IF;
322     -- ----------------
323     -- set: p_dflt_flag
324     -- ----------------
325     IF oipl_dflt_flag IS NULL THEN
326       IF pnip_dflt_flag IS NULL THEN
327         p_dflt_flag :=  plip_dflt_flag;
328       ELSE
329         p_dflt_flag :=  pnip_dflt_flag;
330       END IF;
331     ELSE
332       p_dflt_flag :=  oipl_dflt_flag;
333     END IF;
334     -- -------------------
335     -- set: p_enrt_mthd_cd
336     -- -------------------
337     IF oipl_auto_enrt_flag = 'Y' THEN
338       p_enrt_mthd_cd :=  'A';
339     ELSIF oipl_auto_enrt_flag = 'N' THEN
340       p_enrt_mthd_cd :=  'E';
341     ELSE
342       IF pnip_enrt_mthd_cd IS NULL THEN
343         IF plip_enrt_mthd_cd IS NULL THEN
344           IF ptip_enrt_mthd_cd IS NULL THEN
345             p_enrt_mthd_cd :=  pgm_enrt_mthd_cd;
346           ELSE
350           p_enrt_mthd_cd :=  plip_enrt_mthd_cd;
347             p_enrt_mthd_cd :=  ptip_enrt_mthd_cd;
348           END IF;
349         ELSE
351         END IF;
352       ELSE
353         p_enrt_mthd_cd :=  pnip_enrt_mthd_cd;
354       END IF;
355     END IF;
356     -- -----------------------------
357     -- set: p_stl_elig_cant_chg_flag
358     -- -----------------------------
359     IF oipl_stl_elig_cant_chg_flag IS NULL THEN
360       IF pnip_stl_elig_cant_chg_flag IS NULL THEN
361         IF plip_stl_elig_cant_chg_flag IS NULL THEN
362           IF ptip_stl_elig_cant_chg_flag IS NULL THEN
363             p_stl_elig_cant_chg_flag :=  pgm_stl_elig_cant_chg_flag;
364           ELSE
365             p_stl_elig_cant_chg_flag :=  ptip_stl_elig_cant_chg_flag;
366           END IF;
367         ELSE
368           p_stl_elig_cant_chg_flag :=  plip_stl_elig_cant_chg_flag;
369         END IF;
370       ELSE
371         p_stl_elig_cant_chg_flag :=  pnip_stl_elig_cant_chg_flag;
372       END IF;
373     ELSE
374       p_stl_elig_cant_chg_flag :=  oipl_stl_elig_cant_chg_flag;
375     END IF;
376     -- ----------------------
377     -- set: p_tco_chg_enrt_cd
378     -- ----------------------
379     IF pnip_tco_chg_enrt_cd IS NULL THEN
380       IF plip_tco_chg_enrt_cd IS NULL THEN
381         p_tco_chg_enrt_cd :=  ptip_tco_chg_enrt_cd;
382       ELSE
383         p_tco_chg_enrt_cd :=  plip_tco_chg_enrt_cd;
384       END IF;
385     ELSE
386       p_tco_chg_enrt_cd :=  pnip_tco_chg_enrt_cd;
387     END IF;
388     -- -------------------------------------------------------
389     -- set: p_ler_chg_oipl_found_flag and p_ler_chg_found_flag
390     -- -------------------------------------------------------
391     IF oipl_ler_chg_oipl_enrt_id IS NULL THEN
392       p_ler_chg_oipl_found_flag :=  'N';
393       IF     plip_ler_chg_plip_enrt_id IS NULL
394          AND ptip_ler_chg_ptip_enrt_id IS NULL
395          AND pnip_ler_chg_pnip_enrt_id IS NULL
396          AND pgm_ler_chg_pgm_enrt_id IS NULL THEN
397         p_ler_chg_found_flag :=  'N';
398       ELSE
399         p_ler_chg_found_flag :=  'Y';
400       END IF;
401     ELSE
402       p_ler_chg_oipl_found_flag :=  'Y';
403       p_ler_chg_found_flag :=       'Y';
404     END IF;
405   END IF;
406   --
407   if g_debug then
408     hr_utility.set_location( 'p_enrt_cd_level  ' || p_enrt_cd_level , 10) ;
409   end if;
410   --
411 exception
412   --
413   when others then
414     --
415     p_enrt_cd                   := null;
416     p_enrt_rl                   := null;
417     p_auto_enrt_mthd_rl         := null;
418     p_crnt_enrt_prclds_chg_flag := null;
419     p_dflt_flag                 := null;
420     p_enrt_mthd_cd              := null;
421     p_stl_elig_cant_chg_flag    := null;
422     p_tco_chg_enrt_cd           := null;
423     p_ler_chg_oipl_found_flag   := null;
424     p_ler_chg_found_flag        := null;
425     raise;
426     --
427 END determine_ben_settings;
428 --
429 procedure GetPenPerIDMxESD
430   (p_person_id             number
431   ,p_business_group_id     number
432   --
433   ,p_penmxesd          out nocopy date
434   )
435 is
436   --
437   type g_date_table is varray(10000) of date;
438   --
439   l_penesd_va    g_date_table     := g_date_table();
440   l_penectdt_va  g_date_table     := g_date_table();
441   --
442   cursor c_getpenesd
443     (c_bgp_id  number
444     ,c_per_id  number
445     )
446   is
447     select /*+ c_getpenesd ben_enrolment_requirements1 */
448            rslt.effective_start_date,
449            rslt.enrt_cvg_thru_dt
450     from   ben_prtt_enrt_rslt_f rslt,ben_ler_f ler
451     where  rslt.person_id = c_per_id
452     and ler.ler_id=rslt.ler_id
453     and rslt.prtt_enrt_rslt_stat_cd is null
454     and   ler.typ_cd   not in ('COMP','ABS', 'GSP', 'IREC','SCHEDDU' )
455     and    rslt.business_group_id = c_bgp_id;
456   --
457   l_mxpenesd  date;
458   l_lertyp_cd varchar2(100);
459   l_match     boolean;
460   --
461 begin
462   --
463   open c_getpenesd
464     (c_bgp_id => p_business_group_id
465     ,c_per_id => p_person_id
466     );
467   fetch c_getpenesd BULK COLLECT INTO l_penesd_va, l_penectdt_va;
468   close c_getpenesd;
469   --
470   if l_penesd_va.count > 0
471   then
472     --
473     l_mxpenesd := hr_api.g_sot;
474     --
475     for vaen in l_penesd_va.first..l_penesd_va.last
476     loop
477       --
478       if nvl(l_penectdt_va(vaen),hr_api.g_sot) = hr_api.g_eot
479       then
480         --
481         if nvl(l_penesd_va(vaen),hr_api.g_sot) > l_mxpenesd
482         then
483           --
484           l_mxpenesd := l_penesd_va(vaen);
485           --
486         end if;
487         --
488       end if;
489       --
490     end loop;
491     --
492   else
493     --
494     l_mxpenesd := null;
495     --
496   end if;
497   --
498   p_penmxesd := l_mxpenesd;
499   --
500 end GetPenPerIDMxESD;
501 --
502 procedure enrt_perd_strt_dt
503   (p_person_id 				in 	number
504    ,p_lf_evt_ocrd_dt 			in 	date
505    ,p_enrt_perd_det_ovrlp_bckdt_cd 	in 	varchar2
509    ,p_rec_enrt_perd_strt_dt 		in out 	nocopy date
506    ,p_business_group_id                 in      number
507    ,p_ler_id                            in      number
508    ,p_effective_date                    in      date
510    )
511 IS
512   -- local variables
513   l_proc             varchar2 (72) := 'ben_enrolment_requirements1.enrt_perd_strt_dt';
514   l_latest_procd_dt  date;
515   l_backed_out_date  date;
516   l_latest_enrt_dt   date;
517   l_lf_evt_ocrd_dt   date := NVL(p_lf_evt_ocrd_dt, p_effective_date);
518   -- store sysdate sans the time component into a local variable for once
519   l_sysdate          date := trunc(sysdate);
520   -- define cursors
521   CURSOR c_get_latest_procd_dt IS
522     SELECT   MAX(pil.procd_dt)
523     FROM     ben_per_in_ler pil
524             -- CWB changes
525             ,ben_ler_f      ler
526     WHERE    pil.person_id = p_person_id
527     AND      pil.ler_id    = ler.ler_id
528     and      ler.typ_cd   not in ('COMP','ABS', 'GSP', 'IREC','SCHEDDU')
529     and      l_lf_evt_ocrd_dt between
530              ler.effective_start_date and ler.effective_end_date
531     AND      pil.business_group_id = p_business_group_id
532     AND      pil.per_in_ler_stat_cd NOT IN ('BCKDT', 'VOIDD')
533     AND      pil.procd_dt IS NOT NULL;
534   --
535   CURSOR c_backed_out_ler IS
536     SELECT   MAX(pil.bckt_dt)
537     FROM     ben_per_in_ler pil
538             -- CWB changes
539             ,ben_ler_f      ler
540             ,ben_ptnl_ler_for_per  plr
541     WHERE    pil.person_id = p_person_id
542     AND      pil.ler_id    = ler.ler_id
543     and      ler.typ_cd   not in ('COMP','ABS', 'GSP', 'IREC','SCHEDDU')
544     and      l_lf_evt_ocrd_dt between
545              ler.effective_start_date and ler.effective_end_date
546     AND      pil.business_group_id = p_business_group_id
547     AND      pil.ler_id = p_ler_id
548     AND      pil.lf_evt_ocrd_dt = p_lf_evt_ocrd_dt
549     AND      pil.bckt_dt IS NOT NULL
550     and      pil.per_in_ler_stat_cd = 'BCKDT' -- 3063867
551     and      pil.ptnl_ler_for_per_id   = plr.ptnl_ler_for_per_id  --3248770
552     and      plr.ptnl_ler_for_per_stat_cd <> 'VOIDD' ;
553   --
554 
555   -- 2746865
556   -- cursor to select a person's maximum enrollment start date
557   -- Changed the following cursor for bug 3137519 to exclude GSP/ABS/COMP ler types.
558   -- Also included status no in backdt/voidd clause
559   --bug#3697378 - discussed with Phil why we add + 1 to the latest enrollment
560   --however he wanted this to be removed so that self service open enrollment
561   --will not be impacted and asked find ways to show history on enrollment results later
562   cursor c_get_latest_enrt_dt is
563     select max(rslt.effective_start_date)
564     from   ben_prtt_enrt_rslt_f rslt,ben_ler_f ler
565      where  rslt.person_id = p_person_id
566     and ler.ler_id=rslt.ler_id
567   --  and rslt.prtt_enrt_rslt_stat_cd NOT IN ('BCKDT', 'VOIDD')
568     and rslt.prtt_enrt_rslt_stat_cd is null
569     and   ler.typ_cd   not in ('COMP','ABS', 'GSP', 'IREC','SCHEDDU' )
570     and    rslt.business_group_id = p_business_group_id
571     and rslt.enrt_cvg_thru_dt = hr_api.g_eot; -- Bug 4388226 - End-dated suspended enrl shudn't be picked up.
572 
573   --
574 
575   begin
576 
577   -- following are the 4 codes used for enrt. period determination
578   -------------------------------------------------------------------------
579   -- L_EPSD_PEPD 	- Later of Enrollment period start date and
580   --		 	  prior event processed date
581   -- L_EPSD_PEESD 	- Later of Enrollment period start date and
582   --		 	  One day after prior event elections start date
583   -- L_EPSD_PEESD_BCKDT - Later of Enrollment period start date and One
584   --			  day after prior event elections start date and
585   --			  current events backed out date
586   -- L_EPSD_PEESD_SYSDT - Later of Enrollment period start date and One
587   --			  day after prior event elections start date
588   --			  and system date
589   -------------------------------------------------------------------------
590   -- if cd is L_EPSD_PEPD, use the old logic
591   --
592   if g_debug then
593     hr_utility.set_location(' Entering '||l_proc, 10);
594     --
595     -- remove all these debug messages
596     hr_utility.set_location(' p_enrt_perd_det_ovrlp_bckdt_cd is  '||p_enrt_perd_det_ovrlp_bckdt_cd, 987);
597     hr_utility.set_location(' p_person_id '||p_person_id, 10);
598     hr_utility.set_location(' p_lf_evt_ocrd_dt '||p_lf_evt_ocrd_dt, 10);
599     hr_utility.set_location(' p_ler_id '||p_ler_id, 10);
600     hr_utility.set_location(' p_effective_date '||p_effective_date, 10);
601     hr_utility.set_location(' p_rec_enrt_perd_strt_dt '||p_rec_enrt_perd_strt_dt, 10);
602   end if;
603   --
604 
605   IF nvl(p_enrt_perd_det_ovrlp_bckdt_cd, 'L_EPSD_PEPD') = 'L_EPSD_PEPD' THEN
606     --
607     hr_utility.set_location(' L_EPSD_PEPD', 987);
608     OPEN c_get_latest_procd_dt;
609     FETCH c_get_latest_procd_dt INTO l_latest_procd_dt;
610     -- new epsd is greater of epsd or latest_procd_dt
611     -- IF c_get_latest_procd_dt%FOUND THEN
612     IF l_latest_procd_dt IS NOT NULL THEN
613       hr_utility.set_location(' c_get_latest_procd_dt%found', 987);
614       hr_utility.set_location('l_latest_procd_dt is '||l_latest_procd_dt, 987);
615       -- jcarpent 1/4/2001 bug 1568555, removed +1 from line below
616       IF p_rec_enrt_perd_strt_dt < l_latest_procd_dt THEN
617         hr_utility.set_location('l_latest_procd_dt made enrt strt dt ', 987);
618         -- jcarpent 1/4/2001 bug 1568555, removed +1 from line below
619         p_rec_enrt_perd_strt_dt :=  l_latest_procd_dt;
620         -- if the enrollment  exist for the previous LE
621         -- start the window latest_procd_dt + 1
622         -- or the previous enrollment will be updated in correction mode
623         -- and backout of this LE will remove the previous LE results
624         --the  changes are backedout  3086161
625         --
626         --Bugs 3972973 and 3978745 fixes.
627         --If the enrollment starts after the processed date we need to consider the
628         --latest enrollment date.
629         --
630       End IF;
631       --bug#4478186 - enrl start date should always be equal or greater to latest
632       --enrt dt
633       --
634       -- 5152911
635       --
636       ben_enrolment_requirements1.GetPenPerIDMxESD
637         (p_person_id         => p_person_id
638         ,p_business_group_id => p_business_group_id
639         --
640         ,p_penmxesd          => l_latest_enrt_dt
641         );
642 /* 5152911
643       OPEN c_get_latest_enrt_dt;
644       FETCH c_get_latest_enrt_dt into l_latest_enrt_dt;
645       close c_get_latest_enrt_dt ;
646 */
647       --
648       if l_latest_enrt_dt is not null and  l_latest_enrt_dt > p_rec_enrt_perd_strt_dt then
649          p_rec_enrt_perd_strt_dt := l_latest_enrt_dt ;
650       end if ;
651         --
652     END IF;
653     CLOSE c_get_latest_procd_dt;
654     -- 4 is new epsd <= p_lf_evt_ocrd_dt?
655     IF p_rec_enrt_perd_strt_dt <= p_lf_evt_ocrd_dt THEN
656       -- 5 is there a backed out le for the current ler and ...
657       OPEN c_backed_out_ler;
658       FETCH c_backed_out_ler INTO l_backed_out_date;
659       --IF c_backed_out_ler%FOUND THEN
660       IF l_backed_out_date is NOT NULL THEN
661         hr_utility.set_location(' c_backed_out_ler%found', 987);
662         hr_utility.set_location('l_backed_out_date is '||l_backed_out_date, 987);
663         -- 5a ... and is the backed-out date > than the new epsd?
664         IF l_backed_out_date > p_rec_enrt_perd_strt_dt THEN
665           hr_utility.set_location('l_backed_out_date made enrt strt dt ', 987);
666           -- 6 it is the new epsd.
667           p_rec_enrt_perd_strt_dt :=  l_backed_out_date;
668         END IF;
669       END IF;
670       CLOSE c_backed_out_ler;
671     END IF;
672     -- 2746865
673     -- if cd is L_EPSD_PEESD%, use the new logic
674   ELSIF p_enrt_perd_det_ovrlp_bckdt_cd like  'L_EPSD_PEESD%' THEN
675     hr_utility.set_location('  L_EPSD_PEESD%', 987);
676     -- get the person's latest enrollment start date +1
677     OPEN c_get_latest_enrt_dt;
678       FETCH c_get_latest_enrt_dt into l_latest_enrt_dt;
679       -- IF c_get_latest_enrt_dt%FOUND THEN --changed as its always found
680       IF l_latest_enrt_dt is not null THEN
681         hr_utility.set_location(' c_get_latest_enrt_dt%FOUND', 987);
682         hr_utility.set_location('l_latest_enrt_dt is '||l_latest_enrt_dt, 987);
683         -- if latest enrt dt is greater than epsd, make it the epsd
684         IF l_latest_enrt_dt > p_rec_enrt_perd_strt_dt THEN
685           p_rec_enrt_perd_strt_dt := l_latest_enrt_dt;
686           hr_utility.set_location('l_latest_enrt_dt substituted', 987);
687         END IF;
688       END IF;
689       CLOSE c_get_latest_enrt_dt;
690       -- cd is 2 find the bckdt out dt
691       IF p_enrt_perd_det_ovrlp_bckdt_cd = 'L_EPSD_PEESD_BCKDT' THEN
692         hr_utility.set_location('L_EPSD_PEESD_BCKDT entered', 987);
693         -- get the backed out date
694         OPEN c_backed_out_ler;
695         FETCH c_backed_out_ler INTO l_backed_out_date;
696         hr_utility.set_location('l_backed_out_date is '||l_backed_out_date, 987);
697         --IF c_backed_out_ler%FOUND THEN -- changed as its of no use
698         IF l_backed_out_date is not null THEN
699           hr_utility.set_location('bckdt%found', 987);
700           -- if bckdt out dt is greater than epsd, make it the epsd
701           IF l_backed_out_date > p_rec_enrt_perd_strt_dt THEN
702             p_rec_enrt_perd_strt_dt := l_backed_out_date;
703             hr_utility.set_location('l_backed_out_date substituted', 987);
704           END IF;
705         END IF;
706         CLOSE c_backed_out_ler;
707       -- if cd is 4, compare epsd with sysdate
708       ELSIF p_enrt_perd_det_ovrlp_bckdt_cd = 'L_EPSD_PEESD_SYSDT' THEN
709         hr_utility.set_location('L_EPSD_PEESD_SYSDT entered', 987);
710         -- if sysdate is lis greater than epsd, make it the epsd
711         IF l_sysdate > p_rec_enrt_perd_strt_dt THEN
712           p_rec_enrt_perd_strt_dt := l_sysdate;
713           --
714           if g_debug then
715             hr_utility.set_location('sysdate substituted', 987);
716           end if;
717         END IF;
718       END IF;
719     -- end 2746865
720   END IF;
721 end enrt_perd_strt_dt;
722 END ben_enrolment_requirements1;