DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_PROGRESS_UTILS

Source


1 package body PA_PROGRESS_UTILS as
2 /* $Header: PAPCUTLB.pls 120.47.12020000.9 2013/06/06 09:32:54 djambhek ship $ */
3 /* Addition for bug 6156686 */
4 
5 l_bcws_project_id            NUMBER  ;
6 l_bcws_object_id             NUMBER  ;
7 l_bcws_proj_element_id       NUMBER  ;
8 l_bcws_as_of_date            DATE    ;
9 l_bcws_structure_version_id  NUMBER  ;
10 l_bcws_rollup_method         VARCHAR2(30);
11 l_bcws_scheduled_start_date  DATE ;
12 l_bcws_scheduled_end_date    DATE  ;
13 l_bcws_prj_currency_code     VARCHAR2(30);
14 l_bcws_structure_type        VARCHAR2(30);
15 l_bcws_value                 NUMBER;
16 
17 -- Start Changes for bug 6664716
18 TYPE bcws_rec_type IS RECORD
19 (labor_hrs          number,   --Stores the sum of prorated and before as of date amounts
20  equip_hrs          number,
21  prj_brdn_cost      number,
22  sch_start_date     date,
23  sch_end_date       date,
24  pstart_date        date,
25  pend_date          date,
26  as_of_date         date,
27  parent_task_id     number,
28  tlbr_hrs_baod      number,     -- Stores the sum of lbr hours prior to as of date period
29  teqp_hrs_baod      number,
30  tpbc_hrs_baod      number,
31  cur_lbr_hrs        number,     -- Stores the current period amount.
32  cur_eqp_hrs        number,
33  cur_pbc            number
34  );
35 
36 TYPE bcws_hash_tbl IS TABLE OF bcws_rec_type
37       INDEX BY varchar2(17);
38 
39 l_bcws_hash_tbl bcws_hash_tbl;
40 
41 l_prv_bcws_project_id             NUMBER := -1;
42 l_prv_bcws_struc_ver_id           NUMBER := -1;
43 l_ovr_task_id                         NUMBER := -1;
44 -- End Changes for bug 6664716
45 
46 
47 FUNCTION GET_LATEST_TASK_VER_ID (p_project_id      IN  NUMBER,
48                                  p_task_id         IN  NUMBER) return NUMBER IS
49     x_task_version_id    NUMBER;
50 BEGIN
51     select ppev1.element_version_id
52       into x_task_version_id
53       from pa_proj_element_versions ppev1,
54            pa_proj_element_versions ppev2,
55            pa_proj_elem_ver_structure ppevs,
56            pa_structure_types pst,
57            pa_proj_structure_types ppst
58      where ppevs.project_id = p_project_id
59        and ppevs.latest_eff_published_flag = 'Y'
60        and ppevs.element_version_id = ppev1.parent_structure_version_id
61        and ppevs.element_version_id = ppev2.element_version_id
62        and ppev2.proj_element_id = ppst.proj_element_id
63        and ppst.structure_type_id = pst.structure_type_id
64        and pst.structure_type_class_code = 'WORKPLAN'
65        and ppev1.proj_element_id = p_task_id
66        and ppev1.object_type = 'PA_TASKS';
67     return x_task_version_id;
68 exception when others then
69      return -999;
70 END;
71 
72 FUNCTION PROGRESS_RECORD_EXISTS(p_element_version_id IN  NUMBER,
73                                 p_object_type        IN  VARCHAR2
74                 ,p_project_id        IN  NUMBER -- Fixed bug # 3688901.
75                 ) return VARCHAR2 IS
76     x_record_exists  VARCHAR2(1);
77 BEGIN
78     select 'Y'
79       into x_record_exists
80       from pa_percent_completes
81      where object_version_id = p_element_version_id
82        and object_type = p_object_type
83        and published_flag = 'Y'
84        and project_id = p_project_id; -- Fixed bug # 3688901
85 
86     return x_record_exists;
87 exception when no_data_found then
88      return 'N';
89 when others then
90      return 'Y';
91 END;
92 
93 FUNCTION GET_LATEST_STRUCTURE_VER_ID (p_project_id      IN  NUMBER) return NUMBER IS
94     x_structure_version_id    NUMBER;
95 BEGIN
96     select ppevs.element_version_id
97       into x_structure_version_id
98       from pa_proj_elem_ver_structure ppevs,
99            pa_proj_element_versions ppev,
100            pa_structure_types pst,
101            pa_proj_structure_types ppst
102      where ppevs.project_id = p_project_id
103        and ppevs.latest_eff_published_flag = 'Y'
104        and ppevs.element_version_id = ppev.element_version_id
105        and ppev.proj_element_id = ppst.proj_element_id
106        and ppst.structure_type_id = pst.structure_type_id
107        and pst.structure_type_class_code = 'WORKPLAN';
108     return x_structure_version_id;
109 exception when others then
110      return -999;
111 END;
112 
113 FUNCTION isUserProjectManager(p_user_id       IN   NUMBER,
114                               p_project_id    IN   NUMBER) return VARCHAR2 is
115     l_person_id  number;
116     x_val        varchar2(1) := 'N';
117 BEGIN
118     l_person_id := pa_utils.getempidfromuser(p_user_id);
119 
120     select 'Y'
121       into x_val
122      from pa_project_parties
123     where project_id = p_project_id
124       and resource_source_id = l_person_id
125       and project_role_id = 1
126       and trunc(sysdate) between trunc(start_date_active) and trunc(nvl(end_date_active,sysdate)); ----- Project Manager
127 
128     return x_val;
129 
130 exception when others then
131     return 'N';
132 
133 END;
134 
135 -- FPM Dev CR 3 : Not used
136 FUNCTION Get_Working_Progress_Id(p_project_id    IN   NUMBER,
137                                  p_task_id       IN   NUMBER) return NUMBER is
138     l_percent_complete_id  number;
139 BEGIN
140 
141     select percent_complete_id
142       into l_percent_complete_id
143      from pa_percent_completes
144     where project_id = p_project_id
145       and task_id = p_task_id
146       and current_flag = 'N'
147       and published_flag = 'N';
148 
149     return l_percent_complete_id;
150 
151 exception when others then
152     return -999;
153 
154 END;
155 
156 PROCEDURE UPDATE_TASK_PROG_REQ_DATE(p_commit        in varchar2 := FND_API.G_TRUE,
157                                   p_object_id      in number,
158                                   p_object_type    in varchar2,
159                                   x_return_status  out NOCOPY varchar2, --File.Sql.39 bug 4440895
160                                   x_msg_count      out NOCOPY number, --File.Sql.39 bug 4440895
161                                   x_msg_data       out NOCOPY varchar2) IS --File.Sql.39 bug 4440895
162   CURSOR get_setup_info
163   IS SELECT
164          object_id, object_type,  reporting_cycle_id,
165          next_reporting_date, record_version_number,
166          initial_progress_status, final_progress_status,
167          rollup_progress_status, object_page_layout_id
168      FROM pa_object_page_layouts popl
169      WHERE
170          page_type_code = 'TPR'
171      AND page_id = -99
172      AND object_id = p_object_id
173      AND object_type = p_object_type;
174 
175  l_object_id                  number;
176  l_object_type                varchar2(30);
177  l_report_cycle_id            number;
178  l_next_reporting_date        date;
179  l_record_version_number      number;
180  l_initial_progress_status    varchar2(30);
181  l_final_progress_status      varchar2(30);
182  l_rollup_progress_status     varchar2(1);
183  l_object_page_layout_id      number;
184  x_next_reporting_date        date;
185  x_report_end_date            date;
186 BEGIN
187            x_return_status := FND_API.G_RET_STS_SUCCESS;
188 
189            OPEN get_setup_info;
190            FETCH get_setup_info INTO l_object_id, l_object_type, l_report_cycle_id,l_next_reporting_date, l_record_version_number, l_initial_progress_status, l_final_progress_status, l_rollup_progress_status, l_object_page_layout_id;
191            CLOSE get_setup_info;
192 
193            IF (l_report_cycle_id IS NOT null) then
194             if (l_next_reporting_date is null) then
195                 l_next_reporting_date := trunc(sysdate);
196             end if;
197 
198             x_next_reporting_date := PA_Billing_Cycles_Pkg.Get_Billing_Date(l_Object_Id
199                                                         ,l_next_reporting_date+1
200                                                         ,l_Report_Cycle_Id
201                                                         ,sysdate
202                                                         ,l_next_reporting_date);
203 
204              pa_progress_report_pkg.update_object_page_layout_row
205              (
206               p_object_id                 => l_OBJECT_ID ,
207               p_object_Type               => l_OBJECT_TYPE ,
208               p_page_id                   => -99 ,
209               p_page_type_code            => 'TPR' ,
210               p_approval_required         => null ,
211               p_reporting_cycle_id        => l_report_cycle_id ,
212               p_reporting_offset_days     => null,
213               p_next_reporting_date       => x_next_reporting_date ,
214               p_reminder_days             => null ,
215               p_reminder_days_type        => null ,
216               p_initial_progress_status   => l_initial_progress_status,
217               p_final_progress_status     => l_final_progress_status,
218               p_rollup_progress_status    => l_rollup_progress_status,
219               P_REPORT_TYPE_ID            => null,
220               P_APPROVER_SOURCE_ID        => null,
221               P_APPROVER_SOURCE_TYPE      => null,
222               P_EFFECTIVE_FROM            => null,
223               P_EFFECTIVE_TO              => null,
224               p_object_page_layout_id     => l_object_page_layout_id,
225               p_record_version_number     => l_record_version_number,
226               x_return_status             => x_return_status ,
227               x_msg_count                 => x_msg_count,
228               x_msg_data                  => x_msg_data
229               );
230            END IF;
231 
232   IF (p_commit = FND_API.G_TRUE AND  x_return_status = FND_API.g_ret_sts_success  )THEN
233      COMMIT;
234   END IF;
235 -- Introduced Exception Block : 4537865
236 EXCEPTION
237 WHEN OTHERS THEN
238      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
239      x_msg_count     := 1;
240      x_msg_data      := SUBSTRB(SQLERRM,1,240);
241 
242      FND_MSG_PUB.add_exc_msg( p_pkg_name=> 'PA_PROGRESS_UTILS'
243                      ,p_procedure_name  => 'UPDATE_TASK_PROG_REQ_DATE'
244              ,p_error_text => x_msg_data );
245 
246      RAISE;
247 END UPDATE_TASK_PROG_REQ_DATE;
248 
249 PROCEDURE adjust_reminder_date(
250         p_commit                         in varchar2 := FND_API.G_TRUE
251        ,p_project_id                     IN  NUMBER
252        ,x_return_status                  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
253        ,x_msg_count                      OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
254        ,x_msg_data                       OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
255 IS
256   l_reporting_date DATE;
257   l_offset_days NUMBER;
258   l_cycle_id NUMBER;
259   l_sysdate DATE := TRUNC(sysdate);
260 BEGIN
261   -- 4537865 Should x_return_status be initialized to Success here  ?
262   -- If it is initialized Commit will happen here in this API,which might
263   -- wash-out all previously established savepoints. Not sure,whether to do this fix or not
264 
265   SELECT next_reporting_date, reporting_cycle_id, report_offset_days
266   INTO l_reporting_date, l_cycle_id, l_offset_days
267   FROM pa_object_page_layouts
268   WHERE object_id = p_project_id
269     AND object_type = 'PA_PROJECTS'
270     AND page_type_code = 'TPR';
271 
272     if ( l_reporting_date is not null and l_reporting_date < l_sysdate
273             and l_cycle_id is not null ) then
274         while (l_reporting_date < l_sysdate) Loop
275             l_reporting_date := PA_Billing_Cycles_Pkg.Get_Next_Billing_Date(
276                             p_project_id
277                             ,l_reporting_date
278                             ,l_cycle_id
279                             ,l_offset_days
280                             ,l_reporting_date
281                             ,l_reporting_date-1);
282 
283         End Loop;
284 
285         UPDATE pa_object_page_layouts
286             SET next_reporting_date = l_reporting_date
287             WHERE object_id = p_project_id
288             AND object_type = 'PA_PROJECTS'
289             AND page_type_code = 'TPR';
290         IF (p_commit = FND_API.G_TRUE AND  x_return_status = FND_API.g_ret_sts_success  )THEN
291             COMMIT;
292         end if;
293     End If;
294 
295 EXCEPTION
296     When OTHERS then
297 
298      -- 4537865
299          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
300      x_msg_count := 1 ;
301      x_msg_data := SUBSTRB(SQLERRM,1,240);
302          Fnd_Msg_Pub.add_exc_msg
303                    ( p_pkg_name        => 'PA_PROGRESS_UTILS'
304                     , p_procedure_name  => 'adjust_reminder_date'
305                     , p_error_text      => x_msg_data);
306     -- 4537865
307     RAISE;
308 END adjust_reminder_date;
309 
310 FUNCTION PROJ_TASK_PROG_EXISTS(p_project_id IN  NUMBER,
311                           p_task_id    IN  NUMBER) return VARCHAR2 IS
312     x_record_exists  VARCHAR2(1);
313 BEGIN
314     select 'Y'
315       into x_record_exists
316       from pa_percent_completes
317      where project_id = p_project_id
318        and task_id = decode(p_task_id,0,task_id,p_task_id)
319        and published_flag = 'Y';
320 
321     return x_record_exists;
322 exception when no_data_found then
323      return 'N';
324 when others then
325      return 'Y';
326 END;
327 
328 FUNCTION GET_PRIOR_PERCENT_COMPLETE(p_project_id IN  NUMBER,
329                                     p_task_id    IN  NUMBER,
330                                     p_as_of_date IN  DATE) return NUMBER IS
331     prior_pc  NUMBER;
332     /*--Added by rtarway, bug 4324504
333     CURSOR c_get_prior_percent_complete(l_task_id NUMBER, l_project_id NUMBER, l_as_of_date DATE) IS
334         select  completed_percentage
335     from    pa_percent_completes
336     where   project_id = l_project_id
337     and task_id = l_task_id
338     and published_flag = 'Y'
339     and structure_type = 'WORKPLAN'
340     and date_computed  < l_as_of_date
341     and object_type = 'PA_TASKS'
342     order by date_computed desc;*/
343 
344     ---- bug 5042445
345    CURSOR c_get_prior_percent_complete(l_task_id NUMBER, l_project_id NUMBER, l_as_of_date DATE) IS
346    select nvl(completed_percentage,eff_rollup_percent_comp)
347      from pa_progress_rollup
348     where project_id = l_project_id
349     and object_id = l_task_id
350     and object_type in ('PA_STRUCTURES', 'PA_TASKS')
351     and structure_Type = 'WORKPLAN'
352     and structure_version_id is null
353     and as_of_date < l_as_of_date
354     order by as_of_date desc;
355 BEGIN
356     --Commented by rtarway, bug 4324504
357     /*select completed_percentage
358       into prior_pc
359       from pa_percent_completes
360      where project_id = p_project_id
361        and task_id = p_task_id
362        and published_flag = 'Y'
363        and structure_type = 'WORKPLAN' -- FPM Dev CR 3
364        and date_computed <= p_as_of_date;*/
365 
366      OPEN  c_get_prior_percent_complete(p_task_id, p_project_id, trunc(p_as_of_date));
367      FETCH c_get_prior_percent_complete  INTO prior_pc;
368 
369      IF (c_get_prior_percent_complete%NOTFOUND) THEN
370         prior_pc := 0 ;
371      END IF;
372 
373      CLOSE c_get_prior_percent_complete;
374 
375      return prior_pc;
376 
377 exception when others then
378      return 0;
379 END;
380 
381 
382 FUNCTION GET_LATEST_AS_OF_DATE(
383     p_task_id      NUMBER
384     ,p_project_id   NUMBER := null -- FPM Development Bug 3420093
385     ,p_object_id   NUMBER := null -- FPM Development Bug 3420093
386     , p_object_type VARCHAR2 := 'PA_TASKS'-- FPM Development Bug 3420093
387     ,p_structure_type VARCHAR2 := 'WORKPLAN' -- FPM Development Bug 3420093
388 	,p_cbs_element_id   NUMBER := null -- Added for CBS phase 2
389     ) RETURN DATE IS
390 
391 --Added for performance improvements bug 2679612
392   CURSOR cur_proj_elem
393   IS
394     SELECT project_id
395      FROM pa_proj_elements
396     WHERE proj_element_id = p_task_id;
397     l_project_id          NUMBER;
398 --Added for performance improvements bug 2679612
399 
400   CURSOR cur_ppc(c_project_id NUMBER )
401   IS
402     SELECT /*+ INDEX(pa_percent_completes PA_PERCENT_COMPLETES_N3)*/ date_computed --Added hint for 15876400
403       FROM pa_percent_completes
404      WHERE object_id = decode(p_object_id, null, p_task_id, p_object_id)
405        AND project_id = c_project_id
406        and object_type = p_object_type
407        AND current_flag = 'Y'
408        AND published_flag = 'Y'
409        AND structure_type = p_structure_type
410        AND NVL(task_id, -1) = DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_task_id, NVL(task_id, -1)), NVL(p_task_id,p_object_id)) /* Amit : Modified for IB4 Progress CR. */
411        AND NVL(cbs_element_id,-1) = NVL(p_cbs_element_id,-1) --Added for CBS phase 2 16200605
412 	   ;
413   l_as_of_date  DATE;
414 BEGIN
415 
416      IF p_project_id is NULL THEN
417 --Added for performance improvements bug 2679612
418         OPEN cur_proj_elem;
419         FETCH cur_proj_elem INTO l_project_id;
420         CLOSE cur_proj_elem;
421      ELSE
422         l_project_id := p_project_id;
423      END IF;
424 
425 --Added for performance improvements bug 2679612
426 
427      OPEN cur_ppc(l_project_id);
428      FETCH cur_ppc INTO l_as_of_date;
429      CLOSE cur_ppc;
430      RETURN l_as_of_date ;
431 
432 exception when others then
433      return null;
434 
435 END GET_LATEST_AS_OF_DATE;
436 
437 function    Get_AS_OF_DATE (
438                 X_Project_ID            IN  Number,
439                 X_Project_Start_Date    IN  Date    default NULL,
440                 X_Billing_Cycle_ID      IN  Number  default NULL,
441                 X_Billing_Offset_Days   IN  Number  default NULL,
442                 X_Bill_Thru_Date        IN  Date    default NULL,
443                 X_Last_Bill_Thru_Date   IN  Date    default NULL
444                                 )   RETURN DATE
445 IS
446 
447 return_number            NUMBER;
448 previous_return_date     DATE;
449 next_return_date         DATE;
450 return_date              DATE;
451 
452 date_count         NUMBER := 0;
453 temp_index         NUMBER := 0;
454 
455 future_date_record NUMBER := 0;
456 prev_return_date Date;
457 
458 BEGIN
459 
460 if PA_PROGRESS_UTILS.x_bill_thru_date is null then
461     PA_PROGRESS_UTILS.x_bill_thru_date := x_project_start_date;
462 end if;
463 
464 if PA_PROGRESS_UTILS.project_id <> X_Project_ID OR
465    i >= 10 then
466 
467   --Initializing variables
468   PA_PROGRESS_UTILS.l_return_date.delete;
469   PA_PROGRESS_UTILS.project_id            := X_Project_ID;
470   PA_PROGRESS_UTILS.previous_record_count := 0;
471   PA_PROGRESS_UTILS.next_record_count     := 0;
472   PA_PROGRESS_UTILS.previous_record_index := 0;
473   PA_PROGRESS_UTILS.current_index         := 0;
474   PA_PROGRESS_UTILS.x_bill_thru_date      := X_Last_Bill_Thru_Date;
475   PA_PROGRESS_UTILS.i                     := 0;
476 
477 --------my_error_msg( 'X_Billing_Cycle_ID ' || X_Billing_Cycle_ID );
478 
479  while TRUE loop
480 
481  prev_return_date := return_date;
482 
483   IF X_Billing_Cycle_ID IS NOT NULL THEN
484    return_date := PA_Billing_Cycles_Pkg.Get_Next_Billing_Date
485                     (X_Project_ID          => X_Project_ID,
486                      X_Project_Start_Date  => X_Project_Start_Date,
487                      X_Billing_Cycle_ID    => X_Billing_Cycle_ID,
488                      X_Billing_Offset_Days => X_Billing_Offset_Days,
489                      X_Bill_Thru_Date      => X_Bill_Thru_Date,
490                      X_Last_Bill_Thru_Date => PA_PROGRESS_UTILS.x_bill_thru_date);
491   ELSE
492    return_date := PA_PROGRESS_UTILS.x_bill_thru_date + 1;
493   END IF;
494 
495   PA_PROGRESS_UTILS.x_bill_thru_date := return_date;
496 
497   IF  ((trunc(sysdate) - trunc(return_date) <= 5) OR (trunc(return_date) >= trunc(sysdate))) then
498 
499    date_count := date_count + 1;
500 
501 
502    PA_PROGRESS_UTILS.l_return_date.extend(1);
503    PA_PROGRESS_UTILS.l_return_date(date_count) := to_char(return_date, 'MM-DD-RR');
504 
505   END IF;
506 
507 
508 
509    if trunc(return_date) >= trunc(sysdate) then
510 
511       if PA_PROGRESS_UTILS.current_index = 0 then
512          PA_PROGRESS_UTILS.current_index := date_count;
513          PA_PROGRESS_UTILS.previous_record_index := PA_PROGRESS_UTILS.current_index - 5;
514          IF PA_PROGRESS_UTILS.previous_record_index <= 0
515          THEN
516             PA_PROGRESS_UTILS.previous_record_index := 1;
517          END IF;
518       end if;
519 
520       future_date_record := future_date_record + 1;
521 
522    end if;
523 
524    if future_date_record = 5 then
525       exit;
526    end if;
527 
528    if prev_return_date = return_date then
529       exit;
530    end if;
531 
532 end loop;
533 
534 end if;
535 
536 
537 if  PA_PROGRESS_UTILS.previous_record_count < 5 AND
538     PA_PROGRESS_UTILS.previous_record_index > 0 AND
539     PA_PROGRESS_UTILS.previous_record_index < PA_PROGRESS_UTILS.current_index
540 then
541      if (PA_PROGRESS_UTILS.l_return_date.exists(PA_PROGRESS_UTILS.previous_record_index)) then--If Condition Added by rtarway for BUG4111124
542           return_date := to_date(PA_PROGRESS_UTILS.l_return_date(PA_PROGRESS_UTILS.previous_record_index), 'MM-DD-RR');
543 
544           PA_PROGRESS_UTILS.previous_record_count :=  PA_PROGRESS_UTILS.previous_record_count + 1;
545           PA_PROGRESS_UTILS.previous_record_index :=  PA_PROGRESS_UTILS.previous_record_index + 1;
546      end if;
547 
548 elsif  PA_PROGRESS_UTILS.next_record_count < 5 then
549 
550     temp_index := PA_PROGRESS_UTILS.current_index+PA_PROGRESS_UTILS.next_record_count;
551 
552     if (PA_PROGRESS_UTILS.l_return_date.exists(temp_index)) then --If Condition Added by rtarway for BUG4111124
553          return_date := to_date(PA_PROGRESS_UTILS.l_return_date(temp_index), 'MM-DD-RR');
554 
555          PA_PROGRESS_UTILS.next_record_count := PA_PROGRESS_UTILS.next_record_count + 1;
556     end if;
557 
558 end if;
559 
560 RETURN (return_date);
561 
562 EXCEPTION
563     When OTHERS then
564     RAISE;
565 END Get_AS_OF_DATE;
566 
567 
568 FUNCTION as_of_date(
569         X_Project_ID                    IN      NUMBER                          ,
570         X_Object_id                     IN      NUMBER                          ,
571         X_Billing_Cycle_ID              IN      NUMBER  DEFAULT NULL            ,
572         X_Object_type                   IN      VARCHAR2  DEFAULT 'PA_TASKS'    ,-- FPM Development Bug 3420093
573         X_structure_type                IN      VARCHAR2  DEFAULT 'WORKPLAN'    ,-- FPM Development Bug 3420093
574     X_proj_element_id               IN      NUMBER    := null   /* Amit : Modified for IB4 Progress CR. */
575           ) RETURN DATE IS
576 
577 -- Bug  3974627 : Commented
578 /*
579    CURSOR cur_pa_ppc
580    IS
581      SELECT max( date_computed )
582        FROM pa_percent_completes
583       WHERE project_id = X_Project_ID
584         AND object_id = x_object_id
585         AND object_type = x_object_type
586         AND current_flag = 'Y'
587         AND published_flag = 'Y'
588         AND structure_type = x_structure_type
589     AND NVL(task_id,-1) = DECODE(X_Object_type, 'PA_DELIVERABLES', NVL(X_proj_element_id, NVL(task_id,-1)), NVL(X_proj_element_id, X_Object_id))
590     ;
591 */
592 
593 -- Bug  3974627 : Added Cursors cur_pa_ppc_str_task, cur_pa_ppc_asgn, cur_pa_ppc_dlv
594    CURSOR cur_pa_ppc_str_task
595    IS
596      SELECT max( date_computed )
597        FROM pa_percent_completes
598       WHERE project_id = X_Project_ID
599         AND object_id = x_object_id
600         AND current_flag = 'Y'
601         AND published_flag = 'Y'
602         AND object_type = x_object_type
603         AND structure_type = X_structure_type
604     AND task_id = NVL(X_proj_element_id,x_object_id)
605     ;
606 
607    CURSOR cur_pa_ppc_asgn
608    IS
609      SELECT max( date_computed )
610        FROM pa_percent_completes
611       WHERE project_id = X_Project_ID
612         AND current_flag = 'Y'
613         AND published_flag = 'Y'
614         AND ((object_type = 'PA_ASSIGNMENTS' and object_id = x_object_id)
615              or (object_type = 'PA_TASKS' and object_id = X_proj_element_id))
616         AND structure_type = X_structure_type
617     AND task_id = X_proj_element_id
618     ;
619 
620 
621 
622    CURSOR cur_dlv_get_asso_task(c_del_elem_id NUMBER)
623    IS
624           SELECT por.object_id_from2
625           FROM pa_object_relationships por
626           WHERE
627           por.object_type_to = 'PA_DELIVERABLES'
628       AND por.relationship_subtype IN  ('STRUCTURE_TO_DELIVERABLE', 'TASK_TO_DELIVERABLE')
629       AND por.relationship_type = 'A'
630       AND por.object_id_to2 = c_del_elem_id
631       ;
632    l_del_task_id NUMBER;
633 
634    CURSOR cur_pa_ppc_dlv_notask
635    IS
636      SELECT max( date_computed )
637        FROM pa_percent_completes
638       WHERE project_id = X_Project_ID
639         AND object_id = x_object_id
640         AND current_flag = 'Y'
641         AND published_flag = 'Y'
642         AND object_type = 'PA_DELIVERABLES'
643         AND structure_type = X_structure_type
644     AND NVL(task_id, -1) = NVL(X_proj_element_id, NVL(task_id, -1))
645     ;
646 
647    CURSOR cur_pa_ppc_dlv_task(c_task_id NUMBER)
648    IS
649      SELECT max( date_computed )
650        FROM pa_percent_completes
651       WHERE project_id = X_Project_ID
652         AND ((object_id = x_object_id and object_type = 'PA_DELIVERABLES') or
653             (object_id = c_task_id and object_type = 'PA_TASKS'))
654         AND current_flag = 'Y'
655         AND published_flag = 'Y'
656         AND structure_type = X_structure_type
657         ;
658 
659 
660 
661    CURSOR cur_pa_proj
662    IS
663      SELECT start_date, completion_date
664        from pa_projects_all
665       where project_id = x_project_id;
666 
667    l_return_date DATE;
668 
669    CURSOR c_get_max_rollup_dt IS
670    SELECT max(as_of_date)
671    FROM pa_progress_rollup
672    where project_id = X_Project_ID
673    and object_type IN ('PA_TASKS', 'PA_STRUCTURES')
674    and object_id = x_object_id
675    and structure_type = 'WORKPLAN'
676    and structure_version_id is null;
677 
678    l_cycle_type     varchar2(30);
679    l_value1         number;
680    cursor get_cycle_info is
681    Select Billing_Cycle_Type, Billing_Value1
682    From    PA_Billing_Cycles
683    Where   Billing_Cycle_ID = X_Billing_Cycle_ID;
684 
685 begin
686 
687 
688      IF PA_PROGRESS_UTILS.project_id <> X_Project_ID OR i >= 10 then
689 
690         -- Bug  3974627 Commented
691         --OPEN cur_pa_ppc;
692         --FETCH cur_pa_ppc INTO PA_PROGRESS_UTILS.l_last_progress_date;
693         --CLOSE cur_pa_ppc;
694      -- 4535784 Begin
695      -- To Show 30 dates in case rollup records exists after 5 cycle dates
696      -- Note that j_task is checked against 6 because each run is for 10 in which we get 5 future date and 5 null date(previous date implementaion, obsoleted now)
697      -- So we need to get 60 rows for 30 dates
698      IF ((x_object_type IN ('PA_TASKS', 'PA_STRUCTURES') and X_structure_type = 'WORKPLAN') and (j_task >=6 OR g_task_id <> x_object_id or PA_PROGRESS_UTILS.project_id <> X_Project_ID)) THEN
699     j_task := 0;
700     g_task_id := x_object_id;
701     OPEN c_get_max_rollup_dt;
702     FETCH c_get_max_rollup_dt INTO g_max_rollup_dt;
703     CLOSE c_get_max_rollup_dt;
704      END IF;
705      -- 4535784 End
706         -- Bug  3974627 Begin
707     IF x_object_type IN ('PA_TASKS', 'PA_STRUCTURES') THEN
708             -- 4535784 Begin
709         j_task := j_task+1;
710         IF j_task > 1 AND X_structure_type = 'WORKPLAN' and g_task_id = x_object_id AND trunc(nvl(g_max_rollup_dt,sysdate)) > trunc(PA_PROGRESS_UTILS.x_bill_thru_date) THEN
711             PA_PROGRESS_UTILS.l_last_progress_date := PA_PROGRESS_UTILS.x_bill_thru_date;
712         ELSE
713             IF j_task =1 THEN
714                 OPEN cur_pa_ppc_str_task;
715                 FETCH cur_pa_ppc_str_task INTO PA_PROGRESS_UTILS.l_last_progress_date;
716                 CLOSE cur_pa_ppc_str_task;
717             ELSE
718                 return null; -- This make sure that no extra processing is done when max date is reached
719             END IF;
720         END IF;
721             -- 4535784 End
722     ELSIF x_object_type = 'PA_ASSIGNMENTS' THEN
723         OPEN cur_pa_ppc_asgn;
724         FETCH cur_pa_ppc_asgn INTO PA_PROGRESS_UTILS.l_last_progress_date;
725         CLOSE cur_pa_ppc_asgn;
726     ELSIF x_object_type = 'PA_DELIVERABLES' THEN
727             OPEN cur_dlv_get_asso_task(x_object_id);
728         FETCH cur_dlv_get_asso_task INTO l_del_task_id;
729         CLOSE cur_dlv_get_asso_task;
730 
731                 if l_del_task_id is not null then
732                    OPEN cur_pa_ppc_dlv_task(l_del_task_id);
733            FETCH cur_pa_ppc_dlv_task INTO PA_PROGRESS_UTILS.l_last_progress_date;
734            CLOSE cur_pa_ppc_dlv_task;
735                 else
736                    OPEN cur_pa_ppc_dlv_notask;
737                    FETCH cur_pa_ppc_dlv_notask INTO PA_PROGRESS_UTILS.l_last_progress_date;
738                    CLOSE cur_pa_ppc_dlv_notask;
739                 end if;
740     END IF;
741     -- Bug  3974627 End
742 
743 
744         OPEN cur_pa_proj;
745         FETCH cur_pa_proj INTO X_project_start_date,X_project_finish_date;
746         CLOSE cur_pa_proj;
747 
748         IF PA_PROGRESS_UTILS.l_last_progress_date IS NULL
749         THEN
750 --           PA_PROGRESS_UTILS.l_last_progress_date :=  NVL( X_project_start_date,TRUNC(SYSDATE));
751              PA_PROGRESS_UTILS.l_last_progress_date := TRUNC(SYSDATE)-1;  --bug 2641630
752         END IF;
753 
754         --- as of date to remain same if in future 5226910(5212999)
755         if (PA_PROGRESS_UTILS.l_last_progress_date >= trunc(sysdate)) then
756            open get_cycle_info;
757            fetch get_cycle_info into l_cycle_type, l_value1;
758            close get_cycle_info;
759            If l_Cycle_Type = 'BILLING CYCLE DAYS' Then
760               PA_PROGRESS_UTILS.l_Last_Bill_Thru_Date := PA_PROGRESS_UTILS.l_last_progress_date -l_value1;
761            else
762               PA_PROGRESS_UTILS.l_Last_Bill_Thru_Date := PA_PROGRESS_UTILS.l_last_progress_date -1;
763            End if;
764         else
765            PA_PROGRESS_UTILS.l_Last_Bill_Thru_Date := PA_PROGRESS_UTILS.l_last_progress_date;
766         end if;
767      END IF;
768 ---     IF X_Billing_Cycle_ID IS NOT NULL
769 ---     THEN
770 
771          l_return_date := Get_AS_OF_DATE (
772                  X_Project_ID            => x_project_id
773                 ,X_Project_Start_Date    => PA_PROGRESS_UTILS.l_last_progress_date
774                 ,X_Billing_Cycle_ID      => X_Billing_Cycle_ID
775                 ,X_Billing_Offset_Days   => 0
776                 ,X_Bill_Thru_Date        => X_project_finish_date
777                 ,X_Last_Bill_Thru_Date   => PA_PROGRESS_UTILS.l_Last_Bill_Thru_Date
778              );
779 ---     END IF;
780      i := i + 1;
781 
782      RETURN ( l_return_date );
783 
784 end as_of_date;
785 
786 FUNCTION get_next_ppc_id RETURN NUMBER IS
787    l_return_ppc_id NUMBER;
788 BEGIN
789         select PA_PERCENT_COMPLETES_S.nextval
790         into l_return_ppc_id
791         from dual;
792 
793         RETURN l_return_ppc_id;
794 END get_next_ppc_id;
795 
796 
797 -- FPM Development Bug 3420093 : Added p_object_type
798 
799 FUNCTION CHECK_VALID_AS_OF_DATE(p_as_of_date IN DATE
800     , p_project_id IN NUMBER
801     , p_object_id NUMBER
802     , p_object_type VARCHAR2 := 'PA_TASKS'
803 	, p_cbs_element_id   NUMBER := null -- Added for CBS phase 2 16200605
804     , p_proj_element_id  IN      NUMBER    := null  /* Amit : Modified for IB4 Progress CR. */)
805 RETURN VARCHAR2 IS
806 
807 
808 --  CURSOR as_of_dates_csr
809 --  IS
810 --  SELECT 'Y'
811 --  FROM DUAL
812 --  WHERE trunc(p_as_of_date) IN
813 --    (SELECT trunc(as_of_date)
814 --     FROM PA_PROG_AS_OF_DATES
815 --     WHERE project_id = p_project_id
816 --       AND proj_element_id = p_object_id
817 --       AND object_id = p_object_id
818 --       AND object_type = p_object_type
819 --       AND rownum < 11);
820 
821 --  l_dummy    VARCHAR2(1);
822   l_dummy    Date ; -- For performance improvement used Minus operator
823 
824 /* -- FPM Dev CR 3
825 CURSOR as_of_dates_csr
826   IS
827   SELECT trunc(p_as_of_date) FROM DUAL
828   MINUS
829   SELECT
830     trunc(as_of_date)
831      FROM PA_PROG_AS_OF_DATES
832      WHERE project_id = p_project_id
833 --       AND proj_element_id = p_object_id
834        AND object_id = p_object_id
835        AND object_type = p_object_type
836        AND rownum < 11;*/
837 
838 -- FPM Dev CR 3 : Added two new cursors. Now we are not relying on pa_prog_as_of_dates view.
839   CURSOR as_of_dates_task_dlvr_csr
840   IS
841   SELECT trunc(p_as_of_date) FROM DUAL
842   MINUS
843   SELECT PA_PROGRESS_UTILS.AS_OF_DATE(ppe.project_id,  ppe.proj_element_id, ppp.progress_cycle_id, ppe.object_type, 'WORKPLAN', p_proj_element_id/* Amit : Modified for IB4 Progress CR. */) as_of_date
844   from  pa_project_statuses po, pa_proj_progress_attr ppp, pa_proj_elements ppe -- Bug 4535784 Changed from pa_resource_types to pa_project_statuses
845   where ppe.project_id = ppp.project_id(+)
846   AND ppp.structure_type (+) = 'WORKPLAN'
847   and ppe.project_id= p_project_id
848   and ppe.proj_element_id = p_object_id
849   and ppe.object_type = p_object_type
850   and ((ppe.object_type in ('PA_TASKS', 'PA_STRUCTURES') and rownum <61) or (ppe.object_type = 'PA_DELIVERABLES' and rownum <11)) -- Bug 4535784
851   --and rownum <11
852   ;
853 
854 
855   /* Modified for IB4 Progress CR. */
856 
857   CURSOR as_of_dates_assgn_csr
858   IS
859   SELECT trunc(p_as_of_date) FROM DUAL
860   MINUS
861   SELECT PA_PROGRESS_UTILS.AS_OF_DATE(ppe.project_id,  ppe.resource_list_member_id, ppp.progress_cycle_id, 'PA_ASSIGNMENTS', 'WORKPLAN', p_proj_element_id/* Amit : Modified for IB4 Progress CR. */) as_of_date
862   from  pa_resource_types po, pa_proj_progress_attr ppp, PA_TASK_ASSIGNMENTS_V ppe
863   where ppe.project_id = ppp.project_id(+)
864   AND ppp.structure_type (+) = 'WORKPLAN'
865   and ppe.project_id= p_project_id
866   and ppe.resource_list_member_id = p_object_id /* Modified for IB4 Progress CR. */
867   and ppe.task_id = p_proj_element_id /* Amit : Modified for IB4 Progress CR. */
868   AND NVL(ppe.cbs_element_id,-1) = NVL(p_cbs_element_id,-1) --Added for CBS phase 2 16200605
869   and rownum <11;
870 
871 BEGIN
872   /* FPM Dev CR 3
873   OPEN as_of_dates_csr;
874   FETCH as_of_dates_csr INTO l_dummy;
875 --  if as_of_dates_csr%NOTFOUND then
876   ----my_error_msg( 'Project '||p_project_id);
877   ----my_error_msg( 'Invalid ');
878   --  return 'N';
879   --end if;
880   ------my_error_msg( 'Project '||p_project_id);
881   ------my_error_msg( 'valid ');
882   --return 'Y';
883   CLOSE as_of_dates_csr;
884   */
885   -- FPM Dev CR 3
886   IF p_object_type = 'PA_ASSIGNMENTS' THEN
887     OPEN as_of_dates_assgn_csr;
888     FETCH as_of_dates_assgn_csr INTO l_dummy;
889     CLOSE as_of_dates_assgn_csr;
890   ELSE
891     OPEN as_of_dates_task_dlvr_csr;
892     FETCH as_of_dates_task_dlvr_csr INTO l_dummy;
893     CLOSE as_of_dates_task_dlvr_csr;
894   END IF;
895 
896   if l_dummy is null then
897         return 'Y';
898   else
899         return 'N';
900   end if;
901 END CHECK_VALID_AS_OF_DATE;
902 
903 FUNCTION Calc_base_percent(
904  p_task_id     NUMBER,
905  p_incr_work_qty NUMBER,
906  p_cuml_work_qty NUMBER,
907  p_est_remaining_effort NUMBER
908 ) RETURN NUMBER IS
909 
910 /* Replacing this sql with the following sqls: for bug 2679612
911  CURSOR cur_pa_task_prg
912  IS
913    SELECT PLANNED_WORK_QUANTITY,
914           WQ_ACTUAL_ENTRY_CODE
915      FROM pa_latest_proj_task_prog_v
916     WHERE task_id = p_task_id;
917 */
918 
919 --Bug fix 2679612
920   CURSOR cur_pa_task_prg1
921   IS
922     SELECT WQ_PLANNED_QUANTITY
923       FROM pa_proj_elements ppe,
924            pa_proj_element_versions ppev,
925            pa_proj_elem_ver_schedule ppevsh
926      WHERE ppe.project_id = ppev.project_id
927        AND ppe.proj_element_id = p_task_id
928        AND ppev.proj_element_id = ppe.proj_element_id
929        AND ppev.element_version_id = ppevsh.element_version_id
930        AND ppev.project_id = ppevsh.project_id
931        AND ppev.parent_structure_version_id = PA_PROJ_ELEMENTS_UTILS.latest_published_ver_id(ppe.project_id, 'WORKPLAN');
932 
933   CURSOR cur_pa_task_prg2
934   IS
935     SELECT nvl(ppe.WQ_ACTUAL_ENTRY_CODE,ptt.ACTUAL_WQ_ENTRY_CODE)
936      FROM pa_proj_elements ppe, pa_task_types ptt
937     WHERE ppe.type_id = ptt.task_type_id(+)
938       AND ptt.object_type = 'PA_TASKS' /* bug 3279978 FP M Enhancement */
939       AND ppe.proj_element_id = p_task_id ;
940 
941 --Bug fix 2679612
942 
943 
944  l_return_value   NUMBER := 0;
945  l_WQ_ACTUAL_ENTRY_CODE        VARCHAR2(30);
946  l_planned_work_quantity       NUMBER;
947  l_last_cumulative_wrk_qty     NUMBER;
948 BEGIN
949 
950     OPEN cur_pa_task_prg1;
951     FETCH cur_pa_task_prg1 INTO l_planned_work_quantity;
952     CLOSE cur_pa_task_prg1;
953 
954 -- Bug fix 2740446  cannot divide by 0
955     if (nvl(l_planned_work_quantity,0) = 0) then
956         return 0;
957     end if;
958 
959 --Bug fix 2679612
960     OPEN cur_pa_task_prg2;
961     FETCH cur_pa_task_prg2 INTO l_WQ_ACTUAL_ENTRY_CODE;
962     CLOSE cur_pa_task_prg2;
963 --Bug fix 2679612
964 
965 
966     IF l_WQ_ACTUAL_ENTRY_CODE = 'CUMULATIVE'
967     THEN
968        l_return_value := ( ( NVL(p_cuml_work_qty,0)/l_planned_work_quantity ) * 100 );
969     ELSE
970 
971 --bugfix :2670679
972 /*       OPEN cur_cumltv;
973        FETCH cur_cumltv INTO l_last_cumulative_wrk_qty;
974        if cur_cumltv%notfound then
975            l_last_cumulative_wrk_qty := 0;
976        end if;
977        CLOSE cur_cumltv;
978        l_return_value := ( ( ( l_last_cumulative_wrk_qty + p_incr_work_qty ) /l_planned_work_quantity) * 100 );
979 */
980        l_return_value := ( ( ( NVL(p_cuml_work_qty,0) + NVL(p_incr_work_qty,0) ) /l_planned_work_quantity) * 100 );
981     END IF;
982     if l_return_value > 100 then
983        return 100;
984     else
985        return nvl(l_return_value,0);
986     end if;
987 END Calc_base_percent;
988 
989 -- 4392189 Phase 2: This method is not used anywhere
990 /*
991 PROCEDURE get_rollup_attrs(
992  p_task_id                           NUMBER,
993  p_as_of_date                        DATE,
994  x_EFF_ROLLUP_PROG_STAT_CODE         OUT VARCHAR2,
995  x_EFF_ROLLUP_PROG_STAT_NAME         OUT VARCHAR2,
996  x_ESTIMATED_REMAINING_EFFORT        OUT NUMBER,
997  x_BASE_PERCENT_COMPLETE             OUT NUMBER,
998  x_EFF_ROLLUP_PERCENT_COMP           OUT NUMBER,
999  x_ESTIMATED_START_DATE              OUT DATE,
1000  x_ESTIMATED_FINISH_DATE             OUT DATE,
1001  x_ACTUAL_START_DATE                 OUT DATE,
1002  x_ACTUAL_FINISH_DATE                OUT DATE,
1003  x_status_icon_ind                   OUT VARCHAR2,
1004  x_status_icon_active_ind            OUT VARCHAR2
1005 ) IS
1006 
1007 
1008 --Added for performance improvements bug 2679612
1009   CURSOR cur_proj_elem
1010   IS
1011     SELECT project_id
1012      FROM pa_proj_elements
1013     WHERE proj_element_id = p_task_id;
1014     l_project_id          NUMBER;
1015 --Added for performance improvements bug 2679612
1016 
1017   CURSOR cur_pa_prg_rollup( c_project_id NUMBER )
1018   IS
1019     SELECT EFF_ROLLUP_PROG_STAT_CODE,
1020            pps.project_status_name,
1021            ESTIMATED_REMAINING_EFFORT,
1022            BASE_PERCENT_COMPLETE, EFF_ROLLUP_PERCENT_COMP,
1023            ESTIMATED_START_DATE, ESTIMATED_FINISH_DATE,
1024            ACTUAL_START_DATE, ACTUAL_FINISH_DATE,
1025            pps.status_icon_ind, pps.status_icon_active_ind
1026       FROM pa_progress_rollup ppr, pa_project_statuses pps
1027      WHERE object_id = p_task_id
1028        AND project_id = l_project_id
1029        AND ppr.eff_rollup_prog_stat_code = pps.project_status_code(+)
1030        AND as_of_date = ( SELECT max( as_of_date ) from pa_progress_rollup
1031                             WHERE object_id = p_task_id and as_of_date <= p_as_of_date
1032                              AND project_id = l_project_id );
1033 BEGIN
1034 --Added for performance improvements bug 2679612
1035      OPEN cur_proj_elem;
1036      FETCH cur_proj_elem INTO l_project_id;
1037      CLOSE cur_proj_elem;
1038 --Added for performance improvements bug 2679612
1039 
1040      OPEN cur_pa_prg_rollup(l_project_id);
1041      FETCH cur_pa_prg_rollup INTO x_EFF_ROLLUP_PROG_STAT_CODE, x_EFF_ROLLUP_PROG_STAT_NAME,
1042            x_ESTIMATED_REMAINING_EFFORT,
1043            x_BASE_PERCENT_COMPLETE, x_EFF_ROLLUP_PERCENT_COMP,
1044            x_ESTIMATED_START_DATE, x_ESTIMATED_FINISH_DATE,
1045            x_ACTUAL_START_DATE, x_ACTUAL_FINISH_DATE,
1046            x_status_icon_ind, x_status_icon_active_ind;
1047            ----my_error_msg( 'x_BASE_PERCENT_COMPLETE '|| x_BASE_PERCENT_COMPLETE );
1048            ----my_error_msg( 'x_EFF_ROLLUP_PERCENT_COMP '||x_EFF_ROLLUP_PERCENT_COMP );
1049 
1050      CLOSE cur_pa_prg_rollup;
1051 
1052 END get_rollup_attrs;
1053 */
1054 FUNCTION get_next_progress_cycle(
1055  p_project_id NUMBER,
1056  p_task_id NUMBER,
1057  p_object_id NUMBER := null, -- FPM Development Bug 3420093
1058  p_object_type VARCHAR2 := 'PA_TASKS', -- FPM Development Bug 3420093
1059  p_structure_type VARCHAR2 := 'WORKPLAN', -- FPM Development Bug 3420093
1060  p_start_date  DATE := to_date(null)  -- FPM Development Bug 3420093
1061  ,p_cbs_element_id   NUMBER := null -- Added for CBS phase 2 16200605
1062 )  RETURN DATE IS
1063 
1064 /* Bug 3974627 : Commnted and added new cusrosrs
1065    CURSOR cur_pa_ppc
1066    IS
1067      SELECT max( date_computed )
1068        FROM pa_percent_completes
1069       WHERE project_id = p_Project_ID
1070         AND object_id = decode(p_object_id, null, p_task_id, p_object_id) -- This is done to avoid any impact of parameter additions
1071         AND current_flag = 'Y'
1072         AND published_flag = 'Y'
1073         AND object_type = p_object_type
1074         AND structure_type = p_structure_type
1075     AND NVL(task_id, -1) = DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_task_id, NVL(task_id, -1)), NVL(p_task_id,p_object_id))
1076     ;
1077 */
1078 
1079 -- Bug  3974627 : Added Cursors cur_pa_ppc_str_task, cur_pa_ppc_asgn, cur_pa_ppc_dlv
1080    CURSOR cur_pa_ppc_str_task
1081    IS
1082      SELECT max( date_computed )
1083        FROM pa_percent_completes
1084       WHERE project_id = p_Project_ID
1085         AND object_id = decode(p_object_id, null, p_task_id, p_object_id)
1086         AND current_flag = 'Y'
1087         AND published_flag = 'Y'
1088         AND object_type = p_object_type
1089         AND structure_type = p_structure_type
1090     AND task_id = NVL(p_task_id,p_object_id)
1091 	AND NVL(cbs_element_id,-1) = NVL(p_cbs_element_id,-1) --Added for CBS phase 2 16200605
1092     ;
1093 
1094    CURSOR cur_pa_ppc_asgn
1095    IS
1096      SELECT max( date_computed )
1097        FROM pa_percent_completes
1098       WHERE project_id = p_Project_ID
1099         AND current_flag = 'Y'
1100         AND published_flag = 'Y'
1101         AND object_type IN ('PA_ASSIGNMENTS' ,'PA_TASKS')
1102         AND structure_type = p_structure_type
1103     AND task_id = p_task_id
1104     ;
1105 
1106    CURSOR cur_dlv_get_asso_task(c_del_elem_id NUMBER)
1107    IS
1108           SELECT por.object_id_from2
1109           FROM pa_object_relationships por
1110           WHERE
1111           por.object_type_to = 'PA_DELIVERABLES'
1112       AND por.relationship_subtype IN  ('STRUCTURE_TO_DELIVERABLE', 'TASK_TO_DELIVERABLE')
1113       AND por.relationship_type = 'A'
1114       AND por.object_id_to2 = c_del_elem_id
1115       ;
1116    l_del_task_id NUMBER;
1117 
1118    CURSOR cur_pa_ppc_dlv(c_task_id NUMBER)
1119    IS
1120      SELECT max( date_computed )
1121        FROM pa_percent_completes
1122       WHERE project_id = p_Project_ID
1123         AND ((c_task_id IS NULL AND object_id =p_object_id) OR (c_task_id IS NOT NULL AND object_id IN (c_task_id, p_object_id)))
1124         AND current_flag = 'Y'
1125         AND published_flag = 'Y'
1126         AND object_type IN ('PA_DELIVERABLES' ,'PA_TASKS')
1127         AND structure_type = p_structure_type
1128     AND NVL(task_id, -1) = NVL(p_task_id, NVL(task_id, -1))
1129     ;
1130 
1131 
1132    CURSOR cur_pa_proj_prg_attr
1133    IS
1134      SELECT progress_cycle_id
1135        FROM pa_proj_progress_attr
1136       WHERE project_id = p_project_id
1137       AND structure_type = p_structure_type;
1138 
1139    CURSOR cur_pa_proj
1140    IS
1141    SELECT start_date, completion_date
1142      FROM pa_projects_all
1143     WHERE project_id = p_project_id;
1144 
1145 
1146    l_last_progress_date  DATE;
1147    l_progress_cycle_id   NUMBER;
1148    l_return_date         DATE;
1149 
1150   l_proj_finish_date    DATE;
1151   l_proj_start_date     DATE;
1152 
1153   l_cycle_type     varchar2(30);
1154   l_value1         number;
1155   cursor get_cycle_info is
1156   Select Billing_Cycle_Type, Billing_Value1
1157   From    PA_Billing_Cycles
1158   Where   Billing_Cycle_ID = l_progress_cycle_id;
1159 
1160 BEGIN
1161    ---5226910(5212999)
1162    OPEN cur_pa_proj_prg_attr;
1163    FETCH cur_pa_proj_prg_attr INTO l_progress_cycle_id;
1164    CLOSE cur_pa_proj_prg_attr;
1165 
1166    if (p_start_date is null) then
1167      OPEN cur_pa_proj;
1168      FETCH cur_pa_proj INTO l_proj_start_date, l_proj_finish_date;
1169      CLOSE cur_pa_proj;
1170 
1171      -- Bug  3974627 Commented
1172      --OPEN cur_pa_ppc;
1173      --FETCH cur_pa_ppc INTO l_last_progress_date;
1174      --CLOSE cur_pa_ppc;
1175 
1176      -- Bug  3974627 Begin
1177      IF p_object_type IN ('PA_TASKS', 'PA_STRUCTURES') THEN
1178     OPEN cur_pa_ppc_str_task;
1179     FETCH cur_pa_ppc_str_task INTO l_last_progress_date;
1180     CLOSE cur_pa_ppc_str_task;
1181      ELSIF p_object_type = 'PA_ASSIGNMENTS' THEN
1182     OPEN cur_pa_ppc_asgn;
1183     FETCH cur_pa_ppc_asgn INTO l_last_progress_date;
1184     CLOSE cur_pa_ppc_asgn;
1185      ELSIF p_object_type = 'PA_DELIVERABLES' THEN
1186         OPEN cur_dlv_get_asso_task(p_object_id);
1187     FETCH cur_dlv_get_asso_task INTO l_del_task_id;
1188     CLOSE cur_dlv_get_asso_task;
1189 
1190     OPEN cur_pa_ppc_dlv(l_del_task_id);
1191     FETCH cur_pa_ppc_dlv INTO l_last_progress_date;
1192     CLOSE cur_pa_ppc_dlv;
1193      END IF;
1194      -- Bug  3974627 End
1195 
1196      IF l_last_progress_date IS NULL
1197      THEN
1198         ----l_last_progress_date := NVL( l_proj_start_date, TRUNC(SYSDATE) );
1199         l_last_progress_date := TRUNC(SYSDATE)-1;
1200      END IF;
1201 
1202      --- as of date to remain same if in future  5226910 (5212999)
1203      if (l_last_progress_date >= trunc(sysdate)) then
1204          open get_cycle_info;
1205          fetch get_cycle_info into l_cycle_type, l_value1;
1206          close get_cycle_info;
1207          If l_Cycle_Type = 'BILLING CYCLE DAYS' Then
1208             l_last_progress_date := l_last_progress_date -l_value1;
1209          else
1210             l_last_progress_date := l_last_progress_date -1;
1211          end if;
1212      else
1213          l_last_progress_date := l_last_progress_date;
1214      end if;
1215    else
1216      l_last_progress_date := p_start_date;
1217    end if;
1218 
1219      OPEN cur_pa_proj_prg_attr;
1220      FETCH cur_pa_proj_prg_attr INTO l_progress_cycle_id;
1221      CLOSE cur_pa_proj_prg_attr;
1222 
1223      if (l_progress_cycle_id is not null) then
1224         l_return_date := PA_Billing_Cycles_Pkg.Get_Next_Billing_Date
1225                     (X_Project_ID          => p_Project_ID,
1226                      X_Project_Start_Date  => l_last_progress_date,
1227                      X_Billing_Cycle_ID    => l_progress_cycle_id,
1228                      X_Billing_Offset_Days => 0,
1229                      X_Bill_Thru_Date      => l_proj_finish_date,
1230                      X_Last_Bill_Thru_Date => l_last_progress_date );
1231      else
1232         l_return_date := l_last_progress_date + 1;
1233      end if;
1234 
1235      RETURN ( l_return_date );
1236 END get_next_progress_cycle;
1237 
1238 
1239 
1240 FUNCTION get_prog_dt_closest_to_sys_dt(
1241  p_project_id NUMBER,
1242  p_task_id NUMBER, -- From deliverables it will be passed as null
1243  p_object_id NUMBER := null, -- FPM Development Bug 3420093
1244  p_object_type VARCHAR2 := 'PA_TASKS', -- FPM Development Bug 3420093
1245  p_structure_type VARCHAR2 := 'WORKPLAN'
1246 ,p_cbs_element_id   NUMBER := null -- Added for CBS phase 2 16200605
1247 ) RETURN DATE IS
1248    l_last_progress_date  DATE;
1249    l_progress_cycle_id   NUMBER;
1250    l_return_date         DATE;
1251    l_next_progress_date  DATE;
1252    l_dates_array         PA_VC_2000_10 := pa_vc_2000_10(2000);  --Bug 6627846
1253    l_previous_date_index NUMBER;
1254    l_next_date_index     NUMBER;
1255    l_prev_diff           NUMBER;
1256    l_next_diff           NUMBER;
1257    l_closest_date        DATE;
1258    l_date_index          NUMBER;
1259 
1260 
1261    CURSOR cur_pa_proj
1262    IS
1263    SELECT start_date, completion_date
1264      FROM pa_projects_all
1265     WHERE project_id = p_project_id;
1266 
1267 -- Bug  3974627 : Commented this cursor and added new ones
1268 /*
1269    CURSOR cur_pa_ppc
1270    IS
1271      SELECT max( date_computed )
1272        FROM pa_percent_completes
1273       WHERE project_id = p_Project_ID
1274 --        AND object_id    = p_task_id
1275         AND object_id    = decode(p_object_id, null, p_task_id, p_object_id) -- This is Done to avoid the impact
1276         AND object_type = p_object_type
1277         AND current_flag = 'Y'
1278         AND published_flag = 'Y'
1279         AND structure_type = p_structure_type
1280     AND NVL(task_id, -1) = DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_task_id, NVL(task_id, -1)), NVL(p_task_id,p_object_id))
1281     --and task_id = p_task_id
1282     ;
1283 */
1284 
1285 -- Bug  3974627 : Added Cursors cur_pa_ppc_str_task, cur_pa_ppc_asgn, cur_pa_ppc_dlv
1286    CURSOR cur_pa_ppc_str_task
1287    IS
1288      SELECT max( date_computed )
1289        FROM pa_percent_completes
1290       WHERE project_id = p_Project_ID
1291         AND object_id = decode(p_object_id, null, p_task_id, p_object_id)
1292         AND current_flag = 'Y'
1293         AND published_flag = 'Y'
1294         AND object_type = p_object_type
1295         AND structure_type = p_structure_type
1296     AND task_id = NVL(p_task_id,p_object_id)
1297 	AND NVL(cbs_element_id,-1) = NVL(p_cbs_element_id,-1) --Added for CBS phase 2 16200605
1298     ;
1299 
1300    CURSOR cur_pa_ppc_asgn
1301    IS
1302      SELECT max( date_computed )
1303        FROM pa_percent_completes
1304       WHERE project_id = p_Project_ID
1305         AND current_flag = 'Y'
1306         AND published_flag = 'Y'
1307         AND ((object_type = 'PA_ASSIGNMENTS' and object_id = p_object_id AND NVL(cbs_element_id,-1) = NVL(p_cbs_element_id,-1)) --Added for CBS phase 2 16200605
1308              or (object_type = 'PA_TASKS' and object_id = p_task_id))
1309         AND structure_type = p_structure_type
1310         AND task_id = p_task_id
1311         ;
1312 
1313    CURSOR cur_dlv_get_asso_task(c_del_elem_id NUMBER)
1314    IS
1315           SELECT por.object_id_from2
1316           FROM pa_object_relationships por
1317           WHERE
1318           por.object_type_to = 'PA_DELIVERABLES'
1319       AND por.relationship_subtype IN  ('STRUCTURE_TO_DELIVERABLE', 'TASK_TO_DELIVERABLE')
1320       AND por.relationship_type = 'A'
1321       AND por.object_id_to2 = c_del_elem_id
1322       ;
1323    l_del_task_id NUMBER;
1324 
1325    CURSOR cur_pa_ppc_dlv_notask
1326    IS
1327      SELECT max( date_computed )
1328        FROM pa_percent_completes
1329       WHERE project_id = p_Project_ID
1330         AND object_id = p_object_id
1331         AND current_flag = 'Y'
1332         AND published_flag = 'Y'
1333         AND object_type = 'PA_DELIVERABLES'
1334         AND structure_type = p_structure_type
1335         AND NVL(task_id, -1) = NVL(p_task_id, NVL(task_id, -1))
1336         ;
1337 
1338    CURSOR cur_pa_ppc_dlv_task(c_task_id NUMBER)
1339    IS
1340      SELECT max( date_computed )
1341        FROM pa_percent_completes
1342       WHERE project_id = p_Project_ID
1343         AND ((object_id = p_object_id and object_type = 'PA_DELIVERABLES') or
1344             (object_id = p_task_id and object_type = 'PA_TASKS'))
1345         AND current_flag = 'Y'
1346         AND published_flag = 'Y'
1347         AND structure_type = p_structure_type
1348         ;
1349   CURSOR cur_pa_ppc_w
1350    IS
1351      SELECT max( date_computed )
1352        FROM pa_percent_completes
1353       WHERE project_id = p_Project_ID
1354 --        AND object_id    = p_task_id
1355         AND object_id    = decode(p_object_id, null, p_task_id, p_object_id) -- This is Done to avoid the impact
1356         AND object_type = p_object_type
1357         AND current_flag = 'N'
1358         AND published_flag = 'N'
1359         AND structure_type = p_structure_type
1360 		AND NVL(cbs_element_id,-1) = NVL(p_cbs_element_id,-1) --Added for CBS phase 2 16200605
1361         AND NVL(task_id, -1) = DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_task_id, NVL(task_id, -1)), NVL(p_task_id,p_object_id)) /* Amit : Modified for IB4 Progress CR. */
1362     --and task_id = p_task_id /* Modified for IB4 Progress CR. */;
1363     ;
1364 
1365    CURSOR cur_pa_proj_prg_attr
1366    IS
1367      SELECT progress_cycle_id
1368        FROM pa_proj_progress_attr
1369       WHERE project_id = p_project_id
1370       AND structure_type = p_structure_type;
1371 
1372   l_proj_finish_date    DATE;
1373   l_proj_start_date     DATE;
1374   l_valid_as_of_date varchar2(1);
1375 
1376   l_cycle_type     varchar2(30);
1377   l_value1         number;
1378   cursor get_cycle_info is
1379   Select Billing_Cycle_Type, Billing_Value1
1380   From    PA_Billing_Cycles
1381   Where   Billing_Cycle_ID = l_progress_cycle_id;
1382 
1383 BEGIN
1384      OPEN cur_pa_proj;
1385      FETCH cur_pa_proj INTO l_proj_start_date, l_proj_finish_date;
1386      CLOSE cur_pa_proj;
1387 
1388      OPEN cur_pa_ppc_w;
1389      FETCH cur_pa_ppc_w INTO l_last_progress_date;
1390      CLOSE cur_pa_ppc_w;
1391 
1392      IF p_object_type = 'PA_TASKS' THEN -- This is Done to avoid the impact
1393         l_valid_as_of_date := CHECK_VALID_AS_OF_DATE ( l_last_progress_date, p_project_id, p_task_id);
1394      ELSE
1395         l_valid_as_of_date := CHECK_VALID_AS_OF_DATE ( l_last_progress_date, p_project_id, p_object_id, p_object_type,p_task_id/* Amit : Modified for IB4 Progress CR. */,p_cbs_element_id );
1396      END IF;
1397 
1398 
1399 
1400      if (l_last_progress_date is not null) then
1401          IF l_valid_as_of_date = 'Y'
1402          THEN
1403              return l_last_progress_date;
1404          --if the there is working version and the progress cycle id is cahnegd then return the next valid date.
1405          --we do not need to write any else here.
1406          END IF;
1407      end if;
1408 
1409      -- Bug  3974627 : Commented
1410      --OPEN cur_pa_ppc;
1411      --FETCH cur_pa_ppc INTO l_last_progress_date;
1412      --CLOSE cur_pa_ppc;
1413 
1414      -- Bug  3974627 Begin
1415      IF p_object_type IN ('PA_TASKS', 'PA_STRUCTURES') THEN
1416     OPEN cur_pa_ppc_str_task;
1417     FETCH cur_pa_ppc_str_task INTO l_last_progress_date;
1418     CLOSE cur_pa_ppc_str_task;
1419      ELSIF p_object_type = 'PA_ASSIGNMENTS' THEN
1420     OPEN cur_pa_ppc_asgn;
1421     FETCH cur_pa_ppc_asgn INTO l_last_progress_date;
1422     CLOSE cur_pa_ppc_asgn;
1423      ELSIF p_object_type = 'PA_DELIVERABLES' THEN
1424     OPEN cur_dlv_get_asso_task(p_object_id);
1425     FETCH cur_dlv_get_asso_task INTO l_del_task_id;
1426     CLOSE cur_dlv_get_asso_task;
1427 
1428         if l_del_task_id is not null then
1429             OPEN cur_pa_ppc_dlv_task(l_del_task_id);
1430             FETCH cur_pa_ppc_dlv_task INTO l_last_progress_date;
1431             CLOSE cur_pa_ppc_dlv_task;
1432         else
1433             OPEN cur_pa_ppc_dlv_notask;
1434             FETCH cur_pa_ppc_dlv_notask INTO l_last_progress_date;
1435             CLOSE cur_pa_ppc_dlv_notask;
1436         end if;
1437      END IF;
1438      -- Bug  3974627 End
1439 
1440      IF l_last_progress_date IS NULL
1441      THEN
1442         l_last_progress_date := trunc(sysdate)-1; -----NVL( l_proj_start_date, TRUNC(SYSDATE) );
1443      END IF;
1444 
1445 --------my_error_msg( 'l_last_progress_date '|| l_last_progress_date );
1446 
1447      OPEN cur_pa_proj_prg_attr;
1448      FETCH cur_pa_proj_prg_attr INTO l_progress_cycle_id;
1449      CLOSE cur_pa_proj_prg_attr;
1450 
1451      --- as of date to remain same if in future 5212999
1452      if (l_last_progress_date >= trunc(sysdate)) then
1453         open get_cycle_info;
1454          fetch get_cycle_info into l_cycle_type, l_value1;
1455          close get_cycle_info;
1456          If l_Cycle_Type = 'BILLING CYCLE DAYS' Then
1457             l_last_progress_date := l_last_progress_date -l_value1;
1458          else
1459             l_next_progress_date := l_last_progress_date -1;
1460          end if;
1461      else
1462          l_next_progress_date := l_last_progress_date;
1463      end if;
1464      IF l_progress_cycle_id IS NULL
1465      THEN
1466          RETURN l_last_progress_date + 1;
1467      END IF;
1468 
1469   WHILE NVL( l_return_date, SYSDATE ) <= SYSDATE
1470   LOOP
1471      l_return_date := PA_Billing_Cycles_Pkg.Get_Next_Billing_Date
1472                     (X_Project_ID          => p_Project_ID,
1473                      X_Project_Start_Date  => l_last_progress_date,
1474                      X_Billing_Cycle_ID    => l_progress_cycle_id,
1475                      X_Billing_Offset_Days => 0,
1476                      X_Bill_Thru_Date      => l_proj_finish_date,
1477                      X_Last_Bill_Thru_Date => l_next_progress_date );
1478 
1479      l_date_index := NVL( l_date_index, 0 ) + 1;
1480 
1481      l_dates_array.extend(1);
1482      l_dates_array(l_date_index) := to_char(l_return_date, 'MM-DD-RR');
1483 
1484      l_next_progress_date := l_return_date;
1485 
1486 --Bug 6627846: Below code restricts number of entries in l_return_date.Refer bug for more details
1487      IF l_date_index >= 1999  -- Bug 6627846, changed from 999 to 1999
1488      THEN
1489         exit;
1490      END IF;
1491 
1492   END LOOP;
1493 
1494 --  FOR i in 1..1000 LOOP Modified for bug 3795916
1495   FOR i in l_dates_array.FIRST..l_dates_array.LAST LOOP
1496       IF  to_date( l_dates_array(i), 'MM-DD-RR' ) >= TRUNC(SYSDATE)  -- Added trunc for bug 3795916
1497       THEN
1498          IF i > 1
1499          THEN
1500              l_previous_date_index := i - 1;
1501          ELSE
1502              l_previous_date_index := i;
1503          END IF;
1504          l_next_date_index := i;
1505          exit;
1506       END IF;
1507   END LOOP;
1508 
1509   ---bug 16728941 start
1510  IF l_previous_date_index is not null AND l_next_date_index is not null THEN
1511 
1512   l_prev_diff := SYSDATE - to_date( l_dates_array(l_previous_date_index), 'MM-DD-RR' );
1513   l_next_diff := to_date( l_dates_array(l_next_date_index), 'MM-DD-RR' ) - SYSDATE;
1514 
1515   IF l_prev_diff < l_next_diff
1516   THEN
1517     l_closest_date := to_date( l_dates_array(l_previous_date_index), 'MM-DD-RR' );
1518   ELSE
1519     l_closest_date := to_date( l_dates_array(l_next_date_index), 'MM-DD-RR' );
1520   END IF;
1521  END IF;
1522 
1523   RETURN (nvl(l_closest_date,l_last_progress_date));
1524   --bug 16728941 end
1525 
1526 END get_prog_dt_closest_to_sys_dt;
1527 
1528 --aod --as of date
1529 --This function returns 'N' if there does not exists any progress
1530 --on passed as_of_date otherwise it
1531 --will return 'WORKING' or 'PUBLISHED' progress depending on the
1532 --publish flag.
1533 FUNCTION check_prog_exists_on_aod(
1534  p_project_id       NUMBER,
1535  p_object_type      VARCHAR2,
1536  p_object_version_id NUMBER,
1537  p_task_id NUMBER := null/* Amit : Modified for IB4 Progress CR. */     ,
1538  p_as_of_date DATE,
1539  p_structure_type VARCHAR2 := 'WORKPLAN' -- FPM Development Bug 3420093
1540  ,p_object_id   NUMBER := null /* Modified for IB4 Progress CR. */
1541  ,p_cbs_element_id     NUMBER := NULL --Added for 16200605
1542 ) RETURN VARCHAR2 IS
1543 
1544   CURSOR cur_ppc
1545   IS
1546     SELECT /*+ INDEX(pa_percent_completes PA_PERCENT_COMPLETES_N3)*/ decode( published_flag, 'Y', 'PUBLISHED', 'N', 'WORKING' ) --Added hint for 15876400
1547       FROM pa_percent_completes
1548      WHERE object_id = nvl(p_object_id, p_task_id) /* Modified for IB4 Progress CR. */
1549        AND object_type = p_object_type
1550        AND project_id  = p_project_id
1551        AND date_computed = p_as_of_date
1552        AND structure_type = p_structure_type
1553        and NVL(task_id,-1) = DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_task_id,NVL(task_id,-1)),NVL(p_task_id, p_object_id)) /* Amit : Modified for IB4 Progress CR. */
1554         AND NVL(cbs_element_id,-1) = NVL(p_cbs_element_id,-1)  --Added for 16200605
1555 	   order by published_flag;  --bug 4185364
1556   l_return_value   VARCHAR2(15);
1557 BEGIN
1558     OPEN cur_ppc;
1559     FETCH cur_ppc INTO l_return_value;
1560     CLOSE cur_ppc;
1561     RETURN NVL( l_return_value, 'N' );
1562 END check_prog_exists_on_aod;
1563 
1564 FUNCTION get_ppc_id(
1565  p_project_id    NUMBER
1566 ,p_object_id     NUMBER
1567 ,p_object_type   VARCHAR2
1568 ,p_object_version_id  NUMBER
1569 ,p_as_of_date    DATE
1570 ,p_structure_type VARCHAR2 := 'WORKPLAN' -- FPM Development Bug 3420093
1571 ,p_task_id NUMBER := null /* Modified for IB4 Progress CR. */
1572 ,p_cbs_element_id     NUMBER := NULL --Added for 16200605
1573 ) RETURN NUMBER IS
1574 
1575    CURSOR cur_ppc_id
1576    IS
1577      SELECT percent_complete_id
1578        FROM pa_percent_completes
1579       WHERE object_type = p_object_type
1580         AND object_id = p_object_id
1581         AND project_id = p_project_id
1582 --        AND object_version_id = p_object_version_id
1583         AND date_computed = p_as_of_date
1584         AND structure_type = p_structure_type
1585         and NVL(task_id,-1) = DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_task_id,NVL(task_id,-1)),NVL(p_task_id, p_object_id)) /* Amit : Modified for IB4 Progress CR. */
1586     --and task_id = nvl(p_task_id, p_object_id)  /* Modified for IB4 Progress CR. */
1587          AND NVL(cbs_element_id,-1) = NVL(p_cbs_element_id,-1)  --Added for 16200605
1588 	   order by published_flag  --bug 4185364
1589        ;
1590 
1591    l_ppc_id NUMBER;
1592 
1593 BEGIN
1594 
1595    OPEN cur_ppc_id;
1596    FETCH cur_ppc_id INTO l_ppc_id;
1597    CLOSE cur_ppc_id;
1598 
1599    RETURN l_ppc_id;
1600 
1601 END get_ppc_id;
1602 
1603 FUNCTION get_prog_rollup_id(
1604  p_project_id    NUMBER
1605 ,p_object_id     NUMBER
1606 ,p_object_type   VARCHAR2
1607 ,p_object_version_id NUMBER
1608 ,p_as_of_date    DATE
1609 ,p_structure_type VARCHAR2 := 'WORKPLAN' -- FPM Development Bug 3420093
1610 ,p_structure_version_id NUMBER := null -- FPM Development Bug 3420093
1611 ,x_record_version_number OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
1612 ,p_proj_element_id NUMBER := null /* Modified for IB4 Progress CR. */
1613 ,p_action          VARCHAR2 := 'PUBLISH' -- Bug 3879461
1614 ,p_cbs_element_id     NUMBER := NULL --Added for 16200605
1615  ) RETURN NUMBER
1616 IS
1617 
1618    CURSOR cur_prog_rollup_id_pub_wp
1619    IS
1620      SELECT progress_rollup_id, record_version_number
1621        FROM pa_progress_rollup
1622       WHERE object_type = p_object_type
1623         AND object_id = p_object_id
1624         AND project_id = p_project_id
1625 --        AND object_version_id = p_object_version_id
1626         AND as_of_date = p_as_of_date
1627         AND structure_type = p_structure_type
1628         AND structure_version_id is null
1629     and ((p_action = 'SAVE' AND current_flag = 'W') OR (p_action = 'PUBLISH' AND current_flag IN ('Y', 'N'))) -- Bug 3879461
1630         and NVL(proj_element_id,-1) = DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_proj_element_id,NVL(proj_element_id,-1)),NVL(p_proj_element_id, p_object_id)) /* Amit : Modified for IB4 Progress CR. */
1631 		AND NVL(cbs_element_id,-1) = NVL(p_cbs_element_id,-1); --Added for 16200605
1632     --and proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
1633 
1634 
1635    CURSOR cur_prog_rollup_id_work_wp
1636    IS
1637      SELECT progress_rollup_id, record_version_number
1638        FROM pa_progress_rollup
1639       WHERE object_type = p_object_type
1640         AND object_id = p_object_id
1641         AND project_id = p_project_id
1642         AND structure_type = p_structure_type
1643         AND structure_version_id = p_structure_version_id
1644         and NVL(proj_element_id,-1) = DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_proj_element_id,NVL(proj_element_id,-1)),NVL(p_proj_element_id, p_object_id)) /* Amit : Modified for IB4 Progress CR. */
1645     --and proj_element_id = nvl(p_proj_element_id,p_object_id) /* Modified for IB4 Progress CR. */;
1646 	  AND NVL(cbs_element_id,-1) = NVL(p_cbs_element_id,-1); --Added for 16200605
1647 
1648    l_prog_rollup_id NUMBER;
1649 
1650 BEGIN
1651 
1652 IF p_structure_version_id is NULL THEN
1653    OPEN cur_prog_rollup_id_pub_wp;
1654    FETCH cur_prog_rollup_id_pub_wp INTO l_prog_rollup_id, x_record_version_number;
1655    CLOSE cur_prog_rollup_id_pub_wp;
1656 ELSE
1657    OPEN cur_prog_rollup_id_work_wp;
1658    FETCH cur_prog_rollup_id_work_wp INTO l_prog_rollup_id, x_record_version_number;
1659    CLOSE cur_prog_rollup_id_work_wp;
1660 END IF;
1661 
1662    RETURN l_prog_rollup_id;
1663 
1664 END get_prog_rollup_id;
1665 
1666 FUNCTION check_task_has_progress(
1667 p_task_id    NUMBER ) RETURN VARCHAR2 IS
1668 
1669 --Added for performance improvements bug 2679612
1670   CURSOR cur_proj_elem
1671   IS
1672     SELECT project_id
1673      FROM pa_proj_elements
1674     WHERE proj_element_id = p_task_id;
1675     l_project_id          NUMBER;
1676 --Added for performance improvements bug 2679612
1677 
1678     CURSOR cur_pa_prog_exists(c_project_id NUMBER )
1679     IS
1680       SELECT 'X'
1681         FROM pa_percent_completes
1682        WHERE object_id = p_task_id
1683          AND project_id = c_project_id;
1684     l_dummy_char    VARCHAR2(1);
1685 BEGIN
1686 
1687 --Added for performance improvements bug 2679612
1688    OPEN cur_proj_elem;
1689    FETCH cur_proj_elem INTO l_project_id;
1690    CLOSE cur_proj_elem;
1691 --Added for performance improvements bug 2679612
1692 
1693     OPEN cur_pa_prog_exists( l_project_id );
1694     FETCH cur_pa_prog_exists INTO l_dummy_char;
1695     IF cur_pa_prog_exists%FOUND
1696     THEN
1697        CLOSE cur_pa_prog_exists;
1698        RETURN 'Y';
1699     ELSE
1700        CLOSE cur_pa_prog_exists;
1701        RETURN 'N';
1702     END IF;
1703 
1704 END check_task_has_progress;
1705 
1706 -- FPM Dev CR 3 : This function is not used.
1707 FUNCTION get_last_cumulative(
1708  p_project_id    NUMBER
1709 ,p_object_id     NUMBER
1710 ,p_object_type   VARCHAR2
1711 ,p_as_of_date    DATE )
1712 RETURN NUMBER IS
1713  -- 4348710 : Added structure_type and structure_version_id joins
1714    CURSOR cur_cumla
1715    IS
1716      SELECT cumulative_work_quantity
1717        FROM pa_progress_rollup
1718       WHERE project_id = p_project_id
1719         AND object_id = p_object_id
1720         AND object_type = p_object_type
1721     AND structure_type = 'WORKPLAN'
1722     AND structure_version_id is null
1723         AND as_of_date = ( SELECT max( as_of_date )
1724                              FROM pa_progress_rollup
1725                             WHERE project_id = p_project_id
1726                               AND object_id = p_object_id
1727                               AND object_type = p_object_type
1728                               AND as_of_date < p_as_of_date
1729                   AND structure_type = 'WORKPLAN'
1730                   AND structure_version_id is null
1731                   );
1732 
1733    l_cumulative_work_qty NUMBER;
1734 BEGIN
1735      OPEN cur_cumla;
1736      FETCH cur_cumla INTO l_cumulative_work_qty;
1737      CLOSE cur_cumla;
1738      RETURN NVL( l_cumulative_work_qty, 0 );
1739 END get_last_cumulative;
1740 
1741 FUNCTION get_planned_wq(
1742  p_project_id    NUMBER
1743 ,p_object_id     NUMBER
1744 ,p_object_version_id NUMBER ) RETURN NUMBER IS
1745 
1746  CURSOR cur_prj_sch
1747  IS
1748     SELECT NVL( wq_planned_quantity, 0 )
1749       FROM pa_proj_elem_ver_schedule
1750      WHERE project_id = p_project_id
1751        AND proj_element_id = p_object_id
1752        AND element_version_id = p_object_version_id;
1753  l_planned_qty   NUMBER;
1754 BEGIN
1755      OPEN cur_prj_sch;
1756      FETCH cur_prj_sch INTO l_planned_qty;
1757      CLOSE cur_prj_sch;
1758      ----my_error_msg( 'p_object_version_id '|| p_object_version_id );
1759      ----my_error_msg( 'l_planned_qty '|| l_planned_qty );
1760      RETURN NVL( l_planned_qty, 0 );
1761 END get_planned_wq;
1762 
1763 PROCEDURE clear_prog_outdated_flag(
1764  p_project_id    NUMBER
1765 ,p_object_id     NUMBER
1766 ,p_object_type   VARCHAR2
1767 ,p_structure_version_id   NUMBER   default null    --bug 3851528
1768 ,x_return_status              OUT       NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1769 ,x_msg_count          OUT       NOCOPY NUMBER --File.Sql.39 bug 4440895
1770 ,x_msg_data                 OUT         NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1771 ) IS
1772 
1773   l_proj_element_id     NUMBER;
1774 
1775 BEGIN
1776      x_return_status := FND_API.G_RET_STS_SUCCESS;
1777 
1778   IF p_structure_version_id IS NULL
1779   THEN
1780      IF p_object_type = 'PA_TASKS'
1781      THEN
1782          l_proj_element_id := p_object_id;
1783          UPDATE pa_proj_elements
1784             SET progress_outdated_flag = 'N'
1785            WHERE proj_element_id = l_proj_element_id;
1786      ELSIF p_object_type = 'PA_STRUCTURES'
1787      THEN
1788          UPDATE pa_proj_elements ppe
1789             SET progress_outdated_flag = 'N'
1790           WHERE proj_element_id = ( SELECT proj_element_id
1791                                       FROM pa_proj_structure_types ppst
1792                                      WHERE ppst.structure_type_id = 1      --WORKPLAN
1793                                        AND ppst.proj_element_id = ppe.proj_element_id )
1794             AND project_id = p_project_id;
1795      END IF;
1796   ELSIF p_structure_version_id IS NOT NULL
1797   THEN
1798         UPDATE pa_proj_elements
1799            SET progress_outdated_flag = 'N'
1800         WHERE proj_element_id in ( SELECT proj_element_id
1801                                      FROM pa_proj_element_versions
1802                                      WHERE project_id = p_project_id
1803                                        AND parent_structure_version_id = p_structure_version_id
1804                                        AND object_type in ( 'PA_STRUCTURES', 'PA_TASKS' )  )
1805         AND object_type in ( 'PA_STRUCTURES', 'PA_TASKS' )
1806         AND project_id = p_project_id
1807         ;
1808   END IF;
1809 
1810 EXCEPTION
1811     WHEN FND_API.G_EXC_ERROR THEN
1812       x_return_status := FND_API.G_RET_STS_ERROR;
1813     WHEN OTHERS THEN
1814       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1815       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROGRESS_UTILS',
1816                               p_procedure_name => 'clear_prog_outdated_flag',
1817                               p_error_text     => SUBSTRB(SQLERRM,1,120));
1818       x_msg_count := FND_MSG_PUB.count_msg;
1819       x_msg_data := SUBSTRB(SQLERRM,1,120) ; -- 4537865
1820       RAISE;
1821 END clear_prog_outdated_flag;
1822 
1823 
1824 -- FPM Development Bug 3420093
1825 PROCEDURE get_project_progress_defaults(
1826  p_project_id                   NUMBER
1827 ,p_structure_type               IN VARCHAR2
1828 ,x_WQ_ENABLED_FLAG              OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1829 ,x_EFFORT_ENABLED_FLAG          OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1830 ,x_PERCENT_COMP_ENABLED_FLAG    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1831 ,x_task_weight_basis_code       OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1832 ,X_ALLOW_COLLAB_PROG_ENTRY      OUT NOCOPY VARCHAR2  --File.Sql.39 bug 4440895
1833 ,X_ALLW_PHY_PRCNT_CMP_OVERRIDES OUT NOCOPY VARCHAR2  --File.Sql.39 bug 4440895
1834 ) IS
1835 
1836   CURSOR cur_prg_deflts
1837     IS
1838       SELECT
1839         WQ_ENABLE_FLAG,
1840         REMAIN_EFFORT_ENABLE_FLAG,
1841         PERCENT_COMP_ENABLE_FLAG,
1842         task_weight_basis_code,
1843         ALLOW_COLLAB_PROG_ENTRY,
1844         ALLOW_PHY_PRCNT_CMP_OVERRIDES
1845        FROM pa_proj_progress_attr
1846        WHERE project_id = p_project_id
1847          AND structure_type = p_structure_type;
1848 
1849 BEGIN
1850      OPEN cur_prg_deflts;
1851      FETCH cur_prg_deflts INTO x_WQ_ENABLED_FLAG
1852                               ,x_EFFORT_ENABLED_FLAG
1853                               ,x_PERCENT_COMP_ENABLED_FLAG
1854                               ,x_task_weight_basis_code
1855                               ,X_ALLOW_COLLAB_PROG_ENTRY
1856                               ,X_ALLW_PHY_PRCNT_CMP_OVERRIDES;
1857      CLOSE cur_prg_deflts;
1858 
1859 -- 4537865
1860 EXCEPTION
1861 WHEN OTHERS THEN
1862 
1863     x_WQ_ENABLED_FLAG              := NULL ;
1864     x_EFFORT_ENABLED_FLAG          := NULL ;
1865     x_PERCENT_COMP_ENABLED_FLAG    := NULL ;
1866     x_task_weight_basis_code       := NULL ;
1867     x_ALLOW_COLLAB_PROG_ENTRY      := NULL ;
1868     x_ALLW_PHY_PRCNT_CMP_OVERRIDES := NULL ;
1869 
1870       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROGRESS_UTILS',
1871                               p_procedure_name => 'get_project_progress_defaults',
1872                               p_error_text     => SUBSTRB(SQLERRM,1,240));
1873       raise;
1874 
1875 END get_project_progress_defaults;
1876 
1877 
1878 -- This API should be used to get the progress setup values at the project and task type level.
1879 -- This will not be used for deliverable type values
1880 PROCEDURE get_progress_defaults(
1881  p_project_id                   NUMBER
1882 ,p_object_version_id            NUMBER
1883 ,p_object_type                  VARCHAR2
1884 ,p_object_id                    NUMBER
1885 ,p_as_of_date                   DATE
1886 ,p_structure_type               VARCHAR2 := 'WORKPLAN'  -- FPM Development Bug 3420093
1887 ,x_WQ_ACTUAL_ENTRY_CODE         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1888 ,x_WQ_ENABLED_FLAG              OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1889 ,x_EFFORT_ENABLED_FLAG          OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1890 ,x_BASE_PERCENT_COMP_DERIV_CODE OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1891 ,x_PERCENT_COMP_ENABLED_FLAG    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1892 ,X_PROGRESS_ENTRY_ENABLE_FLAG    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1893 ,X_ALLOW_COLLAB_PROG_ENTRY      OUT NOCOPY VARCHAR2 -- FPM Development Bug 3420093 --File.Sql.39 bug 4440895
1894 ,X_ALLW_PHY_PRCNT_CMP_OVERRIDES OUT NOCOPY VARCHAR2 -- FPM Development Bug 3420093 --File.Sql.39 bug 4440895
1895 ,x_task_weight_basis_code       OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1896 ) IS
1897 
1898    /*  replacing this sql with the following for bug 2679612
1899     CURSOR cur_prg_deflts
1900     IS
1901       SELECT WQ_ACTUAL_ENTRY_CODE, WQ_ENABLED_FLAG,
1902              EFFORT_ENABLED_FLAG, BASE_PERCENT_COMP_DERIV_CODE,
1903              PERCENT_COMP_ENABLED_FLAG, PROG_ENTRY_ENABLE_FLAG
1904         FROM PA_LATEST_proj_TASK_PROG_V
1905        WHERE project_id = p_project_id
1906          AND task_id = p_object_id
1907          AND object_type = p_object_type
1908          ;
1909          --AND element_version_id = p_object_version_id
1910          --AND as_of_date = p_as_of_date;
1911 */
1912 
1913   CURSOR cur_prg_deflts
1914     IS
1915       SELECT
1916         nvl(ppe.WQ_ACTUAL_ENTRY_CODE,ptt.ACTUAL_WQ_ENTRY_CODE),
1917         decode(ppe.object_type,'PA_STRUCTURES',pppa.WQ_ENABLE_FLAG,
1918                decode(ptt.WQ_ENABLE_FLAG, 'Y', decode(pppa.WQ_ENABLE_FLAG, 'Y', 'Y', 'N'), 'N')),
1919         decode(ppe.object_type,'PA_STRUCTURES',pppa.REMAIN_EFFORT_ENABLE_FLAG,
1920                decode(ptt.REMAIN_EFFORT_ENABLE_FLAG, 'Y', decode(pppa.REMAIN_EFFORT_ENABLE_FLAG, 'Y', 'Y', 'N'), 'N')),
1921         NVL( ppe.base_percent_comp_deriv_code, ptt.base_percent_comp_deriv_code),
1922         decode(ppe.object_type,'PA_STRUCTURES',pppa.PERCENT_COMP_ENABLE_FLAG,
1923                decode(ptt.PERCENT_COMP_ENABLE_FLAG, 'Y', decode(pppa.PERCENT_COMP_ENABLE_FLAG, 'Y', 'Y','N'), 'N')),
1924         decode(ppe.object_type,'PA_TASKS',ptt.PROG_ENTRY_ENABLE_FLAG,'Y'),
1925         pppa.ALLOW_COLLAB_PROG_ENTRY,
1926         pppa.ALLOW_PHY_PRCNT_CMP_OVERRIDES,
1927         pppa.TASK_WEIGHT_BASIS_CODE
1928        FROM pa_proj_elements ppe, pa_task_types ptt, pa_proj_progress_attr pppa, pa_proj_elem_ver_structure ppvs, pa_proj_structure_types ppst
1929        WHERE ppe.project_id = p_project_id
1930          AND ppe.proj_element_id = p_object_id
1931          AND ppe.object_type = p_object_type
1932          AND ppe.type_id = ptt.task_type_id(+)
1933          AND ppvs.project_id = pppa.project_id(+)
1934          AND pppa.structure_type = p_structure_type
1935          AND ppe.project_id = ppvs.project_id
1936          AND ppvs.latest_eff_published_flag = 'Y'
1937          AND ppvs.proj_element_id = pppa.object_id(+)
1938          AND ppvs.proj_element_id = ppst.proj_element_id
1939          AND ptt.object_type(+) = 'PA_TASKS'  /* bug 3279978 FP M Enhancement */ --bug 4330450 added outer join
1940          AND ppst.structure_type_id =1;
1941 
1942 BEGIN
1943      OPEN cur_prg_deflts;
1944      FETCH cur_prg_deflts INTO x_WQ_ACTUAL_ENTRY_CODE
1945                               ,x_WQ_ENABLED_FLAG
1946                               ,x_EFFORT_ENABLED_FLAG
1947                               ,x_BASE_PERCENT_COMP_DERIV_CODE
1948                               ,x_PERCENT_COMP_ENABLED_FLAG
1949                               ,X_PROGRESS_ENTRY_ENABLE_FLAG
1950                               ,X_ALLOW_COLLAB_PROG_ENTRY
1951                               ,X_ALLW_PHY_PRCNT_CMP_OVERRIDES
1952                               ,x_task_weight_basis_code
1953                                ;
1954      CLOSE cur_prg_deflts;
1955 
1956      /*x_WQ_ACTUAL_ENTRY_CODE := 'INCREMENTAL';
1957      x_WQ_ENABLED_FLAG := 'Y';
1958      x_EFFORT_ENABLED_FLAG := 'Y';
1959 --     x_BASE_PERCENT_COMP_DERIV_CODE
1960      x_PERCENT_COMP_ENABLED_FLAG := 'Y';*/
1961 --  4537865
1962 EXCEPTION
1963 WHEN OTHERS THEN
1964     x_WQ_ENABLED_FLAG              := NULL ;
1965     x_EFFORT_ENABLED_FLAG          := NULL ;
1966     x_BASE_PERCENT_COMP_DERIV_CODE := NULL ;
1967     x_PERCENT_COMP_ENABLED_FLAG    := NULL ;
1968     X_PROGRESS_ENTRY_ENABLE_FLAG   := NULL ;
1969     X_ALLOW_COLLAB_PROG_ENTRY      := NULL ;
1970     X_ALLW_PHY_PRCNT_CMP_OVERRIDES := NULL ;
1971     x_task_weight_basis_code       := NULL ;
1972       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROGRESS_UTILS',
1973                               p_procedure_name => 'get_progress_defaults',
1974                               p_error_text     => SUBSTRB(SQLERRM,1,240));
1975       raise;
1976 END get_progress_defaults;
1977 
1978 FUNCTION chk_prg_since_last_prg(
1979  p_project_id                   NUMBER
1980 ,p_percent_complete_id          NUMBER
1981 ,p_object_type                  VARCHAR2
1982 ,p_object_id                    NUMBER
1983 ,p_task_id          NUMBER := null /* Modified for IB4 Progress CR. */
1984 ) RETURN VARCHAR2 IS
1985 BEGIN
1986 
1987   IF Working_version_exist(
1988        p_task_id          => p_task_id --nvl(p_task_id, p_object_id) /* Amit : Modified for IB4 Progress CR. */
1989       ,p_project_id       => p_project_id
1990       ,p_object_type      => p_object_type
1991       ,p_object_id    => p_object_id /* Modified for IB4 Progress CR. */
1992       )  IS NOT NULL
1993   THEN
1994      RETURN 'Y';
1995   ELSE
1996      RETURN 'N';
1997   END IF;
1998 
1999 END chk_prg_since_last_prg;
2000 
2001 /*
2002 FUNCTION check_project_has_progress(
2003 p_project_id    NUMBER ,
2004 p_object_id     NUMBER) RETURN VARCHAR2 IS
2005     CURSOR cur_pa_prog_exists
2006     IS
2007       SELECT 'X'
2008         FROM pa_percent_completes
2009        WHERE project_id = p_project_id
2010          AND object_id = decode(nvl(p_object_id,0),0,object_id,p_object_id)
2011          AND object_type = 'PA_STRUCTURES'
2012          AND task_id = 0;
2013     l_dummy_char    VARCHAR2(1);
2014 BEGIN
2015     OPEN cur_pa_prog_exists;
2016     FETCH cur_pa_prog_exists INTO l_dummy_char;
2017     IF cur_pa_prog_exists%FOUND
2018     THEN
2019        CLOSE cur_pa_prog_exists;
2020        RETURN 'Y';
2021     ELSE
2022        CLOSE cur_pa_prog_exists;
2023        RETURN 'N';
2024     END IF;
2025 END check_project_has_progress;
2026 */
2027 
2028 FUNCTION check_project_has_progress(
2029  	 p_project_id    NUMBER ,
2030  	 p_object_id     NUMBER,
2031  	 p_structure_type VARCHAR2 := null) RETURN VARCHAR2 IS     -- added a new parameter for the BUG 6903050
2032 CURSOR cur_pa_prog_exists
2033 IS
2034  SELECT 'X'
2035    FROM pa_percent_completes
2036   WHERE project_id = p_project_id
2037     AND object_id = decode(nvl(p_object_id,0),0,object_id,p_object_id)
2038     AND object_type = 'PA_STRUCTURES'
2039     AND task_id = 0;
2040 
2041 CURSOR cur_pa_prog_exists_wp          -- added a new cursor for the BUG 6903050
2042     IS
2043      SELECT 'X'
2044        FROM pa_percent_completes
2045       WHERE project_id = p_project_id
2046         AND object_id = decode(nvl(p_object_id,0),0,object_id,p_object_id)
2047         AND object_type = 'PA_STRUCTURES'
2048         AND task_id = 0
2049         AND STRUCTURE_TYPE = p_structure_type;
2050 
2051 l_dummy_char    VARCHAR2(1);
2052 BEGIN
2053 
2054     IF (p_structure_type = 'WORKPLAN')    -- added a new check for WORKPLAN for the BUG 6903050
2055     THEN
2056       OPEN  cur_pa_prog_exists_wp;
2057       FETCH cur_pa_prog_exists_wp INTO l_dummy_char;
2058       IF cur_pa_prog_exists_wp%FOUND
2059       THEN
2060         CLOSE cur_pa_prog_exists_wp;
2061         RETURN 'Y';
2062       ELSE
2063         CLOSE cur_pa_prog_exists_wp;
2064         RETURN 'N';
2065       END IF;
2066 
2067     ELSE
2068       OPEN cur_pa_prog_exists;
2069       FETCH cur_pa_prog_exists INTO l_dummy_char;
2070       IF cur_pa_prog_exists%FOUND
2071       THEN
2072         CLOSE cur_pa_prog_exists;
2073         RETURN 'Y';
2074       ELSE
2075         CLOSE cur_pa_prog_exists;
2076         RETURN 'N';
2077       END IF;
2078     END IF;
2079 END check_project_has_progress;
2080 
2081 FUNCTION get_task_prog_profile(
2082 p_profile_name    VARCHAR2 ) RETURN VARCHAR2
2083 IS
2084 BEGIN
2085     RETURN ( fnd_profile.value_specific(p_profile_name, fnd_global.user_id ) );
2086 END get_task_prog_profile;
2087 
2088 -- this function is modified to return working record only upto the passed as of date
2089 FUNCTION Working_version_exist(
2090      p_task_id          NUMBER := null /* Amit : Modified for IB4 Progress CR. */
2091     ,p_project_id       NUMBER
2092     ,p_object_type      VARCHAR2
2093     ,p_object_id    NUMBER := null /* Modified for IB4 Progress CR. */
2094     ,p_as_of_date       DATE := null  -- bug 4185364
2095 	,p_cbs_element_id   NUMBER := null -- Added for CBS phase 2 16200605
2096     ) RETURN DATE IS
2097 
2098     CURSOR cur_pa_pcc
2099     IS
2100       SELECT /*+ INDEX(pa_percent_completes PA_PERCENT_COMPLETES_N3)*/ date_computed --Added hint for 15876400
2101         FROM pa_percent_completes
2102        WHERE project_id = p_project_id
2103          AND object_id = nvl(p_object_id, p_task_id)  /* Modified for IB4 Progress CR. */
2104          AND object_type = p_object_type
2105      AND structure_type = 'WORKPLAN' -- FPM Dev CR 3
2106          AND published_flag = 'N'
2107          AND current_flag = 'N'
2108          and NVL(task_id,-1) = DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_task_id,NVL(task_id,-1)),NVL(p_task_id, p_object_id)) /* Amit : Modified for IB4 Progress CR. */
2109 		 AND NVL(cbs_element_id,-1) = NVL(p_cbs_element_id,-1)  --Added for CBS phase 2 16200605
2110 	 and trunc(date_computed) <= trunc(p_as_of_date); --bug 4185364
2111      --and task_id = p_task_id /* Modified for IB4 Progress CR. */;
2112 
2113      l_return_date  DATE := null;
2114 BEGIN
2115 
2116      OPEN cur_pa_pcc;
2117      FETCH cur_pa_pcc INTO l_return_date;
2118      CLOSE  cur_pa_pcc;
2119      RETURN l_return_date;
2120 END Working_version_exist;
2121 
2122 FUNCTION check_status_referenced(
2123 p_status_code    VARCHAR2 ) RETURN BOOLEAN
2124 is
2125  Cursor c_percent_complete
2126  is
2127   select 'X' from pa_percent_completes
2128   where ( progress_status_code = p_status_code
2129   or status_code = p_status_code)
2130   AND rownum <= 1;
2131 
2132  Cursor c_prog_rollup
2133  is
2134    select 'X' from pa_progress_rollup
2135    where ( progress_status_code = p_status_code
2136    or base_progress_status_code = p_status_code
2137    or eff_rollup_prog_stat_code = p_status_code)
2138    AND rownum <= 1;
2139 
2140  Cursor c_proj_elements
2141  is
2142  select 'X' from pa_proj_elements
2143  where status_code = p_status_code
2144    AND rownum <= 1;
2145 
2146  Cursor c_proj_elem_ver_structure
2147  is
2148  select 'X' from pa_proj_elem_ver_structure
2149  where status_code = p_status_code
2150   AND rownum <= 1;
2151 
2152  Cursor c_task_types
2153  is
2154  select 'X' from pa_task_types
2155  where ( initial_status_code = p_status_code
2156  or initial_progress_status_code = p_status_code)
2157  AND object_type = 'PA_TASKS' /* bug 3279978 FP M Enhancement */
2158  AND rownum <= 1;
2159 
2160  l_return_value boolean := FALSE;
2161  l_dummy  varchar2(1);
2162 
2163  Begin
2164    open c_percent_complete;
2165    fetch c_percent_complete into l_dummy;
2166    if (c_percent_complete%FOUND) then
2167      l_return_value := TRUE;
2168    end if;
2169    close c_percent_complete;
2170 
2171    -- Check referense in pa_progress_rollup
2172    if(NOT l_return_value) then
2173      open c_prog_rollup;
2174      fetch c_prog_rollup into l_dummy;
2175      if(c_prog_rollup%FOUND) then
2176        l_return_value := TRUE;
2177      end if;
2178      close c_prog_rollup;
2179    end if;
2180    -- Check referense in pa_proj_elements
2181    if(NOT l_return_value) then
2182      open c_proj_elements;
2183      fetch c_proj_elements into l_dummy;
2184      if(c_proj_elements%FOUND) then
2185        l_return_value := TRUE;
2186      end if;
2187      close c_proj_elements;
2188    end if;
2189 
2190    -- Check referense in pa_proj_elem_ver_structure
2191    if(NOT l_return_value) then
2192      open c_proj_elem_ver_structure;
2193      fetch c_proj_elem_ver_structure into l_dummy;
2194      if(c_proj_elem_ver_structure%FOUND) then
2195        l_return_value := TRUE;
2196      end if;
2197      close c_proj_elem_ver_structure;
2198    end if;
2199    -- Check referense in pa_task_types
2200    if(NOT l_return_value) then
2201      open c_task_types;
2202      fetch c_task_types into l_dummy;
2203      if(c_task_types%FOUND) then
2204        l_return_value := TRUE;
2205      end if;
2206      close c_task_types;
2207    end if;
2208 
2209    return l_return_value;
2210 
2211  End check_status_referenced;
2212 
2213 -- FPM Dev CR 3 : Not Used
2214 FUNCTION GET_LATEST_AS_OF_DATE2(
2215     p_task_id      NUMBER
2216     ,p_as_of_date  DATE ) RETURN DATE IS
2217 
2218 --Added for performance improvements bug 2679612
2219   CURSOR cur_proj_elem
2220   IS
2221     SELECT project_id
2222      FROM pa_proj_elements
2223     WHERE proj_element_id = p_task_id;
2224     l_project_id          NUMBER;
2225 --Added for performance improvements bug 2679612
2226 
2227   CURSOR cur_ppc(c_project_id NUMBER )
2228   IS
2229     SELECT MAX( date_computed )
2230       FROM pa_percent_completes
2231      WHERE object_id = p_task_id
2232        AND project_id = c_project_id
2233        AND date_computed < p_as_of_Date
2234     ;
2235   l_as_of_date  DATE;
2236 BEGIN
2237 
2238      OPEN cur_proj_elem;
2239      FETCH cur_proj_elem INTO l_project_id;
2240      CLOSE cur_proj_elem;
2241 
2242      OPEN cur_ppc( l_project_id );
2243      FETCH cur_ppc INTO l_as_of_date;
2244      CLOSE cur_ppc;
2245      RETURN l_as_of_date ;
2246 
2247 exception when others then
2248      return null;
2249 
2250 END GET_LATEST_AS_OF_DATE2;
2251 
2252 FUNCTION is_parent_on_hold(
2253    p_object_version_id     NUMBER
2254 ) RETURN VARCHAR2 IS
2255     CURSOR cur_pa_proj
2256     IS
2257       SELECT ppe.status_code
2258         FROM pa_object_relationships por,
2259              pa_proj_element_versions ppev,
2260              pa_proj_elements ppe,
2261              pa_project_statuses pps
2262        WHERE object_id_to1 = p_object_version_id
2263          AND ppev.element_version_id = por.object_id_from1
2264          AND ppev.proj_element_id = ppe.proj_element_id
2265          AND ppev.object_type = ppe.object_type
2266          AND ppe.object_type = 'PA_TASKS'
2267          AND ppe.status_code = pps.project_status_code
2268          AND pps.project_system_status_code = 'ON_HOLD';
2269 
2270    l_status_code   VARCHAR2(150);
2271 BEGIN
2272      OPEN cur_pa_proj;
2273      FETCH cur_pa_proj INTO l_status_code;
2274      IF cur_pa_proj%FOUND
2275      THEN
2276          CLOSE cur_pa_proj;
2277          RETURN 'Y';
2278      ELSE
2279          CLOSE cur_pa_proj;
2280          RETURN 'N';
2281      END IF;
2282 END is_parent_on_hold;
2283 
2284 FUNCTION get_task_status(
2285   p_project_id     NUMBER
2286  ,p_object_id     NUMBER
2287  , p_object_type  VARCHAR2 := 'PA_TASKS' -- FPM Development Bug 3420093
2288  ) RETURN VARCHAR2 IS
2289 
2290    CURSOR cur_pa_proj_elems
2291    IS
2292      SELECT status_code
2293        FROM pa_proj_elements
2294       WHERE proj_element_id = p_object_id
2295         AND project_id      = p_project_id
2296         AND object_type = p_object_type;
2297 
2298     l_status_code VARCHAR2(150);
2299 BEGIN
2300     OPEN cur_pa_proj_elems;
2301     FETCH cur_pa_proj_elems INTO l_status_code;
2302     CLOSE cur_pa_proj_elems;
2303     RETURN l_status_code;
2304 END get_task_status;
2305 
2306 
2307 FUNCTION get_system_task_status(
2308  p_status_code   VARCHAR2
2309 ,p_object_type   VARCHAR2 := 'PA_TASKS' -- FPM Development Bug 3420093
2310  ) RETURN VARCHAR2 IS
2311 
2312    CURSOR cur_sys_status
2313    IS
2314      SELECT project_system_status_code
2315        FROM pa_project_statuses pps   -----, fnd_lookup_values flv
2316       WHERE project_status_code = p_status_code
2317         AND status_type = decode(p_object_type, 'PA_TASKS', 'TASK', 'PA_DELIVERABLES', 'DELIVERABLE');
2318     /*  bug 4699567 flv was not used in the query anyways
2319         AND lookup_type = decode(p_object_type, 'PA_TASKS', 'TASK_SYSTEM_STATUS', 'PA_DELIVERABLES', 'DELIVERABLE_SYSTEM_STATUS')
2320         AND language = 'US'; */
2321 
2322     l_status_code VARCHAR2(150);
2323 BEGIN
2324     OPEN cur_sys_status;
2325     FETCH cur_sys_status INTO l_status_code;
2326     CLOSE cur_sys_status;
2327     RETURN l_status_code;
2328 END get_system_task_status;
2329 
2330 Function is_cycle_ok_to_delete(p_progress_cycle_id  IN  NUMBER) return
2331 varchar2
2332 IS
2333    cursor prog_cycle is
2334    select 'N'
2335     from pa_proj_progress_attr
2336    where progress_cycle_id = p_progress_cycle_id
2337    and structure_type = 'WORKPLAN';-- FPM Dev CR 3
2338 
2339    retval   varchar2(1);
2340    l_prog_cycle  prog_cycle%rowtype;
2341 
2342 Begin
2343   open prog_cycle;
2344   fetch prog_cycle into l_prog_cycle;
2345   if prog_cycle%found then
2346       close prog_cycle;
2347       return 'N';
2348   else
2349       close prog_cycle;
2350       return 'Y';
2351   end if;
2352 End is_cycle_ok_to_delete;
2353 
2354 -- FPM Dev CR 3 : Not Used
2355 function get_max_ppc_id(p_project_id   IN  NUMBER,
2356                         p_object_id    IN  NUMBER,
2357                         p_object_type  IN  VARCHAR2,
2358                         p_as_of_date   IN  DATE) return number is
2359 
2360 l_ppc_id      number;
2361 begin
2362 select nvl(max(percent_complete_id),-99)
2363             into l_ppc_id
2364             from pa_percent_completes
2365            where project_id = p_project_id
2366              and object_id = p_object_id
2367              and object_type = p_object_type
2368              and date_computed <= p_as_of_date;
2369 return l_ppc_id;
2370 
2371 exception when others then
2372   return -99;
2373 end get_max_ppc_id;
2374 
2375 function get_max_rollup_asofdate(p_project_id   IN  NUMBER,
2376                                  p_object_id    IN  NUMBER,
2377                                  p_object_type  IN  VARCHAR2,
2378                                  p_as_of_date   IN  DATE,
2379                                  p_object_version_id  IN  NUMBER,
2380                  p_structure_type IN VARCHAR2 := 'WORKPLAN', -- FPM Dev CR 3
2381                  p_structure_version_id NUMBER := NULL -- FPM Dev CR 4
2382                  ,p_proj_element_id NUMBER := null /* Modified for IB4 Progress CR. */
2383                  ) return date is
2384 l_rollup_date   date;
2385 begin
2386 
2387 /*     -- FPM Dev CR 4 : Added condition for PA_TASKS and structure_version_id
2388    if (((p_object_type = 'PA_TASKS') AND (nvl(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_object_version_id ),'N') = 'N')) OR p_structure_version_id is not null) then
2389 
2390            select max(as_of_date)
2391              into l_rollup_date
2392              from pa_progress_rollup
2393             where project_id = p_project_id
2394               and object_id = p_object_id
2395               and object_type = p_object_type
2396           and structure_type = p_structure_type -- FPM Dev CR 3
2397               and as_of_date <= p_as_of_date
2398           and ((p_structure_version_id is null AND structure_version_id is null) OR (p_structure_version_id is not null AND structure_version_id = p_structure_version_id)) -- FPM Dev CR 4
2399           ;
2400     else
2401            select max(as_of_date)
2402              into l_rollup_date
2403              from pa_progress_rollup
2404             where project_id = p_project_id
2405               and object_id = p_object_id
2406               and object_type = p_object_type
2407               and structure_type = p_structure_type -- FPM Dev CR 3
2408               and trunc(as_of_date) = (select max(trunc(date_computed))
2409                                        from pa_percent_completes
2410                                       where project_id = p_project_id
2411                                         and object_id = p_object_id
2412                                         and object_type = p_object_type
2413                         and structure_type = p_structure_type -- FPM Dev CR 3
2414                                         and published_flag = 'Y'
2415                                         and date_computed <= p_as_of_date);
2416     end if;
2417 */
2418 
2419 -- FPM Dev CR 6 : Commented the above code and added this new code to get the date.
2420            select /*+ INDEX(pa_progress_rollup PA_PROGRESS_ROLLUP_U2)*/ max(as_of_date) -- For Bug 9595490
2421              into l_rollup_date
2422              from pa_progress_rollup
2423             where project_id = p_project_id
2424               and object_id = p_object_id
2425               and object_type = p_object_type
2426           and structure_type = p_structure_type
2427               and as_of_date <= p_as_of_date
2428           and ((p_structure_version_id is null AND structure_version_id is null) OR (p_structure_version_id is not null AND structure_version_id = p_structure_version_id))
2429               AND current_flag <> 'W'   -- Bug 3879461
2430 --        and as_of_date not in (select trunc(date_computed)
2431 --                       from pa_percent_completes
2432 --                                      where project_id = p_project_id
2433 --                                        and object_id = p_object_id
2434 --                                        and object_type = p_object_type
2435 --                      and structure_type = p_structure_type
2436 --                                        and published_flag = 'N'
2437 --                                        and date_computed <= p_as_of_date
2438 --                  and NVL(proj_element_id,-1) = DECODE(p_object_type, 'PA_DELIVERABLES'
2439 -- , NVL(p_proj_element_id,NVL(proj_element_id,-1)),NVL(p_proj_element_id, p_object_id)) /* Amit : Modified for IB4 Progress CR. */
2440 
2441 -- Begin fix for Bug # 4243074.
2442 
2443 -- For Bug 9595490 Modified "and NVL(proj_element_id,-1) =" to   "and proj_element_id ="
2444 and proj_element_id = DECODE(p_structure_type, 'FINANCIAL'
2445                              , DECODE(p_object_type, 'PA_STRUCTURES'
2446                                            , 0
2447                                        --bug 4250623, for deliverable dont compare with p_proj_element_id as it may not be associated with task
2448                                        --, (DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_proj_element_id,NVL(proj_element_id,-1)),NVL(p_proj_element_id, p_object_id))))
2449                                        , (DECODE(p_object_type, 'PA_DELIVERABLES', NVL(proj_element_id,-1),NVL(p_proj_element_id, p_object_id))))
2450                              --bug 4250623, for deliverable dont compare with p_proj_element_id as it may not be associated with task
2451                              --,(DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_proj_element_id,NVL(proj_element_id,-1)),NVL(p_proj_element_id, p_object_id))))
2452                              ,(DECODE(p_object_type, 'PA_DELIVERABLES', NVL(proj_element_id,-1),NVL(p_proj_element_id, p_object_id))))
2453 
2454 -- End fix for Bug # 4243074.
2455 
2456                     --and task_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
2457 --                                     )
2458 
2459 --              and NVL(proj_element_id,-1) = DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_proj_element_id,NVL(proj_element_id,-1)),NVL(p_proj_element_id, p_object_id)) /* Amit : Modified for IB4 Progress CR. */
2460 -- Commented out to fix Bug # 4243074.
2461 
2462           --and proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
2463           ;
2464 
2465 return l_rollup_date;
2466 
2467 exception when others then
2468   return null;
2469 end get_max_rollup_asofdate;
2470 
2471 function get_project_wq_flag(p_project_id  IN  NUMBER) return varchar2 is
2472   l_wq_enable_flag   varchar2(1);
2473 begin
2474    select wq_enable_flag
2475      into l_wq_enable_flag
2476      from pa_proj_progress_attr
2477     where project_id = p_project_id
2478       and object_Type = 'PA_STRUCTURES'
2479       and structure_type = 'WORKPLAN' -- FPM Dev CR 3
2480       ;
2481 
2482     return l_wq_enable_flag;
2483 exception when others then
2484     return 'N';
2485 end get_project_wq_flag;
2486 
2487 PROCEDURE copy_attachments (
2488   p_project_id                  IN NUMBER,
2489   p_object_id                   IN NUMBER,
2490   p_object_type                 IN VARCHAR2,
2491   p_from_pc_id                  IN NUMBER,
2492   p_to_pc_id                    IN NUMBER,
2493   x_return_status               OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
2494   x_msg_count                   OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
2495   x_msg_data                    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2496 )
2497 IS
2498 cursor get_ppc_id is
2499   select percent_complete_id
2500     from pa_percent_completes
2501    where project_id = p_project_id
2502      and object_id = p_object_id
2503      and object_type = p_object_type
2504      and structure_type = 'WORKPLAN' -- FPM Dev CR 3
2505      and published_flag = 'Y'
2506      and current_flag = 'Y';
2507 
2508  l_from_pc_id  NUMBER;
2509 BEGIN
2510 
2511   x_return_status := 'S';
2512   x_msg_count := 0;
2513   x_msg_data := '';
2514 
2515   if (p_from_pc_id is null) then
2516       open get_ppc_id;
2517       fetch get_ppc_id into l_from_pc_id;
2518       close get_ppc_id;
2519   else
2520       l_from_pc_id := p_from_pc_id;
2521   end if;
2522 
2523   if (l_from_pc_id is not null) then
2524     fnd_attached_documents2_pkg.copy_attachments(
2525       X_from_entity_name => 'PA_PERCENT_COMPLETES',
2526       X_from_pk1_value => l_from_pc_id,
2527       X_to_entity_name => 'PA_PERCENT_COMPLETES',
2528       X_to_pk1_value => p_to_pc_id,
2529       X_created_by => fnd_global.user_id,
2530       X_last_update_login => fnd_global.login_id);
2531   end if;
2532 
2533 
2534   fnd_msg_pub.count_and_get(p_count => x_msg_count,
2535                             p_data  => x_msg_data);
2536 
2537 
2538 EXCEPTION
2539   WHEN OTHERS THEN
2540     x_return_status := 'U';
2541     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROGRESS_UTILS',
2542                             p_procedure_name => 'COPY_ATTACHMENTS',
2543                             p_error_text     => SUBSTRB(SQLERRM,1,120));
2544 
2545     fnd_msg_pub.count_and_get(p_count => x_msg_count,
2546                               p_data  => x_msg_data);
2547 END copy_attachments;
2548 
2549 
2550 function is_task_manager (p_task_id           IN  NUMBER,
2551                           p_project_id        IN  NUMBER,
2552                           p_user_id           IN  NUMBER) return varchar2 IS
2553 
2554   CURSOR l_get_task_manager(c_element_version_id NUMBER)
2555   IS
2556   SELECT ppe.manager_person_id
2557   FROM pa_proj_elements PPE,
2558        pa_proj_element_versions PPEV
2559   WHERE ppev.element_version_id = c_element_version_id
2560   AND ppev.proj_element_id = ppe.proj_element_id;
2561 
2562   CURSOR l_get_parent_task(c_element_version_id NUMBER)
2563   IS
2564   SELECT rel.object_id_from1
2565   FROM pa_object_relationships rel
2566   WHERE rel.object_id_to1 = c_element_version_id
2567   AND rel.object_type_to = 'PA_TASKS'
2568   AND rel.relationship_type = 'S'
2569   AND rel.object_type_from = 'PA_TASKS';
2570 
2571   CURSOR l_get_element_version_id(c_proj_element_id NUMBER, c_parent_structure_version_id NUMBER)
2572   IS
2573   SELECT ppev.element_version_id
2574   FROM pa_proj_element_versions ppev
2575   WHERE ppev.proj_element_id = c_proj_element_id
2576   AND ppev.parent_structure_version_id = c_parent_structure_version_id;
2577 
2578   CURSOR l_get_latest_pub_structure_ver
2579   IS
2580   SELECT ppevs.element_version_id
2581   FROM pa_proj_elem_ver_structure ppevs
2582   WHERE ppevs.project_id = p_project_id
2583   AND ppevs.latest_eff_published_flag = 'Y';
2584 
2585   l_person_id NUMBER;
2586   l_temp_person_id NUMBER;
2587   l_is_task_manager VARCHAR2(1);
2588   l_latest_pub_structure_ver_id NUMBER;
2589   l_element_version_id NUMBER;
2590 BEGIN
2591   l_is_task_manager := 'N';
2592   l_person_id := PA_UTILS.GetEmpIdFromUser(p_user_id);
2593 
2594 /*
2595   OPEN l_get_latest_pub_structure_ver;
2596   FETCH l_get_latest_pub_structure_ver INTO l_latest_pub_structure_ver_id;
2597   CLOSE l_get_latest_pub_structure_ver;
2598 */
2599 
2600   --Added the following line instead of the above cursor.
2601   l_latest_pub_structure_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_WP_VERSION(p_project_id); --maansari7/22
2602 
2603   OPEN l_get_element_version_id(p_task_id, l_latest_pub_structure_ver_id);
2604   FETCH l_get_element_version_id INTO l_element_version_id;
2605   CLOSE l_get_element_version_id;
2606 
2607   WHILE((l_element_version_id is not NULL) AND (l_is_task_manager = 'N')) LOOP
2608     OPEN l_get_task_manager(l_element_version_id);
2609     FETCH l_get_task_manager INTO l_temp_person_id;
2610     CLOSE l_get_task_manager;
2611 
2612     if(l_person_id = l_temp_person_id) then
2613       l_is_task_manager := 'Y';
2614     end if;
2615 
2616     OPEN l_get_parent_task(l_element_version_id);
2617     FETCH l_get_parent_task INTO l_element_version_id;
2618     if l_get_parent_task%NOTFOUND then
2619       l_element_version_id := NULL;
2620     end if;
2621     CLOSE l_get_parent_task;
2622   END LOOP;
2623 
2624   return l_is_task_manager;
2625 
2626 EXCEPTION
2627   WHEN OTHERS THEN
2628     return 'N';
2629 END is_task_manager;
2630 
2631 -- Bug 3010538 : New API for the Task Weighting Enhancement.
2632 -- This is a function that returns the task weighting basis code given the project id.
2633 FUNCTION GET_TASK_WEIGHTING_BASIS(
2634     p_project_id  IN  pa_projects_all.project_id%TYPE
2635     , p_structure_type IN VARCHAR2 := 'WORKPLAN' -- FPM Dev CR 3
2636 )
2637 RETURN VARCHAR2 IS
2638      -- This cursor obtains the task weight basis code for the project id.
2639      Cursor cur_weight_basis_code (c_project_id pa_projects_all.project_id%TYPE)
2640      Is
2641      Select ppa.task_weight_basis_code
2642      From   pa_proj_progress_attr ppa,pa_proj_structure_types pst,pa_structure_types st
2643      Where  ppa.project_id  = c_project_id
2644      And    ppa.object_type = 'PA_STRUCTURES'
2645      And ppa.structure_type = p_structure_type -- FPM Dev CR 3
2646      And    ppa.object_id   = pst.proj_element_id
2647         And    st.structure_type = 'WORKPLAN'
2648      And    st.structure_type_id = pst.structure_type_id;
2649 
2650      l_weight_basis_code PA_PROJ_PROGRESS_ATTR.task_weight_basis_code%TYPE;
2651 BEGIN
2652      open cur_weight_basis_code(p_project_id);
2653      fetch cur_weight_basis_code into l_weight_basis_code;
2654      close cur_weight_basis_code;
2655 
2656      return l_weight_basis_code;
2657 
2658 END GET_TASK_WEIGHTING_BASIS;
2659 
2660 FUNCTION is_object_progressable(p_project_id            IN              NUMBER
2661                                 ,p_proj_element_id      IN              NUMBER
2662                                 ,p_object_id            IN              NUMBER
2663                                 ,p_object_type          IN              VARCHAR2) return VARCHAR2
2664 IS
2665     l_return_value      VARCHAR2(1) := 'N';
2666     l_status_code       VARCHAR2(150);
2667     l_system_status_code    VARCHAR2(30);
2668 BEGIN
2669     if (p_object_type = 'PA_STRUCTURES' or p_object_type = 'PA_ASSIGNMENTS') then
2670         l_return_value := 'Y';
2671     elsif (p_object_type = 'PA_TASKS') then
2672 
2673         select status_code
2674         into l_status_code
2675         from pa_proj_elements
2676         where project_id = p_project_id
2677         and proj_element_id = p_proj_element_id
2678         and object_type = p_object_type;
2679 
2680         l_system_status_code := pa_progress_utils.get_system_task_status(l_status_code);
2681 
2682 --Commented by rtarway for BUG 3762650
2683 --      if (l_system_status_code = 'CANCELLED' or l_system_status_code = 'ON_HOLD') then
2684             if (l_system_status_code = 'CANCELLED' ) then
2685 
2686             l_return_value := 'N';
2687         else
2688 
2689             select ptt.prog_entry_enable_flag
2690             into l_return_value
2691             from pa_proj_elements ppe, pa_task_types ptt
2692             where ppe.type_id = ptt.task_type_id(+)
2693             and ppe.project_id = p_project_id
2694             and ppe.proj_element_id = p_proj_element_id;
2695         end if;
2696     elsif (p_object_type = 'PA_DELIVERABLES') then
2697         l_return_value := PA_DELIVERABLE_UTILS.IS_DLV_PROGRESSABLE(p_project_id,p_proj_element_id);
2698     end if;
2699     return(l_return_value);
2700 END is_object_progressable;
2701 
2702 
2703 FUNCTION check_wp_working_prog_exists(p_project_id            IN              NUMBER
2704                                 ,p_structure_version_id      IN              NUMBER
2705                 ) return VARCHAR2
2706 IS
2707    l_return_value    VARCHAR2(1) := 'Y';
2708 BEGIN
2709    RETURN l_return_value;
2710 END check_wp_working_prog_exists;
2711 
2712 
2713 FUNCTION is_pc_override_allowed(p_project_id            IN              NUMBER
2714                                 ,p_structure_type        IN              VARCHAR2 := 'WORKPLAN'
2715                 ) return VARCHAR2
2716 IS
2717    l_return_value    VARCHAR2(1) := 'N';
2718    l_percent_comp_enable_flag VARCHAR2(1) := NULL;
2719    l_allow_phy_prcnt_cmp_overrds VARCHAR2(1) := NULL;
2720 
2721     cursor c1(p_project_id NUMBER, p_structure_type VARCHAR2) is
2722         select percent_comp_enable_flag,allow_phy_prcnt_cmp_overrides
2723         from pa_proj_progress_attr
2724         where project_id = p_project_id
2725         and structure_type = p_structure_type;
2726 
2727     l_c1rec c1%rowtype;
2728 
2729 BEGIN
2730     open c1(p_project_id, p_structure_type);
2731     fetch c1 into l_c1rec;
2732     close c1;
2733 
2734     if (l_c1rec.percent_comp_enable_flag = 'N') then
2735         l_return_value := l_c1rec.percent_comp_enable_flag;
2736     else
2737         l_return_value := l_c1rec.allow_phy_prcnt_cmp_overrides;
2738     end if;
2739 
2740     RETURN l_return_value;
2741 
2742 END is_pc_override_allowed;
2743 
2744 FUNCTION calculate_percentage( p_actual_value   NUMBER
2745                                ,p_planned_value  NUMBER ) return NUMBER
2746 IS
2747 BEGIN
2748    RETURN ((p_actual_value/p_planned_value)*100);
2749 END calculate_percentage;
2750 
2751 FUNCTION GET_EARLIEST_AS_OF_DATE(
2752      p_project_id   NUMBER
2753     ,p_object_id   NUMBER
2754     ,p_object_type VARCHAR2
2755     ,p_structure_type VARCHAR2 := 'WORKPLAN' -- FPM Development Bug 3420093
2756     ,p_task_id     NUMBER := null /* Modified for IB4 Progress CR. */
2757     ) RETURN DATE IS
2758 
2759   CURSOR cur_ppc
2760   IS
2761     SELECT min(date_computed)
2762       FROM pa_percent_completes
2763      WHERE object_id = p_object_id
2764        AND project_id = p_project_id
2765        and object_type = p_object_type
2766        AND structure_type = p_structure_type
2767        and NVL(task_id,-1) = DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_task_id,NVL(task_id,-1)),NVL(p_task_id, p_object_id)) /* Amit : Modified for IB4 Progress CR. */
2768        --and task_id = nvl(p_task_id, p_object_id) /* Modified for IB4 Progress CR. */;
2769        ;
2770   l_as_of_date  DATE;
2771 BEGIN
2772 
2773      OPEN cur_ppc;
2774      FETCH cur_ppc INTO l_as_of_date;
2775      CLOSE cur_ppc;
2776      RETURN l_as_of_date ;
2777 
2778 exception when others then
2779      return null;
2780 
2781 END GET_EARLIEST_AS_OF_DATE;
2782 
2783 FUNCTION check_assignment_exists(
2784      p_project_id   NUMBER
2785     ,p_object_version_id   NUMBER
2786     ,p_object_type VARCHAR2
2787     ,p_structure_type VARCHAR2 := 'WORKPLAN' -- FPM Development Bug 3420093
2788  ) RETURN VARCHAR2
2789 IS
2790 
2791 l_return_value VARCHAR2(1) := 'Y';
2792 
2793 BEGIN
2794 
2795     l_return_value := pa_task_assignment_utils.check_asgmt_exists_in_task(p_object_version_id);
2796 
2797     RETURN (l_return_value);
2798 END check_assignment_exists;
2799 
2800 -- Bug 3633293 : Added check_deliverable_exists
2801 FUNCTION check_deliverable_exists(
2802      p_project_id   NUMBER
2803     ,p_object_id    NUMBER
2804  ) RETURN VARCHAR2
2805 IS
2806 l_return_value VARCHAR2(1) := 'Y';
2807 l_dummy VARCHAR2(1);
2808 CURSOR c_get_del_associated_task IS
2809    SELECT 'x'
2810    FROM pa_proj_elements ppe,
2811     pa_object_relationships por,
2812     pa_task_types ttype
2813    WHERE
2814               ppe.object_type = 'PA_TASKS'
2815           and ppe.proj_element_id = por.object_id_from2
2816           and por.object_type_from = 'PA_TASKS'
2817           and por.object_type_to = 'PA_DELIVERABLES'
2818           and por.relationship_type = 'A'
2819           and por.relationship_subtype = 'TASK_TO_DELIVERABLE'
2820           and nvl(ppe.base_percent_comp_deriv_code,ttype.base_percent_comp_deriv_code)='DELIVERABLE'
2821       and ppe.proj_element_id = p_object_id
2822       and ppe.type_id = ttype.task_type_id;
2823 
2824 BEGIN
2825     OPEN c_get_del_associated_task;
2826     FETCH c_get_del_associated_task INTO l_dummy;
2827     IF c_get_del_associated_task%NOTFOUND THEN
2828         l_return_value := 'N';
2829     ELSE
2830         l_return_value := 'Y';
2831     END IF;
2832     CLOSE c_get_del_associated_task;
2833     RETURN (l_return_value);
2834 END check_deliverable_exists;
2835 
2836 FUNCTION get_last_effort(
2837      p_project_id   NUMBER
2838     ,p_object_id   NUMBER
2839     ,p_object_type VARCHAR2
2840     ,p_as_of_date  DATE
2841     ,p_structure_type VARCHAR2 := 'WORKPLAN' -- FPM Development Bug 3420093
2842     ,p_proj_element_id NUMBER := null /* Modified for IB4 Progress CR. */
2843 ) RETURN NUMBER IS
2844 
2845   CURSOR cur_task_effort
2846   IS
2847     SELECT NVL( EQPMT_ACT_EFFORT_TO_DATE, 0 ) + NVL( PPL_ACT_EFFORT_TO_DATE, 0 ) + nvl(oth_quantity_to_date,0)
2848      FROM pa_progress_rollup
2849     WHERE  project_id = p_project_id
2850      AND   object_id  = p_object_id
2851      --Commented by rtarway for BUG 3835474
2852      /*AND   as_of_date = ( SELECT max(as_of_date)
2853                            from pa_progress_rollup
2854                           WHERE as_of_date < p_as_of_date
2855                            AND  project_id = p_project_id
2856                            AND object_id  = p_object_id
2857                            AND object_type = p_object_type
2858                            AND structure_type = p_structure_type
2859                            and NVL(proj_element_id,-1) = DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_proj_element_id,NVL(proj_element_id,-1)),NVL(p_proj_element_id, p_object_id)) /* Amit : Modified for IB4 Progress CR.
2860                    --and proj_element_id = nvl(p_proj_element_id, p_object_id)  Modified for IB4 Progress CR.
2861                        )*/
2862      --Added by rtarway for BUG 3835474
2863      AND   as_of_date = ( SELECT max(as_of_date)
2864                            from pa_progress_rollup ppr2
2865                           WHERE ppr2.as_of_date <= p_as_of_date
2866                            AND  ppr2.project_id = p_project_id
2867                            AND ppr2.object_id  = p_object_id
2868                            AND ppr2.object_type = p_object_type
2869                            AND ppr2.structure_type = p_structure_type
2870                AND ppr2.current_flag <> 'W'   -- Bug 3879461
2871                AND ppr2.structure_version_id is null   -- Bug 3879461
2872                            and NVL(ppr2.proj_element_id,-1)
2873                            = DECODE(p_object_type, 'PA_DELIVERABLES',
2874                                     NVL(p_proj_element_id,
2875                                         NVL(ppr2.proj_element_id,-1)),
2876                                     NVL(p_proj_element_id, p_object_id)
2877                                    ) /* Amit : Modified for IB4 Progress CR. */
2878 --                           AND NOT EXISTS
2879 --                           (
2880 --                      SELECT 'X' FROM pa_percent_completes ppc
2881 --                      WHERE ppc.date_computed = ppr2.as_of_date
2882 --                      AND   ppc.project_id = p_project_id
2883 --                      AND   ppc.object_id  = p_object_id
2884 --                      AND   ppc.object_type = p_object_type
2885 --                      AND   ppc.structure_type = p_structure_type
2886 --                      AND   ppc.published_flag = 'N'
2887 --                           )
2888                       )
2889      AND   object_type = p_object_type
2890      AND structure_type = p_structure_type
2891      AND current_flag <> 'W'   -- Bug 3879461
2892      AND structure_version_id is null   -- Bug 3879461
2893      and NVL(proj_element_id,-1) = DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_proj_element_id,NVL(proj_element_id,-1)),NVL(p_proj_element_id, p_object_id)) /* Amit : Modified for IB4 Progress CR. */
2894      --and proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
2895     ;
2896     l_last_submitted_effort    NUMBER;
2897 BEGIN
2898 
2899     OPEN cur_task_effort;
2900     FETCH cur_task_effort INTO l_last_submitted_effort;
2901     CLOSE cur_task_effort;
2902 
2903     RETURN l_last_submitted_effort;
2904 END get_last_effort;
2905 
2906 FUNCTION get_last_cost(
2907      p_project_id   NUMBER
2908     ,p_object_id   NUMBER
2909     ,p_object_type VARCHAR2
2910     ,p_as_of_date  DATE
2911     ,p_structure_type VARCHAR2 := 'WORKPLAN' -- FPM Development Bug 3420093
2912     ,p_proj_element_id NUMBER := null /* Modified for IB4 Progress CR. */
2913 ) RETURN NUMBER IS
2914 
2915   CURSOR cur_task_cost
2916   IS
2917     SELECT (nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)+nvl(ppr.eqpmt_act_cost_to_date_tc,0))
2918      FROM pa_progress_rollup ppr
2919     WHERE  ppr.project_id = p_project_id
2920      AND   ppr.object_id  = p_object_id
2921      AND   ppr.as_of_date = ( SELECT max(as_of_date)
2922                            from pa_progress_rollup ppr2
2923                           WHERE ppr2.as_of_date < p_as_of_date
2924                            AND  ppr2.project_id = p_project_id
2925                            AND ppr2.object_id  = p_object_id
2926                            AND ppr2.object_type = p_object_type
2927                            AND ppr2.structure_type = p_structure_type
2928                AND ppr2.current_flag <> 'W'   -- Bug 3879461
2929                AND ppr2.structure_version_id is null   -- Bug 3879461
2930                        and NVL(proj_element_id,-1) = DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_proj_element_id,NVL(proj_element_id,-1)),NVL(p_proj_element_id, p_object_id)) /* Amit : Modified for IB4 Progress CR. */
2931                        --and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
2932                        )
2933      AND   ppr.object_type = p_object_type
2934      AND ppr.structure_type = p_structure_type
2935      AND ppr.current_flag <> 'W'   -- Bug 3879461
2936      AND ppr.structure_version_id is null   -- Bug 3879461
2937      and NVL(proj_element_id,-1) = DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_proj_element_id,NVL(proj_element_id,-1)),NVL(p_proj_element_id, p_object_id)) /* Amit : Modified for IB4 Progress CR. */
2938      --and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
2939      ;
2940 
2941   l_last_submitted_cost    NUMBER;
2942 
2943 BEGIN
2944 
2945     OPEN cur_task_cost;
2946     FETCH cur_task_cost INTO l_last_submitted_cost;
2947     CLOSE cur_task_cost;
2948 
2949     RETURN l_last_submitted_cost;
2950 END get_last_cost;
2951 
2952 
2953 -- Bug 4372462 : Rewritten this API again...
2954 
2955 PROCEDURE convert_currency_amounts(
2956   p_api_version                 IN      NUMBER          :=1.0
2957  ,p_init_msg_list               IN      VARCHAR2        :=FND_API.G_TRUE
2958  ,p_commit                      IN      VARCHAR2        :=FND_API.G_FALSE
2959  ,p_validate_only               IN      VARCHAR2        :=FND_API.G_TRUE
2960  ,p_validation_level            IN      NUMBER          :=FND_API.G_VALID_LEVEL_FULL
2961  ,p_calling_module              IN      VARCHAR2        :='SELF_SERVICE'
2962  ,p_debug_mode                  IN      VARCHAR2        :='N'
2963  ,p_max_msg_count               IN      NUMBER          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2964  ,p_project_id                  IN      NUMBER
2965  ,p_task_id                     IN      NUMBER
2966  ,p_as_of_date                  IN      DATE
2967  ,P_txn_cost                    IN      NUMBER
2968  ,P_txn_curr_code               IN      VARCHAR2
2969  ,p_structure_version_id        IN      NUMBER      -- Bug 3627787
2970  ,p_calling_mode        IN  VARCHAR2        := 'ACTUAL_RATES' -- Bug 4372462
2971  ,p_budget_version_id           IN      NUMBER          := null -- Bug 4372462
2972  ,p_res_assignment_id           IN      NUMBER          := null -- Bug 4372462
2973  ,p_init_inout_vars             IN      VARCHAR2        := 'Y' -- Bug 4372462
2974  ,P_project_curr_code           IN OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2975  ,P_project_rate_type           IN OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2976  ,P_project_rate_date           IN OUT  NOCOPY DATE --File.Sql.39 bug 4440895
2977  ,P_project_exch_rate           IN OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
2978  ,P_project_raw_cost            IN OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
2979  ,P_projfunc_curr_code          IN OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2980  ,P_projfunc_cost_rate_type     IN OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2981  ,P_projfunc_cost_rate_date     IN OUT  NOCOPY DATE --File.Sql.39 bug 4440895
2982  ,P_projfunc_cost_exch_rate     IN OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
2983  ,P_projfunc_raw_cost           IN OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
2984  ,x_return_status               OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2985  ,x_msg_count                   OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2986  ,x_msg_data                    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2987 ) IS
2988 
2989 l_api_name           CONSTANT   VARCHAR2(30)    := 'CONVERT_CURRENCY_AMOUNTS';
2990 l_api_version        CONSTANT   NUMBER          := p_api_version;
2991 l_user_id                       NUMBER          := FND_GLOBAL.USER_ID;
2992 l_login_id                      NUMBER          := FND_GLOBAL.LOGIN_ID;
2993 l_return_status                 VARCHAR2(1);
2994 l_msg_count                     NUMBER;
2995 
2996 --bug 3828542
2997 l_status               VARCHAR2(30);
2998 
2999 CURSOR ou_exp_org_id IS
3000 SELECT org_id from pa_implementations;
3001 
3002 -- Bug 4372462 : written new cursor proj_all
3003 --CURSOR proj_all IS
3004 --SELECT project_currency_code, projfunc_currency_code
3005 --FROM pa_projects_all
3006 --WHERE project_id = p_project_id;
3007 
3008 CURSOR proj_all IS
3009 SELECT ppa.project_currency_code,
3010     ppfo.project_cost_rate_type,
3011     ppfo.project_cost_rate_date_type,
3012     ppfo.project_cost_rate_date,
3013     ppa.projfunc_currency_code,
3014     ppfo.projfunc_cost_rate_type,
3015     ppfo.projfunc_cost_rate_date_type,
3016     ppfo.projfunc_cost_rate_date,
3017     ppfo.proj_fp_options_id
3018 FROM pa_projects_all ppa,
3019     pa_proj_fp_options ppfo
3020 WHERE ppa.project_id = p_project_id
3021 and ppfo.fin_plan_type_id = (select fin_plan_type_id
3022             from pa_fin_plan_types_b
3023                where use_for_workplan_flag = 'Y')
3024 and ppfo.project_id = p_project_id
3025 and ppfo.fin_plan_option_level_code = 'PLAN_TYPE';
3026 
3027 -- Bug 4372462 Begin
3028 --- get the override conversion rates for PC and PFC
3029 CURSOR bgt_line_rates(c_budget_version_id NUMBER, c_res_assignment_id NUMBER, c_txn_curr_code VARCHAR2, c_as_of_date Date) IS
3030 SELECT resource_assignment_id,
3031        start_date,
3032        end_date,
3033        project_cost_rate_type,
3034        project_cost_rate_date_type,
3035        project_cost_rate_date,
3036        project_cost_exchange_rate,
3037        projfunc_cost_rate_type,
3038        projfunc_cost_rate_date_type,
3039        projfunc_cost_rate_date,
3040        projfunc_cost_exchange_rate
3041 FROM pa_budget_lines
3042 where budget_version_id = c_budget_version_id
3043 and resource_assignment_id = c_res_assignment_id
3044 and c_as_of_date between start_date and end_date
3045 and txn_currency_code = c_txn_curr_code;
3046 
3047 --- get the user rates if rate tyep is User
3048 CURSOR user_cur_details(c_proj_fp_options_id NUMBER, c_txn_curr_code VARCHAR2) IS
3049 SELECT c.projfunc_cost_exchange_rate
3050   ,c.project_cost_exchange_rate
3051 FROM pa_fp_txn_currencies c
3052 WHERE c.proj_fp_options_id = c_proj_fp_options_id
3053 AND   c.txn_currency_code = c_txn_curr_code ;
3054 
3055 --- this cursor gets period set name and time phasing for project for use
3056 --- by next cursor defined
3057 CURSOR get_name_and_type_csr(c_budget_version_id NUMBER) IS
3058 SELECT gsb.period_set_name
3059     ,gsb.accounted_period_type
3060     ,pia.pa_period_type
3061     ,decode(pbv.version_type,
3062         'COST',ppfo.cost_time_phased_code,
3063         'REVENUE',ppfo.revenue_time_phased_code,
3064          ppfo.all_time_phased_code) time_phase_code
3065 FROM gl_sets_of_books           gsb
3066     ,pa_implementations_all pia
3067     ,pa_projects_all        ppa
3068     ,pa_budget_versions     pbv
3069     ,pa_proj_fp_options     ppfo
3070 WHERE ppa.project_id        = pbv.project_id
3071 AND pbv.budget_version_id = ppfo.fin_plan_version_id
3072 --AND nvl(ppa.org_id,-99)   = nvl(pia.org_id,-99)  R12: Bug 4363092:
3073 AND ppa.org_id   = pia.org_id
3074 AND gsb.set_of_books_id   = pia.set_of_books_id
3075 AND pbv.budget_version_id = c_budget_version_id;
3076 
3077 --- this cursor is used to get start_date and end_Date for periods
3078 --- need this for rate_date_type
3079 CURSOR get_gl_periods_csr(c_period_set_name VARCHAR2, c_accounted_period_type VARCHAR2, c_pa_period_type VARCHAR2, c_time_phase_code VARCHAR2, c_as_of_date Date ) IS
3080 SELECT START_DATE, END_DATE, PERIOD_NAME
3081 FROM gl_periods gp
3082 WHERE gp.period_set_name  = c_period_set_name
3083 AND gp.period_type      = decode(c_time_phase_code,'G',c_accounted_period_type,'P',c_pa_period_type)
3084 AND gp.adjustment_period_flag = 'N'
3085 AND gp.start_date  <= c_as_of_date
3086 AND gp.end_date   >= c_as_of_date
3087 ORDER BY gp.start_date;
3088 
3089 l_proj_all          proj_all%rowtype;
3090 l_bgt_line_rates        bgt_line_rates%rowtype;
3091 l_user_cur_details      user_cur_details%rowtype;
3092 l_pc_conv           VARCHAR2(1) := 'N';
3093 l_pfc_conv          VARCHAR2(1) := 'N';
3094 l_time_phase_code       VARCHAR2(1);
3095 l_period_set_name       VARCHAR2(15);
3096 l_accounted_period_type     VARCHAR2(15);
3097 l_pa_period_type        VARCHAR2(15);
3098 
3099 l_start_date            DATE;
3100 l_end_date          DATE;
3101 
3102 l_period_name           VARCHAR2(15);
3103 l_projfunc_cost_exchange_rate   NUMBER;
3104 l_project_cost_exchange_rate    NUMBER;
3105 tmp_project_rate_type       VARCHAR2(30);
3106 tmp_project_rate_date       DATE;
3107 tmp_project_exch_rate       NUMBER;
3108 tmp_project_raw_cost        NUMBER;
3109 tmp_projfunc_rate_type      VARCHAR2(30);
3110 tmp_projfunc_rate_date      DATE;
3111 tmp_projfunc_exch_rate      NUMBER;
3112 tmp_projfunc_raw_cost       NUMBER;
3113 
3114 g1_debug_mode           VARCHAR2(1);
3115 -- Bug 4372462 End
3116 
3117 l_org_id            NUMBER;
3118 l_acct_rate_date        DATE;
3119 l_acct_rate_type        VARCHAR2(30);
3120 l_acct_exch_rate        NUMBER;
3121 l_acct_raw_cost         NUMBER;
3122 l_project_curr_code     VARCHAR2(30);
3123 l_projfunc_curr_code        VARCHAR2(30);
3124 l_project_curr_code2        VARCHAR2(30);
3125 l_projfunc_curr_code2       VARCHAR2(30);
3126 --bug# 3627315
3127 --l_stage                   VARCHAR2(2000);
3128 l_stage             NUMBER;
3129 
3130 
3131 BEGIN
3132 
3133         x_return_status := FND_API.G_RET_STS_SUCCESS;
3134         g1_debug_mode := NVL(FND_PROFILE.value_specific('PA_DEBUG_MODE',l_user_id,l_login_id,275,null,null), 'N');
3135 
3136         IF g1_debug_mode  = 'Y' THEN
3137         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'Starts', x_Log_Level=> 3);
3138         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'p_project_id='||p_project_id, x_Log_Level=> 3);
3139         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'p_task_id='||p_task_id, x_Log_Level=> 3);
3140         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'p_as_of_date='||p_as_of_date, x_Log_Level=> 3);
3141         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'P_txn_cost='||P_txn_cost, x_Log_Level=> 3);
3142         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'P_txn_curr_code='||P_txn_curr_code, x_Log_Level=> 3);
3143         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'p_structure_version_id='||p_structure_version_id, x_Log_Level=> 3);
3144         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'p_calling_mode='||p_calling_mode, x_Log_Level=> 3);
3145         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'p_budget_version_id='||p_budget_version_id, x_Log_Level=> 3);
3146         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'p_res_assignment_id='||p_res_assignment_id, x_Log_Level=> 3);
3147         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'P_project_curr_code='||P_project_curr_code, x_Log_Level=> 3);
3148         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'P_projfunc_curr_code='||P_projfunc_curr_code, x_Log_Level=> 3);
3149         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'p_init_inout_vars='||p_init_inout_vars, x_Log_Level=> 3);
3150     END IF;
3151 
3152     IF p_init_inout_vars = 'Y' THEN
3153             -- This is being done so that if calling API's have two consecutive calls of
3154         -- this API with same local variables. Then they will get wrong data.
3155         -- instead of changing all of the calling API's, we are changing it here
3156         P_project_rate_type           := null;
3157         P_project_rate_date           := null;
3158         P_project_exch_rate           := null;
3159         P_project_raw_cost            := null;
3160         P_projfunc_cost_rate_type     := null;
3161         P_projfunc_cost_rate_date     := null;
3162         P_projfunc_cost_exch_rate     := null;
3163         P_projfunc_raw_cost           := null;
3164     END IF;
3165 
3166 
3167         OPEN ou_exp_org_id;
3168         FETCH ou_exp_org_id INTO l_org_id;
3169         CLOSE ou_exp_org_id;
3170 
3171     -- Bug 4372462 : New call below
3172         --OPEN proj_all;
3173         --FETCH proj_all INTO l_project_curr_code2, l_projfunc_curr_code2;
3174         --CLOSE proj_all;
3175 
3176         OPEN proj_all;
3177         FETCH proj_all INTO l_proj_all;
3178         CLOSE proj_all;
3179 
3180 
3181         IF p_project_curr_code IS NULL
3182         THEN
3183             l_project_curr_code := l_proj_all.project_currency_code;
3184         ELSE
3185             l_project_curr_code := p_project_curr_code;
3186         END IF;
3187 
3188         IF p_projfunc_curr_code  IS NULL
3189         THEN
3190             l_projfunc_curr_code := l_proj_all.projfunc_currency_code;
3191         ELSE
3192             l_projfunc_curr_code := p_projfunc_curr_code;
3193         END IF;
3194 
3195         IF g1_debug_mode  = 'Y' THEN
3196         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'l_org_id='||l_org_id, x_Log_Level=> 3);
3197         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'l_proj_all.project_currency_code='||l_proj_all.project_currency_code, x_Log_Level=> 3);
3198         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'l_proj_all.project_cost_rate_type='||l_proj_all.project_cost_rate_type, x_Log_Level=> 3);
3199         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'l_proj_all.project_cost_rate_date_type='||l_proj_all.project_cost_rate_date_type, x_Log_Level=> 3);
3200         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'l_proj_all.project_cost_rate_date='||l_proj_all.project_cost_rate_date, x_Log_Level=> 3);
3201         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'l_proj_all.projfunc_currency_code='||l_proj_all.projfunc_currency_code, x_Log_Level=> 3);
3202         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'l_proj_all.projfunc_cost_rate_type='||l_proj_all.projfunc_cost_rate_type, x_Log_Level=> 3);
3203         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'l_proj_all.projfunc_cost_rate_date_type='||l_proj_all.projfunc_cost_rate_date_type, x_Log_Level=> 3);
3204         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'l_proj_all.projfunc_cost_rate_date='||l_proj_all.projfunc_cost_rate_date, x_Log_Level=> 3);
3205         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'l_proj_all.proj_fp_options_id='||l_proj_all.proj_fp_options_id, x_Log_Level=> 3);
3206     END IF;
3207 
3208     IF P_txn_curr_code = l_project_curr_code THEN
3209         P_project_raw_cost := P_txn_cost;
3210         l_pc_conv := 'Y';
3211     END IF;
3212     IF P_txn_curr_code = l_projfunc_curr_code THEN
3213         P_projfunc_raw_cost := P_txn_cost;
3214         l_pfc_conv := 'Y';
3215     END IF;
3216 
3217     IF p_calling_mode = 'PLAN_RATES' AND (l_pc_conv = 'N' OR l_pfc_conv = 'N') THEN
3218         IF p_budget_version_id IS NULL OR p_res_assignment_id IS NULL THEN
3219             PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3220                         ,p_msg_name       => 'PA_INV_PARAM_PASSED');
3221             x_msg_data := 'PA_INV_PARAM_PASSED';
3222             x_return_status := FND_API.G_RET_STS_ERROR;
3223             RAISE  FND_API.G_EXC_ERROR;
3224         END IF;
3225 
3226         OPEN bgt_line_rates(p_budget_version_id, p_res_assignment_id, p_txn_curr_code, p_as_of_date);
3227         FETCH bgt_line_rates INTO l_bgt_line_rates;
3228         CLOSE bgt_line_rates;
3229 
3230         OPEN user_cur_details(l_proj_all.proj_fp_options_id, p_txn_curr_code);
3231         FETCH user_cur_details INTO l_projfunc_cost_exchange_rate, l_project_cost_exchange_rate;
3232         CLOSE user_cur_details;
3233 
3234         IF g1_debug_mode  = 'Y' THEN
3235             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'l_bgt_line_rates.resource_assignment_id='||l_bgt_line_rates.resource_assignment_id, x_Log_Level=> 3);
3236             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'l_bgt_line_rates.project_cost_exchange_rate='||l_bgt_line_rates.project_cost_exchange_rate, x_Log_Level=> 3);
3237             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'l_bgt_line_rates.project_cost_rate_type='||l_bgt_line_rates.project_cost_rate_type, x_Log_Level=> 3);
3238             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'l_bgt_line_rates.project_cost_rate_date='||l_bgt_line_rates.project_cost_rate_date, x_Log_Level=> 3);
3239             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'l_bgt_line_rates.project_cost_rate_date_type='||l_bgt_line_rates.project_cost_rate_date_type, x_Log_Level=> 3);
3240             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'l_bgt_line_rates.projfunc_cost_exchange_rate='||l_bgt_line_rates.projfunc_cost_exchange_rate, x_Log_Level=> 3);
3241             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'l_bgt_line_rates.projfunc_cost_rate_type='||l_bgt_line_rates.projfunc_cost_rate_type, x_Log_Level=> 3);
3242             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'l_bgt_line_rates.projfunc_cost_rate_date='||l_bgt_line_rates.projfunc_cost_rate_date, x_Log_Level=> 3);
3243             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'l_bgt_line_rates.projfunc_cost_rate_date_type='||l_bgt_line_rates.projfunc_cost_rate_date_type, x_Log_Level=> 3);
3244             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'l_projfunc_cost_exchange_rate='||l_projfunc_cost_exchange_rate, x_Log_Level=> 3);
3245             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'l_project_cost_exchange_rate='||l_project_cost_exchange_rate, x_Log_Level=> 3);
3246         END IF;
3247 
3248 
3249         IF l_bgt_line_rates.resource_assignment_id IS NOT NULL THEN
3250             -- Data is there in budget lines table
3251 
3252             --- PC Conv
3253             IF l_pc_conv = 'N' THEN
3254                 IF l_bgt_line_rates.project_cost_exchange_rate is not null THEN
3255                     --- calc cost
3256                     l_pc_conv := 'Y';
3257                     P_project_curr_code     := l_project_curr_code;
3258                     P_project_rate_type     := l_bgt_line_rates.project_cost_rate_type;
3259                     P_project_rate_date     := l_bgt_line_rates.project_cost_rate_date;
3260                     P_project_exch_rate     := l_bgt_line_rates.project_cost_exchange_rate;
3261                     P_project_raw_cost      := P_txn_cost * P_project_exch_rate;
3262                 ELSIF NVL(l_bgt_line_rates.project_cost_rate_type,l_proj_all.project_cost_rate_type) is not null THEN
3263                     --- use this rate type
3264                     IF NVL(l_bgt_line_rates.project_cost_rate_type,l_proj_all.project_cost_rate_type) = 'User' THEN
3265                         --- calc cost
3266                         l_pc_conv := 'Y';
3267                         P_project_curr_code   := l_project_curr_code;
3268                         P_project_rate_type   := nvl(l_bgt_line_rates.project_cost_rate_type,l_proj_all.project_cost_rate_type);
3269                         P_project_rate_date   := nvl(l_bgt_line_rates.project_cost_rate_date, l_proj_all.project_cost_rate_date);
3270                         P_project_exch_rate   := l_project_cost_exchange_rate;
3271                         P_project_raw_cost    := P_txn_cost * P_project_exch_rate;
3272 
3273                         IF l_project_cost_exchange_rate IS NULL THEN
3274                             PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3275                                 ,p_msg_name       => 'PA_FP_USER_EXCH_RATE_REQ');
3276                             x_msg_data := 'PA_FP_USER_EXCH_RATE_REQ';
3277                             x_return_status := FND_API.G_RET_STS_ERROR;
3278                             RAISE  FND_API.G_EXC_ERROR;
3279                         END IF;
3280                     ELSE
3281                         P_project_curr_code     := l_project_curr_code;
3282                         P_project_rate_type     := nvl(l_bgt_line_rates.project_cost_rate_Type,l_proj_all.project_cost_rate_type);
3283                         IF NVL(l_bgt_line_rates.project_cost_rate_date, l_proj_all.project_cost_rate_date) IS NOT NULL THEN
3284                             P_project_rate_date := NVL(l_bgt_line_rates.project_cost_rate_date, l_proj_all.project_cost_rate_date);
3285                         ELSE
3286                             IF NVL(l_bgt_line_rates.project_cost_rate_date_type, l_proj_all.project_cost_rate_date_type) = 'START_DATE' THEN
3287                                 P_project_rate_date := l_bgt_line_rates.start_date;
3288                             ELSIF NVL(l_bgt_line_rates.project_cost_rate_date_type, l_proj_all.project_cost_rate_date_type) = 'END_DATE' THEN
3289                                 P_project_rate_date := l_bgt_line_rates.end_date;
3290                             ELSIF NVL(l_bgt_line_rates.project_cost_rate_date_type, l_proj_all.project_cost_rate_date_type) = 'FIXED_DATE' THEN
3291                                 P_project_rate_date := NVL(l_bgt_line_rates.project_cost_rate_date, l_proj_all.project_cost_rate_date);
3292                                 -- This case should never come...This is an error
3293                             ELSE
3294                                 P_project_rate_date := null; -- Costing API will derive using implmentation option setup
3295                             END IF;
3296                         END IF;
3297                     END IF; -- NVL(l_bgt_line_rates.project_cost_rate_type,l_proj_all.project_cost_rate_type) = 'User'
3298                 END IF;   -- l_bgt_line_rates.project_cost_exchange_rate is not null
3299             END IF ; -- IF l_pc_conv = 'N'
3300 
3301             --- PFC Conv
3302             IF l_pfc_conv = 'N' THEN
3303                 IF l_bgt_line_rates.projfunc_cost_exchange_rate is not null THEN
3304                     --- calc cost
3305                     l_pfc_conv := 'Y';
3306                     P_projfunc_curr_code        := l_projfunc_curr_code;
3307                     P_projfunc_cost_rate_type   := l_bgt_line_rates.projfunc_cost_rate_type;
3308                     P_projfunc_cost_rate_date   := l_bgt_line_rates.projfunc_cost_rate_date;
3309                     P_projfunc_cost_exch_rate   := l_bgt_line_rates.projfunc_cost_exchange_rate;
3310                     P_projfunc_raw_cost     := P_txn_cost * P_projfunc_cost_exch_rate;
3311                 ELSIF NVL(l_bgt_line_rates.projfunc_cost_rate_type,l_proj_all.projfunc_cost_rate_type) is not null THEN
3312                     --- use this rate type
3313                     IF NVL(l_bgt_line_rates.projfunc_cost_rate_type,l_proj_all.projfunc_cost_rate_type) = 'User' THEN
3314                         --- calc cost
3315                         l_pfc_conv := 'Y';
3316                         P_projfunc_curr_code        := l_projfunc_curr_code;
3317                         P_projfunc_cost_rate_type   := nvl(l_bgt_line_rates.projfunc_cost_rate_type,l_proj_all.projfunc_cost_rate_type);
3318                         P_projfunc_cost_rate_date   := nvl(l_bgt_line_rates.projfunc_cost_rate_date, l_proj_all.projfunc_cost_rate_date);
3319                         P_projfunc_cost_exch_rate   := l_projfunc_cost_exchange_rate;
3320                         P_projfunc_raw_cost     := P_txn_cost * P_projfunc_cost_exch_rate;
3321 
3322                         IF l_projfunc_cost_exchange_rate IS NULL THEN
3323                             PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3324                                 ,p_msg_name       => 'PA_FP_USER_EXCH_RATE_REQ');
3325                             x_msg_data := 'PA_FP_USER_EXCH_RATE_REQ';
3326                             x_return_status := FND_API.G_RET_STS_ERROR;
3327                             RAISE  FND_API.G_EXC_ERROR;
3328                         END IF;
3329                     ELSE
3330                         P_projfunc_curr_code     := l_projfunc_curr_code;
3331                         P_projfunc_cost_rate_type     := nvl(l_bgt_line_rates.projfunc_cost_rate_type,l_proj_all.projfunc_cost_rate_type);
3332                         IF NVL(l_bgt_line_rates.projfunc_cost_rate_date, l_proj_all.projfunc_cost_rate_date) IS NOT NULL THEN
3333                             P_projfunc_cost_rate_date := NVL(l_bgt_line_rates.projfunc_cost_rate_date, l_proj_all.projfunc_cost_rate_date);
3334                         ELSE
3335                             IF NVL(l_bgt_line_rates.projfunc_cost_rate_date_type, l_proj_all.projfunc_cost_rate_date_type) = 'START_DATE' THEN
3336                                 P_projfunc_cost_rate_date := l_bgt_line_rates.start_date;
3337                             ELSIF NVL(l_bgt_line_rates.projfunc_cost_rate_date_type, l_proj_all.projfunc_cost_rate_date_type) = 'END_DATE' THEN
3338                                 P_projfunc_cost_rate_date := l_bgt_line_rates.end_date;
3339                             ELSIF NVL(l_bgt_line_rates.projfunc_cost_rate_date_type, l_proj_all.projfunc_cost_rate_date_type) = 'FIXED_DATE' THEN
3340                                 P_projfunc_cost_rate_date := NVL(l_bgt_line_rates.project_cost_rate_date, l_proj_all.project_cost_rate_date);
3341                                 -- This case should never come...This is an error
3342                             ELSE
3343                                 P_projfunc_cost_rate_date := null; -- Costing API will derive using implmentation option setup
3344                             END IF;
3345                         END IF;
3346                     END IF; -- NVL(l_bgt_line_rates.projfunc_cost_rate_type,l_proj_all.projfunc_cost_rate_type) = 'User'
3347                 END IF;   -- l_bgt_line_rates.projfunc_cost_exchange_rate is not null THEN
3348             END IF; -- IF l_pfc_conv = 'N'
3349         ELSE -- l_bgt_line_rates.resource_assignment_id IS NOT NULL
3350             OPEN get_name_and_type_csr(p_budget_version_id);
3351             FETCH get_name_and_type_csr INTO l_period_set_name, l_accounted_period_type, l_pa_period_type, l_time_phase_code;
3352             CLOSE get_name_and_type_csr;
3353 
3354             OPEN get_gl_periods_csr(l_period_set_name, l_accounted_period_type, l_pa_period_type, l_time_phase_code, p_as_of_date);
3355             FETCH get_gl_periods_csr INTO l_start_date, l_end_date, l_period_name;
3356             CLOSE get_gl_periods_csr;
3357 
3358             -- PC Conversion
3359             IF l_pc_conv = 'N' THEN
3360                 IF (l_proj_all.project_cost_rate_type is null) THEN
3361                     null; -- means no currency rates override at WP level
3362                 ELSE
3363                     --- use this rate type
3364                     IF l_proj_all.project_cost_rate_type = 'User' THEN
3365                         --- calc cost
3366                         l_pc_conv := 'Y';
3367                         P_project_curr_code   := l_project_curr_code;
3368                         P_project_rate_type   := l_proj_all.project_cost_rate_type;
3369                         P_project_rate_date   := l_proj_all.project_cost_rate_date;
3370                         P_project_exch_rate   := l_project_cost_exchange_rate;
3371                         P_project_raw_cost    := P_txn_cost * P_project_exch_rate;
3372 
3373                         IF l_project_cost_exchange_rate IS NULL THEN
3374                             PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3375                                 ,p_msg_name       => 'PA_FP_USER_EXCH_RATE_REQ');
3376                             x_msg_data := 'PA_FP_USER_EXCH_RATE_REQ';
3377                             x_return_status := FND_API.G_RET_STS_ERROR;
3378                             RAISE  FND_API.G_EXC_ERROR;
3379                         END IF;
3380                     ELSE
3381                         P_project_curr_code     := l_project_curr_code;
3382                         P_project_rate_type     := l_proj_all.project_cost_rate_type;
3383                         IF l_proj_all.project_cost_rate_date IS NOT NULL THEN
3384                             P_project_rate_date := l_proj_all.project_cost_rate_date;
3385                         ELSE
3386                             IF l_proj_all.project_cost_rate_date_type = 'START_DATE' THEN
3387                                 P_project_rate_date := l_start_date;
3388                             ELSIF l_proj_all.project_cost_rate_date_type = 'END_DATE' THEN
3389                                 P_project_rate_date := l_end_date;
3390                             ELSIF l_proj_all.project_cost_rate_date_type = 'FIXED_DATE' THEN
3391                                 P_project_rate_date :=  l_proj_all.project_cost_rate_date;
3392                                 -- This case should never come...This is an error
3393                             ELSE
3394                                 P_project_rate_date := null; -- Costing API will derive using implmentation option setup
3395                             END IF;
3396                         END IF;
3397                     END IF; -- l_proj_all.project_cost_rate_type = 'User'
3398                 END IF;   -- l_proj_all.project_cost_rate_type is null
3399             END IF ; -- IF l_pc_conv = 'N' THEN
3400 
3401             -- PFC Conversion
3402             IF l_pfc_conv = 'N' THEN
3403                 IF (l_proj_all.projfunc_cost_rate_type is null) THEN
3404                     null; -- means no currency rates override at proj level
3405                 ELSE
3406                     --- use this rate type
3407                     IF l_proj_all.projfunc_cost_rate_type = 'User' THEN
3408                         --- calc cost
3409                         l_pfc_conv := 'Y';
3410                         P_projfunc_curr_code        := l_projfunc_curr_code;
3411                         P_projfunc_cost_rate_type   := l_proj_all.projfunc_cost_rate_type;
3412                         P_projfunc_cost_rate_date   := l_proj_all.projfunc_cost_rate_date;
3413                         P_projfunc_cost_exch_rate   := l_projfunc_cost_exchange_rate;
3414                         P_projfunc_raw_cost     := P_txn_cost * P_projfunc_cost_exch_rate;
3415 
3416                         IF l_projfunc_cost_exchange_rate IS NULL THEN
3417                             PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3418                                 ,p_msg_name       => 'PA_FP_USER_EXCH_RATE_REQ');
3419                             x_msg_data := 'PA_FP_USER_EXCH_RATE_REQ';
3420                             x_return_status := FND_API.G_RET_STS_ERROR;
3421                             RAISE  FND_API.G_EXC_ERROR;
3422                         END IF;
3423                     ELSE
3424                         P_projfunc_curr_code        := l_projfunc_curr_code;
3425                         P_projfunc_cost_rate_type   := l_proj_all.projfunc_cost_rate_type;
3426                         IF l_proj_all.projfunc_cost_rate_date IS NOT NULL THEN
3427                             P_projfunc_cost_rate_date := l_proj_all.projfunc_cost_rate_date;
3428                         ELSE
3429                             IF l_proj_all.projfunc_cost_rate_date_type = 'START_DATE' THEN
3430                                 P_projfunc_cost_rate_date := l_start_date;
3431                             ELSIF l_proj_all.projfunc_cost_rate_date_type = 'END_DATE' THEN
3432                                 P_projfunc_cost_rate_date := l_end_date;
3433                             ELSIF l_proj_all.projfunc_cost_rate_date_type = 'FIXED_DATE' THEN
3434                                 P_projfunc_cost_rate_date :=  l_proj_all.project_cost_rate_date;
3435                                 -- This case should never come...This is an error
3436                             ELSE
3437                                 P_projfunc_cost_rate_date := null; -- Costing API will derive using implmentation option setup
3438                             END IF;
3439                         END IF;
3440                     END IF; -- l_proj_all.projfunc_cost_rate_type = 'User'
3441                 END IF;   -- l_proj_all.projfunc_cost_rate_type is null
3442             END IF;--IF l_pfc_conv = 'N' THEN
3443 
3444         END IF; -- l_bgt_line_rates.resource_assignment_id IS NOT NULL
3445     END IF; -- p_calling_mode = 'PLAN_RATES'
3446 
3447     IF (l_pc_conv = 'N' OR l_pfc_conv = 'N') THEN
3448         tmp_project_rate_type := P_project_rate_type;
3449         tmp_project_rate_date := P_project_rate_date;
3450         tmp_project_exch_rate := P_project_exch_rate;
3451         tmp_project_raw_cost  := P_project_raw_cost;
3452 
3453         tmp_projfunc_rate_type := P_projfunc_cost_rate_type;
3454         tmp_projfunc_rate_date := P_projfunc_cost_rate_date;
3455         tmp_projfunc_exch_rate := P_projfunc_cost_exch_rate;
3456         tmp_projfunc_raw_cost  := P_projfunc_raw_cost;
3457 
3458         IF l_pc_conv = 'Y' THEN
3459             -- This is possible when TXN to PC is User and rate is found
3460             -- So if we pass this rate type to Costing API
3461             -- It will error out..
3462             tmp_project_rate_type := P_projfunc_cost_rate_type;
3463             tmp_project_rate_date := P_projfunc_cost_rate_date;
3464             tmp_project_exch_rate := P_projfunc_cost_exch_rate;
3465             tmp_project_raw_cost := P_projfunc_raw_cost;
3466         END IF;
3467         IF l_pfc_conv = 'Y' THEN
3468             tmp_projfunc_rate_type := P_project_rate_type;
3469             tmp_projfunc_rate_date := P_project_rate_date;
3470             tmp_projfunc_exch_rate := P_project_exch_rate;
3471             tmp_projfunc_raw_cost  := P_project_raw_cost;
3472         END IF;
3473 
3474         BEGIN
3475             IF g1_debug_mode  = 'Y' THEN
3476                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'Calling pa_multi_currency_txn.get_currency_amounts', x_Log_Level=> 3);
3477                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'tmp_project_rate_type='||tmp_project_rate_type, x_Log_Level=> 3);
3478                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'tmp_project_rate_date='||tmp_project_rate_date, x_Log_Level=> 3);
3479                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'tmp_project_exch_rate='||tmp_project_exch_rate, x_Log_Level=> 3);
3480                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'tmp_project_raw_cost='||tmp_project_raw_cost, x_Log_Level=> 3);
3481                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'tmp_projfunc_rate_type='||tmp_projfunc_rate_type, x_Log_Level=> 3);
3482                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'tmp_projfunc_rate_date='||tmp_projfunc_rate_date, x_Log_Level=> 3);
3483                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'tmp_projfunc_exch_rate='||tmp_projfunc_exch_rate, x_Log_Level=> 3);
3484                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'tmp_projfunc_raw_cost='||tmp_projfunc_raw_cost, x_Log_Level=> 3);
3485             END IF;
3486 
3487             pa_multi_currency_txn.get_currency_amounts (
3488                 p_calling_module        => 'WORKPLAN', -- FPM Dev CR 3
3489                 P_project_id            => p_project_id,
3490                 P_exp_org_id            => l_org_id,
3491                 P_task_id               => p_task_id,
3492                 P_EI_date               => p_as_of_date,
3493                 P_denom_raw_cost        => p_txn_cost,
3494                 P_denom_curr_code       => P_txn_curr_code,
3495                 P_acct_curr_code        => P_txn_curr_code,
3496                 P_acct_rate_date        => l_acct_rate_date,
3497                 P_acct_rate_type        => l_acct_rate_type,
3498                 P_acct_exch_rate        => l_acct_exch_rate,
3499                 P_acct_raw_cost         => l_acct_raw_cost,
3500                 P_project_curr_code     => l_project_curr_code,
3501                 P_project_rate_type     => tmp_project_rate_type ,
3502                 P_project_rate_date     => tmp_project_rate_date,
3503                 P_project_exch_rate     => tmp_project_exch_rate,
3504                 P_project_raw_cost      => tmp_project_raw_cost,
3505                 P_projfunc_curr_code    => l_projfunc_curr_code,
3506                 p_projfunc_cost_rate_type  => tmp_projfunc_rate_type,
3507                 P_projfunc_cost_rate_date  => tmp_projfunc_rate_date,
3508                 P_projfunc_cost_exch_rate  => tmp_projfunc_exch_rate,
3509                 P_projfunc_raw_cost        => tmp_projfunc_raw_cost,
3510                 --P_status                   => l_return_status, --bug 3828542
3511                 P_status                   => l_status,
3512                 P_stage                    => l_stage,
3513                 p_structure_version_id     => p_structure_version_id -- 3627787
3514                    );
3515 
3516             IF g1_debug_mode  = 'Y' THEN
3517                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'After Call l_status='||l_status, x_Log_Level=> 3);
3518                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'After Call l_stage='||l_stage, x_Log_Level=> 3);
3519             END IF;
3520 
3521 
3522         EXCEPTION
3523             WHEN OTHERS THEN
3524                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROGRESS_UTILS',
3525                     p_procedure_name => 'CONVERT_CURRENCY_AMOUNTS',
3526                     p_error_text     => SUBSTRB('pa_multi_currency_txn.get_currency_amounts:'||SQLERRM,1,120));
3527                 RAISE FND_API.G_EXC_ERROR;
3528 
3529         END;
3530         --bug 3828542 start
3531         IF ( l_status IS NOT NULL ) THEN
3532             PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3533                      ,p_msg_name       => l_status);
3534             x_msg_data := l_status;
3535             l_return_status := 'E';
3536         END IF;
3537         --bug 3828542 end
3538 
3539         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3540             x_return_status := 'E';
3541             RAISE  FND_API.G_EXC_ERROR;
3542         END IF;
3543 
3544 
3545         IF l_pc_conv = 'N' THEN
3546             P_project_rate_type := tmp_project_rate_type;
3547             P_project_rate_date := tmp_project_rate_date;
3548             P_project_exch_rate := tmp_project_exch_rate;
3549             P_project_raw_cost := tmp_project_raw_cost;
3550         END IF;
3551         IF l_pfc_conv = 'N' THEN
3552             P_projfunc_cost_rate_type := tmp_projfunc_rate_type;
3553             P_projfunc_cost_rate_date := tmp_projfunc_rate_date;
3554             P_projfunc_cost_exch_rate := tmp_projfunc_exch_rate;
3555             P_projfunc_raw_cost := tmp_projfunc_raw_cost;
3556         END IF;
3557     END IF; --  IF (l_pc_conv = 'N' or l_pfc_conv = 'N') THEN
3558 
3559         IF g1_debug_mode  = 'Y' THEN
3560         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'Ends', x_Log_Level=> 3);
3561         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'P_project_curr_code='||P_project_curr_code, x_Log_Level=> 3);
3562         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'P_project_rate_type='||P_project_rate_type, x_Log_Level=> 3);
3563         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'P_project_rate_date='||P_project_rate_date, x_Log_Level=> 3);
3564         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'P_project_exch_rate='||P_project_exch_rate, x_Log_Level=> 3);
3565         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'P_project_raw_cost='||P_project_raw_cost, x_Log_Level=> 3);
3566         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'P_projfunc_curr_code='||P_projfunc_curr_code, x_Log_Level=> 3);
3567         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'P_projfunc_cost_rate_type='||P_projfunc_cost_rate_type, x_Log_Level=> 3);
3568         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'P_projfunc_cost_rate_date='||P_projfunc_cost_rate_date, x_Log_Level=> 3);
3569         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'P_projfunc_cost_exch_rate='||P_projfunc_cost_exch_rate, x_Log_Level=> 3);
3570         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'P_projfunc_raw_cost='||P_projfunc_raw_cost, x_Log_Level=> 3);
3571 
3572     END IF;
3573 
3574 EXCEPTION
3575     when FND_API.G_EXC_ERROR then
3576       x_return_status := FND_API.G_RET_STS_ERROR;
3577 
3578         -- 4537865 : Start
3579     ----    p_project_curr_code         := NULL ;  5081809
3580         P_project_rate_type         := NULL ;
3581         P_project_rate_date         := NULL ;
3582         P_project_exch_rate         := NULL ;
3583         P_project_raw_cost          := NULL ;
3584     ----    P_projfunc_curr_code        := NULL ;  5081809
3585         P_projfunc_cost_rate_type   := NULL ;
3586         P_projfunc_cost_rate_date   := NULL ;
3587         P_projfunc_cost_exch_rate   := NULL ;
3588         P_projfunc_raw_cost         := NULL ;
3589         -- 4537865 : End
3590 
3591     when FND_API.G_EXC_UNEXPECTED_ERROR then
3592       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3593       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROGRESS_UTILS',
3594                               p_procedure_name => 'convert_currency_amounts',
3595                               p_error_text     => SUBSTRB(SQLERRM,1,120));
3596         -- 4537865 : Start
3597     ----    p_project_curr_code         := NULL ;  5081809
3598         P_project_rate_type         := NULL ;
3599         P_project_rate_date         := NULL ;
3600         P_project_exch_rate         := NULL ;
3601         P_project_raw_cost          := NULL ;
3602     ----    P_projfunc_curr_code        := NULL ;  5081809
3603         P_projfunc_cost_rate_type   := NULL ;
3604         P_projfunc_cost_rate_date   := NULL ;
3605         P_projfunc_cost_exch_rate   := NULL ;
3606         P_projfunc_raw_cost         := NULL ;
3607         -- 4537865 : End
3608 
3609     when OTHERS then
3610       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3611       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROGRESS_UTILS',
3612                               p_procedure_name => 'convert_currency_amounts',
3613                               p_error_text     => SUBSTRB(SQLERRM,1,120));
3614 
3615     -- 4537865 : Start
3616     ---- p_project_curr_code         := NULL ;  5081809
3617     P_project_rate_type         := NULL ;
3618     P_project_rate_date         := NULL ;
3619     P_project_exch_rate         := NULL ;
3620     P_project_raw_cost          := NULL ;
3621     ---- P_projfunc_curr_code        := NULL ;  5081809
3622     P_projfunc_cost_rate_type   := NULL ;
3623     P_projfunc_cost_rate_date   := NULL ;
3624     P_projfunc_cost_exch_rate   := NULL ;
3625     P_projfunc_raw_cost         := NULL ;
3626     -- 4537865 : End
3627       raise;
3628 
3629 END convert_currency_amounts;
3630 
3631 FUNCTION get_time_phase_period(p_structure_version_id   IN  NUMBER
3632                    ,p_project_id        IN      NUMBER := NULL) return VARCHAR2
3633 IS
3634     l_time_phase_code   VARCHAR2(30);
3635     l_structure_version_id  NUMBER;
3636 BEGIN
3637     if p_structure_version_id is null then
3638         l_structure_version_id := PA_PROJ_ELEMENTS_UTILS.latest_published_ver_id(p_project_id, 'WORKPLAN');
3639     else
3640         l_structure_version_id := p_structure_version_id;
3641     end if;
3642     BEGIN
3643         l_time_phase_code := PA_FIN_PLAN_UTILS.Get_wp_bv_time_phase(l_structure_version_id);
3644      EXCEPTION
3645                 WHEN OTHERS THEN
3646                         fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROGRESS_UTILS',
3647                                         p_procedure_name => 'get_time_phase_period',
3648                                         p_error_text     => SUBSTRB('PA_FIN_PLAN_UTILS.Get_wp_bv_time_phase:'||SQLERRM,1,120));
3649                         RAISE FND_API.G_EXC_ERROR;
3650          END;
3651 
3652     RETURN(l_time_phase_code);
3653 END get_time_phase_period;
3654 
3655 -- Bug 3879461 : Get_incremental functions are not used anymore
3656 -- Moreover getting the previous period amount logic is wrong...
3657 -- Now things are directly derived in pa_progress_pub.POPULATE_PRG_ACT_TEMP_TBL
3658 FUNCTION get_incremental_actual_cost(p_as_of_date           IN              DATE
3659                                     ,p_period_name          IN              VARCHAR2
3660                                     ,pgn_flag               IN              VARCHAR2
3661                                     ,p_project_id           IN              NUMBER
3662                                     ,p_object_id            IN              NUMBER
3663                                     ,p_object_version_id    IN              NUMBER
3664                                     ,currency_flag          IN              VARCHAR2 := 'T'
3665                                     ,p_structure_version_id IN              NUMBER := null  --3694031
3666                ,p_proj_element_id       IN  NUMBER := null /* Modified for IB4 Progress CR. */
3667                             ) return NUMBER
3668 IS
3669     l_actual_cost   NUMBER := NULL;
3670     l_prev_period_actual_cost NUMBER;
3671 BEGIN
3672 
3673     if (currency_flag = 'P') then
3674 
3675        if p_structure_version_id IS NULL
3676        THEN
3677 
3678     if (pgn_flag = 'P') then
3679 
3680           begin
3681             select (nvl(ppr.oth_act_cost_to_date_pc,0)+nvl(ppr.ppl_act_cost_to_date_pc,0)
3682             +nvl(ppr.eqpmt_act_cost_to_date_pc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)
3683             +nvl(ppr.subprj_ppl_act_cost_pc,0)+nvl(ppr.subprj_eqpmt_act_cost_pc,0))
3684             into l_actual_cost
3685                 from pa_progress_rollup ppr
3686                 where ppr.project_id = p_project_id
3687                 and ppr.object_id = p_object_id
3688                 and prog_pa_period_name = p_period_name
3689             and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3690                 and ppr.structure_version_id IS NULL   --bug 3802177
3691             and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
3692                 and ppr.as_of_date = (select max(as_of_date)
3693                                      from pa_progress_rollup ppr2
3694                                      where ppr2.project_id = ppr.project_id
3695                                      and ppr2.object_id = ppr.object_id
3696                      and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3697                                      and ppr2.structure_version_id IS NULL   --bug 3802177
3698                                      and ppr2.prog_pa_period_name = ppr.prog_pa_period_name
3699                      and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
3700              );
3701 
3702            exception when no_data_found then
3703                 l_actual_cost := 0;
3704            end;
3705 
3706            begin
3707             select (nvl(ppr.oth_act_cost_to_date_pc,0)+nvl(ppr.ppl_act_cost_to_date_pc,0)
3708             +nvl(ppr.eqpmt_act_cost_to_date_pc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)
3709             +nvl(ppr.subprj_ppl_act_cost_pc,0)+nvl(ppr.subprj_eqpmt_act_cost_pc,0))
3710                   into l_prev_period_actual_cost
3711                   from pa_progress_rollup ppr
3712                  where ppr.project_id = p_project_id
3713                    and ppr.object_id = p_object_id
3714                    and ppr.structure_type = 'WORKPLAN'
3715                    and ppr.structure_version_id IS NULL
3716                and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
3717                    and ppr.as_of_date = ( select max(ppr1.as_of_date)
3718                                  from pa_progress_rollup ppr1
3719                                 where ppr1.project_id = ppr.project_id
3720                                   and ppr1.object_id = ppr.object_id
3721                                   and ppr1.structure_type = 'WORKPLAN'
3722                                   and ppr1.structure_version_id IS NULL   --bug 3802177
3723                    and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
3724                                   and as_of_date < ( select min(as_of_date)
3725                                                    from pa_progress_rollup ppr2
3726                                                    where ppr2.project_id = ppr1.project_id
3727                                                      and ppr2.object_id = ppr1.object_id
3728                                                      and structure_type = 'WORKPLAN'
3729                                                      and ppr2.structure_version_id IS NULL   --bug 3802177
3730                                                      and ppr2.prog_pa_period_name = p_period_name
3731                              and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
3732                                                 ));
3733            exception when no_data_found then
3734                 l_prev_period_actual_cost := 0;
3735            end;
3736     elsif (pgn_flag ='G') then
3737           begin
3738             select (nvl(ppr.oth_act_cost_to_date_pc,0)+nvl(ppr.ppl_act_cost_to_date_pc,0)
3739             +nvl(ppr.eqpmt_act_cost_to_date_pc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)
3740             +nvl(ppr.subprj_ppl_act_cost_pc,0)+nvl(ppr.subprj_eqpmt_act_cost_pc,0))
3741             into l_actual_cost
3742                 from pa_progress_rollup ppr
3743                 where ppr.project_id = p_project_id
3744                 and ppr.object_id = p_object_id
3745                 and prog_gl_period_name = p_period_name
3746             and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3747                                   and ppr.structure_version_id IS NULL   --bug 3802177
3748                 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
3749                 and ppr.as_of_date = (select max(as_of_date)
3750                                      from pa_progress_rollup ppr2
3751                                      where ppr2.project_id = ppr.project_id
3752                                      and ppr2.object_id = ppr.object_id
3753                                      and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3754                                   and ppr2.structure_version_id IS NULL   --bug 3802177
3755                                      and ppr2.prog_gl_period_name = ppr.prog_gl_period_name
3756                      and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
3757 
3758            exception when no_data_found then
3759                 l_actual_cost := 0;
3760            end;
3761 
3762            begin
3763             select (nvl(ppr.oth_act_cost_to_date_pc,0)+nvl(ppr.ppl_act_cost_to_date_pc,0)
3764             +nvl(ppr.eqpmt_act_cost_to_date_pc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)
3765             +nvl(ppr.subprj_ppl_act_cost_pc,0)+nvl(ppr.subprj_eqpmt_act_cost_pc,0))
3766                   into l_prev_period_actual_cost
3767                   from pa_progress_rollup ppr
3768                  where ppr.project_id = p_project_id
3769                    and ppr.object_id = p_object_id
3770                    and ppr.structure_type = 'WORKPLAN'
3771                    and ppr.structure_version_id IS NULL
3772        and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
3773                    and ppr.as_of_date = ( select max(ppr1.as_of_date)
3774                                  from pa_progress_rollup ppr1
3775                                 where ppr1.project_id = ppr.project_id
3776                                   and ppr1.object_id = ppr.object_id
3777                                   and ppr1.structure_type = 'WORKPLAN'
3778                                   and ppr1.structure_version_id IS NULL   --bug 3802177
3779             and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
3780                                   and as_of_date < ( select min(as_of_date)
3781                                                    from pa_progress_rollup ppr2
3782                                                    where ppr2.project_id = ppr1.project_id
3783                                                      and ppr2.object_id = ppr1.object_id
3784                                                      and structure_type = 'WORKPLAN'
3785                                   and ppr2.structure_version_id IS NULL   --bug 3802177
3786                                                      and ppr2.prog_gl_period_name = p_period_name
3787             and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
3788                                                 ));
3789            exception when no_data_found then
3790                 l_prev_period_actual_cost := 0;
3791            end;
3792     elsif (pgn_flag = 'N') then
3793                 select (nvl(ppr.oth_act_cost_to_date_pc,0)+nvl(ppr.ppl_act_cost_to_date_pc,0)
3794             +nvl(ppr.eqpmt_act_cost_to_date_pc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)
3795             +nvl(ppr.subprj_ppl_act_cost_pc,0)+nvl(ppr.subprj_eqpmt_act_cost_pc,0))
3796                 into l_actual_cost
3797                 from pa_progress_rollup ppr
3798                 where ppr.project_id = p_project_id
3799                 and ppr.object_id = p_object_id
3800                 --and ppr.object_version_id = p_object_version_id
3801             and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3802                                   and ppr.structure_version_id IS NULL   --bug 3802177
3803                 and ppr.as_of_date = p_as_of_date
3804     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
3805     end if; -- pgn flag.
3806       ELSIF p_structure_version_id IS NOT NULL
3807       THEN
3808            select (nvl(ppr.oth_act_cost_to_date_pc,0)+nvl(ppr.ppl_act_cost_to_date_pc,0)
3809                     +nvl(ppr.eqpmt_act_cost_to_date_pc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)
3810                     +nvl(ppr.subprj_ppl_act_cost_pc,0)+nvl(ppr.subprj_eqpmt_act_cost_pc,0))
3811            into l_actual_cost
3812            from pa_progress_rollup ppr
3813           where ppr.project_id = p_project_id
3814             and ppr.object_id = p_object_id
3815             and ppr.structure_version_id = p_structure_version_id
3816             and structure_type = 'WORKPLAN'
3817         and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
3818 
3819       END IF;
3820 
3821     elsif (currency_flag) = 'T' then
3822 
3823       IF p_structure_version_id IS NULL
3824       THEN
3825 
3826     if (pgn_flag = 'P') then
3827           begin
3828             select (nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)
3829             +nvl(ppr.eqpmt_act_cost_to_date_tc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_TC,0)
3830             +nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0))
3831             into l_actual_cost
3832                 from pa_progress_rollup ppr
3833                 where ppr.project_id = p_project_id
3834                 and ppr.object_id = p_object_id
3835                 and prog_pa_period_name = p_period_name
3836                 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3837                                   and ppr.structure_version_id IS NULL   --bug 3802177
3838     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
3839                 and ppr.as_of_date = (select max(as_of_date)
3840                                      from pa_progress_rollup ppr2
3841                                      where ppr2.project_id = ppr.project_id
3842                                      and ppr2.object_id = ppr.object_id
3843                                      and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3844                                   and ppr2.structure_version_id IS NULL   --bug 3802177
3845                                      and ppr2.prog_pa_period_name = ppr.prog_pa_period_name
3846             and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
3847 
3848            exception when no_data_found then
3849                 l_actual_cost := 0;
3850            end;
3851 
3852            begin
3853             select (nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)
3854             +nvl(ppr.eqpmt_act_cost_to_date_tc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_TC,0)
3855             +nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0))
3856                   into l_prev_period_actual_cost
3857                   from pa_progress_rollup ppr
3858                  where ppr.project_id = p_project_id
3859                    and ppr.object_id = p_object_id
3860                    and ppr.structure_type = 'WORKPLAN'
3861                    and ppr.structure_version_id IS NULL
3862        and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
3863                    and ppr.as_of_date = ( select max(ppr1.as_of_date)
3864                                  from pa_progress_rollup ppr1
3865                                 where ppr1.project_id = ppr.project_id
3866                                   and ppr1.object_id = ppr.object_id
3867                                   and ppr1.structure_type = 'WORKPLAN'
3868                                   and ppr1.structure_version_id IS NULL   --bug 3802177
3869             and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
3870                                   and as_of_date < ( select min(as_of_date)
3871                                                    from pa_progress_rollup ppr2
3872                                                    where ppr2.project_id = ppr1.project_id
3873                                                      and ppr2.object_id = ppr1.object_id
3874                                                      and structure_type = 'WORKPLAN'
3875                                   and ppr2.structure_version_id IS NULL   --bug 3802177
3876                                                      and ppr2.prog_pa_period_name = p_period_name
3877             and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
3878                                                 ));
3879            exception when no_data_found then
3880                 l_prev_period_actual_cost := 0;
3881            end;
3882     elsif (pgn_flag ='G') then
3883 
3884           begin
3885             select (nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)
3886             +nvl(ppr.eqpmt_act_cost_to_date_tc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_TC,0)
3887             +nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0))
3888             into l_actual_cost
3889                 from pa_progress_rollup ppr
3890                 where ppr.project_id = p_project_id
3891                 and ppr.object_id = p_object_id
3892                 and prog_gl_period_name = p_period_name
3893                 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3894                                   and ppr.structure_version_id IS NULL   --bug 3802177
3895     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
3896                 and ppr.as_of_date = (select max(as_of_date)
3897                                      from pa_progress_rollup ppr2
3898                                      where ppr2.project_id = ppr.project_id
3899                                      and ppr2.object_id = ppr.object_id
3900                                      and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3901                                   and ppr2.structure_version_id IS NULL   --bug 3802177
3902                                      and ppr2.prog_gl_period_name = ppr.prog_gl_period_name
3903             and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
3904 
3905            exception when no_data_found then
3906                 l_actual_cost := 0;
3907            end;
3908 
3909            begin
3910             select (nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)
3911             +nvl(ppr.eqpmt_act_cost_to_date_tc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_TC,0)
3912             +nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0))
3913                   into l_prev_period_actual_cost
3914                   from pa_progress_rollup ppr
3915                  where ppr.project_id = p_project_id
3916                    and ppr.object_id = p_object_id
3917                    and ppr.structure_type = 'WORKPLAN'
3918                    and ppr.structure_version_id IS NULL
3919        and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
3920                    and ppr.as_of_date = ( select max(ppr1.as_of_date)
3921                                  from pa_progress_rollup ppr1
3922                                 where ppr1.project_id = ppr.project_id
3923                                   and ppr1.object_id = ppr.object_id
3924                                   and ppr1.structure_type = 'WORKPLAN'
3925                                   and ppr1.structure_version_id IS NULL   --bug 3802177
3926             and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
3927                                   and as_of_date < ( select min(as_of_date)
3928                                                    from pa_progress_rollup ppr2
3929                                                    where ppr2.project_id = ppr1.project_id
3930                                                      and ppr2.object_id = ppr1.object_id
3931                                                      and structure_type = 'WORKPLAN'
3932                                   and ppr2.structure_version_id IS NULL   --bug 3802177
3933                                                      and ppr2.prog_gl_period_name = p_period_name
3934             and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
3935                                                 ));
3936            exception when no_data_found then
3937                 l_prev_period_actual_cost := 0;
3938            end;
3939     elsif (pgn_flag = 'N') then
3940                 select (nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)
3941             +nvl(ppr.eqpmt_act_cost_to_date_tc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_TC,0)
3942             +nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0))
3943                 into l_actual_cost
3944                 from pa_progress_rollup ppr
3945                 where ppr.project_id = p_project_id
3946                 and ppr.object_id = p_object_id
3947                 and ppr.object_version_id = p_object_version_id
3948             and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3949                                   and ppr.structure_version_id IS NULL   --bug 3802177
3950                 and ppr.as_of_date = p_as_of_date
3951     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
3952     end if; -- pgn flag.
3953     ELSIF p_structure_version_id IS NOT NULL
3954     THEN
3955                select (nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)
3956                         +nvl(ppr.eqpmt_act_cost_to_date_tc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_TC,0)
3957                         +nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0))
3958                 into l_actual_cost
3959                 from pa_progress_rollup ppr
3960                 where ppr.project_id = p_project_id
3961                 and ppr.object_id = p_object_id
3962                 and ppr.object_version_id = p_object_version_id
3963                 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3964                 and ppr.structure_version_id = p_structure_version_id
3965     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
3966     END IF;
3967 
3968   elsif (currency_flag = 'F') then
3969 
3970      IF p_structure_version_id IS NULL
3971      THEN
3972     if (pgn_flag = 'P') then
3973           begin
3974             select (nvl(ppr.oth_act_cost_to_date_fc,0)+nvl(ppr.ppl_act_cost_to_date_fc,0)
3975             +nvl(ppr.eqpmt_act_cost_to_date_fc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)
3976             +nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0))
3977             into l_actual_cost
3978                 from pa_progress_rollup ppr
3979                 where ppr.project_id = p_project_id
3980                 and ppr.object_id = p_object_id
3981                 and prog_pa_period_name = p_period_name
3982                 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3983                                   and ppr.structure_version_id IS NULL   --bug 3802177
3984     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
3985                 and ppr.as_of_date = (select max(as_of_date)
3986                                      from pa_progress_rollup ppr2
3987                                      where ppr2.project_id = ppr.project_id
3988                                      and ppr2.object_id = ppr.object_id
3989                                      and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3990                                   and ppr2.structure_version_id IS NULL   --bug 3802177
3991                                      and ppr2.prog_pa_period_name = ppr.prog_pa_period_name
3992             and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
3993 
3994            exception when no_data_found then
3995                 l_actual_cost := 0;
3996            end;
3997 
3998            begin
3999             select (nvl(ppr.oth_act_cost_to_date_fc,0)+nvl(ppr.ppl_act_cost_to_date_fc,0)
4000             +nvl(ppr.eqpmt_act_cost_to_date_fc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)
4001             +nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0))
4002                   into l_prev_period_actual_cost
4003                   from pa_progress_rollup ppr
4004                  where ppr.project_id = p_project_id
4005                    and ppr.object_id = p_object_id
4006                    and ppr.structure_type = 'WORKPLAN'
4007                    and ppr.structure_version_id IS NULL
4008        and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4009                    and ppr.as_of_date = ( select max(ppr1.as_of_date)
4010                                  from pa_progress_rollup ppr1
4011                                 where ppr1.project_id = ppr.project_id
4012                                   and ppr1.object_id = ppr.object_id
4013                                   and ppr1.structure_type = 'WORKPLAN'
4014                                   and ppr1.structure_version_id IS NULL   --bug 3802177
4015             and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
4016                                   and as_of_date < ( select min(as_of_date)
4017                                                    from pa_progress_rollup ppr2
4018                                                    where ppr2.project_id = ppr1.project_id
4019                                                      and ppr2.object_id = ppr1.object_id
4020                                                      and structure_type = 'WORKPLAN'
4021                                   and ppr2.structure_version_id IS NULL   --bug 3802177
4022                                                      and ppr2.prog_pa_period_name = p_period_name
4023             and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
4024                                                 ));
4025            exception when no_data_found then
4026                 l_prev_period_actual_cost := 0;
4027            end;
4028     elsif (pgn_flag ='G') then
4029           begin
4030             select (nvl(ppr.oth_act_cost_to_date_fc,0)+nvl(ppr.ppl_act_cost_to_date_fc,0)
4031             +nvl(ppr.eqpmt_act_cost_to_date_fc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)
4032             +nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0))
4033             into l_actual_cost
4034                 from pa_progress_rollup ppr
4035                 where ppr.project_id = p_project_id
4036                 and ppr.object_id = p_object_id
4037                 and prog_gl_period_name = p_period_name
4038                 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4039                                   and ppr.structure_version_id IS NULL   --bug 3802177
4040     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4041                 and ppr.as_of_date = (select max(as_of_date)
4042                                      from pa_progress_rollup ppr2
4043                                      where ppr2.project_id = ppr.project_id
4044                                      and ppr2.object_id = ppr.object_id
4045                                      and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4046                                   and ppr2.structure_version_id IS NULL   --bug 3802177
4047                                      and ppr2.prog_gl_period_name = ppr.prog_gl_period_name
4048             and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
4049 
4050            exception when no_data_found then
4051                 l_actual_cost := 0;
4052            end;
4053 
4054            begin
4055             select (nvl(ppr.oth_act_cost_to_date_fc,0)+nvl(ppr.ppl_act_cost_to_date_fc,0)
4056             +nvl(ppr.eqpmt_act_cost_to_date_fc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)
4057             +nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0))
4058                   into l_prev_period_actual_cost
4059                   from pa_progress_rollup ppr
4060                  where ppr.project_id = p_project_id
4061                    and ppr.object_id = p_object_id
4062                    and ppr.structure_type = 'WORKPLAN'
4063                    and ppr.structure_version_id IS NULL
4064        and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4065                    and ppr.as_of_date = ( select max(ppr1.as_of_date)
4066                                  from pa_progress_rollup ppr1
4067                                 where ppr1.project_id = ppr.project_id
4068                                   and ppr1.object_id = ppr.object_id
4069                                   and ppr1.structure_type = 'WORKPLAN'
4070                                   and ppr1.structure_version_id IS NULL   --bug 3802177
4071             and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
4072                                   and as_of_date < ( select min(as_of_date)
4073                                                    from pa_progress_rollup ppr2
4074                                                    where ppr2.project_id = ppr1.project_id
4075                                                      and ppr2.object_id = ppr1.object_id
4076                                                      and structure_type = 'WORKPLAN'
4077                                   and ppr2.structure_version_id IS NULL   --bug 3802177
4078                                                      and ppr2.prog_gl_period_name = p_period_name
4079             and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
4080                                                 ));
4081            exception when no_data_found then
4082                 l_prev_period_actual_cost := 0;
4083            end;
4084     elsif (pgn_flag = 'N') then
4085                 select (nvl(ppr.oth_act_cost_to_date_fc,0)+nvl(ppr.ppl_act_cost_to_date_fc,0)
4086             +nvl(ppr.eqpmt_act_cost_to_date_fc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)
4087             +nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0))
4088                 into l_actual_cost
4089                 from pa_progress_rollup ppr
4090                 where ppr.project_id = p_project_id
4091                 and ppr.object_id = p_object_id
4092                 and ppr.object_version_id = p_object_version_id
4093             and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4094                                   and ppr.structure_version_id IS NULL   --bug 3802177
4095                 and ppr.as_of_date = p_as_of_date
4096     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
4097     end if; -- pgn flag.
4098 
4099     ELSIF p_structure_version_id IS NOT NULL
4100     THEN
4101                 select (nvl(ppr.oth_act_cost_to_date_fc,0)+nvl(ppr.ppl_act_cost_to_date_fc,0)
4102                         +nvl(ppr.eqpmt_act_cost_to_date_fc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)
4103                         +nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0))
4104                 into l_actual_cost
4105                 from pa_progress_rollup ppr
4106                 where ppr.project_id = p_project_id
4107                 and ppr.object_id = p_object_id
4108                 and ppr.object_version_id = p_object_version_id
4109                 and structure_type = 'WORKPLAN'
4110                 and ppr.structure_version_id = p_structure_version_id
4111     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
4112     END IF;
4113 
4114    end if; -- currency_flag.
4115 
4116     return(NVL(l_actual_cost,0) - nvl(l_prev_period_actual_cost,0));
4117 
4118 END get_incremental_actual_cost;
4119 
4120 FUNCTION get_incremental_actual_rawcost(p_as_of_date           IN              DATE
4121                                     ,p_period_name          IN              VARCHAR2
4122                                     ,pgn_flag               IN              VARCHAR2
4123                                     ,p_project_id           IN              NUMBER
4124                                     ,p_object_id            IN              NUMBER
4125                                     ,p_object_version_id    IN              NUMBER
4126                                     ,currency_flag          IN              VARCHAR2 := 'T'
4127                                     ,p_structure_version_id IN              NUMBER := null  --3694031
4128                 ,p_proj_element_id      IN  NUMBER := null /* Modified for IB4 Progress CR. */
4129                         ) return NUMBER
4130 IS
4131     l_actual_rawcost    NUMBER := NULL;
4132     l_prev_period_actual_rawcost NUMBER;
4133 BEGIN
4134 
4135   if (currency_flag = 'P') then
4136 
4137      IF p_structure_version_id IS NULL
4138      THEN
4139 
4140     if (pgn_flag = 'P') then
4141 
4142           begin
4143             select (nvl(ppr.oth_act_rawcost_to_date_pc,0)+nvl(ppr.ppl_act_rawcost_to_date_pc,0)
4144             +nvl(ppr.eqpmt_act_rawcost_to_date_pc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_PC,0)
4145             +nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0))
4146             into l_actual_rawcost
4147                 from pa_progress_rollup ppr
4148                 where ppr.project_id = p_project_id
4149                 and ppr.object_id = p_object_id
4150                 and prog_pa_period_name = p_period_name
4151                 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4152                                   and ppr.structure_version_id IS NULL   --bug 3802177
4153     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4154                 and ppr.as_of_date = (select max(as_of_date)
4155                                      from pa_progress_rollup ppr2
4156                                      where ppr2.project_id = ppr.project_id
4157                                      and ppr2.object_id = ppr.object_id
4158                                      and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4159                                   and ppr2.structure_version_id IS NULL   --bug 3802177
4160                                      and ppr2.prog_pa_period_name = ppr.prog_pa_period_name
4161             and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
4162 
4163            exception when no_data_found then
4164                 l_actual_rawcost := 0;
4165            end;
4166 
4167            begin
4168             select (nvl(ppr.oth_act_rawcost_to_date_pc,0)+nvl(ppr.ppl_act_rawcost_to_date_pc,0)
4169             +nvl(ppr.eqpmt_act_rawcost_to_date_pc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_PC,0)
4170             +nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0))
4171                   into l_prev_period_actual_rawcost
4172                   from pa_progress_rollup ppr
4173                  where ppr.project_id = p_project_id
4174                    and ppr.object_id = p_object_id
4175                    and ppr.structure_type = 'WORKPLAN'
4176                    and ppr.structure_version_id IS NULL
4177        and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4178                    and ppr.as_of_date = ( select max(ppr1.as_of_date)
4179                                  from pa_progress_rollup ppr1
4180                                 where ppr1.project_id = ppr.project_id
4181                                   and ppr1.object_id = ppr.object_id
4182                                   and ppr1.structure_type = 'WORKPLAN'
4183                                   and ppr1.structure_version_id IS NULL   --bug 3802177
4184             and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
4185                                   and as_of_date < ( select min(as_of_date)
4186                                                    from pa_progress_rollup ppr2
4187                                                    where ppr2.project_id = ppr1.project_id
4188                                                      and ppr2.object_id = ppr1.object_id
4189                                                      and structure_type = 'WORKPLAN'
4190                                   and ppr2.structure_version_id IS NULL   --bug 3802177
4191                                                      and ppr2.prog_pa_period_name = p_period_name
4192             and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
4193                                                 ));
4194            exception when no_data_found then
4195                 l_prev_period_actual_rawcost := 0;
4196            end;
4197     elsif (pgn_flag ='G') then
4198           begin
4199             select (nvl(ppr.oth_act_rawcost_to_date_pc,0)+nvl(ppr.ppl_act_rawcost_to_date_pc,0)
4200             +nvl(ppr.eqpmt_act_rawcost_to_date_pc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_PC,0)
4201             +nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0))
4202             into l_actual_rawcost
4203                 from pa_progress_rollup ppr
4204                 where ppr.project_id = p_project_id
4205                 and ppr.object_id = p_object_id
4206                 and prog_gl_period_name = p_period_name
4207                 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4208                                   and ppr.structure_version_id IS NULL   --bug 3802177
4209     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4210                 and ppr.as_of_date = (select max(as_of_date)
4211                                      from pa_progress_rollup ppr2
4212                                      where ppr2.project_id = ppr.project_id
4213                                      and ppr2.object_id = ppr.object_id
4214                                      and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4215                                   and ppr2.structure_version_id IS NULL   --bug 3802177
4216                                      and ppr2.prog_gl_period_name = ppr.prog_gl_period_name
4217             and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
4218 
4219            exception when no_data_found then
4220                 l_actual_rawcost := 0;
4221            end;
4222 
4223            begin
4224             select (nvl(ppr.oth_act_rawcost_to_date_pc,0)+nvl(ppr.ppl_act_rawcost_to_date_pc,0)
4225             +nvl(ppr.eqpmt_act_rawcost_to_date_pc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_PC,0)
4226             +nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0))
4227                   into l_prev_period_actual_rawcost
4228                   from pa_progress_rollup ppr
4229                  where ppr.project_id = p_project_id
4230                    and ppr.object_id = p_object_id
4231                    and ppr.structure_type = 'WORKPLAN'
4232                    and ppr.structure_version_id IS NULL
4233        and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4234                    and ppr.as_of_date = ( select max(ppr1.as_of_date)
4235                                  from pa_progress_rollup ppr1
4236                                 where ppr1.project_id = ppr.project_id
4237                                   and ppr1.object_id = ppr.object_id
4238                                   and ppr1.structure_type = 'WORKPLAN'
4239                                   and ppr1.structure_version_id IS NULL   --bug 3802177
4240             and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
4241                                   and as_of_date < ( select min(as_of_date)
4242                                                    from pa_progress_rollup ppr2
4243                                                    where ppr2.project_id = ppr1.project_id
4244                                                      and ppr2.object_id = ppr1.object_id
4245                                                      and structure_type = 'WORKPLAN'
4246                                   and ppr2.structure_version_id IS NULL   --bug 3802177
4247                                                      and ppr2.prog_gl_period_name = p_period_name
4248             and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
4249                                                 ));
4250            exception when no_data_found then
4251                 l_prev_period_actual_rawcost := 0;
4252            end;
4253     elsif (pgn_flag = 'N') then
4254                 select (nvl(ppr.oth_act_rawcost_to_date_pc,0)+nvl(ppr.ppl_act_rawcost_to_date_pc,0)
4255             +nvl(ppr.eqpmt_act_rawcost_to_date_pc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_PC,0)
4256             +nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0))
4257                 into l_actual_rawcost
4258                 from pa_progress_rollup ppr
4259                 where ppr.project_id = p_project_id
4260                 and ppr.object_id = p_object_id
4261                 --and ppr.object_version_id = p_object_version_id
4262             and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4263                                   and ppr.structure_version_id IS NULL   --bug 3802177
4264                 and ppr.as_of_date = p_as_of_date
4265     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
4266     end if; -- pgn flag.
4267      ELSIF p_structure_version_id IS NOT NULL
4268      THEN
4269                 select (nvl(ppr.oth_act_rawcost_to_date_pc,0)+nvl(ppr.ppl_act_rawcost_to_date_pc,0)
4270                         +nvl(ppr.eqpmt_act_rawcost_to_date_pc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_PC,0)
4271                         +nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0))
4272                 into l_actual_rawcost
4273                 from pa_progress_rollup ppr
4274                 where ppr.project_id = p_project_id
4275                 and ppr.object_id = p_object_id
4276                 and ppr.object_version_id = p_object_version_id
4277                 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4278                 and ppr.structure_version_id = p_structure_version_id
4279     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
4280      END IF;
4281 
4282    elsif (currency_flag) = 'T' then
4283 
4284      IF p_structure_version_id IS NULL
4285      THEN
4286     if (pgn_flag = 'P') then
4287           begin
4288             select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
4289             +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_TC,0)
4290             +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0))
4291             into l_actual_rawcost
4292                 from pa_progress_rollup ppr
4293                 where ppr.project_id = p_project_id
4294                 and ppr.object_id = p_object_id
4295                 and prog_pa_period_name = p_period_name
4296                 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4297                                   and ppr.structure_version_id IS NULL   --bug 3802177
4298     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4299                 and ppr.as_of_date = (select max(as_of_date)
4300                                      from pa_progress_rollup ppr2
4301                                      where ppr2.project_id = ppr.project_id
4302                                      and ppr2.object_id = ppr.object_id
4303                                      and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4304                                   and ppr2.structure_version_id IS NULL   --bug 3802177
4305                                      and ppr2.prog_pa_period_name = ppr.prog_pa_period_name
4306             and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
4307 
4308            exception when no_data_found then
4309                 l_actual_rawcost := 0;
4310            end;
4311 
4312            begin
4313             select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
4314             +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_TC,0)
4315             +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0))
4316                   into l_prev_period_actual_rawcost
4317                   from pa_progress_rollup ppr
4318                  where ppr.project_id = p_project_id
4319                    and ppr.object_id = p_object_id
4320                    and ppr.structure_type = 'WORKPLAN'
4321                    and ppr.structure_version_id IS NULL
4322        and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4323                    and ppr.as_of_date = ( select max(ppr1.as_of_date)
4324                                  from pa_progress_rollup ppr1
4325                                 where ppr1.project_id = ppr.project_id
4326                                   and ppr1.object_id = ppr.object_id
4327                                   and ppr1.structure_type = 'WORKPLAN'
4328                                   and ppr1.structure_version_id IS NULL   --bug 3802177
4329             and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
4330                                   and as_of_date < ( select min(as_of_date)
4331                                                    from pa_progress_rollup ppr2
4332                                                    where ppr2.project_id = ppr1.project_id
4333                                                      and ppr2.object_id = ppr1.object_id
4334                                                      and structure_type = 'WORKPLAN'
4335                                   and ppr2.structure_version_id IS NULL   --bug 3802177
4336                                                      and ppr2.prog_pa_period_name = p_period_name
4337             and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
4338                                                 ));
4339            exception when no_data_found then
4340                 l_prev_period_actual_rawcost := 0;
4341            end;
4342     elsif (pgn_flag ='G') then
4343 
4344           begin
4345             select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
4346             +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_TC,0)
4347             +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0))
4348             into l_actual_rawcost
4349                 from pa_progress_rollup ppr
4350                 where ppr.project_id = p_project_id
4351                 and ppr.object_id = p_object_id
4352                 and prog_gl_period_name = p_period_name
4353                 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4354                                   and ppr.structure_version_id IS NULL   --bug 3802177
4355     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4356                 and ppr.as_of_date = (select max(as_of_date)
4357                                      from pa_progress_rollup ppr2
4358                                      where ppr2.project_id = ppr.project_id
4359                                      and ppr2.object_id = ppr.object_id
4360                                      and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4361                                   and ppr2.structure_version_id IS NULL   --bug 3802177
4362                                      and ppr2.prog_gl_period_name = ppr.prog_gl_period_name
4363             and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
4364 
4365            exception when no_data_found then
4366                 l_actual_rawcost := 0;
4367            end;
4368 
4369            begin
4370             select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
4371             +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_TC,0)
4372             +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0))
4373                   into l_prev_period_actual_rawcost
4374                   from pa_progress_rollup ppr
4375                  where ppr.project_id = p_project_id
4376                    and ppr.object_id = p_object_id
4377                    and ppr.structure_type = 'WORKPLAN'
4378                    and ppr.structure_version_id IS NULL
4379        and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4380                    and ppr.as_of_date = ( select max(ppr1.as_of_date)
4381                                  from pa_progress_rollup ppr1
4382                                 where ppr1.project_id = ppr.project_id
4383                                   and ppr1.object_id = ppr.object_id
4384                                   and ppr1.structure_type = 'WORKPLAN'
4385                                   and ppr1.structure_version_id IS NULL   --bug 3802177
4386             and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
4387                                   and as_of_date < ( select min(as_of_date)
4388                                                    from pa_progress_rollup ppr2
4389                                                    where ppr2.project_id = ppr1.project_id
4390                                                      and ppr2.object_id = ppr1.object_id
4391                                                      and structure_type = 'WORKPLAN'
4392                                   and ppr2.structure_version_id IS NULL   --bug 3802177
4393                                                      and ppr2.prog_gl_period_name = p_period_name
4394             and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
4395                                                 ));
4396            exception when no_data_found then
4397                 l_prev_period_actual_rawcost := 0;
4398            end;
4399     elsif (pgn_flag = 'N') then
4400                 select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
4401             +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_TC,0)
4402             +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0))
4403                 into l_actual_rawcost
4404                 from pa_progress_rollup ppr
4405                 where ppr.project_id = p_project_id
4406                 and ppr.object_id = p_object_id
4407                 and ppr.object_version_id = p_object_version_id
4408             and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4409                                   and ppr.structure_version_id IS NULL   --bug 3802177
4410                 and ppr.as_of_date = p_as_of_date
4411     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
4412     end if; -- pgn flag.
4413       ELSIF p_structure_version_id IS NOT NULL
4414       THEN
4415                 select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
4416                         +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_TC,0)
4417                         +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0))
4418                 into l_actual_rawcost
4419                 from pa_progress_rollup ppr
4420                 where ppr.project_id = p_project_id
4421                 and ppr.object_id = p_object_id
4422                 and ppr.object_version_id = p_object_version_id
4423                 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4424                 and ppr.structure_version_id = p_structure_version_id
4425     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
4426       END IF;
4427 
4428    elsif (currency_flag = 'F') then
4429 
4430       IF p_structure_version_id IS NULL
4431       THEN
4432     if (pgn_flag = 'P') then
4433           begin
4434             select (nvl(ppr.oth_act_rawcost_to_date_fc,0)+nvl(ppr.ppl_act_rawcost_to_date_fc,0)
4435             +nvl(ppr.eqpmt_act_rawcost_to_date_fc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_FC,0)
4436             +nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0))
4437             into l_actual_rawcost
4438                 from pa_progress_rollup ppr
4439                 where ppr.project_id = p_project_id
4440                 and ppr.object_id = p_object_id
4441                 and prog_pa_period_name = p_period_name
4442                 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4443                                   and ppr.structure_version_id IS NULL   --bug 3802177
4444     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4445                 and ppr.as_of_date = (select max(as_of_date)
4446                                      from pa_progress_rollup ppr2
4447                                      where ppr2.project_id = ppr.project_id
4448                                      and ppr2.object_id = ppr.object_id
4449                                      and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4450                                   and ppr2.structure_version_id IS NULL   --bug 3802177
4451                                      and ppr2.prog_pa_period_name = ppr.prog_pa_period_name
4452             and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
4453 
4454            exception when no_data_found then
4455                 l_actual_rawcost := 0;
4456            end;
4457 
4458            begin
4459             select (nvl(ppr.oth_act_rawcost_to_date_fc,0)+nvl(ppr.ppl_act_rawcost_to_date_fc,0)
4460             +nvl(ppr.eqpmt_act_rawcost_to_date_fc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_FC,0)
4461             +nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0))
4462                   into l_prev_period_actual_rawcost
4463                   from pa_progress_rollup ppr
4464                  where ppr.project_id = p_project_id
4465                    and ppr.object_id = p_object_id
4466                    and ppr.structure_type = 'WORKPLAN'
4467                    and ppr.structure_version_id IS NULL
4468        and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4469                    and ppr.as_of_date = ( select max(ppr1.as_of_date)
4470                                  from pa_progress_rollup ppr1
4471                                 where ppr1.project_id = ppr.project_id
4472                                   and ppr1.object_id = ppr.object_id
4473                                   and ppr1.structure_type = 'WORKPLAN'
4474                                   and ppr1.structure_version_id IS NULL   --bug 3802177
4475                             and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
4476                                   and as_of_date < ( select min(as_of_date)
4477                                                    from pa_progress_rollup ppr2
4478                                                    where ppr2.project_id = ppr1.project_id
4479                                                      and ppr2.object_id = ppr1.object_id
4480                                                      and structure_type = 'WORKPLAN'
4481                                                      and ppr2.structure_version_id IS NULL   --bug 3802177
4482                                                      and ppr2.prog_pa_period_name = p_period_name
4483             and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
4484                                                 ));
4485            exception when no_data_found then
4486                 l_prev_period_actual_rawcost := 0;
4487            end;
4488     elsif (pgn_flag ='G') then
4489           begin
4490             select (nvl(ppr.oth_act_rawcost_to_date_fc,0)+nvl(ppr.ppl_act_rawcost_to_date_fc,0)
4491             +nvl(ppr.eqpmt_act_rawcost_to_date_fc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_FC,0)
4492             +nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0))
4493             into l_actual_rawcost
4494                 from pa_progress_rollup ppr
4495                 where ppr.project_id = p_project_id
4496                 and ppr.object_id = p_object_id
4497                 and prog_gl_period_name = p_period_name
4498                 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4499                 and ppr.structure_version_id IS NULL   --bug 3802177
4500     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4501                 and ppr.as_of_date = (select max(as_of_date)
4502                                      from pa_progress_rollup ppr2
4503                                      where ppr2.project_id = ppr.project_id
4504                                      and ppr2.object_id = ppr.object_id
4505                      and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4506                                      and ppr2.structure_version_id IS NULL   --bug 3802177
4507                                      and ppr2.prog_gl_period_name = ppr.prog_gl_period_name
4508             and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
4509 
4510            exception when no_data_found then
4511                 l_actual_rawcost := 0;
4512            end;
4513 
4514            begin
4515             select (nvl(ppr.oth_act_rawcost_to_date_fc,0)+nvl(ppr.ppl_act_rawcost_to_date_fc,0)
4516             +nvl(ppr.eqpmt_act_rawcost_to_date_fc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_FC,0)
4517             +nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0))
4518                   into l_prev_period_actual_rawcost
4519                   from pa_progress_rollup ppr
4520                  where ppr.project_id = p_project_id
4521                    and ppr.object_id = p_object_id
4522                    and ppr.structure_type = 'WORKPLAN'
4523                    and ppr.structure_version_id IS NULL
4524        and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4525                    and ppr.as_of_date = ( select max(ppr1.as_of_date)
4526                                  from pa_progress_rollup ppr1
4527                                 where ppr1.project_id = ppr.project_id
4528                                   and ppr1.object_id = ppr.object_id
4529                                   and ppr1.structure_type = 'WORKPLAN'
4530                                   and ppr1.structure_version_id IS NULL   --bug 3802177
4531             and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
4532                                   and as_of_date < ( select min(as_of_date)
4533                                                    from pa_progress_rollup ppr2
4534                                                    where ppr2.project_id = ppr1.project_id
4535                                                      and ppr2.object_id = ppr1.object_id
4536                                                      and structure_type = 'WORKPLAN'
4537                                                      and ppr2.structure_version_id IS NULL   --bug 3802177
4538                                                      and ppr2.prog_gl_period_name = p_period_name
4539             and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
4540                                                 ));
4541            exception when no_data_found then
4542                 l_prev_period_actual_rawcost := 0;
4543            end;
4544     elsif (pgn_flag = 'N') then
4545                 select (nvl(ppr.oth_act_rawcost_to_date_fc,0)+nvl(ppr.ppl_act_rawcost_to_date_fc,0)
4546             +nvl(ppr.eqpmt_act_rawcost_to_date_fc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_FC,0)
4547             +nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0))
4548                 into l_actual_rawcost
4549                 from pa_progress_rollup ppr
4550                 where ppr.project_id = p_project_id
4551                 and ppr.object_id = p_object_id
4552                 and ppr.object_version_id = p_object_version_id
4553             and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4554                 and ppr.structure_version_id IS NULL   --bug 3802177
4555                 and ppr.as_of_date = p_as_of_date
4556     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
4557     end if; -- pgn flag.
4558      ELSIF p_structure_version_id IS NOT NULL
4559      THEN
4560                select (nvl(ppr.oth_act_rawcost_to_date_fc,0)+nvl(ppr.ppl_act_rawcost_to_date_fc,0)
4561                         +nvl(ppr.eqpmt_act_rawcost_to_date_fc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_FC,0)
4562                         +nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0))
4563                 into l_actual_rawcost
4564                 from pa_progress_rollup ppr
4565                 where ppr.project_id = p_project_id
4566                 and ppr.object_id = p_object_id
4567                 and ppr.object_version_id = p_object_version_id
4568                 and structure_type = 'WORKPLAN'
4569                 and ppr.structure_version_id = p_structure_version_id
4570     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
4571      END IF;
4572 
4573     end if; -- currency_flag.
4574 
4575     return(NVL(l_actual_rawcost,0) - nvl(l_prev_period_actual_rawcost,0));
4576 
4577 END get_incremental_actual_rawcost;
4578 
4579 FUNCTION get_incremental_actual_effort(p_as_of_date           IN              DATE
4580                                       ,p_period_name          IN              VARCHAR2
4581                                       ,pgn_flag               IN              VARCHAR2
4582                                       ,p_project_id           IN              NUMBER
4583                                       ,p_object_id            IN              NUMBER
4584                                       ,p_object_version_id    IN              NUMBER
4585                                       ,p_structure_version_id IN              NUMBER := null  --3694031
4586                   ,p_proj_element_id      IN   NUMBER := null /* Modified for IB4 Progress CR. */
4587                                       ) return NUMBER
4588 IS
4589     l_actual_effort NUMBER := NULL;
4590     l_prev_period_actual_effort  NUMBER;  --maansari6/15 bug 3694031
4591 BEGIN
4592 
4593     IF p_structure_version_id IS NULL
4594     THEN
4595     if (pgn_flag = 'P') then
4596 --maansari6/15  3694031
4597           begin
4598                 select (nvl(ppr.ppl_act_effort_to_date,0)+nvl(ppr.eqpmt_act_effort_to_date,0)+nvl(ppr.subprj_ppl_act_effort,0)+nvl(ppr.subprj_eqpmt_act_effort,0)+nvl(ppr.oth_quantity_to_date,0))
4599                 into l_actual_effort
4600                 from pa_progress_rollup ppr
4601                 where ppr.project_id = p_project_id
4602                 and ppr.object_id = p_object_id
4603                 and prog_pa_period_name = p_period_name
4604                 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4605                 and ppr.structure_version_id IS NULL   --bug 3802177
4606             and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4607                 and ppr.as_of_date = (select max(as_of_date)
4608                                      from pa_progress_rollup ppr2
4609                                      where ppr2.project_id = ppr.project_id
4610                                      and ppr2.object_id = ppr.object_id
4611                      and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4612                                      and ppr2.structure_version_id IS NULL   --bug 3802177
4613                                      and ppr2.prog_pa_period_name = ppr.prog_pa_period_name
4614                          and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
4615 
4616            exception when no_data_found then
4617                 l_actual_effort := 0;
4618            end;
4619 
4620            begin
4621                 select (nvl(ppr.ppl_act_effort_to_date,0)+nvl(ppr.eqpmt_act_effort_to_date,0)+nvl(ppr.subprj_ppl_act_effort,0)+nvl(ppr.subprj_eqpmt_act_effort,0)+nvl(ppr.oth_quantity_to_date,0))
4622                   into l_prev_period_actual_effort
4623                   from pa_progress_rollup ppr
4624                  where ppr.project_id = p_project_id
4625                    and ppr.object_id = p_object_id
4626                    and ppr.structure_type = 'WORKPLAN'
4627                    and ppr.structure_version_id IS NULL
4628                and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4629                    and ppr.as_of_date = ( select max(ppr1.as_of_date)
4630                                  from pa_progress_rollup ppr1
4631                                 where ppr1.project_id = ppr.project_id
4632                                   and ppr1.object_id = ppr.object_id
4633                                   and ppr1.structure_type = 'WORKPLAN'
4634                                   and ppr1.structure_version_id IS NULL   --bug 3802177
4635                           and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
4636                                   and as_of_date < ( select min(as_of_date)
4637                                                    from pa_progress_rollup ppr2
4638                                                    where ppr2.project_id = ppr1.project_id
4639                                                      and ppr2.object_id = ppr1.object_id
4640                                                      and structure_type = 'WORKPLAN'
4641                                                      and ppr2.structure_version_id IS NULL   --bug 3802177
4642                                                      and ppr2.prog_pa_period_name = p_period_name
4643             and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
4644                                                 ));
4645            exception when no_data_found then
4646                 l_prev_period_actual_effort := 0;
4647            end;
4648     elsif (pgn_flag ='G') then
4649 
4650 --maansari6/15  3694031
4651           begin
4652                 select (nvl(ppr.ppl_act_effort_to_date,0)+nvl(ppr.eqpmt_act_effort_to_date,0)+nvl(ppr.subprj_ppl_act_effort,0)+nvl(ppr.subprj_eqpmt_act_effort,0)+nvl(ppr.oth_quantity_to_date,0))
4653                 into l_actual_effort
4654                 from pa_progress_rollup ppr
4655                 where ppr.project_id = p_project_id
4656                 and ppr.object_id = p_object_id
4657                 and prog_gl_period_name = p_period_name
4658             and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4659                 and ppr.structure_version_id IS NULL   --bug 3802177
4660     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4661                 and ppr.as_of_date = (select max(as_of_date)
4662                                      from pa_progress_rollup ppr2
4663                                      where ppr2.project_id = ppr.project_id
4664                                      and ppr2.object_id = ppr.object_id
4665                                      and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4666                 and ppr2.structure_version_id IS NULL   --bug 3802177
4667                              and ppr2.prog_gl_period_name = ppr.prog_gl_period_name --maansari6/15 bug 3694031
4668             and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
4669 
4670            exception when no_data_found then
4671                 l_actual_effort := 0;
4672            end;
4673 
4674            begin
4675                 select (nvl(ppr.ppl_act_effort_to_date,0)+nvl(ppr.eqpmt_act_effort_to_date,0)+nvl(ppr.subprj_ppl_act_effort,0)+nvl(ppr.subprj_eqpmt_act_effort,0)+nvl(ppr.oth_quantity_to_date,0))
4676                   into l_prev_period_actual_effort
4677                   from pa_progress_rollup ppr
4678                  where ppr.project_id = p_project_id
4679                    and ppr.object_id = p_object_id
4680                    and ppr.structure_type = 'WORKPLAN'
4681                    and ppr.structure_version_id IS NULL
4682                and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4683                    and ppr.as_of_date = ( select max(ppr1.as_of_date)
4684                                  from pa_progress_rollup ppr1
4685                                 where ppr1.project_id = ppr.project_id
4686                                   and ppr1.object_id = ppr.object_id
4687                                   and ppr1.structure_type = 'WORKPLAN'
4688                                   and ppr1.structure_version_id IS NULL   --bug 3802177
4689                             and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
4690                                   and as_of_date < ( select min(as_of_date)
4691                                                    from pa_progress_rollup ppr2
4692                                                    where ppr2.project_id = ppr1.project_id
4693                                                      and ppr2.object_id = ppr1.object_id
4694                                                      and structure_type = 'WORKPLAN'
4695                                                      and ppr2.structure_version_id IS NULL   --bug 3802177
4696                                                      and ppr2.prog_gl_period_name = p_period_name
4697             and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
4698                                                 ));
4699            exception when no_data_found then
4700                 l_prev_period_actual_effort := 0;
4701            end;
4702     --maansari6/15
4703 
4704     elsif (pgn_flag = 'N') then
4705                 select (nvl(ppr.ppl_act_effort_to_date,0)+nvl(ppr.eqpmt_act_effort_to_date,0)+nvl(ppr.subprj_ppl_act_effort,0)+nvl(ppr.subprj_eqpmt_act_effort,0)+nvl(ppr.oth_quantity_to_date,0))
4706                 into l_actual_effort
4707                 from pa_progress_rollup ppr
4708                 where ppr.project_id = p_project_id
4709                 and ppr.object_id = p_object_id
4710                 and ppr.object_version_id = p_object_version_id
4711             and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4712                 and ppr.structure_version_id IS NULL   --bug 3802177
4713                 and ppr.as_of_date = p_as_of_date
4714             and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
4715     end if;
4716 
4717    ELSIF p_structure_version_id IS NOT NULL
4718    THEN
4719                select (nvl(ppr.ppl_act_effort_to_date,0)+nvl(ppr.eqpmt_act_effort_to_date,0)+nvl(ppr.subprj_ppl_act_effort,0)+nvl(ppr.subprj_eqpmt_act_effort,0)+nvl(ppr.oth_quantity_to_date,0))
4720                 into l_actual_effort
4721                 from pa_progress_rollup ppr
4722                 where ppr.project_id = p_project_id
4723                 and ppr.object_id = p_object_id
4724                 and ppr.object_version_id = p_object_version_id
4725              and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4726                 and ppr.structure_version_id = p_structure_version_id
4727     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
4728    END IF;
4729 
4730     return(nvl(l_actual_effort,0) - nvl(l_prev_period_actual_effort,0)); --maansari6/15
4731 END get_incremental_actual_effort;
4732 
4733 -- Bug 3879461 : This function is not used anywhere except AMG view PA_TASK_ASSIGNMENTS_AMG_V
4734 -- there it needs to be replaced with get_act_txn_cost_this_period
4735 -- THIS FUNCTION IS NOW USED IN ASSIGNMENT VIEWS patvw009.sql and patvw021.sql. Please refer bug 3910193
4736 FUNCTION get_act_cost_this_period (
4737                                      p_as_of_date      IN     DATE
4738                                     ,p_project_id        IN     NUMBER
4739                                     ,p_object_id         IN     NUMBER
4740                                     ,p_object_version_id IN     NUMBER
4741                                     ,p_proj_element_id   IN     NUMBER := null /* Modified for IB4 Progress CR. */
4742 										,p_cbs_element_id   NUMBER := null -- Added for CBS phase 2 16200605
4743 ) return NUMBER
4744 IS
4745     l_act_cost_period   NUMBER := NULL;
4746     l_act_cost_date     NUMBER := NULL;
4747     l_act_cost_pub      NUMBER := NULL;
4748 
4749         cursor c_prev_prog_rec is
4750                  select (nvl(ppr.oth_act_cost_to_date_pc,0)+nvl(ppr.ppl_act_cost_to_date_pc,0)
4751                      +nvl(ppr.eqpmt_act_cost_to_date_pc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)
4752                      +nvl(ppr.subprj_ppl_act_cost_pc,0)+nvl(ppr.subprj_eqpmt_act_cost_pc,0)) act_cost_to_date
4753                 from pa_progress_rollup ppr
4754                 where ppr.project_id = p_project_id
4755                 and ppr.object_id = p_object_id
4756                 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
4757                         and ppr.structure_version_id is null -- Bug 3764224
4758                 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
4759                 and current_flag = 'Y'
4760 				AND NVL(cbs_element_id,-1) = NVL(p_cbs_element_id,-1) --Added for CBS phase 2 16200605
4761                 ;
4762 
4763                 cursor c_this_prog_rec is
4764                  select (nvl(ppr.oth_act_cost_to_date_pc,0)+nvl(ppr.ppl_act_cost_to_date_pc,0)
4765                      +nvl(ppr.eqpmt_act_cost_to_date_pc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)
4766                      +nvl(ppr.subprj_ppl_act_cost_pc,0)+nvl(ppr.subprj_eqpmt_act_cost_pc,0)) act_cost_to_date
4767                 from pa_progress_rollup ppr
4768                 where ppr.project_id = p_project_id
4769                 and ppr.object_id = p_object_id
4770                 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
4771                 and ppr.structure_version_id is null -- Bug 3764224
4772                 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
4773                 and ppr.current_flag= 'W'
4774 				AND NVL(cbs_element_id,-1) = NVL(p_cbs_element_id,-1) --Added for CBS phase 2 16200605
4775                 ;
4776 
4777 BEGIN
4778 
4779     open c_prev_prog_rec;
4780     fetch c_prev_prog_rec into l_act_cost_pub;
4781     close c_prev_prog_rec;
4782 
4783     open c_this_prog_rec;
4784     fetch c_this_prog_rec into l_act_cost_date;
4785     close c_this_prog_rec;
4786 
4787     l_act_cost_period := (nvl(l_act_cost_date,0) - nvl(l_act_cost_pub,0));
4788 
4789         if (l_act_cost_period < 0) then
4790                 l_act_cost_period := 0;
4791     end if;
4792 
4793     return(l_act_cost_period);
4794 END get_act_cost_this_period;
4795 
4796 FUNCTION get_act_txn_cost_this_period (p_as_of_date      IN     DATE
4797                                     ,p_project_id        IN     NUMBER
4798                                     ,p_object_id         IN     NUMBER
4799                                     ,p_object_version_id IN     NUMBER
4800         ,p_proj_element_id   IN     NUMBER := null /* Modified for IB4 Progress CR. */
4801 		,p_cbs_element_id   NUMBER := null -- Added for CBS phase 2 16200605
4802 		) return NUMBER
4803 IS
4804     l_act_cost_period   NUMBER := NULL;
4805     l_act_cost_date     NUMBER := NULL;
4806     l_act_cost_pub      NUMBER := NULL;
4807 
4808 /*
4809     cursor c1 is
4810          select (nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)+nvl(ppr.eqpmt_act_cost_to_date_tc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_TC,0)+nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0)) act_cost_to_date
4811                 from pa_progress_rollup ppr
4812                 where ppr.project_id = p_project_id
4813                 and ppr.object_id = p_object_id
4814                 -- and ppr.object_version_id = p_object_version_id
4815          and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4816     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
4817                 and ppr.as_of_date = (select max(ppr2.as_of_date)
4818                                      from pa_progress_rollup ppr2
4819                                      where ppr2.project_id = p_project_id
4820                                      and ppr2.object_id = p_object_id
4821                                      -- and ppr2.object_version_id = p_object_version_id
4822                      and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4823                                      and ppr2.as_of_date > p_as_of_date
4824     and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR. );
4825     l_c1rec     c1%rowtype;
4826 */
4827 
4828 /* BEGIN: Commenting code for Bug # 3808127.
4829     cursor c_prev_prog_rec is
4830          select (nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)+nvl(ppr.eqpmt_act_cost_to_date_tc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_TC,0)+nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0)) act_cost_to_date
4831                 from pa_progress_rollup ppr
4832                 where ppr.project_id = p_project_id
4833                 and ppr.object_id = p_object_id
4834                 -- and ppr.object_version_id = p_object_version_id
4835             and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
4836         and ppr.structure_version_id is null -- Bug 3764224
4837             and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
4838                 and ppr.as_of_date = (select max(ppr2.as_of_date)
4839                                      from pa_progress_rollup ppr2
4840                                      where ppr2.project_id = p_project_id
4841                                      and ppr2.object_id = p_object_id
4842                      and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
4843                      and ppr2.structure_version_id is null -- Bug 3764224
4844                      and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
4845                                      and ppr2.as_of_date < p_as_of_date);
4846 
4847     cursor c_this_prog_rec is
4848         select (nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)+nvl(ppr.eqpmt_act_cost_to_date_tc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_TC,0)+nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0)) act_cost_to_date
4849                 from pa_progress_rollup ppr
4850                 where ppr.project_id = p_project_id
4851                 and ppr.object_id = p_object_id
4852                 -- and ppr.object_version_id = p_object_version_id
4853             and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
4854         and ppr.structure_version_id is null -- Bug 3764224
4855             and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
4856                 and ppr.as_of_date = (select max(ppr2.as_of_date)
4857                                      from pa_progress_rollup ppr2
4858                                      where ppr2.project_id = p_project_id
4859                                      and ppr2.object_id = p_object_id
4860                      and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
4861                      and ppr2.structure_version_id is null -- Bug 3764224
4862                      and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
4863                                      and ppr2.as_of_date >= p_as_of_date);
4864 
4865  END: Commenting code for Bug # 3808127. */
4866 
4867 -- BEGIN: Adding code for Bug # 3808127.
4868 
4869         cursor c_prev_prog_rec is
4870                  select (nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)
4871                      +nvl(ppr.eqpmt_act_cost_to_date_tc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_TC,0)
4872                      +nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0)) act_cost_to_date
4873                 from pa_progress_rollup ppr
4874                 where ppr.project_id = p_project_id
4875                 and ppr.object_id = p_object_id
4876 				AND NVL(ppr.cbs_element_id,-1) = NVL(p_cbs_element_id,-1) --Added for CBS phase 2 16200605
4877                 -- and ppr.object_version_id = p_object_version_id
4878                 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
4879                         and ppr.structure_version_id is null -- Bug 3764224
4880                 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
4881                 and current_flag = 'Y'
4882                 ;
4883 
4884                 cursor c_this_prog_rec is
4885                  select (nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)
4886                      +nvl(ppr.eqpmt_act_cost_to_date_tc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_TC,0)
4887                      +nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0)) act_cost_to_date
4888                 from pa_progress_rollup ppr
4889         -- Bug 3879461 : No need to have percent complete table join now we can directly check current_flag as W
4890 --                    ,pa_percent_completes ppc
4891                 where ppr.project_id = p_project_id
4892                 and ppr.object_id = p_object_id
4893 				AND NVL(ppr.cbs_element_id,-1) = NVL(p_cbs_element_id,-1) --Added for CBS phase 2 16200605
4894                 -- and ppr.object_version_id = p_object_version_id
4895                 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
4896                 and ppr.structure_version_id is null -- Bug 3764224
4897                 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
4898 --                and ppr.object_id = ppc.object_id
4899 --                and ppr.as_of_date = ppc.date_computed
4900 --                and ppr.percent_complete_id = ppc.percent_complete_id
4901 --                and ppr.project_id = ppc.project_id
4902 --                and ppr.proj_element_id=ppc.task_id
4903 --                and ppr.structure_type = ppc.structure_type
4904 --                and ppc.current_flag= 'N'
4905 --                and ppc.published_flag = 'N'
4906                   and ppr.current_flag= 'W'
4907                 ;
4908 
4909 -- END: Adding code for Bug # 3808127.
4910 
4911 BEGIN
4912 -- Bug 3764224 : This function(_this_peiord) are used only in assignment cases. So it is safe to select from rollup table itself
4913 -- no need to go in percent complete table
4914 -- Bug 3764224 : RLM Changes : Commented the below code. This was not calculating the actual this period
4915 /*
4916     open c1;
4917     fetch c1 into l_c1rec;
4918     if c1%found then
4919         select (nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)+nvl(ppr.eqpmt_act_cost_to_date_tc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_TC,0)+nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0))
4920                 into l_act_cost_pub
4921                 from pa_progress_rollup ppr,pa_percent_completes ppc
4922                 where ppr.project_id = ppc.project_id
4923             and ppr.object_id = ppc.object_id
4924             and ppr.object_version_id = ppc.object_version_id
4925             and ppr.as_of_date = ppc.date_computed (+)
4926         and ppr.project_id = p_project_id
4927                 and ppr.object_id = p_object_id
4928                 -- and ppr.object_version_id = p_object_version_id
4929     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
4930             and ppr.percent_complete_id = ppc.percent_complete_id
4931          and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
4932          and ppr.structure_type = ppc.structure_type(+) -- FPM Dev CR 3
4933         and ppr.proj_element_id = ppc.task_id (+) -- Modified for IB4 Progress CR.
4934                 and ppr.as_of_date = (select max(ppc2.date_computed)
4935                                      from pa_percent_completes ppc2
4936                                      where ppc2.project_id = p_project_id
4937                                      and ppc2.object_id = p_object_id
4938                                      -- and ppc2.object_version_id = p_object_version_id
4939                      and ppc2.published_flag = 'Y'
4940                      and ppc2.current_flag = 'Y'
4941                          and ppc2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
4942         and ppc2.task_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
4943                      );
4944                 l_act_cost_period := (nvl(l_c1rec.act_cost_to_date,0) - nvl(l_act_cost_pub,0));
4945 
4946     end if;
4947     close c1;
4948 */
4949 
4950     open c_prev_prog_rec;
4951     fetch c_prev_prog_rec into l_act_cost_pub;
4952     close c_prev_prog_rec;
4953 
4954     open c_this_prog_rec;
4955     fetch c_this_prog_rec into l_act_cost_date;
4956     close c_this_prog_rec;
4957 
4958     l_act_cost_period := (nvl(l_act_cost_date,0) - nvl(l_act_cost_pub,0));
4959 
4960         if (l_act_cost_period < 0) then
4961                 l_act_cost_period := 0;
4962     end if;
4963 
4964     return(l_act_cost_period);
4965 END get_act_txn_cost_this_period;
4966 
4967 -- Bug 3621404 : Raw Cost Changes, Added this procedure
4968 PROCEDURE get_all_amounts_cumulative
4969     (p_project_id       IN     NUMBER
4970     ,p_object_id        IN     NUMBER
4971     ,p_object_type          IN     VARCHAR2
4972         ,p_structure_version_id IN     NUMBER := NULL -- Do not pass if published structure version
4973     ,p_as_of_date           IN     DATE   := NULL -- Must pass if published structure version
4974     ,x_act_bur_cost_tc  OUT    NOCOPY NUMBER --File.Sql.39 bug 4440895
4975     ,x_act_bur_cost_pc  OUT    NOCOPY NUMBER --File.Sql.39 bug 4440895
4976     ,x_act_bur_cost_fc  OUT    NOCOPY NUMBER --File.Sql.39 bug 4440895
4977     ,x_act_raw_cost_tc  OUT    NOCOPY NUMBER --File.Sql.39 bug 4440895
4978     ,x_act_raw_cost_pc  OUT    NOCOPY NUMBER --File.Sql.39 bug 4440895
4979     ,x_act_raw_cost_fc  OUT    NOCOPY NUMBER --File.Sql.39 bug 4440895
4980     ,x_etc_bur_cost_tc  OUT    NOCOPY NUMBER --File.Sql.39 bug 4440895
4981     ,x_etc_bur_cost_pc  OUT    NOCOPY NUMBER --File.Sql.39 bug 4440895
4982     ,x_etc_bur_cost_fc  OUT    NOCOPY NUMBER --File.Sql.39 bug 4440895
4983     ,x_etc_raw_cost_tc  OUT    NOCOPY NUMBER --File.Sql.39 bug 4440895
4984     ,x_etc_raw_cost_pc  OUT    NOCOPY NUMBER --File.Sql.39 bug 4440895
4985     ,x_etc_raw_cost_fc  OUT    NOCOPY NUMBER --File.Sql.39 bug 4440895
4986     ,x_act_effort       OUT    NOCOPY NUMBER --File.Sql.39 bug 4440895
4987     ,x_etc_effort       OUT    NOCOPY NUMBER --File.Sql.39 bug 4440895
4988         ,x_return_status        OUT    NOCOPY VARCHAR2       --File.Sql.39 bug 4440895
4989         ,x_msg_count            OUT    NOCOPY NUMBER         --File.Sql.39 bug 4440895
4990         ,x_msg_data             OUT    NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4991     ,p_proj_element_id  IN     NUMBER   /* Modified for IB4 Progress CR. */
4992     )
4993 IS
4994     -- Bug 3627315 Issue 8 :Ccolumns were wrongly selected. Corrected it.
4995 
4996     CURSOR C_GET_WORKING_AMOUNT IS
4997      SELECT  (nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)+nvl(ppr.eqpmt_act_cost_to_date_tc,0)
4998                      +nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_TC,0)+nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0)) act_bur_cost_tc,
4999          (nvl(ppr.oth_act_cost_to_date_pc,0)+nvl(ppr.ppl_act_cost_to_date_pc,0)+nvl(ppr.eqpmt_act_cost_to_date_pc,0)
5000                      +nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)+nvl(ppr.subprj_ppl_act_cost_pc,0)+nvl(ppr.subprj_eqpmt_act_cost_pc,0)) act_bur_cost_pc,
5001          (nvl(ppr.oth_act_cost_to_date_fc,0)+nvl(ppr.ppl_act_cost_to_date_fc,0)+nvl(ppr.eqpmt_act_cost_to_date_fc,0)
5002                      +nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)+nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0)) act_bur_cost_fc,
5003          (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)+nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)
5004                      +nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_TC,0)+nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0)) act_raw_cost_tc,
5005          (nvl(ppr.oth_act_rawcost_to_date_pc,0)+nvl(ppr.ppl_act_rawcost_to_date_pc,0)+nvl(ppr.eqpmt_act_rawcost_to_date_pc,0)
5006                      +nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_PC,0)+nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0)) act_raw_cost_pc,
5007          (nvl(ppr.oth_act_rawcost_to_date_fc,0)+nvl(ppr.ppl_act_rawcost_to_date_fc,0)+nvl(ppr.eqpmt_act_rawcost_to_date_fc,0)
5008                      +nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_FC,0)+nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0)) act_raw_cost_fc,
5009          (nvl(ppr.oth_etc_cost_tc,0)+nvl(ppr.ppl_etc_cost_tc,0)+nvl(ppr.eqpmt_etc_cost_tc,0)
5010                      +nvl(ppr.subprj_oth_etc_cost_tc,0)+nvl(ppr.subprj_ppl_etc_cost_tc,0)+nvl(ppr.subprj_eqpmt_etc_cost_tc,0)) etc_bur_cost_tc,
5011          (nvl(ppr.oth_etc_cost_pc,0)+nvl(ppr.ppl_etc_cost_pc,0)+nvl(ppr.eqpmt_etc_cost_pc,0)
5012                      +nvl(ppr.subprj_oth_etc_cost_pc,0)+nvl(ppr.subprj_ppl_etc_cost_pc,0)+nvl(ppr.subprj_eqpmt_etc_cost_pc,0)) etc_bur_cost_pc,
5013          (nvl(ppr.oth_etc_cost_fc,0)+nvl(ppr.ppl_etc_cost_fc,0)+nvl(ppr.eqpmt_etc_cost_fc,0)
5014                      +nvl(ppr.subprj_oth_etc_cost_fc,0)+nvl(ppr.subprj_ppl_etc_cost_fc,0)+nvl(ppr.subprj_eqpmt_etc_cost_fc,0)) etc_bur_cost_fc,
5015          (nvl(ppr.oth_etc_rawcost_tc,0)+nvl(ppr.ppl_etc_rawcost_tc,0)+nvl(ppr.eqpmt_etc_rawcost_tc,0)
5016                      +nvl(ppr.subprj_oth_etc_rawcost_tc,0)+nvl(ppr.subprj_ppl_etc_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_etc_rawcost_tc,0)) etc_raw_cost_tc,
5017          (nvl(ppr.oth_etc_rawcost_pc,0)+nvl(ppr.ppl_etc_rawcost_pc,0)+nvl(ppr.eqpmt_etc_rawcost_pc,0)
5018                      +nvl(ppr.subprj_oth_etc_rawcost_pc,0)+nvl(ppr.subprj_ppl_etc_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_etc_rawcost_pc,0)) etc_raw_cost_pc,
5019          (nvl(ppr.oth_etc_rawcost_fc,0)+nvl(ppr.ppl_etc_rawcost_fc,0)+nvl(ppr.eqpmt_etc_rawcost_fc,0)
5020                      +nvl(ppr.subprj_oth_etc_rawcost_fc,0)+nvl(ppr.subprj_ppl_etc_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_etc_rawcost_fc,0)) etc_raw_cost_fc,
5021          (nvl(ppr.ppl_act_effort_to_date,0)+nvl(ppr.eqpmt_act_effort_to_date,0))--+nvl(ppr.oth_quantity_to_date,0))Oth quantity is not required as it can be in diffrent UOM
5022                      +nvl(ppr.subprj_ppl_act_effort,0)+nvl(ppr.subprj_eqpmt_act_effort,0) act_effort,
5023          (nvl(ppr.estimated_remaining_effort,0)+nvl(ppr.eqpmt_etc_effort,0))--+nvl(ppr.oth_etc_quantity,0))Oth quantity is not required as it can be in diffrent UOM
5024                      +nvl(ppr.subprj_ppl_etc_effort,0)+nvl(ppr.subprj_eqpmt_etc_effort,0) etc_effort
5025                 FROM pa_progress_rollup ppr
5026                 WHERE ppr.project_id = p_project_id
5027                 AND ppr.object_id = p_object_id
5028         AND ppr.object_type = p_object_type
5029                 AND ppr.structure_version_id = p_structure_version_id
5030             AND ppr.structure_type = 'WORKPLAN'
5031     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
5032 
5033     CURSOR C_GET_PUBLISHED_AMOUNT IS
5034      SELECT  (nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)+nvl(ppr.eqpmt_act_cost_to_date_tc,0)
5035                      +nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_TC,0)+nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0)) act_bur_cost_tc,
5036          (nvl(ppr.oth_act_cost_to_date_pc,0)+nvl(ppr.ppl_act_cost_to_date_pc,0)+nvl(ppr.eqpmt_act_cost_to_date_pc,0)
5037                      +nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)+nvl(ppr.subprj_ppl_act_cost_pc,0)+nvl(ppr.subprj_eqpmt_act_cost_pc,0)) act_bur_cost_pc,
5038          (nvl(ppr.oth_act_cost_to_date_fc,0)+nvl(ppr.ppl_act_cost_to_date_fc,0)+nvl(ppr.eqpmt_act_cost_to_date_fc,0)
5039                      +nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)+nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0)) act_bur_cost_fc,
5040          (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)+nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)
5041                      +nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_TC,0)+nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0)) act_raw_cost_tc,
5042          (nvl(ppr.oth_act_rawcost_to_date_pc,0)+nvl(ppr.ppl_act_rawcost_to_date_pc,0)+nvl(ppr.eqpmt_act_rawcost_to_date_pc,0)
5043                      +nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_PC,0)+nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0)) act_raw_cost_pc,
5044          (nvl(ppr.oth_act_rawcost_to_date_fc,0)+nvl(ppr.ppl_act_rawcost_to_date_fc,0)+nvl(ppr.eqpmt_act_rawcost_to_date_fc,0)
5045                      +nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_FC,0)+nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0)) act_raw_cost_fc,
5046          (nvl(ppr.oth_etc_cost_tc,0)+nvl(ppr.ppl_etc_cost_tc,0)+nvl(ppr.eqpmt_etc_cost_tc,0)
5047                      +nvl(ppr.subprj_oth_etc_cost_tc,0)+nvl(ppr.subprj_ppl_etc_cost_tc,0)+nvl(ppr.subprj_eqpmt_etc_cost_tc,0)) etc_bur_cost_tc,
5048          (nvl(ppr.oth_etc_cost_pc,0)+nvl(ppr.ppl_etc_cost_pc,0)+nvl(ppr.eqpmt_etc_cost_pc,0)
5049                      +nvl(ppr.subprj_oth_etc_cost_pc,0)+nvl(ppr.subprj_ppl_etc_cost_pc,0)+nvl(ppr.subprj_eqpmt_etc_cost_pc,0)) etc_bur_cost_pc,
5050          (nvl(ppr.oth_etc_cost_fc,0)+nvl(ppr.ppl_etc_cost_fc,0)+nvl(ppr.eqpmt_etc_cost_fc,0)
5051                      +nvl(ppr.subprj_oth_etc_cost_fc,0)+nvl(ppr.subprj_ppl_etc_cost_fc,0)+nvl(ppr.subprj_eqpmt_etc_cost_fc,0)) etc_bur_cost_fc,
5052          (nvl(ppr.oth_etc_rawcost_tc,0)+nvl(ppr.ppl_etc_rawcost_tc,0)+nvl(ppr.eqpmt_etc_rawcost_tc,0)
5053                      +nvl(ppr.subprj_oth_etc_rawcost_tc,0)+nvl(ppr.subprj_ppl_etc_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_etc_rawcost_tc,0)) etc_raw_cost_tc,
5054          (nvl(ppr.oth_etc_rawcost_pc,0)+nvl(ppr.ppl_etc_rawcost_pc,0)+nvl(ppr.eqpmt_etc_rawcost_pc,0)
5055                      +nvl(ppr.subprj_oth_etc_rawcost_pc,0)+nvl(ppr.subprj_ppl_etc_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_etc_rawcost_pc,0)) etc_raw_cost_pc,
5056          (nvl(ppr.oth_etc_rawcost_fc,0)+nvl(ppr.ppl_etc_rawcost_fc,0)+nvl(ppr.eqpmt_etc_rawcost_fc,0)
5057                      +nvl(ppr.subprj_oth_etc_rawcost_fc,0)+nvl(ppr.subprj_ppl_etc_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_etc_rawcost_fc,0)) etc_raw_cost_fc,
5058          (nvl(ppr.ppl_act_effort_to_date,0)+nvl(ppr.eqpmt_act_effort_to_date,0))--+nvl(ppr.oth_quantity_to_date,0))Oth quantity is not required as it can be in diffrent UOM
5059                      +nvl(ppr.subprj_ppl_act_effort,0)+nvl(ppr.subprj_eqpmt_act_effort,0) act_effort,
5060          (nvl(ppr.estimated_remaining_effort,0)+nvl(ppr.eqpmt_etc_effort,0))--+nvl(ppr.oth_etc_quantity,0))Oth quantity is not required as it can be in diffrent UOM
5061                      +nvl(ppr.subprj_ppl_etc_effort,0)+nvl(ppr.subprj_eqpmt_etc_effort,0) etc_effort
5062                 FROM pa_progress_rollup ppr
5063                 WHERE ppr.project_id = p_project_id
5064                 AND ppr.object_id = p_object_id
5065         AND ppr.object_type = p_object_type
5066                 AND ppr.structure_version_id is null
5067             AND ppr.structure_type = 'WORKPLAN'
5068             and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
5069             AND ppr.current_flag <> 'W'   -- Bug 3879461
5070         AND trunc(as_of_date) = (
5071                 SELECT trunc(max(as_of_date))
5072                 FROM pa_progress_rollup ppr2
5073                         WHERE ppr2.project_id = p_project_id
5074                 AND ppr2.object_id = p_object_id
5075                 AND ppr2.object_type = p_object_type
5076                 AND ppr2.structure_version_id is null
5077                 AND ppr2.structure_type = 'WORKPLAN'
5078                 AND as_of_date <= p_as_of_date
5079                     AND ppr2.current_flag <> 'W'   -- Bug 3879461
5080                             and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
5081             );
5082 
5083 BEGIN
5084     x_return_status := 'S';
5085 
5086     IF p_structure_version_id IS NOT NULL THEN
5087         OPEN C_GET_WORKING_AMOUNT;
5088         FETCH C_GET_WORKING_AMOUNT INTO x_act_bur_cost_tc, x_act_bur_cost_pc,
5089                         x_act_bur_cost_fc, x_act_raw_cost_tc,
5090                         x_act_raw_cost_pc, x_act_raw_cost_fc,
5091                         x_etc_bur_cost_tc, x_etc_bur_cost_pc,
5092                         x_etc_bur_cost_fc, x_etc_raw_cost_tc,
5093                         x_etc_raw_cost_pc, x_etc_raw_cost_fc,
5094                         x_act_effort, x_etc_effort;
5095 
5096         IF C_GET_WORKING_AMOUNT%NOTFOUND THEN
5097             x_act_bur_cost_tc := 0;
5098             x_act_bur_cost_pc := 0;
5099             x_act_bur_cost_fc := 0;
5100             x_act_raw_cost_tc := 0;
5101             x_act_raw_cost_pc := 0;
5102             x_act_raw_cost_fc := 0;
5103             x_etc_bur_cost_tc := 0;
5104             x_etc_bur_cost_pc := 0;
5105             x_etc_bur_cost_fc := 0;
5106             x_etc_raw_cost_tc := 0;
5107             x_etc_raw_cost_pc := 0;
5108             x_etc_raw_cost_fc := 0;
5109             x_act_effort := 0;
5110             x_etc_effort := 0;
5111         END IF;
5112         CLOSE C_GET_WORKING_AMOUNT;
5113     ELSE
5114         OPEN C_GET_PUBLISHED_AMOUNT;
5115         FETCH C_GET_PUBLISHED_AMOUNT INTO x_act_bur_cost_tc, x_act_bur_cost_pc,
5116                         x_act_bur_cost_fc, x_act_raw_cost_tc,
5117                         x_act_raw_cost_pc, x_act_raw_cost_fc,
5118                         x_etc_bur_cost_tc, x_etc_bur_cost_pc,
5119                         x_etc_bur_cost_fc, x_etc_raw_cost_tc,
5120                         x_etc_raw_cost_pc, x_etc_raw_cost_fc,
5121                         x_act_effort, x_etc_effort;
5122 
5123         IF C_GET_PUBLISHED_AMOUNT%NOTFOUND THEN
5124             x_act_bur_cost_tc := 0;
5125             x_act_bur_cost_pc := 0;
5126             x_act_bur_cost_fc := 0;
5127             x_act_raw_cost_tc := 0;
5128             x_act_raw_cost_pc := 0;
5129             x_act_raw_cost_fc := 0;
5130             x_etc_bur_cost_tc := 0;
5131             x_etc_bur_cost_pc := 0;
5132             x_etc_bur_cost_fc := 0;
5133             x_etc_raw_cost_tc := 0;
5134             x_etc_raw_cost_pc := 0;
5135             x_etc_raw_cost_fc := 0;
5136             x_act_effort := 0;
5137             x_etc_effort := 0;
5138         END IF;
5139         CLOSE C_GET_PUBLISHED_AMOUNT;
5140     END IF;
5141 EXCEPTION
5142     WHEN OTHERS THEN
5143      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
5144      x_msg_count     := 1;
5145      x_msg_data      := SUBSTRB(SQLERRM,1,120);
5146 
5147      fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROGRESS_UTILS',
5148                               p_procedure_name => 'GET_ALL_AMOUNTS_CUMULATIVE',
5149                               p_error_text     => SUBSTRB(SQLERRM,1,120));
5150 
5151      -- 4537865
5152      x_act_bur_cost_tc := 0;
5153      x_act_bur_cost_pc := 0;
5154      x_act_bur_cost_fc := 0;
5155      x_act_raw_cost_tc := 0;
5156      x_act_raw_cost_pc := 0;
5157      x_act_raw_cost_fc := 0;
5158      x_etc_bur_cost_tc := 0;
5159      x_etc_bur_cost_pc := 0;
5160      x_etc_bur_cost_fc := 0;
5161      x_etc_raw_cost_tc := 0;
5162      x_etc_raw_cost_pc := 0;
5163      x_etc_raw_cost_fc := 0;
5164      x_act_effort := 0;
5165      x_etc_effort := 0;
5166      -- 4537865
5167 
5168      raise;
5169 END get_all_amounts_cumulative;
5170 
5171 -- Bug 3879461 : This function is not used.
5172 FUNCTION get_act_pfn_cost_this_period (p_as_of_date      IN     DATE
5173                                     ,p_project_id        IN     NUMBER
5174                                     ,p_object_id         IN     NUMBER
5175                                     ,p_object_version_id IN     NUMBER
5176                           ,p_proj_element_id   IN     NUMBER := null /* Modified for IB4 Progress CR. */) return NUMBER
5177 IS
5178     l_act_cost_period   NUMBER := NULL;
5179     l_act_cost_date     NUMBER := NULL;
5180     l_act_cost_pub      NUMBER := NULL;
5181 
5182 /*
5183         cursor c1 is
5184          select (nvl(ppr.oth_act_cost_to_date_fc,0)+nvl(ppr.ppl_act_cost_to_date_fc,0)+nvl(ppr.eqpmt_act_cost_to_date_fc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)+nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0)) act_cost_to_date
5185                 from pa_progress_rollup ppr
5186                 where ppr.project_id = p_project_id
5187                 and ppr.object_id = p_object_id
5188                 -- and ppr.object_version_id = p_object_version_id
5189          and structure_type = 'WORKPLAN' -- FPM Dev CR 3
5190     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id)  --Modified for IB4 Progress CR.
5191                 and ppr.as_of_date = (select max(ppr2.as_of_date)
5192                                      from pa_progress_rollup ppr2
5193                                      where ppr2.project_id = p_project_id
5194                                      and ppr2.object_id = p_object_id
5195                                      -- and ppr2.object_version_id = p_object_version_id
5196                      and structure_type = 'WORKPLAN' -- FPM Dev CR 3
5197                                      and ppr2.as_of_date > p_as_of_date
5198         and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR. );
5199     l_c1rec     c1%rowtype;
5200 */
5201 
5202     cursor c_prev_prog_rec is
5203          select (nvl(ppr.oth_act_cost_to_date_fc,0)+nvl(ppr.ppl_act_cost_to_date_fc,0)+nvl(ppr.eqpmt_act_cost_to_date_fc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)+nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0)) act_cost_to_date
5204                 from pa_progress_rollup ppr
5205                 where ppr.project_id = p_project_id
5206                 and ppr.object_id = p_object_id
5207                 -- and ppr.object_version_id = p_object_version_id
5208             and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5209         and ppr.structure_version_id is null -- Bug 3764224
5210             and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
5211                 and ppr.as_of_date = (select max(ppr2.as_of_date)
5212                                      from pa_progress_rollup ppr2
5213                                      where ppr2.project_id = p_project_id
5214                                      and ppr2.object_id = p_object_id
5215                      and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5216                      and ppr2.structure_version_id is null -- Bug 3764224
5217                      and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
5218                                      and ppr2.as_of_date < p_as_of_date);
5219 
5220     cursor c_this_prog_rec is
5221          select (nvl(ppr.oth_act_cost_to_date_fc,0)+nvl(ppr.ppl_act_cost_to_date_fc,0)+nvl(ppr.eqpmt_act_cost_to_date_fc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)+nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0)) act_cost_to_date
5222                 from pa_progress_rollup ppr
5223                 where ppr.project_id = p_project_id
5224                 and ppr.object_id = p_object_id
5225                 -- and ppr.object_version_id = p_object_version_id
5226             and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5227         and ppr.structure_version_id is null -- Bug 3764224
5228             and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
5229                 and ppr.as_of_date = (select max(ppr2.as_of_date)
5230                                      from pa_progress_rollup ppr2
5231                                      where ppr2.project_id = p_project_id
5232                                      and ppr2.object_id = p_object_id
5233                      and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5234                      and ppr2.structure_version_id is null -- Bug 3764224
5235                      and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
5236                                      and ppr2.as_of_date >= p_as_of_date);
5237 
5238 
5239 BEGIN
5240 -- Bug 3764224 : This function(_this_peiord) are used only in assignment cases. So it is safe to select from rollup table itself
5241 -- no need to go in percent complete table
5242 -- Bug 3764224 : RLM Changes : Commented the below code. This was not calculating the actual this period
5243 
5244 /*  open c1;
5245     fetch c1 into l_c1rec;
5246     if c1%found then
5247         select (nvl(ppr.oth_act_cost_to_date_fc,0)+nvl(ppr.ppl_act_cost_to_date_fc,0)+nvl(ppr.eqpmt_act_cost_to_date_fc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)+nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0))
5248                 into l_act_cost_pub
5249                 from pa_progress_rollup ppr,pa_percent_completes ppc
5250                 where ppr.project_id = ppc.project_id
5251             and ppr.object_id = ppc.object_id
5252             and ppr.object_version_id = ppc.object_version_id
5253             and ppr.as_of_date = ppc.date_computed (+)
5254         and ppr.project_id = p_project_id
5255                 and ppr.object_id = p_object_id
5256                 -- and ppr.object_version_id = p_object_version_id
5257     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
5258             and ppr.percent_complete_id = ppc.percent_complete_id
5259          and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5260          and ppr.structure_type = ppc.structure_type(+) -- FPM Dev CR 3
5261         and ppr.proj_element_id = ppc.task_id (+) -- Modified for IB4 Progress CR.
5262                 and ppr.as_of_date = (select max(ppc2.date_computed)
5263                                      from pa_percent_completes ppc2
5264                                      where ppc2.project_id = p_project_id
5265                                      and ppc2.object_id = p_object_id
5266                                      -- and ppc2.object_version_id = p_object_version_id
5267                      and ppc2.published_flag = 'Y'
5268                      and ppc2.current_flag = 'Y'
5269                          and ppc2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5270         and ppc2.task_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
5271                      );
5272                 l_act_cost_period := (nvl(l_c1rec.act_cost_to_date,0) - nvl(l_act_cost_pub,0));
5273     end if;
5274     close c1;
5275 */
5276 
5277     open c_prev_prog_rec;
5278     fetch c_prev_prog_rec into l_act_cost_pub;
5279     close c_prev_prog_rec;
5280 
5281     open c_this_prog_rec;
5282     fetch c_this_prog_rec into l_act_cost_date;
5283     close c_this_prog_rec;
5284 
5285     l_act_cost_period := (nvl(l_act_cost_date,0) - nvl(l_act_cost_pub,0));
5286 
5287 
5288         if (l_act_cost_period < 0) then
5289                 l_act_cost_period := 0;
5290         end if;
5291 
5292     return(l_act_cost_period);
5293 
5294 END get_act_pfn_cost_this_period;
5295 
5296 
5297 FUNCTION get_act_effort_this_period (p_as_of_date        IN     DATE
5298                                     ,p_project_id        IN     NUMBER
5299                                     ,p_object_id         IN     NUMBER
5300                                     ,p_object_version_id IN     NUMBER
5301                     ,p_proj_element_id   IN     NUMBER := null /* Modified for IB4 Progress CR. */) return NUMBER
5302 IS
5303     l_act_effort_period     NUMBER := NULL;
5304     l_act_effort_date       NUMBER := NULL;
5305     l_act_effort_pub        NUMBER := NULL;
5306 
5307 
5308 /*
5309     cursor c1 is
5310          select (nvl(ppr.ppl_act_effort_to_date,0)+nvl(ppr.eqpmt_act_effort_to_date,0)+nvl(ppr.subprj_ppl_act_effort,0)+nvl(ppr.subprj_eqpmt_act_effort,0)+nvl(ppr.oth_quantity_to_date,0)) act_effort_to_date
5311                 from pa_progress_rollup ppr
5312                 where ppr.project_id = p_project_id
5313                 and ppr.object_id = p_object_id
5314                 -- and ppr.object_version_id = p_object_version_id
5315          and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5316                 and ppr.as_of_date = (select max(ppr2.as_of_date)
5317                                      from pa_progress_rollup ppr2
5318                                      where ppr2.project_id = p_project_id
5319                                      and ppr2.object_id = p_object_id
5320                                      -- and ppr2.object_version_id = p_object_version_id
5321                      and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5322                                      and ppr2.as_of_date > p_as_of_date);
5323 */
5324 
5325     cursor c_prev_prog_rec is
5326          select (nvl(ppr.ppl_act_effort_to_date,0)+nvl(ppr.eqpmt_act_effort_to_date,0)+nvl(ppr.subprj_ppl_act_effort,0)+nvl(ppr.subprj_eqpmt_act_effort,0)+nvl(ppr.oth_quantity_to_date,0)) act_effort_to_date
5327                 from pa_progress_rollup ppr
5328                 where ppr.project_id = p_project_id
5329                 and ppr.object_id = p_object_id
5330                 -- and ppr.object_version_id = p_object_version_id
5331                 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5332                 and ppr.structure_version_id is null -- Bug 3764224
5333                 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
5334                 and current_flag = 'Y'
5335                 ;
5336             /* commented by maansari7/25
5337                 and ppr.as_of_date = (select max(ppr2.as_of_date)
5338                                      from pa_progress_rollup ppr2
5339                                      where ppr2.project_id = p_project_id
5340                                      and ppr2.object_id = p_object_id
5341                      and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5342                      and ppr2.structure_version_id is null -- Bug 3764224
5343                      and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
5344                                      and ppr2.as_of_date <= p_as_of_date);
5345             */
5346 
5347     cursor c_this_prog_rec is
5348          select (nvl(ppr.ppl_act_effort_to_date,0)+nvl(ppr.eqpmt_act_effort_to_date,0)+nvl(ppr.subprj_ppl_act_effort,0)+nvl(ppr.subprj_eqpmt_act_effort,0)+nvl(ppr.oth_quantity_to_date,0)) act_effort_to_date
5349                 from pa_progress_rollup ppr
5350               -- Bug 3879461 : Now percent complete join is not required. current_flag = W can be used
5351 --                    ,pa_percent_completes ppc
5352                 where ppr.project_id = p_project_id
5353                 and ppr.object_id = p_object_id
5354                 -- and ppr.object_version_id = p_object_version_id
5355                 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5356             and ppr.structure_version_id is null -- Bug 3764224
5357             and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
5358 --                and ppr.object_id = ppc.object_id
5359 --                and ppr.as_of_date = ppc.date_computed
5360 --                and ppr.percent_complete_id = ppc.percent_complete_id
5361 --                and ppr.project_id = ppc.project_id
5362 --                and ppr.proj_element_id=ppc.task_id
5363 --                and ppr.structure_type = ppc.structure_type
5364 --                and ppc.current_flag= 'N'
5365 --                and ppc.published_flag = 'N'
5366                 and ppr.current_flag= 'W'
5367                 ;
5368                 /* commented by maansari7/25
5369                 and ppr.as_of_date = (select max(ppr2.as_of_date)
5370                                      from pa_progress_rollup ppr2
5371                                      where ppr2.project_id = p_project_id
5372                                      and ppr2.object_id = p_object_id
5373                                      and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5374                                      and ppr2.structure_version_id is null -- Bug 3764224
5375                                      and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
5376                                      and ppr2.as_of_date > p_as_of_date);
5377                                      */
5378 
5379     --l_c1rec       c1%rowtype;
5380 
5381 --bug 3738651
5382 -- Bug 3764224 : RLM Changes : This code is commented, the earlier cusrsor code c1 was fine expept instead of greater than it should have been less than sign
5383 --  cursor cur_effort_this_period
5384 --      is
5385 --      select (nvl(ppr.ppl_act_effort_to_date,0)+nvl(ppr.eqpmt_act_effort_to_date,0)+nvl(ppr.subprj_ppl_act_effort,0)+nvl(ppr.subprj_eqpmt_act_effort,0)+nvl(ppr.oth_quantity_to_date,0))
5386 --                from pa_progress_rollup ppr,pa_percent_completes ppc
5387 --                where ppr.project_id = ppc.project_id
5388 --          and ppr.object_id = ppc.object_id
5389 --          and ppr.as_of_date = ppc.date_computed
5390 --          and ppr.project_id = p_project_id
5391 --            and ppr.object_id = p_object_id
5392 --      and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
5393 --            and ppr.percent_complete_id = ppc.percent_complete_id
5394 --          and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5395 --            and ppr.structure_type = ppc.structure_type (+) -- FPM Dev CR 3
5396 --       and ppr.proj_element_id = ppc.task_id (+) /* Modified for IB4 Progress CR. */
5397 --            and ppc.current_flag = 'N'
5398 --            and ppc.published_flag = 'N'
5399 --            ;
5400 
5401 BEGIN
5402 -- Bug 3764224 : This function(_this_peiord) are used only in assignment cases. So it is safe to select from rollup table itself
5403 -- no need to go in percent complete table
5404 -- Bug 3764224 : RLM Changes : Commented the below code. This was not calculating the actual this period
5405 
5406 /*
5407     open c1;
5408     fetch c1 into l_c1rec;
5409     if c1%found then
5410         select (nvl(ppr.ppl_act_effort_to_date,0)+nvl(ppr.eqpmt_act_effort_to_date,0)+nvl(ppr.subprj_ppl_act_effort,0)+nvl(ppr.subprj_eqpmt_act_effort,0)+nvl(ppr.oth_quantity_to_date,0))
5411                 into l_act_effort_pub
5412                 from pa_progress_rollup ppr,pa_percent_completes ppc
5413                 where ppr.project_id = ppc.project_id
5414             and ppr.object_id = ppc.object_id
5415             and ppr.object_version_id = ppc.object_version_id
5416             and ppr.as_of_date = ppc.date_computed (+)
5417         and ppr.project_id = p_project_id
5418                 and ppr.object_id = p_object_id
5419                 -- and ppr.object_version_id = p_object_version_id
5420             and ppr.percent_complete_id = ppc.percent_complete_id
5421          and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5422          and ppr.structure_type = ppc.structure_type (+) -- FPM Dev CR 3
5423                 and ppr.as_of_date = (select max(ppc2.date_computed)
5424                                      from pa_percent_completes ppc2
5425                                      where ppc2.project_id = p_project_id
5426                                      and ppc2.object_id = p_object_id
5427                                      -- and ppc2.object_version_id = p_object_version_id
5428                      and ppc2.published_flag = 'Y'
5429                      and ppc2.current_flag = 'Y'
5430                      and ppc2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5431                      );
5432         l_act_effort_period := (nvl(l_c1rec.act_effort_to_date,0) - nvl(l_act_effort_pub,0));
5433     end if;
5434     close c1;
5435 */
5436 
5437     open c_this_prog_rec;
5438     fetch c_this_prog_rec into l_act_effort_date;
5439     if c_this_prog_rec%notfound
5440     then
5441         close c_this_prog_rec;
5442         return 0;
5443     end if;
5444     close c_this_prog_rec;
5445 
5446     open c_prev_prog_rec;
5447     fetch c_prev_prog_rec into l_act_effort_pub;
5448     close c_prev_prog_rec;
5449 
5450 /*  commneted by maansari7/25
5451     open c_this_prog_rec;
5452     fetch c_this_prog_rec into l_act_effort_date;
5453     close c_this_prog_rec;
5454 */
5455 
5456     l_act_effort_period := (nvl(l_act_effort_date,0) - nvl(l_act_effort_pub,0));
5457 
5458     if (l_act_effort_period < 0 ) then
5459         l_act_effort_period := 0;
5460     end if;
5461 
5462     return(l_act_effort_period);
5463 
5464 
5465 
5466 --  OPEN cur_effort_this_period;
5467 --  FETCH cur_effort_this_period INTO l_act_effort_period;
5468 --  IF cur_effort_this_period%FOUND
5469 --  THEN
5470 --          CLOSE cur_effort_this_period;
5471 --          RETURN l_act_effort_period;
5472 --        ELSE
5473 --          CLOSE cur_effort_this_period;
5474 --          RETURN null;
5475 --  END IF;
5476 END get_act_effort_this_period;
5477 
5478 FUNCTION check_wwp_prog_publishing_ok(
5479     p_project_id              IN NUMBER
5480    ,p_structure_version_id    IN NUMBER
5481 ) RETURN VARCHAR2
5482 IS
5483 /* Commented for bug 5665310
5484         CURSOR C1 is
5485         select 'N'
5486         from pa_proj_elem_ver_structure ppevs
5487         where ppevs.project_id = p_project_id
5488         and ppevs.element_version_id = p_structure_version_id
5489         and ppevs.date_prog_applied_on_wver < (select max(l_update_date)
5490                                               from (
5491                                               select max(last_update_date) l_update_date
5492                                               from pa_progress_rollup ppr
5493                                               where ppr.project_id = p_project_id
5494                                               and object_type in ('PA_ASSIGNMENTS','PA_DELIVERABLES')
5495                                               and structure_type = 'WORKPLAN'
5496                                               and current_flag = 'Y'
5497                                               and ppr.structure_version_id is null
5498                                               union
5499                                               select max(last_update_date) l_update_date
5500                                               from pa_percent_completes
5501                                               where project_id = p_project_id
5502                                               and structure_type = 'WORKPLAN'
5503                                               and published_flag = 'Y'));
5504 
5505         CURSOR C2 is
5506         select 'N'
5507         from pa_proj_elem_ver_structure ppevs
5508         where ppevs.project_id = p_project_id
5509         and ppevs.element_version_id = p_structure_version_id
5510         and ppevs.date_prog_applied_on_wver is null
5511         and exists (select '1'
5512                       from pa_progress_rollup ppr
5513                      where ppr.project_id = p_project_id
5514                       and object_type in ('PA_ASSIGNMENTS','PA_DELIVERABLES')
5515                       and structure_type = 'WORKPLAN'
5516                       and current_flag = 'Y'
5517                       and ppr.structure_version_id is null
5518                     union
5519                     select '1'
5520                       from pa_percent_completes
5521                      where project_id = p_project_id
5522                       and structure_type = 'WORKPLAN'
5523                       and published_flag = 'Y');     */
5524 
5525         l_return_value    VARCHAR2(1) := null;
5526         -- Added for Bug 5665310
5527         l_date_prog_applied_on_wver            DATE;
5528         l_last_update_date                     DATE;
5529 	l_program_flag                         VARCHAR2(1) := null;
5530 
5531 BEGIN
5532         /* Commented for bug 5665310
5533 	OPEN c1;
5534                 fetch c1 INTO l_return_value;
5535         CLOSE c1;
5536 
5537         if l_return_value is null then
5538            open c2;
5539            fetch c2 INTO l_return_value;
5540            close c2;
5541         end if;   */
5542 
5543 --Start of Addition for bug 5665310
5544 
5545 	SELECT date_prog_applied_on_wver
5546         INTO   l_date_prog_applied_on_wver
5547         FROM   pa_proj_elem_ver_structure ppevs
5548         WHERE  ppevs.project_id = p_project_id
5549         AND    ppevs.element_version_id = p_structure_version_id;
5550 
5551 	l_program_flag := PA_PROJECT_STRUCTURE_UTILS.check_program_flag_enable(p_project_id);
5552 
5553         IF l_date_prog_applied_on_wver IS NOT NULL THEN
5554 
5555 	    If nvl(l_program_flag,'N') = 'Y' then
5556 		SELECT
5557 			MAX(ppr.last_update_date)
5558 			INTO   l_last_update_date
5559 			FROM   pa_progress_rollup ppr
5560 			WHERE  ppr.project_id = p_project_id
5561 			AND    ppr.object_type in ('PA_ASSIGNMENTS','PA_DELIVERABLES')
5562 			AND    ppr.structure_type = 'WORKPLAN'
5563 			AND    ppr.current_flag = 'Y'
5564 			AND    ppr.structure_version_id is null;
5565 	    else
5566 	          SELECT
5567 			MAX(ppr.last_update_date)
5568 			INTO   l_last_update_date
5569 			FROM   pa_progress_rollup ppr, pa_proj_elem_ver_structure ppevs
5570 			WHERE  ppr.project_id = p_project_id
5571 			AND    ppr.object_id = ppevs.PROJ_ELEMENT_ID
5572 			AND    ppr.object_type ='PA_STRUCTURES'
5573 			AND    ppr.structure_type = 'WORKPLAN'
5574 			AND    ppr.PROJ_ELEMENT_ID = ppevs.PROJ_ELEMENT_ID
5575 			AND    ppr.current_flag = 'Y'
5576 			AND    ppr.structure_version_id is null
5577 			AND    ppevs.project_id = ppr.project_id
5578 			AND    ppevs.element_version_id = p_structure_version_id;
5579 
5580 	    end if;
5581 
5582             IF l_date_prog_applied_on_wver >= NVL(l_last_update_date,l_date_prog_applied_on_wver) THEN
5583 		If nvl(l_program_flag,'N') = 'Y' then
5584 			SELECT MAX(last_update_date)
5585 			INTO   l_last_update_date
5586 			FROM   pa_percent_completes ppr
5587 			WHERE  project_id = p_project_id
5588 			AND    structure_type = 'WORKPLAN'
5589 			AND    published_flag = 'Y'
5590 			AND    current_flag = 'Y';
5591 		end if;
5592 
5593                 IF l_date_prog_applied_on_wver < NVL(l_last_update_date,l_date_prog_applied_on_wver) THEN
5594 
5595                     l_return_value := 'N';
5596 
5597                 END IF;
5598 
5599             ELSE
5600 
5601                 l_return_value := 'N';
5602 
5603             END IF;
5604 
5605         ELSE
5606 
5607             BEGIN
5608                 SELECT 'N'
5609                 INTO   l_return_value
5610                 FROM   DUAL
5611                 WHERE  EXISTS (  SELECT '1'
5612                                  FROM   pa_progress_rollup ppr
5613                                  WHERE  ppr.project_id = p_project_id
5614                                  AND    object_type in ('PA_ASSIGNMENTS','PA_DELIVERABLES')
5615                                  AND    structure_type = 'WORKPLAN'
5616                                  AND    current_flag = 'Y'
5617                                  AND    ppr.structure_version_id IS NULL);
5618 
5619             EXCEPTION
5620             WHEN NO_DATA_FOUND THEN
5621                 NULL;
5622             END;
5623 
5624             IF l_return_value IS NULL THEN
5625 
5626                 BEGIN
5627 
5628                     SELECT 'N'
5629                     INTO   l_return_value
5630                     FROM   DUAL
5631                     WHERE  EXISTS (  SELECT '1'
5632                                      FROM   pa_percent_completes
5633                                      WHERE  project_id = p_project_id
5634                                      AND    structure_type = 'WORKPLAN'
5635                                      AND    published_flag = 'Y');
5636 
5637                 EXCEPTION
5638                 WHEN NO_DATA_FOUND THEN
5639                     NULL;
5640                 END;
5641 
5642             END IF;
5643 
5644         END IF;
5645 -- End of addition for bug 5665310
5646 
5647         return (NVL(l_return_value,'Y'));
5648 
5649 END check_wwp_prog_publishing_ok;
5650 
5651 FUNCTION Get_BAC_Value(
5652     p_project_id                IN NUMBER
5653    ,p_task_weight_method        IN VARCHAR2
5654    ,p_proj_element_id           IN NUMBER
5655    ,p_structure_version_id      IN NUMBER
5656    ,p_structure_type            IN VARCHAR2
5657    ,p_working_wp_prog_flag      IN VARCHAR2 default 'N' --maansari7/18. To get the planned in case of apply lp flow
5658    ,p_program_flag              IN VARCHAR2 default 'Y' -- Bug 4493105
5659 ) RETURN NUMBER
5660 IS
5661 l_msg_code                      VARCHAR2(30);
5662 l_return_status                 VARCHAR2(1);
5663 l_value                         NUMBER;
5664 l_plan_version_id               NUMBER;
5665 BEGIN
5666 -- FPM Dev CR 3 : Changes done to not call PJI Api for Workplan.
5667 
5668 -- Bug 3627315 : Now this function will not call populate_workplan_data. It shd be called from calling environment
5669 IF p_structure_type = 'FINANCIAL' THEN
5670 
5671     /* Begin Fix for Bug # 4115607. */
5672 
5673         -- l_plan_version_id := PA_FIN_PLAN_UTILS.Get_app_budget_cost_cb_ver(p_project_id);
5674 
5675     l_plan_version_id := pa_progress_utils.get_app_cost_budget_cb_wor_ver(p_project_id);
5676 
5677     /* End fix for Bug # 4115607. */
5678 
5679         BEGIN
5680 
5681 --  IF   p_project_id <> G_bac_value_project_id THEN
5682 
5683 --      PJI_FM_XBS_ACCUM_UTILS.populate_workplan_data(
5684 --              p_project_id        => p_project_id,
5685 --              p_struct_ver_id     => p_structure_version_id,
5686     --                  p_base_struct_ver_id   IN   NUMBER DEFAULT NULL,
5687 --              p_plan_version_id   => l_plan_version_id,
5688 --  --                  p_progress_actuals_flag IN  VARCHAR2 DEFAULT 'N',
5689 --              x_return_status     => l_return_status,
5690 --              x_msg_code          => l_msg_code
5691 --              );
5692 --      G_bac_value_project_id := p_project_id;
5693 --  END IF;
5694 
5695 -- Bug 3627315 : In case of Financial Structure, it should select normal(without BASE)  columns from PJI table
5696 -- Anyhow it is baselined plan version
5697 --                SELECT decode(p_task_weight_method, 'EFFORT',nvl(BASE_LABOR_HOURS,0)+nvl(BASE_EQUIP_HOURS,0), PRJ_BASE_BRDN_COST)
5698                 SELECT
5699         /*+ INDEX(pji_fm_xbs_accum_tmp1 pji_fm_xbs_accum_tmp1_n1)*/ -- Fix for Bug # 4162534.
5700     decode(p_task_weight_method, 'EFFORT',nvl(LABOR_HOURS,0)+nvl(EQUIPMENT_HOURS,0), PRJ_BRDN_COST)
5701                 INTO  l_value
5702                 FROM PJI_FM_XBS_ACCUM_TMP1
5703                 WHERE project_id = p_project_id
5704                 AND project_element_id = p_proj_element_id
5705                 AND PLAN_VERSION_ID = l_plan_version_id
5706         AND txn_currency_code is null    --bug no. 3646988
5707                 AND res_list_member_id is null;
5708         EXCEPTION
5709          WHEN OTHERS THEN
5710                 l_value := null;
5711         END;
5712 ELSE
5713     --No Need to call PJI APi to populate its temp table. From Workplan pages, we are calling this API.
5714     -- We are calling this From AMG pa_status_pub too.
5715     -- As of now we are not calling it from Financial Forms and pages, hence it needs to be called for Financial Structure
5716     BEGIN
5717 
5718         if p_working_wp_prog_flag = 'N' then
5719 
5720         --bug 3896273, CR, latest published changes
5721         /*SELECT decode(p_task_weight_method, 'EFFORT',nvl(BASE_LABOR_HOURS,nvl(LABOR_HOURS,0))+
5722                                                              nvl(BASE_EQUIP_HOURS,nvl(EQUIPMENT_HOURS,0)),
5723                                                      NVL(PRJ_BASE_BRDN_COST,nvl(PRJ_BRDN_COST,0)))  --if base is not avilable then select the published planned. bug 3781922*/
5724                 -- Bug 4493105 : Added p_program_flag decode
5725         SELECT
5726         /*+ INDEX(pji_fm_xbs_accum_tmp1 pji_fm_xbs_accum_tmp1_n1)*/ -- Fix for Bug # 4162534.
5727                decode(p_task_weight_method, 'EFFORT', decode(p_program_flag, 'N',    nvl(P_BASE_LBR_HOURS, nvl(P_LPB_LBR_HOURS, nvl(P_LBR_HOURS,0)))+
5728                                                                                      nvl(P_BASE_EQP_HOURS, nvl(P_LPB_EQP_HOURS, nvl(P_EQP_HOURS,0))),
5729                                                      nvl(BASE_LABOR_HOURS, nvl(LPB_LABOR_HOURS, nvl(LABOR_HOURS,0)))+
5730                                                                                  nvl(BASE_EQUIP_HOURS, nvl(LPB_EQUIP_HOURS, nvl(EQUIPMENT_HOURS,0)))
5731                                  ),
5732                                                      decode(p_program_flag, 'N',NVL(P_BASE_BRDN_COST, nvl(P_LPB_BRDN_COST, nvl(P_BRDN_COST,0)))
5733                                                        ,NVL(PRJ_BASE_BRDN_COST, nvl(PRJ_LPB_BRDN_COST, nvl(PRJ_BRDN_COST,0)))
5734                                    )
5735              )  --if base is not avilable then select the published planned. bug 3781922
5736                 INTO  l_value
5737                 FROM PJI_FM_XBS_ACCUM_TMP1
5738                 WHERE project_id = p_project_id
5739                 AND struct_version_id = p_structure_version_id
5740                 AND project_element_id = p_proj_element_id
5741                 AND txn_currency_code is null    --bug no. 3646988
5742                 AND res_list_member_id is null;
5743 
5744              else
5745                 -- Bug 4493105 : Added p_program_flag decode
5746                 SELECT
5747         /*+ INDEX(pji_fm_xbs_accum_tmp1 pji_fm_xbs_accum_tmp1_n1)*/ -- Fix for Bug # 4162534.
5748     decode(p_task_weight_method, 'EFFORT',decode(p_program_flag,'N',nvl(P_LBR_HOURS,0)+nvl(P_EQP_HOURS,0)
5749                                                                   ,nvl(LABOR_HOURS,0)+nvl(EQUIPMENT_HOURS,0))
5750                                , decode(p_program_flag,'N',P_BRDN_COST,PRJ_BRDN_COST))
5751                 INTO  l_value
5752                 FROM PJI_FM_XBS_ACCUM_TMP1
5753                 WHERE project_id = p_project_id
5754                 AND struct_version_id = p_structure_version_id
5755                 AND project_element_id = p_proj_element_id
5756         AND txn_currency_code is null    --bug no. 3646988
5757                 AND res_list_member_id is null;
5758 
5759         end if;
5760 
5761         EXCEPTION
5762          WHEN OTHERS THEN
5763                 l_value := null;
5764         END;
5765 END IF;
5766 
5767 return l_value;
5768 EXCEPTION
5769 WHEN OTHERS THEN
5770         return null;
5771 END Get_BAC_Value;
5772 
5773 FUNCTION Get_EARLY_PROGRESS_ENTRY_DATE(
5774      p_project_id  NUMBER
5775     ,p_object_id   NUMBER
5776     ,p_object_type VARCHAR2 := 'PA_TASKS'
5777     ,p_structure_type VARCHAR2 := 'WORKPLAN'
5778     ,p_task_id  NUMBER := null /* Modified for IB4 Progress CR. */
5779     ) RETURN DATE
5780 IS
5781 l_first_date Date;
5782 CURSOR cur_ppc
5783   IS
5784     SELECT min(trunc(last_update_date))
5785       FROM pa_percent_completes
5786      WHERE object_id = p_object_id
5787        AND project_id = p_project_id
5788        and object_type = p_object_type
5789        AND published_flag = 'Y'
5790        AND structure_type = p_structure_type
5791        and NVL(task_id,-1) = DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_task_id,NVL(task_id,-1)),NVL(p_task_id, p_object_id)) /* Amit : Modified for IB4 Progress CR. */
5792        --and task_id = nvl(p_task_id, p_object_id) /* Modified for IB4 Progress CR. */;
5793        ;
5794 BEGIN
5795 
5796 OPEN cur_ppc;
5797 FETCH cur_ppc INTO l_first_date;
5798 CLOSE cur_ppc;
5799 
5800 return l_first_date;
5801 
5802 EXCEPTION
5803 WHEN OTHERS THEN
5804         return null;
5805 END Get_EARLY_PROGRESS_ENTRY_DATE;
5806 
5807 FUNCTION Get_LATEST_PROGRESS_ENTRY_DATE(
5808      p_project_id  NUMBER
5809     ,p_object_id   NUMBER
5810     ,p_object_type VARCHAR2 := 'PA_TASKS'
5811     ,p_structure_type VARCHAR2 := 'WORKPLAN'
5812     ,p_task_id  NUMBER := null /* Amit : Modified for IB4 Progress CR. */
5813 	,p_cbs_element_id   NUMBER := null -- Added for CBS phase 2 16200605
5814     ) RETURN DATE
5815 IS
5816 l_first_date Date;
5817 CURSOR cur_ppc
5818   IS
5819     SELECT max(trunc(last_update_date))
5820       FROM pa_percent_completes
5821      WHERE object_id = p_object_id
5822        AND project_id = p_project_id
5823        and object_type = p_object_type
5824        AND published_flag = 'Y'
5825        AND structure_type = p_structure_type
5826        and NVL(task_id,-1) = DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_task_id,NVL(task_id,-1)),NVL(p_task_id, p_object_id)) /* Amit : Modified for IB4 Progress CR. */
5827        AND NVL(cbs_element_id,-1) = NVL(p_cbs_element_id,-1) --Added for CBS phase 2 16200605
5828 	   ;
5829 BEGIN
5830 
5831 OPEN cur_ppc;
5832 FETCH cur_ppc INTO l_first_date;
5833 CLOSE cur_ppc;
5834 
5835 return l_first_date;
5836 
5837 EXCEPTION
5838 WHEN OTHERS THEN
5839         return null;
5840 END Get_LATEST_PROGRESS_ENTRY_DATE;
5841 
5842 FUNCTION latest_published_progress_date(p_project_id      IN    NUMBER
5843                     ,p_structure_type IN    VARCHAR2 ) RETURN DATE
5844 IS
5845     l_return_date   DATE;
5846   CURSOR cur_latest_date
5847   IS
5848     select max(date_computed)
5849     from pa_percent_completes ppc
5850     where ppc.project_id = p_project_id
5851     and ppc.structure_type = p_structure_type;
5852 
5853 BEGIN
5854      OPEN cur_latest_date;
5855      FETCH cur_latest_date INTO l_return_date;
5856      CLOSE cur_latest_date;
5857 
5858      return(l_return_date);
5859 END latest_published_progress_date;
5860 
5861 FUNCTION check_object_has_prog(
5862          p_project_id                           IN      NUMBER -- FPM Dev CR 7 : Removed defaulting
5863         ,p_proj_element_id                      IN      NUMBER := null /* Modified for IB4 Progress CR. */
5864         ,p_object_id                            IN      NUMBER -- FPM Dev CR 7 : Removed defaulting
5865         ,p_object_type                          IN      VARCHAR2:='PA_TASKS'
5866         ,p_structure_type                       IN      VARCHAR2:='WORKPLAN'
5867         ,p_progress_status                      IN      VARCHAR2:='ANY'
5868         )       RETURN VARCHAR2
5869 IS
5870     l_return_status VARCHAR2(1) := 'N';
5871     -- FPM Dev CR 7 : Note that p_proj_element_id is not needed, but keeping it to avoid impacts to other code
5872 CURSOR myCursor is
5873     select 'Y'
5874     from pa_progress_rollup ppr
5875     where ppr.project_id = p_project_id
5876     and ppr.object_id = p_object_id
5877     and ppr.object_type = p_object_type
5878     and ppr.structure_type = p_structure_type
5879     and ppr.structure_version_id is null -- FPM Dev CR 7
5880         and NVL(proj_element_id,-1) = DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_proj_element_id,NVL(proj_element_id,-1)),NVL(p_proj_element_id, p_object_id)) /* Amit : Modified for IB4 Progress CR. */
5881     --and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
5882     ;
5883 
5884 CURSOR myCursor_pub is
5885         select 'Y'
5886         from pa_progress_rollup ppr
5887         where ppr.project_id = p_project_id
5888         and ppr.object_id = p_object_id
5889         and ppr.object_type = p_object_type
5890         and ppr.structure_type = p_structure_type
5891         and ppr.structure_version_id is null -- FPM Dev CR 7
5892         and NVL(proj_element_id,-1) = DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_proj_element_id,NVL(proj_element_id,-1)),NVL(p_proj_element_id, p_object_id)) /* Amit : Modified for IB4 Progress CR. */
5893         and current_flag in ('Y','N');
5894 result myCursor%rowtype;
5895 
5896 BEGIN
5897 
5898     if (p_progress_status = 'PUBLISHED') then
5899        OPEN myCursor_pub;
5900        FETCH myCursor_pub INTO result;
5901        if myCursor_pub%FOUND THEN
5902             close myCursor_pub;
5903             return 'Y';
5904        ELSE
5905             close myCursor_pub;
5906             return 'N';
5907        END IF;
5908     else
5909        OPEN myCursor;
5910        FETCH myCursor INTO result;
5911        if myCursor%FOUND THEN
5912             close myCursor;
5913         return 'Y';
5914        ELSE
5915             close myCursor;
5916             return 'N';
5917        END IF;
5918     end if;
5919 END check_object_has_prog;
5920 
5921 --- Following APIs added by Bhumesh
5922 
5923 Function Prog_Get_Pa_Period_Name (p_Date  IN Date
5924 , p_org_id IN NUMBER :=null -- 4746476
5925 )
5926 RETURN VARCHAR2
5927 IS
5928   l_Org_ID pa_implementations_all.org_id%TYPE;
5929   l_Period_Name  varchar2(100);
5930 BEGIN
5931 -- 4746476 : Added IF
5932 IF p_org_id IS NULL THEN
5933   SELECT org_id INTO l_Org_ID FROM PA_Implementations;
5934 ELSE
5935   l_Org_ID := p_org_id;
5936 END IF;
5937 
5938   l_Period_Name := PA_UTILS2.get_pa_period_name (p_txn_date => p_Date,
5939                          p_org_id   => l_Org_ID );
5940 
5941   Return l_Period_Name;
5942 END Prog_Get_Pa_Period_Name;
5943 
5944 Function Prog_Get_GL_Period_Name (P_Date  IN Date
5945 , p_org_id IN NUMBER :=null -- 4746476
5946 )
5947 RETURN VARCHAR2
5948 IS
5949   l_Org_ID pa_implementations_all.org_id%TYPE;
5950   l_Period_Name  varchar2(100);
5951 BEGIN
5952 -- 4746476 : Added IF
5953 IF p_org_id IS NULL THEN
5954   SELECT org_id INTO l_Org_ID FROM PA_Implementations;
5955 ELSE
5956   l_Org_ID := p_org_id;
5957 END IF;
5958 
5959   l_Period_Name := PA_UTILS2.get_GL_period_name (p_gl_date  => p_Date,
5960                          p_org_id   => l_Org_ID );
5961 
5962   Return l_Period_Name;
5963 
5964 END Prog_Get_GL_Period_Name;
5965 
5966 -- History
5967 -- 02-aug-04
5968 -- Added two params p_structure_version_id and p_structure_status to return base percent complete
5969 -- from a working version also.
5970 -- This change is done for B and F
5971 Procedure REDEFAULT_BASE_PC    (
5972     p_Project_ID                IN NUMBER
5973    ,p_Proj_element_id           IN NUMBER
5974    ,p_Structure_type            IN VARCHAR2 DEFAULT 'WORKPLAN'
5975    ,p_object_type               IN VARCHAR2 DEFAULT 'PA_TASKS'
5976    ,p_As_Of_Date                IN DATE
5977    ,p_structure_version_id      IN NUMBER    DEFAULT null
5978    ,p_structure_status          IN VARCHAR2  DEFAULT null
5979    ,p_calling_context           IN VARCHAR2  DEFAULT 'PROGRESS'
5980    ,X_base_percent_complete     OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5981    ,x_return_status             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5982    ,x_msg_count                 OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5983    ,x_msg_data                  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5984 )
5985 IS
5986   l_msg_code        VARCHAR2(30);
5987   l_return_status   VARCHAR2(1);
5988   l_value       NUMBER;
5989 
5990 -- 4392189 : Program Reporting Changes - Phase 2
5991 -- If p_calling_context is PROGRESS, then it will work as it is
5992 -- If it is FINANCIAL_PLANNING then it will return project % complete for Workplan
5993 
5994   Cursor CUR_Base_Perc_Complete_task
5995     IS
5996 -- 4392189
5997 --      Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
5998 --                                        'FINANCIAL_PLANNING', NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP))
5999       Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
6000                                         'FINANCIAL_PLANNING',
6001                           decode(p_structure_type, 'FINANCIAL',  NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP)
6002                                                               ,  NVL(completed_percentage,BASE_PERCENT_COMPLETE)))
6003       From   PA_Progress_Rollup
6004       Where  Project_ID     = P_Project_ID
6005       AND    Object_ID      = P_Proj_Element_ID
6006       AND    Object_Type        = p_object_type
6007       AND    current_flag       <> 'W'     --bug 3879461
6008       AND    As_Of_Date     = ( select max(As_Of_Date) from pa_progress_rollup
6009                                     where  Project_ID         = P_Project_ID
6010                                       AND    Object_ID          = P_Proj_Element_ID
6011                                       AND    Object_Type        = p_object_type
6012                                       AND    structure_version_id IS NULL
6013                                       AND    current_flag       <> 'W'     --bug 3879461
6014                                       AND    Structure_type     = p_structure_type
6015                                       AND   as_of_date <= p_as_of_date
6016                                    )
6017       AND    structure_version_id IS NULL
6018       AND    Structure_type = p_structure_type;
6019 
6020   Cursor CUR_Base_Perc_Complete_proj
6021     IS
6022 -- 4392189
6023 --      Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
6024 --                                        'FINANCIAL_PLANNING', NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP))
6025       Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
6026                                         'FINANCIAL_PLANNING',
6027                           decode(p_structure_type, 'FINANCIAL',  NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP)
6028                                                               ,  NVL(completed_percentage,BASE_PERCENT_COMPLETE)))
6029       From   PA_Progress_Rollup
6030       Where  Project_ID         = P_Project_ID
6031       AND    Object_Type        = p_object_type
6032       AND    current_flag       <> 'W'     --bug 3879461
6033       AND    As_Of_Date         = ( select max(As_Of_Date) from pa_progress_rollup
6034                                     where  Project_ID         = P_Project_ID
6035                                       AND    Object_Type        = p_object_type
6036                                       AND    structure_version_id IS NULL
6037                                       AND    current_flag       <> 'W'     --bug 3879461
6038                                       AND    Structure_type     = p_structure_type
6039                                       AND   as_of_date <= p_as_of_date
6040                                    )
6041 
6042       AND    structure_version_id IS NULL
6043       AND    Structure_type     = p_structure_type;
6044 
6045 --bug 3879461 selects percent complete from working progress record.
6046   Cursor CUR_Base_Perc_Complete_task_2
6047     IS
6048 -- 4392189
6049 --      Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
6050 --                                        'FINANCIAL_PLANNING', NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP))
6051       Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
6052                                         'FINANCIAL_PLANNING',
6053                           decode(p_structure_type, 'FINANCIAL',  NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP)
6054                                                               ,  NVL(completed_percentage,BASE_PERCENT_COMPLETE)))
6055       From   PA_Progress_Rollup
6056       Where  Project_ID         = P_Project_ID
6057       AND    Object_ID          = P_Proj_Element_ID
6058       AND    Object_Type        = p_object_type
6059       AND    current_flag       = 'W'     --bug 3879461
6060       AND    As_Of_Date         = ( select max(As_Of_Date) from pa_progress_rollup
6061                                     where  Project_ID         = P_Project_ID
6062                                       AND    Object_ID          = P_Proj_Element_ID
6063                                       AND    Object_Type        = p_object_type
6064                                       AND    structure_version_id IS NULL
6065                                       AND    current_flag       = 'W'     --bug 3879461
6066                                       AND    Structure_type     = p_structure_type
6067                                       AND   as_of_date <= p_as_of_date
6068                                    )
6069       AND    structure_version_id IS NULL
6070       AND    Structure_type     = p_structure_type;
6071 
6072   Cursor CUR_Base_Perc_Complete_proj_2
6073     IS
6074 -- 4392189
6075 --      Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
6076 --                                        'FINANCIAL_PLANNING', NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP))
6077       Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
6078                                         'FINANCIAL_PLANNING',
6079                           decode(p_structure_type, 'FINANCIAL',  NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP)
6080                                                               ,  NVL(completed_percentage,BASE_PERCENT_COMPLETE)))
6081       From   PA_Progress_Rollup
6082       Where  Project_ID         = P_Project_ID
6083       AND    Object_Type        = p_object_type
6084       AND    current_flag       = 'W'     --bug 3879461
6085       AND    As_Of_Date         = ( select max(As_Of_Date) from pa_progress_rollup
6086                                     where  Project_ID         = P_Project_ID
6087                                       AND    Object_Type        = p_object_type
6088                                       AND    structure_version_id IS NULL
6089                                       AND    current_flag       = 'W'     --bug 3879461
6090                                       AND    Structure_type     = p_structure_type
6091                                       AND   as_of_date <= p_as_of_date
6092                                    )
6093 
6094       AND    structure_version_id IS NULL
6095       AND    Structure_type     = p_structure_type;
6096 --end bug 3879461 selects percent complete from working progress record.
6097 
6098 
6099 
6100   Cursor CUR_Base_Perc_Complete_task_w
6101     IS
6102 -- 4392189
6103 --      Select NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage)
6104 --      Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
6105 --                                        'FINANCIAL_PLANNING', NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP))
6106       Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
6107                                         'FINANCIAL_PLANNING',
6108                           decode(p_structure_type, 'FINANCIAL',  NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP)
6109                                                           ,  NVL(completed_percentage,BASE_PERCENT_COMPLETE)))
6110       From   PA_Progress_Rollup
6111       Where  Project_ID         = P_Project_ID
6112       AND    Object_ID          = P_Proj_Element_ID
6113       AND    Object_Type        = p_object_type
6114       --AND    As_Of_Date         = p_As_Of_Date
6115       AND    structure_version_id = p_structure_version_id
6116       AND    Structure_type     = p_structure_type;
6117 
6118   Cursor CUR_Base_Perc_Complete_proj_w
6119     IS
6120 -- 4392189
6121 --      Select NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage)
6122 --      Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
6123 --                                        'FINANCIAL_PLANNING', NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP))
6124       Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
6125                                         'FINANCIAL_PLANNING',
6126                           decode(p_structure_type, 'FINANCIAL',  NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP)
6127                                                               ,  NVL(completed_percentage,BASE_PERCENT_COMPLETE)))
6128       From   PA_Progress_Rollup
6129       Where  Project_ID         = P_Project_ID
6130       AND    Object_Type        = p_object_type
6131       --AND    As_Of_Date         = p_As_Of_Date
6132       AND    structure_version_id = p_structure_version_id
6133       AND    Structure_type     = p_structure_type;
6134 
6135 
6136 BEGIN
6137     x_return_status := FND_API.G_RET_STS_SUCCESS ;
6138     X_base_percent_complete := null;   --bug 3879461
6139 
6140     IF ( p_structure_version_id IS NULL AND p_structure_status IS NULL ) OR
6141        ( p_structure_status = 'PUBLISHED')
6142     THEN
6143 
6144 --bug 3879461 selects percent complete from working progress record.
6145      if p_calling_context = 'PROGRESS'
6146      then
6147     if p_proj_element_id is null then
6148             Open CUR_Base_Perc_Complete_proj_2;
6149         Fetch CUR_Base_Perc_Complete_proj_2 INTO X_base_percent_complete;
6150         Close CUR_Base_Perc_Complete_proj_2;
6151     else
6152                 Open CUR_Base_Perc_Complete_task_2;
6153                 Fetch CUR_Base_Perc_Complete_task_2 INTO X_base_percent_complete;
6154                 Close CUR_Base_Perc_Complete_task_2;
6155     end if;
6156       end if;
6157 --bug 3879461 selects percent complete from working progress record.
6158 
6159       if X_base_percent_complete IS NULL    --bug 3879461
6160       then
6161         if p_proj_element_id is null then
6162                 Open CUR_Base_Perc_Complete_proj;
6163                 Fetch CUR_Base_Perc_Complete_proj INTO X_base_percent_complete;
6164                 Close CUR_Base_Perc_Complete_proj;
6165         else
6166                 Open CUR_Base_Perc_Complete_task;
6167                 Fetch CUR_Base_Perc_Complete_task INTO X_base_percent_complete;
6168                 Close CUR_Base_Perc_Complete_task;
6169         end if;
6170       end if;
6171 
6172     ELSIF ( p_structure_version_id IS NOT NULL AND p_structure_status IS NOT NULL ) OR
6173           ( p_structure_status = 'WORKING')
6174     THEN
6175 
6176         if p_proj_element_id is null then
6177                 Open CUR_Base_Perc_Complete_proj_w;
6178                 Fetch CUR_Base_Perc_Complete_proj_w INTO X_base_percent_complete;
6179                 Close CUR_Base_Perc_Complete_proj_w;
6180         else
6181                 Open CUR_Base_Perc_Complete_task_w;
6182                 Fetch CUR_Base_Perc_Complete_task_w INTO X_base_percent_complete;
6183                 Close CUR_Base_Perc_Complete_task_w;
6184         end if;
6185 
6186     END IF;
6187 
6188 -- Progress Management Changes. Bug # 3420093.
6189 
6190     X_base_percent_complete := round(X_base_percent_complete,8); --Bug 6854114
6191 
6192 -- Progress Management Changes. Bug # 3420093.
6193 
6194 EXCEPTION WHEN OTHERS THEN
6195       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6196       x_Msg_Count     := 0;
6197       x_Msg_Data      := '';
6198       fnd_msg_pub.add_exc_msg( p_pkg_name       => 'PA_PROGRESS_UTILS'
6199                   ,p_procedure_name => 'REDEFAULT_BASE_PC'
6200                   ,p_error_text     => SUBSTRB(SQLERRM,1,120));
6201     RAISE FND_API.G_EXC_ERROR;
6202 END REDEFAULT_BASE_PC;
6203 
6204 Procedure RECALCULATE_PROG_STATS (
6205     p_project_id        IN NUMBER
6206    ,p_proj_element_id       IN NUMBER
6207    ,p_task_version_id       IN NUMBER
6208    ,p_structure_type        IN VARCHAR2 DEFAULT 'WORKPLAN'
6209    ,p_As_Of_Date        IN DATE
6210    ,P_Overide_Percent_Complete  IN NUMBER
6211    ,p_Actual_Effort     IN NUMBER
6212    ,p_Actual_Cost       IN NUMBER
6213    ,p_Planned_Effort        IN NUMBER
6214    ,p_Planned_Cost      IN NUMBER
6215    ,p_baselined_Effort      IN NUMBER
6216    ,p_baselined_Cost        IN NUMBER
6217    ,x_BCWS          OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6218    ,X_BCWP          OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6219    ,X_SCH_Performance_Index OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6220    ,X_COST_Performance_Index    OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6221    ,x_Sch_At_Completion     OUT NOCOPY DATE --File.Sql.39 bug 4440895
6222    ,x_Complete_Performance_Index OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6223    ,x_return_status             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6224    ,x_msg_count                 OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6225    ,x_msg_data                  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6226 )
6227 IS
6228   l_TASK_WEIGHT_BASIS_CODE  VARCHAR2(30);
6229   l_Planned_Amount      NUMBER ;
6230   l_Actual_Amount       NUMBER ;
6231   l_Baseline_Amount     NUMBER ;
6232   l_BCWS                NUMBER;
6233   l_SCH_Performance_Index NUMBER;
6234   l_tcpi_denom            NUMBER;
6235 
6236     CURSOR cur_sch_dates
6237     IS
6238       SELECT scheduled_start_date, scheduled_finish_date
6239       from pa_proj_elem_ver_schedule ppevs
6240       where project_id=p_project_id
6241        and element_version_id=p_task_version_id
6242        ;
6243 
6244        l_sch_start_date DATE;
6245        l_sch_finish_date DATE;
6246 
6247     CURSOR cur_str_ver_id
6248       is
6249       select parent_structure_version_id
6250       from pa_proj_element_versions
6251       where project_id = p_project_id
6252       and proj_element_id =     p_proj_element_id
6253       and element_version_id = p_task_version_id
6254       ;
6255 
6256       l_str_ver_id  NUMBER;
6257 
6258     /* Bug # 3861344: Modified API: recalculate_prog_stats(). */
6259 
6260     -- Cursor to get baselined dates.
6261 
6262     cursor cur_baselined_dates is
6263     select baseline_start_date, baseline_finish_date
6264     from pa_proj_elements
6265     where project_id = p_project_id
6266     and proj_element_id = p_proj_element_id;
6267 
6268     l_base_start_date DATE := NULL;
6269     l_base_finish_date DATE := NULL;
6270 
6271         --bug 4308359, start
6272     CURSOR cur_proj_curr
6273     IS
6274       SELECT project_currency_code from pa_projects_all where project_id=p_project_id;
6275 
6276         l_prj_currency_code      VARCHAR2(120);
6277         --bug 4308359, end
6278 
6279 
6280 BEGIN
6281   x_return_status := FND_API.G_RET_STS_SUCCESS ;
6282 
6283   Select TASK_WEIGHT_BASIS_CODE
6284   INTO   l_TASK_WEIGHT_BASIS_CODE
6285   From   pa_proj_progress_attr
6286   Where  Project_ID     = p_project_id
6287   AND    Structure_type = p_structure_type;
6288 
6289     If l_TASK_WEIGHT_BASIS_CODE = 'EFFORT' then
6290        l_Planned_Amount    := p_Planned_Effort;
6291        l_Actual_Amount     := p_Actual_Effort;
6292        l_Baseline_Amount   := p_baselined_Effort;
6293 
6294     ELSE
6295        l_Planned_Amount    := p_Planned_Cost;
6296        l_Actual_Amount     := p_Actual_Cost;
6297        l_Baseline_Amount   := p_baselined_Cost;
6298 
6299        OPEN cur_proj_curr;
6300        FETCH  cur_proj_curr INTO l_prj_currency_code;
6301        CLOSE cur_proj_curr;
6302 
6303     End if;
6304 
6305     -- Progress Management Changes. Bug # 3420093.
6306 
6307     /* Begin fix for Bug # 4050324. */
6308 
6309     -- x_BCWP := trunc((l_Planned_Amount*P_Overide_Percent_Complete)/100,2);
6310 
6311     --bug 4308359
6312     --x_BCWP := trunc((l_Baseline_Amount*P_Overide_Percent_Complete)/100,2);
6313      If l_TASK_WEIGHT_BASIS_CODE = 'EFFORT' then
6314         x_BCWP := round((l_Baseline_Amount*P_Overide_Percent_Complete)/100,5);
6315      else
6316         --x_BCWP := pa_currency.round_trans_currency_amt((l_Baseline_Amount*P_Overide_Percent_Complete)/100, l_prj_currency_code);
6317         x_BCWP := pa_currency.round_trans_currency_amt1((l_Baseline_Amount*P_Overide_Percent_Complete)/100, l_prj_currency_code);
6318      end if;
6319 
6320     /* End fix for Bug # 4050324. */
6321 
6322     -- Progress Management Changes. Bug # 3420093.
6323 
6324     --Select (l_Planned_Amount*P_Overide_Percent_Complete)/100
6325     /*
6326     INTO   x_BCWP  -- Earned Value
6327     From   PA_Progress_Rollup
6328     Where  Project_ID       = P_Project_ID
6329     AND    Proj_Element_ID  = P_Proj_Element_ID
6330     AND    object_id = P_Proj_Element_ID
6331     --AND    Object_Type        = 'PA_ASSIGNMENTS'
6332     AND    As_Of_Date       = p_As_Of_Date
6333     AND    Structure_type   = p_structure_type;*/
6334 
6335 
6336     /* 3793758 */
6337     OPEN cur_sch_dates;
6338     FETCH cur_sch_dates INTO l_sch_start_date, l_sch_finish_date;
6339     CLOSE cur_sch_dates;
6340 
6341     OPEN cur_str_ver_id;
6342     FETCH cur_str_ver_id into l_str_ver_id;
6343     CLOSE cur_str_ver_id;
6344 
6345     -- Begin: Fix for Bug # 3926529.
6346 
6347     /* Begin commenting out the following code.
6348     l_bcws := pa_progress_utils.get_bcws(p_project_id => p_project_id
6349                             ,p_object_id => p_proj_element_id
6350                             ,p_proj_element_id => p_proj_element_id
6351                             ,p_as_of_date => p_as_of_date
6352                             ,p_structure_version_id => l_str_ver_id
6353                             ,p_structure_type => p_structure_type
6354                             ,p_scheduled_start_date =>l_sch_start_date
6355                             ,p_scheduled_end_date => l_sch_finish_date
6356                               );
6357     End commenting out the above code. */
6358 
6359      -- Get baselined dates.
6360 
6361         OPEN cur_baselined_dates;
6362         FETCH cur_baselined_dates INTO l_base_start_date, l_base_finish_date;
6363         CLOSE cur_baselined_dates;
6364 
6365 
6366      -- Call API: pa_progress_utils.get_bcws() with baselined dates.
6367 
6368     l_bcws := pa_progress_utils.get_bcws(p_project_id => p_project_id
6369                                         ,p_object_id => p_proj_element_id
6370                                         ,p_proj_element_id => p_proj_element_id
6371                                         ,p_as_of_date => p_as_of_date
6372                                         ,p_structure_version_id => l_str_ver_id
6373                                         ,p_structure_type => p_structure_type
6374                                         ,p_scheduled_start_date =>l_base_start_date
6375                                         ,p_scheduled_end_date => l_base_finish_date);
6376 
6377      -- End: Fix for Bug # 3926529.
6378 
6379     --bug 4308359
6380         --x_bcws := trunc(nvl(l_bcws,0),2);
6381         x_bcws := nvl(l_bcws,0);
6382 
6383     if l_BCWS is null or l_BCWS = 0
6384     then
6385        l_bcws := 1;
6386     else
6387        l_bcws := l_BCWS;
6388     end if;
6389 
6390     -- Progress Management Changes. Bug # 3420093.
6391     --bug 4308359
6392     --X_SCH_Performance_Index    := trunc((x_BCWP / l_BCWS),2);
6393     X_SCH_Performance_Index      := round((x_BCWP / l_BCWS),2);
6394 
6395    -- Progress Management Changes. Bug # 3420093.
6396 
6397     if X_SCH_Performance_Index = 0 or X_SCH_Performance_Index = null
6398     then
6399        l_SCH_Performance_Index := 1;
6400     else
6401        l_SCH_Performance_Index := X_SCH_Performance_Index;
6402     end if;
6403 
6404 	-- bpottipa modified for bug 10143145 - start
6405     -- Cost Performance Index (CPI) = Earned Value / Actual Cost
6406     -- So if actual cost is 0, then CPI should be null.
6407     if l_Actual_Amount is null or l_Actual_Amount = 0
6408     then
6409         l_Actual_Amount := 1;
6410 		X_COST_Performance_Index 	 := null;
6411     else
6412         l_Actual_Amount := l_Actual_Amount;
6413 		X_COST_Performance_Index 	 := round((x_BCWP/l_Actual_Amount),2);
6414     end if;
6415 	-- bpottipa modified for bug 10143145 - end
6416 
6417     -- Progress Management Changes. Bug # 3420093.
6418     --bug 4308359
6419     --X_COST_Performance_Index   := trunc((x_BCWP/l_Actual_Amount),2);
6420 
6421     -- Progress Management Changes. Bug # 3420093.
6422 
6423     if p_task_version_id is not null
6424     then
6425       /*select
6426       scheduled_start_date+((scheduled_finish_date-scheduled_start_date)/l_SCH_Performance_Index)
6427       into x_Sch_At_Completion
6428       from pa_proj_elem_ver_schedule
6429        where project_id = p_project_id
6430       and proj_element_id = p_proj_element_id
6431       and element_version_id = p_task_version_id;
6432       */
6433 
6434     /* Bug # 3861344: Modified API: recalculate_prog_stats(). */
6435 
6436     -- x_Sch_At_Completion := l_sch_start_date+((l_sch_finish_date-l_sch_start_date)/l_SCH_Performance_Index);
6437 
6438     -- Get baselined dates.
6439 
6440     OPEN cur_baselined_dates;
6441     FETCH cur_baselined_dates INTO l_base_start_date, l_base_finish_date;
6442     CLOSE cur_baselined_dates;
6443 
6444     -- Calculate schedule at completion.
6445 
6446     x_Sch_At_Completion := pa_progress_utils.return_start_end_date(l_sch_start_date,l_base_start_date,p_project_id,p_proj_element_id,'PA_TASKS','S')
6447                 +((pa_progress_utils.return_start_end_date(l_sch_finish_date,l_base_finish_date,p_project_id,p_proj_element_id,'PA_TASKS','E')
6448                 -pa_progress_utils.return_start_end_date(l_sch_start_date,l_base_start_date,p_project_id,p_proj_element_id,'PA_TASKS','S'))
6449                 /l_SCH_Performance_Index);
6450 
6451     end if;
6452 
6453     l_tcpi_denom := l_Baseline_Amount-l_Actual_Amount;
6454 
6455     if l_tcpi_denom is null or l_tcpi_denom = 0
6456     then
6457         l_tcpi_denom := 1;
6458     end if;
6459 
6460     -- Progress Management Changes. Bug # 3420093.
6461     --bug 4308359
6462     --x_Complete_Performance_Index := trunc(((l_Baseline_Amount- x_BCWP)/l_tcpi_denom),2);
6463     x_Complete_Performance_Index := round(((l_Baseline_Amount- x_BCWP)/l_tcpi_denom),2);
6464 
6465     -- Progress Management Changes. Bug # 3420093.
6466 
6467   EXCEPTION WHEN OTHERS THEN
6468       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6469       x_Msg_Count     := 1;  -- 4537865 Corrected as '1' .Earlier it was defined as '0'
6470       x_Msg_Data      :=  SUBSTRB(SQLERRM,1,120) ; -- 4537865 : Corrected as err message stack .Earlier it was ''
6471       fnd_msg_pub.add_exc_msg( p_pkg_name       => 'PA_PROGRESS_UTILS'
6472                   ,p_procedure_name => 'RECALCULATE_PROG_STATS'
6473                   ,p_error_text     => SUBSTRB(SQLERRM,1,120));
6474 
6475       -- 4537865
6476       x_BCWS                       := 0 ;
6477       X_BCWP                       := 0 ;
6478       X_SCH_Performance_Index      := 0 ;
6479       X_COST_Performance_Index     := 0 ;
6480       x_Sch_At_Completion          := NULL ;
6481       x_Complete_Performance_Index := 0 ;
6482      -- 4537865
6483 
6484     RAISE FND_API.G_EXC_ERROR;
6485 END RECALCULATE_PROG_STATS;
6486 
6487 -- Bug 3879461 : This function is not used
6488 Procedure DEF_DATES_FROM_RESOURCES (
6489     p_project_id        IN NUMBER
6490    ,p_proj_element_id       IN NUMBER
6491    ,p_structure_type        IN VARCHAR2 DEFAULT 'WORKPLAN'
6492    ,p_As_Of_Date        IN DATE
6493    ,x_Actual_Start_Date     OUT NOCOPY DATE --File.Sql.39 bug 4440895
6494    ,x_Actual_Finish_Date    OUT NOCOPY DATE --File.Sql.39 bug 4440895
6495    ,x_Estimated_Start_Date  OUT NOCOPY DATE --File.Sql.39 bug 4440895
6496    ,x_Estimated_Finish_Date OUT NOCOPY DATE --File.Sql.39 bug 4440895
6497    ,x_return_status             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6498    ,x_msg_count                 OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6499    ,x_msg_data                  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6500 )
6501 IS
6502   Cursor CUR_Est_Sch_Dates
6503     IS
6504     Select MIN(Estimated_Start_Date), MAX(Estimated_Finish_Date), MIN(Actual_Start_Date), MAX(Actual_Finish_Date)
6505     FROM   PA_Progress_Rollup
6506     Where  Project_ID       = P_Project_ID
6507     AND    Proj_Element_ID  = P_Proj_Element_ID
6508     AND    Object_Type      = 'PA_ASSIGNMENTS'
6509     AND    As_Of_Date       = p_As_Of_Date
6510     AND    Structure_type   = p_structure_type;
6511 
6512 BEGIN
6513   x_return_status := FND_API.G_RET_STS_SUCCESS ;
6514 
6515   Open CUR_Est_Sch_Dates;
6516   FETCH CUR_Est_Sch_Dates Into
6517     x_Estimated_Start_Date, x_Estimated_Finish_Date, x_Actual_Start_Date, x_Actual_Finish_Date;
6518   Close CUR_Est_Sch_Dates;
6519 
6520   EXCEPTION WHEN OTHERS THEN
6521       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6522       x_Msg_Count     := 1; -- 4537865 Changed from 0 to 1.
6523       x_Msg_Data      :=  SUBSTRB(SQLERRM,1,120); -- 4537865 Changed from '' to   SUBSTRB(SQLERRM,1,120)
6524 
6525    -- 4537865
6526    x_Actual_Start_Date         := NULL ;
6527    x_Actual_Finish_Date        := NULL ;
6528    x_Estimated_Start_Date      := NULL ;
6529    x_Estimated_Finish_Date     := NULL ;
6530   -- 4537865
6531 
6532       fnd_msg_pub.add_exc_msg( p_pkg_name       => 'PA_PROGRESS_UTILS'
6533                   ,p_procedure_name => 'DEF_DATES_FROM_RESOURCES'
6534                   ,p_error_text     => x_msg_data);
6535     RAISE FND_API.G_EXC_ERROR;
6536 END DEF_DATES_FROM_RESOURCES;
6537 
6538 --- End of addding new APIs
6539 
6540 FUNCTION check_actuals_allowed (p_project_id     IN NUMBER
6541                                ,p_structure_type IN VARCHAR2 := 'WORKPLAN') RETURN VARCHAR2
6542 IS
6543     l_return_value VARCHAR2(1) := null;
6544 BEGIN
6545 
6546     select remain_effort_enable_flag
6547     into l_return_value
6548     from pa_proj_progress_attr
6549     where project_id = p_project_id
6550     and structure_type = p_structure_type;
6551 
6552     return(l_return_value);
6553 
6554 END check_actuals_allowed;
6555 
6556 -- Progress Management Changes. Bug # 3420093.
6557 
6558 FUNCTION get_bcws (p_project_id                 IN NUMBER
6559                   ,p_object_id                  IN NUMBER
6560                   ,p_proj_element_id            IN NUMBER
6561                   ,p_as_of_date                 IN DATE
6562                   ,p_structure_version_id       IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6563                   ,p_rollup_method              IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6564                   ,p_scheduled_start_date       IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
6565                   ,p_scheduled_end_date         IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
6566           ,p_prj_currency_code          IN VARCHAR2 := null           --bug 3824042
6567           ,p_structure_type             IN VARCHAR2 := 'WORKPLAN'   --maansari4/10
6568           ) RETURN NUMBER
6569 IS
6570     l_return_bcws NUMBER := null;
6571     l_multiplier  NUMBER := 0;
6572     l_rollup_method VARCHAR2(15) := null;
6573 
6574 -- Progress Management Changes. Bug # 3420093.
6575 
6576     cursor c1 (p_project_id NUMBER, p_object_id NUMBER) is
6577     select pppa.task_weight_basis_code
6578     from pa_proj_progress_attr pppa
6579     where pppa.project_id = p_project_id
6580     and pppa.structure_type = p_structure_type;
6581 
6582     cursor c2 (p_project_id NUMBER, p_proj_element_id NUMBER, p_structure_version_id NUMBER) is
6583     select
6584         /*+ INDEX(pji_fm_xbs_accum_tmp1 pji_fm_xbs_accum_tmp1_n1)*/ -- Fix for Bug # 4162534.
6585         nvl(pfxat.BASE_LABOR_HOURS,pfxat.labor_hours) labor_hours
6586            ,nvl(pfxat.BASE_EQUIP_HOURS,pfxat.equipment_hours) equipment_hours
6587            ,nvl(pfxat.PRJ_BASE_BRDN_COST,pfxat.prj_brdn_cost) prj_brdn_cost
6588     from pji_fm_xbs_accum_tmp1 pfxat
6589     where pfxat.struct_version_id = p_structure_version_id
6590     and pfxat.project_id = p_project_id
6591     and pfxat.project_element_id = p_proj_element_id
6592     and pfxat.plan_version_id > 0
6593     AND pfxat.txn_currency_code is null    --bug no. 3646988
6594     and pfxat.calendar_type  = 'A';
6595 
6596     c1rec c1%rowtype;
6597     c2rec c2%rowtype;
6598 
6599         --bug 3908112
6600     CURSOR cur_proj_curr
6601     IS
6602       SELECT project_currency_code from pa_projects_all where project_id=p_project_id;
6603 
6604         l_prj_currency_code      VARCHAR2(120);
6605         --end bug 3908112
6606 
6607         -- Begin: Fix for Bug # 3926529.
6608 
6609         cursor cur_baselined_dates is
6610         select ppe.baseline_start_date, ppe.baseline_finish_date
6611         from pa_proj_elements ppe
6612         where ppe.project_id = p_project_id
6613         and ppe.proj_element_id = p_proj_element_id;
6614 
6615         cursor cur_scheduled_dates is
6616         select ppevs.scheduled_start_date, ppevs.scheduled_finish_date
6617         from pa_proj_elem_ver_schedule ppevs
6618         where ppevs.project_id = p_project_id
6619         and ppevs.proj_element_id = p_proj_element_id
6620         and ppevs.element_version_id = (select ppev.element_version_id
6621                                         from pa_proj_element_versions ppev
6622                                         where ppev.project_id = p_project_id
6623                                         and ppev.proj_element_id = p_proj_element_id
6624                                         and ppev.parent_structure_version_id = p_structure_version_id);
6625         l_start_date    DATE;
6626 
6627         l_end_date      DATE;
6628 
6629         -- End: Fix for Bug # 3926529.
6630 
6631 BEGIN
6632 /* Addition for bug 6156686 */
6633 /* Commeted for bug 6664716
6634     IF NVL(l_bcws_project_id,-1)               =  NVL(p_project_id,-1)                AND
6635      NVL(l_bcws_object_id,-1)                  =  NVL(p_object_id,-1)                 AND
6636      NVL(l_bcws_proj_element_id,-1)            =  NVL(p_proj_element_id,-1)           AND
6637      NVL(l_bcws_as_of_date,sysdate)            =  NVL(p_as_of_date,sysdate)           AND
6638      NVL(l_bcws_structure_version_id,-1)       =  NVL(p_structure_version_id,-1)      AND
6639      NVL(l_bcws_rollup_method,'-99')           =  NVL(p_rollup_method,'-99')          AND
6640      NVL(l_bcws_scheduled_start_date,sysdate)  =  NVL(p_scheduled_start_date,sysdate) AND
6641      NVL(l_bcws_scheduled_end_date,sysdate)    =  NVL(p_scheduled_end_date,sysdate)   AND
6642      NVL(l_bcws_prj_currency_code,'-99')       =  NVL(p_prj_currency_code,'-99')      AND
6643      NVL(l_bcws_structure_type,'-99')          =  NVL(p_structure_type,'-99') THEN
6644 
6645         RETURN l_bcws_value;
6646 
6647     ELSE
6648 
6649         l_bcws_project_id            := p_project_id          ;
6650         l_bcws_object_id             := p_object_id           ;
6651         l_bcws_proj_element_id       := p_proj_element_id     ;
6652         l_bcws_as_of_date            := p_as_of_date          ;
6653         l_bcws_structure_version_id  := p_structure_version_id;
6654         l_bcws_rollup_method         := p_rollup_method       ;
6655         l_bcws_scheduled_start_date  := p_scheduled_start_date;
6656         l_bcws_scheduled_end_date    := p_scheduled_end_date  ;
6657         l_bcws_prj_currency_code     := p_prj_currency_code   ;
6658         l_bcws_structure_type        := p_structure_type      ;
6659 
6660     END IF;
6661 */
6662 
6663     open c2(p_project_id,p_proj_element_id,p_structure_version_id);
6664     fetch c2 into c2rec;
6665     close c2;
6666 
6667     --bug  6664716
6668     IF p_project_id <> l_prv_bcws_project_id OR
6669        p_structure_version_id <> l_prv_bcws_struc_ver_id
6670     THEN
6671        get_plan_value(p_project_id,p_structure_version_id,p_proj_element_id,p_as_of_date );
6672     END IF;
6673     --bug  6664716
6674 
6675     if (p_rollup_method IS NOT NULL and p_rollup_method <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) then
6676 
6677         if p_rollup_method = 'EFFORT' then
6678                 --bug 3824042
6679                     --l_return_bcws := trunc((nvl(c2rec.labor_hours,0)+nvl(c2rec.equipment_hours,0)),2);
6680 
6681       --Start Changes for Bug 6664716
6682       IF l_bcws_hash_tbl.exists('PA'||p_proj_element_id) THEN
6683         l_return_bcws := nvl(l_bcws_hash_tbl('PA'||p_proj_element_id).labor_hrs,0)
6684                     +nvl(l_bcws_hash_tbl('PA'||p_proj_element_id).equip_hrs,0);
6685       ELSE
6686         l_return_bcws := nvl(c2rec.labor_hours,0)+nvl(c2rec.equipment_hours,0);
6687       END IF;
6688       l_rollup_method := 'EFFORT';
6689       --End Changes for Bug 6664716
6690 
6691                 else
6692                 --bug 3824042
6693                         --l_return_bcws := trunc(nvl(c2rec.prj_brdn_cost,0),2);
6694 
6695       --Start Changes for Bug 6664716
6696       IF l_bcws_hash_tbl.exists('PA'||p_proj_element_id) THEN
6697         l_return_bcws := nvl(l_bcws_hash_tbl('PA'||p_proj_element_id).prj_brdn_cost,0);
6698       ELSE
6699         l_return_bcws := nvl(c2rec.prj_brdn_cost,0);
6700       END IF;
6701       --End Changes for Bug 6664716
6702 
6703                 end if;
6704     else
6705         open c1(p_project_id,p_object_id);
6706             fetch c1 into c1rec;
6707         close c1;
6708 
6709                 if c1rec.task_weight_basis_code = 'EFFORT' then
6710                 --bug 3824042
6711                     --l_return_bcws := trunc((nvl(c2rec.labor_hours,0)+nvl(c2rec.equipment_hours,0)),2);
6712 
6713         --Start Changes for Bug 6664716
6714         IF l_bcws_hash_tbl.exists('PA'||p_proj_element_id) THEN
6715           l_return_bcws := nvl(l_bcws_hash_tbl('PA'||p_proj_element_id).labor_hrs,0)
6716                         +nvl(l_bcws_hash_tbl('PA'||p_proj_element_id).equip_hrs,0);
6717         ELSE
6718           l_return_bcws := nvl(c2rec.labor_hours,0)+nvl(c2rec.equipment_hours,0);
6719         END IF;
6720         --End Changes for Bug 6664716
6721 
6722             l_rollup_method := 'EFFORT';
6723                 else
6724                 --bug 3824042
6725                         --l_return_bcws := trunc(nvl(c2rec.prj_brdn_cost,0),2);
6726               --Start Changes for Bug 6664716
6727               IF l_bcws_hash_tbl.exists('PA'||p_proj_element_id) THEN
6728                 l_return_bcws := nvl(l_bcws_hash_tbl('PA'||p_proj_element_id).prj_brdn_cost,0);
6729               ELSE
6730                 l_return_bcws := nvl(c2rec.prj_brdn_cost,0);
6731               END IF;
6732               --End Changes for Bug 6664716
6733                 end if;
6734     end if;
6735 
6736         -- This if condition will be used when period typd is non timephased then the calcualtion of planned value is done
6737         -- in the same way as done previosly.
6738         IF l_bcws_hash_tbl.exists('PA'||p_proj_element_id) THEN
6739           NULL;
6740   ELSE
6741 
6742         -- Begin: Fix for Bug # 3926529.
6743 
6744         -- If input dates are not null use the input dates.
6745 
6746         if (p_scheduled_start_date is not null) and (p_scheduled_end_date is not null) then
6747 
6748                 l_start_date := p_scheduled_start_date;
6749 
6750                 l_end_date := p_scheduled_end_date;
6751         else
6752 
6753          -- If input dates are null use the baselined dates.
6754 
6755                 open cur_baselined_dates;
6756 
6757                 fetch cur_baselined_dates into l_start_date, l_end_date;
6758 
6759                 -- If baselined dates do not exist then use the scheduled dates.
6760 
6761                 if cur_baselined_dates%notfound OR (l_start_date is null and l_end_date is null) then  ----5478084
6762 
6763                         open cur_scheduled_dates;
6764 
6765                         fetch cur_scheduled_dates into l_start_date, l_end_date;
6766 
6767                         close cur_scheduled_dates;
6768 
6769                 end if;
6770 
6771                 close cur_baselined_dates;
6772         end if;
6773 
6774         -- Determine the multiplier using the above dates.
6775     -- Bug 4587056 : if l_start_date - p_as_of_date is 0 then multiplier should be 1 instead of 0
6776     /* bug 5478084 if l_start_date - p_as_of_date is 0 then multiplier should be 1/duration
6777         if ((l_start_date - p_as_of_date) = 0) then
6778 
6779                 l_multiplier := 1; */
6780 
6781         if ((l_start_date - p_as_of_date) > 0) then
6782 
6783                 l_multiplier := 0;
6784 
6785         elsif ((p_as_of_date - l_end_date) >= 0) then
6786 
6787                 l_multiplier := 1;
6788 
6789         elsif (nvl((l_end_date - l_start_date),0) > 0) then
6790 
6791                 --bug# 3825683, Satish
6792                 --l_multiplier := trunc((nvl((p_as_of_date - l_start_date),0)/
6793                 --              nvl((l_end_date - l_start_date),0)),2);
6794                 l_multiplier := nvl((trunc(p_as_of_date) - trunc(l_start_date)+1),0)/
6795                                 nvl((trunc(l_end_date) - trunc(l_start_date)+1),1); --bug 6058342
6796         end if;
6797 
6798         /* Begin commenting out the following code
6799 
6800     if ((p_scheduled_start_date - p_as_of_date) >= 0) then
6801 
6802         l_multiplier := 0;
6803 
6804     elsif ((p_as_of_date - p_scheduled_end_date) >= 0) then
6805 
6806         l_multiplier := 1;
6807 
6808     elsif (nvl((p_scheduled_end_date - p_scheduled_start_date),0) > 0) then
6809 
6810         --bug# 3825683, Satish
6811         --l_multiplier := trunc((nvl((p_as_of_date - p_scheduled_start_date),0)/
6812         --      nvl((p_scheduled_end_date - p_scheduled_start_date),0)),2);
6813         l_multiplier := nvl((trunc(p_as_of_date) - trunc(p_scheduled_start_date)+1),0)/
6814                 nvl((trunc(p_scheduled_end_date) - trunc(p_scheduled_start_date)+1),0);
6815     end if;
6816 
6817         End commenting out the above code. */
6818 
6819         -- End: Fix for Bug # 3926529.
6820 
6821 -- Progress Management Changes. Bug # 3420093.
6822 
6823     l_return_bcws := l_return_bcws * l_multiplier;
6824 
6825         END IF; -- _bcws_hash_tbl.exists('PA'||p_proj_element_id)
6826 
6827     --bug 3824042, start
6828     if (l_rollup_method = 'EFFORT')
6829     THEN
6830         l_return_bcws := round(l_return_bcws, 5);
6831     ELSE
6832 
6833             --bug 3908112
6834             if p_prj_currency_code is null
6835             then
6836                OPEN cur_proj_curr;
6837                FETCH  cur_proj_curr INTO l_prj_currency_code;
6838                CLOSE cur_proj_curr;
6839             else
6840                l_prj_currency_code := p_prj_currency_code;
6841             end if;
6842               l_return_bcws := pa_currency.round_trans_currency_amt1(l_return_bcws, l_prj_currency_code);
6843             --l_return_bcws := pa_currency.round_trans_currency_amt(l_return_bcws, l_prj_currency_code);
6844         --l_return_bcws := pa_currency.round_trans_currency_amt(l_return_bcws, p_prj_currency_code);
6845             --end bug 3908112
6846 
6847     END IF;
6848     --bug 3824042, end
6849     l_bcws_value := l_return_bcws; -- Added for bug 6339381
6850     return(l_return_bcws);
6851 
6852 END get_bcws;
6853 
6854 FUNCTION get_latest_ass_prog_date(p_project_id          IN      NUMBER
6855                                  ,p_structure_type      IN      VARCHAR2
6856                                  ,p_object_id           IN      NUMBER
6857                                  ,p_object_type         IN      VARCHAR2
6858          ,p_task_id IN  NUMBER := null /* Modified for IB4 Progress CR. */) RETURN DATE
6859 IS
6860     l_return_date   DATE;
6861 BEGIN
6862 
6863     select max(date_computed)
6864     into l_return_date
6865     from pa_percent_completes ppc
6866     where ppc.project_id = p_project_id
6867     and ppc.structure_type = p_structure_type
6868     and ppc.object_id = p_object_id
6869     and ppc.object_type = p_object_type
6870     and ppc.task_id = nvl(p_task_id, p_object_id) /* Modified for IB4 Progress CR. */;
6871 
6872     return(l_return_date);
6873 
6874 END get_latest_ass_prog_date;
6875 
6876 FUNCTION get_resource_list_id ( p_resource_list_member_id NUMBER) RETURN NUMBER IS
6877      CURSOR cur_res_list_id
6878      IS
6879       SELECT resource_list_id
6880         FROM pa_resource_list_members
6881        WHERE resource_list_member_id = p_resource_list_member_id ;
6882 
6883     l_resource_list_id    NUMBER;
6884 BEGIN
6885      OPEN cur_res_list_id;
6886      FETCH cur_res_list_id INTO l_resource_list_id;
6887      CLOSE cur_res_list_id;
6888      RETURN l_resource_list_id;
6889 END get_resource_list_id;
6890 
6891 function get_max_rollup_asofdate2(p_project_id   IN  NUMBER,
6892                                  p_object_id    IN  NUMBER,
6893                                  p_object_type  IN  VARCHAR2,
6894                  p_structure_type IN VARCHAR2 := 'WORKPLAN', -- FPM Dev CR 3
6895                  p_structure_version_id IN NUMBER := NULL -- FPM Dev CR 4
6896                  ,p_proj_element_id IN NUMBER  := null /* Modified for IB4 Progress CR. */
6897                                  ) return date is
6898 l_rollup_date   date;
6899 CURSOR cur_rollupdate
6900 IS
6901            select max(as_of_date)
6902              from pa_progress_rollup
6903             where project_id = p_project_id
6904               and object_id = p_object_id
6905               and object_type = p_object_type
6906           and structure_type = p_structure_type -- FPM Dev CR 4
6907           and ((p_structure_version_id is null AND structure_version_id is null) OR (p_structure_version_id is not null AND structure_version_id = p_structure_version_id)) -- FPM Dev CR 4
6908 
6909 --              and NVL(proj_element_id,-1) = DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_proj_element_id,NVL(proj_element_id,-1)),NVL(p_proj_element_id, p_object_id)) /* Amit : Modified for IB4 Progress CR. */
6910 --  Commented out to fix Bug # 4243074.
6911 
6912 -- Begin fix for Bug # 4243074.
6913 
6914 and NVL(proj_element_id,-1) = DECODE(p_structure_type, 'FINANCIAL'
6915                                                      , DECODE(p_object_type, 'PA_STRUCTURES'
6916                                                                            , 0
6917                                                                            , (DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_proj_element_id,NVL(proj_element_id,-1)),NVL(p_proj_element_id, p_object_id))))
6918                                                      ,(DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_proj_element_id,NVL(proj_element_id,-1)),NVL(p_proj_element_id, p_object_id))))
6919 
6920 -- End fix for Bug # 4243074.
6921 
6922           and current_flag <> 'W' -- Bug 3879461
6923          -- and proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
6924           ;
6925 begin
6926 
6927    OPEN cur_rollupdate;
6928    FETCH cur_rollupdate INTO l_rollup_date;
6929    CLOSE cur_rollupdate;
6930 
6931 return l_rollup_date;
6932 
6933 exception when others then
6934   return null;
6935 end get_max_rollup_asofdate2;
6936 
6937 procedure set_prog_as_of_Date(p_project_id   IN NUMBER,
6938                               p_task_id      IN NUMBER,
6939                               p_as_of_date   IN DATE default to_date(null),
6940                   p_object_id    IN NUMBER := null, -- Bug 3974627
6941                   p_object_type  IN VARCHAR2 := 'PA_TASKS' -- Bug 3974627
6942                   ) IS
6943 BEGIN
6944     if p_as_of_date is null then
6945     IF p_object_type = 'PA_TASKS' THEN
6946            G_prog_as_of_date := get_prog_dt_closest_to_sys_dt(p_project_id => p_project_id,
6947                          p_task_id    => p_task_id);
6948     ELSE  -- Bug 3974627 : Added ELSE and call of get_prog_dt_closest_to_sys_dt
6949            G_prog_as_of_date := get_prog_dt_closest_to_sys_dt(p_project_id => p_project_id,
6950                          p_task_id    => p_task_id,
6951                          p_object_id => p_object_id,
6952                          p_object_type => p_object_type);
6953     END IF;
6954     else
6955        G_prog_as_of_date := p_as_of_date;
6956     end if;
6957 
6958 exception when others then
6959     null;
6960 END set_prog_as_of_Date;
6961 
6962 function get_prog_asofdate return date is
6963 begin
6964   return pa_progress_utils.g_prog_as_of_date;
6965 end get_prog_asofdate;
6966 
6967 
6968 --The following api is used to render cost region on Task progress Details -summary page
6969 --bug  4085786, start
6970 /*function check_workplan_cost ( p_project_id   NUMBER)  RETURN VARCHAR2 IS
6971 
6972   l_workplan_cost   VARCHAR2(1) := 'Y';
6973   l_labor_cost_flag VARCHAR2(1) := 'Y';
6974 BEGIN
6975 
6976   l_labor_cost_flag := PA_SECURITY.view_labor_costs(p_project_id);
6977   l_workplan_cost := Pa_Fp_wp_gen_amt_utils.get_wp_track_cost_amt_flag(p_project_id);
6978 
6979   --return 'N' if any of the cost is allowed.
6980 
6981   IF l_labor_cost_flag <> 'Y' OR l_workplan_cost <> 'Y'
6982   THEN
6983      return 'N';
6984   ELSE
6985      return 'Y';
6986   END IF;
6987 END check_workplan_cost;*/
6988 
6989 function check_workplan_cost ( p_project_id IN NUMBER,
6990                    p_task_id    IN NUMBER   := NULL,
6991                    p_object_id  IN NUMBER   := NULL,
6992                    p_object_type    IN VARCHAR2 := 'PA_TASKS',
6993                    p_structure_version_id IN NUMBER := NULL
6994                  )  RETURN VARCHAR2 IS
6995 
6996   l_workplan_cost   VARCHAR2(1) := 'Y';
6997   l_labor_cost_flag VARCHAR2(1) := 'Y';
6998   l_person_id       NUMBER;             -- Added for Bug 3964394
6999 
7000   CURSOR c_assgmt_count IS
7001   SELECT count(*) FROM pa_task_asgmts_v
7002   WHERE project_id = p_project_id
7003   AND   task_id  = p_task_id
7004   AND   structure_version_id = p_structure_version_id
7005   AND   ta_display_flag = 'Y';
7006 
7007   CURSOR c_get_task_res_class_code IS
7008   SELECT resource_class_code FROM pa_task_asgmts_v
7009   WHERE project_id = p_project_id
7010   AND   task_id  = p_task_id
7011   AND   structure_version_id = p_structure_version_id
7012   AND   ta_display_flag = 'Y';
7013 
7014   CURSOR c_get_res_class_code IS
7015   SELECT resource_class_code, ta_display_flag FROM pa_task_asgmts_v
7016   WHERE project_id = p_project_id
7017   AND   task_id  = p_task_id
7018   AND   resource_list_member_id = p_object_id
7019   AND   structure_version_id = p_structure_version_id;
7020 
7021   l_tot_assgmts  NUMBER;
7022   l_res_class_code VARCHAR2(20);
7023   l_ta_display_flag VARCHAR2(1);
7024 BEGIN
7025 
7026 
7027   --l_labor_cost_flag := PA_SECURITY.view_labor_costs(p_project_id);   /* Commented for Bug 3964394 */
7028 
7029   /* Start Bug 3964394 - Changed the function call from view_labor_costs to check_labor_cost_access */
7030   IF ( FND_GLOBAL.USER_ID IS NOT NULL ) THEN
7031      l_person_id := pa_utils.GetEmpIdFromUser( FND_GLOBAL.USER_ID );
7032      l_labor_cost_flag := PA_SECURITY.check_labor_cost_access(l_person_id, p_project_id);
7033   ELSE
7034      l_labor_cost_flag := 'N';       -- In case the user_id is null then don't show the region.
7035   END IF;
7036   /* End Bug 3964394 */
7037 
7038   l_workplan_cost := Pa_Fp_wp_gen_amt_utils.get_wp_track_cost_amt_flag(p_project_id);
7039 
7040   IF l_workplan_cost <> 'Y'
7041   THEN
7042     return 'N';
7043   END IF;
7044 
7045   IF p_task_id IS NULL
7046   THEN
7047     return l_labor_cost_flag;
7048   END IF;
7049 
7050   IF p_object_type = 'PA_TASKS'
7051   THEN
7052     OPEN c_assgmt_count;
7053     FETCH c_assgmt_count INTO l_tot_assgmts;
7054     CLOSE c_assgmt_count;
7055     IF l_tot_assgmts = 1
7056     THEN
7057         OPEN c_get_task_res_class_code;
7058         FETCH c_get_task_res_class_code INTO l_res_class_code;
7059         CLOSE c_get_task_res_class_code;
7060         IF l_res_class_code = 'PEOPLE'
7061         THEN
7062             return l_labor_cost_flag;
7063         ELSE
7064             return 'Y';
7065         END IF;
7066     ELSE
7067         return 'Y';
7068     END IF;
7069   ELSIF p_object_type = 'PA_ASSIGNMENTS'
7070   THEN
7071     OPEN c_get_res_class_code;
7072     FETCH c_get_res_class_code INTO l_res_class_code, l_ta_display_flag;
7073     CLOSE c_get_res_class_code;
7074 
7075     IF l_res_class_code = 'PEOPLE' AND l_ta_display_flag = 'Y'
7076     THEN
7077         return l_labor_cost_flag;
7078     ELSE
7079         return 'Y';
7080     END IF;
7081   END IF;
7082 
7083 END check_workplan_cost;
7084 --bug  4085786, end
7085 
7086 -- Progress Management Changes. Bug # 3420093.
7087 
7088 procedure get_actuals_for_task(p_project_id             IN      NUMBER
7089                               ,p_wp_task_id             IN      NUMBER
7090                   ,p_res_list_mem_id        IN      NUMBER
7091                               ,p_as_of_date             IN      DATE
7092                               ,x_planned_work_qty       OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7093                               ,x_actual_work_qty        OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7094                               ,x_ppl_act_cost_pc        OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7095                               ,x_eqpmt_act_cost_pc      OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7096                               ,x_oth_act_cost_pc        OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7097                               ,x_ppl_act_cost_fc        OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7098                               ,x_eqpmt_act_cost_fc      OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7099                               ,x_oth_act_cost_fc        OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7100                   ,x_act_labor_effort   OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7101                   ,x_act_eqpmt_effort   OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7102                   ,x_unit_of_measure        OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7103                               ,x_txn_currency_code      OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7104                               ,x_ppl_act_cost_tc        OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7105                               ,x_eqpmt_act_cost_tc      OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7106                               ,x_oth_act_cost_tc        OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7107                               ,x_ppl_act_rawcost_pc        OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7108                               ,x_eqpmt_act_rawcost_pc      OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7109                               ,x_oth_act_rawcost_pc        OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7110                               ,x_ppl_act_rawcost_fc        OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7111                               ,x_eqpmt_act_rawcost_fc      OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7112                               ,x_oth_act_rawcost_fc        OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7113                               ,x_ppl_act_rawcost_tc        OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7114                               ,x_eqpmt_act_rawcost_tc      OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7115                               ,x_oth_act_rawcost_tc        OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7116                   ,x_oth_quantity          OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7117                               ,x_return_status          OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7118                               ,x_msg_count              OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7119                               ,x_msg_data               OUT     NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
7120 
7121 IS
7122 
7123 l_wp_task_id        NUMBER := NULL;
7124 l_wp_task_ver_id    NUMBER := NULL;
7125 
7126 l_wp_str_ver_id         NUMBER := NULL;
7127 
7128 l_return_status         VARCHAR2(1) := null;
7129 l_msg_count             NUMBER := null;
7130 l_msg_data              VARCHAR2(250) := null;
7131 
7132 cursor c1_task (p_project_id number, p_object_id number, p_as_of_date date) is
7133 select cumulative_work_quantity, ppl_act_cost_to_date_pc, eqpmt_act_cost_to_date_pc, oth_act_cost_to_date_pc,
7134 ppl_act_cost_to_date_fc, eqpmt_act_cost_to_date_fc, oth_act_cost_to_date_fc, ppl_act_effort_to_date,
7135 eqpmt_act_effort_to_date, ppl_act_cost_to_date_tc, eqpmt_act_cost_to_date_tc, oth_act_cost_to_date_tc,
7136 txn_currency_code, ppl_act_rawcost_to_date_pc, eqpmt_act_rawcost_to_date_pc, oth_act_rawcost_to_date_pc,
7137 ppl_act_rawcost_to_date_fc, eqpmt_act_rawcost_to_date_fc, oth_act_rawcost_to_date_fc,
7138 ppl_act_rawcost_to_date_tc, eqpmt_act_rawcost_to_date_tc, oth_act_rawcost_to_date_tc, oth_quantity_to_date
7139 from pa_progress_rollup ppr1
7140 where ppr1.project_id = p_project_id
7141 and ppr1.object_id = p_object_id
7142 and ppr1.structure_version_id is null
7143 AND ppr1.current_flag <> 'W'   -- Bug 3879461
7144 and ppr1.as_of_date = ( SELECT max(ppr2.as_of_date)
7145                      from pa_progress_rollup ppr2
7146                     WHERE ppr2.as_of_date <= p_as_of_date
7147                       AND ppr2.object_id = p_object_id
7148                       AND ppr2.project_id = p_project_id
7149                       and ppr2.structure_type = 'WORKPLAN'
7150                       AND ppr2.current_flag <> 'W'   -- Bug 3879461
7151                       and ppr2.structure_version_id is null
7152                    )
7153 and ppr1.structure_type = 'WORKPLAN'
7154 ;
7155 
7156 cursor c1_assgn (p_project_id number, p_object_id number, p_proj_element_id number, p_as_of_date date) is
7157 select cumulative_work_quantity, ppl_act_cost_to_date_pc, eqpmt_act_cost_to_date_pc, oth_act_cost_to_date_pc,
7158 ppl_act_cost_to_date_fc, eqpmt_act_cost_to_date_fc, oth_act_cost_to_date_fc, ppl_act_effort_to_date,
7159 eqpmt_act_effort_to_date, ppl_act_cost_to_date_tc, eqpmt_act_cost_to_date_tc, oth_act_cost_to_date_tc,
7160 txn_currency_code, ppl_act_rawcost_to_date_pc, eqpmt_act_rawcost_to_date_pc, oth_act_rawcost_to_date_pc,
7161 ppl_act_rawcost_to_date_fc, eqpmt_act_rawcost_to_date_fc, oth_act_rawcost_to_date_fc,
7162 ppl_act_rawcost_to_date_tc, eqpmt_act_rawcost_to_date_tc, oth_act_rawcost_to_date_tc, oth_quantity_to_date
7163 from pa_progress_rollup ppr1
7164 where ppr1.project_id = p_project_id
7165 and ppr1.object_id = p_object_id
7166 and ppr1.proj_element_id = p_proj_element_id
7167 and ppr1.structure_version_id is null
7168 AND ppr1.current_flag <> 'W'   -- Bug 3879461
7169 and ppr1.as_of_date = ( SELECT max(ppr2.as_of_date)
7170                      from pa_progress_rollup ppr2
7171                     WHERE ppr2.as_of_date <= p_as_of_date
7172                       AND ppr2.object_id = p_object_id
7173               AND ppr2.proj_element_id = p_proj_element_id
7174                       AND ppr2.project_id = p_project_id
7175                       and ppr2.structure_type = 'WORKPLAN'
7176                       AND ppr2.current_flag <> 'W'   -- Bug 3879461
7177                       and ppr2.structure_version_id is null
7178                    )
7179 and ppr1.structure_type = 'WORKPLAN'
7180 ;
7181 
7182 c1rec c1_task%rowtype;
7183 
7184 cursor c4(p_project_id number, p_proj_element_id number) is
7185 select wq_uom_code
7186 from pa_proj_elements
7187 where project_id = p_project_id
7188 and proj_element_id = p_proj_element_id;
7189 
7190 cursor c2(p_element_version_id NUMBER) is
7191 select proj_element_id
7192 from pa_proj_element_versions
7193 where element_version_id = p_element_version_id;
7194 
7195 cursor c3(p_project_id NUMBER, p_element_version_id NUMBER) is
7196 select wq_planned_quantity
7197 from pa_proj_elem_ver_schedule
7198 where project_id = p_project_id
7199 and element_version_id = p_element_version_id;
7200 
7201 
7202 cursor c1_proj_level IS
7203 select cumulative_work_quantity, ppl_act_cost_to_date_pc, eqpmt_act_cost_to_date_pc, oth_act_cost_to_date_pc,
7204 ppl_act_cost_to_date_fc, eqpmt_act_cost_to_date_fc, oth_act_cost_to_date_fc, ppl_act_effort_to_date,
7205 eqpmt_act_effort_to_date
7206 from pa_progress_rollup ppr1
7207 where ppr1.project_id = p_project_id
7208 and ppr1.object_type = 'PA_STRUCTURES'
7209 and ppr1.structure_version_id is null
7210 AND ppr1.current_flag <> 'W'   -- Bug 3879461
7211 and ppr1.as_of_date = ( SELECT max(ppr2.as_of_date)
7212                      from pa_progress_rollup ppr2
7213                     WHERE ppr2.as_of_date <= p_as_of_date
7214                       AND ppr2.object_type = 'PA_STRUCTURES'
7215                       AND ppr2.project_id = p_project_id
7216                       and ppr2.structure_type = 'WORKPLAN'
7217                       and ppr2.structure_version_id is null
7218                       AND ppr2.current_flag <> 'W'   -- Bug 3879461
7219                    )
7220 and ppr1.structure_type = 'WORKPLAN'
7221 ;
7222 
7223 /* Begin code to fix Bug # 4172372. */
7224 
7225 cursor cur_task_version(c_project_id NUMBER, c_wp_task_id NUMBER, c_wp_str_ver_id NUMBER) is
7226 select ppev.element_version_id
7227 from pa_proj_element_versions ppev
7228 where ppev.project_id = c_project_id
7229 and ppev.proj_element_id = c_wp_task_id
7230 and ppev.parent_structure_version_id = c_wp_str_ver_id;
7231 
7232 /* End code to fix Bug # 4172372. */
7233 
7234 BEGIN
7235     savepoint get_actuals_for_task;
7236 
7237     l_return_status := FND_API.G_RET_STS_SUCCESS;
7238 
7239 
7240     /* Begin commenting the following code as we are now accepting workplan task id's in the API.
7241 
7242     -- Get workplan task version id for finacial task id.
7243 
7244     IF p_fin_task_id IS NOT NULL THEN   --bug 3753042
7245 
7246     l_wp_task_ver_id := pa_progress_utils.wp_task_ver_id_for_fin_task_id(p_project_id,p_fin_task_id);
7247 
7248     -- Get workplan task id for workplan task version id.
7249 
7250     open c2(l_wp_task_ver_id);
7251     fetch c2 into l_wp_task_id;
7252     close c2;
7253 
7254     -- Get planned work quantity.
7255 
7256     open c3(p_project_id,l_wp_task_ver_id);
7257         fetch c3 into x_planned_work_qty;
7258         close c3;
7259 
7260     -- Get actuals for the workplan task.
7261 
7262     open c1(p_project_id,l_wp_task_id,l_wp_task_ver_id,p_as_of_date);
7263     fetch c1 into c1rec;
7264     close c1;
7265 
7266     ELSE  --get the project level data if financial task id is null  bug 3753042
7267 
7268         l_wp_task_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_WP_VERSION(p_project_id);
7269 
7270         open c3(p_project_id,l_wp_task_ver_id);
7271         fetch c3 into x_planned_work_qty;
7272         close c3;
7273 
7274        -- Get actuals for the workplan task.
7275 
7276         open c1_proj_level;
7277         fetch c1_proj_level into c1rec;
7278         close c1_proj_level;
7279 
7280 
7281     END IF;
7282     End commenting the following code as we are now accepting workplan task id's in the API. */
7283 
7284 
7285         l_wp_task_id := p_wp_task_id;
7286         l_wp_str_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_WP_VERSION(p_project_id);
7287 
7288         -- If task level information is requested.
7289 
7290         if (p_res_list_mem_id is null) then
7291 
7292            -- Get actuals and txn currency code for the workplan task.
7293 
7294            open c1_task(p_project_id,l_wp_task_id,p_as_of_date);
7295            fetch c1_task into c1rec;
7296            close c1_task;
7297 
7298     -- If assignment level information is requested.
7299 
7300     else
7301 
7302        open c1_assgn(p_project_id,p_res_list_mem_id,l_wp_task_id,p_as_of_date);
7303            fetch c1_assgn into c1rec;
7304            close c1_assgn;
7305 
7306     end if;
7307 
7308     -- Get actuals and txn currency code for the workplan task.
7309 
7310         x_actual_work_qty := c1rec.cumulative_work_quantity;
7311         x_ppl_act_cost_pc := c1rec.ppl_act_cost_to_date_pc;
7312         x_eqpmt_act_cost_pc := c1rec.eqpmt_act_cost_to_date_pc;
7313         x_oth_act_cost_pc := c1rec.oth_act_cost_to_date_pc;
7314         x_ppl_act_cost_fc := c1rec.ppl_act_cost_to_date_fc;
7315         x_eqpmt_act_cost_fc := c1rec.eqpmt_act_cost_to_date_fc;
7316         x_oth_act_cost_fc := c1rec.oth_act_cost_to_date_fc;
7317         x_act_labor_effort := c1rec.ppl_act_effort_to_date;
7318         x_act_eqpmt_effort := c1rec.eqpmt_act_effort_to_date;
7319         x_ppl_act_cost_tc := c1rec.ppl_act_cost_to_date_tc;
7320         x_eqpmt_act_cost_tc := c1rec.eqpmt_act_cost_to_date_tc;
7321         x_oth_act_cost_tc := c1rec.oth_act_cost_to_date_tc;
7322         x_txn_currency_code := c1rec.txn_currency_code;
7323 
7324 
7325     -- Get actuals in rawcost and other_quantity_to_date.
7326 
7327     x_ppl_act_rawcost_pc     := c1rec.ppl_act_rawcost_to_date_pc;
7328     x_eqpmt_act_rawcost_pc   := c1rec.eqpmt_act_rawcost_to_date_pc;
7329     x_oth_act_rawcost_pc     := c1rec.oth_act_rawcost_to_date_pc;
7330     x_ppl_act_rawcost_fc     := c1rec.ppl_act_rawcost_to_date_fc;
7331     x_eqpmt_act_rawcost_fc   := c1rec.eqpmt_act_rawcost_to_date_fc;
7332     x_oth_act_rawcost_fc     := c1rec.oth_act_rawcost_to_date_fc;
7333     x_ppl_act_rawcost_tc     := c1rec.ppl_act_rawcost_to_date_tc;
7334     x_eqpmt_act_rawcost_tc   := c1rec.eqpmt_act_rawcost_to_date_tc;
7335     x_oth_act_rawcost_tc     := c1rec.oth_act_rawcost_to_date_tc;
7336     x_oth_quantity       := c1rec.oth_quantity_to_date;
7337 
7338 
7339     /* Begin code to fix Bug # 4172372. */
7340 
7341     -- Get the task_version_id for the workplan task.
7342 
7343     open cur_task_version(p_project_id, l_wp_task_id, l_wp_str_ver_id);
7344     fetch cur_task_version into l_wp_task_ver_id;
7345     close cur_task_version;
7346 
7347         /* End code to fix Bug # 4172372. */
7348 
7349     -- Get planned work quantity for worplan task.
7350 
7351     open c3(p_project_id, l_wp_task_ver_id); -- Fix for Bug # 4172372.
7352         fetch c3 into x_planned_work_qty;
7353         close c3;
7354 
7355     -- Get unit of measure for the workplan task
7356 
7357         open c4(p_project_id,l_wp_task_id);
7358         fetch c4 into x_unit_of_measure;
7359         close c4;
7360 
7361     x_return_status := l_return_status;
7362     x_msg_count := l_msg_count;
7363     x_msg_data := l_msg_data;
7364 
7365         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7366                 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7367                                      p_msg_name       => l_msg_data);
7368                 x_msg_data := l_msg_data;
7369                 x_return_status := 'E';
7370                 x_msg_count := l_msg_count;
7371                 RAISE  FND_API.G_EXC_ERROR;
7372         END IF;
7373 
7374 EXCEPTION
7375 
7376     when FND_API.G_EXC_ERROR then
7377       rollback to get_actuals_for_task;
7378       x_return_status := FND_API.G_RET_STS_ERROR;
7379 
7380     when FND_API.G_EXC_UNEXPECTED_ERROR then
7381       rollback to get_actuals_for_task;
7382       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7383       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROGRESS_UTILS',
7384                               p_procedure_name => 'get_actuals_for_task',
7385                               p_error_text     => SUBSTRB(SQLERRM,1,120));
7386     when OTHERS then
7387       rollback to get_actuals_fortask;
7388       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7389       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROGRESS_UTILS',
7390                               p_procedure_name => 'get_actuals_for_task',
7391                               p_error_text     => SUBSTRB(SQLERRM,1,120));
7392       raise;
7393 
7394 END get_actuals_for_task;
7395 
7396 -- Progress Management Changes. Bug # 3420093.
7397 
7398 FUNCTION wp_task_ver_id_for_fin_task_id(p_project_id NUMBER, p_fin_task_id NUMBER) return NUMBER
7399 IS
7400     l_fin_str_ver_id        NUMBER := NULL;
7401     l_fin_task_ver_id       NUMBER := NULL;
7402     l_wp_task_ver_id        NUMBER := NULL;
7403     l_structure_sharing_code    VARCHAR2(30) := NULL;
7404 
7405     cursor c1(p_proj_element_id NUMBER, p_structure_version_id NUMBER) is
7406     select element_version_id
7407     from pa_proj_element_versions
7408     where project_id = p_project_id
7409     and proj_element_id = p_proj_element_id
7410     and parent_structure_version_id = p_structure_version_id;
7411 
7412     cursor c2(p_fin_task_ver_id NUMBER) is
7413     select object_id_from1
7414         from pa_object_relationships
7415         where relationship_type='M'
7416         and object_type_from='PA_TASKS'
7417         and object_type_to='PA_TASKS'
7418         and object_id_to1 = p_fin_task_ver_id;
7419 
7420     cursor c3(p_project_id NUMBER) is
7421     select structure_sharing_code
7422     from pa_projects_all
7423     where project_id = p_project_id;
7424 
7425 BEGIN
7426 
7427     open c3(p_project_id);
7428     fetch c3 into l_structure_sharing_code;
7429     close c3;
7430 
7431     -- Get financial structure version id.
7432 
7433     l_fin_str_ver_id :=  PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(p_project_id);
7434 
7435     -- Get financial task version id.
7436 
7437     open c1(p_fin_task_id,l_fin_str_ver_id);
7438     fetch c1 into l_fin_task_ver_id;
7439     close c1;
7440 
7441     -- Get workplan task version id.
7442 
7443     if l_structure_sharing_code = 'SPLIT_MAPPING' then
7444 
7445         open c2(l_fin_task_ver_id);
7446         fetch c2 into l_wp_task_ver_id;
7447         close c2;
7448 
7449     else
7450 
7451         l_wp_task_ver_id := l_fin_task_ver_id;
7452 
7453     end if;
7454 
7455     return(l_wp_task_ver_id);
7456 
7457 END wp_task_ver_id_for_fin_task_id;
7458 
7459 /* Bug 3595585 : Added the following procedure */
7460 FUNCTION get_last_etc_effort(
7461      p_project_id   NUMBER
7462     ,p_object_id   NUMBER
7463     ,p_object_type VARCHAR2
7464     ,p_as_of_date  DATE
7465     ,p_structure_type VARCHAR2 := 'WORKPLAN'
7466     ,p_proj_element_id NUMBER := null /* Modified for IB4 Progress CR. */
7467 ) RETURN NUMBER IS
7468 
7469   CURSOR cur_task_etc_effort
7470   IS
7471     SELECT NVL( ESTIMATED_REMAINING_EFFORT, 0 ) + NVL( EQPMT_ETC_EFFORT, 0 )
7472      FROM pa_progress_rollup
7473     WHERE  project_id = p_project_id
7474      AND   object_id  = p_object_id
7475      and proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
7476      --Commented by rtarway for BUG 3835474
7477      /*AND   as_of_date = ( SELECT max(as_of_date)
7478                            from pa_progress_rollup
7479                           WHERE as_of_date < p_as_of_date
7480                            AND  project_id = p_project_id
7481                            AND object_id  = p_object_id
7482                            AND object_type = p_object_type
7483                            AND structure_type = p_structure_type
7484         and proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR.
7485                        )*/
7486      --Added by rtarway for BUG 3835474
7487      AND   as_of_date = ( SELECT max(as_of_date)
7488                            from pa_progress_rollup ppr2
7489                           WHERE ppr2.as_of_date <= p_as_of_date
7490                            AND  ppr2.project_id = p_project_id
7491                            AND ppr2.object_id  = p_object_id
7492                            AND ppr2.object_type = p_object_type
7493                            AND ppr2.structure_type = p_structure_type
7494                            AND ppr2.structure_version_id is null -- Bug 3879461
7495                    and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR.*/
7496                            AND ppr2.current_flag <> 'W'   -- Bug 3879461
7497 --                           AND NOT EXISTS (
7498 --                      SELECT 'X' FROM pa_percent_completes ppc
7499 --                      WHERE ppc.date_computed = ppr2.as_of_date
7500 --                      AND   ppc.project_id = p_project_id
7501 --                      AND   ppc.object_id  = p_object_id
7502 --                      AND   ppc.object_type = p_object_type
7503 --                      AND   ppc.structure_type = p_structure_type
7504 --                      AND   ppc.published_flag = 'N'
7505 --                    )
7506                        )
7507      AND   object_type = p_object_type
7508      AND structure_type = p_structure_type
7509      AND structure_version_id is null -- Bug 3879461
7510      AND current_flag <> 'W'   -- Bug 3879461
7511     ;
7512     l_last_submitted_etc_effort    NUMBER;
7513 BEGIN
7514 
7515     OPEN cur_task_etc_effort;
7516     FETCH cur_task_etc_effort INTO l_last_submitted_etc_effort;
7517     CLOSE cur_task_etc_effort;
7518 
7519     RETURN l_last_submitted_etc_effort;
7520 END get_last_etc_effort;
7521 
7522 /* Bug 3595585 : Added the following procedure */
7523 FUNCTION get_last_etc_cost(
7524      p_project_id   NUMBER
7525     ,p_object_id   NUMBER
7526     ,p_object_type VARCHAR2
7527     ,p_as_of_date  DATE
7528     ,p_structure_type VARCHAR2 := 'WORKPLAN'
7529     ,p_proj_element_id NUMBER := null /* Modified for IB4 Progress CR. */
7530 ) RETURN NUMBER IS
7531 
7532   CURSOR cur_task_etc_cost
7533   IS
7534     SELECT (nvl(ppr.oth_etc_cost_tc,0)+nvl(ppr.ppl_etc_cost_tc,0)+nvl(ppr.eqpmt_etc_cost_tc,0))
7535      FROM pa_progress_rollup ppr
7536     WHERE  ppr.project_id = p_project_id
7537      AND   ppr.object_id  = p_object_id
7538      and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
7539      AND   ppr.as_of_date = ( SELECT max(as_of_date)
7540                            from pa_progress_rollup ppr2
7541                           WHERE ppr2.as_of_date < p_as_of_date
7542                            AND  ppr2.project_id = p_project_id
7543                            AND ppr2.object_id  = p_object_id
7544                            AND ppr2.object_type = p_object_type
7545                            AND ppr2.structure_type = p_structure_type
7546                AND ppr2.structure_version_id is null -- Bug 3879461
7547                           AND ppr2.current_flag <> 'W'   -- Bug 3879461
7548                         and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
7549                        )
7550      AND   ppr.object_type = p_object_type
7551      AND ppr.structure_type = p_structure_type
7552      AND ppr.structure_version_id is null -- Bug 3879461
7553      AND ppr.current_flag <> 'W'   -- Bug 3879461
7554 
7555      ;
7556 
7557   l_last_submitted_etc_cost    NUMBER;
7558 
7559 BEGIN
7560 
7561     OPEN cur_task_etc_cost;
7562     FETCH cur_task_etc_cost INTO l_last_submitted_etc_cost;
7563     CLOSE cur_task_etc_cost;
7564 
7565     RETURN l_last_submitted_etc_cost;
7566 END get_last_etc_cost;
7567 
7568 --Commented the following API for BUG 4091457, by rtarway
7569 --
7570 /*
7571  --Bug 3595585 : Added the following procedure
7572  --Bug 3621404 : Added burden parameters
7573 PROCEDURE get_last_etc_all(p_project_id             IN      NUMBER
7574                               ,p_object_id      IN      NUMBER
7575                               ,p_object_type            IN      VARCHAR2
7576                               ,p_as_of_date     IN  DATE
7577                               ,p_structure_type     IN  VARCHAR2    := 'WORKPLAN'
7578                               ,x_etc_txn_raw_cost_last_subm OUT     NUMBER
7579                               ,x_etc_prj_raw_cost_last_subm OUT     NUMBER
7580                               ,x_etc_pfc_raw_cost_last_subm OUT     NUMBER
7581                               ,x_etc_txn_bur_cost_last_subm OUT     NUMBER
7582                               ,x_etc_prj_bur_cost_last_subm OUT     NUMBER
7583                               ,x_etc_pfc_bur_cost_last_subm OUT     NUMBER
7584                               ,x_etc_effort_last_subm   OUT     NUMBER
7585                               ,x_return_status          OUT     VARCHAR2
7586                               ,x_msg_count              OUT     NUMBER
7587                               ,x_msg_data               OUT     VARCHAR2
7588               ,p_proj_element_id    IN  NUMBER := null )
7589 IS
7590   CURSOR cur_task_etc_all
7591   IS
7592     SELECT (nvl(ppr.oth_etc_rawcost_tc,0)+nvl(ppr.ppl_etc_rawcost_tc,0)+nvl(ppr.eqpmt_etc_rawcost_tc,0)) etc_txn_raw_rawcost_last_subm
7593     ,(nvl(ppr.oth_etc_rawcost_pc,0)+nvl(ppr.ppl_etc_rawcost_pc,0)+nvl(ppr.eqpmt_etc_rawcost_pc,0)) etc_prj_raw_rawcost_last_subm
7594     ,(nvl(ppr.oth_etc_rawcost_fc,0)+nvl(ppr.ppl_etc_rawcost_fc,0)+nvl(ppr.eqpmt_etc_rawcost_fc,0)) etc_pfc_raw_rawcost_last_subm
7595         ,(nvl(ppr.oth_etc_cost_tc,0)+nvl(ppr.ppl_etc_cost_tc,0)+nvl(ppr.eqpmt_etc_cost_tc,0)) etc_txn_bur_cost_last_subm
7596     ,(nvl(ppr.oth_etc_cost_pc,0)+nvl(ppr.ppl_etc_cost_pc,0)+nvl(ppr.eqpmt_etc_cost_pc,0)) etc_prj_bur_cost_last_subm
7597     ,(nvl(ppr.oth_etc_cost_fc,0)+nvl(ppr.ppl_etc_cost_fc,0)+nvl(ppr.eqpmt_etc_cost_fc,0)) etc_pfc_bur_cost_last_subm
7598     , (NVL( ESTIMATED_REMAINING_EFFORT, 0 ) + NVL( EQPMT_ETC_EFFORT, 0 )) etc_effort_last_subm
7599      FROM pa_progress_rollup ppr
7600     WHERE  ppr.project_id = p_project_id
7601      AND   ppr.object_id  = p_object_id
7602      and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id)
7603      --Commented by rtarway for BUG 3835474
7604      --AND   ppr.as_of_date = ( SELECT max(as_of_date)
7605      --                      from pa_progress_rollup ppr2
7606      --                     WHERE ppr2.as_of_date < p_as_of_date
7607      --                      AND  ppr2.project_id = p_project_id
7608      --                      AND ppr2.object_id  = p_object_id
7609      --                      AND ppr2.object_type = p_object_type
7610      --                      AND ppr2.structure_type = p_structure_type
7611     --and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
7612      --                  )
7613      --Added by rtarway for BUG 3835474
7614      AND   ppr.as_of_date = ( SELECT max(as_of_date)
7615                            from pa_progress_rollup ppr2
7616                           WHERE ppr2.as_of_date <= p_as_of_date
7617                            AND  ppr2.project_id = p_project_id
7618                            AND ppr2.object_id  = p_object_id
7619                            AND ppr2.object_type = p_object_type
7620                            AND ppr2.structure_type = p_structure_type
7621                            AND ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id)
7622                AND ppr2.structure_version_id is null -- Bug 3879461
7623                            AND ppr2.current_flag <> 'W'   -- Bug 3879461
7624 --                            AND NOT EXISTS
7625 --                                (
7626 --                                  SELECT 'X' FROM pa_percent_completes ppc
7627 --                                  WHERE ppc.date_computed = ppr2.as_of_date
7628 --                                  AND   ppc.project_id = p_project_id
7629 --                                  AND   ppc.object_id  = p_object_id
7630 --                                  AND   ppc.object_type = p_object_type
7631 --                                  AND   ppc.structure_type = p_structure_type
7632 --                                  AND   ppc.published_flag = 'N'
7633 --                                )
7634                            )
7635      AND ppr.object_type = p_object_type
7636      AND ppr.structure_type = p_structure_type
7637      AND ppr.structure_version_id is null -- Bug 3879461
7638      AND ppr.current_flag <> 'W'   -- Bug 3879461
7639 
7640      ;
7641 BEGIN
7642 
7643     x_return_status := 'S';
7644 
7645     OPEN cur_task_etc_all;
7646     FETCH cur_task_etc_all INTO x_etc_txn_raw_cost_last_subm, x_etc_prj_raw_cost_last_subm, x_etc_pfc_raw_cost_last_subm, x_etc_txn_bur_cost_last_subm, x_etc_prj_bur_cost_last_subm, x_etc_pfc_bur_cost_last_subm, x_etc_effort_last_subm;
7647     CLOSE cur_task_etc_all;
7648 EXCEPTION
7649 WHEN NO_DATA_FOUND THEN
7650     null;
7651 WHEN OTHERS THEN
7652       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7653       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROGRESS_UTILS',
7654                               p_procedure_name => 'get_last_etc_all',
7655                               p_error_text     => SUBSTRB(SQLERRM,1,120));
7656       raise;
7657 END get_last_etc_all;*/
7658 
7659 
7660 PROCEDURE get_last_etc_all(    p_project_id             IN      NUMBER
7661                               ,p_object_id      IN      NUMBER
7662                               ,p_object_type            IN      VARCHAR2
7663                               ,p_as_of_date     IN    DATE
7664                               ,p_structure_type     IN    VARCHAR2   := 'WORKPLAN'
7665                               ,x_etc_txn_raw_cost_last_subm OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7666                               ,x_etc_prj_raw_cost_last_subm OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7667                               ,x_etc_pfc_raw_cost_last_subm OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7668                               ,x_etc_txn_bur_cost_last_subm OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7669                               ,x_etc_prj_bur_cost_last_subm OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7670                               ,x_etc_pfc_bur_cost_last_subm OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7671                               ,x_etc_effort_last_subm    OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7672                               ,x_return_status          OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7673                               ,x_msg_count              OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
7674                               ,x_msg_data               OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7675                   ,p_proj_element_id    IN    NUMBER := null /* Modified for IB4 Progress CR. */
7676                   ,p_resource_class_code IN VARCHAR2    := 'PEOPLE' -- Bug 3836485
7677 				  ,p_cbs_element_id   NUMBER := null -- Added for CBS phase 2 16200605
7678                     )
7679 IS
7680   CURSOR cur_task_etc_all
7681   IS
7682     SELECT
7683      decode( p_resource_class_code, 'PEOPLE', ppr.ppl_etc_rawcost_tc
7684                                    ,'EQUIPMENT', ppr.eqpmt_etc_rawcost_tc
7685                                    ,ppr.oth_etc_rawcost_tc )  etc_txn_raw_rawcost_last_subm
7686     ,decode(p_resource_class_code, 'PEOPLE', ppr.ppl_etc_rawcost_pc
7687                                   ,'EQUIPMENT', ppr.eqpmt_etc_rawcost_pc
7688                                   , ppr.oth_etc_rawcost_pc ) etc_prj_raw_rawcost_last_subm
7689     ,decode(p_resource_class_code, 'PEOPLE', ppr.ppl_etc_rawcost_fc
7690                                   ,'EQUIPMENT', ppr.eqpmt_etc_rawcost_fc
7691                                   ,ppr.oth_etc_rawcost_fc) etc_pfc_raw_rawcost_last_subm
7692     ,decode(p_resource_class_code, 'PEOPLE', ppr.ppl_etc_cost_tc
7693                                   ,'EQUIPMENT', ppr.eqpmt_etc_cost_tc
7694                                   ,ppr.oth_etc_cost_tc ) etc_txn_bur_cost_last_subm
7695     ,decode(p_resource_class_code, 'PEOPLE', ppr.ppl_etc_cost_pc
7696                                   ,'EQUIPMENT', ppr.eqpmt_etc_cost_pc
7697                   ,ppr.oth_etc_cost_pc ) etc_prj_bur_cost_last_subm
7698     ,decode(p_resource_class_code, 'PEOPLE', ppr.ppl_etc_cost_fc
7699                                   ,'EQUIPMENT', ppr.eqpmt_etc_cost_fc
7700                                   ,ppr.oth_etc_cost_fc ) etc_pfc_bur_cost_last_subm
7701     ,decode(p_resource_class_code, 'PEOPLE', ESTIMATED_REMAINING_EFFORT
7702                                   ,'EQUIPMENT', EQPMT_ETC_EFFORT
7703                   , ppr.OTH_ETC_QUANTITY) etc_effort_last_subm
7704      FROM pa_progress_rollup ppr
7705     WHERE  ppr.project_id = p_project_id
7706      AND   ppr.object_id  = p_object_id
7707      and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
7708      AND   ppr.as_of_date = ( SELECT max(as_of_date)
7709                            from pa_progress_rollup ppr2
7710                           WHERE ppr2.as_of_date <= p_as_of_date--Added eqaulity condition, 4091457, rtarway
7711                            AND  ppr2.project_id = p_project_id
7712                            AND ppr2.object_id  = p_object_id
7713                            AND ppr2.object_type = p_object_type
7714                            AND ppr2.structure_type = p_structure_type
7715                            AND ppr2.structure_version_id is null -- Bug 3879461
7716                            AND ppr2.current_flag <> 'W'   -- Bug 3879461
7717                            and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
7718                        )
7719      AND ppr.object_type = p_object_type
7720      AND ppr.structure_type = p_structure_type
7721      AND ppr.structure_version_id is null -- Bug 3879461
7722      AND ppr.current_flag <> 'W'   -- Bug 3879461
7723 	 AND NVL(cbs_element_id,-1) = NVL(p_cbs_element_id,-1) --Added for CBS phase 2 16200605
7724      ;
7725 BEGIN
7726 
7727     x_return_status := 'S';
7728 
7729     OPEN cur_task_etc_all;
7730     FETCH cur_task_etc_all INTO x_etc_txn_raw_cost_last_subm,
7731     x_etc_prj_raw_cost_last_subm, x_etc_pfc_raw_cost_last_subm,
7732     x_etc_txn_bur_cost_last_subm, x_etc_prj_bur_cost_last_subm,
7733     x_etc_pfc_bur_cost_last_subm, x_etc_effort_last_subm;
7734     CLOSE cur_task_etc_all;
7735 
7736 
7737 EXCEPTION
7738 WHEN NO_DATA_FOUND THEN
7739     null;
7740 WHEN OTHERS THEN
7741       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7742       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROGRESS_UTILS',
7743                               p_procedure_name => 'get_last_etc_all',
7744                               p_error_text     => SUBSTRB(SQLERRM,1,120));
7745 
7746       -- 4537865
7747       x_etc_txn_raw_cost_last_subm := NULL ;
7748       x_etc_prj_raw_cost_last_subm := NULL ;
7749       x_etc_pfc_raw_cost_last_subm := NULL ;
7750       x_etc_txn_bur_cost_last_subm := NULL ;
7751       x_etc_prj_bur_cost_last_subm := NULL ;
7752       x_etc_pfc_bur_cost_last_subm := NULL ;
7753       x_etc_effort_last_subm        := NULL ;
7754       -- 4537865
7755       raise;
7756 END get_last_etc_all;
7757 
7758 -- Progress Management Changes. Bug # 3420093.
7759 
7760 function sum_etc_values(
7761      p_planned_value            NUMBER := null
7762      ,p_ppl_etc_value           NUMBER := null
7763      ,p_eqpmt_etc_value         NUMBER := null
7764      ,p_oth_etc_value           NUMBER := null
7765      ,p_subprj_ppl_etc_value    NUMBER := null
7766      ,p_subprj_eqpmt_etc_value  NUMBER := null
7767      ,p_subprj_oth_etc_value    NUMBER := null
7768      ,p_oth_etc_quantity        NUMBER := null
7769      ,p_actual_value            NUMBER := null
7770      ,p_mode                    VARCHAR2 := 'PUBLISH'
7771 )return number
7772 is
7773     l_sum_etc_values    NUMBER;
7774 begin
7775 if p_mode = 'PUBLISH'   --commenting out IF-THNE-ELSE clause for bug 3927404 issue #2  --again uncommenting 5726773
7776   then
7777     if ((p_ppl_etc_value is null) and (p_eqpmt_etc_value is null)
7778          and (p_oth_etc_value is null) and (p_subprj_ppl_etc_value is null)
7779          and (p_subprj_eqpmt_etc_value is null) and (p_subprj_oth_etc_value is null)
7780          and (p_oth_etc_quantity is null)) then
7781 
7782         ---5726773 l_sum_etc_values := nvl(p_planned_value,0) - nvl(p_actual_value,0);
7783  	l_sum_etc_values := PA_FP_FCST_GEN_AMT_UTILS.get_etc_from_plan_act(nvl(p_planned_value,0), nvl(p_actual_value,0));
7784 
7785     else
7786 
7787         l_sum_etc_values := (nvl(p_ppl_etc_value,0)+nvl(p_eqpmt_etc_value,0)
7788                     +nvl(p_oth_etc_value,0)+nvl(p_subprj_ppl_etc_value,0)
7789                             +nvl(p_subprj_eqpmt_etc_value,0)+nvl(p_subprj_oth_etc_value,0)
7790                     +nvl(p_oth_etc_quantity,0));
7791 
7792     end if;
7793   else
7794       -- Start Changes for bug 6714865
7795       -- l_sum_etc_values := nvl(p_planned_value,0) - nvl(p_actual_value,0);
7796       l_sum_etc_values := PA_FP_FCST_GEN_AMT_UTILS.get_etc_from_plan_act(nvl(p_planned_value,0),
7797 nvl(p_actual_value,0));
7798       -- End Changes for bug 6714865
7799   end if;
7800 
7801     -- if l_sum_etc_values is negative return 0.
7802    /*5726773
7803     if (nvl(l_sum_etc_values,0) < 0) then
7804         l_sum_etc_values := 0;
7805     end if;
7806     */
7807     return(l_sum_etc_values);
7808 
7809 end sum_etc_values;
7810 
7811 -- Progress Management Changes. Bug # 3420093.
7812 -- Bug 3879461 : This function is not used.
7813 FUNCTION get_act_rawcost_this_period (p_as_of_date        IN     DATE
7814                                      ,p_project_id        IN     NUMBER
7815                                      ,p_object_id         IN     NUMBER
7816                                      ,p_object_version_id IN     NUMBER
7817       ,p_proj_element_id      IN     NUMBER := null /* Modified for IB4 Progress CR. */) return NUMBER
7818 IS
7819     l_act_rawcost_period        NUMBER := NULL;
7820     l_act_rawcost_date      NUMBER := NULL;
7821     l_act_rawcost_pub       NUMBER := NULL;
7822 
7823 /*
7824 cursor c1 is
7825          select (nvl(ppr.oth_act_rawcost_to_date_pc,0)+nvl(ppr.ppl_act_rawcost_to_date_pc,0)
7826             +nvl(ppr.eqpmt_act_rawcost_to_date_pc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_PC,0)
7827             +nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0))
7828             act_rawcost_to_date
7829                 from pa_progress_rollup ppr
7830                 where ppr.project_id = p_project_id
7831                 and ppr.object_id = p_object_id
7832                 -- and ppr.object_version_id = p_object_version_id
7833          and structure_type = 'WORKPLAN' -- FPM Dev CR 3
7834     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id)-- Modified for IB4 Progress CR.
7835                 and ppr.as_of_date = (select max(ppr2.as_of_date)
7836                                      from pa_progress_rollup ppr2
7837                                      where ppr2.project_id = p_project_id
7838                                      and ppr2.object_id = p_object_id
7839                                      -- and ppr2.object_version_id = p_object_version_id
7840                      and structure_type = 'WORKPLAN' -- FPM Dev CR 3
7841                                      and ppr2.as_of_date > p_as_of_date
7842     and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id)); --Modified for IB4 Progress CR. );
7843     l_c1rec     c1%rowtype;
7844 */
7845 
7846     cursor c_prev_prog_rec is
7847          select (nvl(ppr.oth_act_rawcost_to_date_pc,0)+nvl(ppr.ppl_act_rawcost_to_date_pc,0)
7848             +nvl(ppr.eqpmt_act_rawcost_to_date_pc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_PC,0)
7849             +nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0))
7850             act_rawcost_to_date
7851                 from pa_progress_rollup ppr
7852                 where ppr.project_id = p_project_id
7853                 and ppr.object_id = p_object_id
7854                 -- and ppr.object_version_id = p_object_version_id
7855             and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
7856         and ppr.structure_version_id is null -- Bug 3764224
7857             and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
7858                 and ppr.as_of_date = (select max(ppr2.as_of_date)
7859                                      from pa_progress_rollup ppr2
7860                                      where ppr2.project_id = p_project_id
7861                                      and ppr2.object_id = p_object_id
7862                      and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
7863                      and ppr2.structure_version_id is null -- Bug 3764224
7864                      and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
7865                                      and ppr2.as_of_date < p_as_of_date);
7866 
7867     cursor c_this_prog_rec is
7868          select (nvl(ppr.oth_act_rawcost_to_date_pc,0)+nvl(ppr.ppl_act_rawcost_to_date_pc,0)
7869             +nvl(ppr.eqpmt_act_rawcost_to_date_pc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_PC,0)
7870             +nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0))
7871             act_rawcost_to_date
7872                 from pa_progress_rollup ppr
7873                 where ppr.project_id = p_project_id
7874                 and ppr.object_id = p_object_id
7875                 -- and ppr.object_version_id = p_object_version_id
7876             and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
7877         and ppr.structure_version_id is null -- Bug 3764224
7878             and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
7879                 and ppr.as_of_date = (select max(ppr2.as_of_date)
7880                                      from pa_progress_rollup ppr2
7881                                      where ppr2.project_id = p_project_id
7882                                      and ppr2.object_id = p_object_id
7883                      and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
7884                      and ppr2.structure_version_id is null -- Bug 3764224
7885                      and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
7886                                      and ppr2.as_of_date >= p_as_of_date);
7887 
7888 
7889 BEGIN
7890 -- Bug 3764224 : This function(_this_peiord) are used only in assignment cases. So it is safe to select from rollup table itself
7891 -- no need to go in percent complete table
7892 -- Bug 3764224 : RLM Changes : Commented the below code. This was not calculating the actual this period
7893 /*
7894     open c1;
7895     fetch c1 into l_c1rec;
7896     if c1%found then
7897         select (nvl(ppr.oth_act_rawcost_to_date_pc,0)+nvl(ppr.ppl_act_rawcost_to_date_pc,0)
7898             +nvl(ppr.eqpmt_act_rawcost_to_date_pc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_PC,0)
7899             +nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0))
7900                 into l_act_rawcost_pub
7901                 from pa_progress_rollup ppr,pa_percent_completes ppc
7902                 where ppr.project_id = ppc.project_id
7903             and ppr.object_id = ppc.object_id
7904             and ppr.object_version_id = ppc.object_version_id
7905             and ppr.as_of_date = ppc.date_computed (+)
7906         and ppr.project_id = p_project_id
7907                 and ppr.object_id = p_object_id
7908                 -- and ppr.object_version_id = p_object_version_id
7909     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
7910             and ppr.percent_complete_id = ppc.percent_complete_id
7911          and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
7912          and ppr.structure_type = ppc.structure_type(+) -- FPM Dev CR 3
7913         and ppr.proj_element_id = ppc.task_id (+) -- Modified for IB4 Progress CR.
7914                 and ppr.as_of_date = (select max(ppc2.date_computed)
7915                                      from pa_percent_completes ppc2
7916                                      where ppc2.project_id = p_project_id
7917                                      and ppc2.object_id = p_object_id
7918                                      -- and ppc2.object_version_id = p_object_version_id
7919                      and ppc2.published_flag = 'Y'
7920                      and ppc2.current_flag = 'Y'
7921                          and ppc2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
7922         and ppc2.task_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
7923                      );
7924 
7925         l_act_rawcost_period := (nvl(l_c1rec.act_rawcost_to_date,0) - nvl(l_act_rawcost_pub,0));
7926 
7927     end if;
7928     close c1;
7929 */
7930 
7931     open c_prev_prog_rec;
7932     fetch c_prev_prog_rec into l_act_rawcost_pub;
7933     close c_prev_prog_rec;
7934 
7935     open c_this_prog_rec;
7936     fetch c_this_prog_rec into l_act_rawcost_date;
7937     close c_this_prog_rec;
7938 
7939     l_act_rawcost_period := (nvl(l_act_rawcost_date,0) - nvl(l_act_rawcost_pub,0));
7940 
7941     if (l_act_rawcost_period < 0) then
7942         l_act_rawcost_period := 0;
7943     end if;
7944 
7945     return(l_act_rawcost_period);
7946 
7947 END get_act_rawcost_this_period;
7948 
7949 -- Progress Management Changes. Bug # 3621404.
7950 
7951 FUNCTION get_act_txn_rawcost_thisperiod (p_as_of_date        IN     DATE
7952                                         ,p_project_id        IN     NUMBER
7953                                         ,p_object_id         IN     NUMBER
7954                                         ,p_object_version_id IN     NUMBER
7955     ,p_proj_element_id      IN     NUMBER := null /* Modified for IB4 Progress CR. */
7956 	,p_cbs_element_id   NUMBER := null -- Added for CBS phase 2 16200605
7957 	) return NUMBER
7958 IS
7959     l_act_rawcost_period        NUMBER := NULL;
7960     l_act_rawcost_date      NUMBER := NULL;
7961     l_act_rawcost_pub       NUMBER := NULL;
7962 /*
7963 
7964     cursor c1 is
7965          select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
7966             +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_TC,0)
7967             +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0)) act_rawcost_to_date
7968                 from pa_progress_rollup ppr
7969                 where ppr.project_id = p_project_id
7970                 and ppr.object_id = p_object_id
7971                 -- and ppr.object_version_id = p_object_version_id
7972          and structure_type = 'WORKPLAN' -- FPM Dev CR 3
7973                 and ppr.as_of_date = (select max(ppr2.as_of_date)
7974                                      from pa_progress_rollup ppr2
7975                                      where ppr2.project_id = p_project_id
7976                                      and ppr2.object_id = p_object_id
7977                                      -- and ppr2.object_version_id = p_object_version_id
7978                      and structure_type = 'WORKPLAN' -- FPM Dev CR 3
7979                                      and ppr2.as_of_date > p_as_of_date);
7980     l_c1rec     c1%rowtype;
7981 */
7982 
7983 --bug 3738651
7984 /*        cursor cur_rawcost_tc_this_period
7985             is
7986               select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
7987                      +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_TC,0)
7988                      +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0)) act_rawcost_to_date
7989                 from pa_progress_rollup ppr,pa_percent_completes ppc
7990                 where ppr.project_id = ppc.project_id
7991                 and ppr.object_id = ppc.object_id
7992                 and ppr.as_of_date = ppc.date_computed
7993                 and ppr.project_id = p_project_id
7994             and ppr.object_id = p_object_id
7995         and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
7996             and ppr.percent_complete_id = ppc.percent_complete_id
7997                 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
7998             and ppr.structure_type = ppc.structure_type (+) -- FPM Dev CR 3
7999         and ppr.proj_element_id = ppc.task_id (+) -- Modified for IB4 Progress CR.
8000             and ppc.current_flag = 'N'
8001             and ppc.published_flag = 'N'
8002             ;
8003 */
8004 
8005 /* added by maansari7/25 */
8006     cursor c_prev_prog_rec is
8007          select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
8008                      +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_TC,0)
8009                      +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0)) act_rawcost_to_date
8010                 from pa_progress_rollup ppr
8011                 where ppr.project_id = p_project_id
8012                 and ppr.object_id = p_object_id
8013                 -- and ppr.object_version_id = p_object_version_id
8014                 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8015                 and ppr.structure_version_id is null -- Bug 3764224
8016                 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
8017                 and current_flag = 'Y'
8018 				AND NVL(cbs_element_id,-1) = NVL(p_cbs_element_id,-1) --Added for CBS phase 2 16200605
8019                 ;
8020 
8021 /* commented by maansari 7/25
8022   cursor c_prev_prog_rec is
8023          select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
8024                      +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_TC,0)
8025                      +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0)) act_rawcost_to_date
8026                 from pa_progress_rollup ppr
8027                 where ppr.project_id = p_project_id
8028                 and ppr.object_id = p_object_id
8029                 -- and ppr.object_version_id = p_object_version_id
8030             and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8031         and ppr.structure_version_id is null -- Bug 3764224
8032             and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
8033                 and ppr.as_of_date = (select max(ppr2.as_of_date)
8034                                      from pa_progress_rollup ppr2
8035                                      where ppr2.project_id = p_project_id
8036                                      and ppr2.object_id = p_object_id
8037                      and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8038                      and ppr2.structure_version_id is null -- Bug 3764224
8039                      and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
8040                                      and ppr2.as_of_date < p_as_of_date);
8041    */
8042 
8043    /* commented by maansari 7/25
8044     cursor c_this_prog_rec is
8045          select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
8046                      +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_TC,0)
8047                      +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0)) act_rawcost_to_date
8048                 from pa_progress_rollup ppr
8049                 where ppr.project_id = p_project_id
8050                 and ppr.object_id = p_object_id
8051                 -- and ppr.object_version_id = p_object_version_id
8052             and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8053         and ppr.structure_version_id is null -- Bug 3764224
8054             and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
8055                 and ppr.as_of_date = (select max(ppr2.as_of_date)
8056                                      from pa_progress_rollup ppr2
8057                                      where ppr2.project_id = p_project_id
8058                                      and ppr2.object_id = p_object_id
8059                      and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8060                      and ppr2.structure_version_id is null -- Bug 3764224
8061                      and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
8062                                      and ppr2.as_of_date >= p_as_of_date);
8063         */
8064 /* added by maansari7/25 */
8065             cursor c_this_prog_rec is
8066          select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
8067                      +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_TC,0)
8068                      +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0)) act_rawcost_to_date
8069                 from pa_progress_rollup ppr
8070              -- Bug 3879461 : percemnt compete join is not required. current_flag = W is sufficient
8071 --                    ,pa_percent_completes ppc
8072                 where ppr.project_id = p_project_id
8073                 and ppr.object_id = p_object_id
8074                 -- and ppr.object_version_id = p_object_version_id
8075                 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8076             and ppr.structure_version_id is null -- Bug 3764224
8077                 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
8078 --               and ppr.object_id = ppc.object_id
8079 --               and ppr.as_of_date = ppc.date_computed
8080 --                and ppr.percent_complete_id = ppc.percent_complete_id
8081 --                and ppr.project_id = ppc.project_id
8082 --                and ppr.proj_element_id=ppc.task_id
8083 --                and ppr.structure_type = ppc.structure_type
8084 --                and ppc.current_flag= 'N'
8085 --                and ppc.published_flag = 'N'
8086                 and ppr.current_flag= 'W'
8087 				AND NVL(cbs_element_id,-1) = NVL(p_cbs_element_id,-1) --Added for CBS phase 2 16200605
8088                 ;
8089 
8090 
8091 BEGIN
8092 
8093 -- Bug 3764224 : This function(_this_peiord) are used only in assignment cases. So it is safe to select from rollup table itself
8094 -- no need to go in percent complete table
8095 -- Bug 3764224 : RLM Changes : Commented the below code. This was not calculating the actual this period
8096 
8097 /*
8098     open c1;
8099     fetch c1 into l_c1rec;
8100     if c1%found then
8101         select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
8102             +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_TC,0)
8103             +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0))
8104                 into l_act_rawcost_pub
8105                 from pa_progress_rollup ppr,pa_percent_completes ppc
8106                 where ppr.project_id = ppc.project_id
8107             and ppr.object_id = ppc.object_id
8108             and ppr.object_version_id = ppc.object_version_id
8109             and ppr.as_of_date = ppc.date_computed (+)
8110         and ppr.project_id = p_project_id
8111                 and ppr.object_id = p_object_id
8112                 -- and ppr.object_version_id = p_object_version_id
8113             and ppr.percent_complete_id = ppc.percent_complete_id
8114          and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8115          and ppr.structure_type = ppc.structure_type(+) -- FPM Dev CR 3
8116                 and ppr.as_of_date = (select max(ppc2.date_computed)
8117                                      from pa_percent_completes ppc2
8118                                      where ppc2.project_id = p_project_id
8119                                      and ppc2.object_id = p_object_id
8120                                       -- and ppc2.object_version_id = p_object_version_id
8121                      and ppc2.published_flag = 'Y'
8122                      and ppc2.current_flag = 'Y'
8123                          and ppc2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8124                      );
8125         l_act_rawcost_period := (nvl(l_c1rec.act_rawcost_to_date,0) - nvl(l_act_rawcost_pub,0));
8126     end if;
8127     close c1;
8128 
8129     if (l_act_rawcost_period < 0) then
8130         l_act_rawcost_period := 0;
8131     end if;
8132 
8133     return(l_act_rawcost_period);
8134 */
8135 
8136 /*        OPEN cur_rawcost_tc_this_period;
8137         FETCH cur_rawcost_tc_this_period INTO l_act_rawcost_period;
8138         IF cur_rawcost_tc_this_period%FOUND
8139         THEN
8140                 CLOSE cur_rawcost_tc_this_period;
8141                 RETURN l_act_rawcost_period;
8142         ELSE
8143                 CLOSE cur_rawcost_tc_this_period;
8144                 RETURN null;
8145         END IF;
8146 */
8147 
8148     open c_this_prog_rec;
8149     fetch c_this_prog_rec into l_act_rawcost_date;
8150     if c_this_prog_rec%notfound
8151     then
8152         close c_this_prog_rec;
8153         return 0;
8154     end if;
8155     close c_this_prog_rec;
8156 
8157     open c_prev_prog_rec;
8158     fetch c_prev_prog_rec into l_act_rawcost_pub;
8159     close c_prev_prog_rec;
8160 
8161 /*  commneted by maansari7/25
8162     open c_this_prog_rec;
8163     fetch c_this_prog_rec into l_act_rawcost_date;
8164     close c_this_prog_rec;
8165 */
8166     l_act_rawcost_period := (nvl(l_act_rawcost_date,0) - nvl(l_act_rawcost_pub,0));
8167 
8168     if (l_act_rawcost_period < 0) then
8169         l_act_rawcost_period := 0;
8170     end if;
8171 
8172     return(l_act_rawcost_period);
8173 
8174 END get_act_txn_rawcost_thisperiod;
8175 
8176 -- Progress Management Changes. Bug # 3621404.
8177 -- Bug 3879461 : This function is not used now.
8178 FUNCTION get_act_pfn_rawcost_thisperiod (p_as_of_date        IN     DATE
8179                                         ,p_project_id        IN     NUMBER
8180                                         ,p_object_id         IN     NUMBER
8181                                         ,p_object_version_id IN     NUMBER
8182     ,p_proj_element_id      IN     NUMBER := null /* Modified for IB4 Progress CR. */) return NUMBER
8183 IS
8184     l_act_rawcost_period        NUMBER := NULL;
8185     l_act_rawcost_date      NUMBER := NULL;
8186     l_act_rawcost_pub       NUMBER := NULL;
8187 
8188 /*
8189     cursor c1 is
8190          select (nvl(ppr.oth_act_rawcost_to_date_fc,0)+nvl(ppr.ppl_act_rawcost_to_date_fc,0)
8191             +nvl(ppr.eqpmt_act_rawcost_to_date_fc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_FC,0)
8192             +nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0)) act_rawcost_to_date
8193                 from pa_progress_rollup ppr
8194                 where ppr.project_id = p_project_id
8195                 and ppr.object_id = p_object_id
8196                 -- and ppr.object_version_id = p_object_version_id
8197     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
8198          and structure_type = 'WORKPLAN' -- FPM Dev CR 3
8199                 and ppr.as_of_date = (select max(ppr2.as_of_date)
8200                                      from pa_progress_rollup ppr2
8201                                      where ppr2.project_id = p_project_id
8202                                      and ppr2.object_id = p_object_id
8203                                      -- and ppr2.object_version_id = p_object_version_id
8204                      and structure_type = 'WORKPLAN' -- FPM Dev CR 3
8205                                      and ppr2.as_of_date > p_as_of_date
8206     and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR. );
8207     l_c1rec     c1%rowtype;
8208 */
8209 
8210     cursor c_prev_prog_rec is
8211          select (nvl(ppr.oth_act_rawcost_to_date_fc,0)+nvl(ppr.ppl_act_rawcost_to_date_fc,0)
8212             +nvl(ppr.eqpmt_act_rawcost_to_date_fc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_FC,0)
8213             +nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0)) act_rawcost_to_date
8214                 from pa_progress_rollup ppr
8215                 where ppr.project_id = p_project_id
8216                 and ppr.object_id = p_object_id
8217                 -- and ppr.object_version_id = p_object_version_id
8218             and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8219         and ppr.structure_version_id is null -- Bug 3764224
8220             and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
8221                 and ppr.as_of_date = (select max(ppr2.as_of_date)
8222                                      from pa_progress_rollup ppr2
8223                                      where ppr2.project_id = p_project_id
8224                                      and ppr2.object_id = p_object_id
8225                      and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8226                      and ppr2.structure_version_id is null -- Bug 3764224
8227                      and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
8228                                      and ppr2.as_of_date < p_as_of_date);
8229 
8230     cursor c_this_prog_rec is
8231          select (nvl(ppr.oth_act_rawcost_to_date_fc,0)+nvl(ppr.ppl_act_rawcost_to_date_fc,0)
8232             +nvl(ppr.eqpmt_act_rawcost_to_date_fc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_FC,0)
8233             +nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0)) act_rawcost_to_date
8234                 from pa_progress_rollup ppr
8235                 where ppr.project_id = p_project_id
8236                 and ppr.object_id = p_object_id
8237                 -- and ppr.object_version_id = p_object_version_id
8238             and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8239         and ppr.structure_version_id is null -- Bug 3764224
8240             and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
8241                 and ppr.as_of_date = (select max(ppr2.as_of_date)
8242                                      from pa_progress_rollup ppr2
8243                                      where ppr2.project_id = p_project_id
8244                                      and ppr2.object_id = p_object_id
8245                      and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8246                      and ppr2.structure_version_id is null -- Bug 3764224
8247                      and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
8248                                      and ppr2.as_of_date >= p_as_of_date);
8249 
8250 
8251 BEGIN
8252 
8253 -- Bug 3764224 : This function(_this_peiord) are used only in assignment cases. So it is safe to select from rollup table itself
8254 -- no need to go in percent complete table
8255 -- Bug 3764224 : RLM Changes : Commented the below code. This was not calculating the actual this period
8256 
8257 /*
8258     open c1;
8259     fetch c1 into l_c1rec;
8260     if c1%found then
8261         select (nvl(ppr.oth_act_rawcost_to_date_fc,0)+nvl(ppr.ppl_act_rawcost_to_date_fc,0)
8262             +nvl(ppr.eqpmt_act_rawcost_to_date_fc,0)+nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_FC,0)
8263             +nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0))
8264                 into l_act_rawcost_pub
8265                 from pa_progress_rollup ppr,pa_percent_completes ppc
8266                 where ppr.project_id = ppc.project_id
8267             and ppr.object_id = ppc.object_id
8268             and ppr.object_version_id = ppc.object_version_id
8269             and ppr.as_of_date = ppc.date_computed (+)
8270         and ppr.project_id = p_project_id
8271                 and ppr.object_id = p_object_id
8272                 -- and ppr.object_version_id = p_object_version_id
8273     and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
8274             and ppr.percent_complete_id = ppc.percent_complete_id
8275          and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8276          and ppr.structure_type = ppc.structure_type(+) -- FPM Dev CR 3
8277         and ppr.proj_element_id = ppc.task_id (+) -- Modified for IB4 Progress CR.
8278                 and ppr.as_of_date = (select max(ppc2.date_computed)
8279                                      from pa_percent_completes ppc2
8280                                      where ppc2.project_id = p_project_id
8281                                      and ppc2.object_id = p_object_id
8282                                      -- and ppc2.object_version_id = p_object_version_id
8283                      and ppc2.published_flag = 'Y'
8284                      and ppc2.current_flag = 'Y'
8285                          and ppc2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8286         and ppc2.task_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
8287                      );
8288         l_act_rawcost_period := (nvl(l_c1rec.act_rawcost_to_date,0) - nvl(l_act_rawcost_pub,0));
8289     end if;
8290     close c1;
8291 */
8292 
8293     open c_prev_prog_rec;
8294     fetch c_prev_prog_rec into l_act_rawcost_pub;
8295     close c_prev_prog_rec;
8296 
8297     open c_this_prog_rec;
8298     fetch c_this_prog_rec into l_act_rawcost_date;
8299     close c_this_prog_rec;
8300 
8301     l_act_rawcost_period := (nvl(l_act_rawcost_date,0) - nvl(l_act_rawcost_pub,0));
8302 
8303     if (l_act_rawcost_period < 0) then
8304         l_act_rawcost_period := 0;
8305     end if;
8306 
8307     return(l_act_rawcost_period);
8308 END get_act_pfn_rawcost_thisperiod;
8309 
8310 -- Bug 3621404 : Added Get_Res_Rate_Burden_Multiplier
8311 Procedure Get_Res_Rate_Burden_Multiplier(P_res_list_mem_id           IN  NUMBER
8312                                 ,P_project_id                        IN  NUMBER
8313                 ,P_task_id                      IN  NUMBER := null     --bug 3860575
8314                                 ,p_as_of_Date                   IN  DATE   := null     --bug 3901289
8315                                 --maansari6/14 bug 3686920
8316                                 ,p_structure_version_id              IN NUMBER   default null
8317                                 ,p_currency_code                     IN  VARCHAR2 default null
8318                                 --maansari6/14 bug 3686920
8319                                 ,p_init_msg_list                     IN  VARCHAR2        := FND_API.G_FALSE
8320                         ,p_calling_mode                      IN  VARCHAR2        := 'ACTUAL_RATES' -- Bug 3627315
8321                 --,P_dummy_override_raw_cost         IN  NUMBER Bug 3632946
8322                         --,P_override_txn_currency_code      IN  VARCHAR2 Bug 3632946
8323                         ,x_resource_curr_code                OUT NOCOPY VARCHAR2
8324                                 ,x_resource_raw_rate                 OUT NOCOPY NUMBER
8325                                 ,x_resource_burden_rate              OUT NOCOPY NUMBER
8326                         -- ,X_dummy_burden_cost              OUT NOCOPY NUMBER Bug 3632946
8327                         ,X_burden_multiplier                 OUT NOCOPY NUMBER
8328                                 ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8329                                 ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
8330                                 ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8331                        )
8332 AS
8333 
8334    l_msg_count                      NUMBER :=0;
8335    l_data                           VARCHAR2(2000);
8336    l_msg_data                       VARCHAR2(2000);
8337    l_error_msg_code                 VARCHAR2(30);
8338    l_msg_index_out                  NUMBER;
8339    l_return_status                  VARCHAR2(2000);
8340    l_debug_mode                     VARCHAR2(30);
8341    -- added for Bug: 4537865
8342    l_new_msg_data           VARCHAR2(2000);
8343    -- added for Bug: 4537865
8344    l_resource_class_flag_tbl         SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
8345    l_resource_class_code_tbl         SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8346    l_resource_class_id_tbl           SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
8347    l_res_type_code_tbl               SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8348    l_job_id_tbl                      SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
8349    l_person_id_tbl                   SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
8350    l_person_type_code_tbl            SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8351    l_named_role_tbl                  SYSTEM.PA_VARCHAR2_80_TBL_TYPE    := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
8352    l_bom_resource_id_tbl             SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
8353    l_non_labor_resource_tbl          SYSTEM.PA_VARCHAR2_20_TBL_TYPE    := SYSTEM.PA_VARCHAR2_20_TBL_TYPE();
8354    l_inventory_item_id_tbl           SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
8355    l_item_category_id_tbl            SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
8356    l_project_role_id_tbl             SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
8357    l_organization_id_tbl             SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
8358    l_fc_res_type_code_tbl            SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8359    l_expenditure_type_tbl            SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8360    l_expenditure_category_tbl        SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8361    l_event_type_tbl                  SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8362    l_revenue_category_code_tbl       SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8363    l_supplier_id_tbl                 SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
8364    l_unit_of_measure_tbl             SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8365    l_spread_curve_id_tbl             SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
8366    l_etc_method_code_tbl             SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8367    l_mfc_cost_type_id_tbl            SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
8368    l_procure_resource_flag_tbl       SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
8369    l_incurred_by_res_flag_tbl        SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
8370    l_Incur_by_res_class_code_tbl     SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8371    l_Incur_by_role_id_tbl            SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
8372    l_org_id_tbl                      SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
8373    l_rate_based_flag_tbl             SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
8374    l_rate_expenditure_type_tbl       SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8375    l_rate_func_curr_code_tbl         SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8376    l_rate_incurred_by_org_id_tbl     SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
8377    l_resource_assignment_id_tbl      SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
8378    l_assignment_description_tbl      SYSTEM.PA_VARCHAR2_240_TBL_TYPE   := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
8379    l_planning_resource_alias_tbl     SYSTEM.PA_VARCHAR2_80_TBL_TYPE    := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
8380    l_resource_name_tbl               SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8381    l_project_role_name_tbl           SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8382    l_organization_name_tbl           SYSTEM.PA_VARCHAR2_240_TBL_TYPE   := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
8383    l_financial_category_code_tbl     SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8384    l_project_assignment_id_tbl       SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
8385    l_use_task_schedule_flag_tbl      SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
8386    l_planning_start_date_tbl         SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
8387    l_planning_end_date_tbl           SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
8388    l_total_quantity_tbl              SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
8389    l_override_currency_code_tbl      SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8390    l_billable_percent_tbl            SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
8391    l_cost_rate_override_tbl          SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
8392    l_burdened_rate_override_tbl      SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
8393    l_sp_fixed_date_tbl               SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
8394    l_financial_category_name_tbl     SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8395    l_supplier_name_tbl               SYSTEM.PA_VARCHAR2_240_TBL_TYPE   := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
8396    l_ATTRIBUTE_CATEGORY_tbl          SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8397    l_ATTRIBUTE1_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8398    l_ATTRIBUTE2_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8399    l_ATTRIBUTE3_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8400    l_ATTRIBUTE4_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8401    l_ATTRIBUTE5_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8402    l_ATTRIBUTE6_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8403    l_ATTRIBUTE7_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8404    l_ATTRIBUTE8_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8405    l_ATTRIBUTE9_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8406    l_ATTRIBUTE10_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8407    l_ATTRIBUTE11_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8408    l_ATTRIBUTE12_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8409    l_ATTRIBUTE13_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8410    l_ATTRIBUTE14_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8411    l_ATTRIBUTE15_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8412    l_ATTRIBUTE16_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8413    l_ATTRIBUTE17_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8414    l_ATTRIBUTE18_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8415    l_ATTRIBUTE19_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8416    l_ATTRIBUTE20_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8417    l_ATTRIBUTE21_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8418    l_ATTRIBUTE22_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8419    l_ATTRIBUTE23_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8420    l_ATTRIBUTE24_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8421    l_ATTRIBUTE25_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8422    l_ATTRIBUTE26_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8423    l_ATTRIBUTE27_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8424    l_ATTRIBUTE28_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8425    l_ATTRIBUTE29_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8426    l_ATTRIBUTE30_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8427   --End of variables for Variable for Resource Attributes
8428 
8429   l_task_id                          pa_tasks.task_id%TYPE := P_task_id;   --bug 3860575, Satish
8430   l_top_task_id                      pa_tasks.task_id%TYPE;
8431   l_bill_job_group_id                pa_projects_all.bill_job_group_id%TYPE;
8432   l_project_type                     pa_projects_all.project_type%TYPE;
8433   l_expenditure_type                 pa_resource_assignments.expenditure_type%TYPE;
8434   l_org_id                           pa_projects_all.org_id%TYPE;
8435   l_expenditure_OU                   pa_projects_all.org_id%TYPE;
8436   l_resource_class_code              pa_resource_assignments.resource_class_code%TYPE;
8437   l_non_labor_resource               pa_resource_assignments.non_labor_resource%TYPE;
8438   l_nlr_organization_id              pa_resource_assignments.organization_id%TYPE;
8439   l_rate_override_to_organz_id       pa_resource_assignments.organization_id%TYPE;
8440   l_rate_incurred_by_organz_id       pa_resource_assignments.organization_id%TYPE;
8441   l_inventory_item_id                pa_resource_assignments.inventory_item_id%TYPE;
8442   l_bom_resource_id                  pa_resource_assignments.bom_resource_id%TYPE;
8443   l_txn_currency_code_override       pa_fp_res_assignments_tmp.txn_currency_code_override%TYPE;
8444   l_cost_rate_multiplier             CONSTANT pa_labor_cost_multipliers.multiplier%TYPE := 1;
8445 --  l_burden_override_multiplier       pa_fp_res_assignments_tmp.b_multiplier_override%TYPE;
8446   l_burden_override_multiplier       Number;
8447   l_cost_override_rate               pa_fp_res_assignments_tmp.rw_cost_rate_override%TYPE;
8448   l_raw_cost                         pa_fp_res_assignments_tmp.txn_raw_cost%TYPE;
8449   -- added for Bug: 4537865
8450   l_new_raw_cost             pa_fp_res_assignments_tmp.txn_raw_cost%TYPE;
8451   -- added for Bug: 4537865
8452   l_raw_cost_rate                    pa_fp_res_assignments_tmp.raw_cost_rate%TYPE;
8453   l_burden_cost                      pa_fp_res_assignments_tmp.txn_burdened_cost%TYPE;
8454   l_mfc_cost_type_id                 pa_resource_assignments.mfc_cost_type_id%TYPE;
8455   l_mfc_cost_source                  CONSTANT NUMBER := 2;
8456   l_item_category_id                 pa_resource_assignments.item_category_id%TYPE;
8457   l_job_id                           pa_resource_assignments.job_id%TYPE;
8458   l_person_id                        pa_resource_list_members.person_id%TYPE;
8459 
8460  --Out variables
8461   l_trxn_curr_code                   varchar2(100);
8462   l_txn_raw_cost                     number;
8463   l_txn_cost_rate                    number;
8464   l_txn_burden_cost                  number;
8465   l_txn_burden_cost_rate             number;
8466   l_burden_multiplier                number;
8467   l_cost_ind_compiled_set_id         number;
8468   l_raw_cost_rejection_code          varchar2(1000);
8469   l_burden_cost_rejection_code       varchar2(1000);
8470   l_insufficient_paramters           EXCEPTION; -- Added to raised exception if any required paramter is missing for PA_COST1 api
8471   l_resource_alias                   pa_task_assignments_v.resource_alias%TYPE; -- Added if any required paramter is missing for PA_COST1 api
8472 
8473   l_null_above                       VARCHAR2(1) := 'N';  -- Added if any required paramter is miss ing for PA_COST1 api
8474 
8475   l_incur_by_res_type                SYSTEM.PA_VARCHAR2_30_TBL_TYPE; -- Bug # 3473324.
8476   g1_debug_mode                      VARCHAR2(1);
8477   l_res_list_memb_id_tbl             SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE()         ;
8478 
8479   l_plan_cost_burden_sch_id          NUMBER; -- Bug 3632946
8480 
8481 
8482   --maansari6/14 bug 3686920
8483   l_plan_cost_job_rate_sch_id        NUMBER;
8484   l_plan_cost_emp_rate_sch_id        NUMBER;
8485   l_plan_cost_nlr_rate_sch_id        NUMBER;
8486   l_fp_cols_rec                      PA_FP_GEN_AMOUNT_UTILS.FP_COLS;
8487   l_plan_version_id                  NUMBER;
8488   l_res_class_sch_id                 NUMBER;
8489   --maansari6/14
8490 
8491   --amksingh 3686920
8492   l_calling_mode                     VARCHAR2(15);
8493   l_use_planning_rates_flag          VARCHAR2(1);
8494   --amksingh 3686920
8495 
8496 --bug 3733606
8497   l_unit_of_measure                  VARCHAR2(150);
8498   l_carrying_out_org_id              NUMBER;
8499   l_cost_res_class_rate_sch_id       NUMBER;
8500   l_revenue_rejection_code           VARCHAR2(30);
8501 
8502   l_bill_rate                        NUMBER;
8503   l_raw_revenue                      NUMBER;
8504   l_bill_markup_percentage           NUMBER;
8505   l_cost_markup_percentage           NUMBER;
8506   l_rev_txn_curr_code                VARCHAR2(120);
8507   -- Bug 3691289 : Added following two variables
8508   l_pl_res_class_raw_cost_sch_id        NUMBER;
8509   l_pl_cost_res_class_rate_sc_id       NUMBER;
8510 
8511   --bug# 3801523  Satish  start
8512   l_rate_based_flag                  VARCHAR2(1);
8513   l_burd_sch_cp_structure        VARCHAR2(1000);
8514   l_burd_sch_cost_base           VARCHAR2(1000);
8515   l_burd_sch_fixed_date          DATE;
8516   l_burd_sch_id                      NUMBER;
8517   l_burd_sch_rev_id          NUMBER;
8518   --bug# 3801523  Satish  end
8519 
8520 /*
8521   --bug 3821299
8522   CURSOR get_assignment_id( c_structure_version_id NUMBER, c_task_id NUMBER, c_resource_list_member_id NUMBER )
8523   IS
8524     SELECT resource_assignment_id
8525      FROM pa_task_assignments_v
8526     WHERE structure_version_id = c_structure_version_id
8527       AND task_id              = c_task_id
8528       AND resource_list_member_id = c_resource_list_member_id
8529      ;
8530 */
8531 
8532   CURSOR get_override_rate ( c_budget_version_id NUMBER, c_resource_assignment_id NUMBER )
8533   IS
8534    SELECT NVL(TXN_COST_RATE_OVERRIDE,TXN_STANDARD_COST_RATE) -- Bug 3951555, Added nvl and TXN_STANDARD_COST_RATE
8535       , nvl(BURDEN_COST_RATE_OVERRIDE, BURDEN_COST_RATE) -- Bug 3951555, Added nvl and BURDEN_COST_RATE
8536      FROM pa_budget_lines
8537     WHERE budget_version_id = c_budget_version_id
8538       AND resource_assignment_id = c_resource_assignment_id
8539       AND TXN_CURRENCY_CODE = p_currency_code
8540       AND p_as_of_date BETWEEN start_date and end_date
8541   ;
8542 
8543   ---- check override rates in pa_resource_assgn_rate (IPM changes)
8544   CURSOR get_asgn_override_rate ( c_budget_version_id NUMBER, c_resource_assignment_id NUMBER )
8545   IS                                                                                  SELECT TXN_RAW_COST_RATE_OVERRIDE, TXN_BURDEN_COST_RATE_OVERRIDE
8546      FROM pa_resource_asgn_curr                                                        WHERE budget_version_id = c_budget_version_id
8547       AND resource_assignment_id = c_resource_assignment_id                              AND TXN_CURRENCY_CODE = p_currency_code;
8548 
8549   l_resource_assignment_id     NUMBER;
8550   l_raw_override_rate          NUMBER := null;
8551   l_burden_override_rate       NUMBER := null;
8552   l_asgn_raw_override_rate     NUMBER := null;  ---IPM changes
8553   l_asgn_burden_override_rate  NUMBER := null;  ---IPM changes
8554   l_etc_flag                   VARCHAR2(1) := 'N';
8555   --bug 3821299
8556 
8557   -- Bug 3965584 Begin
8558   CURSOR c_get_assgn_details(c_project_id NUMBER, c_task_id NUMBER, c_structure_version_id NUMBER, c_resource_list_member_id NUMBER)
8559   IS
8560   SELECT pra.person_id,
8561         pra.resource_class_code,
8562         pra.expenditure_type,
8563         pra.rate_expenditure_type,
8564         pra.RATE_EXPENDITURE_ORG_ID,
8565         pra.non_labor_resource,
8566         pra.organization_id,
8567         pra.bom_resource_id,
8568         pra.inventory_item_id,
8569         pra.mfc_cost_type_id,
8570         pra.item_category_id,
8571         pra.job_id,
8572         pra.unit_of_measure,
8573         pra.rate_based_flag,
8574         pra.resource_assignment_id,
8575         rlm.alias
8576   FROM pa_resource_assignments pra,  ----pa_task_assignments_v  4871809
8577        pa_budget_versions pbv,
8578        pa_resource_list_members rlm
8579   WHERE pbv.project_structure_version_id  = c_structure_version_id
8580   AND pbv.budget_version_id = pra.budget_version_id
8581   AND pra.task_id           = c_task_id
8582   AND pra.resource_list_member_id   = c_resource_list_member_id
8583   AND pra.project_id        = c_project_id
8584   AND pra.resource_list_member_id = rlm.resource_list_member_id
8585     ;
8586   l_assgn_rec   c_get_assgn_details%ROWTYPE;
8587   -- Bug 3965584 End
8588 
8589  --BUG 16786658
8590 
8591      cursor c_brdn_disp_method(p_project_type varchar2) IS
8592      select BURDEN_AMT_DISPLAY_METHOD
8593      from pa_project_types_all
8594      where PROJECT_TYPE = p_project_type;
8595 
8596 
8597  --BUG 16786658
8598  l_burden_amt_dsplay_method VARCHAR2(1) := 'S'; --DEFAULT SAME LIME
8599 
8600 
8601 Begin
8602 
8603     l_return_status := FND_API.G_RET_STS_SUCCESS ;
8604     -- FPM Dev CR 8 : Added debug messages
8605     g1_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N');
8606 
8607         IF FND_API.TO_BOOLEAN(NVL(p_init_msg_list,FND_API.G_FALSE)) THEN -- Added for required prarameter validation
8608              FND_MSG_PUB.initialize;
8609         END IF;
8610 
8611 
8612     -- Bug 3691289 Added condtion to return if no res list mem id
8613     IF P_res_list_mem_id IS NULL THEN
8614         -- As per Clint Effort to Cost Conversion should not happen if planned effort is not entered at task(which means
8615         -- hiden assignment does not exists)
8616         return;
8617     END IF;
8618 
8619 
8620 
8621     -- Bug 3965584 Begin
8622     -- Get the values from Task assignment.
8623 
8624     OPEN c_get_assgn_details(p_project_id, p_task_id, p_structure_version_id, P_res_list_mem_id);
8625     FETCH c_get_assgn_details INTO l_assgn_rec;
8626     CLOSE c_get_assgn_details;
8627 
8628     l_person_id             := l_assgn_rec.person_id;
8629     l_resource_class_code           := l_assgn_rec.resource_class_code;
8630     l_expenditure_type          := nvl(l_assgn_rec.expenditure_type, l_assgn_rec.rate_expenditure_type);
8631     l_expenditure_ou            := l_assgn_rec.RATE_EXPENDITURE_ORG_ID;
8632     l_org_id                := null;
8633     l_non_labor_resource            := l_assgn_rec.non_labor_resource;
8634     l_nlr_organization_id           := l_assgn_rec.organization_id;
8635     l_rate_incurred_by_organz_id        := l_assgn_rec.organization_id;
8636     l_bom_resource_id           := l_assgn_rec.bom_resource_id;
8637     l_inventory_item_id         := l_assgn_rec.inventory_item_id;
8638     l_txn_currency_code_override        := null;
8639     l_cost_override_rate            := null;
8640     l_mfc_cost_type_id          := l_assgn_rec.mfc_cost_type_id;
8641     l_item_category_id          := l_assgn_rec.item_category_id;
8642     l_job_id                := l_assgn_rec.job_id;
8643     l_unit_of_measure           := l_assgn_rec.unit_of_measure;
8644     l_rate_based_flag           := l_assgn_rec.rate_based_flag;
8645     l_resource_assignment_id        := l_assgn_rec.resource_assignment_id;
8646         l_resource_alias                        := l_assgn_rec.alias;
8647 
8648     IF g1_debug_mode  = 'Y' THEN
8649         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'Values retrived from pa_task_assignments_v', x_Log_Level=> 3);
8650         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_person_id='||l_person_id, x_Log_Level=> 3);
8651         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_resource_class_code='||l_resource_class_code, x_Log_Level=> 3);
8652         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_expenditure_type='||l_expenditure_type, x_Log_Level=> 3);
8653         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_expenditure_ou='||l_expenditure_ou, x_Log_Level=> 3);
8654         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_org_id='||l_org_id, x_Log_Level=> 3);
8655         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_non_labor_resource='||l_non_labor_resource, x_Log_Level=> 3);
8656         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_nlr_organization_id='||l_nlr_organization_id, x_Log_Level=> 3);
8657         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_rate_incurred_by_organz_id='||l_rate_incurred_by_organz_id, x_Log_Level=> 3);
8658         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_bom_resource_id='||l_bom_resource_id, x_Log_Level=> 3);
8659         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_inventory_item_id='||l_inventory_item_id, x_Log_Level=> 3);
8660         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_txn_currency_code_override='||l_txn_currency_code_override, x_Log_Level=> 3);
8661         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_cost_override_rate='||l_cost_override_rate, x_Log_Level=> 3);
8662         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_mfc_cost_type_id='||l_mfc_cost_type_id, x_Log_Level=> 3);
8663         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_item_category_id='||l_item_category_id, x_Log_Level=> 3);
8664         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_job_id='||l_job_id, x_Log_Level=> 3);
8665         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_unit_of_measure='||l_unit_of_measure, x_Log_Level=> 3);
8666         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_rate_based_flag='||l_rate_based_flag, x_Log_Level=> 3);
8667         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_unit_of_measure='||l_unit_of_measure, x_Log_Level=> 3);
8668         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_resource_assignment_id='||l_resource_assignment_id, x_Log_Level=> 3);
8669     END IF;
8670 
8671 
8672     -- Bug 3965584 End
8673 
8674 
8675 
8676     -- If any values are not there at assignment level, then get it using resourse defaults
8677 
8678     l_res_list_memb_id_tbl.extend(1);
8679     l_res_list_memb_id_tbl(1)       := P_res_list_mem_id;
8680     l_calling_mode := p_calling_mode;
8681 
8682     BEGIN
8683             IF g1_debug_mode  = 'Y' THEN
8684                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'Calling get_resource_defaults', x_Log_Level=> 3);
8685                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_task_id '||l_task_id, x_Log_Level=> 3);
8686             END IF;
8687         PA_PLANNING_RESOURCE_UTILS.get_resource_defaults(
8688           p_resource_list_members        =>  l_res_list_memb_id_tbl,
8689           p_project_id                   =>  p_project_id,
8690           x_resource_class_flag          =>  l_resource_class_flag_tbl,
8691           x_resource_class_code          =>  l_resource_class_code_tbl,
8692           x_resource_class_id            =>  l_resource_class_id_tbl,
8693           x_res_type_code                =>  l_res_type_code_tbl,
8694           x_person_id                    =>  l_person_id_tbl,
8695           x_job_id                       =>  l_job_id_tbl,
8696           x_person_type_code             =>  l_person_type_code_tbl,
8697           x_named_role                   =>  l_named_role_tbl,
8698           x_bom_resource_id              =>  l_bom_resource_id_tbl,
8699           x_non_labor_resource           =>  l_non_labor_resource_tbl,
8700           x_inventory_item_id            =>  l_inventory_item_id_tbl,
8701           x_item_category_id             =>  l_item_category_id_tbl,
8702           x_project_role_id              =>  l_project_role_id_tbl,
8703           x_organization_id              =>  l_organization_id_tbl,
8704           x_fc_res_type_code             =>  l_fc_res_type_code_tbl,
8705           x_expenditure_type             =>  l_expenditure_type_tbl,
8706           x_expenditure_category         =>  l_expenditure_category_tbl,
8707           x_event_type                   =>  l_event_type_tbl,
8708           x_revenue_category_code        =>  l_revenue_category_code_tbl,
8709           x_supplier_id                  =>  l_supplier_id_tbl,
8710           x_unit_of_measure              =>  l_unit_of_measure_tbl,
8711           x_spread_curve_id              =>  l_spread_curve_id_tbl,
8712           x_etc_method_code              =>  l_etc_method_code_tbl,
8713           x_mfc_cost_type_id             =>  l_mfc_cost_type_id_tbl,
8714           x_incurred_by_res_flag         =>  l_incurred_by_res_flag_tbl,
8715           x_incur_by_res_class_code      =>  l_incur_by_res_class_code_tbl,
8716           x_Incur_by_role_id             =>  l_Incur_by_role_id_tbl,
8717           x_org_id                       =>  l_org_id_tbl,
8718           X_rate_based_flag              =>  l_rate_based_flag_tbl,
8719           x_rate_expenditure_type        =>  l_rate_expenditure_type_tbl,
8720           x_rate_func_curr_code          =>  l_rate_func_curr_code_tbl,
8721           X_incur_by_res_type        =>  l_incur_by_res_type, -- Bug # 3473324 changes.
8722           x_msg_data                     =>  l_msg_data,
8723           x_msg_count                    =>  l_msg_count,
8724           x_return_status                =>  l_return_status);
8725 
8726     EXCEPTION
8727           WHEN OTHERS THEN
8728            fnd_msg_pub.add_exc_msg(p_pkg_name       => 'pa_progress_utils',
8729                                    p_procedure_name => 'Get_Res_Rate_Burden_Multiplier',
8730                                    p_error_text     => SUBSTRB('pa_planning_resource_utils.get_resource_defaults:'||SQLERRM,1,120));
8731             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_error_text='||SUBSTRB('pa_planning_resource_utils.get_resource_defaults:'||SQLERRM,1,120), x_Log_Level=> 3);
8732             raise fnd_api.g_exc_error;
8733     END;
8734 
8735     -- IF l_return_status =  FND_API.G_RET_STS_SUCCESS THEN  --------------------------------{
8736     FOR i IN l_res_list_memb_id_tbl.FIRST .. l_res_list_memb_id_tbl.LAST LOOP
8737 
8738         -- Bug 3965584 : Values will be taken only if they are not presnt already
8739         IF l_person_id IS NULL THEN
8740             IF l_person_id_tbl.EXISTS(i) AND l_person_id_tbl(i) is not null THEN
8741              l_person_id := l_person_id_tbl(i);
8742             ELSE
8743              l_person_id := null;
8744             END IF;
8745         END IF;
8746 
8747         IF l_resource_class_code IS NULL THEN
8748             IF l_resource_class_code_tbl.EXISTS(i) AND l_resource_class_code_tbl(i) is not null THEN
8749              l_resource_class_code := l_resource_class_code_tbl(i);
8750             ELSE
8751              l_resource_class_code := null;
8752             END IF;
8753             END IF;
8754 
8755             IF l_expenditure_type IS NULL THEN
8756         IF l_expenditure_type_tbl.EXISTS(i) and l_expenditure_type_tbl(i) is not null THEN
8757             l_expenditure_type := l_expenditure_type_tbl(i);
8758         ELSE
8759             IF l_rate_expenditure_type_tbl.EXISTS(i) THEN
8760                 l_expenditure_type := l_rate_expenditure_type_tbl(i);
8761             ELSE
8762                 l_expenditure_type := null;
8763             END IF;
8764         END IF;
8765         END IF;
8766 
8767         --bug# 3819400 Satish start
8768             /*IF l_rate_incurred_by_org_id_tbl.EXISTS(i) and l_rate_incurred_by_org_id_tbl(i) is not null THEN
8769                 l_expenditure_OU := l_rate_incurred_by_org_id_tbl(i);
8770             ELSE
8771                 l_expenditure_OU := null;
8772             END IF;*/
8773 
8774         /* bug 3823945
8775             IF l_organization_id_tbl.EXISTS(i) and l_organization_id_tbl(i) is not null THEN
8776                 l_expenditure_OU := l_organization_id_tbl(i);
8777             ELSE
8778                 l_expenditure_OU := null;
8779             END IF;
8780         */
8781         --bug# 3819400 Satish end
8782 
8783         -- bug 3823945
8784         IF l_expenditure_OU  IS NULL THEN
8785             IF l_org_id_tbl.EXISTS(i) and l_org_id_tbl(i) is not null THEN
8786             l_expenditure_OU := l_org_id_tbl(i);
8787             ELSE
8788             l_expenditure_OU := null;
8789             END IF;
8790         END IF;
8791         -- bug 3823945
8792 
8793         IF l_org_id  IS NULL THEN
8794             IF l_org_id_tbl.EXISTS(i) and l_org_id_tbl(i) is not null THEN
8795             l_org_id := l_org_id_tbl(i);
8796             ELSE
8797             l_org_id := null;
8798             END IF;
8799         END IF;
8800 
8801         IF l_non_labor_resource  IS NULL THEN
8802             IF l_non_labor_resource_tbl.EXISTS(i) and l_non_labor_resource_tbl(i) is not null THEN
8803             l_non_labor_resource := l_non_labor_resource_tbl(i);
8804             ELSE
8805             l_non_labor_resource := null;
8806             END IF;
8807         END IF;
8808 
8809         IF l_nlr_organization_id  IS NULL THEN
8810             IF l_organization_id_tbl.EXISTS(i) and l_organization_id_tbl(i) is not null THEN
8811              l_nlr_organization_id := l_organization_id_tbl(i);
8812             ELSE
8813              l_nlr_organization_id := null;
8814             END IF;
8815             END IF;
8816 
8817         IF l_rate_incurred_by_organz_id  IS NULL THEN
8818             IF l_rate_incurred_by_org_id_tbl.EXISTS(i) and l_rate_incurred_by_org_id_tbl(i) is not null THEN
8819              --l_rate_incurred_by_organz_id := l_rate_incurred_by_org_id_tbl(i);
8820              l_rate_incurred_by_organz_id := l_organization_id_tbl(i);  --bug 3901289
8821             ELSE
8822              l_rate_incurred_by_organz_id := null;
8823             END IF;
8824             END IF;
8825 
8826         IF l_bom_resource_id  IS NULL THEN
8827             IF l_bom_resource_id_tbl.EXISTS(i) and l_bom_resource_id_tbl(i) is not null THEN
8828               l_bom_resource_id := l_bom_resource_id_tbl(i);
8829             ELSE
8830               l_bom_resource_id := null;
8831             END IF;
8832             END IF;
8833 
8834         IF l_inventory_item_id  IS NULL THEN
8835             IF l_inventory_item_id_tbl.EXISTS(i) and l_inventory_item_id_tbl(i) is not null THEN
8836             l_inventory_item_id := l_inventory_item_id_tbl(i);
8837             ELSE
8838             l_inventory_item_id := null;
8839             END IF;
8840             END IF;
8841 
8842         -- Bug 3965584 : Not required
8843             --IF l_override_currency_code_tbl.EXISTS(i) and l_override_currency_code_tbl(i) is not null THEN
8844             --    l_txn_currency_code_override := l_override_currency_code_tbl(i);
8845             --ELSE
8846             --    l_txn_currency_code_override := null;
8847             --END IF;
8848 
8849         -- Bug 3965584 : Not required
8850             --IF l_cost_rate_override_tbl.EXISTS(i) and l_cost_rate_override_tbl(i) is not null THEN
8851             --    l_cost_override_rate := l_cost_rate_override_tbl(i);
8852             --ELSE
8853             --    l_cost_override_rate := null;
8854             --END IF;
8855 
8856         IF l_mfc_cost_type_id  IS NULL THEN
8857             IF l_mfc_cost_type_id_tbl.EXISTS(i) and l_mfc_cost_type_id_tbl(i) is not null THEN
8858             l_mfc_cost_type_id := l_mfc_cost_type_id_tbl(i);
8859             ELSE
8860             l_mfc_cost_type_id := null;
8861             END IF;
8862             END IF;
8863 
8864         IF l_item_category_id  IS NULL THEN
8865             IF l_item_category_id_tbl.EXISTS(i) and l_item_category_id_tbl(i) is not null THEN
8866             l_item_category_id := l_item_category_id_tbl(i);
8867             ELSE
8868             l_item_category_id := null;
8869             END IF;
8870             END IF;
8871 
8872         IF l_job_id  IS NULL THEN
8873             IF l_job_id_tbl.EXISTS(i) and l_job_id_tbl(i) is not null THEN
8874             l_job_id := l_job_id_tbl(i);
8875             ELSE
8876             l_job_id := null;
8877             END IF;
8878             END IF;
8879 
8880         IF l_rate_based_flag  IS NULL THEN
8881             IF l_rate_based_flag_tbl.EXISTS(i) and l_rate_based_flag_tbl(i) is not null THEN
8882             l_rate_based_flag := l_rate_based_flag_tbl(i);
8883             ELSE
8884             l_rate_based_flag := null;
8885             END IF;
8886             END IF;
8887         --bug 3733606
8888 
8889         IF l_unit_of_measure  IS NULL THEN
8890             IF l_unit_of_measure_tbl.EXISTS(i) and l_unit_of_measure_tbl(i) is not null THEN
8891             l_unit_of_measure := l_unit_of_measure_tbl(i);
8892             ELSE
8893             l_unit_of_measure := null;
8894             END IF;
8895             END IF;
8896     END LOOP; -- Bug 3965584 : Reduced the scope of FOR LOOP
8897 
8898     IF g1_debug_mode  = 'Y' THEN
8899         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'Values retrived from get_res_defaults', x_Log_Level=> 3);
8900         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_person_id='||l_person_id, x_Log_Level=> 3);
8901         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_resource_class_code='||l_resource_class_code, x_Log_Level=> 3);
8902         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_expenditure_type='||l_expenditure_type, x_Log_Level=> 3);
8903         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_expenditure_ou='||l_expenditure_ou, x_Log_Level=> 3);
8904         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_org_id='||l_org_id, x_Log_Level=> 3);
8905         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_non_labor_resource='||l_non_labor_resource, x_Log_Level=> 3);
8906         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_nlr_organization_id='||l_nlr_organization_id, x_Log_Level=> 3);
8907         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_rate_incurred_by_organz_id='||l_rate_incurred_by_organz_id, x_Log_Level=> 3);
8908         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_bom_resource_id='||l_bom_resource_id, x_Log_Level=> 3);
8909         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_inventory_item_id='||l_inventory_item_id, x_Log_Level=> 3);
8910         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_txn_currency_code_override='||l_txn_currency_code_override, x_Log_Level=> 3);
8911         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_cost_override_rate='||l_cost_override_rate, x_Log_Level=> 3);
8912         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_mfc_cost_type_id='||l_mfc_cost_type_id, x_Log_Level=> 3);
8913         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_item_category_id='||l_item_category_id, x_Log_Level=> 3);
8914         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_job_id='||l_job_id, x_Log_Level=> 3);
8915         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_unit_of_measure='||l_unit_of_measure, x_Log_Level=> 3);
8916         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_rate_based_flag='||l_rate_based_flag, x_Log_Level=> 3);
8917         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_unit_of_measure='||l_unit_of_measure, x_Log_Level=> 3);
8918         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_resource_assignment_id='||l_resource_assignment_id, x_Log_Level=> 3);
8919     END IF;
8920 
8921     --bug 3821299
8922     IF p_calling_mode = 'PLAN_RATES' THEN
8923         l_etc_flag := 'Y';
8924     END IF;
8925     --bug 3821299
8926 
8927 
8928 
8929         /* Select the project Type */
8930         SELECT project_type, carrying_out_organization_id
8931         INTO   l_project_type, l_carrying_out_org_id
8932         FROM   pa_projects_all
8933         WHERE  project_id = p_project_id;
8934 
8935 
8936     /* Select the resource name  TO BE CHECKED
8937     BEGIN
8938         SELECT resource_alias
8939         INTO   l_resource_alias
8940         FROM   pa_task_assignments_v
8941         WHERE  resource_list_member_id = l_BOM_resource_id
8942         AND project_id = p_project_id; -- Modifications for Bug # 3688902.
8943     EXCEPTION
8944         WHEN NO_DATA_FOUND THEN
8945             NULL;
8946         WHEN OTHERS THEN
8947             NULL;
8948     END;
8949         */
8950     --bug 3860575 start
8951     /*-- FPM Dev CR 5 Begin
8952      BEGIN
8953          SELECT task_id
8954          INTO   l_task_id
8955          FROM   pa_task_assignments_v
8956          WHERE  resource_list_member_id = l_res_list_memb_id_tbl(i)
8957          AND project_id = p_project_id ;
8958     EXCEPTION
8959         WHEN NO_DATA_FOUND THEN
8960             NULL;
8961         WHEN OTHERS THEN
8962             NULL;
8963     END;
8964     -- FPM Dev CR 5 End*/
8965 
8966     --bug 3860575 end
8967 
8968     -- FPM Dev CR 5
8969     IF upper(l_resource_class_code) = 'PEOPLE' AND l_rate_override_to_organz_id IS NULL AND l_person_id is NOT NULL THEN
8970         --l_rate_override_to_organz_id := l_nlr_organization_id;
8971         l_rate_override_to_organz_id := null;  --bug 3901289
8972     END IF;
8973 
8974     /* Calling the  Api to get the Burden/Raw Rate */
8975     --bug# 3801523  moved this begin below.
8976     --Begin
8977 
8978     --maansari6/14   bug 3686920
8979     -- amksingh
8980     -- 3686920 : using l_use_planning_rates_flag to call the API GET_PLAN_VERSION_DTLS
8981     -- also when l_use_planning_rates_flag is N then we should be using ACTUAL RATES so passing ACTUAL_RATES
8982     -- to costing API
8983     -- We should not be calling Get_Default_Sch_Ids as it will not retun actual values
8984     -- If at all we need this, then we should get this value from pa_tasks and then from pa_projects
8985     --bug 3733606 moved from below
8986 
8987     BEGIN
8988         l_plan_version_id := Pa_Fp_wp_gen_amt_utils.get_wp_version_id(
8989                     p_project_id => p_project_id,
8990                     p_plan_type_id => -1,
8991                         p_proj_str_ver_id => p_structure_version_id);
8992 
8993         -- Selecting res_class_raw_cost_sch_id here as it is not available in FP rec type
8994         SELECT use_planning_rates_flag,res_class_raw_cost_sch_id INTO l_use_planning_rates_flag, l_pl_res_class_raw_cost_sch_id
8995         FROM pa_proj_fp_options
8996         WHERE fin_plan_version_id = l_plan_version_id
8997         AND project_id = p_project_id;
8998 
8999     EXCEPTION
9000         WHEN OTHERS THEN
9001             fnd_msg_pub.add_exc_msg(p_pkg_name       => 'pa_progress_utils',
9002                                p_procedure_name => 'Get_Res_Rate_Burden_Multiplier',
9003                                p_error_text     => SUBSTRB('Pa_Fp_wp_gen_amt_utils.get_wp_version_id:'||SQLERRM,1,120));
9004             pa_debug.write(x_Module=>'Pa_Fp_wp_gen_amt_utils.get_wp_version_id', x_Msg => 'p_error_text='||SUBSTRB('PA_FP_GEN_AMOUNT_UTILS.GET_PLAN_VERSION_DTLS:'||SQLERRM,1,120), x_Log_Level=> 3);
9005             raise fnd_api.g_exc_error;
9006     END;
9007 
9008     -- Bug 3691289 , rates from pa_proj_fp_options shd be selected always as we need them further even in actual rate mode
9009     --   IF p_calling_mode = 'PLAN_RATES'
9010     --   THEN
9011     -- Bug 4233420 : Moved the logic of getting rates from budget_lines up in the code here.
9012     IF l_etc_flag = 'Y' THEN
9013         IF g1_debug_mode  = 'Y' THEN
9014             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_etc_flag is Y' , x_Log_Level=> 3);
9015             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_plan_version_id='||l_plan_version_id, x_Log_Level=> 3);
9016             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_resource_assignment_id='||l_resource_assignment_id, x_Log_Level=> 3);
9017         END IF;
9018 
9019         OPEN get_override_rate(l_plan_version_id, l_resource_assignment_id);
9020         FETCH get_override_rate INTO l_raw_override_rate, l_burden_override_rate;
9021         CLOSE get_override_rate;
9022 
9023         --- IPM changes
9024         OPEN get_asgn_override_rate(l_plan_version_id, l_resource_assignment_id);
9025         FETCH get_asgn_override_rate INTO l_asgn_raw_override_rate, l_asgn_burden_override_rate;
9026         CLOSE get_asgn_override_rate;
9027 
9028         IF g1_debug_mode  = 'Y' THEN
9029             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_raw_override_rate='||l_raw_override_rate, x_Log_Level=> 3);
9030             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_burden_override_rate='||l_burden_override_rate, x_Log_Level=> 3);
9031         END IF;
9032 
9033         --- IPM changes
9034         IF l_raw_override_rate IS NOT NULL THEN
9035               x_resource_raw_rate := l_raw_override_rate;
9036         ELSIF l_asgn_raw_override_rate IS NOT NULL THEN
9037               x_resource_raw_rate := l_asgn_raw_override_rate;
9038         END IF;
9039 
9040         IF l_burden_override_rate IS NOT NULL THEN
9041                x_resource_burden_rate := l_burden_override_rate;
9042                x_burden_multiplier := (l_burden_override_rate - 1); -- only for non rate based assignments.
9043         ELSIF l_asgn_burden_override_rate IS NOT NULL THEN
9044                x_resource_burden_rate := l_asgn_burden_override_rate;
9045                x_burden_multiplier := (l_asgn_burden_override_rate -1);---only for non rate based assignments.
9046         END IF;
9047 
9048         x_resource_curr_code := p_currency_code;
9049 
9050         -- NOTE: The reason that we are setting: x_burden_multiplier := (l_burden_multiplier - 1) and passing this
9051         -- value to the calling API, when a non-rate based resource has an override burden rate is because of the
9052         -- following:
9053         -- The calling API uses the formula: etc burden cost = etc raw cost * (x_burden_multiplier + 1) to calculate
9054         -- the value of etc burden cost.
9055         -- For a non-rate based resource without any override burden rate the burden multiplier is derived from the
9056         -- burden schedule and the above formula holds good.
9057         -- However, when a non-rate based resource has an override burden rate we should calculate the the value of
9058         -- etc burden cost as: etc burden cost = etc raw cost * override burden rate. Hence, we pass back:
9059         -- x_burden_multiplier = (override burden rate - 1) through our above code to the calling API so that the
9060         -- formula: etc raw cost * (x_burden_multiplier + 1) in the calling API equates to:
9061         -- etc raw cost * override burden rate.
9062     END IF;  -- l_etc_flag = 'Y'
9063 
9064     IF l_rate_based_flag = 'Y' THEN
9065         IF x_resource_raw_rate IS NOT NULL AND x_resource_burden_rate IS NOT NULL THEN
9066             return;
9067         END IF;
9068     ELSE
9069         IF x_burden_multiplier IS NOT NULL THEN
9070             return;
9071         END IF;
9072     END IF;
9073 
9074 
9075     BEGIN
9076         --     IF l_use_planning_rates_flag = 'Y' THEN
9077         PA_FP_GEN_AMOUNT_UTILS.GET_PLAN_VERSION_DTLS(
9078               P_PROJECT_ID                     => p_project_id,
9079               P_BUDGET_VERSION_ID              => l_plan_version_id,
9080               X_FP_COLS_REC                    => l_fp_cols_rec,
9081               X_RETURN_STATUS                  => l_return_status,
9082               X_MSG_COUNT                      => l_msg_count,
9083               X_MSG_DATA                       => l_msg_data);
9084 
9085 
9086         l_plan_cost_burden_sch_id       := l_fp_cols_rec.X_BURDEN_RATE_SCH_ID;
9087         l_plan_cost_job_rate_sch_id     := l_fp_cols_rec.X_COST_JOB_RATE_SCH_ID;
9088         l_plan_cost_emp_rate_sch_id     := l_fp_cols_rec.X_COST_EMP_RATE_SCH_ID;
9089         l_plan_cost_nlr_rate_sch_id     := l_fp_cols_rec.X_CNON_LABOR_RES_RATE_SCH_ID;
9090         --    l_pl_res_class_raw_cost_sch_id  := l_fp_cols_rec.x_fp_res_cl_raw_cost_sch_id;
9091         l_pl_cost_res_class_rate_sc_id := l_fp_cols_rec.X_cost_res_class_rate_sch_id;
9092 
9093         IF l_use_planning_rates_flag = 'Y' THEN
9094             l_cost_res_class_rate_sch_id := l_pl_cost_res_class_rate_sc_id;
9095         ELSE
9096             l_cost_res_class_rate_sch_id := l_pl_res_class_raw_cost_sch_id;
9097         END IF;
9098 
9099     EXCEPTION when others then
9100         fnd_msg_pub.add_exc_msg(p_pkg_name       => 'pa_progress_utils',
9101                                p_procedure_name => 'Get_Res_Rate_Burden_Multiplier',
9102                                p_error_text     => SUBSTRB('PA_FP_GEN_AMOUNT_UTILS.GET_PLAN_VERSION_DTLS:'||SQLERRM,1,120));
9103         pa_debug.write(x_Module=>'PA_FP_GEN_AMOUNT_UTILS.GET_PLAN_VERSION_DTLS', x_Msg => 'p_error_text='||SUBSTRB('PA_FP_GEN_AMOUNT_UTILS.GET_PLAN_VERSION_DTLS:'||SQLERRM,1,120), x_Log_Level=> 3);
9104         raise fnd_api.g_exc_error;
9105     END;
9106 
9107     IF  l_return_status <> 'S' AND l_msg_data IS NOT NULL   THEN
9108             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9109                              p_msg_name       => l_msg_data);
9110             x_msg_data := l_msg_data;
9111             x_return_status := 'E';
9112             x_msg_count := fnd_msg_pub.count_msg;
9113             RAISE  FND_API.G_EXC_ERROR;
9114     END IF;
9115 
9116 
9117     --   END IF;   --<< p_calling_modfe = 'PLAN_RATES'
9118 
9119 
9120     IF NVL(l_use_planning_rates_flag,'N') = 'N' THEN
9121         l_calling_mode := 'ACTUAL_RATES';
9122     ELSE
9123         l_calling_mode := p_calling_mode;
9124     END IF;
9125 
9126     -- Bug 3691289 : Added below condition so that planning rates are not passed to the API if mode is actual rates
9127     IF l_calling_mode = 'ACTUAL_RATES' THEN
9128           l_plan_cost_burden_sch_id      := null;
9129           l_plan_cost_job_rate_sch_id    := null;
9130           l_plan_cost_emp_rate_sch_id    := null;
9131           l_plan_cost_nlr_rate_sch_id    := null;
9132     END IF;
9133 
9134     --bug# 3801523 If cost based assignments then call Get_burden_sch_details  Satish start
9135 
9136     IF g1_debug_mode  = 'Y' THEN
9137         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_rate_based_flag :'||l_rate_based_flag, x_Log_Level=> 3);
9138     END IF;
9139 
9140     IF l_rate_based_flag = 'Y' THEN
9141     --maansari6/14
9142             IF g1_debug_mode  = 'Y' THEN
9143             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'Calling Get_Plan_Actual_Cost_Rates', x_Log_Level=> 3);
9144             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_calling_mode='||l_calling_mode, x_Log_Level=> 3);
9145             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_project_type='||l_project_type, x_Log_Level=> 3);
9146             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_project_id='||p_project_id, x_Log_Level=> 3);
9147             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_task_id='||to_number(null), x_Log_Level=> 3);
9148             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_top_task_id='||l_top_task_id, x_Log_Level=> 3);
9149             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_Exp_item_date='||sysdate, x_Log_Level=> 3);
9150             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_as_of_date='||p_as_of_date, x_Log_Level=> 3);   --
9151             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_expenditure_type='||l_expenditure_type, x_Log_Level=> 3);
9152             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_expenditure_OU='||l_expenditure_OU, x_Log_Level=> 3);
9153             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_project_OU='||l_org_id, x_Log_Level=> 3);
9154             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_Quantity='||1, x_Log_Level=> 3);
9155             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_resource_class='||l_resource_class_code, x_Log_Level=> 3);
9156             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_person_id='||l_person_id, x_Log_Level=> 3);
9157             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_non_labor_resource='||l_non_labor_resource, x_Log_Level=> 3);
9158             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_NLR_organization_id='||l_nlr_organization_id, x_Log_Level=> 3);
9159             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_override_organization_id='||l_rate_override_to_organz_id, x_Log_Level=> 3);
9160             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_incurred_by_organization_id='||l_rate_incurred_by_organz_id, x_Log_Level=> 3);
9161             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_inventory_item_id='||l_inventory_item_id, x_Log_Level=> 3);
9162             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_BOM_resource_id='||l_BOM_resource_id, x_Log_Level=> 3);
9163             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_override_trxn_curr_code='||l_txn_currency_code_override, x_Log_Level=> 3);
9164             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_override_burden_cost_rate='||l_burden_override_multiplier, x_Log_Level=> 3);
9165             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_override_trxn_cost_rate='||l_cost_override_rate, x_Log_Level=> 3);
9166             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_override_trxn_raw_cost='||l_raw_cost, x_Log_Level=> 3);
9167             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_override_trxn_burden_cost='||l_burden_cost, x_Log_Level=> 3);
9168             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_mfc_cost_type_id='||l_mfc_cost_type_id, x_Log_Level=> 3);
9169             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_mfc_cost_source='||l_mfc_cost_source, x_Log_Level=> 3);
9170             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_item_category_id='||l_item_category_id, x_Log_Level=> 3);
9171             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_plan_cost_burden_sch_id='||l_plan_cost_burden_sch_id, x_Log_Level=> 3);
9172             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_plan_cost_job_rate_sch_id='||l_plan_cost_job_rate_sch_id, x_Log_Level=> 3);
9173             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_plan_cost_emp_rate_sch_id='||l_plan_cost_emp_rate_sch_id, x_Log_Level=> 3);
9174             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_plan_cost_nlr_rate_sch_id='||l_plan_cost_nlr_rate_sch_id, x_Log_Level=> 3);
9175             END IF;
9176 
9177         BEGIN
9178 
9179              PA_COST1.Get_Plan_Actual_Cost_Rates
9180             (p_calling_mode                 =>l_calling_mode --'ACTUAL_RATES' Bug 3627315
9181             ,p_project_type                 =>l_project_type
9182             ,p_project_id                   =>p_project_id
9183             --,p_task_id                      => null ---- TILL THE ISSUE IS FIXED l_task_id
9184             ,p_task_id                      => l_task_id --bug 3860575
9185             ,p_top_task_id                  =>l_top_task_id
9186             ,p_Exp_item_date                => p_as_of_date   --bug 3901289
9187             ,p_expenditure_type             =>l_expenditure_type
9188             ,p_expenditure_OU               =>l_expenditure_OU
9189             ,p_project_OU                   =>l_org_id
9190             ,p_Quantity                     =>1
9191             ,p_resource_class               =>l_resource_class_code    /* resource_class_code for Resource Class */
9192             ,p_person_id                    =>l_person_id
9193             ,p_non_labor_resource           =>l_non_labor_resource
9194             ,p_NLR_organization_id          =>l_nlr_organization_id
9195             ,p_override_organization_id     =>l_rate_override_to_organz_id
9196             ,p_incurred_by_organization_id  =>l_rate_incurred_by_organz_id
9197             ,p_inventory_item_id            =>l_inventory_item_id
9198             ,p_BOM_resource_id              =>l_BOM_resource_id
9199             ,p_override_trxn_curr_code      =>l_txn_currency_code_override -- P_override_txn_currency_code Bug 3632946
9200             ,p_override_burden_cost_rate    =>l_burden_override_multiplier
9201             ,p_override_trxn_cost_rate      =>l_cost_override_rate
9202             ,p_override_trxn_raw_cost       =>l_raw_cost --P_dummy_override_raw_cost Bug 3632946
9203             ,p_override_trxn_burden_cost    =>l_burden_cost
9204             ,p_mfc_cost_type_id             =>l_mfc_cost_type_id
9205             ,p_mfc_cost_source              =>l_mfc_cost_source
9206             ,p_item_category_id             =>l_item_category_id
9207             ,p_job_id                       =>l_job_id
9208             --bug 3686920
9209             --maansari6/14      ,p_plan_cost_burden_sch_id      => l_plan_cost_burden_sch_id -- Bug 3632946 : Added this parameter
9210             --maansari6/14
9211             ,p_plan_cost_burden_sch_id      => l_plan_cost_burden_sch_id
9212             ,p_plan_cost_job_rate_sch_id    => l_plan_cost_job_rate_sch_id
9213             ,p_plan_cost_emp_rate_sch_id    => l_plan_cost_emp_rate_sch_id
9214             ,p_plan_cost_nlr_rate_sch_id    => l_plan_cost_nlr_rate_sch_id
9215             --maansari6/14   bug 3686920
9216             ,x_trxn_curr_code               =>l_trxn_curr_code
9217             ,x_trxn_raw_cost                =>l_txn_raw_cost
9218             ,x_trxn_raw_cost_rate           =>l_txn_cost_rate
9219             ,x_trxn_burden_cost             =>l_txn_burden_cost
9220             ,x_trxn_burden_cost_rate        =>l_txn_burden_cost_rate
9221             ,x_burden_multiplier            =>l_burden_multiplier
9222             ,x_cost_ind_compiled_set_id     =>l_cost_ind_compiled_set_id
9223             ,x_raw_cost_rejection_code      =>l_raw_cost_rejection_code
9224             ,x_burden_cost_rejection_code   =>l_burden_cost_rejection_code
9225             ,x_return_status                =>l_return_status
9226             ,x_error_msg_code               =>l_msg_data );
9227 
9228 
9229          --BUG 16786658
9230 
9231             OPEN c_brdn_disp_method(l_project_type);
9232             FETCH c_brdn_disp_method into l_burden_amt_dsplay_method;
9233             CLOSE c_brdn_disp_method;
9234 
9235             -- S = Burden Cost is calculate on Same Line, D is calculated in different lines in which
9236             -- case assignment burden cost rate is same as raw cost rate
9237 
9238          IF NVL(l_burden_amt_dsplay_method,'S') = 'D' THEN
9239             --multiplier is ignored being set to 0 and burden rate is same as raw cost rate
9240             l_txn_burden_cost := l_txn_cost_rate;
9241             l_txn_burden_cost_rate := l_txn_cost_rate;
9242             l_burden_multiplier := 0;
9243           END IF;
9244 
9245 
9246                 IF g1_debug_mode  = 'Y' THEN
9247                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'After call PA_COST1.Get_Plan_Actual_Cost_Rates', x_Log_Level=> 3);
9248                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_return_status='||l_return_status, x_Log_Level=> 3);
9249                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_msg_data='||l_msg_data, x_Log_Level=> 3);
9250                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_trxn_curr_code='||l_trxn_curr_code, x_Log_Level=> 3);
9251                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_txn_raw_cost='||l_txn_raw_cost, x_Log_Level=> 3);
9252                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_txn_cost_rate='||l_txn_cost_rate, x_Log_Level=> 3);
9253                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_txn_burden_cost='||l_txn_burden_cost, x_Log_Level=> 3);
9254                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_txn_burden_cost_rate='||l_txn_burden_cost_rate, x_Log_Level=> 3);
9255                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_burden_multiplier='||l_burden_multiplier, x_Log_Level=> 3);
9256                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_cost_ind_compiled_set_id='||l_cost_ind_compiled_set_id, x_Log_Level=> 3);
9257                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_raw_cost_rejection_code='||l_raw_cost_rejection_code, x_Log_Level=> 3);
9258                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_burden_cost_rejection_code='||l_burden_cost_rejection_code, x_Log_Level=> 3);
9259             END IF;
9260         EXCEPTION
9261             WHEN OTHERS THEN
9262 
9263              -- FPM Dev CR 5 : If the above API does not retun then populate it with 0
9264                 x_resource_raw_rate := 0;
9265             x_resource_burden_rate := 0;
9266             x_resource_curr_code :=  l_trxn_curr_code;
9267             --  X_dummy_burden_cost := 0;
9268                 X_burden_multiplier := 0;
9269                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_error_text='||SUBSTRB('PA_COST1.Get_Plan_Actual_Cost_Rates:'||SQLERRM,1,120), x_Log_Level=> 3);
9270         END;
9271 
9272         --bug 3733606
9273         IF l_return_status <> 'S' THEN
9274             -- Bug 3691289 : l_cost_res_class_rate_sch_id is derived above
9275             -- IF l_resource_class_code <> 'PEOPLE'
9276             -- THEN
9277             --    l_cost_res_class_rate_sch_id := l_plan_cost_nlr_rate_sch_id;
9278             -- ELSE
9279             --    IF l_plan_cost_emp_rate_sch_id IS NOT NULL
9280             --    THEN
9281             --        l_cost_res_class_rate_sch_id := l_plan_cost_emp_rate_sch_id;
9282             --    ELSE
9283             --        l_cost_res_class_rate_sch_id := l_plan_cost_job_rate_sch_id;
9284             --    END IF;
9285             -- END IF;
9286 
9287             BEGIN
9288                     IF g1_debug_mode  = 'Y' THEN
9289                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'Calling PA_PLAN_REVENUE.Get_plan_res_class_rates', x_Log_Level=> 3);
9290                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_project_type='||l_project_type, x_Log_Level=> 3);
9291                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_project_id='||p_project_id, x_Log_Level=> 3);
9292                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_resource_class='||l_resource_class_code, x_Log_Level=> 3);
9293                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_use_planning_rates_flag='||l_use_planning_rates_flag, x_Log_Level=> 3);
9294                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_rate_based_flag='||'Y', x_Log_Level=> 3);
9295                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_uom='||l_unit_of_measure, x_Log_Level=> 3);
9296                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_project_organz_id='||l_carrying_out_org_id, x_Log_Level=> 3);
9297                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_cost_res_class_rate_sch_id='||l_cost_res_class_rate_sch_id, x_Log_Level=> 3);
9298                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_plan_burden_cost_sch_id='||l_plan_cost_burden_sch_id, x_Log_Level=> 3);
9299                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_project_org_id='||l_org_id, x_Log_Level=> 3);
9300                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_incurred_by_organz_id='||l_rate_incurred_by_organz_id, x_Log_Level=> 3);
9301                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_override_to_organz_id='||l_rate_override_to_organz_id, x_Log_Level=> 3);
9302                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_expenditure_org_id='||l_expenditure_OU, x_Log_Level=> 3);
9303                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_nlr_organization_id='||l_nlr_organization_id, x_Log_Level=> 3);
9304                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_txn_currency_code='||p_currency_code, x_Log_Level=> 3);
9305                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_expenditure_type='||l_expenditure_type, x_Log_Level=> 3);
9306                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_raw_cost='||l_raw_cost, x_Log_Level=> 3);
9307                 END IF;
9308 
9309                 PA_PLAN_REVENUE.Get_plan_res_class_rates  (
9310                        p_project_type                   => l_project_type
9311                       ,p_project_id                     => p_project_id
9312                       --,p_task_id                        => null
9313                       ,p_task_id                      => l_task_id --bug 3860575
9314                       ,p_resource_class                 => l_resource_class_code
9315                       ,p_use_planning_rates_flag        => l_use_planning_rates_flag
9316                       ,p_rate_based_flag                => 'Y'
9317                       ,p_uom                            => l_unit_of_measure
9318                       ,p_project_organz_id              => l_carrying_out_org_id
9319                       ,p_cost_res_class_rate_sch_id     => l_cost_res_class_rate_sch_id
9320                       ,p_plan_burden_cost_sch_id        => l_plan_cost_burden_sch_id
9321                       ,p_quantity                       => 1
9322                       ,p_item_date                      => p_as_of_date  --SYSDATE
9323               --bug 3954250
9324                       ,p_schedule_type                  => 'COST'
9325                       ,p_project_org_id                 => l_org_id
9326                       ,p_incurred_by_organz_id          => l_rate_incurred_by_organz_id
9327                       ,p_override_to_organz_id          => l_rate_override_to_organz_id
9328                       ,p_expenditure_org_id             => l_expenditure_OU
9329                       ,p_nlr_organization_id            => l_nlr_organization_id
9330                       ,p_txn_currency_code              => p_currency_code
9331                       ,p_expenditure_type               => l_expenditure_type
9332                       ,p_raw_cost                       => l_raw_cost
9333                       ,p_system_linkage                 => null
9334                       ,p_person_id                      => l_person_id -- Bug 3861970, 3879461
9335                       ,p_job_id                         => l_job_id -- Bug 3861970, 3879461
9336                       ,x_bill_rate                      => l_bill_rate
9337                       ,x_cost_rate                      => l_txn_cost_rate
9338                       ,x_burden_cost_rate               => l_txn_burden_cost_rate
9339                       ,x_burden_multiplier              => l_burden_multiplier
9340                    -- ,x_raw_cost                       => l_raw_cost   * commented for Bug: 4537865
9341                       ,x_raw_cost           => l_new_raw_cost  --added for Bug 4537865
9342                       ,x_burden_cost                    => l_burden_cost
9343                       ,x_raw_revenue                    => l_raw_revenue
9344                       ,x_bill_markup_percentage         => l_bill_markup_percentage
9345                       ,x_cost_markup_percentage         => l_cost_markup_percentage
9346                       ,x_cost_txn_curr_code             => l_trxn_curr_code
9347                       ,x_rev_txn_curr_code              => l_rev_txn_curr_code
9348                       ,x_raw_cost_rejection_code        => l_raw_cost_rejection_code
9349                       ,x_burden_cost_rejection_code     => l_burden_cost_rejection_code
9350                       ,x_revenue_rejection_code         => l_revenue_rejection_code
9351                       ,x_cost_ind_compiled_set_id       => l_cost_ind_compiled_set_id
9352                       ,x_return_status                  => l_return_status
9353                       ,x_msg_count                      => l_msg_count
9354                       ,x_msg_data                       => l_msg_data
9355                      );
9356                 --added for Bug 4537865
9357                 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
9358                     l_raw_cost := l_new_raw_cost;
9359                     END IF;
9360                  --added for Bug 4537865
9361                 IF g1_debug_mode  = 'Y' THEN
9362                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'After Call PA_PLAN_REVENUE.Get_plan_res_class_rates', x_Log_Level=> 3);
9363                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_return_status='||l_return_status, x_Log_Level=> 3);
9364                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_msg_count='||l_msg_count, x_Log_Level=> 3);
9365                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_msg_data='||l_msg_data, x_Log_Level=> 3);
9366                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_bill_rate='||l_bill_rate, x_Log_Level=> 3);
9367                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_txn_cost_rate='||l_txn_cost_rate, x_Log_Level=> 3);
9368                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_txn_burden_cost_rate='||l_txn_burden_cost_rate, x_Log_Level=> 3);
9369                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_burden_multiplier='||l_burden_multiplier, x_Log_Level=> 3);
9370                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_raw_cost='||l_raw_cost, x_Log_Level=> 3);
9371                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_burden_cost='||l_burden_cost, x_Log_Level=> 3);
9372                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_raw_revenue='||l_raw_revenue, x_Log_Level=> 3);
9373                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_bill_markup_percentage='||l_bill_markup_percentage, x_Log_Level=> 3);
9374                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_cost_markup_percentage='||l_cost_markup_percentage, x_Log_Level=> 3);
9375                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_trxn_curr_code='||l_trxn_curr_code, x_Log_Level=> 3);
9376                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_rev_txn_curr_code='||l_rev_txn_curr_code, x_Log_Level=> 3);
9377                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_raw_cost_rejection_code='||l_raw_cost_rejection_code, x_Log_Level=> 3);
9378                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_burden_cost_rejection_code='||l_burden_cost_rejection_code, x_Log_Level=> 3);
9379                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_revenue_rejection_code='||l_revenue_rejection_code, x_Log_Level=> 3);
9380                     pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_cost_ind_compiled_set_id='||l_cost_ind_compiled_set_id, x_Log_Level=> 3);
9381                 END IF;
9382             EXCEPTION
9383                 WHEN OTHERS THEN
9384                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'pa_progress_utils',
9385                                    p_procedure_name => 'Get_Res_Rate_Burden_Multiplier',
9386                                    p_error_text     => SUBSTRB('PA_PLAN_REVENUE.Get_plan_res_class_rates:'||SQLERRM,1,120));
9387                     pa_debug.write(x_Module=>'PA_PLAN_REVENUE.Get_plan_res_class_rates', x_Msg => 'p_error_text='||SUBSTRB('PA_PLAN_REVENUE.Get_plan_res_class_rates:'||SQLERRM,1,120), x_Log_Level=> 3);
9388                 raise fnd_api.g_exc_error;
9389             END;
9390         END IF;   --< l_return_status <> 'S'>
9391         --bug 3733606
9392 
9393         IF g1_debug_mode  = 'Y' THEN
9394             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'After Call Get_Plan_Actual_Cost_Rates', x_Log_Level=> 3);
9395             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_return_status='||l_return_status, x_Log_Level=> 3);
9396             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'fnd_msg_count='||fnd_msg_pub.count_msg, x_Log_Level=> 3);
9397             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'x_trxn_curr_code='||l_trxn_curr_code, x_Log_Level=> 3);
9398             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'x_trxn_raw_cost='||l_txn_raw_cost, x_Log_Level=> 3);
9399             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'x_trxn_raw_cost_rate='||l_txn_cost_rate, x_Log_Level=> 3);
9400             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'x_trxn_burden_cost='||l_txn_burden_cost, x_Log_Level=> 3);
9401             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'x_trxn_burden_cost_rate='||l_txn_burden_cost_rate, x_Log_Level=> 3);
9402             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'x_burden_multiplier='||l_burden_multiplier, x_Log_Level=> 3);
9403             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'x_cost_ind_compiled_set_id='||l_cost_ind_compiled_set_id, x_Log_Level=> 3);
9404             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'x_raw_cost_rejection_code='||l_raw_cost_rejection_code, x_Log_Level=> 3);
9405             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'x_burden_cost_rejection_code='||l_burden_cost_rejection_code, x_Log_Level=> 3);
9406         END IF;
9407 
9408         x_resource_raw_rate := nvl(l_txn_cost_rate,0);
9409         x_resource_burden_rate := nvl(l_txn_burden_cost_rate,0);
9410         x_resource_curr_code :=  l_trxn_curr_code;
9411         --X_dummy_burden_cost := nvl(l_txn_burden_cost,0); Bug 3632946
9412         X_burden_multiplier := nvl(l_burden_multiplier,0);
9413 
9414         -- FPM Dev CR 8 : Added error stack population
9415         -- It is subjected to change if values are coming from lookups.
9416         IF  l_raw_cost_rejection_code IS NOT NULL AND l_raw_override_rate IS NULL     --bug 3821299 do not throw error if there is override.
9417         THEN
9418             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9419                          p_msg_name       => l_raw_cost_rejection_code);
9420             x_msg_data := l_raw_cost_rejection_code;
9421             x_return_status := 'E';
9422             x_msg_count := fnd_msg_pub.count_msg;
9423             RAISE  FND_API.G_EXC_ERROR;
9424         END IF;
9425 
9426         IF  l_burden_cost_rejection_code IS NOT NULL AND l_burden_override_rate IS NULL --bug 3821299 do not throw error if there is override.
9427         THEN
9428             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9429                          p_msg_name       => l_burden_cost_rejection_code);
9430             x_msg_data := l_burden_cost_rejection_code;
9431             x_return_status := 'E';
9432             x_msg_count := fnd_msg_pub.count_msg;
9433             RAISE  FND_API.G_EXC_ERROR;
9434         END IF;
9435 
9436     ELSE -- l_rate_based_flag = 'N' bug# 3801523
9437         IF g1_debug_mode  = 'Y' THEN
9438             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'Before Calling Get_burden_sch_details ', x_Log_Level=> 3);
9439             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_project_type '||l_project_type, x_Log_Level=> 3);
9440             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_expenditure_OU '||l_expenditure_OU, x_Log_Level=> 3);
9441             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_expenditure_type '||l_expenditure_type, x_Log_Level=> 3);
9442             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_currency_code '||p_currency_code, x_Log_Level=> 3);
9443             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_plan_cost_burden_sch_id '||l_plan_cost_burden_sch_id, x_Log_Level=> 3);
9444             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_rate_override_to_organz_id '||l_rate_override_to_organz_id, x_Log_Level=> 3);
9445             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_rate_incurred_by_organz_id '||l_rate_incurred_by_organz_id, x_Log_Level=> 3);
9446             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_nlr_organization_id '||l_nlr_organization_id, x_Log_Level=> 3);
9447             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_currency_code '||p_currency_code, x_Log_Level=> 3);
9448             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_calling_mode '||l_calling_mode, x_Log_Level=> 3);
9449         END IF;
9450 
9451         pa_cost1.Get_burden_sch_details
9452                 (
9453          p_calling_mode                 =>l_calling_mode
9454                 ,p_exp_item_id                  => NULL
9455                 ,p_trxn_type                    => NULL
9456                 ,p_project_type                 => l_project_type
9457                 ,p_project_id                   => p_project_id
9458                 --,p_task_id                      => null
9459                 ,p_task_id                      => l_task_id --bug 3860575
9460         -- Bug  3837292 ,p_exp_organization_id          => l_expenditure_OU Bug 3837292
9461                 ,p_exp_organization_id          => NVL(l_rate_override_to_organz_id,NVl(l_rate_incurred_by_organz_id,l_nlr_organization_id))
9462         ,p_expenditure_type             => l_expenditure_type
9463                 ,p_schedule_type                => 'COST'
9464                 ,p_exp_item_date                => p_as_of_date   --bug 3901289
9465                 ,p_trxn_curr_code               => p_currency_code
9466                 ,p_burden_schedule_id           => l_plan_cost_burden_sch_id
9467                 ,x_schedule_id                  => l_burd_sch_id
9468                 ,x_sch_revision_id              => l_burd_sch_rev_id
9469                 ,x_sch_fixed_date               => l_burd_sch_fixed_date
9470                 ,x_cost_base                    => l_burd_sch_cost_base
9471                 ,x_cost_plus_structure          => l_burd_sch_cp_structure
9472                 ,x_compiled_set_id              => l_cost_ind_compiled_set_id
9473                 ,x_burden_multiplier            => l_burden_multiplier
9474                 ,x_return_status                => l_return_status
9475                 ,x_error_msg_code               => l_msg_data
9476         );
9477 
9478         IF g1_debug_mode  = 'Y' THEN
9479             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'After Calling Get_burden_sch_details l_return_status '||l_return_status, x_Log_Level=> 3);
9480             pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_burden_multiplier '||l_burden_multiplier, x_Log_Level=> 3);
9481         END IF;
9482         X_burden_multiplier := nvl(l_burden_multiplier,0);
9483 
9484 -- Begin fix for Bug # 4065674.
9485 -- For non-rate based resources also we need to use the override burden rate to convert the etc raw cost to
9486 -- etc burden cost. Hence we replace the default burden multiplier obtained from the burden schedule
9487 -- with the override burden rate.
9488 
9489 
9490 -- End fix for Bug # 4065674.
9491 
9492 
9493     END IF; -- l_rate_based_flag = 'Y'
9494     --bug# 3801523 Satish end.
9495 
9496     --maansari6/5
9497     IF  l_return_status <> 'S' AND l_msg_data IS NOT NULL
9498     THEN
9499                 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9500                              p_msg_name       => l_msg_data);
9501                 x_msg_data := l_msg_data;
9502                 x_return_status := 'E';
9503                 x_msg_count := fnd_msg_pub.count_msg;
9504                 RAISE  FND_API.G_EXC_ERROR;
9505     END IF;
9506     --maansari6/5
9507     --  END LOOP; Bug 3965584 : Reduced the scope of FOR LOOP
9508     -- END IF;   ---------------------------------------------------------------------------}
9509         x_return_status := l_return_status;
9510         x_msg_count     := fnd_msg_pub.count_msg; -- FPM Dev CR 8
9511 
9512 EXCEPTION
9513      -- FPM Dev CR 5
9514      WHEN FND_API.G_EXC_ERROR THEN
9515                 x_return_status := FND_API.G_RET_STS_ERROR;
9516                  x_msg_count := FND_MSG_PUB.Count_Msg;
9517                  If x_msg_count = 1 THEN
9518                                 pa_interface_utils_pub.get_messages
9519                                         (p_encoded        => FND_API.G_TRUE,
9520                                         p_msg_index      => 1,
9521                                         p_msg_count      => x_msg_count,
9522                                         p_msg_data       => x_msg_data,
9523                                   --    p_data           => x_msg_data,     * commented for Bug: 4537865
9524                     p_data       => l_new_msg_data,     --added for Bug: 4537865
9525                                         p_msg_index_out  => l_msg_index_out );
9526                  --added for Bug: 4537865
9527                     x_msg_data := l_new_msg_data;
9528                  --added for Bug: 4537865
9529                  End If;
9530 
9531         -- 4537865
9532          x_resource_curr_code       := NULL ;
9533          x_resource_raw_rate        := NULL ;
9534          x_resource_burden_rate     := NULL ;
9535          X_burden_multiplier        := NULL ;
9536 
9537      WHEN l_insufficient_paramters THEN
9538                  PA_UTILS.add_message('PA','PA_PROG_INSUFFICIENT_PARA',
9539                  'RES_NAME', l_resource_alias);
9540                  x_return_status := FND_API.G_RET_STS_ERROR;
9541                  x_msg_data      := 'PA_PROG_INSUFFICIENT_PARA';
9542                  x_msg_count := FND_MSG_PUB.Count_Msg;
9543                  If x_msg_count = 1 THEN
9544                                 pa_interface_utils_pub.get_messages
9545                                         (p_encoded        => FND_API.G_TRUE,
9546                                         p_msg_index      => 1,
9547                                         p_msg_count      => x_msg_count,
9548                                         p_msg_data       => x_msg_data,
9549                                   --    p_data           => x_msg_data,     * commented for Bug: 4537865
9550                     p_data       => l_new_msg_data,      -- added for Bug: 4537865
9551                                         p_msg_index_out  => l_msg_index_out );
9552                   --added for Bug: 4537865
9553                     x_msg_data := l_new_msg_data;
9554                   --added for Bug: 4537865
9555                  End If;
9556 
9557                 -- 4537865
9558                  x_resource_curr_code       := NULL ;
9559                  x_resource_raw_rate        := NULL ;
9560                  x_resource_burden_rate     := NULL ;
9561                  X_burden_multiplier        := NULL ;
9562 
9563          WHEN OTHERS THEN
9564                  x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9565                  x_msg_count     := 1;
9566                  x_msg_data      := SUBSTR(SQLERRM,1,120);
9567                  FND_MSG_PUB.add_exc_msg( p_pkg_name         => 'PA_PROGRESS_UTILS',
9568                          p_procedure_name   => 'Get_Res_Rate_Burden_Multiplier');
9569                  If x_msg_count = 1 THEN
9570                                 pa_interface_utils_pub.get_messages
9571                                         (p_encoded        => FND_API.G_TRUE,
9572                                         p_msg_index      => 1,
9573                                         p_msg_count      => x_msg_count,
9574                                         p_msg_data       => x_msg_data,
9575                                      -- p_data           => x_msg_data,     * commented for Bug: 4537865
9576                     p_data           => l_new_msg_data,      -- added for Bug: 4537865
9577                                         p_msg_index_out  => l_msg_index_out );
9578                    --added for Bug: 4537865
9579                                         x_msg_data := l_new_msg_data;
9580                     --added for Bug: 4537865
9581                  End If;
9582 
9583                 -- 4537865
9584                  x_resource_curr_code       := NULL ;
9585                  x_resource_raw_rate        := NULL ;
9586                  x_resource_burden_rate     := NULL ;
9587                  X_burden_multiplier        := NULL ;
9588 
9589                  RAISE;
9590 
9591 end Get_Res_Rate_Burden_Multiplier;
9592 -- Progress Management Changes. Bug # 3621404.
9593 
9594 function derive_etc_values(
9595      p_planned_value            NUMBER := null
9596      ,p_ppl_act_value           NUMBER := null
9597      ,p_eqpmt_act_value         NUMBER := null
9598      ,p_oth_act_value           NUMBER := null
9599      ,p_subprj_ppl_act_value    NUMBER := null
9600      ,p_subprj_eqpmt_act_value  NUMBER := null
9601      ,p_subprj_oth_act_value    NUMBER := null
9602      ,p_oth_quantity_to_date    NUMBER := null
9603 )return number
9604 is
9605     l_derived_etc_value NUMBER;
9606 begin
9607 
9608     l_derived_etc_value :=  nvl(p_planned_value,0) - (nvl(p_ppl_act_value,0)+nvl(p_eqpmt_act_value,0)
9609                     +nvl(p_oth_act_value,0)+nvl(p_subprj_ppl_act_value,0)
9610                             +nvl(p_subprj_eqpmt_act_value,0)+nvl(p_subprj_oth_act_value,0)
9611                     +nvl(p_oth_quantity_to_date,0));
9612 
9613     if (l_derived_etc_value < 0) then
9614         l_derived_etc_value := 0;
9615     end if;
9616 
9617     return(l_derived_etc_value);
9618 
9619 end derive_etc_values;
9620 
9621 function published_dlv_prog_exists
9622 (
9623  p_project_id        PA_PROJECTS_ALL.PROJECT_ID%TYPE,
9624  p_dlv_proj_elt_id   PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE
9625 )return VARCHAR2
9626 IS
9627     l_result VARCHAR2(1) ;
9628 
9629     CURSOR published_rec_exists
9630     IS
9631                 SELECT 'Y'
9632                 FROM PA_PERCENT_COMPLETES
9633         WHERE object_id = p_dlv_proj_elt_id
9634                   AND object_type = 'PA_DELIVERABLES'
9635                   AND project_id  = p_project_id
9636                   AND structure_type = 'WORKPLAN'
9637                   AND published_flag = 'Y';
9638 
9639 BEGIN
9640 
9641      OPEN published_rec_exists ;
9642      FETCH published_rec_exists INTO l_result ;
9643 
9644      IF published_rec_exists%NOTFOUND THEN
9645          l_result := 'N' ;
9646      END IF;
9647 
9648      CLOSE published_rec_exists ;
9649 
9650      return l_result ;
9651 
9652 END published_dlv_prog_exists ;
9653 
9654 
9655 --Added for performance improvements in the view pa_prog_act_by_period_v
9656 --can be used anywhere else too.
9657 procedure set_global_str_ver_id(p_structure_version_id NUMBER)
9658 IS
9659 BEGIN
9660      PA_PROGRESS_UTILS.g_structure_version_id := p_structure_version_id;
9661 END set_global_str_ver_id;
9662 
9663 function get_global_str_ver_id RETURN NUMBER IS
9664 BEGIN
9665    return PA_PROGRESS_UTILS.g_structure_version_id;
9666 END get_global_str_ver_id;
9667 
9668 procedure set_global_time_phase_period(p_period_name VARCHAR2)
9669 IS
9670 BEGIN
9671    PA_PROGRESS_UTILS.g_time_phase_period_name := p_period_name;
9672 END set_global_time_phase_period;
9673 
9674 function get_global_time_phase_period RETURN VARCHAR2 IS
9675 BEGIN
9676   return PA_PROGRESS_UTILS.g_time_phase_period_name;
9677 END get_global_time_phase_period;
9678 
9679 
9680 
9681 -- Added following function for bug 3709439
9682 FUNCTION Percent_Spent_Value
9683 (
9684   p_actual_value       NUMBER
9685  ,p_planned_value      NUMBER
9686 ) RETURN NUMBER
9687 
9688 IS
9689     l_percent_spent_value NUMBER := 0;
9690 
9691 BEGIN
9692 
9693      -- 5726773
9694  	     -- IF NVL(p_actual_value,0) <= 0 THEN
9695  	     --   l_percent_spent_value := 0;
9696  	     IF (NVL(p_actual_value,0) <= 0 and p_planned_value >= 0) or (NVL(p_actual_value,0) >= 0 and p_planned_value < 0) THEN  --5726773
9697        l_percent_spent_value := 0;
9698     ELSIF NVL(p_planned_value,0) = 0 THEN
9699         l_percent_spent_value := 100;
9700     ELSE
9701        l_percent_spent_value := ( (p_actual_value/p_planned_value) *100 );
9702     END IF;
9703 
9704     --bug 3824042
9705     --RETURN TRUNC(l_percent_spent_value,2) ;
9706     RETURN ROUND(l_percent_spent_value,2) ;
9707 
9708 END Percent_Spent_Value ;
9709 
9710 
9711 -- Added following function for bug 3709439
9712 FUNCTION Percent_Complete_Value
9713 (
9714   p_actual_value       NUMBER
9715  ,p_etc_value          NUMBER
9716 ) RETURN NUMBER
9717 
9718 IS
9719     l_percent_complete_value NUMBER := 0;
9720     l_act_etc                NUMBER := NVL(p_actual_value,0) + NVL(p_etc_value,0) ;
9721 
9722 BEGIN
9723 
9724      ---5726773
9725       IF (NVL(p_actual_value,0) <= 0 and l_act_etc > 0) or (NVL(p_actual_value,0) >= 0 and l_act_etc < 0) THEN  --5726773
9726        l_percent_complete_value := 0;
9727 --    ELSIF NVL(p_etc_value,0) = 0 THEN
9728 --        l_percent_complete_value := 100;
9729     ELSE
9730        IF (l_act_etc = 0 ) THEN
9731           l_act_etc := 1;
9732        END IF;
9733        l_percent_complete_value := (  ( p_actual_value/l_act_etc ) * 100  );
9734        if (l_percent_complete_value > 100) then
9735  	            l_percent_complete_value := 100;
9736  	elsif (l_percent_complete_value < 0) then
9737  	            l_percent_complete_value := 0;
9738  	end if;
9739     END IF;
9740 
9741     --bug 3824042
9742     --RETURN TRUNC(l_percent_complete_value,2) ;
9743     RETURN ROUND(l_percent_complete_value,8) ; --Bug 6854114
9744 
9745 END Percent_Complete_Value ;
9746 
9747 -- Bug 3784324 : Added procedure convert_effort_to_cost
9748 PROCEDURE convert_effort_to_cost
9749 (   p_resource_list_mem_id        IN  NUMBER
9750     ,p_project_id                 IN  NUMBER
9751     ,p_structure_version_id       IN  NUMBER
9752     ,p_txn_currency_code              IN  VARCHAR
9753     ,p_planned_effort             IN  NUMBER
9754     ,p_planned_rawcost_tc         IN  NUMBER
9755     ,p_act_effort_this_period     IN  NUMBER
9756     ,p_act_effort                 IN  NUMBER
9757     ,p_etc_effort                 IN  NUMBER
9758     ,p_rate_based_flag            IN  VARCHAR := 'Y'
9759     ,p_act_rawcost_tc             IN  NUMBER
9760     ,x_act_rawcost_tc_this_period IN OUT NOCOPY NUMBER    --File.Sql.39 bug 4440895
9761     ,x_etc_rawcost_tc             IN OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9762     ,x_prcnt_comp_effort          OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9763     ,x_prcnt_spent_effort         OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9764     ,x_eac_effort                 OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9765     ,x_prcnt_comp_rawcost_tc      OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9766     ,x_prcnt_spent_rawcost_tc     OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9767     ,x_eac_rawcost_tc             OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9768     ,x_return_status          OUT    NOCOPY VARCHAR2       --File.Sql.39 bug 4440895
9769     ,x_msg_count          OUT    NOCOPY NUMBER         --File.Sql.39 bug 4440895
9770     ,x_msg_data           OUT    NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9771 )
9772 IS
9773 
9774     l_act_rawcost_tc          NUMBER     := null;
9775     l_etc_rawcost_tc          NUMBER     := null;
9776     l_prcnt_comp_effort          NUMBER     := null;
9777     l_prcnt_spent_effort      NUMBER     := null;
9778     l_eac_effort              NUMBER     := null;
9779     l_prcnt_comp_rawcost_tc      NUMBER     := null;
9780     l_prcnt_spent_rawcost_tc  NUMBER     := null;
9781     l_eac_rawcost_tc          NUMBER     := null;
9782 
9783     --added Satish
9784     X_ACT_RAWCOST_TC         NUMBER;
9785     l_actual_effort_to_date   NUMBER    := null;
9786     l_actual_rawcost_to_date   NUMBER    := null;
9787     l_act_rawcost_tc_this_period NUMBER  := null;
9788 
9789     l_plan_res_cur_code           VARCHAR2(30)     := null;
9790     l_plan_res_raw_rate           NUMBER           := null;
9791     l_plan_res_burden_rate       NUMBER           := null;
9792     l_plan_burden_multiplier   NUMBER           := null;
9793     l_return_status               VARCHAR2(1)      := null;
9794     l_msg_count                   NUMBER           := null;
9795     l_msg_data                   VARCHAR2(250)    := null;
9796     g1_debug_mode            VARCHAR2(1)                                    ;
9797 
9798 
9799 
9800 
9801 BEGIN
9802 
9803      g1_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N');
9804      IF g1_debug_mode  = 'Y' THEN
9805          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'p_resource_list_mem_id='||p_resource_list_mem_id, x_Log_Level=> 3);
9806          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'p_project_id='||p_project_id, x_Log_Level=> 3);
9807          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'p_structure_version_id='||p_structure_version_id, x_Log_Level=> 3);
9808          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'p_txn_currency_code='||p_txn_currency_code, x_Log_Level=> 3);
9809          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'p_planned_effort='||p_planned_effort, x_Log_Level=> 3);
9810          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'p_planned_rawcost_tc='||p_planned_rawcost_tc, x_Log_Level=> 3);
9811          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'p_act_effort_this_period='||p_act_effort_this_period, x_Log_Level=> 3);
9812          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'p_act_effort='||p_act_effort, x_Log_Level=> 3);
9813          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'p_etc_effort='||p_etc_effort, x_Log_Level=> 3);
9814          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'p_rate_based_flag='||p_rate_based_flag, x_Log_Level=> 3);
9815          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'p_act_rawcost_tc='||p_act_rawcost_tc, x_Log_Level=> 3);
9816      END IF;
9817 
9818     x_return_status := fnd_api.g_ret_sts_success ; -- 4537865
9819 
9820     If (p_rate_based_flag = 'N') then
9821         -- If (p_rate_based_flag  = 'N') the Rawcost values are inputs.
9822         l_etc_rawcost_tc := nvl(x_etc_rawcost_tc,0);
9823         l_act_rawcost_tc := nvl(p_act_rawcost_tc,0);
9824     l_act_rawcost_tc_this_period := nvl(x_act_rawcost_tc_this_period, 0);
9825 
9826         -- Calculate the EAC Rawcost, Percent Complete Rawcost and Percent Spent Rawcost
9827         -- using the input Rawcost values.
9828     l_actual_rawcost_to_date := nvl(l_act_rawcost_tc,0)  + nvl(l_act_rawcost_tc_this_period,0);
9829         l_eac_rawcost_tc := (nvl(l_actual_rawcost_to_date,0) + nvl(l_etc_rawcost_tc,0));
9830         l_prcnt_comp_rawcost_tc := PA_PROGRESS_UTILS.Percent_Complete_Value(l_actual_rawcost_to_date,l_etc_rawcost_tc);
9831         l_prcnt_spent_rawcost_tc := PA_PROGRESS_UTILS.Percent_Spent_Value(l_actual_rawcost_to_date,p_planned_rawcost_tc);
9832     else
9833         -- ETC effort to ETC Rawcost Conversion.
9834         l_plan_res_cur_code         := null;
9835         l_plan_res_raw_rate            := null;
9836         l_plan_res_burden_rate        := null;
9837         l_plan_burden_multiplier    := null;
9838         l_return_status                := null;
9839         l_msg_count                    := null;
9840         l_msg_data                    := null;
9841 
9842         PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier(
9843             P_res_list_mem_id             => p_resource_list_mem_id
9844            ,P_project_id                  => p_project_id
9845            ,p_structure_version_id        => p_structure_version_id
9846            ,p_currency_code               => p_txn_currency_code
9847            ,p_calling_mode                => 'PLAN_RATES'
9848            ,x_resource_curr_code          => l_plan_res_cur_code
9849            ,x_resource_raw_rate           => l_plan_res_raw_rate
9850            ,x_resource_burden_rate        => l_plan_res_burden_rate
9851            ,X_burden_multiplier           => l_plan_burden_multiplier
9852            ,x_return_status               => l_return_status
9853            ,x_msg_count                   => l_msg_count
9854            ,x_msg_data                    => l_msg_data);
9855 
9856     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9857         x_return_status := 'E';
9858         RAISE  FND_API.G_EXC_ERROR;
9859     END IF;
9860 
9861         l_etc_rawcost_tc := (nvl(p_etc_effort,0) * nvl(l_plan_res_raw_rate,0));
9862 
9863     IF g1_debug_mode  = 'Y' THEN
9864         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => '1. l_plan_res_raw_rate='||l_plan_res_raw_rate, x_Log_Level=> 3);
9865     END IF;
9866 
9867 
9868         -- ACT Effort to ACT Rawcost Conversion.
9869 
9870         l_plan_res_cur_code         := null;
9871         l_plan_res_raw_rate            := null;
9872         l_plan_res_burden_rate        := null;
9873         l_plan_burden_multiplier    := null;
9874         l_return_status                := null;
9875         l_msg_count                    := null;
9876         l_msg_data                    := null;
9877 
9878         PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier(
9879             P_res_list_mem_id             => p_resource_list_mem_id
9880            ,P_project_id                  => p_project_id
9881            ,p_structure_version_id        => p_structure_version_id
9882            ,p_currency_code               => p_txn_currency_code
9883            ,p_calling_mode                => 'ACTUAL_RATES'
9884            ,x_resource_curr_code          => l_plan_res_cur_code
9885            ,x_resource_raw_rate           => l_plan_res_raw_rate
9886            ,x_resource_burden_rate        => l_plan_res_burden_rate
9887            ,X_burden_multiplier           => l_plan_burden_multiplier
9888            ,x_return_status               => l_return_status
9889            ,x_msg_count                   => l_msg_count
9890            ,x_msg_data                    => l_msg_data);
9891 
9892     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9893         x_return_status := 'E';
9894         RAISE  FND_API.G_EXC_ERROR;
9895     END IF;
9896 
9897     IF g1_debug_mode  = 'Y' THEN
9898         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => '2. l_plan_res_raw_rate='||l_plan_res_raw_rate, x_Log_Level=> 3);
9899     END IF;
9900 
9901     IF (p_act_rawcost_tc is NULL)
9902     THEN
9903         l_act_rawcost_tc := (nvl(p_act_effort,0) * nvl(l_plan_res_raw_rate,0));
9904     ELSE
9905     l_act_rawcost_tc := p_act_rawcost_tc;
9906     END IF;
9907 
9908 
9909         l_act_rawcost_tc_this_period := (nvl(p_act_effort_this_period,0) * nvl(l_plan_res_raw_rate,0));   --added new
9910 
9911         -- EAC Effort and EAC Rawcost calculations.
9912 
9913     IF g1_debug_mode  = 'Y' THEN
9914         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'l_act_rawcost_tc_this_period='||l_act_rawcost_tc_this_period, x_Log_Level=> 3);
9915     END IF;
9916     -- Calculate cumulative values
9917     l_actual_effort_to_date := nvl(p_act_effort,0) + nvl(p_act_effort_this_period,0);
9918     l_actual_rawcost_to_date := nvl(l_act_rawcost_tc,0)  + nvl(l_act_rawcost_tc_this_period,0);
9919 
9920         l_eac_effort := (nvl(p_etc_effort,0) + l_actual_effort_to_date);
9921         l_eac_rawcost_tc := ( nvl(l_etc_rawcost_tc,0) +l_actual_rawcost_to_date );
9922 
9923     IF g1_debug_mode  = 'Y' THEN
9924         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'l_eac_effort='||l_eac_effort, x_Log_Level=> 3);
9925         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'l_eac_rawcost_tc='||l_eac_rawcost_tc, x_Log_Level=> 3);
9926     END IF;
9927 
9928         -- Percent Complete Effort and Percent Complete Rawcost calculations.
9929 
9930         l_prcnt_comp_effort := PA_PROGRESS_UTILS.Percent_Complete_Value(l_actual_effort_to_date,p_etc_effort);
9931         l_prcnt_comp_rawcost_tc := PA_PROGRESS_UTILS.Percent_Complete_Value(l_actual_rawcost_to_date,l_etc_rawcost_tc);
9932 
9933     IF g1_debug_mode  = 'Y' THEN
9934         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'l_prcnt_comp_effort='||l_prcnt_comp_effort, x_Log_Level=> 3);
9935         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'l_prcnt_comp_rawcost_tc='||l_prcnt_comp_rawcost_tc, x_Log_Level=> 3);
9936     END IF;
9937 
9938         -- Percent Spent Effort and Percent Spent Rawcost calculations.
9939 
9940         l_prcnt_spent_effort := PA_PROGRESS_UTILS.Percent_Spent_Value(l_actual_effort_to_date,p_planned_effort);
9941         l_prcnt_spent_rawcost_tc := PA_PROGRESS_UTILS.Percent_Spent_Value(l_actual_rawcost_to_date,p_planned_rawcost_tc);
9942 
9943     IF g1_debug_mode  = 'Y' THEN
9944         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'l_prcnt_spent_effort='||l_prcnt_spent_effort, x_Log_Level=> 3);
9945         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'l_prcnt_spent_rawcost_tc='||l_prcnt_spent_rawcost_tc, x_Log_Level=> 3);
9946     END IF;
9947 
9948     end if;  -- If (p_rate_based_flag = 'N')
9949 
9950     x_act_rawcost_tc_this_period :=  nvl(l_act_rawcost_tc_this_period, 0);
9951     x_etc_rawcost_tc           :=    nvl(l_etc_rawcost_tc,0);
9952     x_prcnt_comp_effort        :=    nvl(l_prcnt_comp_effort,0);
9953     x_prcnt_spent_effort       :=    nvl(l_prcnt_spent_effort,0);
9954     x_eac_effort               :=    nvl(l_eac_effort,0);
9955     x_prcnt_comp_rawcost_tc    :=    nvl(l_prcnt_comp_rawcost_tc,0);
9956     x_prcnt_spent_rawcost_tc   :=    nvl(l_prcnt_spent_rawcost_tc,0);
9957     x_eac_rawcost_tc           :=    nvl(l_eac_rawcost_tc,0);
9958 
9959 EXCEPTION
9960     WHEN FND_API.G_EXC_ERROR THEN
9961       x_return_status := FND_API.G_RET_STS_ERROR;
9962       x_msg_count := Fnd_Msg_Pub.count_msg;
9963 
9964             -- 4537865
9965             x_act_rawcost_tc_this_period := 0 ;
9966         x_etc_rawcost_tc             := 0 ;
9967         x_prcnt_comp_effort          := 0 ;
9968         x_prcnt_spent_effort         := 0 ;
9969         x_eac_effort                 := 0 ;
9970         x_prcnt_comp_rawcost_tc      := 0 ;
9971         x_prcnt_spent_rawcost_tc     := 0 ;
9972         x_eac_rawcost_tc             := 0 ;
9973 
9974     WHEN OTHERS THEN
9975       x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
9976       x_msg_count     := 1;
9977       x_msg_data      := SUBSTRB(SQLERRM,1,240);
9978 
9979             -- 4537865
9980             x_act_rawcost_tc_this_period := 0 ;
9981             x_etc_rawcost_tc             := 0 ;
9982             x_prcnt_comp_effort          := 0 ;
9983             x_prcnt_spent_effort         := 0 ;
9984             x_eac_effort                 := 0 ;
9985             x_prcnt_comp_rawcost_tc      := 0 ;
9986             x_prcnt_spent_rawcost_tc     := 0 ;
9987             x_eac_rawcost_tc             := 0 ;
9988     RAISE;
9989 
9990 END convert_effort_to_cost;
9991 --Added by rtarway for BUG 3815202
9992 FUNCTION get_last_published_perc_comp(
9993   p_project_id       NUMBER
9994  ,p_object_id        NUMBER
9995  ,p_as_of_date       Date
9996  ,p_object_type      VARCHAR2
9997 ) RETURN NUMBER
9998 IS
9999 l_last_submitted_perc_comp NUMBER ;
10000 Cursor c_get_last_submitted_perc_comp
10001 is
10002      select ppr.completed_percentage
10003      from pa_progress_rollup ppr
10004      where ppr.project_id = p_project_id
10005      and ppr.object_id = p_object_id
10006      and ppr.structure_type = 'WORKPLAN'
10007      and ppr.structure_version_id is null
10008      and ppr.object_type = p_object_type
10009      and ppr.current_flag <> 'W' -- Bug 3879461
10010      and ppr.as_of_date =
10011      (
10012           select max(ppr2.as_of_date)
10013           from pa_progress_rollup ppr2
10014           where ppr2.project_id = p_project_id
10015           and ppr2.object_id = p_object_id
10016           and ppr2.structure_type = 'WORKPLAN'
10017           and ppr2.structure_version_id is null
10018           and ppr.object_type = p_object_type
10019           and ppr2.as_of_date <= p_as_of_date
10020           and ppr2.current_flag = 'Y'
10021      );
10022 
10023 Begin
10024 l_last_submitted_perc_comp := null;
10025 OPEN c_get_last_submitted_perc_comp;
10026 FETCH c_get_last_submitted_perc_comp into l_last_submitted_perc_comp;
10027 CLOSE c_get_last_submitted_perc_comp;
10028 
10029 return l_last_submitted_perc_comp;
10030 END get_last_published_perc_comp;
10031 --Added by rtarway for BUG 3815202
10032 
10033 /* Bug # 3861344: Created API: return_start_end_date(). */
10034 
10035 Function return_start_end_date(
10036 p_scheduled_date    DATE        := NULL
10037 ,p_baselined_date   DATE        := NULL
10038 ,p_project_id       NUMBER
10039 ,p_proj_element_id  NUMBER
10040 ,p_object_type          VARCHAR2        := 'PA_TASKS'
10041 ,p_start_end_flag   VARCHAR2    := 'S'
10042 ) return date
10043 
10044 is
10045 
10046 cursor cur_lp_sch_start_date(p_str_ver_id NUMBER) is
10047 select scheduled_start_date
10048 from pa_proj_elem_ver_schedule ppevs
10049 where ppevs.project_id = p_project_id
10050 and  ppevs.proj_element_id = p_proj_element_id
10051 and ppevs.element_version_id = (select ppev.element_version_id
10052                 from pa_proj_element_versions ppev
10053                 where ppev.project_id = p_project_id
10054                 and ppev.proj_element_id = p_proj_element_id
10055                 and ppev.object_type = p_object_type
10056                 and ppev.parent_structure_version_id = p_str_ver_id);
10057 
10058 cursor cur_lp_sch_end_date(p_str_ver_id NUMBER) is
10059 select scheduled_finish_date
10060 from pa_proj_elem_ver_schedule ppevs
10061 where ppevs.project_id = p_project_id
10062 and  ppevs.proj_element_id = p_proj_element_id
10063 and ppevs.element_version_id = (select ppev.element_version_id
10064                                 from pa_proj_element_versions ppev
10065                                 where ppev.project_id = p_project_id
10066                                 and ppev.proj_element_id = p_proj_element_id
10067                                 and ppev.object_type = p_object_type
10068                                 and ppev.parent_structure_version_id = p_str_ver_id);
10069 
10070 l_lp_str_ver_id NUMBER  := NULL;
10071 
10072 l_return_date DATE  := NULL;
10073 
10074 begin
10075 
10076     -- If baselined date exists return the baselined date.
10077 
10078     if l_return_date is NULL then
10079 
10080         l_return_date := p_baselined_date;
10081 
10082     end if;
10083 
10084     -- If baselined date does not exist return the scheduled date from the latest published version.
10085 
10086     if l_return_date is NULL then
10087 
10088         -- Get latest published structure version id.
10089 
10090         l_lp_str_ver_id := PA_PROJ_ELEMENTS_UTILS.latest_published_ver_id(p_project_id,'WORKPLAN');
10091 
10092         if p_start_end_flag = 'S' then
10093 
10094             open cur_lp_sch_start_date(l_lp_str_ver_id);
10095             fetch cur_lp_sch_start_date into l_return_date;
10096             close cur_lp_sch_start_date;
10097 
10098         else
10099 
10100             open cur_lp_sch_end_date(l_lp_str_ver_id);
10101                     fetch cur_lp_sch_end_date into l_return_date;
10102                     close cur_lp_sch_end_date;
10103 
10104         end if;
10105 
10106     end if;
10107 
10108     -- If baselined date does and scheduled date from the latest published version do not exist
10109     -- return the scheduled date for the current element version.
10110 
10111     if l_return_date is NULL then
10112 
10113         l_return_date := p_scheduled_date;
10114 
10115     end if;
10116 
10117     return(l_return_date);
10118 
10119 end;
10120 
10121 
10122 -- Procedure to be called when applying latest progress to / publishing the working workplan version
10123 PROCEDURE check_txn_currency_diff
10124 (
10125     p_structure_version_id IN  NUMBER,
10126     p_context              IN  VARCHAR2 DEFAULT 'PUBLISH_STRUCTURE',
10127     x_return_status        OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10128 )
10129 
10130 IS
10131 
10132 -- This cursor returns the information for the assignments with mismatched currencies.
10133 -- Bug 5059828. Changed substr to substrb
10134 
10135 CURSOR c_get_diff_cur_asgmts(p_struct_ver_id IN NUMBER) IS
10136     SELECT
10137     ra.resource_assignment_id,
10138     substrb(pe.element_number,1,30), -- Bug 4348814 : Added substr
10139     substrb(pe.name,1,30), -- Bug 4348814 : Added substr
10140     substrb(rlm.alias,1,40), -- Bug 4348814 : Added substr
10141     bl.txn_currency_code,
10142     pr.txn_currency_code
10143     FROM
10144     pa_proj_element_versions pev,
10145     pa_proj_elements pe,
10146     pa_resource_assignments ra,
10147     pa_resource_list_members rlm,
10148     pa_budget_lines bl,
10149     pa_progress_rollup pr
10150     WHERE
10151     pev.parent_structure_version_id = p_struct_ver_id AND
10152     pe.proj_element_id = pev.proj_element_id AND
10153     ra.wbs_element_version_id = pev.element_version_id AND
10154     rlm.resource_list_member_id = ra.resource_list_member_id AND
10155     bl.resource_assignment_id = ra.resource_assignment_id AND
10156     pr.project_id = ra.project_id AND
10157     pr.object_id = ra.resource_list_member_id AND
10158     pr.object_type = 'PA_ASSIGNMENTS' AND
10159     pr.structure_type = 'WORKPLAN' AND
10160     pr.proj_element_id = ra.task_id AND
10161     pr.current_flag = 'Y' AND
10162     pr.structure_version_id IS NULL AND
10163     bl.txn_currency_code <> pr.txn_currency_code
10164     GROUP BY
10165     ra.resource_assignment_id,
10166     pe.element_number,
10167     pe.name,
10168     rlm.alias,
10169     bl.txn_currency_code,
10170     pr.txn_currency_code;
10171 
10172 -- Bug 4348814 : Task number is 100 chars, name is 240 chars, currency is 15 chars in DB.
10173 -- whereas beloe plsql size is wrong.
10174 
10175 l_resource_assignment_id_tbl SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
10176 l_task_number_tbl            SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
10177 l_task_name_tbl              SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
10178 l_alias_tbl                  SYSTEM.PA_VARCHAR2_80_TBL_TYPE := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
10179 
10180 -- Bug 4348814 : Changed the currency table to 15 from 20
10181 l_currency_tbl               SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
10182 l_actual_currency_tbl            SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
10183 
10184 l_error_msg VARCHAR2(2000);
10185 l_error_count NUMBER;
10186 l_debug_mode varchar2(1);
10187 BEGIN
10188     -- Bug 4348814 : Added Debug Msgs
10189     x_return_status := FND_API.G_RET_STS_SUCCESS;
10190 
10191         l_debug_mode := NVL(FND_PROFILE.value_specific('PA_DEBUG_MODE',fnd_global.user_id,fnd_global.login_id,275,null,null), 'N');
10192 
10193         IF l_debug_mode  = 'Y' THEN
10194                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CHECK_TXN_CURRENCY_DIFF', x_Msg => 'p_structure_version_id='||p_structure_version_id, x_Log_Level=>     3);
10195                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CHECK_TXN_CURRENCY_DIFF', x_Msg => 'p_context='||p_context, x_Log_Level=>     3);
10196                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CHECK_TXN_CURRENCY_DIFF', x_Msg => 'Open Cursor c_get_diff_cur_asgmts', x_Log_Level=>     3);
10197         END IF;
10198 
10199 
10200     OPEN c_get_diff_cur_asgmts(p_structure_version_id);
10201     FETCH c_get_diff_cur_asgmts BULK COLLECT INTO l_resource_assignment_id_tbl, l_task_number_tbl,
10202     l_task_name_tbl, l_alias_tbl, l_currency_tbl, l_actual_currency_tbl;
10203     CLOSE c_get_diff_cur_asgmts;
10204 
10205     l_error_count := l_resource_assignment_id_tbl.COUNT;
10206 
10207         IF l_debug_mode  = 'Y' THEN
10208                 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CHECK_TXN_CURRENCY_DIFF', x_Msg => 'l_error_count='||l_error_count, x_Log_Level=>     3);
10209         END IF;
10210 
10211 
10212     IF l_error_count > 0 THEN
10213         x_return_status := FND_API.G_RET_STS_ERROR;
10214         FOR i in 1..l_error_count LOOP
10215             IF i = 1 THEN
10216                 l_error_msg := l_task_number_tbl(i) || ', ' || l_alias_tbl(i) || ', ' || l_actual_currency_tbl(i);
10217             ELSE
10218                 IF length (l_error_msg) >= 1700 THEN -- Bug 4348814 : Added so numeric and value error does not come
10219                     exit;
10220                 END IF;
10221                 l_error_msg := l_error_msg || '; ' || l_task_number_tbl(i) || ', ' || l_alias_tbl(i) || ', ' || l_actual_currency_tbl(i);
10222             END IF;
10223         END LOOP;
10224 
10225         --Bug 5059828. Doing this to avoid numeric/value error. Pls refer to code above
10226         --that has a similar check.
10227         l_error_msg := substrb(l_error_msg,1,1700);
10228 
10229         IF p_context = 'PUBLISH_STRUCTURE' THEN
10230             PA_UTILS.ADD_MESSAGE
10231             (
10232                 p_app_short_name => 'PA',
10233                 p_msg_name       => 'PA_PUB_MISM_CUR_ERR',
10234                 p_token1         => 'PL_RES_LIST',
10235                 p_value1         =>  l_error_msg
10236             );
10237         ELSIF p_context = 'APPLY_PROGRESS' THEN
10238             PA_UTILS.ADD_MESSAGE
10239             (
10240                 p_app_short_name => 'PA',
10241                 p_msg_name       => 'PA_APPLY_PROG_MISM_CUR_ERR',
10242                 p_token1         => 'PL_RES_LIST',
10243                 p_value1         =>  l_error_msg
10244             );
10245         END IF;
10246     END IF;
10247 
10248     EXCEPTION WHEN OTHERS THEN
10249         x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR ; -- 4537865
10250         RAISE;
10251 
10252 END check_txn_currency_diff;
10253 
10254 
10255 
10256 
10257 
10258 -- Procedure to be called when updating task assignments for progress related business rules check.
10259 PROCEDURE check_prog_for_update_asgmts
10260 (
10261     p_task_assignment_tbl IN  PA_TASK_ASSIGNMENT_UTILS.l_resource_rec_tbl_type,
10262     x_return_status       OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10263 )
10264 
10265 IS
10266 
10267 CURSOR get_all_parameters IS
10268     SELECT
10269     ra.resource_assignment_id,
10270     ra.resource_list_member_id,
10271     rat.resource_list_member_id,
10272     pr.txn_currency_code,
10273     rat.override_currency_code,
10274     ra.project_role_id,
10275     rat.project_role_id,
10276     ra.total_plan_quantity,
10277     rat.total_quantity,
10278     decode(ra.resource_class_code, 'PEOPLE', pr.ppl_act_effort_to_date,
10279                                    'EQUIPMENT', pr.eqpmt_act_effort_to_date ,pr.oth_quantity_to_date),
10280     pr.actual_finish_date,
10281     ra.schedule_start_date,
10282     ra.schedule_end_date,
10283     rat.schedule_start_date,
10284     rat.schedule_end_date,
10285     decode(pr.structure_version_id, NULL, 'Y', 'N')
10286     FROM
10287     pa_res_asgmts_temp rat,
10288     pa_resource_assignments ra,
10289     pa_proj_element_versions pev,
10290     pa_progress_rollup pr
10291     WHERE
10292     ra.resource_assignment_id = rat.resource_assignment_id AND
10293     pev.element_version_id = ra.wbs_element_version_id AND
10294     pr.project_id = ra.project_id AND
10295     pr.object_id = ra.resource_list_member_id AND
10296     pr.object_type = 'PA_ASSIGNMENTS' AND
10297     pr.structure_type = 'WORKPLAN' AND
10298     pr.proj_element_id = ra.task_id AND
10299     pr.current_flag = 'Y' AND
10300     (pr.structure_version_id IS NULL OR pr.structure_version_id = pev.parent_structure_version_id);
10301 
10302 l_res_asgmt_id_tbl          SYSTEM.PA_NUM_TBL_TYPE          := SYSTEM.PA_NUM_TBL_TYPE();
10303 l_old_rlm_id_tbl            SYSTEM.PA_NUM_TBL_TYPE          := SYSTEM.PA_NUM_TBL_TYPE();
10304 l_new_rlm_id_tbl            SYSTEM.PA_NUM_TBL_TYPE          := SYSTEM.PA_NUM_TBL_TYPE();
10305 l_actual_cur_tbl            SYSTEM.PA_VARCHAR2_15_TBL_TYPE  := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
10306 l_override_cur_tbl          SYSTEM.PA_VARCHAR2_15_TBL_TYPE  := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
10307 l_old_project_role_id_tbl   SYSTEM.PA_NUM_TBL_TYPE          := SYSTEM.PA_NUM_TBL_TYPE();
10308 l_new_project_role_id_tbl   SYSTEM.PA_NUM_TBL_TYPE          := SYSTEM.PA_NUM_TBL_TYPE();
10309 l_old_total_qty_tbl         SYSTEM.PA_NUM_TBL_TYPE          := SYSTEM.PA_NUM_TBL_TYPE();
10310 l_new_total_qty_tbl         SYSTEM.PA_NUM_TBL_TYPE          := SYSTEM.PA_NUM_TBL_TYPE();
10311 l_actual_qty_tbl            SYSTEM.PA_NUM_TBL_TYPE          := SYSTEM.PA_NUM_TBL_TYPE();
10312 l_actual_finish_date_tbl    SYSTEM.PA_DATE_TBL_TYPE         := SYSTEM.PA_DATE_TBL_TYPE();
10313 l_old_sched_start_date_tbl  SYSTEM.PA_DATE_TBL_TYPE         := SYSTEM.PA_DATE_TBL_TYPE();
10314 l_old_sched_finish_date_tbl SYSTEM.PA_DATE_TBL_TYPE         := SYSTEM.PA_DATE_TBL_TYPE();
10315 l_new_sched_start_date_tbl  SYSTEM.PA_DATE_TBL_TYPE         := SYSTEM.PA_DATE_TBL_TYPE();
10316 l_new_sched_finish_date_tbl SYSTEM.PA_DATE_TBL_TYPE         := SYSTEM.PA_DATE_TBL_TYPE();
10317 l_lat_pub_prog_flag_tbl     SYSTEM.PA_VARCHAR2_1_TBL_TYPE   := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
10318 
10319 l_num_of_asgmts NUMBER;
10320 l_viol_indicator NUMBER;
10321 l_num_of_rows NUMBER;
10322 l_db_block_size NUMBER;
10323 l_num_blocks NUMBER;
10324 
10325 BEGIN
10326 
10327     x_return_status := FND_API.G_RET_STS_SUCCESS;
10328 
10329     l_num_of_asgmts := p_task_assignment_tbl.COUNT;
10330 
10331     SELECT to_number(value)
10332     INTO   l_db_block_size
10333     FROM   v$parameter
10334     WHERE  name = 'db_block_size';
10335 
10336     l_num_blocks := 1.25 * (l_num_of_asgmts * 75) / l_db_block_size;
10337 
10338     IF l_num_of_asgmts > 0 THEN
10339 
10340         -- Put the input parameters in individual tables for insert.
10341         l_res_asgmt_id_tbl.extend(l_num_of_asgmts);
10342         l_new_rlm_id_tbl.extend(l_num_of_asgmts);
10343         l_override_cur_tbl.extend(l_num_of_asgmts);
10344         l_new_project_role_id_tbl.extend(l_num_of_asgmts);
10345         l_new_total_qty_tbl.extend(l_num_of_asgmts);
10346         l_new_sched_start_date_tbl.extend(l_num_of_asgmts);
10347         l_new_sched_finish_date_tbl.extend(l_num_of_asgmts);
10348 
10349         FOR i IN 1..l_num_of_asgmts LOOP
10350             l_res_asgmt_id_tbl(i)           := p_task_assignment_tbl(i).resource_assignment_id;
10351             l_new_rlm_id_tbl(i)             := p_task_assignment_tbl(i).resource_list_member_id;
10352             l_override_cur_tbl(i)           := p_task_assignment_tbl(i).override_currency_code;
10353             l_new_project_role_id_tbl(i)    := p_task_assignment_tbl(i).project_role_id;
10354             l_new_total_qty_tbl(i)          := p_task_assignment_tbl(i).total_quantity;
10355             l_new_sched_start_date_tbl(i)   := p_task_assignment_tbl(i).schedule_start_date;
10356             l_new_sched_finish_date_tbl(i)  := p_task_assignment_tbl(i).schedule_end_date;
10357         END LOOP;
10358 
10359         -- Manually seed the statistics for the temporary table.
10360         -- Need to do it before populating the table otherwise the table will be emptied.
10361 		-- Bug 8261905 : Replaced 'PA' by PJI_UTILS.GET_PA_SCHEMA_NAME
10362         PA_TASK_ASSIGNMENT_UTILS.set_table_stats(PJI_UTILS.GET_PA_SCHEMA_NAME,'PA_RES_ASGMTS_TEMP', l_num_of_asgmts, l_num_blocks, 75);
10363 
10364         -- Populate the temporary table with the parameters passed in.
10365         DELETE pa_res_asgmts_temp;
10366         FORALL j IN 1..p_task_assignment_tbl.COUNT
10367             INSERT INTO pa_res_asgmts_temp VALUES
10368                 (l_res_asgmt_id_tbl(j), l_new_rlm_id_tbl(j), l_override_cur_tbl(j), l_new_project_role_id_tbl(j),
10369                 l_new_total_qty_tbl(j), l_new_sched_start_date_tbl(j), l_new_sched_finish_date_tbl(j));
10370 
10371         -- Initialize the arrays.
10372         l_res_asgmt_id_tbl          := SYSTEM.PA_NUM_TBL_TYPE();
10373         l_new_rlm_id_tbl            := SYSTEM.PA_NUM_TBL_TYPE();
10374         l_override_cur_tbl          := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
10375         l_new_project_role_id_tbl   := SYSTEM.PA_NUM_TBL_TYPE();
10376         l_new_total_qty_tbl         := SYSTEM.PA_NUM_TBL_TYPE();
10377         l_new_sched_start_date_tbl  := SYSTEM.PA_DATE_TBL_TYPE();
10378         l_new_sched_finish_date_tbl := SYSTEM.PA_DATE_TBL_TYPE();
10379 
10380         -- Populate all the parameters.
10381         OPEN get_all_parameters;
10382         FETCH get_all_parameters BULK COLLECT INTO l_res_asgmt_id_tbl, l_old_rlm_id_tbl, l_new_rlm_id_tbl,
10383         l_actual_cur_tbl, l_override_cur_tbl, l_old_project_role_id_tbl, l_new_project_role_id_tbl,
10384         l_old_total_qty_tbl, l_new_total_qty_tbl, l_actual_qty_tbl, l_actual_finish_date_tbl,
10385         l_old_sched_start_date_tbl, l_old_sched_finish_date_tbl, l_new_sched_start_date_tbl,
10386         l_new_sched_finish_date_tbl, l_lat_pub_prog_flag_tbl;
10387         CLOSE get_all_parameters;
10388 
10389         l_num_of_rows := l_res_asgmt_id_tbl.COUNT;
10390 
10391         IF l_num_of_rows > 0 THEN
10392 
10393             FOR k IN 1..l_num_of_rows LOOP
10394 
10395                 -- Initialize the indicator.
10396                 l_viol_indicator := NULL;
10397 
10398                 -- Latest progress entered. Use this row to compare the override currency and the currency of the actuals.
10399                 IF l_lat_pub_prog_flag_tbl(k) = 'Y' THEN
10400 
10401                     -- Cannot override the currency if progress has been collected.
10402                     IF ( l_actual_cur_tbl(k) IS NOT NULL AND l_override_cur_tbl(k) IS NOT NULL
10403                          AND l_actual_cur_tbl(k) <> l_override_cur_tbl(k) ) THEN
10404                         l_viol_indicator := 1;
10405                     END IF;
10406 
10407                 -- Progress applied to the working version. Check the other business rules.
10408                 ELSE -- l_lat_pub_prog_flag_tbl(k) <> 'Y'
10409 
10410                     -- Cannot change the planning resource if progress has been applied to the working version.
10411                     IF ( l_new_rlm_id_tbl(k) = FND_API.G_MISS_NUM AND l_old_rlm_id_tbl IS NOT NULL) OR
10412                        ( l_new_rlm_id_tbl(k) <> FND_API.G_MISS_NUM AND l_new_rlm_id_tbl(k) IS NOT NULL
10413                          AND ( l_new_rlm_id_tbl(k) <> l_old_rlm_id_tbl(k) OR l_old_rlm_id_tbl(k) IS NULL) ) THEN
10414                         l_viol_indicator := 2;
10415                     END IF;
10416 
10417                     -- Cannot change the project role if progress has been applied to the working version.
10418                     IF ( l_new_project_role_id_tbl(k) = FND_API.G_MISS_NUM AND l_old_project_role_id_tbl(k) IS NOT NULL )
10419                        OR ( l_new_project_role_id_tbl(k) <> FND_API.G_MISS_NUM AND l_new_project_role_id_tbl(k) IS NOT NULL AND
10420                        ( l_old_project_role_id_tbl(k) <> l_new_project_role_id_tbl(k) OR l_old_project_role_id_tbl(k) IS NULL ) ) THEN
10421                         l_viol_indicator := 3;
10422                     END IF;
10423 		    /* Bug Fix 5726773
10424  	                As a part of supporting negative quantities and amounts the following check is commented out.
10425 
10426                     -- Cannot decrease planned quantity below actual quantity.
10427                     IF ( l_actual_qty_tbl(k) IS NOT NULL AND l_new_total_qty_tbl(k) IS NOT NULL AND
10428                        ( l_new_total_qty_tbl(k) = FND_API.G_MISS_NUM OR l_new_total_qty_tbl(k) < l_actual_qty_tbl(k) ) ) THEN
10429                         l_viol_indicator := 4;
10430                     END IF;
10431 		    */
10432  	            -- End of Bug Fix 5726773
10433 
10434                     /* Bug 4570108
10435 		    9/02 M-closeout - Based on discussion with Koushik, Sakthi, Ansari, removing this check:
10436                     -- If the assignment is completed.
10437                     IF ( l_actual_finish_date_tbl(k) IS NOT NULL ) THEN
10438 
10439                         -- Cannot change the scheduled start date if an actual end date has been entered.
10440                         IF ( l_new_sched_start_date_tbl(k) = FND_API.G_MISS_DATE AND l_old_sched_start_date_tbl(k) IS NOT NULL )
10441                            OR ( l_new_sched_start_date_tbl(k) <> FND_API.G_MISS_DATE AND l_new_sched_start_date_tbl(k) IS NOT NULL AND
10442                               (l_new_sched_start_date_tbl(k) <> l_old_sched_start_date_tbl(k) OR l_old_sched_start_date_tbl(k) IS NULL) ) THEN
10443                             l_viol_indicator := 6;
10444                         END IF;
10445 
10446                         -- Cannot change the scheduled finish date if an actual end date has been entered.
10447                         IF ( l_new_sched_finish_date_tbl(k) = FND_API.G_MISS_DATE
10448                            AND l_old_sched_finish_date_tbl(k) IS NOT NULL ) OR
10449                            ( l_new_sched_finish_date_tbl(k) <> FND_API.G_MISS_DATE AND
10450                            l_new_sched_finish_date_tbl(k) IS NOT NULL AND ( l_new_sched_finish_date_tbl(k) <> l_old_sched_finish_date_tbl(k)
10451                            OR l_old_sched_finish_date_tbl(k) IS NULL) ) THEN
10452                             l_viol_indicator := 7;
10453                         END IF;
10454 
10455                     END IF; -- l_actual_finish_date_tbl(k) IS NOT NULL
10456 		    */
10457 
10458                 END IF; -- l_lat_pub_prog_flag_tbl(k) = 'Y'
10459 
10460                 IF l_viol_indicator IS NOT NULL THEN
10461 
10462                     x_return_status := FND_API.G_RET_STS_ERROR;
10463 
10464                     IF l_viol_indicator = 1 THEN
10465                         PA_UTILS.ADD_MESSAGE
10466                         (
10467                             p_app_short_name => 'PA',
10468                             p_msg_name       => 'PA_UP_TA_CUR_ERR',
10469                             p_token1         => 'ACTUAL_CURRENCY',
10470                             p_value1         =>  l_actual_cur_tbl(k)
10471                         );
10472                     ELSIF l_viol_indicator = 2 OR l_viol_indicator = 3 THEN
10473                         PA_UTILS.ADD_MESSAGE
10474                         (
10475                             p_app_short_name => 'PA',
10476                             p_msg_name       => 'PA_UP_TA_PL_RES_ERR'
10477                         );
10478                     ELSIF l_viol_indicator = 4 THEN
10479                         PA_UTILS.ADD_MESSAGE
10480                         (
10481                             p_app_short_name => 'PA',
10482                             p_msg_name       => 'PA_UP_TA_DECR_QTY_ERR'
10483                         );
10484                     ELSIF l_viol_indicator = 6 OR l_viol_indicator = 7 THEN
10485                         PA_UTILS.ADD_MESSAGE
10486                         (
10487                             p_app_short_name => 'PA',
10488                             p_msg_name       => 'PA_UP_TA_ASMT_END_ERR'
10489                         );
10490                     END IF; -- l_viol_indicator
10491 
10492                 END IF; -- l_viol_indicator IS NOT NULL
10493 
10494             END LOOP;
10495 
10496         END IF; -- l_num_of_rows > 0
10497 
10498     END IF; -- l_num_of_asgmts > 0
10499 
10500     EXCEPTION WHEN OTHERS THEN
10501         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10502         RAISE;
10503 
10504 END check_prog_for_update_asgmts;
10505 
10506 -- Bug # 3910193: Created API: convert_effort_to_cost_brdn_pc().
10507 
10508 PROCEDURE convert_effort_to_cost_brdn_pc
10509 (   p_resource_list_mem_id      IN                        NUMBER
10510     ,p_project_id                   IN                        NUMBER
10511     ,p_task_id              IN                    NUMBER
10512     ,p_as_of_date           IN                    DATE
10513     ,p_structure_version_id         IN                        NUMBER
10514     ,p_txn_currency_code            IN                        VARCHAR
10515     ,p_planned_quantity             IN                        NUMBER
10516     ,p_act_quantity_this_period     IN                        NUMBER
10517     ,p_act_quantity                 IN                        NUMBER
10518     ,p_act_brdncost_pc              IN                        NUMBER
10519     ,p_etc_quantity                 IN                        NUMBER
10520     ,p_rate_based_flag              IN                        VARCHAR := 'Y'
10521     ,x_act_brdncost_pc_this_period      OUT                       NOCOPY NUMBER --File.Sql.39 bug 4440895
10522     ,x_etc_brdncost_pc                  OUT                       NOCOPY NUMBER --File.Sql.39 bug 4440895
10523     ,x_prcnt_comp_quantity              OUT                       NOCOPY NUMBER --File.Sql.39 bug 4440895
10524     ,x_prcnt_spent_quantity             OUT                       NOCOPY NUMBER --File.Sql.39 bug 4440895
10525     ,x_eac_quantity                 OUT                       NOCOPY NUMBER --File.Sql.39 bug 4440895
10526     ,x_prcnt_comp_brdncost_pc       OUT                       NOCOPY NUMBER --File.Sql.39 bug 4440895
10527     ,x_prcnt_spent_brdncost_pc      OUT                       NOCOPY NUMBER --File.Sql.39 bug 4440895
10528     ,x_eac_brdncost_pc              OUT                       NOCOPY NUMBER --File.Sql.39 bug 4440895
10529     ,x_return_status            OUT                       NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10530     ,x_msg_count            OUT                       NOCOPY NUMBER --File.Sql.39 bug 4440895
10531     ,x_msg_data             OUT                       NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10532 )
10533 
10534 IS
10535       /* commented out, performance issue
10536     cursor cur_ptav is
10537     select planned_bur_cost_proj_cur
10538     from pa_task_asgmts_v
10539     where project_id = p_project_id
10540     and task_id = p_task_id
10541     and structure_version_id = p_structure_version_id
10542     and resource_list_member_id = p_resource_list_mem_id;
10543       */
10544 
10545      cursor cur_ptav is
10546      select pra.total_project_burdened_cost as planned_bur_cost_proj_cur
10547      , pra.resource_assignment_id -- Bug 4372462
10548      , pra.budget_version_id -- Bug 4372462
10549        FROM pa_resource_assignments pra,
10550             PA_PROJ_ELEMENT_VERSIONS PPEV
10551       where pra.resource_list_member_id = p_resource_list_mem_id
10552         and pra.task_id = p_task_id
10553         AND PPEV.PROJECT_ID = p_project_id
10554         AND PPEV.PARENT_STRUCTURE_VERSION_ID = p_structure_version_id
10555         AND pra.TASK_ID = PPEV.PROJ_ELEMENT_ID
10556         AND pra.wbs_element_version_id = ppev.element_version_id;
10557 
10558     l_cur_ptav          NUMBER;
10559     l_resource_assignment_id    NUMBER; -- Bug 4372462
10560     l_budget_version_id     NUMBER; -- Bug 4372462
10561 
10562     l_planned_brdncost_pc       NUMBER       := null;
10563 
10564         l_plan_res_cur_code             VARCHAR2(30)     := null;
10565 
10566         l_plan_res_burden_rate_etc      NUMBER           := null;
10567         l_plan_res_burden_rate_act      NUMBER           := null;
10568 
10569         l_plan_res_raw_rate         NUMBER           := null;
10570 
10571         l_plan_burden_multiplier_etc    NUMBER           := null;
10572         l_plan_burden_multiplier_act    NUMBER           := null;
10573 
10574     l_rawcost_pc            NUMBER       := null;
10575     l_rawcost_fc            NUMBER       := null;
10576 
10577     l_txn_currency_code     VARCHAR2(15)     := null;
10578 
10579     l_project_curr_code             VARCHAR2(30);
10580         l_project_rate_type             VARCHAR2(30);
10581         l_project_rate_date             DATE;
10582         l_project_exch_rate             NUMBER;
10583 
10584     l_projfunc_curr_code            VARCHAR2(30);
10585         l_projfunc_cost_rate_type       VARCHAR2(30);
10586         l_projfunc_cost_rate_date       DATE;
10587         l_projfunc_cost_exch_rate       NUMBER;
10588 
10589     l_etc_brdncost_tc       NUMBER        := null;
10590     l_etc_brdncost_pc       NUMBER        := null;
10591 
10592     l_act_brdncost_pc       NUMBER        := null;
10593 
10594     l_act_brdncost_tc_this_period   NUMBER        := null;
10595     l_act_brdncost_pc_this_period   NUMBER        := null;
10596 
10597     l_act_quantity_to_date      NUMBER        := null;
10598     l_act_brdncost_to_date_pc   NUMBER        := null;
10599 
10600     l_eac_quantity          NUMBER        := null;
10601     l_eac_brdncost_pc       NUMBER        := null;
10602 
10603     l_prcnt_comp_quantity       NUMBER        := null;
10604     l_prcnt_spent_quantity      NUMBER        := null;
10605 
10606     l_prcnt_comp_brdncost_pc    NUMBER        := null;
10607     l_prcnt_spent_brdncost_pc   NUMBER        := null;
10608 
10609     l_return_status                 VARCHAR2(1)       := null;
10610         l_msg_count                     NUMBER            := null;
10611         l_msg_data                      VARCHAR2(250)     := null;
10612 
10613         g1_debug_mode               VARCHAR2(1);
10614     l_track_wp_cost_flag  VARCHAR2(1) := 'Y'; -- Bug 3921624
10615 
10616 
10617 BEGIN
10618      l_return_status := fnd_api.g_ret_sts_success ; -- 4537865
10619      g1_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N');
10620 
10621      IF g1_debug_mode  = 'Y' THEN
10622          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost_brdn_pc', x_Msg => 'p_resource_list_mem_id='||p_resource_list_mem_id, x_Log_Level=> 3);
10623          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost_brdn_pc', x_Msg => 'p_project_id='||p_project_id, x_Log_Level=> 3);
10624          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost_brdn_pc', x_Msg => 'p_structure_version_id='||p_structure_version_id, x_Log_Level=> 3);
10625          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost_brdn_pc', x_Msg => 'p_txn_currency_code='||p_txn_currency_code, x_Log_Level=> 3);
10626          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost_brdn_pc', x_Msg => 'p_planned_quantity='||p_planned_quantity, x_Log_Level=> 3);
10627          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost_brdn_pc', x_Msg => 'p_act_quantity_this_period='||p_act_quantity_this_period, x_Log_Level=> 3);
10628          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost_brdn_pc', x_Msg => 'p_act_quantity='||p_act_quantity, x_Log_Level=> 3);
10629              pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost_brdn_pc', x_Msg => 'p_act_brdncost_pc='||p_act_brdncost_pc, x_Log_Level=> 3);
10630          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost_brdn_pc', x_Msg => 'p_etc_quantity='||p_etc_quantity, x_Log_Level=> 3);
10631          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost_brdn_pc', x_Msg => 'p_rate_based_flag='||p_rate_based_flag, x_Log_Level=> 3);
10632      END IF;
10633 
10634      FND_MSG_PUB.initialize;
10635 
10636      l_track_wp_cost_flag :=  pa_fp_wp_gen_amt_utils.get_wp_track_cost_amt_flag(p_project_id);  --Bug 3921624
10637 
10638      IF NVL(l_track_wp_cost_flag, 'Y') = 'Y' THEN   --Bug 3921624
10639     --  1). Get the input act_brdncost_pc into the corresponding local variable.
10640 
10641         l_act_brdncost_pc := nvl(p_act_brdncost_pc,0);
10642 
10643     --  2). Get the planned_brdncost_pc from pa_task_assignments_v;
10644 
10645     open cur_ptav;
10646     fetch cur_ptav into l_cur_ptav, l_resource_assignment_id,l_budget_version_id ; -- Bug 4372462 : Added l_resource_assignment_id and l_budget_version_id
10647     close cur_ptav;
10648 
10649 
10650     l_planned_brdncost_pc := nvl(l_cur_ptav,0);
10651 
10652     -- 3.1). Get resource rate burden multiplier to convert etc_rawcost to etc_brdncost and resource burden rate to convert etc_effort to etc_brdncost in tc.
10653 
10654     l_plan_res_cur_code               := null;
10655         l_plan_res_raw_rate           := null;
10656         l_return_status                   := null;
10657         l_msg_count                       := null;
10658         l_msg_data                        := null;
10659     l_plan_burden_multiplier_etc      := null;
10660     l_plan_res_burden_rate_etc        := null;
10661 
10662     PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier(
10663                 P_res_list_mem_id              => p_resource_list_mem_id
10664                 ,P_project_id                  => p_project_id
10665                 ,P_task_id                     => p_task_id      --bug 3927159
10666             ,p_as_of_date                  => p_as_of_date   --bug 3927159
10667                 ,p_structure_version_id        => p_structure_version_id
10668                 ,p_currency_code               => p_txn_currency_code
10669                 ,p_calling_mode                => 'PLAN_RATES'
10670                 ,x_resource_curr_code          => l_plan_res_cur_code
10671                 ,x_resource_raw_rate           => l_plan_res_raw_rate
10672                 ,x_resource_burden_rate        => l_plan_res_burden_rate_etc
10673                 ,X_burden_multiplier           => l_plan_burden_multiplier_etc
10674                 ,x_return_status               => l_return_status
10675                 ,x_msg_count                   => l_msg_count
10676                 ,x_msg_data                    => l_msg_data);
10677 
10678     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10679             x_return_status := 'E';
10680         RAISE  FND_API.G_EXC_ERROR;
10681     END IF;
10682 
10683         -- 3.2). If the rate_based_flag is 'Y' and the resource burden rate currency code is not the same as the txn currency code, convert the resource burden rate into txn currency.
10684     --    To do this we use the API: PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS() and we pass in
10685     --    txn_currency code into the projfunc_currency_code parameter and read out the value of
10686     --    the parameter projfunc_raw_cost.
10687 
10688     IF ((p_rate_based_flag = 'Y') and (p_txn_currency_code <> l_plan_res_cur_code)) then
10689             l_rawcost_pc := null;
10690             l_txn_currency_code := p_txn_currency_code;
10691 
10692         PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS(
10693                 p_project_id               =>  p_project_id
10694                 ,p_task_id                  => p_task_id
10695                 ,p_as_of_date               => p_as_of_date
10696                 ,p_txn_cost                 => l_plan_res_burden_rate_etc
10697                 ,p_txn_curr_code            => l_plan_res_cur_code
10698             ,p_structure_version_id     => p_structure_version_id
10699             ,p_project_curr_code        => l_txn_currency_code ---l_project_curr_code
10700                 ,p_project_rate_type        => l_project_rate_type
10701                 ,p_project_rate_date        => l_project_rate_date
10702                 ,p_project_exch_rate        => l_project_exch_rate
10703                 ,p_project_raw_cost         => l_rawcost_pc
10704             ,p_projfunc_curr_code       => l_projfunc_curr_code ---txn_currency_code
10705                 ,p_projfunc_cost_rate_type  => l_projfunc_cost_rate_type
10706                 ,p_projfunc_cost_rate_date  => l_projfunc_cost_rate_date
10707                 ,p_projfunc_cost_exch_rate  => l_projfunc_cost_exch_rate
10708                 ,p_projfunc_raw_cost        => l_rawcost_fc
10709                 ,x_return_status            => l_return_status
10710                 ,x_msg_count                => l_msg_count
10711                 ,x_msg_data                 => l_msg_data
10712             );
10713 
10714             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10715         x_return_status := 'E';
10716         RAISE  FND_API.G_EXC_ERROR;
10717             END IF;
10718 
10719         l_plan_res_burden_rate_etc :=   l_rawcost_pc;
10720 
10721     END IF;
10722 
10723     -- 4.1). Get resource rate burden multiplier to convert act_rawcost_this_period to
10724     --    act_brdncost_this_period and resource burden rate to convert act_effort_this_period
10725     --    to act_brdncost_tc_this_period.
10726 
10727     l_plan_res_cur_code               := null;
10728         l_plan_res_raw_rate           := null;
10729         l_return_status                   := null;
10730         l_msg_count                       := null;
10731         l_msg_data                        := null;
10732 
10733     l_plan_burden_multiplier_act      := null;
10734     l_plan_res_burden_rate_act        := null;
10735 
10736     PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier(
10737                     P_res_list_mem_id              => p_resource_list_mem_id
10738                 ,P_project_id                  => p_project_id
10739                 ,P_task_id                     => p_task_id      --bug 3927159
10740             ,p_as_of_date                  => p_as_of_date   --bug 3927159
10741                 ,p_structure_version_id        => p_structure_version_id
10742                 ,p_currency_code               => p_txn_currency_code
10743                 ,p_calling_mode                => 'ACTUAL_RATES'
10744                 ,x_resource_curr_code          => l_plan_res_cur_code
10745                 ,x_resource_raw_rate           => l_plan_res_raw_rate
10746                 ,x_resource_burden_rate        => l_plan_res_burden_rate_act
10747                 ,X_burden_multiplier           => l_plan_burden_multiplier_act
10748                 ,x_return_status               => l_return_status
10749                 ,x_msg_count                   => l_msg_count
10750                 ,x_msg_data                    => l_msg_data);
10751 
10752     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10753              x_return_status := 'E';
10754              RAISE  FND_API.G_EXC_ERROR;
10755     END IF;
10756 
10757     -- 4.2). If the rate_based_flag is 'Y' and the resource burden rate currency code is
10758     --    not the same as the txn currency code, convert the resource burden rate into txn currency.
10759     --    To do this we use the API: PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS() and we pass in
10760     --    txn_currency code into the projfunc_currency_code parameter and read out the value of
10761     --    the parameter projfunc_raw_cost.
10762 
10763     IF ((p_rate_based_flag = 'Y') and (p_txn_currency_code <> l_plan_res_cur_code)) then
10764 
10765         l_rawcost_pc := null;
10766             l_txn_currency_code := p_txn_currency_code;
10767         PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS(
10768                 p_project_id               =>  p_project_id
10769                 ,p_task_id                  => p_task_id
10770                 ,p_as_of_date               => p_as_of_date
10771                 ,p_txn_cost                 => l_plan_res_burden_rate_act
10772                 ,p_txn_curr_code            => l_plan_res_cur_code
10773             ,p_structure_version_id     => p_structure_version_id
10774             ,p_project_curr_code        => l_txn_currency_code ---l_project_curr_code
10775                 ,p_project_rate_type        => l_project_rate_type
10776                 ,p_project_rate_date        => l_project_rate_date
10777                 ,p_project_exch_rate        => l_project_exch_rate
10778                 ,p_project_raw_cost         => l_rawcost_pc
10779             ,p_projfunc_curr_code       => l_projfunc_curr_code ---l_txn_currency_code
10780                 ,p_projfunc_cost_rate_type  => l_projfunc_cost_rate_type
10781                 ,p_projfunc_cost_rate_date  => l_projfunc_cost_rate_date
10782                 ,p_projfunc_cost_exch_rate  => l_projfunc_cost_exch_rate
10783                 ,p_projfunc_raw_cost        => l_rawcost_fc
10784                 ,x_return_status            => l_return_status
10785                 ,x_msg_count                => l_msg_count
10786                 ,x_msg_data                 => l_msg_data
10787             );
10788 
10789             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10790         x_return_status := 'E';
10791         RAISE  FND_API.G_EXC_ERROR;
10792             END IF;
10793 
10794         l_plan_res_burden_rate_act :=   l_rawcost_pc;
10795     END IF;
10796 
10797      -- If (p_rate_based_flag  = 'N'), the input quantity values are rawcost_tc values.
10798     If (p_rate_based_flag = 'N') then
10799 
10800       -- 5.1). Use the resource rate burden multiplier to convert etc_rawcost_tc into etc_brdncost_tc.
10801 
10802       --l_etc_brdncost_tc := nvl(pa_currency.round_trans_currency_amt((nvl(p_etc_quantity,0) * nvl(l_plan_burden_multiplier_etc,0)), p_txn_currency_code),0) + nvl(p_etc_quantity,0);
10803             l_etc_brdncost_tc := nvl(pa_currency.round_trans_currency_amt1((nvl(p_etc_quantity,0) * nvl(l_plan_burden_multiplier_etc,0)), p_txn_currency_code),0) + nvl(p_etc_quantity,0);
10804       -- 5.2). Use the resource rate burden multiplier to convert act_rawcost_tc_this_period into  act_brdncost_tc_this_period.
10805 
10806       --l_act_brdncost_tc_this_period := nvl(pa_currency.round_trans_currency_amt(
10807     --          (nvl(p_act_quantity_this_period,0) * nvl(l_plan_burden_multiplier_act,0)), p_txn_currency_code),0) + nvl(p_act_quantity_this_period,0);
10808 
10809         l_act_brdncost_tc_this_period := nvl(pa_currency.round_trans_currency_amt1(
10810                 (nvl(p_act_quantity_this_period,0) * nvl(l_plan_burden_multiplier_act,0)), p_txn_currency_code),0) + nvl(p_act_quantity_this_period,0);
10811 
10812     else
10813 
10814        -- 6.1). Use resource burden rate to convert etc_effort into etc_brdncost_tc:
10815 
10816        --l_etc_brdncost_tc := pa_currency.round_trans_currency_amt((nvl(p_etc_quantity,0) * nvl(l_plan_res_burden_rate_etc,0)), p_txn_currency_code);
10817        l_etc_brdncost_tc := pa_currency.round_trans_currency_amt1((nvl(p_etc_quantity,0) * nvl(l_plan_res_burden_rate_etc,0)), p_txn_currency_code);
10818 
10819         -- 6.2). Use resource burden rate to convert act_effort_this_period into
10820         --       act_brdncost_tc_this_period.
10821 
10822            --l_act_brdncost_tc_this_period := pa_currency.round_trans_currency_amt(
10823         --      (nvl(p_act_quantity_this_period,0) * nvl(l_plan_res_burden_rate_act,0)), p_txn_currency_code);
10824          l_act_brdncost_tc_this_period := pa_currency.round_trans_currency_amt1(
10825                 (nvl(p_act_quantity_this_period,0) * nvl(l_plan_res_burden_rate_act,0)), p_txn_currency_code);
10826      end if;     -- If (p_rate_based_flag = 'N') then
10827 
10828          -- 7.1). Convert etc_brdncost_tc into etc_brdncost_pc. To do this we use the API:
10829      --      PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS() and we pass in etc_brdncost_tc
10830      --  into the txn_cost parameter and read out the value of the parameter project_raw_cost.
10831 
10832      l_rawcost_pc := null;
10833 
10834          PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS(
10835                 p_project_id                => p_project_id
10836                 ,p_task_id                  => p_task_id
10837                 ,p_as_of_date               => p_as_of_date
10838                 ,p_txn_cost                 => l_etc_brdncost_tc
10839                 ,p_txn_curr_code            => p_txn_currency_code
10840             ,p_structure_version_id     => p_structure_version_id
10841             ,p_project_curr_code        => l_project_curr_code
10842                 ,p_project_rate_type        => l_project_rate_type
10843                 ,p_project_rate_date        => l_project_rate_date
10844                 ,p_project_exch_rate        => l_project_exch_rate
10845                 ,p_project_raw_cost         => l_rawcost_pc
10846             ,p_projfunc_curr_code       => l_projfunc_curr_code
10847                 ,p_projfunc_cost_rate_type  => l_projfunc_cost_rate_type
10848                 ,p_projfunc_cost_rate_date  => l_projfunc_cost_rate_date
10849                 ,p_projfunc_cost_exch_rate  => l_projfunc_cost_exch_rate
10850                 ,p_projfunc_raw_cost        => l_rawcost_fc
10851             ,p_calling_mode         => 'PLAN_RATES' -- Bug 4372462
10852             ,p_budget_version_id        => l_budget_version_id -- Bug 4372462
10853             ,p_res_assignment_id        => l_resource_assignment_id -- Bug 4372462
10854                 ,x_return_status            => l_return_status
10855                 ,x_msg_count                => l_msg_count
10856                 ,x_msg_data                 => l_msg_data
10857             );
10858 
10859      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10860         x_return_status := 'E';
10861         RAISE  FND_API.G_EXC_ERROR;
10862      END IF;
10863 
10864      l_etc_brdncost_pc := l_rawcost_pc;
10865 
10866      -- 7.2). Convert act_brdncost_tc_this_period into act_brdncost_pc_this_period.
10867      --  To do this we use the API: PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS()
10868      --      and we pass in act_brdncost_tc_this_period into the txn_cost parameter and
10869      --  read out the value of the parameter project_raw_cost.
10870 
10871      l_rawcost_pc := null;
10872 
10873      PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS(
10874                 p_project_id                => p_project_id
10875                 ,p_task_id                  => p_task_id
10876                 ,p_as_of_date               => p_as_of_date
10877                 ,p_txn_cost                 => l_act_brdncost_tc_this_period
10878                 ,p_txn_curr_code            => p_txn_currency_code
10879             ,p_structure_version_id     => p_structure_version_id
10880             ,p_project_curr_code        => l_project_curr_code
10881                 ,p_project_rate_type        => l_project_rate_type
10882                 ,p_project_rate_date        => l_project_rate_date
10883                 ,p_project_exch_rate        => l_project_exch_rate
10884                 ,p_project_raw_cost         => l_rawcost_pc
10885             ,p_projfunc_curr_code       => l_projfunc_curr_code
10886                 ,p_projfunc_cost_rate_type  => l_projfunc_cost_rate_type
10887                 ,p_projfunc_cost_rate_date  => l_projfunc_cost_rate_date
10888                 ,p_projfunc_cost_exch_rate  => l_projfunc_cost_exch_rate
10889                 ,p_projfunc_raw_cost        => l_rawcost_fc
10890                 ,x_return_status            => l_return_status
10891                 ,x_msg_count                => l_msg_count
10892                 ,x_msg_data                 => l_msg_data
10893             );
10894 
10895       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10896         x_return_status := 'E';
10897         RAISE  FND_API.G_EXC_ERROR;
10898       END IF;
10899 
10900       l_act_brdncost_pc_this_period := l_rawcost_pc;
10901 
10902       END IF;  -- bug 3921624, IF NVL(l_track_wp_cost_flag, 'Y') = 'Y'
10903 
10904       l_act_quantity_to_date := nvl(p_act_quantity,0) + nvl(p_act_quantity_this_period,0);
10905       l_eac_quantity := (nvl(p_etc_quantity,0) + l_act_quantity_to_date);
10906       l_prcnt_comp_quantity := PA_PROGRESS_UTILS.Percent_Complete_Value(l_act_quantity_to_date,p_etc_quantity);
10907       l_prcnt_spent_quantity := PA_PROGRESS_UTILS.Percent_Spent_Value(l_act_quantity_to_date,p_planned_quantity);
10908 
10909       IF NVL(l_track_wp_cost_flag, 'Y') = 'Y' THEN -- bug 3921624
10910     l_act_brdncost_to_date_pc := nvl(l_act_brdncost_pc,0)  + nvl(l_act_brdncost_pc_this_period,0);
10911     l_eac_brdncost_pc := (nvl(l_etc_brdncost_pc,0) + l_act_brdncost_to_date_pc );
10912     l_prcnt_comp_brdncost_pc := PA_PROGRESS_UTILS.Percent_Complete_Value(l_act_brdncost_to_date_pc,l_etc_brdncost_pc);
10913     l_prcnt_spent_brdncost_pc := PA_PROGRESS_UTILS.Percent_Spent_Value(l_act_brdncost_to_date_pc,l_planned_brdncost_pc);
10914       END IF;
10915 
10916       IF g1_debug_mode  = 'Y' THEN
10917         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost_brdn_pc', x_Msg => 'l_eac_quantity='||l_eac_quantity, x_Log_Level=> 3);
10918         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost_brdn_pc', x_Msg => 'l_eac_brdncost_pc='||l_eac_brdncost_pc, x_Log_Level=> 3);
10919         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost_brdn_pc', x_Msg => 'l_prcnt_comp_quantity='||l_prcnt_comp_quantity, x_Log_Level=> 3);
10920         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost_brdn_pc', x_Msg => 'l_prcnt_comp_brdncost_pc='||l_prcnt_comp_brdncost_pc, x_Log_Level=> 3);
10921         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost_brdn_pc', x_Msg => 'l_prcnt_spent_quantity='||l_prcnt_spent_quantity, x_Log_Level=> 3);
10922         pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost_brdn_pc', x_Msg => 'l_prcnt_spent_brdncost_pc='||l_prcnt_spent_brdncost_pc, x_Log_Level=> 3);
10923       END IF;
10924 
10925     -- Set the values to the output parameters:
10926 
10927     x_act_brdncost_pc_this_period           :=    nvl(l_act_brdncost_pc_this_period, 0);
10928     x_etc_brdncost_pc                       :=    nvl(l_etc_brdncost_pc,0);
10929 
10930     x_prcnt_comp_quantity                   :=    nvl(l_prcnt_comp_quantity,0);
10931     x_prcnt_spent_quantity                  :=    nvl(l_prcnt_spent_quantity,0);
10932     x_eac_quantity                          :=    nvl(l_eac_quantity,0);
10933 
10934     x_prcnt_comp_brdncost_pc                :=    nvl(l_prcnt_comp_brdncost_pc,0);
10935     x_prcnt_spent_brdncost_pc               :=    nvl(l_prcnt_spent_brdncost_pc,0);
10936     x_eac_brdncost_pc                       :=    nvl(l_eac_brdncost_pc,0);
10937 
10938     x_return_status                 :=    l_return_status;
10939     x_msg_count                     :=    l_msg_count;
10940     x_msg_data                      :=    l_msg_data;
10941 
10942 EXCEPTION
10943 
10944     WHEN FND_API.G_EXC_ERROR THEN
10945       x_return_status := FND_API.G_RET_STS_ERROR;
10946       x_msg_count := Fnd_Msg_Pub.count_msg;
10947 
10948     -- 4537865
10949     x_act_brdncost_pc_this_period   := 0 ;
10950     x_etc_brdncost_pc               := 0 ;
10951     x_prcnt_comp_quantity           := 0 ;
10952     x_prcnt_spent_quantity          := 0 ;
10953     x_eac_quantity                  := 0 ;
10954     x_prcnt_comp_brdncost_pc        := 0 ;
10955     x_prcnt_spent_brdncost_pc       := 0 ;
10956     x_eac_brdncost_pc               := 0 ;
10957 
10958     WHEN OTHERS THEN
10959       x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
10960       x_msg_count     := 1;
10961       x_msg_data      := SUBSTRB(SQLERRM,1,240);
10962     -- 4537865
10963     x_act_brdncost_pc_this_period   := 0 ;
10964     x_etc_brdncost_pc               := 0 ;
10965     x_prcnt_comp_quantity           := 0 ;
10966     x_prcnt_spent_quantity          := 0 ;
10967     x_eac_quantity                  := 0 ;
10968     x_prcnt_comp_brdncost_pc        := 0 ;
10969     x_prcnt_spent_brdncost_pc       := 0 ;
10970     x_eac_brdncost_pc               := 0 ;
10971     RAISE;
10972 
10973 END convert_effort_to_cost_brdn_pc;
10974 
10975 function get_actual_summ_date(p_project_id   IN  NUMBER) return date
10976 is
10977  l_prog_act_summ_date   date := null;
10978 begin
10979  /*
10980    select next_progress_update_date
10981      into l_prog_act_summ_date
10982      from pa_proj_progress_attr
10983     where project_id = p_project_id
10984       and object_type = 'PA_STRUCTURES'
10985       and structure_type = 'WORKPLAN';
10986 
10987    --- adding if statement for bug 4490380
10988    if l_prog_act_summ_date is null then
10989  */
10990    --- Bug 4652132 always return latest as_of_date for the project/program.
10991       select as_of_date
10992         into l_prog_act_summ_date
10993         from pa_progress_rollup
10994        where project_id = p_project_id
10995          and object_type = 'PA_STRUCTURES'
10996          and structure_type = 'WORKPLAN'
10997          and structure_version_id is null
10998          and current_flag = 'Y';
10999 
11000    return l_prog_act_summ_date;
11001 
11002 exception when others then
11003     return to_date(null);
11004 end;
11005 
11006 /* Bug # 3956235: Created API: get_cost_variance(). */
11007 
11008 -- 4392189 Phase 2: ignore p_base_percent_complete
11009 Function get_cost_variance(
11010     p_project_id                NUMBER
11011     , p_proj_element_id         NUMBER
11012     , p_structure_version_id        NUMBER
11013     , p_task_weight_method              VARCHAR2
11014     , p_structure_type          VARCHAR2 := 'WORKPLAN'
11015     , p_base_percent_complete       NUMBER
11016     , p_eff_rollup_percent_comp     NUMBER
11017     , p_earned_value            NUMBER
11018     , p_oth_act_cost_to_date_pc     NUMBER
11019     , p_ppl_act_cost_to_date_pc     NUMBER
11020     , p_eqpmt_act_cost_to_date_pc       NUMBER
11021     , p_spj_oth_act_cost_to_date_pc     NUMBER
11022     , p_spj_ppl_act_cost_pc         NUMBER
11023     , p_spj_eqpmt_act_cost_pc       NUMBER
11024 ) return number
11025 is
11026 
11027     l_cost_variance NUMBER  := null;
11028     l_bac_value NUMBER  := null;
11029     l_earned_value  NUMBER  := null;
11030 
11031 begin
11032 
11033     if (p_task_weight_method = 'EFFORT') then
11034 
11035         /* Get the corresponding BAC cost value by passing p_task_weight_method as 'COST'. */
11036 
11037             l_bac_value := pa_progress_utils.get_bac_value(
11038                         p_project_id        => p_project_id
11039                     ,p_task_weight_method   => 'COST'
11040                     ,p_proj_element_id  => p_proj_element_id
11041                     ,p_structure_version_id => p_structure_version_id
11042                     ,p_structure_type   => p_structure_type
11043                     );
11044 
11045         /* Calculate the corresponding earned_value cost using the BAC cost value. */
11046 
11047 --          l_earned_value := round((nvl(nvl(p_base_percent_complete
11048 --                           ,p_eff_rollup_percent_comp),0)
11049 --                      * nvl(l_bac_value,0)/100),5);
11050             l_earned_value := round((nvl(p_eff_rollup_percent_comp,0)
11051                         * nvl(l_bac_value,0)/100),5);
11052 
11053 
11054     else
11055 
11056         /* Set earned_value as the input earned_value. */
11057 
11058             l_earned_value := nvl(p_earned_value,0);
11059 
11060     end if;
11061 
11062     /* Calculate the cost_variance. */
11063 
11064         l_cost_variance := nvl(l_earned_value,0)-(nvl(p_oth_act_cost_to_date_pc,0)
11065                               +nvl(p_ppl_act_cost_to_date_pc,0)
11066                               +nvl(p_eqpmt_act_cost_to_date_pc,0)
11067                               +nvl(p_spj_oth_act_cost_to_date_pc,0)
11068                                   +nvl(p_spj_ppl_act_cost_pc,0)
11069                               +nvl(p_spj_eqpmt_act_cost_pc,0));
11070 
11071     /* Return the calcualted cost variance. */
11072 
11073         return(l_cost_variance);
11074 
11075 end  get_cost_variance;
11076 
11077 -- Begin fix for Bug # 4073659.
11078 
11079 FUNCTION check_prog_exists_and_delete(
11080  p_project_id       NUMBER
11081  ,p_task_id     NUMBER
11082  ,p_object_type     VARCHAR2 := 'PA_TASKS'
11083  ,p_object_id       NUMBER   := null
11084  ,p_structure_type  VARCHAR2 := 'WORKPLAN'
11085  ,p_delete_progress_flag    VARCHAR2 := 'Y' -- Fix for Bug # 4140984.
11086  ,p_cbs_element_id   NUMBER := null -- Added for CBS phase 2 16598322
11087 
11088 ) RETURN VARCHAR2 IS
11089 
11090   CURSOR cur_ppc_assgn(c_object_id NUMBER, c_task_id NUMBER, c_object_type VARCHAR2
11091                , c_project_id NUMBER, c_structure_type VARCHAR2)
11092   IS
11093      SELECT 'Y'
11094      FROM pa_percent_completes ppc
11095      WHERE ppc.object_id = c_object_id
11096      AND ppc.task_id = c_task_id
11097      AND ppc.object_type = c_object_type
11098      AND ppc.project_id  = c_project_id
11099      AND ppc.structure_type = c_structure_type
11100      AND ppc.published_flag = 'Y'
11101 	 AND NVL(ppc.cbs_element_id,-1) = NVL(p_cbs_element_id,-1) ; --Added for CBS phase 2 16598322
11102 
11103   CURSOR cur_ppr_assgn(c_object_id NUMBER, c_task_id NUMBER, c_object_type VARCHAR2
11104                        , c_project_id NUMBER, c_structure_type VARCHAR2)
11105   IS
11106     SELECT /*+ INDEX(PA_PROGRESS_ROLLUP PA_PROGRESS_ROLLUP_N3)*/ 'Y' --Added hint for 15876400
11107     FROM pa_progress_rollup ppr
11108     WHERE ppr.object_id = c_object_id
11109     AND ppr.proj_element_id = c_task_id
11110     AND ppr.object_type = c_object_type
11111     AND ppr.project_id  = c_project_id
11112     AND ppr.structure_type = p_structure_type
11113 	AND NVL(ppr.cbs_element_id,-1) = NVL(p_cbs_element_id,-1)  --Added for CBS phase 2 16598322
11114     AND (((nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)
11115        +nvl(ppr.eqpmt_act_cost_to_date_tc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_TC,0)
11116            + nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0)) <> 0 ) -- 4417665 : making it <> 0 rather than >0
11117      OR
11118          ((nvl(ppr.ppl_act_effort_to_date,0)+nvl(ppr.eqpmt_act_effort_to_date,0)
11119        +nvl(ppr.subprj_ppl_act_effort,0)+nvl(ppr.subprj_eqpmt_act_effort,0)) <> 0) -- 4417665 : making it <> 0 rather than >0
11120      OR
11121      ((nvl(ppr.oth_etc_cost_tc,0)+nvl(ppr.ppl_etc_cost_tc,0)
11122        +nvl(ppr.eqpmt_etc_cost_tc,0)+nvl(ppr.subprj_oth_etc_cost_tc,0)
11123            +nvl(ppr.subprj_ppl_etc_cost_tc,0) +nvl(ppr.subprj_eqpmt_etc_cost_tc,0)) > 0)
11124      OR
11125      ((nvl(ppr.estimated_remaining_effort,0)+nvl(ppr.eqpmt_etc_effort,0)
11126        +nvl(ppr.subprj_ppl_etc_effort,0)+nvl(ppr.subprj_eqpmt_etc_effort,0)) > 0))
11127      AND ppr.current_flag in ('Y', 'W')
11128      AND ppr.structure_version_id is null;
11129 
11130   CURSOR cur_ppc_task(c_task_id NUMBER, c_object_type VARCHAR2
11131                       , c_project_id NUMBER, c_structure_type VARCHAR2)
11132   IS
11133      SELECT 'Y'
11134      FROM pa_percent_completes ppc
11135      WHERE ppc.task_id = c_task_id
11136      AND ppc.object_type = c_object_type
11137      AND ppc.project_id  = c_project_id
11138      AND ppc.structure_type = c_structure_type
11139      AND ppc.published_flag = 'Y';
11140 
11141   CURSOR cur_ppr_task(c_task_id NUMBER, c_object_type VARCHAR2
11142                        , c_project_id NUMBER, c_structure_type VARCHAR2)
11143   IS
11144     SELECT /*+ INDEX(PA_PROGRESS_ROLLUP PA_PROGRESS_ROLLUP_N3)*/ 'Y' --Added hint for 15876400
11145     FROM pa_progress_rollup ppr
11146     WHERE ppr.proj_element_id = c_task_id
11147     AND ppr.object_type = c_object_type
11148     AND ppr.project_id  = c_project_id
11149     AND ppr.structure_type = p_structure_type
11150     AND (((nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)
11151            +nvl(ppr.eqpmt_act_cost_to_date_tc,0)+nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_TC,0)
11152            + nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0)) <> 0 ) ---- 4417665 : making it <> 0 rather than >0
11153          OR
11154          ((nvl(ppr.ppl_act_effort_to_date,0)+nvl(ppr.eqpmt_act_effort_to_date,0)
11155            +nvl(ppr.subprj_ppl_act_effort,0)+nvl(ppr.subprj_eqpmt_act_effort,0)) <> 0) -- 4417665 : making it <> 0 rather than >0
11156          OR
11157          ((nvl(ppr.oth_etc_cost_tc,0)+nvl(ppr.ppl_etc_cost_tc,0)
11158            +nvl(ppr.eqpmt_etc_cost_tc,0)+nvl(ppr.subprj_oth_etc_cost_tc,0)
11159            +nvl(ppr.subprj_ppl_etc_cost_tc,0) +nvl(ppr.subprj_eqpmt_etc_cost_tc,0)) > 0)
11160          OR
11161          ((nvl(ppr.estimated_remaining_effort,0)+nvl(ppr.eqpmt_etc_effort,0)
11162            +nvl(ppr.subprj_ppl_etc_effort,0)+nvl(ppr.subprj_eqpmt_etc_effort,0)) > 0))
11163      AND ppr.current_flag in ('Y', 'W')
11164      AND ppr.structure_version_id is null;
11165 
11166   l_return_value        VARCHAR2(1) := 'N';
11167 
11168 BEGIN
11169 
11170 
11171      -- 1). Default l_return_value.
11172 
11173      l_return_value := 'N';
11174 
11175      -- 2). If progress check and deletion is requested for a single assignment.
11176 
11177     if (p_object_type = 'PA_ASSIGNMENTS') then
11178 
11179          -- 2.1). If published progress exists for the assignment
11180      --   return ''Y'.
11181         -- 4469270 : Removed the check for ppc records
11182             --OPEN cur_ppc_assgn (p_object_id, p_task_id, p_object_type, p_project_id, p_structure_type);
11183             --FETCH cur_ppc_assgn INTO l_return_value;
11184             --CLOSE cur_ppc_assgn;
11185 
11186             IF NVL(l_return_value,'N') <> 'Y' THEN
11187 
11188             -- 2.2). If published progress does not exist for the assignment but latest published
11189             --       or working rollup records exist and actuals /  etc > 0 for the assignment
11190             --       assignment return 'Y'.
11191 
11192                 OPEN cur_ppr_assgn (p_object_id, p_task_id, p_object_type, p_project_id, p_structure_type);
11193                     FETCH cur_ppr_assgn INTO l_return_value;
11194                     CLOSE cur_ppr_assgn;
11195 
11196                 l_return_value := NVL(l_return_value, 'N');
11197 
11198             END IF;
11199 
11200         -- 2.3). If no published progress exists for the assignment and actuals / etc are = 0 on
11201         --   the latest published or working rollup records for the assignment then delete
11202         --   the rollup records for the assignment.
11203 
11204         if ((l_return_value = 'N') and (p_delete_progress_flag = 'Y')) then -- fix for Bug # 4140984.
11205 
11206             DELETE FROM pa_progress_rollup ppr
11207             WHERE ppr.object_id = p_object_id
11208             AND ppr.proj_element_id = p_task_id
11209                 AND ppr.object_type = p_object_type
11210                 AND ppr.project_id  = p_project_id
11211 				AND NVL(ppr.cbs_element_id,-1) = NVL(p_cbs_element_id,-1) --Added for CBS phase 2 16598322
11212                 AND ppr.structure_type = p_structure_type;
11213 
11214         end if;
11215 
11216     -- 3). If progress check and deletion is requested for all the assignments of a task.
11217 
11218     elsif (p_object_type = 'PA_TASKS') then
11219 
11220             -- 3.1). If published progress exists for any of the assignments for the task then
11221         --   return 'Y'.
11222             -- 4469270 : Removed the check for ppc records
11223                     --OPEN cur_ppc_task (p_task_id, 'PA_ASSIGNMENTS'
11224             --            , p_project_id, p_structure_type);
11225                     --FETCH cur_ppc_task INTO l_return_value;
11226                     --CLOSE cur_ppc_task;
11227 
11228             IF NVL(l_return_value,'N') <> 'Y' THEN
11229 
11230                         -- 3.2). If published progress does not exist for any of the assignments for the
11231             --   task but latest published or working rollup records exist and actuals / etc
11232             --   > 0 for any of the assignments return 'Y'.
11233 
11234                                 OPEN cur_ppr_task (p_task_id, 'PA_ASSIGNMENTS'
11235                                                    , p_project_id, p_structure_type);
11236                                 FETCH cur_ppr_task INTO l_return_value;
11237                                 CLOSE cur_ppr_task;
11238 
11239                                 l_return_value := NVL(l_return_value, 'N');
11240 
11241                         END IF;
11242 
11243                 -- 3.3). If no published progress exists for any of the assignments and actuals / etc  = 0
11244         --   on the latest published or working rollup records for all the assignments then
11245         --   delete all the rollup records for all the assignments for the given task.
11246 
11247                 if ((l_return_value = 'N') and (p_delete_progress_flag = 'Y')) then -- Fix for Bug # 4140984.
11248                         DELETE /*+ INDEX(PA_PROGRESS_ROLLUP PA_PROGRESS_ROLLUP_N3)*/ FROM pa_progress_rollup ppr --Added hint for 15876400
11249                         WHERE ppr.proj_element_id = p_task_id
11250             AND ppr.object_type = 'PA_ASSIGNMENTS'
11251                         AND ppr.project_id  = p_project_id
11252                         AND ppr.structure_type = p_structure_type;
11253 
11254                 end if;
11255 
11256     end if;
11257 
11258     return(l_return_value);
11259 
11260 END check_prog_exists_and_delete;
11261 
11262 -- End fix for Bug # 4073659.
11263 
11264 /* Begin fix for bug # 4115607. */
11265 
11266 FUNCTION get_app_cost_budget_cb_wor_ver(p_project_id NUMBER)
11267 return NUMBER
11268 IS
11269 
11270 l_plan_version_id               NUMBER := null;
11271 l_plan_type_id                  NUMBER;
11272 l_fp_options_id                 NUMBER;
11273 l_return_status                 VARCHAR2(2000);
11274 l_msg_data                      VARCHAR2(2000);
11275 l_msg_count                     NUMBER;
11276 
11277 BEGIN
11278 
11279         -- Call the FP API to get the approved cost budget current baselined version id.
11280 
11281         l_plan_version_id := PA_FIN_PLAN_UTILS.Get_app_budget_cost_cb_ver(p_project_id);
11282 
11283 
11284         -- If approved cost budget current baselined version is null then get the approved cost budget
11285         -- plan_type_id.
11286 
11287         if l_plan_version_id is null then
11288 
11289         -- First get the approved cost budget plan_type_id.
11290 
11291         PA_FIN_PLAN_UTILS.Get_Appr_Cost_Plan_Type_Info(
11292         p_project_id            => p_project_id
11293         ,x_plan_type_id         => l_plan_type_id
11294         ,x_return_status        => l_return_status
11295         ,x_msg_count            => l_msg_count
11296         ,x_msg_data             => l_msg_data);
11297 
11298         -- If plan_type_id is not null,  use the plan_type_id to get the approved cost budget current working        -- version id.
11299 
11300                 if (l_plan_type_id is not null) then
11301 
11302                         PA_FIN_PLAN_UTILS.Get_Curr_Working_Version_Info(
11303                         p_project_id            => p_project_id
11304                         ,p_fin_plan_type_id     => l_plan_type_id
11305                         ,p_version_type         => 'COST'
11306                         ,x_fp_options_id        => l_fp_options_id
11307                         ,x_fin_plan_version_id  => l_plan_version_id
11308                         ,x_return_status        => l_return_status
11309                         ,x_msg_count            => l_msg_count
11310                         ,x_msg_data             => l_msg_data);
11311 
11312                 end if;
11313 
11314         end if;
11315 
11316         return(l_plan_version_id);
11317 
11318 END  get_app_cost_budget_cb_wor_ver;
11319 
11320 /* End fix for bug # 4115607. */
11321 
11322 -- procedure to get resource raw and brdn rates
11323 --Bug 5027965. introduced parameter p_etc_cost_calc_mode which  can be either COPY or DERIVE.
11324 --If its COPY then
11325 ----the etc cost in the current working workplan version will returned. In this case
11326 ----the parameter p_budget_version_id will contain the budget version id corresponding to the
11327 ----current working workplan version
11328 --If its DERIVE then
11329 ----the etc cost will be derived based on the rate setup on p_as_of_date
11330 ----p_budget_version_id will contain the budget version id corresponding to the latest published
11331 ---- workplan version
11332 procedure get_plan_costs_for_qty
11333 (  p_etc_cost_calc_mode         IN        VARCHAR2 DEFAULT 'DERIVE'   --Bug 5027965
11334   ,p_resource_list_mem_id       IN    NUMBER
11335   ,p_project_id                 IN    NUMBER
11336   ,p_task_id            IN    NUMBER
11337   ,p_as_of_date         IN    DATE
11338   ,p_structure_version_id       IN    NUMBER
11339   ,p_txn_currency_code          IN    VARCHAR
11340   ,p_rate_based_flag            IN    VARCHAR := 'Y'
11341   ,p_quantity                   IN        NUMBER
11342   ,p_budget_version_id          IN        NUMBER -- Bug 4372462
11343   ,p_res_assignment_id          IN        NUMBER
11344   ,x_rawcost_tc                 OUT       NOCOPY NUMBER --File.Sql.39 bug 4440895
11345   ,x_brdncost_tc                OUT       NOCOPY NUMBER --File.Sql.39 bug 4440895
11346   ,x_rawcost_pc                 OUT       NOCOPY NUMBER --File.Sql.39 bug 4440895
11347   ,x_brdncost_pc                OUT       NOCOPY NUMBER --File.Sql.39 bug 4440895
11348   ,x_rawcost_fc                 OUT       NOCOPY NUMBER --File.Sql.39 bug 4440895
11349   ,x_brdncost_fc                OUT       NOCOPY NUMBER --File.Sql.39 bug 4440895
11350   ,x_return_status      OUT       NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11351   ,x_msg_count          OUT       NOCOPY NUMBER --File.Sql.39 bug 4440895
11352   ,x_msg_data           OUT       NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11353   ,p_cbs_element_id       IN    NUMBER DEFAULT NULL
11354 )
11355 
11356 IS
11357         x_res_brdn_mult_ovrate          NUMBER;
11358         x_res_raw_rate                  NUMBER;
11359         L_PLAN_RES_CUR_CODE             VARCHAR2(30);
11360         l_plan_res_burden_rate_etc      NUMBER           := null;
11361         l_plan_res_burden_rate_act      NUMBER           := null;
11362 
11363         l_plan_res_raw_rate         NUMBER           := null;
11364 
11365         l_plan_burden_multiplier_etc    NUMBER           := null;
11366         l_plan_burden_multiplier_act    NUMBER           := null;
11367 
11368     l_rawcost_pc            NUMBER       := null;
11369     l_rawcost_fc            NUMBER       := null;
11370 
11371     l_txn_currency_code     VARCHAR2(30)     := null;
11372 
11373     l_project_curr_code             VARCHAR2(30);
11374         l_project_rate_type             VARCHAR2(30);
11375         l_project_rate_date             DATE;
11376         l_project_exch_rate             NUMBER;
11377 
11378     l_projfunc_curr_code            VARCHAR2(30);
11379         l_projfunc_cost_rate_type       VARCHAR2(30);
11380         l_projfunc_cost_rate_date       DATE;
11381         l_projfunc_cost_exch_rate       NUMBER;
11382 
11383         g1_debug_mode               VARCHAR2(1);
11384     l_track_wp_cost_flag  VARCHAR2(1) := 'Y'; -- Bug 3921624
11385 
11386 
11387 BEGIN
11388 
11389      g1_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N');
11390      x_return_status := 'S';
11391 
11392      IF g1_debug_mode  = 'Y' THEN
11393 
11394          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.get_plan_costs_for_qty', x_Msg => 'p_resource_list_mem_id='||p_resource_list_mem_id, x_Log_Level=> 3);
11395          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.get_plan_costs_for_qty', x_Msg => 'p_project_id='||p_project_id, x_Log_Level=> 3);
11396          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.get_plan_costs_for_qty', x_Msg => 'p_structure_version_id='||p_structure_version_id, x_Log_Level=> 3);
11397          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.get_plan_costs_for_qty', x_Msg => 'p_txn_currency_code='||p_txn_currency_code, x_Log_Level=> 3);
11398          pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.get_plan_costs_for_qty', x_Msg => 'p_rate_based_flag='||p_rate_based_flag, x_Log_Level=> 3);
11399 
11400      END IF;
11401 
11402    l_track_wp_cost_flag :=  pa_fp_wp_gen_amt_utils.get_wp_track_cost_amt_flag(p_project_id);
11403 
11404    IF NVL(l_track_wp_cost_flag, 'Y') = 'Y' THEN   --Bug 3921624
11405 
11406      --Bug 5027965
11407      IF p_etc_cost_calc_mode='DERIVE' THEN
11408 
11409          -- 3.1). Get resource rate burden multiplier to convert etc_rawcost to etc_brdncost and resource burden rate to convert etc_effort to etc_brdncost in tc.
11410 
11411         l_plan_res_cur_code               := null;
11412         l_plan_res_raw_rate           := null;
11413         l_plan_burden_multiplier_etc      := null;
11414         l_plan_res_burden_rate_etc        := null;
11415 
11416         PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier(
11417                 P_res_list_mem_id              => p_resource_list_mem_id
11418                 ,P_project_id                  => p_project_id
11419                 ,P_task_id                     => p_task_id      --bug 3927159
11420                 ,p_as_of_date                  => p_as_of_date   --bug 3927159
11421                 ,p_structure_version_id        => p_structure_version_id
11422                 ,p_currency_code               => p_txn_currency_code
11423                 ,p_calling_mode                => 'PLAN_RATES'
11424                 ,x_resource_curr_code          => l_plan_res_cur_code
11425                 ,x_resource_raw_rate           => l_plan_res_raw_rate
11426                 ,x_resource_burden_rate        => l_plan_res_burden_rate_etc
11427                 ,X_burden_multiplier           => l_plan_burden_multiplier_etc
11428                 ,x_return_status               => x_return_status
11429                 ,x_msg_count                   => x_msg_count
11430                 ,x_msg_data                    => x_msg_data);
11431         x_res_raw_rate := l_plan_res_raw_rate;
11432 
11433         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11434            RAISE  FND_API.G_EXC_ERROR;
11435         END IF;
11436 
11437         -- 3.2). If the rate_based_flag is 'Y' and the resource burden rate currency code is not the same as the txn currency code, convert the resource burden rate into txn currency.
11438         -- to do this we use the API: PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS() and we pass in
11439         -- txn_currency code into the project_currency_code parameter and read out the value of
11440         -- the parameter project_raw_cost.
11441 
11442         IF ((p_rate_based_flag = 'Y') and (p_txn_currency_code <> l_plan_res_cur_code)) then
11443             l_rawcost_pc := null;
11444             l_txn_currency_code := p_txn_currency_code;
11445 
11446             PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS(
11447                 p_project_id               =>  p_project_id
11448                 ,p_task_id                  => p_task_id
11449                 ,p_as_of_date               => p_as_of_date
11450                 ,p_txn_cost                 => l_plan_res_burden_rate_etc
11451                 ,p_txn_curr_code            => l_plan_res_cur_code
11452             ,p_structure_version_id     => p_structure_version_id
11453             ,p_project_curr_code        => l_txn_currency_code ---l_project_curr_code
11454                 ,p_project_rate_type        => l_project_rate_type
11455                 ,p_project_rate_date        => l_project_rate_date
11456                 ,p_project_exch_rate        => l_project_exch_rate
11457                 ,p_project_raw_cost         => l_rawcost_pc
11458             ,p_projfunc_curr_code       => l_projfunc_curr_code
11459                 ,p_projfunc_cost_rate_type  => l_projfunc_cost_rate_type
11460                 ,p_projfunc_cost_rate_date  => l_projfunc_cost_rate_date
11461                 ,p_projfunc_cost_exch_rate  => l_projfunc_cost_exch_rate
11462                 ,p_projfunc_raw_cost        => l_rawcost_fc
11463                 ,x_return_status            => x_return_status
11464                 ,x_msg_count                => x_msg_count
11465                 ,x_msg_data                 => x_msg_data
11466             );
11467 
11468             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11469                 RAISE FND_API.G_EXC_ERROR;
11470             END IF;
11471 
11472             l_plan_res_burden_rate_etc :=   l_rawcost_pc;
11473             if (l_plan_res_raw_rate <> l_plan_res_burden_rate_etc) then
11474                 l_rawcost_pc := null;
11475 
11476                 PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS(
11477                         p_project_id               =>  p_project_id
11478                         ,p_task_id                  => p_task_id
11479                         ,p_as_of_date               => p_as_of_date
11480                         ,p_txn_cost                 => l_plan_res_raw_rate
11481                         ,p_txn_curr_code            => l_plan_res_cur_code
11482                         ,p_structure_version_id     => p_structure_version_id
11483                         ,p_project_curr_code        => l_txn_currency_code ---l_project_curr_code
11484                         ,p_project_rate_type        => l_project_rate_type
11485                         ,p_project_rate_date        => l_project_rate_date
11486                         ,p_project_exch_rate        => l_project_exch_rate
11487                         ,p_project_raw_cost         => l_rawcost_pc
11488                         ,p_projfunc_curr_code       => l_projfunc_curr_code
11489                         ,p_projfunc_cost_rate_type  => l_projfunc_cost_rate_type
11490                         ,p_projfunc_cost_rate_date  => l_projfunc_cost_rate_date
11491                         ,p_projfunc_cost_exch_rate  => l_projfunc_cost_exch_rate
11492                         ,p_projfunc_raw_cost        => l_rawcost_fc
11493                         ,x_return_status            => x_return_status
11494                         ,x_msg_count                => x_msg_count
11495                         ,x_msg_data                 => x_msg_data
11496                         );
11497 
11498                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11499                     RAISE  FND_API.G_EXC_ERROR;
11500                 END IF;
11501                 x_res_raw_rate := l_rawcost_pc;
11502             end if;
11503         END IF;
11504         if (p_rate_based_flag = 'N') then
11505            x_res_raw_rate := 1;
11506            x_res_brdn_mult_ovrate := l_plan_burden_multiplier_etc;
11507 --           x_brdncost_tc := nvl(pa_currency.round_trans_currency_amt((nvl(p_quantity,0) * nvl(x_res_brdn_mult_ovrate,0)), p_txn_currency_code),0) + nvl(p_quantity,0);
11508              x_brdncost_tc := nvl(pa_currency.round_trans_currency_amt1((nvl(p_quantity,0) * nvl(x_res_brdn_mult_ovrate,0)), p_txn_currency_code),0) + nvl(p_quantity,0);
11509         else
11510            x_res_brdn_mult_ovrate := l_plan_res_burden_rate_etc;
11511            --x_brdncost_tc := nvl(pa_currency.round_trans_currency_amt((nvl(p_quantity,0) * nvl(x_res_brdn_mult_ovrate,0)), p_txn_currency_code),0);
11512          x_brdncost_tc := nvl(pa_currency.round_trans_currency_amt1((nvl(p_quantity,0) * nvl(x_res_brdn_mult_ovrate,0)), p_txn_currency_code),0);
11513         end if;
11514         --x_rawcost_tc := nvl(pa_currency.round_trans_currency_amt((nvl(p_quantity,0) * nvl(x_res_raw_rate,0)), p_txn_currency_code),0);
11515     x_rawcost_tc := nvl(pa_currency.round_trans_currency_amt1((nvl(p_quantity,0) * nvl(x_res_raw_rate,0)), p_txn_currency_code),0);
11516 
11517         -- convert all costs to proj curr and proj func curr
11518 
11519         PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS(
11520                         p_project_id               =>  p_project_id
11521                         ,p_task_id                  => p_task_id
11522                         ,p_as_of_date               => p_as_of_date
11523                         ,p_txn_cost                 => x_rawcost_tc
11524                         ,p_txn_curr_code            => p_txn_currency_code
11525                         ,p_structure_version_id     => p_structure_version_id
11526                         ,p_calling_mode             => 'PLAN_RATES' -- Bug 4372462
11527                         ,p_budget_version_id        => p_budget_version_id -- Bug 4372462
11528                         ,p_res_assignment_id        => p_res_assignment_id -- Bug 4372462
11529                         ,p_project_curr_code        => l_project_curr_code
11530                         ,p_project_rate_type        => l_project_rate_type
11531                         ,p_project_rate_date        => l_project_rate_date
11532                         ,p_project_exch_rate        => l_project_exch_rate
11533                         ,p_project_raw_cost         => l_rawcost_pc
11534                         ,p_projfunc_curr_code       => l_projfunc_curr_code
11535                         ,p_projfunc_cost_rate_type  => l_projfunc_cost_rate_type
11536                         ,p_projfunc_cost_rate_date  => l_projfunc_cost_rate_date
11537                         ,p_projfunc_cost_exch_rate  => l_projfunc_cost_exch_rate
11538                         ,p_projfunc_raw_cost        => l_rawcost_fc
11539                         ,x_return_status            => x_return_status
11540                         ,x_msg_count                => x_msg_count
11541                         ,x_msg_data                 => x_msg_data
11542                         );
11543 
11544         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11545              RAISE  FND_API.G_EXC_ERROR;
11546         END IF;
11547         x_rawcost_pc := l_rawcost_pc;
11548         x_rawcost_fc := l_rawcost_fc;
11549 
11550         PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS(
11551                         p_project_id               =>  p_project_id
11552                         ,p_task_id                  => p_task_id
11553                         ,p_as_of_date               => p_as_of_date
11554                         ,p_txn_cost                 => x_brdncost_tc
11555                         ,p_txn_curr_code            => p_txn_currency_code
11556                         ,p_structure_version_id     => p_structure_version_id
11557                         ,p_calling_mode             => 'PLAN_RATES' -- Bug 4372462
11558                         ,p_budget_version_id        => p_budget_version_id -- Bug 4372462
11559                         ,p_res_assignment_id        => p_res_assignment_id -- Bug 4372462
11560                         ,p_project_curr_code        => l_project_curr_code
11561                         ,p_project_rate_type        => l_project_rate_type
11562                         ,p_project_rate_date        => l_project_rate_date
11563                         ,p_project_exch_rate        => l_project_exch_rate
11564                         ,p_project_raw_cost         => l_rawcost_pc
11565                         ,p_projfunc_curr_code       => l_projfunc_curr_code
11566                         ,p_projfunc_cost_rate_type  => l_projfunc_cost_rate_type
11567                         ,p_projfunc_cost_rate_date  => l_projfunc_cost_rate_date
11568                         ,p_projfunc_cost_exch_rate  => l_projfunc_cost_exch_rate
11569                         ,p_projfunc_raw_cost        => l_rawcost_fc
11570                         ,x_return_status            => x_return_status
11571                         ,x_msg_count                => x_msg_count
11572                         ,x_msg_data                 => x_msg_data
11573                         );
11574 
11575         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11576              RAISE  FND_API.G_EXC_ERROR;
11577         END IF;
11578         x_brdncost_pc := l_rawcost_pc;
11579         x_brdncost_fc := l_rawcost_fc;
11580      --Bug 5027965
11581      ELSIF p_etc_cost_calc_mode='COPY' THEN
11582 
11583              SELECT NVL(SUM(NVL(pbl.txn_raw_cost,0)-NVL(pbl.txn_init_raw_cost,0)),0),
11584                     NVL(SUM(NVL(pbl.txn_burdened_cost,0)-NVL(pbl.txn_init_burdened_cost,0)),0),
11585                     NVL(SUM(NVL(pbl.project_raw_cost,0)-NVL(pbl.project_init_raw_cost,0)),0),
11586                     NVL(SUM(NVL(pbl.project_burdened_cost,0)-NVL(pbl.project_init_burdened_cost,0)),0),
11587                     NVL(SUM(NVL(pbl.raw_cost,0)-NVL(pbl.init_raw_cost,0)),0),
11588                     NVL(SUM(NVL(pbl.burdened_cost,0)-NVL(pbl.init_burdened_cost,0)),0)
11589              INTO   x_rawcost_tc,
11590                     x_brdncost_tc,
11591                     x_rawcost_pc,
11592                     x_brdncost_pc,
11593                     x_rawcost_fc,
11594                     x_brdncost_fc
11595              FROM   pa_budget_lines pbl,
11596                     pa_resource_assignments pra
11597              WHERE  pra.budget_version_id=p_budget_version_id
11598              AND    pra.project_id=p_project_id
11599              AND    pra.task_id=p_task_id
11600              AND    pra.resource_list_member_id=p_resource_list_mem_id
11601 			 and 	NVL(pra.cbs_element_id,-1)=NVL(p_cbs_element_id,-1)-- added for 16895485
11602              AND    pbl.resource_assignment_id=pra.resource_assignment_id
11603              AND    pbl.txn_currency_code=p_txn_currency_code;
11604 
11605      END IF;
11606    END IF;
11607 
11608 
11609 EXCEPTION
11610 
11611     WHEN FND_API.G_EXC_ERROR THEN
11612       x_return_status := FND_API.G_RET_STS_ERROR;
11613       x_msg_count := Fnd_Msg_Pub.count_msg;
11614 
11615       -- 4537865
11616 
11617         x_rawcost_tc       := NULL ;
11618     x_brdncost_tc      := NULL ;
11619     x_rawcost_pc       := NULL ;
11620     x_brdncost_pc      := NULL ;
11621     x_rawcost_fc       := NULL ;
11622     x_brdncost_fc      := NULL ;
11623 
11624     WHEN OTHERS THEN
11625       x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
11626       x_msg_count     := 1;
11627       x_msg_data      := SUBSTRB(SQLERRM,1,240);
11628 
11629       -- 4537865
11630         x_rawcost_tc       := NULL ;
11631     x_brdncost_tc      := NULL ;
11632     x_rawcost_pc       := NULL ;
11633     x_brdncost_pc      := NULL ;
11634     x_rawcost_fc       := NULL ;
11635     x_brdncost_fc      := NULL ;
11636     RAISE;
11637 END get_plan_costs_for_qty;
11638 
11639 /* Begin Fix for Bug # 4108270.*/
11640 
11641 FUNCTION get_pc_from_sub_tasks_assgn
11642 (p_project_id           NUMBER
11643 ,p_proj_element_id      NUMBER
11644 ,p_structure_version_id     NUMBER
11645 ,p_include_sub_tasks_flag   VARCHAR2 := 'Y'
11646 ,p_structure_type       VARCHAR2 := 'WORKPLAN'
11647 ,p_object_type          VARCHAR2 := 'PA_TASKS'
11648 ,p_as_of_date           DATE := null
11649 ,p_program_flag                 VARCHAR2 := 'Y' -- 4392189 : Program Reporting Changes - Phase 2
11650 )
11651 RETURN NUMBER
11652 IS
11653 
11654    CURSOR cur_assgn( c_task_ver_id NUMBER, c_task_per_comp_deriv_method VARCHAR2
11655                      , c_published_structure VARCHAR2, c_wp_rollup_method VARCHAR2
11656                      , c_as_of_date DATE, c_structure_type VARCHAR2
11657                      , c_structure_version_id NUMBER)
11658    IS
11659    SELECT asgn.resource_assignment_id resource_assignment_id
11660         , asgn.task_version_id task_version_id
11661         , 'PA_ASSIGNMENTS' object_type
11662         , asgn.resource_class_code resource_class_code
11663         , asgn.rate_based_flag rate_based_flag
11664         , decode(asgn.rate_based_flag,'Y','EFFORT','N','COST') assignment_type
11665     , ppr.PPL_ACT_EFFORT_TO_DATE + ppr.EQPMT_ACT_EFFORT_TO_DATE total_act_effort_to_date
11666     , ppr.EQPMT_ETC_EFFORT + ppr.estimated_remaining_effort total_etc_effort
11667     , ppr.OTH_ACT_COST_TO_DATE_TC + ppr.PPL_ACT_COST_TO_DATE_TC + ppr.EQPMT_ACT_COST_TO_DATE_TC total_act_cost_to_date_tc
11668         , ppr.OTH_ACT_COST_TO_DATE_PC + ppr.PPL_ACT_COST_TO_DATE_PC + ppr.EQPMT_ACT_COST_TO_DATE_PC total_act_cost_to_date_pc
11669         , ppr.OTH_ACT_COST_TO_DATE_FC + ppr.PPL_ACT_COST_TO_DATE_FC + ppr.EQPMT_ACT_COST_TO_DATE_FC total_act_cost_to_date_fc
11670         , ppr.OTH_ETC_COST_TC + ppr.PPL_ETC_COST_TC + ppr.EQPMT_ETC_COST_TC total_etc_cost_tc
11671         , ppr.OTH_ETC_COST_PC + ppr.PPL_ETC_COST_PC + ppr.EQPMT_ETC_COST_PC total_etc_cost_pc
11672         , ppr.OTH_ETC_COST_FC + ppr.PPL_ETC_COST_FC + ppr.EQPMT_ETC_COST_FC total_etc_cost_fc
11673 
11674     , decode(c_task_per_comp_deriv_method,'EFFORT'
11675                 , ( nvl(ppr.PPL_ACT_EFFORT_TO_DATE,0)
11676                      + nvl(ppr.EQPMT_ACT_EFFORT_TO_DATE,0))
11677                 , ( nvl(ppr.OTH_ACT_COST_TO_DATE_PC,0)
11678                      + nvl(ppr.PPL_ACT_COST_TO_DATE_PC,0)
11679                      + nvl(ppr.EQPMT_ACT_COST_TO_DATE_PC,0))) earned_value
11680         , decode(c_wp_rollup_method, 'COST'
11681                  , nvl(ppr.OTH_ACT_COST_TO_DATE_PC,0)
11682                    + nvl(ppr.PPL_ACT_COST_TO_DATE_PC,0)
11683                                + nvl(ppr.EQPMT_ACT_COST_TO_DATE_PC,0)
11684                    + nvl(ppr.OTH_ETC_COST_PC,0)
11685                    + nvl(ppr.PPL_ETC_COST_PC,0)
11686                            + nvl(ppr.EQPMT_ETC_COST_PC,0)
11687                  , 'EFFORT'
11688                  , decode(rate_based_flag,'N', 0,
11689                          nvl(ppr.PPL_ACT_EFFORT_TO_DATE,0)
11690                          + nvl(ppr.EQPMT_ACT_EFFORT_TO_DATE,0)
11691                          + nvl(ppr.EQPMT_ETC_EFFORT,0)
11692                          + nvl(ppr.estimated_remaining_effort,0)), 0) bac_value_in_rollup_method
11693         , decode(c_task_per_comp_deriv_method,'EFFORT'
11694                  , ( NVL( decode( asgn.rate_based_flag, 'Y',
11695                                   decode( asgn.resource_class_code,
11696                                          'PEOPLE', nvl(ppr.PPL_ACT_EFFORT_TO_DATE,0)
11697                                + nvl(ppr.estimated_remaining_effort,
11698                                                    decode(sign(nvl(asgn.planned_quantity,0)
11699                                     -nvl(ppr.PPL_ACT_EFFORT_TO_DATE,0)), -1, 0,
11700                                                  nvl( asgn.planned_quantity-ppr.PPL_ACT_EFFORT_TO_DATE,0))),
11701                                           'EQUIPMENT', nvl(ppr.EQPMT_ACT_EFFORT_TO_DATE,0)
11702                                + nvl(ppr.EQPMT_ETC_EFFORT,
11703                                                      decode(sign(nvl(asgn.planned_quantity,0)
11704                                  -nvl(ppr.EQPMT_ACT_EFFORT_TO_DATE,0)), -1, 0,
11705                                                  nvl( asgn.planned_quantity-ppr.EQPMT_ACT_EFFORT_TO_DATE,0)))),0),0)
11706                                    ),
11707                                  ( NVL( decode( asgn.resource_class_code,
11708                                        'FINANCIAL_ELEMENTS',
11709                                          nvl(ppr.OTH_ACT_COST_TO_DATE_PC,0) + nvl(ppr.OTH_ETC_COST_PC,
11710                                             decode(sign(nvl(asgn.planned_bur_cost_proj_cur,0)
11711                             -nvl(ppr.OTH_ACT_COST_TO_DATE_PC,0)), -1, 0,
11712                                                  nvl(asgn.planned_bur_cost_proj_cur-ppr.OTH_ACT_COST_TO_DATE_PC,0))),
11713                                        'MATERIAL_ITEMS',
11714                                          nvl(ppr.OTH_ACT_COST_TO_DATE_PC,0) + nvl(ppr.OTH_ETC_COST_PC,
11715                                             decode(sign(nvl(asgn.planned_bur_cost_proj_cur,0)
11716                            -nvl(ppr.OTH_ACT_COST_TO_DATE_PC,0)), -1, 0,
11717                                                  nvl( asgn.planned_bur_cost_proj_cur-ppr.OTH_ACT_COST_TO_DATE_PC,0))),
11718                                        'PEOPLE',
11719                                         nvl(ppr.PPL_ACT_COST_TO_DATE_PC,0) + nvl(ppr.PPL_ETC_COST_PC,
11720                                          decode(sign(nvl(asgn.planned_bur_cost_proj_cur,0)
11721                         -nvl(ppr.PPL_ACT_COST_TO_DATE_PC,0)), -1, 0,
11722                                                 nvl(asgn.planned_bur_cost_proj_cur-ppr.PPL_ACT_COST_TO_DATE_PC,0))),
11723                                        'EQUIPMENT',
11724                                         nvl(ppr.EQPMT_ACT_COST_TO_DATE_PC,0) + nvl(ppr.EQPMT_ETC_COST_PC,
11725                                          decode(sign(nvl(asgn.planned_bur_cost_proj_cur,0)
11726                         -nvl(ppr.EQPMT_ACT_COST_TO_DATE_PC,0)), -1, 0,
11727                                                 nvl(asgn.planned_bur_cost_proj_cur-ppr.EQPMT_ACT_COST_TO_DATE_PC,0)))),
11728                                     nvl(asgn.planned_bur_cost_proj_cur,0)
11729                                     ))) bac_value_in_task_deriv
11730    FROM
11731            pa_task_asgmts_v  asgn
11732            , pa_progress_rollup ppr
11733    WHERE asgn.task_version_id = c_task_ver_id
11734          AND asgn.project_id = p_project_id  ---4871809
11735          AND asgn.task_id = p_proj_element_id
11736          AND asgn.ta_display_flag = 'Y'
11737          AND asgn.project_id = ppr.project_id
11738          AND asgn.RESOURCE_LIST_MEMBER_ID = ppr.object_id
11739          AND asgn.task_id = ppr.proj_element_id
11740          AND ppr.object_type = 'PA_ASSIGNMENTS'
11741          AND ppr.as_of_date = pa_progress_utils.get_max_rollup_asofdate(asgn.project_id
11742                        ,asgn.RESOURCE_LIST_MEMBER_ID, 'PA_ASSIGNMENTS'
11743                        ,c_as_of_date,asgn.task_version_id, c_structure_type
11744                        , decode(c_published_structure, 'Y', null, c_structure_version_id), asgn.task_id)
11745          AND ppr.current_flag <> 'W'
11746          AND ppr.structure_type = c_structure_type
11747          AND ((c_published_structure = 'Y' AND ppr.structure_version_id is null)
11748                OR (c_published_structure = 'N'
11749                    AND ppr.structure_version_id = c_structure_version_id))
11750    UNION ALL
11751    SELECT asgn.resource_assignment_id resource_assignment_id
11752           , asgn.task_version_id task_version_id
11753           , 'PA_ASSIGNMENTS' object_type
11754           , asgn.resource_class_code resource_class_code
11755           , asgn.rate_based_flag rate_based_flag
11756           , decode(asgn.rate_based_flag,'Y','EFFORT','N','COST') assignment_type
11757           , to_number(null) total_act_effort_to_date
11758           , to_number(null) total_etc_effort
11759           , to_number(null) total_act_cost_to_date_tc
11760           , to_number(null) total_act_cost_to_date_pc
11761           , to_number(null) total_act_cost_to_date_fc
11762           , to_number(null) total_etc_cost_tc
11763           , to_number(null) total_etc_cost_pc
11764           , to_number(null) total_etc_cost_fc
11765           , to_number(null) earned_value
11766           , to_number(null) bac_value_in_rollup_method
11767           , decode(c_task_per_comp_deriv_method,'EFFORT',
11768                    decode(asgn.rate_based_flag,'Y',
11769                           decode(asgn.resource_class_code,'PEOPLE'
11770                                  , asgn.planned_quantity, 'EQUIPMENT'
11771                              , asgn.planned_quantity, 0),0)
11772                                 ,asgn.planned_bur_cost_proj_cur) bac_value_in_task_deriv
11773     FROM
11774           pa_task_asgmts_v  asgn
11775     WHERE asgn.task_version_id = c_task_ver_id
11776           AND  asgn.project_id = p_project_id  ---4871809
11777           AND  asgn.task_id = p_proj_element_id
11778           AND  pa_progress_utils.get_max_rollup_asofdate(asgn.project_id
11779                                         , asgn.RESOURCE_LIST_MEMBER_ID
11780                                 , 'PA_ASSIGNMENTS',c_as_of_date
11781                                 ,asgn.task_version_id
11782                                 , c_structure_type
11783                                 , decode(c_published_structure, 'Y', null
11784                                  , c_structure_version_id)
11785                             , asgn.task_id) IS NULL
11786           AND asgn.ta_display_flag = 'Y';
11787 
11788    CURSOR cur_check_published_version(c_structure_version_id NUMBER, c_project_id NUMBER)
11789    IS
11790    SELECT decode(status.project_system_status_code, 'STRUCTURE_PUBLISHED', 'Y', 'N')
11791    FROM pa_proj_elem_ver_structure str
11792    , pa_project_statuses status
11793    where str.element_version_id = c_structure_version_id
11794    AND str.project_id = c_project_id
11795    AND str.status_code = status.project_status_code;
11796 
11797    CURSOR cur_max_as_of_date_leq(c_project_id NUMBER, c_object_id NUMBER
11798                      , c_object_type VARCHAR2
11799                  , c_structure_type VARCHAR2
11800                  , c_published_structure VARCHAR2
11801                  , c_structure_version_id NUMBER
11802                  , c_as_of_date DATE)
11803    IS
11804    SELECT max(as_of_date)
11805    FROM pa_progress_rollup
11806    WHERE project_id = c_project_id
11807    AND object_id = c_object_id
11808    AND object_type = c_object_type
11809    AND structure_type = c_structure_type
11810    AND ((c_published_structure = 'Y' AND structure_version_id is null)
11811          OR (c_published_structure = 'N'
11812              AND structure_version_id = c_structure_version_id)
11813          OR (c_structure_type = 'FINANCIAL' AND structure_version_id is null)    /* Bug#6485646 */
11814         )
11815    AND current_flag <> 'W'
11816    AND as_of_date <= c_as_of_date;
11817 
11818    CURSOR cur_max_as_of_date(c_project_id NUMBER, c_object_id NUMBER
11819                              , c_object_type VARCHAR2, c_structure_type VARCHAR2
11820                              , c_published_structure VARCHAR2
11821                              , c_structure_version_id NUMBER)
11822    IS
11823    SELECT max(as_of_date)
11824    FROM pa_progress_rollup ppr, pa_proj_element_versions ppev -- Bug # 4658185.
11825    WHERE ppr.project_id = c_project_id
11826    AND ppr.object_id = c_object_id
11827    AND ppr.object_type = c_object_type
11828    AND ppr.structure_type = c_structure_type
11829    AND ppr.project_id = ppev.project_id  -- Bug # 4658185.
11830    AND ppr.object_id = ppev.proj_element_id  -- Bug # 4658185.
11831    AND ppr.object_version_id = ppev.element_version_id  -- Bug # 4658185.
11832    AND ppev.parent_structure_version_id = c_structure_version_id  -- Bug # 4658185.
11833    AND ((c_published_structure = 'Y' AND ppr.structure_version_id is null)
11834              OR (c_published_structure = 'N'
11835                      AND ppr.structure_version_id = c_structure_version_id))
11836    AND ppr.current_flag <> 'W';
11837 
11838 
11839     CURSOR cur_percent_comp(c_project_id NUMBER, c_object_id NUMBER
11840                 , c_object_type VARCHAR2, c_structure_type VARCHAR2
11841                 , c_as_of_date DATE, c_published_structure VARCHAR2
11842                 , c_structure_version_id NUMBER
11843                 , c_program_flag VARCHAR2 -- 4392189 : Program Reporting Changes - Phase 2
11844                 )
11845     IS
11846     SELECT nvl(ppr.completed_percentage,decode(nvl(c_program_flag,'Y'),'Y', ppr.eff_rollup_percent_comp, ppr.base_percent_complete))
11847     -- 4392189 : Program Reporting Changes - Phase 2 : Added Decode above
11848     FROM pa_progress_rollup ppr
11849     WHERE ppr.project_id = c_project_id
11850     and ppr.object_id = c_object_id
11851     and ppr.object_type = c_object_type
11852     and ppr.structure_type = c_structure_type
11853     and ((c_published_structure = 'Y' AND structure_version_id is null)
11854          OR (c_published_structure = 'N'
11855              AND structure_version_id = c_structure_version_id)
11856          OR (c_structure_type = 'FINANCIAL' AND structure_version_id is null)    /* Bug#6485646 */
11857              )
11858     and current_flag <> 'W'
11859     and ppr.as_of_date = c_as_of_date;
11860 
11861     CURSOR cur_base_pc_deriv_code(c_task_id NUMBER, c_project_id NUMBER
11862                       , c_object_type VARCHAR2)
11863     IS
11864     SELECT decode(elem.base_percent_comp_deriv_code, null
11865                   , ttype.base_percent_comp_deriv_code,'^'
11866                   ,ttype.base_percent_comp_deriv_code,elem.base_percent_comp_deriv_code)
11867     FROM pa_proj_elements elem
11868          , pa_task_types ttype
11869     where elem.proj_element_id = c_task_id
11870     AND elem.project_id = c_project_id
11871     AND elem.object_type =c_object_type
11872     AND elem.type_id = ttype.task_type_id;
11873 
11874     CURSOR cur_progress_rollup_method(c_project_id NUMBER, c_task_id NUMBER
11875                       , c_structure_type VARCHAR2
11876                       , c_object_type VARCHAR2)
11877     IS
11878     SELECT task_weight_basis_code
11879     from pa_proj_progress_attr pppa
11880     where pppa.project_id = c_project_id
11881     AND pppa.object_id = c_task_id
11882     AND pppa.structure_type = c_structure_type
11883     and pppa.object_type = c_object_type;
11884 
11885     l_return_pc                  NUMBER := null;
11886     l_act_cost               NUMBER := null;
11887     l_act_effort                 NUMBER := null;
11888     l_bac_value_in_rollup_method         NUMBER := null;
11889     l_task_per_comp_deriv_method         VARCHAR2(30) := null;
11890     l_progress_rollup_method         VARCHAR2(30) := null;
11891 
11892     l_published_structure            VARCHAR2(1) := null;
11893     l_as_of_date                 DATE := null;
11894 
11895 BEGIN
11896 
11897      -- 1). Determine if the input structure_version_id corresponds to a published
11898      --     structure version or not.
11899 
11900     OPEN cur_check_published_version(p_structure_version_id, p_project_id);
11901         FETCH cur_check_published_version INTO l_published_structure;
11902         CLOSE cur_check_published_version;
11903 
11904      -- 2.1). If the input structure_type is 'FINANCIAL' and input as_of_date is not null
11905      --       then use the max as_of_date in the pa_progress_rollup_table less than or equal to
11906      --       the input as_of_date.
11907 
11908      if ((p_structure_type = 'FINANCIAL') and (p_as_of_date is not null)) then
11909 
11910         open cur_max_as_of_date_leq(p_project_id, p_proj_element_id, p_object_type
11911                             , p_structure_type, l_published_structure
11912                                 , p_structure_version_id, p_as_of_date);
11913         fetch cur_max_as_of_date_leq into l_as_of_date;
11914         close cur_max_as_of_date_leq;
11915 
11916      -- 2.2). Else use the latest as_of_date in the pa_progress_rollup table for the
11917      --   given task or structure.
11918 
11919      else
11920 
11921         open cur_max_as_of_date(p_project_id, p_proj_element_id, p_object_type
11922                             , p_structure_type, l_published_structure
11923                             , p_structure_version_id);
11924         fetch cur_max_as_of_date into l_as_of_date;
11925         close cur_max_as_of_date;
11926 
11927      end if;
11928 
11929      -- 3.1). If the p_include_sub_tasks_flag = 'Y' or if the input proj_element_id
11930      --       is a structure_id then return the rolled-up percent complete for the task
11931      --       from the pa_progress_rollup table for the above determined as_of_date.
11932 
11933      if ((p_include_sub_tasks_flag = 'Y') or (p_object_type = 'PA_STRUCTURES')) then
11934 
11935         open cur_percent_comp(p_project_id, p_proj_element_id, p_object_type
11936                           , p_structure_type, l_as_of_date, l_published_structure
11937                           , p_structure_version_id
11938                           , p_program_flag) ; -- 4392189 : Program Reporting Changes - Phase 2
11939         fetch cur_percent_comp into l_return_pc;
11940         close cur_percent_comp;
11941 
11942      -- 3.2). If the p_include_sub_tasks_flag = 'N' then return the rolled-up
11943      --       percent complete from all the assignments directly associated with
11944      --       the task.
11945 
11946      else
11947 
11948          open cur_base_pc_deriv_code(p_proj_element_id, p_project_id, p_object_type);
11949          fetch cur_base_pc_deriv_code into l_task_per_comp_deriv_method;
11950          close cur_base_pc_deriv_code;
11951 
11952          open cur_progress_rollup_method(p_project_id, p_proj_element_id
11953                          , p_structure_type, p_object_type);
11954          fetch cur_progress_rollup_method into l_progress_rollup_method;
11955          close cur_progress_rollup_method;
11956 
11957          for cur_assgn_rec in cur_assgn(p_proj_element_id
11958                         , l_task_per_comp_deriv_method
11959                         , l_published_structure
11960                         , l_progress_rollup_method
11961                         , l_as_of_date
11962                         , p_structure_type
11963                         , p_structure_version_id)
11964          loop
11965 
11966              l_act_cost := (l_act_cost +  cur_assgn_rec.total_act_cost_to_date_pc);
11967              l_act_effort := (l_act_effort + cur_assgn_rec.total_act_effort_to_date);
11968              l_bac_value_in_rollup_method := (l_bac_value_in_rollup_method
11969                                   + cur_assgn_rec.bac_value_in_rollup_method);
11970 
11971          end loop;
11972 
11973          if (nvl(l_progress_rollup_method, 'COST') = 'EFFORT') then
11974 
11975             l_return_pc := (l_act_effort / l_bac_value_in_rollup_method);
11976 
11977          else
11978 
11979             l_return_pc := (l_act_cost / l_bac_value_in_rollup_method);
11980 
11981          end if;
11982 
11983      end if;
11984 
11985      -- Return the calculated value of percent complete.
11986 
11987      return(l_return_pc);
11988 
11989 END get_pc_from_sub_tasks_assgn;
11990 
11991 /* End Fix for Bug # 4108270.*/
11992 
11993 
11994 /* Begin fix for Bug # 4185974. */
11995 
11996 FUNCTION get_act_for_prev_asofdate (p_as_of_date         IN     DATE
11997                                 ,p_project_id        IN     NUMBER
11998                                 ,p_object_id         IN     NUMBER
11999                                 ,p_object_version_id IN     NUMBER
12000                     ,p_proj_element_id   IN     NUMBER := null
12001                     ,p_effort_cost_flag  IN VARCHAR2 := 'C'
12002                     ,p_cost_type_flag    IN VARCHAR2 := 'B'
12003                     ,p_currency_flag     IN VARCHAR2 := 'T'
12004 					,p_cbs_element_id IN     NUMBER := null) return NUMBER
12005 IS
12006 
12007     l_act_for_prev_asofdate     NUMBER := NULL;
12008 
12009         -- Begin fix for Bug # 4185974.
12010 
12011         cursor cur_proj_sharing_code is
12012                 select structure_sharing_Code
12013                 from pa_projects_all
12014                 where project_id=p_project_id;
12015 
12016         l_project_sharing_code          VARCHAR2(150);
12017 
12018         l_as_of_date                    DATE;
12019 
12020         -- End fix for Bug # 4185974.
12021 
12022     cursor cur_effort is
12023          select (nvl(ppr.ppl_act_effort_to_date,0)
12024              +nvl(ppr.eqpmt_act_effort_to_date,0)
12025              +nvl(ppr.subprj_ppl_act_effort,0)
12026              +nvl(ppr.subprj_eqpmt_act_effort,0)
12027              +nvl(ppr.oth_quantity_to_date,0)) act_effort_prev_asofdate
12028                 from pa_progress_rollup ppr
12029                 where ppr.project_id = p_project_id
12030                 and ppr.object_id = p_object_id
12031                 and ppr.structure_type = 'WORKPLAN'
12032         and ppr.proj_element_id = p_proj_element_id
12033 			and nvl(ppr.cbs_element_id,-1) = nvl(p_cbs_element_id,-1) --16820685
12034         and ppr.structure_version_id is null
12035                 and ppr.as_of_date = (select max(ppr2.as_of_date)
12036                                       from pa_progress_rollup ppr2
12037                                       where ppr2.project_id = p_project_id
12038                                       and ppr2.object_id = p_object_id
12039                       and ppr2.structure_type = 'WORKPLAN'
12040                       and ppr2.proj_element_id = p_proj_element_id
12041                       and ppr2.structure_version_id is null
12042 					  and nvl(ppr2.cbs_element_id,-1) = nvl(p_cbs_element_id,-1) --16820685
12043                       and ppr2.current_flag <> 'W' -- Fix for Bug # 4249286.
12044                                    -- Fix for Bug # 4185974.
12045                       and ppr2.as_of_date < l_as_of_date); -- Fix for Bug # 4185974.
12046                                       -- and ppr2.as_of_date < pa_progress_utils.get_prog_asofdate()+1);
12047                                         -- Fix for Bug # 4222702.
12048                                         -- Fix for Bug # 4185974.
12049 
12050 --- adding 1 in pa_progress_utils.get_prog_asofdate so that it works fine for shared structures
12051     cursor cur_bur_cost_tc is
12052         select (nvl(ppr.oth_act_cost_to_date_tc,0)
12053             +nvl(ppr.ppl_act_cost_to_date_tc,0)
12054                         +nvl(ppr.eqpmt_act_cost_to_date_tc,0)
12055             +nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_TC,0)
12056                         +nvl(ppr.subprj_ppl_act_cost_tc,0)
12057             +nvl(ppr.subprj_eqpmt_act_cost_tc,0)) act_bur_cost_tc_prev_asofdate
12058                 from pa_progress_rollup ppr
12059                 where ppr.project_id = p_project_id
12060                 and ppr.object_id = p_object_id
12061                 and ppr.structure_type = 'WORKPLAN'
12062         and ppr.proj_element_id = p_proj_element_id
12063 			and nvl(ppr.cbs_element_id,-1) = nvl(p_cbs_element_id,-1) --16820685
12064         and ppr.structure_version_id is null
12065                 and ppr.as_of_date = (select max(ppr2.as_of_date)
12066                                       from pa_progress_rollup ppr2
12067                                       where ppr2.project_id = p_project_id
12068                                       and ppr2.object_id = p_object_id
12069                       and ppr2.structure_type = 'WORKPLAN'
12070                       and ppr2.proj_element_id = p_proj_element_id
12071                       and ppr2.structure_version_id is null
12072 					   and nvl(ppr2.cbs_element_id,-1) = nvl(p_cbs_element_id,-1) --16820685
12073                       and ppr2.current_flag <> 'W' -- Fix for Bug # 4249286.
12074                                   -- Fix for Bug # 4185974.
12075                       and ppr2.as_of_date < l_as_of_date); -- Fix for Bug # 4185974.
12076                                       -- and ppr2.as_of_date < pa_progress_utils.get_prog_asofdate()+1);
12077                                         -- Fix for Bug # 4222702.
12078                                         -- Fix for Bug # 4185974.
12079         cursor cur_bur_cost_pc is
12080                  select (nvl(ppr.oth_act_cost_to_date_pc,0)
12081              +nvl(ppr.ppl_act_cost_to_date_pc,0)
12082                          +nvl(ppr.eqpmt_act_cost_to_date_pc,0)
12083              +nvl(ppr.SUBPRJ_OTH_ACT_COST_TO_DT_FC,0)
12084                          +nvl(ppr.subprj_ppl_act_cost_pc,0)
12085              +nvl(ppr.subprj_eqpmt_act_cost_pc,0)) act_bur_cost_pc_prev_asofdate
12086                 from pa_progress_rollup ppr
12087                 where ppr.project_id = p_project_id
12088                 and ppr.object_id = p_object_id
12089                 and ppr.structure_type = 'WORKPLAN'
12090                 and ppr.proj_element_id = p_proj_element_id
12091 				and nvl(ppr.cbs_element_id,-1) = nvl(p_cbs_element_id,-1) --16820685
12092                 and ppr.structure_version_id is null
12093                 and ppr.as_of_date = (select max(ppr2.as_of_date)
12094                                       from pa_progress_rollup ppr2
12095                                       where ppr2.project_id = p_project_id
12096                                       and ppr2.object_id = p_object_id
12097                                       and ppr2.structure_type = 'WORKPLAN'
12098                                       and ppr2.proj_element_id = p_proj_element_id
12099 									   and nvl(ppr2.cbs_element_id,-1) = nvl(p_cbs_element_id,-1) --16820685
12100                                       and ppr2.structure_version_id is null
12101                       and ppr2.current_flag <> 'W' -- Fix for Bug # 4249286.
12102                                    -- Fix for Bug # 4185974.
12103                       and ppr2.as_of_date < l_as_of_date); -- Fix for Bug # 4185974.
12104                                       -- and ppr2.as_of_date < pa_progress_utils.get_prog_asofdate()+1);
12105                                         -- Fix for Bug # 4222702.
12106                                         -- Fix for Bug # 4185974.
12107 
12108         cursor cur_raw_cost_tc is
12109          select (nvl(ppr.oth_act_rawcost_to_date_tc,0)
12110              +nvl(ppr.ppl_act_rawcost_to_date_tc,0)
12111                          +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)
12112              +nvl(ppr.SPJ_OTH_ACT_RAWCOST_TO_DT_TC,0)
12113                          +nvl(ppr.subprj_ppl_act_rawcost_tc,0)
12114              +nvl(ppr.subprj_eqpmt_act_rawcost_tc,0)) act_raw_cost_tc_prev_asofdate
12115                 from pa_progress_rollup ppr
12116                 where ppr.project_id = p_project_id
12117                 and ppr.object_id = p_object_id
12118                 and ppr.structure_type = 'WORKPLAN'
12119                 and ppr.proj_element_id = p_proj_element_id
12120 				and nvl(ppr.cbs_element_id,-1) = nvl(p_cbs_element_id,-1) --16820685
12121                 and ppr.structure_version_id is null
12122                 and ppr.as_of_date = (select max(ppr2.as_of_date)
12123                                       from pa_progress_rollup ppr2
12124                                       where ppr2.project_id = p_project_id
12125                                       and ppr2.object_id = p_object_id
12126                                       and ppr2.structure_type = 'WORKPLAN'
12127                                       and ppr2.proj_element_id = p_proj_element_id
12128 									   and nvl(ppr2.cbs_element_id,-1) = nvl(p_cbs_element_id,-1) --16820685
12129                                       and ppr2.structure_version_id is null
12130                       and ppr2.current_flag <> 'W' -- Fix for Bug # 4249286.
12131                                   -- Fix for Bug # 4185974.
12132                       and ppr2.as_of_date < l_as_of_date); -- Fix for Bug # 4185974.
12133                                       -- and ppr2.as_of_date < pa_progress_utils.get_prog_asofdate()+1);
12134                                         -- Fix for Bug # 4222702.
12135                                         -- Fix for Bug # 4185974.
12136 
12137 BEGIN
12138 
12139     -- Begin fix for Bug # 4185974.
12140 
12141          l_as_of_date := pa_progress_utils.get_prog_asofdate();
12142 
12143          open cur_proj_sharing_code;
12144 
12145          fetch cur_proj_sharing_code into l_project_sharing_code;
12146 
12147          close cur_proj_sharing_code;
12148 
12149          if (nvl(l_project_sharing_Code,'X') = 'SHARE_FULL') then
12150 
12151             l_as_of_date := l_as_of_date + 1;
12152 
12153          end if;
12154 
12155     -- End fix for Bug # 4185974.
12156 
12157      if (p_effort_cost_flag = 'E') then
12158 
12159         open cur_effort;
12160         fetch cur_effort into l_act_for_prev_asofdate;
12161         close cur_effort;
12162 
12163      else
12164 
12165         if ((p_cost_type_flag  = 'B') and (p_currency_flag  = 'T'))  then
12166 
12167             open cur_bur_cost_tc;
12168             fetch cur_bur_cost_tc into l_act_for_prev_asofdate;
12169             close cur_bur_cost_tc;
12170 
12171         elsif ((p_cost_type_flag  = 'B') and (p_currency_flag  = 'P'))  then
12172 
12173                         open cur_bur_cost_pc;
12174                         fetch cur_bur_cost_pc into l_act_for_prev_asofdate;
12175                         close cur_bur_cost_pc;
12176 
12177         elsif ((p_cost_type_flag  = 'R') and (p_currency_flag  = 'T'))  then
12178 
12179                         open cur_raw_cost_tc;
12180                         fetch cur_raw_cost_tc into l_act_for_prev_asofdate;
12181                         close cur_raw_cost_tc;
12182 
12183         end if;
12184 
12185     end if;
12186 
12187 
12188     l_act_for_prev_asofdate := nvl(l_act_for_prev_asofdate,0);
12189 
12190 /*      4378391  -ive act is allowed
12191         if (l_act_for_prev_asofdate < 0 ) then
12192 
12193         l_act_for_prev_asofdate := 0;
12194 
12195     end if; */
12196 
12197     return(l_act_for_prev_asofdate);
12198 
12199 END get_act_for_prev_asofdate;
12200 
12201 /* End fix for Bug # 4185974. */
12202 
12203 
12204 -- Begin fix for Bug # 4319171.
12205 
12206 function calc_act(p_ppl_cost_eff        IN NUMBER := null
12207                   , p_eqpmt_cost_eff        IN NUMBER := null
12208                   , p_oth_cost_eff      IN NUMBER := null
12209                   , p_subprj_ppl_cost_eff   IN NUMBER := null
12210           , p_subprj_eqpmt_cost_eff     IN NUMBER := null
12211           , p_subprj_oth_cost_eff   IN NUMBER := null) return NUMBER
12212 is
12213 
12214     l_calc_act NUMBER := null;
12215 
12216 begin
12217 
12218     if ((p_ppl_cost_eff is null)
12219             and (p_eqpmt_cost_eff is null)
12220             and (p_oth_cost_eff is null)
12221         and (p_subprj_ppl_cost_eff is null)
12222             and (p_subprj_eqpmt_cost_eff is null)
12223             and (p_subprj_oth_cost_eff is null)) then
12224 
12225         l_calc_act := null;
12226 
12227     else
12228 
12229         l_calc_act := (nvl(p_ppl_cost_eff,0)
12230                            + nvl(p_eqpmt_cost_eff,0)
12231                            + nvl(p_oth_cost_eff,0)
12232                            + nvl(p_subprj_ppl_cost_eff,0)
12233                            + nvl(p_subprj_eqpmt_cost_eff,0)
12234                            + nvl(p_subprj_oth_cost_eff,0));
12235 
12236     end if;
12237 
12238     return(l_calc_act);
12239 
12240 end calc_act;
12241 
12242 function calc_etc(p_planned_cost_eff        IN NUMBER := null
12243           , p_ppl_cost_eff              IN NUMBER := null
12244                   , p_eqpmt_cost_eff            IN NUMBER := null
12245                   , p_oth_cost_eff              IN NUMBER := null
12246                   , p_subprj_ppl_cost_eff       IN NUMBER := null
12247                   , p_subprj_eqpmt_cost_eff     IN NUMBER := null
12248                   , p_subprj_oth_cost_eff       IN NUMBER := null
12249                   , p_oth_quantity              IN NUMBER := null
12250           , p_act_cost_eff      IN NUMBER := null) return NUMBER
12251 is
12252 
12253         l_calc_etc NUMBER := null;
12254 
12255 begin
12256 
12257         if ((p_ppl_cost_eff is null)
12258             and (p_eqpmt_cost_eff is null)
12259             and (p_oth_cost_eff is null)
12260             and (p_subprj_ppl_cost_eff is null)
12261             and (p_subprj_eqpmt_cost_eff is null)
12262             and (p_subprj_oth_cost_eff is null)
12263         and (p_oth_quantity is null)) then
12264 
12265 
12266         if ((p_planned_cost_eff is null)
12267             and (p_act_cost_eff is null)) then
12268 
12269             l_calc_etc := null;
12270 
12271         elsif (p_act_cost_eff is null) then
12272 
12273             l_calc_etc := p_planned_cost_eff;
12274 
12275         elsif (p_planned_cost_eff is null) then
12276 
12277 
12278             l_calc_etc := 0;
12279 
12280 
12281         else
12282 
12283             ---5726773        l_calc_etc := (nvl(p_planned_cost_eff,0) - nvl(p_act_cost_eff,0));
12284  	    l_calc_etc := PA_FP_FCST_GEN_AMT_UTILS.get_etc_from_plan_act(nvl(p_planned_cost_eff,0), nvl(p_act_cost_eff,0));
12285 
12286         end if;
12287 
12288         else
12289 
12290                 l_calc_etc := (nvl(p_ppl_cost_eff,0)
12291                                + nvl(p_eqpmt_cost_eff,0)
12292                                + nvl(p_oth_cost_eff,0)
12293                                + nvl(p_subprj_ppl_cost_eff,0)
12294                                + nvl(p_subprj_eqpmt_cost_eff,0)
12295                                + nvl(p_subprj_oth_cost_eff,0)
12296                    + nvl(p_oth_quantity,0));
12297 
12298     end if;
12299 
12300 /* 5726773
12301     if (l_calc_etc < 0) then
12302 
12303         l_calc_etc := 0;
12304 
12305     end if;
12306 */
12307 
12308     return(l_calc_etc);
12309 
12310 end calc_etc;
12311 
12312 function calc_wetc(p_planned_cost_eff           IN NUMBER := null
12313                   , p_ppl_cost_eff              IN NUMBER := null
12314                   , p_eqpmt_cost_eff            IN NUMBER := null
12315                   , p_oth_cost_eff              IN NUMBER := null
12316                   , p_subprj_ppl_cost_eff       IN NUMBER := null
12317                   , p_subprj_eqpmt_cost_eff     IN NUMBER := null
12318                   , p_subprj_oth_cost_eff       IN NUMBER := null
12319                   , p_oth_quantity              IN NUMBER := null) return NUMBER
12320 is
12321 
12322         l_calc_wetc NUMBER := null;
12323 
12324 begin
12325 
12326         if ((p_planned_cost_eff is null)
12327         and (p_ppl_cost_eff is null)
12328             and (p_eqpmt_cost_eff is null)
12329             and (p_oth_cost_eff is null)
12330             and (p_subprj_ppl_cost_eff is null)
12331             and (p_subprj_eqpmt_cost_eff is null)
12332             and (p_subprj_oth_cost_eff is null)
12333             and (p_oth_quantity is null)) then
12334 
12335         l_calc_wetc := null;
12336 
12337     else
12338 
12339         l_calc_wetc := nvl(p_planned_cost_eff,0) - (nvl(p_ppl_cost_eff,0)
12340                                                 + nvl(p_eqpmt_cost_eff,0)
12341                                                 + nvl(p_oth_cost_eff,0)
12342                                                 + nvl(p_subprj_ppl_cost_eff,0)
12343                                                 + nvl(p_subprj_eqpmt_cost_eff,0)
12344                                                 + nvl(p_subprj_oth_cost_eff,0)
12345                                                 + nvl(p_oth_quantity,0));
12346 
12347     end if;
12348 
12349         if (l_calc_wetc < 0) then
12350 
12351                 l_calc_wetc := 0;
12352 
12353         end if;
12354 
12355         return(l_calc_wetc);
12356 
12357 end calc_wetc;
12358 
12359 function calc_plan(p_ppl_cost_eff                IN NUMBER := null
12360                    , p_eqpmt_cost_eff            IN NUMBER := null
12361                    , p_oth_cost_eff              IN NUMBER := null) return NUMBER
12362 
12363 is
12364 
12365         l_calc_plan NUMBER := null;
12366 
12367 begin
12368 
12369         if ((p_ppl_cost_eff is null)
12370             and (p_eqpmt_cost_eff is null)
12371             and (p_oth_cost_eff is null)) then
12372 
12373                 l_calc_plan := null;
12374 
12375         else
12376 
12377                 l_calc_plan := (nvl(p_ppl_cost_eff,0)
12378                                + nvl(p_eqpmt_cost_eff,0)
12379                                + nvl(p_oth_cost_eff,0));
12380 
12381         end if;
12382 
12383         return(l_calc_plan);
12384 
12385 end calc_plan;
12386 
12387 -- End fix for Bug # 4319171.
12388 
12389 -- Bug 4490532 Begin
12390 function get_self_amounts(p_amount_type         IN VARCHAR2
12391                    , p_structure_sharing_code   IN VARCHAR2
12392                    , p_prg_group                IN NUMBER
12393            , p_project_id       IN NUMBER
12394            , p_object_version_id    IN NUMBER
12395            , p_proj_element_id      IN NUMBER
12396            , p_as_of_date       IN DATE
12397            , p_current_flag     IN VARCHAR2
12398            , p_record_version_number    IN NUMBER
12399            ) return NUMBER
12400 IS
12401 
12402 
12403 CURSOR c_get_assgn_prog_rec IS
12404 -- 4573486 Just consider ppl amounts, not eqp
12405 --select nvl(ppl_act_effort_to_date,0)+nvl(eqpmt_act_effort_to_date,0) asgn_act_eff
12406 --  ,nvl(ppl_act_cost_to_date_pc,0)+nvl(eqpmt_act_cost_to_date_pc,0)+nvl(oth_act_cost_to_date_pc,0) asgn_act_cost
12407 --  ,nvl(estimated_remaining_effort,0)+nvl(eqpmt_etc_effort,0) asgn_etc_eff
12408 --  ,nvl(ppl_etc_cost_pc,0)+nvl(eqpmt_etc_cost_pc,0)+nvl(oth_etc_cost_pc,0) agn_etc_cost
12409 select nvl(ppl_act_effort_to_date,0) asgn_act_eff
12410     ,nvl(ppl_act_cost_to_date_pc,0) asgn_act_cost
12411     ,nvl(estimated_remaining_effort,0) asgn_etc_eff
12412     ,nvl(ppl_etc_cost_pc,0) agn_etc_cost
12413 from pa_progress_rollup ppr
12414 where ppr.project_id = p_project_id
12415 and ppr.proj_element_id = p_proj_element_id
12416 and ppr.structure_type = 'WORKPLAN'
12417 and ppr.structure_version_id is null
12418 and ppr.object_type = 'PA_ASSIGNMENTS'
12419 and ppr.current_flag = p_current_flag
12420 and ppr.as_of_date = p_as_of_date;
12421 
12422 l_actual_effort NUMBER;
12423 l_actual_cost NUMBER;
12424 l_etc_effort NUMBER;
12425 l_etc_cost NUMBER;
12426 l_need_fetch VARCHAR2(1):='N';
12427 
12428 BEGIN
12429     IF p_prg_group is NULL THEN
12430         return to_number(null);
12431     END IF;
12432     IF g_self_project_id IS NOT NULL THEN
12433         IF g_self_project_id = p_project_id AND g_self_object_version_id = p_object_version_id
12434            AND g_self_as_of_date = p_as_of_date AND g_self_current_flag = p_current_flag
12435            AND g_self_rec_version_number = p_record_version_number
12436         THEN
12437             l_actual_effort := g_self_act_effort;
12438             l_actual_cost := g_self_act_cost;
12439             l_etc_effort := g_self_etc_effort;
12440             l_etc_cost := g_self_etc_cost;
12441   	    -- 4591308 : Added code below
12442 	    -- This is a temporary solution, ideally We should include progress_rollup_id also to this
12443 	    -- function and it should be passed from the veiws patvw018.sql and patvw007.sql.
12444 	    IF  p_amount_type = 'ACT_COST' THEN
12445 		l_need_fetch := 'Y';
12446 	    END IF;
12447         ELSE
12448             l_need_fetch := 'Y';
12449         END IF;
12450     ELSE
12451         l_need_fetch := 'Y';
12452     END IF;
12453 
12454     IF l_need_fetch = 'Y' THEN
12455 
12456         IF PA_PROGRESS_UTILS.check_assignment_exists(p_project_id, p_object_version_id, 'PA_TASKS') = 'Y' THEN
12457             l_actual_effort := null;
12458             l_actual_cost := null;
12459             l_etc_effort := null;
12460             l_etc_cost := null;
12461         ELSE
12462             OPEN c_get_assgn_prog_rec;
12463             FETCH c_get_assgn_prog_rec INTO l_actual_effort, l_actual_cost, l_etc_effort, l_etc_cost;
12464             CLOSE c_get_assgn_prog_rec;
12465             IF p_structure_sharing_code = 'SHARE_FULL' THEN
12466                 l_actual_effort := null;
12467                 l_actual_cost := null;
12468             END IF;
12469         END IF;
12470 
12471         g_self_project_id := p_project_id;
12472         g_self_object_version_id := p_object_version_id;
12473         g_self_as_of_date := p_as_of_date;
12474         g_self_current_flag := p_current_flag;
12475         g_self_rec_version_number := p_record_version_number;
12476         g_self_act_effort := l_actual_effort;
12477         g_self_act_cost := l_actual_cost;
12478         g_self_etc_effort := l_etc_effort;
12479         g_self_etc_cost := l_etc_cost;
12480     END IF;
12481 
12482     IF p_amount_type = 'ACT_COST' THEN
12483         return l_actual_cost;
12484     ELSIF p_amount_type = 'ACT_EFFORT' THEN
12485         return l_actual_effort;
12486     ELSIF p_amount_type = 'ETC_COST' THEN
12487         return l_etc_cost;
12488     ELSIF p_amount_type = 'ETC_EFFORT' THEN
12489         return l_etc_effort;
12490     ELSE
12491         return to_number(null);
12492     END IF;
12493 END get_self_amounts;
12494 -- Bug 4490532 End
12495 
12496 function check_etc_overridden(p_plan_qty    IN   NUMBER,
12497  	                               p_actual_qty  IN   NUMBER,
12498  	                               p_etc_qty     IN   NUMBER) return varchar2 IS
12499  	 begin
12500  	     if (nvl(p_actual_qty,0) >= nvl(p_plan_qty,0) and nvl(p_plan_qty,0) < 0 and nvl(p_etc_qty,0) = nvl(p_plan_qty,0) - nvl(p_actual_qty,0)) then
12501  	        return 'N';
12502  	     elsif (nvl(p_actual_qty,0) >= nvl(p_plan_qty,0) and nvl(p_plan_qty,0) > 0 and nvl(p_etc_qty,0) = 0) then
12503  	        return 'N';
12504  	     elsif (nvl(p_actual_qty,0) <= nvl(p_plan_qty,0) and nvl(p_plan_qty,0) < 0 and nvl(p_etc_qty,0) = 0) then
12505  	        return 'N';
12506  	     elsif (nvl(p_actual_qty,0) <= nvl(p_plan_qty,0) and nvl(p_plan_qty,0) > 0 and nvl(p_etc_qty,0) = nvl(p_plan_qty,0) - nvl(p_actual_qty,0)) then
12507  	        return 'N';
12508  	     else  return 'Y';
12509  	     end if;
12510 end check_etc_overridden;
12511 
12512 
12513 -- Bug 4871809, added this function for performance reasons, used in pa_progress_pvt
12514 function get_w_pub_prupid_asofdate(p_project_id  IN  number,
12515                                    p_object_id   IN  number,
12516                                    p_object_type IN  varchar2,
12517                                    p_task_id     IN  number,
12518                                    p_as_of_date  IN  date,
12519                                    p_chk_task    IN  varchar2 default 'Y',
12520 								   p_cbs_element_id in number :=null) return number is
12521 cursor get_work_prog_rollupid is
12522 select progress_rollup_id
12523             FROM pa_progress_rollup
12524            WHERE project_id = p_project_id
12525              AND object_id = p_object_id
12526              AND decode(p_chk_task,'Y',proj_element_id,p_task_id) = p_task_id
12527              AND object_type = p_object_type
12528              AND structure_type = 'WORKPLAN'
12529              AND structure_version_id is null
12530              AND as_of_date <= p_as_of_date
12531              AND current_flag = 'W'
12532 			  and nvl(cbs_element_id,-1) = nvl(p_cbs_element_id,-1) ;
12533 			  --16820685
12534 
12535 cursor get_pub_prog_rollupid is
12536 select progress_rollup_id
12537   from pa_progress_rollup ppr
12538  WHERE ppr.project_id = p_project_id
12539    AND ppr.object_id = p_object_id
12540    AND decode(p_chk_task,'Y',ppr.proj_element_id,p_task_id) = p_task_id
12541    AND ppr.object_type = p_object_Type
12542    AND ppr.structure_type = 'WORKPLAN'
12543    AND ppr.structure_version_id is null
12544    and  nvl(ppr.cbs_element_id,-1) = nvl(p_cbs_element_id,-1)  --16820685
12545    AND ppr.as_of_date = (select max(as_of_date)
12546                       from pa_progress_rollup
12547                      where project_id = p_project_id
12548                        AND object_id = p_object_id
12549                        AND decode(p_chk_task,'Y',proj_element_id,p_task_id) = p_task_id
12550                        AND object_type = p_object_Type
12551                        AND structure_type = 'WORKPLAN'
12552                        AND structure_version_id is null
12553 					    and nvl(cbs_element_id,-1) = nvl(p_cbs_element_id,-1) --16820685
12554                        AND as_of_Date <= p_as_of_date);
12555 
12556  l_prog_rid number;
12557  l_date     date;
12558 begin
12559   open get_work_prog_rollupid;
12560   fetch get_work_prog_rollupid into l_prog_rid;
12561   close get_work_prog_rollupid;
12562 
12563   if l_prog_rid is not null then
12564      return l_prog_rid;
12565   else
12566      open get_pub_prog_rollupid;
12567      fetch get_pub_prog_rollupid into l_prog_rid;
12568      close get_pub_prog_rollupid;
12569      if (l_prog_rid is not null) then
12570         return l_prog_rid;
12571      else
12572         return -99;
12573      end if;
12574   end if;
12575 
12576 end get_w_pub_prupid_asofdate;
12577 
12578 function get_w_pub_currflag(p_project_id  IN  number,
12579                             p_object_id   IN  number,
12580                             p_object_type IN  varchar2,
12581                             p_task_id     IN  number,
12582                             p_chk_task    IN  varchar2 default 'N') return varchar2 is
12583   cursor get_w_pub_currflag is
12584   select current_flag
12585     FROM pa_progress_rollup
12586    WHERE project_id = p_project_id
12587      AND object_id = p_object_id
12588      AND object_type = p_object_type
12589      AND decode(p_chk_task,'Y',proj_element_id,nvl(p_task_id,-99)) = nvl(p_task_id,-99)
12590      AND structure_type = 'WORKPLAN'
12591      AND structure_version_id is null
12592      AND current_flag in ('W','Y')
12593    order by current_flag asc;
12594 
12595   l_curr_flag   varchar2(1):= null;
12596 begin
12597   open get_w_pub_currflag;
12598   fetch get_w_pub_currflag into l_curr_flag;
12599   close get_w_pub_currflag;
12600 
12601 return nvl(l_curr_flag,'X');
12602 
12603 end get_w_pub_currflag;
12604 
12605 function check_ta_has_prog(
12606                            p_project_id IN NUMBER,
12607                            p_proj_element_id IN NUMBER,
12608                            p_element_ver_id IN NUMBER ) return varchar2 is
12609 	cursor C_TA_PROG_CURSOR is
12610 	select 'Y'
12611 	from
12612 	pa_resource_assignments pra,
12613 	pa_progress_rollup ppr
12614 	where pra.ta_display_flag = 'N'
12615 			and pra.wbs_element_version_id = p_element_ver_id
12616 			and pra.project_id = p_project_id
12617 			and ppr.project_id = p_project_id
12618 			and ppr.object_type = 'PA_ASSIGNMENTS'
12619 			and ppr.object_id = pra.resource_list_member_id
12620 			and ppr.structure_type = 'WORKPLAN'
12621 			and ppr.structure_version_id is null
12622 			and ppr.proj_element_id = p_proj_element_id
12623 			and rownum = 1;
12624 
12625 	l_result varchar2(10);
12626 begin
12627    open C_TA_PROG_CURSOR;
12628 			fetch C_TA_PROG_CURSOR into l_result;
12629 			if C_TA_PROG_CURSOR%FOUND THEN
12630         close C_TA_PROG_CURSOR;
12631         return 'Y';
12632    ELSE
12633         close C_TA_PROG_CURSOR;
12634         return 'N';
12635    END IF;
12636 end check_ta_has_prog;
12637 
12638 --Bug 6664716
12639 -- This function is used to calculate the planned value prorated for the period and the amounts are rolled up
12640 -- to the parent tasks. This proc stores the planned value all the elements of the given structure id in
12641 -- temporary table the first time when it is called and uses the values from this table for next calls.
12642 PROCEDURE get_plan_value(p_project_id number, p_structure_version_id number, p_element_id number, p_as_of_date date)
12643 
12644 IS
12645 
12646 -- Bug 7259306 - Outer join added to the inner inline view for all 6 cursors on pa_progress_rollup table.
12647 
12648 -- Working as of date
12649 
12650 --This cursor retrieves the accumulated amounts for the periods before each task  before as of date period
12651   cursor cur_accum_amts_w (p_project_id NUMBER, p_structure_version_id NUMBER, p_baseline_struc_id NUMBER,
12652                          p_proj_element_id NUMBER,p_cal_id NUMBER, p_cal_type varchar, p_as_of_date date) is
12653   select /*+ index(PFXAF PJI_FP_XBS_ACCUM_F_N1) */ time_id.proj_element_id proj_element_id -- Fix for Bug # 14169654.
12654        ,time_id.as_of_date as_of_date
12655        ,sum(pfxaf.labor_hrs) labor_hours
12656        ,sum(pfxaf.equipment_hours) equipment_hours
12657        ,sum(pfxaf.brdn_cost) prj_brdn_cost
12658     from   pji_fp_xbs_accum_f pfxaf,
12659            pa_budget_versions pbv,
12660            (
12661             select prog_date.proj_element_id proj_element_id,
12662             prog_date.as_of_date as_of_date,
12663             ptcpv.cal_period_id cal_period_id,
12664             ptcpv.name period_name,
12665             ptcpv.start_date pstart_date,
12666             ptcpv.end_date pend_date
12667             from
12668             PJI_TIME_CAL_PERIOD_V ptcpv,
12669              (
12670                select ppv.proj_element_id proj_element_id,
12671                       nvl(p_as_of_date,(ppr.as_of_date)) as_of_date
12672                from pa_progress_rollup ppr,
12673                       pa_proj_element_versions ppv
12674                 where ppv.parent_structure_version_id=p_structure_version_id
12675                   and ppv.project_id=p_project_id
12676                 and ppv.proj_element_id=p_proj_element_id
12677                 and ppr.object_id (+) =ppv.proj_element_id
12678                 and ppr.object_version_id (+) =ppv.element_version_id
12679                 and ppr.project_id (+) = ppv.project_id
12680                 and ppr.structure_version_id (+) = ppv.parent_structure_version_id
12681                 and ppr.structure_type (+) = 'WORKPLAN'
12682                 and ppr.current_flag (+) = 'Y'
12683              )prog_date
12684              where ptcpv.calendar_id=p_cal_id
12685             -- and ptcpv.start_date <= prog_date.as_of_date
12686              and ptcpv.end_date <= prog_date.as_of_date
12687            )time_id
12688     where  pfxaf.project_id=p_project_id
12689     and    pfxaf.project_id=pbv.project_id
12690     and    pbv.project_structure_version_id=p_baseline_struc_id
12691     and    pbv.budget_version_id=pfxaf.plan_version_id
12692     and    pfxaf.project_element_id=time_id.proj_element_id
12693     and    pfxaf.wbs_rollup_flag='N'
12694     and    pfxaf.rbs_aggr_level='T'
12695     and    pfxaf.prg_rollup_flag='N'
12696     and    pfxaf.period_type_id=32
12697     and    pfxaf.calendar_type=p_cal_type
12698     and    pfxaf.time_id=time_id.cal_period_id
12699     group by time_id.proj_element_id
12700        ,time_id.as_of_date ;
12701 
12702   cursor cur_curr_prd_amts_w (p_project_id NUMBER, p_structure_version_id NUMBER, p_baseline_struc_id NUMBER,
12703                          p_proj_element_id NUMBER,p_cal_id NUMBER, p_cal_type varchar, p_as_of_date date) is
12704   select /*+ index(PFXAF PJI_FP_XBS_ACCUM_F_N1) */ pfxaf.project_element_id proj_element_id -- Fix for Bug # 14169654.
12705        ,time_id.pstart_date pstart_date
12706        ,time_id.pend_date pend_date
12707        ,time_id.as_of_date as_of_date
12708        ,pfxaf.labor_hrs labor_hours
12709        ,pfxaf.equipment_hours equipment_hours
12710        ,pfxaf.brdn_cost prj_brdn_cost
12711     from   pji_fp_xbs_accum_f pfxaf,
12712            pa_budget_versions pbv,
12713            (
12714             select prog_date.proj_element_id proj_element_id,
12715             prog_date.as_of_date as_of_date,
12716             ptcpv.cal_period_id cal_period_id,
12717             ptcpv.name period_name,
12718             ptcpv.start_date pstart_date,
12719             ptcpv.end_date pend_date
12720             from
12721             PJI_TIME_CAL_PERIOD_V ptcpv,
12722              (
12723                select ppv.proj_element_id proj_element_id,
12724                       nvl(p_as_of_date,(ppr.as_of_date)) as_of_date
12725                from pa_progress_rollup ppr,
12726                       pa_proj_element_versions ppv
12727                 where ppv.parent_structure_version_id=p_structure_version_id
12728                   and ppv.project_id=p_project_id
12729                 and ppv.proj_element_id=p_proj_element_id
12730                 and ppr.object_id (+) =ppv.proj_element_id
12731                 and ppr.object_version_id (+) =ppv.element_version_id
12732                 and ppr.project_id (+) = ppv.project_id
12733                 and ppr.structure_version_id (+) = ppv.parent_structure_version_id
12734                 and ppr.structure_type (+) = 'WORKPLAN'
12735                 and ppr.current_flag (+) = 'Y'
12736              )prog_date
12737              where ptcpv.calendar_id=p_cal_id
12738              and ptcpv.start_date <= prog_date.as_of_date
12739              and ptcpv.end_date >prog_date.as_of_date
12740            )time_id
12741     where  pfxaf.project_id=p_project_id
12742     and    pfxaf.project_id=pbv.project_id
12743     and    pbv.project_structure_version_id=p_baseline_struc_id
12744     and    pbv.budget_version_id=pfxaf.plan_version_id
12745     and    pfxaf.project_element_id=time_id.proj_element_id
12746     and    pfxaf.wbs_rollup_flag='N'
12747     and    pfxaf.rbs_aggr_level='T'
12748     and    pfxaf.prg_rollup_flag='N'
12749     and    pfxaf.period_type_id=32
12750     and    pfxaf.calendar_type=p_cal_type
12751     and    pfxaf.time_id=time_id.cal_period_id
12752     ;
12753 
12754 
12755 
12756 -- Latest Published
12757 --This cursor retrieves the accumulated amounts for lastest published the periods before each task  before as of date period
12758   cursor cur_accum_amts_l (p_project_id NUMBER, p_structure_version_id NUMBER, p_baseline_struc_id NUMBER,
12759                          p_proj_element_id NUMBER,p_cal_id NUMBER, p_cal_type varchar, p_as_of_date date) is
12760   select /*+ index(PFXAF PJI_FP_XBS_ACCUM_F_N1) */ time_id.proj_element_id proj_element_id -- Fix for Bug # 14169654.
12761        ,time_id.as_of_date as_of_date
12762        ,sum(pfxaf.labor_hrs) labor_hours
12763        ,sum(pfxaf.equipment_hours) equipment_hours
12764        ,sum(pfxaf.brdn_cost) prj_brdn_cost
12765     from   pji_fp_xbs_accum_f pfxaf,
12766            pa_budget_versions pbv,
12767            (
12768             select prog_date.proj_element_id proj_element_id,
12769             prog_date.as_of_date as_of_date,
12770             ptcpv.cal_period_id cal_period_id,
12771             ptcpv.name period_name,
12772             ptcpv.start_date pstart_date,
12773             ptcpv.end_date pend_date
12774             from
12775             PJI_TIME_CAL_PERIOD_V ptcpv,
12776              (
12777                select ppv.proj_element_id proj_element_id,
12778                       nvl(p_as_of_date,(ppr.as_of_date)) as_of_date
12779                from pa_progress_rollup ppr,
12780                       pa_proj_element_versions ppv
12781                 where ppv.parent_structure_version_id=p_structure_version_id
12782                   and ppv.project_id=p_project_id
12783                 and ppv.proj_element_id=p_proj_element_id
12784                 and ppr.object_id (+) =ppv.proj_element_id
12785                 and ppr.object_version_id (+) =ppv.element_version_id
12786                 and ppr.project_id (+) = ppv.project_id
12787                 and ppr.structure_version_id (+) IS NULL
12788                 and ppr.structure_type (+) = 'WORKPLAN'
12789                 and ppr.current_flag (+) ='Y'
12790               --group by ppv.proj_element_id
12791              )prog_date
12792              where ptcpv.calendar_id=p_cal_id
12793             -- and ptcpv.start_date <= prog_date.as_of_date
12794              and ptcpv.end_date <= prog_date.as_of_date
12795            )time_id
12796     where  pfxaf.project_id=p_project_id
12797     and    pfxaf.project_id=pbv.project_id
12798     and    pbv.project_structure_version_id=p_baseline_struc_id
12799     and    pbv.budget_version_id=pfxaf.plan_version_id
12800     and    pfxaf.project_element_id=time_id.proj_element_id
12801     and    pfxaf.wbs_rollup_flag='N'
12802     and    pfxaf.rbs_aggr_level='T'
12803     and    pfxaf.prg_rollup_flag='N'
12804     and    pfxaf.period_type_id=32
12805     and    pfxaf.calendar_type=p_cal_type
12806     and    pfxaf.time_id=time_id.cal_period_id
12807     group by time_id.proj_element_id
12808        ,time_id.as_of_date ;
12809 
12810   cursor cur_curr_prd_amts_l (p_project_id NUMBER, p_structure_version_id NUMBER, p_baseline_struc_id NUMBER,
12811                          p_proj_element_id NUMBER,p_cal_id NUMBER, p_cal_type varchar, p_as_of_date date) is
12812   select /*+ index(PFXAF PJI_FP_XBS_ACCUM_F_N1) */ pfxaf.project_element_id proj_element_id -- Fix for Bug # 14169654.
12813        ,time_id.pstart_date pstart_date
12814        ,time_id.pend_date pend_date
12815        ,time_id.as_of_date as_of_date
12816        ,pfxaf.labor_hrs labor_hours
12817        ,pfxaf.equipment_hours equipment_hours
12818        ,pfxaf.brdn_cost prj_brdn_cost
12819     from   pji_fp_xbs_accum_f pfxaf,
12820            pa_budget_versions pbv,
12821            (
12822             select prog_date.proj_element_id proj_element_id,
12823             prog_date.as_of_date as_of_date,
12824             ptcpv.cal_period_id cal_period_id,
12825             ptcpv.name period_name,
12826             ptcpv.start_date pstart_date,
12827             ptcpv.end_date pend_date
12828             from
12829             PJI_TIME_CAL_PERIOD_V ptcpv,
12830              (
12831                select ppv.proj_element_id proj_element_id,
12832                       nvl(p_as_of_date,(ppr.as_of_date)) as_of_date
12833                from pa_progress_rollup ppr,
12834                       pa_proj_element_versions ppv
12835                 where ppv.parent_structure_version_id=p_structure_version_id
12836                   and ppv.project_id=p_project_id
12837                 and ppv.proj_element_id=p_proj_element_id
12838                 and ppr.object_id (+) =ppv.proj_element_id
12839                 and ppr.object_version_id (+) =ppv.element_version_id
12840                 and ppr.project_id (+) = ppv.project_id
12841                 and ppr.structure_version_id (+) IS NULL
12842                 and ppr.structure_type (+) = 'WORKPLAN'
12843                 and ppr.current_flag (+) = 'Y'
12844               --group by ppv.proj_element_id
12845              )prog_date
12846              where ptcpv.calendar_id=p_cal_id
12847              and ptcpv.start_date <= prog_date.as_of_date
12848              and ptcpv.end_date >prog_date.as_of_date
12849            )time_id
12850     where  pfxaf.project_id=p_project_id
12851     and    pfxaf.project_id=pbv.project_id
12852     and    pbv.project_structure_version_id=p_baseline_struc_id
12853     and    pbv.budget_version_id=pfxaf.plan_version_id
12854     and    pfxaf.project_element_id=time_id.proj_element_id
12855     and    pfxaf.wbs_rollup_flag='N'
12856     and    pfxaf.rbs_aggr_level='T'
12857     and    pfxaf.prg_rollup_flag='N'
12858     and    pfxaf.period_type_id=32
12859     and    pfxaf.calendar_type=p_cal_type
12860     and    pfxaf.time_id=time_id.cal_period_id
12861     ;
12862 
12863 
12864 
12865  --Not a Latest Published Seperate cursor for previously published plan is used coz the as of the is picked from older version
12866  --if the passed structure id does have as of date in the progress_rollup table.
12867 --This cursor retrieves the accumulated amounts for lastest published the for periods before before as of date
12868   cursor cur_accum_amts_p (p_project_id NUMBER, p_structure_version_id NUMBER, p_baseline_struc_id NUMBER,
12869                          p_proj_element_id NUMBER,p_cal_id NUMBER, p_cal_type varchar, p_as_of_date date) is
12870   select /*+ index(PFXAF PJI_FP_XBS_ACCUM_F_N1) */ time_id.proj_element_id proj_element_id -- Fix for Bug # 14169654.
12871        ,time_id.as_of_date as_of_date
12872        ,sum(pfxaf.labor_hrs) labor_hours
12873        ,sum(pfxaf.equipment_hours) equipment_hours
12874        ,sum(pfxaf.brdn_cost) prj_brdn_cost
12875     from   pji_fp_xbs_accum_f pfxaf,
12876            pa_budget_versions pbv,
12877            (
12878             select prog_date.proj_element_id proj_element_id,
12879             prog_date.as_of_date as_of_date,
12880             ptcpv.cal_period_id cal_period_id,
12881             ptcpv.name period_name,
12882             ptcpv.start_date pstart_date,
12883             ptcpv.end_date pend_date
12884             from
12885             PJI_TIME_CAL_PERIOD_V ptcpv,
12886              (
12887                select ppv.proj_element_id proj_element_id,
12888                       max(ppv.parent_structure_version_id) parent_structure_id,
12889                       nvl(p_as_of_date,max(ppr.as_of_date)) as_of_date
12890                from pa_progress_rollup ppr,
12891                       pa_proj_element_versions ppv
12892                 where ppv.parent_structure_version_id<=p_structure_version_id
12893                   and ppv.project_id=p_project_id
12894                 and ppv.proj_element_id=p_proj_element_id
12895                 and ppr.object_id (+) =ppv.proj_element_id
12896                 and ppr.object_version_id (+) =ppv.element_version_id
12897                 and ppr.project_id (+) = ppv.project_id
12898                 and ppr.structure_version_id (+) IS NULL
12899                 and ppr.structure_type (+) = 'WORKPLAN'
12900                 and ppr.current_flag (+) <> 'W'
12901               group by ppv.proj_element_id
12902              )prog_date
12903              where ptcpv.calendar_id=p_cal_id
12904             -- and ptcpv.start_date <= prog_date.as_of_date
12905              and ptcpv.end_date <= prog_date.as_of_date
12906            )time_id
12907     where  pfxaf.project_id=p_project_id
12908     and    pfxaf.project_id=pbv.project_id
12909     and    pbv.project_structure_version_id=p_baseline_struc_id
12910     and    pbv.budget_version_id=pfxaf.plan_version_id
12911     and    pfxaf.project_element_id=time_id.proj_element_id
12912     and    pfxaf.wbs_rollup_flag='N'
12913     and    pfxaf.rbs_aggr_level='T'
12914     and    pfxaf.prg_rollup_flag='N'
12915     and    pfxaf.period_type_id=32
12916     and    pfxaf.calendar_type=p_cal_type
12917     and    pfxaf.time_id=time_id.cal_period_id
12918     group by time_id.proj_element_id
12919        ,time_id.as_of_date ;
12920 
12921   cursor cur_curr_prd_amts_p (p_project_id NUMBER, p_structure_version_id NUMBER, p_baseline_struc_id NUMBER,
12922                          p_proj_element_id NUMBER,p_cal_id NUMBER, p_cal_type varchar, p_as_of_date date) is
12923   select /*+ index(PFXAF PJI_FP_XBS_ACCUM_F_N1) */ pfxaf.project_element_id proj_element_id -- Fix for Bug # 14169654.
12924        ,time_id.pstart_date pstart_date
12925        ,time_id.pend_date pend_date
12926        ,time_id.as_of_date as_of_date
12927        ,pfxaf.labor_hrs labor_hours
12928        ,pfxaf.equipment_hours equipment_hours
12929        ,pfxaf.brdn_cost prj_brdn_cost
12930     from   pji_fp_xbs_accum_f pfxaf,
12931            pa_budget_versions pbv,
12932            (
12933             select prog_date.proj_element_id proj_element_id,
12934             prog_date.as_of_date as_of_date,
12935             ptcpv.cal_period_id cal_period_id,
12936             ptcpv.name period_name,
12937             ptcpv.start_date pstart_date,
12938             ptcpv.end_date pend_date
12939             from
12940             PJI_TIME_CAL_PERIOD_V ptcpv,
12941              (
12942                select ppv.proj_element_id proj_element_id,
12943                       max(ppv.parent_structure_version_id) parent_structure_id,
12944                       nvl(p_as_of_date,max(ppr.as_of_date)) as_of_date
12945                from pa_progress_rollup ppr,
12946                       pa_proj_element_versions ppv
12947                 where ppv.parent_structure_version_id<=p_structure_version_id
12948                   and ppv.project_id=p_project_id
12949                 and ppv.proj_element_id=p_proj_element_id
12950                 and ppr.object_id (+) =ppv.proj_element_id
12951                 and ppr.object_version_id (+) =ppv.element_version_id
12952                 and ppr.project_id (+) = ppv.project_id
12953                 and ppr.structure_version_id (+) IS NULL
12954                 and ppr.structure_type (+) = 'WORKPLAN'
12955                 and ppr.current_flag (+) <> 'W'
12956               group by ppv.proj_element_id
12957              )prog_date
12958              where ptcpv.calendar_id=p_cal_id
12959              and ptcpv.start_date <= prog_date.as_of_date
12960              and ptcpv.end_date >prog_date.as_of_date
12961            )time_id
12962     where  pfxaf.project_id=p_project_id
12963     and    pfxaf.project_id=pbv.project_id
12964     and    pbv.project_structure_version_id=p_baseline_struc_id
12965     and    pbv.budget_version_id=pfxaf.plan_version_id
12966     and    pfxaf.project_element_id=time_id.proj_element_id
12967     and    pfxaf.wbs_rollup_flag='N'
12968     and    pfxaf.rbs_aggr_level='T'
12969     and    pfxaf.prg_rollup_flag='N'
12970     and    pfxaf.period_type_id=32
12971     and    pfxaf.calendar_type=p_cal_type
12972     and    pfxaf.time_id=time_id.cal_period_id
12973     ;
12974 
12975  --Bug 6941104: Added two joins for the existing query
12976 cursor cur_parent_tasks_info(p_project_id number, p_structure_version_id number) is
12977   select ppev1.proj_element_id proj_element_id,
12978          ppev2.proj_element_id parent_task_id,
12979          ppev1.wbs_level,
12980          nvl(ppe.baseline_start_date,ppevs.scheduled_start_date) sch_start_date,
12981          nvl(ppe.baseline_finish_date,ppevs.scheduled_finish_date) sch_end_date
12982   from pa_proj_element_versions ppev1,
12983            pa_proj_element_versions ppev2,
12984        pa_object_relationships por,
12985            pa_proj_elements ppe,
12986            pa_proj_elem_ver_schedule ppevs
12987   where ppev1.parent_structure_version_id = p_structure_version_id
12988   and  ppev1.proj_element_id=ppe.proj_element_id
12989   and  nvl(ppe.link_task_flag,'N') = 'N'
12990   and  ppev1.element_version_id=ppevs.element_version_id
12991   and    ppev1.element_version_id = por.object_id_to1
12992   and  ppev2.element_version_id = por.object_id_from1
12993   and  por.relationship_type = 'S'
12994   and  por.object_type_to = 'PA_TASKS'
12995   and  ppe.object_type = 'PA_TASKS'
12996   order by  ppev1.wbs_level desc;
12997 
12998   cursor c1(p_structure_version_id number) is
12999   select 'Y'
13000     from pa_proj_elem_ver_structure
13001    where project_id = p_project_id
13002      and element_version_id = p_structure_version_id
13003      and status_code = 'STRUCTURE_PUBLISHED';
13004 
13005   l_cal_id          number :=0;
13006   l_cal_type        varchar2(1);
13007   l_parent_task_id  number;
13008   l_temp_start_date date;
13009   l_temp_end_date   date;
13010   l_temp_as_of_date date;
13011   l_multiplier      number;
13012   l_flag            varchar2(1) := 'N';
13013   l_work_struc_id   number := -1;
13014   l_baseline_struc_id  number := -1;
13015   l_as_of_date_ovr  date := NULL;
13016   l_dummy           varchar2(1) := 'N';
13017 
13018 BEGIN
13019 
13020 -- Initializing
13021   l_bcws_hash_tbl.delete();
13022 
13023         l_prv_bcws_project_id             := p_project_id;
13024   l_prv_bcws_struc_ver_id           := p_structure_version_id;
13025 
13026   l_work_struc_id := PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(p_project_id);
13027 
13028   -- To decide the structure_version_id passed is latest published or current working or published version
13029   IF PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(p_project_id) = p_structure_version_id THEN
13030     l_flag := 'W';
13031   ELSIF PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_WP_VERSION(p_project_id) = p_structure_version_id THEN
13032     l_flag := 'L';
13033   ELSE
13034     -- Doing this handling for split structures where it is possible  to have multiple working versions.
13035     OPEN c1(p_structure_version_id);
13036     FETCH c1 into l_dummy;
13037     CLOSE c1;
13038 
13039     IF nvl(l_dummy,'N') = 'Y' THEN
13040       l_flag := 'P';
13041     ELSE
13042       l_flag := 'W';
13043     END IF;
13044 
13045   END IF;
13046 
13047   --Code for getting the calendar id.
13048   SELECT ppfo.cost_time_phased_code INTO l_cal_type
13049   FROM pa_proj_fp_options ppfo, pa_budget_versions pbv
13050   WHERE pbv.project_id=p_project_id
13051   AND   pbv.project_structure_version_id=p_structure_version_id
13052   AND   pbv.budget_version_id=ppfo.fin_plan_version_id
13053   AND   ppfo.fin_plan_option_level_code='PLAN_VERSION';
13054 
13055   -- To calculate planned value based on the existing functionality
13056   -- when workplan is non time phased.
13057   IF l_cal_type = 'N'
13058   THEN
13059     return;
13060   END IF;
13061 
13062   IF l_cal_type = 'G' THEN
13063     SELECT ftcn.calendar_id INTO l_cal_id
13064     FROM PA_time_cal_name ftcn,  /* Modified for bug 12979524 */
13065          pa_projects_all ppa,
13066          pa_implementations_all pia,
13067          gl_sets_of_books gsb
13068     WHERE ppa.project_id=p_project_id
13069     AND   ppa.org_id=pia.org_id
13070     AND   pia.set_of_books_id=gsb.set_of_books_id
13071     AND   gsb.period_set_name=ftcn.period_set_name
13072     AND   gsb.accounted_period_type=ftcn.period_type;
13073   ELSIF l_cal_type = 'P' THEN
13074     SELECT ftcn.calendar_id INTO l_cal_id
13075     FROM pa_time_cal_name ftcn,  /* Modified for bug 12979524 */
13076          pa_projects_all ppa,
13077          pa_implementations_all pia
13078     WHERE ppa.project_id=p_project_id
13079     AND   ppa.org_id=pia.org_id
13080     AND   pia.period_set_name=ftcn.period_set_name
13081     AND   pia.pa_period_type=ftcn.period_type;
13082   END IF;
13083 
13084         -- Retriving baseline structure id to retrive planned values information from baselined structure.
13085         l_baseline_struc_id := PA_PROJECT_STRUCTURE_UTILS.Get_Baseline_Struct_Ver(p_project_id);
13086 
13087         IF l_baseline_struc_id = -1 THEN
13088           l_baseline_struc_id := p_structure_version_id;
13089         END IF;
13090 
13091   -- Populating the parent task id as well as calculating the com and rolls up the amounts to parent task.
13092   FOR cur_parent_tasks_info_rec in cur_parent_tasks_info(p_project_id, p_structure_version_id)
13093   LOOP
13094     l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).parent_task_id := cur_parent_tasks_info_rec.parent_task_id;
13095     l_as_of_date_ovr := NULL;
13096     l_parent_task_id := NULL;
13097 
13098     -- Bug 7259306
13099     -- In the absence of progress, the planned value is calculated based on the as of date displayed in the progress report tab.
13100     IF (PA_PROJECT_STRUCTURE_UTILS.CHECK_STRUC_VER_PUBLISHED(p_project_id, p_structure_version_id) = 'Y') AND
13101        (PA_PROGRESS_UTILS.PROJ_TASK_PROG_EXISTS(p_project_id, cur_parent_tasks_info_rec.proj_element_id) = 'N') THEN
13102         l_as_of_date_ovr := get_def_as_of_date_prog_report(p_project_id, cur_parent_tasks_info_rec.proj_element_id);
13103     END IF;
13104 
13105     -- Overriding the as of date for showing the changed planned value in progress details page:
13106           IF l_ovr_task_id IS NOT NULL AND l_ovr_task_id <> -1 AND (l_ovr_task_id = p_element_id) THEN
13107             IF l_bcws_hash_tbl.exists('PA'||l_ovr_task_id) AND (l_ovr_task_id = cur_parent_tasks_info_rec.proj_element_id) THEN
13108               l_as_of_date_ovr    := p_as_of_date;
13109             END IF;
13110           END IF;
13111 
13112     IF l_flag = 'W' THEN
13113       FOR cur_accum_amts_w_rec in cur_accum_amts_w(p_project_id, p_structure_version_id, l_baseline_struc_id, cur_parent_tasks_info_rec.proj_element_id,
13114           l_cal_id,l_cal_type, l_as_of_date_ovr)
13115       LOOP
13116               l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).tlbr_hrs_baod := cur_accum_amts_w_rec.labor_hours;
13117             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).teqp_hrs_baod := cur_accum_amts_w_rec.equipment_hours;
13118             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).tpbc_hrs_baod := cur_accum_amts_w_rec.prj_brdn_cost;
13119 
13120             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).as_of_date    := cur_accum_amts_w_rec.as_of_date;
13121             END LOOP;
13122 
13123             --This loop is used to populate the current period amounts.
13124           FOR cur_curr_prd_amts_w_rec in cur_curr_prd_amts_w(p_project_id, p_structure_version_id, l_baseline_struc_id, cur_parent_tasks_info_rec.proj_element_id,
13125           l_cal_id,l_cal_type, l_as_of_date_ovr)
13126           LOOP
13127             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_lbr_hrs   := cur_curr_prd_amts_w_rec.labor_hours;
13128             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_eqp_hrs   := cur_curr_prd_amts_w_rec.equipment_hours;
13129             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_pbc       := cur_curr_prd_amts_w_rec.prj_brdn_cost;
13130 
13131             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).pstart_date   := cur_curr_prd_amts_w_rec.pstart_date;
13132             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).pend_date     := cur_curr_prd_amts_w_rec.pend_date;
13133             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).as_of_date    := cur_curr_prd_amts_w_rec.as_of_date;
13134           END LOOP;
13135     ELSIF l_flag ='L' THEN
13136       FOR cur_accum_amts_l_rec in cur_accum_amts_l(p_project_id, p_structure_version_id, l_baseline_struc_id, cur_parent_tasks_info_rec.proj_element_id,
13137           l_cal_id,l_cal_type,l_as_of_date_ovr)
13138       LOOP
13139               l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).tlbr_hrs_baod := cur_accum_amts_l_rec.labor_hours;
13140             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).teqp_hrs_baod := cur_accum_amts_l_rec.equipment_hours;
13141             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).tpbc_hrs_baod := cur_accum_amts_l_rec.prj_brdn_cost;
13142 
13143             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).as_of_date    := cur_accum_amts_l_rec.as_of_date;
13144             END LOOP;
13145 
13146             --This loop is used to populate the current period amounts.
13147           FOR cur_curr_prd_amts_l_rec in cur_curr_prd_amts_l(p_project_id, p_structure_version_id, l_baseline_struc_id, cur_parent_tasks_info_rec.proj_element_id,
13148           l_cal_id,l_cal_type,l_as_of_date_ovr)
13149           LOOP
13150             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_lbr_hrs   := cur_curr_prd_amts_l_rec.labor_hours;
13151             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_eqp_hrs   := cur_curr_prd_amts_l_rec.equipment_hours;
13152             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_pbc       := cur_curr_prd_amts_l_rec.prj_brdn_cost;
13153 
13154             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).pstart_date   := cur_curr_prd_amts_l_rec.pstart_date;
13155             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).pend_date     := cur_curr_prd_amts_l_rec.pend_date;
13156             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).as_of_date    := cur_curr_prd_amts_l_rec.as_of_date;
13157           END LOOP;
13158     ELSIF l_flag ='P' THEN
13159 
13160       FOR cur_accum_amts_p_rec in cur_accum_amts_p(p_project_id, p_structure_version_id, l_baseline_struc_id, cur_parent_tasks_info_rec.proj_element_id,
13161           l_cal_id,l_cal_type,l_as_of_date_ovr)
13162       LOOP
13163               l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).tlbr_hrs_baod := cur_accum_amts_p_rec.labor_hours;
13164             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).teqp_hrs_baod := cur_accum_amts_p_rec.equipment_hours;
13165             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).tpbc_hrs_baod := cur_accum_amts_p_rec.prj_brdn_cost;
13166 
13167             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).as_of_date    := cur_accum_amts_p_rec.as_of_date;
13168             END LOOP;
13169 
13170             --This loop is used to populate the current period amounts.
13171           FOR cur_curr_prd_amts_p_rec in cur_curr_prd_amts_p(p_project_id, p_structure_version_id, l_baseline_struc_id, cur_parent_tasks_info_rec.proj_element_id,
13172           l_cal_id,l_cal_type,l_as_of_date_ovr)
13173           LOOP
13174             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_lbr_hrs   := cur_curr_prd_amts_p_rec.labor_hours;
13175             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_eqp_hrs   := cur_curr_prd_amts_p_rec.equipment_hours;
13176             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_pbc       := cur_curr_prd_amts_p_rec.prj_brdn_cost;
13177 
13178             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).pstart_date   := cur_curr_prd_amts_p_rec.pstart_date;
13179             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).pend_date     := cur_curr_prd_amts_p_rec.pend_date;
13180             l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).as_of_date    := cur_curr_prd_amts_p_rec.as_of_date;
13181           END LOOP;
13182 
13183     END IF;
13184 
13185 
13186     -- TO populate the schedule dates from schedule dates  table if baseline date is null
13187     l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).sch_start_date := cur_parent_tasks_info_rec.sch_start_date;
13188           l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).sch_end_date   := cur_parent_tasks_info_rec.sch_end_date;
13189 
13190     l_temp_start_date := NULL;
13191     l_temp_end_date   := NULL;
13192     l_temp_as_of_date := NULL;
13193     l_multiplier      := NULL;
13194 
13195     l_temp_start_date := greatest(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).sch_start_date,
13196                     l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).pstart_date);
13197     l_temp_end_date := least(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).sch_end_date,
13198                     l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).pend_date);
13199     l_temp_as_of_date := l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).as_of_date;
13200 
13201 
13202     IF ((l_temp_start_date - l_temp_as_of_date) > 0) THEN
13203       l_multiplier := 0;
13204     ELSIF ((l_temp_as_of_date - l_temp_end_date) >= 0) THEN
13205       l_multiplier := 1;
13206     ELSIF (nvl((l_temp_end_date - l_temp_start_date),0) >= 0) then
13207       l_multiplier := nvl((trunc(l_temp_as_of_date) - trunc(l_temp_start_date)+1),0)/
13208                       nvl((trunc(l_temp_end_date) - trunc(l_temp_start_date)+1),1);
13209     END IF;
13210 
13211     IF l_multiplier IS NOT NULL THEN
13212       l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).labor_hrs :=
13213         nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).labor_hrs,0) +
13214         nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).tlbr_hrs_baod,0) +
13215         nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_lbr_hrs,0) * l_multiplier;
13216 
13217       l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).equip_hrs :=
13218         nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).equip_hrs,0) +
13219         nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).teqp_hrs_baod,0) +
13220         nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_eqp_hrs,0) * l_multiplier;
13221 
13222       l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).prj_brdn_cost :=
13223         nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).prj_brdn_cost,0) +
13224         nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).tpbc_hrs_baod,0) +
13225         nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_pbc,0) * l_multiplier;
13226 
13227     ELSE -- IF mulitplication factor is null then add complete curr period amount to
13228 
13229       l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).labor_hrs :=
13230         nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).labor_hrs,0) +
13231         nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).tlbr_hrs_baod,0) +
13232         nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_lbr_hrs,0);
13233 
13234       l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).equip_hrs :=
13235         nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).equip_hrs,0) +
13236         nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).teqp_hrs_baod,0) +
13237         nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_eqp_hrs,0);
13238 
13239       l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).prj_brdn_cost :=
13240         nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).prj_brdn_cost,0) +
13241         nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).tpbc_hrs_baod,0) +
13242         nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_pbc,0);
13243 
13244     END IF;
13245 
13246 
13247     l_parent_task_id := l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).parent_task_id;
13248 
13249     -- elements amounts are rolled upto corresponding parent task id.
13250     IF l_bcws_hash_tbl.exists('PA'||l_parent_task_id) THEN
13251       l_bcws_hash_tbl('PA'||l_parent_task_id).labor_hrs := nvl(l_bcws_hash_tbl('PA'||l_parent_task_id).labor_hrs,0) +
13252                                                nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).labor_hrs,0);
13253 
13254       l_bcws_hash_tbl('PA'||l_parent_task_id).equip_hrs := nvl(l_bcws_hash_tbl('PA'||l_parent_task_id).equip_hrs,0) +
13255                                                nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).equip_hrs,0);
13256 
13257       l_bcws_hash_tbl('PA'||l_parent_task_id).prj_brdn_cost := nvl(l_bcws_hash_tbl('PA'||l_parent_task_id).prj_brdn_cost,0) +
13258                                                nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).prj_brdn_cost,0);
13259     ELSE
13260       l_bcws_hash_tbl('PA'||l_parent_task_id).labor_hrs := nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).labor_hrs,0);
13261 
13262       l_bcws_hash_tbl('PA'||l_parent_task_id).equip_hrs := nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).equip_hrs,0);
13263 
13264       l_bcws_hash_tbl('PA'||l_parent_task_id).prj_brdn_cost := nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).prj_brdn_cost,0);
13265     END IF;
13266   END LOOP;
13267 
13268 EXCEPTION
13269     WHEN OTHERS THEN
13270       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROGRESS_UTILS',
13271                               p_procedure_name => 'get_plan_value',
13272                               p_error_text     => SUBSTRB(SQLERRM,1,120));
13273 
13274 END get_plan_value;
13275 
13276 -- This is procedure is used to clear the cache.
13277 PROCEDURE clear_tmp_tables(p_task_id Number Default Null)
13278 IS
13279 BEGIN
13280 
13281         l_prv_bcws_project_id             := -1;
13282   l_prv_bcws_struc_ver_id           := -1;
13283   l_ovr_task_id                     := p_task_id;
13284 END clear_tmp_tables;
13285 --Bug 6664716
13286 
13287 -- Bug 7259306
13288 -- Returns the date displayed in the Progress Report tab
13289 -- Cursor is based on the VO - ProgressAsOfDatesVO which is used to populate the 'as of date' poplist
13290 FUNCTION get_def_as_of_date_prog_report(
13291     p_project_id        pa_progress_rollup.project_id%TYPE,
13292     p_proj_element_id   pa_progress_rollup.proj_element_id%TYPE,
13293     p_object_type       pa_progress_rollup.object_type%TYPE := 'PA_TASKS'
13294 ) RETURN DATE IS
13295     l_return_date         DATE;
13296 
13297     CURSOR cur_get_def_as_of_date
13298     IS
13299     SELECT  as_of_date FROM (
13300     SELECT  ppe.project_id project_id,
13301             PA_PROGRESS_UTILS.AS_OF_DATE(ppe.project_id, ppe.proj_element_id, ppp.progress_cycle_id, ppe.object_type) as_of_date ,
13302             ppe.object_type object_type
13303     FROM    --pa_project_statuses po, --removed for bug 13687289
13304             pa_proj_progress_attr ppp,
13305             pa_proj_elements ppe
13306     WHERE   ppe.project_id         = ppp.project_id(+)
13307     AND ppp.structure_type (+) = 'WORKPLAN'
13308     AND ppe.project_id         = p_project_id
13309     AND ppe.proj_element_id    = p_proj_element_id
13310     AND ppe.object_type        = p_object_type
13311     AND ((ppe.object_type     IN ('PA_TASKS', 'PA_STRUCTURES')
13312     AND rownum                 <61)
13313      OR (ppe.object_type       = 'PA_DELIVERABLES'
13314     AND rownum                 <11))
13315     MINUS
13316     SELECT  to_number(p_project_id) project_id,
13317             to_date(NULL) as_of_date,
13318             TO_CHAR(p_object_type) object_type
13319     FROM    dual
13320     )
13321     WHERE ROWNUM = 1;
13322 
13323 BEGIN
13324      OPEN cur_get_def_as_of_date;
13325      FETCH cur_get_def_as_of_date INTO l_return_date;
13326      CLOSE cur_get_def_as_of_date;
13327 
13328      -- Bug 7633088
13329 
13330      IF pa_progress_utils.get_prog_asofdate is NOT NULL THEN
13331 	RETURN ( pa_progress_utils.get_prog_asofdate );  /* 8220798 */
13332      ELSIF g_override_as_of_date is NOT NULL THEN
13333        RETURN ( g_override_as_of_date );
13334      ELSE
13335        RETURN ( l_return_date );
13336      END IF;
13337 
13338 END get_def_as_of_date_prog_report;
13339 
13340 -- Bug 7633088
13341 PROCEDURE set_override_as_of_date(p_as_of_date IN DATE) IS
13342 BEGIN
13343     g_override_as_of_date := p_as_of_date;
13344 END set_override_as_of_date;
13345 
13346  /** bpottipa added this method for bug 10137611.
13347  	   * This will be used in Team Member Home page > Update Progress >
13348  	   * Assignments tab view to get the actual effort this period
13349  	   * value. The logic in this method is similar to the one used in
13350  	   * pa_tasks_assigns_progress_v to derive actual effort to this period.
13351  	   */
13352  	 FUNCTION get_assgn_act_effort_period (p_as_of_date        IN     DATE
13353  	                                      ,p_project_id        IN     NUMBER
13354  	                                      ,p_object_id         IN     NUMBER
13355  	                                      ,p_object_version_id IN     NUMBER
13356  	                                                             ,p_proj_element_id   IN     NUMBER := null
13357 																 ,p_cbs_element_id   NUMBER := null ) -- Added for CBS phase 2 16200605
13358  return NUMBER
13359  	 IS
13360  	         l_act_effort_period                NUMBER := NULL;
13361  	         l_act_effort_to_date                NUMBER := NULL;
13362  	         l_act_effort_prev_asofdate                NUMBER := NULL;
13363 
13364  	 cursor get_act_eff_to_date is
13365  	 select decode(ptav.resource_class_code, 'PEOPLE', ppr.PPL_ACT_EFFORT_TO_DATE, 'EQUIPMENT', ppr.EQPMT_ACT_EFFORT_TO_DATE,
13366  	  ppr.oth_quantity_to_date)
13367  	  from pa_progress_rollup ppr,
13368  	       pa_task_asgmts_v ptav
13369  	  where  ptav.project_id = p_project_id
13370  	  and ptav.task_id = p_proj_element_id
13371  	  and ptav.project_id = ppr.project_id
13372  	  and ptav.resource_list_member_id = ppr.object_id
13373  	  and ptav.task_id = ppr.proj_element_id
13374  	  and ptav.task_version_id = p_object_version_id
13375  	  and ppr.proj_element_id = p_proj_element_id
13376  	  and 'PA_ASSIGNMENTS' = ppr.object_type
13377  	  and ppr.project_id = p_project_id
13378  	  and ppr.object_id = p_object_id
13379 	  AND NVL(ppr.cbs_element_id,-1) = NVL(p_cbs_element_id,-1) --Added for CBS phase 2 16200605
13380  	  and trunc(ppr.as_of_date) = trunc(p_as_of_date)
13381  	  and ppr.structure_type = 'WORKPLAN'
13382  	  and ppr.structure_version_id IS NULL
13383  	  and (nvl(ppr.current_flag,'N') = 'W' or (ppr.current_flag IN ('Y', 'N')
13384  	  and not exists (select 1 from pa_progress_rollup ppc1 where ppc1.project_id = p_project_id
13385  	      and ppc1.object_id = ptav.resource_list_member_id
13386 		  AND NVL(ppc1.cbs_element_id,-1) = NVL(p_cbs_element_id,-1) --Added for CBS phase 2 16200605
13387  	      and ppc1.proj_element_id = ptav.task_id and ppc1.object_Type = 'PA_ASSIGNMENTS'
13388  	      and ppc1.structure_type = 'WORKPLAN'
13389  	      and ppc1.as_of_date <= pa_progress_utils.get_prog_asofdate() and ppc1.structure_version_id is null
13390  	      and ppc1.current_flag = 'W')));
13391 
13392 
13393  	 cursor get_act_eff_prev_asofdate is
13394  	          select (nvl(ppr.ppl_act_effort_to_date,0)
13395  	                  +nvl(ppr.eqpmt_act_effort_to_date,0)
13396  	                  +nvl(ppr.subprj_ppl_act_effort,0)
13397  	                  +nvl(ppr.subprj_eqpmt_act_effort,0)
13398  	                  +nvl(ppr.oth_quantity_to_date,0)) act_effort_prev_asofdate
13399  	         from pa_progress_rollup ppr
13400  	         where ppr.project_id = p_project_id
13401  	         and ppr.object_id = p_object_id
13402 			 AND NVL(ppr.cbs_element_id,-1) = NVL(p_cbs_element_id,-1) --Added for CBS phase 2 16200605
13403  	         and ppr.structure_type = 'WORKPLAN'
13404  	         and ppr.proj_element_id = p_proj_element_id
13405  	         and ppr.structure_version_id is null
13406  	         and ppr.as_of_date = (select max(ppr2.as_of_date)
13407  	                               from pa_progress_rollup ppr2
13408  	                               where ppr2.project_id = p_project_id
13409  	                               and ppr2.object_id = p_object_id
13410 								   AND NVL(ppr2.cbs_element_id,-1) = NVL(p_cbs_element_id,-1) --Added for CBS phase 2 16200605
13411  	                               and ppr2.structure_type = 'WORKPLAN'
13412  	                               and ppr2.proj_element_id = p_proj_element_id
13413  	                               and ppr2.structure_version_id is null
13414  	                               and ppr2.current_flag <> 'W'
13415  	                               and ppr2.as_of_date < p_as_of_date);
13416 
13417  	 BEGIN
13418 
13419  	         open get_act_eff_to_date;
13420  	         fetch get_act_eff_to_date into l_act_effort_to_date;
13421  	         close get_act_eff_to_date;
13422 
13423  	         open get_act_eff_prev_asofdate;
13424  	         fetch get_act_eff_prev_asofdate into l_act_effort_prev_asofdate;
13425  	         close get_act_eff_prev_asofdate;
13426 
13427  	         l_act_effort_period := (nvl(l_act_effort_to_date,0) - nvl(l_act_effort_prev_asofdate,0));
13428 
13429  	         if (l_act_effort_period < 0 ) then
13430  	                 l_act_effort_period := 0;
13431  	         end if;
13432 
13433  	         return(l_act_effort_period);
13434 
13435  	 END get_assgn_act_effort_period;
13436 
13437 END PA_PROGRESS_UTILS;