DBA Data[Home] [Help]

PACKAGE BODY: APPS.AMW_ORG_PROC_CERT_DATED_SUMM

Source


1 PACKAGE BODY AMW_ORG_PROC_CERT_DATED_SUMM as
2 /* $Header: amwpcerb.pls 120.0 2005/07/29 00:36:25 appldev noship $ */
3 
4 
5 -- ORGANIZATION FUNCTIONs
6 
7 -- Get number of unmitigated risks given a certification and org within the certification
8 -- If fromDate and toDate are passed, then only evaluations created within that period are considered.
9 -- If material risks flag is passed, then only material risks are considered.
10 -- Considers entity risks also.
11 FUNCTION get_unmit_risk_for_org
12 (p_certification_id     in NUMBER,
13  p_org_id               in NUMBER,
14  p_from_date            in DATE,
15  p_to_date              in DATE,
16  p_material_risks_flag  in VARCHAR2)
17 RETURN NUMBER
18 IS
19 CURSOR get_unmitigated_risks
20 IS
21 SELECT count(1)
22 FROM 	(SELECT DISTINCT ara.pk1 certification_id, ara.pk2 organization_id, ara.pk3 process_id, ara.risk_id
23 	 FROM amw_risk_associations ara, amw_opinions_log_v aov, amw_risks_b arb
24 	 WHERE ara.object_type = 'BUSIPROC_CERTIFICATION'
25 	 AND ara.pk1 = p_certification_id
26 	 AND ara.pk2 = p_org_id
27      AND ara.risk_rev_id = arb.risk_rev_id
28      AND nvl(p_material_risks_flag, nvl(arb.material, 'N')) = nvl(arb.material, 'N')
29 	 AND aov.object_name = 'AMW_ORG_PROCESS_RISK'
30 	 AND aov.opinion_type_code = 'EVALUATION'
31 	 AND aov.pk3_value = ara.pk2 --org_id
32 	 AND nvl(aov.pk4_value, -1) = nvl(ara.pk3, -1) --process_id
33 	 AND aov.pk1_value = ara.risk_id
34 	 AND aov.authored_date = (SELECT MAX(aov2.authored_date)
35 				  FROM amw_opinions_log aov2
36 				  WHERE aov2.object_opinion_type_id = aov.object_opinion_type_id
37                   AND aov2.authored_date >= nvl(p_from_date, sysdate-10000)
38                   AND aov2.authored_date < nvl(p_to_date, sysdate+1)
39 				  AND nvl(aov2.pk4_value, -1) = nvl(aov.pk4_value, -1)
40 				  AND aov2.pk3_value = aov.pk3_value
41 				  AND aov2.pk1_value = aov.pk1_value)
42      AND aov.audit_result_code <> 'EFFECTIVE'
43 	 );
44 
45 l_unmit_risks NUMBER;
46 BEGIN
47     l_unmit_risks := 0;
48 	OPEN  get_unmitigated_risks;
49 	FETCH get_unmitigated_risks into l_unmit_risks;
50 	CLOSE get_unmitigated_risks;
51 
52     RETURN l_unmit_risks;
53 END get_unmit_risk_for_org;
54 
55 
56 -- Get number of evaluated risks given a certification and org within the certification
57 -- If fromDate and toDate are passed, then only evaluations created within that period are considered.
58 -- If material risks flag is passed, then only material risks are considered.
59 -- Considers entity risks also.
60 FUNCTION get_eval_risk_for_org
61 (p_certification_id         IN NUMBER,
62  p_org_id               in NUMBER,
63  p_from_date            in DATE,
64  p_to_date              in DATE,
65  p_material_risks_flag  in VARCHAR2)
66 RETURN NUMBER
67 IS
68 CURSOR get_eval_risks
69 IS
70 SELECT count(1)
71 FROM 	(SELECT DISTINCT ara.pk1 certification_id, ara.pk2 organization_id, ara.pk3 process_id, ara.risk_id
72 	 FROM amw_risk_associations ara, amw_opinions_log_v aov, amw_risks_b arb
73 	 WHERE ara.object_type = 'BUSIPROC_CERTIFICATION'
74 	 AND ara.pk1 = p_certification_id
75 	 AND ara.pk2 = p_org_id
76      AND ara.risk_rev_id = arb.risk_rev_id
77      AND nvl(p_material_risks_flag, nvl(arb.material, 'N')) = nvl(arb.material, 'N')
78 	 AND aov.object_name = 'AMW_ORG_PROCESS_RISK'
79 	 AND aov.opinion_type_code = 'EVALUATION'
80 	 AND aov.pk3_value = ara.pk2 --org_id
81 	 AND nvl(aov.pk4_value, -1) = nvl(ara.pk3, -1) --process_id
82 	 AND aov.pk1_value = ara.risk_id
83 	 AND aov.authored_date = (SELECT MAX(aov2.authored_date)
84 				  FROM amw_opinions_log aov2
85 				  WHERE aov2.object_opinion_type_id = aov.object_opinion_type_id
86                   AND aov2.authored_date >= nvl(p_from_date, sysdate-10000)
87                   AND aov2.authored_date < nvl(p_to_date, sysdate+1)
88 	              AND nvl(aov2.pk4_value, -1) = nvl(aov.pk4_value, -1) --process_id
89 				  AND aov2.pk3_value = aov.pk3_value
90 				  AND aov2.pk1_value = aov.pk1_value)
91 	 AND aov.audit_result_code IS NOT NULL
92 	 );
93 l_eval_risks          NUMBER;
94 BEGIN
95     l_eval_risks := 0;
96 	OPEN  get_eval_risks;
97 	FETCH get_eval_risks into l_eval_risks;
98 	CLOSE get_eval_risks;
99     RETURN l_eval_risks;
100 END get_eval_risk_for_org;
101 
102 -- Get number of risks given a certification and org within the certification
103 -- If material risks flag is passed, then only material risks are considered.
104 -- Considers entity risks also.
105 FUNCTION get_total_risks_for_org
106 (p_certification_id         IN NUMBER,
107  p_org_id               in NUMBER,
108  p_material_risks_flag  in VARCHAR2)
109 RETURN NUMBER
110 IS
111 CURSOR get_total_risks
112 IS
113 SELECT count(1)
114 FROM 	(SELECT DISTINCT ara.pk1 certification_id, ara.pk2 organization_id, ara.pk3 process_id, ara.risk_id
115 FROM amw_risk_associations ara, amw_risks_b arb
116 WHERE ara.object_type = 'BUSIPROC_CERTIFICATION'
117 AND ara.risk_rev_id = arb.risk_rev_id
118 AND nvl(p_material_risks_flag, nvl(arb.material, 'N')) = nvl(arb.material, 'N')
119 AND ara.pk1 = p_certification_id
120 AND ara.pk2 = p_org_id);
121 
122 l_total_risks          NUMBER;
123 BEGIN
124     l_total_risks := 0;
125 	OPEN  get_total_risks;
126 	FETCH get_total_risks into l_total_risks;
127 	CLOSE get_total_risks;
128     RETURN l_total_risks;
129 END get_total_risks_for_org;
130 
131 
132 FUNCTION get_unmit_risk_prcnt_for_org
133 (p_certification_id         IN NUMBER,
134  p_org_id               in NUMBER,
135  p_from_date            in DATE,
136  p_to_date              in DATE,
137  p_material_risks_flag  in VARCHAR2)
138 RETURN NUMBER
139 IS
140 CURSOR get_total_risks
141 IS
142 SELECT count(1)
143 FROM 	(SELECT DISTINCT ara.pk1 certification_id, ara.pk2 organization_id, ara.pk3 process_id, ara.risk_id
144 FROM amw_risk_associations ara, amw_risks_b arb
145 WHERE ara.object_type = 'BUSIPROC_CERTIFICATION'
146 AND ara.risk_rev_id = arb.risk_rev_id
147 AND nvl(p_material_risks_flag, nvl(arb.material, 'N')) = nvl(arb.material, 'N')
148 AND ara.pk1 = p_certification_id
149 AND ara.pk2 = p_org_id);
150 
151 CURSOR get_unmitigated_risks
152 IS
153 SELECT count(1)
154 FROM 	(SELECT DISTINCT ara.pk1 certification_id, ara.pk2 organization_id, ara.pk3 process_id, ara.risk_id
155 	 FROM amw_risk_associations ara, amw_opinions_log_v aov, amw_risks_b arb
156 	 WHERE ara.object_type = 'BUSIPROC_CERTIFICATION'
157 	 AND ara.pk1 = p_certification_id
158 	 AND ara.pk2 = p_org_id
159      AND ara.risk_rev_id = arb.risk_rev_id
160      AND nvl(p_material_risks_flag, nvl(arb.material, 'N')) = nvl(arb.material, 'N')
161 	 AND aov.object_name = 'AMW_ORG_PROCESS_RISK'
162 	 AND aov.opinion_type_code = 'EVALUATION'
163 	 AND aov.pk3_value = ara.pk2 --org_id
164 	 AND nvl(aov.pk4_value, -1) = nvl(ara.pk3, -1) --process_id
165 	 AND aov.pk1_value = ara.risk_id
166 	 AND aov.authored_date = (SELECT MAX(aov2.authored_date)
167 				  FROM amw_opinions_log aov2
168 				  WHERE aov2.object_opinion_type_id = aov.object_opinion_type_id
169                   AND aov2.authored_date >= nvl(p_from_date, sysdate-10000)
170                   AND aov2.authored_date < nvl(p_to_date, sysdate+1)
171 				  AND nvl(aov2.pk4_value, -1) = nvl(aov.pk4_value, -1)
172 				  AND aov2.pk3_value = aov.pk3_value
173 				  AND aov2.pk1_value = aov.pk1_value)
174      AND aov.audit_result_code <> 'EFFECTIVE'
175 	 );
176 
177 l_total_risks       NUMBER;
178 l_unmitigated_risks NUMBER;
179 l_risk_prcnt        NUMBER;
180 BEGIN
181     l_total_risks := 0;
182 	OPEN  get_total_risks;
183 	FETCH get_total_risks into l_total_risks;
184 	CLOSE get_total_risks;
185 
186     l_unmitigated_risks := 0;
187 	OPEN  get_unmitigated_risks;
188 	FETCH get_unmitigated_risks into l_unmitigated_risks;
189 	CLOSE get_unmitigated_risks;
190 
191     if l_total_risks = 0
192     then
193         RETURN l_total_risks;
194     else
195 	    l_risk_prcnt	:= round(l_unmitigated_risks/l_total_risks*100);
196         RETURN l_risk_prcnt;
197     END IF;
198 END get_unmit_risk_prcnt_for_org;
199 
200 -- Get number of evaluated controls given a certification and org within the certification
201 -- If key controls flag is passed, then only key controls are considered.
202 FUNCTION get_eval_ctrls_for_org
203 (p_certification_id     IN NUMBER,
204  p_org_id               in NUMBER,
205  p_from_date            in DATE,
206  p_to_date              in DATE,
207  p_key_ctrls_flag    in VARCHAR2)
208 RETURN NUMBER
209 IS
210 CURSOR get_eval_controls
211 IS
212 SELECT count(1)
213 FROM 	(SELECT DISTINCT aca.pk1 certification_id, aca.pk2 organization_id, aca.control_id
214 	 FROM amw_control_associations aca,amw_opinions_log_v aov, amw_controls_b acb
215 	 WHERE aca.object_type     = 'BUSIPROC_CERTIFICATION'
216      AND acb.control_rev_id = aca.control_rev_id
217      AND nvl(acb.key_mitigating, 'N') = nvl(p_key_ctrls_flag, nvl(acb.key_mitigating, 'N'))
218 	 AND aca.pk1 		   = p_certification_id
219 	 AND aca.pk2               = p_org_id
220 	 AND aov.object_name       = 'AMW_ORG_CONTROL'
221 	 AND aov.opinion_type_code = 'EVALUATION'
222 	 AND aov.pk3_value         = p_org_id
223 	 AND aov.pk1_value         = aca.control_id
224 	 AND aov.authored_date = (SELECT MAX(aov2.authored_date)
225 				  FROM amw_opinions_log aov2
226 				  WHERE aov2.object_opinion_type_id = aov.object_opinion_type_id
227 				  AND aov2.pk3_value = aov.pk3_value
228 				  AND aov2.pk1_value = aov.pk1_value
229                   AND aov2.authored_date >= nvl(p_from_date, sysdate-10000)
230                   AND aov2.authored_date < nvl(p_to_date, sysdate+1))
231 	 AND aov.audit_result_code IS NOT NULL);
232 l_eval_ctrls          NUMBER;
233 BEGIN
234     l_eval_ctrls := 0;
235 	OPEN  get_eval_controls;
236 	FETCH get_eval_controls into l_eval_ctrls;
237 	CLOSE get_eval_controls;
238     RETURN l_eval_ctrls;
239 END get_eval_ctrls_for_org;
240 
241 
242 -- Get number of controls given a certification and org within the certification
243 -- If key controls flag is passed, then only key controls are considered.
244 FUNCTION get_total_ctrls_for_org
245 (p_certification_id     IN NUMBER,
246  p_org_id               in NUMBER,
247  p_key_ctrls_flag    in VARCHAR2)
248 RETURN NUMBER
249 IS
250 CURSOR get_total_controls
251 IS
252 SELECT count(1)
253 FROM 	(SELECT DISTINCT aca.pk1 certification_id, aca.pk2 organization_id, aca.control_id
254 FROM amw_control_associations aca, amw_controls_b acb
255 WHERE aca.object_type     = 'BUSIPROC_CERTIFICATION'
256 AND acb.control_rev_id = aca.control_rev_id
257 AND nvl(acb.key_mitigating, 'N') = nvl(p_key_ctrls_flag, nvl(acb.key_mitigating, 'N'))
258 AND aca.pk1 		  = p_certification_id
259 AND aca.pk2               = p_org_id);
260 l_total_ctrls          NUMBER;
261 BEGIN
262     l_total_ctrls := 0;
263 	OPEN  get_total_controls;
264 	FETCH get_total_controls into l_total_ctrls;
265 	CLOSE get_total_controls;
266     RETURN l_total_ctrls;
267 END get_total_ctrls_for_org;
268 
269 -- Get number of ineffective controls given a certification and org within the certification
270 -- If key controls flag is passed, then only key controls are considered.
271 FUNCTION get_ineff_ctrls_for_org
272 (p_certification_id     IN NUMBER,
273  p_org_id               in NUMBER,
274  p_from_date            in DATE,
275  p_to_date              in DATE,
276  p_key_ctrls_flag    in VARCHAR2)
277 RETURN NUMBER
278 IS
279 CURSOR get_ineff_controls
280 IS
281 SELECT count(1)
282 FROM 	(SELECT DISTINCT aca.pk1 certification_id, aca.pk2 organization_id, aca.control_id
283 	 FROM amw_control_associations aca,amw_opinions_log_v aov, amw_controls_b acb
284 	 WHERE aca.object_type     = 'BUSIPROC_CERTIFICATION'
285      AND acb.control_rev_id = aca.control_rev_id
286      AND nvl(acb.key_mitigating, 'N') = nvl(p_key_ctrls_flag, nvl(acb.key_mitigating, 'N'))
287 	 AND aca.pk1 		       = p_certification_id
288 	 AND aca.pk2               = p_org_id
289 	 AND aov.object_name       = 'AMW_ORG_CONTROL'
290 	 AND aov.opinion_type_code = 'EVALUATION'
291 	 AND aov.pk3_value         = p_org_id
292 	 AND aov.pk1_value         = aca.control_id
293 	 AND aov.audit_result_code <> 'EFFECTIVE'
294 	 AND aov.authored_date = (SELECT MAX(aov2.authored_date)
295 				  FROM amw_opinions_log aov2
296 				  WHERE aov2.object_opinion_type_id = aov.object_opinion_type_id
297 				  AND aov2.pk3_value = aov.pk3_value
298 				  AND aov2.pk1_value = aov.pk1_value
299                   AND aov2.authored_date >= nvl(p_from_date, sysdate-10000)
300                   AND aov2.authored_date < nvl(p_to_date, sysdate+1))
301      );
302 
303 l_ineff_ctrls          NUMBER;
304 BEGIN
305     l_ineff_ctrls := 0;
306 	OPEN  get_ineff_controls;
307 	FETCH get_ineff_controls into l_ineff_ctrls;
308 	CLOSE get_ineff_controls;
309     RETURN l_ineff_ctrls;
310 END get_ineff_ctrls_for_org;
311 
312 FUNCTION get_ineff_ctrl_prcnt_for_org
313 (p_certification_id     IN NUMBER,
314  p_org_id               in NUMBER,
315  p_from_date            in DATE,
316  p_to_date              in DATE,
317  p_key_ctrls_flag    in VARCHAR2)
318 RETURN NUMBER
319 IS
320 CURSOR get_ineff_controls
321 IS
322 SELECT count(1)
323 FROM 	(SELECT DISTINCT aca.pk1 certification_id, aca.pk2 organization_id, aca.control_id
324 	 FROM amw_control_associations aca,amw_opinions_log_v aov, amw_controls_b acb
325 	 WHERE aca.object_type     = 'BUSIPROC_CERTIFICATION'
326      AND acb.control_rev_id = aca.control_rev_id
327      AND nvl(acb.key_mitigating, 'N') = nvl(p_key_ctrls_flag, nvl(acb.key_mitigating, 'N'))
328 	 AND aca.pk1 		       = p_certification_id
329 	 AND aca.pk2               = p_org_id
330 	 AND aov.object_name       = 'AMW_ORG_CONTROL'
331 	 AND aov.opinion_type_code = 'EVALUATION'
332 	 AND aov.pk3_value         = p_org_id
333 	 AND aov.pk1_value         = aca.control_id
334 	 AND aov.audit_result_code <> 'EFFECTIVE'
335 	 AND aov.authored_date = (SELECT MAX(aov2.authored_date)
336 				  FROM amw_opinions_log aov2
337 				  WHERE aov2.object_opinion_type_id = aov.object_opinion_type_id
338 				  AND aov2.pk3_value = aov.pk3_value
339 				  AND aov2.pk1_value = aov.pk1_value
340                   AND aov2.authored_date >= nvl(p_from_date, sysdate-10000)
341                   AND aov2.authored_date < nvl(p_to_date, sysdate+1))
342      );
343 CURSOR get_total_controls
344 IS
345 SELECT count(1)
346 FROM 	(SELECT DISTINCT aca.pk1 certification_id, aca.pk2 organization_id, aca.control_id
347 FROM amw_control_associations aca, amw_controls_b acb
348 WHERE aca.object_type     = 'BUSIPROC_CERTIFICATION'
349 AND acb.control_rev_id = aca.control_rev_id
350 AND nvl(acb.key_mitigating, 'N') = nvl(p_key_ctrls_flag, nvl(acb.key_mitigating, 'N'))
351 AND aca.pk1 		  = p_certification_id
352 AND aca.pk2               = p_org_id);
353 
354 l_total_controls NUMBER;
355 l_ineff_controls NUMBER;
356 l_ctrl_prcnt     NUMBER;
357 
358 BEGIN
359     l_ineff_controls := 0;
360 	OPEN  get_ineff_controls;
361 	FETCH get_ineff_controls into l_ineff_controls;
362 	CLOSE get_ineff_controls;
363 
364     l_total_controls := 0;
365 	OPEN  get_total_controls;
366 	FETCH get_total_controls into l_total_controls;
367 	CLOSE get_total_controls;
368 
369     if l_total_controls = 0
370     then
371         RETURN l_total_controls;
372     else
373 	    l_ctrl_prcnt	:= round(l_ineff_controls/l_total_controls*100);
374         RETURN l_ctrl_prcnt;
375     END IF;
376 END get_ineff_ctrl_prcnt_for_org;
377 
378 
379 -- Get number of process given a certification and org within the certification
380 -- If significant process flag is passed then filter on significant process flag.
381 FUNCTION get_all_process_in_org
382 (p_certification_id     IN NUMBER,
383  p_org_id               in NUMBER,
384  p_sig_process in VARCHAR2)
385 RETURN NUMBER
386 IS
387 CURSOR get_all_processes
388 IS
389 SELECT count(distinct process_id)
390 FROM   amw_execution_scope
391 WHERE  organization_id   = p_org_id
392 AND    entity_id         = p_certification_id
393 AND level_id > 4;
394 l_total_proc           NUMBER;
395 BEGIN
396     l_total_proc := 0;
397 	OPEN  get_all_processes;
398 	FETCH get_all_processes into l_total_proc;
399 	CLOSE get_all_processes;
400     RETURN l_total_proc;
401 END get_all_process_in_org;
402 
403 
404 -- Get number of process certified given a certification and org within the certification
405 -- If significant process flag is passed then filter on significant process flag.
406 FUNCTION get_cert_process_in_org
407 (p_certification_id     IN NUMBER,
408  p_org_id               in NUMBER,
409  p_from_date            in DATE,
410  p_to_date              in DATE,
411  p_sig_process in VARCHAR2)
412 RETURN NUMBER
413 IS
414 CURSOR get_certified_processes
415 IS
416 SELECT count(DISTINCT aes.process_id)
417 FROM   amw_execution_scope aes, amw_opinions_log_v opinion, amw_process_organization apo
421 AND aes.level_id > 4
418 WHERE aes.entity_type = 'BUSIPROC_CERTIFICATION'
419 AND aes.organization_id = p_org_id
420 AND aes.entity_id = p_certification_id
422 AND apo.process_org_rev_id = aes.process_org_rev_id
423 AND nvl(apo.significant_process_flag, 'N') = nvl(p_sig_process, nvl(apo.significant_process_flag, 'N'))
424 AND opinion.pk1_value = aes.process_id
425 AND   opinion.pk3_value = aes.organization_id
426 AND   opinion.pk2_value = aes.entity_id
427 AND   opinion.opinion_type_code = 'CERTIFICATION'
428 AND   opinion.object_name = 'AMW_PROCESS_ORG'
429 AND opinion.authored_date = (SELECT MAX(aov2.authored_date)
430 				  FROM amw_opinions_log aov2
431 				  WHERE aov2.object_opinion_type_id = opinion.object_opinion_type_id
432 				  AND aov2.pk3_value = opinion.pk3_value
433 				  AND aov2.pk1_value = opinion.pk1_value
434 				  AND aov2.pk2_value = opinion.pk2_value
435                   AND aov2.authored_date >= nvl(p_from_date, sysdate-10000)
436                   AND aov2.authored_date < nvl(p_to_date, sysdate+1));
437 l_certified_proc           NUMBER;
438 BEGIN
439     l_certified_proc := 0;
440 	OPEN  get_certified_processes;
441 	FETCH get_certified_processes into l_certified_proc;
442 	CLOSE get_certified_processes;
443     RETURN l_certified_proc;
444 END get_cert_process_in_org;
445 
446 
447 -- Get number of process certified with issues given a certification and org within the certification
448 -- If significant process flag is passed then filter on significant process flag.
449 FUNCTION get_process_cert_issues_in_org
450 (p_certification_id     IN NUMBER,
451  p_org_id               in NUMBER,
452  p_from_date            in DATE,
453  p_to_date              in DATE,
454  p_sig_process in VARCHAR2)
455 RETURN NUMBER
456 IS
457 CURSOR get_proc_cert_issues
458 IS
459 SELECT count(DISTINCT aes.process_id)
460 FROM   amw_execution_scope aes, amw_opinions_log_v opinion, amw_process_organization apo
461 WHERE aes.entity_type = 'BUSIPROC_CERTIFICATION'
462 AND aes.organization_id = p_org_id
463 AND aes.entity_id = p_certification_id
464 AND aes.level_id > 4
465 AND apo.process_org_rev_id = aes.process_org_rev_id
466 AND nvl(apo.significant_process_flag, 'N') = nvl(p_sig_process, nvl(apo.significant_process_flag, 'N'))
467 AND opinion.pk1_value = aes.process_id
468 AND   opinion.pk3_value = aes.organization_id
469 AND   opinion.pk2_value = aes.entity_id
470 AND   opinion.opinion_type_code = 'CERTIFICATION'
471 AND   opinion.object_name = 'AMW_PROCESS_ORG'
472 AND opinion.authored_date = (SELECT MAX(aov2.authored_date)
473 				  FROM amw_opinions_log aov2
474 				  WHERE aov2.object_opinion_type_id = opinion.object_opinion_type_id
475 				  AND aov2.pk3_value = opinion.pk3_value
476 				  AND aov2.pk1_value = opinion.pk1_value
477 				  AND aov2.pk2_value = opinion.pk2_value
478                   AND aov2.authored_date >= nvl(p_from_date, sysdate-10000)
479                   AND aov2.authored_date < nvl(p_to_date, sysdate+1))
480 AND   opinion.audit_result_code <> 'EFFECTIVE';
481 l_proc_CWI           NUMBER;
482 BEGIN
483     l_proc_CWI := 0;
487     RETURN l_proc_CWI;
484 	OPEN  get_proc_cert_issues;
485 	FETCH get_proc_cert_issues into l_proc_CWI;
486 	CLOSE get_proc_cert_issues;
488 END get_process_cert_issues_in_org;
489 
490 
491 -----------------------------------------------------------------------------------------------------
492 -- ORG PROCESS FUNCTIONs
493 
494 -- Get number of ineffective controls given a certification, process and org within the certification
495 -- If key controls flag is passed, then only key controls are considered.
496 FUNCTION get_ineff_ctrls_for_org_proc
497 (p_certification_id     IN NUMBER,
498  p_org_id               in NUMBER,
499  p_process_id           in NUMBER,
500  p_from_date            in DATE,
501  p_to_date              in DATE,
502  p_key_ctrls_flag    in VARCHAR2)
503 RETURN NUMBER
504 IS
505 
506 CURSOR get_ineff_controls
507 IS
508 SELECT count(1)
512      AND acb.control_rev_id = aca.control_rev_id
509 FROM 	(SELECT DISTINCT aca.pk1 certification_id, aca.pk2 organization_id, aca.pk3 process_id, aca.control_id
510 	 FROM amw_control_associations aca,amw_opinions_log_v aov, amw_controls_b acb
511 	 WHERE aca.object_type     = 'BUSIPROC_CERTIFICATION'
513      AND nvl(acb.key_mitigating, 'N') = nvl(p_key_ctrls_flag, nvl(acb.key_mitigating, 'N'))
514 	 AND aca.pk1 		       = p_certification_id
515 	 AND aca.pk2               = p_org_id
516 	 AND aca.pk3               IN (SELECT DISTINCT process_id
517 	 	 		  	       FROM   amw_execution_scope
518 	 	 		  	       START WITH process_id = p_process_id
519                            AND entity_type = aca.object_type
520 	 	 		  	       AND organization_id = p_org_id
521 	 	 		  	       AND entity_id = p_certification_id
522 	 	 		  	       CONNECT BY PRIOR process_id = parent_process_id
523 	 	 		  	       AND organization_id = PRIOR organization_id
524 	 	 		  	       AND entity_id = PRIOR entity_id
525                            AND entity_type = PRIOR entity_type
526 	 	 		  	       )
527 	 AND aov.object_name       = 'AMW_ORG_CONTROL'
528 	 AND aov.opinion_type_code = 'EVALUATION'
529 	 AND aov.pk3_value         = p_org_id
530 	 AND aov.pk1_value         = aca.control_id
531 	 AND aov.audit_result_code <> 'EFFECTIVE'
532 	 AND aov.authored_date = (SELECT MAX(aov2.authored_date)
533 				  FROM amw_opinions_log aov2
534 				  WHERE aov2.object_opinion_type_id = aov.object_opinion_type_id
535 				  AND aov2.pk3_value = aov.pk3_value
536 				  AND aov2.pk1_value = aov.pk1_value
537                   AND aov2.authored_date >= nvl(p_from_date, sysdate-10000)
538                   AND aov2.authored_date < nvl(p_to_date, sysdate+1))
539      );
540  l_ineff_ctrls          NUMBER;
541 BEGIN
542     l_ineff_ctrls := 0;
543 	OPEN  get_ineff_controls;
544 	FETCH get_ineff_controls into l_ineff_ctrls;
545 	CLOSE get_ineff_controls;
546     RETURN l_ineff_ctrls;
547 END get_ineff_ctrls_for_org_proc;
548 
549 
550 -- Get number of evaluated controls given a certification, process and org within the certification
551 -- If key controls flag is passed, then only key controls are considered.
552 FUNCTION get_eval_ctrls_for_org_proc
553 (p_certification_id     IN NUMBER,
554  p_org_id               in NUMBER,
555  p_process_id           in NUMBER,
556  p_from_date            in DATE,
557  p_to_date              in DATE,
558  p_key_ctrls_flag    in VARCHAR2)
559 RETURN NUMBER
560 IS
561 CURSOR get_eval_controls
562 IS
563 SELECT count(1)
564 FROM 	(SELECT DISTINCT aca.pk1 certification_id, aca.pk2 organization_id, aca.pk3 process_id, aca.control_id
565 	 FROM amw_control_associations aca,amw_opinions_log_v aov, amw_controls_b acb
566 	 WHERE aca.object_type     = 'BUSIPROC_CERTIFICATION'
567      AND acb.control_rev_id = aca.control_rev_id
568      AND nvl(acb.key_mitigating, 'N') = nvl(p_key_ctrls_flag, nvl(acb.key_mitigating, 'N'))
569 	 AND aca.pk1 		   = p_certification_id
570 	 AND aca.pk2               = p_org_id
571 	 AND aca.pk3               IN (SELECT DISTINCT process_id
572 	 	 		  	       FROM   amw_execution_scope
573 	 	 		  	       START WITH process_id = p_process_id
574                            AND entity_type = aca.object_type
575 	 	 		  	       AND organization_id = p_org_id
576 	 	 		  	       AND entity_id = p_certification_id
577 	 	 		  	       CONNECT BY PRIOR process_id = parent_process_id
578 	 	 		  	       AND organization_id = PRIOR organization_id
579 	 	 		  	       AND entity_id = PRIOR entity_id
580                            AND entity_type = PRIOR entity_type
581 	 	 		  	       )
582 	 AND aov.object_name       = 'AMW_ORG_CONTROL'
583 	 AND aov.opinion_type_code = 'EVALUATION'
584 	 AND aov.pk3_value         = p_org_id
585 	 AND aov.pk1_value         = aca.control_id
586 	 AND aov.authored_date = (SELECT MAX(aov2.authored_date)
587 				  FROM amw_opinions_log aov2
588 				  WHERE aov2.object_opinion_type_id = aov.object_opinion_type_id
589 				  AND aov2.pk3_value = aov.pk3_value
590 				  AND aov2.pk1_value = aov.pk1_value
591                   AND aov2.authored_date >= nvl(p_from_date, sysdate-10000)
592                   AND aov2.authored_date < nvl(p_to_date, sysdate+1))
593 	 AND aov.audit_result_code IS NOT NULL);
594 l_eval_ctrls          NUMBER;
595 BEGIN
596     l_eval_ctrls := 0;
597 	OPEN  get_eval_controls;
598 	FETCH get_eval_controls into l_eval_ctrls;
599 	CLOSE get_eval_controls;
600     RETURN l_eval_ctrls;
601 END get_eval_ctrls_for_org_proc;
602 
603 -- Get number of controls given a certification, process and org within the certification
604 -- If key controls flag is passed, then only key controls are considered.
605 FUNCTION get_total_ctrls_for_org_proc
606 (p_certification_id     IN NUMBER,
607  p_org_id               in NUMBER,
608  p_process_id           in NUMBER,
609  p_key_ctrls_flag    in VARCHAR2)
610 RETURN NUMBER
611 IS
612 CURSOR get_total_controls
613 IS
614 SELECT count(1)
615 FROM 	(SELECT DISTINCT aca.pk1 certification_id, aca.pk2 organization_id, aca.pk3 process_id, aca.control_id
616 FROM amw_control_associations aca, amw_controls_b acb
617 WHERE aca.object_type     = 'BUSIPROC_CERTIFICATION'
618 AND acb.control_rev_id = aca.control_rev_id
619 AND nvl(acb.key_mitigating, 'N') = nvl(p_key_ctrls_flag, nvl(acb.key_mitigating, 'N'))
620 AND aca.pk1 		  = p_certification_id
621 AND aca.pk2           = p_org_id
622 AND aca.pk3           IN (SELECT DISTINCT process_id
623 			       FROM   amw_execution_scope
624 			       START WITH process_id = p_process_id
625                    AND entity_type = aca.object_type
626 			       AND organization_id = p_org_id
627 			       AND entity_id = p_certification_id
628 			       CONNECT BY PRIOR process_id = parent_process_id
629 			       AND organization_id = PRIOR organization_id
630 			       AND entity_id = PRIOR entity_id
634 BEGIN
631                    AND entity_type = PRIOR entity_type
632 			       ));
633 l_total_ctrls          NUMBER;
635     l_total_ctrls := 0;
636 	OPEN  get_total_controls;
637 	FETCH get_total_controls into l_total_ctrls;
638 	CLOSE get_total_controls;
639     RETURN l_total_ctrls;
640 END get_total_ctrls_for_org_proc;
641 
642 
643 FUNCTION get_ineff_ctrl_prcnt_org_proc
644 (p_certification_id     IN NUMBER,
645  p_org_id               in NUMBER,
646  p_process_id           in NUMBER,
647  p_from_date            in DATE,
648  p_to_date              in DATE,
649  p_key_ctrls_flag    in VARCHAR2)
650 RETURN NUMBER
651 IS
652 CURSOR get_ineff_controls
653 IS
654 SELECT count(1)
655 FROM 	(SELECT DISTINCT aca.pk1 certification_id, aca.pk2 organization_id, aca.pk3 process_id, aca.control_id
656 	 FROM amw_control_associations aca,amw_opinions_log_v aov, amw_controls_b acb
657 	 WHERE aca.object_type     = 'BUSIPROC_CERTIFICATION'
658      AND acb.control_rev_id = aca.control_rev_id
659      AND nvl(acb.key_mitigating, 'N') = nvl(p_key_ctrls_flag, nvl(acb.key_mitigating, 'N'))
660 	 AND aca.pk1 		       = p_certification_id
661 	 AND aca.pk2               = p_org_id
662 	 AND aca.pk3               IN (SELECT DISTINCT process_id
663 	 	 		  	       FROM   amw_execution_scope
664 	 	 		  	       START WITH process_id = p_process_id
665                            AND entity_type = aca.object_type
666 	 	 		  	       AND organization_id = p_org_id
667 	 	 		  	       AND entity_id = p_certification_id
668 	 	 		  	       CONNECT BY PRIOR process_id = parent_process_id
669 	 	 		  	       AND organization_id = PRIOR organization_id
670 	 	 		  	       AND entity_id = PRIOR entity_id
671                            AND entity_type = PRIOR entity_type
672 	 	 		  	       )
673 	 AND aov.object_name       = 'AMW_ORG_CONTROL'
674 	 AND aov.opinion_type_code = 'EVALUATION'
675 	 AND aov.pk3_value         = p_org_id
676 	 AND aov.pk1_value         = aca.control_id
677 	 AND aov.audit_result_code <> 'EFFECTIVE'
678 	 AND aov.authored_date = (SELECT MAX(aov2.authored_date)
679 				  FROM amw_opinions_log aov2
680 				  WHERE aov2.object_opinion_type_id = aov.object_opinion_type_id
681 				  AND aov2.pk3_value = aov.pk3_value
682 				  AND aov2.pk1_value = aov.pk1_value
683                   AND aov2.authored_date >= nvl(p_from_date, sysdate-10000)
684                   AND aov2.authored_date < nvl(p_to_date, sysdate+1))
685      );
686 CURSOR get_total_controls
687 IS
688 SELECT count(1)
689 FROM 	(SELECT DISTINCT aca.pk1 certification_id, aca.pk2 organization_id, aca.pk3 process_id, aca.control_id
690 FROM amw_control_associations aca, amw_controls_b acb
691 WHERE aca.object_type     = 'BUSIPROC_CERTIFICATION'
692 AND acb.control_rev_id = aca.control_rev_id
693 AND nvl(acb.key_mitigating, 'N') = nvl(p_key_ctrls_flag, nvl(acb.key_mitigating, 'N'))
694 AND aca.pk1 		  = p_certification_id
695 AND aca.pk2           = p_org_id
696 AND aca.pk3           IN (SELECT DISTINCT process_id
697 			       FROM   amw_execution_scope
698 			       START WITH process_id = p_process_id
699                    AND entity_type = aca.object_type
700 			       AND organization_id = p_org_id
701 			       AND entity_id = p_certification_id
702 			       CONNECT BY PRIOR process_id = parent_process_id
703 			       AND organization_id = PRIOR organization_id
704 			       AND entity_id = PRIOR entity_id
705                    AND entity_type = PRIOR entity_type
706 			       ));
707 l_total_controls NUMBER;
708 l_ineff_controls NUMBER;
709 l_ctrl_prcnt     NUMBER;
710 
711 BEGIN
712     l_ineff_controls := 0;
713 	OPEN  get_ineff_controls;
714 	FETCH get_ineff_controls into l_ineff_controls;
715 	CLOSE get_ineff_controls;
716 
717     l_total_controls := 0;
718 	OPEN  get_total_controls;
719 	FETCH get_total_controls into l_total_controls;
720 	CLOSE get_total_controls;
721 
722     if l_total_controls = 0
723     then
724         RETURN l_total_controls;
725     else
726 	    l_ctrl_prcnt	:= round(l_ineff_controls/l_total_controls*100);
727         RETURN l_ctrl_prcnt;
728     END IF;
729 END get_ineff_ctrl_prcnt_org_proc;
730 
731 
732 FUNCTION get_unmit_risk_prcnt_org_proc
733 (p_certification_id         IN NUMBER,
734  p_org_id               in NUMBER,
735  p_process_id           in NUMBER,
736  p_from_date            in DATE,
737  p_to_date              in DATE,
738  p_material_risks_flag  in VARCHAR2)
739 RETURN NUMBER
740 IS
741 CURSOR get_total_risks
742 IS
743 SELECT count(1)
744 FROM 	(SELECT DISTINCT ara.pk1 certification_id, ara.pk2 organization_id, ara.pk3 process_id, ara.risk_id
745 FROM amw_risk_associations ara, amw_risks_b arb
746 WHERE ara.object_type = 'BUSIPROC_CERTIFICATION'
747 AND ara.risk_rev_id = arb.risk_rev_id
751 AND ara.pk3 IN (SELECT DISTINCT process_id
748 AND nvl(p_material_risks_flag, nvl(arb.material, 'N')) = nvl(arb.material, 'N')
749 AND ara.pk1 = p_certification_id
750 AND ara.pk2 = p_org_id
752 		FROM   amw_execution_scope
753 		START WITH process_id = p_process_id
754         AND entity_type = ara.object_type
755 		AND organization_id = p_org_id
756 		AND entity_id = p_certification_id
757 		CONNECT BY PRIOR process_id = parent_process_id
758 		AND organization_id = PRIOR organization_id
759 		AND entity_id = PRIOR entity_id
760         AND entity_type = PRIOR entity_type
761 	       ));
762 CURSOR get_unmitigated_risks
763 IS
764 SELECT count(1)
765 FROM 	(SELECT DISTINCT ara.pk1 certification_id, ara.pk2 organization_id, ara.pk3 process_id, ara.risk_id
766 	 FROM amw_risk_associations ara, amw_opinions_log_v aov, amw_risks_b arb
767 	 WHERE ara.object_type = 'BUSIPROC_CERTIFICATION'
768 	 AND ara.pk1 = p_certification_id
769 	 AND ara.pk2 = p_org_id
770      AND ara.risk_rev_id = arb.risk_rev_id
771      AND nvl(p_material_risks_flag, nvl(arb.material, 'N')) = nvl(arb.material, 'N')
772 	 AND ara.pk3 IN (SELECT DISTINCT process_id
773 				FROM   amw_execution_scope
774 				START WITH process_id = p_process_id
775                 AND entity_type = ara.object_type
776                 AND organization_id = p_org_id
777 				AND entity_id = p_certification_id
778 				CONNECT BY PRIOR process_id = parent_process_id
779 				AND organization_id = PRIOR organization_id
780 				AND entity_id = PRIOR entity_id
781                 AND entity_type = PRIOR entity_type
782 			       )
783 	 AND aov.object_name = 'AMW_ORG_PROCESS_RISK'
784 	 AND aov.opinion_type_code = 'EVALUATION'
785 	 AND aov.pk3_value = ara.pk2 --org_id
786 	 AND aov.pk4_value = ara.pk3 --process_id
787 	 AND aov.pk1_value = ara.risk_id
788 	 AND aov.authored_date = (SELECT MAX(aov2.authored_date)
789 				  FROM amw_opinions_log aov2
793 				  AND aov2.pk4_value = aov.pk4_value
790 				  WHERE aov2.object_opinion_type_id = aov.object_opinion_type_id
791                   AND aov2.authored_date >= nvl(p_from_date, sysdate-10000)
792                   AND aov2.authored_date < nvl(p_to_date, sysdate+1)
794 				  AND aov2.pk3_value = aov.pk3_value
795 				  AND aov2.pk1_value = aov.pk1_value)
796      AND aov.audit_result_code <> 'EFFECTIVE'
797 	 );
798 
799 l_total_risks NUMBER;
800 l_unmitigated_risks NUMBER;
801 l_risk_prcnt        NUMBER;
802 BEGIN
803     l_total_risks := 0;
804 	OPEN  get_total_risks;
805 	FETCH get_total_risks into l_total_risks;
806 	CLOSE get_total_risks;
807 
808     l_unmitigated_risks := 0;
809 	OPEN  get_unmitigated_risks;
810 	FETCH get_unmitigated_risks into l_unmitigated_risks;
811 	CLOSE get_unmitigated_risks;
812 
813     if l_total_risks = 0
814     then
815         RETURN l_total_risks;
816     else
817 	    l_risk_prcnt	:= round(l_unmitigated_risks/l_total_risks*100);
818         RETURN l_risk_prcnt;
819     END IF;
820 END get_unmit_risk_prcnt_org_proc;
821 
822 -- Get number of risks given a certification, process and org within the certification
823 -- If material risks flag is passed, then only material risks are considered.
824 FUNCTION get_total_risks_for_org_proc
825 (p_certification_id         IN NUMBER,
826  p_org_id               in NUMBER,
827  p_process_id           in NUMBER,
828  p_material_risks_flag  in VARCHAR2)
829 RETURN NUMBER
830 IS
831 CURSOR get_total_risks
832 IS
833 SELECT count(1)
834 FROM 	(SELECT DISTINCT ara.pk1 certification_id, ara.pk2 organization_id, ara.pk3 process_id, ara.risk_id
835 FROM amw_risk_associations ara, amw_risks_b arb
836 WHERE ara.object_type = 'BUSIPROC_CERTIFICATION'
837 AND ara.risk_rev_id = arb.risk_rev_id
838 AND nvl(p_material_risks_flag, nvl(arb.material, 'N')) = nvl(arb.material, 'N')
839 AND ara.pk1 = p_certification_id
840 AND ara.pk2 = p_org_id
841 AND ara.pk3 IN (SELECT DISTINCT process_id
842 		FROM   amw_execution_scope
843 		START WITH process_id = p_process_id
844         AND entity_type = ara.object_type
845 		AND organization_id = p_org_id
846 		AND entity_id = p_certification_id
847 		CONNECT BY PRIOR process_id = parent_process_id
848 		AND organization_id = PRIOR organization_id
849 		AND entity_id = PRIOR entity_id
850         AND entity_type = PRIOR entity_type
851 	       ));
852 l_total_risks          NUMBER;
853 BEGIN
854     l_total_risks := 0;
855 	OPEN  get_total_risks;
856 	FETCH get_total_risks into l_total_risks;
857 	CLOSE get_total_risks;
858     RETURN l_total_risks;
859 END get_total_risks_for_org_proc;
860 
861 
862 -- Get number of evaluated risks given a certification, process and org within the certification
863 -- If fromDate and toDate are passed, then only evaluations created within that period are considered.
867  p_org_id               in NUMBER,
864 -- If material risks flag is passed, then only material risks are considered.
865 FUNCTION get_eval_risk_for_org_proc
866 (p_certification_id         IN NUMBER,
868  p_process_id           in NUMBER,
869  p_from_date            in DATE,
870  p_to_date              in DATE,
871  p_material_risks_flag  in VARCHAR2)
872 RETURN NUMBER
873 IS
874 CURSOR get_eval_risks
875 IS
876 SELECT count(1)
877 FROM 	(SELECT DISTINCT ara.pk1 certification_id, ara.pk2 organization_id, ara.pk3 process_id, ara.risk_id
878 	 FROM amw_risk_associations ara, amw_opinions_log_v aov, amw_risks_b arb
879 	 WHERE ara.object_type = 'BUSIPROC_CERTIFICATION'
880 	 AND ara.pk1 = p_certification_id
881 	 AND ara.pk2 = p_org_id
882      AND ara.risk_rev_id = arb.risk_rev_id
883      AND nvl(p_material_risks_flag, nvl(arb.material, 'N')) = nvl(arb.material, 'N')
884 	 AND ara.pk3 IN (SELECT DISTINCT process_id
885 				FROM   amw_execution_scope
886 				START WITH process_id = p_process_id
887                 AND entity_type = ara.object_type
888                 AND organization_id = p_org_id
889 				AND entity_id = p_certification_id
890 				CONNECT BY PRIOR process_id = parent_process_id
891 				AND organization_id = PRIOR organization_id
892 				AND entity_id = PRIOR entity_id
893                 AND entity_type = PRIOR entity_type
894 			       )
895 	 AND aov.object_name = 'AMW_ORG_PROCESS_RISK'
896 	 AND aov.opinion_type_code = 'EVALUATION'
897 	 AND aov.pk3_value = ara.pk2 --org_id
898 	 AND aov.pk4_value = ara.pk3 --process_id
899 	 AND aov.pk1_value = ara.risk_id
900 	 AND aov.authored_date = (SELECT MAX(aov2.authored_date)
901 				  FROM amw_opinions_log aov2
902 				  WHERE aov2.object_opinion_type_id = aov.object_opinion_type_id
903                   AND aov2.authored_date >= nvl(p_from_date, sysdate-10000)
904                   AND aov2.authored_date < nvl(p_to_date, sysdate+1)
905 				  AND aov2.pk4_value = aov.pk4_value
906 				  AND aov2.pk3_value = aov.pk3_value
907 				  AND aov2.pk1_value = aov.pk1_value)
908 	 AND aov.audit_result_code IS NOT NULL
909 	 );
910 l_eval_risks          NUMBER;
911 BEGIN
912     l_eval_risks := 0;
913 	OPEN  get_eval_risks;
914 	FETCH get_eval_risks into l_eval_risks;
915 	CLOSE get_eval_risks;
916     RETURN l_eval_risks;
917 END get_eval_risk_for_org_proc;
918 
919 -- Get number of unmitigated risks given a certification, org and process within the certification
920 -- If fromDate and toDate are passed, then only evaluations created within that period are considered.
921 -- If material risks flag is passed, then only material risks are considered.
922 FUNCTION get_unmit_risk_for_org_proc
923 (p_certification_id     in NUMBER,
924  p_org_id               in NUMBER,
925  p_process_id           in NUMBER,
926  p_from_date            in DATE,
927  p_to_date              in DATE,
928  p_material_risks_flag  in VARCHAR2)
929 RETURN NUMBER
930 IS
931 CURSOR get_unmitigated_risks
932 IS
933 SELECT count(1)
934 FROM 	(SELECT DISTINCT ara.pk1 certification_id, ara.pk2 organization_id, ara.pk3 process_id, ara.risk_id
935 	 FROM amw_risk_associations ara, amw_opinions_log_v aov, amw_risks_b arb
936 	 WHERE ara.object_type = 'BUSIPROC_CERTIFICATION'
937 	 AND ara.pk1 = p_certification_id
938 	 AND ara.pk2 = p_org_id
939      AND ara.risk_rev_id = arb.risk_rev_id
940      AND nvl(p_material_risks_flag, nvl(arb.material, 'N')) = nvl(arb.material, 'N')
941 	 AND ara.pk3 IN (SELECT DISTINCT process_id
942 				FROM   amw_execution_scope
943 				START WITH process_id = p_process_id
944                 AND entity_type = ara.object_type
945                 AND organization_id = p_org_id
946 				AND entity_id = p_certification_id
947 				CONNECT BY PRIOR process_id = parent_process_id
948 				AND organization_id = PRIOR organization_id
949 				AND entity_id = PRIOR entity_id
950                 AND entity_type = PRIOR entity_type
951 			       )
952 	 AND aov.object_name = 'AMW_ORG_PROCESS_RISK'
953 	 AND aov.opinion_type_code = 'EVALUATION'
954 	 AND aov.pk3_value = ara.pk2 --org_id
955 	 AND aov.pk4_value = ara.pk3 --process_id
956 	 AND aov.pk1_value = ara.risk_id
957 	 AND aov.authored_date = (SELECT MAX(aov2.authored_date)
958 				  FROM amw_opinions_log aov2
959 				  WHERE aov2.object_opinion_type_id = aov.object_opinion_type_id
960                   AND aov2.authored_date >= nvl(p_from_date, sysdate-10000)
961                   AND aov2.authored_date < nvl(p_to_date, sysdate+1)
962 				  AND aov2.pk4_value = aov.pk4_value
963 				  AND aov2.pk3_value = aov.pk3_value
964 				  AND aov2.pk1_value = aov.pk1_value)
965      AND aov.audit_result_code <> 'EFFECTIVE'
966 	 );
967 l_unmit_risks          NUMBER;
968 
969 BEGIN
970     l_unmit_risks := 0;
971 	OPEN  get_unmitigated_risks;
972 	FETCH get_unmitigated_risks into l_unmit_risks;
973 	CLOSE get_unmitigated_risks;
974     RETURN l_unmit_risks;
975 END get_unmit_risk_for_org_proc;
976 
977 
978 -- Get number of sub orgs associated to the given process within a given org.
979 FUNCTION get_total_org
980 (p_certification_id     in NUMBER,
981  p_org_id               in NUMBER,
982  p_process_id           in NUMBER)
983 RETURN NUMBER
984 IS
985 CURSOR get_total_org
986 IS
987 SELECT count(distinct processorg.organization_id)
988 FROM amw_execution_scope processorg
989 WHERE processorg.process_id = p_process_id
990 AND   processorg.organization_id IN
991         (SELECT object_id
992 	   FROM amw_entity_hierarchies
993 	  START WITH parent_object_id = p_org_id
994 	    AND object_type = 'ORG'
995 	    AND entity_id = p_certification_id
996 	    AND entity_type='BUSIPROC_CERTIFICATION'
997 	  CONNECT BY parent_object_id = PRIOR object_id
998 	    AND parent_object_type = PRIOR object_type
1002 AND   processorg.entity_type='BUSIPROC_CERTIFICATION';
999 	    AND entity_id = PRIOR entity_id
1000 	    AND entity_type = PRIOR entity_type)
1001 AND   processorg.entity_id=p_certification_id
1003 
1004 CURSOR get_var_total_org
1005 IS
1006 SELECT count(1)
1007 FROM (SELECT distinct procorg.organization_id, procorg.process_id
1008       FROM amw_execution_scope scp,
1009 	   amw_process_organization procorg
1010       WHERE scp.process_org_rev_id = procorg.process_org_rev_id
1011         AND procorg.standard_variation IN
1012 	      (select process_rev_id
1013 	         from amw_process
1014                 where process_id = p_process_id)
1015         AND scp.organization_id IN
1016 	        (SELECT object_id
1017 		   FROM amw_entity_hierarchies
1018  	     START WITH parent_object_id = p_org_id
1019 	     	    AND object_type = 'ORG'
1020 		    AND entity_id = p_certification_id
1021 	            AND entity_type='BUSIPROC_CERTIFICATION'
1022 	     CONNECT BY parent_object_id = PRIOR object_id
1023 	            AND parent_object_type = PRIOR object_type
1024 	            AND entity_id = PRIOR entity_id
1025 	            AND entity_type = PRIOR entity_type)
1026        AND  scp.entity_id=p_certification_id
1027        AND  scp.entity_type='BUSIPROC_CERTIFICATION');
1028 
1029 l_total_org     NUMBER;
1030 l_var_total_org NUMBER;
1031 BEGIN
1032     l_total_org := 0;
1033     l_var_total_org := 0;
1034 	OPEN  get_total_org;
1035 	FETCH get_total_org into l_total_org;
1036 	CLOSE get_total_org;
1037 
1038 	OPEN  get_var_total_org;
1039 	FETCH get_var_total_org into l_var_total_org;
1040 	CLOSE get_var_total_org;
1041 
1042     l_total_org := l_total_org + l_var_total_org;
1043 
1044     RETURN l_total_org;
1045 
1046 END get_total_org;
1047 
1048 
1049 -- Get number of sub orgs certified with issues that are associated to the given process and within a given org.
1050 -- If fromDate and toDate are passed, then only evaluations created within that period are considered.
1051 FUNCTION get_total_org_cert_issues
1052 (p_certification_id     in NUMBER,
1053  p_org_id               in NUMBER,
1054  p_process_id           in NUMBER,
1055  p_from_date            in DATE,
1056  p_to_date              in DATE)
1057 RETURN NUMBER
1058 IS
1059 CURSOR get_org_proc_cert_issues
1060 IS
1061 SELECT count(distinct pk3_value)
1062 FROM   amw_opinions_log_v opinion
1063 WHERE  opinion.pk2_value = p_certification_id
1064 AND    opinion.pk1_value = p_process_id
1065 AND    opinion.opinion_type_code = 'CERTIFICATION'
1066 AND    opinion.object_name = 'AMW_ORG_PROCESS'
1067 AND    opinion.audit_result_code <> 'EFFECTIVE'
1068 AND    opinion.authored_date = (SELECT MAX(aov2.authored_date)
1069 				  FROM amw_opinions_log aov2
1070 				  WHERE aov2.object_opinion_type_id = opinion.object_opinion_type_id
1071                   AND aov2.authored_date >= nvl(p_from_date, sysdate-10000)
1072                   AND aov2.authored_date < nvl(p_to_date, sysdate+1)
1073 				  AND aov2.pk2_value = opinion.pk2_value
1074 				  AND aov2.pk3_value = opinion.pk3_value
1075 				  AND aov2.pk1_value = opinion.pk1_value)
1076 AND    opinion.pk3_value IN
1077 	      (SELECT object_id
1078 		   FROM amw_entity_hierarchies
1079  	     START WITH parent_object_id = p_org_id
1080 	     	    AND object_type = 'ORG'
1081 		    AND entity_id = p_certification_id
1082 	            AND entity_type='BUSIPROC_CERTIFICATION'
1083 	     CONNECT BY parent_object_id = PRIOR object_id
1084 	            AND parent_object_type = PRIOR object_type
1085 	            AND entity_id = PRIOR entity_id
1086 	            AND entity_type = PRIOR entity_type)
1087 AND    exists (select 'Y' from amw_execution_scope scope
1088 	       where scope.entity_type='BUSIPROC_CERTIFICATION'
1089 	         and scope.entity_id=p_certification_id
1090 		 and scope.organization_id=opinion.pk3_value
1091 		 and scope.process_id=opinion.pk1_value);
1092 
1093 CURSOR get_var_org_proc_cert_issues
1094 IS
1095 SELECT count(1)
1096 FROM (SELECT distinct opinion.pk1_value, opinion.pk3_value
1097       FROM  amw_opinions_log_v opinion,
1098             amw_execution_scope scp,
1099 	    amw_process_organization procorg
1100       WHERE opinion.pk2_value = p_certification_id
1101       AND   opinion.pk1_value = scp.process_id
1102       AND   opinion.pk3_value = scp.organization_id
1103       AND   scp.entity_type = 'BUSIPROC_CERTIFICATION'
1104       AND   scp.entity_id = p_certification_id
1105       AND   scp.process_org_rev_id = procorg.process_org_rev_id
1106       AND   procorg.standard_variation in
1107 	        (select process_rev_id
1108 		 from amw_process
1109 		 where process_id = p_process_id)
1110       AND   scp.organization_id IN
1111                 (SELECT object_id
1112 		   FROM amw_entity_hierarchies
1113  	     START WITH parent_object_id = p_org_id
1114 	     	    AND object_type = 'ORG'
1115 		    AND entity_id = p_certification_id
1116 	            AND entity_type='BUSIPROC_CERTIFICATION'
1117 	     CONNECT BY parent_object_id = PRIOR object_id
1118 	            AND parent_object_type = PRIOR object_type
1119 	            AND entity_id = PRIOR entity_id
1120 	            AND entity_type = PRIOR entity_type)
1121       AND   opinion.opinion_type_code = 'CERTIFICATION'
1122       AND   opinion.object_name = 'AMW_ORG_PROCESS'
1123       AND   opinion.authored_date = (SELECT MAX(aov2.authored_date)
1124 				  FROM amw_opinions_log aov2
1125 				  WHERE aov2.object_opinion_type_id = opinion.object_opinion_type_id
1126                   AND aov2.authored_date >= nvl(p_from_date, sysdate-10000)
1127                   AND aov2.authored_date < nvl(p_to_date, sysdate+1)
1128 				  AND aov2.pk2_value = opinion.pk2_value
1129 				  AND aov2.pk3_value = opinion.pk3_value
1130 				  AND aov2.pk1_value = opinion.pk1_value)
1131       AND   opinion.audit_result_code <> 'EFFECTIVE');
1132 l_total_org     NUMBER;
1136     l_var_total_org := 0;
1133 l_var_total_org NUMBER;
1134 BEGIN
1135     l_total_org := 0;
1137 	OPEN  get_org_proc_cert_issues;
1138 	FETCH get_org_proc_cert_issues into l_total_org;
1139 	CLOSE get_org_proc_cert_issues;
1140 
1141 	OPEN  get_var_org_proc_cert_issues;
1142 	FETCH get_var_org_proc_cert_issues into l_var_total_org;
1143 	CLOSE get_var_org_proc_cert_issues;
1144 
1145     l_total_org := l_total_org + l_var_total_org;
1146     RETURN l_total_org;
1147 END get_total_org_cert_issues;
1148 
1149 
1150 -- Get number of sub orgs certified that are associated to the given process and within a given org.
1151 -- If fromDate and toDate are passed, then only evaluations created within that period are considered.
1152 FUNCTION get_total_org_cert
1153 (p_certification_id     in NUMBER,
1154  p_org_id               in NUMBER,
1155  p_process_id           in NUMBER,
1156  p_from_date            in DATE,
1157  p_to_date              in DATE)
1158 RETURN NUMBER
1159 IS
1160 CURSOR get_org_proc_certified
1161 IS
1162 SELECT count(distinct pk3_value)
1163 FROM   amw_opinions_log_v opinion
1164 WHERE  opinion.pk2_value = p_certification_id
1165 AND    opinion.pk1_value = p_process_id
1166 AND    opinion.opinion_type_code = 'CERTIFICATION'
1167 AND    opinion.object_name = 'AMW_ORG_PROCESS'
1168 AND    opinion.authored_date = (SELECT MAX(aov2.authored_date)
1169 				  FROM amw_opinions_log aov2
1170 				  WHERE aov2.object_opinion_type_id = opinion.object_opinion_type_id
1171                   AND aov2.authored_date >= nvl(p_from_date, sysdate-10000)
1172                   AND aov2.authored_date < nvl(p_to_date, sysdate+1)
1173 				  AND aov2.pk2_value = opinion.pk2_value
1174 				  AND aov2.pk3_value = opinion.pk3_value
1175 				  AND aov2.pk1_value = opinion.pk1_value)
1176 AND    opinion.pk3_value IN
1177 	      (SELECT object_id
1178 		   FROM amw_entity_hierarchies
1179  	     START WITH parent_object_id = p_org_id
1180 	     	    AND object_type = 'ORG'
1181 		    AND entity_id = p_certification_id
1182 	            AND entity_type='BUSIPROC_CERTIFICATION'
1183 	     CONNECT BY parent_object_id = PRIOR object_id
1184 	            AND parent_object_type = PRIOR object_type
1185 	            AND entity_id = PRIOR entity_id
1186 	            AND entity_type = PRIOR entity_type)
1187 AND    exists (select 'Y' from amw_execution_scope scope
1188 	       where scope.entity_type='BUSIPROC_CERTIFICATION'
1189 	         and scope.entity_id=p_certification_id
1190 		 and scope.organization_id=opinion.pk3_value
1191 		 and scope.process_id=opinion.pk1_value);
1192 
1193 CURSOR get_var_org_proc_certified
1194 IS
1195 SELECT count(1)
1196 FROM (SELECT distinct opinion.pk1_value, opinion.pk3_value
1197       FROM  amw_opinions_log_v opinion,
1198             amw_execution_scope scp,
1199 	    amw_process_organization procorg
1200       WHERE opinion.pk2_value = p_certification_id
1201       AND   opinion.pk1_value = scp.process_id
1202       AND   opinion.pk3_value = scp.organization_id
1203       AND   opinion.authored_date = (SELECT MAX(aov2.authored_date)
1204 				  FROM amw_opinions_log aov2
1205 				  WHERE aov2.object_opinion_type_id = opinion.object_opinion_type_id
1206                   AND aov2.authored_date >= nvl(p_from_date, sysdate-10000)
1207                   AND aov2.authored_date < nvl(p_to_date, sysdate+1)
1208 				  AND aov2.pk2_value = opinion.pk2_value
1209 				  AND aov2.pk3_value = opinion.pk3_value
1210 				  AND aov2.pk1_value = opinion.pk1_value)
1211       AND   scp.entity_type = 'BUSIPROC_CERTIFICATION'
1212       AND   scp.entity_id = p_certification_id
1213       AND   scp.process_org_rev_id = procorg.process_org_rev_id
1214       AND   procorg.standard_variation in
1215 	        (select process_rev_id
1216 		 from amw_process
1217 		 where process_id = p_process_id)
1218       AND   scp.organization_id IN
1219                 (SELECT object_id
1220 		   FROM amw_entity_hierarchies
1221  	     START WITH parent_object_id = p_org_id
1222 	     	    AND object_type = 'ORG'
1223 		    AND entity_id = p_certification_id
1224 	            AND entity_type='BUSIPROC_CERTIFICATION'
1225 	     CONNECT BY parent_object_id = PRIOR object_id
1226 	            AND parent_object_type = PRIOR object_type
1227 	            AND entity_id = PRIOR entity_id
1228 	            AND entity_type = PRIOR entity_type)
1229       AND   opinion.opinion_type_code = 'CERTIFICATION'
1230       AND   opinion.object_name = 'AMW_ORG_PROCESS');
1231 l_total_org     NUMBER;
1232 l_var_total_org NUMBER;
1233 BEGIN
1234     l_total_org := 0;
1235     l_var_total_org := 0;
1236 	OPEN  get_org_proc_certified;
1237 	FETCH get_org_proc_certified into l_total_org;
1238 	CLOSE get_org_proc_certified;
1239 
1240 	OPEN  get_var_org_proc_certified;
1241 	FETCH get_var_org_proc_certified into l_var_total_org;
1242 	CLOSE get_var_org_proc_certified;
1243 
1244     l_total_org := l_total_org + l_var_total_org;
1245     RETURN l_total_org;
1246 END get_total_org_cert;
1247 
1248 -- Get number of sub processes of a process
1249 FUNCTION get_total_sub_process
1250 (p_certification_id     in NUMBER,
1251  p_org_id               in NUMBER,
1252  p_process_id           in NUMBER)
1253 RETURN NUMBER
1254 IS
1255 CURSOR get_all_sub_processes
1256 IS
1257 SELECT count(distinct process_id)
1258 FROM   amw_execution_scope
1259 START WITH parent_process_id = p_process_id
1260 AND 	   organization_id   = p_org_id
1261 AND 	   entity_id         = p_certification_id
1262 AND        entity_type       = 'BUSIPROC_CERTIFICATION'
1263 CONNECT BY PRIOR process_id     = parent_process_id
1264 AND 		organization_id = PRIOR organization_id
1265 AND 		entity_id       = PRIOR entity_id
1266 AND 		entity_type       = PRIOR entity_type;
1267 l_total_proc           NUMBER;
1268 BEGIN
1269     l_total_proc := 0;
1270 	OPEN  get_all_sub_processes;
1274 END get_total_sub_process;
1271 	FETCH get_all_sub_processes into l_total_proc;
1272 	CLOSE get_all_sub_processes;
1273     RETURN l_total_proc;
1275 
1276 FUNCTION get_cert_sub_process
1277 (p_certification_id     in NUMBER,
1278  p_org_id               in NUMBER,
1279  p_process_id           in NUMBER,
1280  p_from_date            in DATE,
1281  p_to_date              in DATE)
1282 RETURN NUMBER
1283 IS
1284 CURSOR get_cert_sub_process
1285 IS
1286 SELECT count(distinct process_id)
1287 FROM   amw_execution_scope amw_exec
1288 WHERE EXISTS (SELECT  opinion.opinion_id
1289 		FROM amw_opinions_v opinion
1290 		WHERE opinion.pk1_value = amw_exec.process_id
1291 		AND   opinion.pk3_value = p_org_id
1292 		AND   opinion.pk2_value = p_certification_id
1293 		AND   opinion.opinion_type_code = 'CERTIFICATION'
1294 		AND   opinion.object_name = 'AMW_ORG_PROCESS'
1295 	     )
1296 START WITH parent_process_id = p_process_id
1297 AND 	   organization_id   = p_org_id
1298 AND 	   entity_id         = p_certification_id
1299 AND        entity_type       = 'BUSIPROC_CERTIFICATION'
1300 CONNECT BY PRIOR process_id     = parent_process_id
1301 AND 		organization_id = PRIOR organization_id
1302 AND 		entity_id       = PRIOR entity_id
1303 AND 		entity_type       = PRIOR entity_type;
1304 l_total_proc           NUMBER;
1305 BEGIN
1306     l_total_proc := 0;
1307 	OPEN  get_cert_sub_process;
1308 	FETCH get_cert_sub_process into l_total_proc;
1309 	CLOSE get_cert_sub_process;
1310     RETURN l_total_proc;
1311 END get_cert_sub_process;
1312 
1313 FUNCTION get_sub_process_cert_issues
1314 (p_certification_id     in NUMBER,
1315  p_org_id               in NUMBER,
1316  p_process_id           in NUMBER,
1317  p_from_date            in DATE,
1318  p_to_date              in DATE)
1319 RETURN NUMBER
1320 IS
1321 CURSOR get_sub_process_cert_issues
1322 IS
1323 SELECT count(distinct process_id)
1324 FROM   amw_execution_scope amw_exec
1325 WHERE EXISTS (SELECT  opinion.opinion_id
1326 		FROM amw_opinions_v opinion
1327 		WHERE opinion.pk1_value = amw_exec.process_id
1328 		AND   opinion.pk3_value = p_org_id
1329 		AND   opinion.pk2_value = p_certification_id
1330 		AND   opinion.opinion_type_code = 'CERTIFICATION'
1331 		AND   opinion.object_name = 'AMW_ORG_PROCESS'
1332 		AND   opinion.audit_result_code <> 'EFFECTIVE'
1333 	     )
1334 START WITH parent_process_id = p_process_id
1335 AND 	   organization_id   = p_org_id
1336 AND 	   entity_id         = p_certification_id
1337 AND        entity_type       = 'BUSIPROC_CERTIFICATION'
1338 CONNECT BY PRIOR process_id     = parent_process_id
1339 AND 		organization_id = PRIOR organization_id
1340 AND 		entity_id       = PRIOR entity_id
1341 AND 		entity_type       = PRIOR entity_type;
1342 l_total_proc           NUMBER;
1343 BEGIN
1344     l_total_proc := 0;
1345 	OPEN  get_sub_process_cert_issues;
1346 	FETCH get_sub_process_cert_issues into l_total_proc;
1347 	CLOSE get_sub_process_cert_issues;
1348     RETURN l_total_proc;
1349 END get_sub_process_cert_issues;
1350 
1351 
1352 END AMW_ORG_PROC_CERT_DATED_SUMM;