DBA Data[Home] [Help]

PACKAGE BODY: APPS.CCT_JTFRESOURCEROUTING_PUB

Source


4 ------------------------------------------------------------------------------
1 PACKAGE BODY CCT_JTFRESOURCEROUTING_PUB  as
2 /* $Header: cctjtfrb.pls 120.0 2005/06/02 10:02:41 appldev noship $ */
3 
5 --  Function	: Get_Agents_for_Competency
6 --  Usage	: Used by the Routing module to get the agents assigned to
7 --		  a comp name and type.
8 --  Description	: This function retrieves a collection of agent IDs from
9 --		  the competency tables given a comp name and type.
10 --  Parameters	:
11 --      p_competency_type       IN      VARCHAR2        Required
12 --	p_competency_name	IN	VARCHAR2	Required
13 --	x_agent_tbl		 out nocopy 	CCT_ROUTINGWORKFLOW_UTL.agent_tbl_type
14 --
15 --  Return	: NUMBER
16 --		  This function returns the number of agents assigned to
17 --		  the given competency_name (0 if there is no agent assigned
18 --		  to the competency_name).
19 ------------------------------------------------------------------------------
20 FUNCTION Get_Agents_For_Competency (
21 	p_competency_type       IN      VARCHAR2
22 	, p_competency_name	IN	VARCHAR2
23 	, x_agent_tbl		 out nocopy 	CCT_ROUTINGWORKFLOW_UTL.agent_tbl_type
24 )
25 RETURN NUMBER IS
26 
27     v_total_num_of_emps    NUMBER:=0;
28     v_agent_id           JTF_RS_RESOURCE_EXTNS.SOURCE_ID%type;
29 
30     --
31     -- get a list of employees that is responsible for a given comp name andy type
32     --  Changed 06FRB2002
33     CURSOR c_employees IS
34       SELECT distinct res.resource_id
35       FROM   jtf_rs_resource_extns res,
36 		   jtf_rs_role_relations res_roles,
37 		   jtf_rs_roles_b roles
38       where  res.resource_id in
39       ((SELECT DISTINCT comp_ele.person_id
40       FROM per_competence_elements comp_ele,
41            per_competences comp
42       WHERE (upper(comp_ele.competence_type) = upper(p_competency_type) and
43 	     upper(comp.name) = upper(p_competency_name) and
44 		comp.competence_id = comp_ele.competence_id)))
45       and res.resource_id=res_roles.role_resource_id
46 	 and res_roles.role_id=roles.role_id
50 BEGIN
47 	 and (roles.role_type_code='CALLCENTER'
48 	 or roles.role_type_code='ICENTER');
49 
51 
52     OPEN c_employees;
53     LOOP
54 
55       FETCH c_employees INTO v_agent_id;
56 	 --dbms_output.put_line('Employee Id from query is'||to_char(v_agent_id));
57       IF c_employees%NOTFOUND THEN
58          CLOSE c_employees;
59          return v_total_num_of_emps;
60       ELSE
61          x_agent_tbl(v_total_num_of_emps) := v_agent_id;
62       END IF;
63       v_total_num_of_emps := v_total_num_of_emps + 1;
64 
65     END LOOP;
66   END Get_Agents_For_Competency;
67 
68 
69 
70 
71  FUNCTION  Get_agents_from_stat_grp_nam (
72         p_group_name        IN VARCHAR2
73         ,p_agent_tbl		 out nocopy 	CCT_ROUTINGWORKFLOW_UTL.agent_tbl_type
74    )
75  RETURN number IS
76 
77     l_total_num_of_agents    NUMBER:=0;
78     l_group_id               jtf_rs_groups_vl.group_id%TYPE;
79     l_agent_id               cct_agent_rt_stats.agent_id%TYPE;
80 
81 
82 
83     CURSOR csr_agents IS
84        SELECT resource_id
85        FROM jtf_rs_group_members
86        WHERE delete_flag='N'
87        AND group_id = (  SELECT distinct a.group_id
88                         FROM jtf_rs_groups_vl a,
89                              jtf_rs_group_usages_vl b
90                         WHERE b.usage='CALL'
91                         AND b.group_ID=a.group_ID
92                         AND a.start_date_active<=sysdate
93                         AND nvl(a.end_date_active,sysdate)>=sysdate
94                         AND upper(a.group_name) = upper(p_group_name));
95 
96 
97 
98 
99 BEGIN
100      --dbms_output.put_line ('IN GET LOGGED IN AGENTS');
101           OPEN csr_agents;
102           LOOP
103             FETCH csr_agents into l_agent_id;
104             IF csr_agents%NOTFOUND THEN
105               CLOSE csr_agents;
106               RETURN l_total_num_of_agents;
107             ELSE
108                l_total_num_of_agents := l_total_num_of_agents +1;
109                p_agent_tbl(l_total_num_of_agents) :=  l_agent_id;
110             END IF;
111           END LOOP;
112 
113 
114  EXCEPTION
115 	WHEN OTHERS THEN
116     CLOSE csr_agents;
117     --dbms_output.put_line(' ERROR in Get_logged In Agents '||sqlerrm );
118 
119  END Get_agents_from_stat_grp_nam;
120 
121  FUNCTION  Get_agents_from_stat_grp_num (
122         p_group_number      IN  VARCHAR2
123         ,p_agent_tbl		 out nocopy 	CCT_ROUTINGWORKFLOW_UTL.agent_tbl_type
124    )
125  RETURN number IS
126 
127     l_total_num_of_agents    NUMBER:=0;
128     l_agent_id               cct_agent_rt_stats.agent_id%TYPE;
129     l_group_id               jtf_rs_groups_vl.group_id%TYPE;
130 
131 
132     CURSOR csr_agents IS
133        SELECT resource_id
134        FROM jtf_rs_group_members
135        WHERE delete_flag='N'
136        AND group_id= ( SELECT  a.group_id
137                        FROM jtf_rs_groups_vl a,
138                             jtf_rs_group_usages_vl b
139                        WHERE b.usage='CALL'
140                        AND b.group_ID=a.group_ID
141                        AND a.start_date_active<=sysdate
142                        AND nvl(a.end_date_active,sysdate)>=sysdate
143                        AND a.group_number = p_group_number);
144 
145 BEGIN
146 
147      --dbms_output.put_line ('IN GET LOGGED IN AGENTS');
148 
149         OPEN csr_agents;
150         LOOP
151           FETCH csr_agents into l_agent_id;
152           IF csr_agents%NOTFOUND THEN
153              CLOSE csr_agents;
154              RETURN l_total_num_of_agents;
155           ELSE
156             l_total_num_of_agents := l_total_num_of_agents +1;
157             p_agent_tbl(l_total_num_of_agents) :=  l_agent_id;
158           END IF;
159 
160         END LOOP;
161 
162  EXCEPTION
163 	WHEN OTHERS THEN
164     CLOSE csr_agents;
165     --dbms_output.put_line(' ERROR in Get_logged In Agents '||sqlerrm );
166 
167  END Get_agents_from_stat_grp_num;
168 
169 FUNCTION  Get_agents_from_dyn_grp_nam (
170          p_group_name       IN VARCHAR2
171          ,p_agent_tbl		 out nocopy 	CCT_ROUTINGWORKFLOW_UTL.agent_tbl_type
172    )
173  RETURN number IS
174     l_total_num_of_agents    NUMBER:=0;
175     l_text                   jtf_rs_dynamic_groups_b.sql_text%TYPE;
176     l_agent_id               cct_agent_rt_stats.agent_id%TYPE;
177     l_select_csr             INTEGER;
178     l_sort_num               NUMBER := 0;
179     l_dummy                  INTEGER;
180 
181     CURSOR csr_text IS
182        SELECT a.sql_text
183        FROM JTF_RS_DYNAMIC_GROUPS_vl a
184        WHERE upper(a.usage)='CALL'
185        AND a.start_date_active<=sysdate
186        AND nvl(a.end_date_active,sysdate)>=sysdate
187        AND a.group_name = p_group_name
188        AND sql_text is not null;
189 
190 
191 BEGIN
192     OPEN csr_text;
193     FETCH csr_text into l_text;
194       IF csr_text%NOTFOUND THEN
195          CLOSE csr_text;
196       END IF;
197 
198       BEGIN
199         l_select_csr := DBMS_SQL.OPEN_CURSOR;
200         DBMS_SQL.PARSE(l_select_csr, l_text, DBMS_SQL.native);
201         DBMS_SQL.DEFINE_COLUMN(l_select_csr, 1, l_agent_ID);
202         l_dummy := DBMS_SQL.EXECUTE(l_select_csr);
203 
204         l_sort_num  := 0;
205         LOOP
206           IF DBMS_SQL.FETCH_ROWS(l_select_csr) = 0 THEN
210           DBMS_SQL.COLUMN_VALUE(l_select_csr, 1, l_agent_ID);
207 	        EXIT;
208           END IF;
209 
211 
212           -- insert the cursor record into the l_agents_tbl Table
213           l_sort_num := l_sort_num + 1;
214           p_agent_tbl(l_sort_num) :=  l_agent_id;
215         END LOOP;
216         -- Close the cursor
217         DBMS_SQL.CLOSE_CURSOR(l_select_csr);
218       END;
219       RETURN l_sort_num;
220  EXCEPTION
221 	WHEN OTHERS THEN
222         CLOSE csr_text;
223         RETURN 0;
224  END Get_agents_from_dyn_grp_nam;
225 
226 FUNCTION  Get_agents_from_dyn_grp_num (
227          p_group_number     IN VARCHAR2
228          ,p_agent_tbl		 out nocopy 	CCT_ROUTINGWORKFLOW_UTL.agent_tbl_type
229    )
230  RETURN number IS
231     l_total_num_of_agents    NUMBER:=0;
232     l_text                   jtf_rs_dynamic_groups_b.sql_text%TYPE;
233     l_dummy                  INTEGER;
234     l_agent_id               cct_agent_rt_stats.agent_id%TYPE;
235     l_sort_num           NUMBER := 0;
236 
237     l_select_csr         INTEGER;
238 
239     CURSOR csr_text IS
240        SELECT a.sql_text
241        FROM JTF_RS_DYNAMIC_GROUPS_B a
242        WHERE upper(a.usage)='CALL'
243        AND a.start_date_active<=sysdate
244        AND nvl(a.end_date_active,sysdate)>=sysdate
245        AND a.group_number = p_group_number
246        AND sql_text is not null;
247 
248 
249 BEGIN
250     OPEN csr_text;
251     FETCH csr_text into l_text;
252     IF csr_text%NOTFOUND THEN
253       CLOSE csr_text;
254     END IF;
255 
256        BEGIN
257         l_select_csr := DBMS_SQL.OPEN_CURSOR;
258         DBMS_SQL.PARSE(l_select_csr, l_text, DBMS_SQL.native);
259         DBMS_SQL.DEFINE_COLUMN(l_select_csr, 1, l_agent_ID);
260         l_dummy := DBMS_SQL.EXECUTE(l_select_csr);
261 
262         l_sort_num  := 0;
263         LOOP
264           IF DBMS_SQL.FETCH_ROWS(l_select_csr) = 0 THEN
265 	        EXIT;
266           END IF;
267 
268           DBMS_SQL.COLUMN_VALUE(l_select_csr, 1, l_agent_ID);
269 
270           -- insert the cursor record into the l_agents_tbl Table
271           l_sort_num := l_sort_num + 1;
272           p_agent_tbl(l_sort_num) :=  l_agent_id;
273         END LOOP;
274         -- Close the cursor
275         DBMS_SQL.CLOSE_CURSOR(l_select_csr);
276        END;
277 
278        RETURN l_sort_num;
279  EXCEPTION
280 	WHEN OTHERS THEN
281        CLOSE csr_text;
282        RETURN 0;
283  END Get_agents_from_dyn_grp_num;
284 
285  FUNCTION  Get_agents_not_in_stat_grp_nam (
286          p_group_name       IN VARCHAR2
287          ,p_agent_tbl		 out nocopy 	CCT_ROUTINGWORKFLOW_UTL.agent_tbl_type
288    )
289  RETURN number IS
290     l_total_num_of_agents    NUMBER:=0;
291     l_agent_id               cct_agent_rt_stats.agent_id%TYPE;
292 
293 
294     CURSOR csr_agents IS
295     select  res.resource_id
296         from jtf_rs_resource_extns res
297             ,jtf_rs_role_relations res_roles
298                 ,jtf_rs_roles_b roles
299         where  res.resource_id = res_roles.role_resource_id
300             and res_roles.role_resource_type = 'RS_INDIVIDUAL'
301             and res_roles.start_date_active<=sysdate
302             and nvl(res_roles.end_date_active,sysdate)>=sysdate
303             and res_roles.delete_flag = 'N'
304             and res_roles.role_id=roles.role_id
305             and (roles.role_type_code = 'CALLCENTER'
306             or roles.role_type_code='ICENTER')
307         MINUS
308         select resource_id
309         from jtf_rs_group_members
310         where delete_flag='N'
311         and group_id =  ( select a.group_id
312                        from jtf_rs_groups_vl a,
313                             jtf_rs_group_usages b
314                        where upper(a.group_name) = upper(p_group_name)
315                        and b.usage='CALL'
316                        and b.group_ID=a.group_ID
317                        and a.start_date_active<=sysdate
318                        and nvl(a.end_date_active,sysdate)>=sysdate );
319       -- Changed 09/12/02 rajayara
320       --SELECT distinct res.resource_id
321       --  FROM jtf_rs_resource_extns res
322       --      ,jtf_rs_role_relations res_roles
323       --        ,jtf_rs_roles_b roles
324       --  WHERE  res.resource_id = res_roles.role_resource_id
325       --    and res_roles.role_id=roles.role_id
326       --    and (roles.role_type_code = 'CALLCENTER'
327       --    or roles.role_type_code='ICENTER')
328       --  MINUS
329       --    SELECT resource_id
330       --    FROM jtf_rs_group_members
331       --    WHERE delete_flag='N'
332       --    AND group_id= (  SELECT distinct a.group_id
333       --                     FROM jtf_rs_groups_vl a,
334       --                             jtf_rs_group_usages_vl b
335       --                        WHERE b.usage='CALL'
336       --                        AND b.group_ID=a.group_ID
337       --                        AND a.start_date_active<=sysdate
338       --                        AND nvl(a.end_date_active,sysdate)>=sysdate
339       --                        AND upper(a.group_name) = upper(p_group_name));
340 
341 
342 BEGIN
343     OPEN csr_agents;
344     LOOP
345       FETCH csr_agents into l_agent_id;
346       IF csr_agents%NOTFOUND THEN
347          CLOSE csr_agents;
348          RETURN l_total_num_of_agents;
349       ELSE
350       p_agent_tbl(l_total_num_of_agents) :=  l_agent_id;
351       END IF;
355 
352 
353       l_total_num_of_agents := l_total_num_of_agents + 1;
354     END LOOP;
356 EXCEPTION
357 	WHEN OTHERS THEN
358        CLOSE csr_agents;
359        RETURN 0;
360 END Get_agents_not_in_stat_grp_nam;
361 
362 FUNCTION  Get_agents_not_in_stat_grp_num (
363         p_group_number      IN VARCHAR2
364         ,p_agent_tbl		 out nocopy 	CCT_ROUTINGWORKFLOW_UTL.agent_tbl_type
365    )
366  RETURN number IS
367     l_total_num_of_agents    NUMBER:=0;
368     l_agent_id           cct_agent_rt_stats.agent_id%TYPE;
369 
370 
371     CURSOR csr_agents IS
372     select  res.resource_id
373         from jtf_rs_resource_extns res
374             ,jtf_rs_role_relations res_roles
375                 ,jtf_rs_roles_b roles
376         where  res.resource_id = res_roles.role_resource_id
377             and res_roles.role_resource_type = 'RS_INDIVIDUAL'
378             and res_roles.start_date_active<=sysdate
379             and nvl(res_roles.end_date_active,sysdate)>=sysdate
380             and res_roles.delete_flag = 'N'
381             and res_roles.role_id=roles.role_id
382             and (roles.role_type_code = 'CALLCENTER'
383             or roles.role_type_code='ICENTER')
384         MINUS
385         select resource_id
386         from jtf_rs_group_members
387         where delete_flag='N'
388         and group_id =  ( select a.group_id
389                        from jtf_rs_groups_b a,
390                             jtf_rs_group_usages b
391                        where a.group_number = p_group_number
392                        and b.usage='CALL'
393                        and b.group_ID=a.group_ID
394                        and a.start_date_active<=sysdate
395                        and nvl(a.end_date_active,sysdate)>=sysdate );
396 
397         -- Changed 09/12/02 rajayara
398         -- SELECT distinct res.resource_id
399         -- FROM jtf_rs_resource_extns res
400         --  ,jtf_rs_role_relations res_roles
401         --  ,jtf_rs_roles_b roles
402         -- WHERE  res.resource_id = res_roles.role_resource_id
403 	--    and res_roles.role_id=roles.role_id
404 	--    and (roles.role_type_code = 'CALLCENTER'
405 	--    or roles.role_type_code='ICENTER')
406         -- MINUS
407         --  SELECT resource_id
408         --  FROM jtf_rs_group_members
409         --  WHERE delete_flag='N'
410         --  AND group_id =  ( SELECT a.group_id
411         --               FROM jtf_rs_groups_vl a,
412         --                    jtf_rs_group_usages_vl b
413         --              WHERE b.usage='CALL'
414         --               AND b.group_ID=a.group_ID
415         --               AND a.start_date_active<=sysdate
416         --               AND nvl(a.end_date_active,sysdate)>=sysdate
417         --              AND a.group_number = p_group_number);
418 
419 
420 BEGIN
421     OPEN csr_agents;
422     LOOP
423       FETCH csr_agents into l_agent_id;
424       IF csr_agents%NOTFOUND THEN
425          CLOSE csr_agents;
426          RETURN l_total_num_of_agents;
427       ELSE
428       p_agent_tbl(l_total_num_of_agents) :=  l_agent_id;
429       END IF;
430 
431       l_total_num_of_agents := l_total_num_of_agents + 1;
432     END LOOP;
433 
434  EXCEPTION
435 	WHEN OTHERS THEN
436        CLOSE csr_agents;
437        RETURN 0;
438  END Get_agents_not_in_stat_grp_num;
439 
440 
441 FUNCTION  Get_agents_not_in_dyn_grp_nam (
442         p_group_name        IN VARCHAR2
443         ,p_agent_tbl		 out nocopy 	CCT_ROUTINGWORKFLOW_UTL.agent_tbl_type
444    )
445  RETURN number IS
446     l_agent_id               cct_agent_rt_stats.agent_id%TYPE;
447     l_default_select         VARCHAR2(4000);
448     l_apos			         VARCHAR2(4) := '''';
449     l_query                  VARCHAR2(5000);
450     l_text                   jtf_rs_dynamic_groups_b.sql_text%TYPE;
451     l_select_csr             INTEGER;
452     l_dummy              INTEGER;
453     l_sort_num               NUMBER := 0;
454 
455     CURSOR csr_text IS
456        SELECT a.sql_text
457        FROM JTF_RS_DYNAMIC_GROUPS_vl a
458        WHERE upper(a.usage)='CALL'
459        AND a.start_date_active<=sysdate
460        AND nvl(a.end_date_active,sysdate)>=sysdate
461        AND upper(a.group_name) = upper(p_group_name)
462        AND sql_text is not null;
463 
464 
465  BEGIN
466      OPEN csr_text;
467      FETCH csr_text into l_text;
468      IF csr_text%NOTFOUND THEN
469        CLOSE csr_text;
470      END IF;
471 
472       l_default_select :=
473         'SELECT distinct res.resource_id '||
474         'FROM jtf_rs_resource_extns res '||
475          '   ,jtf_rs_role_relations res_roles '||
476 	     '   ,jtf_rs_roles_b roles '||
477         'WHERE  res.resource_id = res_roles.role_resource_id '||
478 	    'and res_roles.role_id=roles.role_id '||
479 	    'and (roles.role_type_code = '||l_apos|| 'CALLCENTER' ||l_apos||
480 	    'or roles.role_type_code='||l_apos||'ICENTER'||l_apos||
481         ' MINUS  ' ;
482      l_query := l_default_select || l_text ;
483      --dbms_output.put_line ('l_dyn_select'|| l_query);
484 
485        BEGIN
486         l_select_csr := DBMS_SQL.OPEN_CURSOR;
487         DBMS_SQL.PARSE(l_select_csr, l_query, DBMS_SQL.native);
488         DBMS_SQL.DEFINE_COLUMN(l_select_csr, 1, l_agent_ID);
489         l_dummy := DBMS_SQL.EXECUTE(l_select_csr);
490 
491         l_sort_num  := 0;
492         LOOP
493           IF DBMS_SQL.FETCH_ROWS(l_select_csr) = 0 THEN
494 	        EXIT;
495           END IF;
496 
497           DBMS_SQL.COLUMN_VALUE(l_select_csr, 1, l_agent_ID);
498 
499           -- insert the cursor record into the l_agents_tbl Table
500           l_sort_num := l_sort_num + 1;
501           p_agent_tbl(l_sort_num) :=  l_agent_id;
502         END LOOP;
503         -- Close the cursor
504         DBMS_SQL.CLOSE_CURSOR(l_select_csr);
505        END;
506 
507        RETURN l_sort_num;
508 
509  EXCEPTION
510 	WHEN OTHERS THEN
511        CLOSE csr_text;
512        RETURN 0;
513  END Get_agents_not_in_dyn_grp_nam;
514 
515 FUNCTION  Get_agents_not_in_dyn_grp_num (
516         p_group_number      IN VARCHAR2
517         ,p_agent_tbl		 out nocopy 	CCT_ROUTINGWORKFLOW_UTL.agent_tbl_type
518    )
519  RETURN number IS
520 
521     l_agent_id               cct_agent_rt_stats.agent_id%TYPE;
522     l_default_select         VARCHAR2(4000);
523     l_apos			         VARCHAR2(4) := '''';
524     l_query                  VARCHAR2(5000);
525     l_text                   jtf_rs_dynamic_groups_b.sql_text%TYPE;
526     l_select_csr             INTEGER;
527     l_dummy              INTEGER;
528     l_sort_num               NUMBER := 0;
529 
530     CURSOR csr_text IS
531        SELECT a.sql_text
532        FROM JTF_RS_DYNAMIC_GROUPS_vl a
533        WHERE upper(a.usage)='CALL'
534        AND a.start_date_active<=sysdate
535        AND nvl(a.end_date_active,sysdate)>=sysdate
536        AND a.group_number = p_group_number
537        AND sql_text is not null;
538 
539 
540 BEGIN
541      OPEN csr_text;
542      FETCH csr_text into l_text;
543      IF csr_text%NOTFOUND THEN
544        CLOSE csr_text;
545      END IF;
546 
547       l_default_select :=
548         'SELECT distinct res.resource_id '||
549         'FROM jtf_rs_resource_extns res '||
550          '   ,jtf_rs_role_relations res_roles '||
551 	     '   ,jtf_rs_roles_b roles '||
552         'WHERE  res.resource_id = res_roles.role_resource_id '||
553 	    'and res_roles.role_id=roles.role_id '||
554 	    'and (roles.role_type_code = '||l_apos|| 'CALLCENTER' ||l_apos||
555 	    'or roles.role_type_code='||l_apos||'ICENTER'||l_apos||
556         ' MINUS  ' ;
557      l_query := l_default_select || l_text ;
558 
559 
560        BEGIN
561         l_select_csr := DBMS_SQL.OPEN_CURSOR;
562         DBMS_SQL.PARSE(l_select_csr, l_query, DBMS_SQL.native);
563         DBMS_SQL.DEFINE_COLUMN(l_select_csr, 1, l_agent_ID);
564         l_dummy := DBMS_SQL.EXECUTE(l_select_csr);
565 
566         l_sort_num  := 0;
567         LOOP
568           IF DBMS_SQL.FETCH_ROWS(l_select_csr) = 0 THEN
569 	        EXIT;
570           END IF;
571 
572           DBMS_SQL.COLUMN_VALUE(l_select_csr, 1, l_agent_ID);
573 
574           -- insert the cursor record into the l_agents_tbl Table
575           l_sort_num := l_sort_num + 1;
576           p_agent_tbl(l_sort_num) :=  l_agent_id;
577         END LOOP;
578         -- Close the cursor
579         DBMS_SQL.CLOSE_CURSOR(l_select_csr);
580        END;
581 
582        RETURN l_sort_num;
583 
584 
585  EXCEPTION
586 	WHEN OTHERS THEN
587       CLOSE csr_text;
588       RETURN 0;
589  END Get_agents_not_in_dyn_grp_num;
590 
591 END CCT_JTFRESOURCEROUTING_PUB;