DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_CI_IMPACTS_UTIL

Source


1 PACKAGE BODY Pa_ci_impacts_util AS
2 /* $Header: PACIIPUB.pls 120.1 2007/09/30 15:58:06 kkorada ship $ */
3 
4 function is_any_impact_implemented (
5   p_ci_id IN NUMBER := null
6 ) RETURN boolean
7 IS
8    l_temp VARCHAR2(1);
9 
10 
11 BEGIN
12    SELECT 'X'
13      INTO l_temp from dual
14      WHERE exists(
15 		  SELECT ci_impact_id
16 		  FROM pa_ci_impacts
17 		  WHERE ci_id = p_ci_id
18 		  AND (implementation_date IS NOT NULL
19 		       OR implemented_by IS NOT NULL));
20 
21    RETURN TRUE;
22 EXCEPTION
23   WHEN NO_DATA_FOUND THEN
24     RETURN FALSE;
25 
26 END is_any_impact_implemented;
27 
28 
29 function is_render_true (
30 			 impact_type_code IN VARCHAR2,
31 			 project_id IN NUMBER :=  null
32 ) RETURN varchar2
33   IS
34      l_ret  VARCHAR2(1) := 'Y';
35 
36 BEGIN
37 
38    IF impact_type_code = 'FINPLAN' THEN
39       l_ret:= pa_fp_control_items_utils.Is_Financial_Planning_Allowed(project_id);
40 
41    END IF;
42 
43    RETURN l_ret;
44 
45 EXCEPTION
46   WHEN NO_DATA_FOUND THEN
47     RETURN 'N';
48 
49 END ;
50 
51 
52 function is_impact_implemented (
53 				p_ci_id IN NUMBER ,
54 				p_impact_type_code IN VARCHAR2
55 ) RETURN boolean
56 IS
57    l_temp VARCHAR2(1);
58 
59 
60 BEGIN
61    SELECT 'X'
62      INTO l_temp from dual
63      WHERE exists(
64 		  SELECT ci_impact_id
65 		  FROM pa_ci_impacts
66 		  WHERE ci_id = p_ci_id
67 		  AND (implementation_date IS NOT NULL
68 		       OR implemented_by IS NOT NULL)
69 		  AND impact_type_code = p_impact_type_code);
70 
71    RETURN TRUE;
72 EXCEPTION
73   WHEN NO_DATA_FOUND THEN
74     RETURN FALSE;
75 
76 END is_impact_implemented;
77 
78 function is_impact_exist (
79 				p_ci_id IN NUMBER ,
80 				p_impact_type_code IN VARCHAR2
81 ) RETURN boolean
82 IS
83    l_temp VARCHAR2(1);
84 
85 
86 BEGIN
87    SELECT 'X'
88      INTO l_temp from dual
89      WHERE exists(
90 		  SELECT ci_impact_id
91 		  FROM pa_ci_impacts
92 		  WHERE ci_id = p_ci_id
93 		  AND impact_type_code = p_impact_type_code);
94 
95    RETURN TRUE;
96 EXCEPTION
97   WHEN NO_DATA_FOUND THEN
98     RETURN FALSE;
99 
100 END is_impact_exist;
101 
102 function is_all_impact_implemented (
103 				p_ci_id IN NUMBER
104 				) RETURN boolean
105 IS
106    l_temp VARCHAR2(1);
107 
108 
109 BEGIN
110    SELECT 'X'
111      INTO l_temp from dual
112      WHERE exists(
113 		  SELECT ci_impact_id
114 		  FROM pa_ci_impacts
115 		  WHERE ci_id = p_ci_id
116 		  AND (implementation_date IS NULL
117 		       OR implemented_by IS NULL)
118                   AND impact_type_code <> 'FINPLAN'  /* Bug 4153868 */
119 		  );
120 
121    RETURN FALSE;
122 EXCEPTION
123   WHEN NO_DATA_FOUND THEN
124     RETURN TRUE;
125 
126 END is_all_impact_implemented;
127 
128 
129 
130 procedure delete_all_impacts
131   (
132    p_api_version                 IN     NUMBER :=  1.0,
133    p_init_msg_list               IN     VARCHAR2 := 'T',
134    p_commit                      IN     VARCHAR2 := 'F',
135    p_validate_only               IN     VARCHAR2 := 'T',
136    p_max_msg_count               IN     NUMBER := null,
137 
138    p_ci_id IN NUMBER,
139    x_return_status               OUT NOCOPY    VARCHAR2,
140    x_msg_count                   OUT NOCOPY    NUMBER,
141    x_msg_data                    OUT NOCOPY    VARCHAR2
142 )
143   IS
144 BEGIN
145     -- Initialize the Error Stack
146   PA_DEBUG.init_err_stack('Pa_ci_impacts_util.delete_all_impacts');
147 
148   -- Initialize the return status to success
149   x_return_status := FND_API.G_RET_STS_SUCCESS;
150 
151   --Clear the global PL/SQL message table
152   IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
153     FND_MSG_PUB.initialize;
154   END IF;
155 
156    IF (p_validate_only = 'F') THEN
157       DELETE FROM pa_ci_impacts
158 	WHERE ci_id = p_ci_id;
159    END IF;
160 
161     -- Commit if the flag is set and there is no error
162   IF (p_commit = 'T' AND x_return_status = FND_API.G_RET_STS_SUCCESS ) THEN
163     COMMIT;
164   END IF;
165 
166   -- Reset the error stack when returning to the calling program
167   PA_DEBUG.Reset_Err_Stack;
168 
169 
170 END delete_all_impacts;
171 
172 procedure copy_impact
173   (
174    p_api_version                 IN     NUMBER :=  1.0,
175    p_init_msg_list               IN     VARCHAR2 := 'T',
176    p_commit                      IN     VARCHAR2 := 'F',
177    p_validate_only               IN     VARCHAR2 := 'T',
178    p_max_msg_count               IN     NUMBER := null,
179 
180    p_dest_ci_id IN NUMBER,
181    p_source_ci_id IN NUMBER,
182    p_include_flag IN VARCHAR2,
183    x_return_status               OUT NOCOPY    VARCHAR2,
184    x_msg_count                   OUT NOCOPY    NUMBER,
185    x_msg_data                    OUT NOCOPY    VARCHAR2
186 )
187   IS
188      l_impact_type_code VARCHAR2(30);
189      l_desp VARCHAR2(4000);
190      l_comment VARCHAR2(4000);
191      l_ci_impact_id NUMBER;
192      l_implementation_date DATE;
193      l_implemented_by NUMBER;
194      l_record_ver_number NUMBER;
195      l_temp VARCHAR2(1);
196      l_project_id pa_budget_versions.project_id%TYPE;
197      l_src_project_id pa_budget_versions.project_id%TYPE;
198 
199      l_source PA_PLSQL_DATATYPES.idtabtyp;
200 
201      -- get copy from CI impacts
202      -- Bug 3677924 Jul 07 2004 Raja
203      -- Modified the cursor such that finplan impact records are not selected
204      -- And also an impact record is selected only if destination ci type allows
205      -- the impact to be created
206      CURSOR get_include_impact_info
207        IS
208 	  SELECT sourceImpacts.*
209       FROM   pa_ci_impacts sourceImpacts,
210              pa_control_items targetCi,
211              pa_ci_impact_type_usage targetUsage
212       WHERE  sourceImpacts.ci_id = p_source_ci_id
213         AND  sourceImpacts.impact_type_code NOT IN ('FINPLAN_COST','FINPLAN_REVENUE','FINPLAN')
214         AND  targetCi.ci_id = p_dest_ci_id
215         AND  targetCi.ci_type_id = targetUsage.ci_type_id
216         AND  targetUsage.impact_type_code = sourceImpacts.impact_type_code;
217 
218      -- get the copy to CI impacts
219      CURSOR get_orig_info
220        is
221        SELECT ci_impact_id, description, implementation_comment,
222        implementation_date, implemented_by, record_version_number, impacted_task_id
223        FROM pa_ci_impacts
224        WHERE ci_id = p_dest_ci_id
225        AND impact_type_code = l_impact_type_code;
226 
227      CURSOR is_ok_to_copy
228        IS
229 	  select 'N' from dual
230 	    where exists
231 	    (
232 	     select ci_impact_id from pa_ci_impacts pci
233 	     where pci.ci_id = p_source_ci_id
234 	       and pci.impact_type_code <> 'FINPLAN'  /* Bug 3724520 */
235 	     and not exists
236 	     (
237 	      select * from
238 	      pa_control_items pci2,
239 	      pa_ci_impact_type_usage pcit
240 	      where    pci2.ci_type_id = pcit.ci_type_id
241 	      AND pci2.ci_id = p_dest_ci_id
242 	      and pcit.impact_type_code = pci.impact_type_code
243 	      )
244 	     );
245 
246      CURSOR get_project_id is
247        select project_id from pa_control_items pci
248        where
249        pci.ci_id = p_dest_ci_id;
250 
251       CURSOR get_src_project_id is
252        select project_id from pa_control_items pci
253        where
254        pci.ci_id = p_source_ci_id;
255 
256      l_rowid VARCHAR(100);
257      l_new_ci_impact_id NUMBER;
258      l_task_id NUMBER;
259 
260      -- talked to Selva, the warning flag is ignored for now
261      l_warning_flag VARCHAR2(20);
262 
263      l_temp2 VARCHAR2(4000);
264      l_ret VARCHAR2(1) := 'Y';
265 
266 BEGIN
267     -- Initialize the Error Stack
268   PA_DEBUG.init_err_stack('Pa_ci_impacts_util.copy_impact');
269 
270   -- Initialize the return status to success
271   x_return_status := FND_API.G_RET_STS_SUCCESS;
272 
273   --Clear the global PL/SQL message table
274   IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
275     FND_MSG_PUB.initialize;
276   END IF;
277 
278   IF p_include_flag = 'Y' THEN
279      -- in the case of including impact
280      -- we can not include the source impact if the it has
281      -- more impact type region
282      -- then the ones allowed in the dest impact
283   OPEN is_ok_to_copy;
284   FETCH is_ok_to_copy INTO l_temp;
285   IF is_ok_to_copy%found THEN
286      -- can not copy
287      PA_UTILS.Add_Message( p_app_short_name => 'PA'
288                            ,p_msg_name       => 'PA_CI_NO_IMP_INCLUDE_TYPE');
289 
290      x_return_status := FND_API.G_RET_STS_ERROR;
291 
292      CLOSE is_ok_to_copy;
293      RETURN;
294 
295   END IF;
296   CLOSE is_ok_to_copy;
297   END IF;
298 
299 
300   IF (p_validate_only = 'F') THEN
301      FOR rec IN get_include_impact_info LOOP
302 	l_impact_type_code := rec.impact_type_code;
303 	OPEN get_orig_info;
304 	FETCH get_orig_info INTO l_ci_impact_id, l_desp, l_comment,
305 	  l_implementation_date, l_implemented_by, l_record_ver_number, l_task_id;
306 
307 	IF get_orig_info%notfound THEN
308 	   -- insert a new record to the new impact
309 	   pa_ci_impacts_pkg.insert_row(
310 				     l_rowid,
311 				     l_new_ci_impact_id,
312 				     p_dest_ci_id,
313 				     rec.impact_type_code,
314 				     'CI_IMPACT_PENDING',
315 				     rec.description,
316 				     NULL,
317 				     NULL,
318 					NULL,
319 					rec.impacted_task_id,
320 				     sysdate,
321 				     fnd_global.user_id,
322 				     Sysdate,
323 				     fnd_global.user_id,
324 	                             fnd_global.login_id
325 					);
326 	 ELSE
327 	   l_temp2 := Substr(l_desp || ' ' || rec.description, 1, 4000);
328 
329 	   -- update the existing one
330 	   pa_ci_impacts_pkg.update_row(
331 				     l_ci_impact_id,
332 				     p_dest_ci_id,
333 				     l_impact_type_code,
334 				     NULL,
335 				     l_temp2,
336 				     l_implementation_date,
337 				     l_implemented_by,
338 				     l_comment,
339 				     Nvl(l_task_id, rec.impacted_task_id),
340 				     sysdate,
341 	                             fnd_global.user_id,
342 	                             fnd_global.login_id,
343 				     l_record_ver_number
344 					);
345 	END IF;
346 
347 	CLOSE get_orig_info;
348      END loop;
349 
350      -- copy and include financial impact
351      OPEN get_project_id;
352      FETCH get_project_id INTO l_project_id;
353      CLOSE get_project_id;
354 
355      l_source.DELETE;
356      l_source(1) := p_source_ci_id;
357 
358      OPEN get_src_project_id;
359      FETCH get_src_project_id INTO l_src_project_id;
360      CLOSE get_src_project_id;
361 /* -- Bug 3677924 Jul 07 2004 Raja fp apis are to be called unconditionally
362      Pa_Fp_Control_Items_Utils.CHECK_FP_PLAN_VERSION_EXISTS
363        (
364 	 p_project_id      => l_src_project_id,
365 	 p_ci_id              => p_source_ci_id,
366 	 x_call_fp_api_flag      => l_ret,
367 	 x_return_status         => x_return_status,
368 	 x_msg_count             => x_msg_count,
369 	 x_msg_data              =>  x_msg_data
370 	 );
371 
372 */
373 
374      IF l_ret = 'Y' THEN
375 
376      IF p_include_flag = 'Y' THEN
377 	pa_fp_ci_include_pkg.fp_ci_copy_control_items
378 	  (
379 	   p_project_id => l_project_id,
380 	   p_source_ci_id_tbl  => l_source,
381 	   p_target_ci_id  => p_dest_ci_id,
382 	   p_calling_context => 'INCLUDE',
383 	   x_warning_flag  => l_warning_flag,
384 	   x_msg_data       => x_msg_data,
385 	   x_msg_count      => x_msg_count,
386 	   x_return_status  => x_return_status
387 	   );
388       ELSE
389 	pa_fp_ci_include_pkg.fp_ci_copy_control_items
390 	  (
391 	   p_project_id => l_project_id,
392 	   p_source_ci_id_tbl  => l_source,
393 	   p_target_ci_id  => p_dest_ci_id,
394 	   p_calling_context => 'COPY',
395 	   x_warning_flag  => l_warning_flag,
396 	   x_msg_data       => x_msg_data,
397 	   x_msg_count      => x_msg_count,
398 	   x_return_status  => x_return_status
399 	   );
400      END IF;
401      END IF;
402 
403 
404   END IF;
405 
406     -- Commit if the flag is set and there is no error
407   IF (p_commit = 'T' AND x_return_status = FND_API.G_RET_STS_SUCCESS ) THEN
408     COMMIT;
409   END IF;
410 
411   -- Reset the error stack when returning to the calling program
412   PA_DEBUG.Reset_Err_Stack;
413 
414 
415 END copy_impact;
416 
417 procedure is_delete_impact_ok
418   (
419    p_ci_impact_id IN NUMBER,
420 
421    x_return_status               OUT NOCOPY    VARCHAR2,
422    x_msg_count                   OUT NOCOPY    NUMBER,
423    x_msg_data                    OUT NOCOPY    VARCHAR2
424 )
425   IS
426      CURSOR get_type_code
427        IS
428 	  select impact_type_code,ci_id
429           From pa_ci_impacts
430 	  WHERE ci_impact_id = p_ci_impact_id;
431 
432      l_temp VARCHAR2(30);
433      l_ciid NUMBER;
434 
435 BEGIN
436 
437 
438   -- Initialize the return status to success
439    x_return_status := FND_API.G_RET_STS_SUCCESS;
440 
441    OPEN get_type_code;
442    FETCH get_type_code INTO l_temp,l_ciid;
443    CLOSE get_type_code;
444 
445    IF l_temp = 'FINPLAN' THEN
446 
447       NULL;
448       -- to be added
449 
450    ELSIF l_temp = 'SUPPLIER' THEN
451 	/** Added for Supplier Impact details This API returns error 'E' if there
452          ** detail transactions exists for the supplier impact
453          **/
454 	PA_CI_SUPPLIER_UTILS.IS_SI_DELETE_OK
455 		       (p_ci_id              => l_ciid
456                         ,x_return_status     => x_return_status
457                         ,x_msg_data          => x_msg_data
458                         ,x_msg_count         => x_msg_count
459                         );
460 
461    END IF;
462 
463 END is_delete_impact_ok;
464 
465 function get_edit_mode (
466   p_ci_id IN NUMBER := null
467 ) RETURN varchar2
468 IS
469    l_temp VARCHAR2(10) := 'NONE';
470    l_context VARCHAR2(30);
471 
472 
473    l_status_code VARCHAR2(30);
474    l_type_class VARCHAR2(30);
475    l_ret VARCHAR2(1);
476    l_ret2 VARCHAR2(1);
477 
478 
479    CURSOR get_ci_info
480      IS
481 	select pci.status_code,
482 	  pctb.ci_type_class_code from pa_control_items pci,
483 	  pa_ci_types_b pctb
484 	  where pci.ci_type_id = pctb.ci_type_id
485 	  AND pci.ci_id = p_ci_id;
486 
487    /*
488    CURSOR is_implement_ok
489      IS
490 	SELECT
491 	  pa_control_items_utils.CheckCIActionAllowed('CONTROL_ITEM',l_status_code,'CI_ALLOW_IMPACT_IMPLEMENT') from dual;
492 
493    CURSOR is_update_ok
497      */
494      IS
495 	SELECT
496 	  pa_control_items_utils.CheckCIActionAllowed('CONTROL_ITEM',l_status_code,'CONTROL_ITEM_ALLOW_UPDATE') from dual;
498 
499 BEGIN
500 
501    OPEN get_ci_info;
502    FETCH get_ci_info INTO l_status_code, l_type_class;
503    CLOSE get_ci_info;
504 
505    /*
506    OPEN is_update_ok;
507    FETCH is_update_ok INTO l_ret;
508    CLOSE is_update_ok;
509      */
510      l_ret := pa_control_items_utils.CheckCIActionAllowed('CONTROL_ITEM',l_status_code,'CONTROL_ITEM_ALLOW_UPDATE');
511 
512    IF l_ret <>'Y' THEN
513       -- need to check whether we can implement it
514       IF l_type_class = 'CHANGE_ORDER' OR l_type_class = 'CHANGE_REQUEST' then
515 	/* OPEN is_implement_ok;
516 	 FETCH is_implement_ok INTO l_ret;
517 	 CLOSE is_implement_ok;
518 	   */
519 
520 	   l_ret2 :=   pa_control_items_utils.CheckCIActionAllowed('CONTROL_ITEM',l_status_code,'CI_ALLOW_IMPACT_IMPLEMENT');
521 
522 	 IF l_ret2 <> 'Y' THEN
523 	    RETURN 'NONE';
524 	 END IF;
525 	 l_context := 'IMPLEMENT';
526        ELSE
527 	 -- not a change request
528 	 RETURN 'NONE';
529       END IF;
530 
531     ELSE
532       l_context := 'DETAIL';
533    END IF;
534 
535    IF l_context = 'DETAIL' THEN
536       l_ret := pa_ci_security_pkg.check_update_access(p_ci_id);
537       IF l_ret = 'T' THEN
538 	 l_temp := 'EDIT';
539        ELSE
540 	 l_temp := 'VIEW';
541       END IF;
542     ELSIF l_context = 'IMPLEMENT' THEN
543       l_ret := pa_ci_security_pkg.check_implement_impact_access(p_ci_id);
544       IF l_ret = 'T' THEN
545 	 l_temp := 'EDIT';
546        ELSE
547 	 l_temp := 'VIEW';
548       END IF;
549 
550    END IF;
551 
552    RETURN l_temp;
553 
554 EXCEPTION
555   WHEN NO_DATA_FOUND THEN
556     RETURN 'NONE';
557 
558 END get_edit_mode;
559 
560 
561 function get_update_impact_mode (
562   p_ci_id IN NUMBER := null
563 ) RETURN varchar2
564 IS
565    l_temp VARCHAR2(10) := 'NONE';
566    l_context VARCHAR2(30);
567 
568 
569    l_status_code pa_control_items.status_code%TYPE;
570    l_type_class pa_ci_types_b.ci_type_class_code%TYPE;
571    l_ret VARCHAR2(1);
572    l_ret2 VARCHAR2(1);
573 
574 
575    CURSOR get_ci_info
576      IS
577 	select pci.status_code,
578 	  pctb.ci_type_class_code from pa_control_items pci,
579 	  pa_ci_types_b pctb
580 	  where pci.ci_type_id = pctb.ci_type_id
581 	  AND pci.ci_id = p_ci_id;
582 
583 BEGIN
584    OPEN get_ci_info;
585    FETCH get_ci_info INTO l_status_code, l_type_class;
586    CLOSE get_ci_info;
587 
588 	l_ret := pa_control_items_utils.CheckCIActionAllowed('CONTROL_ITEM',l_status_code,'CONTROL_ITEM_ALLOW_UPDATE');
589 
590    IF l_ret = 'Y' THEN
594        ELSE
591       l_ret2 := pa_ci_security_pkg.check_update_access(p_ci_id);
592       IF l_ret2 = 'T' THEN  /* Bug#3815040: Modified the variable l_ret to l_ret2 */
593 	 l_temp := 'EDIT';
595 	 l_temp := 'VIEW';
596       END IF;
597    ELSE
598       RETURN 'NONE';
599    END IF;
600 
601    RETURN l_temp;
602 
603 EXCEPTION
604   WHEN NO_DATA_FOUND THEN
605     RETURN 'NONE';
606 
607 END get_update_impact_mode;
608 
609 function get_implement_impact_mode (
610   p_ci_id IN NUMBER := null
611 ) RETURN varchar2
612 IS
613    l_temp VARCHAR2(10) := 'NONE';
614    l_context VARCHAR2(30);
615 
616 
617    l_status_code pa_control_items.status_code%TYPE;
618    l_type_class pa_ci_types_b.ci_type_class_code%TYPE;
619    l_ret VARCHAR2(1);
620    l_ret2 VARCHAR2(1);
621 
622 
623    CURSOR get_ci_info
624      IS
625 	select pci.status_code,
626 	  pctb.ci_type_class_code from pa_control_items pci,
627 	  pa_ci_types_b pctb
628 	  where pci.ci_type_id = pctb.ci_type_id
629 	  AND pci.ci_id = p_ci_id;
630 
631 BEGIN
632    OPEN get_ci_info;
633    FETCH get_ci_info INTO l_status_code, l_type_class;
634    CLOSE get_ci_info;
635 
636    IF l_type_class = 'CHANGE_ORDER' OR l_type_class = 'CHANGE_REQUEST' THEN
637      l_ret2 := pa_control_items_utils.CheckCIActionAllowed('CONTROL_ITEM',l_status_code,'CI_ALLOW_IMPACT_IMPLEMENT');
638 
639      IF l_ret2 <> 'Y' THEN
640         RETURN 'NONE';
641      END IF;
642 
643      l_context := 'IMPLEMENT';
644    ELSE
645      RETURN 'NONE';
646    END IF;
647 
651 	 l_temp := 'EDIT';
648    IF l_context = 'IMPLEMENT' THEN
649       l_ret := pa_ci_security_pkg.check_implement_impact_access(p_ci_id);
650       IF l_ret = 'T' THEN
652        ELSE
653 	 l_temp := 'VIEW';
654       END IF;
655    END IF;
656 
657    RETURN l_temp;
658 
659 EXCEPTION
660   WHEN NO_DATA_FOUND THEN
661     RETURN 'NONE';
662 
663 END get_implement_impact_mode;
664 
665 
666 function get_update_impact_mode (
667   p_ci_id IN NUMBER := null,
668   p_status_code IN VARCHAR2
669 ) RETURN varchar2
670 IS
671    l_temp VARCHAR2(10) := 'NONE';
672    l_context VARCHAR2(30);
673 
674    l_status_code pa_control_items.status_code%TYPE;
675    l_type_class pa_ci_types_b.ci_type_class_code%TYPE;
676    l_ret VARCHAR2(1);
677    l_ret2 VARCHAR2(1);
678 
679 BEGIN
680 
681      l_status_code := p_status_code;
682      l_ret := pa_control_items_utils.CheckCIActionAllowed('CONTROL_ITEM',l_status_code,'CONTROL_ITEM_ALLOW_UPDATE');
683 
684    IF l_ret = 'Y' THEN
685       l_ret2 := pa_ci_security_pkg.check_update_access(p_ci_id);
686       IF l_ret2 = 'T' THEN  /* Bug#3815040: Modified the variable l_ret to l_ret2 */
687 	 l_temp := 'EDIT';
688        ELSE
689 	 l_temp := 'VIEW';
690       END IF;
691    ELSE
692       RETURN 'NONE';
693    END IF;
694 
695    RETURN l_temp;
696 
697 EXCEPTION
698   WHEN NO_DATA_FOUND THEN
699     RETURN 'NONE';
700 
701 END get_update_impact_mode;
702 
703 function get_implement_impact_mode (
704   p_ci_id IN NUMBER := null,
705   p_status_code IN VARCHAR2,
706   p_type_class VARCHAR2
707 ) RETURN varchar2
708 IS
709    l_temp VARCHAR2(10) := 'NONE';
710    l_context VARCHAR2(30);
711 
712 
713    l_status_code pa_control_items.status_code%TYPE;
714    l_type_class pa_ci_types_b.ci_type_class_code%TYPE;
715    l_ret VARCHAR2(1);
716    l_ret2 VARCHAR2(1);
717 
718 BEGIN
719 
720    l_status_code := p_status_code;
721    l_type_class  := p_type_class;
722 
723    IF l_type_class = 'CHANGE_ORDER' OR l_type_class = 'CHANGE_REQUEST' THEN
724      l_ret2 := pa_control_items_utils.CheckCIActionAllowed('CONTROL_ITEM',l_status_code,'CI_ALLOW_IMPACT_IMPLEMENT');
725 
726      IF l_ret2 <> 'Y' THEN
727         RETURN 'NONE';
728      END IF;
729 
730      l_context := 'IMPLEMENT';
731    ELSE
732      RETURN 'NONE';
733    END IF;
734 
735    IF l_context = 'IMPLEMENT' THEN
736       l_ret := pa_ci_security_pkg.check_implement_impact_access(p_ci_id);
737       IF l_ret = 'T' THEN
738 	 l_temp := 'EDIT';
739        ELSE
740 	 l_temp := 'VIEW';
741       END IF;
742    END IF;
743 
744    RETURN l_temp;
745 
746 EXCEPTION
747   WHEN NO_DATA_FOUND THEN
748     RETURN 'NONE';
749 
750 END get_implement_impact_mode;
751 
752 END Pa_ci_impacts_util;