DBA Data[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;