DBA Data[Home] [Help]

PACKAGE BODY: APPS.PERCOMPSTATUS

Source


1 Package body PerCompStatus AS
2 /* $Header: hrcpstats.pkb 120.0 2005/05/31 23:55:44 appldev noship $*/
3 /* this fucntion returns the status of the competency
4    it checks for the outcomes defined for the competency
5    and if all the outcomes are achieved then return ACHIEVED else
6    IN_PROGRESS*/
7 FUNCTION Get_Competence_Status
8     (p_competence_id           in varchar2
9     ,p_competence_element_id   in varchar2
10     ,p_item_type               IN VARCHAR2 DEFAULT null
11     ,p_item_key                IN VARCHAR2 DEFAULT null
12     ,p_activity_id             IN VARCHAR2 DEFAULT null
13     ,p_eff_date                in date default trunc(sysdate)
14     ) return VARCHAR2 is
15 CURSOR getEndDatedOutcomes(compEleId IN Number) is
16        Select max(ceo.date_to),ceo.outcome_id
17        FROM per_comp_element_outcomes ceo , per_competence_outcomes pco
18        where competence_element_id = compEleId
19        AND ceo.date_to < p_eff_date
20        and pco.outcome_id = ceo.outcome_id
21        and pco.date_from <= p_eff_date
22        and nvl(pco.date_to,p_eff_date) >= p_eff_date
23        group by ceo.outcome_id;
24 
25 l_competence_cluster   per_competences_vl.competence_cluster%type;
26 l_noof_outcomes        number;
27 p_person_id    per_competence_elements.person_id%type;
28 l_status       per_competence_elements.status%type;
29 l_achieved_date per_competence_elements.Achieved_date%type;
30 begin
31 Select competence_cluster INTO l_competence_cluster FROM per_competences_vl
32        WHERE competence_id = p_competence_id;
33 IF l_competence_cluster = 'UNIT_STANDARD'  then
34  IF p_competence_element_id IS NOT NULL then
35 -- added for the 4187713 bug.
36 -- Getting the End date outcome rec which were achieved earlier.
37   Select pce.status, pce.Achieved_date, pce.person_id
38          INTO l_status, l_achieved_date, p_person_id
39     FROM per_competence_elements pce
40     Where pce.competence_element_id = p_competence_element_id;
41   IF l_status = 'ACHIEVED' AND l_achieved_date <= p_eff_date then
42    FOR EndDatedRec IN getEndDatedOutcomes(p_competence_element_id)
43    loop
44         -- checking if the end dated outcome has achieved rec for the effective date.
45      Select count(*) INTO l_noof_outcomes
46         FROM Per_comp_element_outcomes CEO
47         Where ceo.outcome_id = EndDatedRec.outcome_id
48         AND ceo.competence_element_id = p_competence_element_id
49         AND ceo.date_from <= p_eff_date
50         AND nvl(ceo.date_to,p_eff_date) >= p_eff_date;
51       IF l_noof_outcomes = 0 Then
52         IF p_item_type IS NULL OR p_item_key IS NULL then
53            RETURN 'IN_PROGRESS';
54         else
55         -- checking if the outcome is achieved in current session.
56           Select count(*) INTO l_noof_outcomes
57           FROM hr_api_transaction_steps S, hr_api_transaction_values tv,
58              hr_api_transaction_values tv1, hr_api_transaction_values tv2,
59              hr_api_transaction_values tv3
60              Where  s.item_type = p_item_type
61                 and s.item_key = p_item_key
62                 and s.activity_id = nvl(to_number(p_activity_id),s.activity_id)
63                 AND s.API_NAME = 'HR_COMP_OUTCOME_PROFILE_SS.PROCESS_API'
64                 and tv.transaction_step_id = s.transaction_step_id
65                 and tv1.transaction_step_id = s.transaction_step_id
66                 and tv2.transaction_step_id = s.transaction_step_id
67                 and tv3.transaction_step_id = s.transaction_step_id
68                 AND tv3.NAME = 'P_COMPETENCE_ELEMENT_ID'
69                 AND tv3.Number_Value = p_competence_element_id
70                 AND tv.NAME = 'P_OUTCOME_ID'
71                 AND tv1.NAME = 'P_DATE_FROM'
72                 AND tv2.NAME = 'P_DATE_TO'
73                 AND tv.number_value = EndDatedRec.outcome_id
74                 AND tv1.date_value <= p_eff_date
75                 AND nvl(tv2.date_value,p_eff_date) >= p_eff_date;
76 
77 
78             IF l_noof_outcomes = 0 then
79              RETURN 'IN_PROGRESS';
80             END if;
81         END if;
82       END if;
83 
84    END loop;
85 
86    IF p_item_type IS NULL OR p_item_key IS NULL then
87       RETURN 'ACHIEVED';
88    ELSE -- p_ietm_type and p_item_key is not null
89       Select count(*) into l_noof_outcomes FROM hr_api_transaction_steps S, hr_api_transaction_values C,
90                                    Per_comp_element_outcomes CEO
91                                     Where  s.item_type = p_item_type
92                                     and s.item_key = p_item_key
93                                     and s.activity_id = nvl(to_number(p_activity_id),s.activity_id)
94                                     and s.api_name = 'HR_COMP_OUTCOME_PROFILE_SS.DELETE'
95                                     and c.transaction_step_id = s.transaction_step_id
96                                     AND C.NAME = 'P_COMP_ELEMENT_OUTCOME_ID'
97                                     AND C.NUMBER_VALUE = CEO.COMP_ELEMENT_OUTCOME_ID
98                                     AND ceo.Competence_element_id = p_competence_element_id;
99 
100        IF l_noof_outcomes > 0 then
101           RETURN 'IN_PROGRESS';
102        ELSE -- l_noof_outcomes = 0
103 
104          Select count(*) INTO l_noof_outcomes
105           FROM hr_api_transaction_steps ts,
106           hr_api_transaction_values tv,
107                              hr_api_transaction_values tv1, hr_api_transaction_values tv2,
108                              hr_api_transaction_values tv3, per_competence_outcomes pco
109           Where ts.ITEM_TYPE  = p_item_type
110                                       AND ts.item_key  = p_item_key
111                                       And ts.activity_id = nvl(to_number(p_activity_id),ts.activity_id)
112                                       AND ts.API_NAME = 'HR_COMP_OUTCOME_PROFILE_SS.PROCESS_API'
113                                       AND ts.TRANSACTION_STEP_ID = tv.TRANSACTION_STEP_ID
114                                       AND ts.TRANSACTION_STEP_ID = tv1.TRANSACTION_STEP_ID
115                                       AND ts.TRANSACTION_STEP_ID = tv2.TRANSACTION_STEP_ID
116                                       AND ts.TRANSACTION_STEP_ID = tv3.TRANSACTION_STEP_ID
117                                       AND tv3.NAME = 'P_PERSON_ID'
118                                       AND tv3.Number_Value = p_person_id
119                                       AND tv.NAME = 'P_OUTCOME_ID'
120                                       AND tv1.NAME = 'P_DATE_FROM'
121                                       AND tv2.NAME = 'P_DATE_TO'
122                                       And tv.number_value = pco.outcome_id
123                                       AND pco.competence_id = p_competence_id
124             AND nvl(p_eff_date,trunc(sysdate)) BETWEEN pco.date_from AND nvl(pco.date_to,nvl(p_eff_date,trunc(sysdate)))
125                                       AND nvl(tv2.date_value,trunc(p_eff_date)) < trunc(p_eff_date);
126         IF l_noof_outcomes = 0 then
127         RETURN 'ACHIEVED';
128         ELSE
129         RETURN 'IN_PROGRESS';
130         END if;
131 
132      END if; -- end of l_noof_outcomes > 0
133 
134 
135    END if; --End  p_ietm_type or p_item_key is null
136 
137   END if; -- end of status = 'ACHIEVED'
138 
139 
140 
141 -- END for the 4187713 bug.
142      Select count(*) INTO l_noof_outcomes from
143             per_competence_outcomes pco
144             WHERE competence_id = p_competence_id
145             AND nvl(p_eff_date,trunc(sysdate)) BETWEEN date_from AND nvl(date_to,nvl(p_eff_date,trunc(sysdate)))
146             AND NOT EXISTS ( (Select 1 FROM per_comp_element_outcomes
147                                       Where competence_element_id = p_competence_element_id
148                                       AND per_comp_element_outcomes.outcome_id = pco.outcome_id
149                                       AND nvl(p_eff_date,trunc(sysdate)) BETWEEN date_from AND nvl(date_to,nvl(p_eff_date,trunc(sysdate)))
150                                       AND NOT EXISTS
151                                       (Select 1 FROM hr_api_transaction_steps S, hr_api_transaction_values C,
152                                           Per_comp_element_outcomes CEO
153                                           Where  s.item_type = p_item_type
154                                           and s.item_key = p_item_key
155                                           and s.activity_id = nvl(to_number(p_activity_id),s.activity_id)
156                                           and s.api_name = 'HR_COMP_OUTCOME_PROFILE_SS.DELETE'
157                                           and c.transaction_step_id = s.transaction_step_id
158                                           AND C.NAME = 'P_COMP_ELEMENT_OUTCOME_ID'
159                                           AND C.NUMBER_VALUE = CEO.COMP_ELEMENT_OUTCOME_ID
160                                           AND ceo.Competence_element_id = p_competence_element_id
161                                           AND ceo.Outcome_id = pco.Outcome_id))
162                                          Union All
163                                           (Select 1 FROM hr_api_transaction_values tv,
164                                          hr_api_transaction_values tv1, hr_api_transaction_values tv2,
165                                           hr_api_transaction_values tv3 , hr_api_transaction_steps ts
166                                       Where ts.ITEM_TYPE  = p_item_type
167                                       AND ts.item_key  = p_item_key
168                                       And ts.activity_id = nvl(to_number(p_activity_id),ts.activity_id)
169                                       AND ts.API_NAME = 'HR_COMP_OUTCOME_PROFILE_SS.PROCESS_API'
170                                       AND ts.TRANSACTION_STEP_ID = tv.TRANSACTION_STEP_ID
171                                       AND ts.TRANSACTION_STEP_ID = tv1.TRANSACTION_STEP_ID
172                                       AND ts.TRANSACTION_STEP_ID = tv2.TRANSACTION_STEP_ID(+)
173                                       AND ts.TRANSACTION_STEP_ID = tv3.TRANSACTION_STEP_ID
174                                       AND tv3.NAME = 'P_PERSON_ID'
175                                       AND tv3.Number_Value = p_person_id
176                                       AND tv.NAME = 'P_OUTCOME_ID'
177                                       AND tv1.NAME = 'P_DATE_FROM'
178                                       AND tv2.NAME(+) = 'P_DATE_TO'
179                                       And tv.number_value = pco.outcome_id
180                                       And trunc(p_eff_date) BETWEEN tv1.date_value
181                                       AND nvl(tv2.date_value,trunc(p_eff_date))));
182  else
183    Select count(*) INTO l_noof_outcomes from
184      per_competence_outcomes pco
185      Where pco.Competence_id = p_competence_id
186       AND pco.date_from <= p_eff_date
187       AND nvl(pco.date_to,p_eff_date) >= p_eff_date;
188  END if;
189       IF l_noof_outcomes = 0 then
190         RETURN 'ACHIEVED';
191      else
192         RETURN 'IN_PROGRESS';
193      END if;
194 ELSE
195     Return 'ACHIEVED';
196 END if;
197 End Get_Competence_Status;
198 ------------
199 function get_status_meaning_and_id
200     (p_competence_id         in varchar2
201     ,p_competence_element_id in varchar2
202     ,p_item_type               IN VARCHAR2 DEFAULT null
203     ,p_item_key                IN VARCHAR2 DEFAULT null
204     ,p_activity_id             IN VARCHAR2 DEFAULT null
205     ,p_eff_date              IN DATE DEFAULT trunc(sysdate))
206     RETURN VARCHAR2 is
207 l_status_id per_competence_elements.status%type;
208 l_status_meaning           varchar2(100);
209 l_noof_outcomes            number;
210 l_competence_cluster       per_competences.competence_cluster%type;
211 p_person_id    per_competence_elements.person_id%type;
212 begin
213 l_status_id := PerCompStatus.Get_Competence_Status(
214                    p_competence_id          =>  p_competence_id
215                    ,p_competence_element_id =>  p_competence_element_id
216                    ,p_item_type            =>   p_item_type
217                    ,p_item_key             =>   p_item_key
218                    ,p_activity_id          =>   p_activity_id
219                    ,p_eff_date             =>   p_eff_date );
220 Select HR_GENERAL.DECODE_LOOKUP('PER_QUAL_FWK_COMP_STATUS', l_status_id) INTO  l_status_meaning
221        FROM dual;
222        RETURN l_status_meaning;
223 END get_status_meaning_and_id;
224 ----------
225 FUNCTION Get_Competence_Status
226     (p_item_type       in varchar2
227     ,p_item_key        IN varchar2
228     ,p_activity_id     IN varchar2
229     ,p_competence_id   in number
230     ,p_competence_element_id IN NUMBER DEFAULT null
231     ,p_person_id             IN number
232     ,p_eff_date                in date default trunc(sysdate)
233     ) return VARCHAR2 is
234 l_competence_cluster   per_competences_vl.competence_cluster%type;
235 l_noof_outcomes        number;
236 l_comp_status          per_competence_elements.status%type;
237 begin
238 Select competence_cluster INTO l_competence_cluster FROM per_competences_vl
239        WHERE competence_id = p_competence_id;
240 IF l_competence_cluster = 'UNIT_STANDARD' then
241    IF p_competence_element_id IS NOT NULL OR p_competence_element_id > 0 then
242       l_comp_status := Get_Competence_Status(
243                  p_competence_id          => p_competence_id
244                 ,p_competence_element_id  => p_competence_element_id
245                 ,p_item_type              => p_item_type
246                 ,p_item_key               => p_item_key
247                 ,p_activity_id            => p_activity_id
248                 ,p_eff_date               => p_eff_date );
249       RETURN l_comp_status;
250    END if;
251      Select count(*) INTO l_noof_outcomes
252          from
253             per_competence_outcomes pco
254             WHERE pco.competence_id = p_competence_id
255             AND nvl(p_eff_date,sysdate) BETWEEN pco.date_from AND nvl(pco.date_to,nvl(p_eff_date,trunc(sysdate)))
256             AND NOT exists (Select 1 FROM hr_api_transaction_values tv,
257                              hr_api_transaction_values tv1, hr_api_transaction_values tv2,
258                              hr_api_transaction_values tv3 , hr_api_transaction_steps ts
259                                       Where ts.ITEM_TYPE  = p_item_type
260                                       AND ts.item_key  = p_item_key
261                                       And ts.activity_id = nvl(to_number(p_activity_id),ts.activity_id)
262                                       AND ts.API_NAME = 'HR_COMP_OUTCOME_PROFILE_SS.PROCESS_API'
263                                       AND ts.TRANSACTION_STEP_ID = tv.TRANSACTION_STEP_ID
264                                       AND ts.TRANSACTION_STEP_ID = tv1.TRANSACTION_STEP_ID
265                                       AND ts.TRANSACTION_STEP_ID = tv2.TRANSACTION_STEP_ID(+)
266                                       AND ts.TRANSACTION_STEP_ID = tv3.TRANSACTION_STEP_ID
267                                       AND tv3.NAME = 'P_PERSON_ID'
268                                       AND tv3.Number_Value = p_person_id
269                                       AND tv.NAME = 'P_OUTCOME_ID'
270                                       AND tv1.NAME = 'P_DATE_FROM'
271                                       AND tv2.NAME(+) = 'P_DATE_TO'
272                                       And tv.number_value = pco.outcome_id
273                                       And trunc(p_eff_date) BETWEEN tv1.date_value
274                                       AND nvl(tv2.date_value,trunc(p_eff_date))
275                                       Union all
276                                       (Select 1 FROM Per_comp_element_outcomes CEO
277                                           Where ceo.Competence_element_id = p_competence_element_id
278                                           AND ceo.Outcome_id = pco.Outcome_id
279                                           And ceo.date_from <= trunc(p_eff_date)
280                                           AND nvl(ceo.date_to,trunc(p_eff_date)) >= trunc(p_eff_date)
281                                           AND NOT EXISTS ( SELECT 1 from
282                                          hr_api_transaction_steps S, hr_api_transaction_values C
283                                           Where  s.item_type = p_item_type
284                                           and s.item_key = p_item_key
285                                           and s.activity_id = nvl(to_number(p_activity_id),s.activity_id)
286                                           and s.api_name = 'HR_COMP_OUTCOME_PROFILE_SS.DELETE'
287                                           and c.transaction_step_id = s.transaction_step_id
288                                           AND C.NAME = 'P_COMP_ELEMENT_OUTCOME_ID'
289                                           AND C.NUMBER_VALUE = CEO.COMP_ELEMENT_OUTCOME_ID
290                                           )));
291      IF l_noof_outcomes = 0 then
292         Select count(*) INTO l_noof_outcomes
293           FROM hr_api_transaction_steps ts,
294           hr_api_transaction_values tv,
295                              hr_api_transaction_values tv1, hr_api_transaction_values tv2,
296                              hr_api_transaction_values tv3, per_competence_outcomes pco
297           Where ts.ITEM_TYPE  = p_item_type
298                                       AND ts.item_key  = p_item_key
299                                       And ts.activity_id = nvl(to_number(p_activity_id),ts.activity_id)
300                                       AND ts.API_NAME = 'HR_COMP_OUTCOME_PROFILE_SS.PROCESS_API'
301                                       AND ts.TRANSACTION_STEP_ID = tv.TRANSACTION_STEP_ID
302                                       AND ts.TRANSACTION_STEP_ID = tv1.TRANSACTION_STEP_ID
303                                       AND ts.TRANSACTION_STEP_ID = tv2.TRANSACTION_STEP_ID(+)
304                                       AND ts.TRANSACTION_STEP_ID = tv3.TRANSACTION_STEP_ID
305                                       AND tv3.NAME = 'P_PERSON_ID'
306                                       AND tv3.Number_Value = p_person_id
307                                       AND tv.NAME = 'P_OUTCOME_ID'
308                                       AND tv1.NAME = 'P_DATE_FROM'
309                                       AND tv2.NAME(+) = 'P_DATE_TO'
310                                       And tv.number_value = pco.outcome_id
311                                       AND pco.competence_id = p_competence_id
312             AND p_eff_date BETWEEN pco.date_from AND nvl(pco.date_to,p_eff_date)
313                                       AND nvl(tv2.date_value,p_eff_date) < p_eff_date;
314         IF l_noof_outcomes = 0 then
315         RETURN 'ACHIEVED';
316         ELSE
317         RETURN 'IN_PROGRESS';
318         END if;
319      else
320         RETURN 'IN_PROGRESS';
321      END if;
322 ELSE
323     Return 'ACHIEVED';
324 END if;
325 End Get_Competence_Status;
326 
327 
328 Function IsAllCompAchieved
329      ( p_qualification_type_id IN number
330      , p_person_id             IN number)
331      RETURN VARCHAR2 IS
332 CURSOR getCompIds(p_qualification_type_id IN number) is
333        SELECT pce.competence_id from
334               per_competence_elements pce
335        Where pce.TYPE = 'QUALIFICATION'
336              AND pce.Qualification_type_id = p_qualification_type_id
337              AND pce.effective_date_from <= trunc(sysdate)
338              AND nvl(pce.effective_date_to,trunc(sysdate)) >= trunc(sysdate);
339 Cursor getCompEleId(p_competence_id IN number
340                     , p_person_id   IN number) is
341        Select competence_element_id from
342               per_competence_elements pce
343        Where pce.TYPE = 'PERSONAL'
344              AND pce.competence_id = p_competence_id
345              AND pce.person_id = p_person_id
346              AND pce.effective_date_from <= trunc(sysdate)
347              AND nvl(pce.effective_date_to,trunc(sysdate)) >= trunc(sysdate);
348 l_ret_val  varchar2(10);
349 l_NoOfCompAchieved   number;
350 l_TotComps  number;
351 l_comp_status varchar2(20);
352 Begin
353 l_ret_val := 'NOT';
354 l_NoOfCompAchieved := 0;
355 l_TotComps := 0;
356 Select count(*) INTO l_TotComps
357        from
358               per_competence_elements pce
359        Where pce.TYPE = 'QUALIFICATION'
360              AND pce.Qualification_type_id = p_qualification_type_id
361              AND pce.effective_date_from <= trunc(sysdate)
362              AND nvl(pce.effective_date_to,trunc(sysdate)) >= trunc(sysdate);
363  IF l_TotComps = 0 then
364     l_ret_val := 'ACHIEVED';
365     RETURN l_ret_val;
366  END if;
367 For CompIds IN getCompIds ( p_qualification_type_id => p_qualification_type_id)
368 loop
369     FOR CompEled IN getCompEleId ( p_competence_id => CompIds.competence_id
370                                   ,p_person_id => p_person_id)
371     loop
372         l_comp_status := Get_Competence_Status
373                         (p_competence_id          => CompIds.Competence_id
374                          ,p_competence_element_id => CompEled.competence_element_id
375                          ,p_item_type    => null
376                          ,p_item_key     => null
377                          ,p_activity_id  => null
378                          ,p_eff_date   => trunc(sysdate));
379       IF  l_comp_status = 'ACHIEVED' then
380           l_NoOfCompAchieved := l_NoOfCompAchieved +1;
381       else
382         RETURN l_ret_val;
383       END if;
384     END loop;
385 END loop;
386 If l_NoOfCompAchieved = l_TotComps Then
387    l_ret_val := 'ACHIEVED';
388 End if;
389 Return l_ret_val;
390 End IsAllCompAchieved;
391 END PerCompStatus;