[Home] [Help]
PACKAGE BODY: APPS.PJI_FM_XBS_ACCUM_MAINT
Source
1 PACKAGE BODY Pji_Fm_Xbs_Accum_Maint AS
2 /* $Header: PJIPMNTB.pls 120.62.12020000.10 2013/04/25 18:49:51 sachandr ship $ */
3
4
5 ---------------------------------------------------------------------------
6 ------ Global vars..
7 ---------------------------------------------------------------------------
8
9 g_package_name VARCHAR2(100) := 'PJI_FM_XBS_ACCUM_MAINT';
10 g_module_name VARCHAR2(100) := 'pji.plsql.PJI_FM_XBS_ACCUM_MAINT';
11 g_update_num_rows_limit NUMBER := 1; -- 1000;
12 g_smart_rows_deleted NUMBER :=0; --maintains the number of rows deleted in delete smart slice api
13 g_debug_mode varchar2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N');
14 g_deffered_mode VARCHAR2(1) :='N';
15 g_success CONSTANT VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
16 Invalid_Excep Exception ;
17
18
19 ---------------------------------------------------------------------------
20 ------ Specs of internal apis..
21 ---------------------------------------------------------------------------
22
23
24 PROCEDURE CHECK_BUDGET_VERSION_EXISTS (
25 p_fp_version_ids IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type() ) ;
26
27 PROCEDURE PRINT_TIME(p_tag IN VARCHAR2 := NULL);
28
29 PROCEDURE CLEANUP_TEMP_TABLES;
30
31 PROCEDURE WBS_HEADERS_LOCK (
32 p_fp_version_ids IN OUT NOCOPY SYSTEM.pa_num_tbl_type -- := SYSTEM.pa_num_tbl_type(),
33 , p_context IN VARCHAR2
34 , x_return_status OUT NOCOPY VARCHAR2
35 , x_msg_code OUT NOCOPY VARCHAR2 );
36
37
38 PROCEDURE GET_HDRS_TOLOCK_FOR_UPDATE (
39 x_fp_version_ids OUT NOCOPY SYSTEM.pa_num_tbl_type -- := SYSTEM.pa_num_tbl_type(),
40 , x_return_status OUT NOCOPY VARCHAR2
41 , x_msg_code OUT NOCOPY VARCHAR2 );
42
43
44 PROCEDURE GET_EVENT_IDS (
45 p_fp_version_ids IN SYSTEM.pa_num_tbl_type -- := SYSTEM.pa_num_tbl_type(),
46 , p_operation_type IN VARCHAR2 := NULL
47 , x_event_ids OUT NOCOPY SYSTEM.pa_num_tbl_type -- := SYSTEM.pa_num_tbl_type(),
48 , x_return_status OUT NOCOPY VARCHAR2
49 , x_msg_code OUT NOCOPY VARCHAR2 );
50
51
52 PROCEDURE DELETE_EVENTS (
53 p_event_ids IN SYSTEM.pa_num_tbl_type
54 , x_return_status OUT NOCOPY VARCHAR2
55 , x_msg_code OUT NOCOPY VARCHAR2 );
56
57
58 PROCEDURE COPY_PJI_SUMMRZD_FLAG (
59 p_source_fp_version_ids IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type()
60 , p_dest_fp_version_ids IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type() );
61
62
63 PROCEDURE MARK_PLAN_ORIGINAL (
64 p_original_version_id IN NUMBER,
65 x_return_status OUT NOCOPY VARCHAR2,
66 x_msg_code OUT NOCOPY VARCHAR2 );
67
68 PROCEDURE PLAN_EXTR_LINES_LOCK (
69 x_return_status OUT NOCOPY VARCHAR2
70 , x_msg_code OUT NOCOPY VARCHAR2 );
71
72
73 PROCEDURE COPY_INTO_BASELINE_ORIGINAL(
74 p_project_id IN NUMBER
75 , p_plan_type_id IN NUMBER
76 , p_plan_version_id IN NUMBER
77 , x_processing_code OUT NOCOPY VARCHAR2
78 );
79
80 PROCEDURE proces_event_pvt (
81 p_event_id IN NUMBER,
82 p_event_type IN VARCHAR2,
83 x_processing_code OUT NOCOPY VARCHAR2,
84 x_return_status OUT NOCOPY VARCHAR2,
85 x_msg_data OUT NOCOPY VARCHAR2 );
86
87 PROCEDURE INSERT_APPLY_PROG_VD;
88
89 function submit_request(p_project_id IN NUMBER)
90 return NUMBER
91 IS
92 pragma autonomous_transaction;
93 l_request_id NUMBER;
94 l_project pa_projects_all.segment1%TYPE; /* 4604355 */
95 begin
96 begin
97 select segment1
98 into l_project
99 from pa_projects_all
100 where project_id = p_project_id;
101 exception
102 when no_data_found then null;
103 end;
104 l_request_id := FND_REQUEST.SUBMIT_REQUEST(
105 application => PJI_UTILS.GET_PJI_SCHEMA_NAME ,-- Application Name
106 program => 'PJI_PJP_SUMMARIZE_INCR', -- Program Name
107 sub_request => FALSE, -- Sub Request
108 argument1 => 'I', -- p_run_mode varchar2
109 argument2 => '',
110 argument3 => '',
111 argument4 => '', -- p_run_mode varchar2
112 argument5 => l_project , -- to_char(p_project_id) , -- p_from_project_id
113 argument6 => l_project ); -- to_char(p_project_id) ); -- p_to_project_id
114
115 commit;
116 return(l_request_id);
117 END submit_request;
118 ---------------------------------------------------------------------------
119 ------ Implementation of apis declared in package spec.
120 ---------------------------------------------------------------------------
121
122 -- added procedure for bug#3993830
123 PROCEDURE debug_plan_lines
124 IS
125 BEGIN
126
127 IF NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N') = 'Y' THEN
128
129 INSERT INTO pji_fm_extr_plan_lines_debug
130 (
131 PROJECT_ID ,
132 PROJECT_ORG_ID ,
133 PROJECT_ELEMENT_ID ,
134 STRUCT_VER_ID ,
135 PERIOD_NAME ,
136 CALENDAR_TYPE ,
137 START_DATE ,
138 END_DATE ,
139 RBS_ELEMENT_ID ,
140 RBS_VERSION_ID ,
141 PLAN_VERSION_ID ,
142 PLAN_TYPE_ID ,
143 WP_VERSION_FLAG ,
144 ROLLUP_TYPE ,
145 TXN_CURRENCY_CODE ,
146 TXN_RAW_COST ,
147 TXN_BURDENED_COST ,
148 TXN_REVENUE ,
149 PRJ_CURRENCY_CODE ,
150 PRJ_RAW_COST ,
151 PRJ_BURDENED_COST ,
152 PRJ_REVENUE ,
153 PFC_CURRENCY_CODE ,
154 PFC_RAW_COST ,
155 PFC_BURDENED_COST ,
156 PFC_REVENUE ,
157 QUANTITY ,
158 RESOURCE_CLASS_CODE ,
159 RATE_BASED_FLAG ,
160 ACT_QUANTITY ,
161 ACT_TXN_BURDENED_COST ,
162 ACT_PRJ_BURDENED_COST ,
163 ACT_PFC_BURDENED_COST ,
164 ACT_TXN_RAW_COST ,
165 ACT_PRJ_RAW_COST ,
166 ACT_PFC_RAW_COST ,
167 ACT_TXN_REVENUE ,
168 ACT_PRJ_REVENUE ,
169 ACT_PFC_REVENUE ,
170 ETC_QUANTITY ,
171 ETC_TXN_BURDENED_COST ,
172 ETC_PRJ_BURDENED_COST ,
173 ETC_PFC_BURDENED_COST ,
174 ETC_TXN_RAW_COST ,
175 ETC_PRJ_RAW_COST ,
176 ETC_PFC_RAW_COST ,
177 CREATION_DATE
178 )
179 SELECT
180 PROJECT_ID ,
181 PROJECT_ORG_ID ,
182 PROJECT_ELEMENT_ID ,
183 STRUCT_VER_ID ,
184 PERIOD_NAME ,
185 CALENDAR_TYPE ,
186 START_DATE ,
187 END_DATE ,
188 RBS_ELEMENT_ID ,
189 RBS_VERSION_ID ,
190 PLAN_VERSION_ID ,
191 PLAN_TYPE_ID ,
192 WP_VERSION_FLAG ,
193 ROLLUP_TYPE ,
194 TXN_CURRENCY_CODE ,
195 TXN_RAW_COST ,
196 TXN_BURDENED_COST ,
197 TXN_REVENUE ,
198 PRJ_CURRENCY_CODE ,
199 PRJ_RAW_COST ,
200 PRJ_BURDENED_COST ,
201 PRJ_REVENUE ,
202 PFC_CURRENCY_CODE ,
203 PFC_RAW_COST ,
204 PFC_BURDENED_COST ,
205 PFC_REVENUE ,
206 QUANTITY ,
207 RESOURCE_CLASS_CODE ,
208 RATE_BASED_FLAG ,
209 ACT_QUANTITY ,
210 ACT_TXN_BURDENED_COST ,
211 ACT_PRJ_BURDENED_COST ,
212 ACT_PFC_BURDENED_COST ,
213 ACT_TXN_RAW_COST ,
214 ACT_PRJ_RAW_COST ,
215 ACT_PFC_RAW_COST ,
216 ACT_TXN_REVENUE ,
217 ACT_PRJ_REVENUE ,
218 ACT_PFC_REVENUE ,
219 ETC_QUANTITY ,
220 ETC_TXN_BURDENED_COST ,
221 ETC_PRJ_BURDENED_COST ,
222 ETC_PFC_BURDENED_COST ,
223 ETC_TXN_RAW_COST ,
224 ETC_PRJ_RAW_COST ,
225 ETC_PFC_RAW_COST ,
226 SYSDATE
227 FROM
228 pji_fm_extr_plan_lines ;
229
230 END IF;
231
232 END;
233
234
235 PROCEDURE PLAN_DELETE (
236 p_fp_version_ids IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
237 x_return_status OUT NOCOPY VARCHAR2,
238 x_msg_code OUT NOCOPY VARCHAR2 ) IS
239
240 l_fp_version_ids SYSTEM.pa_num_tbl_type := p_fp_version_ids;
241 l_fp_version_ids1 SYSTEM.pa_num_tbl_type := p_fp_version_ids;
242 l_event_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
243 l_event_id NUMBER := NULL;
244 l_return_status VARCHAR2(1);
245 l_msg_code VARCHAR2(100);
246 l_processing_code VARCHAR2(12000);
247 l_event_rec pa_pji_proj_events_log%ROWTYPE;
248
249 BEGIN
250
251 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
252 ( p_package_name => g_package_name
253 , x_return_status => x_return_status ) ;
254
255 print_time ( ' PLAN_DELETE api ' );
256
257 PRINT_PLAN_VERSION_ID_LIST(p_fp_version_ids);
258 CHECK_BUDGET_VERSION_EXISTS(p_fp_version_ids);
259
260 print_time ( ' plan delete 001 ' );
261
262 FOR i IN l_fp_version_ids.FIRST..l_fp_version_ids.LAST LOOP -- Now, process each version as follows..
263
264 print_time ( ' plan delete 002 ' );
265
266 --
267 -- Create event.
268 --
269 l_event_rec.event_type := 'PLAN_DELETE';
270 l_event_rec.event_object := l_fp_version_ids(i);
271 l_event_rec.operation_type := 'D';
272 l_event_rec.status := 'X';
273
274 CREATE_EVENT(l_event_rec);
275
276 print_time ( ' plan delete 003 ' );
277
278
279 --
280 -- Plan delete pvt api.
281 --
282 l_fp_version_ids1 := SYSTEM.pa_num_tbl_type (l_fp_version_ids(i));
283
284 PLAN_DELETE_PVT (
285 p_event_id => l_event_rec.event_id
286 , x_return_status => x_return_status
287 , x_processing_code => x_msg_code);
288
289 print_time ( ' plan delete 004 ' );
290
291 END LOOP;
292
293 print_time ( ' plan delete 005 ' );
294
295 -- COMMIT;
296
297 EXCEPTION
298
299 WHEN OTHERS THEN
300 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
301 ( p_package_name => g_package_name
302 , p_procedure_name => 'PLAN_DELETE'
303 , x_return_status => x_return_status ) ;
304
305 RAISE;
306
307 END;
308
309
310 PROCEDURE PLAN_DELETE_PVT (
311 p_event_id IN NUMBER
312 , x_return_status OUT NOCOPY VARCHAR2
313 , x_processing_code OUT NOCOPY VARCHAR2 ) IS
314
315 l_plan_version_id NUMBER := NULL;
316 l_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
317 l_return_status VARCHAR2(1);
318 l_msg_code VARCHAR2(100);
319 l_event_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
320
321 BEGIN
322
323 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
324 ( p_package_name => g_package_name
325 , x_return_status => x_return_status );
326
327 BEGIN
328
329 SELECT event_object
330 INTO l_plan_version_id
331 FROM PA_PJI_PROJ_EVENTS_LOG
332 WHERE event_id = p_event_id;
333
334 EXCEPTION
335 WHEN OTHERS THEN
336 NULL;
337 END;
338
339 print_time ( ' plan delete pvt 002 ' );
340
341 l_fp_version_ids := SYSTEM.pa_num_tbl_type (l_plan_version_id);
342
343 print_time ( ' plan delete pvt 003 ' );
344
345 WBS_HEADERS_LOCK (
346 p_fp_version_ids => l_fp_version_ids
347 , p_context => 'DELETE'
348 , x_return_status => x_return_status
349 , x_msg_code => x_processing_code );
350
351 IF (l_fp_version_ids.COUNT <= 0) THEN
352 print_time ( ' plan delete pvt 004 ' );
353 x_processing_code := 'F';
354 RETURN;
355 END IF;
356
357 print_time ( ' plan delete pvt 005 ' );
358
359 PJI_FM_PLAN_MAINT.DELETE_ALL_PVT ( p_fp_version_ids => l_fp_version_ids);
360
361 print_time ( ' plan delete pvt 006 ' );
362
363 l_event_ids := SYSTEM.pa_num_tbl_type (p_event_id);
364
365 print_time ( ' plan delete pvt 007 ' );
366
367 DELETE_EVENTS (
368 p_event_ids => l_event_ids
369 , x_return_status => x_return_status
370 , x_msg_code => x_processing_code );
371
372 print_time ( ' plan delete pvt 008 ' );
373
374 EXCEPTION
375
376 WHEN OTHERS THEN
377
378 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
379 ( p_package_name => g_package_name
380 , p_procedure_name => 'PLAN_DELETE_PVT'
381 , x_return_status => x_return_status ) ;
382
383 RAISE;
384
385 END;
386
387
388 PROCEDURE PLAN_CREATE (
389 p_fp_version_ids IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
390 x_return_status OUT NOCOPY VARCHAR2,
391 x_msg_code OUT NOCOPY VARCHAR2,
392 p_fp_src_version_ids IN SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type(),
393 p_copy_mode in varchar2 :=NULL) IS
394
395 -- OLAP START CHANGE
396
397 l_msg_count number;
398 l_pjt_rollup_enabled_flag varchar2(1) ;
399 l_project_id number;
400 l_rbs_version_id number ;
401 l_cbs_version_id number;
402 l_cbs_enabled_flag VARCHAR2(1);
403
404
405 l_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
406 l_fp_src_version_ids SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
407 l_cnt number ;
408
409 -- OLAP END CHANGE
410
411
412 BEGIN
413
414 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
415 ( p_package_name => g_package_name
416 , x_return_status => x_return_status );
417
418 print_time ( ' PLAN_CREATE api ' );
419 IF g_debug_mode = 'Y' THEN
420 pa_debug.write('PLAN_CREATE: ' || g_module_name,'Inside plan_create',1);
421 END IF;
422
423 --Bug#13797526 FP of 13698963
424 IF (p_fp_version_ids.COUNT = 0) THEN
425 RETURN;
426 END IF;
427
428 PRINT_PLAN_VERSION_ID_LIST(p_fp_version_ids);
429 CHECK_BUDGET_VERSION_EXISTS(p_fp_version_ids);
430
431
432 CLEANUP_TEMP_TABLES;
433
434 /*
435 INSERT INTO pji_event_log_debug
436 ( event_type
437 , event_id
438 , event_object
439 , operation_type
440 , status
441 , last_update_date
442 , last_updated_by
443 , creation_date
444 , created_by
445 , last_update_login)
446 VALUES
447 ( 'Create'
448 , pa_pji_proj_events_log_s.NEXTVAL
449 , 'x'
450 , 'x'
451 , 'x'
452 , SYSDATE
453 , 1
454 , SYSDATE
455 , 1
456 , 1);
457 */
458
459 IF g_debug_mode = 'Y' THEN
460 pa_debug.write('PLAN_CREATE: ' || g_module_name,'Calling CREATE_PRIMARY_PVT',1);
461 END IF;
462
463 -- OLAP START CHANGE
464
465 l_cnt := 0;
466 for k in 1 .. p_fp_version_ids.count loop
467
468 select p.pjt_rollup_enabled_flag , p.cbs_enable_flag, p.project_id , fpo.rbs_version_id , p.cbs_version_id
469 into l_pjt_rollup_enabled_flag , l_cbs_enabled_flag, l_project_id , l_rbs_version_id , l_cbs_version_id
470 from pa_budget_versions b , pa_projects_all p , pa_proj_fp_options fpo
471 where b.budget_version_id = p_fp_version_ids(k)
472 and b.project_id = p.project_id
473 AND b.fin_plan_type_id = fpo.fin_plan_type_id
474 AND b.budget_version_id = fpo.fin_plan_version_id
475 AND b.project_id = fpo.project_id
476 AND fpo.fin_plan_option_level_code = 'PLAN_VERSION' ;
477
478
479
480 -- if ( l_pjt_rollup_enabled_flag = 'Y' ) then
481 if l_cbs_enabled_flag = 'Y' then
482
483 PA_ppr_rollup_PVT.plan_create(
484 p_plan_version_id => p_fp_version_ids(k)
485 ,p_project_id => l_project_id
486 ,p_rbs_version_id => l_rbs_version_id
487 ,p_cbs_version_id => l_cbs_version_id
488 ,x_return_status => x_return_status
489 ,x_msg_code => x_msg_code
490 ) ;
491
492 end if;
493
494
495
496 -- else
497
498 l_cnt := l_cnt + 1;
499 l_fp_version_ids.extend(1);
500 if ( p_fp_src_version_ids.count >= k ) then
501 l_fp_src_version_ids.extend(1);
502 end if;
503
504
505
506 l_fp_version_ids(l_cnt) := p_fp_version_ids(k);
507
508 if ( p_fp_src_version_ids.count >= k ) then
509 l_fp_src_version_ids(l_cnt) := p_fp_src_version_ids(k);
510 end if;
511
512 -- end if;
513
514
515
516 end loop ;
517 -- OLAP END CHANGE
518
519
520 /* OLAP CHANGES
521 Pji_Fm_Plan_Maint.CREATE_PRIMARY_PVT(
522 p_fp_version_ids => p_fp_version_ids
523 , p_is_primary_rbs => 'T'
524 , p_commit => 'F'
525 , p_fp_src_version_ids => p_fp_src_version_ids
526 , p_Copy_mode=>p_copy_mode);
527 */
528
529 --OLAP START CHANGES
530
531 if l_fp_version_ids.count > 0 then
532 Pji_Fm_Plan_Maint.CREATE_PRIMARY_PVT(
533 p_fp_version_ids => l_fp_version_ids
534 , p_is_primary_rbs => 'T'
535 , p_commit => 'F'
536 , p_fp_src_version_ids => l_fp_src_version_ids
537 , p_Copy_mode=>p_copy_mode);
538 end if;
539
540 -- OLAP END CHANGES
541
542 IF g_debug_mode = 'Y' THEN
543 pa_debug.write('PLAN_CREATE: ' || g_module_name,'After Calling CREATE_PRIMARY_PVT',1);
544 END IF;
545
546
547
548
549 -- COMMIT;
550
551 EXCEPTION
552
553 WHEN OTHERS THEN
554
555 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
556 ( p_package_name => g_package_name
557 , p_procedure_name => 'PLAN_CREATE'
558 , x_return_status => x_return_status ) ;
559
560 RAISE;
561
562 END;
563
564
565 PROCEDURE PLAN_UPDATE (
566 p_plan_version_id IN NUMBER := NULL,
567 x_msg_code OUT NOCOPY VARCHAR2,
568 x_return_status OUT NOCOPY VARCHAR2 ) IS
569
570 l_processing_code VARCHAR2(12000);
571 l_res_class_flag VARCHAR2(1);
572 l_resource_list_id NUMBER;
573
574 CURSOR res_list IS
575 SELECT decode(b.version_type, 'COST', cost_resource_list_id,
576 'REVENUE',revenue_resource_list_id,
577 'ALL', all_resource_list_id) resource_list_id
578 FROM pa_proj_fp_options a, pa_budget_versions b
579 WHERE a.fin_plan_version_id = b.budget_version_id
580 AND a.fin_plan_version_id = p_plan_version_id;
581
582 CURSOR res_class IS
583 SELECT NVL(resource_class_flag, 'Y')
584 FROM pa_resource_lists_all_bg
585 WHERE resource_list_id = l_resource_list_id;
586
587 -- OLAP START CHANGE
588
589 cursor plan_versions is
590 select extr.plan_version_id, p.pjt_rollup_enabled_flag , nvl(p.CBS_ENABLE_FLAG, 'N') cbs_enable_flag, p.project_id , fpo.rbs_version_id , p.cbs_version_id
591 from pa_budget_versions b , pa_projects_all p , pa_proj_fp_options fpo, pji_fm_extr_plan_lines extr
592 where b.budget_version_id = extr.plan_version_id
593 and b.project_id = p.project_id
594 AND b.fin_plan_type_id = fpo.fin_plan_type_id
595 AND b.budget_version_id = fpo.fin_plan_version_id
596 AND b.project_id = fpo.project_id
597 AND fpo.fin_plan_option_level_code = 'PLAN_VERSION' ;
598
599
600 l_msg_count number;
601 l_pjt_rollup_enabled_flag varchar2(1) ;
602 l_cbs_enable_flag varchar2(1);
603 l_project_id number;
604 l_rbs_version_id number ;
605 l_cbs_version_id number;
606
607 -- OLAP END CHANGE
608
609
610 BEGIN
611 IF g_debug_mode = 'Y' THEN
612 pa_debug.write('PLAN_UPDATE: ' || g_module_name,'Pa_Task_Pub1.G_CALL_PJI_ROLLUP '||Pa_Task_Pub1.G_CALL_PJI_ROLLUP,1);
613 pa_debug.write('PLAN_UPDATE: ' || g_module_name,'p_plan_version_id '||p_plan_version_id,1);
614 END IF;
615
616 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
617 ( p_package_name => g_package_name
618 , x_return_status => x_return_status );
619
620 x_msg_code := Fnd_Api.G_RET_STS_SUCCESS;
621
622 IF NVL(Pa_Task_Pub1.G_CALL_PJI_ROLLUP, 'Y') = 'N' THEN
623 RETURN;
624 END IF;
625
626 IF g_debug_mode = 'Y' THEN
627 pa_debug.write('PLAN_UPDATE: ' || g_module_name,'Inside plan_update',1);
628 END IF;
629 print_time ( 'PLAN_UPDATE begin');
630
631 INSERT_APPLY_PROG_VD;
632
633 /*
634 INSERT INTO pji_event_log_debug
635 ( event_type
636 , event_id
637 , event_object
638 , operation_type
639 , status
640 , last_update_date
641 , last_updated_by
642 , creation_date
643 , created_by
644 , last_update_login)
645 VALUES
646 ( 'Update'
647 , pa_pji_proj_events_log_s.NEXTVAL
648 , 'x'
649 , 'x'
650 , 'x'
651 , SYSDATE
652 , 1
653 , SYSDATE
654 , 1
655 , 1);
656 */
657
658 OPEN res_list;
659 FETCH res_list INTO l_resource_list_id;
660 CLOSE res_list;
661
662 IF l_resource_list_id IS NOT NULL THEN
663
664 OPEN res_class;
665 FETCH res_class INTO l_res_class_flag;
666 CLOSE res_class;
667
668 ELSE
669
670 l_res_class_flag :='Y';
671
672 END IF;
673
674 IF g_debug_mode = 'Y' THEN
675 pa_debug.write('PLAN_UPDATE: ' || g_module_name,'l_resource_list_id '||l_resource_list_id,1);
676 pa_debug.write('PLAN_UPDATE: ' || g_module_name,'l_res_class_flag '||l_res_class_flag,1);
677 END IF;
678
679 IF l_res_class_flag = 'N' THEN
680
681 UPDATE pji_fm_extr_plan_lines
682 SET RESOURCE_CLASS_CODE = 'PEOPLE-1'
683 WHERE RESOURCE_CLASS_CODE = 'PEOPLE';
684
685 IF g_debug_mode = 'Y' THEN
686 pa_debug.write('PLAN_UPDATE: ' || g_module_name,'Updated pji_fm_extr_plan_lines '||SQL%Rowcount,1);
687 END IF;
688
689 UPDATE pji_fm_extr_plan_lines
690 SET RESOURCE_CLASS_CODE = 'EQUIPMENT-1'
691 WHERE RESOURCE_CLASS_CODE = 'EQUIPMENT';
692
693 IF g_debug_mode = 'Y' THEN
694 pa_debug.write('PLAN_UPDATE: ' || g_module_name,'Updated pji_fm_extr_plan_lines '||SQL%Rowcount,1);
695 END IF;
696
697 END IF;
698
699 -- OLAP START CHANGE
700
701 if p_plan_version_id is not null then
702
703 IF g_debug_mode = 'Y' THEN
704 pa_debug.write('PLAN_UPDATE: ' || g_module_name,'p_plan_version_id is not null '||p_plan_version_id ,1);
705 END IF;
706
707 select p.pjt_rollup_enabled_flag , p.CBS_ENABLE_FLAG, p.project_id , fpo.rbs_version_id , p.cbs_version_id
708 into l_pjt_rollup_enabled_flag , l_cbs_enable_flag, l_project_id , l_rbs_version_id , l_cbs_version_id
709 from pa_budget_versions b , pa_projects_all p , pa_proj_fp_options fpo
710 where b.budget_version_id = p_plan_version_id
711 and b.project_id = p.project_id
712 AND b.fin_plan_type_id = fpo.fin_plan_type_id
713 AND b.budget_version_id = fpo.fin_plan_version_id
714 AND b.project_id = fpo.project_id
715 AND fpo.fin_plan_option_level_code = 'PLAN_VERSION' ;
716
717
718
719 --if ( l_pjt_rollup_enabled_flag = 'Y' ) then
720 if l_cbs_enable_flag = 'Y' THEN
721
722 PA_ppr_rollup_PVT.plan_update(
723 p_plan_version_id => p_plan_version_id
724 ,p_project_id => l_project_id
725 ,p_rbs_version_id => l_rbs_version_id
726 ,p_cbs_version_id => l_cbs_version_id
727 ,x_return_status => x_return_status
728 ,x_msg_code => x_msg_code
729 ) ;
730
731 end if;
732 end if;
733
734 if p_plan_version_id is null then
735
736 IF g_debug_mode = 'Y' THEN
737 pa_debug.write('PLAN_UPDATE: ' || g_module_name,'p_plan_version_id is null ',1);
738 END IF;
739
740 for plan_versions_rec in plan_versions loop
741
742 IF g_debug_mode = 'Y' THEN
743 pa_debug.write('PLAN_UPDATE: ' || g_module_name,'p_plan_version_id loop '||plan_versions_rec.plan_version_id,1);
744 END IF;
745
746 --if ( l_pjt_rollup_enabled_flag = 'Y' ) then
747 if plan_versions_rec.cbs_enable_flag = 'Y' THEN
748
749 PA_ppr_rollup_PVT.plan_update(
750 p_plan_version_id => plan_versions_rec.plan_version_id
751 ,p_project_id => plan_versions_rec.project_id
752 ,p_rbs_version_id => plan_versions_rec.rbs_version_id
753 ,p_cbs_version_id => plan_versions_rec.cbs_version_id
754 ,x_return_status => x_return_status
755 ,x_msg_code => x_msg_code
756 ) ;
757
758 end if;
759 end loop;
760 end if;
761
762 PLAN_UPDATE_PVT(
763 p_plan_version_id => p_plan_version_id,
764 x_return_status => x_return_status,
765 x_processing_code => x_msg_code);
766
767
768 -- OLAP END CHANGE
769
770 IF l_res_class_flag = 'N' THEN
771
772 UPDATE pji_fm_extr_plan_lines
773 SET RESOURCE_CLASS_CODE = 'PEOPLE'
774 WHERE RESOURCE_CLASS_CODE = 'PEOPLE-1';
775
776
777 UPDATE pji_fm_extr_plan_lines
778 SET RESOURCE_CLASS_CODE = 'EQUIPMENT'
779 WHERE RESOURCE_CLASS_CODE = 'EQUIPMENT-1';
780
781 IF g_debug_mode = 'Y' THEN
782 pa_debug.write('PLAN_UPDATE: ' || g_module_name,'Updated pji_fm_extr_plan_lines back',1);
783 END IF;
784
785 END IF;
786
787 print_time ( 'PLAN_UPDATE end');
788
789 EXCEPTION
790
791 WHEN OTHERS THEN
792
793 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
794 ( p_package_name => g_package_name
795 , p_procedure_name => 'PLAN_UPDATE'
796 , x_return_status => x_return_status ) ;
797
798 RAISE;
799
800 END;
801
802
803 PROCEDURE PLAN_UPDATE_PVT
804 ( p_plan_version_id IN NUMBER := NULL,
805 x_return_status OUT NOCOPY VARCHAR2,
806 x_processing_code OUT NOCOPY VARCHAR2 ) IS
807
808 CURSOR GET_MAINT_SMART_SLICE_PARAMS
809 IS SELECT DISTINCT rbs_version_id,plan_version_id,struct_ver_id
810 FROM pji_fm_extr_plan_lines
811 WHERE plan_version_id = NVL(p_plan_version_id,plan_version_id)
812 AND ROWID IN ( SELECT extr_lines_rowid FROM pji_fp_rmap_fpr_update_t)
813 ORDER BY rbs_version_id,struct_ver_id;
814
815 l_num_rows_extr_lines NUMBER := NULL;
816 l_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
817 l_event_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
818 l_return_status VARCHAR2(1);
819 l_msg_code VARCHAR2(100);
820 l_num_need_to_lock NUMBER;
821 l_temp NUMBER;
822
823 l_update_id NUMBER;
824
825 p_plan_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
826 p_rbs_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
827 p_wbs_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
828
829 l_plan_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
830
831 l_new_rbs_version_id number;
832 l_new_wbs_version_id number;
833 l_new_plan_version_id number;
834 l_prev_rbs_version_id number;
835 l_prev_wbs_version_id number;
836 l_prev_plan_version_id number;
837 l_msg_data varchar2(2000);
838 l_msg_count number;
839
840 BEGIN
841
842 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
843 ( p_package_name => g_package_name
844 , x_return_status => x_return_status );
845
846 x_processing_code := Fnd_Api.G_RET_STS_SUCCESS;
847
848 print_time ( 'PLAN_UPDATE_PVT begin ' );
849
850 CLEANUP_TEMP_TABLES;
851
852 IF (p_plan_version_id IS NULL) THEN
853 INSERT INTO pji_fp_rmap_fpr_update_t (EXTR_LINES_ROWID)
854 SELECT ROWID FROM pji_fm_extr_plan_lines;
855 ELSE
856 INSERT INTO pji_fp_rmap_fpr_update_t (EXTR_LINES_ROWID)
857 SELECT ROWID FROM pji_fm_extr_plan_lines
858 WHERE plan_version_id = p_plan_version_id;
859 END IF;
860
861 -------------------------------------------------------------------------
862 -- Lock all records.
863 -------------------------------------------------------------------------
864
865 print_time ( 'PLAN_UPDATE_PVT 2 ');
866
867 PLAN_EXTR_LINES_LOCK (
868 x_return_status => x_return_status
869 , x_msg_code => x_processing_code);
870
871 IF (x_return_status IN (FND_API.G_RET_STS_UNEXP_ERROR, FND_API.G_RET_STS_ERROR)) THEN
872 RETURN;
873 END IF;
874
875
876 -------------------------------------------------------------------------
877 -- Get list of plan versions present in plan extr lines.
878 -------------------------------------------------------------------------
879
880 print_time ( 'PLAN_UPDATE_PVT 3 ');
881
882 GET_HDRS_TOLOCK_FOR_UPDATE (
883 x_fp_version_ids => l_fp_version_ids
884 , x_return_status => x_return_status
885 , x_msg_code => x_processing_code );
886
887 /*
888 IF (l_fp_version_ids.COUNT = 0) THEN
889 RETURN;
890 END IF;
891 */
892
893 -------------------------------------------------------------------------
894 -- Try to lock these records in wbs header table.
895 -- If all records cannot be locked, then return.
896 -------------------------------------------------------------------------
897
898 print_time ( 'PLAN_UPDATE_PVT 4 ');
899
900 l_num_need_to_lock := l_fp_version_ids.COUNT;
901
902 WBS_HEADERS_LOCK (
903 p_fp_version_ids => l_fp_version_ids
904 , p_context => 'UPDATE'
905 , x_return_status => l_return_status
906 , x_msg_code => l_msg_code );
907
908 /*
909 IF (l_fp_version_ids.COUNT <> l_num_need_to_lock) THEN
910 RETURN;
911 END IF;
912 */
913
914 IF (p_plan_version_id IS NOT NULL) THEN
915 l_fp_version_ids := SYSTEM.pa_num_tbl_type(p_plan_version_id);
916 print_time ( 'PLAN_UPDATE_PVT 4.999 ');
917 END IF;
918
919 -------------------------------------------------------------------------
920 -- Call update api and delete the processed records.
921 -------------------------------------------------------------------------
922 print_time ( 'PLAN_UPDATE_PVT 5 ');
923
924 Pji_Fm_Plan_Maint.UPDATE_PRIMARY_PVT (
925 p_plan_version_ids => l_fp_version_ids
926 , p_commit => 'F' );
927
928 print_time ( 'PLAN_UPDATE_PfVT 5.11 ');
929
930 /* commenting as the incremental smart slice will be created */
931 /*start
932 DELETE_SMART_SLICE (
933 p_online_flag => 'Y'
934 , x_return_status => x_return_status ) ;
935 end */
936 /* We get the list of rbs_version,wbs_version and plan_version for which smart slice needs to be created.
937 The PJI_FM_EXTR_PLAN_LINES needs to be deleted before calling maintain_smart_slice as there is a commit
938 in maintain_smart_slice which nulls out pji_fp_rmap_fpr_update_t */
939 /* commenting as the incremental smart slice will be created */
940 /*start
941 OPEN GET_MAINT_SMART_SLICE_PARAMS;
942
943 FETCH GET_MAINT_SMART_SLICE_PARAMS BULK COLLECT INTO p_rbs_version_id_tbl,p_plan_version_id_tbl,p_wbs_version_id_tbl;
944
945 CLOSE GET_MAINT_SMART_SLICE_PARAMS;
946 end */
947 debug_plan_lines ; /* bug#3993830 */
948
949
950 DELETE FROM PJI_FM_EXTR_PLAN_LINES
951 WHERE 1 = 1
952 AND ROWID IN ( SELECT extr_lines_rowid FROM pji_fp_rmap_fpr_update_t)
953 AND TXN_CURRENCY_CODE IS NOT NULL
954 AND prj_currency_code IS NOT NULL
955 AND pfc_currency_code IS NOT NULL;
956
957 /* Smart slice was existing for this project. Recreate the same */
958 /* commenting as the incremental smart slice will be created */
959 /*start
960
961 IF (g_smart_rows_deleted >0) THEN
962
963 FOR i IN 1..p_rbs_version_id_tbl.COUNT LOOP
964
965 l_new_rbs_version_id := p_rbs_version_id_tbl(i);
966 l_new_wbs_version_id := p_wbs_version_id_tbl(i);
967 l_new_plan_version_id := p_plan_version_id_tbl(i);
968
969
970 IF (((l_new_rbs_version_id <>l_prev_rbs_version_id) OR (l_new_wbs_version_id <>l_prev_wbs_version_id)) AND i >1) THEN
971
972 maintain_smart_slice (
973 p_rbs_version_id => l_prev_rbs_version_id,
974 p_plan_version_id_tbl => l_plan_version_id_tbl,
975 p_wbs_element_id => null,
976 p_rbs_element_id => null,
977 p_prg_rollup_flag => 'N',
978 p_curr_record_type_id => null,
979 p_calendar_type =>null,
980 p_wbs_version_id =>l_prev_wbs_version_id,
981 p_commit => 'N',
982 x_msg_count =>l_msg_count ,
983 x_msg_data =>l_msg_data,
984 x_return_status =>l_return_status );
985
986 l_plan_version_id_tbl.DELETE;
987 END IF;
988
989 l_prev_rbs_version_id := l_new_rbs_version_id;
990 l_prev_wbs_version_id := l_new_wbs_version_id;
991 l_plan_version_id_tbl.EXTEND;
992 l_plan_version_id_tbl(l_plan_version_id_tbl.COUNT) := l_new_plan_version_id;
993
994 END LOOP;
995 -- The following call takes care of the last set of rbs version and wbs_version
996 maintain_smart_slice (
997 p_rbs_version_id => l_prev_rbs_version_id,
998 p_plan_version_id_tbl => l_plan_version_id_tbl,
999 p_wbs_element_id => null,
1000 p_rbs_element_id => null,
1001 p_prg_rollup_flag => 'N',
1002 p_curr_record_type_id => null,
1003 p_calendar_type =>null,
1004 p_wbs_version_id =>l_prev_wbs_version_id,
1005 p_commit => 'N',
1006 x_msg_count =>l_msg_count ,
1007 x_msg_data =>l_msg_data,
1008 x_return_status =>l_return_status );
1009
1010 l_plan_version_id_tbl.DELETE;
1011
1012 --PJI_PJP_SUM_ROLLUP.ROLLUP_FPR_RBS_SMART_SLICES;
1013 --Pji_Fm_Plan_Maint_T_Pvt.MERGE_INTO_FP_FACT;
1014
1015 CLEANUP_TEMP_TABLES;
1016 --maintain_smart_slice does not clean data populated by itself
1017
1018 END IF;
1019 ends*/
1020 /*g_smart_rows_deleted > 0)*/
1021
1022 print_time ( 'PLAN_UPDATE_PVT end ' );
1023
1024 EXCEPTION
1025 WHEN OTHERS THEN
1026
1027 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
1028 ( p_package_name => g_package_name
1029 , p_procedure_name => 'PLAN_UPDATE_PVT'
1030 , x_return_status => x_return_status ) ;
1031
1032 RAISE;
1033 END;
1034
1035
1036 PROCEDURE DELETE_SMART_SLICE (
1037 p_online_flag IN VARCHAR2 := 'Y'
1038 , x_return_status OUT NOCOPY VARCHAR2 ) IS
1039 BEGIN
1040
1041 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
1042 ( p_package_name => g_package_name
1043 , x_return_status => x_return_status );
1044
1045 IF (p_online_flag NOT IN ('Y', 'N')) THEN
1046 print_time (' Online flag value ' || p_online_flag || ' is not correct. Returning. ');
1047 RETURN;
1048 END IF;
1049
1050 IF (p_online_flag = 'Y') THEN
1051
1052 /* DELETE FROM pji_rollup_level_status
1053 WHERE plan_version_id IN (SELECT plan_version_id FROM pji_fm_extr_plnver3_t);
1054 Bug No .4538102*/
1055
1056 DELETE FROM pji_rollup_level_status
1057 WHERE (project_id,plan_version_id,plan_type_code) IN
1058 (SELECT project_id,plan_version_id,plan_type_code FROM pji_fm_extr_plnver3_t); /*4771527 */
1059
1060 IF (SQL%ROWCOUNT > 0) THEN
1061
1062 pji_pjp_fp_curr_wrap.set_table_stats('PJI','PJI_FM_EXTR_PLNVER3_T', 1 , 1 , 100);
1063
1064 /*
1065 FND_STATS.SET_TABLE_STATS(
1066 ownname => 'PJI', -- IN VARCHAR2,
1067 tabname => 'PJI_FM_EXTR_PLNVER3_T', -- IN VARCHAR2,
1068 numrows => 1, -- IN NUMBER,
1069 numblks => 1, -- IN NUMBER,
1070 avgrlen => 100 --, -- IN NUMBER,
1071 );
1072 */
1073
1074 DELETE FROM pji_fp_xbs_accum_f
1075 WHERE (project_id,plan_version_id,plan_type_code) IN /*4771527 */
1076 (SELECT project_id, plan_version_id,plan_type_code FROM pji_fm_extr_plnver3_t)
1077 AND (rbs_aggr_level = 'R'
1078 OR (rbs_aggr_level = 'L'
1079 AND wbs_rollup_flag = 'Y')) ;
1080 g_smart_rows_deleted := SQL%ROWCOUNT;
1081 END IF;
1082
1083 ELSIF (p_online_flag = 'N') THEN
1084
1085 /* DELETE FROM pji_rollup_level_status
1086 WHERE plan_version_id IN (SELECT plan_version_id FROM pji_fm_extr_plnver4);
1087 Bug No. 4538102*/
1088 DELETE FROM pji_rollup_level_status
1089 WHERE (project_id,plan_version_id,plan_type_code ) IN
1090 (SELECT project_id,plan_version_id,plan_type_code FROM pji_fm_extr_plnver4); /*4771527 */
1091
1092 IF (SQL%ROWCOUNT > 0) THEN
1093
1094 /*
1095 FND_STATS.SET_TABLE_STATS(
1096 ownname => 'PJI', -- IN VARCHAR2,
1097 tabname => 'PJI_FM_EXTR_PLNVER4', -- IN VARCHAR2,
1098 numrows => 1, -- IN NUMBER,
1099 numblks => 1, -- IN NUMBER,
1100 avgrlen => 100 --, -- IN NUMBER,
1101 );
1102 */
1103
1104 DELETE FROM pji_fp_xbs_accum_f
1105 WHERE (project_id,plan_version_id,plan_type_code ) IN
1106 (SELECT project_id, plan_version_id,plan_type_code FROM pji_fm_extr_plnver4) /*4771527 */
1107 AND (rbs_aggr_level = 'R'
1108 OR (rbs_aggr_level = 'L'
1109 AND wbs_rollup_flag = 'Y')) ;
1110 g_smart_rows_deleted := SQL%ROWCOUNT;
1111 END IF;
1112
1113 END IF;
1114
1115 EXCEPTION
1116 WHEN OTHERS THEN
1117
1118 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
1119 ( p_package_name => g_package_name
1120 , p_procedure_name => 'DELETE_SMART_SLICE'
1121 , x_return_status => x_return_status ) ;
1122
1123 RAISE;
1124 END;
1125
1126
1127 PROCEDURE PLAN_UPDATE_ACT_ETC (
1128 p_plan_wbs_ver_id IN NUMBER
1129 , p_prev_pub_wbs_ver_id IN NUMBER := NULL
1130 -- p_plan_version_id IN NUMBER
1131 -- , p_prev_pub_version_id IN NUMBER := NULL
1132 , x_msg_code OUT NOCOPY VARCHAR2
1133 , x_return_status OUT NOCOPY VARCHAR2 ) IS
1134
1135 l_plan_version_id NUMBER := NULL;
1136 l_prev_pub_version_id NUMBER := NULL;
1137 l_processing_code VARCHAR2(12000);
1138 l_temp NUMBER;
1139
1140 BEGIN
1141
1142 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
1143 ( p_package_name => g_package_name
1144 , x_return_status => x_return_status );
1145
1146 x_msg_code := Fnd_Api.G_RET_STS_SUCCESS;
1147
1148 print_time ( 'PLAN_UPDATE_ACT_ETC begin ');
1149
1150 print_time ( 'PLAN_UPDATE_ACT_ETC p_plan_wbs_ver_id ' || p_plan_wbs_ver_id || ' p_prev_pub_wbs_ver_id ' || p_prev_pub_wbs_ver_id );
1151
1152
1153 IF (p_plan_wbs_ver_id IS NOT NULL) THEN
1154 BEGIN
1155 SELECT plan_version_id
1156 INTO l_plan_version_id
1157 FROM pji_pjp_wbs_header
1158 WHERE wbs_version_id = p_plan_wbs_ver_id
1159 AND wp_flag = 'Y'; -- AND plan_version_id > 0;
1160 EXCEPTION
1161 WHEN OTHERS THEN
1162 print_time ( 'PLAN_UPDATE_ACT_ETC.. new plan structure version error p_plan_wbs_ver_id = ' || p_plan_wbs_ver_id || ' ' || SQLERRM );
1163 RAISE;
1164 END;
1165 ELSE
1166 print_time ( 'PLAN_UPDATE_ACT_ETC new structure version id is null, returning.');
1167 RETURN;
1168 END IF;
1169 /* commenting out as this not required any more for bug#4719016
1170
1171 IF (p_prev_pub_wbs_ver_id IS NOT NULL) THEN
1172 BEGIN
1173 SELECT plan_version_id
1174 INTO l_prev_pub_version_id
1175 FROM pji_pjp_wbs_header
1176 WHERE wbs_version_id = p_prev_pub_wbs_ver_id
1177 AND wp_flag = 'Y'; -- AND plan_version_id > 0;
1178 EXCEPTION
1179 WHEN OTHERS THEN
1180 print_time ( 'PLAN_UPDATE_ACT_ETC.. new plan structure version error p_prev_pub_wbs_ver_id = ' || p_prev_pub_wbs_ver_id || ' ' || SQLERRM );
1181 RAISE;
1182 END;
1183 ELSE
1184 l_prev_pub_version_id := -1;
1185 print_time ( 'PLAN_UPDATE_ACT_ETC prev published structure version id is null');
1186 END IF;
1187 */
1188
1189 SELECT COUNT(1)
1190 INTO l_temp
1191 FROM pa_budget_versions
1192 WHERE 1=1
1193 AND budget_version_id IN (l_plan_version_id , l_prev_pub_version_id );
1194
1195
1196 IF (l_temp = 0) THEN
1197 print_time ( 'PLAN_UPDATE_PVT_ACT_ETC invalid plan version ids.. l_temp = ' || l_temp || '. Returning..' );
1198 RETURN;
1199 END IF;
1200
1201 /*
1202 INSERT INTO pji_event_log_debug
1203 ( event_type
1204 , event_id
1205 , event_object
1206 , operation_type
1207 , status
1208 , last_update_date
1209 , last_updated_by
1210 , creation_date
1211 , created_by
1212 , last_update_login)
1213 VALUES
1214 ( 'Update ACT ETC'
1215 , pa_pji_proj_events_log_s.NEXTVAL
1216 , 'x'
1217 , 'x'
1218 , 'x'
1219 , SYSDATE
1220 , 1
1221 , SYSDATE
1222 , 1
1223 , 1);
1224 */
1225
1226 PLAN_UPDATE_PVT_ACT_ETC(
1227 p_plan_version_id => l_plan_version_id,
1228 p_prev_pub_version_id => l_prev_pub_version_id,
1229 x_return_status => x_return_status,
1230 x_processing_code => x_msg_code);
1231
1232 print_time ( 'PLAN_UPDATE_ACT_ETC end');
1233
1234 EXCEPTION
1235
1236 WHEN OTHERS THEN
1237
1238 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
1239 ( p_package_name => g_package_name
1240 , p_procedure_name => 'PLAN_UPDATE_ACT_ETC'
1241 , x_return_status => x_return_status ) ;
1242
1243 RAISE;
1244
1245 END;
1246
1247
1248 PROCEDURE PLAN_UPDATE_PVT_ACT_ETC (
1249 p_plan_version_id IN NUMBER
1250 , p_prev_pub_version_id IN NUMBER := NULL
1251 , x_return_status OUT NOCOPY VARCHAR2
1252 , x_processing_code OUT NOCOPY VARCHAR2) IS
1253
1254 l_num_rows_extr_lines NUMBER := NULL;
1255 l_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1256 l_event_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1257 l_return_status VARCHAR2(1);
1258 l_msg_code VARCHAR2(100);
1259 l_num_need_to_lock NUMBER;
1260 l_temp NUMBER;
1261
1262 l_update_id NUMBER;
1263
1264 BEGIN
1265
1266 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
1267 ( p_package_name => g_package_name
1268 , x_return_status => x_return_status );
1269
1270 x_processing_code := Fnd_Api.G_RET_STS_SUCCESS;
1271
1272 print_time ( 'PLAN_UPDATE_PVT_ACT_ETC begin ' );
1273
1274 print_time ( 'PLAN_UPDATE_PVT_ACT_ETC p_plan_version_id ' || p_plan_version_id || ' p_prev_pub_version_id ' || p_prev_pub_version_id );
1275
1276 CLEANUP_TEMP_TABLES;
1277
1278 IF (p_plan_version_id IS NULL) THEN
1279 print_time ( 'PLAN_UPDATE_PVT_ACT_ETC 1 plan version id is null.. returning ' );
1280 RETURN;
1281 ELSE
1282 INSERT INTO pji_fp_rmap_fpr_update_t (EXTR_LINES_ROWID)
1283 SELECT ROWID FROM pji_fm_extr_plan_lines
1284 WHERE plan_version_id = p_plan_version_id;
1285 END IF;
1286
1287 SELECT COUNT(1)
1288 INTO l_temp
1289 FROM pji_fm_extr_plan_lines
1290 WHERE ROWNUM=1; /*Added for bug 3928020*/
1291 -------------------------------------------------------------------------
1292 -- Process records only if # of lines in plan lines table > threshold #.
1293 -- They will be processed in the next call to plan update api if the above
1294 -- condition is met.
1295 -------------------------------------------------------------------------
1296 print_time ( 'PLAN_UPDATE_PVT_ACT_ETC 1 number of rows in plan lines is .. ' || l_temp);
1297
1298 SELECT COUNT(1)
1299 INTO l_num_rows_extr_lines
1300 FROM pji_fp_rmap_fpr_update_t
1301 WHERE ROWNUM=1; /*Added for bug 3928020*/
1302
1303 print_time ( 'PLAN_UPDATE_PVT_ACT_ETC 1.5 number of rows in rowid table is.. ' || l_num_rows_extr_lines );
1304
1305 IF (l_temp > 0) THEN
1306
1307 -------------------------------------------------------------------------
1308 -- Lock all records.
1309 -------------------------------------------------------------------------
1310
1311 print_time ( 'PLAN_UPDATE_PVT_ACT_ETC 2 ');
1312
1313 PLAN_EXTR_LINES_LOCK (
1314 x_return_status => l_return_status
1315 , x_msg_code => l_msg_code);
1316
1317 IF (l_msg_code = 'F') THEN
1318 RETURN;
1319 END IF;
1320
1321
1322 -------------------------------------------------------------------------
1323 -- Get list of plan versions present in plan extr lines.
1324 -------------------------------------------------------------------------
1325
1326 print_time ( 'PLAN_UPDATE_PVT_ACT_ETC 3 ');
1327
1328 GET_HDRS_TOLOCK_FOR_UPDATE (
1329 x_fp_version_ids => l_fp_version_ids
1330 , x_return_status => x_return_status
1331 , x_msg_code => x_processing_code );
1332
1333 IF (l_fp_version_ids.COUNT = 0) THEN
1334 RETURN;
1335 END IF;
1336
1337
1338 -------------------------------------------------------------------------
1339 -- Try to lock these records in wbs header table.
1340 -- If all records cannot be locked, then return.
1341 -------------------------------------------------------------------------
1342
1343 print_time ( 'PLAN_UPDATE_PVT_ACT_ETC 4 ');
1344
1345 l_num_need_to_lock := l_fp_version_ids.COUNT;
1346
1347 WBS_HEADERS_LOCK (
1348 p_fp_version_ids => l_fp_version_ids
1349 , p_context => 'UPDATE' -- 'PUBLISH'
1350 , x_return_status => l_return_status
1351 , x_msg_code => l_msg_code );
1352
1353 IF (l_fp_version_ids.COUNT <> l_num_need_to_lock) THEN
1354 print_time ( ' PLAN_UPDATE_PVT_ACT_ETC .. Could not lock all headers.. Exitting..');
1355 RETURN;
1356 END IF;
1357
1358 ELSE
1359 print_time ( ' PLAN_UPDATE_PVT_ACT_ETC .. no lines, so no lines/headers to lock.');
1360 END IF;
1361
1362
1363 -------------------------------------------------------------------------
1364 -- Call update api and delete the processed records.
1365 -------------------------------------------------------------------------
1366 print_time ( 'PLAN_UPDATE_PVT_ACT_ETC 5 ');
1367
1368 Pji_Fm_Plan_Maint.UPDATE_PRIMARY_PVT_ACT_ETC (
1369 p_plan_version_id => p_plan_version_id
1370 , p_prev_pub_version_id => p_prev_pub_version_id
1371 , x_return_status => x_return_status
1372 , x_processing_code => x_processing_code);
1373
1374 print_time ( 'PLAN_UPDATE_PVT_ACT_ETC 5.11 ');
1375
1376 debug_plan_lines ; /* bug#3993830 */
1377
1378 DELETE FROM PJI_FM_EXTR_PLAN_LINES
1379 WHERE 1 = 1
1380 AND ROWID IN ( SELECT extr_lines_rowid FROM pji_fp_rmap_fpr_update_t)
1381 AND TXN_CURRENCY_CODE IS NOT NULL
1382 AND prj_currency_code IS NOT NULL
1383 AND pfc_currency_code IS NOT NULL;
1384
1385 print_time ( 'PLAN_UPDATE_PVT_ACT_ETC end ' );
1386
1387 EXCEPTION
1388 WHEN OTHERS THEN
1389
1390 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
1391 ( p_package_name => g_package_name
1392 , p_procedure_name => 'PLAN_UPDATE_PVT_ACT_ETC'
1393 , x_return_status => x_return_status ) ;
1394
1395 RAISE;
1396 END;
1397
1398
1399 PROCEDURE FINPLAN_COPY (
1400 p_source_fp_version_ids IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
1401 p_dest_fp_version_ids IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
1402 p_source_fp_version_types IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
1403 p_dest_fp_version_types IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
1404 x_return_status OUT NOCOPY VARCHAR2,
1405 x_msg_code OUT NOCOPY VARCHAR2 ) IS
1406
1407 l_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1408 l_s_wking_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); -- s == Source
1409 l_s_bslnd_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); -- d == Desination
1410 l_d_wking_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1411 l_d_bslnd_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1412 l_num_wking_fp_ver_ids NUMBER := NULL;
1413 l_return_status VARCHAR2(1);
1414 l_processing_code VARCHAR2(100);
1415 l_msg_code VARCHAR2(100);
1416 l_s_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1417 l_d_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1418 l_event_rec pa_pji_proj_events_log%ROWTYPE;
1419
1420 l_num_src_fp_ver_ids NUMBER := NULL;
1421 l_num_dest_fp_ver_ids NUMBER := NULL;
1422 l_num_src_fp_ver_types NUMBER := NULL;
1423 l_num_dest_fp_ver_types NUMBER := NULL;
1424
1425 -- OLAP START CHANGE
1426
1427 l_msg_count number;
1428 l_pjt_rollup_enabled_flag varchar2(1) ;
1429 l_cbs_enabled_flag varchar2(1);
1430 l_project_id number;
1431 l_rbs_version_id number ;
1432 l_cbs_version_id number;
1433
1434 -- OLAP END CHANGE
1435
1436
1437
1438 BEGIN
1439
1440 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
1441 ( p_package_name => g_package_name
1442 , x_return_status => x_return_status );
1443
1444 print_time ( ' plan copy api ' );
1445 print_time ( ' plan copy api .. source plan version ids ' );
1446 PRINT_PLAN_VERSION_ID_LIST(p_source_fp_version_ids);
1447 print_time ( ' plan copy api .. dest plan version ids ' );
1448 PRINT_PLAN_VERSION_ID_LIST(p_dest_fp_version_ids);
1449 print_time ( ' plan copy api .. source plan version types ' );
1450 PRINT_PLAN_VERSION_TYPE_LIST(p_source_fp_version_types);
1451 print_time ( ' plan copy api .. source plan version types ' );
1452 PRINT_PLAN_VERSION_TYPE_LIST(p_source_fp_version_types);
1453 print_time ( ' plan copy api .. checking source plan version ids are valid.. ' );
1454 CHECK_BUDGET_VERSION_EXISTS(p_source_fp_version_ids);
1455 print_time ( ' plan copy api .. checking dest plan version ids are valid.. ' );
1456
1457
1458 CHECK_BUDGET_VERSION_EXISTS(p_dest_fp_version_ids);
1459
1460 print_time ( ' plan copy api .. 001 ' );
1461
1462 --
1463 -- Note: As per Venkatesh's email, only cases to support are: B-W, W-W (create working).
1464 -- W-B will be done in PLAN_BASELINE api. B-B is not valid biz scenario.
1465 --
1466
1467 l_num_src_fp_ver_ids := p_source_fp_version_ids.COUNT;
1468 l_num_dest_fp_ver_ids := p_dest_fp_version_ids.COUNT;
1469 l_num_src_fp_ver_types := p_source_fp_version_types.COUNT;
1470 l_num_dest_fp_ver_types := p_dest_fp_version_types.COUNT;
1471
1472 IF ( (l_num_src_fp_ver_ids IS NULL )
1473 OR (l_num_src_fp_ver_ids = 0 )
1474 OR (l_num_src_fp_ver_ids <> l_num_dest_fp_ver_ids )
1475 OR (l_num_src_fp_ver_ids <> l_num_src_fp_ver_types)
1476 OR (l_num_src_fp_ver_ids <> l_num_dest_fp_ver_types ) ) THEN
1477 RETURN;
1478 END IF;
1479
1480 print_time ( ' plan copy api .. 002 ' );
1481
1482
1483
1484
1485 FOR i IN p_source_fp_version_ids.FIRST..p_source_fp_version_ids.LAST LOOP
1486
1487 print_time ( ' plan copy api .. 003 ' );
1488
1489 -- OLAP START CHANGE
1490
1491 select p.pjt_rollup_enabled_flag , p.cbs_enable_flag, p.project_id , fpo.rbs_version_id , p.cbs_version_id
1492 into l_pjt_rollup_enabled_flag , l_cbs_enabled_flag, l_project_id , l_rbs_version_id , l_cbs_version_id
1493 from pa_budget_versions b , pa_projects_all p , pa_proj_fp_options fpo
1494 where b.budget_version_id = p_dest_fp_version_ids(i)
1495 and b.project_id = p.project_id
1496 AND b.fin_plan_type_id = fpo.fin_plan_type_id
1497 AND b.budget_version_id = fpo.fin_plan_version_id
1498 AND b.project_id = fpo.project_id
1499 AND fpo.fin_plan_option_level_code = 'PLAN_VERSION' ;
1500
1501
1502 --if ( l_pjt_rollup_enabled_flag = 'Y' ) then
1503 if l_cbs_enabled_flag = 'Y' then
1504
1505 PA_ppr_rollup_PVT.plan_create(
1506 p_plan_version_id => p_dest_fp_version_ids(i)
1507 ,p_project_id => l_project_id
1508 ,p_rbs_version_id => l_rbs_version_id
1509 ,p_cbs_version_id => l_cbs_version_id
1510 ,x_return_status => x_return_status
1511 ,x_msg_code => x_msg_code
1512 ) ;
1513
1514 end if;
1515
1516 --else
1517 -- OLAP END CHANGE
1518
1519 IF (p_source_fp_version_types(i) = 'W') THEN
1520
1521 print_time ( ' plan copy api .. 004 ' );
1522
1523 --
1524 -- Create event.
1525 --
1526 l_event_rec.event_type := 'PLAN_COPY';
1527 l_event_rec.event_object := p_dest_fp_version_ids(i);
1528
1529 l_event_rec.operation_type := '1';
1530 l_event_rec.status := 'X';
1531 l_event_rec.attribute1 := p_source_fp_version_ids(i);
1532 -- l_event_rec.attribute2 := p_source_fp_version_types(i); -- W/B
1533
1534 CREATE_EVENT(l_event_rec);
1535
1536 print_time ( ' plan copy api .. 005 ' );
1537
1538 --
1539 -- Call the pvt api to Copy the plan.
1540 --
1541 PLAN_COPY_PVT (
1542 p_event_id => l_event_rec.event_id
1543 , x_processing_code => l_processing_code
1544 , x_return_status => x_return_status );
1545
1546 print_time ( ' plan copy api .. 006 ' );
1547
1548 ELSIF (p_source_fp_version_types(i) = 'B') THEN
1549
1550 print_time ( ' plan copy api .. 007 ' );
1551
1552 --
1553 -- Copy the plan without creating events.
1554 --
1555
1556 l_s_fp_version_ids := SYSTEM.pa_num_tbl_type (p_source_fp_version_ids(i) );
1557 l_d_fp_version_ids := SYSTEM.pa_num_tbl_type (p_dest_fp_version_ids(i) );
1558
1559 print_time ( ' plan copy api .. 008 ' );
1560
1561 Pji_Fm_Plan_Maint_T_Pvt.COPY_PRIMARY
1562 (
1563 p_source_fp_version_ids => l_s_fp_version_ids
1564 , p_dest_fp_version_ids => l_d_fp_version_ids
1565 , p_commit => 'F'
1566 );
1567
1568 print_time ( ' plan copy api .. 009 ' );
1569
1570 COPY_PJI_SUMMRZD_FLAG (
1571 p_source_fp_version_ids => l_s_fp_version_ids
1572 , p_dest_fp_version_ids => l_d_fp_version_ids);
1573
1574 print_time ( ' plan copy api .. 010 ' );
1575
1576 END IF;
1577
1578 print_time ( ' plan copy api .. 011 ' );
1579
1580 -- OLAP START CHANGE
1581
1582 --end if;
1583
1584 -- OLAP END CHANGE
1585
1586 END LOOP;
1587
1588 print_time ( ' plan copy api .. 012 ' );
1589
1590 --COMMIT;
1591
1592 EXCEPTION
1593 WHEN OTHERS THEN
1594 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
1595 ( p_package_name => g_package_name
1596 , p_procedure_name => 'PLAN_COPY'
1597 , x_return_status => x_return_status ) ;
1598
1599 RAISE;
1600 END;
1601
1602
1603 PROCEDURE PLAN_COPY_PVT (
1604 p_event_id IN NUMBER
1605 , x_return_status OUT NOCOPY VARCHAR2
1606 , x_processing_code OUT NOCOPY VARCHAR2) IS
1607
1608 l_event_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1609 l_s_plan_version_id NUMBER := NULL;
1610 l_d_plan_version_id NUMBER := NULL;
1611 l_s_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1612 l_d_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1613 l_working_or_baselined VARCHAR2(30) := 'N';
1614 l_return_status VARCHAR2(1);
1615 l_msg_code VARCHAR2(100);
1616
1617 BEGIN
1618
1619 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
1620 ( p_package_name => g_package_name
1621 , x_return_status => x_return_status );
1622
1623 x_processing_code := Fnd_Api.G_RET_STS_SUCCESS;
1624
1625 print_time ( ' plan copy PVT api .. 001 ' );
1626
1627 SELECT attribute1, event_object, attribute2
1628 INTO l_s_plan_version_id, l_d_plan_version_id, l_working_or_baselined
1629 FROM PA_PJI_PROJ_EVENTS_LOG
1630 WHERE event_id = p_event_id;
1631
1632 l_s_fp_version_ids := SYSTEM.pa_num_tbl_type (l_s_plan_version_id);
1633 l_d_fp_version_ids := SYSTEM.pa_num_tbl_type (l_d_plan_version_id);
1634
1635 print_time ( ' plan copy PVT api .. 002 ' );
1636
1637 WBS_HEADERS_LOCK (
1638 p_fp_version_ids => l_s_fp_version_ids
1639 , p_context => 'COPY'
1640 , x_return_status => l_return_status
1641 , x_msg_code => l_msg_code );
1642
1643 print_time ( ' plan copy PVT api .. 003 ' );
1644
1645 IF (l_s_fp_version_ids.COUNT < 1) THEN
1646 x_processing_code := 'F';
1647 print_time ( ' plan copy PVT api .. 004 ' );
1648 RETURN;
1649 END IF;
1650
1651 print_time ( ' plan copy PVT api .. 005 ' );
1652
1653 Pji_Fm_Plan_Maint_T_Pvt.COPY_PRIMARY
1654 (
1655 p_source_fp_version_ids => l_s_fp_version_ids
1656 , p_dest_fp_version_ids => l_d_fp_version_ids
1657 , p_commit => 'F'
1658 );
1659
1660 print_time ( ' plan copy PVT api .. 006 ' );
1661
1662 COPY_PJI_SUMMRZD_FLAG (
1663 p_source_fp_version_ids => l_s_fp_version_ids
1664 , p_dest_fp_version_ids => l_d_fp_version_ids);
1665
1666 print_time ( ' plan copy PVT api .. 007 ' );
1667
1668 --
1669 -- Delete from events table.
1670 --
1671 l_event_ids := SYSTEM.pa_num_tbl_type (p_event_id);
1672
1673 DELETE_EVENTS (
1674 p_event_ids => l_event_ids
1675 , x_return_status => l_return_status
1676 , x_msg_code => l_msg_code );
1677
1678 print_time ( ' plan copy PVT api .. 008 ' );
1679
1680 x_processing_code := l_return_status;
1681
1682 EXCEPTION
1683 WHEN OTHERS THEN
1684 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
1685 ( p_package_name => g_package_name
1686 , p_procedure_name => 'PLAN_COPY_PVT'
1687 , x_return_status => x_return_status ) ;
1688
1689 RAISE;
1690 END;
1691
1692
1693 PROCEDURE PLAN_BASELINE (
1694 p_baseline_version_id IN NUMBER,
1695 p_new_version_id IN NUMBER,
1696 x_return_status OUT NOCOPY VARCHAR2,
1697 x_msg_code OUT NOCOPY VARCHAR2 ) IS
1698
1699 l_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1700 l_event_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1701 l_return_status VARCHAR2(1);
1702 l_msg_code VARCHAR2(100);
1703 l_event_id NUMBER;
1704 l_event_rec pa_pji_proj_events_log%ROWTYPE;
1705 l_project_id NUMBER := NULL;
1706 l_curr_bl_ver_id NUMBER := NULL;
1707 l_plan_type_id NUMBER := NULL;
1708 l_new_project_type pa_projects_all.project_type%TYPE;
1709 l_new_plan_type_code pa_budget_versions.budget_type_code%TYPE;
1710 l_plan_type_code CHAR(1);
1711 l_processing_code VARCHAR2(12000);
1712 l_wp_version_flag VARCHAR2(1) := NULL;
1713
1714 l_s_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1715 l_d_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1716
1717 -- OLAP START CHANGE V2
1718
1719 l_msg_count number;
1720 l_pjt_rollup_enabled_flag varchar2(1) ;
1721 --l_project_id number;
1722 l_rbs_version_id number ;
1723 l_cbs_version_id number;
1724 l_cbs_enabled_flag varchar2(1);
1725
1726 -- OLAP END CHANGE V2
1727
1728 BEGIN
1729
1730 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
1731 ( p_package_name => g_package_name
1732 , x_return_status => x_return_status );
1733
1734
1735 print_time ( ' PLAN_BASELINE api begin ' );
1736 print_time ( ' baseline version id is .. ' || p_baseline_version_id );
1737 print_time ( ' new version id is .. ' || p_new_version_id );
1738
1739 -------------------------------------------------------------------------
1740 -- Get plan type id and project id for the newly baselined version.
1741 -------------------------------------------------------------------------
1742 BEGIN
1743 SELECT bv1.project_id, bv1.fin_plan_type_id, bv1.wp_version_flag,
1744 DECODE(bv1.version_type, 'COST' , 'C' , 'REVENUE' , 'R' , 'A')
1745 INTO l_project_id, l_plan_type_id, l_wp_version_flag,l_plan_type_code
1746 FROM pa_budget_versions bv1
1747 WHERE bv1.budget_version_id = p_baseline_version_id;
1748 EXCEPTION
1749 WHEN OTHERS THEN
1750 NULL;
1751 END;
1752
1753 print_time ( ' PLAN_BASELINE api 001 ' ||l_project_id || ' ' || l_plan_type_id || ' ' || l_wp_version_flag );
1754
1755 -------------------------------------------------------------------------
1756 -- Only financial plans are baselined.
1757 -------------------------------------------------------------------------
1758 IF (l_wp_version_flag = 'Y') THEN
1759 RETURN;
1760 END IF;
1761
1762 -------------------------------------------------------------------------
1763 -- Get the current baselined plan version for this project for this line type.
1764 -------------------------------------------------------------------------
1765 BEGIN
1766 SELECT plan_version_id
1767 INTO l_curr_bl_ver_id
1768 FROM PJI_PJP_WBS_HEADER wbs_hdr
1769 WHERE 1 = 1
1770 AND project_id = l_project_id
1771 AND plan_type_id = l_plan_type_id
1772 AND plan_type_code = l_plan_type_code
1773 AND cb_flag = 'Y'
1774 AND plan_version_id > 0 ;
1775 EXCEPTION
1776 WHEN NO_DATA_FOUND THEN
1777 print_time ( ' PLAN_BASELINE api 001.11 : Currently, there are no baslined plans for this plan type.');
1778 WHEN OTHERS THEN
1779 RAISE;
1780 END;
1781
1782 print_time ( ' PLAN_BASELINE api 001.2 ' || l_curr_bl_ver_id );
1783
1784 ------------------------------------------------------------------------------
1785 -- Create a working plan version using the newly baselined plan.
1786 -- Copy pji summarized flag from source to destination plan version ids.
1787 ------------------------------------------------------------------------------
1788
1789 print_time ( ' PLAN_BASELINE api 001.1 ' || p_baseline_version_id || ' ' || p_new_version_id );
1790
1791 l_s_fp_version_ids := SYSTEM.pa_num_tbl_type (p_baseline_version_id );
1792 l_d_fp_version_ids := SYSTEM.pa_num_tbl_type (p_new_version_id);
1793
1794 -- OLAP START CHANGE
1795
1796 select p.pjt_rollup_enabled_flag , p.cbs_enable_flag, p.project_id , fpo.rbs_version_id , p.cbs_version_id
1797 into l_pjt_rollup_enabled_flag , l_cbs_enabled_flag, l_project_id , l_rbs_version_id , l_cbs_version_id
1798 from pa_budget_versions b , pa_projects_all p , pa_proj_fp_options fpo
1799 where b.budget_version_id = p_new_version_id
1800 and b.project_id = p.project_id
1801 AND b.fin_plan_type_id = fpo.fin_plan_type_id
1802 AND b.budget_version_id = fpo.fin_plan_version_id
1803 AND b.project_id = fpo.project_id
1804 AND fpo.fin_plan_option_level_code = 'PLAN_VERSION' ;
1805
1806
1807 -- if ( l_pjt_rollup_enabled_flag = 'Y' ) then
1808 if l_cbs_enabled_flag = 'Y' then
1809 PA_ppr_rollup_PVT.plan_create(
1810 p_plan_version_id => p_new_version_id
1811 ,p_project_id => l_project_id
1812 ,p_rbs_version_id => l_rbs_version_id
1813 ,p_cbs_version_id => l_cbs_version_id
1814 ,x_return_status => x_return_status
1815 ,x_msg_code => x_msg_code
1816 ) ;
1817
1818 end if;
1819
1820 --else
1821 -- OLAP END CHANGE
1822
1823 COPY_PJI_SUMMRZD_FLAG (
1824 p_source_fp_version_ids => l_s_fp_version_ids
1825 , p_dest_fp_version_ids => l_d_fp_version_ids);
1826
1827
1828 print_time ( ' PLAN_BASELINE api 001.22 successfully copied pji summarized flag. ' );
1829
1830
1831 -------------------------------------------------------------------------
1832 -- Create an event..
1833 -------------------------------------------------------------------------
1834 l_event_rec.event_type := 'PLAN_BASELINE';
1835 l_event_rec.event_object := p_new_version_id;
1836 l_event_rec.operation_type := 'U';
1837 l_event_rec.status := 'X';
1838 l_event_rec.attribute1 := l_project_id;
1839 l_event_rec.attribute2 := l_plan_type_id;
1840 l_event_rec.attribute3 := l_curr_bl_ver_id;
1841 l_event_rec.attribute4 := l_plan_type_code;
1842
1843 CREATE_EVENT(l_event_rec);
1844
1845
1846 -------------------------------------------------------------------------
1847 -- Call the private api that actually handles the baseline process.
1848 -------------------------------------------------------------------------
1849
1850 PLAN_BASELINE_PVT (
1851 p_event_id => l_event_rec.event_id
1852 , x_processing_code => l_processing_code
1853 , x_return_status => x_return_status );
1854
1855
1856 -- OLAP START V2
1857
1858 -- end if;
1859
1860 -- OLAP END V2
1861
1862 print_time ( ' PLAN_BASELINE api 002 End ' );
1863
1864 EXCEPTION
1865 WHEN OTHERS THEN
1866 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
1867 ( p_package_name => g_package_name
1868 , p_procedure_name => 'PLAN_BASELINE'
1869 , x_return_status => x_return_status ) ;
1870
1871 RAISE;
1872 END;
1873
1874
1875
1876 ----------------------------------------------------------------------------------------
1877 --
1878 -- Mark plan as baselined.
1879 -- In the reporting lines fact, baslined slice corresponds to plan version id -3.
1880 -- There is a unique baselined plan version for a given combination of project and plan type ids.
1881 --
1882 ----------------------------------------------------------------------------------------
1883 PROCEDURE PLAN_BASELINE_PVT (
1884 p_event_id IN NUMBER
1885 , x_return_status OUT NOCOPY VARCHAR2
1886 , x_processing_code OUT NOCOPY VARCHAR2) IS
1887
1888 l_project_id NUMBER;
1889 l_count NUMBER;
1890 l_working_version_id NUMBER;
1891 l_baseline_version_id NUMBER;
1892 l_old_baseline_version_id NUMBER;
1893 l_new_version_id NUMBER;
1894 l_plan_type_id NUMBER;
1895 l_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1896 l_source_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1897 l_dest_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1898 l_event_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1899 l_return_status VARCHAR2(12000);
1900 l_msg_code VARCHAR2(100);
1901 l_baselined_exists NUMBER;
1902 l_new_working_ver_id NUMBER;
1903 l_processing_code VARCHAR2(1);
1904
1905 l_s_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1906 l_d_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1907
1908 l_last_update_date date := SYSDATE;
1909 l_last_updated_by NUMBER := FND_GLOBAL.USER_ID;
1910 l_last_update_login NUMBER := FND_GLOBAL.LOGIN_ID;
1911 l_plan_type_code char(1);
1912
1913 BEGIN
1914
1915 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
1916 ( p_package_name => g_package_name
1917 , x_return_status => x_return_status );
1918
1919 x_processing_code := Fnd_Api.G_RET_STS_SUCCESS;
1920
1921 print_time ( ' PLAN_BASELINE_PVT api 001 Begin event id is.. ' || p_event_id );
1922
1923 -----------------------------------------------------------------------------------
1924 -- Get event info.
1925 -----------------------------------------------------------------------------------
1926
1927 SELECT attribute1
1928 , event_object
1929 , attribute3
1930 , attribute2
1931 , attribute4
1932 INTO l_project_id
1933 , l_new_version_id
1934 , l_old_baseline_version_id
1935 , l_plan_type_id
1936 , l_plan_type_code /*4771527*/
1937 FROM PA_PJI_PROJ_EVENTS_LOG
1938 WHERE event_id = p_event_id;
1939
1940
1941 l_dest_fp_version_ids := SYSTEM.pa_num_tbl_type (l_new_version_id);
1942
1943
1944 ----------------------------------------------------------------------------------------
1945 -- Insert the missing -3, -4 header records and lock the appropriate versions.
1946 ----------------------------------------------------------------------------------------
1947
1948 WBS_HEADERS_LOCK( -- _BASELINE (
1949 p_fp_version_ids => l_dest_fp_version_ids -- l_new_version_id
1950 , p_context => 'BASELINE'
1951 , x_return_status => l_return_status
1952 , x_msg_code => l_msg_code );
1953
1954 x_processing_code := l_msg_code;
1955
1956 IF (l_dest_fp_version_ids.COUNT <1) THEN
1957 print_time(' Baseline flow. # hdrs locked is not valid, returning. # = ' || l_dest_fp_version_ids.COUNT );
1958 RETURN;
1959 END IF;
1960
1961 ----------------------------------------------------------------------------------------
1962 -- Update the WBS header table with the correct baselined version.
1963 ----------------------------------------------------------------------------------------
1964
1965 UPDATE pji_pjp_wbs_header
1966 SET cb_flag = DECODE( plan_version_id
1967 , l_old_baseline_version_id, 'N'
1968 , l_new_version_id, 'Y'
1969 , -3, 'Y' )
1970 , LAST_UPDATE_DATE = l_last_update_date
1971 , LAST_UPDATED_BY = l_last_updated_by
1972 , LAST_UPDATE_LOGIN = l_last_update_login
1973 WHERE plan_version_id IN (l_old_baseline_version_id
1974 , l_new_version_id
1975 , -3)
1976 AND project_id = l_project_id
1977 AND plan_type_id = l_plan_type_id
1978 AND plan_type_code = l_plan_type_code; /*4771527 */
1979
1980 print_time ( ' PLAN_BASELINE_PVT api 004: marked the latest baselined version in header table. ' );
1981
1982
1983 ----------------------------------------------------------------------------------------
1984 -- Set the online context.
1985 ----------------------------------------------------------------------------------------
1986
1987 Pji_Pjp_Sum_Rollup.set_online_context (
1988 p_event_id => p_event_id,
1989 p_project_id => l_project_id,
1990 p_plan_type_id => l_plan_type_id,
1991 p_old_baselined_version => l_old_baseline_version_id,
1992 p_new_baselined_version => l_new_version_id ,
1993 p_old_original_version => NULL,
1994 p_new_original_version => NULL,
1995 p_old_struct_version => NULL,
1996 p_new_struct_version => NULL);
1997
1998
1999 ----------------------------------------------------------------------------------------
2000 -- Assume primary slice exists.
2001 -- Create primary slice for reporting RBSes and secondary slice.
2002 ----------------------------------------------------------------------------------------
2003
2004 Pji_Fm_Plan_Maint.CREATE_SECONDARY_T_PVT(
2005 p_fp_version_ids => l_dest_fp_version_ids
2006 , p_commit => 'N');
2007
2008
2009 print_time ( ' PLAN_BASELINE_PVT api 006: Created secondary slice for all RBSes.' );
2010
2011
2012 ------------------------------------------------------------------------------
2013 -- Delete event.
2014 ------------------------------------------------------------------------------
2015
2016 l_event_ids := SYSTEM.pa_num_tbl_type (p_event_id);
2017
2018 DELETE_EVENTS (
2019 p_event_ids => l_event_ids
2020 , x_return_status => l_return_status
2021 , x_msg_code => l_msg_code );
2022
2023 print_time ( ' PLAN_BASELINE_PVT api 008: Deleted events. ' );
2024
2025 EXCEPTION
2026 WHEN OTHERS THEN
2027 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
2028 ( p_package_name => g_package_name
2029 , p_procedure_name => 'PLAN_BASELINE_PVT'
2030 , x_return_status => x_return_status ) ;
2031
2032 RAISE;
2033 END;
2034
2035
2036 PROCEDURE PLAN_ORIGINAL (
2037 p_original_version_id IN NUMBER,
2038 x_return_status OUT NOCOPY VARCHAR2,
2039 x_msg_code OUT NOCOPY VARCHAR2 ) IS
2040
2041 l_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
2042 l_event_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
2043 l_wp_flag VARCHAR2(1);
2044 l_return_status VARCHAR2(1);
2045 l_msg_code VARCHAR2(100);
2046 l_event_id NUMBER;
2047 l_event_rec pa_pji_proj_events_log%ROWTYPE;
2048 l_project_id NUMBER := NULL;
2049 l_curr_or_ver_id NUMBER := NULL;
2050 l_plan_type_id NUMBER := NULL;
2051 l_plan_type_code char(1);
2052 l_new_project_type pa_projects_all.project_type%TYPE;
2053 l_new_plan_type_code pa_budget_versions.budget_type_code%TYPE;
2054 l_processing_code VARCHAR2(1500) := NULL;
2055
2056 BEGIN
2057
2058 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
2059 ( p_package_name => g_package_name
2060 , x_return_status => x_return_status );
2061
2062 print_time ( ' PLAN_ORIGINAL api ' );
2063 print_time ( ' original version id is .. ' || p_original_version_id );
2064
2065
2066 ---------------------------------------------------------
2067 -- Mark as original only financial plans.
2068 ---------------------------------------------------------
2069
2070 BEGIN
2071 SELECT wp_flag
2072 INTO l_wp_flag
2073 FROM pji_pjp_wbs_header
2074 WHERE plan_version_id = p_original_version_id;
2075 EXCEPTION
2076 WHEN OTHERS THEN
2077 NULL;
2078 END;
2079
2080 IF ( l_wp_flag = 'Y' ) THEN
2081 RETURN;
2082 END IF;
2083
2084
2085 ---------------------------------------------------------------------------
2086 -- Get plan type id and project id for the version tb marked original.
2087 ---------------------------------------------------------------------------
2088
2089 BEGIN
2090
2091 SELECT bv1.project_id, bv1.fin_plan_type_id,
2092 DECODE(bv1.version_type, 'COST' , 'C' , 'REVENUE' , 'R' , 'A')
2093 INTO l_project_id, l_plan_type_id, l_plan_type_code
2094 FROM pa_budget_versions bv1
2095 WHERE bv1.budget_version_id = p_original_version_id;
2096
2097 EXCEPTION
2098 WHEN OTHERS THEN
2099 NULL;
2100 END;
2101
2102 --
2103 -- Get plan version id for the previous original version.
2104 --
2105 BEGIN
2106 SELECT plan_version_id
2107 INTO l_curr_or_ver_id
2108 FROM PJI_PJP_WBS_HEADER wbs_hdr
2109 WHERE 1 = 1
2110 AND project_id = l_project_id
2111 AND plan_type_id = l_plan_type_id
2112 AND co_flag = 'Y'
2113 AND plan_version_id > 0
2114 AND plan_type_code = l_plan_type_code ; /* 4471527 */
2115 EXCEPTION
2116 WHEN NO_DATA_FOUND THEN
2117 print_time('Currently, there is no original baseline version so far for this plan type.');
2118 NULL;
2119 WHEN OTHERS THEN
2120 RAISE;
2121 END;
2122
2123
2124 --
2125 -- Create an event..
2126 --
2127 l_event_rec.event_type := 'PLAN_ORIGINAL';
2128 l_event_rec.event_object := p_original_version_id;
2129 l_event_rec.operation_type := 'U';
2130 l_event_rec.status := 'X';
2131 l_event_rec.attribute1 := l_project_id;
2132 l_event_rec.attribute2 := l_plan_type_id;
2133 l_event_rec.attribute3 := l_curr_or_ver_id;
2134 l_event_rec.attribute4 := l_plan_type_code; /* 4771527 */
2135
2136 CREATE_EVENT(l_event_rec);
2137
2138
2139 --
2140 -- Call the private api that actually handles the mark original process.
2141 --
2142 PLAN_ORIGINAL_PVT(
2143 p_event_id => l_event_rec.event_id
2144 , x_processing_code => l_processing_code
2145 , x_return_status => x_return_status );
2146
2147 --COMMIT;
2148
2149 EXCEPTION
2150 WHEN OTHERS THEN
2151 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
2152 ( p_package_name => g_package_name
2153 , p_procedure_name => 'PLAN_ORIGINAL'
2154 , x_return_status => x_return_status ) ;
2155
2156 RAISE;
2157 END;
2158
2159
2160 PROCEDURE PLAN_ORIGINAL_PVT (
2161 p_event_id IN NUMBER
2162 , x_return_status OUT NOCOPY VARCHAR2
2163 , x_processing_code OUT NOCOPY VARCHAR2) IS
2164
2165 l_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
2166 l_source_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
2167 l_dest_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
2168 l_event_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
2169 l_wp_flag VARCHAR2(1);
2170 l_return_status VARCHAR2(1);
2171 l_msg_code VARCHAR2(100);
2172 l_event_id NUMBER;
2173 l_event_rec pa_pji_proj_events_log%ROWTYPE;
2174 l_project_id NUMBER := NULL;
2175 l_old_orig_ver_id NUMBER := NULL;
2176 l_new_orig_ver_id NUMBER := NULL;
2177 l_plan_type_id NUMBER := NULL;
2178 l_new_project_type pa_projects_all.project_type%TYPE;
2179 l_new_plan_type_code pa_budget_versions.budget_type_code%TYPE;
2180 l_original_exists NUMBER := NULL;
2181 l_processing_code VARCHAR2(1) := NULL;
2182
2183 l_last_update_date date := SYSDATE;
2184 l_last_updated_by NUMBER := FND_GLOBAL.USER_ID;
2185 l_last_update_login NUMBER := FND_GLOBAL.LOGIN_ID;
2186 l_plan_type_code char(1) ; /*4771527 */
2187
2188 BEGIN
2189
2190 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
2191 ( p_package_name => g_package_name
2192 , x_return_status => x_return_status );
2193
2194 x_processing_code := Fnd_Api.G_RET_STS_SUCCESS;
2195
2196
2197 -----------------------------------------------------------------------------------
2198 -- Get event info.
2199 -----------------------------------------------------------------------------------
2200
2201 SELECT attribute1, attribute3, event_object, attribute2,attribute4
2202 INTO l_project_id, l_old_orig_ver_id, l_new_orig_ver_id, l_plan_type_id,l_plan_type_code /*4771527 */
2203 FROM PA_PJI_PROJ_EVENTS_LOG
2204 WHERE event_id = p_event_id;
2205
2206
2207 ----------------------------------------------------------------------------------------
2208 -- First, need to lock all relevant plan versions, if this is not possible, return.
2209 ----------------------------------------------------------------------------------------
2210
2211 l_fp_version_ids := SYSTEM.pa_num_tbl_type (l_new_orig_ver_id);
2212
2213 /*
2214 CHECK_BUDGET_VERSION_EXISTS(l_fp_version_ids);
2215
2216 WBS_HEADERS_LOCK (
2217 p_fp_version_ids => l_fp_version_ids
2218 , x_return_status => l_return_status
2219 , x_msg_code => l_msg_code ) ;
2220
2221 x_processing_code := l_msg_code;
2222
2223 IF (l_fp_version_ids.COUNT <1) THEN
2224 RETURN;
2225 END IF;
2226 */
2227
2228 WBS_HEADERS_LOCK( -- _BASELINE (
2229 p_fp_version_ids => l_fp_version_ids
2230 , p_context => 'ORIGINAL'
2231 , x_return_status => l_return_status
2232 , x_msg_code => l_msg_code );
2233
2234 x_processing_code := l_msg_code;
2235
2236 IF (l_fp_version_ids.COUNT <1) THEN
2237 print_time(' Original flow. # hdrs locked is not valid, returning. # = ' || l_fp_version_ids.COUNT );
2238 RETURN;
2239 END IF;
2240
2241
2242 -----------------------------------------------------------------------------------
2243 -- Update header table.
2244 -----------------------------------------------------------------------------------
2245
2246 UPDATE pji_pjp_wbs_header
2247 SET co_flag = DECODE(plan_version_id
2248 , l_old_orig_ver_id, 'N'
2249 , l_new_orig_ver_id, 'Y'
2250 , -4, 'Y')
2251 , LAST_UPDATE_DATE = l_last_update_date
2252 , LAST_UPDATED_BY = l_last_updated_by
2253 , LAST_UPDATE_LOGIN = l_last_update_login
2254 WHERE plan_version_id IN (l_old_orig_ver_id, l_new_orig_ver_id, -4)
2255 AND project_id = l_project_id
2256 AND plan_type_id = l_plan_type_id
2257 AND plan_type_code = l_plan_type_code ; /* 4771527 */
2258
2259 print_time('Marked the cb and co flags in WBS header correctly.');
2260
2261
2262 -----------------------------------------------------------------------------------
2263 -- Set online context.
2264 -----------------------------------------------------------------------------------
2265
2266 Pji_Pjp_Sum_Rollup.set_online_context (
2267 p_event_id => p_event_id,
2268 p_project_id => l_project_id,
2269 p_plan_type_id => NULL, -- l_plan_type_id
2270 p_old_baselined_version => NULL,
2271 p_new_baselined_version => NULL ,
2272 p_old_original_version => l_old_orig_ver_id,
2273 p_new_original_version => l_new_orig_ver_id,
2274 p_old_struct_version => NULL,
2275 p_new_struct_version => NULL);
2276
2277 Pji_Fm_Plan_Maint_T_Pvt.CLEANUP_INTERIM_TABLES; -- Clean up interim tables.
2278 print_time(' Mark original private: Cleaned up interim tables. ');
2279
2280 -- Populated ver3 just to get the level info in rollup_fpr_wbs Bug 5528058
2281 PJI_FM_PLAN_MAINT_T_PVT.EXTRACT_FIN_PLAN_VERSIONS(l_fp_version_ids, 'PRI');
2282 -- PJI_FM_PLAN_MAINT_T_PVT.EXTRACT_FIN_PLAN_VERSIONS(l_fp_version_ids, 'SECRBS');
2283 print_time(' Populated ver3. ');
2284
2285 PJI_FM_PLAN_MAINT_T_PVT.CREATE_WBSRLP;
2286 print_time(' Mark original private: Created WBS rollups. ');
2287
2288 PJI_PJP_SUM_ROLLUP.ROLLUP_FPR_RBS_SMART_SLICES;
2289
2290 PJI_FM_PLAN_MAINT_T_PVT.UPDATE_WBS_HDR;
2291 print_time('Updated the WBS header table with min max txn dates.');
2292
2293 PJI_FM_PLAN_MAINT_T_PVT.MERGE_INTO_FP_FACT;
2294 print_time(' Mark original private: Merged into fact. ');
2295
2296
2297 ------------------------------------------
2298 -- Delete from events table.
2299 ------------------------------------------
2300
2301 l_event_ids := SYSTEM.pa_num_tbl_type (p_event_id);
2302
2303 DELETE_EVENTS (
2304 p_event_ids => l_event_ids
2305 , x_return_status => l_return_status
2306 , x_msg_code => l_msg_code );
2307
2308 Pji_Fm_Plan_Maint_T_Pvt.CLEANUP_INTERIM_TABLES;
2309 print_time(' Mark original private: Cleaned up interim tables. ');
2310
2311 EXCEPTION
2312 WHEN OTHERS THEN
2313 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
2314 ( p_package_name => g_package_name
2315 , p_procedure_name => 'PLAN_ORIGINAL_PVT'
2316 , x_return_status => x_return_status ) ;
2317
2318 RAISE;
2319 END;
2320
2321
2322 PROCEDURE PRG_CHANGE (
2323 p_prg_grp_id IN NUMBER,
2324 x_return_status OUT NOCOPY VARCHAR2,
2325 x_msg_code OUT NOCOPY VARCHAR2 ) IS
2326
2327 l_event_rec pa_pji_proj_events_log%ROWTYPE;
2328 l_return_status VARCHAR2(1);
2329 l_msg_code VARCHAR2(100);
2330
2331 BEGIN
2332
2333 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
2334 ( p_package_name => g_package_name
2335 , x_return_status => x_return_status );
2336
2337
2338 --
2339 -- Create an event..
2340 --
2341 l_event_rec.event_type := 'PRG_CHANGE';
2342 l_event_rec.event_object := p_prg_grp_id;
2343 l_event_rec.operation_type := 'I';
2344 l_event_rec.status := 'X';
2345
2346 create_event(l_event_rec);
2347
2348 --COMMIT;
2349
2350 -- Summarization process will pick up this event.
2351
2352 EXCEPTION
2353 WHEN OTHERS THEN
2354 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
2355 ( p_package_name => g_package_name
2356 , p_procedure_name => 'PRG_CHANGE'
2357 , x_return_status => x_return_status ) ;
2358
2359 RAISE;
2360 END;
2361
2362
2363
2364 PROCEDURE RBS_PUSH (
2365 p_old_rbs_version_id IN NUMBER DEFAULT NULL
2366 , p_new_rbs_version_id IN NUMBER
2367 , p_project_id IN NUMBER DEFAULT NULL
2368 , p_program_flag IN VARCHAR2 DEFAULT 'N'
2369 , x_return_status OUT NOCOPY VARCHAR2
2370 , x_msg_code OUT NOCOPY VARCHAR2 ) IS
2371
2372 l_event_rec pa_pji_proj_events_log%ROWTYPE;
2373 l_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
2374 l_event_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
2375 l_return_status VARCHAR2(1);
2376 l_msg_code VARCHAR2(100);
2377 l_template_flag VARCHAR2(1);
2378
2379 BEGIN
2380
2381 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
2382 ( p_package_name => g_package_name
2383 , x_return_status => x_return_status );
2384
2385
2386 l_event_rec.event_object := p_new_rbs_version_id;
2387 l_event_rec.operation_type := 'I';
2388 l_event_rec.status := 'X';
2389
2390
2391 IF ( (p_program_flag = 'N') AND (p_old_rbs_version_id IS NOT NULL) ) THEN -- RBS version is frozen.
2392
2393 l_event_rec.event_type := 'RBS_PUSH';
2394 l_event_rec.attribute2 := p_old_rbs_version_id;
2395
2396 create_event(l_event_rec);
2397
2398 --
2399 -- Launch conc program. Todo..!!
2400 --
2401
2402 ELSIF ( (p_program_flag = 'N')
2403 AND (p_project_id IS NOT NULL) ) THEN -- RBS is associated with a project.
2404
2405 select TEMPLATE_FLAG
2406 into l_template_flag
2407 from PA_PROJECTS_ALL
2408 where PROJECT_ID = p_project_id;
2409 if (l_template_flag = 'Y') then
2410 return;
2411 end if;
2412
2413 l_event_rec.event_type := 'RBS_ASSOC';
2414 l_event_rec.attribute1 := p_project_id;
2415
2416 create_event(l_event_rec);
2417
2418 --
2419 -- Will be picked up by summarization program.
2420 --
2421
2422 ELSIF ( (p_program_flag = 'Y')
2423 AND (p_project_id IS NOT NULL) ) THEN -- RBS is associated with a program.
2424
2425 select TEMPLATE_FLAG
2426 into l_template_flag
2427 from PA_PROJECTS_ALL
2428 where PROJECT_ID = p_project_id;
2429 if (l_template_flag = 'Y') then
2430 return;
2431 end if;
2432
2433 l_event_rec.event_type := 'RBS_PRG';
2434 l_event_rec.attribute1 := p_project_id;
2435
2436 create_event(l_event_rec);
2437
2438 --
2439 -- Will be picked up by summarization program.
2440 --
2441
2442 ELSE
2443 RETURN;
2444 END IF;
2445
2446
2447 --COMMIT;
2448
2449 EXCEPTION
2450 WHEN OTHERS THEN
2451 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
2452 ( p_package_name => g_package_name
2453 , p_procedure_name => 'RBS_PUSH'
2454 , x_return_status => x_return_status ) ;
2455
2456 RAISE;
2457 END;
2458
2459
2460 PROCEDURE RBS_DELETE (
2461 p_rbs_version_id IN NUMBER
2462 , p_project_id IN NUMBER
2463 , x_return_status OUT NOCOPY VARCHAR2
2464 , x_msg_code OUT NOCOPY VARCHAR2 ) IS
2465
2466 l_event_rec pa_pji_proj_events_log%ROWTYPE;
2467 l_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
2468 l_event_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
2469 l_return_status VARCHAR2(1);
2470 l_msg_code VARCHAR2(100);
2471
2472 BEGIN
2473
2474 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
2475 ( p_package_name => g_package_name
2476 , x_return_status => x_return_status );
2477
2478 l_event_rec.event_type := 'RBS_DELETE';
2479 l_event_rec.event_object := p_rbs_version_id;
2480 l_event_rec.operation_type := 'D';
2481 l_event_rec.status := 'X';
2482
2483 create_event(l_event_rec);
2484
2485 /* This code goes in summarization program...
2486 WBS_HEADERS_LOCK (
2487 p_fp_version_ids => l_fp_version_ids
2488 , x_return_status => l_return_status
2489 , x_msg_code => l_msg_code );
2490
2491 IF (l_fp_version_ids.COUNT = 0) THEN RETURN; END IF;
2492
2493 GET_EVENT_IDS (
2494 p_fp_version_ids => l_fp_version_ids
2495 , p_operation_type => 'D'
2496 , x_event_ids => l_event_ids
2497 , x_return_status => l_return_status
2498 , x_msg_code => l_msg_code );
2499
2500 PJI_FM_PLAN_MAINT.FINPLAN_DELETE(
2501 p_fp_version_ids => l_fp_version_ids
2502 , p_commit => 'F' );
2503
2504 DELETE_EVENTS (
2505 p_event_ids => l_event_ids
2506 , x_return_status => l_return_status
2507 , x_msg_code => l_msg_code );
2508 */
2509
2510 --COMMIT;
2511
2512 EXCEPTION
2513 WHEN OTHERS THEN
2514 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
2515 ( p_package_name => g_package_name
2516 , p_procedure_name => 'RBS_DELETE'
2517 , x_return_status => x_return_status ) ;
2518
2519 RAISE;
2520 END;
2521
2522
2523
2524 PROCEDURE CREATE_EVENT( p_event_rec IN OUT NOCOPY pa_pji_proj_events_log%ROWTYPE) IS
2525 -- l_event_rec pa_pji_proj_events_log%ROWTYPE;
2526 event_already_exists VARCHAR2(1) := 'N'; -- Added for Bug#6145813 by vvjoshi
2527 l_rbs_header_id PA_RBS_VERSIONS_B.rbs_header_id%TYPE; -- Added for Bug#6145813 by vvjoshi
2528 l_return_status VARCHAR2(1);
2529 BEGIN
2530
2531 -- l_event_rec := p_event_rec;
2532 p_event_rec.creation_date := SYSDATE;
2533 p_event_rec.last_update_date := SYSDATE;
2534 p_event_rec.last_updated_by := Fnd_Global.USER_ID;
2535 p_event_rec.created_by := Fnd_Global.USER_ID;
2536 p_event_rec.last_update_login := Fnd_Global.LOGIN_ID;
2537
2538 IF (p_event_rec.event_id IS NULL) THEN
2539 SELECT pa_pji_proj_events_log_s.NEXTVAL
2540 INTO p_event_rec.event_id
2541 FROM DUAL;
2542 END IF;
2543
2544 /* Added for Bug#6145813 by vvjoshi - START*/
2545
2546 IF (p_event_rec.event_type = 'RBS_PUSH') THEN
2547
2548 begin
2549 select 'Y'
2550 into event_already_exists
2551 from (select attribute2
2552 from pa_pji_proj_events_log
2553 where event_type = 'RBS_PUSH'
2554 )a ,
2555 pa_rbs_versions_b b
2556 where to_number(a.attribute2) = b.rbs_version_id
2557 and b.rbs_header_id =
2558 (select rbs_header_id
2559 from pa_rbs_versions_b
2560 where rbs_version_id = p_event_rec.attribute2)
2561 and rownum = 1;
2562 exception
2563 when NO_DATA_FOUND then
2564 event_already_exists := 'N';
2565 end;
2566
2567 END IF;
2568
2569 IF event_already_exists = 'Y' THEN
2570
2571 select rbs_header_id
2572 into l_rbs_header_id
2573 from pa_rbs_versions_b
2574 where rbs_version_id = to_number(p_event_rec.attribute2);
2575
2576 UPDATE pa_pji_proj_events_log
2577 SET event_object = p_event_rec.event_object,
2578 last_update_date = p_event_rec.last_update_date,
2579 last_updated_by = p_event_rec.last_updated_by
2580 WHERE event_type = 'RBS_PUSH'
2581 AND attribute2 in (select rbs_version_id
2582 from pa_rbs_versions_b
2583 where rbs_header_id = l_rbs_header_id);
2584
2585 ELSE
2586 /* Added for Bug#6145813 by vvjoshi - END*/
2587
2588 INSERT INTO pa_pji_proj_events_log
2589 ( event_type
2590 , event_id
2591 , event_object
2592 , operation_type
2593 , status
2594 , last_update_date
2595 , last_updated_by
2596 , creation_date
2597 , created_by
2598 , last_update_login
2599 , attribute_category
2600 , attribute1
2601 , attribute2
2602 , attribute3
2603 , attribute4
2604 , attribute5
2605 , attribute6
2606 , attribute7
2607 , attribute8
2608 , attribute9
2609 , attribute10
2610 , attribute11
2611 , attribute12
2612 , attribute13
2613 , attribute14
2614 , attribute15
2615 , attribute16
2616 , attribute17
2617 , attribute18
2618 , attribute19
2619 , attribute20
2620 )
2621 VALUES (
2622 p_event_rec.event_type
2623 , p_event_rec.event_id
2624 , p_event_rec.event_object
2625 , p_event_rec.operation_type
2626 , p_event_rec.status
2627 , p_event_rec.last_update_date
2628 , p_event_rec.last_updated_by
2629 , p_event_rec.creation_date
2630 , p_event_rec.created_by
2631 , p_event_rec.last_update_login
2632 , p_event_rec.attribute_category
2633 , p_event_rec.attribute1
2634 , p_event_rec.attribute2
2635 , p_event_rec.attribute3
2636 , p_event_rec.attribute4
2637 , p_event_rec.attribute5
2638 , p_event_rec.attribute6
2639 , p_event_rec.attribute7
2640 , p_event_rec.attribute8
2641 , p_event_rec.attribute9
2642 , p_event_rec.attribute10
2643 , p_event_rec.attribute11
2644 , p_event_rec.attribute12
2645 , p_event_rec.attribute13
2646 , p_event_rec.attribute14
2647 , p_event_rec.attribute15
2648 , p_event_rec.attribute16
2649 , p_event_rec.attribute17
2650 , p_event_rec.attribute18
2651 , p_event_rec.attribute19
2652 , p_event_rec.attribute20
2653 );
2654
2655 END IF; -- Added for Bug#6145813 by vvjoshi
2656
2657 -- p_event_rec := l_event_rec ;
2658
2659 -- INSERT INTO pa_pji_proj_events_log
2660 -- VALUES l_event_rec;
2661
2662 EXCEPTION
2663 WHEN OTHERS THEN
2664 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
2665 ( p_package_name => g_package_name
2666 , p_procedure_name => 'CREATE_EVENT'
2667 , x_return_status => l_return_status ) ;
2668
2669 RAISE;
2670 END;
2671
2672
2673 ----------
2674 -- API to lock headers, used by online and bulk summarization apis.
2675 ----------
2676 PROCEDURE WBS_HEADERS_LOCK (
2677 p_fp_version_ids IN OUT NOCOPY SYSTEM.pa_num_tbl_type -- := SYSTEM.pa_num_tbl_type(),
2678 , p_context IN VARCHAR2
2679 , x_return_status OUT NOCOPY VARCHAR2
2680 , x_msg_code OUT NOCOPY VARCHAR2 ) IS
2681
2682 i NUMBER := NULL;
2683 l_lock_flag VARCHAR2(1);
2684 l_count NUMBER := 0;
2685 l_count1 NUMBER := 0;
2686 l_num_locked NUMBER := 0;
2687
2688 l_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); --initialized the collection bug#4001139
2689 l_project_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); --initialized the collection bug#4001139
2690 l_baseline_fp_ver_id SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); --initialized the collection bug#4001139
2691 l_wp_flags SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
2692 l_latest_pub_flags SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
2693 l_baselined_flags SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
2694 l_published_flags SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
2695 l_vers_enabled_flags SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
2696
2697 l_fp_version_id NUMBER;
2698 l_wp_flag VARCHAR2(1);
2699 l_latest_pub_flag VARCHAR2(1);
2700 l_baselined_flag VARCHAR2(1);
2701 l_published_flag VARCHAR2(1);
2702 l_vers_enabled_flag VARCHAR2(1);
2703
2704 l_wbs_version_id NUMBER := NULL;
2705
2706 l_last_update_date DATE := SYSDATE;
2707 l_last_updated_by NUMBER := Fnd_Global.USER_ID;
2708 l_creation_date DATE := SYSDATE;
2709 l_created_by NUMBER := Fnd_Global.USER_ID;
2710 l_last_update_login NUMBER := Fnd_Global.LOGIN_ID;
2711
2712 excp_resource_busy EXCEPTION;
2713 PRAGMA EXCEPTION_INIT(excp_resource_busy, -54);
2714
2715 -- Generic lock for any 1 given plan version.
2716 CURSOR c_wh_generic_lock_cur (p_plan_version_id IN NUMBER) IS
2717 SELECT project_id
2718 FROM pji_pjp_wbs_header
2719 WHERE plan_version_id = p_plan_version_id
2720 AND lock_flag IS NULL
2721 FOR UPDATE NOWAIT;
2722
2723 --
2724 -- Lock for progress update.
2725 -- Locks all latest published workplans above.
2726 --
2727 cursor c_wh_lock_update_cur (p_plan_version_id IN NUMBER,
2728 p_project_id IN NUMBER) IS
2729 select /*+ use_nl(sup_wbs_hdr)
2730 index(sup_wbs_hdr PJI_PJP_WBS_HEADER_N1) */
2731 sup_wbs_hdr.PLAN_VERSION_ID pvi
2732 from
2733 PJI_PJP_WBS_HEADER sup_wbs_hdr
2734 where
2735 (sup_wbs_hdr.PROJECT_ID,
2736 sup_wbs_hdr.WBS_VERSION_ID) in
2737 (
2738 select /*+ ordered
2739 index(prg PJI_XBS_DENORM_N1) */
2740 prg.SUP_PROJECT_ID,
2741 prg.SUP_ID
2742 from
2743 PJI_PJP_WBS_HEADER sub_wbs_hdr,
2744 PA_PROJ_ELEM_VER_STRUCTURE ppevs2,
2745 PJI_XBS_DENORM prg
2746 where
2747 prg.struct_version_id is null and
2748 sub_wbs_hdr.PLAN_VERSION_ID = p_plan_version_id and
2749 sub_wbs_hdr.PROJECT_ID = p_project_id and
2750 sub_wbs_hdr.WBS_VERSION_ID = prg.SUB_ID and
2751 prg.STRUCT_TYPE = 'PRG' and
2752 nvl(prg.RELATIONSHIP_TYPE, 'WF') in ('LW', 'WF') and
2753 sub_wbs_hdr.WP_FLAG = 'Y' and
2754 ppevs2.PROJECT_ID = sub_wbs_hdr.PROJECT_ID and
2755 ppevs2.ELEMENT_VERSION_ID = sub_wbs_hdr.WBS_VERSION_ID and
2756 ppevs2.LATEST_EFF_PUBLISHED_FLAG = 'Y'
2757 ) and
2758 sup_wbs_hdr.WP_FLAG = 'Y' and
2759 sup_wbs_hdr.LOCK_FLAG is null and
2760 exists
2761 (
2762 select
2763 1
2764 from
2765 PA_PROJ_ELEM_VER_STRUCTURE ppevs1
2766 where
2767 ppevs1.PROJECT_ID = sup_wbs_hdr.PROJECT_ID and
2768 ppevs1.ELEMENT_VERSION_ID = sup_wbs_hdr.WBS_VERSION_ID and
2769 ppevs1.LATEST_EFF_PUBLISHED_FLAG = 'Y'
2770 )
2771 for update nowait;
2772
2773 --
2774 -- Lock for plan baseline and original flows.
2775 -- Locks all -3/-4s above striped by plan type id.
2776 --
2777 cursor c_wh_base_orig_lock_cur (p_plan_version_id in number) is
2778 select /*+ use_nl(sup_wbs_hdr)
2779 index(sup_wbs_hdr PJI_PJP_WBS_HEADER_N1) */
2780 sup_wbs_hdr.PROJECT_ID,
2781 sup_wbs_hdr.PLAN_VERSION_ID,
2782 sup_wbs_hdr.PLAN_TYPE_ID
2783 from
2784 PJI_PJP_WBS_HEADER sup_wbs_hdr
2785 where
2786 (sup_wbs_hdr.PROJECT_ID,
2787 sup_wbs_hdr.WBS_VERSION_ID,
2788 sup_wbs_hdr.PLAN_VERSION_ID,
2789 sup_wbs_hdr.PLAN_TYPE_ID,
2790 sup_wbs_hdr.PLAN_TYPE_CODE) in
2791 (
2792 select /*+ ordered
2793 index(prg PJI_XBS_DENORM_N1) */
2794 prg.SUP_PROJECT_ID,
2795 prg.SUP_ID,
2796 ver.BUDGET_VERSION_ID,
2797 ver.FIN_PLAN_TYPE_ID,
2798 sub_wbs_hdr.PLAN_TYPE_CODE
2799 from
2800 PA_BUDGET_VERSIONS ver,
2801 PJI_PJP_WBS_HEADER sub_wbs_hdr,
2802 PJI_XBS_DENORM prg
2803 where
2804 ver.BUDGET_VERSION_ID = p_plan_version_id and
2805 ver.PROJECT_ID = sub_wbs_hdr.PROJECT_ID and
2806 ver.FIN_PLAN_TYPE_ID = sub_wbs_hdr.PLAN_TYPE_ID and
2807 decode(ver.VERSION_TYPE,
2808 'COST', 'C',
2809 'REVENUE', 'R',
2810 'A') = sub_wbs_hdr.PLAN_TYPE_CODE and
2811 sub_wbs_hdr.PLAN_VERSION_ID in (-3, -4) and
2812 sub_wbs_hdr.WBS_VERSION_ID = prg.SUB_ID and
2813 prg.STRUCT_TYPE = 'PRG' and
2814 prg.STRUCT_VERSION_ID is null and
2815 nvl(prg.RELATIONSHIP_TYPE, 'WF') in ('LF', 'WF')
2816 )
2817 for update nowait;
2818
2819 BEGIN
2820
2821 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
2822 ( p_package_name => g_package_name
2823 , x_return_status => x_return_status );
2824
2825 print_time ( ' wbs hdrs lock 1 p_context = ' || p_context );
2826
2827
2828 -- Validation of context.
2829 IF (p_context NOT IN ('DELETE', 'UPDATE', 'BASELINE', 'ORIGINAL', 'COPY')) THEN -- 'PUBLISH', 'STRUCT_CHANGE',
2830 print_time (' WBS_HEADERS_LOCK: The following value of p_context is invalid: ' || p_context);
2831 RETURN;
2832 END IF;
2833
2834
2835 -- About to process these plans.
2836 FOR i IN 1..p_fp_version_ids.COUNT LOOP
2837 print_time(' i = ' || i || ' pl. ver id = ' || p_fp_version_ids(i));
2838 END LOOP;
2839
2840
2841 --
2842 -- Validation of input plan versions, whether or not it exists in hdr tbl.
2843 --
2844
2845 l_count := 0;
2846
2847 FOR i IN 1..p_fp_version_ids.COUNT LOOP
2848 BEGIN
2849 SELECT /*+ index_ffs(wbs_hdr PJI_PJP_WBS_HEADER_N1) */ l_count+1
2850 INTO l_count
2851 FROM pji_pjp_wbs_header wbs_hdr
2852 WHERE plan_version_id = p_fp_version_ids(i);
2853 EXCEPTION
2854 WHEN OTHERS THEN
2855 NULL;
2856 END;
2857 END LOOP;
2858 print_time ( ' wbs hdrs lock 1.001: # rcds in whdr is '|| l_count || ' # plan vers is ' || p_fp_version_ids.COUNT );
2859
2860 IF ( (l_count <> p_fp_version_ids.COUNT)
2861 AND (p_context NOT IN ('BASELINE'))
2862 ) THEN
2863 print_time ( ' wbs hdrs lock 1.01: Not all of these plan versions exist. Pl. pass valid plan vers in plan ver id tbl. Returning.' );
2864 RETURN;
2865 END IF;
2866
2867
2868 --
2869 -- Validation of input plan versions, if they are already locked in hdr tbl.
2870 --
2871
2872 l_count := 0;
2873
2874 FOR i IN 1..p_fp_version_ids.COUNT LOOP
2875 BEGIN
2876 SELECT l_count+1
2877 INTO l_count
2878 FROM pji_pjp_wbs_header
2879 WHERE plan_version_id = p_fp_version_ids(i)
2880 AND lock_flag IS NULL;
2881 EXCEPTION
2882 WHEN OTHERS THEN
2883 NULL;
2884 END;
2885 END LOOP;
2886 print_time ( ' wbs hdrs lock 1.1: l_count is '|| l_count );
2887
2888 IF ( (l_count <> p_fp_version_ids.COUNT)
2889 AND (p_context NOT IN ('BASELINE'))
2890 ) THEN
2891 print_time ( ' wbs hdrs lock 1.11: some plans in the program are already locked, raising exception. ' );
2892 RAISE excp_resource_busy;
2893 END IF;
2894
2895
2896 --
2897 -- Process each plan version for this context.
2898 --
2899 FOR i IN 1..p_fp_version_ids.COUNT LOOP -- 1
2900
2901 print_time( ' wbs hdrs lock 1.11 inside loop.' );
2902
2903 l_fp_version_ids.EXTEND;
2904 l_project_ids.EXTEND;
2905 l_wp_flags.EXTEND;
2906 l_latest_pub_flags.EXTEND;
2907 l_baselined_flags.EXTEND;
2908 l_published_flags.EXTEND;
2909 l_vers_enabled_flags.EXTEND;
2910
2911 l_count := l_fp_version_ids.COUNT ;
2912
2913 print_time( ' wbs hdrs lock 1.2:l_count ' || l_count || ' i ' || i || ' p_fp_version_ids(i) ' || p_fp_version_ids(i));
2914
2915 IF (p_context NOT IN ('BASELINE', 'DELETE')) THEN
2916
2917 -- Get the plan version properties: is it wp/fp, is it versioning enabled
2918 -- , is the structure working or published, is it latest pub, is it the baselined version?
2919 SELECT DISTINCT
2920 wh.plan_version_id pv
2921 , wh.project_id pi
2922 , wh.wp_flag wf
2923 , ppwa.wp_enable_version_flag vef
2924 , DECODE(ppevs.status_code, 'STRUCTURE_PUBLISHED', 'P', 'STRUCTURE_WORKING', 'W') pf
2925 , ppevs.latest_eff_published_flag lpf
2926 , DECODE(wh.cb_flag, 'Y', 'B', 'W') bf
2927 INTO
2928 l_fp_version_ids(l_count)
2929 , l_project_ids(l_count)
2930 , l_wp_flags(l_count)
2931 , l_vers_enabled_flags(l_count)
2932 , l_published_flags(l_count)
2933 , l_latest_pub_flags(l_count)
2934 , l_baselined_flags(l_count)
2935 FROM PA_PROJ_WORKPLAN_ATTR ppwa
2936 , PA_PROJ_ELEMENTS ppe
2937 , PA_PROJ_STRUCTURE_TYPES ppst
2938 , PA_STRUCTURE_TYPES pst
2939 , PA_PROJ_ELEM_VER_STRUCTURE ppevs
2940 , pji_pjp_wbs_header wh
2941 -- , pa_budget_versions bv -- can't depend on bv in plan delete flow.
2942 WHERE 1=1
2943 AND ppe.project_id = ppwa.project_id
2944 AND ppe.proj_element_id = ppwa.proj_element_id
2945 AND ppe.proj_element_id = ppst.proj_element_id
2946 AND ppe.object_type = 'PA_STRUCTURES' -- Added for perf improvement bug 6430959
2947 AND ppst.structure_type_id = pst.structure_type_id
2948 AND pst.structure_type_class_code = DECODE (wh.wp_flag, 'Y', 'WORKPLAN', 'FINANCIAL')
2949 AND ppevs.project_id = ppe.project_id
2950 AND ppevs.project_id = wh.project_id
2951 AND ppevs.element_version_id = wh.wbs_version_id
2952 AND ppevs.status_code IN ('STRUCTURE_PUBLISHED', 'STRUCTURE_WORKING')
2953 AND wh.plan_version_id = p_fp_version_ids(i) ;
2954
2955 ELSE
2956
2957 l_fp_version_ids(l_count) := p_fp_version_ids(l_count);
2958
2959 END IF;
2960
2961
2962 /*
2963 l_fp_version_ids(l_count) := l_fp_version_id;
2964 l_wp_flags(l_count) := l_wp_flag;
2965 l_vers_enabled_flags(l_count) := l_vers_enabled_flag;
2966 l_published_flags(l_count) := l_published_flag;
2967 l_latest_pub_flags(l_count) := l_latest_pub_flag;
2968 l_baselined_flags(l_count) := l_baselined_flag;
2969 */
2970
2971 print_time( ' wbs hdrs lock 1.3: l_fp_version_id ' || l_fp_version_ids(l_count));
2972 print_time( ' wbs hdrs lock 1.3: l_project_id ' || l_project_ids(l_count));
2973 print_time( ' wbs hdrs lock 1.3: l_wp_flag ' || l_wp_flags(l_count));
2974 print_time( ' wbs hdrs lock 1.3: l_vers_enabled_flag ' || l_vers_enabled_flags(l_count));
2975 print_time( ' wbs hdrs lock 1.3: l_published_flag ' || l_published_flags(l_count));
2976 print_time( ' wbs hdrs lock 1.3: l_latest_pub_flag ' || l_latest_pub_flags(l_count));
2977 print_time( ' wbs hdrs lock 1.3: l_baselined_flag ' || l_baselined_flags(l_count));
2978
2979 IF ( (p_context = 'UPDATE')
2980 AND (l_fp_version_ids(l_count) > 0)) THEN -- 2
2981
2982 IF ( -- 3
2983 (
2984 ( l_wp_flags(l_count) = 'Y' )
2985 AND (
2986 ( l_published_flags(l_count) = 'N' )
2987 OR ( l_latest_pub_flags(l_count) = 'Y' )
2988 OR ( l_vers_enabled_flags(l_count) = 'N' )
2989 )
2990 )
2991 OR
2992 (
2993 ( l_wp_flags(l_count) = 'N' )
2994 AND ( l_baselined_flags(l_count) = 'N')
2995 )
2996 ) THEN
2997
2998 IF ( -- 4
2999 ( l_wp_flags(l_count) = 'Y' )
3000 AND (
3001 ( l_latest_pub_flags(l_count) = 'Y' )
3002 OR ( l_vers_enabled_flags(l_count) = 'N' )
3003 )
3004 ) THEN
3005
3006
3007 l_num_locked := 0;
3008
3009
3010 -- Are any of the relevant WPs locked? Refer Program Reporting Tech Arch for biz rules.
3011 SELECT COUNT(1)
3012 INTO l_num_locked
3013 FROM pji_xbs_denorm den
3014 , pji_pjp_wbs_header hd1 -- SUP
3015 , pji_pjp_wbs_header hd2 -- SUB
3016 , PA_PROJ_ELEM_VER_STRUCTURE ppevs1
3017 , PA_PROJ_ELEM_VER_STRUCTURE ppevs2
3018 WHERE
3019 den.struct_version_id IS NULL
3020 AND hd2.plan_version_id = l_fp_version_ids(l_count)
3021 AND hd2.project_id = l_project_ids(l_count)
3022 AND hd2.plan_type_id = hd1.plan_type_id
3023 AND hd2.wbs_version_id = den.sub_id -- struct_version_id
3024 AND hd1.wbs_version_id = den.sup_id
3025 AND den.struct_type = 'PRG'
3026 AND NVL(den.relationship_type, 'WF') IN ('LW', 'WF') -- 'LW',
3027 AND hd1.wp_flag = 'Y'
3028 AND ppevs1.element_version_id = hd1.wbs_version_id
3029 AND ppevs1.project_id = hd1.project_id
3030 AND ppevs1.latest_eff_published_flag = 'Y'
3031 AND hd2.wp_flag = 'Y'
3032 AND ppevs2.project_id = hd2.project_id
3033 AND ppevs2.element_version_id = hd2.wbs_version_id
3034 AND ppevs2.latest_eff_published_flag = 'Y'
3035 AND hd1.lock_flag IS NOT NULL;
3036
3037
3038 IF (l_num_locked = 0) THEN -- 5
3039
3040 OPEN c_wh_lock_update_cur (
3041 p_plan_version_id => l_fp_version_ids(l_count)
3042 , p_project_id => l_project_ids(l_count));
3043
3044 l_num_locked := SQL%ROWCOUNT;
3045
3046 CLOSE c_wh_lock_update_cur;
3047
3048 ELSE
3049
3050 print_time ( ' wbs hdrs lock 1.12: some plans in the program are already locked, raising exception. ' );
3051 RAISE excp_resource_busy;
3052
3053 END IF; -- 5
3054
3055 ELSIF -- 4
3056 (
3057 (
3058 ( l_wp_flags(l_count) = 'Y' )
3059 AND ( l_published_flags(l_count) = 'N' )
3060 AND ( l_vers_enabled_flags(l_count) = 'Y' )
3061 )
3062 OR
3063 ( l_wp_flags(l_count) = 'N' )
3064 ) THEN
3065
3066 SELECT COUNT(1)
3067 INTO l_num_locked
3068 FROM pji_pjp_wbs_header
3069 WHERE plan_version_id = l_fp_version_ids(l_count)
3070 AND lock_flag IS NOT NULL;
3071
3072 IF (l_num_locked = 0) THEN -- 5
3073
3074 OPEN c_wh_generic_lock_cur(
3075 p_plan_version_id => l_fp_version_ids(l_count));
3076
3077 l_num_locked := SQL%ROWCOUNT;
3078
3079 CLOSE c_wh_generic_lock_cur;
3080
3081 ELSE
3082
3083 print_time ( ' wbs hdrs lock 1.13: some plans in the program are already locked, raising exception. ' );
3084 RAISE excp_resource_busy;
3085
3086 END IF; -- 5
3087
3088 END IF; -- 4
3089
3090 END IF; -- 3
3091
3092 ELSIF ( (p_context IN ('COPY', 'DELETE'))
3093 AND (l_fp_version_ids(l_count) > 0) ) THEN -- 2
3094 -- Only working FPs/WPs can be deleted.
3095
3096 SELECT COUNT(1)
3097 INTO l_num_locked
3098 FROM pji_pjp_wbs_header
3099 WHERE plan_version_id = l_fp_version_ids(l_count)
3100 AND lock_flag IS NOT NULL;
3101
3102 IF (l_num_locked = 0) THEN -- 3
3103
3104 OPEN c_wh_generic_lock_cur(
3105 p_plan_version_id => l_fp_version_ids(l_count));
3106
3107 l_num_locked := SQL%ROWCOUNT;
3108
3109 CLOSE c_wh_generic_lock_cur;
3110
3111 ELSE
3112
3113 print_time ( ' wbs hdrs lock 1.14: some plans in the program are already locked, raising exception. ' );
3114 RAISE excp_resource_busy;
3115
3116 END IF; -- 3
3117
3118 ELSIF ( (p_context = 'PUBLISH')
3119 AND (l_fp_version_ids(l_count) > 0)) THEN -- 2
3120 -- Only working FPs/WPs can be deleted.
3121
3122 SELECT COUNT(1)
3123 INTO l_num_locked
3124 FROM pji_pjp_wbs_header
3125 WHERE plan_version_id = l_fp_version_ids(l_count)
3126 AND lock_flag IS NOT NULL;
3127
3128 IF (l_num_locked = 0) THEN -- 3
3129
3130 OPEN c_wh_generic_lock_cur(
3131 p_plan_version_id => l_fp_version_ids(l_count));
3132
3133 l_num_locked := SQL%ROWCOUNT;
3134
3135 CLOSE c_wh_generic_lock_cur;
3136
3137 ELSE
3138
3139 print_time ( ' wbs hdrs lock 1.15: some plans in the program are already locked, raising exception. ' );
3140 RAISE excp_resource_busy;
3141
3142 END IF; -- 3
3143
3144 ELSIF ( (p_context IN ('BASELINE', 'ORIGINAL') )
3145 AND (l_fp_version_ids(l_count) > 0)) THEN -- 2
3146
3147 SELECT PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(bv.project_id)
3148 INTO l_wbs_version_id
3149 FROM pa_budget_versions bv
3150 WHERE budget_version_id = l_fp_version_ids(l_count);
3151
3152 print_time ( ' wbs hdrs baseline lock 1.1 wbs version id is .. ' || l_wbs_version_id );
3153
3154 l_baseline_fp_ver_id.EXTEND;
3155 l_baseline_fp_ver_id(l_baseline_fp_ver_id.COUNT) := l_fp_version_ids(l_count);
3156
3157
3158 PJI_FM_PLAN_MAINT_T_PVT.CLEANUP_INTERIM_TABLES;
3159 print_time(' Cleaned up ver3_t table. ');
3160
3161
3162 PJI_FM_PLAN_MAINT_T_PVT.EXTRACT_FIN_PLAN_VERSIONS(l_baseline_fp_ver_id, 'PRI');
3163 PJI_FM_PLAN_MAINT_T_PVT.EXTRACT_FIN_PLAN_VERSIONS(l_baseline_fp_ver_id, 'SECRBS');
3164 print_time(' Populated ver3. ');
3165
3166
3167 INSERT INTO PJI_FM_EXTR_PLNVER3_T ver3
3168 (
3169 PROJECT_ID ,
3170 PLAN_VERSION_ID ,
3171 WBS_STRUCT_VERSION_ID ,
3172 RBS_STRUCT_VERSION_ID ,
3173 PLAN_TYPE_CODE ,
3174 PLAN_TYPE_ID ,
3175 TIME_PHASED_TYPE_CODE ,
3176 TIME_DANGLING_FLAG ,
3177 RATE_DANGLING_FLAG ,
3178 PROJECT_TYPE_CLASS ,
3179 WP_FLAG ,
3180 CURRENT_FLAG ,
3181 ORIGINAL_FLAG ,
3182 CURRENT_ORIGINAL_FLAG ,
3183 BASELINED_FLAG ,
3184 SECONDARY_RBS_FLAG ,
3185 LP_FLAG
3186 )
3187 SELECT -- DISTINCT
3188 den.sup_project_id project_id
3189 , cbco.plan_version_id -- bv.budget_version_id -- -3 --
3190 , PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(den.sup_project_id) wbs_struct_version_id
3191 , bv.rbs_struct_version_id
3192 , bv.plan_type_code
3193 , bv.plan_type_id
3194 , bv.time_phased_type_code
3195 , NULL -- time dangl flg
3196 , NULL -- rate dangl flg
3197 , NULL -- project type class
3198 , 'N' -- wp flag
3199 , DECODE(cbco.plan_version_id, -3, 'Y', 'N') current_flag
3200 , DECODE(cbco.plan_version_id, -4, 'Y', 'N') original_flag
3201 , DECODE(cbco.plan_version_id, -4, 'Y', 'N') -- curr_original flag
3202 , 'Y' -- baselined flag.
3203 , bv.SECONDARY_RBS_FLAG
3204 , bv.lp_flag
3205 FROM pji_fm_extr_plnver3_T bv
3206 , pji_xbs_denorm den
3207 , ( SELECT -3 plan_version_id FROM DUAL
3208 UNION ALL
3209 SELECT -4 FROM DUAL ) cbco
3210 WHERE 1=1
3211 AND bv.plan_version_id = l_fp_version_ids(l_count)
3212 AND bv.wp_flag = 'N'
3213 AND bv.baselined_flag = 'Y'
3214 AND den.struct_version_id IS NULL
3215 AND den.struct_type = 'PRG'
3216 AND den.sub_id = bv.wbs_struct_version_id
3217 AND NVL(den.relationship_type, 'WF') IN ('LF', 'WF') -- Excluding 'LW'
3218 ;
3219
3220 DELETE FROM pji_fm_extr_plnver3_t
3221 WHERE plan_version_id > 0;
3222 print_time(' Need only -3, -4 records, deleted other plan version. ');
3223
3224
3225 PJI_FM_PLAN_MAINT_T_PVT.POPULATE_RBS_HDR;
3226 print_time ( ' Inserted -3, -4 RBS headers inserted. ' );
3227
3228 PJI_FM_PLAN_MAINT_T_PVT.POPULATE_WBS_HDR;
3229 print_time ( ' Inserted -3, -4 WBS headers inserted. ' );
3230
3231
3232 PJI_FM_PLAN_MAINT_T_PVT.CLEANUP_INTERIM_TABLES;
3233 print_time ( ' Cleaned up ver3. ' );
3234
3235
3236 SELECT COUNT(1)
3237 INTO l_count1
3238 FROM pji_xbs_denorm den
3239 , pji_pjp_wbs_header hd1 -- SUB
3240 , pji_pjp_wbs_header hd2 -- SUP
3241 , pa_budget_versions hd3 -- to get plan type id
3242 WHERE
3243 den.struct_version_id IS NULL
3244 AND den.struct_type = 'PRG'
3245 AND hd1.wbs_version_id = den.sub_id -- struct_version_id
3246 AND hd2.wbs_version_id = den.sup_id
3247 -- AND den.sup_level <= den.sub_level
3248 AND hd3.budget_version_id = l_fp_version_ids(l_count)
3249 AND hd3.project_id = hd1.project_id
3250 AND hd3.fin_plan_type_id = hd2.plan_type_id
3251 AND hd3.fin_plan_type_id = hd1.plan_type_id
3252 AND DECODE(hd3.version_type,'COST','C','REVENUE','R','A') = hd1.plan_type_code
3253 AND hd1.plan_type_code = hd2.plan_type_code /*4471527*/
3254 AND NVL(den.relationship_type, 'WF') IN ('LF', 'WF') -- Excluding 'LW'
3255 AND hd1.plan_version_id IN (-3, -4)
3256 AND hd2.plan_version_id IN (-3, -4)
3257 AND hd1.plan_version_id = hd2.plan_version_id
3258 AND hd2.lock_flag IS NOT NULL;
3259
3260 print_time ( ' # of locked -3, -4 headers for this project is '|| l_count1 );
3261
3262 IF (l_count1 > 0) THEN -- Summarization is locking the -3, -4 headers above this project.
3263 print_time ( ' Summarization is locking the -3, -4 headers above this project. # locks is '|| l_count1 );
3264 RAISE excp_resource_busy;
3265 END IF;
3266
3267 print_time ( ' wbs hdrs baseline lock 2 ');
3268
3269 OPEN c_wh_base_orig_lock_cur (p_plan_version_id => l_fp_version_ids(l_count));
3270 CLOSE c_wh_base_orig_lock_cur;
3271
3272 print_time ( ' wbs hdrs baseline lock 3 ');
3273
3274 END IF; -- 2
3275
3276 END LOOP; -- 1
3277
3278 print_time(' l_num_locked finally = ' || l_num_locked );
3279
3280 p_fp_version_ids := l_fp_version_ids;
3281
3282 print_time ( ' wbs hdrs lock 3 ');
3283
3284 EXCEPTION
3285 WHEN excp_resource_busy THEN
3286
3287 x_return_status := FND_API.G_RET_STS_ERROR;
3288
3289 x_msg_code := FND_MESSAGE.GET_STRING( APPIN => 'PJI'
3290 , NAMEIN => 'PJI_LOCK_NOT_OBTAINED');
3291
3292 -- PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PJI'
3293 -- , p_msg_name => 'PJI_LOCK_NOT_OBTAINED');
3294 FND_MESSAGE.SET_NAME('PJI', 'PJI_LOCK_NOT_OBTAINED');
3295 Fnd_Msg_Pub.add_detail(p_message_type=>FND_API.G_RET_STS_ERROR);
3296
3297 print_time ( ' wbs hdrs lock exception ' || SQLERRM);
3298
3299 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
3300 ( p_package_name => g_package_name
3301 , p_procedure_name => 'WBS_HEADERS_LOCK'
3302 , x_return_status => x_return_status ) ;
3303
3304 RAISE;
3305
3306 WHEN OTHERS THEN
3307 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
3308 ( p_package_name => g_package_name
3309 , p_procedure_name => 'WBS_HEADERS_LOCK'
3310 , x_return_status => x_return_status ) ;
3311
3312 RAISE;
3313 END;
3314
3315
3316 PROCEDURE PLAN_EXTR_LINES_LOCK (
3317 x_return_status OUT NOCOPY VARCHAR2
3318 , x_msg_code OUT NOCOPY VARCHAR2 ) IS
3319
3320 l_project_id NUMBER;
3321
3322 excp_resource_busy EXCEPTION;
3323 PRAGMA EXCEPTION_INIT(excp_resource_busy, -54);
3324
3325 CURSOR c_lines IS
3326 SELECT project_id
3327 FROM pji_fm_extr_plan_lines
3328 WHERE ROWID IN
3329 ( SELECT extr_lines_rowid
3330 FROM pji_fp_rmap_fpr_update_t)
3331 FOR UPDATE NOWAIT;
3332
3333 BEGIN
3334
3335 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
3336 ( p_package_name => g_package_name
3337 , x_return_status => x_return_status );
3338
3339 x_msg_code := Fnd_Api.G_RET_STS_SUCCESS;
3340
3341 print_time ( ' PLAN_EXTR_LINES_LOCK begin ' );
3342
3343
3344 OPEN c_lines;
3345 CLOSE c_lines;
3346
3347 print_time ( ' PLAN_EXTR_LINES_LOCK end ' );
3348
3349 EXCEPTION
3350 WHEN excp_resource_busy THEN
3351 x_return_status := FND_API.G_RET_STS_ERROR;
3352 FND_MSG_PUB.add_exc_msg( p_pkg_name => G_package_name ,
3353 p_procedure_name => 'PJI_EXTR_LINES_LOCK' );
3354 x_msg_code := FND_MESSAGE.GET_STRING( APPIN => 'PJI'
3355 , NAMEIN => 'PJI_LOCK_NOT_OBTAINED');
3356 -- PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PJI'
3357 -- , p_msg_name => 'PJI_LOCK_NOT_OBTAINED');
3358
3359 FND_MESSAGE.SET_NAME('PJI', 'PJI_LOCK_NOT_OBTAINED');
3360 Fnd_Msg_Pub.add_detail(p_message_type=>FND_API.G_RET_STS_ERROR);
3361
3362 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
3363 ( p_package_name => g_package_name
3364 , p_procedure_name => 'PJI_EXTR_LINES_LOCK'
3365 , x_return_status => x_return_status ) ;
3366
3367 RAISE;
3368
3369 WHEN NO_DATA_FOUND THEN
3370 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
3371 ( p_package_name => g_package_name
3372 , p_procedure_name => 'PJI_EXTR_LINES_LOCK'
3373 , x_return_status => x_return_status ) ;
3374
3375 RAISE;
3376
3377 WHEN OTHERS THEN
3378 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
3379 ( p_package_name => g_package_name
3380 , p_procedure_name => 'PJI_EXTR_LINES_LOCK'
3381 , x_return_status => x_return_status ) ;
3382
3383 RAISE;
3384
3385 END;
3386
3387
3388 PROCEDURE GET_HDRS_TOLOCK_FOR_UPDATE (
3389 x_fp_version_ids OUT NOCOPY SYSTEM.pa_num_tbl_type -- := SYSTEM.pa_num_tbl_type(),
3390 , x_return_status OUT NOCOPY VARCHAR2
3391 , x_msg_code OUT NOCOPY VARCHAR2 ) IS
3392
3393 l_fp_version_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
3394
3395 CURSOR c_plan_version_ids_cur IS
3396 SELECT DISTINCT plan_version_id
3397 FROM PJI_FM_EXTR_PLAN_LINES
3398 WHERE ROWID IN
3399 ( SELECT extr_lines_rowid
3400 FROM pji_fp_rmap_fpr_update_t);
3401
3402 BEGIN
3403
3404 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
3405 ( p_package_name => g_package_name
3406 , x_return_status => x_return_status );
3407
3408 FOR i IN c_plan_version_ids_cur LOOP
3409 l_fp_version_ids.EXTEND;
3410 l_fp_version_ids(l_fp_version_ids.COUNT) := i.plan_version_id;
3411 END LOOP;
3412
3413 -- IF c_plan_version_ids_cur%ISOPEN THEN c_plan_version_ids_cur.CLOSE; END IF;
3414
3415 x_fp_version_ids := l_fp_version_ids ;
3416
3417 EXCEPTION
3418 WHEN OTHERS THEN
3419 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
3420 ( p_package_name => g_package_name
3421 , p_procedure_name => 'GET_HDRS_TOLOCK_FOR_UPDATE '
3422 , x_return_status => x_return_status ) ;
3423
3424 RAISE;
3425 END;
3426
3427
3428 PROCEDURE GET_EVENT_IDS (
3429 p_fp_version_ids IN SYSTEM.pa_num_tbl_type -- := SYSTEM.pa_num_tbl_type(),
3430 , p_operation_type IN VARCHAR2 := NULL
3431 , x_event_ids OUT NOCOPY SYSTEM.pa_num_tbl_type -- := SYSTEM.pa_num_tbl_type(),
3432 , x_return_status OUT NOCOPY VARCHAR2
3433 , x_msg_code OUT NOCOPY VARCHAR2 ) IS
3434
3435 l_event_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
3436 i NUMBER := NULL;
3437 j NUMBER := NULL;
3438
3439 CURSOR c_event_id_cur (
3440 p_event_object NUMBER
3441 , p_operation_type VARCHAR2
3442 ) IS
3443 SELECT event_id
3444 FROM pa_pji_proj_events_log
3445 WHERE event_object = p_event_object
3446 AND operation_type = p_operation_type;
3447
3448 BEGIN
3449
3450 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
3451 ( p_package_name => g_package_name
3452 , x_return_status => x_return_status );
3453
3454 IF (p_operation_type IS NULL) THEN RETURN; END IF;
3455
3456 FOR i IN p_fp_version_ids.FIRST..p_fp_version_ids.LAST LOOP
3457
3458 -- IF c_event_id_cur%ISOPEN THEN c_event_id_cur.CLOSE; END IF;
3459
3460 FOR j IN c_event_id_cur(p_fp_version_ids(i), p_operation_type ) LOOP
3461 l_event_ids.EXTEND;
3462 l_event_ids(l_event_ids.COUNT) := j.event_id;
3463 END LOOP;
3464
3465 END LOOP;
3466
3467 -- IF c_event_id_cur%ISOPEN THEN c_event_id_cur.CLOSE; END IF;
3468
3469 EXCEPTION
3470 WHEN OTHERS THEN
3471 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
3472 ( p_package_name => g_package_name
3473 , p_procedure_name => 'GET_EVENT_IDS'
3474 , x_return_status => x_return_status ) ;
3475
3476 RAISE;
3477 END;
3478
3479
3480 PROCEDURE DELETE_EVENTS (
3481 p_event_ids IN SYSTEM.pa_num_tbl_type
3482 , x_return_status OUT NOCOPY VARCHAR2
3483 , x_msg_code OUT NOCOPY VARCHAR2 ) IS
3484 BEGIN
3485
3486 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
3487 ( p_package_name => g_package_name
3488 , x_return_status => x_return_status );
3489
3490 print_time ( ' delete events 001 ' );
3491
3492 FORALL i IN p_event_ids.FIRST..p_event_ids.LAST
3493 DELETE FROM pa_pji_proj_events_log
3494 WHERE event_id = p_event_ids(i);
3495
3496 print_time ( ' delete events 002 ' );
3497
3498 EXCEPTION
3499 WHEN OTHERS THEN
3500 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
3501 ( p_package_name => g_package_name
3502 , p_procedure_name => 'DELETE_EVENTS'
3503 , x_return_status => x_return_status ) ;
3504
3505 RAISE;
3506 END;
3507
3508
3509 PROCEDURE COPY_PJI_SUMMRZD_FLAG (
3510 p_source_fp_version_ids IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type()
3511 , p_dest_fp_version_ids IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type() ) IS
3512
3513 l_pji_summarized_flag VARCHAR2(1) := NULL;
3514 l_return_status VARCHAR2(1);
3515
3516 BEGIN
3517
3518 IF (p_source_fp_version_ids.COUNT <> p_dest_fp_version_ids.COUNT) THEN
3519 RETURN;
3520 END IF;
3521
3522 FOR i IN p_source_fp_version_ids.FIRST..p_source_fp_version_ids.LAST LOOP
3523
3524 BEGIN
3525 --Introduced below if condition for bug 7187487
3526 if p_source_fp_version_ids(i) <> p_dest_fp_version_ids(i) then
3527 SELECT pji_summarized_flag
3528 INTO l_pji_summarized_flag
3529 FROM pa_budget_versions
3530 WHERE budget_version_id = p_source_fp_version_ids(i);
3531
3532 UPDATE pa_budget_versions
3533 SET pji_summarized_flag = l_pji_summarized_flag
3534 WHERE budget_version_id = p_dest_fp_version_ids(i);
3535 elsif p_source_fp_version_ids(i) = p_dest_fp_version_ids(i) then
3536 UPDATE pa_budget_versions
3537 SET pji_summarized_flag = 'Y'
3538 WHERE budget_version_id = p_dest_fp_version_ids(i);
3539 end if;
3540
3541
3542 EXCEPTION
3543 WHEN OTHERS THEN
3544 NULL;
3545 END;
3546
3547 END LOOP;
3548
3549 EXCEPTION
3550 WHEN OTHERS THEN
3551 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
3552 ( p_package_name => g_package_name
3553 , p_procedure_name => 'COPY_PJI_SUMMARIZED_FLAG'
3554 , x_return_status => l_return_status ) ;
3555
3556 RAISE;
3557 END;
3558
3559
3560 PROCEDURE MARK_PLAN_ORIGINAL (
3561 p_original_version_id IN NUMBER,
3562 x_return_status OUT NOCOPY VARCHAR2,
3563 x_msg_code OUT NOCOPY VARCHAR2 ) IS
3564 BEGIN
3565
3566 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
3567 ( p_package_name => g_package_name
3568 , x_return_status => x_return_status );
3569
3570 -- Todo: verifiy logic with VR.
3571 UPDATE pa_budget_versions
3572 SET original_flag = 'Y'
3573 , last_update_date = SYSDATE
3574 , last_updated_by = Fnd_Global.USER_ID
3575 , last_update_login = Fnd_Global.LOGIN_ID
3576 WHERE budget_version_id = p_original_version_id ;
3577
3578 EXCEPTION
3579 WHEN OTHERS THEN
3580 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
3581 ( p_package_name => g_package_name
3582 , p_procedure_name => 'MARK_PLAN_ORIGINAL'
3583 , x_return_status => x_return_status ) ;
3584
3585 RAISE;
3586 END;
3587
3588
3589 PROCEDURE COPY_INTO_BASELINE_ORIGINAL(
3590 p_project_id IN NUMBER
3591 , p_plan_type_id IN NUMBER
3592 , p_plan_version_id IN NUMBER
3593 , x_processing_code OUT NOCOPY VARCHAR2
3594 ) IS
3595 l_last_update_date DATE := SYSDATE;
3596 l_last_updated_by NUMBER := Fnd_Global.USER_ID;
3597 l_creation_date DATE := SYSDATE;
3598 l_created_by NUMBER := Fnd_Global.USER_ID;
3599 l_last_update_login NUMBER := Fnd_Global.LOGIN_ID;
3600 l_return_status VARCHAR2(1);
3601 BEGIN
3602
3603 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
3604 ( p_package_name => g_package_name
3605 , x_return_status => x_processing_code );
3606
3607 INSERT INTO pji_fp_xbs_accum_f
3608 (
3609 PROJECT_ID
3610 , PROJECT_ORG_ID
3611 , PROJECT_ORGANIZATION_ID
3612 , PROJECT_ELEMENT_ID
3613 , TIME_ID
3614 , PERIOD_TYPE_ID
3615 , CALENDAR_TYPE
3616 , RBS_AGGR_LEVEL
3617 , WBS_ROLLUP_FLAG
3618 , PRG_ROLLUP_FLAG
3619 , CURR_RECORD_TYPE_ID
3620 , CURRENCY_CODE
3621 , RBS_ELEMENT_ID
3622 , RBS_VERSION_ID
3623 , PLAN_VERSION_ID
3624 , PLAN_TYPE_ID
3625 , LAST_UPDATE_DATE
3626 , LAST_UPDATED_BY
3627 , CREATION_DATE
3628 , CREATED_BY
3629 , LAST_UPDATE_LOGIN
3630 , RAW_COST
3631 , BRDN_COST
3632 , REVENUE
3633 , BILL_RAW_COST
3634 , BILL_BRDN_COST
3635 , BILL_LABOR_RAW_COST
3636 , BILL_LABOR_BRDN_COST
3637 , BILL_LABOR_HRS
3638 , EQUIPMENT_RAW_COST
3639 , EQUIPMENT_BRDN_COST
3640 , CAPITALIZABLE_RAW_COST
3641 , CAPITALIZABLE_BRDN_COST
3642 , LABOR_RAW_COST
3643 , LABOR_BRDN_COST
3644 , LABOR_HRS
3645 , LABOR_REVENUE
3646 , EQUIPMENT_HOURS
3647 , BILLABLE_EQUIPMENT_HOURS
3648 , SUP_INV_COMMITTED_COST
3649 , PO_COMMITTED_COST
3650 , PR_COMMITTED_COST
3651 , OTH_COMMITTED_COST
3652 , ACT_LABOR_HRS
3653 , ACT_EQUIP_HRS
3654 , ACT_LABOR_BRDN_COST
3655 , ACT_EQUIP_BRDN_COST
3656 , ACT_BRDN_COST
3657 , ACT_RAW_COST
3658 , ACT_REVENUE
3659 , ACT_LABOR_RAW_COST
3660 , ACT_EQUIP_RAW_COST
3661 , ETC_LABOR_HRS
3662 , ETC_EQUIP_HRS
3663 , ETC_LABOR_BRDN_COST
3664 , ETC_EQUIP_BRDN_COST
3665 , ETC_BRDN_COST
3666 , ETC_RAW_COST
3667 , ETC_LABOR_RAW_COST
3668 , ETC_EQUIP_RAW_COST
3669 , CUSTOM1
3670 , CUSTOM2
3671 , CUSTOM3
3672 , CUSTOM4
3673 , CUSTOM5
3674 , CUSTOM6
3675 , CUSTOM7
3676 , CUSTOM8
3677 , CUSTOM9
3678 , CUSTOM10
3679 , CUSTOM11
3680 , CUSTOM12
3681 , CUSTOM13
3682 , CUSTOM14
3683 , CUSTOM15
3684 , PLAN_TYPE_CODE /*4471527 */
3685 )
3686 (
3687 SELECT
3688 rl.PROJECT_ID
3689 , rl.PROJECT_ORG_ID
3690 , rl.PROJECT_ORGANIZATION_ID
3691 , rl.PROJECT_ELEMENT_ID
3692 , rl.TIME_ID
3693 , rl.PERIOD_TYPE_ID
3694 , rl.CALENDAR_TYPE
3695 , rl.RBS_AGGR_LEVEL
3696 , rl.WBS_ROLLUP_FLAG
3697 , rl.PRG_ROLLUP_FLAG
3698 , rl.CURR_RECORD_TYPE_ID
3699 , rl.CURRENCY_CODE
3700 , rl.RBS_ELEMENT_ID
3701 , rl.RBS_VERSION_ID
3702 , p_plan_version_id
3703 , rl.PLAN_TYPE_ID
3704 , l_last_update_date
3705 , l_last_updated_by
3706 , l_creation_date
3707 , l_created_by
3708 , l_last_update_login
3709 , rl.RAW_COST
3710 , rl.BRDN_COST
3711 , rl.REVENUE
3712 , rl.BILL_RAW_COST
3713 , rl.BILL_BRDN_COST
3714 , rl.BILL_LABOR_RAW_COST
3715 , rl.BILL_LABOR_BRDN_COST
3716 , rl.BILL_LABOR_HRS
3717 , rl.EQUIPMENT_RAW_COST
3718 , rl.EQUIPMENT_BRDN_COST
3719 , rl.CAPITALIZABLE_RAW_COST
3720 , rl.CAPITALIZABLE_BRDN_COST
3721 , rl.LABOR_RAW_COST
3722 , rl.LABOR_BRDN_COST
3723 , rl.LABOR_HRS
3724 , rl.LABOR_REVENUE
3725 , rl.EQUIPMENT_HOURS
3726 , rl.BILLABLE_EQUIPMENT_HOURS
3727 , rl.SUP_INV_COMMITTED_COST
3728 , rl.PO_COMMITTED_COST
3729 , rl.PR_COMMITTED_COST
3730 , rl.OTH_COMMITTED_COST
3731 , rl.ACT_LABOR_HRS
3732 , rl.ACT_EQUIP_HRS
3733 , rl.ACT_LABOR_BRDN_COST
3734 , rl.ACT_EQUIP_BRDN_COST
3735 , rl.ACT_BRDN_COST
3736 , rl.ACT_RAW_COST
3737 , rl.ACT_REVENUE
3738 , rl.ACT_LABOR_RAW_COST
3739 , rl.ACT_EQUIP_RAW_COST
3740 , rl.ETC_LABOR_HRS
3741 , rl.ETC_EQUIP_HRS
3742 , rl.ETC_LABOR_BRDN_COST
3743 , rl.ETC_EQUIP_BRDN_COST
3744 , rl.ETC_BRDN_COST
3745 , rl.ETC_RAW_COST
3746 , rl.ETC_LABOR_RAW_COST
3747 , rl.ETC_EQUIP_RAW_COST
3748 , rl.CUSTOM1
3749 , rl.CUSTOM2
3750 , rl.CUSTOM3
3751 , rl.CUSTOM4
3752 , rl.CUSTOM5
3753 , rl.CUSTOM6
3754 , rl.CUSTOM7
3755 , rl.CUSTOM8
3756 , rl.CUSTOM9
3757 , rl.CUSTOM10
3758 , rl.CUSTOM11
3759 , rl.CUSTOM12
3760 , rl.CUSTOM13
3761 , rl.CUSTOM14
3762 , rl.CUSTOM15
3763 , rl.PLAN_TYPE_CODE /*4471527 */
3764 FROM
3765 pji_fp_xbs_accum_f rl
3766 , pji_pjp_wbs_header wh
3767 WHERE rl.project_id = wh.project_id
3768 AND rl.project_id = p_project_id
3769 AND rl.plan_type_id = p_plan_type_id
3770 AND wh.plan_version_id = rl.plan_version_id
3771 AND wh.plan_type_code = rl.plan_type_code /*4471527 */
3772 AND DECODE(p_plan_version_id,
3773 -3, wh.cb_flag
3774 -4, wh.co_flag) = 'Y'
3775 );
3776
3777 EXCEPTION
3778 WHEN OTHERS THEN
3779 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
3780 ( p_package_name => g_package_name
3781 , p_procedure_name => 'COPY_INTO_BASELINE_ORIGINAL'
3782 , x_return_status => x_processing_code ) ;
3783
3784 RAISE;
3785 END;
3786
3787
3788 PROCEDURE WBS_LOCK_PVT (
3789 p_event_id IN NUMBER DEFAULT NULL,
3790 p_online_flag IN VARCHAR2,
3791 p_request_id IN NUMBER DEFAULT NULL,
3792 x_lock_mode OUT NOCOPY VARCHAR2,
3793 x_return_status OUT NOCOPY VARCHAR2 )
3794 IS
3795
3796 resource_busy EXCEPTION;
3797 PRAGMA EXCEPTION_INIT(resource_busy,-00054);
3798
3799 l_project_id NUMBER;
3800 l_struct_version_id NUMBER;
3801
3802 l_plan_version_id NUMBER;
3803 l_wp_flag VARCHAR2(1);
3804 l_latest_pub_flag VARCHAR2(1);
3805 l_baselined_flag VARCHAR2(1);
3806 l_published_flag VARCHAR2(1);
3807 l_vers_enabled_flag VARCHAR2(1);
3808
3809 -- Todo: Structure change, version disabled case program lock.
3810
3811 /* -- original code.
3812 CURSOR c_plan_versions_online ( l_event_id NUMBER) IS
3813 SELECT
3814 head.PLAN_VERSION_ID
3815 FROM
3816 pji_pjp_wbs_header head,
3817 PA_PJI_PROJ_EVENTS_LOG elog
3818 WHERE
3819 elog.EVENT_ID = l_event_id AND
3820 head.PROJECT_ID = TO_NUMBER(elog.ATTRIBUTE1) AND
3821 head.WBS_VERSION_ID = TO_NUMBER(elog.ATTRIBUTE2) AND
3822 head.PLAN_VERSION_ID = TO_NUMBER(elog.ATTRIBUTE3) AND
3823 head.LOCK_FLAG IS NULL
3824 FOR UPDATE NOWAIT;
3825 */
3826
3827 -- Handles online locking of
3828 -- a. Structure Change : All WP/FP/cb/co (only working structure can change
3829 -- based on a very strict set of rules. Like program rollup amts shd not change
3830 -- tasks with planning assignments/actuals should not be deleted, etc).
3831 -- b. Publish: All FP.
3832 CURSOR c_wh_lock_online_str_chng_cur ( l_event_id NUMBER) IS
3833 SELECT
3834 head.PLAN_VERSION_ID
3835 FROM
3836 pji_pjp_wbs_header head,
3837 PA_PJI_PROJ_EVENTS_LOG elog
3838 WHERE
3839 elog.EVENT_ID = l_event_id AND
3840 head.PROJECT_ID = TO_NUMBER(elog.ATTRIBUTE1) AND
3841 head.WBS_VERSION_ID = TO_NUMBER(elog.ATTRIBUTE2) AND
3842 head.PLAN_VERSION_ID = TO_NUMBER(elog.ATTRIBUTE3) AND
3843 -- elog.EVENT_TYPE = 'WBS_CHANGE' AND
3844 -- need to process both wbs change and publish.
3845 -- publish needs to change wbs version id for fin plans.
3846 head.LOCK_FLAG IS NULL
3847 FOR UPDATE NOWAIT;
3848
3849
3850 -- Handles online locking of
3851 -- a. Published ver and one working ver above for publish.
3852 cursor c_online_pub_wp_cur (l_event_id number) IS
3853 select /*+ use_nl(sup_wbs_hdr)
3854 index(sup_wbs_hdr PJI_PJP_WBS_HEADER_N1) */
3855 sup_wbs_hdr.PLAN_VERSION_ID
3856 from
3857 PJI_PJP_WBS_HEADER sup_wbs_hdr
3858 where
3859 (sup_wbs_hdr.PROJECT_ID,
3860 sup_wbs_hdr.WBS_VERSION_ID) in
3861 (
3862 select /*+ ordered
3863 index(prg PJI_XBS_DENORM_N1) */
3864 prg.SUP_PROJECT_ID,
3865 prg.SUP_ID
3866 from
3867 PA_PJI_PROJ_EVENTS_LOG log,
3868 PJI_PJP_WBS_HEADER sub_wbs_hdr,
3869 PA_PROJ_ELEM_VER_STRUCTURE ppevs2,
3870 PJI_XBS_DENORM prg
3871 where
3872 prg.STRUCT_VERSION_ID is null and
3873 sub_wbs_hdr.WBS_VERSION_ID = prg.SUB_ID and
3874 sup_wbs_hdr.WBS_VERSION_ID = prg.SUP_ID and
3875 nvl(prg.SUB_ROLLUP_ID,
3876 prg.SUP_EMT_ID) <> prg.SUP_EMT_ID and
3877 prg.STRUCT_TYPE = 'PRG' and
3878 nvl(prg.RELATIONSHIP_TYPE, 'WF') in ('LW', 'WF') and
3879 sub_wbs_hdr.WP_FLAG = 'Y' and
3880 ppevs2.PROJECT_ID = sub_wbs_hdr.PROJECT_ID and
3881 ppevs2.ELEMENT_VERSION_ID = sub_wbs_hdr.WBS_VERSION_ID and
3882 ppevs2.STATUS_CODE = 'STRUCTURE_PUBLISHED' and
3883 sub_wbs_hdr.LOCK_FLAG is not null and
3884 sub_wbs_hdr.PROJECT_ID = to_number(log.ATTRIBUTE1) and
3885 sub_wbs_hdr.WBS_VERSION_ID = to_number(log.ATTRIBUTE2) and
3886 sub_wbs_hdr.PLAN_VERSION_ID = to_number(log.ATTRIBUTE3) and
3887 log.EVENT_TYPE = 'WBS_PUBLISH' and
3888 log.EVENT_ID = l_event_id
3889 ) and
3890 sup_wbs_hdr.WP_FLAG = 'Y' and
3891 sup_wbs_hdr.LOCK_FLAG is not null and
3892 exists
3893 (
3894 select
3895 1
3896 from
3897 PA_PROJ_ELEM_VER_STRUCTURE ppevs1
3898 where
3899 ppevs1.PROJECT_ID = sup_wbs_hdr.PROJECT_ID and
3900 ppevs1.ELEMENT_VERSION_ID = sup_wbs_hdr.WBS_VERSION_ID and
3901 ppevs1.STATUS_CODE = 'STRUCTURE_WORKING'
3902 )
3903 for update nowait;
3904
3905 -- Handles online locking of
3906 -- a. All cb/co for publish.
3907 cursor c_online_pub_cbco_lock_cur (l_event_id number) is
3908 select /*+ use_nl(sup_wbs_hdr) index(sup_wbs_hdr PJI_PJP_WBS_HEADER_N1) */
3909 sup_wbs_hdr.PROJECT_ID,
3910 sup_wbs_hdr.PLAN_VERSION_ID,
3911 sup_wbs_hdr.PLAN_TYPE_ID
3912 from
3913 PJI_PJP_WBS_HEADER sup_wbs_hdr
3914 where
3915 (sup_wbs_hdr.PROJECT_ID,
3916 sup_wbs_hdr.WBS_VERSION_ID,
3917 sup_wbs_hdr.PLAN_VERSION_ID,
3918 sup_wbs_hdr.PLAN_TYPE_ID,
3919 sup_wbs_hdr.PLAN_TYPE_CODE) in
3920 (
3921 select /*+ ordered
3922 index(prg PJI_XBS_DENORM_N1) */
3923 prg.SUP_PROJECT_ID,
3924 prg.SUP_ID,
3925 sub_wbs_hdr.PLAN_VERSION_ID,
3926 sub_wbs_hdr.PLAN_TYPE_ID,
3927 sub_wbs_hdr.PLAN_TYPE_CODE
3928 from
3929 PA_PJI_PROJ_EVENTS_LOG log,
3930 PJI_PJP_WBS_HEADER wbs_hdr,
3931 PJI_PJP_WBS_HEADER sub_wbs_hdr,
3932 PJI_XBS_DENORM prg
3933 where
3934 prg.STRUCT_VERSION_ID is null and
3935 sub_wbs_hdr.WBS_VERSION_ID = prg.SUB_ID and
3936 prg.STRUCT_TYPE = 'PRG' and
3937 nvl(prg.RELATIONSHIP_TYPE, 'WF') in ('LF', 'WF') and
3938 sub_wbs_hdr.PLAN_VERSION_ID in (-3, -4) and
3939 wbs_hdr.PROJECT_ID = sub_wbs_hdr.PROJECT_ID and
3940 wbs_hdr.PLAN_TYPE_ID = sub_wbs_hdr.PLAN_TYPE_ID and
3941 wbs_hdr.PLAN_TYPE_CODE = sub_wbs_hdr.PLAN_TYPE_CODE and
3942 wbs_hdr.LOCK_FLAG is not null and
3943 wbs_hdr.PROJECT_ID = to_number(log.ATTRIBUTE1) and
3944 wbs_hdr.WBS_VERSION_ID = to_number(log.ATTRIBUTE2) and
3945 wbs_hdr.PLAN_VERSION_ID in (-3, -4) and
3946 log.EVENT_TYPE = 'WBS_PUBLISH' and
3947 log.EVENT_ID = l_event_id
3948 )
3949 for update nowait;
3950
3951 -- original code.
3952 CURSOR c_plan_versions_deferred IS
3953 SELECT
3954 head.PLAN_VERSION_ID
3955 FROM
3956 pji_pjp_wbs_header head,
3957 PA_PJI_PROJ_EVENTS_LOG elog
3958 WHERE
3959 head.PROJECT_ID = TO_NUMBER(elog.ATTRIBUTE1) AND
3960 head.WBS_VERSION_ID = TO_NUMBER(elog.ATTRIBUTE2) AND
3961 head.PLAN_VERSION_ID = TO_NUMBER(elog.ATTRIBUTE3) AND
3962 elog.EVENT_TYPE IN ('WBS_CHANGE', 'WBS_PUBLISH') AND
3963 head.LOCK_FLAG IS NULL
3964 FOR UPDATE;
3965
3966
3967 /*
3968 CURSOR c_wh_lock_sumz_str_chng_cur IS
3969 SELECT
3970 head.PLAN_VERSION_ID
3971 FROM
3972 pji_pjp_wbs_header head,
3973 PA_PJI_PROJ_EVENTS_LOG elog
3974 WHERE
3975 head.PROJECT_ID = TO_NUMBER(elog.ATTRIBUTE1) AND
3976 head.WBS_VERSION_ID = TO_NUMBER(elog.ATTRIBUTE2) AND
3977 head.PLAN_VERSION_ID = TO_NUMBER(elog.ATTRIBUTE3) AND
3978 elog.EVENT_TYPE = 'WBS_CHANGE' AND
3979 head.LOCK_FLAG IS NULL
3980 FOR UPDATE;
3981
3982 CURSOR c_wh_lock_sumz_pub_cur IS
3983 SELECT hd1.plan_version_id
3984 FROM pji_pjp_wbs_header hd1 -- SUP
3985 WHERE EXISTS (
3986 SELECT 1
3987 FROM pji_xbs_denorm den
3988 , pji_pjp_wbs_header hd2 -- SUB
3989 , PA_PROJ_WORKPLAN_ATTR ppwa1
3990 , PA_PROJ_ELEMENTS ppe1
3991 , PA_PROJ_STRUCTURE_TYPES ppst1
3992 , PA_STRUCTURE_TYPES pst1
3993 , PA_PROJ_ELEM_VER_STRUCTURE ppevs1
3994 , PA_PROJ_WORKPLAN_ATTR ppwa2
3995 , PA_PROJ_ELEMENTS ppe2
3996 , PA_PROJ_STRUCTURE_TYPES ppst2
3997 , PA_STRUCTURE_TYPES pst2
3998 , PA_PROJ_ELEM_VER_STRUCTURE ppevs2
3999 , PA_PJI_PROJ_EVENTS_LOG elog
4000 WHERE
4001 den.struct_version_id IS NULL
4002 AND hd2.wbs_version_id = den.sub_id -- struct_version_id
4003 AND hd1.wbs_version_id = den.sup_id
4004 AND NVL(den.sub_rollup_id, den.sup_emt_id) <> den.sup_emt_id
4005 AND den.struct_type = 'PRG'
4006 AND NVL(den.relationship_type, 'WF') IN ('LW', 'WF') -- 'LW',
4007 AND hd1.wp_flag = 'Y'
4008 AND ppe1.project_id = ppwa1.project_id
4009 AND ppe1.proj_element_id = ppwa1.proj_element_id
4010 AND ppe1.proj_element_id = ppst1.proj_element_id
4011 AND ppst1.structure_type_id = pst1.structure_type_id
4012 AND pst1.structure_type_class_code = 'WORKPLAN'
4013 AND ppevs1.project_id = ppe1.project_id
4014 AND ppevs1.project_id = hd1.project_id
4015 AND ppevs1.element_version_id = hd1.wbs_version_id
4016 AND ppevs1.status_code = 'STRUCTURE_WORKING'
4017 AND hd1.lock_flag IS NOT NULL
4018 AND hd2.wp_flag = 'Y'
4019 AND ppe2.project_id = ppwa2.project_id
4020 AND ppe2.proj_element_id = ppwa2.proj_element_id
4021 AND ppe2.proj_element_id = ppst2.proj_element_id
4022 AND ppst2.structure_type_id = pst2.structure_type_id
4023 AND pst2.structure_type_class_code = 'WORKPLAN'
4024 AND ppevs2.project_id = ppe2.project_id
4025 AND ppevs2.project_id = hd2.project_id
4026 AND ppevs2.element_version_id = hd2.wbs_version_id
4027 -- AND ppwa2.wp_enable_version_flag = 'N' -- Todo: to consider version disabled case.
4028 AND ppevs2.status_code = 'STRUCTURE_PUBLISHED'
4029 AND hd2.lock_flag IS NOT NULL
4030 AND hd2.PROJECT_ID = TO_NUMBER(elog.ATTRIBUTE1)
4031 AND hd2.WBS_VERSION_ID = TO_NUMBER(elog.ATTRIBUTE2)
4032 AND hd2.PLAN_VERSION_ID = TO_NUMBER(elog.ATTRIBUTE3)
4033 AND elog.EVENT_TYPE = 'WBS_PUBLISH'
4034 )
4035 FOR UPDATE;
4036 */
4037
4038
4039 BEGIN
4040
4041 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
4042 ( p_package_name => g_package_name
4043 , x_return_status => x_return_status );
4044
4045
4046 IF p_online_flag = 'Y' THEN
4047 --Try to acquire lock for affected plan versions
4048 BEGIN
4049
4050 -- Structure change + publish.
4051 -- Affected plan vers: All plan vers with this structure on this project only.
4052 OPEN c_wh_lock_online_str_chng_cur (p_event_id);
4053 print_time(' str chg + publish l_num_locked = ' || SQL%ROWCOUNT );
4054 CLOSE c_wh_lock_online_str_chng_cur;
4055
4056 -- Publish.
4057 -- Affected plan vers: The new published ver and all workplans one level above.
4058 OPEN c_online_pub_wp_cur (p_event_id);
4059 print_time(' publish wps lock only l_num_locked = ' || SQL%ROWCOUNT );
4060 CLOSE c_online_pub_wp_cur;
4061
4062 -- Publish.
4063 -- Affected plan vers: All cb/co fin plans in the structure.
4064 OPEN c_online_pub_cbco_lock_cur (p_event_id);
4065 print_time(' publish cb cos lock only l_num_locked = ' || SQL%ROWCOUNT );
4066 CLOSE c_online_pub_cbco_lock_cur;
4067
4068 x_lock_mode := 'S';
4069
4070 RETURN;
4071
4072 EXCEPTION
4073 WHEN resource_busy THEN
4074 --IF launched from conc. request
4075 --end conc. request with warning status
4076 SELECT
4077 TO_NUMBER(elog.ATTRIBUTE1),
4078 TO_NUMBER(elog.EVENT_OBJECT)
4079 INTO
4080 l_project_id,
4081 l_struct_version_id
4082 FROM
4083 pa_pji_proj_events_log elog
4084 WHERE
4085 elog.EVENT_ID = p_event_id AND
4086 ROWNUM <= 1;
4087
4088 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER /* 5138049 */
4089 ( p_package_name => g_package_name
4090 , p_procedure_name => 'WBS_LOCK_PVT'
4091 , x_return_status => x_return_status ) ;
4092 x_lock_mode := 'F';
4093 RETURN;
4094 END; --end of resource_busy exception block
4095
4096 ELSE --for deferred case
4097
4098 OPEN c_plan_versions_deferred;
4099 CLOSE c_plan_versions_deferred;
4100
4101 --Need to update PJI_PJP_WBS_HEADER to set LOCK flag = Y
4102 ------------------------------------
4103 --Below locking is not required
4104 -----------------------------------
4105 /* UPDATE pji_pjp_wbs_header head
4106 SET LOCK_FLAG = 'P'
4107 WHERE
4108 head.PLAN_VERSION_ID IN (SELECT
4109 TO_NUMBER(elog.ATTRIBUTE3)
4110 FROM
4111 pa_pji_proj_events_log elog
4112 WHERE
4113 head.PROJECT_ID = TO_NUMBER(elog.ATTRIBUTE1) AND
4114 head.WBS_VERSION_ID = TO_NUMBER(elog.ATTRIBUTE2) AND
4115 head.PLAN_VERSION_ID = TO_NUMBER(elog.ATTRIBUTE3) AND
4116 elog.EVENT_TYPE IN ('WBS_CHANGE', 'WBS_PUBLISH'));*/
4117 x_lock_mode := 'S';
4118 RETURN;
4119
4120 END IF; --end deferred case
4121
4122 EXCEPTION
4123 WHEN OTHERS THEN
4124 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
4125 ( p_package_name => g_package_name
4126 , p_procedure_name => 'WBS_LOCK_PVT'
4127 , x_return_status => x_return_status ) ;
4128
4129 RAISE;
4130 END; --end WBS_LOCK_PVT
4131
4132 ------------------------------------------------------------------
4133 --TODO: Need to add processing for publish event. All financial plans
4134 --have to rollup based on latest published version
4135 --currently we only update the wbs header table
4136 -------------------------------------------------------------------
4137 PROCEDURE WBS_MAINT_PVT (
4138 p_event_id IN NUMBER,
4139 p_versioned_flag IN VARCHAR2,
4140 p_struct_type IN VARCHAR2,
4141 p_publish_flag IN VARCHAR2,
4142 p_calling_context IN VARCHAR2,
4143 p_deffered_mode IN VARCHAR2,
4144 p_rerun_flag IN VARCHAR2 :=NULL,
4145 x_return_status OUT NOCOPY VARCHAR2 )
4146 IS
4147 l_project_id NUMBER;
4148 l_return_status VARCHAR2(1);
4149 l_msg_count NUMBER;
4150 l_msg_data VARCHAR2(2000);
4151 l_old_wbs_version_id NUMBER;
4152 l_new_wbs_version_id NUMBER;
4153 l_prg_event_id NUMBER;
4154 l_request_id NUMBER;
4155 l_chd_phase VARCHAR2(400);
4156 l_chd_status VARCHAR2(400);
4157 l_chd_dev_phase VARCHAR2(400);
4158 l_chd_dev_status VARCHAR2(400);
4159 l_chd_message VARCHAR2(2000);
4160 l_plan_version_id NUMBER;
4161
4162 l_plan_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
4163 l_struct_sharing_code pa_projects_all.structure_sharing_code%TYPE;
4164 CURSOR c_pln_ver_list (p_old_struct_ver_id IN NUMBER) IS
4165 SELECT project_id, plan_version_id
4166 FROM pji_pjp_wbs_header
4167 WHERE 1 = 1
4168 AND wbs_version_id = p_old_struct_ver_id
4169 AND plan_version_id > 0;
4170
4171 BEGIN
4172
4173 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
4174 ( p_package_name => g_package_name
4175 , x_return_status => x_return_status );
4176 IF g_debug_mode='Y' THEN
4177 Pji_Utils.write2log('calling WBS_MAINT_PVT :p_versioned_flag: '||p_versioned_flag||'p_struct_type:'||p_struct_type||'p_publish_flag:'||p_publish_flag||'p_rerun_flag :' || p_rerun_flag ,null,3);
4178 Pji_Utils.write2log('calling WBS_MAINT_PVT :p_calling_Context: '||p_calling_Context||'p_deffered_mode:'||p_deffered_mode||'Event Id:' || p_event_id,null,3);
4179 end if;
4180
4181 cleanup_temp_tables;
4182
4183
4184 SELECT
4185 TO_NUMBER(elog.ATTRIBUTE1),
4186 TO_NUMBER(elog.EVENT_OBJECT),
4187 TO_NUMBER(elog.ATTRIBUTE2)
4188 INTO
4189 l_project_id,
4190 l_new_wbs_version_id,
4191 l_old_wbs_version_id
4192 FROM
4193 pa_pji_proj_events_log elog
4194 WHERE
4195 elog.EVENT_ID = p_event_id AND
4196 ROWNUM <= 1;
4197 IF g_debug_mode='Y' THEN
4198 Pji_Utils.write2log('WBS_Maint_Pvt: l_new_wbs_version_id: '||l_new_wbs_version_id||'l_old_wbs_version_id: '||l_old_wbs_version_id,null,3);
4199 end if;
4200 -----------------------------------------------
4201 --Determine the plan_version_id for the struct
4202 --for which we are running wbs_maint
4203 -----------------------------------------------
4204 begin
4205 select
4206 PLAN_VERSION_ID
4207 into
4208 l_plan_version_id
4209 from
4210 pji_pjp_wbs_header
4211 where
4212 PROJECT_ID = l_project_id AND
4213 WBS_VERSION_ID = l_new_wbs_version_id AND
4214 WP_FLAG = 'Y';
4215 exception
4216 when no_data_found then
4217 null;
4218 IF g_debug_mode='Y' THEN
4219 Pji_Utils.write2log('WBS_Maint_Pvt: No data found for plan version');
4220 END IF;
4221 end;
4222
4223 IF g_debug_mode='Y' THEN
4224 Pji_Utils.write2log('WBS_Maint_Pvt:' || 'Plan version Id:' || l_plan_version_id);
4225 END IF;
4226
4227
4228 ----------------------------------------------
4229 --Identify if any pending program links exist
4230 --for the program group of this project
4231 ----------------------------------------------
4232 BEGIN
4233 IF p_rerun_flag='Y' THEN
4234 select 1
4235 into l_prg_event_id
4236 from dual
4237 where exists (select log.event_id
4238 from pji_pa_proj_events_log log,pa_proj_element_versions ver
4239 where log.event_type='PRG_CHANGE'
4240 and log.event_object =to_char(ver.prg_group)
4241 and ver.project_id=l_project_id
4242 union all
4243 select log.event_id
4244 from pa_pji_proj_events_log log,pa_proj_element_versions ver
4245 where log.event_type='PRG_CHANGE'
4246 and log.event_object =to_char(ver.prg_group)
4247 and ver.project_id=l_project_id);
4248 else
4249 select 1
4250 into l_prg_event_id
4251 from dual
4252 where exists (select log.event_id
4253 from pa_pji_proj_events_log log,pa_proj_element_versions ver
4254 where log.event_type='PRG_CHANGE'
4255 and log.event_object =to_char(ver.prg_group)
4256 and ver.project_id=l_project_id);
4257
4258 end if;
4259 EXCEPTION
4260 WHEN NO_DATA_FOUND THEN
4261 IF g_debug_mode='Y' THEN
4262 Pji_Utils.write2log( 'WBS_MAINT_PVT NO DATA FOUND coming for the project _Id:'||l_project_id,null,3);
4263 END IF;
4264 l_prg_event_id:=null;
4265 END;
4266
4267 l_struct_sharing_code := Pa_Project_Structure_Utils.get_structure_sharing_code (l_project_id);
4268 IF l_old_wbs_version_id IS NULL THEN
4269 -- Fix for bug : 4191390
4270 If l_struct_sharing_code LIKE '%SHARE%' then
4271 UPDATE pji_pjp_wbs_header SET
4272 wbs_version_id = l_new_wbs_version_id
4273 WHERE
4274 wp_flag = 'N' AND
4275 project_id = l_project_id;
4276
4277 elsif l_struct_sharing_code LIKE '%SPLIT%' THEN
4278
4279 UPDATE pji_pjp_wbs_header SET
4280 wbs_version_id = l_new_wbs_version_id
4281 WHERE
4282 wp_flag = 'N' AND
4283 p_struct_type = 'FINANCIAL' AND
4284 project_id = l_project_id;
4285 end if ;
4286
4287 IF g_debug_mode='Y' THEN
4288 Pji_Utils.write2log( 'WBS_MAINT_PVT l_prg_event_id :'||l_prg_event_id||'l_struct_sharing_code'||l_struct_sharing_code ,null,3);
4289 END IF;
4290 IF l_prg_event_id is not null then
4291
4292 --Bug 4626803: Need this for preventing doubling
4293 --of actuals
4294 UPDATE pji_fm_extr_plan_lines
4295 SET ACT_QUANTITY = NULL,
4296 ACT_TXN_BURDENED_COST = NULL,
4297 ACT_PRJ_BURDENED_COST = NULL,
4298 ACT_PFC_BURDENED_COST = NULL,
4299 ACT_TXN_RAW_COST = NULL,
4300 ACT_PRJ_RAW_COST = NULL,
4301 ACT_PFC_RAW_COST = NULL,
4302 ACT_TXN_REVENUE = NULL,
4303 ACT_PRJ_REVENUE = NULL,
4304 ACT_PFC_REVENUE = NULL
4305 WHERE
4306 plan_version_id = l_plan_version_id;
4307
4308 --Callingt plan_update to process data in PJI_FM_EXTR_PLAN_LINES
4309 pa_task_pub1.G_CALL_PJI_ROLLUP := 'Y';
4310 pji_fm_xbs_accum_maint.plan_update (
4311 p_plan_version_id => l_plan_version_id,
4312 x_msg_code => l_msg_data,
4313 x_return_status => l_return_status );
4314
4315 IF l_return_status <> fnd_api.G_RET_STS_SUCCESS THEN
4316 x_return_status := l_return_status;
4317 IF g_debug_mode='Y' THEN
4318 Pji_Utils.write2log('WBS Maint Pvt:' || 'Failure in plan_update call');
4319 END IF;
4320 RETURN;
4321 END IF;
4322 pa_task_pub1.G_CALL_PJI_ROLLUP := 'N';
4323
4324 ----------------------------------------------------------------------------------------
4325 --The below COMMIT is as per design. It is required for releasing locks on denorm and
4326 --header table that will be accessed by the summarization program launched in step below
4327 COMMIT;
4328 savepoint process_wbs_updates_conc;
4329 savepoint process_wbs_updates;
4330 savepoint process_proj_sum_conc;
4331 savepoint Update_project_pub; -- Added for Bug 14365759
4332 ----------------------------------------------------------------------------------------
4333 -- Added If condition for Bug 5999999
4334
4335 IF NVL(FND_PROFILE.value('PA_ROLLUP_PROGRAM_AMOUNTS'),'AUTOMATIC') = 'AUTOMATIC' THEN
4336
4337 l_request_id:=submit_request(l_project_id);
4338 if (FND_CONCURRENT.WAIT_FOR_REQUEST (
4339 l_request_id,
4340 20,
4341 0, -- wait forever
4342 l_chd_phase,
4343 l_chd_status,
4344 l_chd_dev_phase,
4345 l_chd_dev_status,
4346 l_chd_message
4347 )) then
4348
4349 Pji_Utils.write2log( '*********22Submitted status the l_dev_phase: '||l_chd_dev_phase||'l_dev_status'||l_chd_dev_status ,null,3);
4350
4351 end if;
4352
4353 if l_chd_dev_status ='ERROR' THEN
4354 l_return_status:='E';
4355 FND_MESSAGE.SET_NAME('PJI', 'PJI_PJP_SUMM_ERR');
4356 FND_MESSAGE.SET_TOKEN ('REQUEST_ID', l_request_id);
4357 FND_MESSAGE.SET_TOKEN ('SQLERRM', l_chd_message); --bug#5524224, passed completion text
4358
4359 fnd_msg_pub.add_exc_msg(p_pkg_name => g_package_name,
4360 p_procedure_name => 'WBS_MAINT_PVT',
4361 p_error_text => SUBSTRB(FND_MESSAGE.GET,1,240));
4362
4363 IF g_debug_mode='Y' THEN null;
4364 Pji_Utils.write2log(SUBSTRB(FND_MESSAGE.GET,1,240));
4365 end if;
4366 elsif l_chd_dev_status in ('CANCELLED','TERMINATED','DELETED') THEN
4367 l_return_status:='E';
4368 FND_MESSAGE.SET_NAME('PJI', 'PJI_PJP_SUMM_ERR');
4369 FND_MESSAGE.SET_TOKEN ('REQUEST_ID', l_request_id);
4370 FND_MESSAGE.SET_TOKEN ('SQLERRM', l_chd_status);
4371 fnd_msg_pub.add_exc_msg(p_pkg_name => g_package_name,
4372 p_procedure_name => 'WBS_MAINT_PVT',
4373 p_error_text => SUBSTRB(FND_MESSAGE.GET,1,240));
4374 IF g_debug_mode='Y' THEN null;
4375 Pji_Utils.write2log(SUBSTRB(FND_MESSAGE.GET,1,240));
4376 end if;
4377
4378 end if;
4379 END IF; -- Bug 5999999
4380 END IF;
4381
4382 x_return_status:=l_return_status;
4383
4384 ------------------------------------------------
4385 --As per current implementation the first publish
4386 --is treated differently
4387 ------------------------------------------------
4388 RETURN;
4389 END IF;
4390
4391
4392 FOR i IN c_pln_ver_list(l_old_wbs_version_id) LOOP
4393
4394 l_plan_version_id_tbl.EXTEND;
4395 l_plan_version_id_tbl(l_plan_version_id_tbl.COUNT) := i.plan_version_id;
4396
4397 END LOOP;
4398 IF g_debug_mode='Y' THEN
4399 Pji_Utils.write2log( 'WBS_MAINT_PVT l_plan_version_id_tbl.COUNT :'||l_plan_version_id_tbl.COUNT ,null,3);
4400 END IF;
4401 /*bug5353559*/
4402 IF (l_plan_version_id_tbl.COUNT <= 0) THEN
4403 --RETURN;
4404 NULL;
4405 ELSE
4406
4407 Pji_Fm_Plan_Maint_T_Pvt.EXTRACT_FIN_PLAN_VERSIONS(
4408 p_fp_version_ids => l_plan_version_id_tbl
4409 , p_slice_type => 'PRI'
4410 );
4411
4412 END IF;
4413
4414 IF p_publish_flag = 'N' THEN
4415
4416 Pji_Pjp_Sum_Denorm.populate_xbs_denorm(
4417 p_worker_id => 1,
4418 p_denorm_type => 'WBS',
4419 p_wbs_version_id => l_old_wbs_version_id,
4420 p_prg_group1 => NULL,
4421 p_prg_group2 => NULL
4422 );
4423
4424 IF g_debug_mode='Y' THEN
4425 Pji_Utils.write2log('WBS Maint Pvt:' || 'New WBS Version ID:' || l_new_wbs_version_id);
4426 Pji_Utils.write2log('WBS Maint Pvt:' || 'Old WBS Version ID:' || l_old_wbs_version_id);
4427 end if;
4428
4429
4430 Pji_Pjp_Sum_Rollup.set_online_context (
4431 p_event_id => p_event_id,
4432 p_project_id => l_project_id,
4433 p_plan_type_id => NULL,
4434 p_old_baselined_version => NULL,
4435 p_new_baselined_version => NULL,
4436 p_old_original_version => NULL,
4437 p_new_original_version => NULL,
4438 p_old_struct_version => l_old_wbs_version_id,
4439 p_new_struct_version => l_new_wbs_version_id );
4440
4441 Pji_Pjp_Sum_Rollup.populate_xbs_denorm_delta;
4442
4443 Pji_Pjp_Sum_Rollup.rollup_fpr_wbs;
4444 IF g_debug_mode='Y' THEN
4445 Pji_Utils.write2log(' WBS_MAINT_PVT: Pji_Pjp_Sum_Rollup.rollup_fpr_wbs',null,3);
4446 end if;
4447 Pji_Pjp_Sum_Rollup.rollup_acr_wbs;
4448
4449 Pji_Pjp_Sum_Rollup.update_xbs_denorm;
4450
4451 Pji_Pjp_Sum_Denorm.cleanup_xbs_denorm(
4452 p_worker_id => 1
4453 ,p_extraction_type => 'ONLINE');
4454
4455 IF g_debug_mode='Y' THEN
4456 Pji_Utils.write2log(' WBS_MAINT_PVT: Pji_Fm_Plan_Maint_T_Pvt.MERGE_INTO_FP_FACT',null,3);
4457 end if;
4458 Pji_Fm_Plan_Maint_T_Pvt.MERGE_INTO_FP_FACT;
4459
4460
4461 Pji_Fm_Plan_Maint_T_Pvt.MERGE_INTO_AC_FACT;
4462
4463
4464
4465 END IF;
4466
4467 IF p_publish_flag = 'Y' THEN
4468 -- Fix for bug : 4191390
4469 If l_struct_sharing_code LIKE '%SHARE%' then
4470 UPDATE pji_pjp_wbs_header SET
4471 wbs_version_id = l_new_wbs_version_id
4472 WHERE
4473 wp_flag = 'N' AND
4474 project_id = l_project_id;
4475 elsif l_struct_sharing_code LIKE '%SPLIT%' THEN
4476 UPDATE pji_pjp_wbs_header SET
4477 wbs_version_id = l_new_wbs_version_id
4478 WHERE
4479 wp_flag = 'N' AND
4480 p_struct_type = 'FINANCIAL' AND
4481 project_id = l_project_id;
4482 end if ;
4483 END IF;
4484 /* Bug No.4567424
4485 Pa_Proj_Task_Struc_Pub.set_update_wbs_flag (
4486 p_project_id => l_project_id,
4487 p_structure_version_id => l_new_wbs_version_id,
4488 p_update_wbs_flag => 'N',
4489 x_return_status => l_return_status,
4490 x_msg_count => l_msg_count,
4491 x_msg_data => l_msg_data );
4492 */
4493 /* 5138049 as updated by MAANSARI
4494 Pa_Proj_Task_Struc_Pub.process_task_weightage (
4495 p_project_id => l_project_id,
4496 p_structure_version_id => l_new_wbs_version_id,
4497 x_return_status => l_return_status,
4498 x_msg_count => l_msg_count,
4499 x_msg_data => l_msg_data );
4500 */
4501 DELETE
4502 FROM pa_pji_proj_events_log LOG
4503 WHERE LOG.EVENT_ID = p_event_id;
4504
4505 cleanup_temp_tables;
4506 /* bug5353559*/
4507 /* Bug 5609109
4508 IF (l_plan_version_id_tbl.COUNT <= 0) THEN
4509 IF g_debug_mode='Y' THEN
4510 Pji_Utils.write2log(' WBS_MAINT_PVT: RETURNING as table count is Zero',null,3);
4511 end if;
4512 RETURN;
4513 end if; */
4514
4515 IF g_debug_mode='Y' THEN
4516 Pji_Utils.write2log( 'calling APPLY_LP_PROG_ON_CWV :p_calling_Context: '||p_calling_Context||'p_deffered_mode:'||p_deffered_mode||'l_new_wbs_version_id:'||l_new_wbs_version_id ,null,3);
4517 end if;
4518 IF p_calling_Context='APPLY_PROGRESS' and p_deffered_mode='Y' THEN
4519 PA_PROGRESS_PUB.APPLY_LP_PROG_ON_CWV(
4520 p_project_id => l_project_id,
4521 p_working_str_version_id => l_new_wbs_version_id,
4522 x_return_status => l_return_status,
4523 x_msg_count => l_msg_count ,
4524 x_msg_data => l_msg_data);
4525 IF g_debug_mode='Y' THEN
4526 Pji_Utils.write2log( 'after call to APPLY_LP_PROG_ON_CWV :l_return_status:'||l_return_status||'l_msg_data:'||l_msg_data||'CONC_REQUEST_Id:'||Fnd_Global.CONC_REQUEST_ID,null,3);
4527 end if;
4528 END IF;
4529
4530
4531
4532 IF l_prg_event_id is not null then
4533
4534 --Bug 4626803: Need this for preventing doubling
4535 --of actuals
4536 UPDATE pji_fm_extr_plan_lines
4537 SET ACT_QUANTITY = NULL,
4538 ACT_TXN_BURDENED_COST = NULL,
4539 ACT_PRJ_BURDENED_COST = NULL,
4540 ACT_PFC_BURDENED_COST = NULL,
4541 ACT_TXN_RAW_COST = NULL,
4542 ACT_PRJ_RAW_COST = NULL,
4543 ACT_PFC_RAW_COST = NULL,
4544 ACT_TXN_REVENUE = NULL,
4545 ACT_PRJ_REVENUE = NULL,
4546 ACT_PFC_REVENUE = NULL
4547 WHERE
4548 plan_version_id = l_plan_version_id;
4549
4550 --Callingt plan_update to process data in PJI_FM_EXTR_PLAN_LINES
4551 pa_task_pub1.G_CALL_PJI_ROLLUP := 'Y';
4552 pji_fm_xbs_accum_maint.plan_update (
4553 p_plan_version_id => l_plan_version_id,
4554 x_msg_code => l_msg_data,
4555 x_return_status => l_return_status );
4556
4557 IF l_return_status <> fnd_api.G_RET_STS_SUCCESS THEN
4558 x_return_status := l_return_status;
4559 IF g_debug_mode='Y' THEN
4560 Pji_Utils.write2log('WBS Maint Pvt:' || 'Failure in plan_update call');
4561 END IF;
4562 RETURN;
4563 END IF;
4564 pa_task_pub1.G_CALL_PJI_ROLLUP := 'N';
4565
4566
4567 ----------------------------------------------------------------------------------------
4568 --The below COMMIT is as per design. It is required for releasing locks on denorm and
4569 --header table that will be accessed by the summarization program launched in step below
4570 COMMIT;
4571 savepoint process_wbs_updates_conc;
4572 savepoint process_wbs_updates;
4573 savepoint process_proj_sum_conc;
4574 savepoint Update_project_pub; -- Added for Bug 14365759
4575 ----------------------------------------------------------------------------------------
4576 -- Added If condition for Bug 5999999
4577
4578 IF NVL(FND_PROFILE.value('PA_ROLLUP_PROGRAM_AMOUNTS'),'AUTOMATIC') = 'AUTOMATIC' THEN
4579
4580 l_request_id:=submit_request(l_project_id);
4581 if (FND_CONCURRENT.WAIT_FOR_REQUEST (
4582 l_request_id,
4583 20,
4584 0, -- wait forever
4585 l_chd_phase,
4586 l_chd_status,
4587 l_chd_dev_phase,
4588 l_chd_dev_status,
4589 l_chd_message
4590 )) then
4591
4592 Pji_Utils.write2log( '*********22Submitted status the l_dev_phase: '||l_chd_dev_phase||'l_dev_status'||l_chd_dev_status ,null,3);
4593
4594 end if;
4595 if l_chd_dev_status ='ERROR' THEN
4596 l_return_status:='E';
4597 FND_MESSAGE.SET_NAME('PJI', 'PJI_PJP_SUMM_ERR');
4598 FND_MESSAGE.SET_TOKEN ('REQUEST_ID', l_request_id);
4599 FND_MESSAGE.SET_TOKEN ('SQLERRM', l_chd_message); --bug#5524224, passed completion text
4600
4601 fnd_msg_pub.add_exc_msg(p_pkg_name => g_package_name,
4602 p_procedure_name => 'WBS_MAINT_PVT',
4603 p_error_text => SUBSTRB(FND_MESSAGE.GET,1,240));
4604
4605 IF g_debug_mode='Y' THEN null;
4606 Pji_Utils.write2log(SUBSTRB(FND_MESSAGE.GET,1,240));
4607 end if;
4608 elsif l_chd_dev_status in ('CANCELLED','TERMINATED','DELETED') THEN
4609 l_return_status:='E';
4610 FND_MESSAGE.SET_NAME('PJI', 'PJI_PJP_SUMM_ERR');
4611 FND_MESSAGE.SET_TOKEN ('REQUEST_ID', l_request_id);
4612 FND_MESSAGE.SET_TOKEN ('SQLERRM', l_chd_status);
4613 fnd_msg_pub.add_exc_msg(p_pkg_name => g_package_name,
4614 p_procedure_name => 'WBS_MAINT_PVT',
4615 p_error_text => SUBSTRB(FND_MESSAGE.GET,1,240));
4616 IF g_debug_mode='Y' THEN null;
4617 Pji_Utils.write2log(SUBSTRB(FND_MESSAGE.GET,1,240));
4618 end if;
4619
4620 end if;
4621 END IF ; --Bug 5999999
4622 END IF;
4623
4624
4625 x_return_status:=l_return_status;
4626 IF g_debug_mode='Y' THEN
4627 Pji_Utils.write2log( ' wbs maint pvt .. 0002 ::l_return_status'||l_return_status ,null,3);
4628 end if;
4629
4630 EXCEPTION
4631 WHEN OTHERS THEN
4632 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
4633 ( p_package_name => g_package_name
4634 , p_procedure_name => 'WBS_MAINT_PVT'
4635 , x_return_status => x_return_status ) ;
4636
4637 RAISE;
4638 END;
4639
4640 PROCEDURE LAUNCH_WBS_REQ_PVT (
4641 p_event_id IN NUMBER,
4642 p_calling_context IN VARCHAR2,
4643 p_rerun_flag IN VARCHAR2 :=NULL,
4644 x_return_status OUT NOCOPY VARCHAR2 )
4645 IS
4646 l_request_id NUMBER;
4647 l_project_id NUMBER;
4648 l_struct_version_id NUMBER;
4649 l_return_status VARCHAR2(1);
4650
4651 BEGIN
4652
4653 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
4654 ( p_package_name => g_package_name
4655 , x_return_status => x_return_status );
4656
4657 SELECT
4658 TO_NUMBER(elog.ATTRIBUTE1),
4659 TO_NUMBER(elog.EVENT_OBJECT)
4660 INTO
4661 l_project_id,
4662 l_struct_version_id
4663 FROM
4664 pa_pji_proj_events_log elog
4665 WHERE
4666 elog.EVENT_ID = p_event_id AND
4667 ROWNUM <= 1;
4668
4669 l_request_id:=
4670 Fnd_Request.SUBMIT_REQUEST (
4671 Pji_Utils.GET_PJI_SCHEMA_NAME, -- Application name
4672 'PJI_FM_SUM_CHANGE', -- concurrent program name
4673 NULL, -- description (optional)
4674 NULL, -- Start Time (optional)
4675 FALSE, -- called from another conc. request
4676 p_event_id, -- first parameter
4677 p_calling_context, -- second parameter
4678 p_rerun_flag );
4679
4680
4681 PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_IN_PROC(
4682 p_project_id => l_project_id,
4683 p_structure_version_id => l_struct_version_id,
4684 p_calling_context => p_calling_context,
4685 p_conc_request_id => l_request_id,
4686 x_return_status => l_return_status );
4687
4688 EXCEPTION
4689 WHEN OTHERS THEN
4690
4691 /*UPDATE pa_proj_elem_ver_structure
4692 SET PROCESS_CODE = 'WUE',
4693 CONC_REQUEST_ID = l_request_id
4694 WHERE ELEMENT_VERSION_ID = l_struct_version_id
4695 AND PROJECT_ID = l_project_id;
4696 */
4697 PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_ERR(
4698 p_project_id => l_project_id,
4699 p_structure_version_id => l_struct_version_id,
4700 p_calling_context => p_calling_context,
4701 p_conc_request_id => l_request_id,
4702 x_return_status => l_return_status );
4703
4704 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
4705 ( p_package_name => g_package_name
4706 , p_procedure_name => 'LAUNCH_WBS_REQ_PVT'
4707 , x_return_status => x_return_status ) ;
4708
4709 RAISE;
4710 END;
4711
4712 ---------------------WBS_MAINT------------------------
4713 --There are 4 different cases when this API gets called
4714 -- 1. Non-Versioned structure
4715 -- 2. Split versioned
4716 -- 3. Shared versioned and publish = N
4717 -- 4. Shared versioned and publish = Y
4718 --------------------------------------------------------
4719 PROCEDURE WBS_MAINT (
4720 p_new_struct_ver_id IN NUMBER,
4721 p_old_struct_ver_id IN NUMBER,
4722 p_project_id IN NUMBER,
4723 p_publish_flag IN VARCHAR2 DEFAULT 'N',
4724 p_online_flag IN VARCHAR2,
4725 p_calling_Context IN VARCHAR2 :=NULL,
4726 p_rerun_flag IN VARCHAR2 :=NULL,
4727 x_request_id OUT NOCOPY NUMBER,
4728 x_processing_code OUT NOCOPY VARCHAR2,
4729 x_msg_code OUT NOCOPY VARCHAR2,
4730 x_return_status OUT NOCOPY VARCHAR2,
4731 x_online_flag OUT NOCOPY VARCHAR2)
4732 IS
4733
4734 l_shared_flag VARCHAR2(1) := 'A'; --Default value implies value is null in source system
4735 l_versioned_flag VARCHAR2(1):='N';
4736 l_struct_type VARCHAR2(30);
4737 l_struct_sharing_code pa_projects_all.structure_sharing_code%TYPE;
4738 l_event_id NUMBER;
4739 l_return_status VARCHAR2(1);
4740 l_lock_mode VARCHAR2(1);
4741 l_working_version_id number;
4742 l_request_id NUMBER;
4743 BEGIN
4744
4745
4746 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
4747 ( p_package_name => g_package_name
4748 , x_return_status => x_return_status );
4749 IF g_debug_mode='Y' THEN
4750 Pji_Utils.write2log('Coming IN WBS_MAINT :p_new_struct_ver_id: '||p_new_struct_ver_id||'p_old_struct_ver_id:'||p_old_struct_ver_id||'p_project_id: '||p_project_id||'p_publish_flag :' || p_publish_flag ,null,3);
4751 Pji_Utils.write2log('Coming IN WBS_MAINT :p_online_flag: '||p_online_flag||'p_calling_Context : '||p_calling_Context ||'p_rerun_flag: '|| p_rerun_flag,null,3);
4752 end if;
4753
4754 --Identify if the project has shared/split
4755 --versioned/non-versioned structure
4756 --l_struct_type :=
4757 -- Fix for bug : 4191390
4758 l_struct_sharing_code :=
4759 Pa_Project_Structure_Utils.get_structure_sharing_code (p_project_id);
4760
4761
4762 IF l_struct_sharing_code LIKE '%SHARE%' THEN
4763 l_shared_flag := 'Y';
4764 ELSIF l_struct_sharing_code LIKE '%SPLIT%' THEN
4765 l_shared_flag := 'N';
4766 IF p_publish_flag = 'Y' THEN
4767 SELECT
4768 typ.STRUCTURE_TYPE
4769 INTO
4770 l_struct_type
4771 FROM
4772 pa_structure_types typ,
4773 pa_proj_structure_types ptyp,
4774 pa_proj_element_versions ver
4775 WHERE
4776 typ.STRUCTURE_TYPE_ID = ptyp.STRUCTURE_TYPE_ID AND
4777 ptyp.PROJ_ELEMENT_ID = ver.PROJ_ELEMENT_ID AND
4778 ver.ELEMENT_VERSION_ID = p_new_struct_ver_id ; --p_old_struct_ver_id; fix for bug : 4191390
4779 END IF;
4780 END IF;
4781
4782 /* bug5353559*/
4783 l_versioned_flag := NVL( Pa_Workplan_Attr_Utils.check_wp_versioning_enabled (p_project_id),'N');
4784
4785
4786
4787 --------------------------------------
4788 --The first step is to LOG the event
4789 -------------------------------------
4790 --Initialize Event sequence
4791 SELECT pa_pji_proj_events_log_s.NEXTVAL
4792 INTO l_event_id
4793 FROM sys.dual;
4794
4795 IF l_versioned_flag = 'N' THEN
4796 --CASE 1: Non-Versioned (Work plans + actuals + fin plans)
4797
4798 INSERT INTO pa_pji_proj_events_log (
4799 EVENT_TYPE,
4800 EVENT_ID,
4801 EVENT_OBJECT,
4802 OPERATION_TYPE,
4803 STATUS,
4804 LAST_UPDATE_DATE,
4805 LAST_UPDATED_BY,
4806 CREATION_DATE,
4807 CREATED_BY,
4808 LAST_UPDATE_LOGIN,
4809 ATTRIBUTE1,
4810 ATTRIBUTE2,
4811 ATTRIBUTE3 )
4812 SELECT
4813 DECODE (p_publish_flag, 'N', 'WBS_CHANGE', 'WBS_PUBLISH'),
4814 l_event_id,
4815 p_new_struct_ver_id,
4816 'I',
4817 'X',
4818 SYSDATE,
4819 -1,
4820 SYSDATE,
4821 -1,
4822 -1,
4823 p_project_id,
4824 p_old_struct_ver_id,
4825 head.PLAN_VERSION_ID
4826 FROM
4827 pji_pjp_wbs_header head
4828 WHERE
4829 head.PROJECT_ID = p_project_id AND
4830 head.WBS_VERSION_ID = p_old_struct_ver_id;
4831
4832 IF SQL%rowcount = 0 THEN
4833 INSERT INTO pa_pji_proj_events_log (
4834 EVENT_TYPE,
4835 EVENT_ID,
4836 EVENT_OBJECT,
4837 OPERATION_TYPE,
4838 STATUS,
4839 LAST_UPDATE_DATE,
4840 LAST_UPDATED_BY,
4841 CREATION_DATE,
4842 CREATED_BY,
4843 LAST_UPDATE_LOGIN,
4844 ATTRIBUTE1,
4845 ATTRIBUTE2,
4846 ATTRIBUTE3 )
4847 SELECT
4848 DECODE (p_publish_flag, 'N', 'WBS_CHANGE', 'WBS_PUBLISH'),
4849 l_event_id,
4850 p_new_struct_ver_id,
4851 'I',
4852 'X',
4853 SYSDATE,
4854 -1,
4855 SYSDATE,
4856 -1,
4857 -1,
4858 p_project_id,
4859 p_old_struct_ver_id,
4860 NULL
4861 FROM dual;
4862 END IF;
4863
4864 -- Commented the logic to always process the request online
4865 -- this code change was done for R12 bug 5198662.
4866 -- If this is called in online mode then defer this processing
4867 -- by launching a concurrent request
4868 --IF p_online_flag = 'Y' THEN
4869 -- g_deffered_mode:='Y';
4870 --
4871 -- LAUNCH_WBS_REQ_PVT (
4872 -- p_event_id => l_event_id,
4873 -- p_calling_context => p_calling_Context,
4874 -- p_rerun_flag => p_rerun_flag,
4875 -- x_return_status => l_return_status );
4876 --
4877 -- x_return_status := l_return_status;
4878 -- x_processing_code := 'D';
4879
4880 --ELSE --Already in concurrent request
4881
4882 WBS_LOCK_PVT (
4883 p_event_id => l_event_id,
4884 p_online_flag => 'Y',
4885 p_request_id => Fnd_Global.CONC_REQUEST_ID,
4886 x_lock_mode => l_lock_mode,
4887 x_return_status => l_return_status );
4888
4889 IF l_return_status <> Fnd_Api.G_RET_STS_SUCCESS THEN
4890 x_return_status := l_return_status;
4891 x_msg_code := SQLERRM;
4892 END IF;
4893
4894 IF l_lock_mode = 'S' THEN
4895 WBS_MAINT_PVT (
4896 p_event_id => l_event_id,
4897 p_versioned_flag => l_versioned_flag,
4898 p_struct_type => l_struct_type , --l_shared_flag, fix for bug : 4191390
4899 p_publish_flag => p_publish_flag,
4900 p_Calling_Context=>p_Calling_Context,
4901 p_deffered_mode =>'N',
4902 p_rerun_flag => p_rerun_flag,
4903 x_return_status => l_return_status );
4904
4905 x_return_status := l_return_status;
4906 x_processing_code := 'S';
4907 END IF;
4908
4909 --END IF;--End deferred processing
4910
4911 ELSIF ((l_versioned_flag = 'Y' AND l_shared_flag = 'N') OR
4912 (l_versioned_flag = 'Y' AND l_shared_flag = 'Y' AND
4913 p_publish_flag = 'N') OR
4914 l_struct_type = 'WORKPLAN') THEN
4915 --CASE 2: Only Workplans
4916 INSERT INTO pa_pji_proj_events_log (
4917 EVENT_TYPE,
4918 EVENT_ID,
4919 EVENT_OBJECT,
4920 OPERATION_TYPE,
4921 STATUS,
4922 LAST_UPDATE_DATE,
4923 LAST_UPDATED_BY,
4924 CREATION_DATE,
4925 CREATED_BY,
4926 LAST_UPDATE_LOGIN,
4927 ATTRIBUTE1,
4928 ATTRIBUTE2,
4929 ATTRIBUTE3 )
4930 SELECT
4931 DECODE (p_publish_flag, 'N', 'WBS_CHANGE', 'WBS_PUBLISH'),
4932 l_event_id,
4933 p_new_struct_ver_id,
4934 'I',
4935 'X',
4936 SYSDATE,
4937 -1,
4938 SYSDATE,
4939 -1,
4940 -1,
4941 p_project_id,
4942 p_old_struct_ver_id,
4943 head.PLAN_VERSION_ID
4944 FROM
4945 pji_pjp_wbs_header head
4946 WHERE
4947 head.PROJECT_ID = p_project_id AND
4948 head.WBS_VERSION_ID = p_old_struct_ver_id AND
4949 head.WP_FLAG = 'Y';
4950
4951 IF SQL%rowcount = 0 THEN
4952 INSERT INTO pa_pji_proj_events_log (
4953 EVENT_TYPE,
4954 EVENT_ID,
4955 EVENT_OBJECT,
4956 OPERATION_TYPE,
4957 STATUS,
4958 LAST_UPDATE_DATE,
4959 LAST_UPDATED_BY,
4960 CREATION_DATE,
4961 CREATED_BY,
4962 LAST_UPDATE_LOGIN,
4963 ATTRIBUTE1,
4964 ATTRIBUTE2,
4965 ATTRIBUTE3 )
4966 SELECT
4967 DECODE (p_publish_flag, 'N', 'WBS_CHANGE', 'WBS_PUBLISH'),
4968 l_event_id,
4969 p_new_struct_ver_id,
4970 'I',
4971 'X',
4972 SYSDATE,
4973 -1,
4974 SYSDATE,
4975 -1,
4976 -1,
4977 p_project_id,
4978 p_old_struct_ver_id,
4979 NULL
4980 FROM dual;
4981 END IF;
4982
4983 WBS_LOCK_PVT (
4984 p_event_id => l_event_id,
4985 p_online_flag => 'Y',
4986 p_request_id => Fnd_Global.CONC_REQUEST_ID,
4987 x_lock_mode => l_lock_mode,
4988 x_return_status => l_return_status );
4989
4990 IF l_return_status <> Fnd_Api.G_RET_STS_SUCCESS THEN
4991 x_return_status := l_return_status;
4992 x_msg_code := SQLERRM;
4993 END IF;
4994
4995 IF l_lock_mode = 'S' THEN
4996
4997 WBS_MAINT_PVT (
4998 p_event_id => l_event_id,
4999 p_versioned_flag => l_versioned_flag,
5000 p_struct_type => l_struct_type , --l_shared_flag, fix for bug : 4191390
5001 p_publish_flag => p_publish_flag,
5002 p_Calling_Context=>p_Calling_Context,
5003 p_deffered_mode =>'N',
5004 p_rerun_flag => p_rerun_flag,
5005 x_return_status => l_return_status );
5006
5007 x_return_status := l_return_status;
5008 x_processing_code := 'S';
5009
5010 END IF;
5011 --Note: If lock is not acquired then no processing is done for event
5012
5013 ELSIF ((l_versioned_flag = 'Y' AND l_shared_flag = 'Y' AND
5014 p_publish_flag = 'Y') OR
5015 l_struct_type = 'FINANCIAL' ) THEN
5016 --CASE 3: Only for Financial plans and Actuals
5017 INSERT INTO pa_pji_proj_events_log (
5018 EVENT_TYPE,
5019 EVENT_ID,
5020 EVENT_OBJECT,
5021 OPERATION_TYPE,
5022 STATUS,
5023 LAST_UPDATE_DATE,
5024 LAST_UPDATED_BY,
5025 CREATION_DATE,
5026 CREATED_BY,
5027 LAST_UPDATE_LOGIN,
5028 ATTRIBUTE1,
5029 ATTRIBUTE2,
5030 ATTRIBUTE3 )
5031 SELECT
5032 'WBS_PUBLISH',
5033 l_event_id,
5034 p_new_struct_ver_id,
5035 'I',
5036 'X',
5037 SYSDATE,
5038 -1,
5039 SYSDATE,
5040 -1,
5041 -1,
5042 p_project_id,
5043 p_old_struct_ver_id,
5044 head.PLAN_VERSION_ID
5045 FROM
5046 pji_pjp_wbs_header head
5047 WHERE
5048 head.PROJECT_ID = p_project_id AND
5049 head.WBS_VERSION_ID = p_old_struct_ver_id AND
5050 head.WP_FLAG = 'N';
5051
5052 IF SQL%rowcount = 0 THEN
5053 INSERT INTO pa_pji_proj_events_log (
5054 EVENT_TYPE,
5055 EVENT_ID,
5056 EVENT_OBJECT,
5057 OPERATION_TYPE,
5058 STATUS,
5059 LAST_UPDATE_DATE,
5060 LAST_UPDATED_BY,
5061 CREATION_DATE,
5062 CREATED_BY,
5063 LAST_UPDATE_LOGIN,
5064 ATTRIBUTE1,
5065 ATTRIBUTE2,
5066 ATTRIBUTE3 )
5067 SELECT
5068 DECODE (p_publish_flag, 'N', 'WBS_CHANGE', 'WBS_PUBLISH'),
5069 l_event_id,
5070 p_new_struct_ver_id,
5071 'I',
5072 'X',
5073 SYSDATE,
5074 -1,
5075 SYSDATE,
5076 -1,
5077 -1,
5078 p_project_id,
5079 p_old_struct_ver_id,
5080 NULL
5081 FROM dual;
5082 END IF;
5083
5084 -- Commented the logic to always process the request online
5085 -- this code change was done for R12 bug 5198662.
5086 -- If this is called in online mode then defer this processing
5087 -- by launching a concurrent request
5088 --IF p_online_flag = 'Y' THEN
5089 -- g_deffered_mode:='Y';
5090 --
5091 -- LAUNCH_WBS_REQ_PVT (
5092 -- p_event_id => l_event_id,
5093 -- p_calling_context =>p_calling_Context,
5094 -- p_rerun_flag => p_rerun_flag,
5095 -- x_return_status => l_return_status );
5096 --
5097 -- x_return_status := l_return_status;
5098 -- x_processing_code := 'D';
5099 --
5100 --ELSE
5101
5102 WBS_LOCK_PVT (
5103 p_event_id => l_event_id,
5104 p_online_flag => 'Y',
5105 p_request_id => Fnd_Global.CONC_REQUEST_ID,
5106 x_lock_mode => l_lock_mode,
5107 x_return_status => l_return_status );
5108
5109 IF l_return_status <> Fnd_Api.G_RET_STS_SUCCESS THEN
5110 x_return_status := l_return_status;
5111 x_msg_code := SQLERRM;
5112 END IF;
5113
5114 IF l_lock_mode = 'S' THEN
5115 WBS_MAINT_PVT (
5116 p_event_id => l_event_id,
5117 p_versioned_flag => l_versioned_flag,
5118 p_struct_type => l_struct_type , --l_shared_flag, fix for bug : 4191390
5119 p_publish_flag => p_publish_flag,
5120 p_Calling_Context=>p_Calling_Context,
5121 p_deffered_mode =>'N',
5122 p_rerun_flag => p_rerun_flag,
5123 x_return_status => l_return_status );
5124
5125 x_return_status := l_return_status;
5126 x_processing_code := 'S';
5127
5128 END IF;--end lock mode
5129
5130 END IF;
5131
5132 --END IF;
5133
5134 -- IF g_deffered_mode='Y' THEN
5135 -- x_online_flag:='N';
5136 -- END IF;
5137 IF g_debug_mode='Y' THEN
5138 Pji_Utils.write2log('Going out WBS_MAINT :x_request_id: '||x_request_id||'x_processing_code:'||x_processing_code||'x_msg_code: '||x_msg_code ,null,3);
5139 Pji_Utils.write2log('Going out WBS_MAINT :x_return_status: '||x_return_status||'x_online_flag :'||x_online_flag ,null,3);
5140 end if;
5141 EXCEPTION
5142 WHEN OTHERS THEN
5143 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
5144 ( p_package_name => g_package_name
5145 , p_procedure_name => 'WBS_MAINT'
5146 , x_return_status => x_return_status ) ;
5147
5148 RAISE;
5149 END;
5150
5151 --This API is called from the concurrent request
5152 --PRC: Process project summary changes
5153 PROCEDURE PROCESS_PROJ_SUM_CHANGES (
5154 errbuf OUT NOCOPY VARCHAR2,
5155 retcode OUT NOCOPY VARCHAR2,
5156 p_event_id IN NUMBER,
5157 p_calling_context IN VARCHAR2,
5158 p_rerun_flag IN VARCHAR2 := NULL )
5159 IS
5160
5161 l_shared_flag VARCHAR2(1);
5162 l_versioned_flag VARCHAR2(1);
5163 l_struct_type VARCHAR2(30);
5164 l_return_status VARCHAR2(1);
5165 l_project_id NUMBER;
5166 l_lock_mode VARCHAR2(1);
5167 l_publish_flag VARCHAR2(1);
5168 l_struct_version_id NUMBER;
5169 l_calling_context VARCHAR2(20);
5170
5171 BEGIN
5172 IF g_debug_mode='Y' THEN
5173 Pji_Utils.write2log( 'PROCESS_PROJ_SUM_CHANGES :p_event_id '||p_event_id ||'p_calling_context'||p_calling_context ,null,3);
5174 end if;
5175 select decode(p_calling_context, 'ONLINE_PUBLISH', 'CONC_PUBLISH'
5176 , 'ONLINE_UPDATE', 'CONC_UPDATE', p_calling_context)
5177 into l_calling_context
5178 from dual;
5179 savepoint process_proj_sum_conc;
5180 BEGIN
5181 SELECT
5182 TO_NUMBER(elog.ATTRIBUTE1),
5183 DECODE(elog.EVENT_TYPE, 'WBS_PUBLISH', 'Y', 'N'),
5184 elog.EVENT_OBJECT
5185 INTO
5186 l_project_id,
5187 l_publish_flag,
5188 l_struct_version_id
5189 FROM
5190 pa_pji_proj_events_log elog
5191 WHERE
5192 elog.EVENT_ID = p_event_id AND
5193 ROWNUM <= 1;
5194 EXCEPTION
5195 WHEN NO_DATA_FOUND THEN
5196 retcode := 0;
5197 RETURN;
5198 END;
5199
5200 --Identify if the project has shared/split
5201 --versioned/non-versioned structure
5202 l_struct_type :=
5203 Pa_Project_Structure_Utils.get_structure_sharing_code (l_project_id);
5204 IF l_struct_type LIKE 'SHARE%' THEN
5205 l_shared_flag := 'Y';
5206 ELSE
5207 l_shared_flag := 'N';
5208 END IF;
5209
5210 l_versioned_flag := NVL( Pa_Workplan_Attr_Utils.check_wp_versioning_enabled (l_project_id),'N'); /*bug5353559*/
5211
5212 WBS_LOCK_PVT (
5213 p_event_id => p_event_id,
5214 p_online_flag => 'N', --- 5138049 because in online NOWAIT is used
5215 p_request_id => Fnd_Global.CONC_REQUEST_ID,
5216 x_lock_mode => l_lock_mode ,
5217 x_return_status => l_return_status );
5218 IF g_debug_mode='Y' THEN
5219 Pji_Utils.write2log( 'PROCESS_PROJ_SUM_CHANGES :call to WBS_LOCK_PVT: l_lock_mode '||l_lock_mode ,null,3);
5220 end if;
5221 IF l_return_status <> Fnd_Api.G_RET_STS_SUCCESS THEN
5222 UPDATE pa_proj_elem_ver_structure
5223 SET PROCESS_CODE =decode(l_calling_context, 'APPLY_PROGRESS', 'APE'
5224 , 'CONC_PUBLISH', 'PUE'
5225 , 'CONC_UPDATE', 'WUE', null),
5226 process_update_wbs_flag = 'Y', /* 5138049 */
5227 CONC_REQUEST_ID = Fnd_Global.CONC_REQUEST_ID
5228 WHERE ELEMENT_VERSION_ID = l_struct_version_id
5229 AND PROJECT_ID = l_project_id;
5230 retcode := 2;
5231 errbuf := SQLERRM;
5232 ELSE
5233 retcode := 0;
5234 END IF;
5235
5236 IF l_lock_mode = 'S' THEN
5237
5238 WBS_MAINT_PVT (
5239 p_event_id => p_event_id,
5240 p_versioned_flag => l_versioned_flag,
5241 p_struct_type => l_shared_flag,
5242 p_publish_flag => l_publish_flag,
5243 p_calling_context=> l_calling_context,
5244 p_deffered_mode =>'Y',
5245 p_rerun_flag => p_rerun_flag,
5246 x_return_status => l_return_status );
5247 IF g_debug_mode='Y' THEN
5248 Pji_Utils.write2log( 'PROCESS_PROJ_SUM_CHANGES :call to WBS_MAINT_PVT: l_return_status '||l_return_status ,null,3);
5249 end if;
5250 IF l_return_status <> Fnd_Api.G_RET_STS_SUCCESS THEN
5251
5252 IF Fnd_Global.CONC_REQUEST_ID IS NOT NULL THEN
5253 rollback to process_proj_sum_conc;
5254 UPDATE pa_proj_elem_ver_structure
5255 SET PROCESS_CODE =decode(l_calling_context, 'APPLY_PROGRESS', 'APE'
5256 , 'CONC_PUBLISH', 'PUE'
5257 , 'CONC_UPDATE', 'WUE', null),
5258 process_update_wbs_flag = 'Y', /* 5138049 */
5259 CONC_REQUEST_ID = Fnd_Global.CONC_REQUEST_ID
5260 WHERE ELEMENT_VERSION_ID = l_struct_version_id
5261 AND PROJECT_ID = l_project_id;
5262 /*
5263 PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_ERR(
5264 p_project_id => l_project_id,
5265 p_structure_version_id => l_struct_version_id,
5266 p_calling_context => p_calling_context,
5267 p_conc_request_id => Fnd_Global.CONC_REQUEST_ID,
5268 x_return_status => l_return_status );
5269 */
5270 END IF;
5271
5272 retcode := 2;
5273 errbuf := SQLERRM;
5274 ELSE
5275 IF Fnd_Global.CONC_REQUEST_ID IS NOT NULL THEN
5276 UPDATE pa_proj_elem_ver_structure
5277 SET PROCESS_CODE = NULL,
5278 process_update_wbs_flag='N',
5279 CONC_REQUEST_ID = Fnd_Global.CONC_REQUEST_ID
5280 WHERE ELEMENT_VERSION_ID = l_struct_version_id
5281 AND PROJECT_ID = l_project_id;
5282 END IF;
5283 retcode := 0;
5284 END IF;
5285
5286 ELSIF l_lock_mode = 'F' THEN
5287 IF g_debug_mode='Y' THEN
5288 Pji_Utils.write2log( 'PROCESS_PROJ_SUM_CHANGES :Not able to take the lock showing the warning' ,null,4);
5289 end if;
5290 retcode := 1; --Unable to acquire lock and hence complete request as warning
5291
5292 END IF;
5293
5294 COMMIT;
5295
5296 EXCEPTION
5297 WHEN OTHERS THEN
5298 rollback to process_proj_sum_conc;
5299 IF Fnd_Global.CONC_REQUEST_ID IS NOT NULL THEN
5300 PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_ERR(
5301 p_project_id => l_project_id,
5302 p_structure_version_id => l_struct_version_id,
5303 p_calling_context => l_calling_context, --Bug fix 6456711
5304 p_conc_request_id => Fnd_Global.CONC_REQUEST_ID,
5305 x_return_status => l_return_status );
5306 END IF;
5307 IF g_debug_mode='Y' THEN
5308 Pji_Utils.write2log( 'PROCESS_PROJ_SUM_CHANGES : COMING to the exception' ,null,5);
5309 end if;
5310 retcode := 2;
5311 errbuf := SQLERRM;
5312 END;
5313
5314
5315 --
5316 -- Called from summarization programs.
5317 --
5318 PROCEDURE process_pending_events (
5319 x_return_status OUT NOCOPY VARCHAR2,
5320 x_msg_data OUT NOCOPY VARCHAR2 )
5321 IS
5322
5323 CURSOR c_pending_events IS
5324 SELECT
5325 DISTINCT
5326 elog.EVENT_TYPE,
5327 elog.EVENT_ID
5328 FROM
5329 pa_pji_proj_events_log elog
5330 WHERE
5331 elog.EVENT_TYPE IN ('WBS_CHANGE',
5332 'WBS_PUBLISH',
5333 'PLAN_DELETE',
5334 'PLAN_BASELINE',
5335 'PLAN_ORIGINAL',
5336 'PLAN_COPY' );
5337
5338 l_processing_code VARCHAR2(1);
5339
5340 BEGIN
5341
5342 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
5343 ( p_package_name => g_package_name
5344 , x_return_status => x_return_status );
5345
5346 /* FOR rec IN c_pending_events LOOP
5347
5348 proces_event_pvt (
5349 p_event_id => rec.EVENT_ID,
5350 p_event_type => rec.EVENT_TYPE,
5351 x_processing_code => l_processing_code,
5352 x_return_status => x_return_status,
5353 x_msg_data => x_msg_data);
5354
5355 END LOOP;--loop for pending events */
5356
5357 EXCEPTION
5358 WHEN OTHERS THEN
5359
5360 x_msg_data := SQLERRM;
5361
5362 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
5363 ( p_package_name => g_package_name
5364 , p_procedure_name => 'PROCESS_PENDING_EVENTS'
5365 , x_return_status => x_return_status ) ;
5366
5367 RAISE;
5368
5369 END;
5370
5371
5372 PROCEDURE proces_event_pvt (
5373 p_event_id IN NUMBER,
5374 p_event_type IN VARCHAR2,
5375 x_processing_code OUT NOCOPY VARCHAR2,
5376 x_return_status OUT NOCOPY VARCHAR2,
5377 x_msg_data OUT NOCOPY VARCHAR2 )
5378 IS
5379
5380 l_processing_code VARCHAR2(1);
5381 l_lock_mode VARCHAR2(1);
5382 l_return_status VARCHAR2(1);
5383 l_shared_flag VARCHAR2(1);
5384 l_versioned_flag VARCHAR2(1);
5385 l_struct_type VARCHAR2(30);
5386 l_project_id NUMBER;
5387 l_publish_flag VARCHAR2(1);
5388
5389 BEGIN
5390
5391 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
5392 ( p_package_name => g_package_name
5393 , x_return_status => x_return_status );
5394
5395
5396 IF p_event_type LIKE 'WBS%' THEN
5397
5398 WBS_LOCK_PVT (
5399 p_event_id => p_event_id,
5400 p_online_flag => 'Y',
5401 p_request_id => Fnd_Global.CONC_REQUEST_ID,
5402 x_lock_mode => l_lock_mode,
5403 x_return_status => l_return_status );
5404
5405 IF l_return_status <> Fnd_Api.G_RET_STS_SUCCESS THEN
5406 x_return_status := l_return_status;
5407 x_msg_data := SQLERRM;
5408 END IF;
5409
5410 IF l_lock_mode = 'S' THEN
5411
5412 BEGIN
5413 SELECT
5414 TO_NUMBER(elog.ATTRIBUTE1)
5415 INTO
5416 l_project_id
5417 FROM
5418 pa_pji_proj_events_log elog
5419 WHERE
5420 elog.EVENT_ID = p_event_id AND
5421 ROWNUM <= 1;
5422 EXCEPTION
5423 WHEN NO_DATA_FOUND THEN
5424 RETURN;
5425 END;
5426
5427 --Identify if the project has shared/split
5428 --versioned/non-versioned structure
5429 l_struct_type :=
5430 Pa_Project_Structure_Utils.get_structure_sharing_code (l_project_id);
5431
5432 IF l_struct_type LIKE 'SHARE%' THEN
5433 l_shared_flag := 'Y';
5434 ELSE
5435 l_shared_flag := 'N';
5436 END IF;
5437
5438 l_versioned_flag :=
5439 Pa_Workplan_Attr_Utils.check_wp_versioning_enabled (l_project_id);
5440
5441 SELECT
5442 DECODE (p_event_type, 'WBS_PUBLISH', 'Y', 'N')
5443 INTO
5444 l_publish_flag
5445 FROM dual;
5446
5447 WBS_MAINT_PVT (
5448 p_event_id => p_event_id,
5449 p_versioned_flag => l_versioned_flag,
5450 p_struct_type => l_shared_flag,
5451 p_publish_flag => l_publish_flag,
5452 p_calling_context=>NULL,
5453 p_deffered_mode =>'N',
5454 p_rerun_flag => NULL,
5455 x_return_status => l_return_status );
5456
5457 x_return_status := l_return_status;
5458 l_processing_code := 'S';
5459
5460 END IF;
5461
5462 ELSIF p_event_type = 'PLAN_DELETE' THEN
5463
5464 PLAN_DELETE_PVT ( p_event_id => p_event_id,
5465 x_processing_code => l_processing_code ,
5466 x_return_status => x_return_status);
5467
5468 ELSIF p_event_type = 'PLAN_BASELINE' THEN
5469
5470 PLAN_BASELINE_PVT ( p_event_id => p_event_id,
5471 x_processing_code => l_processing_code ,
5472 x_return_status => x_return_status);
5473
5474 ELSIF p_event_type = 'PLAN_ORIGINAL' THEN
5475
5476 PLAN_ORIGINAL_PVT ( p_event_id => p_event_id,
5477 x_processing_code => l_processing_code ,
5478 x_return_status => x_return_status);
5479
5480 ELSIF p_event_type = 'PLAN_COPY' THEN
5481
5482 PLAN_COPY_PVT ( p_event_id => p_event_id,
5483 x_processing_code => l_processing_code ,
5484 x_return_status => x_return_status);
5485
5486 END IF; --end processing of event
5487
5488 x_processing_code := l_processing_code;
5489
5490
5491 EXCEPTION
5492 WHEN OTHERS THEN
5493
5494 x_msg_data := SQLERRM;
5495
5496 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
5497 ( p_package_name => g_package_name
5498 , p_procedure_name => 'PROCESS_EVENT_PVT'
5499 , x_return_status => x_return_status ) ;
5500
5501 RAISE;
5502 END;
5503
5504 PROCEDURE process_pending_plan_updates (
5505 x_return_status OUT NOCOPY VARCHAR2,
5506 x_msg_data OUT NOCOPY VARCHAR2 )
5507 IS
5508
5509 l_processing_code VARCHAR2(1);
5510
5511 BEGIN
5512
5513 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
5514 ( p_package_name => g_package_name
5515 , x_return_status => x_return_status );
5516
5517 -- PLAN_UPDATE_PVT(
5518 -- x_processing_code => l_processing_code
5519 -- , x_return_status => x_return_status );
5520
5521 EXCEPTION
5522 WHEN OTHERS THEN
5523 x_msg_data := SQLERRM;
5524 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
5525 ( p_package_name => g_package_name
5526 , p_procedure_name => 'PROCESS_PENDING_PLAN_UPDATES'
5527 , x_return_status => x_return_status ) ;
5528
5529 RAISE;
5530 END;
5531
5532
5533 ---------------------------------------------------------------
5534 --This API is called in the beginning of any report to ensure
5535 --there are no pending event for the plan version
5536 ---------------------------------------------------------------
5537 PROCEDURE process_plan_events (
5538 p_project_id IN NUMBER,
5539 p_plan_version_id_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
5540 x_processing_code OUT NOCOPY VARCHAR2,
5541 x_msg_count OUT NOCOPY NUMBER,
5542 x_msg_data OUT NOCOPY VARCHAR2,
5543 x_return_status OUT NOCOPY VARCHAR2 )
5544 IS
5545
5546 CURSOR c_pending_plan_events ( p_plan_version_id NUMBER)
5547 IS
5548 SELECT
5549 evt.EVENT_ID,
5550 evt.EVENT_TYPE
5551 FROM
5552 pa_pji_proj_events_log evt
5553 WHERE
5554 evt.EVENT_TYPE IN ( 'PLAN_DELETE',
5555 'PLAN_BASELINE',
5556 'PLAN_ORIGINAL',
5557 'PLAN_COPY') AND
5558 evt.EVENT_OBJECT = to_char(p_plan_version_id)
5559 ORDER BY evt.EVENT_ID ASC;
5560
5561 CURSOR c_pending_wbs_events ( p_plan_version_id NUMBER)
5562 IS
5563 SELECT
5564 evt.EVENT_ID,
5565 evt.EVENT_TYPE
5566 FROM
5567 pa_pji_proj_events_log evt,
5568 pji_pjp_wbs_header head
5569 WHERE
5570 evt.EVENT_TYPE IN ( 'WBS_CHANGE',
5571 'WBS_PUBLISH') AND
5572 evt.EVENT_OBJECT = to_char(head.WBS_VERSION_ID) AND
5573 head.PLAN_VERSION_ID = p_plan_version_id AND
5574 to_char(head.PROJECT_ID ) = evt.ATTRIBUTE1 AND --Bug 7591055
5575 to_char(head.plan_version_id) = evt.ATTRIBUTE3 --Bug 7591055
5576 ORDER BY evt.EVENT_ID ASC;
5577
5578
5579 l_child_task_check NUMBER := 0;
5580
5581 l_plan_version_id NUMBER;
5582
5583 l_child_exist Boolean := TRUE; -- Added for bug 3899810
5584 l_wbs_version_id NUMBER := NULL; -- Added for bug 3899810
5585
5586 BEGIN
5587
5588 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
5589 ( p_package_name => g_package_name
5590 , x_return_status => x_return_status );
5591
5592
5593 /* Begin :
5594 Bug# 3740751 - If child level task structure is not exists then raise the
5595 error message */
5596
5597
5598 /* Get the plan version which is from the table and check if any stcuture is exists */
5599
5600
5601 /* Commented out for bug 3899810 skannoji
5602 IF p_plan_version_id_tbl(1) IS NOT NULL THEN
5603
5604 l_plan_version_id := p_plan_version_id_tbl(1);
5605
5606 END IF;
5607
5608
5609
5610 SELECT COUNT(*)
5611 INTO l_child_task_check
5612 FROM pa_xbs_denorm denom,
5613 pji_pjp_wbs_header headr
5614 WHERE denom.sup_project_id = p_project_id
5615 AND headr.project_id = denom.sup_project_id
5616 AND headr.plan_version_id = l_plan_version_id
5617 AND headr.wbs_version_id = denom.struct_version_id
5618 AND struct_type = 'XBS'
5619 AND ROWNUM =1;
5620 */
5621
5622
5623 -- Bug 3899810 : Added p_plan_version_id_tbl.count check
5624 IF p_plan_version_id_tbl.count > 0 THEN -- Count if
5625 FOR i IN p_plan_version_id_tbl.first..p_plan_version_id_tbl.last LOOP
5626 l_plan_version_id := NULL;
5627
5628 IF ( ( p_plan_version_id_tbl.EXISTS(i))
5629 ) THEN
5630 l_plan_version_id := p_plan_version_id_tbl(i);
5631
5632 l_child_task_check := 0;
5633
5634 BEGIN
5635 l_wbs_version_id:=NULL;
5636
5637 SELECT DISTINCT wbs_version_id INTO l_wbs_version_id -- Added distinct for bug # 14757202
5638 FROM pji_pjp_wbs_header
5639 WHERE plan_version_id = l_plan_version_id
5640 AND project_id = p_project_id;
5641 EXCEPTION
5642 WHEN NO_DATA_FOUND THEN
5643 NULL;
5644 END;
5645
5646 IF (l_wbs_version_id IS NOT NULL)
5647 THEN
5648 SELECT COUNT(*)
5649 INTO l_child_task_check
5650 FROM pa_object_relationships por
5651 WHERE por.object_id_from1 = l_wbs_version_id
5652 AND por.relationship_type = 'S'
5653 AND rownum = 1;
5654
5655 IF (l_child_task_check = 0)
5656 THEN
5657 l_child_exist := FALSE;
5658 ELSE
5659 l_child_exist := TRUE;
5660 EXIT;
5661 END IF;
5662 END IF; -- execute only if plan version is not null
5663
5664 /* Commented for bug 3899810
5665 IF (NVL(l_child_task_check,0) <> 0 ) THEN
5666 EXIT;
5667 END IF;
5668 */
5669 END IF;
5670
5671 END LOOP;
5672 /* till here for bug 3899810 */
5673
5674 /* If structure not found for the lowest task then come out the procedure otherwies
5675 process further */
5676
5677 -- IF (l_child_task_check = 0) THEN
5678 IF (NOT l_child_exist) THEN -- added for bug 3899810 false
5679
5680 pji_rep_util.Add_Message(p_app_short_name=> 'PJI',
5681 p_msg_name=> 'PJI_REP_NO_TASK_DEFINED',
5682 p_msg_type=>Pji_Rep_Util.G_RET_STS_WARNING);
5683
5684
5685 RETURN;
5686
5687 END IF;
5688
5689 END IF; -- Added this Count end if for bug 3899810
5690
5691
5692 /* End Bug#3740751 */
5693
5694
5695
5696 <<OUTER>>
5697 FOR i IN 1..p_plan_version_id_tbl.COUNT LOOP
5698
5699 FOR rec IN c_pending_plan_events( p_plan_version_id_tbl(i)) LOOP
5700
5701 proces_event_pvt (
5702 p_event_id => rec.EVENT_ID,
5703 p_event_type => rec.EVENT_TYPE,
5704 x_processing_code => x_processing_code,
5705 x_return_status => x_return_status,
5706 x_msg_data => x_msg_data );
5707
5708 IF x_processing_code = 'F' THEN
5709 EXIT OUTER;
5710 END IF;
5711 END LOOP;
5712
5713 --Logic for WBS events
5714 FOR rec IN c_pending_wbs_events( p_plan_version_id_tbl(i)) LOOP
5715
5716 proces_event_pvt (
5717 p_event_id => rec.EVENT_ID,
5718 p_event_type => rec.EVENT_TYPE,
5719 x_processing_code => x_processing_code,
5720 x_return_status => x_return_status,
5721 x_msg_data => x_msg_data );
5722
5723 IF x_processing_code = 'F' THEN
5724 EXIT OUTER;
5725 END IF;
5726 END LOOP;
5727
5728
5729 /* PLAN_UPDATE_PVT
5730 ( p_plan_version_id => p_plan_version_id_tbl(i),
5731 x_processing_code => x_processing_code,
5732 x_return_status => x_return_status );*/
5733
5734 IF x_processing_code = 'F' THEN
5735 EXIT;
5736 END IF;
5737
5738 END LOOP;
5739
5740 COMMIT;
5741
5742 EXCEPTION
5743 WHEN OTHERS THEN
5744 x_msg_data := SQLERRM;
5745 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
5746 ( p_package_name => g_package_name
5747 , p_procedure_name => 'PROCESS_PLAN_EVENTS'
5748 , x_return_status => x_return_status ) ;
5749
5750 RAISE;
5751 END;
5752
5753
5754 --
5755 -- Create on demand slices.
5756 --
5757 PROCEDURE maintain_smart_slice (
5758 p_rbs_version_id IN NUMBER :=NULL,
5759 p_plan_version_id_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
5760 p_wbs_element_id IN NUMBER,
5761 p_rbs_element_id IN NUMBER,
5762 p_prg_rollup_flag IN VARCHAR2,
5763 p_curr_record_type_id IN NUMBER,
5764 p_calendar_type IN VARCHAR2,
5765 p_wbs_version_id IN NUMBER,
5766 p_commit IN VARCHAR2 := 'Y',
5767 p_rbs_version_id_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
5768 x_msg_count OUT NOCOPY NUMBER,
5769 x_msg_data OUT NOCOPY VARCHAR2,
5770 x_return_status OUT NOCOPY VARCHAR2) IS
5771
5772 -- l_fact_act_rlp_exists VARCHAR2(1) := 'N';
5773 -- l_rollup_status_exists VARCHAR2(1) := 'N';
5774 l_exists VARCHAR2(1) := 'N';
5775 l_struct_element_id NUMBER := -1;
5776 l_project_id NUMBER := 1;
5777 l_proj_element_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5778 l_plan_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5779 l_plan_type_code_tbl SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
5780 l_project_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5781 l_wbs_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5782 l_count NUMBER := 1;
5783
5784 l_last_update_date date := SYSDATE;
5785 l_last_updated_by NUMBER := FND_GLOBAL.USER_ID;
5786 l_creation_date date := SYSDATE;
5787 l_created_by NUMBER := FND_GLOBAL.USER_ID;
5788 l_last_update_login NUMBER := FND_GLOBAL.LOGIN_ID;
5789 il_plan_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5790 il_plan_type_code_tbl SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type(); /*4471527 */
5791 il_project_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5792 il_wbs_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5793 l_prg_plan_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5794 l_prg_plan_type_code_tbl SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type(); /*4471527 */
5795 l_prg_project_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5796 l_prg_wbs_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5797 l_prg_count NUMBER := 1;
5798 l_roll_wbs_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5799 l_get_wbs_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5800 l_get_plan_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5801 l_get_plan_type_code_tbl SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type(); /*4471527 */
5802 l_wbs_count NUMBER:=2;
5803 l_wbs_exists NUMBER :=0;
5804 validcount NUMBER:=1;
5805 jl_get_plan_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /*4471527 */
5806 jl_get_plan_type_code_tbl SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type(); /*4471527 */
5807 jl_get_wbs_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /*4471527 */
5808 l_rbs_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5809
5810 -- OLAP START
5811
5812 l_pjt_rollup_enabled_flag varchar2(1) ;
5813
5814 l_new_status varchar2(1);
5815 l_new_msg_count number;
5816 l_new_msg_data varchar2(250);
5817 l_new_rbs_version_id number ;
5818
5819 -- OLAP END
5820
5821 BEGIN
5822
5823 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
5824 ( p_package_name => g_package_name
5825 , x_return_status => x_return_status );
5826 /* overriding the parameter p_rbs_version_id for Public API with PLSQl table */
5827 IF ( p_rbs_version_id is NOT NULL) THEN
5828 l_rbs_version_id_tbl.EXTEND;
5829 l_rbs_version_id_tbl(1) := p_rbs_version_id;
5830 else
5831 FOR i IN 1..p_rbs_version_id_tbl.COUNT LOOP
5832 l_rbs_version_id_tbl.EXTEND;
5833 l_rbs_version_id_tbl(i) := p_rbs_version_id_tbl(i);
5834 end loop;
5835 end if;
5836
5837 IF g_debug_mode='Y' THEN
5838 -- write_log ( ' maintain smart slice .. 0001 :p_wbs_version_id'||p_wbs_version_id ||'p_rbs_version_id'||p_rbs_version_id||'p_prg_rollup_flag'||p_prg_rollup_flag);
5839 Pji_Utils.write2log('maintain smart slice .. 0001 :p_wbs_version_id'||p_wbs_version_id ||
5840 'p_rbs_version_id'||p_rbs_version_id||'p_prg_rollup_flag'||p_prg_rollup_flag,null,3);
5841 end if;
5842 IF (l_rbs_version_id_tbl.COUNT=0) THEN
5843 Pji_Utils.write2log('p_rbs_version_id is NULL. Nothing to rollup by. Returning.',null,3);
5844 RETURN;
5845 END IF;
5846
5847 BEGIN
5848 SELECT
5849 PROJ_ELEMENT_ID, project_id
5850 INTO
5851 l_struct_element_id, l_project_id
5852 FROM
5853 pa_proj_element_versions
5854 WHERE
5855 ELEMENT_VERSION_ID = p_wbs_version_id;
5856 EXCEPTION
5857 WHEN NO_DATA_FOUND THEN
5858 NULL;
5859 END;
5860
5861 -- OLAP START
5862
5863 select p.pjt_rollup_enabled_flag
5864 into l_pjt_rollup_enabled_flag
5865 from pa_projects_all p
5866 where l_project_id = p.project_id ;
5867
5868
5869 -- OLAP END
5870
5871
5872 -- OLAP START
5873
5874
5875
5876
5877 if l_pjt_rollup_enabled_flag = 'Y' then
5878
5879 FOR i IN 1..p_plan_version_id_tbl.COUNT LOOP
5880
5881
5882
5883 begin
5884
5885 select fpo.rbs_version_id
5886 into l_new_rbs_version_id
5887 from pa_budget_versions b , pa_proj_fp_options fpo
5888 where b.budget_version_id =p_plan_version_id_tbl(i)
5889 AND b.fin_plan_type_id = fpo.fin_plan_type_id
5890 AND b.budget_version_id = fpo.fin_plan_version_id
5891 AND b.project_id = fpo.project_id
5892 AND fpo.fin_plan_option_level_code = 'PLAN_VERSION' ;
5893
5894
5895
5896
5897
5898 -- if ( l_struct_element_id <> p_wbs_element_id ) then
5899
5900 PA_ppr_rollup_PVT.plan_rollup(
5901 p_commit => 'N'
5902 ,p_calling_mode => 'CREATE'
5903 ,p_fact_slice => 'WBS_TO_RBS'
5904 ,p_debug_mode => 'N'
5905 ,p_project_id => l_project_id
5906 ,p_budget_version_id => p_plan_version_id_tbl(i)
5907 ,p_rbs_version_id => l_new_rbs_version_id
5908 ,p_cbs_version_id => -1
5909 ,p_proj_element_id => p_wbs_element_id
5910 ,p_rbs_element_id => -1
5911 ,p_cbs_element_id => -1
5912 ,x_return_status => l_new_status
5913 ,x_msg_count => l_new_msg_count
5914 ,x_msg_data => l_new_msg_data
5915 ) ;
5916
5917 -- end if;
5918
5919 -- If ( p_rbs_element_id is not null ) then
5920
5921 PA_ppr_rollup_PVT.plan_rollup(
5922 p_commit => 'N'
5923 ,p_calling_mode => 'CREATE'
5924 ,p_fact_slice => 'RBS_TO_WBS'
5925 ,p_debug_mode => 'N'
5926 ,p_project_id => l_project_id
5927 ,p_budget_version_id => p_plan_version_id_tbl(i)
5928 ,p_rbs_version_id => l_new_rbs_version_id
5929 ,p_cbs_version_id => -1
5930 ,p_proj_element_id => -1
5931 ,p_rbs_element_id => p_rbs_element_id
5932 ,p_cbs_element_id => -1
5933 ,x_return_status => l_new_status
5934 ,x_msg_count => l_new_msg_count
5935 ,x_msg_data => l_new_msg_data
5936 ) ;
5937
5938
5939 -- end if ;
5940
5941
5942 if ( l_struct_element_id = p_wbs_element_id or p_wbs_element_id is null ) then
5943
5944 PA_ppr_rollup_PVT.plan_rollup(
5945 p_commit => 'N'
5946 ,p_calling_mode => 'CREATE'
5947 ,p_fact_slice => 'RBS'
5948 ,p_debug_mode => 'N'
5949 ,p_project_id => l_project_id
5950 ,p_budget_version_id => p_plan_version_id_tbl(i)
5951 ,p_rbs_version_id => l_new_rbs_version_id
5952 ,p_cbs_version_id => -1
5953 ,p_proj_element_id => -1
5954 ,p_rbs_element_id => -1
5955 ,p_cbs_element_id => -1
5956 ,x_return_status => l_new_status
5957 ,x_msg_count => l_new_msg_count
5958 ,x_msg_data => l_new_msg_data
5959 ) ;
5960
5961 end if;
5962
5963
5964 exception
5965 when no_data_found then
5966 null;
5967 when others then
5968 raise;
5969 end ;
5970
5971 END LOOP;
5972
5973
5974
5975 IF p_commit = 'Y' THEN
5976 COMMIT;
5977 END IF;
5978
5979 IF g_debug_mode='Y' THEN
5980 Pji_Utils.write2log(' maintain smart slice .. NEW MODEL END ' ,null,3);
5981 end if;
5982
5983 return ; -- NO NEED TO EXECUTE THE BELOW CODE
5984
5985 end if ; -- l_pjt_rollup_enabled_flag = 'Y'
5986
5987
5988 -- OLAP END
5989
5990 /* Based on the input plan version id of the parent project getting all the corresponding wbs_version_ids */
5991 FOR i IN 1..p_plan_version_id_tbl.COUNT LOOP
5992 BEGIN
5993 select distinct head.wbs_version_id,head.plan_version_id,head.plan_type_code BULK COLLECT
5994 into jl_get_wbs_version_id_tbl,jl_get_plan_version_id_tbl,jl_get_plan_type_code_tbl /*4471527 */
5995 from pji_pjp_wbs_header head
5996 where head.plan_version_id = p_plan_version_id_tbl(i)
5997 and head.project_id in (select project_id from pji_pjp_wbs_header head1
5998 where head1.wbs_version_id=p_wbs_version_id );
5999 FOR j IN 1..jl_get_plan_version_id_tbl.COUNT LOOP
6000 l_get_plan_version_id_tbl.EXTEND;
6001 l_get_plan_version_id_tbl(validcount) := jl_get_plan_version_id_tbl(j);
6002 l_get_plan_type_code_tbl.EXTEND;
6003 l_get_plan_type_code_tbl(validcount) := jl_get_plan_type_code_tbl(j);
6004 l_get_wbs_version_id_tbl.EXTEND;
6005 l_get_wbs_version_id_tbl(validcount) := jl_get_wbs_version_id_tbl(j);
6006
6007 /* l_get_plan_version_id_tbl.EXTEND;
6008 l_get_wbs_version_id_tbl.EXTEND;
6009 l_get_plan_type_code_tbl.EXTEND;
6010 l_get_wbs_version_id_tbl(validcount) :=l_get_wbs_version_id;
6011 l_get_plan_version_id_tbl(validcount):=p_plan_version_id_tbl(i);
6012 l_get_plan_type_code_tbl(validcount):=l_get_plan_type_code; /*4471527 */
6013 validcount:=validcount+1;
6014 END LOOP;
6015 EXCEPTION
6016 WHEN NO_DATA_FOUND THEN
6017 NULL;
6018 WHEN TOO_MANY_ROWS THEN
6019 RAISE Invalid_excep;
6020 END;
6021 END LOOP;
6022 /* Converting the wbs_version_id to maxmimum allowed numbers to use in the below SQL */
6023 FOR i IN 1..31 LOOP
6024 IF ( l_get_wbs_version_id_tbl.EXISTS(i)) THEN
6025 null;
6026 ELSE
6027 l_get_wbs_version_id_tbl.EXTEND;
6028 l_get_wbs_version_id_tbl(i) := 0;
6029 END IF;
6030 END LOOP;
6031 /* Getting all the sub-project linked plan_version ids , struct_version_ids,
6032 and the project_ids for the Program Project when the the call is made in Program Mode */
6033 IF p_prg_rollup_flag='Y' THEN
6034 BEGIN
6035 SELECT distinct head.plan_version_id,head.project_id ,pji.sub_id wbs_version_id,head.plan_type_code BULK COLLECT
6036 into il_plan_version_id_tbl, il_project_id_tbl,il_wbs_version_id_tbl,il_plan_type_code_tbl /*4471527 */
6037 FROM pji_xbs_Denorm pji
6038 ,pa_proj_element_versions pa
6039 ,pji_pjp_wbs_header head
6040 WHERE pji.struct_type='PRG'
6041 and pji.sup_level<>pji.sub_level
6042 and pji.sup_id in (l_get_wbs_version_id_tbl(1),l_get_wbs_version_id_tbl(2),l_get_wbs_version_id_tbl(3)
6043 ,l_get_wbs_version_id_tbl(4),l_get_wbs_version_id_tbl(5),l_get_wbs_version_id_tbl(6)
6044 ,l_get_wbs_version_id_tbl(7),l_get_wbs_version_id_tbl(8),l_get_wbs_version_id_tbl(9)
6045 ,l_get_wbs_version_id_tbl(10),l_get_wbs_version_id_tbl(11),l_get_wbs_version_id_tbl(12)
6046 ,l_get_wbs_version_id_tbl(13),l_get_wbs_version_id_tbl(14),l_get_wbs_version_id_tbl(15)
6047 ,l_get_wbs_version_id_tbl(16),l_get_wbs_version_id_tbl(17),l_get_wbs_version_id_tbl(18)
6048 ,l_get_wbs_version_id_tbl(19),l_get_wbs_version_id_tbl(20),l_get_wbs_version_id_tbl(21)
6049 ,l_get_wbs_version_id_tbl(22),l_get_wbs_version_id_tbl(23),l_get_wbs_version_id_tbl(24)
6050 ,l_get_wbs_version_id_tbl(25),l_get_wbs_version_id_tbl(26),l_get_wbs_version_id_tbl(27)
6051 ,l_get_wbs_version_id_tbl(28),l_get_wbs_version_id_tbl(29),l_get_wbs_version_id_tbl(30)
6052 ,l_get_wbs_version_id_tbl(31))
6053 and pa.ELEMENT_VERSION_ID=pji.SUB_ID
6054 AND head.project_id=pa.project_id
6055 AND pji.sub_id=head.wbs_version_id
6056 and (head.cb_flag='Y'
6057 OR head.co_flag='Y'
6058 OR head.wp_flag='Y'
6059 OR (head.wp_flag='N' and head.plan_version_id=-1)
6060 );
6061 EXCEPTION
6062 WHEN NO_DATA_FOUND THEN Null;
6063 WHEN OTHERS THEN
6064 RAISE Invalid_excep;
6065 END;
6066 END IF;
6067 /* Adding the two PLSQL table to one which will be used as the final plsql table for processing,
6068 l_prg_plan_version_id_tbl=l_get_plan_version_id_tbl+ il_plan_version_id_tbl*/
6069 FOR i IN 1..l_get_plan_version_id_tbl.COUNT LOOP
6070 l_prg_plan_version_id_tbl.EXTEND;
6071 l_prg_plan_version_id_tbl(l_prg_count) := l_get_plan_version_id_tbl(i);
6072
6073 l_prg_plan_type_code_tbl.EXTEND;
6074 l_prg_plan_type_code_tbl(l_prg_count) := l_get_plan_type_code_tbl(i);
6075
6076 l_prg_wbs_version_id_tbl.EXTEND;
6077 l_prg_wbs_version_id_tbl(l_prg_count) := l_get_wbs_version_id_tbl(i);
6078
6079 l_prg_project_id_tbl.EXTEND;
6080 l_prg_project_id_tbl(l_prg_count) := l_project_id;
6081 IF g_debug_mode='Y' THEN
6082 Pji_Utils.write2log(' maintain smart slice11: '||l_prg_count||':l_prg_plan_version_id_tbl'||
6083 l_prg_plan_version_id_tbl(l_prg_count)||'l_prg_wbs_version_id_tbl'||l_prg_wbs_version_id_tbl(l_prg_count)||
6084 'l_prg_project_id_tbl'||l_prg_project_id_tbl(l_prg_count) ,null,3);
6085 end if;
6086 l_prg_count := l_prg_count + 1;
6087 END LOOP;
6088
6089 FOR i IN 1..il_plan_version_id_tbl.COUNT LOOP
6090 l_prg_plan_version_id_tbl.EXTEND;
6091 l_prg_plan_version_id_tbl(l_prg_count) := il_plan_version_id_tbl(i);
6092
6093 l_prg_plan_type_code_tbl.EXTEND;
6094 l_prg_plan_type_code_tbl(l_prg_count) := il_plan_type_code_tbl(i);
6095
6096 l_prg_wbs_version_id_tbl.EXTEND;
6097 l_prg_wbs_version_id_tbl(l_prg_count) := il_wbs_version_id_tbl(i);
6098
6099 l_prg_project_id_tbl.EXTEND;
6100 l_prg_project_id_tbl(l_prg_count) := il_project_id_tbl(i);
6101 IF g_debug_mode='Y' THEN
6102 Pji_Utils.write2log(' maintain smart slice11: '||l_prg_count||':l_prg_plan_version_id_tbl'||
6103 l_prg_plan_version_id_tbl(l_prg_count)||'l_prg_wbs_version_id_tbl'||l_prg_wbs_version_id_tbl(l_prg_count)||
6104 'l_prg_project_id_tbl'||l_prg_project_id_tbl(l_prg_count) ,null,3);
6105 end if;
6106 l_prg_count := l_prg_count + 1;
6107 END LOOP;
6108 /* For the list of Plan versions checking the rollup table to see if the smart slice is already created */
6109 FOR k IN 1..l_rbs_version_id_tbl.COUNT LOOP
6110 FOR i IN 1..l_prg_plan_version_id_tbl.COUNT LOOP
6111
6112 -- Reset flag values.
6113 -- l_rollup_status_exists := 'N';
6114 l_exists := 'N';
6115
6116 BEGIN
6117
6118 SELECT 'Y' -- , 'Y'
6119 INTO l_exists -- , l_rollup_status_exists
6120 FROM pji_rollup_level_status rst
6121 WHERE rst.RBS_VERSION_ID = l_rbs_version_id_tbl(k) AND
6122 rst.PLAN_VERSION_ID = l_prg_plan_version_id_tbl(i) AND
6123 rst.PLAN_TYPE_CODE = l_prg_plan_type_code_tbl(i) AND
6124 rst.project_id = l_prg_project_id_tbl(i);
6125
6126 EXCEPTION
6127 WHEN NO_DATA_FOUND THEN
6128 NULL;
6129 END;
6130 IF g_debug_mode='Y' THEN
6131 Pji_Utils.write2log(' maintain smart slice ..1.2 p_plan_version_id_tbl ('||i||') : ' || l_prg_plan_version_id_tbl(i) ,null,3);
6132 Pji_Utils.write2log(' maintain smart slice ..1.3 l_exists :' || l_exists ,null,3);
6133 end if;
6134
6135 --If smart slice does not exist create the same
6136 IF ( l_exists = 'N' ) THEN
6137 l_plan_version_id_tbl.EXTEND;
6138 l_plan_version_id_tbl(l_count) := l_prg_plan_version_id_tbl(i);
6139 l_plan_type_code_tbl.EXTEND;
6140 l_plan_type_code_tbl(l_count) := l_prg_plan_type_code_tbl(i);
6141 l_project_id_tbl.EXTEND;
6142 l_project_id_tbl(l_count) := l_prg_project_id_tbl(i);
6143 l_wbs_version_id_tbl.EXTEND;
6144 l_wbs_version_id_tbl(l_count) := l_prg_wbs_version_id_tbl(i);
6145 IF g_debug_mode='Y' THEN
6146 Pji_Utils.write2log(' maintain smart slice44: '||l_count||':l_plan_version_id_tbl'||l_plan_version_id_tbl(l_count)||'l_wbs_version_id_tbl'
6147 ||l_wbs_version_id_tbl(l_count)||'l_project_id_tbl'||l_project_id_tbl(l_count) ,null,3);
6148 end if;
6149 l_count := l_count + 1;
6150
6151 --Populate rollup level status table
6152 INSERT INTO pji_rollup_level_status (
6153 PROJECT_ID,
6154 RBS_VERSION_ID,
6155 PLAN_VERSION_ID,
6156 WBS_ELEMENT_ID,
6157 RBS_AGGR_LEVEL,
6158 WBS_ROLLUP_FLAG,
6159 PRG_ROLLUP_FLAG,
6160 CURR_RECORD_TYPE_ID,
6161 CALENDAR_TYPE,
6162 LAST_UPDATE_DATE,
6163 LAST_UPDATED_BY,
6164 CREATION_DATE,
6165 CREATED_BY,
6166 LAST_UPDATE_LOGIN,
6167 PLAN_TYPE_CODE /*4471527 */
6168 )
6169 SELECT
6170 l_prg_project_id_tbl(i) project_id,
6171 l_rbs_version_id_tbl(k) RBS_VERSION_ID,
6172 l_prg_plan_version_id_tbl(i) PLAN_VERSION_ID,
6173 -1 WBS_ELEMENT_ID,
6174 'R' RBS_AGGR_LEVEL,
6175 'Y' WBS_ROLLUP_FLAG,
6176 'N' PRG_ROLLUP_FLAG,
6177 31 CURR_RECORD_TYPE_ID,
6178 'X' CALENDAR_TYPE,
6179 l_last_update_date LAST_UPDATE_DATE,
6180 l_last_updated_by LAST_UPDATED_BY,
6181 l_creation_date CREATION_DATE,
6182 l_created_by CREATED_BY,
6183 l_last_update_login LAST_UPDATE_LOGIN,
6184 l_prg_plan_type_code_tbl(i) PLAN_TYPE_CODE /*4471527 */
6185 FROM dual;
6186
6187 END IF;
6188
6189 END LOOP;
6190 END LOOP; /* En dof K loop for RBS version_id*/
6191 -- This code will remove all the duplicate entries from l_wbs_version_id_tbl which will be used to do the WBS and XBS rollup
6192 BEGIN
6193 FOR j IN 1..l_wbs_version_id_tbl.COUNT LOOP
6194 if j=1 then
6195 l_roll_wbs_version_id_tbl.EXTEND;
6196 l_roll_wbs_version_id_tbl(j) := l_wbs_version_id_tbl(j);
6197 end if;
6198 FOR i IN 1..l_roll_wbs_version_id_tbl.COUNT LOOP
6199 if l_roll_wbs_version_id_tbl(i) = l_wbs_version_id_tbl(j)
6200 and j>1 then
6201 l_wbs_exists:=1;
6202 exit;
6203 else
6204 l_wbs_exists:=0;
6205 END IF;
6206 END LOOP;
6207 IF l_wbs_exists <>1 and j<>1 THEN
6208 l_roll_wbs_version_id_tbl.EXTEND;
6209 l_roll_wbs_version_id_tbl(l_wbs_count) := l_wbs_version_id_tbl(j);
6210 l_wbs_count := l_wbs_count + 1;
6211 END IF;
6212 END LOOP;
6213 END;
6214
6215 CLEANUP_TEMP_TABLES;
6216
6217 PJI_FM_PLAN_MAINT_T_PVT.EXTRACT_FIN_PLAN_VERSIONS(
6218 p_fp_version_ids => l_plan_version_id_tbl
6219 , p_slice_type => 'PRI'
6220 );
6221 IF g_debug_mode='Y' THEN
6222 Pji_Utils.write2log(' maintain smart slice44.02:PJI_FM_PLAN_MAINT_T_PVT.EXTRACT_FIN_PLAN_VERSIONS' ,null,3);
6223 end if;
6224
6225 IF g_debug_mode='Y' THEN
6226 Pji_Utils.write2log(' maintain smart slice55:l_plan_version_id_tbl.COUNT: '||l_plan_version_id_tbl.COUNT||
6227 '::l_roll_wbs_version_id_tbl.COUNT: '||l_roll_wbs_version_id_tbl.COUNT ,null,3);
6228 end if;
6229 --Inserting 'L' 'N' 'N' / 'L' 'N' 'Y' slices
6230 FOR k IN 1..l_rbs_version_id_tbl.COUNT LOOP
6231 FORALL j IN 1..l_plan_version_id_tbl.COUNT
6232
6233 INSERT INTO pji_fp_aggr_pjp1_t (
6234 WORKER_ID,
6235 PRG_LEVEL,
6236 PROJECT_ID,
6237 PROJECT_ORG_ID,
6238 PROJECT_ORGANIZATION_ID,
6239 PROJECT_ELEMENT_ID,
6240 TIME_ID, PERIOD_TYPE_ID,
6241 CALENDAR_TYPE,
6242 RBS_AGGR_LEVEL,
6243 WBS_ROLLUP_FLAG,
6244 PRG_ROLLUP_FLAG,
6245 CURR_RECORD_TYPE_ID,
6246 CURRENCY_CODE,
6247 RBS_ELEMENT_ID,
6248 RBS_VERSION_ID,
6249 PLAN_VERSION_ID,
6250 PLAN_TYPE_ID,
6251 RAW_COST,
6252 BRDN_COST,
6253 REVENUE,
6254 BILL_RAW_COST,
6255 BILL_BRDN_COST,
6256 BILL_LABOR_RAW_COST,
6257 BILL_LABOR_BRDN_COST,
6258 BILL_LABOR_HRS,
6259 EQUIPMENT_RAW_COST,
6260 EQUIPMENT_BRDN_COST,
6261 CAPITALIZABLE_RAW_COST,
6262 CAPITALIZABLE_BRDN_COST,
6263 LABOR_RAW_COST,
6264 LABOR_BRDN_COST,
6265 LABOR_HRS,
6266 LABOR_REVENUE,
6267 EQUIPMENT_HOURS,
6268 BILLABLE_EQUIPMENT_HOURS,
6269 SUP_INV_COMMITTED_COST,
6270 PO_COMMITTED_COST,
6271 PR_COMMITTED_COST,
6272 OTH_COMMITTED_COST,
6273 ACT_LABOR_HRS,
6274 ACT_EQUIP_HRS,
6275 ACT_LABOR_BRDN_COST,
6276 ACT_EQUIP_BRDN_COST,
6277 ACT_BRDN_COST,
6278 ACT_RAW_COST,
6279 ACT_REVENUE,
6280 ACT_LABOR_RAW_COST,
6281 ACT_EQUIP_RAW_COST,
6282 ETC_LABOR_HRS,
6283 ETC_EQUIP_HRS,
6284 ETC_LABOR_BRDN_COST,
6285 ETC_EQUIP_BRDN_COST,
6286 ETC_BRDN_COST,
6287 ETC_RAW_COST,
6288 ETC_LABOR_RAW_COST,
6289 ETC_EQUIP_RAW_COST,
6290 CUSTOM1,
6291 CUSTOM2,
6292 CUSTOM3,
6293 CUSTOM4,
6294 CUSTOM5,
6295 CUSTOM6,
6296 CUSTOM7,
6297 CUSTOM8,
6298 CUSTOM9,
6299 CUSTOM10,
6300 CUSTOM11,
6301 CUSTOM12,
6302 CUSTOM13,
6303 CUSTOM14,
6304 CUSTOM15 ,
6305 PLAN_TYPE_CODE) /*4471527 */
6306 SELECT
6307 -1,
6308 0,
6309 fact.PROJECT_ID,
6310 fact.PROJECT_ORG_ID,
6311 fact.PROJECT_ORGANIZATION_ID,
6312 fact.PROJECT_ELEMENT_ID,
6313 fact.TIME_ID,
6314 fact.PERIOD_TYPE_ID,
6315 fact.CALENDAR_TYPE,
6316 fact.RBS_AGGR_LEVEL,
6317 fact.WBS_ROLLUP_FLAG,
6318 fact.PRG_ROLLUP_FLAG,
6319 fact.CURR_RECORD_TYPE_ID,
6320 fact.CURRENCY_CODE,
6321 fact.RBS_ELEMENT_ID,
6322 fact.RBS_VERSION_ID,
6323 fact.PLAN_VERSION_ID,
6324 fact.PLAN_TYPE_ID,
6325 fact.RAW_COST,
6326 fact.BRDN_COST,
6327 fact.REVENUE,
6328 fact.BILL_RAW_COST,
6329 fact.BILL_BRDN_COST,
6330 fact.BILL_LABOR_RAW_COST,
6331 fact.BILL_LABOR_BRDN_COST,
6332 fact.BILL_LABOR_HRS,
6333 fact.EQUIPMENT_RAW_COST,
6334 fact.EQUIPMENT_BRDN_COST,
6335 fact.CAPITALIZABLE_RAW_COST,
6336 fact.CAPITALIZABLE_BRDN_COST,
6337 fact.LABOR_RAW_COST,
6338 fact.LABOR_BRDN_COST,
6339 fact.LABOR_HRS,
6340 fact.LABOR_REVENUE,
6341 fact.EQUIPMENT_HOURS,
6342 fact.BILLABLE_EQUIPMENT_HOURS,
6343 fact.SUP_INV_COMMITTED_COST,
6344 fact.PO_COMMITTED_COST,
6345 fact.PR_COMMITTED_COST,
6346 fact.OTH_COMMITTED_COST,
6347 fact.ACT_LABOR_HRS,
6348 fact.ACT_EQUIP_HRS,
6349 fact.ACT_LABOR_BRDN_COST,
6350 fact.ACT_EQUIP_BRDN_COST,
6351 fact.ACT_BRDN_COST,
6352 fact.ACT_RAW_COST,
6353 fact.ACT_REVENUE,
6354 fact.ACT_LABOR_RAW_COST,
6355 fact.ACT_EQUIP_RAW_COST,
6356 fact.ETC_LABOR_HRS,
6357 fact.ETC_EQUIP_HRS,
6358 fact.ETC_LABOR_BRDN_COST,
6359 fact.ETC_EQUIP_BRDN_COST,
6360 fact.ETC_BRDN_COST,
6361 fact.ETC_RAW_COST,
6362 fact.ETC_LABOR_RAW_COST,
6363 fact.ETC_EQUIP_RAW_COST,
6364 fact.CUSTOM1,
6365 fact.CUSTOM2,
6366 fact.CUSTOM3,
6367 fact.CUSTOM4,
6368 fact.CUSTOM5,
6369 fact.CUSTOM6,
6370 fact.CUSTOM7,
6371 fact.CUSTOM8,
6372 fact.CUSTOM9,
6373 fact.CUSTOM10,
6374 fact.CUSTOM11,
6375 fact.CUSTOM12,
6376 fact.CUSTOM13,
6377 fact.CUSTOM14,
6378 fact.CUSTOM15,
6379 fact.PLAN_TYPE_CODE /*4471527 */
6380 FROM
6381 pji_fp_xbs_accum_f fact,
6382 pji_pjp_wbs_header head
6383 WHERE
6384 fact.RBS_AGGR_LEVEL = 'L' AND
6385 fact.WBS_ROLLUP_FLAG = 'N' AND
6386 fact.PRG_ROLLUP_FLAG in ('Y', 'N') AND
6387 fact.PROJECT_ID = head.PROJECT_ID AND
6388 fact.PLAN_VERSION_ID = head.PLAN_VERSION_ID AND
6389 fact.PLAN_TYPE_CODE = head.PLAN_TYPE_CODE AND /*4471527 */
6390 decode(fact.PLAN_VERSION_ID,
6391 -3, fact.PLAN_TYPE_ID,
6392 -4, fact.PLAN_TYPE_ID,
6393 -1) = decode(fact.PLAN_VERSION_ID,
6394 -3, head.PLAN_TYPE_ID,
6395 -4, head.PLAN_TYPE_ID,
6396 -1) AND
6397 head.WBS_VERSION_ID = l_wbs_version_id_tbl(j) AND
6398 head.project_id = l_project_id_tbl(j) AND
6399 fact.rbs_version_id = l_rbs_version_id_tbl(k) AND
6400 head.PLAN_VERSION_ID = l_plan_version_id_tbl(j) AND
6401 head.PLAN_TYPE_CODE = l_plan_type_code_tbl(j) ;
6402 END LOOP;/* end of RBS loop*/
6403
6404 IF g_debug_mode='Y' THEN
6405 Pji_Utils.write2log(' Inserted L N N / L N Y slices ' || SQL%ROWCOUNT ,null,3);
6406 end if;
6407
6408 --WBS rollup for LNN / LNY slices
6409 FORALL j IN 1..l_roll_wbs_version_id_tbl.COUNT
6410 INSERT INTO pji_fp_aggr_pjp1_t (
6411 WORKER_ID,
6412 PRG_LEVEL,
6413 PROJECT_ID,
6414 PROJECT_ORG_ID,
6415 PROJECT_ORGANIZATION_ID,
6416 PROJECT_ELEMENT_ID,
6417 TIME_ID,
6418 PERIOD_TYPE_ID,
6419 CALENDAR_TYPE,
6420 RBS_AGGR_LEVEL,
6421 WBS_ROLLUP_FLAG,
6422 PRG_ROLLUP_FLAG,
6423 CURR_RECORD_TYPE_ID,
6424 CURRENCY_CODE,
6425 RBS_ELEMENT_ID,
6426 RBS_VERSION_ID,
6427 PLAN_VERSION_ID,
6428 PLAN_TYPE_ID,
6429 RAW_COST,
6430 BRDN_COST,
6431 REVENUE,
6432 BILL_RAW_COST,
6433 BILL_BRDN_COST,
6434 BILL_LABOR_RAW_COST,
6435 BILL_LABOR_BRDN_COST,
6436 BILL_LABOR_HRS,
6437 EQUIPMENT_RAW_COST,
6438 EQUIPMENT_BRDN_COST,
6439 CAPITALIZABLE_RAW_COST,
6440 CAPITALIZABLE_BRDN_COST,
6441 LABOR_RAW_COST,
6442 LABOR_BRDN_COST,
6443 LABOR_HRS,
6444 LABOR_REVENUE,
6445 EQUIPMENT_HOURS,
6446 BILLABLE_EQUIPMENT_HOURS,
6447 SUP_INV_COMMITTED_COST,
6448 PO_COMMITTED_COST,
6449 PR_COMMITTED_COST,
6450 OTH_COMMITTED_COST,
6451 ACT_LABOR_HRS,
6452 ACT_EQUIP_HRS,
6453 ACT_LABOR_BRDN_COST,
6454 ACT_EQUIP_BRDN_COST,
6455 ACT_BRDN_COST,
6456 ACT_RAW_COST,
6457 ACT_REVENUE,
6458 ACT_LABOR_RAW_COST,
6459 ACT_EQUIP_RAW_COST,
6460 ETC_LABOR_HRS,
6461 ETC_EQUIP_HRS,
6462 ETC_LABOR_BRDN_COST,
6463 ETC_EQUIP_BRDN_COST,
6464 ETC_BRDN_COST,
6465 ETC_RAW_COST,
6466 ETC_LABOR_RAW_COST,
6467 ETC_EQUIP_RAW_COST,
6468 CUSTOM1,
6469 CUSTOM2,
6470 CUSTOM3,
6471 CUSTOM4,
6472 CUSTOM5,
6473 CUSTOM6,
6474 CUSTOM7,
6475 CUSTOM8,
6476 CUSTOM9,
6477 CUSTOM10,
6478 CUSTOM11,
6479 CUSTOM12,
6480 CUSTOM13,
6481 CUSTOM14,
6482 CUSTOM15,
6483 PLAN_TYPE_CODE ) /*4471527 */
6484 SELECT /*+ ORDERED INDEX(XBS PJI_XBS_DENORM_N2) */
6485 1,
6486 0,
6487 fact.PROJECT_ID,
6488 fact.PROJECT_ORG_ID,
6489 fact.PROJECT_ORGANIZATION_ID,
6490 xbs.SUP_EMT_ID,
6491 fact.TIME_ID,
6492 fact.PERIOD_TYPE_ID,
6493 fact.CALENDAR_TYPE,
6494 fact.RBS_AGGR_LEVEL,
6495 'Y', --fact.WBS_ROLLUP_FLAG,
6496 fact.PRG_ROLLUP_FLAG,
6497 fact.CURR_RECORD_TYPE_ID,
6498 fact.CURRENCY_CODE,
6499 fact.RBS_ELEMENT_ID,-- rbs.SUP_ID,
6500 fact.RBS_VERSION_ID,
6501 fact.PLAN_VERSION_ID,
6502 fact.PLAN_TYPE_ID,
6503 SUM(fact.RAW_COST),
6504 SUM(fact.BRDN_COST),
6505 SUM(fact.REVENUE),
6506 SUM(fact.BILL_RAW_COST),
6507 SUM(fact.BILL_BRDN_COST),
6508 SUM(fact.BILL_LABOR_RAW_COST),
6509 SUM(fact.BILL_LABOR_BRDN_COST),
6510 SUM(fact.BILL_LABOR_HRS),
6511 SUM(fact.EQUIPMENT_RAW_COST),
6512 SUM(fact.EQUIPMENT_BRDN_COST),
6513 SUM(fact.CAPITALIZABLE_RAW_COST),
6514 SUM(fact.CAPITALIZABLE_BRDN_COST),
6515 SUM(fact.LABOR_RAW_COST),
6516 SUM(fact.LABOR_BRDN_COST),
6517 SUM(fact.LABOR_HRS),
6518 SUM(fact.LABOR_REVENUE),
6519 SUM(fact.EQUIPMENT_HOURS),
6520 SUM(fact.BILLABLE_EQUIPMENT_HOURS),
6521 SUM(fact.SUP_INV_COMMITTED_COST),
6522 SUM(fact.PO_COMMITTED_COST),
6523 SUM(fact.PR_COMMITTED_COST),
6524 SUM(fact.OTH_COMMITTED_COST),
6525 SUM(fact.ACT_LABOR_HRS ),
6526 SUM(fact.ACT_EQUIP_HRS ),
6527 SUM(fact.ACT_LABOR_BRDN_COST ),
6528 SUM(fact.ACT_EQUIP_BRDN_COST ),
6529 SUM(fact.ACT_BRDN_COST ),
6530 SUM(fact.ACT_RAW_COST ),
6531 SUM(fact.ACT_REVENUE ),
6532 SUM(fact.ACT_LABOR_RAW_COST),
6533 SUM(fact.ACT_EQUIP_RAW_COST),
6534 SUM(fact.ETC_LABOR_HRS ),
6535 SUM(fact.ETC_EQUIP_HRS ),
6536 SUM(fact.ETC_LABOR_BRDN_COST ),
6537 SUM(fact.ETC_EQUIP_BRDN_COST ),
6538 SUM(fact.ETC_BRDN_COST ),
6539 SUM(fact.ETC_RAW_COST ),
6540 SUM(fact.ETC_LABOR_RAW_COST),
6541 SUM(fact.ETC_EQUIP_RAW_COST),
6542 SUM(fact.CUSTOM1),
6543 SUM(fact.CUSTOM2),
6544 SUM(fact.CUSTOM3),
6545 SUM(fact.CUSTOM4),
6546 SUM(fact.CUSTOM5),
6547 SUM(fact.CUSTOM6),
6548 SUM(fact.CUSTOM7),
6549 SUM(fact.CUSTOM8),
6550 SUM(fact.CUSTOM9),
6551 SUM(fact.CUSTOM10),
6552 SUM(fact.CUSTOM11),
6553 SUM(fact.CUSTOM12),
6554 SUM(fact.CUSTOM13),
6555 SUM(fact.CUSTOM14),
6556 SUM(fact.CUSTOM15),
6557 fact.PLAN_TYPE_CODE /*4471527 */
6558 FROM
6559 pji_fp_aggr_pjp1_t fact,
6560 pji_pjp_wbs_header head,
6561 pji_xbs_denorm xbs
6562 WHERE
6563 xbs.STRUCT_VERSION_ID = head.WBS_VERSION_ID AND
6564 xbs.STRUCT_TYPE = 'WBS' AND
6565 xbs.SUP_LEVEL <> xbs.SUB_LEVEL AND
6566 xbs.SUB_EMT_ID = fact.PROJECT_ELEMENT_ID AND
6567 fact.PROJECT_ID = head.PROJECT_ID AND
6568 fact.PLAN_VERSION_ID = head.PLAN_VERSION_ID AND
6569 fact.PLAN_TYPE_CODE = head.PLAN_TYPE_CODE AND /*4471527 */
6570 head.WBS_VERSION_ID = l_roll_wbs_version_id_tbl(j) AND
6571 decode(fact.PLAN_VERSION_ID,
6572 -3, fact.PLAN_TYPE_ID,
6573 -4, fact.PLAN_TYPE_ID,
6574 -1) = decode(fact.PLAN_VERSION_ID,
6575 -3, head.PLAN_TYPE_ID,
6576 -4, head.PLAN_TYPE_ID,
6577 -1)
6578 GROUP BY
6579 fact.PROJECT_ID,
6580 fact.PROJECT_ORG_ID,
6581 fact.PROJECT_ORGANIZATION_ID,
6582 xbs.SUP_EMT_ID,
6583 fact.TIME_ID,
6584 fact.PERIOD_TYPE_ID,
6585 fact.CALENDAR_TYPE,
6586 fact.RBS_AGGR_LEVEL,
6587 'Y', --fact.WBS_ROLLUP_FLAG,
6588 fact.PRG_ROLLUP_FLAG,
6589 fact.CURR_RECORD_TYPE_ID,
6590 fact.CURRENCY_CODE,
6591 fact.RBS_ELEMENT_ID,-- rbs.SUP_ID,
6592 fact.RBS_VERSION_ID,
6593 fact.PLAN_VERSION_ID,
6594 fact.PLAN_TYPE_ID,
6595 fact.PLAN_TYPE_CODE; /*4471527 */
6596
6597
6598 IF g_debug_mode='Y' THEN
6599 Pji_Utils.write2log(' Inserted WBS rollup L N N / L N Y slices ' || SQL%ROWCOUNT ,null,3);
6600 end if;
6601
6602 --XBS Rollup for WBS slice
6603 FORALL j IN 1..l_roll_wbs_version_id_tbl.COUNT
6604 INSERT INTO pji_fp_aggr_pjp1_t (
6605 WORKER_ID,
6606 PRG_LEVEL,
6607 PROJECT_ID,
6608 PROJECT_ORG_ID,
6609 PROJECT_ORGANIZATION_ID,
6610 PROJECT_ELEMENT_ID,
6611 TIME_ID,
6612 PERIOD_TYPE_ID,
6613 CALENDAR_TYPE,
6614 RBS_AGGR_LEVEL,
6615 WBS_ROLLUP_FLAG,
6616 PRG_ROLLUP_FLAG,
6617 CURR_RECORD_TYPE_ID,
6618 CURRENCY_CODE,
6619 RBS_ELEMENT_ID,
6620 RBS_VERSION_ID,
6621 PLAN_VERSION_ID,
6622 PLAN_TYPE_ID,
6623 RAW_COST,
6624 BRDN_COST,
6625 REVENUE,
6626 BILL_RAW_COST,
6627 BILL_BRDN_COST,
6628 BILL_LABOR_RAW_COST,
6629 BILL_LABOR_BRDN_COST,
6630 BILL_LABOR_HRS,
6631 EQUIPMENT_RAW_COST,
6632 EQUIPMENT_BRDN_COST,
6633 CAPITALIZABLE_RAW_COST,
6634 CAPITALIZABLE_BRDN_COST,
6635 LABOR_RAW_COST,
6636 LABOR_BRDN_COST,
6637 LABOR_HRS,
6638 LABOR_REVENUE,
6639 EQUIPMENT_HOURS,
6640 BILLABLE_EQUIPMENT_HOURS,
6641 SUP_INV_COMMITTED_COST,
6642 PO_COMMITTED_COST,
6643 PR_COMMITTED_COST,
6644 OTH_COMMITTED_COST,
6645 ACT_LABOR_HRS,
6646 ACT_EQUIP_HRS,
6647 ACT_LABOR_BRDN_COST,
6648 ACT_EQUIP_BRDN_COST,
6649 ACT_BRDN_COST,
6650 ACT_RAW_COST,
6651 ACT_REVENUE,
6652 ACT_LABOR_RAW_COST,
6653 ACT_EQUIP_RAW_COST,
6654 ETC_LABOR_HRS,
6655 ETC_EQUIP_HRS,
6656 ETC_LABOR_BRDN_COST,
6657 ETC_EQUIP_BRDN_COST,
6658 ETC_BRDN_COST,
6659 ETC_RAW_COST,
6660 ETC_LABOR_RAW_COST,
6661 ETC_EQUIP_RAW_COST,
6662 CUSTOM1,
6663 CUSTOM2,
6664 CUSTOM3,
6665 CUSTOM4,
6666 CUSTOM5,
6667 CUSTOM6,
6668 CUSTOM7,
6669 CUSTOM8,
6670 CUSTOM9,
6671 CUSTOM10,
6672 CUSTOM11,
6673 CUSTOM12,
6674 CUSTOM13,
6675 CUSTOM14,
6676 CUSTOM15,
6677 PLAN_TYPE_CODE ) /*4471527 */
6678 SELECT /*+ ORDERED INDEX(XBS PJI_XBS_DENORM_N2) */
6679 1,
6680 0,
6681 fact.PROJECT_ID,
6682 fact.PROJECT_ORG_ID,
6683 fact.PROJECT_ORGANIZATION_ID,
6684 xbs.SUP_EMT_ID,
6685 fact.TIME_ID,
6686 fact.PERIOD_TYPE_ID,
6687 fact.CALENDAR_TYPE,
6688 fact.RBS_AGGR_LEVEL,
6689 'Y', --fact.WBS_ROLLUP_FLAG,
6690 fact.PRG_ROLLUP_FLAG,
6691 fact.CURR_RECORD_TYPE_ID,
6692 fact.CURRENCY_CODE,
6693 fact.RBS_ELEMENT_ID,-- rbs.SUP_ID,
6694 fact.RBS_VERSION_ID,
6695 fact.PLAN_VERSION_ID,
6696 fact.PLAN_TYPE_ID,
6697 SUM(fact.RAW_COST),
6698 SUM(fact.BRDN_COST),
6699 SUM(fact.REVENUE),
6700 SUM(fact.BILL_RAW_COST),
6701 SUM(fact.BILL_BRDN_COST),
6702 SUM(fact.BILL_LABOR_RAW_COST),
6703 SUM(fact.BILL_LABOR_BRDN_COST),
6704 SUM(fact.BILL_LABOR_HRS),
6705 SUM(fact.EQUIPMENT_RAW_COST),
6706 SUM(fact.EQUIPMENT_BRDN_COST),
6707 SUM(fact.CAPITALIZABLE_RAW_COST),
6708 SUM(fact.CAPITALIZABLE_BRDN_COST),
6709 SUM(fact.LABOR_RAW_COST),
6710 SUM(fact.LABOR_BRDN_COST),
6711 SUM(fact.LABOR_HRS),
6712 SUM(fact.LABOR_REVENUE),
6713 SUM(fact.EQUIPMENT_HOURS),
6714 SUM(fact.BILLABLE_EQUIPMENT_HOURS),
6715 SUM(fact.SUP_INV_COMMITTED_COST),
6716 SUM(fact.PO_COMMITTED_COST),
6717 SUM(fact.PR_COMMITTED_COST),
6718 SUM(fact.OTH_COMMITTED_COST),
6719 SUM(fact.ACT_LABOR_HRS ),
6720 SUM(fact.ACT_EQUIP_HRS ),
6721 SUM(fact.ACT_LABOR_BRDN_COST ),
6722 SUM(fact.ACT_EQUIP_BRDN_COST ),
6723 SUM(fact.ACT_BRDN_COST ),
6724 SUM(fact.ACT_RAW_COST ),
6725 SUM(fact.ACT_REVENUE ),
6726 SUM(fact.ACT_LABOR_RAW_COST),
6727 SUM(fact.ACT_EQUIP_RAW_COST),
6728 SUM(fact.ETC_LABOR_HRS ),
6729 SUM(fact.ETC_EQUIP_HRS ),
6730 SUM(fact.ETC_LABOR_BRDN_COST ),
6731 SUM(fact.ETC_EQUIP_BRDN_COST ),
6732 SUM(fact.ETC_BRDN_COST ),
6733 SUM(fact.ETC_RAW_COST ),
6734 SUM(fact.ETC_LABOR_RAW_COST),
6735 SUM(fact.ETC_EQUIP_RAW_COST),
6736 SUM(fact.CUSTOM1),
6737 SUM(fact.CUSTOM2),
6738 SUM(fact.CUSTOM3),
6739 SUM(fact.CUSTOM4),
6740 SUM(fact.CUSTOM5),
6741 SUM(fact.CUSTOM6),
6742 SUM(fact.CUSTOM7),
6743 SUM(fact.CUSTOM8),
6744 SUM(fact.CUSTOM9),
6745 SUM(fact.CUSTOM10),
6746 SUM(fact.CUSTOM11),
6747 SUM(fact.CUSTOM12),
6748 SUM(fact.CUSTOM13),
6749 SUM(fact.CUSTOM14),
6750 SUM(fact.CUSTOM15),
6751 fact.PLAN_TYPE_CODE /*4471527 */
6752 FROM
6753 pji_fp_aggr_pjp1_t fact,
6754 pji_pjp_wbs_header head,
6755 pji_xbs_denorm xbs
6756
6757 WHERE
6758 xbs.STRUCT_VERSION_ID = head.WBS_VERSION_ID AND
6759 xbs.STRUCT_TYPE = 'XBS' AND
6760 xbs.SUP_LEVEL <> xbs.SUB_LEVEL AND
6761 xbs.SUB_EMT_ID = fact.PROJECT_ELEMENT_ID AND
6762 fact.PROJECT_ID = head.PROJECT_ID AND
6763 fact.PLAN_VERSION_ID = head.PLAN_VERSION_ID AND
6764 fact.PLAN_TYPE_CODE = head.PLAN_TYPE_CODE AND /*4471527 */
6765 head.WBS_VERSION_ID = l_roll_wbs_version_id_tbl(j) AND
6766 decode(fact.PLAN_VERSION_ID,
6767 -3, fact.PLAN_TYPE_ID,
6768 -4, fact.PLAN_TYPE_ID,
6769 -1) = decode(fact.PLAN_VERSION_ID,
6770 -3, head.PLAN_TYPE_ID,
6771 -4, head.PLAN_TYPE_ID,
6772 -1)
6773 GROUP BY
6774 fact.PROJECT_ID,
6775 fact.PROJECT_ORG_ID,
6776 fact.PROJECT_ORGANIZATION_ID,
6777 xbs.SUP_EMT_ID,
6778 fact.TIME_ID,
6779 fact.PERIOD_TYPE_ID,
6780 fact.CALENDAR_TYPE,
6781 fact.RBS_AGGR_LEVEL,
6782 'Y', --fact.WBS_ROLLUP_FLAG,
6783 fact.PRG_ROLLUP_FLAG,
6784 fact.CURR_RECORD_TYPE_ID,
6785 fact.CURRENCY_CODE,
6786 fact.RBS_ELEMENT_ID,-- rbs.SUP_ID,
6787 fact.RBS_VERSION_ID,
6788 fact.PLAN_VERSION_ID,
6789 fact.PLAN_TYPE_ID,
6790 fact.PLAN_TYPE_CODE; /*4471527 */
6791
6792
6793
6794 IF g_debug_mode='Y' THEN
6795 Pji_Utils.write2log(' Inserted XBS rollup for WBS slices ' || SQL%ROWCOUNT ,null,3);
6796 end if;
6797 --RBS Rollup for all slices
6798 FORALL j IN 1..l_rbs_version_id_tbl.COUNT
6799 INSERT INTO pji_fp_aggr_pjp1_t (
6800 WORKER_ID,
6801 PRG_LEVEL,
6802 PROJECT_ID,
6803 PROJECT_ORG_ID,
6804 PROJECT_ORGANIZATION_ID,
6805 PROJECT_ELEMENT_ID,
6806 TIME_ID,
6807 PERIOD_TYPE_ID,
6808 CALENDAR_TYPE,
6809 RBS_AGGR_LEVEL,
6810 WBS_ROLLUP_FLAG,
6811 PRG_ROLLUP_FLAG,
6812 CURR_RECORD_TYPE_ID,
6813 CURRENCY_CODE,
6814 RBS_ELEMENT_ID,
6815 RBS_VERSION_ID,
6816 PLAN_VERSION_ID,
6817 PLAN_TYPE_ID,
6818 RAW_COST,
6819 BRDN_COST,
6820 REVENUE,
6821 BILL_RAW_COST,
6822 BILL_BRDN_COST,
6823 BILL_LABOR_RAW_COST,
6824 BILL_LABOR_BRDN_COST,
6825 BILL_LABOR_HRS,
6826 EQUIPMENT_RAW_COST,
6827 EQUIPMENT_BRDN_COST,
6828 CAPITALIZABLE_RAW_COST,
6829 CAPITALIZABLE_BRDN_COST,
6830 LABOR_RAW_COST,
6831 LABOR_BRDN_COST,
6832 LABOR_HRS,
6833 LABOR_REVENUE,
6834 EQUIPMENT_HOURS,
6835 BILLABLE_EQUIPMENT_HOURS,
6836 SUP_INV_COMMITTED_COST,
6837 PO_COMMITTED_COST,
6838 PR_COMMITTED_COST,
6839 OTH_COMMITTED_COST,
6840 ACT_LABOR_HRS,
6841 ACT_EQUIP_HRS,
6842 ACT_LABOR_BRDN_COST,
6843 ACT_EQUIP_BRDN_COST,
6844 ACT_BRDN_COST,
6845 ACT_RAW_COST,
6846 ACT_REVENUE,
6847 ACT_LABOR_RAW_COST,
6848 ACT_EQUIP_RAW_COST,
6849 ETC_LABOR_HRS,
6850 ETC_EQUIP_HRS,
6851 ETC_LABOR_BRDN_COST,
6852 ETC_EQUIP_BRDN_COST,
6853 ETC_BRDN_COST,
6854 ETC_RAW_COST,
6855 ETC_LABOR_RAW_COST,
6856 ETC_EQUIP_RAW_COST,
6857 CUSTOM1,
6858 CUSTOM2,
6859 CUSTOM3,
6860 CUSTOM4,
6861 CUSTOM5,
6862 CUSTOM6,
6863 CUSTOM7,
6864 CUSTOM8,
6865 CUSTOM9,
6866 CUSTOM10,
6867 CUSTOM11,
6868 CUSTOM12,
6869 CUSTOM13,
6870 CUSTOM14,
6871 CUSTOM15,
6872 PLAN_TYPE_CODE ) /*4471527 */
6873 SELECT
6874 1,
6875 0,
6876 fact.PROJECT_ID,
6877 fact.PROJECT_ORG_ID,
6878 fact.PROJECT_ORGANIZATION_ID,
6879 fact.PROJECT_ELEMENT_ID,
6880 fact.TIME_ID,
6881 fact.PERIOD_TYPE_ID,
6882 fact.CALENDAR_TYPE,
6883 'R', --fact.RBS_AGGR_LEVEL,
6884 fact.WBS_ROLLUP_FLAG,
6885 fact.PRG_ROLLUP_FLAG,
6886 fact.CURR_RECORD_TYPE_ID,
6887 fact.CURRENCY_CODE,
6888 rbs.SUP_ID,
6889 fact.RBS_VERSION_ID,
6890 fact.PLAN_VERSION_ID,
6891 fact.PLAN_TYPE_ID,
6892 SUM(fact.RAW_COST),
6893 SUM(fact.BRDN_COST),
6894 SUM(fact.REVENUE),
6895 SUM(fact.BILL_RAW_COST),
6896 SUM(fact.BILL_BRDN_COST),
6897 SUM(fact.BILL_LABOR_RAW_COST),
6898 SUM(fact.BILL_LABOR_BRDN_COST),
6899 SUM(fact.BILL_LABOR_HRS),
6900 SUM(fact.EQUIPMENT_RAW_COST),
6901 SUM(fact.EQUIPMENT_BRDN_COST),
6902 SUM(fact.CAPITALIZABLE_RAW_COST),
6903 SUM(fact.CAPITALIZABLE_BRDN_COST),
6904 SUM(fact.LABOR_RAW_COST),
6905 SUM(fact.LABOR_BRDN_COST),
6906 SUM(fact.LABOR_HRS),
6907 SUM(fact.LABOR_REVENUE),
6908 SUM(fact.EQUIPMENT_HOURS),
6909 SUM(fact.BILLABLE_EQUIPMENT_HOURS),
6910 SUM(fact.SUP_INV_COMMITTED_COST),
6911 SUM(fact.PO_COMMITTED_COST),
6912 SUM(fact.PR_COMMITTED_COST),
6913 SUM(fact.OTH_COMMITTED_COST),
6914 SUM(fact.ACT_LABOR_HRS ),
6915 SUM(fact.ACT_EQUIP_HRS ),
6916 SUM(fact.ACT_LABOR_BRDN_COST ),
6917 SUM(fact.ACT_EQUIP_BRDN_COST ),
6918 SUM(fact.ACT_BRDN_COST ),
6919 SUM(fact.ACT_RAW_COST ),
6920 SUM(fact.ACT_REVENUE ),
6921 SUM(fact.ACT_LABOR_RAW_COST),
6922 SUM(fact.ACT_EQUIP_RAW_COST),
6923 SUM(fact.ETC_LABOR_HRS ),
6924 SUM(fact.ETC_EQUIP_HRS ),
6925 SUM(fact.ETC_LABOR_BRDN_COST ),
6926 SUM(fact.ETC_EQUIP_BRDN_COST ),
6927 SUM(fact.ETC_BRDN_COST ),
6928 SUM(fact.ETC_RAW_COST ),
6929 SUM(fact.ETC_LABOR_RAW_COST),
6930 SUM(fact.ETC_EQUIP_RAW_COST),
6931 SUM(fact.CUSTOM1),
6932 SUM(fact.CUSTOM2),
6933 SUM(fact.CUSTOM3),
6934 SUM(fact.CUSTOM4),
6935 SUM(fact.CUSTOM5),
6936 SUM(fact.CUSTOM6),
6937 SUM(fact.CUSTOM7),
6938 SUM(fact.CUSTOM8),
6939 SUM(fact.CUSTOM9),
6940 SUM(fact.CUSTOM10),
6941 SUM(fact.CUSTOM11),
6942 SUM(fact.CUSTOM12),
6943 SUM(fact.CUSTOM13),
6944 SUM(fact.CUSTOM14),
6945 SUM(fact.CUSTOM15),
6946 fact.PLAN_TYPE_CODE /*4471527 */
6947 FROM
6948 pji_fp_aggr_pjp1_t fact,
6949 pji_rbs_denorm rbs
6950 WHERE
6951 rbs.STRUCT_VERSION_ID = l_rbs_version_id_tbl(j) AND
6952 rbs.SUP_LEVEL <> rbs.SUB_LEVEL AND
6953 rbs.SUB_ID = fact.RBS_ELEMENT_ID
6954 GROUP BY
6955 fact.PROJECT_ID,
6956 fact.PROJECT_ORG_ID,
6957 fact.PROJECT_ORGANIZATION_ID,
6958 fact.PROJECT_ELEMENT_ID,--xbs.SUB_ELEMENT_ID,
6959 fact.TIME_ID,
6960 fact.PERIOD_TYPE_ID,
6961 fact.CALENDAR_TYPE,
6962 'R',
6963 fact.WBS_ROLLUP_FLAG,
6964 fact.PRG_ROLLUP_FLAG,
6965 fact.CURR_RECORD_TYPE_ID,
6966 fact.CURRENCY_CODE,
6967 rbs.SUP_ID,
6968 fact.RBS_VERSION_ID,
6969 fact.PLAN_VERSION_ID,
6970 fact.PLAN_TYPE_ID,
6971 fact.PLAN_TYPE_CODE;
6972
6973 IF g_debug_mode='Y' THEN
6974 Pji_Utils.write2log(' Inserted RBS rollup for all slices ' || SQL%ROWCOUNT ,null,3);
6975 end if;
6976
6977 Pji_Fm_Plan_Maint_T_Pvt.MERGE_INTO_FP_FACT;
6978
6979 IF p_commit = 'Y' THEN
6980 COMMIT;
6981 END IF;
6982
6983 IF g_debug_mode='Y' THEN
6984 Pji_Utils.write2log(' maintain smart slice .. 0003 ' ,null,3);
6985 end if;
6986
6987 EXCEPTION
6988 WHEN Invalid_Excep THEN
6989 x_msg_data := 'unexcepted error';
6990 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
6991 ( p_package_name => g_package_name
6992 , p_procedure_name => 'MAINTAIN_SMART_SLICE'
6993 , x_return_status => x_return_status ) ;
6994
6995 WHEN OTHERS THEN
6996 x_msg_data := SQLERRM;
6997 ROLLBACK;
6998
6999 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
7000 ( p_package_name => g_package_name
7001 , p_procedure_name => 'MAINTAIN_SMART_SLICE'
7002 , x_return_status => x_return_status ) ;
7003
7004 RAISE;
7005 END;
7006
7007
7008 PROCEDURE CLEANUP_TEMP_TABLES IS
7009 l_return_status VARCHAR2(1);
7010 BEGIN
7011
7012 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
7013 ( p_package_name => g_package_name
7014 , x_return_status => l_return_status );
7015
7016 DELETE FROM pji_fp_aggr_pjp1_t;
7017 DELETE FROM PJI_FM_EXTR_PLNVER3_T;
7018 DELETE FROM pji_fp_rmap_fpr_update_t;
7019 EXCEPTION
7020 WHEN OTHERS THEN
7021 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
7022 ( p_package_name => g_package_name
7023 , p_procedure_name => 'CLEANUP_TEMP_TABLES'
7024 , x_return_status => l_return_status ) ;
7025
7026 RAISE;
7027 END;
7028
7029
7030 --
7031 -- Checks if list of plan versions exist in budget versions table.
7032 --
7033 PROCEDURE CHECK_BUDGET_VERSION_EXISTS (
7034 p_fp_version_ids IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type() ) IS
7035 i NUMBER;
7036 l_project_id NUMBER;
7037 l_return_status VARCHAR2(1);
7038 BEGIN
7039
7040 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
7041 ( p_package_name => g_package_name
7042 , x_return_status => l_return_status );
7043
7044 print_time ( ' inside CHECK_BUDGET_VERSION_EXISTS ' ) ;
7045 FOR i IN p_fp_version_ids.FIRST..p_fp_version_ids.LAST LOOP
7046
7047 BEGIN
7048
7049 SELECT PROJECT_ID
7050 INTO l_project_id
7051 FROM pa_budget_versions
7052 WHERE budget_version_id = p_fp_version_ids(i);
7053
7054 print_time ( ' plan version id # ' || i || ' is ' || p_fp_version_ids(i) || ' exists in budget versions.');
7055
7056 EXCEPTION
7057 WHEN OTHERS THEN
7058 print_time ( ' plan version id # ' || i || ' is ' || p_fp_version_ids(i) || ' does not exist in budget versions.');
7059 END;
7060
7061 BEGIN
7062
7063 SELECT /*+ index_ffs(wbs_hdr PJI_PJP_WBS_HEADER_N1) */ PROJECT_ID
7064 INTO l_project_id
7065 FROM pji_pjp_wbs_header wbs_hdr
7066 WHERE plan_version_id = p_fp_version_ids(i);
7067
7068 print_time ( ' plan version id # ' || i || ' is ' || p_fp_version_ids(i) || ' exists in budget versions.');
7069
7070 EXCEPTION
7071 WHEN OTHERS THEN
7072 print_time ( ' plan version id # ' || i || ' is ' || p_fp_version_ids(i) || ' does not exist in budget versions.');
7073 END;
7074
7075 END LOOP;
7076
7077 EXCEPTION
7078 WHEN OTHERS THEN
7079 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
7080 ( p_package_name => g_package_name
7081 , p_procedure_name => 'CHECK_BUDGET_VERSION_EXISTS'
7082 , x_return_status => l_return_status ) ;
7083
7084 RAISE;
7085 END;
7086
7087
7088 ----------
7089 -- Prints the list of plan versions in a given table of plan versions.
7090 ----------
7091 PROCEDURE PRINT_PLAN_VERSION_ID_LIST
7092 ( p_fp_version_ids IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type() ) IS
7093 i NUMBER;
7094 l_return_status VARCHAR2(1);
7095 BEGIN
7096
7097 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
7098 ( p_package_name => g_package_name
7099 , x_return_status => l_return_status );
7100
7101 print_time ( ' There are ' || p_fp_version_ids.COUNT || ' plan versions.');
7102 FOR i IN p_fp_version_ids.FIRST..p_fp_version_ids.LAST LOOP
7103 print_time ( ' .... Plan version ' || i || ' is ' || p_fp_version_ids(i));
7104 END LOOP;
7105
7106 EXCEPTION
7107 WHEN OTHERS THEN
7108 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
7109 ( p_package_name => g_package_name
7110 , p_procedure_name => 'PRINT_PLAN_VERSION_ID_LIST'
7111 , x_return_status => l_return_status ) ;
7112
7113 RAISE;
7114 END;
7115
7116
7117 ----------
7118 -- Prints the list of plan versions in a given table of plan versions.
7119 ----------
7120 PROCEDURE PRINT_PLAN_VERSION_TYPE_LIST
7121 ( p_fp_version_types IN SYSTEM.pa_varchar2_30_tbl_type ) IS
7122 i NUMBER;
7123 l_return_status VARCHAR2(1);
7124 BEGIN
7125
7126 Pji_Pjp_Fp_Curr_Wrap.INIT_ERR_STACK
7127 ( p_package_name => g_package_name
7128 , x_return_status => l_return_status );
7129
7130 print_time ( ' There are ' || p_fp_version_types.COUNT || ' plan versions.');
7131 FOR i IN p_fp_version_types.FIRST..p_fp_version_types.LAST LOOP
7132 print_time ( ' .... Plan version ' || i || ' is ' || p_fp_version_types(i));
7133 END LOOP;
7134
7135 EXCEPTION
7136 WHEN OTHERS THEN
7137 Pji_Pjp_Fp_Curr_Wrap.EXCP_HANDLER
7138 ( p_package_name => g_package_name
7139 , p_procedure_name => 'PRINT_PLAN_VERSION_TYPE_LIST'
7140 , x_return_status => l_return_status ) ;
7141
7142 RAISE;
7143 END;
7144
7145 -----------------------------------------------------------------
7146 --This API inserts rows for handling ETC calculations in apply
7147 --progress flow for version disabled workplan structures
7148 --If the global variable PA_PROGRESS_PUB.G_WBS_APPLY_PROG
7149 --is set, it means plan_update API is being called in apply
7150 --flow for version disabled workplan structure
7151 -----------------------------------------------------------------
7152 PROCEDURE INSERT_APPLY_PROG_VD IS
7153 BEGIN
7154
7155 IF PA_PROGRESS_PUB.G_WBS_APPLY_PROG IS NOT NULL THEN
7156
7157 --------------------------------------------------------
7158 --If the ETC column is null and the PLAN column has some
7159 --value, we copy the plan value to the ETC columns
7160 --The 0 rows for ETC in this case will ensure that in the
7161 --incremental change in plan value is not copied to the
7162 --ETC columns
7163 --------------------------------------------------------
7164
7165 INSERT INTO pji_fm_extr_plan_lines (
7166 PROJECT_ID, PROJECT_ORG_ID, PROJECT_ELEMENT_ID, STRUCT_VER_ID,
7167 PERIOD_NAME, CALENDAR_TYPE, START_DATE, END_DATE, RBS_ELEMENT_ID,
7168 RBS_VERSION_ID, PLAN_VERSION_ID, PLAN_TYPE_ID, WP_VERSION_FLAG,
7169 ROLLUP_TYPE, TXN_CURRENCY_CODE, PRJ_CURRENCY_CODE, PFC_CURRENCY_CODE,
7170 RESOURCE_CLASS_CODE, RATE_BASED_FLAG,
7171 ETC_PFC_BURDENED_COST,ETC_PFC_RAW_COST, ETC_PRJ_BURDENED_COST,
7172 ETC_PRJ_RAW_COST, ETC_QUANTITY, ETC_TXN_BURDENED_COST, ETC_TXN_RAW_COST )
7173 SELECT
7174 PROJECT_ID, PROJECT_ORG_ID, PROJECT_ELEMENT_ID, STRUCT_VER_ID,
7175 PERIOD_NAME, CALENDAR_TYPE, START_DATE, END_DATE, RBS_ELEMENT_ID,
7176 RBS_VERSION_ID, PLAN_VERSION_ID, PLAN_TYPE_ID, WP_VERSION_FLAG,
7177 ROLLUP_TYPE, TXN_CURRENCY_CODE, PRJ_CURRENCY_CODE, PFC_CURRENCY_CODE,
7178 RESOURCE_CLASS_CODE, RATE_BASED_FLAG,
7179 0, 0, 0,
7180 0, 0, 0, 0
7181 FROM
7182 pji_fm_extr_plan_lines
7183 WHERE
7184 STRUCT_VER_ID = PA_PROGRESS_PUB.G_WBS_APPLY_PROG
7185 GROUP BY
7186 PROJECT_ID, PROJECT_ORG_ID, PROJECT_ELEMENT_ID, STRUCT_VER_ID,
7187 PERIOD_NAME, CALENDAR_TYPE, START_DATE, END_DATE, RBS_ELEMENT_ID,
7188 RBS_VERSION_ID, PLAN_VERSION_ID, PLAN_TYPE_ID, WP_VERSION_FLAG,
7189 ROLLUP_TYPE, TXN_CURRENCY_CODE, PRJ_CURRENCY_CODE, PFC_CURRENCY_CODE,
7190 RESOURCE_CLASS_CODE, RATE_BASED_FLAG;
7191
7192 END IF;
7193
7194 EXCEPTION
7195 WHEN OTHERS THEN
7196 null;
7197 END;
7198
7199 ----------
7200 -- Print time API to measure time taken by each api. Also useful for debugging.
7201 ----------
7202 PROCEDURE PRINT_TIME(p_tag IN VARCHAR2) IS
7203 BEGIN
7204 Pji_Pjp_Fp_Curr_Wrap.print_time(p_tag);
7205 EXCEPTION
7206 WHEN OTHERS THEN
7207 Fnd_Msg_Pub.add_exc_msg( p_pkg_name => g_package_name ,
7208 p_procedure_name => 'PRINT_TIME');
7209 -- RAISE;
7210 END;
7211
7212
7213 END Pji_Fm_Xbs_Accum_Maint;