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