[Home] [Help]
PACKAGE BODY: APPS.PA_PROGRESS_UTILS
Source
1 package body PA_PROGRESS_UTILS as
2 /* $Header: PAPCUTLB.pls 120.31.12010000.6 2008/12/17 20:33:36 bifernan 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 ) RETURN DATE IS
389
390 --Added for performance improvements bug 2679612
391 CURSOR cur_proj_elem
392 IS
393 SELECT project_id
394 FROM pa_proj_elements
395 WHERE proj_element_id = p_task_id;
396 l_project_id NUMBER;
397 --Added for performance improvements bug 2679612
398
399 CURSOR cur_ppc(c_project_id NUMBER )
400 IS
401 SELECT date_computed
402 FROM pa_percent_completes
403 WHERE object_id = decode(p_object_id, null, p_task_id, p_object_id)
404 AND project_id = c_project_id
405 and object_type = p_object_type
406 AND current_flag = 'Y'
407 AND published_flag = 'Y'
408 AND structure_type = p_structure_type
409 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. */
410 ;
411 l_as_of_date DATE;
412 BEGIN
413
414 IF p_project_id is NULL THEN
415 --Added for performance improvements bug 2679612
416 OPEN cur_proj_elem;
417 FETCH cur_proj_elem INTO l_project_id;
418 CLOSE cur_proj_elem;
419 ELSE
420 l_project_id := p_project_id;
421 END IF;
422
423 --Added for performance improvements bug 2679612
424
425 OPEN cur_ppc(l_project_id);
426 FETCH cur_ppc INTO l_as_of_date;
427 CLOSE cur_ppc;
428 RETURN l_as_of_date ;
429
430 exception when others then
431 return null;
432
433 END GET_LATEST_AS_OF_DATE;
434
435 function Get_AS_OF_DATE (
436 X_Project_ID IN Number,
437 X_Project_Start_Date IN Date default NULL,
438 X_Billing_Cycle_ID IN Number default NULL,
439 X_Billing_Offset_Days IN Number default NULL,
440 X_Bill_Thru_Date IN Date default NULL,
441 X_Last_Bill_Thru_Date IN Date default NULL
442 ) RETURN DATE
443 IS
444
445 return_number NUMBER;
446 previous_return_date DATE;
447 next_return_date DATE;
448 return_date DATE;
449
450 date_count NUMBER := 0;
451 temp_index NUMBER := 0;
452
453 future_date_record NUMBER := 0;
454 prev_return_date Date;
455
456 BEGIN
457
458 if PA_PROGRESS_UTILS.x_bill_thru_date is null then
459 PA_PROGRESS_UTILS.x_bill_thru_date := x_project_start_date;
460 end if;
461
462 if PA_PROGRESS_UTILS.project_id <> X_Project_ID OR
463 i >= 10 then
464
465 --Initializing variables
466 PA_PROGRESS_UTILS.l_return_date.delete;
467 PA_PROGRESS_UTILS.project_id := X_Project_ID;
468 PA_PROGRESS_UTILS.previous_record_count := 0;
469 PA_PROGRESS_UTILS.next_record_count := 0;
470 PA_PROGRESS_UTILS.previous_record_index := 0;
471 PA_PROGRESS_UTILS.current_index := 0;
472 PA_PROGRESS_UTILS.x_bill_thru_date := X_Last_Bill_Thru_Date;
473 PA_PROGRESS_UTILS.i := 0;
474
475 --------my_error_msg( 'X_Billing_Cycle_ID ' || X_Billing_Cycle_ID );
476
477 while TRUE loop
478
479 prev_return_date := return_date;
480
481 IF X_Billing_Cycle_ID IS NOT NULL THEN
482 return_date := PA_Billing_Cycles_Pkg.Get_Next_Billing_Date
483 (X_Project_ID => X_Project_ID,
484 X_Project_Start_Date => X_Project_Start_Date,
485 X_Billing_Cycle_ID => X_Billing_Cycle_ID,
486 X_Billing_Offset_Days => X_Billing_Offset_Days,
487 X_Bill_Thru_Date => X_Bill_Thru_Date,
488 X_Last_Bill_Thru_Date => PA_PROGRESS_UTILS.x_bill_thru_date);
489 ELSE
490 return_date := PA_PROGRESS_UTILS.x_bill_thru_date + 1;
491 END IF;
492
493 PA_PROGRESS_UTILS.x_bill_thru_date := return_date;
494
495 IF ((trunc(sysdate) - trunc(return_date) <= 5) OR (trunc(return_date) >= trunc(sysdate))) then
496
497 date_count := date_count + 1;
498
499
500 PA_PROGRESS_UTILS.l_return_date.extend(1);
501 PA_PROGRESS_UTILS.l_return_date(date_count) := to_char(return_date, 'MM-DD-RR');
502
503 END IF;
504
505
506
507 if trunc(return_date) >= trunc(sysdate) then
508
509 if PA_PROGRESS_UTILS.current_index = 0 then
510 PA_PROGRESS_UTILS.current_index := date_count;
511 PA_PROGRESS_UTILS.previous_record_index := PA_PROGRESS_UTILS.current_index - 5;
512 IF PA_PROGRESS_UTILS.previous_record_index <= 0
513 THEN
514 PA_PROGRESS_UTILS.previous_record_index := 1;
515 END IF;
516 end if;
517
518 future_date_record := future_date_record + 1;
519
520 end if;
521
522 if future_date_record = 5 then
523 exit;
524 end if;
525
526 if prev_return_date = return_date then
527 exit;
528 end if;
529
530 end loop;
531
532 end if;
533
534
535 if PA_PROGRESS_UTILS.previous_record_count < 5 AND
536 PA_PROGRESS_UTILS.previous_record_index > 0 AND
537 PA_PROGRESS_UTILS.previous_record_index < PA_PROGRESS_UTILS.current_index
538 then
539 if (PA_PROGRESS_UTILS.l_return_date.exists(PA_PROGRESS_UTILS.previous_record_index)) then--If Condition Added by rtarway for BUG4111124
540 return_date := to_date(PA_PROGRESS_UTILS.l_return_date(PA_PROGRESS_UTILS.previous_record_index), 'MM-DD-RR');
541
542 PA_PROGRESS_UTILS.previous_record_count := PA_PROGRESS_UTILS.previous_record_count + 1;
543 PA_PROGRESS_UTILS.previous_record_index := PA_PROGRESS_UTILS.previous_record_index + 1;
544 end if;
545
546 elsif PA_PROGRESS_UTILS.next_record_count < 5 then
547
548 temp_index := PA_PROGRESS_UTILS.current_index+PA_PROGRESS_UTILS.next_record_count;
549
550 if (PA_PROGRESS_UTILS.l_return_date.exists(temp_index)) then --If Condition Added by rtarway for BUG4111124
551 return_date := to_date(PA_PROGRESS_UTILS.l_return_date(temp_index), 'MM-DD-RR');
552
553 PA_PROGRESS_UTILS.next_record_count := PA_PROGRESS_UTILS.next_record_count + 1;
554 end if;
555
556 end if;
557
558 RETURN (return_date);
559
560 EXCEPTION
561 When OTHERS then
562 RAISE;
563 END Get_AS_OF_DATE;
564
565
566 FUNCTION as_of_date(
567 X_Project_ID IN NUMBER ,
568 X_Object_id IN NUMBER ,
569 X_Billing_Cycle_ID IN NUMBER DEFAULT NULL ,
570 X_Object_type IN VARCHAR2 DEFAULT 'PA_TASKS' ,-- FPM Development Bug 3420093
571 X_structure_type IN VARCHAR2 DEFAULT 'WORKPLAN' ,-- FPM Development Bug 3420093
572 X_proj_element_id IN NUMBER := null /* Amit : Modified for IB4 Progress CR. */
573 ) RETURN DATE IS
574
575 -- Bug 3974627 : Commented
576 /*
577 CURSOR cur_pa_ppc
578 IS
579 SELECT max( date_computed )
580 FROM pa_percent_completes
581 WHERE project_id = X_Project_ID
582 AND object_id = x_object_id
583 AND object_type = x_object_type
584 AND current_flag = 'Y'
585 AND published_flag = 'Y'
586 AND structure_type = x_structure_type
587 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))
588 ;
589 */
590
591 -- Bug 3974627 : Added Cursors cur_pa_ppc_str_task, cur_pa_ppc_asgn, cur_pa_ppc_dlv
592 CURSOR cur_pa_ppc_str_task
593 IS
594 SELECT max( date_computed )
595 FROM pa_percent_completes
596 WHERE project_id = X_Project_ID
597 AND object_id = x_object_id
598 AND current_flag = 'Y'
599 AND published_flag = 'Y'
600 AND object_type = x_object_type
601 AND structure_type = X_structure_type
602 AND task_id = NVL(X_proj_element_id,x_object_id)
603 ;
604
605 CURSOR cur_pa_ppc_asgn
606 IS
607 SELECT max( date_computed )
608 FROM pa_percent_completes
609 WHERE project_id = X_Project_ID
610 AND current_flag = 'Y'
611 AND published_flag = 'Y'
612 AND ((object_type = 'PA_ASSIGNMENTS' and object_id = x_object_id)
613 or (object_type = 'PA_TASKS' and object_id = X_proj_element_id))
614 AND structure_type = X_structure_type
615 AND task_id = X_proj_element_id
616 ;
617
618
619
620 CURSOR cur_dlv_get_asso_task(c_del_elem_id NUMBER)
621 IS
622 SELECT por.object_id_from2
623 FROM pa_object_relationships por
624 WHERE
625 por.object_type_to = 'PA_DELIVERABLES'
626 AND por.relationship_subtype IN ('STRUCTURE_TO_DELIVERABLE', 'TASK_TO_DELIVERABLE')
627 AND por.relationship_type = 'A'
628 AND por.object_id_to2 = c_del_elem_id
629 ;
630 l_del_task_id NUMBER;
631
632 CURSOR cur_pa_ppc_dlv_notask
633 IS
634 SELECT max( date_computed )
635 FROM pa_percent_completes
636 WHERE project_id = X_Project_ID
637 AND object_id = x_object_id
638 AND current_flag = 'Y'
639 AND published_flag = 'Y'
640 AND object_type = 'PA_DELIVERABLES'
641 AND structure_type = X_structure_type
642 AND NVL(task_id, -1) = NVL(X_proj_element_id, NVL(task_id, -1))
643 ;
644
645 CURSOR cur_pa_ppc_dlv_task(c_task_id NUMBER)
646 IS
647 SELECT max( date_computed )
648 FROM pa_percent_completes
649 WHERE project_id = X_Project_ID
650 AND ((object_id = x_object_id and object_type = 'PA_DELIVERABLES') or
651 (object_id = c_task_id and object_type = 'PA_TASKS'))
652 AND current_flag = 'Y'
653 AND published_flag = 'Y'
654 AND structure_type = X_structure_type
655 ;
656
657
658
659 CURSOR cur_pa_proj
660 IS
661 SELECT start_date, completion_date
662 from pa_projects_all
663 where project_id = x_project_id;
664
665 l_return_date DATE;
666
667 CURSOR c_get_max_rollup_dt IS
668 SELECT max(as_of_date)
669 FROM pa_progress_rollup
670 where project_id = X_Project_ID
671 and object_type IN ('PA_TASKS', 'PA_STRUCTURES')
672 and object_id = x_object_id
673 and structure_type = 'WORKPLAN'
674 and structure_version_id is null;
675
676 l_cycle_type varchar2(30);
677 l_value1 number;
678 cursor get_cycle_info is
679 Select Billing_Cycle_Type, Billing_Value1
680 From PA_Billing_Cycles
681 Where Billing_Cycle_ID = X_Billing_Cycle_ID;
682
683 begin
684
685
686 IF PA_PROGRESS_UTILS.project_id <> X_Project_ID OR i >= 10 then
687
688 -- Bug 3974627 Commented
689 --OPEN cur_pa_ppc;
690 --FETCH cur_pa_ppc INTO PA_PROGRESS_UTILS.l_last_progress_date;
691 --CLOSE cur_pa_ppc;
692 -- 4535784 Begin
693 -- To Show 30 dates in case rollup records exists after 5 cycle dates
694 -- 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)
695 -- So we need to get 60 rows for 30 dates
696 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
697 j_task := 0;
698 g_task_id := x_object_id;
699 OPEN c_get_max_rollup_dt;
700 FETCH c_get_max_rollup_dt INTO g_max_rollup_dt;
701 CLOSE c_get_max_rollup_dt;
702 END IF;
703 -- 4535784 End
704 -- Bug 3974627 Begin
705 IF x_object_type IN ('PA_TASKS', 'PA_STRUCTURES') THEN
706 -- 4535784 Begin
707 j_task := j_task+1;
708 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
709 PA_PROGRESS_UTILS.l_last_progress_date := PA_PROGRESS_UTILS.x_bill_thru_date;
710 ELSE
711 IF j_task =1 THEN
712 OPEN cur_pa_ppc_str_task;
713 FETCH cur_pa_ppc_str_task INTO PA_PROGRESS_UTILS.l_last_progress_date;
714 CLOSE cur_pa_ppc_str_task;
715 ELSE
716 return null; -- This make sure that no extra processing is done when max date is reached
717 END IF;
718 END IF;
719 -- 4535784 End
720 ELSIF x_object_type = 'PA_ASSIGNMENTS' THEN
721 OPEN cur_pa_ppc_asgn;
722 FETCH cur_pa_ppc_asgn INTO PA_PROGRESS_UTILS.l_last_progress_date;
723 CLOSE cur_pa_ppc_asgn;
724 ELSIF x_object_type = 'PA_DELIVERABLES' THEN
725 OPEN cur_dlv_get_asso_task(x_object_id);
726 FETCH cur_dlv_get_asso_task INTO l_del_task_id;
727 CLOSE cur_dlv_get_asso_task;
728
729 if l_del_task_id is not null then
730 OPEN cur_pa_ppc_dlv_task(l_del_task_id);
731 FETCH cur_pa_ppc_dlv_task INTO PA_PROGRESS_UTILS.l_last_progress_date;
732 CLOSE cur_pa_ppc_dlv_task;
733 else
734 OPEN cur_pa_ppc_dlv_notask;
735 FETCH cur_pa_ppc_dlv_notask INTO PA_PROGRESS_UTILS.l_last_progress_date;
736 CLOSE cur_pa_ppc_dlv_notask;
737 end if;
738 END IF;
739 -- Bug 3974627 End
740
741
742 OPEN cur_pa_proj;
743 FETCH cur_pa_proj INTO X_project_start_date,X_project_finish_date;
744 CLOSE cur_pa_proj;
745
746 IF PA_PROGRESS_UTILS.l_last_progress_date IS NULL
747 THEN
748 -- PA_PROGRESS_UTILS.l_last_progress_date := NVL( X_project_start_date,TRUNC(SYSDATE));
749 PA_PROGRESS_UTILS.l_last_progress_date := TRUNC(SYSDATE)-1; --bug 2641630
750 END IF;
751
752 --- as of date to remain same if in future 5226910(5212999)
753 if (PA_PROGRESS_UTILS.l_last_progress_date >= trunc(sysdate)) then
754 open get_cycle_info;
755 fetch get_cycle_info into l_cycle_type, l_value1;
756 close get_cycle_info;
757 If l_Cycle_Type = 'BILLING CYCLE DAYS' Then
758 PA_PROGRESS_UTILS.l_Last_Bill_Thru_Date := PA_PROGRESS_UTILS.l_last_progress_date -l_value1;
759 else
760 PA_PROGRESS_UTILS.l_Last_Bill_Thru_Date := PA_PROGRESS_UTILS.l_last_progress_date -1;
761 End if;
762 else
763 PA_PROGRESS_UTILS.l_Last_Bill_Thru_Date := PA_PROGRESS_UTILS.l_last_progress_date;
764 end if;
765 END IF;
766 --- IF X_Billing_Cycle_ID IS NOT NULL
767 --- THEN
768
769 l_return_date := Get_AS_OF_DATE (
770 X_Project_ID => x_project_id
771 ,X_Project_Start_Date => PA_PROGRESS_UTILS.l_last_progress_date
772 ,X_Billing_Cycle_ID => X_Billing_Cycle_ID
773 ,X_Billing_Offset_Days => 0
774 ,X_Bill_Thru_Date => X_project_finish_date
775 ,X_Last_Bill_Thru_Date => PA_PROGRESS_UTILS.l_Last_Bill_Thru_Date
776 );
777 --- END IF;
778 i := i + 1;
779
780 RETURN ( l_return_date );
781
782 end as_of_date;
783
784 FUNCTION get_next_ppc_id RETURN NUMBER IS
785 l_return_ppc_id NUMBER;
786 BEGIN
787 select PA_PERCENT_COMPLETES_S.nextval
788 into l_return_ppc_id
789 from dual;
790
791 RETURN l_return_ppc_id;
792 END get_next_ppc_id;
793
794
795 -- FPM Development Bug 3420093 : Added p_object_type
796
797 FUNCTION CHECK_VALID_AS_OF_DATE(p_as_of_date IN DATE
798 , p_project_id IN NUMBER
799 , p_object_id NUMBER
800 , p_object_type VARCHAR2 := 'PA_TASKS'
801 , p_proj_element_id IN NUMBER := null /* Amit : Modified for IB4 Progress CR. */)
802 RETURN VARCHAR2 IS
803
804
805 -- CURSOR as_of_dates_csr
806 -- IS
807 -- SELECT 'Y'
808 -- FROM DUAL
809 -- WHERE trunc(p_as_of_date) IN
810 -- (SELECT trunc(as_of_date)
811 -- FROM PA_PROG_AS_OF_DATES
812 -- WHERE project_id = p_project_id
813 -- AND proj_element_id = p_object_id
814 -- AND object_id = p_object_id
815 -- AND object_type = p_object_type
816 -- AND rownum < 11);
817
818 -- l_dummy VARCHAR2(1);
819 l_dummy Date ; -- For performance improvement used Minus operator
820
821 /* -- FPM Dev CR 3
822 CURSOR as_of_dates_csr
823 IS
824 SELECT trunc(p_as_of_date) FROM DUAL
825 MINUS
826 SELECT
827 trunc(as_of_date)
828 FROM PA_PROG_AS_OF_DATES
829 WHERE project_id = p_project_id
830 -- AND proj_element_id = p_object_id
831 AND object_id = p_object_id
832 AND object_type = p_object_type
833 AND rownum < 11;*/
834
835 -- FPM Dev CR 3 : Added two new cursors. Now we are not relying on pa_prog_as_of_dates view.
836 CURSOR as_of_dates_task_dlvr_csr
837 IS
838 SELECT trunc(p_as_of_date) FROM DUAL
839 MINUS
840 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
841 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
842 where ppe.project_id = ppp.project_id(+)
843 AND ppp.structure_type (+) = 'WORKPLAN'
844 and ppe.project_id= p_project_id
845 and ppe.proj_element_id = p_object_id
846 and ppe.object_type = p_object_type
847 and ((ppe.object_type in ('PA_TASKS', 'PA_STRUCTURES') and rownum <61) or (ppe.object_type = 'PA_DELIVERABLES' and rownum <11)) -- Bug 4535784
848 --and rownum <11
849 ;
850
851
852 /* Modified for IB4 Progress CR. */
853
854 CURSOR as_of_dates_assgn_csr
855 IS
856 SELECT trunc(p_as_of_date) FROM DUAL
857 MINUS
858 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
859 from pa_resource_types po, pa_proj_progress_attr ppp, PA_TASK_ASSIGNMENTS_V ppe
860 where ppe.project_id = ppp.project_id(+)
861 AND ppp.structure_type (+) = 'WORKPLAN'
862 and ppe.project_id= p_project_id
863 and ppe.resource_list_member_id = p_object_id /* Modified for IB4 Progress CR. */
864 and ppe.task_id = p_proj_element_id /* Amit : Modified for IB4 Progress CR. */
865 and rownum <11;
866
867 BEGIN
868 /* FPM Dev CR 3
869 OPEN as_of_dates_csr;
870 FETCH as_of_dates_csr INTO l_dummy;
871 -- if as_of_dates_csr%NOTFOUND then
872 ----my_error_msg( 'Project '||p_project_id);
873 ----my_error_msg( 'Invalid ');
874 -- return 'N';
875 --end if;
876 ------my_error_msg( 'Project '||p_project_id);
877 ------my_error_msg( 'valid ');
878 --return 'Y';
879 CLOSE as_of_dates_csr;
880 */
881 -- FPM Dev CR 3
882 IF p_object_type = 'PA_ASSIGNMENTS' THEN
883 OPEN as_of_dates_assgn_csr;
884 FETCH as_of_dates_assgn_csr INTO l_dummy;
885 CLOSE as_of_dates_assgn_csr;
886 ELSE
887 OPEN as_of_dates_task_dlvr_csr;
888 FETCH as_of_dates_task_dlvr_csr INTO l_dummy;
889 CLOSE as_of_dates_task_dlvr_csr;
890 END IF;
891
892 if l_dummy is null then
893 return 'Y';
894 else
895 return 'N';
896 end if;
897 END CHECK_VALID_AS_OF_DATE;
898
899 FUNCTION Calc_base_percent(
900 p_task_id NUMBER,
901 p_incr_work_qty NUMBER,
902 p_cuml_work_qty NUMBER,
903 p_est_remaining_effort NUMBER
904 ) RETURN NUMBER IS
905
906 /* Replacing this sql with the following sqls: for bug 2679612
907 CURSOR cur_pa_task_prg
908 IS
909 SELECT PLANNED_WORK_QUANTITY,
910 WQ_ACTUAL_ENTRY_CODE
911 FROM pa_latest_proj_task_prog_v
912 WHERE task_id = p_task_id;
913 */
914
915 --Bug fix 2679612
916 CURSOR cur_pa_task_prg1
917 IS
918 SELECT WQ_PLANNED_QUANTITY
919 FROM pa_proj_elements ppe,
920 pa_proj_element_versions ppev,
921 pa_proj_elem_ver_schedule ppevsh
922 WHERE ppe.project_id = ppev.project_id
923 AND ppe.proj_element_id = p_task_id
924 AND ppev.proj_element_id = ppe.proj_element_id
925 AND ppev.element_version_id = ppevsh.element_version_id
926 AND ppev.project_id = ppevsh.project_id
927 AND ppev.parent_structure_version_id = PA_PROJ_ELEMENTS_UTILS.latest_published_ver_id(ppe.project_id, 'WORKPLAN');
928
929 CURSOR cur_pa_task_prg2
930 IS
931 SELECT nvl(ppe.WQ_ACTUAL_ENTRY_CODE,ptt.ACTUAL_WQ_ENTRY_CODE)
932 FROM pa_proj_elements ppe, pa_task_types ptt
933 WHERE ppe.type_id = ptt.task_type_id(+)
934 AND ptt.object_type = 'PA_TASKS' /* bug 3279978 FP M Enhancement */
935 AND ppe.proj_element_id = p_task_id ;
936
937 --Bug fix 2679612
938
939
940 l_return_value NUMBER := 0;
941 l_WQ_ACTUAL_ENTRY_CODE VARCHAR2(30);
942 l_planned_work_quantity NUMBER;
943 l_last_cumulative_wrk_qty NUMBER;
944 BEGIN
945
946 OPEN cur_pa_task_prg1;
947 FETCH cur_pa_task_prg1 INTO l_planned_work_quantity;
948 CLOSE cur_pa_task_prg1;
949
950 -- Bug fix 2740446 cannot divide by 0
951 if (nvl(l_planned_work_quantity,0) = 0) then
952 return 0;
953 end if;
954
955 --Bug fix 2679612
956 OPEN cur_pa_task_prg2;
957 FETCH cur_pa_task_prg2 INTO l_WQ_ACTUAL_ENTRY_CODE;
958 CLOSE cur_pa_task_prg2;
959 --Bug fix 2679612
960
961
962 IF l_WQ_ACTUAL_ENTRY_CODE = 'CUMULATIVE'
963 THEN
964 l_return_value := ( ( NVL(p_cuml_work_qty,0)/l_planned_work_quantity ) * 100 );
965 ELSE
966
967 --bugfix :2670679
968 /* OPEN cur_cumltv;
969 FETCH cur_cumltv INTO l_last_cumulative_wrk_qty;
970 if cur_cumltv%notfound then
971 l_last_cumulative_wrk_qty := 0;
972 end if;
973 CLOSE cur_cumltv;
974 l_return_value := ( ( ( l_last_cumulative_wrk_qty + p_incr_work_qty ) /l_planned_work_quantity) * 100 );
975 */
976 l_return_value := ( ( ( NVL(p_cuml_work_qty,0) + NVL(p_incr_work_qty,0) ) /l_planned_work_quantity) * 100 );
977 END IF;
978 if l_return_value > 100 then
979 return 100;
980 else
981 return nvl(l_return_value,0);
982 end if;
983 END Calc_base_percent;
984
985 -- 4392189 Phase 2: This method is not used anywhere
986 /*
987 PROCEDURE get_rollup_attrs(
988 p_task_id NUMBER,
989 p_as_of_date DATE,
990 x_EFF_ROLLUP_PROG_STAT_CODE OUT VARCHAR2,
991 x_EFF_ROLLUP_PROG_STAT_NAME OUT VARCHAR2,
992 x_ESTIMATED_REMAINING_EFFORT OUT NUMBER,
993 x_BASE_PERCENT_COMPLETE OUT NUMBER,
994 x_EFF_ROLLUP_PERCENT_COMP OUT NUMBER,
995 x_ESTIMATED_START_DATE OUT DATE,
996 x_ESTIMATED_FINISH_DATE OUT DATE,
997 x_ACTUAL_START_DATE OUT DATE,
998 x_ACTUAL_FINISH_DATE OUT DATE,
999 x_status_icon_ind OUT VARCHAR2,
1000 x_status_icon_active_ind OUT VARCHAR2
1001 ) IS
1002
1003
1004 --Added for performance improvements bug 2679612
1005 CURSOR cur_proj_elem
1006 IS
1007 SELECT project_id
1008 FROM pa_proj_elements
1009 WHERE proj_element_id = p_task_id;
1010 l_project_id NUMBER;
1011 --Added for performance improvements bug 2679612
1012
1013 CURSOR cur_pa_prg_rollup( c_project_id NUMBER )
1014 IS
1015 SELECT EFF_ROLLUP_PROG_STAT_CODE,
1016 pps.project_status_name,
1017 ESTIMATED_REMAINING_EFFORT,
1018 BASE_PERCENT_COMPLETE, EFF_ROLLUP_PERCENT_COMP,
1019 ESTIMATED_START_DATE, ESTIMATED_FINISH_DATE,
1020 ACTUAL_START_DATE, ACTUAL_FINISH_DATE,
1021 pps.status_icon_ind, pps.status_icon_active_ind
1022 FROM pa_progress_rollup ppr, pa_project_statuses pps
1023 WHERE object_id = p_task_id
1024 AND project_id = l_project_id
1025 AND ppr.eff_rollup_prog_stat_code = pps.project_status_code(+)
1026 AND as_of_date = ( SELECT max( as_of_date ) from pa_progress_rollup
1027 WHERE object_id = p_task_id and as_of_date <= p_as_of_date
1028 AND project_id = l_project_id );
1029 BEGIN
1030 --Added for performance improvements bug 2679612
1031 OPEN cur_proj_elem;
1032 FETCH cur_proj_elem INTO l_project_id;
1033 CLOSE cur_proj_elem;
1034 --Added for performance improvements bug 2679612
1035
1036 OPEN cur_pa_prg_rollup(l_project_id);
1037 FETCH cur_pa_prg_rollup INTO x_EFF_ROLLUP_PROG_STAT_CODE, x_EFF_ROLLUP_PROG_STAT_NAME,
1038 x_ESTIMATED_REMAINING_EFFORT,
1039 x_BASE_PERCENT_COMPLETE, x_EFF_ROLLUP_PERCENT_COMP,
1040 x_ESTIMATED_START_DATE, x_ESTIMATED_FINISH_DATE,
1041 x_ACTUAL_START_DATE, x_ACTUAL_FINISH_DATE,
1042 x_status_icon_ind, x_status_icon_active_ind;
1043 ----my_error_msg( 'x_BASE_PERCENT_COMPLETE '|| x_BASE_PERCENT_COMPLETE );
1044 ----my_error_msg( 'x_EFF_ROLLUP_PERCENT_COMP '||x_EFF_ROLLUP_PERCENT_COMP );
1045
1046 CLOSE cur_pa_prg_rollup;
1047
1048 END get_rollup_attrs;
1049 */
1050 FUNCTION get_next_progress_cycle(
1051 p_project_id NUMBER,
1052 p_task_id NUMBER,
1053 p_object_id NUMBER := null, -- FPM Development Bug 3420093
1054 p_object_type VARCHAR2 := 'PA_TASKS', -- FPM Development Bug 3420093
1055 p_structure_type VARCHAR2 := 'WORKPLAN', -- FPM Development Bug 3420093
1056 p_start_date DATE := to_date(null) -- FPM Development Bug 3420093
1057 ) RETURN DATE IS
1058
1059 /* Bug 3974627 : Commnted and added new cusrosrs
1060 CURSOR cur_pa_ppc
1061 IS
1062 SELECT max( date_computed )
1063 FROM pa_percent_completes
1064 WHERE project_id = p_Project_ID
1065 AND object_id = decode(p_object_id, null, p_task_id, p_object_id) -- This is done to avoid any impact of parameter additions
1066 AND current_flag = 'Y'
1067 AND published_flag = 'Y'
1068 AND object_type = p_object_type
1069 AND structure_type = p_structure_type
1070 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))
1071 ;
1072 */
1073
1074 -- Bug 3974627 : Added Cursors cur_pa_ppc_str_task, cur_pa_ppc_asgn, cur_pa_ppc_dlv
1075 CURSOR cur_pa_ppc_str_task
1076 IS
1077 SELECT max( date_computed )
1078 FROM pa_percent_completes
1079 WHERE project_id = p_Project_ID
1080 AND object_id = decode(p_object_id, null, p_task_id, p_object_id)
1081 AND current_flag = 'Y'
1082 AND published_flag = 'Y'
1083 AND object_type = p_object_type
1084 AND structure_type = p_structure_type
1085 AND task_id = NVL(p_task_id,p_object_id)
1086 ;
1087
1088 CURSOR cur_pa_ppc_asgn
1089 IS
1090 SELECT max( date_computed )
1091 FROM pa_percent_completes
1092 WHERE project_id = p_Project_ID
1093 AND current_flag = 'Y'
1094 AND published_flag = 'Y'
1095 AND object_type IN ('PA_ASSIGNMENTS' ,'PA_TASKS')
1096 AND structure_type = p_structure_type
1097 AND task_id = p_task_id
1098 ;
1099
1100 CURSOR cur_dlv_get_asso_task(c_del_elem_id NUMBER)
1101 IS
1102 SELECT por.object_id_from2
1103 FROM pa_object_relationships por
1104 WHERE
1105 por.object_type_to = 'PA_DELIVERABLES'
1106 AND por.relationship_subtype IN ('STRUCTURE_TO_DELIVERABLE', 'TASK_TO_DELIVERABLE')
1107 AND por.relationship_type = 'A'
1108 AND por.object_id_to2 = c_del_elem_id
1109 ;
1110 l_del_task_id NUMBER;
1111
1112 CURSOR cur_pa_ppc_dlv(c_task_id NUMBER)
1113 IS
1114 SELECT max( date_computed )
1115 FROM pa_percent_completes
1116 WHERE project_id = p_Project_ID
1117 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)))
1118 AND current_flag = 'Y'
1119 AND published_flag = 'Y'
1120 AND object_type IN ('PA_DELIVERABLES' ,'PA_TASKS')
1121 AND structure_type = p_structure_type
1122 AND NVL(task_id, -1) = NVL(p_task_id, NVL(task_id, -1))
1123 ;
1124
1125
1126 CURSOR cur_pa_proj_prg_attr
1127 IS
1128 SELECT progress_cycle_id
1129 FROM pa_proj_progress_attr
1130 WHERE project_id = p_project_id
1131 AND structure_type = p_structure_type;
1132
1133 CURSOR cur_pa_proj
1134 IS
1135 SELECT start_date, completion_date
1136 FROM pa_projects_all
1137 WHERE project_id = p_project_id;
1138
1139
1140 l_last_progress_date DATE;
1141 l_progress_cycle_id NUMBER;
1142 l_return_date DATE;
1143
1144 l_proj_finish_date DATE;
1145 l_proj_start_date DATE;
1146
1147 l_cycle_type varchar2(30);
1148 l_value1 number;
1149 cursor get_cycle_info is
1150 Select Billing_Cycle_Type, Billing_Value1
1151 From PA_Billing_Cycles
1152 Where Billing_Cycle_ID = l_progress_cycle_id;
1153
1154 BEGIN
1155 ---5226910(5212999)
1156 OPEN cur_pa_proj_prg_attr;
1157 FETCH cur_pa_proj_prg_attr INTO l_progress_cycle_id;
1158 CLOSE cur_pa_proj_prg_attr;
1159
1160 if (p_start_date is null) then
1161 OPEN cur_pa_proj;
1162 FETCH cur_pa_proj INTO l_proj_start_date, l_proj_finish_date;
1163 CLOSE cur_pa_proj;
1164
1165 -- Bug 3974627 Commented
1166 --OPEN cur_pa_ppc;
1167 --FETCH cur_pa_ppc INTO l_last_progress_date;
1168 --CLOSE cur_pa_ppc;
1169
1170 -- Bug 3974627 Begin
1171 IF p_object_type IN ('PA_TASKS', 'PA_STRUCTURES') THEN
1172 OPEN cur_pa_ppc_str_task;
1173 FETCH cur_pa_ppc_str_task INTO l_last_progress_date;
1174 CLOSE cur_pa_ppc_str_task;
1175 ELSIF p_object_type = 'PA_ASSIGNMENTS' THEN
1176 OPEN cur_pa_ppc_asgn;
1177 FETCH cur_pa_ppc_asgn INTO l_last_progress_date;
1178 CLOSE cur_pa_ppc_asgn;
1179 ELSIF p_object_type = 'PA_DELIVERABLES' THEN
1180 OPEN cur_dlv_get_asso_task(p_object_id);
1181 FETCH cur_dlv_get_asso_task INTO l_del_task_id;
1182 CLOSE cur_dlv_get_asso_task;
1183
1184 OPEN cur_pa_ppc_dlv(l_del_task_id);
1185 FETCH cur_pa_ppc_dlv INTO l_last_progress_date;
1186 CLOSE cur_pa_ppc_dlv;
1187 END IF;
1188 -- Bug 3974627 End
1189
1190 IF l_last_progress_date IS NULL
1191 THEN
1192 ----l_last_progress_date := NVL( l_proj_start_date, TRUNC(SYSDATE) );
1193 l_last_progress_date := TRUNC(SYSDATE)-1;
1194 END IF;
1195
1196 --- as of date to remain same if in future 5226910 (5212999)
1197 if (l_last_progress_date >= trunc(sysdate)) then
1198 open get_cycle_info;
1199 fetch get_cycle_info into l_cycle_type, l_value1;
1200 close get_cycle_info;
1201 If l_Cycle_Type = 'BILLING CYCLE DAYS' Then
1202 l_last_progress_date := l_last_progress_date -l_value1;
1203 else
1204 l_last_progress_date := l_last_progress_date -1;
1205 end if;
1206 else
1207 l_last_progress_date := l_last_progress_date;
1208 end if;
1209 else
1210 l_last_progress_date := p_start_date;
1211 end if;
1212
1213 OPEN cur_pa_proj_prg_attr;
1214 FETCH cur_pa_proj_prg_attr INTO l_progress_cycle_id;
1215 CLOSE cur_pa_proj_prg_attr;
1216
1217 if (l_progress_cycle_id is not null) then
1218 l_return_date := PA_Billing_Cycles_Pkg.Get_Next_Billing_Date
1219 (X_Project_ID => p_Project_ID,
1220 X_Project_Start_Date => l_last_progress_date,
1221 X_Billing_Cycle_ID => l_progress_cycle_id,
1222 X_Billing_Offset_Days => 0,
1223 X_Bill_Thru_Date => l_proj_finish_date,
1224 X_Last_Bill_Thru_Date => l_last_progress_date );
1225 else
1226 l_return_date := l_last_progress_date + 1;
1227 end if;
1228
1229 RETURN ( l_return_date );
1230 END get_next_progress_cycle;
1231
1232
1233
1234 FUNCTION get_prog_dt_closest_to_sys_dt(
1235 p_project_id NUMBER,
1236 p_task_id NUMBER, -- From deliverables it will be passed as null
1237 p_object_id NUMBER := null, -- FPM Development Bug 3420093
1238 p_object_type VARCHAR2 := 'PA_TASKS', -- FPM Development Bug 3420093
1239 p_structure_type VARCHAR2 := 'WORKPLAN'
1240 ) RETURN DATE IS
1241 l_last_progress_date DATE;
1242 l_progress_cycle_id NUMBER;
1243 l_return_date DATE;
1244 l_next_progress_date DATE;
1245 l_dates_array PA_VC_1000_10 := PA_VC_1000_10(1000);
1246 l_previous_date_index NUMBER;
1247 l_next_date_index NUMBER;
1248 l_prev_diff NUMBER;
1249 l_next_diff NUMBER;
1250 l_closest_date DATE;
1251 l_date_index NUMBER;
1252
1253
1254 CURSOR cur_pa_proj
1255 IS
1256 SELECT start_date, completion_date
1257 FROM pa_projects_all
1258 WHERE project_id = p_project_id;
1259
1260 -- Bug 3974627 : Commented this cursor and added new ones
1261 /*
1262 CURSOR cur_pa_ppc
1263 IS
1264 SELECT max( date_computed )
1265 FROM pa_percent_completes
1266 WHERE project_id = p_Project_ID
1267 -- AND object_id = p_task_id
1268 AND object_id = decode(p_object_id, null, p_task_id, p_object_id) -- This is Done to avoid the impact
1269 AND object_type = p_object_type
1270 AND current_flag = 'Y'
1271 AND published_flag = 'Y'
1272 AND structure_type = p_structure_type
1273 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))
1274 --and task_id = p_task_id
1275 ;
1276 */
1277
1278 -- Bug 3974627 : Added Cursors cur_pa_ppc_str_task, cur_pa_ppc_asgn, cur_pa_ppc_dlv
1279 CURSOR cur_pa_ppc_str_task
1280 IS
1281 SELECT max( date_computed )
1282 FROM pa_percent_completes
1283 WHERE project_id = p_Project_ID
1284 AND object_id = decode(p_object_id, null, p_task_id, p_object_id)
1285 AND current_flag = 'Y'
1286 AND published_flag = 'Y'
1287 AND object_type = p_object_type
1288 AND structure_type = p_structure_type
1289 AND task_id = NVL(p_task_id,p_object_id)
1290 ;
1291
1292 CURSOR cur_pa_ppc_asgn
1293 IS
1294 SELECT max( date_computed )
1295 FROM pa_percent_completes
1296 WHERE project_id = p_Project_ID
1297 AND current_flag = 'Y'
1298 AND published_flag = 'Y'
1299 AND ((object_type = 'PA_ASSIGNMENTS' and object_id = p_object_id)
1300 or (object_type = 'PA_TASKS' and object_id = p_task_id))
1301 AND structure_type = p_structure_type
1302 AND task_id = p_task_id
1303 ;
1304
1305 CURSOR cur_dlv_get_asso_task(c_del_elem_id NUMBER)
1306 IS
1307 SELECT por.object_id_from2
1308 FROM pa_object_relationships por
1309 WHERE
1310 por.object_type_to = 'PA_DELIVERABLES'
1311 AND por.relationship_subtype IN ('STRUCTURE_TO_DELIVERABLE', 'TASK_TO_DELIVERABLE')
1312 AND por.relationship_type = 'A'
1313 AND por.object_id_to2 = c_del_elem_id
1314 ;
1315 l_del_task_id NUMBER;
1316
1317 CURSOR cur_pa_ppc_dlv_notask
1318 IS
1319 SELECT max( date_computed )
1320 FROM pa_percent_completes
1321 WHERE project_id = p_Project_ID
1322 AND object_id = p_object_id
1323 AND current_flag = 'Y'
1324 AND published_flag = 'Y'
1325 AND object_type = 'PA_DELIVERABLES'
1326 AND structure_type = p_structure_type
1327 AND NVL(task_id, -1) = NVL(p_task_id, NVL(task_id, -1))
1328 ;
1329
1330 CURSOR cur_pa_ppc_dlv_task(c_task_id NUMBER)
1331 IS
1332 SELECT max( date_computed )
1333 FROM pa_percent_completes
1334 WHERE project_id = p_Project_ID
1335 AND ((object_id = p_object_id and object_type = 'PA_DELIVERABLES') or
1336 (object_id = p_task_id and object_type = 'PA_TASKS'))
1337 AND current_flag = 'Y'
1338 AND published_flag = 'Y'
1339 AND structure_type = p_structure_type
1340 ;
1341 CURSOR cur_pa_ppc_w
1342 IS
1343 SELECT max( date_computed )
1344 FROM pa_percent_completes
1345 WHERE project_id = p_Project_ID
1346 -- AND object_id = p_task_id
1347 AND object_id = decode(p_object_id, null, p_task_id, p_object_id) -- This is Done to avoid the impact
1348 AND object_type = p_object_type
1349 AND current_flag = 'N'
1350 AND published_flag = 'N'
1351 AND structure_type = p_structure_type
1352 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. */
1353 --and task_id = p_task_id /* Modified for IB4 Progress CR. */;
1354 ;
1355
1356 CURSOR cur_pa_proj_prg_attr
1357 IS
1358 SELECT progress_cycle_id
1359 FROM pa_proj_progress_attr
1360 WHERE project_id = p_project_id
1361 AND structure_type = p_structure_type;
1362
1363 l_proj_finish_date DATE;
1364 l_proj_start_date DATE;
1365 l_valid_as_of_date varchar2(1);
1366
1367 l_cycle_type varchar2(30);
1368 l_value1 number;
1369 cursor get_cycle_info is
1370 Select Billing_Cycle_Type, Billing_Value1
1371 From PA_Billing_Cycles
1372 Where Billing_Cycle_ID = l_progress_cycle_id;
1373
1374 BEGIN
1375 OPEN cur_pa_proj;
1376 FETCH cur_pa_proj INTO l_proj_start_date, l_proj_finish_date;
1377 CLOSE cur_pa_proj;
1378
1379 OPEN cur_pa_ppc_w;
1380 FETCH cur_pa_ppc_w INTO l_last_progress_date;
1381 CLOSE cur_pa_ppc_w;
1382
1383 IF p_object_type = 'PA_TASKS' THEN -- This is Done to avoid the impact
1384 l_valid_as_of_date := CHECK_VALID_AS_OF_DATE ( l_last_progress_date, p_project_id, p_task_id);
1385 ELSE
1386 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. */ );
1387 END IF;
1388
1389
1390
1391 if (l_last_progress_date is not null) then
1392 IF l_valid_as_of_date = 'Y'
1393 THEN
1394 return l_last_progress_date;
1395 --if the there is working version and the progress cycle id is cahnegd then return the next valid date.
1396 --we do not need to write any else here.
1397 END IF;
1398 end if;
1399
1400 -- Bug 3974627 : Commented
1401 --OPEN cur_pa_ppc;
1402 --FETCH cur_pa_ppc INTO l_last_progress_date;
1403 --CLOSE cur_pa_ppc;
1404
1405 -- Bug 3974627 Begin
1406 IF p_object_type IN ('PA_TASKS', 'PA_STRUCTURES') THEN
1407 OPEN cur_pa_ppc_str_task;
1408 FETCH cur_pa_ppc_str_task INTO l_last_progress_date;
1409 CLOSE cur_pa_ppc_str_task;
1410 ELSIF p_object_type = 'PA_ASSIGNMENTS' THEN
1411 OPEN cur_pa_ppc_asgn;
1412 FETCH cur_pa_ppc_asgn INTO l_last_progress_date;
1413 CLOSE cur_pa_ppc_asgn;
1414 ELSIF p_object_type = 'PA_DELIVERABLES' THEN
1415 OPEN cur_dlv_get_asso_task(p_object_id);
1416 FETCH cur_dlv_get_asso_task INTO l_del_task_id;
1417 CLOSE cur_dlv_get_asso_task;
1418
1419 if l_del_task_id is not null then
1420 OPEN cur_pa_ppc_dlv_task(l_del_task_id);
1421 FETCH cur_pa_ppc_dlv_task INTO l_last_progress_date;
1422 CLOSE cur_pa_ppc_dlv_task;
1423 else
1424 OPEN cur_pa_ppc_dlv_notask;
1425 FETCH cur_pa_ppc_dlv_notask INTO l_last_progress_date;
1426 CLOSE cur_pa_ppc_dlv_notask;
1427 end if;
1428 END IF;
1429 -- Bug 3974627 End
1430
1431 IF l_last_progress_date IS NULL
1432 THEN
1433 l_last_progress_date := trunc(sysdate)-1; -----NVL( l_proj_start_date, TRUNC(SYSDATE) );
1434 END IF;
1435
1436 --------my_error_msg( 'l_last_progress_date '|| l_last_progress_date );
1437
1438 OPEN cur_pa_proj_prg_attr;
1439 FETCH cur_pa_proj_prg_attr INTO l_progress_cycle_id;
1440 CLOSE cur_pa_proj_prg_attr;
1441
1442 --- as of date to remain same if in future 5212999
1443 if (l_last_progress_date >= trunc(sysdate)) then
1444 open get_cycle_info;
1445 fetch get_cycle_info into l_cycle_type, l_value1;
1446 close get_cycle_info;
1447 If l_Cycle_Type = 'BILLING CYCLE DAYS' Then
1448 l_last_progress_date := l_last_progress_date -l_value1;
1449 else
1450 l_next_progress_date := l_last_progress_date -1;
1451 end if;
1452 else
1453 l_next_progress_date := l_last_progress_date;
1454 end if;
1455 IF l_progress_cycle_id IS NULL
1456 THEN
1457 RETURN l_last_progress_date + 1;
1458 END IF;
1459
1460 WHILE NVL( l_return_date, SYSDATE ) <= SYSDATE
1461 LOOP
1462 l_return_date := PA_Billing_Cycles_Pkg.Get_Next_Billing_Date
1463 (X_Project_ID => p_Project_ID,
1464 X_Project_Start_Date => l_last_progress_date,
1465 X_Billing_Cycle_ID => l_progress_cycle_id,
1466 X_Billing_Offset_Days => 0,
1467 X_Bill_Thru_Date => l_proj_finish_date,
1468 X_Last_Bill_Thru_Date => l_next_progress_date );
1469
1470 l_date_index := NVL( l_date_index, 0 ) + 1;
1471
1472 l_dates_array.extend(1);
1473 l_dates_array(l_date_index) := to_char(l_return_date, 'MM-DD-RR');
1474
1475 l_next_progress_date := l_return_date;
1476
1477 IF l_date_index >= 999 -- Bug 3795916, changed from 1000 to 999
1478 THEN
1479 exit;
1480 END IF;
1481
1482 END LOOP;
1483
1484 -- FOR i in 1..1000 LOOP Modified for bug 3795916
1485 FOR i in l_dates_array.FIRST..l_dates_array.LAST LOOP
1486 IF to_date( l_dates_array(i), 'MM-DD-RR' ) >= TRUNC(SYSDATE) -- Added trunc for bug 3795916
1487 THEN
1488 IF i > 1
1489 THEN
1490 l_previous_date_index := i - 1;
1491 ELSE
1492 l_previous_date_index := i;
1493 END IF;
1494 l_next_date_index := i;
1495 exit;
1496 END IF;
1497 END LOOP;
1498
1499 l_prev_diff := SYSDATE - to_date( l_dates_array(l_previous_date_index), 'MM-DD-RR' );
1500 l_next_diff := to_date( l_dates_array(l_next_date_index), 'MM-DD-RR' ) - SYSDATE;
1501
1502 IF l_prev_diff < l_next_diff
1503 THEN
1504 l_closest_date := to_date( l_dates_array(l_previous_date_index), 'MM-DD-RR' );
1505 ELSE
1506 l_closest_date := to_date( l_dates_array(l_next_date_index), 'MM-DD-RR' );
1507 END IF;
1508
1509 RETURN ( l_closest_date );
1510
1511 END get_prog_dt_closest_to_sys_dt;
1512
1513 --aod --as of date
1514 --This function returns 'N' if there does not exists any progress
1515 --on passed as_of_date otherwise it
1516 --will return 'WORKING' or 'PUBLISHED' progress depending on the
1517 --publish flag.
1518 FUNCTION check_prog_exists_on_aod(
1519 p_project_id NUMBER,
1520 p_object_type VARCHAR2,
1521 p_object_version_id NUMBER,
1522 p_task_id NUMBER := null/* Amit : Modified for IB4 Progress CR. */ ,
1523 p_as_of_date DATE,
1524 p_structure_type VARCHAR2 := 'WORKPLAN' -- FPM Development Bug 3420093
1525 ,p_object_id NUMBER := null /* Modified for IB4 Progress CR. */
1526 ) RETURN VARCHAR2 IS
1527
1528 CURSOR cur_ppc
1529 IS
1530 SELECT decode( published_flag, 'Y', 'PUBLISHED', 'N', 'WORKING' )
1531 FROM pa_percent_completes
1532 WHERE object_id = nvl(p_object_id, p_task_id) /* Modified for IB4 Progress CR. */
1533 AND object_type = p_object_type
1534 AND project_id = p_project_id
1535 AND date_computed = p_as_of_date
1536 AND structure_type = p_structure_type
1537 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. */
1538 order by published_flag; --bug 4185364
1539 l_return_value VARCHAR2(15);
1540 BEGIN
1541 OPEN cur_ppc;
1542 FETCH cur_ppc INTO l_return_value;
1543 CLOSE cur_ppc;
1544 RETURN NVL( l_return_value, 'N' );
1545 END check_prog_exists_on_aod;
1546
1547 FUNCTION get_ppc_id(
1548 p_project_id NUMBER
1549 ,p_object_id NUMBER
1550 ,p_object_type VARCHAR2
1551 ,p_object_version_id NUMBER
1552 ,p_as_of_date DATE
1553 ,p_structure_type VARCHAR2 := 'WORKPLAN' -- FPM Development Bug 3420093
1554 ,p_task_id NUMBER := null /* Modified for IB4 Progress CR. */
1555 ) RETURN NUMBER IS
1556
1557 CURSOR cur_ppc_id
1558 IS
1559 SELECT percent_complete_id
1560 FROM pa_percent_completes
1561 WHERE object_type = p_object_type
1562 AND object_id = p_object_id
1563 AND project_id = p_project_id
1564 -- AND object_version_id = p_object_version_id
1565 AND date_computed = p_as_of_date
1566 AND structure_type = p_structure_type
1567 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. */
1568 --and task_id = nvl(p_task_id, p_object_id) /* Modified for IB4 Progress CR. */
1569 order by published_flag --bug 4185364
1570 ;
1571
1572 l_ppc_id NUMBER;
1573
1574 BEGIN
1575
1576 OPEN cur_ppc_id;
1577 FETCH cur_ppc_id INTO l_ppc_id;
1578 CLOSE cur_ppc_id;
1579
1580 RETURN l_ppc_id;
1581
1582 END get_ppc_id;
1583
1584 FUNCTION get_prog_rollup_id(
1585 p_project_id NUMBER
1586 ,p_object_id NUMBER
1587 ,p_object_type VARCHAR2
1588 ,p_object_version_id NUMBER
1589 ,p_as_of_date DATE
1590 ,p_structure_type VARCHAR2 := 'WORKPLAN' -- FPM Development Bug 3420093
1591 ,p_structure_version_id NUMBER := null -- FPM Development Bug 3420093
1592 ,x_record_version_number OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
1593 ,p_proj_element_id NUMBER := null /* Modified for IB4 Progress CR. */
1594 ,p_action VARCHAR2 := 'PUBLISH' -- Bug 3879461
1595 ) RETURN NUMBER
1596 IS
1597
1598 CURSOR cur_prog_rollup_id_pub_wp
1599 IS
1600 SELECT progress_rollup_id, record_version_number
1601 FROM pa_progress_rollup
1602 WHERE object_type = p_object_type
1603 AND object_id = p_object_id
1604 AND project_id = p_project_id
1605 -- AND object_version_id = p_object_version_id
1606 AND as_of_date = p_as_of_date
1607 AND structure_type = p_structure_type
1608 AND structure_version_id is null
1609 and ((p_action = 'SAVE' AND current_flag = 'W') OR (p_action = 'PUBLISH' AND current_flag IN ('Y', 'N'))) -- Bug 3879461
1610 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. */;
1611 --and proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
1612
1613
1614 CURSOR cur_prog_rollup_id_work_wp
1615 IS
1616 SELECT progress_rollup_id, record_version_number
1617 FROM pa_progress_rollup
1618 WHERE object_type = p_object_type
1619 AND object_id = p_object_id
1620 AND project_id = p_project_id
1621 AND structure_type = p_structure_type
1622 AND structure_version_id = p_structure_version_id
1623 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. */;
1624 --and proj_element_id = nvl(p_proj_element_id,p_object_id) /* Modified for IB4 Progress CR. */;
1625
1626 l_prog_rollup_id NUMBER;
1627
1628 BEGIN
1629
1630 IF p_structure_version_id is NULL THEN
1631 OPEN cur_prog_rollup_id_pub_wp;
1632 FETCH cur_prog_rollup_id_pub_wp INTO l_prog_rollup_id, x_record_version_number;
1633 CLOSE cur_prog_rollup_id_pub_wp;
1634 ELSE
1635 OPEN cur_prog_rollup_id_work_wp;
1636 FETCH cur_prog_rollup_id_work_wp INTO l_prog_rollup_id, x_record_version_number;
1637 CLOSE cur_prog_rollup_id_work_wp;
1638 END IF;
1639
1640 RETURN l_prog_rollup_id;
1641
1642 END get_prog_rollup_id;
1643
1644 FUNCTION check_task_has_progress(
1645 p_task_id NUMBER ) RETURN VARCHAR2 IS
1646
1647 --Added for performance improvements bug 2679612
1648 CURSOR cur_proj_elem
1649 IS
1650 SELECT project_id
1651 FROM pa_proj_elements
1652 WHERE proj_element_id = p_task_id;
1653 l_project_id NUMBER;
1654 --Added for performance improvements bug 2679612
1655
1656 CURSOR cur_pa_prog_exists(c_project_id NUMBER )
1657 IS
1658 SELECT 'X'
1659 FROM pa_percent_completes
1660 WHERE object_id = p_task_id
1661 AND project_id = c_project_id;
1662 l_dummy_char VARCHAR2(1);
1663 BEGIN
1664
1665 --Added for performance improvements bug 2679612
1666 OPEN cur_proj_elem;
1667 FETCH cur_proj_elem INTO l_project_id;
1668 CLOSE cur_proj_elem;
1669 --Added for performance improvements bug 2679612
1670
1671 OPEN cur_pa_prog_exists( l_project_id );
1672 FETCH cur_pa_prog_exists INTO l_dummy_char;
1673 IF cur_pa_prog_exists%FOUND
1674 THEN
1675 CLOSE cur_pa_prog_exists;
1676 RETURN 'Y';
1677 ELSE
1678 CLOSE cur_pa_prog_exists;
1679 RETURN 'N';
1680 END IF;
1681
1682 END check_task_has_progress;
1683
1684 -- FPM Dev CR 3 : This function is not used.
1685 FUNCTION get_last_cumulative(
1686 p_project_id NUMBER
1687 ,p_object_id NUMBER
1688 ,p_object_type VARCHAR2
1689 ,p_as_of_date DATE )
1690 RETURN NUMBER IS
1691 -- 4348710 : Added structure_type and structure_version_id joins
1692 CURSOR cur_cumla
1693 IS
1694 SELECT cumulative_work_quantity
1695 FROM pa_progress_rollup
1696 WHERE project_id = p_project_id
1697 AND object_id = p_object_id
1698 AND object_type = p_object_type
1699 AND structure_type = 'WORKPLAN'
1700 AND structure_version_id is null
1701 AND as_of_date = ( SELECT max( as_of_date )
1702 FROM pa_progress_rollup
1703 WHERE project_id = p_project_id
1704 AND object_id = p_object_id
1705 AND object_type = p_object_type
1706 AND as_of_date < p_as_of_date
1707 AND structure_type = 'WORKPLAN'
1708 AND structure_version_id is null
1709 );
1710
1711 l_cumulative_work_qty NUMBER;
1712 BEGIN
1713 OPEN cur_cumla;
1714 FETCH cur_cumla INTO l_cumulative_work_qty;
1715 CLOSE cur_cumla;
1716 RETURN NVL( l_cumulative_work_qty, 0 );
1717 END get_last_cumulative;
1718
1719 FUNCTION get_planned_wq(
1720 p_project_id NUMBER
1721 ,p_object_id NUMBER
1722 ,p_object_version_id NUMBER ) RETURN NUMBER IS
1723
1724 CURSOR cur_prj_sch
1725 IS
1726 SELECT NVL( wq_planned_quantity, 0 )
1727 FROM pa_proj_elem_ver_schedule
1728 WHERE project_id = p_project_id
1729 AND proj_element_id = p_object_id
1730 AND element_version_id = p_object_version_id;
1731 l_planned_qty NUMBER;
1732 BEGIN
1733 OPEN cur_prj_sch;
1734 FETCH cur_prj_sch INTO l_planned_qty;
1735 CLOSE cur_prj_sch;
1736 ----my_error_msg( 'p_object_version_id '|| p_object_version_id );
1737 ----my_error_msg( 'l_planned_qty '|| l_planned_qty );
1738 RETURN NVL( l_planned_qty, 0 );
1739 END get_planned_wq;
1740
1741 PROCEDURE clear_prog_outdated_flag(
1742 p_project_id NUMBER
1743 ,p_object_id NUMBER
1744 ,p_object_type VARCHAR2
1745 ,p_structure_version_id NUMBER default null --bug 3851528
1746 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1747 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
1748 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1749 ) IS
1750
1751 l_proj_element_id NUMBER;
1752
1753 BEGIN
1754 x_return_status := FND_API.G_RET_STS_SUCCESS;
1755
1756 IF p_structure_version_id IS NULL
1757 THEN
1758 IF p_object_type = 'PA_TASKS'
1759 THEN
1760 l_proj_element_id := p_object_id;
1761 UPDATE pa_proj_elements
1762 SET progress_outdated_flag = 'N'
1763 WHERE proj_element_id = l_proj_element_id;
1764 ELSIF p_object_type = 'PA_STRUCTURES'
1765 THEN
1766 UPDATE pa_proj_elements ppe
1767 SET progress_outdated_flag = 'N'
1768 WHERE proj_element_id = ( SELECT proj_element_id
1769 FROM pa_proj_structure_types ppst
1770 WHERE ppst.structure_type_id = 1 --WORKPLAN
1771 AND ppst.proj_element_id = ppe.proj_element_id )
1772 AND project_id = p_project_id;
1773 END IF;
1774 ELSIF p_structure_version_id IS NOT NULL
1775 THEN
1776 UPDATE pa_proj_elements
1777 SET progress_outdated_flag = 'N'
1778 WHERE proj_element_id in ( SELECT proj_element_id
1779 FROM pa_proj_element_versions
1780 WHERE project_id = p_project_id
1781 AND parent_structure_version_id = p_structure_version_id
1782 AND object_type in ( 'PA_STRUCTURES', 'PA_TASKS' ) )
1783 AND object_type in ( 'PA_STRUCTURES', 'PA_TASKS' )
1784 AND project_id = p_project_id
1785 ;
1786 END IF;
1787
1788 EXCEPTION
1789 WHEN FND_API.G_EXC_ERROR THEN
1790 x_return_status := FND_API.G_RET_STS_ERROR;
1791 WHEN OTHERS THEN
1792 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1793 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROGRESS_UTILS',
1794 p_procedure_name => 'clear_prog_outdated_flag',
1795 p_error_text => SUBSTRB(SQLERRM,1,120));
1796 x_msg_count := FND_MSG_PUB.count_msg;
1797 x_msg_data := SUBSTRB(SQLERRM,1,120) ; -- 4537865
1798 RAISE;
1799 END clear_prog_outdated_flag;
1800
1801
1802 -- FPM Development Bug 3420093
1803 PROCEDURE get_project_progress_defaults(
1804 p_project_id NUMBER
1805 ,p_structure_type IN VARCHAR2
1806 ,x_WQ_ENABLED_FLAG OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1807 ,x_EFFORT_ENABLED_FLAG OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1808 ,x_PERCENT_COMP_ENABLED_FLAG OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1809 ,x_task_weight_basis_code OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1810 ,X_ALLOW_COLLAB_PROG_ENTRY OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1811 ,X_ALLW_PHY_PRCNT_CMP_OVERRIDES OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1812 ) IS
1813
1814 CURSOR cur_prg_deflts
1815 IS
1816 SELECT
1817 WQ_ENABLE_FLAG,
1818 REMAIN_EFFORT_ENABLE_FLAG,
1819 PERCENT_COMP_ENABLE_FLAG,
1820 task_weight_basis_code,
1821 ALLOW_COLLAB_PROG_ENTRY,
1822 ALLOW_PHY_PRCNT_CMP_OVERRIDES
1823 FROM pa_proj_progress_attr
1824 WHERE project_id = p_project_id
1825 AND structure_type = p_structure_type;
1826
1827 BEGIN
1828 OPEN cur_prg_deflts;
1829 FETCH cur_prg_deflts INTO x_WQ_ENABLED_FLAG
1830 ,x_EFFORT_ENABLED_FLAG
1831 ,x_PERCENT_COMP_ENABLED_FLAG
1832 ,x_task_weight_basis_code
1833 ,X_ALLOW_COLLAB_PROG_ENTRY
1834 ,X_ALLW_PHY_PRCNT_CMP_OVERRIDES;
1835 CLOSE cur_prg_deflts;
1836
1837 -- 4537865
1838 EXCEPTION
1839 WHEN OTHERS THEN
1840
1841 x_WQ_ENABLED_FLAG := NULL ;
1842 x_EFFORT_ENABLED_FLAG := NULL ;
1843 x_PERCENT_COMP_ENABLED_FLAG := NULL ;
1844 x_task_weight_basis_code := NULL ;
1845 x_ALLOW_COLLAB_PROG_ENTRY := NULL ;
1846 x_ALLW_PHY_PRCNT_CMP_OVERRIDES := NULL ;
1847
1848 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROGRESS_UTILS',
1849 p_procedure_name => 'get_project_progress_defaults',
1850 p_error_text => SUBSTRB(SQLERRM,1,240));
1851 raise;
1852
1853 END get_project_progress_defaults;
1854
1855
1856 -- This API should be used to get the progress setup values at the project and task type level.
1857 -- This will not be used for deliverable type values
1858 PROCEDURE get_progress_defaults(
1859 p_project_id NUMBER
1860 ,p_object_version_id NUMBER
1861 ,p_object_type VARCHAR2
1862 ,p_object_id NUMBER
1863 ,p_as_of_date DATE
1864 ,p_structure_type VARCHAR2 := 'WORKPLAN' -- FPM Development Bug 3420093
1865 ,x_WQ_ACTUAL_ENTRY_CODE OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1866 ,x_WQ_ENABLED_FLAG OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1867 ,x_EFFORT_ENABLED_FLAG OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1868 ,x_BASE_PERCENT_COMP_DERIV_CODE OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1869 ,x_PERCENT_COMP_ENABLED_FLAG OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1870 ,X_PROGRESS_ENTRY_ENABLE_FLAG OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1871 ,X_ALLOW_COLLAB_PROG_ENTRY OUT NOCOPY VARCHAR2 -- FPM Development Bug 3420093 --File.Sql.39 bug 4440895
1872 ,X_ALLW_PHY_PRCNT_CMP_OVERRIDES OUT NOCOPY VARCHAR2 -- FPM Development Bug 3420093 --File.Sql.39 bug 4440895
1873 ,x_task_weight_basis_code OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1874 ) IS
1875
1876 /* replacing this sql with the following for bug 2679612
1877 CURSOR cur_prg_deflts
1878 IS
1879 SELECT WQ_ACTUAL_ENTRY_CODE, WQ_ENABLED_FLAG,
1880 EFFORT_ENABLED_FLAG, BASE_PERCENT_COMP_DERIV_CODE,
1881 PERCENT_COMP_ENABLED_FLAG, PROG_ENTRY_ENABLE_FLAG
1882 FROM PA_LATEST_proj_TASK_PROG_V
1883 WHERE project_id = p_project_id
1884 AND task_id = p_object_id
1885 AND object_type = p_object_type
1886 ;
1887 --AND element_version_id = p_object_version_id
1888 --AND as_of_date = p_as_of_date;
1889 */
1890
1891 CURSOR cur_prg_deflts
1892 IS
1893 SELECT
1894 nvl(ppe.WQ_ACTUAL_ENTRY_CODE,ptt.ACTUAL_WQ_ENTRY_CODE),
1895 decode(ppe.object_type,'PA_STRUCTURES',pppa.WQ_ENABLE_FLAG,
1896 decode(ptt.WQ_ENABLE_FLAG, 'Y', decode(pppa.WQ_ENABLE_FLAG, 'Y', 'Y', 'N'), 'N')),
1897 decode(ppe.object_type,'PA_STRUCTURES',pppa.REMAIN_EFFORT_ENABLE_FLAG,
1898 decode(ptt.REMAIN_EFFORT_ENABLE_FLAG, 'Y', decode(pppa.REMAIN_EFFORT_ENABLE_FLAG, 'Y', 'Y', 'N'), 'N')),
1899 NVL( ppe.base_percent_comp_deriv_code, ptt.base_percent_comp_deriv_code),
1900 decode(ppe.object_type,'PA_STRUCTURES',pppa.PERCENT_COMP_ENABLE_FLAG,
1901 decode(ptt.PERCENT_COMP_ENABLE_FLAG, 'Y', decode(pppa.PERCENT_COMP_ENABLE_FLAG, 'Y', 'Y','N'), 'N')),
1902 decode(ppe.object_type,'PA_TASKS',ptt.PROG_ENTRY_ENABLE_FLAG,'Y'),
1903 pppa.ALLOW_COLLAB_PROG_ENTRY,
1904 pppa.ALLOW_PHY_PRCNT_CMP_OVERRIDES,
1905 pppa.TASK_WEIGHT_BASIS_CODE
1906 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
1907 WHERE ppe.project_id = p_project_id
1908 AND ppe.proj_element_id = p_object_id
1909 AND ppe.object_type = p_object_type
1910 AND ppe.type_id = ptt.task_type_id(+)
1911 AND ppvs.project_id = pppa.project_id(+)
1912 AND pppa.structure_type = p_structure_type
1913 AND ppe.project_id = ppvs.project_id
1914 AND ppvs.latest_eff_published_flag = 'Y'
1915 AND ppvs.proj_element_id = pppa.object_id(+)
1916 AND ppvs.proj_element_id = ppst.proj_element_id
1917 AND ptt.object_type(+) = 'PA_TASKS' /* bug 3279978 FP M Enhancement */ --bug 4330450 added outer join
1918 AND ppst.structure_type_id =1;
1919
1920 BEGIN
1921 OPEN cur_prg_deflts;
1922 FETCH cur_prg_deflts INTO x_WQ_ACTUAL_ENTRY_CODE
1923 ,x_WQ_ENABLED_FLAG
1924 ,x_EFFORT_ENABLED_FLAG
1925 ,x_BASE_PERCENT_COMP_DERIV_CODE
1926 ,x_PERCENT_COMP_ENABLED_FLAG
1927 ,X_PROGRESS_ENTRY_ENABLE_FLAG
1928 ,X_ALLOW_COLLAB_PROG_ENTRY
1929 ,X_ALLW_PHY_PRCNT_CMP_OVERRIDES
1930 ,x_task_weight_basis_code
1931 ;
1932 CLOSE cur_prg_deflts;
1933
1934 /*x_WQ_ACTUAL_ENTRY_CODE := 'INCREMENTAL';
1935 x_WQ_ENABLED_FLAG := 'Y';
1936 x_EFFORT_ENABLED_FLAG := 'Y';
1937 -- x_BASE_PERCENT_COMP_DERIV_CODE
1938 x_PERCENT_COMP_ENABLED_FLAG := 'Y';*/
1939 -- 4537865
1940 EXCEPTION
1941 WHEN OTHERS THEN
1942 x_WQ_ENABLED_FLAG := NULL ;
1943 x_EFFORT_ENABLED_FLAG := NULL ;
1944 x_BASE_PERCENT_COMP_DERIV_CODE := NULL ;
1945 x_PERCENT_COMP_ENABLED_FLAG := NULL ;
1946 X_PROGRESS_ENTRY_ENABLE_FLAG := NULL ;
1947 X_ALLOW_COLLAB_PROG_ENTRY := NULL ;
1948 X_ALLW_PHY_PRCNT_CMP_OVERRIDES := NULL ;
1949 x_task_weight_basis_code := NULL ;
1950 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROGRESS_UTILS',
1951 p_procedure_name => 'get_progress_defaults',
1952 p_error_text => SUBSTRB(SQLERRM,1,240));
1953 raise;
1954 END get_progress_defaults;
1955
1956 FUNCTION chk_prg_since_last_prg(
1957 p_project_id NUMBER
1958 ,p_percent_complete_id NUMBER
1959 ,p_object_type VARCHAR2
1960 ,p_object_id NUMBER
1961 ,p_task_id NUMBER := null /* Modified for IB4 Progress CR. */
1962 ) RETURN VARCHAR2 IS
1963 BEGIN
1964
1965 IF Working_version_exist(
1966 p_task_id => p_task_id --nvl(p_task_id, p_object_id) /* Amit : Modified for IB4 Progress CR. */
1967 ,p_project_id => p_project_id
1968 ,p_object_type => p_object_type
1969 ,p_object_id => p_object_id /* Modified for IB4 Progress CR. */
1970 ) IS NOT NULL
1971 THEN
1972 RETURN 'Y';
1973 ELSE
1974 RETURN 'N';
1975 END IF;
1976
1977 END chk_prg_since_last_prg;
1978
1979 /*
1980 FUNCTION check_project_has_progress(
1981 p_project_id NUMBER ,
1982 p_object_id NUMBER) RETURN VARCHAR2 IS
1983 CURSOR cur_pa_prog_exists
1984 IS
1985 SELECT 'X'
1986 FROM pa_percent_completes
1987 WHERE project_id = p_project_id
1988 AND object_id = decode(nvl(p_object_id,0),0,object_id,p_object_id)
1989 AND object_type = 'PA_STRUCTURES'
1990 AND task_id = 0;
1991 l_dummy_char VARCHAR2(1);
1992 BEGIN
1993 OPEN cur_pa_prog_exists;
1994 FETCH cur_pa_prog_exists INTO l_dummy_char;
1995 IF cur_pa_prog_exists%FOUND
1996 THEN
1997 CLOSE cur_pa_prog_exists;
1998 RETURN 'Y';
1999 ELSE
2000 CLOSE cur_pa_prog_exists;
2001 RETURN 'N';
2002 END IF;
2003 END check_project_has_progress;
2004 */
2005
2006 FUNCTION check_project_has_progress(
2007 p_project_id NUMBER ,
2008 p_object_id NUMBER,
2009 p_structure_type VARCHAR2 := null) RETURN VARCHAR2 IS -- added a new parameter for the BUG 6903050
2010 CURSOR cur_pa_prog_exists
2011 IS
2012 SELECT 'X'
2013 FROM pa_percent_completes
2014 WHERE project_id = p_project_id
2015 AND object_id = decode(nvl(p_object_id,0),0,object_id,p_object_id)
2016 AND object_type = 'PA_STRUCTURES'
2017 AND task_id = 0;
2018
2019 CURSOR cur_pa_prog_exists_wp -- added a new cursor for the BUG 6903050
2020 IS
2021 SELECT 'X'
2022 FROM pa_percent_completes
2023 WHERE project_id = p_project_id
2024 AND object_id = decode(nvl(p_object_id,0),0,object_id,p_object_id)
2025 AND object_type = 'PA_STRUCTURES'
2026 AND task_id = 0
2027 AND STRUCTURE_TYPE = p_structure_type;
2028
2029 l_dummy_char VARCHAR2(1);
2030 BEGIN
2031
2032 IF (p_structure_type = 'WORKPLAN') -- added a new check for WORKPLAN for the BUG 6903050
2033 THEN
2034 OPEN cur_pa_prog_exists_wp;
2035 FETCH cur_pa_prog_exists_wp INTO l_dummy_char;
2036 IF cur_pa_prog_exists_wp%FOUND
2037 THEN
2038 CLOSE cur_pa_prog_exists_wp;
2039 RETURN 'Y';
2040 ELSE
2041 CLOSE cur_pa_prog_exists_wp;
2042 RETURN 'N';
2043 END IF;
2044
2045 ELSE
2046 OPEN cur_pa_prog_exists;
2047 FETCH cur_pa_prog_exists INTO l_dummy_char;
2048 IF cur_pa_prog_exists%FOUND
2049 THEN
2050 CLOSE cur_pa_prog_exists;
2051 RETURN 'Y';
2052 ELSE
2053 CLOSE cur_pa_prog_exists;
2054 RETURN 'N';
2055 END IF;
2056 END IF;
2057 END check_project_has_progress;
2058
2059 FUNCTION get_task_prog_profile(
2060 p_profile_name VARCHAR2 ) RETURN VARCHAR2
2061 IS
2062 BEGIN
2063 RETURN ( fnd_profile.value_specific(p_profile_name, fnd_global.user_id ) );
2064 END get_task_prog_profile;
2065
2066 -- this function is modified to return working record only upto the passed as of date
2067 FUNCTION Working_version_exist(
2068 p_task_id NUMBER := null /* Amit : Modified for IB4 Progress CR. */
2069 ,p_project_id NUMBER
2070 ,p_object_type VARCHAR2
2071 ,p_object_id NUMBER := null /* Modified for IB4 Progress CR. */
2072 ,p_as_of_date DATE := null -- bug 4185364
2073 ) RETURN DATE IS
2074
2075 CURSOR cur_pa_pcc
2076 IS
2077 SELECT date_computed
2078 FROM pa_percent_completes
2079 WHERE project_id = p_project_id
2080 AND object_id = nvl(p_object_id, p_task_id) /* Modified for IB4 Progress CR. */
2081 AND object_type = p_object_type
2082 AND structure_type = 'WORKPLAN' -- FPM Dev CR 3
2083 AND published_flag = 'N'
2084 AND current_flag = 'N'
2085 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. */
2086 and trunc(date_computed) <= trunc(p_as_of_date); --bug 4185364
2087 --and task_id = p_task_id /* Modified for IB4 Progress CR. */;
2088
2089 l_return_date DATE := null;
2090 BEGIN
2091
2092 OPEN cur_pa_pcc;
2093 FETCH cur_pa_pcc INTO l_return_date;
2094 CLOSE cur_pa_pcc;
2095 RETURN l_return_date;
2096 END Working_version_exist;
2097
2098 FUNCTION check_status_referenced(
2099 p_status_code VARCHAR2 ) RETURN BOOLEAN
2100 is
2101 Cursor c_percent_complete
2102 is
2103 select 'X' from pa_percent_completes
2104 where ( progress_status_code = p_status_code
2105 or status_code = p_status_code)
2106 AND rownum <= 1;
2107
2108 Cursor c_prog_rollup
2109 is
2110 select 'X' from pa_progress_rollup
2111 where ( progress_status_code = p_status_code
2112 or base_progress_status_code = p_status_code
2113 or eff_rollup_prog_stat_code = p_status_code)
2114 AND rownum <= 1;
2115
2116 Cursor c_proj_elements
2117 is
2118 select 'X' from pa_proj_elements
2119 where status_code = p_status_code
2120 AND rownum <= 1;
2121
2122 Cursor c_proj_elem_ver_structure
2123 is
2124 select 'X' from pa_proj_elem_ver_structure
2125 where status_code = p_status_code
2126 AND rownum <= 1;
2127
2128 Cursor c_task_types
2129 is
2130 select 'X' from pa_task_types
2131 where ( initial_status_code = p_status_code
2132 or initial_progress_status_code = p_status_code)
2133 AND object_type = 'PA_TASKS' /* bug 3279978 FP M Enhancement */
2134 AND rownum <= 1;
2135
2136 l_return_value boolean := FALSE;
2137 l_dummy varchar2(1);
2138
2139 Begin
2140 open c_percent_complete;
2141 fetch c_percent_complete into l_dummy;
2142 if (c_percent_complete%FOUND) then
2143 l_return_value := TRUE;
2144 end if;
2145 close c_percent_complete;
2146
2147 -- Check referense in pa_progress_rollup
2148 if(NOT l_return_value) then
2149 open c_prog_rollup;
2150 fetch c_prog_rollup into l_dummy;
2151 if(c_prog_rollup%FOUND) then
2152 l_return_value := TRUE;
2153 end if;
2154 close c_prog_rollup;
2155 end if;
2156 -- Check referense in pa_proj_elements
2157 if(NOT l_return_value) then
2158 open c_proj_elements;
2159 fetch c_proj_elements into l_dummy;
2160 if(c_proj_elements%FOUND) then
2161 l_return_value := TRUE;
2162 end if;
2163 close c_proj_elements;
2164 end if;
2165
2166 -- Check referense in pa_proj_elem_ver_structure
2167 if(NOT l_return_value) then
2168 open c_proj_elem_ver_structure;
2169 fetch c_proj_elem_ver_structure into l_dummy;
2170 if(c_proj_elem_ver_structure%FOUND) then
2171 l_return_value := TRUE;
2172 end if;
2173 close c_proj_elem_ver_structure;
2174 end if;
2175 -- Check referense in pa_task_types
2176 if(NOT l_return_value) then
2177 open c_task_types;
2178 fetch c_task_types into l_dummy;
2179 if(c_task_types%FOUND) then
2180 l_return_value := TRUE;
2181 end if;
2182 close c_task_types;
2183 end if;
2184
2185 return l_return_value;
2186
2187 End check_status_referenced;
2188
2189 -- FPM Dev CR 3 : Not Used
2190 FUNCTION GET_LATEST_AS_OF_DATE2(
2191 p_task_id NUMBER
2192 ,p_as_of_date DATE ) RETURN DATE IS
2193
2194 --Added for performance improvements bug 2679612
2195 CURSOR cur_proj_elem
2196 IS
2197 SELECT project_id
2198 FROM pa_proj_elements
2199 WHERE proj_element_id = p_task_id;
2200 l_project_id NUMBER;
2201 --Added for performance improvements bug 2679612
2202
2203 CURSOR cur_ppc(c_project_id NUMBER )
2204 IS
2205 SELECT MAX( date_computed )
2206 FROM pa_percent_completes
2207 WHERE object_id = p_task_id
2208 AND project_id = c_project_id
2209 AND date_computed < p_as_of_Date
2210 ;
2211 l_as_of_date DATE;
2212 BEGIN
2213
2214 OPEN cur_proj_elem;
2215 FETCH cur_proj_elem INTO l_project_id;
2216 CLOSE cur_proj_elem;
2217
2218 OPEN cur_ppc( l_project_id );
2219 FETCH cur_ppc INTO l_as_of_date;
2220 CLOSE cur_ppc;
2221 RETURN l_as_of_date ;
2222
2223 exception when others then
2224 return null;
2225
2226 END GET_LATEST_AS_OF_DATE2;
2227
2228 FUNCTION is_parent_on_hold(
2229 p_object_version_id NUMBER
2230 ) RETURN VARCHAR2 IS
2231 CURSOR cur_pa_proj
2232 IS
2233 SELECT ppe.status_code
2234 FROM pa_object_relationships por,
2235 pa_proj_element_versions ppev,
2236 pa_proj_elements ppe,
2237 pa_project_statuses pps
2238 WHERE object_id_to1 = p_object_version_id
2239 AND ppev.element_version_id = por.object_id_from1
2240 AND ppev.proj_element_id = ppe.proj_element_id
2241 AND ppev.object_type = ppe.object_type
2242 AND ppe.object_type = 'PA_TASKS'
2243 AND ppe.status_code = pps.project_status_code
2244 AND pps.project_system_status_code = 'ON_HOLD';
2245
2246 l_status_code VARCHAR2(150);
2247 BEGIN
2248 OPEN cur_pa_proj;
2249 FETCH cur_pa_proj INTO l_status_code;
2250 IF cur_pa_proj%FOUND
2251 THEN
2252 CLOSE cur_pa_proj;
2253 RETURN 'Y';
2254 ELSE
2255 CLOSE cur_pa_proj;
2256 RETURN 'N';
2257 END IF;
2258 END is_parent_on_hold;
2259
2260 FUNCTION get_task_status(
2261 p_project_id NUMBER
2262 ,p_object_id NUMBER
2263 , p_object_type VARCHAR2 := 'PA_TASKS' -- FPM Development Bug 3420093
2264 ) RETURN VARCHAR2 IS
2265
2266 CURSOR cur_pa_proj_elems
2267 IS
2268 SELECT status_code
2269 FROM pa_proj_elements
2270 WHERE proj_element_id = p_object_id
2271 AND project_id = p_project_id
2272 AND object_type = p_object_type;
2273
2274 l_status_code VARCHAR2(150);
2275 BEGIN
2276 OPEN cur_pa_proj_elems;
2277 FETCH cur_pa_proj_elems INTO l_status_code;
2278 CLOSE cur_pa_proj_elems;
2279 RETURN l_status_code;
2280 END get_task_status;
2281
2282
2283 FUNCTION get_system_task_status(
2284 p_status_code VARCHAR2
2285 ,p_object_type VARCHAR2 := 'PA_TASKS' -- FPM Development Bug 3420093
2286 ) RETURN VARCHAR2 IS
2287
2288 CURSOR cur_sys_status
2289 IS
2290 SELECT project_system_status_code
2291 FROM pa_project_statuses pps -----, fnd_lookup_values flv
2292 WHERE project_status_code = p_status_code
2293 AND status_type = decode(p_object_type, 'PA_TASKS', 'TASK', 'PA_DELIVERABLES', 'DELIVERABLE');
2294 /* bug 4699567 flv was not used in the query anyways
2295 AND lookup_type = decode(p_object_type, 'PA_TASKS', 'TASK_SYSTEM_STATUS', 'PA_DELIVERABLES', 'DELIVERABLE_SYSTEM_STATUS')
2296 AND language = 'US'; */
2297
2298 l_status_code VARCHAR2(150);
2299 BEGIN
2300 OPEN cur_sys_status;
2301 FETCH cur_sys_status INTO l_status_code;
2302 CLOSE cur_sys_status;
2303 RETURN l_status_code;
2304 END get_system_task_status;
2305
2306 Function is_cycle_ok_to_delete(p_progress_cycle_id IN NUMBER) return
2307 varchar2
2308 IS
2309 cursor prog_cycle is
2310 select 'N'
2311 from pa_proj_progress_attr
2312 where progress_cycle_id = p_progress_cycle_id
2313 and structure_type = 'WORKPLAN';-- FPM Dev CR 3
2314
2315 retval varchar2(1);
2316 l_prog_cycle prog_cycle%rowtype;
2317
2318 Begin
2319 open prog_cycle;
2320 fetch prog_cycle into l_prog_cycle;
2321 if prog_cycle%found then
2322 close prog_cycle;
2323 return 'N';
2324 else
2325 close prog_cycle;
2326 return 'Y';
2327 end if;
2328 End is_cycle_ok_to_delete;
2329
2330 -- FPM Dev CR 3 : Not Used
2331 function get_max_ppc_id(p_project_id IN NUMBER,
2332 p_object_id IN NUMBER,
2333 p_object_type IN VARCHAR2,
2334 p_as_of_date IN DATE) return number is
2335
2336 l_ppc_id number;
2337 begin
2338 select nvl(max(percent_complete_id),-99)
2339 into l_ppc_id
2340 from pa_percent_completes
2341 where project_id = p_project_id
2342 and object_id = p_object_id
2343 and object_type = p_object_type
2344 and date_computed <= p_as_of_date;
2345 return l_ppc_id;
2346
2347 exception when others then
2348 return -99;
2349 end get_max_ppc_id;
2350
2351 function get_max_rollup_asofdate(p_project_id IN NUMBER,
2352 p_object_id IN NUMBER,
2353 p_object_type IN VARCHAR2,
2354 p_as_of_date IN DATE,
2355 p_object_version_id IN NUMBER,
2356 p_structure_type IN VARCHAR2 := 'WORKPLAN', -- FPM Dev CR 3
2357 p_structure_version_id NUMBER := NULL -- FPM Dev CR 4
2358 ,p_proj_element_id NUMBER := null /* Modified for IB4 Progress CR. */
2359 ) return date is
2360 l_rollup_date date;
2361 begin
2362
2363 /* -- FPM Dev CR 4 : Added condition for PA_TASKS and structure_version_id
2364 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
2365
2366 select max(as_of_date)
2367 into l_rollup_date
2368 from pa_progress_rollup
2369 where project_id = p_project_id
2370 and object_id = p_object_id
2371 and object_type = p_object_type
2372 and structure_type = p_structure_type -- FPM Dev CR 3
2373 and as_of_date <= p_as_of_date
2374 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
2375 ;
2376 else
2377 select max(as_of_date)
2378 into l_rollup_date
2379 from pa_progress_rollup
2380 where project_id = p_project_id
2381 and object_id = p_object_id
2382 and object_type = p_object_type
2383 and structure_type = p_structure_type -- FPM Dev CR 3
2384 and trunc(as_of_date) = (select max(trunc(date_computed))
2385 from pa_percent_completes
2386 where project_id = p_project_id
2387 and object_id = p_object_id
2388 and object_type = p_object_type
2389 and structure_type = p_structure_type -- FPM Dev CR 3
2390 and published_flag = 'Y'
2391 and date_computed <= p_as_of_date);
2392 end if;
2393 */
2394
2395 -- FPM Dev CR 6 : Commented the above code and added this new code to get the date.
2396 select max(as_of_date)
2397 into l_rollup_date
2398 from pa_progress_rollup
2399 where project_id = p_project_id
2400 and object_id = p_object_id
2401 and object_type = p_object_type
2402 and structure_type = p_structure_type
2403 and as_of_date <= p_as_of_date
2404 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))
2405 AND current_flag <> 'W' -- Bug 3879461
2406 -- and as_of_date not in (select trunc(date_computed)
2407 -- from pa_percent_completes
2408 -- where project_id = p_project_id
2409 -- and object_id = p_object_id
2410 -- and object_type = p_object_type
2411 -- and structure_type = p_structure_type
2412 -- and published_flag = 'N'
2413 -- and date_computed <= p_as_of_date
2414 -- and NVL(proj_element_id,-1) = DECODE(p_object_type, 'PA_DELIVERABLES'
2415 -- , NVL(p_proj_element_id,NVL(proj_element_id,-1)),NVL(p_proj_element_id, p_object_id)) /* Amit : Modified for IB4 Progress CR. */
2416
2417 -- Begin fix for Bug # 4243074.
2418
2419 and NVL(proj_element_id,-1) = DECODE(p_structure_type, 'FINANCIAL'
2420 , DECODE(p_object_type, 'PA_STRUCTURES'
2421 , 0
2422 --bug 4250623, for deliverable dont compare with p_proj_element_id as it may not be associated with task
2423 --, (DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_proj_element_id,NVL(proj_element_id,-1)),NVL(p_proj_element_id, p_object_id))))
2424 , (DECODE(p_object_type, 'PA_DELIVERABLES', NVL(proj_element_id,-1),NVL(p_proj_element_id, p_object_id))))
2425 --bug 4250623, for deliverable dont compare with p_proj_element_id as it may not be associated with task
2426 --,(DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_proj_element_id,NVL(proj_element_id,-1)),NVL(p_proj_element_id, p_object_id))))
2427 ,(DECODE(p_object_type, 'PA_DELIVERABLES', NVL(proj_element_id,-1),NVL(p_proj_element_id, p_object_id))))
2428
2429 -- End fix for Bug # 4243074.
2430
2431 --and task_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
2432 -- )
2433
2434 -- 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. */
2435 -- Commented out to fix Bug # 4243074.
2436
2437 --and proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
2438 ;
2439
2440 return l_rollup_date;
2441
2442 exception when others then
2443 return null;
2444 end get_max_rollup_asofdate;
2445
2446 function get_project_wq_flag(p_project_id IN NUMBER) return varchar2 is
2447 l_wq_enable_flag varchar2(1);
2448 begin
2449 select wq_enable_flag
2450 into l_wq_enable_flag
2451 from pa_proj_progress_attr
2452 where project_id = p_project_id
2453 and object_Type = 'PA_STRUCTURES'
2454 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
2455 ;
2456
2457 return l_wq_enable_flag;
2458 exception when others then
2459 return 'N';
2460 end get_project_wq_flag;
2461
2462 PROCEDURE copy_attachments (
2463 p_project_id IN NUMBER,
2464 p_object_id IN NUMBER,
2465 p_object_type IN VARCHAR2,
2466 p_from_pc_id IN NUMBER,
2467 p_to_pc_id IN NUMBER,
2468 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
2469 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
2470 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2471 )
2472 IS
2473 cursor get_ppc_id is
2474 select percent_complete_id
2475 from pa_percent_completes
2476 where project_id = p_project_id
2477 and object_id = p_object_id
2478 and object_type = p_object_type
2479 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
2480 and published_flag = 'Y'
2481 and current_flag = 'Y';
2482
2483 l_from_pc_id NUMBER;
2484 BEGIN
2485
2486 x_return_status := 'S';
2487 x_msg_count := 0;
2488 x_msg_data := '';
2489
2490 if (p_from_pc_id is null) then
2491 open get_ppc_id;
2492 fetch get_ppc_id into l_from_pc_id;
2493 close get_ppc_id;
2494 else
2495 l_from_pc_id := p_from_pc_id;
2496 end if;
2497
2498 if (l_from_pc_id is not null) then
2499 fnd_attached_documents2_pkg.copy_attachments(
2500 X_from_entity_name => 'PA_PERCENT_COMPLETES',
2501 X_from_pk1_value => l_from_pc_id,
2502 X_to_entity_name => 'PA_PERCENT_COMPLETES',
2503 X_to_pk1_value => p_to_pc_id,
2504 X_created_by => fnd_global.user_id,
2505 X_last_update_login => fnd_global.login_id);
2506 end if;
2507
2508
2509 fnd_msg_pub.count_and_get(p_count => x_msg_count,
2510 p_data => x_msg_data);
2511
2512
2513 EXCEPTION
2514 WHEN OTHERS THEN
2515 x_return_status := 'U';
2516 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROGRESS_UTILS',
2517 p_procedure_name => 'COPY_ATTACHMENTS',
2518 p_error_text => SUBSTRB(SQLERRM,1,120));
2519
2520 fnd_msg_pub.count_and_get(p_count => x_msg_count,
2521 p_data => x_msg_data);
2522 END copy_attachments;
2523
2524
2525 function is_task_manager (p_task_id IN NUMBER,
2526 p_project_id IN NUMBER,
2527 p_user_id IN NUMBER) return varchar2 IS
2528
2529 CURSOR l_get_task_manager(c_element_version_id NUMBER)
2530 IS
2531 SELECT ppe.manager_person_id
2532 FROM pa_proj_elements PPE,
2533 pa_proj_element_versions PPEV
2534 WHERE ppev.element_version_id = c_element_version_id
2535 AND ppev.proj_element_id = ppe.proj_element_id;
2536
2537 CURSOR l_get_parent_task(c_element_version_id NUMBER)
2538 IS
2539 SELECT rel.object_id_from1
2540 FROM pa_object_relationships rel
2541 WHERE rel.object_id_to1 = c_element_version_id
2542 AND rel.object_type_to = 'PA_TASKS'
2543 AND rel.relationship_type = 'S'
2544 AND rel.object_type_from = 'PA_TASKS';
2545
2546 CURSOR l_get_element_version_id(c_proj_element_id NUMBER, c_parent_structure_version_id NUMBER)
2547 IS
2548 SELECT ppev.element_version_id
2549 FROM pa_proj_element_versions ppev
2550 WHERE ppev.proj_element_id = c_proj_element_id
2551 AND ppev.parent_structure_version_id = c_parent_structure_version_id;
2552
2553 CURSOR l_get_latest_pub_structure_ver
2554 IS
2555 SELECT ppevs.element_version_id
2556 FROM pa_proj_elem_ver_structure ppevs
2557 WHERE ppevs.project_id = p_project_id
2558 AND ppevs.latest_eff_published_flag = 'Y';
2559
2560 l_person_id NUMBER;
2561 l_temp_person_id NUMBER;
2562 l_is_task_manager VARCHAR2(1);
2563 l_latest_pub_structure_ver_id NUMBER;
2564 l_element_version_id NUMBER;
2565 BEGIN
2566 l_is_task_manager := 'N';
2567 l_person_id := PA_UTILS.GetEmpIdFromUser(p_user_id);
2568
2569 /*
2570 OPEN l_get_latest_pub_structure_ver;
2571 FETCH l_get_latest_pub_structure_ver INTO l_latest_pub_structure_ver_id;
2572 CLOSE l_get_latest_pub_structure_ver;
2573 */
2574
2575 --Added the following line instead of the above cursor.
2576 l_latest_pub_structure_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_WP_VERSION(p_project_id); --maansari7/22
2577
2578 OPEN l_get_element_version_id(p_task_id, l_latest_pub_structure_ver_id);
2579 FETCH l_get_element_version_id INTO l_element_version_id;
2580 CLOSE l_get_element_version_id;
2581
2582 WHILE((l_element_version_id is not NULL) AND (l_is_task_manager = 'N')) LOOP
2583 OPEN l_get_task_manager(l_element_version_id);
2584 FETCH l_get_task_manager INTO l_temp_person_id;
2585 CLOSE l_get_task_manager;
2586
2587 if(l_person_id = l_temp_person_id) then
2588 l_is_task_manager := 'Y';
2589 end if;
2590
2591 OPEN l_get_parent_task(l_element_version_id);
2592 FETCH l_get_parent_task INTO l_element_version_id;
2593 if l_get_parent_task%NOTFOUND then
2594 l_element_version_id := NULL;
2595 end if;
2596 CLOSE l_get_parent_task;
2597 END LOOP;
2598
2599 return l_is_task_manager;
2600
2601 EXCEPTION
2602 WHEN OTHERS THEN
2603 return 'N';
2604 END is_task_manager;
2605
2606 -- Bug 3010538 : New API for the Task Weighting Enhancement.
2607 -- This is a function that returns the task weighting basis code given the project id.
2608 FUNCTION GET_TASK_WEIGHTING_BASIS(
2609 p_project_id IN pa_projects_all.project_id%TYPE
2610 , p_structure_type IN VARCHAR2 := 'WORKPLAN' -- FPM Dev CR 3
2611 )
2612 RETURN VARCHAR2 IS
2613 -- This cursor obtains the task weight basis code for the project id.
2614 Cursor cur_weight_basis_code (c_project_id pa_projects_all.project_id%TYPE)
2615 Is
2616 Select ppa.task_weight_basis_code
2617 From pa_proj_progress_attr ppa,pa_proj_structure_types pst,pa_structure_types st
2618 Where ppa.project_id = c_project_id
2619 And ppa.object_type = 'PA_STRUCTURES'
2620 And ppa.structure_type = p_structure_type -- FPM Dev CR 3
2621 And ppa.object_id = pst.proj_element_id
2622 And st.structure_type = 'WORKPLAN'
2623 And st.structure_type_id = pst.structure_type_id;
2624
2625 l_weight_basis_code PA_PROJ_PROGRESS_ATTR.task_weight_basis_code%TYPE;
2626 BEGIN
2627 open cur_weight_basis_code(p_project_id);
2628 fetch cur_weight_basis_code into l_weight_basis_code;
2629 close cur_weight_basis_code;
2630
2631 return l_weight_basis_code;
2632
2633 END GET_TASK_WEIGHTING_BASIS;
2634
2635 FUNCTION is_object_progressable(p_project_id IN NUMBER
2636 ,p_proj_element_id IN NUMBER
2637 ,p_object_id IN NUMBER
2638 ,p_object_type IN VARCHAR2) return VARCHAR2
2639 IS
2640 l_return_value VARCHAR2(1) := 'N';
2641 l_status_code VARCHAR2(150);
2642 l_system_status_code VARCHAR2(30);
2643 BEGIN
2644 if (p_object_type = 'PA_STRUCTURES' or p_object_type = 'PA_ASSIGNMENTS') then
2645 l_return_value := 'Y';
2646 elsif (p_object_type = 'PA_TASKS') then
2647
2648 select status_code
2649 into l_status_code
2650 from pa_proj_elements
2651 where project_id = p_project_id
2652 and proj_element_id = p_proj_element_id
2653 and object_type = p_object_type;
2654
2655 l_system_status_code := pa_progress_utils.get_system_task_status(l_status_code);
2656
2657 --Commented by rtarway for BUG 3762650
2658 -- if (l_system_status_code = 'CANCELLED' or l_system_status_code = 'ON_HOLD') then
2659 if (l_system_status_code = 'CANCELLED' ) then
2660
2661 l_return_value := 'N';
2662 else
2663
2664 select ptt.prog_entry_enable_flag
2665 into l_return_value
2666 from pa_proj_elements ppe, pa_task_types ptt
2667 where ppe.type_id = ptt.task_type_id(+)
2668 and ppe.project_id = p_project_id
2669 and ppe.proj_element_id = p_proj_element_id;
2670 end if;
2671 elsif (p_object_type = 'PA_DELIVERABLES') then
2672 l_return_value := PA_DELIVERABLE_UTILS.IS_DLV_PROGRESSABLE(p_project_id,p_proj_element_id);
2673 end if;
2674 return(l_return_value);
2675 END is_object_progressable;
2676
2677
2678 FUNCTION check_wp_working_prog_exists(p_project_id IN NUMBER
2679 ,p_structure_version_id IN NUMBER
2680 ) return VARCHAR2
2681 IS
2682 l_return_value VARCHAR2(1) := 'Y';
2683 BEGIN
2684 RETURN l_return_value;
2685 END check_wp_working_prog_exists;
2686
2687
2688 FUNCTION is_pc_override_allowed(p_project_id IN NUMBER
2689 ,p_structure_type IN VARCHAR2 := 'WORKPLAN'
2690 ) return VARCHAR2
2691 IS
2692 l_return_value VARCHAR2(1) := 'N';
2693 l_percent_comp_enable_flag VARCHAR2(1) := NULL;
2694 l_allow_phy_prcnt_cmp_overrds VARCHAR2(1) := NULL;
2695
2696 cursor c1(p_project_id NUMBER, p_structure_type VARCHAR2) is
2697 select percent_comp_enable_flag,allow_phy_prcnt_cmp_overrides
2698 from pa_proj_progress_attr
2699 where project_id = p_project_id
2700 and structure_type = p_structure_type;
2701
2702 l_c1rec c1%rowtype;
2703
2704 BEGIN
2705 open c1(p_project_id, p_structure_type);
2706 fetch c1 into l_c1rec;
2707 close c1;
2708
2709 if (l_c1rec.percent_comp_enable_flag = 'N') then
2710 l_return_value := l_c1rec.percent_comp_enable_flag;
2711 else
2712 l_return_value := l_c1rec.allow_phy_prcnt_cmp_overrides;
2713 end if;
2714
2715 RETURN l_return_value;
2716
2717 END is_pc_override_allowed;
2718
2719 FUNCTION calculate_percentage( p_actual_value NUMBER
2720 ,p_planned_value NUMBER ) return NUMBER
2721 IS
2722 BEGIN
2723 RETURN ((p_actual_value/p_planned_value)*100);
2724 END calculate_percentage;
2725
2726 FUNCTION GET_EARLIEST_AS_OF_DATE(
2727 p_project_id NUMBER
2728 ,p_object_id NUMBER
2729 ,p_object_type VARCHAR2
2730 ,p_structure_type VARCHAR2 := 'WORKPLAN' -- FPM Development Bug 3420093
2731 ,p_task_id NUMBER := null /* Modified for IB4 Progress CR. */
2732 ) RETURN DATE IS
2733
2734 CURSOR cur_ppc
2735 IS
2736 SELECT min(date_computed)
2737 FROM pa_percent_completes
2738 WHERE object_id = p_object_id
2739 AND project_id = p_project_id
2740 and object_type = p_object_type
2741 AND structure_type = p_structure_type
2742 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. */
2743 --and task_id = nvl(p_task_id, p_object_id) /* Modified for IB4 Progress CR. */;
2744 ;
2745 l_as_of_date DATE;
2746 BEGIN
2747
2748 OPEN cur_ppc;
2749 FETCH cur_ppc INTO l_as_of_date;
2750 CLOSE cur_ppc;
2751 RETURN l_as_of_date ;
2752
2753 exception when others then
2754 return null;
2755
2756 END GET_EARLIEST_AS_OF_DATE;
2757
2758 FUNCTION check_assignment_exists(
2759 p_project_id NUMBER
2760 ,p_object_version_id NUMBER
2761 ,p_object_type VARCHAR2
2762 ,p_structure_type VARCHAR2 := 'WORKPLAN' -- FPM Development Bug 3420093
2763 ) RETURN VARCHAR2
2764 IS
2765
2766 l_return_value VARCHAR2(1) := 'Y';
2767
2768 BEGIN
2769
2770 l_return_value := pa_task_assignment_utils.check_asgmt_exists_in_task(p_object_version_id);
2771
2772 RETURN (l_return_value);
2773 END check_assignment_exists;
2774
2775 -- Bug 3633293 : Added check_deliverable_exists
2776 FUNCTION check_deliverable_exists(
2777 p_project_id NUMBER
2778 ,p_object_id NUMBER
2779 ) RETURN VARCHAR2
2780 IS
2781 l_return_value VARCHAR2(1) := 'Y';
2782 l_dummy VARCHAR2(1);
2783 CURSOR c_get_del_associated_task IS
2784 SELECT 'x'
2785 FROM pa_proj_elements ppe,
2786 pa_object_relationships por,
2787 pa_task_types ttype
2788 WHERE
2789 ppe.object_type = 'PA_TASKS'
2790 and ppe.proj_element_id = por.object_id_from2
2791 and por.object_type_from = 'PA_TASKS'
2792 and por.object_type_to = 'PA_DELIVERABLES'
2793 and por.relationship_type = 'A'
2794 and por.relationship_subtype = 'TASK_TO_DELIVERABLE'
2795 and nvl(ppe.base_percent_comp_deriv_code,ttype.base_percent_comp_deriv_code)='DELIVERABLE'
2796 and ppe.proj_element_id = p_object_id
2797 and ppe.type_id = ttype.task_type_id;
2798
2799 BEGIN
2800 OPEN c_get_del_associated_task;
2801 FETCH c_get_del_associated_task INTO l_dummy;
2802 IF c_get_del_associated_task%NOTFOUND THEN
2803 l_return_value := 'N';
2804 ELSE
2805 l_return_value := 'Y';
2806 END IF;
2807 CLOSE c_get_del_associated_task;
2808 RETURN (l_return_value);
2809 END check_deliverable_exists;
2810
2811 FUNCTION get_last_effort(
2812 p_project_id NUMBER
2813 ,p_object_id NUMBER
2814 ,p_object_type VARCHAR2
2815 ,p_as_of_date DATE
2816 ,p_structure_type VARCHAR2 := 'WORKPLAN' -- FPM Development Bug 3420093
2817 ,p_proj_element_id NUMBER := null /* Modified for IB4 Progress CR. */
2818 ) RETURN NUMBER IS
2819
2820 CURSOR cur_task_effort
2821 IS
2822 SELECT NVL( EQPMT_ACT_EFFORT_TO_DATE, 0 ) + NVL( PPL_ACT_EFFORT_TO_DATE, 0 ) + nvl(oth_quantity_to_date,0)
2823 FROM pa_progress_rollup
2824 WHERE project_id = p_project_id
2825 AND object_id = p_object_id
2826 --Commented by rtarway for BUG 3835474
2827 /*AND as_of_date = ( SELECT max(as_of_date)
2828 from pa_progress_rollup
2829 WHERE as_of_date < p_as_of_date
2830 AND project_id = p_project_id
2831 AND object_id = p_object_id
2832 AND object_type = p_object_type
2833 AND structure_type = p_structure_type
2834 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.
2835 --and proj_element_id = nvl(p_proj_element_id, p_object_id) Modified for IB4 Progress CR.
2836 )*/
2837 --Added by rtarway for BUG 3835474
2838 AND as_of_date = ( SELECT max(as_of_date)
2839 from pa_progress_rollup ppr2
2840 WHERE ppr2.as_of_date <= p_as_of_date
2841 AND ppr2.project_id = p_project_id
2842 AND ppr2.object_id = p_object_id
2843 AND ppr2.object_type = p_object_type
2844 AND ppr2.structure_type = p_structure_type
2845 AND ppr2.current_flag <> 'W' -- Bug 3879461
2846 AND ppr2.structure_version_id is null -- Bug 3879461
2847 and NVL(ppr2.proj_element_id,-1)
2848 = DECODE(p_object_type, 'PA_DELIVERABLES',
2849 NVL(p_proj_element_id,
2850 NVL(ppr2.proj_element_id,-1)),
2851 NVL(p_proj_element_id, p_object_id)
2852 ) /* Amit : Modified for IB4 Progress CR. */
2853 -- AND NOT EXISTS
2854 -- (
2855 -- SELECT 'X' FROM pa_percent_completes ppc
2856 -- WHERE ppc.date_computed = ppr2.as_of_date
2857 -- AND ppc.project_id = p_project_id
2858 -- AND ppc.object_id = p_object_id
2859 -- AND ppc.object_type = p_object_type
2860 -- AND ppc.structure_type = p_structure_type
2861 -- AND ppc.published_flag = 'N'
2862 -- )
2863 )
2864 AND object_type = p_object_type
2865 AND structure_type = p_structure_type
2866 AND current_flag <> 'W' -- Bug 3879461
2867 AND structure_version_id is null -- Bug 3879461
2868 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. */
2869 --and proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
2870 ;
2871 l_last_submitted_effort NUMBER;
2872 BEGIN
2873
2874 OPEN cur_task_effort;
2875 FETCH cur_task_effort INTO l_last_submitted_effort;
2876 CLOSE cur_task_effort;
2877
2878 RETURN l_last_submitted_effort;
2879 END get_last_effort;
2880
2881 FUNCTION get_last_cost(
2882 p_project_id NUMBER
2883 ,p_object_id NUMBER
2884 ,p_object_type VARCHAR2
2885 ,p_as_of_date DATE
2886 ,p_structure_type VARCHAR2 := 'WORKPLAN' -- FPM Development Bug 3420093
2887 ,p_proj_element_id NUMBER := null /* Modified for IB4 Progress CR. */
2888 ) RETURN NUMBER IS
2889
2890 CURSOR cur_task_cost
2891 IS
2892 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))
2893 FROM pa_progress_rollup ppr
2894 WHERE ppr.project_id = p_project_id
2895 AND ppr.object_id = p_object_id
2896 AND ppr.as_of_date = ( SELECT max(as_of_date)
2897 from pa_progress_rollup ppr2
2898 WHERE ppr2.as_of_date < p_as_of_date
2899 AND ppr2.project_id = p_project_id
2900 AND ppr2.object_id = p_object_id
2901 AND ppr2.object_type = p_object_type
2902 AND ppr2.structure_type = p_structure_type
2903 AND ppr2.current_flag <> 'W' -- Bug 3879461
2904 AND ppr2.structure_version_id is null -- Bug 3879461
2905 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. */
2906 --and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
2907 )
2908 AND ppr.object_type = p_object_type
2909 AND ppr.structure_type = p_structure_type
2910 AND ppr.current_flag <> 'W' -- Bug 3879461
2911 AND ppr.structure_version_id is null -- Bug 3879461
2912 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. */
2913 --and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
2914 ;
2915
2916 l_last_submitted_cost NUMBER;
2917
2918 BEGIN
2919
2920 OPEN cur_task_cost;
2921 FETCH cur_task_cost INTO l_last_submitted_cost;
2922 CLOSE cur_task_cost;
2923
2924 RETURN l_last_submitted_cost;
2925 END get_last_cost;
2926
2927
2928 -- Bug 4372462 : Rewritten this API again...
2929
2930 PROCEDURE convert_currency_amounts(
2931 p_api_version IN NUMBER :=1.0
2932 ,p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE
2933 ,p_commit IN VARCHAR2 :=FND_API.G_FALSE
2934 ,p_validate_only IN VARCHAR2 :=FND_API.G_TRUE
2935 ,p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL
2936 ,p_calling_module IN VARCHAR2 :='SELF_SERVICE'
2937 ,p_debug_mode IN VARCHAR2 :='N'
2938 ,p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2939 ,p_project_id IN NUMBER
2940 ,p_task_id IN NUMBER
2941 ,p_as_of_date IN DATE
2942 ,P_txn_cost IN NUMBER
2943 ,P_txn_curr_code IN VARCHAR2
2944 ,p_structure_version_id IN NUMBER -- Bug 3627787
2945 ,p_calling_mode IN VARCHAR2 := 'ACTUAL_RATES' -- Bug 4372462
2946 ,p_budget_version_id IN NUMBER := null -- Bug 4372462
2947 ,p_res_assignment_id IN NUMBER := null -- Bug 4372462
2948 ,p_init_inout_vars IN VARCHAR2 := 'Y' -- Bug 4372462
2949 ,P_project_curr_code IN OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2950 ,P_project_rate_type IN OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2951 ,P_project_rate_date IN OUT NOCOPY DATE --File.Sql.39 bug 4440895
2952 ,P_project_exch_rate IN OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2953 ,P_project_raw_cost IN OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2954 ,P_projfunc_curr_code IN OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2955 ,P_projfunc_cost_rate_type IN OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2956 ,P_projfunc_cost_rate_date IN OUT NOCOPY DATE --File.Sql.39 bug 4440895
2957 ,P_projfunc_cost_exch_rate IN OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2958 ,P_projfunc_raw_cost IN OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2959 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2960 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2961 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2962 ) IS
2963
2964 l_api_name CONSTANT VARCHAR2(30) := 'CONVERT_CURRENCY_AMOUNTS';
2965 l_api_version CONSTANT NUMBER := p_api_version;
2966 l_user_id NUMBER := FND_GLOBAL.USER_ID;
2967 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
2968 l_return_status VARCHAR2(1);
2969 l_msg_count NUMBER;
2970
2971 --bug 3828542
2972 l_status VARCHAR2(30);
2973
2974 CURSOR ou_exp_org_id IS
2975 SELECT org_id from pa_implementations;
2976
2977 -- Bug 4372462 : written new cursor proj_all
2978 --CURSOR proj_all IS
2979 --SELECT project_currency_code, projfunc_currency_code
2980 --FROM pa_projects_all
2981 --WHERE project_id = p_project_id;
2982
2983 CURSOR proj_all IS
2984 SELECT ppa.project_currency_code,
2985 ppfo.project_cost_rate_type,
2986 ppfo.project_cost_rate_date_type,
2987 ppfo.project_cost_rate_date,
2988 ppa.projfunc_currency_code,
2989 ppfo.projfunc_cost_rate_type,
2990 ppfo.projfunc_cost_rate_date_type,
2991 ppfo.projfunc_cost_rate_date,
2992 ppfo.proj_fp_options_id
2993 FROM pa_projects_all ppa,
2994 pa_proj_fp_options ppfo
2995 WHERE ppa.project_id = p_project_id
2996 and ppfo.fin_plan_type_id = (select fin_plan_type_id
2997 from pa_fin_plan_types_b
2998 where use_for_workplan_flag = 'Y')
2999 and ppfo.project_id = p_project_id
3000 and ppfo.fin_plan_option_level_code = 'PLAN_TYPE';
3001
3002 -- Bug 4372462 Begin
3003 --- get the override conversion rates for PC and PFC
3004 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
3005 SELECT resource_assignment_id,
3006 start_date,
3007 end_date,
3008 project_cost_rate_type,
3009 project_cost_rate_date_type,
3010 project_cost_rate_date,
3011 project_cost_exchange_rate,
3012 projfunc_cost_rate_type,
3013 projfunc_cost_rate_date_type,
3014 projfunc_cost_rate_date,
3015 projfunc_cost_exchange_rate
3016 FROM pa_budget_lines
3017 where budget_version_id = c_budget_version_id
3018 and resource_assignment_id = c_res_assignment_id
3019 and c_as_of_date between start_date and end_date
3020 and txn_currency_code = c_txn_curr_code;
3021
3022 --- get the user rates if rate tyep is User
3023 CURSOR user_cur_details(c_proj_fp_options_id NUMBER, c_txn_curr_code VARCHAR2) IS
3024 SELECT c.projfunc_cost_exchange_rate
3025 ,c.project_cost_exchange_rate
3026 FROM pa_fp_txn_currencies c
3027 WHERE c.proj_fp_options_id = c_proj_fp_options_id
3028 AND c.txn_currency_code = c_txn_curr_code ;
3029
3030 --- this cursor gets period set name and time phasing for project for use
3031 --- by next cursor defined
3032 CURSOR get_name_and_type_csr(c_budget_version_id NUMBER) IS
3033 SELECT gsb.period_set_name
3034 ,gsb.accounted_period_type
3035 ,pia.pa_period_type
3036 ,decode(pbv.version_type,
3037 'COST',ppfo.cost_time_phased_code,
3038 'REVENUE',ppfo.revenue_time_phased_code,
3039 ppfo.all_time_phased_code) time_phase_code
3040 FROM gl_sets_of_books gsb
3041 ,pa_implementations_all pia
3042 ,pa_projects_all ppa
3043 ,pa_budget_versions pbv
3044 ,pa_proj_fp_options ppfo
3045 WHERE ppa.project_id = pbv.project_id
3046 AND pbv.budget_version_id = ppfo.fin_plan_version_id
3047 --AND nvl(ppa.org_id,-99) = nvl(pia.org_id,-99) R12: Bug 4363092:
3048 AND ppa.org_id = pia.org_id
3049 AND gsb.set_of_books_id = pia.set_of_books_id
3050 AND pbv.budget_version_id = c_budget_version_id;
3051
3052 --- this cursor is used to get start_date and end_Date for periods
3053 --- need this for rate_date_type
3054 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
3055 SELECT START_DATE, END_DATE, PERIOD_NAME
3056 FROM gl_periods gp
3057 WHERE gp.period_set_name = c_period_set_name
3058 AND gp.period_type = decode(c_time_phase_code,'G',c_accounted_period_type,'P',c_pa_period_type)
3059 AND gp.adjustment_period_flag = 'N'
3060 AND gp.start_date <= c_as_of_date
3061 AND gp.end_date >= c_as_of_date
3062 ORDER BY gp.start_date;
3063
3064 l_proj_all proj_all%rowtype;
3065 l_bgt_line_rates bgt_line_rates%rowtype;
3066 l_user_cur_details user_cur_details%rowtype;
3067 l_pc_conv VARCHAR2(1) := 'N';
3068 l_pfc_conv VARCHAR2(1) := 'N';
3069 l_time_phase_code VARCHAR2(1);
3070 l_period_set_name VARCHAR2(15);
3071 l_accounted_period_type VARCHAR2(15);
3072 l_pa_period_type VARCHAR2(15);
3073
3074 l_start_date DATE;
3075 l_end_date DATE;
3076
3077 l_period_name VARCHAR2(15);
3078 l_projfunc_cost_exchange_rate NUMBER;
3079 l_project_cost_exchange_rate NUMBER;
3080 tmp_project_rate_type VARCHAR2(30);
3081 tmp_project_rate_date DATE;
3082 tmp_project_exch_rate NUMBER;
3083 tmp_project_raw_cost NUMBER;
3084 tmp_projfunc_rate_type VARCHAR2(30);
3085 tmp_projfunc_rate_date DATE;
3086 tmp_projfunc_exch_rate NUMBER;
3087 tmp_projfunc_raw_cost NUMBER;
3088
3089 g1_debug_mode VARCHAR2(1);
3090 -- Bug 4372462 End
3091
3092 l_org_id NUMBER;
3093 l_acct_rate_date DATE;
3094 l_acct_rate_type VARCHAR2(30);
3095 l_acct_exch_rate NUMBER;
3096 l_acct_raw_cost NUMBER;
3097 l_project_curr_code VARCHAR2(30);
3098 l_projfunc_curr_code VARCHAR2(30);
3099 l_project_curr_code2 VARCHAR2(30);
3100 l_projfunc_curr_code2 VARCHAR2(30);
3101 --bug# 3627315
3102 --l_stage VARCHAR2(2000);
3103 l_stage NUMBER;
3104
3105
3106 BEGIN
3107
3108 x_return_status := FND_API.G_RET_STS_SUCCESS;
3109 g1_debug_mode := NVL(FND_PROFILE.value_specific('PA_DEBUG_MODE',l_user_id,l_login_id,275,null,null), 'N');
3110
3111 IF g1_debug_mode = 'Y' THEN
3112 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'Starts', x_Log_Level=> 3);
3113 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'p_project_id='||p_project_id, x_Log_Level=> 3);
3114 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'p_task_id='||p_task_id, x_Log_Level=> 3);
3115 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);
3116 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'P_txn_cost='||P_txn_cost, x_Log_Level=> 3);
3117 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);
3118 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);
3119 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'p_calling_mode='||p_calling_mode, x_Log_Level=> 3);
3120 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);
3121 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);
3122 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);
3123 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);
3124 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);
3125 END IF;
3126
3127 IF p_init_inout_vars = 'Y' THEN
3128 -- This is being done so that if calling API's have two consecutive calls of
3129 -- this API with same local variables. Then they will get wrong data.
3130 -- instead of changing all of the calling API's, we are changing it here
3131 P_project_rate_type := null;
3132 P_project_rate_date := null;
3133 P_project_exch_rate := null;
3134 P_project_raw_cost := null;
3135 P_projfunc_cost_rate_type := null;
3136 P_projfunc_cost_rate_date := null;
3137 P_projfunc_cost_exch_rate := null;
3138 P_projfunc_raw_cost := null;
3139 END IF;
3140
3141
3142 OPEN ou_exp_org_id;
3143 FETCH ou_exp_org_id INTO l_org_id;
3144 CLOSE ou_exp_org_id;
3145
3146 -- Bug 4372462 : New call below
3147 --OPEN proj_all;
3148 --FETCH proj_all INTO l_project_curr_code2, l_projfunc_curr_code2;
3149 --CLOSE proj_all;
3150
3151 OPEN proj_all;
3152 FETCH proj_all INTO l_proj_all;
3153 CLOSE proj_all;
3154
3155
3156 IF p_project_curr_code IS NULL
3157 THEN
3158 l_project_curr_code := l_proj_all.project_currency_code;
3159 ELSE
3160 l_project_curr_code := p_project_curr_code;
3161 END IF;
3162
3163 IF p_projfunc_curr_code IS NULL
3164 THEN
3165 l_projfunc_curr_code := l_proj_all.projfunc_currency_code;
3166 ELSE
3167 l_projfunc_curr_code := p_projfunc_curr_code;
3168 END IF;
3169
3170 IF g1_debug_mode = 'Y' THEN
3171 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'l_org_id='||l_org_id, x_Log_Level=> 3);
3172 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);
3173 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);
3174 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);
3175 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);
3176 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);
3177 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);
3178 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);
3179 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);
3180 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);
3181 END IF;
3182
3183 IF P_txn_curr_code = l_project_curr_code THEN
3184 P_project_raw_cost := P_txn_cost;
3185 l_pc_conv := 'Y';
3186 END IF;
3187 IF P_txn_curr_code = l_projfunc_curr_code THEN
3188 P_projfunc_raw_cost := P_txn_cost;
3189 l_pfc_conv := 'Y';
3190 END IF;
3191
3192 IF p_calling_mode = 'PLAN_RATES' AND (l_pc_conv = 'N' OR l_pfc_conv = 'N') THEN
3193 IF p_budget_version_id IS NULL OR p_res_assignment_id IS NULL THEN
3194 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3195 ,p_msg_name => 'PA_INV_PARAM_PASSED');
3196 x_msg_data := 'PA_INV_PARAM_PASSED';
3197 x_return_status := FND_API.G_RET_STS_ERROR;
3198 RAISE FND_API.G_EXC_ERROR;
3199 END IF;
3200
3201 OPEN bgt_line_rates(p_budget_version_id, p_res_assignment_id, p_txn_curr_code, p_as_of_date);
3202 FETCH bgt_line_rates INTO l_bgt_line_rates;
3203 CLOSE bgt_line_rates;
3204
3205 OPEN user_cur_details(l_proj_all.proj_fp_options_id, p_txn_curr_code);
3206 FETCH user_cur_details INTO l_projfunc_cost_exchange_rate, l_project_cost_exchange_rate;
3207 CLOSE user_cur_details;
3208
3209 IF g1_debug_mode = 'Y' THEN
3210 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);
3211 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);
3212 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);
3213 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);
3214 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);
3215 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);
3216 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);
3217 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);
3218 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);
3219 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);
3220 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);
3221 END IF;
3222
3223
3224 IF l_bgt_line_rates.resource_assignment_id IS NOT NULL THEN
3225 -- Data is there in budget lines table
3226
3227 --- PC Conv
3228 IF l_pc_conv = 'N' THEN
3229 IF l_bgt_line_rates.project_cost_exchange_rate is not null THEN
3230 --- calc cost
3231 l_pc_conv := 'Y';
3232 P_project_curr_code := l_project_curr_code;
3233 P_project_rate_type := l_bgt_line_rates.project_cost_rate_type;
3234 P_project_rate_date := l_bgt_line_rates.project_cost_rate_date;
3235 P_project_exch_rate := l_bgt_line_rates.project_cost_exchange_rate;
3236 P_project_raw_cost := P_txn_cost * P_project_exch_rate;
3237 ELSIF NVL(l_bgt_line_rates.project_cost_rate_type,l_proj_all.project_cost_rate_type) is not null THEN
3238 --- use this rate type
3239 IF NVL(l_bgt_line_rates.project_cost_rate_type,l_proj_all.project_cost_rate_type) = 'User' THEN
3240 --- calc cost
3241 l_pc_conv := 'Y';
3242 P_project_curr_code := l_project_curr_code;
3243 P_project_rate_type := nvl(l_bgt_line_rates.project_cost_rate_type,l_proj_all.project_cost_rate_type);
3244 P_project_rate_date := nvl(l_bgt_line_rates.project_cost_rate_date, l_proj_all.project_cost_rate_date);
3245 P_project_exch_rate := l_project_cost_exchange_rate;
3246 P_project_raw_cost := P_txn_cost * P_project_exch_rate;
3247
3248 IF l_project_cost_exchange_rate IS NULL THEN
3249 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3250 ,p_msg_name => 'PA_FP_USER_EXCH_RATE_REQ');
3251 x_msg_data := 'PA_FP_USER_EXCH_RATE_REQ';
3252 x_return_status := FND_API.G_RET_STS_ERROR;
3253 RAISE FND_API.G_EXC_ERROR;
3254 END IF;
3255 ELSE
3256 P_project_curr_code := l_project_curr_code;
3257 P_project_rate_type := nvl(l_bgt_line_rates.project_cost_rate_Type,l_proj_all.project_cost_rate_type);
3258 IF NVL(l_bgt_line_rates.project_cost_rate_date, l_proj_all.project_cost_rate_date) IS NOT NULL THEN
3259 P_project_rate_date := NVL(l_bgt_line_rates.project_cost_rate_date, l_proj_all.project_cost_rate_date);
3260 ELSE
3261 IF NVL(l_bgt_line_rates.project_cost_rate_date_type, l_proj_all.project_cost_rate_date_type) = 'START_DATE' THEN
3262 P_project_rate_date := l_bgt_line_rates.start_date;
3263 ELSIF NVL(l_bgt_line_rates.project_cost_rate_date_type, l_proj_all.project_cost_rate_date_type) = 'END_DATE' THEN
3264 P_project_rate_date := l_bgt_line_rates.end_date;
3265 ELSIF NVL(l_bgt_line_rates.project_cost_rate_date_type, l_proj_all.project_cost_rate_date_type) = 'FIXED_DATE' THEN
3266 P_project_rate_date := NVL(l_bgt_line_rates.project_cost_rate_date, l_proj_all.project_cost_rate_date);
3267 -- This case should never come...This is an error
3268 ELSE
3269 P_project_rate_date := null; -- Costing API will derive using implmentation option setup
3270 END IF;
3271 END IF;
3272 END IF; -- NVL(l_bgt_line_rates.project_cost_rate_type,l_proj_all.project_cost_rate_type) = 'User'
3273 END IF; -- l_bgt_line_rates.project_cost_exchange_rate is not null
3274 END IF ; -- IF l_pc_conv = 'N'
3275
3276 --- PFC Conv
3277 IF l_pfc_conv = 'N' THEN
3278 IF l_bgt_line_rates.projfunc_cost_exchange_rate is not null THEN
3279 --- calc cost
3280 l_pfc_conv := 'Y';
3281 P_projfunc_curr_code := l_projfunc_curr_code;
3282 P_projfunc_cost_rate_type := l_bgt_line_rates.projfunc_cost_rate_type;
3283 P_projfunc_cost_rate_date := l_bgt_line_rates.projfunc_cost_rate_date;
3284 P_projfunc_cost_exch_rate := l_bgt_line_rates.projfunc_cost_exchange_rate;
3285 P_projfunc_raw_cost := P_txn_cost * P_projfunc_cost_exch_rate;
3286 ELSIF NVL(l_bgt_line_rates.projfunc_cost_rate_type,l_proj_all.projfunc_cost_rate_type) is not null THEN
3287 --- use this rate type
3288 IF NVL(l_bgt_line_rates.projfunc_cost_rate_type,l_proj_all.projfunc_cost_rate_type) = 'User' THEN
3289 --- calc cost
3290 l_pfc_conv := 'Y';
3291 P_projfunc_curr_code := l_projfunc_curr_code;
3292 P_projfunc_cost_rate_type := nvl(l_bgt_line_rates.projfunc_cost_rate_type,l_proj_all.projfunc_cost_rate_type);
3293 P_projfunc_cost_rate_date := nvl(l_bgt_line_rates.projfunc_cost_rate_date, l_proj_all.projfunc_cost_rate_date);
3294 P_projfunc_cost_exch_rate := l_projfunc_cost_exchange_rate;
3295 P_projfunc_raw_cost := P_txn_cost * P_projfunc_cost_exch_rate;
3296
3297 IF l_projfunc_cost_exchange_rate IS NULL THEN
3298 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3299 ,p_msg_name => 'PA_FP_USER_EXCH_RATE_REQ');
3300 x_msg_data := 'PA_FP_USER_EXCH_RATE_REQ';
3301 x_return_status := FND_API.G_RET_STS_ERROR;
3302 RAISE FND_API.G_EXC_ERROR;
3303 END IF;
3304 ELSE
3305 P_projfunc_curr_code := l_projfunc_curr_code;
3306 P_projfunc_cost_rate_type := nvl(l_bgt_line_rates.projfunc_cost_rate_type,l_proj_all.projfunc_cost_rate_type);
3307 IF NVL(l_bgt_line_rates.projfunc_cost_rate_date, l_proj_all.projfunc_cost_rate_date) IS NOT NULL THEN
3308 P_projfunc_cost_rate_date := NVL(l_bgt_line_rates.projfunc_cost_rate_date, l_proj_all.projfunc_cost_rate_date);
3309 ELSE
3310 IF NVL(l_bgt_line_rates.projfunc_cost_rate_date_type, l_proj_all.projfunc_cost_rate_date_type) = 'START_DATE' THEN
3311 P_projfunc_cost_rate_date := l_bgt_line_rates.start_date;
3312 ELSIF NVL(l_bgt_line_rates.projfunc_cost_rate_date_type, l_proj_all.projfunc_cost_rate_date_type) = 'END_DATE' THEN
3313 P_projfunc_cost_rate_date := l_bgt_line_rates.end_date;
3314 ELSIF NVL(l_bgt_line_rates.projfunc_cost_rate_date_type, l_proj_all.projfunc_cost_rate_date_type) = 'FIXED_DATE' THEN
3315 P_projfunc_cost_rate_date := NVL(l_bgt_line_rates.project_cost_rate_date, l_proj_all.project_cost_rate_date);
3316 -- This case should never come...This is an error
3317 ELSE
3318 P_projfunc_cost_rate_date := null; -- Costing API will derive using implmentation option setup
3319 END IF;
3320 END IF;
3321 END IF; -- NVL(l_bgt_line_rates.projfunc_cost_rate_type,l_proj_all.projfunc_cost_rate_type) = 'User'
3322 END IF; -- l_bgt_line_rates.projfunc_cost_exchange_rate is not null THEN
3323 END IF; -- IF l_pfc_conv = 'N'
3324 ELSE -- l_bgt_line_rates.resource_assignment_id IS NOT NULL
3325 OPEN get_name_and_type_csr(p_budget_version_id);
3326 FETCH get_name_and_type_csr INTO l_period_set_name, l_accounted_period_type, l_pa_period_type, l_time_phase_code;
3327 CLOSE get_name_and_type_csr;
3328
3329 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);
3330 FETCH get_gl_periods_csr INTO l_start_date, l_end_date, l_period_name;
3331 CLOSE get_gl_periods_csr;
3332
3333 -- PC Conversion
3334 IF l_pc_conv = 'N' THEN
3335 IF (l_proj_all.project_cost_rate_type is null) THEN
3336 null; -- means no currency rates override at WP level
3337 ELSE
3338 --- use this rate type
3339 IF l_proj_all.project_cost_rate_type = 'User' THEN
3340 --- calc cost
3341 l_pc_conv := 'Y';
3342 P_project_curr_code := l_project_curr_code;
3343 P_project_rate_type := l_proj_all.project_cost_rate_type;
3344 P_project_rate_date := l_proj_all.project_cost_rate_date;
3345 P_project_exch_rate := l_project_cost_exchange_rate;
3346 P_project_raw_cost := P_txn_cost * P_project_exch_rate;
3347
3348 IF l_project_cost_exchange_rate IS NULL THEN
3349 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3350 ,p_msg_name => 'PA_FP_USER_EXCH_RATE_REQ');
3351 x_msg_data := 'PA_FP_USER_EXCH_RATE_REQ';
3352 x_return_status := FND_API.G_RET_STS_ERROR;
3353 RAISE FND_API.G_EXC_ERROR;
3354 END IF;
3355 ELSE
3356 P_project_curr_code := l_project_curr_code;
3357 P_project_rate_type := l_proj_all.project_cost_rate_type;
3358 IF l_proj_all.project_cost_rate_date IS NOT NULL THEN
3359 P_project_rate_date := l_proj_all.project_cost_rate_date;
3360 ELSE
3361 IF l_proj_all.project_cost_rate_date_type = 'START_DATE' THEN
3362 P_project_rate_date := l_start_date;
3363 ELSIF l_proj_all.project_cost_rate_date_type = 'END_DATE' THEN
3364 P_project_rate_date := l_end_date;
3365 ELSIF l_proj_all.project_cost_rate_date_type = 'FIXED_DATE' THEN
3366 P_project_rate_date := l_proj_all.project_cost_rate_date;
3367 -- This case should never come...This is an error
3368 ELSE
3369 P_project_rate_date := null; -- Costing API will derive using implmentation option setup
3370 END IF;
3371 END IF;
3372 END IF; -- l_proj_all.project_cost_rate_type = 'User'
3373 END IF; -- l_proj_all.project_cost_rate_type is null
3374 END IF ; -- IF l_pc_conv = 'N' THEN
3375
3376 -- PFC Conversion
3377 IF l_pfc_conv = 'N' THEN
3378 IF (l_proj_all.projfunc_cost_rate_type is null) THEN
3379 null; -- means no currency rates override at proj level
3380 ELSE
3381 --- use this rate type
3382 IF l_proj_all.projfunc_cost_rate_type = 'User' THEN
3383 --- calc cost
3384 l_pfc_conv := 'Y';
3385 P_projfunc_curr_code := l_projfunc_curr_code;
3386 P_projfunc_cost_rate_type := l_proj_all.projfunc_cost_rate_type;
3387 P_projfunc_cost_rate_date := l_proj_all.projfunc_cost_rate_date;
3388 P_projfunc_cost_exch_rate := l_projfunc_cost_exchange_rate;
3389 P_projfunc_raw_cost := P_txn_cost * P_projfunc_cost_exch_rate;
3390
3391 IF l_projfunc_cost_exchange_rate IS NULL THEN
3392 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3393 ,p_msg_name => 'PA_FP_USER_EXCH_RATE_REQ');
3394 x_msg_data := 'PA_FP_USER_EXCH_RATE_REQ';
3395 x_return_status := FND_API.G_RET_STS_ERROR;
3396 RAISE FND_API.G_EXC_ERROR;
3397 END IF;
3398 ELSE
3399 P_projfunc_curr_code := l_projfunc_curr_code;
3400 P_projfunc_cost_rate_type := l_proj_all.projfunc_cost_rate_type;
3401 IF l_proj_all.projfunc_cost_rate_date IS NOT NULL THEN
3402 P_projfunc_cost_rate_date := l_proj_all.projfunc_cost_rate_date;
3403 ELSE
3404 IF l_proj_all.projfunc_cost_rate_date_type = 'START_DATE' THEN
3405 P_projfunc_cost_rate_date := l_start_date;
3406 ELSIF l_proj_all.projfunc_cost_rate_date_type = 'END_DATE' THEN
3407 P_projfunc_cost_rate_date := l_end_date;
3408 ELSIF l_proj_all.projfunc_cost_rate_date_type = 'FIXED_DATE' THEN
3409 P_projfunc_cost_rate_date := l_proj_all.project_cost_rate_date;
3410 -- This case should never come...This is an error
3411 ELSE
3412 P_projfunc_cost_rate_date := null; -- Costing API will derive using implmentation option setup
3413 END IF;
3414 END IF;
3415 END IF; -- l_proj_all.projfunc_cost_rate_type = 'User'
3416 END IF; -- l_proj_all.projfunc_cost_rate_type is null
3417 END IF;--IF l_pfc_conv = 'N' THEN
3418
3419 END IF; -- l_bgt_line_rates.resource_assignment_id IS NOT NULL
3420 END IF; -- p_calling_mode = 'PLAN_RATES'
3421
3422 IF (l_pc_conv = 'N' OR l_pfc_conv = 'N') THEN
3423 tmp_project_rate_type := P_project_rate_type;
3424 tmp_project_rate_date := P_project_rate_date;
3425 tmp_project_exch_rate := P_project_exch_rate;
3426 tmp_project_raw_cost := P_project_raw_cost;
3427
3428 tmp_projfunc_rate_type := P_projfunc_cost_rate_type;
3429 tmp_projfunc_rate_date := P_projfunc_cost_rate_date;
3430 tmp_projfunc_exch_rate := P_projfunc_cost_exch_rate;
3431 tmp_projfunc_raw_cost := P_projfunc_raw_cost;
3432
3433 IF l_pc_conv = 'Y' THEN
3434 -- This is possible when TXN to PC is User and rate is found
3435 -- So if we pass this rate type to Costing API
3436 -- It will error out..
3437 tmp_project_rate_type := P_projfunc_cost_rate_type;
3438 tmp_project_rate_date := P_projfunc_cost_rate_date;
3439 tmp_project_exch_rate := P_projfunc_cost_exch_rate;
3440 tmp_project_raw_cost := P_projfunc_raw_cost;
3441 END IF;
3442 IF l_pfc_conv = 'Y' THEN
3443 tmp_projfunc_rate_type := P_project_rate_type;
3444 tmp_projfunc_rate_date := P_project_rate_date;
3445 tmp_projfunc_exch_rate := P_project_exch_rate;
3446 tmp_projfunc_raw_cost := P_project_raw_cost;
3447 END IF;
3448
3449 BEGIN
3450 IF g1_debug_mode = 'Y' THEN
3451 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);
3452 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);
3453 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);
3454 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);
3455 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);
3456 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);
3457 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);
3458 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);
3459 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);
3460 END IF;
3461
3462 pa_multi_currency_txn.get_currency_amounts (
3463 p_calling_module => 'WORKPLAN', -- FPM Dev CR 3
3464 P_project_id => p_project_id,
3465 P_exp_org_id => l_org_id,
3466 P_task_id => p_task_id,
3467 P_EI_date => p_as_of_date,
3468 P_denom_raw_cost => p_txn_cost,
3469 P_denom_curr_code => P_txn_curr_code,
3470 P_acct_curr_code => P_txn_curr_code,
3471 P_acct_rate_date => l_acct_rate_date,
3472 P_acct_rate_type => l_acct_rate_type,
3473 P_acct_exch_rate => l_acct_exch_rate,
3474 P_acct_raw_cost => l_acct_raw_cost,
3475 P_project_curr_code => l_project_curr_code,
3476 P_project_rate_type => tmp_project_rate_type ,
3477 P_project_rate_date => tmp_project_rate_date,
3478 P_project_exch_rate => tmp_project_exch_rate,
3479 P_project_raw_cost => tmp_project_raw_cost,
3480 P_projfunc_curr_code => l_projfunc_curr_code,
3481 p_projfunc_cost_rate_type => tmp_projfunc_rate_type,
3482 P_projfunc_cost_rate_date => tmp_projfunc_rate_date,
3483 P_projfunc_cost_exch_rate => tmp_projfunc_exch_rate,
3484 P_projfunc_raw_cost => tmp_projfunc_raw_cost,
3485 --P_status => l_return_status, --bug 3828542
3486 P_status => l_status,
3487 P_stage => l_stage,
3488 p_structure_version_id => p_structure_version_id -- 3627787
3489 );
3490
3491 IF g1_debug_mode = 'Y' THEN
3492 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'After Call l_status='||l_status, x_Log_Level=> 3);
3493 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'After Call l_stage='||l_stage, x_Log_Level=> 3);
3494 END IF;
3495
3496
3497 EXCEPTION
3498 WHEN OTHERS THEN
3499 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROGRESS_UTILS',
3500 p_procedure_name => 'CONVERT_CURRENCY_AMOUNTS',
3501 p_error_text => SUBSTRB('pa_multi_currency_txn.get_currency_amounts:'||SQLERRM,1,120));
3502 RAISE FND_API.G_EXC_ERROR;
3503
3504 END;
3505 --bug 3828542 start
3506 IF ( l_status IS NOT NULL ) THEN
3507 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3508 ,p_msg_name => l_status);
3509 x_msg_data := l_status;
3510 l_return_status := 'E';
3511 END IF;
3512 --bug 3828542 end
3513
3514 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3515 x_return_status := 'E';
3516 RAISE FND_API.G_EXC_ERROR;
3517 END IF;
3518
3519
3520 IF l_pc_conv = 'N' THEN
3521 P_project_rate_type := tmp_project_rate_type;
3522 P_project_rate_date := tmp_project_rate_date;
3523 P_project_exch_rate := tmp_project_exch_rate;
3524 P_project_raw_cost := tmp_project_raw_cost;
3525 END IF;
3526 IF l_pfc_conv = 'N' THEN
3527 P_projfunc_cost_rate_type := tmp_projfunc_rate_type;
3528 P_projfunc_cost_rate_date := tmp_projfunc_rate_date;
3529 P_projfunc_cost_exch_rate := tmp_projfunc_exch_rate;
3530 P_projfunc_raw_cost := tmp_projfunc_raw_cost;
3531 END IF;
3532 END IF; -- IF (l_pc_conv = 'N' or l_pfc_conv = 'N') THEN
3533
3534 IF g1_debug_mode = 'Y' THEN
3535 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS', x_Msg => 'Ends', x_Log_Level=> 3);
3536 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);
3537 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);
3538 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);
3539 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);
3540 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);
3541 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);
3542 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);
3543 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);
3544 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);
3545 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);
3546
3547 END IF;
3548
3549 EXCEPTION
3550 when FND_API.G_EXC_ERROR then
3551 x_return_status := FND_API.G_RET_STS_ERROR;
3552
3553 -- 4537865 : Start
3554 ---- p_project_curr_code := NULL ; 5081809
3555 P_project_rate_type := NULL ;
3556 P_project_rate_date := NULL ;
3557 P_project_exch_rate := NULL ;
3558 P_project_raw_cost := NULL ;
3559 ---- P_projfunc_curr_code := NULL ; 5081809
3560 P_projfunc_cost_rate_type := NULL ;
3561 P_projfunc_cost_rate_date := NULL ;
3562 P_projfunc_cost_exch_rate := NULL ;
3563 P_projfunc_raw_cost := NULL ;
3564 -- 4537865 : End
3565
3566 when FND_API.G_EXC_UNEXPECTED_ERROR then
3567 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3568 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROGRESS_UTILS',
3569 p_procedure_name => 'convert_currency_amounts',
3570 p_error_text => SUBSTRB(SQLERRM,1,120));
3571 -- 4537865 : Start
3572 ---- p_project_curr_code := NULL ; 5081809
3573 P_project_rate_type := NULL ;
3574 P_project_rate_date := NULL ;
3575 P_project_exch_rate := NULL ;
3576 P_project_raw_cost := NULL ;
3577 ---- P_projfunc_curr_code := NULL ; 5081809
3578 P_projfunc_cost_rate_type := NULL ;
3579 P_projfunc_cost_rate_date := NULL ;
3580 P_projfunc_cost_exch_rate := NULL ;
3581 P_projfunc_raw_cost := NULL ;
3582 -- 4537865 : End
3583
3584 when OTHERS then
3585 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3586 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROGRESS_UTILS',
3587 p_procedure_name => 'convert_currency_amounts',
3588 p_error_text => SUBSTRB(SQLERRM,1,120));
3589
3590 -- 4537865 : Start
3591 ---- p_project_curr_code := NULL ; 5081809
3592 P_project_rate_type := NULL ;
3593 P_project_rate_date := NULL ;
3594 P_project_exch_rate := NULL ;
3595 P_project_raw_cost := NULL ;
3596 ---- P_projfunc_curr_code := NULL ; 5081809
3597 P_projfunc_cost_rate_type := NULL ;
3598 P_projfunc_cost_rate_date := NULL ;
3599 P_projfunc_cost_exch_rate := NULL ;
3600 P_projfunc_raw_cost := NULL ;
3601 -- 4537865 : End
3602 raise;
3603
3604 END convert_currency_amounts;
3605
3606 FUNCTION get_time_phase_period(p_structure_version_id IN NUMBER
3607 ,p_project_id IN NUMBER := NULL) return VARCHAR2
3608 IS
3609 l_time_phase_code VARCHAR2(30);
3610 l_structure_version_id NUMBER;
3611 BEGIN
3612 if p_structure_version_id is null then
3613 l_structure_version_id := PA_PROJ_ELEMENTS_UTILS.latest_published_ver_id(p_project_id, 'WORKPLAN');
3614 else
3615 l_structure_version_id := p_structure_version_id;
3616 end if;
3617 BEGIN
3618 l_time_phase_code := PA_FIN_PLAN_UTILS.Get_wp_bv_time_phase(l_structure_version_id);
3619 EXCEPTION
3620 WHEN OTHERS THEN
3621 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROGRESS_UTILS',
3622 p_procedure_name => 'get_time_phase_period',
3623 p_error_text => SUBSTRB('PA_FIN_PLAN_UTILS.Get_wp_bv_time_phase:'||SQLERRM,1,120));
3624 RAISE FND_API.G_EXC_ERROR;
3625 END;
3626
3627 RETURN(l_time_phase_code);
3628 END get_time_phase_period;
3629
3630 -- Bug 3879461 : Get_incremental functions are not used anymore
3631 -- Moreover getting the previous period amount logic is wrong...
3632 -- Now things are directly derived in pa_progress_pub.POPULATE_PRG_ACT_TEMP_TBL
3633 FUNCTION get_incremental_actual_cost(p_as_of_date IN DATE
3634 ,p_period_name IN VARCHAR2
3635 ,pgn_flag IN VARCHAR2
3636 ,p_project_id IN NUMBER
3637 ,p_object_id IN NUMBER
3638 ,p_object_version_id IN NUMBER
3639 ,currency_flag IN VARCHAR2 := 'T'
3640 ,p_structure_version_id IN NUMBER := null --3694031
3641 ,p_proj_element_id IN NUMBER := null /* Modified for IB4 Progress CR. */
3642 ) return NUMBER
3643 IS
3644 l_actual_cost NUMBER := NULL;
3645 l_prev_period_actual_cost NUMBER;
3646 BEGIN
3647
3648 if (currency_flag = 'P') then
3649
3650 if p_structure_version_id IS NULL
3651 THEN
3652
3653 if (pgn_flag = 'P') then
3654
3655 begin
3656 select (nvl(ppr.oth_act_cost_to_date_pc,0)+nvl(ppr.ppl_act_cost_to_date_pc,0)
3657 +nvl(ppr.eqpmt_act_cost_to_date_pc,0)+nvl(ppr.subprj_oth_act_cost_to_date_pc,0)
3658 +nvl(ppr.subprj_ppl_act_cost_pc,0)+nvl(ppr.subprj_eqpmt_act_cost_pc,0))
3659 into l_actual_cost
3660 from pa_progress_rollup ppr
3661 where ppr.project_id = p_project_id
3662 and ppr.object_id = p_object_id
3663 and prog_pa_period_name = p_period_name
3664 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3665 and ppr.structure_version_id IS NULL --bug 3802177
3666 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
3667 and ppr.as_of_date = (select max(as_of_date)
3668 from pa_progress_rollup ppr2
3669 where ppr2.project_id = ppr.project_id
3670 and ppr2.object_id = ppr.object_id
3671 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3672 and ppr2.structure_version_id IS NULL --bug 3802177
3673 and ppr2.prog_pa_period_name = ppr.prog_pa_period_name
3674 and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
3675 );
3676
3677 exception when no_data_found then
3678 l_actual_cost := 0;
3679 end;
3680
3681 begin
3682 select (nvl(ppr.oth_act_cost_to_date_pc,0)+nvl(ppr.ppl_act_cost_to_date_pc,0)
3683 +nvl(ppr.eqpmt_act_cost_to_date_pc,0)+nvl(ppr.subprj_oth_act_cost_to_date_pc,0)
3684 +nvl(ppr.subprj_ppl_act_cost_pc,0)+nvl(ppr.subprj_eqpmt_act_cost_pc,0))
3685 into l_prev_period_actual_cost
3686 from pa_progress_rollup ppr
3687 where ppr.project_id = p_project_id
3688 and ppr.object_id = p_object_id
3689 and ppr.structure_type = 'WORKPLAN'
3690 and ppr.structure_version_id IS NULL
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(ppr1.as_of_date)
3693 from pa_progress_rollup ppr1
3694 where ppr1.project_id = ppr.project_id
3695 and ppr1.object_id = ppr.object_id
3696 and ppr1.structure_type = 'WORKPLAN'
3697 and ppr1.structure_version_id IS NULL --bug 3802177
3698 and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
3699 and as_of_date < ( select min(as_of_date)
3700 from pa_progress_rollup ppr2
3701 where ppr2.project_id = ppr1.project_id
3702 and ppr2.object_id = ppr1.object_id
3703 and structure_type = 'WORKPLAN'
3704 and ppr2.structure_version_id IS NULL --bug 3802177
3705 and ppr2.prog_pa_period_name = p_period_name
3706 and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
3707 ));
3708 exception when no_data_found then
3709 l_prev_period_actual_cost := 0;
3710 end;
3711 elsif (pgn_flag ='G') then
3712 begin
3713 select (nvl(ppr.oth_act_cost_to_date_pc,0)+nvl(ppr.ppl_act_cost_to_date_pc,0)
3714 +nvl(ppr.eqpmt_act_cost_to_date_pc,0)+nvl(ppr.subprj_oth_act_cost_to_date_pc,0)
3715 +nvl(ppr.subprj_ppl_act_cost_pc,0)+nvl(ppr.subprj_eqpmt_act_cost_pc,0))
3716 into l_actual_cost
3717 from pa_progress_rollup ppr
3718 where ppr.project_id = p_project_id
3719 and ppr.object_id = p_object_id
3720 and prog_gl_period_name = p_period_name
3721 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3722 and ppr.structure_version_id IS NULL --bug 3802177
3723 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
3724 and ppr.as_of_date = (select max(as_of_date)
3725 from pa_progress_rollup ppr2
3726 where ppr2.project_id = ppr.project_id
3727 and ppr2.object_id = ppr.object_id
3728 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3729 and ppr2.structure_version_id IS NULL --bug 3802177
3730 and ppr2.prog_gl_period_name = ppr.prog_gl_period_name
3731 and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
3732
3733 exception when no_data_found then
3734 l_actual_cost := 0;
3735 end;
3736
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_date_pc,0)
3740 +nvl(ppr.subprj_ppl_act_cost_pc,0)+nvl(ppr.subprj_eqpmt_act_cost_pc,0))
3741 into l_prev_period_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 ppr.structure_type = 'WORKPLAN'
3746 and ppr.structure_version_id IS NULL
3747 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
3748 and ppr.as_of_date = ( select max(ppr1.as_of_date)
3749 from pa_progress_rollup ppr1
3750 where ppr1.project_id = ppr.project_id
3751 and ppr1.object_id = ppr.object_id
3752 and ppr1.structure_type = 'WORKPLAN'
3753 and ppr1.structure_version_id IS NULL --bug 3802177
3754 and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
3755 and as_of_date < ( select min(as_of_date)
3756 from pa_progress_rollup ppr2
3757 where ppr2.project_id = ppr1.project_id
3758 and ppr2.object_id = ppr1.object_id
3759 and structure_type = 'WORKPLAN'
3760 and ppr2.structure_version_id IS NULL --bug 3802177
3761 and ppr2.prog_gl_period_name = p_period_name
3762 and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
3763 ));
3764 exception when no_data_found then
3765 l_prev_period_actual_cost := 0;
3766 end;
3767 elsif (pgn_flag = 'N') then
3768 select (nvl(ppr.oth_act_cost_to_date_pc,0)+nvl(ppr.ppl_act_cost_to_date_pc,0)
3769 +nvl(ppr.eqpmt_act_cost_to_date_pc,0)+nvl(ppr.subprj_oth_act_cost_to_date_pc,0)
3770 +nvl(ppr.subprj_ppl_act_cost_pc,0)+nvl(ppr.subprj_eqpmt_act_cost_pc,0))
3771 into l_actual_cost
3772 from pa_progress_rollup ppr
3773 where ppr.project_id = p_project_id
3774 and ppr.object_id = p_object_id
3775 --and ppr.object_version_id = p_object_version_id
3776 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3777 and ppr.structure_version_id IS NULL --bug 3802177
3778 and ppr.as_of_date = p_as_of_date
3779 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
3780 end if; -- pgn flag.
3781 ELSIF p_structure_version_id IS NOT NULL
3782 THEN
3783 select (nvl(ppr.oth_act_cost_to_date_pc,0)+nvl(ppr.ppl_act_cost_to_date_pc,0)
3784 +nvl(ppr.eqpmt_act_cost_to_date_pc,0)+nvl(ppr.subprj_oth_act_cost_to_date_pc,0)
3785 +nvl(ppr.subprj_ppl_act_cost_pc,0)+nvl(ppr.subprj_eqpmt_act_cost_pc,0))
3786 into l_actual_cost
3787 from pa_progress_rollup ppr
3788 where ppr.project_id = p_project_id
3789 and ppr.object_id = p_object_id
3790 and ppr.structure_version_id = p_structure_version_id
3791 and structure_type = 'WORKPLAN'
3792 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
3793
3794 END IF;
3795
3796 elsif (currency_flag) = 'T' then
3797
3798 IF p_structure_version_id IS NULL
3799 THEN
3800
3801 if (pgn_flag = 'P') then
3802 begin
3803 select (nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)
3804 +nvl(ppr.eqpmt_act_cost_to_date_tc,0)+nvl(ppr.subprj_oth_act_cost_to_date_tc,0)
3805 +nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0))
3806 into l_actual_cost
3807 from pa_progress_rollup ppr
3808 where ppr.project_id = p_project_id
3809 and ppr.object_id = p_object_id
3810 and prog_pa_period_name = p_period_name
3811 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3812 and ppr.structure_version_id IS NULL --bug 3802177
3813 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
3814 and ppr.as_of_date = (select max(as_of_date)
3815 from pa_progress_rollup ppr2
3816 where ppr2.project_id = ppr.project_id
3817 and ppr2.object_id = ppr.object_id
3818 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3819 and ppr2.structure_version_id IS NULL --bug 3802177
3820 and ppr2.prog_pa_period_name = ppr.prog_pa_period_name
3821 and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
3822
3823 exception when no_data_found then
3824 l_actual_cost := 0;
3825 end;
3826
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_date_tc,0)
3830 +nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0))
3831 into l_prev_period_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 ppr.structure_type = 'WORKPLAN'
3836 and ppr.structure_version_id IS NULL
3837 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
3838 and ppr.as_of_date = ( select max(ppr1.as_of_date)
3839 from pa_progress_rollup ppr1
3840 where ppr1.project_id = ppr.project_id
3841 and ppr1.object_id = ppr.object_id
3842 and ppr1.structure_type = 'WORKPLAN'
3843 and ppr1.structure_version_id IS NULL --bug 3802177
3844 and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
3845 and as_of_date < ( select min(as_of_date)
3846 from pa_progress_rollup ppr2
3847 where ppr2.project_id = ppr1.project_id
3848 and ppr2.object_id = ppr1.object_id
3849 and structure_type = 'WORKPLAN'
3850 and ppr2.structure_version_id IS NULL --bug 3802177
3851 and ppr2.prog_pa_period_name = p_period_name
3852 and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
3853 ));
3854 exception when no_data_found then
3855 l_prev_period_actual_cost := 0;
3856 end;
3857 elsif (pgn_flag ='G') then
3858
3859 begin
3860 select (nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)
3861 +nvl(ppr.eqpmt_act_cost_to_date_tc,0)+nvl(ppr.subprj_oth_act_cost_to_date_tc,0)
3862 +nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0))
3863 into l_actual_cost
3864 from pa_progress_rollup ppr
3865 where ppr.project_id = p_project_id
3866 and ppr.object_id = p_object_id
3867 and prog_gl_period_name = p_period_name
3868 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3869 and ppr.structure_version_id IS NULL --bug 3802177
3870 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
3871 and ppr.as_of_date = (select max(as_of_date)
3872 from pa_progress_rollup ppr2
3873 where ppr2.project_id = ppr.project_id
3874 and ppr2.object_id = ppr.object_id
3875 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3876 and ppr2.structure_version_id IS NULL --bug 3802177
3877 and ppr2.prog_gl_period_name = ppr.prog_gl_period_name
3878 and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
3879
3880 exception when no_data_found then
3881 l_actual_cost := 0;
3882 end;
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_date_tc,0)
3887 +nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0))
3888 into l_prev_period_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 ppr.structure_type = 'WORKPLAN'
3893 and ppr.structure_version_id IS NULL
3894 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
3895 and ppr.as_of_date = ( select max(ppr1.as_of_date)
3896 from pa_progress_rollup ppr1
3897 where ppr1.project_id = ppr.project_id
3898 and ppr1.object_id = ppr.object_id
3899 and ppr1.structure_type = 'WORKPLAN'
3900 and ppr1.structure_version_id IS NULL --bug 3802177
3901 and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
3902 and as_of_date < ( select min(as_of_date)
3903 from pa_progress_rollup ppr2
3904 where ppr2.project_id = ppr1.project_id
3905 and ppr2.object_id = ppr1.object_id
3906 and structure_type = 'WORKPLAN'
3907 and ppr2.structure_version_id IS NULL --bug 3802177
3908 and ppr2.prog_gl_period_name = p_period_name
3909 and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
3910 ));
3911 exception when no_data_found then
3912 l_prev_period_actual_cost := 0;
3913 end;
3914 elsif (pgn_flag = 'N') then
3915 select (nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)
3916 +nvl(ppr.eqpmt_act_cost_to_date_tc,0)+nvl(ppr.subprj_oth_act_cost_to_date_tc,0)
3917 +nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0))
3918 into l_actual_cost
3919 from pa_progress_rollup ppr
3920 where ppr.project_id = p_project_id
3921 and ppr.object_id = p_object_id
3922 and ppr.object_version_id = p_object_version_id
3923 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3924 and ppr.structure_version_id IS NULL --bug 3802177
3925 and ppr.as_of_date = p_as_of_date
3926 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
3927 end if; -- pgn flag.
3928 ELSIF p_structure_version_id IS NOT NULL
3929 THEN
3930 select (nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)
3931 +nvl(ppr.eqpmt_act_cost_to_date_tc,0)+nvl(ppr.subprj_oth_act_cost_to_date_tc,0)
3932 +nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0))
3933 into l_actual_cost
3934 from pa_progress_rollup ppr
3935 where ppr.project_id = p_project_id
3936 and ppr.object_id = p_object_id
3937 and ppr.object_version_id = p_object_version_id
3938 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3939 and ppr.structure_version_id = p_structure_version_id
3940 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
3941 END IF;
3942
3943 elsif (currency_flag = 'F') then
3944
3945 IF p_structure_version_id IS NULL
3946 THEN
3947 if (pgn_flag = 'P') then
3948 begin
3949 select (nvl(ppr.oth_act_cost_to_date_fc,0)+nvl(ppr.ppl_act_cost_to_date_fc,0)
3950 +nvl(ppr.eqpmt_act_cost_to_date_fc,0)+nvl(ppr.subprj_oth_act_cost_to_date_fc,0)
3951 +nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0))
3952 into l_actual_cost
3953 from pa_progress_rollup ppr
3954 where ppr.project_id = p_project_id
3955 and ppr.object_id = p_object_id
3956 and prog_pa_period_name = p_period_name
3957 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3958 and ppr.structure_version_id IS NULL --bug 3802177
3959 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
3960 and ppr.as_of_date = (select max(as_of_date)
3961 from pa_progress_rollup ppr2
3962 where ppr2.project_id = ppr.project_id
3963 and ppr2.object_id = ppr.object_id
3964 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
3965 and ppr2.structure_version_id IS NULL --bug 3802177
3966 and ppr2.prog_pa_period_name = ppr.prog_pa_period_name
3967 and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
3968
3969 exception when no_data_found then
3970 l_actual_cost := 0;
3971 end;
3972
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_date_fc,0)
3976 +nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0))
3977 into l_prev_period_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 ppr.structure_type = 'WORKPLAN'
3982 and ppr.structure_version_id IS NULL
3983 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
3984 and ppr.as_of_date = ( select max(ppr1.as_of_date)
3985 from pa_progress_rollup ppr1
3986 where ppr1.project_id = ppr.project_id
3987 and ppr1.object_id = ppr.object_id
3988 and ppr1.structure_type = 'WORKPLAN'
3989 and ppr1.structure_version_id IS NULL --bug 3802177
3990 and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
3991 and as_of_date < ( select min(as_of_date)
3992 from pa_progress_rollup ppr2
3993 where ppr2.project_id = ppr1.project_id
3994 and ppr2.object_id = ppr1.object_id
3995 and structure_type = 'WORKPLAN'
3996 and ppr2.structure_version_id IS NULL --bug 3802177
3997 and ppr2.prog_pa_period_name = p_period_name
3998 and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
3999 ));
4000 exception when no_data_found then
4001 l_prev_period_actual_cost := 0;
4002 end;
4003 elsif (pgn_flag ='G') then
4004 begin
4005 select (nvl(ppr.oth_act_cost_to_date_fc,0)+nvl(ppr.ppl_act_cost_to_date_fc,0)
4006 +nvl(ppr.eqpmt_act_cost_to_date_fc,0)+nvl(ppr.subprj_oth_act_cost_to_date_fc,0)
4007 +nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0))
4008 into l_actual_cost
4009 from pa_progress_rollup ppr
4010 where ppr.project_id = p_project_id
4011 and ppr.object_id = p_object_id
4012 and prog_gl_period_name = p_period_name
4013 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4014 and ppr.structure_version_id IS NULL --bug 3802177
4015 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4016 and ppr.as_of_date = (select max(as_of_date)
4017 from pa_progress_rollup ppr2
4018 where ppr2.project_id = ppr.project_id
4019 and ppr2.object_id = ppr.object_id
4020 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4021 and ppr2.structure_version_id IS NULL --bug 3802177
4022 and ppr2.prog_gl_period_name = ppr.prog_gl_period_name
4023 and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
4024
4025 exception when no_data_found then
4026 l_actual_cost := 0;
4027 end;
4028
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_date_fc,0)
4032 +nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0))
4033 into l_prev_period_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 ppr.structure_type = 'WORKPLAN'
4038 and ppr.structure_version_id IS NULL
4039 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4040 and ppr.as_of_date = ( select max(ppr1.as_of_date)
4041 from pa_progress_rollup ppr1
4042 where ppr1.project_id = ppr.project_id
4043 and ppr1.object_id = ppr.object_id
4044 and ppr1.structure_type = 'WORKPLAN'
4045 and ppr1.structure_version_id IS NULL --bug 3802177
4046 and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
4047 and as_of_date < ( select min(as_of_date)
4048 from pa_progress_rollup ppr2
4049 where ppr2.project_id = ppr1.project_id
4050 and ppr2.object_id = ppr1.object_id
4051 and structure_type = 'WORKPLAN'
4052 and ppr2.structure_version_id IS NULL --bug 3802177
4053 and ppr2.prog_gl_period_name = p_period_name
4054 and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
4055 ));
4056 exception when no_data_found then
4057 l_prev_period_actual_cost := 0;
4058 end;
4059 elsif (pgn_flag = 'N') then
4060 select (nvl(ppr.oth_act_cost_to_date_fc,0)+nvl(ppr.ppl_act_cost_to_date_fc,0)
4061 +nvl(ppr.eqpmt_act_cost_to_date_fc,0)+nvl(ppr.subprj_oth_act_cost_to_date_fc,0)
4062 +nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0))
4063 into l_actual_cost
4064 from pa_progress_rollup ppr
4065 where ppr.project_id = p_project_id
4066 and ppr.object_id = p_object_id
4067 and ppr.object_version_id = p_object_version_id
4068 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4069 and ppr.structure_version_id IS NULL --bug 3802177
4070 and ppr.as_of_date = p_as_of_date
4071 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
4072 end if; -- pgn flag.
4073
4074 ELSIF p_structure_version_id IS NOT NULL
4075 THEN
4076 select (nvl(ppr.oth_act_cost_to_date_fc,0)+nvl(ppr.ppl_act_cost_to_date_fc,0)
4077 +nvl(ppr.eqpmt_act_cost_to_date_fc,0)+nvl(ppr.subprj_oth_act_cost_to_date_fc,0)
4078 +nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0))
4079 into l_actual_cost
4080 from pa_progress_rollup ppr
4081 where ppr.project_id = p_project_id
4082 and ppr.object_id = p_object_id
4083 and ppr.object_version_id = p_object_version_id
4084 and structure_type = 'WORKPLAN'
4085 and ppr.structure_version_id = p_structure_version_id
4086 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
4087 END IF;
4088
4089 end if; -- currency_flag.
4090
4091 return(NVL(l_actual_cost,0) - nvl(l_prev_period_actual_cost,0));
4092
4093 END get_incremental_actual_cost;
4094
4095 FUNCTION get_incremental_actual_rawcost(p_as_of_date IN DATE
4096 ,p_period_name IN VARCHAR2
4097 ,pgn_flag IN VARCHAR2
4098 ,p_project_id IN NUMBER
4099 ,p_object_id IN NUMBER
4100 ,p_object_version_id IN NUMBER
4101 ,currency_flag IN VARCHAR2 := 'T'
4102 ,p_structure_version_id IN NUMBER := null --3694031
4103 ,p_proj_element_id IN NUMBER := null /* Modified for IB4 Progress CR. */
4104 ) return NUMBER
4105 IS
4106 l_actual_rawcost NUMBER := NULL;
4107 l_prev_period_actual_rawcost NUMBER;
4108 BEGIN
4109
4110 if (currency_flag = 'P') then
4111
4112 IF p_structure_version_id IS NULL
4113 THEN
4114
4115 if (pgn_flag = 'P') then
4116
4117 begin
4118 select (nvl(ppr.oth_act_rawcost_to_date_pc,0)+nvl(ppr.ppl_act_rawcost_to_date_pc,0)
4119 +nvl(ppr.eqpmt_act_rawcost_to_date_pc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_pc,0)
4120 +nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0))
4121 into l_actual_rawcost
4122 from pa_progress_rollup ppr
4123 where ppr.project_id = p_project_id
4124 and ppr.object_id = p_object_id
4125 and prog_pa_period_name = p_period_name
4126 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4127 and ppr.structure_version_id IS NULL --bug 3802177
4128 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4129 and ppr.as_of_date = (select max(as_of_date)
4130 from pa_progress_rollup ppr2
4131 where ppr2.project_id = ppr.project_id
4132 and ppr2.object_id = ppr.object_id
4133 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4134 and ppr2.structure_version_id IS NULL --bug 3802177
4135 and ppr2.prog_pa_period_name = ppr.prog_pa_period_name
4136 and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
4137
4138 exception when no_data_found then
4139 l_actual_rawcost := 0;
4140 end;
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_date_pc,0)
4145 +nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0))
4146 into l_prev_period_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 ppr.structure_type = 'WORKPLAN'
4151 and ppr.structure_version_id IS NULL
4152 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4153 and ppr.as_of_date = ( select max(ppr1.as_of_date)
4154 from pa_progress_rollup ppr1
4155 where ppr1.project_id = ppr.project_id
4156 and ppr1.object_id = ppr.object_id
4157 and ppr1.structure_type = 'WORKPLAN'
4158 and ppr1.structure_version_id IS NULL --bug 3802177
4159 and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
4160 and as_of_date < ( select min(as_of_date)
4161 from pa_progress_rollup ppr2
4162 where ppr2.project_id = ppr1.project_id
4163 and ppr2.object_id = ppr1.object_id
4164 and structure_type = 'WORKPLAN'
4165 and ppr2.structure_version_id IS NULL --bug 3802177
4166 and ppr2.prog_pa_period_name = p_period_name
4167 and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
4168 ));
4169 exception when no_data_found then
4170 l_prev_period_actual_rawcost := 0;
4171 end;
4172 elsif (pgn_flag ='G') then
4173 begin
4174 select (nvl(ppr.oth_act_rawcost_to_date_pc,0)+nvl(ppr.ppl_act_rawcost_to_date_pc,0)
4175 +nvl(ppr.eqpmt_act_rawcost_to_date_pc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_pc,0)
4176 +nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0))
4177 into l_actual_rawcost
4178 from pa_progress_rollup ppr
4179 where ppr.project_id = p_project_id
4180 and ppr.object_id = p_object_id
4181 and prog_gl_period_name = p_period_name
4182 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4183 and ppr.structure_version_id IS NULL --bug 3802177
4184 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4185 and ppr.as_of_date = (select max(as_of_date)
4186 from pa_progress_rollup ppr2
4187 where ppr2.project_id = ppr.project_id
4188 and ppr2.object_id = ppr.object_id
4189 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4190 and ppr2.structure_version_id IS NULL --bug 3802177
4191 and ppr2.prog_gl_period_name = ppr.prog_gl_period_name
4192 and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
4193
4194 exception when no_data_found then
4195 l_actual_rawcost := 0;
4196 end;
4197
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_date_pc,0)
4201 +nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0))
4202 into l_prev_period_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 ppr.structure_type = 'WORKPLAN'
4207 and ppr.structure_version_id IS NULL
4208 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4209 and ppr.as_of_date = ( select max(ppr1.as_of_date)
4210 from pa_progress_rollup ppr1
4211 where ppr1.project_id = ppr.project_id
4212 and ppr1.object_id = ppr.object_id
4213 and ppr1.structure_type = 'WORKPLAN'
4214 and ppr1.structure_version_id IS NULL --bug 3802177
4215 and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
4216 and as_of_date < ( select min(as_of_date)
4217 from pa_progress_rollup ppr2
4218 where ppr2.project_id = ppr1.project_id
4219 and ppr2.object_id = ppr1.object_id
4220 and structure_type = 'WORKPLAN'
4221 and ppr2.structure_version_id IS NULL --bug 3802177
4222 and ppr2.prog_gl_period_name = p_period_name
4223 and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
4224 ));
4225 exception when no_data_found then
4226 l_prev_period_actual_rawcost := 0;
4227 end;
4228 elsif (pgn_flag = 'N') then
4229 select (nvl(ppr.oth_act_rawcost_to_date_pc,0)+nvl(ppr.ppl_act_rawcost_to_date_pc,0)
4230 +nvl(ppr.eqpmt_act_rawcost_to_date_pc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_pc,0)
4231 +nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0))
4232 into l_actual_rawcost
4233 from pa_progress_rollup ppr
4234 where ppr.project_id = p_project_id
4235 and ppr.object_id = p_object_id
4236 --and ppr.object_version_id = p_object_version_id
4237 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4238 and ppr.structure_version_id IS NULL --bug 3802177
4239 and ppr.as_of_date = p_as_of_date
4240 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
4241 end if; -- pgn flag.
4242 ELSIF p_structure_version_id IS NOT NULL
4243 THEN
4244 select (nvl(ppr.oth_act_rawcost_to_date_pc,0)+nvl(ppr.ppl_act_rawcost_to_date_pc,0)
4245 +nvl(ppr.eqpmt_act_rawcost_to_date_pc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_pc,0)
4246 +nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0))
4247 into l_actual_rawcost
4248 from pa_progress_rollup ppr
4249 where ppr.project_id = p_project_id
4250 and ppr.object_id = p_object_id
4251 and ppr.object_version_id = p_object_version_id
4252 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4253 and ppr.structure_version_id = p_structure_version_id
4254 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
4255 END IF;
4256
4257 elsif (currency_flag) = 'T' then
4258
4259 IF p_structure_version_id IS NULL
4260 THEN
4261 if (pgn_flag = 'P') then
4262 begin
4263 select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
4264 +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_tc,0)
4265 +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0))
4266 into l_actual_rawcost
4267 from pa_progress_rollup ppr
4268 where ppr.project_id = p_project_id
4269 and ppr.object_id = p_object_id
4270 and prog_pa_period_name = p_period_name
4271 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4272 and ppr.structure_version_id IS NULL --bug 3802177
4273 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4274 and ppr.as_of_date = (select max(as_of_date)
4275 from pa_progress_rollup ppr2
4276 where ppr2.project_id = ppr.project_id
4277 and ppr2.object_id = ppr.object_id
4278 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4279 and ppr2.structure_version_id IS NULL --bug 3802177
4280 and ppr2.prog_pa_period_name = ppr.prog_pa_period_name
4281 and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
4282
4283 exception when no_data_found then
4284 l_actual_rawcost := 0;
4285 end;
4286
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_date_tc,0)
4290 +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0))
4291 into l_prev_period_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 ppr.structure_type = 'WORKPLAN'
4296 and ppr.structure_version_id IS NULL
4297 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4298 and ppr.as_of_date = ( select max(ppr1.as_of_date)
4299 from pa_progress_rollup ppr1
4300 where ppr1.project_id = ppr.project_id
4301 and ppr1.object_id = ppr.object_id
4302 and ppr1.structure_type = 'WORKPLAN'
4303 and ppr1.structure_version_id IS NULL --bug 3802177
4304 and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
4305 and as_of_date < ( select min(as_of_date)
4306 from pa_progress_rollup ppr2
4307 where ppr2.project_id = ppr1.project_id
4308 and ppr2.object_id = ppr1.object_id
4309 and structure_type = 'WORKPLAN'
4310 and ppr2.structure_version_id IS NULL --bug 3802177
4311 and ppr2.prog_pa_period_name = p_period_name
4312 and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
4313 ));
4314 exception when no_data_found then
4315 l_prev_period_actual_rawcost := 0;
4316 end;
4317 elsif (pgn_flag ='G') then
4318
4319 begin
4320 select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
4321 +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_tc,0)
4322 +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0))
4323 into l_actual_rawcost
4324 from pa_progress_rollup ppr
4325 where ppr.project_id = p_project_id
4326 and ppr.object_id = p_object_id
4327 and prog_gl_period_name = p_period_name
4328 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4329 and ppr.structure_version_id IS NULL --bug 3802177
4330 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4331 and ppr.as_of_date = (select max(as_of_date)
4332 from pa_progress_rollup ppr2
4333 where ppr2.project_id = ppr.project_id
4334 and ppr2.object_id = ppr.object_id
4335 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4336 and ppr2.structure_version_id IS NULL --bug 3802177
4337 and ppr2.prog_gl_period_name = ppr.prog_gl_period_name
4338 and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
4339
4340 exception when no_data_found then
4341 l_actual_rawcost := 0;
4342 end;
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_date_tc,0)
4347 +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0))
4348 into l_prev_period_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 ppr.structure_type = 'WORKPLAN'
4353 and ppr.structure_version_id IS NULL
4354 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4355 and ppr.as_of_date = ( select max(ppr1.as_of_date)
4356 from pa_progress_rollup ppr1
4357 where ppr1.project_id = ppr.project_id
4358 and ppr1.object_id = ppr.object_id
4359 and ppr1.structure_type = 'WORKPLAN'
4360 and ppr1.structure_version_id IS NULL --bug 3802177
4361 and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
4362 and as_of_date < ( select min(as_of_date)
4363 from pa_progress_rollup ppr2
4364 where ppr2.project_id = ppr1.project_id
4365 and ppr2.object_id = ppr1.object_id
4366 and structure_type = 'WORKPLAN'
4367 and ppr2.structure_version_id IS NULL --bug 3802177
4368 and ppr2.prog_gl_period_name = p_period_name
4369 and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
4370 ));
4371 exception when no_data_found then
4372 l_prev_period_actual_rawcost := 0;
4373 end;
4374 elsif (pgn_flag = 'N') then
4375 select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
4376 +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_tc,0)
4377 +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0))
4378 into l_actual_rawcost
4379 from pa_progress_rollup ppr
4380 where ppr.project_id = p_project_id
4381 and ppr.object_id = p_object_id
4382 and ppr.object_version_id = p_object_version_id
4383 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4384 and ppr.structure_version_id IS NULL --bug 3802177
4385 and ppr.as_of_date = p_as_of_date
4386 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
4387 end if; -- pgn flag.
4388 ELSIF p_structure_version_id IS NOT NULL
4389 THEN
4390 select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
4391 +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_tc,0)
4392 +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0))
4393 into l_actual_rawcost
4394 from pa_progress_rollup ppr
4395 where ppr.project_id = p_project_id
4396 and ppr.object_id = p_object_id
4397 and ppr.object_version_id = p_object_version_id
4398 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4399 and ppr.structure_version_id = p_structure_version_id
4400 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
4401 END IF;
4402
4403 elsif (currency_flag = 'F') then
4404
4405 IF p_structure_version_id IS NULL
4406 THEN
4407 if (pgn_flag = 'P') then
4408 begin
4409 select (nvl(ppr.oth_act_rawcost_to_date_fc,0)+nvl(ppr.ppl_act_rawcost_to_date_fc,0)
4410 +nvl(ppr.eqpmt_act_rawcost_to_date_fc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_fc,0)
4411 +nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0))
4412 into l_actual_rawcost
4413 from pa_progress_rollup ppr
4414 where ppr.project_id = p_project_id
4415 and ppr.object_id = p_object_id
4416 and prog_pa_period_name = p_period_name
4417 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4418 and ppr.structure_version_id IS NULL --bug 3802177
4419 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4420 and ppr.as_of_date = (select max(as_of_date)
4421 from pa_progress_rollup ppr2
4422 where ppr2.project_id = ppr.project_id
4423 and ppr2.object_id = ppr.object_id
4424 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4425 and ppr2.structure_version_id IS NULL --bug 3802177
4426 and ppr2.prog_pa_period_name = ppr.prog_pa_period_name
4427 and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
4428
4429 exception when no_data_found then
4430 l_actual_rawcost := 0;
4431 end;
4432
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_date_fc,0)
4436 +nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0))
4437 into l_prev_period_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 ppr.structure_type = 'WORKPLAN'
4442 and ppr.structure_version_id IS NULL
4443 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4444 and ppr.as_of_date = ( select max(ppr1.as_of_date)
4445 from pa_progress_rollup ppr1
4446 where ppr1.project_id = ppr.project_id
4447 and ppr1.object_id = ppr.object_id
4448 and ppr1.structure_type = 'WORKPLAN'
4449 and ppr1.structure_version_id IS NULL --bug 3802177
4450 and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
4451 and as_of_date < ( select min(as_of_date)
4452 from pa_progress_rollup ppr2
4453 where ppr2.project_id = ppr1.project_id
4454 and ppr2.object_id = ppr1.object_id
4455 and structure_type = 'WORKPLAN'
4456 and ppr2.structure_version_id IS NULL --bug 3802177
4457 and ppr2.prog_pa_period_name = p_period_name
4458 and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
4459 ));
4460 exception when no_data_found then
4461 l_prev_period_actual_rawcost := 0;
4462 end;
4463 elsif (pgn_flag ='G') then
4464 begin
4465 select (nvl(ppr.oth_act_rawcost_to_date_fc,0)+nvl(ppr.ppl_act_rawcost_to_date_fc,0)
4466 +nvl(ppr.eqpmt_act_rawcost_to_date_fc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_fc,0)
4467 +nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0))
4468 into l_actual_rawcost
4469 from pa_progress_rollup ppr
4470 where ppr.project_id = p_project_id
4471 and ppr.object_id = p_object_id
4472 and prog_gl_period_name = p_period_name
4473 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4474 and ppr.structure_version_id IS NULL --bug 3802177
4475 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4476 and ppr.as_of_date = (select max(as_of_date)
4477 from pa_progress_rollup ppr2
4478 where ppr2.project_id = ppr.project_id
4479 and ppr2.object_id = ppr.object_id
4480 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4481 and ppr2.structure_version_id IS NULL --bug 3802177
4482 and ppr2.prog_gl_period_name = ppr.prog_gl_period_name
4483 and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
4484
4485 exception when no_data_found then
4486 l_actual_rawcost := 0;
4487 end;
4488
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_date_fc,0)
4492 +nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0))
4493 into l_prev_period_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 ppr.structure_type = 'WORKPLAN'
4498 and ppr.structure_version_id IS NULL
4499 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4500 and ppr.as_of_date = ( select max(ppr1.as_of_date)
4501 from pa_progress_rollup ppr1
4502 where ppr1.project_id = ppr.project_id
4503 and ppr1.object_id = ppr.object_id
4504 and ppr1.structure_type = 'WORKPLAN'
4505 and ppr1.structure_version_id IS NULL --bug 3802177
4506 and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
4507 and as_of_date < ( select min(as_of_date)
4508 from pa_progress_rollup ppr2
4509 where ppr2.project_id = ppr1.project_id
4510 and ppr2.object_id = ppr1.object_id
4511 and structure_type = 'WORKPLAN'
4512 and ppr2.structure_version_id IS NULL --bug 3802177
4513 and ppr2.prog_gl_period_name = p_period_name
4514 and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
4515 ));
4516 exception when no_data_found then
4517 l_prev_period_actual_rawcost := 0;
4518 end;
4519 elsif (pgn_flag = 'N') then
4520 select (nvl(ppr.oth_act_rawcost_to_date_fc,0)+nvl(ppr.ppl_act_rawcost_to_date_fc,0)
4521 +nvl(ppr.eqpmt_act_rawcost_to_date_fc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_fc,0)
4522 +nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0))
4523 into l_actual_rawcost
4524 from pa_progress_rollup ppr
4525 where ppr.project_id = p_project_id
4526 and ppr.object_id = p_object_id
4527 and ppr.object_version_id = p_object_version_id
4528 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4529 and ppr.structure_version_id IS NULL --bug 3802177
4530 and ppr.as_of_date = p_as_of_date
4531 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
4532 end if; -- pgn flag.
4533 ELSIF p_structure_version_id IS NOT NULL
4534 THEN
4535 select (nvl(ppr.oth_act_rawcost_to_date_fc,0)+nvl(ppr.ppl_act_rawcost_to_date_fc,0)
4536 +nvl(ppr.eqpmt_act_rawcost_to_date_fc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_fc,0)
4537 +nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0))
4538 into l_actual_rawcost
4539 from pa_progress_rollup ppr
4540 where ppr.project_id = p_project_id
4541 and ppr.object_id = p_object_id
4542 and ppr.object_version_id = p_object_version_id
4543 and structure_type = 'WORKPLAN'
4544 and ppr.structure_version_id = p_structure_version_id
4545 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
4546 END IF;
4547
4548 end if; -- currency_flag.
4549
4550 return(NVL(l_actual_rawcost,0) - nvl(l_prev_period_actual_rawcost,0));
4551
4552 END get_incremental_actual_rawcost;
4553
4554 FUNCTION get_incremental_actual_effort(p_as_of_date IN DATE
4555 ,p_period_name IN VARCHAR2
4556 ,pgn_flag IN VARCHAR2
4557 ,p_project_id IN NUMBER
4558 ,p_object_id IN NUMBER
4559 ,p_object_version_id IN NUMBER
4560 ,p_structure_version_id IN NUMBER := null --3694031
4561 ,p_proj_element_id IN NUMBER := null /* Modified for IB4 Progress CR. */
4562 ) return NUMBER
4563 IS
4564 l_actual_effort NUMBER := NULL;
4565 l_prev_period_actual_effort NUMBER; --maansari6/15 bug 3694031
4566 BEGIN
4567
4568 IF p_structure_version_id IS NULL
4569 THEN
4570 if (pgn_flag = 'P') then
4571 --maansari6/15 3694031
4572 begin
4573 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))
4574 into l_actual_effort
4575 from pa_progress_rollup ppr
4576 where ppr.project_id = p_project_id
4577 and ppr.object_id = p_object_id
4578 and prog_pa_period_name = p_period_name
4579 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4580 and ppr.structure_version_id IS NULL --bug 3802177
4581 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4582 and ppr.as_of_date = (select max(as_of_date)
4583 from pa_progress_rollup ppr2
4584 where ppr2.project_id = ppr.project_id
4585 and ppr2.object_id = ppr.object_id
4586 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4587 and ppr2.structure_version_id IS NULL --bug 3802177
4588 and ppr2.prog_pa_period_name = ppr.prog_pa_period_name
4589 and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
4590
4591 exception when no_data_found then
4592 l_actual_effort := 0;
4593 end;
4594
4595 begin
4596 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))
4597 into l_prev_period_actual_effort
4598 from pa_progress_rollup ppr
4599 where ppr.project_id = p_project_id
4600 and ppr.object_id = p_object_id
4601 and ppr.structure_type = 'WORKPLAN'
4602 and ppr.structure_version_id IS NULL
4603 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4604 and ppr.as_of_date = ( select max(ppr1.as_of_date)
4605 from pa_progress_rollup ppr1
4606 where ppr1.project_id = ppr.project_id
4607 and ppr1.object_id = ppr.object_id
4608 and ppr1.structure_type = 'WORKPLAN'
4609 and ppr1.structure_version_id IS NULL --bug 3802177
4610 and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
4611 and as_of_date < ( select min(as_of_date)
4612 from pa_progress_rollup ppr2
4613 where ppr2.project_id = ppr1.project_id
4614 and ppr2.object_id = ppr1.object_id
4615 and structure_type = 'WORKPLAN'
4616 and ppr2.structure_version_id IS NULL --bug 3802177
4617 and ppr2.prog_pa_period_name = p_period_name
4618 and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
4619 ));
4620 exception when no_data_found then
4621 l_prev_period_actual_effort := 0;
4622 end;
4623 elsif (pgn_flag ='G') then
4624
4625 --maansari6/15 3694031
4626 begin
4627 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))
4628 into l_actual_effort
4629 from pa_progress_rollup ppr
4630 where ppr.project_id = p_project_id
4631 and ppr.object_id = p_object_id
4632 and prog_gl_period_name = p_period_name
4633 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4634 and ppr.structure_version_id IS NULL --bug 3802177
4635 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4636 and ppr.as_of_date = (select max(as_of_date)
4637 from pa_progress_rollup ppr2
4638 where ppr2.project_id = ppr.project_id
4639 and ppr2.object_id = ppr.object_id
4640 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4641 and ppr2.structure_version_id IS NULL --bug 3802177
4642 and ppr2.prog_gl_period_name = ppr.prog_gl_period_name --maansari6/15 bug 3694031
4643 and ppr2.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */);
4644
4645 exception when no_data_found then
4646 l_actual_effort := 0;
4647 end;
4648
4649 begin
4650 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))
4651 into l_prev_period_actual_effort
4652 from pa_progress_rollup ppr
4653 where ppr.project_id = p_project_id
4654 and ppr.object_id = p_object_id
4655 and ppr.structure_type = 'WORKPLAN'
4656 and ppr.structure_version_id IS NULL
4657 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
4658 and ppr.as_of_date = ( select max(ppr1.as_of_date)
4659 from pa_progress_rollup ppr1
4660 where ppr1.project_id = ppr.project_id
4661 and ppr1.object_id = ppr.object_id
4662 and ppr1.structure_type = 'WORKPLAN'
4663 and ppr1.structure_version_id IS NULL --bug 3802177
4664 and ppr1.proj_element_id = ppr.proj_element_id /* Modified for IB4 Progress CR. */
4665 and as_of_date < ( select min(as_of_date)
4666 from pa_progress_rollup ppr2
4667 where ppr2.project_id = ppr1.project_id
4668 and ppr2.object_id = ppr1.object_id
4669 and structure_type = 'WORKPLAN'
4670 and ppr2.structure_version_id IS NULL --bug 3802177
4671 and ppr2.prog_gl_period_name = p_period_name
4672 and ppr2.proj_element_id = ppr1.proj_element_id /* Modified for IB4 Progress CR. */
4673 ));
4674 exception when no_data_found then
4675 l_prev_period_actual_effort := 0;
4676 end;
4677 --maansari6/15
4678
4679 elsif (pgn_flag = 'N') then
4680 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))
4681 into l_actual_effort
4682 from pa_progress_rollup ppr
4683 where ppr.project_id = p_project_id
4684 and ppr.object_id = p_object_id
4685 and ppr.object_version_id = p_object_version_id
4686 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4687 and ppr.structure_version_id IS NULL --bug 3802177
4688 and ppr.as_of_date = p_as_of_date
4689 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
4690 end if;
4691
4692 ELSIF p_structure_version_id IS NOT NULL
4693 THEN
4694 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))
4695 into l_actual_effort
4696 from pa_progress_rollup ppr
4697 where ppr.project_id = p_project_id
4698 and ppr.object_id = p_object_id
4699 and ppr.object_version_id = p_object_version_id
4700 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4701 and ppr.structure_version_id = p_structure_version_id
4702 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
4703 END IF;
4704
4705 return(nvl(l_actual_effort,0) - nvl(l_prev_period_actual_effort,0)); --maansari6/15
4706 END get_incremental_actual_effort;
4707
4708 -- Bug 3879461 : This function is not used anywhere except AMG view PA_TASK_ASSIGNMENTS_AMG_V
4709 -- there it needs to be replaced with get_act_txn_cost_this_period
4710 -- THIS FUNCTION IS NOW USED IN ASSIGNMENT VIEWS patvw009.sql and patvw021.sql. Please refer bug 3910193
4711 FUNCTION get_act_cost_this_period (
4712 p_as_of_date IN DATE
4713 ,p_project_id IN NUMBER
4714 ,p_object_id IN NUMBER
4715 ,p_object_version_id IN NUMBER
4716 ,p_proj_element_id IN NUMBER := null /* Modified for IB4 Progress CR. */) return NUMBER
4717 IS
4718 l_act_cost_period NUMBER := NULL;
4719 l_act_cost_date NUMBER := NULL;
4720 l_act_cost_pub NUMBER := NULL;
4721
4722 cursor c_prev_prog_rec is
4723 select (nvl(ppr.oth_act_cost_to_date_pc,0)+nvl(ppr.ppl_act_cost_to_date_pc,0)
4724 +nvl(ppr.eqpmt_act_cost_to_date_pc,0)+nvl(ppr.subprj_oth_act_cost_to_date_pc,0)
4725 +nvl(ppr.subprj_ppl_act_cost_pc,0)+nvl(ppr.subprj_eqpmt_act_cost_pc,0)) act_cost_to_date
4726 from pa_progress_rollup ppr
4727 where ppr.project_id = p_project_id
4728 and ppr.object_id = p_object_id
4729 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
4730 and ppr.structure_version_id is null -- Bug 3764224
4731 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
4732 and current_flag = 'Y'
4733 ;
4734
4735 cursor c_this_prog_rec is
4736 select (nvl(ppr.oth_act_cost_to_date_pc,0)+nvl(ppr.ppl_act_cost_to_date_pc,0)
4737 +nvl(ppr.eqpmt_act_cost_to_date_pc,0)+nvl(ppr.subprj_oth_act_cost_to_date_pc,0)
4738 +nvl(ppr.subprj_ppl_act_cost_pc,0)+nvl(ppr.subprj_eqpmt_act_cost_pc,0)) act_cost_to_date
4739 from pa_progress_rollup ppr
4740 where ppr.project_id = p_project_id
4741 and ppr.object_id = p_object_id
4742 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
4743 and ppr.structure_version_id is null -- Bug 3764224
4744 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
4745 and ppr.current_flag= 'W'
4746 ;
4747
4748 BEGIN
4749
4750 open c_prev_prog_rec;
4751 fetch c_prev_prog_rec into l_act_cost_pub;
4752 close c_prev_prog_rec;
4753
4754 open c_this_prog_rec;
4755 fetch c_this_prog_rec into l_act_cost_date;
4756 close c_this_prog_rec;
4757
4758 l_act_cost_period := (nvl(l_act_cost_date,0) - nvl(l_act_cost_pub,0));
4759
4760 if (l_act_cost_period < 0) then
4761 l_act_cost_period := 0;
4762 end if;
4763
4764 return(l_act_cost_period);
4765 END get_act_cost_this_period;
4766
4767 FUNCTION get_act_txn_cost_this_period (p_as_of_date IN DATE
4768 ,p_project_id IN NUMBER
4769 ,p_object_id IN NUMBER
4770 ,p_object_version_id IN NUMBER
4771 ,p_proj_element_id IN NUMBER := null /* Modified for IB4 Progress CR. */) return NUMBER
4772 IS
4773 l_act_cost_period NUMBER := NULL;
4774 l_act_cost_date NUMBER := NULL;
4775 l_act_cost_pub NUMBER := NULL;
4776
4777 /*
4778 cursor c1 is
4779 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_date_tc,0)+nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0)) act_cost_to_date
4780 from pa_progress_rollup ppr
4781 where ppr.project_id = p_project_id
4782 and ppr.object_id = p_object_id
4783 -- and ppr.object_version_id = p_object_version_id
4784 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4785 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
4786 and ppr.as_of_date = (select max(ppr2.as_of_date)
4787 from pa_progress_rollup ppr2
4788 where ppr2.project_id = p_project_id
4789 and ppr2.object_id = p_object_id
4790 -- and ppr2.object_version_id = p_object_version_id
4791 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
4792 and ppr2.as_of_date > p_as_of_date
4793 and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR. );
4794 l_c1rec c1%rowtype;
4795 */
4796
4797 /* BEGIN: Commenting code for Bug # 3808127.
4798 cursor c_prev_prog_rec is
4799 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_date_tc,0)+nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0)) act_cost_to_date
4800 from pa_progress_rollup ppr
4801 where ppr.project_id = p_project_id
4802 and ppr.object_id = p_object_id
4803 -- and ppr.object_version_id = p_object_version_id
4804 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
4805 and ppr.structure_version_id is null -- Bug 3764224
4806 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
4807 and ppr.as_of_date = (select max(ppr2.as_of_date)
4808 from pa_progress_rollup ppr2
4809 where ppr2.project_id = p_project_id
4810 and ppr2.object_id = p_object_id
4811 and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
4812 and ppr2.structure_version_id is null -- Bug 3764224
4813 and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
4814 and ppr2.as_of_date < p_as_of_date);
4815
4816 cursor c_this_prog_rec is
4817 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_date_tc,0)+nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0)) act_cost_to_date
4818 from pa_progress_rollup ppr
4819 where ppr.project_id = p_project_id
4820 and ppr.object_id = p_object_id
4821 -- and ppr.object_version_id = p_object_version_id
4822 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
4823 and ppr.structure_version_id is null -- Bug 3764224
4824 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
4825 and ppr.as_of_date = (select max(ppr2.as_of_date)
4826 from pa_progress_rollup ppr2
4827 where ppr2.project_id = p_project_id
4828 and ppr2.object_id = p_object_id
4829 and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
4830 and ppr2.structure_version_id is null -- Bug 3764224
4831 and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
4832 and ppr2.as_of_date >= p_as_of_date);
4833
4834 END: Commenting code for Bug # 3808127. */
4835
4836 -- BEGIN: Adding code for Bug # 3808127.
4837
4838 cursor c_prev_prog_rec is
4839 select (nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)
4840 +nvl(ppr.eqpmt_act_cost_to_date_tc,0)+nvl(ppr.subprj_oth_act_cost_to_date_tc,0)
4841 +nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0)) act_cost_to_date
4842 from pa_progress_rollup ppr
4843 where ppr.project_id = p_project_id
4844 and ppr.object_id = p_object_id
4845 -- and ppr.object_version_id = p_object_version_id
4846 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
4847 and ppr.structure_version_id is null -- Bug 3764224
4848 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
4849 and current_flag = 'Y'
4850 ;
4851
4852 cursor c_this_prog_rec is
4853 select (nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)
4854 +nvl(ppr.eqpmt_act_cost_to_date_tc,0)+nvl(ppr.subprj_oth_act_cost_to_date_tc,0)
4855 +nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0)) act_cost_to_date
4856 from pa_progress_rollup ppr
4857 -- Bug 3879461 : No need to have percent complete table join now we can directly check current_flag as W
4858 -- ,pa_percent_completes ppc
4859 where ppr.project_id = p_project_id
4860 and ppr.object_id = p_object_id
4861 -- and ppr.object_version_id = p_object_version_id
4862 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
4863 and ppr.structure_version_id is null -- Bug 3764224
4864 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
4865 -- and ppr.object_id = ppc.object_id
4866 -- and ppr.as_of_date = ppc.date_computed
4867 -- and ppr.percent_complete_id = ppc.percent_complete_id
4868 -- and ppr.project_id = ppc.project_id
4869 -- and ppr.proj_element_id=ppc.task_id
4870 -- and ppr.structure_type = ppc.structure_type
4871 -- and ppc.current_flag= 'N'
4872 -- and ppc.published_flag = 'N'
4873 and ppr.current_flag= 'W'
4874 ;
4875
4876 -- END: Adding code for Bug # 3808127.
4877
4878 BEGIN
4879 -- Bug 3764224 : This function(_this_peiord) are used only in assignment cases. So it is safe to select from rollup table itself
4880 -- no need to go in percent complete table
4881 -- Bug 3764224 : RLM Changes : Commented the below code. This was not calculating the actual this period
4882 /*
4883 open c1;
4884 fetch c1 into l_c1rec;
4885 if c1%found then
4886 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_date_tc,0)+nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0))
4887 into l_act_cost_pub
4888 from pa_progress_rollup ppr,pa_percent_completes ppc
4889 where ppr.project_id = ppc.project_id
4890 and ppr.object_id = ppc.object_id
4891 and ppr.object_version_id = ppc.object_version_id
4892 and ppr.as_of_date = ppc.date_computed (+)
4893 and ppr.project_id = p_project_id
4894 and ppr.object_id = p_object_id
4895 -- and ppr.object_version_id = p_object_version_id
4896 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
4897 and ppr.percent_complete_id = ppc.percent_complete_id
4898 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
4899 and ppr.structure_type = ppc.structure_type(+) -- FPM Dev CR 3
4900 and ppr.proj_element_id = ppc.task_id (+) -- Modified for IB4 Progress CR.
4901 and ppr.as_of_date = (select max(ppc2.date_computed)
4902 from pa_percent_completes ppc2
4903 where ppc2.project_id = p_project_id
4904 and ppc2.object_id = p_object_id
4905 -- and ppc2.object_version_id = p_object_version_id
4906 and ppc2.published_flag = 'Y'
4907 and ppc2.current_flag = 'Y'
4908 and ppc2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
4909 and ppc2.task_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
4910 );
4911 l_act_cost_period := (nvl(l_c1rec.act_cost_to_date,0) - nvl(l_act_cost_pub,0));
4912
4913 end if;
4914 close c1;
4915 */
4916
4917 open c_prev_prog_rec;
4918 fetch c_prev_prog_rec into l_act_cost_pub;
4919 close c_prev_prog_rec;
4920
4921 open c_this_prog_rec;
4922 fetch c_this_prog_rec into l_act_cost_date;
4923 close c_this_prog_rec;
4924
4925 l_act_cost_period := (nvl(l_act_cost_date,0) - nvl(l_act_cost_pub,0));
4926
4927 if (l_act_cost_period < 0) then
4928 l_act_cost_period := 0;
4929 end if;
4930
4931 return(l_act_cost_period);
4932 END get_act_txn_cost_this_period;
4933
4934 -- Bug 3621404 : Raw Cost Changes, Added this procedure
4935 PROCEDURE get_all_amounts_cumulative
4936 (p_project_id IN NUMBER
4937 ,p_object_id IN NUMBER
4938 ,p_object_type IN VARCHAR2
4939 ,p_structure_version_id IN NUMBER := NULL -- Do not pass if published structure version
4940 ,p_as_of_date IN DATE := NULL -- Must pass if published structure version
4941 ,x_act_bur_cost_tc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4942 ,x_act_bur_cost_pc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4943 ,x_act_bur_cost_fc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4944 ,x_act_raw_cost_tc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4945 ,x_act_raw_cost_pc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4946 ,x_act_raw_cost_fc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4947 ,x_etc_bur_cost_tc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4948 ,x_etc_bur_cost_pc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4949 ,x_etc_bur_cost_fc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4950 ,x_etc_raw_cost_tc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4951 ,x_etc_raw_cost_pc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4952 ,x_etc_raw_cost_fc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4953 ,x_act_effort OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4954 ,x_etc_effort OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4955 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4956 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4957 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4958 ,p_proj_element_id IN NUMBER /* Modified for IB4 Progress CR. */
4959 )
4960 IS
4961 -- Bug 3627315 Issue 8 :Ccolumns were wrongly selected. Corrected it.
4962
4963 CURSOR C_GET_WORKING_AMOUNT IS
4964 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)
4965 +nvl(ppr.subprj_oth_act_cost_to_date_tc,0)+nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0)) act_bur_cost_tc,
4966 (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)
4967 +nvl(ppr.subprj_oth_act_cost_to_date_pc,0)+nvl(ppr.subprj_ppl_act_cost_pc,0)+nvl(ppr.subprj_eqpmt_act_cost_pc,0)) act_bur_cost_pc,
4968 (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)
4969 +nvl(ppr.subprj_oth_act_cost_to_date_fc,0)+nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0)) act_bur_cost_fc,
4970 (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)
4971 +nvl(ppr.spj_oth_act_rawcost_to_date_tc,0)+nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0)) act_raw_cost_tc,
4972 (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)
4973 +nvl(ppr.spj_oth_act_rawcost_to_date_pc,0)+nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0)) act_raw_cost_pc,
4974 (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)
4975 +nvl(ppr.spj_oth_act_rawcost_to_date_fc,0)+nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0)) act_raw_cost_fc,
4976 (nvl(ppr.oth_etc_cost_tc,0)+nvl(ppr.ppl_etc_cost_tc,0)+nvl(ppr.eqpmt_etc_cost_tc,0)
4977 +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,
4978 (nvl(ppr.oth_etc_cost_pc,0)+nvl(ppr.ppl_etc_cost_pc,0)+nvl(ppr.eqpmt_etc_cost_pc,0)
4979 +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,
4980 (nvl(ppr.oth_etc_cost_fc,0)+nvl(ppr.ppl_etc_cost_fc,0)+nvl(ppr.eqpmt_etc_cost_fc,0)
4981 +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,
4982 (nvl(ppr.oth_etc_rawcost_tc,0)+nvl(ppr.ppl_etc_rawcost_tc,0)+nvl(ppr.eqpmt_etc_rawcost_tc,0)
4983 +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,
4984 (nvl(ppr.oth_etc_rawcost_pc,0)+nvl(ppr.ppl_etc_rawcost_pc,0)+nvl(ppr.eqpmt_etc_rawcost_pc,0)
4985 +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,
4986 (nvl(ppr.oth_etc_rawcost_fc,0)+nvl(ppr.ppl_etc_rawcost_fc,0)+nvl(ppr.eqpmt_etc_rawcost_fc,0)
4987 +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,
4988 (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
4989 +nvl(ppr.subprj_ppl_act_effort,0)+nvl(ppr.subprj_eqpmt_act_effort,0) act_effort,
4990 (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
4991 +nvl(ppr.subprj_ppl_etc_effort,0)+nvl(ppr.subprj_eqpmt_etc_effort,0) etc_effort
4992 FROM pa_progress_rollup ppr
4993 WHERE ppr.project_id = p_project_id
4994 AND ppr.object_id = p_object_id
4995 AND ppr.object_type = p_object_type
4996 AND ppr.structure_version_id = p_structure_version_id
4997 AND ppr.structure_type = 'WORKPLAN'
4998 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */;
4999
5000 CURSOR C_GET_PUBLISHED_AMOUNT IS
5001 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)
5002 +nvl(ppr.subprj_oth_act_cost_to_date_tc,0)+nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0)) act_bur_cost_tc,
5003 (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)
5004 +nvl(ppr.subprj_oth_act_cost_to_date_pc,0)+nvl(ppr.subprj_ppl_act_cost_pc,0)+nvl(ppr.subprj_eqpmt_act_cost_pc,0)) act_bur_cost_pc,
5005 (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)
5006 +nvl(ppr.subprj_oth_act_cost_to_date_fc,0)+nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0)) act_bur_cost_fc,
5007 (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)
5008 +nvl(ppr.spj_oth_act_rawcost_to_date_tc,0)+nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0)) act_raw_cost_tc,
5009 (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)
5010 +nvl(ppr.spj_oth_act_rawcost_to_date_pc,0)+nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0)) act_raw_cost_pc,
5011 (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)
5012 +nvl(ppr.spj_oth_act_rawcost_to_date_fc,0)+nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0)) act_raw_cost_fc,
5013 (nvl(ppr.oth_etc_cost_tc,0)+nvl(ppr.ppl_etc_cost_tc,0)+nvl(ppr.eqpmt_etc_cost_tc,0)
5014 +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,
5015 (nvl(ppr.oth_etc_cost_pc,0)+nvl(ppr.ppl_etc_cost_pc,0)+nvl(ppr.eqpmt_etc_cost_pc,0)
5016 +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,
5017 (nvl(ppr.oth_etc_cost_fc,0)+nvl(ppr.ppl_etc_cost_fc,0)+nvl(ppr.eqpmt_etc_cost_fc,0)
5018 +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,
5019 (nvl(ppr.oth_etc_rawcost_tc,0)+nvl(ppr.ppl_etc_rawcost_tc,0)+nvl(ppr.eqpmt_etc_rawcost_tc,0)
5020 +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,
5021 (nvl(ppr.oth_etc_rawcost_pc,0)+nvl(ppr.ppl_etc_rawcost_pc,0)+nvl(ppr.eqpmt_etc_rawcost_pc,0)
5022 +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,
5023 (nvl(ppr.oth_etc_rawcost_fc,0)+nvl(ppr.ppl_etc_rawcost_fc,0)+nvl(ppr.eqpmt_etc_rawcost_fc,0)
5024 +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,
5025 (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
5026 +nvl(ppr.subprj_ppl_act_effort,0)+nvl(ppr.subprj_eqpmt_act_effort,0) act_effort,
5027 (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
5028 +nvl(ppr.subprj_ppl_etc_effort,0)+nvl(ppr.subprj_eqpmt_etc_effort,0) etc_effort
5029 FROM pa_progress_rollup ppr
5030 WHERE ppr.project_id = p_project_id
5031 AND ppr.object_id = p_object_id
5032 AND ppr.object_type = p_object_type
5033 AND ppr.structure_version_id is null
5034 AND ppr.structure_type = 'WORKPLAN'
5035 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
5036 AND ppr.current_flag <> 'W' -- Bug 3879461
5037 AND trunc(as_of_date) = (
5038 SELECT trunc(max(as_of_date))
5039 FROM pa_progress_rollup ppr2
5040 WHERE ppr2.project_id = p_project_id
5041 AND ppr2.object_id = p_object_id
5042 AND ppr2.object_type = p_object_type
5043 AND ppr2.structure_version_id is null
5044 AND ppr2.structure_type = 'WORKPLAN'
5045 AND as_of_date <= p_as_of_date
5046 AND ppr2.current_flag <> 'W' -- Bug 3879461
5047 and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
5048 );
5049
5050 BEGIN
5051 x_return_status := 'S';
5052
5053 IF p_structure_version_id IS NOT NULL THEN
5054 OPEN C_GET_WORKING_AMOUNT;
5055 FETCH C_GET_WORKING_AMOUNT INTO x_act_bur_cost_tc, x_act_bur_cost_pc,
5056 x_act_bur_cost_fc, x_act_raw_cost_tc,
5057 x_act_raw_cost_pc, x_act_raw_cost_fc,
5058 x_etc_bur_cost_tc, x_etc_bur_cost_pc,
5059 x_etc_bur_cost_fc, x_etc_raw_cost_tc,
5060 x_etc_raw_cost_pc, x_etc_raw_cost_fc,
5061 x_act_effort, x_etc_effort;
5062
5063 IF C_GET_WORKING_AMOUNT%NOTFOUND THEN
5064 x_act_bur_cost_tc := 0;
5065 x_act_bur_cost_pc := 0;
5066 x_act_bur_cost_fc := 0;
5067 x_act_raw_cost_tc := 0;
5068 x_act_raw_cost_pc := 0;
5069 x_act_raw_cost_fc := 0;
5070 x_etc_bur_cost_tc := 0;
5071 x_etc_bur_cost_pc := 0;
5072 x_etc_bur_cost_fc := 0;
5073 x_etc_raw_cost_tc := 0;
5074 x_etc_raw_cost_pc := 0;
5075 x_etc_raw_cost_fc := 0;
5076 x_act_effort := 0;
5077 x_etc_effort := 0;
5078 END IF;
5079 CLOSE C_GET_WORKING_AMOUNT;
5080 ELSE
5081 OPEN C_GET_PUBLISHED_AMOUNT;
5082 FETCH C_GET_PUBLISHED_AMOUNT INTO x_act_bur_cost_tc, x_act_bur_cost_pc,
5083 x_act_bur_cost_fc, x_act_raw_cost_tc,
5084 x_act_raw_cost_pc, x_act_raw_cost_fc,
5085 x_etc_bur_cost_tc, x_etc_bur_cost_pc,
5086 x_etc_bur_cost_fc, x_etc_raw_cost_tc,
5087 x_etc_raw_cost_pc, x_etc_raw_cost_fc,
5088 x_act_effort, x_etc_effort;
5089
5090 IF C_GET_PUBLISHED_AMOUNT%NOTFOUND THEN
5091 x_act_bur_cost_tc := 0;
5092 x_act_bur_cost_pc := 0;
5093 x_act_bur_cost_fc := 0;
5094 x_act_raw_cost_tc := 0;
5095 x_act_raw_cost_pc := 0;
5096 x_act_raw_cost_fc := 0;
5097 x_etc_bur_cost_tc := 0;
5098 x_etc_bur_cost_pc := 0;
5099 x_etc_bur_cost_fc := 0;
5100 x_etc_raw_cost_tc := 0;
5101 x_etc_raw_cost_pc := 0;
5102 x_etc_raw_cost_fc := 0;
5103 x_act_effort := 0;
5104 x_etc_effort := 0;
5105 END IF;
5106 CLOSE C_GET_PUBLISHED_AMOUNT;
5107 END IF;
5108 EXCEPTION
5109 WHEN OTHERS THEN
5110 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
5111 x_msg_count := 1;
5112 x_msg_data := SUBSTRB(SQLERRM,1,120);
5113
5114 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROGRESS_UTILS',
5115 p_procedure_name => 'GET_ALL_AMOUNTS_CUMULATIVE',
5116 p_error_text => SUBSTRB(SQLERRM,1,120));
5117
5118 -- 4537865
5119 x_act_bur_cost_tc := 0;
5120 x_act_bur_cost_pc := 0;
5121 x_act_bur_cost_fc := 0;
5122 x_act_raw_cost_tc := 0;
5123 x_act_raw_cost_pc := 0;
5124 x_act_raw_cost_fc := 0;
5125 x_etc_bur_cost_tc := 0;
5126 x_etc_bur_cost_pc := 0;
5127 x_etc_bur_cost_fc := 0;
5128 x_etc_raw_cost_tc := 0;
5129 x_etc_raw_cost_pc := 0;
5130 x_etc_raw_cost_fc := 0;
5131 x_act_effort := 0;
5132 x_etc_effort := 0;
5133 -- 4537865
5134
5135 raise;
5136 END get_all_amounts_cumulative;
5137
5138 -- Bug 3879461 : This function is not used.
5139 FUNCTION get_act_pfn_cost_this_period (p_as_of_date IN DATE
5140 ,p_project_id IN NUMBER
5141 ,p_object_id IN NUMBER
5142 ,p_object_version_id IN NUMBER
5143 ,p_proj_element_id IN NUMBER := null /* Modified for IB4 Progress CR. */) return NUMBER
5144 IS
5145 l_act_cost_period NUMBER := NULL;
5146 l_act_cost_date NUMBER := NULL;
5147 l_act_cost_pub NUMBER := NULL;
5148
5149 /*
5150 cursor c1 is
5151 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_date_fc,0)+nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0)) act_cost_to_date
5152 from pa_progress_rollup ppr
5153 where ppr.project_id = p_project_id
5154 and ppr.object_id = p_object_id
5155 -- and ppr.object_version_id = p_object_version_id
5156 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
5157 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) --Modified for IB4 Progress CR.
5158 and ppr.as_of_date = (select max(ppr2.as_of_date)
5159 from pa_progress_rollup ppr2
5160 where ppr2.project_id = p_project_id
5161 and ppr2.object_id = p_object_id
5162 -- and ppr2.object_version_id = p_object_version_id
5163 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
5164 and ppr2.as_of_date > p_as_of_date
5165 and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR. );
5166 l_c1rec c1%rowtype;
5167 */
5168
5169 cursor c_prev_prog_rec is
5170 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_date_fc,0)+nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0)) act_cost_to_date
5171 from pa_progress_rollup ppr
5172 where ppr.project_id = p_project_id
5173 and ppr.object_id = p_object_id
5174 -- and ppr.object_version_id = p_object_version_id
5175 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5176 and ppr.structure_version_id is null -- Bug 3764224
5177 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
5178 and ppr.as_of_date = (select max(ppr2.as_of_date)
5179 from pa_progress_rollup ppr2
5180 where ppr2.project_id = p_project_id
5181 and ppr2.object_id = p_object_id
5182 and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5183 and ppr2.structure_version_id is null -- Bug 3764224
5184 and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
5185 and ppr2.as_of_date < p_as_of_date);
5186
5187 cursor c_this_prog_rec is
5188 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_date_fc,0)+nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0)) act_cost_to_date
5189 from pa_progress_rollup ppr
5190 where ppr.project_id = p_project_id
5191 and ppr.object_id = p_object_id
5192 -- and ppr.object_version_id = p_object_version_id
5193 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5194 and ppr.structure_version_id is null -- Bug 3764224
5195 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
5196 and ppr.as_of_date = (select max(ppr2.as_of_date)
5197 from pa_progress_rollup ppr2
5198 where ppr2.project_id = p_project_id
5199 and ppr2.object_id = p_object_id
5200 and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5201 and ppr2.structure_version_id is null -- Bug 3764224
5202 and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
5203 and ppr2.as_of_date >= p_as_of_date);
5204
5205
5206 BEGIN
5207 -- Bug 3764224 : This function(_this_peiord) are used only in assignment cases. So it is safe to select from rollup table itself
5208 -- no need to go in percent complete table
5209 -- Bug 3764224 : RLM Changes : Commented the below code. This was not calculating the actual this period
5210
5211 /* open c1;
5212 fetch c1 into l_c1rec;
5213 if c1%found then
5214 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_date_fc,0)+nvl(ppr.subprj_ppl_act_cost_fc,0)+nvl(ppr.subprj_eqpmt_act_cost_fc,0))
5215 into l_act_cost_pub
5216 from pa_progress_rollup ppr,pa_percent_completes ppc
5217 where ppr.project_id = ppc.project_id
5218 and ppr.object_id = ppc.object_id
5219 and ppr.object_version_id = ppc.object_version_id
5220 and ppr.as_of_date = ppc.date_computed (+)
5221 and ppr.project_id = p_project_id
5222 and ppr.object_id = p_object_id
5223 -- and ppr.object_version_id = p_object_version_id
5224 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
5225 and ppr.percent_complete_id = ppc.percent_complete_id
5226 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5227 and ppr.structure_type = ppc.structure_type(+) -- FPM Dev CR 3
5228 and ppr.proj_element_id = ppc.task_id (+) -- Modified for IB4 Progress CR.
5229 and ppr.as_of_date = (select max(ppc2.date_computed)
5230 from pa_percent_completes ppc2
5231 where ppc2.project_id = p_project_id
5232 and ppc2.object_id = p_object_id
5233 -- and ppc2.object_version_id = p_object_version_id
5234 and ppc2.published_flag = 'Y'
5235 and ppc2.current_flag = 'Y'
5236 and ppc2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5237 and ppc2.task_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
5238 );
5239 l_act_cost_period := (nvl(l_c1rec.act_cost_to_date,0) - nvl(l_act_cost_pub,0));
5240 end if;
5241 close c1;
5242 */
5243
5244 open c_prev_prog_rec;
5245 fetch c_prev_prog_rec into l_act_cost_pub;
5246 close c_prev_prog_rec;
5247
5248 open c_this_prog_rec;
5249 fetch c_this_prog_rec into l_act_cost_date;
5250 close c_this_prog_rec;
5251
5252 l_act_cost_period := (nvl(l_act_cost_date,0) - nvl(l_act_cost_pub,0));
5253
5254
5255 if (l_act_cost_period < 0) then
5256 l_act_cost_period := 0;
5257 end if;
5258
5259 return(l_act_cost_period);
5260
5261 END get_act_pfn_cost_this_period;
5262
5263
5264 FUNCTION get_act_effort_this_period (p_as_of_date IN DATE
5265 ,p_project_id IN NUMBER
5266 ,p_object_id IN NUMBER
5267 ,p_object_version_id IN NUMBER
5268 ,p_proj_element_id IN NUMBER := null /* Modified for IB4 Progress CR. */) return NUMBER
5269 IS
5270 l_act_effort_period NUMBER := NULL;
5271 l_act_effort_date NUMBER := NULL;
5272 l_act_effort_pub NUMBER := NULL;
5273
5274
5275 /*
5276 cursor c1 is
5277 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
5278 from pa_progress_rollup ppr
5279 where ppr.project_id = p_project_id
5280 and ppr.object_id = p_object_id
5281 -- and ppr.object_version_id = p_object_version_id
5282 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5283 and ppr.as_of_date = (select max(ppr2.as_of_date)
5284 from pa_progress_rollup ppr2
5285 where ppr2.project_id = p_project_id
5286 and ppr2.object_id = p_object_id
5287 -- and ppr2.object_version_id = p_object_version_id
5288 and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5289 and ppr2.as_of_date > p_as_of_date);
5290 */
5291
5292 cursor c_prev_prog_rec is
5293 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
5294 from pa_progress_rollup ppr
5295 where ppr.project_id = p_project_id
5296 and ppr.object_id = p_object_id
5297 -- and ppr.object_version_id = p_object_version_id
5298 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5299 and ppr.structure_version_id is null -- Bug 3764224
5300 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
5301 and current_flag = 'Y'
5302 ;
5303 /* commented by maansari7/25
5304 and ppr.as_of_date = (select max(ppr2.as_of_date)
5305 from pa_progress_rollup ppr2
5306 where ppr2.project_id = p_project_id
5307 and ppr2.object_id = p_object_id
5308 and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5309 and ppr2.structure_version_id is null -- Bug 3764224
5310 and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
5311 and ppr2.as_of_date <= p_as_of_date);
5312 */
5313
5314 cursor c_this_prog_rec is
5315 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
5316 from pa_progress_rollup ppr
5317 -- Bug 3879461 : Now percent complete join is not required. current_flag = W can be used
5318 -- ,pa_percent_completes ppc
5319 where ppr.project_id = p_project_id
5320 and ppr.object_id = p_object_id
5321 -- and ppr.object_version_id = p_object_version_id
5322 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5323 and ppr.structure_version_id is null -- Bug 3764224
5324 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
5325 -- and ppr.object_id = ppc.object_id
5326 -- and ppr.as_of_date = ppc.date_computed
5327 -- and ppr.percent_complete_id = ppc.percent_complete_id
5328 -- and ppr.project_id = ppc.project_id
5329 -- and ppr.proj_element_id=ppc.task_id
5330 -- and ppr.structure_type = ppc.structure_type
5331 -- and ppc.current_flag= 'N'
5332 -- and ppc.published_flag = 'N'
5333 and ppr.current_flag= 'W'
5334 ;
5335 /* commented by maansari7/25
5336 and ppr.as_of_date = (select max(ppr2.as_of_date)
5337 from pa_progress_rollup ppr2
5338 where ppr2.project_id = p_project_id
5339 and ppr2.object_id = p_object_id
5340 and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5341 and ppr2.structure_version_id is null -- Bug 3764224
5342 and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
5343 and ppr2.as_of_date > p_as_of_date);
5344 */
5345
5346 --l_c1rec c1%rowtype;
5347
5348 --bug 3738651
5349 -- 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
5350 -- cursor cur_effort_this_period
5351 -- is
5352 -- 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))
5353 -- from pa_progress_rollup ppr,pa_percent_completes ppc
5354 -- where ppr.project_id = ppc.project_id
5355 -- and ppr.object_id = ppc.object_id
5356 -- and ppr.as_of_date = ppc.date_computed
5357 -- and ppr.project_id = p_project_id
5358 -- and ppr.object_id = p_object_id
5359 -- and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
5360 -- and ppr.percent_complete_id = ppc.percent_complete_id
5361 -- and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5362 -- and ppr.structure_type = ppc.structure_type (+) -- FPM Dev CR 3
5363 -- and ppr.proj_element_id = ppc.task_id (+) /* Modified for IB4 Progress CR. */
5364 -- and ppc.current_flag = 'N'
5365 -- and ppc.published_flag = 'N'
5366 -- ;
5367
5368 BEGIN
5369 -- Bug 3764224 : This function(_this_peiord) are used only in assignment cases. So it is safe to select from rollup table itself
5370 -- no need to go in percent complete table
5371 -- Bug 3764224 : RLM Changes : Commented the below code. This was not calculating the actual this period
5372
5373 /*
5374 open c1;
5375 fetch c1 into l_c1rec;
5376 if c1%found then
5377 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))
5378 into l_act_effort_pub
5379 from pa_progress_rollup ppr,pa_percent_completes ppc
5380 where ppr.project_id = ppc.project_id
5381 and ppr.object_id = ppc.object_id
5382 and ppr.object_version_id = ppc.object_version_id
5383 and ppr.as_of_date = ppc.date_computed (+)
5384 and ppr.project_id = p_project_id
5385 and ppr.object_id = p_object_id
5386 -- and ppr.object_version_id = p_object_version_id
5387 and ppr.percent_complete_id = ppc.percent_complete_id
5388 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5389 and ppr.structure_type = ppc.structure_type (+) -- FPM Dev CR 3
5390 and ppr.as_of_date = (select max(ppc2.date_computed)
5391 from pa_percent_completes ppc2
5392 where ppc2.project_id = p_project_id
5393 and ppc2.object_id = p_object_id
5394 -- and ppc2.object_version_id = p_object_version_id
5395 and ppc2.published_flag = 'Y'
5396 and ppc2.current_flag = 'Y'
5397 and ppc2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
5398 );
5399 l_act_effort_period := (nvl(l_c1rec.act_effort_to_date,0) - nvl(l_act_effort_pub,0));
5400 end if;
5401 close c1;
5402 */
5403
5404 open c_this_prog_rec;
5405 fetch c_this_prog_rec into l_act_effort_date;
5406 if c_this_prog_rec%notfound
5407 then
5408 close c_this_prog_rec;
5409 return 0;
5410 end if;
5411 close c_this_prog_rec;
5412
5413 open c_prev_prog_rec;
5414 fetch c_prev_prog_rec into l_act_effort_pub;
5415 close c_prev_prog_rec;
5416
5417 /* commneted by maansari7/25
5418 open c_this_prog_rec;
5419 fetch c_this_prog_rec into l_act_effort_date;
5420 close c_this_prog_rec;
5421 */
5422
5423 l_act_effort_period := (nvl(l_act_effort_date,0) - nvl(l_act_effort_pub,0));
5424
5425 if (l_act_effort_period < 0 ) then
5426 l_act_effort_period := 0;
5427 end if;
5428
5429 return(l_act_effort_period);
5430
5431
5432
5433 -- OPEN cur_effort_this_period;
5434 -- FETCH cur_effort_this_period INTO l_act_effort_period;
5435 -- IF cur_effort_this_period%FOUND
5436 -- THEN
5437 -- CLOSE cur_effort_this_period;
5438 -- RETURN l_act_effort_period;
5439 -- ELSE
5440 -- CLOSE cur_effort_this_period;
5441 -- RETURN null;
5442 -- END IF;
5443 END get_act_effort_this_period;
5444
5445 FUNCTION check_wwp_prog_publishing_ok(
5446 p_project_id IN NUMBER
5447 ,p_structure_version_id IN NUMBER
5448 ) RETURN VARCHAR2
5449 IS
5450 /* Commented for bug 5665310
5451 CURSOR C1 is
5452 select 'N'
5453 from pa_proj_elem_ver_structure ppevs
5454 where ppevs.project_id = p_project_id
5455 and ppevs.element_version_id = p_structure_version_id
5456 and ppevs.date_prog_applied_on_wver < (select max(l_update_date)
5457 from (
5458 select max(last_update_date) l_update_date
5459 from pa_progress_rollup ppr
5460 where ppr.project_id = p_project_id
5461 and object_type in ('PA_ASSIGNMENTS','PA_DELIVERABLES')
5462 and structure_type = 'WORKPLAN'
5463 and current_flag = 'Y'
5464 and ppr.structure_version_id is null
5465 union
5466 select max(last_update_date) l_update_date
5467 from pa_percent_completes
5468 where project_id = p_project_id
5469 and structure_type = 'WORKPLAN'
5470 and published_flag = 'Y'));
5471
5472 CURSOR C2 is
5473 select 'N'
5474 from pa_proj_elem_ver_structure ppevs
5475 where ppevs.project_id = p_project_id
5476 and ppevs.element_version_id = p_structure_version_id
5477 and ppevs.date_prog_applied_on_wver is null
5478 and exists (select '1'
5479 from pa_progress_rollup ppr
5480 where ppr.project_id = p_project_id
5481 and object_type in ('PA_ASSIGNMENTS','PA_DELIVERABLES')
5482 and structure_type = 'WORKPLAN'
5483 and current_flag = 'Y'
5484 and ppr.structure_version_id is null
5485 union
5486 select '1'
5487 from pa_percent_completes
5488 where project_id = p_project_id
5489 and structure_type = 'WORKPLAN'
5490 and published_flag = 'Y'); */
5491
5492 l_return_value VARCHAR2(1) := null;
5493 -- Added for Bug 5665310
5494 l_date_prog_applied_on_wver DATE;
5495 l_last_update_date DATE;
5496 l_program_flag VARCHAR2(1) := null;
5497
5498 BEGIN
5499 /* Commented for bug 5665310
5500 OPEN c1;
5501 fetch c1 INTO l_return_value;
5502 CLOSE c1;
5503
5504 if l_return_value is null then
5505 open c2;
5506 fetch c2 INTO l_return_value;
5507 close c2;
5508 end if; */
5509
5510 --Start of Addition for bug 5665310
5511
5512 SELECT date_prog_applied_on_wver
5513 INTO l_date_prog_applied_on_wver
5514 FROM pa_proj_elem_ver_structure ppevs
5515 WHERE ppevs.project_id = p_project_id
5516 AND ppevs.element_version_id = p_structure_version_id;
5517
5518 l_program_flag := PA_PROJECT_STRUCTURE_UTILS.check_program_flag_enable(p_project_id);
5519
5520 IF l_date_prog_applied_on_wver IS NOT NULL THEN
5521
5522 If nvl(l_program_flag,'N') = 'Y' then
5523 SELECT
5524 MAX(ppr.last_update_date)
5525 INTO l_last_update_date
5526 FROM pa_progress_rollup ppr
5527 WHERE ppr.project_id = p_project_id
5528 AND ppr.object_type in ('PA_ASSIGNMENTS','PA_DELIVERABLES')
5529 AND ppr.structure_type = 'WORKPLAN'
5530 AND ppr.current_flag = 'Y'
5531 AND ppr.structure_version_id is null;
5532 else
5533 SELECT
5534 MAX(ppr.last_update_date)
5535 INTO l_last_update_date
5536 FROM pa_progress_rollup ppr, pa_proj_elem_ver_structure ppevs
5537 WHERE ppr.project_id = p_project_id
5538 AND ppr.object_id = ppevs.PROJ_ELEMENT_ID
5539 AND ppr.object_type ='PA_STRUCTURES'
5540 AND ppr.structure_type = 'WORKPLAN'
5541 AND ppr.PROJ_ELEMENT_ID = ppevs.PROJ_ELEMENT_ID
5542 AND ppr.current_flag = 'Y'
5543 AND ppr.structure_version_id is null
5544 AND ppevs.project_id = ppr.project_id
5545 AND ppevs.element_version_id = p_structure_version_id;
5546
5547 end if;
5548
5549 IF l_date_prog_applied_on_wver >= NVL(l_last_update_date,l_date_prog_applied_on_wver) THEN
5550 If nvl(l_program_flag,'N') = 'Y' then
5551 SELECT MAX(last_update_date)
5552 INTO l_last_update_date
5553 FROM pa_percent_completes ppr
5554 WHERE project_id = p_project_id
5555 AND structure_type = 'WORKPLAN'
5556 AND published_flag = 'Y'
5557 AND current_flag = 'Y';
5558 end if;
5559
5560 IF l_date_prog_applied_on_wver < NVL(l_last_update_date,l_date_prog_applied_on_wver) THEN
5561
5562 l_return_value := 'N';
5563
5564 END IF;
5565
5566 ELSE
5567
5568 l_return_value := 'N';
5569
5570 END IF;
5571
5572 ELSE
5573
5574 BEGIN
5575 SELECT 'N'
5576 INTO l_return_value
5577 FROM DUAL
5578 WHERE EXISTS ( SELECT '1'
5579 FROM pa_progress_rollup ppr
5580 WHERE ppr.project_id = p_project_id
5581 AND object_type in ('PA_ASSIGNMENTS','PA_DELIVERABLES')
5582 AND structure_type = 'WORKPLAN'
5583 AND current_flag = 'Y'
5584 AND ppr.structure_version_id IS NULL);
5585
5586 EXCEPTION
5587 WHEN NO_DATA_FOUND THEN
5588 NULL;
5589 END;
5590
5591 IF l_return_value IS NULL THEN
5592
5593 BEGIN
5594
5595 SELECT 'N'
5596 INTO l_return_value
5597 FROM DUAL
5598 WHERE EXISTS ( SELECT '1'
5599 FROM pa_percent_completes
5600 WHERE project_id = p_project_id
5601 AND structure_type = 'WORKPLAN'
5602 AND published_flag = 'Y');
5603
5604 EXCEPTION
5605 WHEN NO_DATA_FOUND THEN
5606 NULL;
5607 END;
5608
5609 END IF;
5610
5611 END IF;
5612 -- End of addition for bug 5665310
5613
5614 return (NVL(l_return_value,'Y'));
5615
5616 END check_wwp_prog_publishing_ok;
5617
5618 FUNCTION Get_BAC_Value(
5619 p_project_id IN NUMBER
5620 ,p_task_weight_method IN VARCHAR2
5621 ,p_proj_element_id IN NUMBER
5622 ,p_structure_version_id IN NUMBER
5623 ,p_structure_type IN VARCHAR2
5624 ,p_working_wp_prog_flag IN VARCHAR2 default 'N' --maansari7/18. To get the planned in case of apply lp flow
5625 ,p_program_flag IN VARCHAR2 default 'Y' -- Bug 4493105
5626 ) RETURN NUMBER
5627 IS
5628 l_msg_code VARCHAR2(30);
5629 l_return_status VARCHAR2(1);
5630 l_value NUMBER;
5631 l_plan_version_id NUMBER;
5632 BEGIN
5633 -- FPM Dev CR 3 : Changes done to not call PJI Api for Workplan.
5634
5635 -- Bug 3627315 : Now this function will not call populate_workplan_data. It shd be called from calling environment
5636 IF p_structure_type = 'FINANCIAL' THEN
5637
5638 /* Begin Fix for Bug # 4115607. */
5639
5640 -- l_plan_version_id := PA_FIN_PLAN_UTILS.Get_app_budget_cost_cb_ver(p_project_id);
5641
5642 l_plan_version_id := pa_progress_utils.get_app_cost_budget_cb_wor_ver(p_project_id);
5643
5644 /* End fix for Bug # 4115607. */
5645
5646 BEGIN
5647
5648 -- IF p_project_id <> G_bac_value_project_id THEN
5649
5650 -- PJI_FM_XBS_ACCUM_UTILS.populate_workplan_data(
5651 -- p_project_id => p_project_id,
5652 -- p_struct_ver_id => p_structure_version_id,
5653 -- p_base_struct_ver_id IN NUMBER DEFAULT NULL,
5654 -- p_plan_version_id => l_plan_version_id,
5655 -- -- p_progress_actuals_flag IN VARCHAR2 DEFAULT 'N',
5656 -- x_return_status => l_return_status,
5657 -- x_msg_code => l_msg_code
5658 -- );
5659 -- G_bac_value_project_id := p_project_id;
5660 -- END IF;
5661
5662 -- Bug 3627315 : In case of Financial Structure, it should select normal(without BASE) columns from PJI table
5663 -- Anyhow it is baselined plan version
5664 -- SELECT decode(p_task_weight_method, 'EFFORT',nvl(BASE_LABOR_HOURS,0)+nvl(BASE_EQUIP_HOURS,0), PRJ_BASE_BRDN_COST)
5665 SELECT
5666 /*+ INDEX(pji_fm_xbs_accum_tmp1 pji_fm_xbs_accum_tmp1_n1)*/ -- Fix for Bug # 4162534.
5667 decode(p_task_weight_method, 'EFFORT',nvl(LABOR_HOURS,0)+nvl(EQUIPMENT_HOURS,0), PRJ_BRDN_COST)
5668 INTO l_value
5669 FROM PJI_FM_XBS_ACCUM_TMP1
5670 WHERE project_id = p_project_id
5671 AND project_element_id = p_proj_element_id
5672 AND PLAN_VERSION_ID = l_plan_version_id
5673 AND txn_currency_code is null --bug no. 3646988
5674 AND res_list_member_id is null;
5675 EXCEPTION
5676 WHEN OTHERS THEN
5677 l_value := null;
5678 END;
5679 ELSE
5680 --No Need to call PJI APi to populate its temp table. From Workplan pages, we are calling this API.
5681 -- We are calling this From AMG pa_status_pub too.
5682 -- As of now we are not calling it from Financial Forms and pages, hence it needs to be called for Financial Structure
5683 BEGIN
5684
5685 if p_working_wp_prog_flag = 'N' then
5686
5687 --bug 3896273, CR, latest published changes
5688 /*SELECT decode(p_task_weight_method, 'EFFORT',nvl(BASE_LABOR_HOURS,nvl(LABOR_HOURS,0))+
5689 nvl(BASE_EQUIP_HOURS,nvl(EQUIPMENT_HOURS,0)),
5690 NVL(PRJ_BASE_BRDN_COST,nvl(PRJ_BRDN_COST,0))) --if base is not avilable then select the published planned. bug 3781922*/
5691 -- Bug 4493105 : Added p_program_flag decode
5692 SELECT
5693 /*+ INDEX(pji_fm_xbs_accum_tmp1 pji_fm_xbs_accum_tmp1_n1)*/ -- Fix for Bug # 4162534.
5694 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)))+
5695 nvl(P_BASE_EQP_HOURS, nvl(P_LPB_EQP_HOURS, nvl(P_EQP_HOURS,0))),
5696 nvl(BASE_LABOR_HOURS, nvl(LPB_LABOR_HOURS, nvl(LABOR_HOURS,0)))+
5697 nvl(BASE_EQUIP_HOURS, nvl(LPB_EQUIP_HOURS, nvl(EQUIPMENT_HOURS,0)))
5698 ),
5699 decode(p_program_flag, 'N',NVL(P_BASE_BRDN_COST, nvl(P_LPB_BRDN_COST, nvl(P_BRDN_COST,0)))
5700 ,NVL(PRJ_BASE_BRDN_COST, nvl(PRJ_LPB_BRDN_COST, nvl(PRJ_BRDN_COST,0)))
5701 )
5702 ) --if base is not avilable then select the published planned. bug 3781922
5703 INTO l_value
5704 FROM PJI_FM_XBS_ACCUM_TMP1
5705 WHERE project_id = p_project_id
5706 AND struct_version_id = p_structure_version_id
5707 AND project_element_id = p_proj_element_id
5708 AND txn_currency_code is null --bug no. 3646988
5709 AND res_list_member_id is null;
5710
5711 else
5712 -- Bug 4493105 : Added p_program_flag decode
5713 SELECT
5714 /*+ INDEX(pji_fm_xbs_accum_tmp1 pji_fm_xbs_accum_tmp1_n1)*/ -- Fix for Bug # 4162534.
5715 decode(p_task_weight_method, 'EFFORT',decode(p_program_flag,'N',nvl(P_LBR_HOURS,0)+nvl(P_EQP_HOURS,0)
5716 ,nvl(LABOR_HOURS,0)+nvl(EQUIPMENT_HOURS,0))
5717 , decode(p_program_flag,'N',P_BRDN_COST,PRJ_BRDN_COST))
5718 INTO l_value
5719 FROM PJI_FM_XBS_ACCUM_TMP1
5720 WHERE project_id = p_project_id
5721 AND struct_version_id = p_structure_version_id
5722 AND project_element_id = p_proj_element_id
5723 AND txn_currency_code is null --bug no. 3646988
5724 AND res_list_member_id is null;
5725
5726 end if;
5727
5728 EXCEPTION
5729 WHEN OTHERS THEN
5730 l_value := null;
5731 END;
5732 END IF;
5733
5734 return l_value;
5735 EXCEPTION
5736 WHEN OTHERS THEN
5737 return null;
5738 END Get_BAC_Value;
5739
5740 FUNCTION Get_EARLY_PROGRESS_ENTRY_DATE(
5741 p_project_id NUMBER
5742 ,p_object_id NUMBER
5743 ,p_object_type VARCHAR2 := 'PA_TASKS'
5744 ,p_structure_type VARCHAR2 := 'WORKPLAN'
5745 ,p_task_id NUMBER := null /* Modified for IB4 Progress CR. */
5746 ) RETURN DATE
5747 IS
5748 l_first_date Date;
5749 CURSOR cur_ppc
5750 IS
5751 SELECT min(trunc(last_update_date))
5752 FROM pa_percent_completes
5753 WHERE object_id = p_object_id
5754 AND project_id = p_project_id
5755 and object_type = p_object_type
5756 AND published_flag = 'Y'
5757 AND structure_type = p_structure_type
5758 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. */
5759 --and task_id = nvl(p_task_id, p_object_id) /* Modified for IB4 Progress CR. */;
5760 ;
5761 BEGIN
5762
5763 OPEN cur_ppc;
5764 FETCH cur_ppc INTO l_first_date;
5765 CLOSE cur_ppc;
5766
5767 return l_first_date;
5768
5769 EXCEPTION
5770 WHEN OTHERS THEN
5771 return null;
5772 END Get_EARLY_PROGRESS_ENTRY_DATE;
5773
5774 FUNCTION Get_LATEST_PROGRESS_ENTRY_DATE(
5775 p_project_id NUMBER
5776 ,p_object_id NUMBER
5777 ,p_object_type VARCHAR2 := 'PA_TASKS'
5778 ,p_structure_type VARCHAR2 := 'WORKPLAN'
5779 ,p_task_id NUMBER := null /* Amit : Modified for IB4 Progress CR. */
5780 ) RETURN DATE
5781 IS
5782 l_first_date Date;
5783 CURSOR cur_ppc
5784 IS
5785 SELECT max(trunc(last_update_date))
5786 FROM pa_percent_completes
5787 WHERE object_id = p_object_id
5788 AND project_id = p_project_id
5789 and object_type = p_object_type
5790 AND published_flag = 'Y'
5791 AND structure_type = p_structure_type
5792 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. */
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_LATEST_PROGRESS_ENTRY_DATE;
5806
5807 FUNCTION latest_published_progress_date(p_project_id IN NUMBER
5808 ,p_structure_type IN VARCHAR2 ) RETURN DATE
5809 IS
5810 l_return_date DATE;
5811 CURSOR cur_latest_date
5812 IS
5813 select max(date_computed)
5814 from pa_percent_completes ppc
5815 where ppc.project_id = p_project_id
5816 and ppc.structure_type = p_structure_type;
5817
5818 BEGIN
5819 OPEN cur_latest_date;
5820 FETCH cur_latest_date INTO l_return_date;
5821 CLOSE cur_latest_date;
5822
5823 return(l_return_date);
5824 END latest_published_progress_date;
5825
5826 FUNCTION check_object_has_prog(
5827 p_project_id IN NUMBER -- FPM Dev CR 7 : Removed defaulting
5828 ,p_proj_element_id IN NUMBER := null /* Modified for IB4 Progress CR. */
5829 ,p_object_id IN NUMBER -- FPM Dev CR 7 : Removed defaulting
5830 ,p_object_type IN VARCHAR2:='PA_TASKS'
5831 ,p_structure_type IN VARCHAR2:='WORKPLAN'
5832 ,p_progress_status IN VARCHAR2:='ANY'
5833 ) RETURN VARCHAR2
5834 IS
5835 l_return_status VARCHAR2(1) := 'N';
5836 -- FPM Dev CR 7 : Note that p_proj_element_id is not needed, but keeping it to avoid impacts to other code
5837 CURSOR myCursor is
5838 select 'Y'
5839 from pa_progress_rollup ppr
5840 where ppr.project_id = p_project_id
5841 and ppr.object_id = p_object_id
5842 and ppr.object_type = p_object_type
5843 and ppr.structure_type = p_structure_type
5844 and ppr.structure_version_id is null -- FPM Dev CR 7
5845 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. */
5846 --and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
5847 ;
5848
5849 CURSOR myCursor_pub is
5850 select 'Y'
5851 from pa_progress_rollup ppr
5852 where ppr.project_id = p_project_id
5853 and ppr.object_id = p_object_id
5854 and ppr.object_type = p_object_type
5855 and ppr.structure_type = p_structure_type
5856 and ppr.structure_version_id is null -- FPM Dev CR 7
5857 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. */
5858 and current_flag in ('Y','N');
5859 result myCursor%rowtype;
5860
5861 BEGIN
5862
5863 if (p_progress_status = 'PUBLISHED') then
5864 OPEN myCursor_pub;
5865 FETCH myCursor_pub INTO result;
5866 if myCursor_pub%FOUND THEN
5867 close myCursor_pub;
5868 return 'Y';
5869 ELSE
5870 close myCursor_pub;
5871 return 'N';
5872 END IF;
5873 else
5874 OPEN myCursor;
5875 FETCH myCursor INTO result;
5876 if myCursor%FOUND THEN
5877 close myCursor;
5878 return 'Y';
5879 ELSE
5880 close myCursor;
5881 return 'N';
5882 END IF;
5883 end if;
5884 END check_object_has_prog;
5885
5886 --- Following APIs added by Bhumesh
5887
5888 Function Prog_Get_Pa_Period_Name (p_Date IN Date
5889 , p_org_id IN NUMBER :=null -- 4746476
5890 )
5891 RETURN VARCHAR2
5892 IS
5893 l_Org_ID pa_implementations_all.org_id%TYPE;
5894 l_Period_Name varchar2(100);
5895 BEGIN
5896 -- 4746476 : Added IF
5897 IF p_org_id IS NULL THEN
5898 SELECT org_id INTO l_Org_ID FROM PA_Implementations;
5899 ELSE
5900 l_Org_ID := p_org_id;
5901 END IF;
5902
5903 l_Period_Name := PA_UTILS2.get_pa_period_name (p_txn_date => p_Date,
5904 p_org_id => l_Org_ID );
5905
5906 Return l_Period_Name;
5907 END Prog_Get_Pa_Period_Name;
5908
5909 Function Prog_Get_GL_Period_Name (P_Date IN Date
5910 , p_org_id IN NUMBER :=null -- 4746476
5911 )
5912 RETURN VARCHAR2
5913 IS
5914 l_Org_ID pa_implementations_all.org_id%TYPE;
5915 l_Period_Name varchar2(100);
5916 BEGIN
5917 -- 4746476 : Added IF
5918 IF p_org_id IS NULL THEN
5919 SELECT org_id INTO l_Org_ID FROM PA_Implementations;
5920 ELSE
5921 l_Org_ID := p_org_id;
5922 END IF;
5923
5924 l_Period_Name := PA_UTILS2.get_GL_period_name (p_gl_date => p_Date,
5925 p_org_id => l_Org_ID );
5926
5927 Return l_Period_Name;
5928
5929 END Prog_Get_GL_Period_Name;
5930
5931 -- History
5932 -- 02-aug-04
5933 -- Added two params p_structure_version_id and p_structure_status to return base percent complete
5934 -- from a working version also.
5935 -- This change is done for B and F
5936 Procedure REDEFAULT_BASE_PC (
5937 p_Project_ID IN NUMBER
5938 ,p_Proj_element_id IN NUMBER
5939 ,p_Structure_type IN VARCHAR2 DEFAULT 'WORKPLAN'
5940 ,p_object_type IN VARCHAR2 DEFAULT 'PA_TASKS'
5941 ,p_As_Of_Date IN DATE
5942 ,p_structure_version_id IN NUMBER DEFAULT null
5943 ,p_structure_status IN VARCHAR2 DEFAULT null
5944 ,p_calling_context IN VARCHAR2 DEFAULT 'PROGRESS'
5945 ,X_base_percent_complete OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5946 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5947 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5948 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5949 )
5950 IS
5951 l_msg_code VARCHAR2(30);
5952 l_return_status VARCHAR2(1);
5953 l_value NUMBER;
5954
5955 -- 4392189 : Program Reporting Changes - Phase 2
5956 -- If p_calling_context is PROGRESS, then it will work as it is
5957 -- If it is FINANCIAL_PLANNING then it will return project % complete for Workplan
5958
5959 Cursor CUR_Base_Perc_Complete_task
5960 IS
5961 -- 4392189
5962 -- Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
5963 -- 'FINANCIAL_PLANNING', NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP))
5964 Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
5965 'FINANCIAL_PLANNING',
5966 decode(p_structure_type, 'FINANCIAL', NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP)
5967 , NVL(completed_percentage,BASE_PERCENT_COMPLETE)))
5968 From PA_Progress_Rollup
5969 Where Project_ID = P_Project_ID
5970 AND Object_ID = P_Proj_Element_ID
5971 AND Object_Type = p_object_type
5972 AND current_flag <> 'W' --bug 3879461
5973 AND As_Of_Date = ( select max(As_Of_Date) from pa_progress_rollup
5974 where Project_ID = P_Project_ID
5975 AND Object_ID = P_Proj_Element_ID
5976 AND Object_Type = p_object_type
5977 AND structure_version_id IS NULL
5978 AND current_flag <> 'W' --bug 3879461
5979 AND Structure_type = p_structure_type
5980 AND as_of_date <= p_as_of_date
5981 )
5982 AND structure_version_id IS NULL
5983 AND Structure_type = p_structure_type;
5984
5985 Cursor CUR_Base_Perc_Complete_proj
5986 IS
5987 -- 4392189
5988 -- Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
5989 -- 'FINANCIAL_PLANNING', NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP))
5990 Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
5991 'FINANCIAL_PLANNING',
5992 decode(p_structure_type, 'FINANCIAL', NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP)
5993 , NVL(completed_percentage,BASE_PERCENT_COMPLETE)))
5994 From PA_Progress_Rollup
5995 Where Project_ID = P_Project_ID
5996 AND Object_Type = p_object_type
5997 AND current_flag <> 'W' --bug 3879461
5998 AND As_Of_Date = ( select max(As_Of_Date) from pa_progress_rollup
5999 where Project_ID = P_Project_ID
6000 AND Object_Type = p_object_type
6001 AND structure_version_id IS NULL
6002 AND current_flag <> 'W' --bug 3879461
6003 AND Structure_type = p_structure_type
6004 AND as_of_date <= p_as_of_date
6005 )
6006
6007 AND structure_version_id IS NULL
6008 AND Structure_type = p_structure_type;
6009
6010 --bug 3879461 selects percent complete from working progress record.
6011 Cursor CUR_Base_Perc_Complete_task_2
6012 IS
6013 -- 4392189
6014 -- Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
6015 -- 'FINANCIAL_PLANNING', NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP))
6016 Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
6017 'FINANCIAL_PLANNING',
6018 decode(p_structure_type, 'FINANCIAL', NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP)
6019 , NVL(completed_percentage,BASE_PERCENT_COMPLETE)))
6020 From PA_Progress_Rollup
6021 Where Project_ID = P_Project_ID
6022 AND Object_ID = P_Proj_Element_ID
6023 AND Object_Type = p_object_type
6024 AND current_flag = 'W' --bug 3879461
6025 AND As_Of_Date = ( select max(As_Of_Date) from pa_progress_rollup
6026 where Project_ID = P_Project_ID
6027 AND Object_ID = P_Proj_Element_ID
6028 AND Object_Type = p_object_type
6029 AND structure_version_id IS NULL
6030 AND current_flag = 'W' --bug 3879461
6031 AND Structure_type = p_structure_type
6032 AND as_of_date <= p_as_of_date
6033 )
6034 AND structure_version_id IS NULL
6035 AND Structure_type = p_structure_type;
6036
6037 Cursor CUR_Base_Perc_Complete_proj_2
6038 IS
6039 -- 4392189
6040 -- Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
6041 -- 'FINANCIAL_PLANNING', NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP))
6042 Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
6043 'FINANCIAL_PLANNING',
6044 decode(p_structure_type, 'FINANCIAL', NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP)
6045 , NVL(completed_percentage,BASE_PERCENT_COMPLETE)))
6046 From PA_Progress_Rollup
6047 Where Project_ID = P_Project_ID
6048 AND Object_Type = p_object_type
6049 AND current_flag = 'W' --bug 3879461
6050 AND As_Of_Date = ( select max(As_Of_Date) from pa_progress_rollup
6051 where Project_ID = P_Project_ID
6052 AND Object_Type = p_object_type
6053 AND structure_version_id IS NULL
6054 AND current_flag = 'W' --bug 3879461
6055 AND Structure_type = p_structure_type
6056 AND as_of_date <= p_as_of_date
6057 )
6058
6059 AND structure_version_id IS NULL
6060 AND Structure_type = p_structure_type;
6061 --end bug 3879461 selects percent complete from working progress record.
6062
6063
6064
6065 Cursor CUR_Base_Perc_Complete_task_w
6066 IS
6067 -- 4392189
6068 -- Select NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage)
6069 -- Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
6070 -- 'FINANCIAL_PLANNING', NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP))
6071 Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
6072 'FINANCIAL_PLANNING',
6073 decode(p_structure_type, 'FINANCIAL', NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP)
6074 , NVL(completed_percentage,BASE_PERCENT_COMPLETE)))
6075 From PA_Progress_Rollup
6076 Where Project_ID = P_Project_ID
6077 AND Object_ID = P_Proj_Element_ID
6078 AND Object_Type = p_object_type
6079 --AND As_Of_Date = p_As_Of_Date
6080 AND structure_version_id = p_structure_version_id
6081 AND Structure_type = p_structure_type;
6082
6083 Cursor CUR_Base_Perc_Complete_proj_w
6084 IS
6085 -- 4392189
6086 -- Select NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage)
6087 -- Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
6088 -- 'FINANCIAL_PLANNING', NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP))
6089 Select decode( p_calling_context, 'PROGRESS', NVL(EFF_ROLLUP_PERCENT_COMP,completed_percentage),
6090 'FINANCIAL_PLANNING',
6091 decode(p_structure_type, 'FINANCIAL', NVL(completed_percentage,EFF_ROLLUP_PERCENT_COMP)
6092 , NVL(completed_percentage,BASE_PERCENT_COMPLETE)))
6093 From PA_Progress_Rollup
6094 Where Project_ID = P_Project_ID
6095 AND Object_Type = p_object_type
6096 --AND As_Of_Date = p_As_Of_Date
6097 AND structure_version_id = p_structure_version_id
6098 AND Structure_type = p_structure_type;
6099
6100
6101 BEGIN
6102 x_return_status := FND_API.G_RET_STS_SUCCESS ;
6103 X_base_percent_complete := null; --bug 3879461
6104
6105 IF ( p_structure_version_id IS NULL AND p_structure_status IS NULL ) OR
6106 ( p_structure_status = 'PUBLISHED')
6107 THEN
6108
6109 --bug 3879461 selects percent complete from working progress record.
6110 if p_calling_context = 'PROGRESS'
6111 then
6112 if p_proj_element_id is null then
6113 Open CUR_Base_Perc_Complete_proj_2;
6114 Fetch CUR_Base_Perc_Complete_proj_2 INTO X_base_percent_complete;
6115 Close CUR_Base_Perc_Complete_proj_2;
6116 else
6117 Open CUR_Base_Perc_Complete_task_2;
6118 Fetch CUR_Base_Perc_Complete_task_2 INTO X_base_percent_complete;
6119 Close CUR_Base_Perc_Complete_task_2;
6120 end if;
6121 end if;
6122 --bug 3879461 selects percent complete from working progress record.
6123
6124 if X_base_percent_complete IS NULL --bug 3879461
6125 then
6126 if p_proj_element_id is null then
6127 Open CUR_Base_Perc_Complete_proj;
6128 Fetch CUR_Base_Perc_Complete_proj INTO X_base_percent_complete;
6129 Close CUR_Base_Perc_Complete_proj;
6130 else
6131 Open CUR_Base_Perc_Complete_task;
6132 Fetch CUR_Base_Perc_Complete_task INTO X_base_percent_complete;
6133 Close CUR_Base_Perc_Complete_task;
6134 end if;
6135 end if;
6136
6137 ELSIF ( p_structure_version_id IS NOT NULL AND p_structure_status IS NOT NULL ) OR
6138 ( p_structure_status = 'WORKING')
6139 THEN
6140
6141 if p_proj_element_id is null then
6142 Open CUR_Base_Perc_Complete_proj_w;
6143 Fetch CUR_Base_Perc_Complete_proj_w INTO X_base_percent_complete;
6144 Close CUR_Base_Perc_Complete_proj_w;
6145 else
6146 Open CUR_Base_Perc_Complete_task_w;
6147 Fetch CUR_Base_Perc_Complete_task_w INTO X_base_percent_complete;
6148 Close CUR_Base_Perc_Complete_task_w;
6149 end if;
6150
6151 END IF;
6152
6153 -- Progress Management Changes. Bug # 3420093.
6154
6155 X_base_percent_complete := round(X_base_percent_complete,2);
6156
6157 -- Progress Management Changes. Bug # 3420093.
6158
6159 EXCEPTION WHEN OTHERS THEN
6160 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6161 x_Msg_Count := 0;
6162 x_Msg_Data := '';
6163 fnd_msg_pub.add_exc_msg( p_pkg_name => 'PA_PROGRESS_UTILS'
6164 ,p_procedure_name => 'REDEFAULT_BASE_PC'
6165 ,p_error_text => SUBSTRB(SQLERRM,1,120));
6166 RAISE FND_API.G_EXC_ERROR;
6167 END REDEFAULT_BASE_PC;
6168
6169 Procedure RECALCULATE_PROG_STATS (
6170 p_project_id IN NUMBER
6171 ,p_proj_element_id IN NUMBER
6172 ,p_task_version_id IN NUMBER
6173 ,p_structure_type IN VARCHAR2 DEFAULT 'WORKPLAN'
6174 ,p_As_Of_Date IN DATE
6175 ,P_Overide_Percent_Complete IN NUMBER
6176 ,p_Actual_Effort IN NUMBER
6177 ,p_Actual_Cost IN NUMBER
6178 ,p_Planned_Effort IN NUMBER
6179 ,p_Planned_Cost IN NUMBER
6180 ,p_baselined_Effort IN NUMBER
6181 ,p_baselined_Cost IN NUMBER
6182 ,x_BCWS OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6183 ,X_BCWP OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6184 ,X_SCH_Performance_Index OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6185 ,X_COST_Performance_Index OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6186 ,x_Sch_At_Completion OUT NOCOPY DATE --File.Sql.39 bug 4440895
6187 ,x_Complete_Performance_Index OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6188 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6189 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6190 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6191 )
6192 IS
6193 l_TASK_WEIGHT_BASIS_CODE VARCHAR2(30);
6194 l_Planned_Amount NUMBER ;
6195 l_Actual_Amount NUMBER ;
6196 l_Baseline_Amount NUMBER ;
6197 l_BCWS NUMBER;
6198 l_SCH_Performance_Index NUMBER;
6199 l_tcpi_denom NUMBER;
6200
6201 CURSOR cur_sch_dates
6202 IS
6203 SELECT scheduled_start_date, scheduled_finish_date
6204 from pa_proj_elem_ver_schedule ppevs
6205 where project_id=p_project_id
6206 and element_version_id=p_task_version_id
6207 ;
6208
6209 l_sch_start_date DATE;
6210 l_sch_finish_date DATE;
6211
6212 CURSOR cur_str_ver_id
6213 is
6214 select parent_structure_version_id
6215 from pa_proj_element_versions
6216 where project_id = p_project_id
6217 and proj_element_id = p_proj_element_id
6218 and element_version_id = p_task_version_id
6219 ;
6220
6221 l_str_ver_id NUMBER;
6222
6223 /* Bug # 3861344: Modified API: recalculate_prog_stats(). */
6224
6225 -- Cursor to get baselined dates.
6226
6227 cursor cur_baselined_dates is
6228 select baseline_start_date, baseline_finish_date
6229 from pa_proj_elements
6230 where project_id = p_project_id
6231 and proj_element_id = p_proj_element_id;
6232
6233 l_base_start_date DATE := NULL;
6234 l_base_finish_date DATE := NULL;
6235
6236 --bug 4308359, start
6237 CURSOR cur_proj_curr
6238 IS
6239 SELECT project_currency_code from pa_projects_all where project_id=p_project_id;
6240
6241 l_prj_currency_code VARCHAR2(120);
6242 --bug 4308359, end
6243
6244
6245 BEGIN
6246 x_return_status := FND_API.G_RET_STS_SUCCESS ;
6247
6248 Select TASK_WEIGHT_BASIS_CODE
6249 INTO l_TASK_WEIGHT_BASIS_CODE
6250 From pa_proj_progress_attr
6251 Where Project_ID = p_project_id
6252 AND Structure_type = p_structure_type;
6253
6254 If l_TASK_WEIGHT_BASIS_CODE = 'EFFORT' then
6255 l_Planned_Amount := p_Planned_Effort;
6256 l_Actual_Amount := p_Actual_Effort;
6257 l_Baseline_Amount := p_baselined_Effort;
6258
6259 ELSE
6260 l_Planned_Amount := p_Planned_Cost;
6261 l_Actual_Amount := p_Actual_Cost;
6262 l_Baseline_Amount := p_baselined_Cost;
6263
6264 OPEN cur_proj_curr;
6265 FETCH cur_proj_curr INTO l_prj_currency_code;
6266 CLOSE cur_proj_curr;
6267
6268 End if;
6269
6270 -- Progress Management Changes. Bug # 3420093.
6271
6272 /* Begin fix for Bug # 4050324. */
6273
6274 -- x_BCWP := trunc((l_Planned_Amount*P_Overide_Percent_Complete)/100,2);
6275
6276 --bug 4308359
6277 --x_BCWP := trunc((l_Baseline_Amount*P_Overide_Percent_Complete)/100,2);
6278 If l_TASK_WEIGHT_BASIS_CODE = 'EFFORT' then
6279 x_BCWP := round((l_Baseline_Amount*P_Overide_Percent_Complete)/100,5);
6280 else
6281 --x_BCWP := pa_currency.round_trans_currency_amt((l_Baseline_Amount*P_Overide_Percent_Complete)/100, l_prj_currency_code);
6282 x_BCWP := pa_currency.round_trans_currency_amt1((l_Baseline_Amount*P_Overide_Percent_Complete)/100, l_prj_currency_code);
6283 end if;
6284
6285 /* End fix for Bug # 4050324. */
6286
6287 -- Progress Management Changes. Bug # 3420093.
6288
6289 --Select (l_Planned_Amount*P_Overide_Percent_Complete)/100
6290 /*
6291 INTO x_BCWP -- Earned Value
6292 From PA_Progress_Rollup
6293 Where Project_ID = P_Project_ID
6294 AND Proj_Element_ID = P_Proj_Element_ID
6295 AND object_id = P_Proj_Element_ID
6296 --AND Object_Type = 'PA_ASSIGNMENTS'
6297 AND As_Of_Date = p_As_Of_Date
6298 AND Structure_type = p_structure_type;*/
6299
6300
6301 /* 3793758 */
6302 OPEN cur_sch_dates;
6303 FETCH cur_sch_dates INTO l_sch_start_date, l_sch_finish_date;
6304 CLOSE cur_sch_dates;
6305
6306 OPEN cur_str_ver_id;
6307 FETCH cur_str_ver_id into l_str_ver_id;
6308 CLOSE cur_str_ver_id;
6309
6310 -- Begin: Fix for Bug # 3926529.
6311
6312 /* Begin commenting out the following code.
6313 l_bcws := pa_progress_utils.get_bcws(p_project_id => p_project_id
6314 ,p_object_id => p_proj_element_id
6315 ,p_proj_element_id => p_proj_element_id
6316 ,p_as_of_date => p_as_of_date
6317 ,p_structure_version_id => l_str_ver_id
6318 ,p_structure_type => p_structure_type
6319 ,p_scheduled_start_date =>l_sch_start_date
6320 ,p_scheduled_end_date => l_sch_finish_date
6321 );
6322 End commenting out the above code. */
6323
6324 -- Get baselined dates.
6325
6326 OPEN cur_baselined_dates;
6327 FETCH cur_baselined_dates INTO l_base_start_date, l_base_finish_date;
6328 CLOSE cur_baselined_dates;
6329
6330
6331 -- Call API: pa_progress_utils.get_bcws() with baselined dates.
6332
6333 l_bcws := pa_progress_utils.get_bcws(p_project_id => p_project_id
6334 ,p_object_id => p_proj_element_id
6335 ,p_proj_element_id => p_proj_element_id
6336 ,p_as_of_date => p_as_of_date
6337 ,p_structure_version_id => l_str_ver_id
6338 ,p_structure_type => p_structure_type
6339 ,p_scheduled_start_date =>l_base_start_date
6340 ,p_scheduled_end_date => l_base_finish_date);
6341
6342 -- End: Fix for Bug # 3926529.
6343
6344 --bug 4308359
6345 --x_bcws := trunc(nvl(l_bcws,0),2);
6346 x_bcws := nvl(l_bcws,0);
6347
6348 if l_BCWS is null or l_BCWS = 0
6349 then
6350 l_bcws := 1;
6351 else
6352 l_bcws := l_BCWS;
6353 end if;
6354
6355 -- Progress Management Changes. Bug # 3420093.
6356 --bug 4308359
6357 --X_SCH_Performance_Index := trunc((x_BCWP / l_BCWS),2);
6358 X_SCH_Performance_Index := round((x_BCWP / l_BCWS),2);
6359
6360 -- Progress Management Changes. Bug # 3420093.
6361
6362 if X_SCH_Performance_Index = 0 or X_SCH_Performance_Index = null
6363 then
6364 l_SCH_Performance_Index := 1;
6365 else
6366 l_SCH_Performance_Index := X_SCH_Performance_Index;
6367 end if;
6368
6369 if l_Actual_Amount is null or l_Actual_Amount = 0
6370 then
6371 l_Actual_Amount := 1;
6372 else
6373 l_Actual_Amount := l_Actual_Amount;
6374 end if;
6375
6376 -- Progress Management Changes. Bug # 3420093.
6377 --bug 4308359
6378 --X_COST_Performance_Index := trunc((x_BCWP/l_Actual_Amount),2);
6379 X_COST_Performance_Index := round((x_BCWP/l_Actual_Amount),2);
6380
6381 -- Progress Management Changes. Bug # 3420093.
6382
6383 if p_task_version_id is not null
6384 then
6385 /*select
6386 scheduled_start_date+((scheduled_finish_date-scheduled_start_date)/l_SCH_Performance_Index)
6387 into x_Sch_At_Completion
6388 from pa_proj_elem_ver_schedule
6389 where project_id = p_project_id
6390 and proj_element_id = p_proj_element_id
6391 and element_version_id = p_task_version_id;
6392 */
6393
6394 /* Bug # 3861344: Modified API: recalculate_prog_stats(). */
6395
6396 -- x_Sch_At_Completion := l_sch_start_date+((l_sch_finish_date-l_sch_start_date)/l_SCH_Performance_Index);
6397
6398 -- Get baselined dates.
6399
6400 OPEN cur_baselined_dates;
6401 FETCH cur_baselined_dates INTO l_base_start_date, l_base_finish_date;
6402 CLOSE cur_baselined_dates;
6403
6404 -- Calculate schedule at completion.
6405
6406 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')
6407 +((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')
6408 -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'))
6409 /l_SCH_Performance_Index);
6410
6411 end if;
6412
6413 l_tcpi_denom := l_Baseline_Amount-l_Actual_Amount;
6414
6415 if l_tcpi_denom is null or l_tcpi_denom = 0
6416 then
6417 l_tcpi_denom := 1;
6418 end if;
6419
6420 -- Progress Management Changes. Bug # 3420093.
6421 --bug 4308359
6422 --x_Complete_Performance_Index := trunc(((l_Baseline_Amount- x_BCWP)/l_tcpi_denom),2);
6423 x_Complete_Performance_Index := round(((l_Baseline_Amount- x_BCWP)/l_tcpi_denom),2);
6424
6425 -- Progress Management Changes. Bug # 3420093.
6426
6427 EXCEPTION WHEN OTHERS THEN
6428 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6429 x_Msg_Count := 1; -- 4537865 Corrected as '1' .Earlier it was defined as '0'
6430 x_Msg_Data := SUBSTRB(SQLERRM,1,120) ; -- 4537865 : Corrected as err message stack .Earlier it was ''
6431 fnd_msg_pub.add_exc_msg( p_pkg_name => 'PA_PROGRESS_UTILS'
6432 ,p_procedure_name => 'RECALCULATE_PROG_STATS'
6433 ,p_error_text => SUBSTRB(SQLERRM,1,120));
6434
6435 -- 4537865
6436 x_BCWS := 0 ;
6437 X_BCWP := 0 ;
6438 X_SCH_Performance_Index := 0 ;
6439 X_COST_Performance_Index := 0 ;
6440 x_Sch_At_Completion := NULL ;
6441 x_Complete_Performance_Index := 0 ;
6442 -- 4537865
6443
6444 RAISE FND_API.G_EXC_ERROR;
6445 END RECALCULATE_PROG_STATS;
6446
6447 -- Bug 3879461 : This function is not used
6448 Procedure DEF_DATES_FROM_RESOURCES (
6449 p_project_id IN NUMBER
6450 ,p_proj_element_id IN NUMBER
6451 ,p_structure_type IN VARCHAR2 DEFAULT 'WORKPLAN'
6452 ,p_As_Of_Date IN DATE
6453 ,x_Actual_Start_Date OUT NOCOPY DATE --File.Sql.39 bug 4440895
6454 ,x_Actual_Finish_Date OUT NOCOPY DATE --File.Sql.39 bug 4440895
6455 ,x_Estimated_Start_Date OUT NOCOPY DATE --File.Sql.39 bug 4440895
6456 ,x_Estimated_Finish_Date OUT NOCOPY DATE --File.Sql.39 bug 4440895
6457 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6458 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6459 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6460 )
6461 IS
6462 Cursor CUR_Est_Sch_Dates
6463 IS
6464 Select MIN(Estimated_Start_Date), MAX(Estimated_Finish_Date), MIN(Actual_Start_Date), MAX(Actual_Finish_Date)
6465 FROM PA_Progress_Rollup
6466 Where Project_ID = P_Project_ID
6467 AND Proj_Element_ID = P_Proj_Element_ID
6468 AND Object_Type = 'PA_ASSIGNMENTS'
6469 AND As_Of_Date = p_As_Of_Date
6470 AND Structure_type = p_structure_type;
6471
6472 BEGIN
6473 x_return_status := FND_API.G_RET_STS_SUCCESS ;
6474
6475 Open CUR_Est_Sch_Dates;
6476 FETCH CUR_Est_Sch_Dates Into
6477 x_Estimated_Start_Date, x_Estimated_Finish_Date, x_Actual_Start_Date, x_Actual_Finish_Date;
6478 Close CUR_Est_Sch_Dates;
6479
6480 EXCEPTION WHEN OTHERS THEN
6481 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6482 x_Msg_Count := 1; -- 4537865 Changed from 0 to 1.
6483 x_Msg_Data := SUBSTRB(SQLERRM,1,120); -- 4537865 Changed from '' to SUBSTRB(SQLERRM,1,120)
6484
6485 -- 4537865
6486 x_Actual_Start_Date := NULL ;
6487 x_Actual_Finish_Date := NULL ;
6488 x_Estimated_Start_Date := NULL ;
6489 x_Estimated_Finish_Date := NULL ;
6490 -- 4537865
6491
6492 fnd_msg_pub.add_exc_msg( p_pkg_name => 'PA_PROGRESS_UTILS'
6493 ,p_procedure_name => 'DEF_DATES_FROM_RESOURCES'
6494 ,p_error_text => x_msg_data);
6495 RAISE FND_API.G_EXC_ERROR;
6496 END DEF_DATES_FROM_RESOURCES;
6497
6498 --- End of addding new APIs
6499
6500 FUNCTION check_actuals_allowed (p_project_id IN NUMBER
6501 ,p_structure_type IN VARCHAR2 := 'WORKPLAN') RETURN VARCHAR2
6502 IS
6503 l_return_value VARCHAR2(1) := null;
6504 BEGIN
6505
6506 select remain_effort_enable_flag
6507 into l_return_value
6508 from pa_proj_progress_attr
6509 where project_id = p_project_id
6510 and structure_type = p_structure_type;
6511
6512 return(l_return_value);
6513
6514 END check_actuals_allowed;
6515
6516 -- Progress Management Changes. Bug # 3420093.
6517
6518 FUNCTION get_bcws (p_project_id IN NUMBER
6519 ,p_object_id IN NUMBER
6520 ,p_proj_element_id IN NUMBER
6521 ,p_as_of_date IN DATE
6522 ,p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6523 ,p_rollup_method IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6524 ,p_scheduled_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
6525 ,p_scheduled_end_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
6526 ,p_prj_currency_code IN VARCHAR2 := null --bug 3824042
6527 ,p_structure_type IN VARCHAR2 := 'WORKPLAN' --maansari4/10
6528 ) RETURN NUMBER
6529 IS
6530 l_return_bcws NUMBER := null;
6531 l_multiplier NUMBER := 0;
6532 l_rollup_method VARCHAR2(15) := null;
6533
6534 -- Progress Management Changes. Bug # 3420093.
6535
6536 cursor c1 (p_project_id NUMBER, p_object_id NUMBER) is
6537 select pppa.task_weight_basis_code
6538 from pa_proj_progress_attr pppa
6539 where pppa.project_id = p_project_id
6540 and pppa.structure_type = p_structure_type;
6541
6542 cursor c2 (p_project_id NUMBER, p_proj_element_id NUMBER, p_structure_version_id NUMBER) is
6543 select
6544 /*+ INDEX(pji_fm_xbs_accum_tmp1 pji_fm_xbs_accum_tmp1_n1)*/ -- Fix for Bug # 4162534.
6545 nvl(pfxat.BASE_LABOR_HOURS,pfxat.labor_hours) labor_hours
6546 ,nvl(pfxat.BASE_EQUIP_HOURS,pfxat.equipment_hours) equipment_hours
6547 ,nvl(pfxat.PRJ_BASE_BRDN_COST,pfxat.prj_brdn_cost) prj_brdn_cost
6548 from pji_fm_xbs_accum_tmp1 pfxat
6549 where pfxat.struct_version_id = p_structure_version_id
6550 and pfxat.project_id = p_project_id
6551 and pfxat.project_element_id = p_proj_element_id
6552 and pfxat.plan_version_id > 0
6553 AND pfxat.txn_currency_code is null --bug no. 3646988
6554 and pfxat.calendar_type = 'A';
6555
6556 c1rec c1%rowtype;
6557 c2rec c2%rowtype;
6558
6559 --bug 3908112
6560 CURSOR cur_proj_curr
6561 IS
6562 SELECT project_currency_code from pa_projects_all where project_id=p_project_id;
6563
6564 l_prj_currency_code VARCHAR2(120);
6565 --end bug 3908112
6566
6567 -- Begin: Fix for Bug # 3926529.
6568
6569 cursor cur_baselined_dates is
6570 select ppe.baseline_start_date, ppe.baseline_finish_date
6571 from pa_proj_elements ppe
6572 where ppe.project_id = p_project_id
6573 and ppe.proj_element_id = p_proj_element_id;
6574
6575 cursor cur_scheduled_dates is
6576 select ppevs.scheduled_start_date, ppevs.scheduled_finish_date
6577 from pa_proj_elem_ver_schedule ppevs
6578 where ppevs.project_id = p_project_id
6579 and ppevs.proj_element_id = p_proj_element_id
6580 and ppevs.element_version_id = (select ppev.element_version_id
6581 from pa_proj_element_versions ppev
6582 where ppev.project_id = p_project_id
6583 and ppev.proj_element_id = p_proj_element_id
6584 and ppev.parent_structure_version_id = p_structure_version_id);
6585 l_start_date DATE;
6586
6587 l_end_date DATE;
6588
6589 -- End: Fix for Bug # 3926529.
6590
6591 BEGIN
6592 /* Addition for bug 6156686 */
6593 /* Commeted for bug 6664716
6594 IF NVL(l_bcws_project_id,-1) = NVL(p_project_id,-1) AND
6595 NVL(l_bcws_object_id,-1) = NVL(p_object_id,-1) AND
6596 NVL(l_bcws_proj_element_id,-1) = NVL(p_proj_element_id,-1) AND
6597 NVL(l_bcws_as_of_date,sysdate) = NVL(p_as_of_date,sysdate) AND
6598 NVL(l_bcws_structure_version_id,-1) = NVL(p_structure_version_id,-1) AND
6599 NVL(l_bcws_rollup_method,'-99') = NVL(p_rollup_method,'-99') AND
6600 NVL(l_bcws_scheduled_start_date,sysdate) = NVL(p_scheduled_start_date,sysdate) AND
6601 NVL(l_bcws_scheduled_end_date,sysdate) = NVL(p_scheduled_end_date,sysdate) AND
6602 NVL(l_bcws_prj_currency_code,'-99') = NVL(p_prj_currency_code,'-99') AND
6603 NVL(l_bcws_structure_type,'-99') = NVL(p_structure_type,'-99') THEN
6604
6605 RETURN l_bcws_value;
6606
6607 ELSE
6608
6609 l_bcws_project_id := p_project_id ;
6610 l_bcws_object_id := p_object_id ;
6611 l_bcws_proj_element_id := p_proj_element_id ;
6612 l_bcws_as_of_date := p_as_of_date ;
6613 l_bcws_structure_version_id := p_structure_version_id;
6614 l_bcws_rollup_method := p_rollup_method ;
6615 l_bcws_scheduled_start_date := p_scheduled_start_date;
6616 l_bcws_scheduled_end_date := p_scheduled_end_date ;
6617 l_bcws_prj_currency_code := p_prj_currency_code ;
6618 l_bcws_structure_type := p_structure_type ;
6619
6620 END IF;
6621 */
6622
6623 open c2(p_project_id,p_proj_element_id,p_structure_version_id);
6624 fetch c2 into c2rec;
6625 close c2;
6626
6627 --bug 6664716
6628 IF p_project_id <> l_prv_bcws_project_id OR
6629 p_structure_version_id <> l_prv_bcws_struc_ver_id
6630 THEN
6631 get_plan_value(p_project_id,p_structure_version_id,p_proj_element_id,p_as_of_date );
6632 END IF;
6633 --bug 6664716
6634
6635 if (p_rollup_method IS NOT NULL and p_rollup_method <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) then
6636
6637 if p_rollup_method = 'EFFORT' then
6638 --bug 3824042
6639 --l_return_bcws := trunc((nvl(c2rec.labor_hours,0)+nvl(c2rec.equipment_hours,0)),2);
6640
6641 --Start Changes for Bug 6664716
6642 IF l_bcws_hash_tbl.exists('PA'||p_proj_element_id) THEN
6643 l_return_bcws := nvl(l_bcws_hash_tbl('PA'||p_proj_element_id).labor_hrs,0)
6644 +nvl(l_bcws_hash_tbl('PA'||p_proj_element_id).equip_hrs,0);
6645 ELSE
6646 l_return_bcws := nvl(c2rec.labor_hours,0)+nvl(c2rec.equipment_hours,0);
6647 END IF;
6648 l_rollup_method := 'EFFORT';
6649 --End Changes for Bug 6664716
6650
6651 else
6652 --bug 3824042
6653 --l_return_bcws := trunc(nvl(c2rec.prj_brdn_cost,0),2);
6654
6655 --Start Changes for Bug 6664716
6656 IF l_bcws_hash_tbl.exists('PA'||p_proj_element_id) THEN
6657 l_return_bcws := nvl(l_bcws_hash_tbl('PA'||p_proj_element_id).prj_brdn_cost,0);
6658 ELSE
6659 l_return_bcws := nvl(c2rec.prj_brdn_cost,0);
6660 END IF;
6661 --End Changes for Bug 6664716
6662
6663 end if;
6664 else
6665 open c1(p_project_id,p_object_id);
6666 fetch c1 into c1rec;
6667 close c1;
6668
6669 if c1rec.task_weight_basis_code = 'EFFORT' then
6670 --bug 3824042
6671 --l_return_bcws := trunc((nvl(c2rec.labor_hours,0)+nvl(c2rec.equipment_hours,0)),2);
6672
6673 --Start Changes for Bug 6664716
6674 IF l_bcws_hash_tbl.exists('PA'||p_proj_element_id) THEN
6675 l_return_bcws := nvl(l_bcws_hash_tbl('PA'||p_proj_element_id).labor_hrs,0)
6676 +nvl(l_bcws_hash_tbl('PA'||p_proj_element_id).equip_hrs,0);
6677 ELSE
6678 l_return_bcws := nvl(c2rec.labor_hours,0)+nvl(c2rec.equipment_hours,0);
6679 END IF;
6680 --End Changes for Bug 6664716
6681
6682 l_rollup_method := 'EFFORT';
6683 else
6684 --bug 3824042
6685 --l_return_bcws := trunc(nvl(c2rec.prj_brdn_cost,0),2);
6686 --Start Changes for Bug 6664716
6687 IF l_bcws_hash_tbl.exists('PA'||p_proj_element_id) THEN
6688 l_return_bcws := nvl(l_bcws_hash_tbl('PA'||p_proj_element_id).prj_brdn_cost,0);
6689 ELSE
6690 l_return_bcws := nvl(c2rec.prj_brdn_cost,0);
6691 END IF;
6692 --End Changes for Bug 6664716
6693 end if;
6694 end if;
6695
6696 -- This if condition will be used when period typd is non timephased then the calcualtion of planned value is done
6697 -- in the same way as done previosly.
6698 IF l_bcws_hash_tbl.exists('PA'||p_proj_element_id) THEN
6699 NULL;
6700 ELSE
6701
6702 -- Begin: Fix for Bug # 3926529.
6703
6704 -- If input dates are not null use the input dates.
6705
6706 if (p_scheduled_start_date is not null) and (p_scheduled_end_date is not null) then
6707
6708 l_start_date := p_scheduled_start_date;
6709
6710 l_end_date := p_scheduled_end_date;
6711 else
6712
6713 -- If input dates are null use the baselined dates.
6714
6715 open cur_baselined_dates;
6716
6717 fetch cur_baselined_dates into l_start_date, l_end_date;
6718
6719 -- If baselined dates do not exist then use the scheduled dates.
6720
6721 if cur_baselined_dates%notfound OR (l_start_date is null and l_end_date is null) then ----5478084
6722
6723 open cur_scheduled_dates;
6724
6725 fetch cur_scheduled_dates into l_start_date, l_end_date;
6726
6727 close cur_scheduled_dates;
6728
6729 end if;
6730
6731 close cur_baselined_dates;
6732 end if;
6733
6734 -- Determine the multiplier using the above dates.
6735 -- Bug 4587056 : if l_start_date - p_as_of_date is 0 then multiplier should be 1 instead of 0
6736 /* bug 5478084 if l_start_date - p_as_of_date is 0 then multiplier should be 1/duration
6737 if ((l_start_date - p_as_of_date) = 0) then
6738
6739 l_multiplier := 1; */
6740
6741 if ((l_start_date - p_as_of_date) > 0) then
6742
6743 l_multiplier := 0;
6744
6745 elsif ((p_as_of_date - l_end_date) >= 0) then
6746
6747 l_multiplier := 1;
6748
6749 elsif (nvl((l_end_date - l_start_date),0) > 0) then
6750
6751 --bug# 3825683, Satish
6752 --l_multiplier := trunc((nvl((p_as_of_date - l_start_date),0)/
6753 -- nvl((l_end_date - l_start_date),0)),2);
6754 l_multiplier := nvl((trunc(p_as_of_date) - trunc(l_start_date)+1),0)/
6755 nvl((trunc(l_end_date) - trunc(l_start_date)+1),1); --bug 6058342
6756 end if;
6757
6758 /* Begin commenting out the following code
6759
6760 if ((p_scheduled_start_date - p_as_of_date) >= 0) then
6761
6762 l_multiplier := 0;
6763
6764 elsif ((p_as_of_date - p_scheduled_end_date) >= 0) then
6765
6766 l_multiplier := 1;
6767
6768 elsif (nvl((p_scheduled_end_date - p_scheduled_start_date),0) > 0) then
6769
6770 --bug# 3825683, Satish
6771 --l_multiplier := trunc((nvl((p_as_of_date - p_scheduled_start_date),0)/
6772 -- nvl((p_scheduled_end_date - p_scheduled_start_date),0)),2);
6773 l_multiplier := nvl((trunc(p_as_of_date) - trunc(p_scheduled_start_date)+1),0)/
6774 nvl((trunc(p_scheduled_end_date) - trunc(p_scheduled_start_date)+1),0);
6775 end if;
6776
6777 End commenting out the above code. */
6778
6779 -- End: Fix for Bug # 3926529.
6780
6781 -- Progress Management Changes. Bug # 3420093.
6782
6783 l_return_bcws := l_return_bcws * l_multiplier;
6784
6785 END IF; -- _bcws_hash_tbl.exists('PA'||p_proj_element_id)
6786
6787 --bug 3824042, start
6788 if (l_rollup_method = 'EFFORT')
6789 THEN
6790 l_return_bcws := round(l_return_bcws, 5);
6791 ELSE
6792
6793 --bug 3908112
6794 if p_prj_currency_code is null
6795 then
6796 OPEN cur_proj_curr;
6797 FETCH cur_proj_curr INTO l_prj_currency_code;
6798 CLOSE cur_proj_curr;
6799 else
6800 l_prj_currency_code := p_prj_currency_code;
6801 end if;
6802 l_return_bcws := pa_currency.round_trans_currency_amt1(l_return_bcws, l_prj_currency_code);
6803 --l_return_bcws := pa_currency.round_trans_currency_amt(l_return_bcws, l_prj_currency_code);
6804 --l_return_bcws := pa_currency.round_trans_currency_amt(l_return_bcws, p_prj_currency_code);
6805 --end bug 3908112
6806
6807 END IF;
6808 --bug 3824042, end
6809 l_bcws_value := l_return_bcws; -- Added for bug 6339381
6810 return(l_return_bcws);
6811
6812 END get_bcws;
6813
6814 FUNCTION get_latest_ass_prog_date(p_project_id IN NUMBER
6815 ,p_structure_type IN VARCHAR2
6816 ,p_object_id IN NUMBER
6817 ,p_object_type IN VARCHAR2
6818 ,p_task_id IN NUMBER := null /* Modified for IB4 Progress CR. */) RETURN DATE
6819 IS
6820 l_return_date DATE;
6821 BEGIN
6822
6823 select max(date_computed)
6824 into l_return_date
6825 from pa_percent_completes ppc
6826 where ppc.project_id = p_project_id
6827 and ppc.structure_type = p_structure_type
6828 and ppc.object_id = p_object_id
6829 and ppc.object_type = p_object_type
6830 and ppc.task_id = nvl(p_task_id, p_object_id) /* Modified for IB4 Progress CR. */;
6831
6832 return(l_return_date);
6833
6834 END get_latest_ass_prog_date;
6835
6836 FUNCTION get_resource_list_id ( p_resource_list_member_id NUMBER) RETURN NUMBER IS
6837 CURSOR cur_res_list_id
6838 IS
6839 SELECT resource_list_id
6840 FROM pa_resource_list_members
6841 WHERE resource_list_member_id = p_resource_list_member_id ;
6842
6843 l_resource_list_id NUMBER;
6844 BEGIN
6845 OPEN cur_res_list_id;
6846 FETCH cur_res_list_id INTO l_resource_list_id;
6847 CLOSE cur_res_list_id;
6848 RETURN l_resource_list_id;
6849 END get_resource_list_id;
6850
6851 function get_max_rollup_asofdate2(p_project_id IN NUMBER,
6852 p_object_id IN NUMBER,
6853 p_object_type IN VARCHAR2,
6854 p_structure_type IN VARCHAR2 := 'WORKPLAN', -- FPM Dev CR 3
6855 p_structure_version_id IN NUMBER := NULL -- FPM Dev CR 4
6856 ,p_proj_element_id IN NUMBER := null /* Modified for IB4 Progress CR. */
6857 ) return date is
6858 l_rollup_date date;
6859 CURSOR cur_rollupdate
6860 IS
6861 select max(as_of_date)
6862 from pa_progress_rollup
6863 where project_id = p_project_id
6864 and object_id = p_object_id
6865 and object_type = p_object_type
6866 and structure_type = p_structure_type -- FPM Dev CR 4
6867 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
6868
6869 -- 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. */
6870 -- Commented out to fix Bug # 4243074.
6871
6872 -- Begin fix for Bug # 4243074.
6873
6874 and NVL(proj_element_id,-1) = DECODE(p_structure_type, 'FINANCIAL'
6875 , DECODE(p_object_type, 'PA_STRUCTURES'
6876 , 0
6877 , (DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_proj_element_id,NVL(proj_element_id,-1)),NVL(p_proj_element_id, p_object_id))))
6878 ,(DECODE(p_object_type, 'PA_DELIVERABLES', NVL(p_proj_element_id,NVL(proj_element_id,-1)),NVL(p_proj_element_id, p_object_id))))
6879
6880 -- End fix for Bug # 4243074.
6881
6882 and current_flag <> 'W' -- Bug 3879461
6883 -- and proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
6884 ;
6885 begin
6886
6887 OPEN cur_rollupdate;
6888 FETCH cur_rollupdate INTO l_rollup_date;
6889 CLOSE cur_rollupdate;
6890
6891 return l_rollup_date;
6892
6893 exception when others then
6894 return null;
6895 end get_max_rollup_asofdate2;
6896
6897 procedure set_prog_as_of_Date(p_project_id IN NUMBER,
6898 p_task_id IN NUMBER,
6899 p_as_of_date IN DATE default to_date(null),
6900 p_object_id IN NUMBER := null, -- Bug 3974627
6901 p_object_type IN VARCHAR2 := 'PA_TASKS' -- Bug 3974627
6902 ) IS
6903 BEGIN
6904 if p_as_of_date is null then
6905 IF p_object_type = 'PA_TASKS' THEN
6906 G_prog_as_of_date := get_prog_dt_closest_to_sys_dt(p_project_id => p_project_id,
6907 p_task_id => p_task_id);
6908 ELSE -- Bug 3974627 : Added ELSE and call of get_prog_dt_closest_to_sys_dt
6909 G_prog_as_of_date := get_prog_dt_closest_to_sys_dt(p_project_id => p_project_id,
6910 p_task_id => p_task_id,
6911 p_object_id => p_object_id,
6912 p_object_type => p_object_type);
6913 END IF;
6914 else
6915 G_prog_as_of_date := p_as_of_date;
6916 end if;
6917
6918 exception when others then
6919 null;
6920 END set_prog_as_of_Date;
6921
6922 function get_prog_asofdate return date is
6923 begin
6924 return pa_progress_utils.g_prog_as_of_date;
6925 end get_prog_asofdate;
6926
6927
6928 --The following api is used to render cost region on Task progress Details -summary page
6929 --bug 4085786, start
6930 /*function check_workplan_cost ( p_project_id NUMBER) RETURN VARCHAR2 IS
6931
6932 l_workplan_cost VARCHAR2(1) := 'Y';
6933 l_labor_cost_flag VARCHAR2(1) := 'Y';
6934 BEGIN
6935
6936 l_labor_cost_flag := PA_SECURITY.view_labor_costs(p_project_id);
6937 l_workplan_cost := Pa_Fp_wp_gen_amt_utils.get_wp_track_cost_amt_flag(p_project_id);
6938
6939 --return 'N' if any of the cost is allowed.
6940
6941 IF l_labor_cost_flag <> 'Y' OR l_workplan_cost <> 'Y'
6942 THEN
6943 return 'N';
6944 ELSE
6945 return 'Y';
6946 END IF;
6947 END check_workplan_cost;*/
6948
6949 function check_workplan_cost ( p_project_id IN NUMBER,
6950 p_task_id IN NUMBER := NULL,
6951 p_object_id IN NUMBER := NULL,
6952 p_object_type IN VARCHAR2 := 'PA_TASKS',
6953 p_structure_version_id IN NUMBER := NULL
6954 ) RETURN VARCHAR2 IS
6955
6956 l_workplan_cost VARCHAR2(1) := 'Y';
6957 l_labor_cost_flag VARCHAR2(1) := 'Y';
6958 l_person_id NUMBER; -- Added for Bug 3964394
6959
6960 CURSOR c_assgmt_count IS
6961 SELECT count(*) FROM pa_task_asgmts_v
6962 WHERE project_id = p_project_id
6963 AND task_id = p_task_id
6964 AND structure_version_id = p_structure_version_id
6965 AND ta_display_flag = 'Y';
6966
6967 CURSOR c_get_task_res_class_code IS
6968 SELECT resource_class_code FROM pa_task_asgmts_v
6969 WHERE project_id = p_project_id
6970 AND task_id = p_task_id
6971 AND structure_version_id = p_structure_version_id
6972 AND ta_display_flag = 'Y';
6973
6974 CURSOR c_get_res_class_code IS
6975 SELECT resource_class_code, ta_display_flag FROM pa_task_asgmts_v
6976 WHERE project_id = p_project_id
6977 AND task_id = p_task_id
6978 AND resource_list_member_id = p_object_id
6979 AND structure_version_id = p_structure_version_id;
6980
6981 l_tot_assgmts NUMBER;
6982 l_res_class_code VARCHAR2(20);
6983 l_ta_display_flag VARCHAR2(1);
6984 BEGIN
6985
6986
6987 --l_labor_cost_flag := PA_SECURITY.view_labor_costs(p_project_id); /* Commented for Bug 3964394 */
6988
6989 /* Start Bug 3964394 - Changed the function call from view_labor_costs to check_labor_cost_access */
6990 IF ( FND_GLOBAL.USER_ID IS NOT NULL ) THEN
6991 l_person_id := pa_utils.GetEmpIdFromUser( FND_GLOBAL.USER_ID );
6992 l_labor_cost_flag := PA_SECURITY.check_labor_cost_access(l_person_id, p_project_id);
6993 ELSE
6994 l_labor_cost_flag := 'N'; -- In case the user_id is null then don't show the region.
6995 END IF;
6996 /* End Bug 3964394 */
6997
6998 l_workplan_cost := Pa_Fp_wp_gen_amt_utils.get_wp_track_cost_amt_flag(p_project_id);
6999
7000 IF l_workplan_cost <> 'Y'
7001 THEN
7002 return 'N';
7003 END IF;
7004
7005 IF p_task_id IS NULL
7006 THEN
7007 return l_labor_cost_flag;
7008 END IF;
7009
7010 IF p_object_type = 'PA_TASKS'
7011 THEN
7012 OPEN c_assgmt_count;
7013 FETCH c_assgmt_count INTO l_tot_assgmts;
7014 CLOSE c_assgmt_count;
7015 IF l_tot_assgmts = 1
7016 THEN
7017 OPEN c_get_task_res_class_code;
7018 FETCH c_get_task_res_class_code INTO l_res_class_code;
7019 CLOSE c_get_task_res_class_code;
7020 IF l_res_class_code = 'PEOPLE'
7021 THEN
7022 return l_labor_cost_flag;
7023 ELSE
7024 return 'Y';
7025 END IF;
7026 ELSE
7027 return 'Y';
7028 END IF;
7029 ELSIF p_object_type = 'PA_ASSIGNMENTS'
7030 THEN
7031 OPEN c_get_res_class_code;
7032 FETCH c_get_res_class_code INTO l_res_class_code, l_ta_display_flag;
7033 CLOSE c_get_res_class_code;
7034
7035 IF l_res_class_code = 'PEOPLE' AND l_ta_display_flag = 'Y'
7036 THEN
7037 return l_labor_cost_flag;
7038 ELSE
7039 return 'Y';
7040 END IF;
7041 END IF;
7042
7043 END check_workplan_cost;
7044 --bug 4085786, end
7045
7046 -- Progress Management Changes. Bug # 3420093.
7047
7048 procedure get_actuals_for_task(p_project_id IN NUMBER
7049 ,p_wp_task_id IN NUMBER
7050 ,p_res_list_mem_id IN NUMBER
7051 ,p_as_of_date IN DATE
7052 ,x_planned_work_qty OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7053 ,x_actual_work_qty OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7054 ,x_ppl_act_cost_pc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7055 ,x_eqpmt_act_cost_pc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7056 ,x_oth_act_cost_pc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7057 ,x_ppl_act_cost_fc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7058 ,x_eqpmt_act_cost_fc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7059 ,x_oth_act_cost_fc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7060 ,x_act_labor_effort OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7061 ,x_act_eqpmt_effort OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7062 ,x_unit_of_measure OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7063 ,x_txn_currency_code OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7064 ,x_ppl_act_cost_tc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7065 ,x_eqpmt_act_cost_tc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7066 ,x_oth_act_cost_tc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7067 ,x_ppl_act_rawcost_pc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7068 ,x_eqpmt_act_rawcost_pc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7069 ,x_oth_act_rawcost_pc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7070 ,x_ppl_act_rawcost_fc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7071 ,x_eqpmt_act_rawcost_fc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7072 ,x_oth_act_rawcost_fc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7073 ,x_ppl_act_rawcost_tc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7074 ,x_eqpmt_act_rawcost_tc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7075 ,x_oth_act_rawcost_tc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7076 ,x_oth_quantity OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7077 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7078 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7079 ,x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
7080
7081 IS
7082
7083 l_wp_task_id NUMBER := NULL;
7084 l_wp_task_ver_id NUMBER := NULL;
7085
7086 l_wp_str_ver_id NUMBER := NULL;
7087
7088 l_return_status VARCHAR2(1) := null;
7089 l_msg_count NUMBER := null;
7090 l_msg_data VARCHAR2(250) := null;
7091
7092 cursor c1_task (p_project_id number, p_object_id number, p_as_of_date date) is
7093 select cumulative_work_quantity, ppl_act_cost_to_date_pc, eqpmt_act_cost_to_date_pc, oth_act_cost_to_date_pc,
7094 ppl_act_cost_to_date_fc, eqpmt_act_cost_to_date_fc, oth_act_cost_to_date_fc, ppl_act_effort_to_date,
7095 eqpmt_act_effort_to_date, ppl_act_cost_to_date_tc, eqpmt_act_cost_to_date_tc, oth_act_cost_to_date_tc,
7096 txn_currency_code, ppl_act_rawcost_to_date_pc, eqpmt_act_rawcost_to_date_pc, oth_act_rawcost_to_date_pc,
7097 ppl_act_rawcost_to_date_fc, eqpmt_act_rawcost_to_date_fc, oth_act_rawcost_to_date_fc,
7098 ppl_act_rawcost_to_date_tc, eqpmt_act_rawcost_to_date_tc, oth_act_rawcost_to_date_tc, oth_quantity_to_date
7099 from pa_progress_rollup ppr1
7100 where ppr1.project_id = p_project_id
7101 and ppr1.object_id = p_object_id
7102 and ppr1.structure_version_id is null
7103 AND ppr1.current_flag <> 'W' -- Bug 3879461
7104 and ppr1.as_of_date = ( SELECT max(ppr2.as_of_date)
7105 from pa_progress_rollup ppr2
7106 WHERE ppr2.as_of_date <= p_as_of_date
7107 AND ppr2.object_id = p_object_id
7108 AND ppr2.project_id = p_project_id
7109 and ppr2.structure_type = 'WORKPLAN'
7110 AND ppr2.current_flag <> 'W' -- Bug 3879461
7111 and ppr2.structure_version_id is null
7112 )
7113 and ppr1.structure_type = 'WORKPLAN'
7114 ;
7115
7116 cursor c1_assgn (p_project_id number, p_object_id number, p_proj_element_id number, p_as_of_date date) is
7117 select cumulative_work_quantity, ppl_act_cost_to_date_pc, eqpmt_act_cost_to_date_pc, oth_act_cost_to_date_pc,
7118 ppl_act_cost_to_date_fc, eqpmt_act_cost_to_date_fc, oth_act_cost_to_date_fc, ppl_act_effort_to_date,
7119 eqpmt_act_effort_to_date, ppl_act_cost_to_date_tc, eqpmt_act_cost_to_date_tc, oth_act_cost_to_date_tc,
7120 txn_currency_code, ppl_act_rawcost_to_date_pc, eqpmt_act_rawcost_to_date_pc, oth_act_rawcost_to_date_pc,
7121 ppl_act_rawcost_to_date_fc, eqpmt_act_rawcost_to_date_fc, oth_act_rawcost_to_date_fc,
7122 ppl_act_rawcost_to_date_tc, eqpmt_act_rawcost_to_date_tc, oth_act_rawcost_to_date_tc, oth_quantity_to_date
7123 from pa_progress_rollup ppr1
7124 where ppr1.project_id = p_project_id
7125 and ppr1.object_id = p_object_id
7126 and ppr1.proj_element_id = p_proj_element_id
7127 and ppr1.structure_version_id is null
7128 AND ppr1.current_flag <> 'W' -- Bug 3879461
7129 and ppr1.as_of_date = ( SELECT max(ppr2.as_of_date)
7130 from pa_progress_rollup ppr2
7131 WHERE ppr2.as_of_date <= p_as_of_date
7132 AND ppr2.object_id = p_object_id
7133 AND ppr2.proj_element_id = p_proj_element_id
7134 AND ppr2.project_id = p_project_id
7135 and ppr2.structure_type = 'WORKPLAN'
7136 AND ppr2.current_flag <> 'W' -- Bug 3879461
7137 and ppr2.structure_version_id is null
7138 )
7139 and ppr1.structure_type = 'WORKPLAN'
7140 ;
7141
7142 c1rec c1_task%rowtype;
7143
7144 cursor c4(p_project_id number, p_proj_element_id number) is
7145 select wq_uom_code
7146 from pa_proj_elements
7147 where project_id = p_project_id
7148 and proj_element_id = p_proj_element_id;
7149
7150 cursor c2(p_element_version_id NUMBER) is
7151 select proj_element_id
7152 from pa_proj_element_versions
7153 where element_version_id = p_element_version_id;
7154
7155 cursor c3(p_project_id NUMBER, p_element_version_id NUMBER) is
7156 select wq_planned_quantity
7157 from pa_proj_elem_ver_schedule
7158 where project_id = p_project_id
7159 and element_version_id = p_element_version_id;
7160
7161
7162 cursor c1_proj_level IS
7163 select cumulative_work_quantity, ppl_act_cost_to_date_pc, eqpmt_act_cost_to_date_pc, oth_act_cost_to_date_pc,
7164 ppl_act_cost_to_date_fc, eqpmt_act_cost_to_date_fc, oth_act_cost_to_date_fc, ppl_act_effort_to_date,
7165 eqpmt_act_effort_to_date
7166 from pa_progress_rollup ppr1
7167 where ppr1.project_id = p_project_id
7168 and ppr1.object_type = 'PA_STRUCTURES'
7169 and ppr1.structure_version_id is null
7170 AND ppr1.current_flag <> 'W' -- Bug 3879461
7171 and ppr1.as_of_date = ( SELECT max(ppr2.as_of_date)
7172 from pa_progress_rollup ppr2
7173 WHERE ppr2.as_of_date <= p_as_of_date
7174 AND ppr2.object_type = 'PA_STRUCTURES'
7175 AND ppr2.project_id = p_project_id
7176 and ppr2.structure_type = 'WORKPLAN'
7177 and ppr2.structure_version_id is null
7178 AND ppr2.current_flag <> 'W' -- Bug 3879461
7179 )
7180 and ppr1.structure_type = 'WORKPLAN'
7181 ;
7182
7183 /* Begin code to fix Bug # 4172372. */
7184
7185 cursor cur_task_version(c_project_id NUMBER, c_wp_task_id NUMBER, c_wp_str_ver_id NUMBER) is
7186 select ppev.element_version_id
7187 from pa_proj_element_versions ppev
7188 where ppev.project_id = c_project_id
7189 and ppev.proj_element_id = c_wp_task_id
7190 and ppev.parent_structure_version_id = c_wp_str_ver_id;
7191
7192 /* End code to fix Bug # 4172372. */
7193
7194 BEGIN
7195 savepoint get_actuals_for_task;
7196
7197 l_return_status := FND_API.G_RET_STS_SUCCESS;
7198
7199
7200 /* Begin commenting the following code as we are now accepting workplan task id's in the API.
7201
7202 -- Get workplan task version id for finacial task id.
7203
7204 IF p_fin_task_id IS NOT NULL THEN --bug 3753042
7205
7206 l_wp_task_ver_id := pa_progress_utils.wp_task_ver_id_for_fin_task_id(p_project_id,p_fin_task_id);
7207
7208 -- Get workplan task id for workplan task version id.
7209
7210 open c2(l_wp_task_ver_id);
7211 fetch c2 into l_wp_task_id;
7212 close c2;
7213
7214 -- Get planned work quantity.
7215
7216 open c3(p_project_id,l_wp_task_ver_id);
7217 fetch c3 into x_planned_work_qty;
7218 close c3;
7219
7220 -- Get actuals for the workplan task.
7221
7222 open c1(p_project_id,l_wp_task_id,l_wp_task_ver_id,p_as_of_date);
7223 fetch c1 into c1rec;
7224 close c1;
7225
7226 ELSE --get the project level data if financial task id is null bug 3753042
7227
7228 l_wp_task_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_WP_VERSION(p_project_id);
7229
7230 open c3(p_project_id,l_wp_task_ver_id);
7231 fetch c3 into x_planned_work_qty;
7232 close c3;
7233
7234 -- Get actuals for the workplan task.
7235
7236 open c1_proj_level;
7237 fetch c1_proj_level into c1rec;
7238 close c1_proj_level;
7239
7240
7241 END IF;
7242 End commenting the following code as we are now accepting workplan task id's in the API. */
7243
7244
7245 l_wp_task_id := p_wp_task_id;
7246 l_wp_str_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_WP_VERSION(p_project_id);
7247
7248 -- If task level information is requested.
7249
7250 if (p_res_list_mem_id is null) then
7251
7252 -- Get actuals and txn currency code for the workplan task.
7253
7254 open c1_task(p_project_id,l_wp_task_id,p_as_of_date);
7255 fetch c1_task into c1rec;
7256 close c1_task;
7257
7258 -- If assignment level information is requested.
7259
7260 else
7261
7262 open c1_assgn(p_project_id,p_res_list_mem_id,l_wp_task_id,p_as_of_date);
7263 fetch c1_assgn into c1rec;
7264 close c1_assgn;
7265
7266 end if;
7267
7268 -- Get actuals and txn currency code for the workplan task.
7269
7270 x_actual_work_qty := c1rec.cumulative_work_quantity;
7271 x_ppl_act_cost_pc := c1rec.ppl_act_cost_to_date_pc;
7272 x_eqpmt_act_cost_pc := c1rec.eqpmt_act_cost_to_date_pc;
7273 x_oth_act_cost_pc := c1rec.oth_act_cost_to_date_pc;
7274 x_ppl_act_cost_fc := c1rec.ppl_act_cost_to_date_fc;
7275 x_eqpmt_act_cost_fc := c1rec.eqpmt_act_cost_to_date_fc;
7276 x_oth_act_cost_fc := c1rec.oth_act_cost_to_date_fc;
7277 x_act_labor_effort := c1rec.ppl_act_effort_to_date;
7278 x_act_eqpmt_effort := c1rec.eqpmt_act_effort_to_date;
7279 x_ppl_act_cost_tc := c1rec.ppl_act_cost_to_date_tc;
7280 x_eqpmt_act_cost_tc := c1rec.eqpmt_act_cost_to_date_tc;
7281 x_oth_act_cost_tc := c1rec.oth_act_cost_to_date_tc;
7282 x_txn_currency_code := c1rec.txn_currency_code;
7283
7284
7285 -- Get actuals in rawcost and other_quantity_to_date.
7286
7287 x_ppl_act_rawcost_pc := c1rec.ppl_act_rawcost_to_date_pc;
7288 x_eqpmt_act_rawcost_pc := c1rec.eqpmt_act_rawcost_to_date_pc;
7289 x_oth_act_rawcost_pc := c1rec.oth_act_rawcost_to_date_pc;
7290 x_ppl_act_rawcost_fc := c1rec.ppl_act_rawcost_to_date_fc;
7291 x_eqpmt_act_rawcost_fc := c1rec.eqpmt_act_rawcost_to_date_fc;
7292 x_oth_act_rawcost_fc := c1rec.oth_act_rawcost_to_date_fc;
7293 x_ppl_act_rawcost_tc := c1rec.ppl_act_rawcost_to_date_tc;
7294 x_eqpmt_act_rawcost_tc := c1rec.eqpmt_act_rawcost_to_date_tc;
7295 x_oth_act_rawcost_tc := c1rec.oth_act_rawcost_to_date_tc;
7296 x_oth_quantity := c1rec.oth_quantity_to_date;
7297
7298
7299 /* Begin code to fix Bug # 4172372. */
7300
7301 -- Get the task_version_id for the workplan task.
7302
7303 open cur_task_version(p_project_id, l_wp_task_id, l_wp_str_ver_id);
7304 fetch cur_task_version into l_wp_task_ver_id;
7305 close cur_task_version;
7306
7307 /* End code to fix Bug # 4172372. */
7308
7309 -- Get planned work quantity for worplan task.
7310
7311 open c3(p_project_id, l_wp_task_ver_id); -- Fix for Bug # 4172372.
7312 fetch c3 into x_planned_work_qty;
7313 close c3;
7314
7315 -- Get unit of measure for the workplan task
7316
7317 open c4(p_project_id,l_wp_task_id);
7318 fetch c4 into x_unit_of_measure;
7319 close c4;
7320
7321 x_return_status := l_return_status;
7322 x_msg_count := l_msg_count;
7323 x_msg_data := l_msg_data;
7324
7325 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7326 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7327 p_msg_name => l_msg_data);
7328 x_msg_data := l_msg_data;
7329 x_return_status := 'E';
7330 x_msg_count := l_msg_count;
7331 RAISE FND_API.G_EXC_ERROR;
7332 END IF;
7333
7334 EXCEPTION
7335
7336 when FND_API.G_EXC_ERROR then
7337 rollback to get_actuals_for_task;
7338 x_return_status := FND_API.G_RET_STS_ERROR;
7339
7340 when FND_API.G_EXC_UNEXPECTED_ERROR then
7341 rollback to get_actuals_for_task;
7342 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7343 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROGRESS_UTILS',
7344 p_procedure_name => 'get_actuals_for_task',
7345 p_error_text => SUBSTRB(SQLERRM,1,120));
7346 when OTHERS then
7347 rollback to get_actuals_fortask;
7348 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7349 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROGRESS_UTILS',
7350 p_procedure_name => 'get_actuals_for_task',
7351 p_error_text => SUBSTRB(SQLERRM,1,120));
7352 raise;
7353
7354 END get_actuals_for_task;
7355
7356 -- Progress Management Changes. Bug # 3420093.
7357
7358 FUNCTION wp_task_ver_id_for_fin_task_id(p_project_id NUMBER, p_fin_task_id NUMBER) return NUMBER
7359 IS
7360 l_fin_str_ver_id NUMBER := NULL;
7361 l_fin_task_ver_id NUMBER := NULL;
7362 l_wp_task_ver_id NUMBER := NULL;
7363 l_structure_sharing_code VARCHAR2(30) := NULL;
7364
7365 cursor c1(p_proj_element_id NUMBER, p_structure_version_id NUMBER) is
7366 select element_version_id
7367 from pa_proj_element_versions
7368 where project_id = p_project_id
7369 and proj_element_id = p_proj_element_id
7370 and parent_structure_version_id = p_structure_version_id;
7371
7372 cursor c2(p_fin_task_ver_id NUMBER) is
7373 select object_id_from1
7374 from pa_object_relationships
7375 where relationship_type='M'
7376 and object_type_from='PA_TASKS'
7377 and object_type_to='PA_TASKS'
7378 and object_id_to1 = p_fin_task_ver_id;
7379
7380 cursor c3(p_project_id NUMBER) is
7381 select structure_sharing_code
7382 from pa_projects_all
7383 where project_id = p_project_id;
7384
7385 BEGIN
7386
7387 open c3(p_project_id);
7388 fetch c3 into l_structure_sharing_code;
7389 close c3;
7390
7391 -- Get financial structure version id.
7392
7393 l_fin_str_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(p_project_id);
7394
7395 -- Get financial task version id.
7396
7397 open c1(p_fin_task_id,l_fin_str_ver_id);
7398 fetch c1 into l_fin_task_ver_id;
7399 close c1;
7400
7401 -- Get workplan task version id.
7402
7403 if l_structure_sharing_code = 'SPLIT_MAPPING' then
7404
7405 open c2(l_fin_task_ver_id);
7406 fetch c2 into l_wp_task_ver_id;
7407 close c2;
7408
7409 else
7410
7411 l_wp_task_ver_id := l_fin_task_ver_id;
7412
7413 end if;
7414
7415 return(l_wp_task_ver_id);
7416
7417 END wp_task_ver_id_for_fin_task_id;
7418
7419 /* Bug 3595585 : Added the following procedure */
7420 FUNCTION get_last_etc_effort(
7421 p_project_id NUMBER
7422 ,p_object_id NUMBER
7423 ,p_object_type VARCHAR2
7424 ,p_as_of_date DATE
7425 ,p_structure_type VARCHAR2 := 'WORKPLAN'
7426 ,p_proj_element_id NUMBER := null /* Modified for IB4 Progress CR. */
7427 ) RETURN NUMBER IS
7428
7429 CURSOR cur_task_etc_effort
7430 IS
7431 SELECT NVL( ESTIMATED_REMAINING_EFFORT, 0 ) + NVL( EQPMT_ETC_EFFORT, 0 )
7432 FROM pa_progress_rollup
7433 WHERE project_id = p_project_id
7434 AND object_id = p_object_id
7435 and proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
7436 --Commented by rtarway for BUG 3835474
7437 /*AND as_of_date = ( SELECT max(as_of_date)
7438 from pa_progress_rollup
7439 WHERE as_of_date < p_as_of_date
7440 AND project_id = p_project_id
7441 AND object_id = p_object_id
7442 AND object_type = p_object_type
7443 AND structure_type = p_structure_type
7444 and proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR.
7445 )*/
7446 --Added by rtarway for BUG 3835474
7447 AND as_of_date = ( SELECT max(as_of_date)
7448 from pa_progress_rollup ppr2
7449 WHERE ppr2.as_of_date <= p_as_of_date
7450 AND ppr2.project_id = p_project_id
7451 AND ppr2.object_id = p_object_id
7452 AND ppr2.object_type = p_object_type
7453 AND ppr2.structure_type = p_structure_type
7454 AND ppr2.structure_version_id is null -- Bug 3879461
7455 and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR.*/
7456 AND ppr2.current_flag <> 'W' -- Bug 3879461
7457 -- AND NOT EXISTS (
7458 -- SELECT 'X' FROM pa_percent_completes ppc
7459 -- WHERE ppc.date_computed = ppr2.as_of_date
7460 -- AND ppc.project_id = p_project_id
7461 -- AND ppc.object_id = p_object_id
7462 -- AND ppc.object_type = p_object_type
7463 -- AND ppc.structure_type = p_structure_type
7464 -- AND ppc.published_flag = 'N'
7465 -- )
7466 )
7467 AND object_type = p_object_type
7468 AND structure_type = p_structure_type
7469 AND structure_version_id is null -- Bug 3879461
7470 AND current_flag <> 'W' -- Bug 3879461
7471 ;
7472 l_last_submitted_etc_effort NUMBER;
7473 BEGIN
7474
7475 OPEN cur_task_etc_effort;
7476 FETCH cur_task_etc_effort INTO l_last_submitted_etc_effort;
7477 CLOSE cur_task_etc_effort;
7478
7479 RETURN l_last_submitted_etc_effort;
7480 END get_last_etc_effort;
7481
7482 /* Bug 3595585 : Added the following procedure */
7483 FUNCTION get_last_etc_cost(
7484 p_project_id NUMBER
7485 ,p_object_id NUMBER
7486 ,p_object_type VARCHAR2
7487 ,p_as_of_date DATE
7488 ,p_structure_type VARCHAR2 := 'WORKPLAN'
7489 ,p_proj_element_id NUMBER := null /* Modified for IB4 Progress CR. */
7490 ) RETURN NUMBER IS
7491
7492 CURSOR cur_task_etc_cost
7493 IS
7494 SELECT (nvl(ppr.oth_etc_cost_tc,0)+nvl(ppr.ppl_etc_cost_tc,0)+nvl(ppr.eqpmt_etc_cost_tc,0))
7495 FROM pa_progress_rollup ppr
7496 WHERE ppr.project_id = p_project_id
7497 AND ppr.object_id = p_object_id
7498 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
7499 AND ppr.as_of_date = ( SELECT max(as_of_date)
7500 from pa_progress_rollup ppr2
7501 WHERE ppr2.as_of_date < p_as_of_date
7502 AND ppr2.project_id = p_project_id
7503 AND ppr2.object_id = p_object_id
7504 AND ppr2.object_type = p_object_type
7505 AND ppr2.structure_type = p_structure_type
7506 AND ppr2.structure_version_id is null -- Bug 3879461
7507 AND ppr2.current_flag <> 'W' -- Bug 3879461
7508 and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
7509 )
7510 AND ppr.object_type = p_object_type
7511 AND ppr.structure_type = p_structure_type
7512 AND ppr.structure_version_id is null -- Bug 3879461
7513 AND ppr.current_flag <> 'W' -- Bug 3879461
7514
7515 ;
7516
7517 l_last_submitted_etc_cost NUMBER;
7518
7519 BEGIN
7520
7521 OPEN cur_task_etc_cost;
7522 FETCH cur_task_etc_cost INTO l_last_submitted_etc_cost;
7523 CLOSE cur_task_etc_cost;
7524
7525 RETURN l_last_submitted_etc_cost;
7526 END get_last_etc_cost;
7527
7528 --Commented the following API for BUG 4091457, by rtarway
7529 --
7530 /*
7531 --Bug 3595585 : Added the following procedure
7532 --Bug 3621404 : Added burden parameters
7533 PROCEDURE get_last_etc_all(p_project_id IN NUMBER
7534 ,p_object_id IN NUMBER
7535 ,p_object_type IN VARCHAR2
7536 ,p_as_of_date IN DATE
7537 ,p_structure_type IN VARCHAR2 := 'WORKPLAN'
7538 ,x_etc_txn_raw_cost_last_subm OUT NUMBER
7539 ,x_etc_prj_raw_cost_last_subm OUT NUMBER
7540 ,x_etc_pfc_raw_cost_last_subm OUT NUMBER
7541 ,x_etc_txn_bur_cost_last_subm OUT NUMBER
7542 ,x_etc_prj_bur_cost_last_subm OUT NUMBER
7543 ,x_etc_pfc_bur_cost_last_subm OUT NUMBER
7544 ,x_etc_effort_last_subm OUT NUMBER
7545 ,x_return_status OUT VARCHAR2
7546 ,x_msg_count OUT NUMBER
7547 ,x_msg_data OUT VARCHAR2
7548 ,p_proj_element_id IN NUMBER := null )
7549 IS
7550 CURSOR cur_task_etc_all
7551 IS
7552 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
7553 ,(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
7554 ,(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
7555 ,(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
7556 ,(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
7557 ,(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
7558 , (NVL( ESTIMATED_REMAINING_EFFORT, 0 ) + NVL( EQPMT_ETC_EFFORT, 0 )) etc_effort_last_subm
7559 FROM pa_progress_rollup ppr
7560 WHERE ppr.project_id = p_project_id
7561 AND ppr.object_id = p_object_id
7562 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id)
7563 --Commented by rtarway for BUG 3835474
7564 --AND ppr.as_of_date = ( SELECT max(as_of_date)
7565 -- from pa_progress_rollup ppr2
7566 -- WHERE ppr2.as_of_date < p_as_of_date
7567 -- AND ppr2.project_id = p_project_id
7568 -- AND ppr2.object_id = p_object_id
7569 -- AND ppr2.object_type = p_object_type
7570 -- AND ppr2.structure_type = p_structure_type
7571 --and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
7572 -- )
7573 --Added by rtarway for BUG 3835474
7574 AND ppr.as_of_date = ( SELECT max(as_of_date)
7575 from pa_progress_rollup ppr2
7576 WHERE ppr2.as_of_date <= p_as_of_date
7577 AND ppr2.project_id = p_project_id
7578 AND ppr2.object_id = p_object_id
7579 AND ppr2.object_type = p_object_type
7580 AND ppr2.structure_type = p_structure_type
7581 AND ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id)
7582 AND ppr2.structure_version_id is null -- Bug 3879461
7583 AND ppr2.current_flag <> 'W' -- Bug 3879461
7584 -- AND NOT EXISTS
7585 -- (
7586 -- SELECT 'X' FROM pa_percent_completes ppc
7587 -- WHERE ppc.date_computed = ppr2.as_of_date
7588 -- AND ppc.project_id = p_project_id
7589 -- AND ppc.object_id = p_object_id
7590 -- AND ppc.object_type = p_object_type
7591 -- AND ppc.structure_type = p_structure_type
7592 -- AND ppc.published_flag = 'N'
7593 -- )
7594 )
7595 AND ppr.object_type = p_object_type
7596 AND ppr.structure_type = p_structure_type
7597 AND ppr.structure_version_id is null -- Bug 3879461
7598 AND ppr.current_flag <> 'W' -- Bug 3879461
7599
7600 ;
7601 BEGIN
7602
7603 x_return_status := 'S';
7604
7605 OPEN cur_task_etc_all;
7606 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;
7607 CLOSE cur_task_etc_all;
7608 EXCEPTION
7609 WHEN NO_DATA_FOUND THEN
7610 null;
7611 WHEN OTHERS THEN
7612 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7613 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROGRESS_UTILS',
7614 p_procedure_name => 'get_last_etc_all',
7615 p_error_text => SUBSTRB(SQLERRM,1,120));
7616 raise;
7617 END get_last_etc_all;*/
7618
7619
7620 PROCEDURE get_last_etc_all( p_project_id IN NUMBER
7621 ,p_object_id IN NUMBER
7622 ,p_object_type IN VARCHAR2
7623 ,p_as_of_date IN DATE
7624 ,p_structure_type IN VARCHAR2 := 'WORKPLAN'
7625 ,x_etc_txn_raw_cost_last_subm OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7626 ,x_etc_prj_raw_cost_last_subm OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7627 ,x_etc_pfc_raw_cost_last_subm OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7628 ,x_etc_txn_bur_cost_last_subm OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7629 ,x_etc_prj_bur_cost_last_subm OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7630 ,x_etc_pfc_bur_cost_last_subm OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7631 ,x_etc_effort_last_subm OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7632 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7633 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7634 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7635 ,p_proj_element_id IN NUMBER := null /* Modified for IB4 Progress CR. */
7636 ,p_resource_class_code IN VARCHAR2 := 'PEOPLE' -- Bug 3836485
7637 )
7638 IS
7639 CURSOR cur_task_etc_all
7640 IS
7641 SELECT
7642 decode( p_resource_class_code, 'PEOPLE', ppr.ppl_etc_rawcost_tc
7643 ,'EQUIPMENT', ppr.eqpmt_etc_rawcost_tc
7644 ,ppr.oth_etc_rawcost_tc ) etc_txn_raw_rawcost_last_subm
7645 ,decode(p_resource_class_code, 'PEOPLE', ppr.ppl_etc_rawcost_pc
7646 ,'EQUIPMENT', ppr.eqpmt_etc_rawcost_pc
7647 , ppr.oth_etc_rawcost_pc ) etc_prj_raw_rawcost_last_subm
7648 ,decode(p_resource_class_code, 'PEOPLE', ppr.ppl_etc_rawcost_fc
7649 ,'EQUIPMENT', ppr.eqpmt_etc_rawcost_fc
7650 ,ppr.oth_etc_rawcost_fc) etc_pfc_raw_rawcost_last_subm
7651 ,decode(p_resource_class_code, 'PEOPLE', ppr.ppl_etc_cost_tc
7652 ,'EQUIPMENT', ppr.eqpmt_etc_cost_tc
7653 ,ppr.oth_etc_cost_tc ) etc_txn_bur_cost_last_subm
7654 ,decode(p_resource_class_code, 'PEOPLE', ppr.ppl_etc_cost_pc
7655 ,'EQUIPMENT', ppr.eqpmt_etc_cost_pc
7656 ,ppr.oth_etc_cost_pc ) etc_prj_bur_cost_last_subm
7657 ,decode(p_resource_class_code, 'PEOPLE', ppr.ppl_etc_cost_fc
7658 ,'EQUIPMENT', ppr.eqpmt_etc_cost_fc
7659 ,ppr.oth_etc_cost_fc ) etc_pfc_bur_cost_last_subm
7660 ,decode(p_resource_class_code, 'PEOPLE', ESTIMATED_REMAINING_EFFORT
7661 ,'EQUIPMENT', EQPMT_ETC_EFFORT
7662 , ppr.OTH_ETC_QUANTITY) etc_effort_last_subm
7663 FROM pa_progress_rollup ppr
7664 WHERE ppr.project_id = p_project_id
7665 AND ppr.object_id = p_object_id
7666 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
7667 AND ppr.as_of_date = ( SELECT max(as_of_date)
7668 from pa_progress_rollup ppr2
7669 WHERE ppr2.as_of_date <= p_as_of_date--Added eqaulity condition, 4091457, rtarway
7670 AND ppr2.project_id = p_project_id
7671 AND ppr2.object_id = p_object_id
7672 AND ppr2.object_type = p_object_type
7673 AND ppr2.structure_type = p_structure_type
7674 AND ppr2.structure_version_id is null -- Bug 3879461
7675 AND ppr2.current_flag <> 'W' -- Bug 3879461
7676 and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) /* Modified for IB4 Progress CR. */
7677 )
7678 AND ppr.object_type = p_object_type
7679 AND ppr.structure_type = p_structure_type
7680 AND ppr.structure_version_id is null -- Bug 3879461
7681 AND ppr.current_flag <> 'W' -- Bug 3879461
7682 ;
7683 BEGIN
7684
7685 x_return_status := 'S';
7686
7687 OPEN cur_task_etc_all;
7688 FETCH cur_task_etc_all INTO x_etc_txn_raw_cost_last_subm,
7689 x_etc_prj_raw_cost_last_subm, x_etc_pfc_raw_cost_last_subm,
7690 x_etc_txn_bur_cost_last_subm, x_etc_prj_bur_cost_last_subm,
7691 x_etc_pfc_bur_cost_last_subm, x_etc_effort_last_subm;
7692 CLOSE cur_task_etc_all;
7693
7694
7695 EXCEPTION
7696 WHEN NO_DATA_FOUND THEN
7697 null;
7698 WHEN OTHERS THEN
7699 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7700 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROGRESS_UTILS',
7701 p_procedure_name => 'get_last_etc_all',
7702 p_error_text => SUBSTRB(SQLERRM,1,120));
7703
7704 -- 4537865
7705 x_etc_txn_raw_cost_last_subm := NULL ;
7706 x_etc_prj_raw_cost_last_subm := NULL ;
7707 x_etc_pfc_raw_cost_last_subm := NULL ;
7708 x_etc_txn_bur_cost_last_subm := NULL ;
7709 x_etc_prj_bur_cost_last_subm := NULL ;
7710 x_etc_pfc_bur_cost_last_subm := NULL ;
7711 x_etc_effort_last_subm := NULL ;
7712 -- 4537865
7713 raise;
7714 END get_last_etc_all;
7715
7716 -- Progress Management Changes. Bug # 3420093.
7717
7718 function sum_etc_values(
7719 p_planned_value NUMBER := null
7720 ,p_ppl_etc_value NUMBER := null
7721 ,p_eqpmt_etc_value NUMBER := null
7722 ,p_oth_etc_value NUMBER := null
7723 ,p_subprj_ppl_etc_value NUMBER := null
7724 ,p_subprj_eqpmt_etc_value NUMBER := null
7725 ,p_subprj_oth_etc_value NUMBER := null
7726 ,p_oth_etc_quantity NUMBER := null
7727 ,p_actual_value NUMBER := null
7728 ,p_mode VARCHAR2 := 'PUBLISH'
7729 )return number
7730 is
7731 l_sum_etc_values NUMBER;
7732 begin
7733 if p_mode = 'PUBLISH' --commenting out IF-THNE-ELSE clause for bug 3927404 issue #2 --again uncommenting 5726773
7734 then
7735 if ((p_ppl_etc_value is null) and (p_eqpmt_etc_value is null)
7736 and (p_oth_etc_value is null) and (p_subprj_ppl_etc_value is null)
7737 and (p_subprj_eqpmt_etc_value is null) and (p_subprj_oth_etc_value is null)
7738 and (p_oth_etc_quantity is null)) then
7739
7740 ---5726773 l_sum_etc_values := nvl(p_planned_value,0) - nvl(p_actual_value,0);
7741 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));
7742
7743 else
7744
7745 l_sum_etc_values := (nvl(p_ppl_etc_value,0)+nvl(p_eqpmt_etc_value,0)
7746 +nvl(p_oth_etc_value,0)+nvl(p_subprj_ppl_etc_value,0)
7747 +nvl(p_subprj_eqpmt_etc_value,0)+nvl(p_subprj_oth_etc_value,0)
7748 +nvl(p_oth_etc_quantity,0));
7749
7750 end if;
7751 else
7752 -- Start Changes for bug 6714865
7753 -- l_sum_etc_values := nvl(p_planned_value,0) - nvl(p_actual_value,0);
7754 l_sum_etc_values := PA_FP_FCST_GEN_AMT_UTILS.get_etc_from_plan_act(nvl(p_planned_value,0),
7755 nvl(p_actual_value,0));
7756 -- End Changes for bug 6714865
7757 end if;
7758
7759 -- if l_sum_etc_values is negative return 0.
7760 /*5726773
7761 if (nvl(l_sum_etc_values,0) < 0) then
7762 l_sum_etc_values := 0;
7763 end if;
7764 */
7765 return(l_sum_etc_values);
7766
7767 end sum_etc_values;
7768
7769 -- Progress Management Changes. Bug # 3420093.
7770 -- Bug 3879461 : This function is not used.
7771 FUNCTION get_act_rawcost_this_period (p_as_of_date IN DATE
7772 ,p_project_id IN NUMBER
7773 ,p_object_id IN NUMBER
7774 ,p_object_version_id IN NUMBER
7775 ,p_proj_element_id IN NUMBER := null /* Modified for IB4 Progress CR. */) return NUMBER
7776 IS
7777 l_act_rawcost_period NUMBER := NULL;
7778 l_act_rawcost_date NUMBER := NULL;
7779 l_act_rawcost_pub NUMBER := NULL;
7780
7781 /*
7782 cursor c1 is
7783 select (nvl(ppr.oth_act_rawcost_to_date_pc,0)+nvl(ppr.ppl_act_rawcost_to_date_pc,0)
7784 +nvl(ppr.eqpmt_act_rawcost_to_date_pc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_pc,0)
7785 +nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0))
7786 act_rawcost_to_date
7787 from pa_progress_rollup ppr
7788 where ppr.project_id = p_project_id
7789 and ppr.object_id = p_object_id
7790 -- and ppr.object_version_id = p_object_version_id
7791 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
7792 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id)-- Modified for IB4 Progress CR.
7793 and ppr.as_of_date = (select max(ppr2.as_of_date)
7794 from pa_progress_rollup ppr2
7795 where ppr2.project_id = p_project_id
7796 and ppr2.object_id = p_object_id
7797 -- and ppr2.object_version_id = p_object_version_id
7798 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
7799 and ppr2.as_of_date > p_as_of_date
7800 and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id)); --Modified for IB4 Progress CR. );
7801 l_c1rec c1%rowtype;
7802 */
7803
7804 cursor c_prev_prog_rec is
7805 select (nvl(ppr.oth_act_rawcost_to_date_pc,0)+nvl(ppr.ppl_act_rawcost_to_date_pc,0)
7806 +nvl(ppr.eqpmt_act_rawcost_to_date_pc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_pc,0)
7807 +nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0))
7808 act_rawcost_to_date
7809 from pa_progress_rollup ppr
7810 where ppr.project_id = p_project_id
7811 and ppr.object_id = p_object_id
7812 -- and ppr.object_version_id = p_object_version_id
7813 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
7814 and ppr.structure_version_id is null -- Bug 3764224
7815 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
7816 and ppr.as_of_date = (select max(ppr2.as_of_date)
7817 from pa_progress_rollup ppr2
7818 where ppr2.project_id = p_project_id
7819 and ppr2.object_id = p_object_id
7820 and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
7821 and ppr2.structure_version_id is null -- Bug 3764224
7822 and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
7823 and ppr2.as_of_date < p_as_of_date);
7824
7825 cursor c_this_prog_rec is
7826 select (nvl(ppr.oth_act_rawcost_to_date_pc,0)+nvl(ppr.ppl_act_rawcost_to_date_pc,0)
7827 +nvl(ppr.eqpmt_act_rawcost_to_date_pc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_pc,0)
7828 +nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0))
7829 act_rawcost_to_date
7830 from pa_progress_rollup ppr
7831 where ppr.project_id = p_project_id
7832 and ppr.object_id = p_object_id
7833 -- and ppr.object_version_id = p_object_version_id
7834 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
7835 and ppr.structure_version_id is null -- Bug 3764224
7836 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
7837 and ppr.as_of_date = (select max(ppr2.as_of_date)
7838 from pa_progress_rollup ppr2
7839 where ppr2.project_id = p_project_id
7840 and ppr2.object_id = p_object_id
7841 and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
7842 and ppr2.structure_version_id is null -- Bug 3764224
7843 and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
7844 and ppr2.as_of_date >= p_as_of_date);
7845
7846
7847 BEGIN
7848 -- Bug 3764224 : This function(_this_peiord) are used only in assignment cases. So it is safe to select from rollup table itself
7849 -- no need to go in percent complete table
7850 -- Bug 3764224 : RLM Changes : Commented the below code. This was not calculating the actual this period
7851 /*
7852 open c1;
7853 fetch c1 into l_c1rec;
7854 if c1%found then
7855 select (nvl(ppr.oth_act_rawcost_to_date_pc,0)+nvl(ppr.ppl_act_rawcost_to_date_pc,0)
7856 +nvl(ppr.eqpmt_act_rawcost_to_date_pc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_pc,0)
7857 +nvl(ppr.subprj_ppl_act_rawcost_pc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_pc,0))
7858 into l_act_rawcost_pub
7859 from pa_progress_rollup ppr,pa_percent_completes ppc
7860 where ppr.project_id = ppc.project_id
7861 and ppr.object_id = ppc.object_id
7862 and ppr.object_version_id = ppc.object_version_id
7863 and ppr.as_of_date = ppc.date_computed (+)
7864 and ppr.project_id = p_project_id
7865 and ppr.object_id = p_object_id
7866 -- and ppr.object_version_id = p_object_version_id
7867 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
7868 and ppr.percent_complete_id = ppc.percent_complete_id
7869 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
7870 and ppr.structure_type = ppc.structure_type(+) -- FPM Dev CR 3
7871 and ppr.proj_element_id = ppc.task_id (+) -- Modified for IB4 Progress CR.
7872 and ppr.as_of_date = (select max(ppc2.date_computed)
7873 from pa_percent_completes ppc2
7874 where ppc2.project_id = p_project_id
7875 and ppc2.object_id = p_object_id
7876 -- and ppc2.object_version_id = p_object_version_id
7877 and ppc2.published_flag = 'Y'
7878 and ppc2.current_flag = 'Y'
7879 and ppc2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
7880 and ppc2.task_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
7881 );
7882
7883 l_act_rawcost_period := (nvl(l_c1rec.act_rawcost_to_date,0) - nvl(l_act_rawcost_pub,0));
7884
7885 end if;
7886 close c1;
7887 */
7888
7889 open c_prev_prog_rec;
7890 fetch c_prev_prog_rec into l_act_rawcost_pub;
7891 close c_prev_prog_rec;
7892
7893 open c_this_prog_rec;
7894 fetch c_this_prog_rec into l_act_rawcost_date;
7895 close c_this_prog_rec;
7896
7897 l_act_rawcost_period := (nvl(l_act_rawcost_date,0) - nvl(l_act_rawcost_pub,0));
7898
7899 if (l_act_rawcost_period < 0) then
7900 l_act_rawcost_period := 0;
7901 end if;
7902
7903 return(l_act_rawcost_period);
7904
7905 END get_act_rawcost_this_period;
7906
7907 -- Progress Management Changes. Bug # 3621404.
7908
7909 FUNCTION get_act_txn_rawcost_thisperiod (p_as_of_date IN DATE
7910 ,p_project_id IN NUMBER
7911 ,p_object_id IN NUMBER
7912 ,p_object_version_id IN NUMBER
7913 ,p_proj_element_id IN NUMBER := null /* Modified for IB4 Progress CR. */) return NUMBER
7914 IS
7915 l_act_rawcost_period NUMBER := NULL;
7916 l_act_rawcost_date NUMBER := NULL;
7917 l_act_rawcost_pub NUMBER := NULL;
7918 /*
7919
7920 cursor c1 is
7921 select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
7922 +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_tc,0)
7923 +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0)) act_rawcost_to_date
7924 from pa_progress_rollup ppr
7925 where ppr.project_id = p_project_id
7926 and ppr.object_id = p_object_id
7927 -- and ppr.object_version_id = p_object_version_id
7928 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
7929 and ppr.as_of_date = (select max(ppr2.as_of_date)
7930 from pa_progress_rollup ppr2
7931 where ppr2.project_id = p_project_id
7932 and ppr2.object_id = p_object_id
7933 -- and ppr2.object_version_id = p_object_version_id
7934 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
7935 and ppr2.as_of_date > p_as_of_date);
7936 l_c1rec c1%rowtype;
7937 */
7938
7939 --bug 3738651
7940 /* cursor cur_rawcost_tc_this_period
7941 is
7942 select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
7943 +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_tc,0)
7944 +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0)) act_rawcost_to_date
7945 from pa_progress_rollup ppr,pa_percent_completes ppc
7946 where ppr.project_id = ppc.project_id
7947 and ppr.object_id = ppc.object_id
7948 and ppr.as_of_date = ppc.date_computed
7949 and ppr.project_id = p_project_id
7950 and ppr.object_id = p_object_id
7951 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
7952 and ppr.percent_complete_id = ppc.percent_complete_id
7953 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
7954 and ppr.structure_type = ppc.structure_type (+) -- FPM Dev CR 3
7955 and ppr.proj_element_id = ppc.task_id (+) -- Modified for IB4 Progress CR.
7956 and ppc.current_flag = 'N'
7957 and ppc.published_flag = 'N'
7958 ;
7959 */
7960
7961 /* added by maansari7/25 */
7962 cursor c_prev_prog_rec is
7963 select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
7964 +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_tc,0)
7965 +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0)) act_rawcost_to_date
7966 from pa_progress_rollup ppr
7967 where ppr.project_id = p_project_id
7968 and ppr.object_id = p_object_id
7969 -- and ppr.object_version_id = p_object_version_id
7970 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
7971 and ppr.structure_version_id is null -- Bug 3764224
7972 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
7973 and current_flag = 'Y'
7974 ;
7975
7976 /* commented by maansari 7/25
7977 cursor c_prev_prog_rec is
7978 select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
7979 +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_tc,0)
7980 +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0)) act_rawcost_to_date
7981 from pa_progress_rollup ppr
7982 where ppr.project_id = p_project_id
7983 and ppr.object_id = p_object_id
7984 -- and ppr.object_version_id = p_object_version_id
7985 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
7986 and ppr.structure_version_id is null -- Bug 3764224
7987 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
7988 and ppr.as_of_date = (select max(ppr2.as_of_date)
7989 from pa_progress_rollup ppr2
7990 where ppr2.project_id = p_project_id
7991 and ppr2.object_id = p_object_id
7992 and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
7993 and ppr2.structure_version_id is null -- Bug 3764224
7994 and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
7995 and ppr2.as_of_date < p_as_of_date);
7996 */
7997
7998 /* commented by maansari 7/25
7999 cursor c_this_prog_rec is
8000 select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
8001 +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_tc,0)
8002 +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0)) act_rawcost_to_date
8003 from pa_progress_rollup ppr
8004 where ppr.project_id = p_project_id
8005 and ppr.object_id = p_object_id
8006 -- and ppr.object_version_id = p_object_version_id
8007 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8008 and ppr.structure_version_id is null -- Bug 3764224
8009 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
8010 and ppr.as_of_date = (select max(ppr2.as_of_date)
8011 from pa_progress_rollup ppr2
8012 where ppr2.project_id = p_project_id
8013 and ppr2.object_id = p_object_id
8014 and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8015 and ppr2.structure_version_id is null -- Bug 3764224
8016 and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
8017 and ppr2.as_of_date >= p_as_of_date);
8018 */
8019 /* added by maansari7/25 */
8020 cursor c_this_prog_rec is
8021 select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
8022 +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_tc,0)
8023 +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0)) act_rawcost_to_date
8024 from pa_progress_rollup ppr
8025 -- Bug 3879461 : percemnt compete join is not required. current_flag = W is sufficient
8026 -- ,pa_percent_completes ppc
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.object_id = ppc.object_id
8034 -- and ppr.as_of_date = ppc.date_computed
8035 -- and ppr.percent_complete_id = ppc.percent_complete_id
8036 -- and ppr.project_id = ppc.project_id
8037 -- and ppr.proj_element_id=ppc.task_id
8038 -- and ppr.structure_type = ppc.structure_type
8039 -- and ppc.current_flag= 'N'
8040 -- and ppc.published_flag = 'N'
8041 and ppr.current_flag= 'W'
8042 ;
8043
8044
8045 BEGIN
8046
8047 -- Bug 3764224 : This function(_this_peiord) are used only in assignment cases. So it is safe to select from rollup table itself
8048 -- no need to go in percent complete table
8049 -- Bug 3764224 : RLM Changes : Commented the below code. This was not calculating the actual this period
8050
8051 /*
8052 open c1;
8053 fetch c1 into l_c1rec;
8054 if c1%found then
8055 select (nvl(ppr.oth_act_rawcost_to_date_tc,0)+nvl(ppr.ppl_act_rawcost_to_date_tc,0)
8056 +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_tc,0)
8057 +nvl(ppr.subprj_ppl_act_rawcost_tc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_tc,0))
8058 into l_act_rawcost_pub
8059 from pa_progress_rollup ppr,pa_percent_completes ppc
8060 where ppr.project_id = ppc.project_id
8061 and ppr.object_id = ppc.object_id
8062 and ppr.object_version_id = ppc.object_version_id
8063 and ppr.as_of_date = ppc.date_computed (+)
8064 and ppr.project_id = p_project_id
8065 and ppr.object_id = p_object_id
8066 -- and ppr.object_version_id = p_object_version_id
8067 and ppr.percent_complete_id = ppc.percent_complete_id
8068 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8069 and ppr.structure_type = ppc.structure_type(+) -- FPM Dev CR 3
8070 and ppr.as_of_date = (select max(ppc2.date_computed)
8071 from pa_percent_completes ppc2
8072 where ppc2.project_id = p_project_id
8073 and ppc2.object_id = p_object_id
8074 -- and ppc2.object_version_id = p_object_version_id
8075 and ppc2.published_flag = 'Y'
8076 and ppc2.current_flag = 'Y'
8077 and ppc2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8078 );
8079 l_act_rawcost_period := (nvl(l_c1rec.act_rawcost_to_date,0) - nvl(l_act_rawcost_pub,0));
8080 end if;
8081 close c1;
8082
8083 if (l_act_rawcost_period < 0) then
8084 l_act_rawcost_period := 0;
8085 end if;
8086
8087 return(l_act_rawcost_period);
8088 */
8089
8090 /* OPEN cur_rawcost_tc_this_period;
8091 FETCH cur_rawcost_tc_this_period INTO l_act_rawcost_period;
8092 IF cur_rawcost_tc_this_period%FOUND
8093 THEN
8094 CLOSE cur_rawcost_tc_this_period;
8095 RETURN l_act_rawcost_period;
8096 ELSE
8097 CLOSE cur_rawcost_tc_this_period;
8098 RETURN null;
8099 END IF;
8100 */
8101
8102 open c_this_prog_rec;
8103 fetch c_this_prog_rec into l_act_rawcost_date;
8104 if c_this_prog_rec%notfound
8105 then
8106 close c_this_prog_rec;
8107 return 0;
8108 end if;
8109 close c_this_prog_rec;
8110
8111 open c_prev_prog_rec;
8112 fetch c_prev_prog_rec into l_act_rawcost_pub;
8113 close c_prev_prog_rec;
8114
8115 /* commneted by maansari7/25
8116 open c_this_prog_rec;
8117 fetch c_this_prog_rec into l_act_rawcost_date;
8118 close c_this_prog_rec;
8119 */
8120 l_act_rawcost_period := (nvl(l_act_rawcost_date,0) - nvl(l_act_rawcost_pub,0));
8121
8122 if (l_act_rawcost_period < 0) then
8123 l_act_rawcost_period := 0;
8124 end if;
8125
8126 return(l_act_rawcost_period);
8127
8128 END get_act_txn_rawcost_thisperiod;
8129
8130 -- Progress Management Changes. Bug # 3621404.
8131 -- Bug 3879461 : This function is not used now.
8132 FUNCTION get_act_pfn_rawcost_thisperiod (p_as_of_date IN DATE
8133 ,p_project_id IN NUMBER
8134 ,p_object_id IN NUMBER
8135 ,p_object_version_id IN NUMBER
8136 ,p_proj_element_id IN NUMBER := null /* Modified for IB4 Progress CR. */) return NUMBER
8137 IS
8138 l_act_rawcost_period NUMBER := NULL;
8139 l_act_rawcost_date NUMBER := NULL;
8140 l_act_rawcost_pub NUMBER := NULL;
8141
8142 /*
8143 cursor c1 is
8144 select (nvl(ppr.oth_act_rawcost_to_date_fc,0)+nvl(ppr.ppl_act_rawcost_to_date_fc,0)
8145 +nvl(ppr.eqpmt_act_rawcost_to_date_fc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_fc,0)
8146 +nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0)) act_rawcost_to_date
8147 from pa_progress_rollup ppr
8148 where ppr.project_id = p_project_id
8149 and ppr.object_id = p_object_id
8150 -- and ppr.object_version_id = p_object_version_id
8151 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
8152 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
8153 and ppr.as_of_date = (select max(ppr2.as_of_date)
8154 from pa_progress_rollup ppr2
8155 where ppr2.project_id = p_project_id
8156 and ppr2.object_id = p_object_id
8157 -- and ppr2.object_version_id = p_object_version_id
8158 and structure_type = 'WORKPLAN' -- FPM Dev CR 3
8159 and ppr2.as_of_date > p_as_of_date
8160 and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR. );
8161 l_c1rec c1%rowtype;
8162 */
8163
8164 cursor c_prev_prog_rec is
8165 select (nvl(ppr.oth_act_rawcost_to_date_fc,0)+nvl(ppr.ppl_act_rawcost_to_date_fc,0)
8166 +nvl(ppr.eqpmt_act_rawcost_to_date_fc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_fc,0)
8167 +nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0)) act_rawcost_to_date
8168 from pa_progress_rollup ppr
8169 where ppr.project_id = p_project_id
8170 and ppr.object_id = p_object_id
8171 -- and ppr.object_version_id = p_object_version_id
8172 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8173 and ppr.structure_version_id is null -- Bug 3764224
8174 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
8175 and ppr.as_of_date = (select max(ppr2.as_of_date)
8176 from pa_progress_rollup ppr2
8177 where ppr2.project_id = p_project_id
8178 and ppr2.object_id = p_object_id
8179 and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8180 and ppr2.structure_version_id is null -- Bug 3764224
8181 and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
8182 and ppr2.as_of_date < p_as_of_date);
8183
8184 cursor c_this_prog_rec is
8185 select (nvl(ppr.oth_act_rawcost_to_date_fc,0)+nvl(ppr.ppl_act_rawcost_to_date_fc,0)
8186 +nvl(ppr.eqpmt_act_rawcost_to_date_fc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_fc,0)
8187 +nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0)) act_rawcost_to_date
8188 from pa_progress_rollup ppr
8189 where ppr.project_id = p_project_id
8190 and ppr.object_id = p_object_id
8191 -- and ppr.object_version_id = p_object_version_id
8192 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8193 and ppr.structure_version_id is null -- Bug 3764224
8194 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
8195 and ppr.as_of_date = (select max(ppr2.as_of_date)
8196 from pa_progress_rollup ppr2
8197 where ppr2.project_id = p_project_id
8198 and ppr2.object_id = p_object_id
8199 and ppr2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8200 and ppr2.structure_version_id is null -- Bug 3764224
8201 and ppr2.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Bug 3764224
8202 and ppr2.as_of_date >= p_as_of_date);
8203
8204
8205 BEGIN
8206
8207 -- Bug 3764224 : This function(_this_peiord) are used only in assignment cases. So it is safe to select from rollup table itself
8208 -- no need to go in percent complete table
8209 -- Bug 3764224 : RLM Changes : Commented the below code. This was not calculating the actual this period
8210
8211 /*
8212 open c1;
8213 fetch c1 into l_c1rec;
8214 if c1%found then
8215 select (nvl(ppr.oth_act_rawcost_to_date_fc,0)+nvl(ppr.ppl_act_rawcost_to_date_fc,0)
8216 +nvl(ppr.eqpmt_act_rawcost_to_date_fc,0)+nvl(ppr.spj_oth_act_rawcost_to_date_fc,0)
8217 +nvl(ppr.subprj_ppl_act_rawcost_fc,0)+nvl(ppr.subprj_eqpmt_act_rawcost_fc,0))
8218 into l_act_rawcost_pub
8219 from pa_progress_rollup ppr,pa_percent_completes ppc
8220 where ppr.project_id = ppc.project_id
8221 and ppr.object_id = ppc.object_id
8222 and ppr.object_version_id = ppc.object_version_id
8223 and ppr.as_of_date = ppc.date_computed (+)
8224 and ppr.project_id = p_project_id
8225 and ppr.object_id = p_object_id
8226 -- and ppr.object_version_id = p_object_version_id
8227 and ppr.proj_element_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
8228 and ppr.percent_complete_id = ppc.percent_complete_id
8229 and ppr.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8230 and ppr.structure_type = ppc.structure_type(+) -- FPM Dev CR 3
8231 and ppr.proj_element_id = ppc.task_id (+) -- Modified for IB4 Progress CR.
8232 and ppr.as_of_date = (select max(ppc2.date_computed)
8233 from pa_percent_completes ppc2
8234 where ppc2.project_id = p_project_id
8235 and ppc2.object_id = p_object_id
8236 -- and ppc2.object_version_id = p_object_version_id
8237 and ppc2.published_flag = 'Y'
8238 and ppc2.current_flag = 'Y'
8239 and ppc2.structure_type = 'WORKPLAN' -- FPM Dev CR 3
8240 and ppc2.task_id = nvl(p_proj_element_id, p_object_id) -- Modified for IB4 Progress CR.
8241 );
8242 l_act_rawcost_period := (nvl(l_c1rec.act_rawcost_to_date,0) - nvl(l_act_rawcost_pub,0));
8243 end if;
8244 close c1;
8245 */
8246
8247 open c_prev_prog_rec;
8248 fetch c_prev_prog_rec into l_act_rawcost_pub;
8249 close c_prev_prog_rec;
8250
8251 open c_this_prog_rec;
8252 fetch c_this_prog_rec into l_act_rawcost_date;
8253 close c_this_prog_rec;
8254
8255 l_act_rawcost_period := (nvl(l_act_rawcost_date,0) - nvl(l_act_rawcost_pub,0));
8256
8257 if (l_act_rawcost_period < 0) then
8258 l_act_rawcost_period := 0;
8259 end if;
8260
8261 return(l_act_rawcost_period);
8262 END get_act_pfn_rawcost_thisperiod;
8263
8264 -- Bug 3621404 : Added Get_Res_Rate_Burden_Multiplier
8265 Procedure Get_Res_Rate_Burden_Multiplier(P_res_list_mem_id IN NUMBER
8266 ,P_project_id IN NUMBER
8267 ,P_task_id IN NUMBER := null --bug 3860575
8268 ,p_as_of_Date IN DATE := null --bug 3901289
8269 --maansari6/14 bug 3686920
8270 ,p_structure_version_id IN NUMBER default null
8271 ,p_currency_code IN VARCHAR2 default null
8272 --maansari6/14 bug 3686920
8273 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
8274 ,p_calling_mode IN VARCHAR2 := 'ACTUAL_RATES' -- Bug 3627315
8275 --,P_dummy_override_raw_cost IN NUMBER Bug 3632946
8276 --,P_override_txn_currency_code IN VARCHAR2 Bug 3632946
8277 ,x_resource_curr_code OUT NOCOPY VARCHAR2
8278 ,x_resource_raw_rate OUT NOCOPY NUMBER
8279 ,x_resource_burden_rate OUT NOCOPY NUMBER
8280 -- ,X_dummy_burden_cost OUT NOCOPY NUMBER Bug 3632946
8281 ,X_burden_multiplier OUT NOCOPY NUMBER
8282 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8283 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8284 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8285 )
8286 AS
8287
8288 l_msg_count NUMBER :=0;
8289 l_data VARCHAR2(2000);
8290 l_msg_data VARCHAR2(2000);
8291 l_error_msg_code VARCHAR2(30);
8292 l_msg_index_out NUMBER;
8293 l_return_status VARCHAR2(2000);
8294 l_debug_mode VARCHAR2(30);
8295 -- added for Bug: 4537865
8296 l_new_msg_data VARCHAR2(2000);
8297 -- added for Bug: 4537865
8298 l_resource_class_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
8299 l_resource_class_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8300 l_resource_class_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8301 l_res_type_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8302 l_job_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8303 l_person_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8304 l_person_type_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8305 l_named_role_tbl SYSTEM.PA_VARCHAR2_80_TBL_TYPE := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
8306 l_bom_resource_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8307 l_non_labor_resource_tbl SYSTEM.PA_VARCHAR2_20_TBL_TYPE := SYSTEM.PA_VARCHAR2_20_TBL_TYPE();
8308 l_inventory_item_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8309 l_item_category_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8310 l_project_role_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8311 l_organization_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8312 l_fc_res_type_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8313 l_expenditure_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8314 l_expenditure_category_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8315 l_event_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8316 l_revenue_category_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8317 l_supplier_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8318 l_unit_of_measure_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8319 l_spread_curve_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8320 l_etc_method_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8321 l_mfc_cost_type_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8322 l_procure_resource_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
8323 l_incurred_by_res_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
8324 l_Incur_by_res_class_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8325 l_Incur_by_role_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8326 l_org_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8327 l_rate_based_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
8328 l_rate_expenditure_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8329 l_rate_func_curr_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8330 l_rate_incurred_by_org_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8331 l_resource_assignment_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8332 l_assignment_description_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
8333 l_planning_resource_alias_tbl SYSTEM.PA_VARCHAR2_80_TBL_TYPE := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
8334 l_resource_name_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8335 l_project_role_name_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8336 l_organization_name_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
8337 l_financial_category_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8338 l_project_assignment_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8339 l_use_task_schedule_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
8340 l_planning_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
8341 l_planning_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
8342 l_total_quantity_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8343 l_override_currency_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8344 l_billable_percent_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8345 l_cost_rate_override_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8346 l_burdened_rate_override_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8347 l_sp_fixed_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
8348 l_financial_category_name_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8349 l_supplier_name_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
8350 l_ATTRIBUTE_CATEGORY_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
8351 l_ATTRIBUTE1_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8352 l_ATTRIBUTE2_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8353 l_ATTRIBUTE3_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8354 l_ATTRIBUTE4_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8355 l_ATTRIBUTE5_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8356 l_ATTRIBUTE6_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8357 l_ATTRIBUTE7_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8358 l_ATTRIBUTE8_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8359 l_ATTRIBUTE9_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8360 l_ATTRIBUTE10_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8361 l_ATTRIBUTE11_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8362 l_ATTRIBUTE12_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8363 l_ATTRIBUTE13_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8364 l_ATTRIBUTE14_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8365 l_ATTRIBUTE15_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8366 l_ATTRIBUTE16_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8367 l_ATTRIBUTE17_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8368 l_ATTRIBUTE18_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8369 l_ATTRIBUTE19_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8370 l_ATTRIBUTE20_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8371 l_ATTRIBUTE21_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8372 l_ATTRIBUTE22_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8373 l_ATTRIBUTE23_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8374 l_ATTRIBUTE24_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8375 l_ATTRIBUTE25_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8376 l_ATTRIBUTE26_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8377 l_ATTRIBUTE27_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8378 l_ATTRIBUTE28_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8379 l_ATTRIBUTE29_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8380 l_ATTRIBUTE30_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
8381 --End of variables for Variable for Resource Attributes
8382
8383 l_task_id pa_tasks.task_id%TYPE := P_task_id; --bug 3860575, Satish
8384 l_top_task_id pa_tasks.task_id%TYPE;
8385 l_bill_job_group_id pa_projects_all.bill_job_group_id%TYPE;
8386 l_project_type pa_projects_all.project_type%TYPE;
8387 l_expenditure_type pa_resource_assignments.expenditure_type%TYPE;
8388 l_org_id pa_projects_all.org_id%TYPE;
8389 l_expenditure_OU pa_projects_all.org_id%TYPE;
8390 l_resource_class_code pa_resource_assignments.resource_class_code%TYPE;
8391 l_non_labor_resource pa_resource_assignments.non_labor_resource%TYPE;
8392 l_nlr_organization_id pa_resource_assignments.organization_id%TYPE;
8393 l_rate_override_to_organz_id pa_resource_assignments.organization_id%TYPE;
8394 l_rate_incurred_by_organz_id pa_resource_assignments.organization_id%TYPE;
8395 l_inventory_item_id pa_resource_assignments.inventory_item_id%TYPE;
8396 l_bom_resource_id pa_resource_assignments.bom_resource_id%TYPE;
8397 l_txn_currency_code_override pa_fp_res_assignments_tmp.txn_currency_code_override%TYPE;
8398 l_cost_rate_multiplier CONSTANT pa_labor_cost_multipliers.multiplier%TYPE := 1;
8399 -- l_burden_override_multiplier pa_fp_res_assignments_tmp.b_multiplier_override%TYPE;
8400 l_burden_override_multiplier Number;
8401 l_cost_override_rate pa_fp_res_assignments_tmp.rw_cost_rate_override%TYPE;
8402 l_raw_cost pa_fp_res_assignments_tmp.txn_raw_cost%TYPE;
8403 -- added for Bug: 4537865
8404 l_new_raw_cost pa_fp_res_assignments_tmp.txn_raw_cost%TYPE;
8405 -- added for Bug: 4537865
8406 l_raw_cost_rate pa_fp_res_assignments_tmp.raw_cost_rate%TYPE;
8407 l_burden_cost pa_fp_res_assignments_tmp.txn_burdened_cost%TYPE;
8408 l_mfc_cost_type_id pa_resource_assignments.mfc_cost_type_id%TYPE;
8409 l_mfc_cost_source CONSTANT NUMBER := 2;
8410 l_item_category_id pa_resource_assignments.item_category_id%TYPE;
8411 l_job_id pa_resource_assignments.job_id%TYPE;
8412 l_person_id pa_resource_list_members.person_id%TYPE;
8413
8414 --Out variables
8415 l_trxn_curr_code varchar2(100);
8416 l_txn_raw_cost number;
8417 l_txn_cost_rate number;
8418 l_txn_burden_cost number;
8419 l_txn_burden_cost_rate number;
8420 l_burden_multiplier number;
8421 l_cost_ind_compiled_set_id number;
8422 l_raw_cost_rejection_code varchar2(1000);
8423 l_burden_cost_rejection_code varchar2(1000);
8424 l_insufficient_paramters EXCEPTION; -- Added to raised exception if any required paramter is missing for PA_COST1 api
8425 l_resource_alias pa_task_assignments_v.resource_alias%TYPE; -- Added if any required paramter is missing for PA_COST1 api
8426
8427 l_null_above VARCHAR2(1) := 'N'; -- Added if any required paramter is miss ing for PA_COST1 api
8428
8429 l_incur_by_res_type SYSTEM.PA_VARCHAR2_30_TBL_TYPE; -- Bug # 3473324.
8430 g1_debug_mode VARCHAR2(1);
8431 l_res_list_memb_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE() ;
8432
8433 l_plan_cost_burden_sch_id NUMBER; -- Bug 3632946
8434
8435
8436 --maansari6/14 bug 3686920
8437 l_plan_cost_job_rate_sch_id NUMBER;
8438 l_plan_cost_emp_rate_sch_id NUMBER;
8439 l_plan_cost_nlr_rate_sch_id NUMBER;
8440 l_fp_cols_rec PA_FP_GEN_AMOUNT_UTILS.FP_COLS;
8441 l_plan_version_id NUMBER;
8442 l_res_class_sch_id NUMBER;
8443 --maansari6/14
8444
8445 --amksingh 3686920
8446 l_calling_mode VARCHAR2(15);
8447 l_use_planning_rates_flag VARCHAR2(1);
8448 --amksingh 3686920
8449
8450 --bug 3733606
8451 l_unit_of_measure VARCHAR2(150);
8452 l_carrying_out_org_id NUMBER;
8453 l_cost_res_class_rate_sch_id NUMBER;
8454 l_revenue_rejection_code VARCHAR2(30);
8455
8456 l_bill_rate NUMBER;
8457 l_raw_revenue NUMBER;
8458 l_bill_markup_percentage NUMBER;
8459 l_cost_markup_percentage NUMBER;
8460 l_rev_txn_curr_code VARCHAR2(120);
8461 -- Bug 3691289 : Added following two variables
8462 l_pl_res_class_raw_cost_sch_id NUMBER;
8463 l_pl_cost_res_class_rate_sc_id NUMBER;
8464
8465 --bug# 3801523 Satish start
8466 l_rate_based_flag VARCHAR2(1);
8467 l_burd_sch_cp_structure VARCHAR2(1000);
8468 l_burd_sch_cost_base VARCHAR2(1000);
8469 l_burd_sch_fixed_date DATE;
8470 l_burd_sch_id NUMBER;
8471 l_burd_sch_rev_id NUMBER;
8472 --bug# 3801523 Satish end
8473
8474 /*
8475 --bug 3821299
8476 CURSOR get_assignment_id( c_structure_version_id NUMBER, c_task_id NUMBER, c_resource_list_member_id NUMBER )
8477 IS
8478 SELECT resource_assignment_id
8479 FROM pa_task_assignments_v
8480 WHERE structure_version_id = c_structure_version_id
8481 AND task_id = c_task_id
8482 AND resource_list_member_id = c_resource_list_member_id
8483 ;
8484 */
8485
8486 CURSOR get_override_rate ( c_budget_version_id NUMBER, c_resource_assignment_id NUMBER )
8487 IS
8488 SELECT NVL(TXN_COST_RATE_OVERRIDE,TXN_STANDARD_COST_RATE) -- Bug 3951555, Added nvl and TXN_STANDARD_COST_RATE
8489 , nvl(BURDEN_COST_RATE_OVERRIDE, BURDEN_COST_RATE) -- Bug 3951555, Added nvl and BURDEN_COST_RATE
8490 FROM pa_budget_lines
8491 WHERE budget_version_id = c_budget_version_id
8492 AND resource_assignment_id = c_resource_assignment_id
8493 AND TXN_CURRENCY_CODE = p_currency_code
8494 AND p_as_of_date BETWEEN start_date and end_date
8495 ;
8496
8497 ---- check override rates in pa_resource_assgn_rate (IPM changes)
8498 CURSOR get_asgn_override_rate ( c_budget_version_id NUMBER, c_resource_assignment_id NUMBER )
8499 IS SELECT TXN_RAW_COST_RATE_OVERRIDE, TXN_BURDEN_COST_RATE_OVERRIDE
8500 FROM pa_resource_asgn_curr WHERE budget_version_id = c_budget_version_id
8501 AND resource_assignment_id = c_resource_assignment_id AND TXN_CURRENCY_CODE = p_currency_code;
8502
8503 l_resource_assignment_id NUMBER;
8504 l_raw_override_rate NUMBER := null;
8505 l_burden_override_rate NUMBER := null;
8506 l_asgn_raw_override_rate NUMBER := null; ---IPM changes
8507 l_asgn_burden_override_rate NUMBER := null; ---IPM changes
8508 l_etc_flag VARCHAR2(1) := 'N';
8509 --bug 3821299
8510
8511 -- Bug 3965584 Begin
8512 CURSOR c_get_assgn_details(c_project_id NUMBER, c_task_id NUMBER, c_structure_version_id NUMBER, c_resource_list_member_id NUMBER)
8513 IS
8514 SELECT pra.person_id,
8515 pra.resource_class_code,
8516 pra.expenditure_type,
8517 pra.rate_expenditure_type,
8518 pra.RATE_EXPENDITURE_ORG_ID,
8519 pra.non_labor_resource,
8520 pra.organization_id,
8521 pra.bom_resource_id,
8522 pra.inventory_item_id,
8523 pra.mfc_cost_type_id,
8524 pra.item_category_id,
8525 pra.job_id,
8526 pra.unit_of_measure,
8527 pra.rate_based_flag,
8528 pra.resource_assignment_id,
8529 rlm.alias
8530 FROM pa_resource_assignments pra, ----pa_task_assignments_v 4871809
8531 pa_budget_versions pbv,
8532 pa_resource_list_members rlm
8533 WHERE pbv.project_structure_version_id = c_structure_version_id
8534 AND pbv.budget_version_id = pra.budget_version_id
8535 AND pra.task_id = c_task_id
8536 AND pra.resource_list_member_id = c_resource_list_member_id
8537 AND pra.project_id = c_project_id
8538 AND pra.resource_list_member_id = rlm.resource_list_member_id
8539 ;
8540 l_assgn_rec c_get_assgn_details%ROWTYPE;
8541 -- Bug 3965584 End
8542
8543
8544
8545 Begin
8546
8547 l_return_status := FND_API.G_RET_STS_SUCCESS ;
8548 -- FPM Dev CR 8 : Added debug messages
8549 g1_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N');
8550
8551 IF FND_API.TO_BOOLEAN(NVL(p_init_msg_list,FND_API.G_FALSE)) THEN -- Added for required prarameter validation
8552 FND_MSG_PUB.initialize;
8553 END IF;
8554
8555
8556 -- Bug 3691289 Added condtion to return if no res list mem id
8557 IF P_res_list_mem_id IS NULL THEN
8558 -- As per Clint Effort to Cost Conversion should not happen if planned effort is not entered at task(which means
8559 -- hiden assignment does not exists)
8560 return;
8561 END IF;
8562
8563
8564
8565 -- Bug 3965584 Begin
8566 -- Get the values from Task assignment.
8567
8568 OPEN c_get_assgn_details(p_project_id, p_task_id, p_structure_version_id, P_res_list_mem_id);
8569 FETCH c_get_assgn_details INTO l_assgn_rec;
8570 CLOSE c_get_assgn_details;
8571
8572 l_person_id := l_assgn_rec.person_id;
8573 l_resource_class_code := l_assgn_rec.resource_class_code;
8574 l_expenditure_type := nvl(l_assgn_rec.expenditure_type, l_assgn_rec.rate_expenditure_type);
8575 l_expenditure_ou := l_assgn_rec.RATE_EXPENDITURE_ORG_ID;
8576 l_org_id := null;
8577 l_non_labor_resource := l_assgn_rec.non_labor_resource;
8578 l_nlr_organization_id := l_assgn_rec.organization_id;
8579 l_rate_incurred_by_organz_id := l_assgn_rec.organization_id;
8580 l_bom_resource_id := l_assgn_rec.bom_resource_id;
8581 l_inventory_item_id := l_assgn_rec.inventory_item_id;
8582 l_txn_currency_code_override := null;
8583 l_cost_override_rate := null;
8584 l_mfc_cost_type_id := l_assgn_rec.mfc_cost_type_id;
8585 l_item_category_id := l_assgn_rec.item_category_id;
8586 l_job_id := l_assgn_rec.job_id;
8587 l_unit_of_measure := l_assgn_rec.unit_of_measure;
8588 l_rate_based_flag := l_assgn_rec.rate_based_flag;
8589 l_resource_assignment_id := l_assgn_rec.resource_assignment_id;
8590 l_resource_alias := l_assgn_rec.alias;
8591
8592 IF g1_debug_mode = 'Y' THEN
8593 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);
8594 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);
8595 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);
8596 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);
8597 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);
8598 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);
8599 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);
8600 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);
8601 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);
8602 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);
8603 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);
8604 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);
8605 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);
8606 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);
8607 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);
8608 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);
8609 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);
8610 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);
8611 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);
8612 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);
8613 END IF;
8614
8615
8616 -- Bug 3965584 End
8617
8618
8619
8620 -- If any values are not there at assignment level, then get it using resourse defaults
8621
8622 l_res_list_memb_id_tbl.extend(1);
8623 l_res_list_memb_id_tbl(1) := P_res_list_mem_id;
8624 l_calling_mode := p_calling_mode;
8625
8626 BEGIN
8627 IF g1_debug_mode = 'Y' THEN
8628 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'Calling get_resource_defaults', x_Log_Level=> 3);
8629 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);
8630 END IF;
8631 PA_PLANNING_RESOURCE_UTILS.get_resource_defaults(
8632 p_resource_list_members => l_res_list_memb_id_tbl,
8633 p_project_id => p_project_id,
8634 x_resource_class_flag => l_resource_class_flag_tbl,
8635 x_resource_class_code => l_resource_class_code_tbl,
8636 x_resource_class_id => l_resource_class_id_tbl,
8637 x_res_type_code => l_res_type_code_tbl,
8638 x_person_id => l_person_id_tbl,
8639 x_job_id => l_job_id_tbl,
8640 x_person_type_code => l_person_type_code_tbl,
8641 x_named_role => l_named_role_tbl,
8642 x_bom_resource_id => l_bom_resource_id_tbl,
8643 x_non_labor_resource => l_non_labor_resource_tbl,
8644 x_inventory_item_id => l_inventory_item_id_tbl,
8645 x_item_category_id => l_item_category_id_tbl,
8646 x_project_role_id => l_project_role_id_tbl,
8647 x_organization_id => l_organization_id_tbl,
8648 x_fc_res_type_code => l_fc_res_type_code_tbl,
8649 x_expenditure_type => l_expenditure_type_tbl,
8650 x_expenditure_category => l_expenditure_category_tbl,
8651 x_event_type => l_event_type_tbl,
8652 x_revenue_category_code => l_revenue_category_code_tbl,
8653 x_supplier_id => l_supplier_id_tbl,
8654 x_unit_of_measure => l_unit_of_measure_tbl,
8655 x_spread_curve_id => l_spread_curve_id_tbl,
8656 x_etc_method_code => l_etc_method_code_tbl,
8657 x_mfc_cost_type_id => l_mfc_cost_type_id_tbl,
8658 x_incurred_by_res_flag => l_incurred_by_res_flag_tbl,
8659 x_incur_by_res_class_code => l_incur_by_res_class_code_tbl,
8660 x_Incur_by_role_id => l_Incur_by_role_id_tbl,
8661 x_org_id => l_org_id_tbl,
8662 X_rate_based_flag => l_rate_based_flag_tbl,
8663 x_rate_expenditure_type => l_rate_expenditure_type_tbl,
8664 x_rate_func_curr_code => l_rate_func_curr_code_tbl,
8665 X_incur_by_res_type => l_incur_by_res_type, -- Bug # 3473324 changes.
8666 x_msg_data => l_msg_data,
8667 x_msg_count => l_msg_count,
8668 x_return_status => l_return_status);
8669
8670 EXCEPTION
8671 WHEN OTHERS THEN
8672 fnd_msg_pub.add_exc_msg(p_pkg_name => 'pa_progress_utils',
8673 p_procedure_name => 'Get_Res_Rate_Burden_Multiplier',
8674 p_error_text => SUBSTRB('pa_planning_resource_utils.get_resource_defaults:'||SQLERRM,1,120));
8675 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);
8676 raise fnd_api.g_exc_error;
8677 END;
8678
8679 -- IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN --------------------------------{
8680 FOR i IN l_res_list_memb_id_tbl.FIRST .. l_res_list_memb_id_tbl.LAST LOOP
8681
8682 -- Bug 3965584 : Values will be taken only if they are not presnt already
8683 IF l_person_id IS NULL THEN
8684 IF l_person_id_tbl.EXISTS(i) AND l_person_id_tbl(i) is not null THEN
8685 l_person_id := l_person_id_tbl(i);
8686 ELSE
8687 l_person_id := null;
8688 END IF;
8689 END IF;
8690
8691 IF l_resource_class_code IS NULL THEN
8692 IF l_resource_class_code_tbl.EXISTS(i) AND l_resource_class_code_tbl(i) is not null THEN
8693 l_resource_class_code := l_resource_class_code_tbl(i);
8694 ELSE
8695 l_resource_class_code := null;
8696 END IF;
8697 END IF;
8698
8699 IF l_expenditure_type IS NULL THEN
8700 IF l_expenditure_type_tbl.EXISTS(i) and l_expenditure_type_tbl(i) is not null THEN
8701 l_expenditure_type := l_expenditure_type_tbl(i);
8702 ELSE
8703 IF l_rate_expenditure_type_tbl.EXISTS(i) THEN
8704 l_expenditure_type := l_rate_expenditure_type_tbl(i);
8705 ELSE
8706 l_expenditure_type := null;
8707 END IF;
8708 END IF;
8709 END IF;
8710
8711 --bug# 3819400 Satish start
8712 /*IF l_rate_incurred_by_org_id_tbl.EXISTS(i) and l_rate_incurred_by_org_id_tbl(i) is not null THEN
8713 l_expenditure_OU := l_rate_incurred_by_org_id_tbl(i);
8714 ELSE
8715 l_expenditure_OU := null;
8716 END IF;*/
8717
8718 /* bug 3823945
8719 IF l_organization_id_tbl.EXISTS(i) and l_organization_id_tbl(i) is not null THEN
8720 l_expenditure_OU := l_organization_id_tbl(i);
8721 ELSE
8722 l_expenditure_OU := null;
8723 END IF;
8724 */
8725 --bug# 3819400 Satish end
8726
8727 -- bug 3823945
8728 IF l_expenditure_OU IS NULL THEN
8729 IF l_org_id_tbl.EXISTS(i) and l_org_id_tbl(i) is not null THEN
8730 l_expenditure_OU := l_org_id_tbl(i);
8731 ELSE
8732 l_expenditure_OU := null;
8733 END IF;
8734 END IF;
8735 -- bug 3823945
8736
8737 IF l_org_id IS NULL THEN
8738 IF l_org_id_tbl.EXISTS(i) and l_org_id_tbl(i) is not null THEN
8739 l_org_id := l_org_id_tbl(i);
8740 ELSE
8741 l_org_id := null;
8742 END IF;
8743 END IF;
8744
8745 IF l_non_labor_resource IS NULL THEN
8746 IF l_non_labor_resource_tbl.EXISTS(i) and l_non_labor_resource_tbl(i) is not null THEN
8747 l_non_labor_resource := l_non_labor_resource_tbl(i);
8748 ELSE
8749 l_non_labor_resource := null;
8750 END IF;
8751 END IF;
8752
8753 IF l_nlr_organization_id IS NULL THEN
8754 IF l_organization_id_tbl.EXISTS(i) and l_organization_id_tbl(i) is not null THEN
8755 l_nlr_organization_id := l_organization_id_tbl(i);
8756 ELSE
8757 l_nlr_organization_id := null;
8758 END IF;
8759 END IF;
8760
8761 IF l_rate_incurred_by_organz_id IS NULL THEN
8762 IF l_rate_incurred_by_org_id_tbl.EXISTS(i) and l_rate_incurred_by_org_id_tbl(i) is not null THEN
8763 --l_rate_incurred_by_organz_id := l_rate_incurred_by_org_id_tbl(i);
8764 l_rate_incurred_by_organz_id := l_organization_id_tbl(i); --bug 3901289
8765 ELSE
8766 l_rate_incurred_by_organz_id := null;
8767 END IF;
8768 END IF;
8769
8770 IF l_bom_resource_id IS NULL THEN
8771 IF l_bom_resource_id_tbl.EXISTS(i) and l_bom_resource_id_tbl(i) is not null THEN
8772 l_bom_resource_id := l_bom_resource_id_tbl(i);
8773 ELSE
8774 l_bom_resource_id := null;
8775 END IF;
8776 END IF;
8777
8778 IF l_inventory_item_id IS NULL THEN
8779 IF l_inventory_item_id_tbl.EXISTS(i) and l_inventory_item_id_tbl(i) is not null THEN
8780 l_inventory_item_id := l_inventory_item_id_tbl(i);
8781 ELSE
8782 l_inventory_item_id := null;
8783 END IF;
8784 END IF;
8785
8786 -- Bug 3965584 : Not required
8787 --IF l_override_currency_code_tbl.EXISTS(i) and l_override_currency_code_tbl(i) is not null THEN
8788 -- l_txn_currency_code_override := l_override_currency_code_tbl(i);
8789 --ELSE
8790 -- l_txn_currency_code_override := null;
8791 --END IF;
8792
8793 -- Bug 3965584 : Not required
8794 --IF l_cost_rate_override_tbl.EXISTS(i) and l_cost_rate_override_tbl(i) is not null THEN
8795 -- l_cost_override_rate := l_cost_rate_override_tbl(i);
8796 --ELSE
8797 -- l_cost_override_rate := null;
8798 --END IF;
8799
8800 IF l_mfc_cost_type_id IS NULL THEN
8801 IF l_mfc_cost_type_id_tbl.EXISTS(i) and l_mfc_cost_type_id_tbl(i) is not null THEN
8802 l_mfc_cost_type_id := l_mfc_cost_type_id_tbl(i);
8803 ELSE
8804 l_mfc_cost_type_id := null;
8805 END IF;
8806 END IF;
8807
8808 IF l_item_category_id IS NULL THEN
8809 IF l_item_category_id_tbl.EXISTS(i) and l_item_category_id_tbl(i) is not null THEN
8810 l_item_category_id := l_item_category_id_tbl(i);
8811 ELSE
8812 l_item_category_id := null;
8813 END IF;
8814 END IF;
8815
8816 IF l_job_id IS NULL THEN
8817 IF l_job_id_tbl.EXISTS(i) and l_job_id_tbl(i) is not null THEN
8818 l_job_id := l_job_id_tbl(i);
8819 ELSE
8820 l_job_id := null;
8821 END IF;
8822 END IF;
8823
8824 IF l_rate_based_flag IS NULL THEN
8825 IF l_rate_based_flag_tbl.EXISTS(i) and l_rate_based_flag_tbl(i) is not null THEN
8826 l_rate_based_flag := l_rate_based_flag_tbl(i);
8827 ELSE
8828 l_rate_based_flag := null;
8829 END IF;
8830 END IF;
8831 --bug 3733606
8832
8833 IF l_unit_of_measure IS NULL THEN
8834 IF l_unit_of_measure_tbl.EXISTS(i) and l_unit_of_measure_tbl(i) is not null THEN
8835 l_unit_of_measure := l_unit_of_measure_tbl(i);
8836 ELSE
8837 l_unit_of_measure := null;
8838 END IF;
8839 END IF;
8840 END LOOP; -- Bug 3965584 : Reduced the scope of FOR LOOP
8841
8842 IF g1_debug_mode = 'Y' THEN
8843 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);
8844 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);
8845 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);
8846 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);
8847 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);
8848 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);
8849 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);
8850 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);
8851 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);
8852 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);
8853 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);
8854 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);
8855 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);
8856 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);
8857 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);
8858 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);
8859 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);
8860 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);
8861 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);
8862 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);
8863 END IF;
8864
8865 --bug 3821299
8866 IF p_calling_mode = 'PLAN_RATES' THEN
8867 l_etc_flag := 'Y';
8868 END IF;
8869 --bug 3821299
8870
8871
8872
8873 /* Select the project Type */
8874 SELECT project_type, carrying_out_organization_id
8875 INTO l_project_type, l_carrying_out_org_id
8876 FROM pa_projects_all
8877 WHERE project_id = p_project_id;
8878
8879
8880 /* Select the resource name TO BE CHECKED
8881 BEGIN
8882 SELECT resource_alias
8883 INTO l_resource_alias
8884 FROM pa_task_assignments_v
8885 WHERE resource_list_member_id = l_BOM_resource_id
8886 AND project_id = p_project_id; -- Modifications for Bug # 3688902.
8887 EXCEPTION
8888 WHEN NO_DATA_FOUND THEN
8889 NULL;
8890 WHEN OTHERS THEN
8891 NULL;
8892 END;
8893 */
8894 --bug 3860575 start
8895 /*-- FPM Dev CR 5 Begin
8896 BEGIN
8897 SELECT task_id
8898 INTO l_task_id
8899 FROM pa_task_assignments_v
8900 WHERE resource_list_member_id = l_res_list_memb_id_tbl(i)
8901 AND project_id = p_project_id ;
8902 EXCEPTION
8903 WHEN NO_DATA_FOUND THEN
8904 NULL;
8905 WHEN OTHERS THEN
8906 NULL;
8907 END;
8908 -- FPM Dev CR 5 End*/
8909
8910 --bug 3860575 end
8911
8912 -- FPM Dev CR 5
8913 IF upper(l_resource_class_code) = 'PEOPLE' AND l_rate_override_to_organz_id IS NULL AND l_person_id is NOT NULL THEN
8914 --l_rate_override_to_organz_id := l_nlr_organization_id;
8915 l_rate_override_to_organz_id := null; --bug 3901289
8916 END IF;
8917
8918 /* Calling the Api to get the Burden/Raw Rate */
8919 --bug# 3801523 moved this begin below.
8920 --Begin
8921
8922 --maansari6/14 bug 3686920
8923 -- amksingh
8924 -- 3686920 : using l_use_planning_rates_flag to call the API GET_PLAN_VERSION_DTLS
8925 -- also when l_use_planning_rates_flag is N then we should be using ACTUAL RATES so passing ACTUAL_RATES
8926 -- to costing API
8927 -- We should not be calling Get_Default_Sch_Ids as it will not retun actual values
8928 -- If at all we need this, then we should get this value from pa_tasks and then from pa_projects
8929 --bug 3733606 moved from below
8930
8931 BEGIN
8932 l_plan_version_id := Pa_Fp_wp_gen_amt_utils.get_wp_version_id(
8933 p_project_id => p_project_id,
8934 p_plan_type_id => -1,
8935 p_proj_str_ver_id => p_structure_version_id);
8936
8937 -- Selecting res_class_raw_cost_sch_id here as it is not available in FP rec type
8938 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
8939 FROM pa_proj_fp_options
8940 WHERE fin_plan_version_id = l_plan_version_id
8941 AND project_id = p_project_id;
8942
8943 EXCEPTION
8944 WHEN OTHERS THEN
8945 fnd_msg_pub.add_exc_msg(p_pkg_name => 'pa_progress_utils',
8946 p_procedure_name => 'Get_Res_Rate_Burden_Multiplier',
8947 p_error_text => SUBSTRB('Pa_Fp_wp_gen_amt_utils.get_wp_version_id:'||SQLERRM,1,120));
8948 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);
8949 raise fnd_api.g_exc_error;
8950 END;
8951
8952 -- Bug 3691289 , rates from pa_proj_fp_options shd be selected always as we need them further even in actual rate mode
8953 -- IF p_calling_mode = 'PLAN_RATES'
8954 -- THEN
8955 -- Bug 4233420 : Moved the logic of getting rates from budget_lines up in the code here.
8956 IF l_etc_flag = 'Y' THEN
8957 IF g1_debug_mode = 'Y' THEN
8958 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'l_etc_flag is Y' , x_Log_Level=> 3);
8959 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);
8960 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);
8961 END IF;
8962
8963 OPEN get_override_rate(l_plan_version_id, l_resource_assignment_id);
8964 FETCH get_override_rate INTO l_raw_override_rate, l_burden_override_rate;
8965 CLOSE get_override_rate;
8966
8967 --- IPM changes
8968 OPEN get_asgn_override_rate(l_plan_version_id, l_resource_assignment_id);
8969 FETCH get_asgn_override_rate INTO l_asgn_raw_override_rate, l_asgn_burden_override_rate;
8970 CLOSE get_asgn_override_rate;
8971
8972 IF g1_debug_mode = 'Y' THEN
8973 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);
8974 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);
8975 END IF;
8976
8977 --- IPM changes
8978 IF l_raw_override_rate IS NOT NULL THEN
8979 x_resource_raw_rate := l_raw_override_rate;
8980 ELSIF l_asgn_raw_override_rate IS NOT NULL THEN
8981 x_resource_raw_rate := l_asgn_raw_override_rate;
8982 END IF;
8983
8984 IF l_burden_override_rate IS NOT NULL THEN
8985 x_resource_burden_rate := l_burden_override_rate;
8986 x_burden_multiplier := (l_burden_override_rate - 1); -- only for non rate based assignments.
8987 ELSIF l_asgn_burden_override_rate IS NOT NULL THEN
8988 x_resource_burden_rate := l_asgn_burden_override_rate;
8989 x_burden_multiplier := (l_asgn_burden_override_rate -1);---only for non rate based assignments.
8990 END IF;
8991
8992 x_resource_curr_code := p_currency_code;
8993
8994 -- NOTE: The reason that we are setting: x_burden_multiplier := (l_burden_multiplier - 1) and passing this
8995 -- value to the calling API, when a non-rate based resource has an override burden rate is because of the
8996 -- following:
8997 -- The calling API uses the formula: etc burden cost = etc raw cost * (x_burden_multiplier + 1) to calculate
8998 -- the value of etc burden cost.
8999 -- For a non-rate based resource without any override burden rate the burden multiplier is derived from the
9000 -- burden schedule and the above formula holds good.
9001 -- However, when a non-rate based resource has an override burden rate we should calculate the the value of
9002 -- etc burden cost as: etc burden cost = etc raw cost * override burden rate. Hence, we pass back:
9003 -- x_burden_multiplier = (override burden rate - 1) through our above code to the calling API so that the
9004 -- formula: etc raw cost * (x_burden_multiplier + 1) in the calling API equates to:
9005 -- etc raw cost * override burden rate.
9006 END IF; -- l_etc_flag = 'Y'
9007
9008 IF l_rate_based_flag = 'Y' THEN
9009 IF x_resource_raw_rate IS NOT NULL AND x_resource_burden_rate IS NOT NULL THEN
9010 return;
9011 END IF;
9012 ELSE
9013 IF x_burden_multiplier IS NOT NULL THEN
9014 return;
9015 END IF;
9016 END IF;
9017
9018
9019 BEGIN
9020 -- IF l_use_planning_rates_flag = 'Y' THEN
9021 PA_FP_GEN_AMOUNT_UTILS.GET_PLAN_VERSION_DTLS(
9022 P_PROJECT_ID => p_project_id,
9023 P_BUDGET_VERSION_ID => l_plan_version_id,
9024 X_FP_COLS_REC => l_fp_cols_rec,
9025 X_RETURN_STATUS => l_return_status,
9026 X_MSG_COUNT => l_msg_count,
9027 X_MSG_DATA => l_msg_data);
9028
9029
9030 l_plan_cost_burden_sch_id := l_fp_cols_rec.X_BURDEN_RATE_SCH_ID;
9031 l_plan_cost_job_rate_sch_id := l_fp_cols_rec.X_COST_JOB_RATE_SCH_ID;
9032 l_plan_cost_emp_rate_sch_id := l_fp_cols_rec.X_COST_EMP_RATE_SCH_ID;
9033 l_plan_cost_nlr_rate_sch_id := l_fp_cols_rec.X_CNON_LABOR_RES_RATE_SCH_ID;
9034 -- l_pl_res_class_raw_cost_sch_id := l_fp_cols_rec.x_fp_res_cl_raw_cost_sch_id;
9035 l_pl_cost_res_class_rate_sc_id := l_fp_cols_rec.X_cost_res_class_rate_sch_id;
9036
9037 IF l_use_planning_rates_flag = 'Y' THEN
9038 l_cost_res_class_rate_sch_id := l_pl_cost_res_class_rate_sc_id;
9039 ELSE
9040 l_cost_res_class_rate_sch_id := l_pl_res_class_raw_cost_sch_id;
9041 END IF;
9042
9043 EXCEPTION when others then
9044 fnd_msg_pub.add_exc_msg(p_pkg_name => 'pa_progress_utils',
9045 p_procedure_name => 'Get_Res_Rate_Burden_Multiplier',
9046 p_error_text => SUBSTRB('PA_FP_GEN_AMOUNT_UTILS.GET_PLAN_VERSION_DTLS:'||SQLERRM,1,120));
9047 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);
9048 raise fnd_api.g_exc_error;
9049 END;
9050
9051 IF l_return_status <> 'S' AND l_msg_data IS NOT NULL THEN
9052 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9053 p_msg_name => l_msg_data);
9054 x_msg_data := l_msg_data;
9055 x_return_status := 'E';
9056 x_msg_count := fnd_msg_pub.count_msg;
9057 RAISE FND_API.G_EXC_ERROR;
9058 END IF;
9059
9060
9061 -- END IF; --<< p_calling_modfe = 'PLAN_RATES'
9062
9063
9064 IF NVL(l_use_planning_rates_flag,'N') = 'N' THEN
9065 l_calling_mode := 'ACTUAL_RATES';
9066 ELSE
9067 l_calling_mode := p_calling_mode;
9068 END IF;
9069
9070 -- Bug 3691289 : Added below condition so that planning rates are not passed to the API if mode is actual rates
9071 IF l_calling_mode = 'ACTUAL_RATES' THEN
9072 l_plan_cost_burden_sch_id := null;
9073 l_plan_cost_job_rate_sch_id := null;
9074 l_plan_cost_emp_rate_sch_id := null;
9075 l_plan_cost_nlr_rate_sch_id := null;
9076 END IF;
9077
9078 --bug# 3801523 If cost based assignments then call Get_burden_sch_details Satish start
9079
9080 IF g1_debug_mode = 'Y' THEN
9081 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);
9082 END IF;
9083
9084 IF l_rate_based_flag = 'Y' THEN
9085 --maansari6/14
9086 IF g1_debug_mode = 'Y' THEN
9087 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);
9088 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);
9089 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);
9090 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);
9091 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);
9092 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);
9093 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_Exp_item_date='||sysdate, x_Log_Level=> 3);
9094 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); --
9095 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);
9096 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);
9097 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);
9098 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_Quantity='||1, x_Log_Level=> 3);
9099 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);
9100 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);
9101 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);
9102 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);
9103 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);
9104 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);
9105 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);
9106 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);
9107 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);
9108 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);
9109 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);
9110 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);
9111 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);
9112 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);
9113 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);
9114 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);
9115 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);
9116 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);
9117 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);
9118 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);
9119 END IF;
9120
9121 BEGIN
9122
9123 PA_COST1.Get_Plan_Actual_Cost_Rates
9124 (p_calling_mode =>l_calling_mode --'ACTUAL_RATES' Bug 3627315
9125 ,p_project_type =>l_project_type
9126 ,p_project_id =>p_project_id
9127 --,p_task_id => null ---- TILL THE ISSUE IS FIXED l_task_id
9128 ,p_task_id => l_task_id --bug 3860575
9129 ,p_top_task_id =>l_top_task_id
9130 ,p_Exp_item_date => p_as_of_date --bug 3901289
9131 ,p_expenditure_type =>l_expenditure_type
9132 ,p_expenditure_OU =>l_expenditure_OU
9133 ,p_project_OU =>l_org_id
9134 ,p_Quantity =>1
9135 ,p_resource_class =>l_resource_class_code /* resource_class_code for Resource Class */
9136 ,p_person_id =>l_person_id
9137 ,p_non_labor_resource =>l_non_labor_resource
9138 ,p_NLR_organization_id =>l_nlr_organization_id
9139 ,p_override_organization_id =>l_rate_override_to_organz_id
9140 ,p_incurred_by_organization_id =>l_rate_incurred_by_organz_id
9141 ,p_inventory_item_id =>l_inventory_item_id
9142 ,p_BOM_resource_id =>l_BOM_resource_id
9143 ,p_override_trxn_curr_code =>l_txn_currency_code_override -- P_override_txn_currency_code Bug 3632946
9144 ,p_override_burden_cost_rate =>l_burden_override_multiplier
9145 ,p_override_trxn_cost_rate =>l_cost_override_rate
9146 ,p_override_trxn_raw_cost =>l_raw_cost --P_dummy_override_raw_cost Bug 3632946
9147 ,p_override_trxn_burden_cost =>l_burden_cost
9148 ,p_mfc_cost_type_id =>l_mfc_cost_type_id
9149 ,p_mfc_cost_source =>l_mfc_cost_source
9150 ,p_item_category_id =>l_item_category_id
9151 ,p_job_id =>l_job_id
9152 --bug 3686920
9153 --maansari6/14 ,p_plan_cost_burden_sch_id => l_plan_cost_burden_sch_id -- Bug 3632946 : Added this parameter
9154 --maansari6/14
9155 ,p_plan_cost_burden_sch_id => l_plan_cost_burden_sch_id
9156 ,p_plan_cost_job_rate_sch_id => l_plan_cost_job_rate_sch_id
9157 ,p_plan_cost_emp_rate_sch_id => l_plan_cost_emp_rate_sch_id
9158 ,p_plan_cost_nlr_rate_sch_id => l_plan_cost_nlr_rate_sch_id
9159 --maansari6/14 bug 3686920
9160 ,x_trxn_curr_code =>l_trxn_curr_code
9161 ,x_trxn_raw_cost =>l_txn_raw_cost
9162 ,x_trxn_raw_cost_rate =>l_txn_cost_rate
9163 ,x_trxn_burden_cost =>l_txn_burden_cost
9164 ,x_trxn_burden_cost_rate =>l_txn_burden_cost_rate
9165 ,x_burden_multiplier =>l_burden_multiplier
9166 ,x_cost_ind_compiled_set_id =>l_cost_ind_compiled_set_id
9167 ,x_raw_cost_rejection_code =>l_raw_cost_rejection_code
9168 ,x_burden_cost_rejection_code =>l_burden_cost_rejection_code
9169 ,x_return_status =>l_return_status
9170 ,x_error_msg_code =>l_msg_data );
9171
9172 IF g1_debug_mode = 'Y' THEN
9173 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);
9174 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);
9175 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);
9176 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);
9177 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);
9178 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);
9179 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);
9180 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);
9181 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);
9182 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);
9183 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);
9184 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);
9185 END IF;
9186 EXCEPTION
9187 WHEN OTHERS THEN
9188
9189 -- FPM Dev CR 5 : If the above API does not retun then populate it with 0
9190 x_resource_raw_rate := 0;
9191 x_resource_burden_rate := 0;
9192 x_resource_curr_code := l_trxn_curr_code;
9193 -- X_dummy_burden_cost := 0;
9194 X_burden_multiplier := 0;
9195 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);
9196 END;
9197
9198 --bug 3733606
9199 IF l_return_status <> 'S' THEN
9200 -- Bug 3691289 : l_cost_res_class_rate_sch_id is derived above
9201 -- IF l_resource_class_code <> 'PEOPLE'
9202 -- THEN
9203 -- l_cost_res_class_rate_sch_id := l_plan_cost_nlr_rate_sch_id;
9204 -- ELSE
9205 -- IF l_plan_cost_emp_rate_sch_id IS NOT NULL
9206 -- THEN
9207 -- l_cost_res_class_rate_sch_id := l_plan_cost_emp_rate_sch_id;
9208 -- ELSE
9209 -- l_cost_res_class_rate_sch_id := l_plan_cost_job_rate_sch_id;
9210 -- END IF;
9211 -- END IF;
9212
9213 BEGIN
9214 IF g1_debug_mode = 'Y' THEN
9215 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);
9216 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);
9217 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);
9218 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);
9219 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);
9220 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier', x_Msg => 'p_rate_based_flag='||'Y', x_Log_Level=> 3);
9221 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);
9222 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);
9223 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);
9224 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);
9225 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);
9226 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);
9227 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);
9228 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);
9229 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);
9230 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);
9231 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);
9232 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);
9233 END IF;
9234
9235 PA_PLAN_REVENUE.Get_plan_res_class_rates (
9236 p_project_type => l_project_type
9237 ,p_project_id => p_project_id
9238 --,p_task_id => null
9239 ,p_task_id => l_task_id --bug 3860575
9240 ,p_resource_class => l_resource_class_code
9241 ,p_use_planning_rates_flag => l_use_planning_rates_flag
9242 ,p_rate_based_flag => 'Y'
9243 ,p_uom => l_unit_of_measure
9244 ,p_project_organz_id => l_carrying_out_org_id
9245 ,p_cost_res_class_rate_sch_id => l_cost_res_class_rate_sch_id
9246 ,p_plan_burden_cost_sch_id => l_plan_cost_burden_sch_id
9247 ,p_quantity => 1
9248 ,p_item_date => p_as_of_date --SYSDATE
9249 --bug 3954250
9250 ,p_schedule_type => 'COST'
9251 ,p_project_org_id => l_org_id
9252 ,p_incurred_by_organz_id => l_rate_incurred_by_organz_id
9253 ,p_override_to_organz_id => l_rate_override_to_organz_id
9254 ,p_expenditure_org_id => l_expenditure_OU
9255 ,p_nlr_organization_id => l_nlr_organization_id
9256 ,p_txn_currency_code => p_currency_code
9257 ,p_expenditure_type => l_expenditure_type
9258 ,p_raw_cost => l_raw_cost
9259 ,p_system_linkage => null
9260 ,p_person_id => l_person_id -- Bug 3861970, 3879461
9261 ,p_job_id => l_job_id -- Bug 3861970, 3879461
9262 ,x_bill_rate => l_bill_rate
9263 ,x_cost_rate => l_txn_cost_rate
9264 ,x_burden_cost_rate => l_txn_burden_cost_rate
9265 ,x_burden_multiplier => l_burden_multiplier
9266 -- ,x_raw_cost => l_raw_cost * commented for Bug: 4537865
9267 ,x_raw_cost => l_new_raw_cost --added for Bug 4537865
9268 ,x_burden_cost => l_burden_cost
9269 ,x_raw_revenue => l_raw_revenue
9270 ,x_bill_markup_percentage => l_bill_markup_percentage
9271 ,x_cost_markup_percentage => l_cost_markup_percentage
9272 ,x_cost_txn_curr_code => l_trxn_curr_code
9273 ,x_rev_txn_curr_code => l_rev_txn_curr_code
9274 ,x_raw_cost_rejection_code => l_raw_cost_rejection_code
9275 ,x_burden_cost_rejection_code => l_burden_cost_rejection_code
9276 ,x_revenue_rejection_code => l_revenue_rejection_code
9277 ,x_cost_ind_compiled_set_id => l_cost_ind_compiled_set_id
9278 ,x_return_status => l_return_status
9279 ,x_msg_count => l_msg_count
9280 ,x_msg_data => l_msg_data
9281 );
9282 --added for Bug 4537865
9283 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
9284 l_raw_cost := l_new_raw_cost;
9285 END IF;
9286 --added for Bug 4537865
9287 IF g1_debug_mode = 'Y' THEN
9288 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);
9289 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);
9290 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);
9291 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);
9292 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);
9293 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);
9294 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);
9295 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);
9296 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);
9297 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);
9298 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);
9299 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);
9300 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);
9301 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);
9302 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);
9303 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);
9304 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);
9305 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);
9306 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);
9307 END IF;
9308 EXCEPTION
9309 WHEN OTHERS THEN
9310 fnd_msg_pub.add_exc_msg(p_pkg_name => 'pa_progress_utils',
9311 p_procedure_name => 'Get_Res_Rate_Burden_Multiplier',
9312 p_error_text => SUBSTRB('PA_PLAN_REVENUE.Get_plan_res_class_rates:'||SQLERRM,1,120));
9313 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);
9314 raise fnd_api.g_exc_error;
9315 END;
9316 END IF; --< l_return_status <> 'S'>
9317 --bug 3733606
9318
9319 IF g1_debug_mode = 'Y' THEN
9320 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);
9321 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);
9322 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);
9323 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);
9324 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);
9325 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);
9326 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);
9327 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);
9328 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);
9329 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);
9330 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);
9331 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);
9332 END IF;
9333
9334 x_resource_raw_rate := nvl(l_txn_cost_rate,0);
9335 x_resource_burden_rate := nvl(l_txn_burden_cost_rate,0);
9336 x_resource_curr_code := l_trxn_curr_code;
9337 --X_dummy_burden_cost := nvl(l_txn_burden_cost,0); Bug 3632946
9338 X_burden_multiplier := nvl(l_burden_multiplier,0);
9339
9340 -- FPM Dev CR 8 : Added error stack population
9341 -- It is subjected to change if values are coming from lookups.
9342 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.
9343 THEN
9344 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9345 p_msg_name => l_raw_cost_rejection_code);
9346 x_msg_data := l_raw_cost_rejection_code;
9347 x_return_status := 'E';
9348 x_msg_count := fnd_msg_pub.count_msg;
9349 RAISE FND_API.G_EXC_ERROR;
9350 END IF;
9351
9352 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.
9353 THEN
9354 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9355 p_msg_name => l_burden_cost_rejection_code);
9356 x_msg_data := l_burden_cost_rejection_code;
9357 x_return_status := 'E';
9358 x_msg_count := fnd_msg_pub.count_msg;
9359 RAISE FND_API.G_EXC_ERROR;
9360 END IF;
9361
9362 ELSE -- l_rate_based_flag = 'N' bug# 3801523
9363 IF g1_debug_mode = 'Y' THEN
9364 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);
9365 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);
9366 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);
9367 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);
9368 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);
9369 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);
9370 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);
9371 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);
9372 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);
9373 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);
9374 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);
9375 END IF;
9376
9377 pa_cost1.Get_burden_sch_details
9378 (
9379 p_calling_mode =>l_calling_mode
9380 ,p_exp_item_id => NULL
9381 ,p_trxn_type => NULL
9382 ,p_project_type => l_project_type
9383 ,p_project_id => p_project_id
9384 --,p_task_id => null
9385 ,p_task_id => l_task_id --bug 3860575
9386 -- Bug 3837292 ,p_exp_organization_id => l_expenditure_OU Bug 3837292
9387 ,p_exp_organization_id => NVL(l_rate_override_to_organz_id,NVl(l_rate_incurred_by_organz_id,l_nlr_organization_id))
9388 ,p_expenditure_type => l_expenditure_type
9389 ,p_schedule_type => 'COST'
9390 ,p_exp_item_date => p_as_of_date --bug 3901289
9391 ,p_trxn_curr_code => p_currency_code
9392 ,p_burden_schedule_id => l_plan_cost_burden_sch_id
9393 ,x_schedule_id => l_burd_sch_id
9394 ,x_sch_revision_id => l_burd_sch_rev_id
9395 ,x_sch_fixed_date => l_burd_sch_fixed_date
9396 ,x_cost_base => l_burd_sch_cost_base
9397 ,x_cost_plus_structure => l_burd_sch_cp_structure
9398 ,x_compiled_set_id => l_cost_ind_compiled_set_id
9399 ,x_burden_multiplier => l_burden_multiplier
9400 ,x_return_status => l_return_status
9401 ,x_error_msg_code => l_msg_data
9402 );
9403
9404 IF g1_debug_mode = 'Y' THEN
9405 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);
9406 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);
9407 END IF;
9408 X_burden_multiplier := nvl(l_burden_multiplier,0);
9409
9410 -- Begin fix for Bug # 4065674.
9411 -- For non-rate based resources also we need to use the override burden rate to convert the etc raw cost to
9412 -- etc burden cost. Hence we replace the default burden multiplier obtained from the burden schedule
9413 -- with the override burden rate.
9414
9415
9416 -- End fix for Bug # 4065674.
9417
9418
9419 END IF; -- l_rate_based_flag = 'Y'
9420 --bug# 3801523 Satish end.
9421
9422 --maansari6/5
9423 IF l_return_status <> 'S' AND l_msg_data IS NOT NULL
9424 THEN
9425 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9426 p_msg_name => l_msg_data);
9427 x_msg_data := l_msg_data;
9428 x_return_status := 'E';
9429 x_msg_count := fnd_msg_pub.count_msg;
9430 RAISE FND_API.G_EXC_ERROR;
9431 END IF;
9432 --maansari6/5
9433 -- END LOOP; Bug 3965584 : Reduced the scope of FOR LOOP
9434 -- END IF; ---------------------------------------------------------------------------}
9435 x_return_status := l_return_status;
9436 x_msg_count := fnd_msg_pub.count_msg; -- FPM Dev CR 8
9437
9438 EXCEPTION
9439 -- FPM Dev CR 5
9440 WHEN FND_API.G_EXC_ERROR THEN
9441 x_return_status := FND_API.G_RET_STS_ERROR;
9442 x_msg_count := FND_MSG_PUB.Count_Msg;
9443 If x_msg_count = 1 THEN
9444 pa_interface_utils_pub.get_messages
9445 (p_encoded => FND_API.G_TRUE,
9446 p_msg_index => 1,
9447 p_msg_count => x_msg_count,
9448 p_msg_data => x_msg_data,
9449 -- p_data => x_msg_data, * commented for Bug: 4537865
9450 p_data => l_new_msg_data, --added for Bug: 4537865
9451 p_msg_index_out => l_msg_index_out );
9452 --added for Bug: 4537865
9453 x_msg_data := l_new_msg_data;
9454 --added for Bug: 4537865
9455 End If;
9456
9457 -- 4537865
9458 x_resource_curr_code := NULL ;
9459 x_resource_raw_rate := NULL ;
9460 x_resource_burden_rate := NULL ;
9461 X_burden_multiplier := NULL ;
9462
9463 WHEN l_insufficient_paramters THEN
9464 PA_UTILS.add_message('PA','PA_PROG_INSUFFICIENT_PARA',
9465 'RES_NAME', l_resource_alias);
9466 x_return_status := FND_API.G_RET_STS_ERROR;
9467 x_msg_data := 'PA_PROG_INSUFFICIENT_PARA';
9468 x_msg_count := FND_MSG_PUB.Count_Msg;
9469 If x_msg_count = 1 THEN
9470 pa_interface_utils_pub.get_messages
9471 (p_encoded => FND_API.G_TRUE,
9472 p_msg_index => 1,
9473 p_msg_count => x_msg_count,
9474 p_msg_data => x_msg_data,
9475 -- p_data => x_msg_data, * commented for Bug: 4537865
9476 p_data => l_new_msg_data, -- added for Bug: 4537865
9477 p_msg_index_out => l_msg_index_out );
9478 --added for Bug: 4537865
9479 x_msg_data := l_new_msg_data;
9480 --added for Bug: 4537865
9481 End If;
9482
9483 -- 4537865
9484 x_resource_curr_code := NULL ;
9485 x_resource_raw_rate := NULL ;
9486 x_resource_burden_rate := NULL ;
9487 X_burden_multiplier := NULL ;
9488
9489 WHEN OTHERS THEN
9490 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9491 x_msg_count := 1;
9492 x_msg_data := SUBSTR(SQLERRM,1,120);
9493 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_PROGRESS_UTILS',
9494 p_procedure_name => 'Get_Res_Rate_Burden_Multiplier');
9495 If x_msg_count = 1 THEN
9496 pa_interface_utils_pub.get_messages
9497 (p_encoded => FND_API.G_TRUE,
9498 p_msg_index => 1,
9499 p_msg_count => x_msg_count,
9500 p_msg_data => x_msg_data,
9501 -- p_data => x_msg_data, * commented for Bug: 4537865
9502 p_data => l_new_msg_data, -- added for Bug: 4537865
9503 p_msg_index_out => l_msg_index_out );
9504 --added for Bug: 4537865
9505 x_msg_data := l_new_msg_data;
9506 --added for Bug: 4537865
9507 End If;
9508
9509 -- 4537865
9510 x_resource_curr_code := NULL ;
9511 x_resource_raw_rate := NULL ;
9512 x_resource_burden_rate := NULL ;
9513 X_burden_multiplier := NULL ;
9514
9515 RAISE;
9516
9517 end Get_Res_Rate_Burden_Multiplier;
9518 -- Progress Management Changes. Bug # 3621404.
9519
9520 function derive_etc_values(
9521 p_planned_value NUMBER := null
9522 ,p_ppl_act_value NUMBER := null
9523 ,p_eqpmt_act_value NUMBER := null
9524 ,p_oth_act_value NUMBER := null
9525 ,p_subprj_ppl_act_value NUMBER := null
9526 ,p_subprj_eqpmt_act_value NUMBER := null
9527 ,p_subprj_oth_act_value NUMBER := null
9528 ,p_oth_quantity_to_date NUMBER := null
9529 )return number
9530 is
9531 l_derived_etc_value NUMBER;
9532 begin
9533
9534 l_derived_etc_value := nvl(p_planned_value,0) - (nvl(p_ppl_act_value,0)+nvl(p_eqpmt_act_value,0)
9535 +nvl(p_oth_act_value,0)+nvl(p_subprj_ppl_act_value,0)
9536 +nvl(p_subprj_eqpmt_act_value,0)+nvl(p_subprj_oth_act_value,0)
9537 +nvl(p_oth_quantity_to_date,0));
9538
9539 if (l_derived_etc_value < 0) then
9540 l_derived_etc_value := 0;
9541 end if;
9542
9543 return(l_derived_etc_value);
9544
9545 end derive_etc_values;
9546
9547 function published_dlv_prog_exists
9548 (
9549 p_project_id PA_PROJECTS_ALL.PROJECT_ID%TYPE,
9550 p_dlv_proj_elt_id PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE
9551 )return VARCHAR2
9552 IS
9553 l_result VARCHAR2(1) ;
9554
9555 CURSOR published_rec_exists
9556 IS
9557 SELECT 'Y'
9558 FROM PA_PERCENT_COMPLETES
9559 WHERE object_id = p_dlv_proj_elt_id
9560 AND object_type = 'PA_DELIVERABLES'
9561 AND project_id = p_project_id
9562 AND structure_type = 'WORKPLAN'
9563 AND published_flag = 'Y';
9564
9565 BEGIN
9566
9567 OPEN published_rec_exists ;
9568 FETCH published_rec_exists INTO l_result ;
9569
9570 IF published_rec_exists%NOTFOUND THEN
9571 l_result := 'N' ;
9572 END IF;
9573
9574 CLOSE published_rec_exists ;
9575
9576 return l_result ;
9577
9578 END published_dlv_prog_exists ;
9579
9580
9581 --Added for performance improvements in the view pa_prog_act_by_period_v
9582 --can be used anywhere else too.
9583 procedure set_global_str_ver_id(p_structure_version_id NUMBER)
9584 IS
9585 BEGIN
9586 PA_PROGRESS_UTILS.g_structure_version_id := p_structure_version_id;
9587 END set_global_str_ver_id;
9588
9589 function get_global_str_ver_id RETURN NUMBER IS
9590 BEGIN
9591 return PA_PROGRESS_UTILS.g_structure_version_id;
9592 END get_global_str_ver_id;
9593
9594 procedure set_global_time_phase_period(p_period_name VARCHAR2)
9595 IS
9596 BEGIN
9597 PA_PROGRESS_UTILS.g_time_phase_period_name := p_period_name;
9598 END set_global_time_phase_period;
9599
9600 function get_global_time_phase_period RETURN VARCHAR2 IS
9601 BEGIN
9602 return PA_PROGRESS_UTILS.g_time_phase_period_name;
9603 END get_global_time_phase_period;
9604
9605
9606
9607 -- Added following function for bug 3709439
9608 FUNCTION Percent_Spent_Value
9609 (
9610 p_actual_value NUMBER
9611 ,p_planned_value NUMBER
9612 ) RETURN NUMBER
9613
9614 IS
9615 l_percent_spent_value NUMBER := 0;
9616
9617 BEGIN
9618
9619 -- 5726773
9620 -- IF NVL(p_actual_value,0) <= 0 THEN
9621 -- l_percent_spent_value := 0;
9622 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
9623 l_percent_spent_value := 0;
9624 ELSIF NVL(p_planned_value,0) = 0 THEN
9625 l_percent_spent_value := 100;
9626 ELSE
9627 l_percent_spent_value := ( (p_actual_value/p_planned_value) *100 );
9628 END IF;
9629
9630 --bug 3824042
9631 --RETURN TRUNC(l_percent_spent_value,2) ;
9632 RETURN ROUND(l_percent_spent_value,2) ;
9633
9634 END Percent_Spent_Value ;
9635
9636
9637 -- Added following function for bug 3709439
9638 FUNCTION Percent_Complete_Value
9639 (
9640 p_actual_value NUMBER
9641 ,p_etc_value NUMBER
9642 ) RETURN NUMBER
9643
9644 IS
9645 l_percent_complete_value NUMBER := 0;
9646 l_act_etc NUMBER := NVL(p_actual_value,0) + NVL(p_etc_value,0) ;
9647
9648 BEGIN
9649
9650 ---5726773
9651 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
9652 l_percent_complete_value := 0;
9653 -- ELSIF NVL(p_etc_value,0) = 0 THEN
9654 -- l_percent_complete_value := 100;
9655 ELSE
9656 IF (l_act_etc = 0 ) THEN
9657 l_act_etc := 1;
9658 END IF;
9659 l_percent_complete_value := ( ( p_actual_value/l_act_etc ) * 100 );
9660 if (l_percent_complete_value > 100) then
9661 l_percent_complete_value := 100;
9662 elsif (l_percent_complete_value < 0) then
9663 l_percent_complete_value := 0;
9664 end if;
9665 END IF;
9666
9667 --bug 3824042
9668 --RETURN TRUNC(l_percent_complete_value,2) ;
9669 RETURN ROUND(l_percent_complete_value,2) ;
9670
9671 END Percent_Complete_Value ;
9672
9673 -- Bug 3784324 : Added procedure convert_effort_to_cost
9674 PROCEDURE convert_effort_to_cost
9675 ( p_resource_list_mem_id IN NUMBER
9676 ,p_project_id IN NUMBER
9677 ,p_structure_version_id IN NUMBER
9678 ,p_txn_currency_code IN VARCHAR
9679 ,p_planned_effort IN NUMBER
9680 ,p_planned_rawcost_tc IN NUMBER
9681 ,p_act_effort_this_period IN NUMBER
9682 ,p_act_effort IN NUMBER
9683 ,p_etc_effort IN NUMBER
9684 ,p_rate_based_flag IN VARCHAR := 'Y'
9685 ,p_act_rawcost_tc IN NUMBER
9686 ,x_act_rawcost_tc_this_period IN OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9687 ,x_etc_rawcost_tc IN OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9688 ,x_prcnt_comp_effort OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9689 ,x_prcnt_spent_effort OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9690 ,x_eac_effort OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9691 ,x_prcnt_comp_rawcost_tc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9692 ,x_prcnt_spent_rawcost_tc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9693 ,x_eac_rawcost_tc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9694 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9695 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9696 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9697 )
9698 IS
9699
9700 l_act_rawcost_tc NUMBER := null;
9701 l_etc_rawcost_tc NUMBER := null;
9702 l_prcnt_comp_effort NUMBER := null;
9703 l_prcnt_spent_effort NUMBER := null;
9704 l_eac_effort NUMBER := null;
9705 l_prcnt_comp_rawcost_tc NUMBER := null;
9706 l_prcnt_spent_rawcost_tc NUMBER := null;
9707 l_eac_rawcost_tc NUMBER := null;
9708
9709 --added Satish
9710 X_ACT_RAWCOST_TC NUMBER;
9711 l_actual_effort_to_date NUMBER := null;
9712 l_actual_rawcost_to_date NUMBER := null;
9713 l_act_rawcost_tc_this_period NUMBER := null;
9714
9715 l_plan_res_cur_code VARCHAR2(30) := null;
9716 l_plan_res_raw_rate NUMBER := null;
9717 l_plan_res_burden_rate NUMBER := null;
9718 l_plan_burden_multiplier NUMBER := null;
9719 l_return_status VARCHAR2(1) := null;
9720 l_msg_count NUMBER := null;
9721 l_msg_data VARCHAR2(250) := null;
9722 g1_debug_mode VARCHAR2(1) ;
9723
9724
9725
9726
9727 BEGIN
9728
9729 g1_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N');
9730 IF g1_debug_mode = 'Y' THEN
9731 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);
9732 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'p_project_id='||p_project_id, x_Log_Level=> 3);
9733 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);
9734 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);
9735 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'p_planned_effort='||p_planned_effort, x_Log_Level=> 3);
9736 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);
9737 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);
9738 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'p_act_effort='||p_act_effort, x_Log_Level=> 3);
9739 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'p_etc_effort='||p_etc_effort, x_Log_Level=> 3);
9740 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);
9741 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);
9742 END IF;
9743
9744 x_return_status := fnd_api.g_ret_sts_success ; -- 4537865
9745
9746 If (p_rate_based_flag = 'N') then
9747 -- If (p_rate_based_flag = 'N') the Rawcost values are inputs.
9748 l_etc_rawcost_tc := nvl(x_etc_rawcost_tc,0);
9749 l_act_rawcost_tc := nvl(p_act_rawcost_tc,0);
9750 l_act_rawcost_tc_this_period := nvl(x_act_rawcost_tc_this_period, 0);
9751
9752 -- Calculate the EAC Rawcost, Percent Complete Rawcost and Percent Spent Rawcost
9753 -- using the input Rawcost values.
9754 l_actual_rawcost_to_date := nvl(l_act_rawcost_tc,0) + nvl(l_act_rawcost_tc_this_period,0);
9755 l_eac_rawcost_tc := (nvl(l_actual_rawcost_to_date,0) + nvl(l_etc_rawcost_tc,0));
9756 l_prcnt_comp_rawcost_tc := PA_PROGRESS_UTILS.Percent_Complete_Value(l_actual_rawcost_to_date,l_etc_rawcost_tc);
9757 l_prcnt_spent_rawcost_tc := PA_PROGRESS_UTILS.Percent_Spent_Value(l_actual_rawcost_to_date,p_planned_rawcost_tc);
9758 else
9759 -- ETC effort to ETC Rawcost Conversion.
9760 l_plan_res_cur_code := null;
9761 l_plan_res_raw_rate := null;
9762 l_plan_res_burden_rate := null;
9763 l_plan_burden_multiplier := null;
9764 l_return_status := null;
9765 l_msg_count := null;
9766 l_msg_data := null;
9767
9768 PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier(
9769 P_res_list_mem_id => p_resource_list_mem_id
9770 ,P_project_id => p_project_id
9771 ,p_structure_version_id => p_structure_version_id
9772 ,p_currency_code => p_txn_currency_code
9773 ,p_calling_mode => 'PLAN_RATES'
9774 ,x_resource_curr_code => l_plan_res_cur_code
9775 ,x_resource_raw_rate => l_plan_res_raw_rate
9776 ,x_resource_burden_rate => l_plan_res_burden_rate
9777 ,X_burden_multiplier => l_plan_burden_multiplier
9778 ,x_return_status => l_return_status
9779 ,x_msg_count => l_msg_count
9780 ,x_msg_data => l_msg_data);
9781
9782 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9783 x_return_status := 'E';
9784 RAISE FND_API.G_EXC_ERROR;
9785 END IF;
9786
9787 l_etc_rawcost_tc := (nvl(p_etc_effort,0) * nvl(l_plan_res_raw_rate,0));
9788
9789 IF g1_debug_mode = 'Y' THEN
9790 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);
9791 END IF;
9792
9793
9794 -- ACT Effort to ACT Rawcost Conversion.
9795
9796 l_plan_res_cur_code := null;
9797 l_plan_res_raw_rate := null;
9798 l_plan_res_burden_rate := null;
9799 l_plan_burden_multiplier := null;
9800 l_return_status := null;
9801 l_msg_count := null;
9802 l_msg_data := null;
9803
9804 PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier(
9805 P_res_list_mem_id => p_resource_list_mem_id
9806 ,P_project_id => p_project_id
9807 ,p_structure_version_id => p_structure_version_id
9808 ,p_currency_code => p_txn_currency_code
9809 ,p_calling_mode => 'ACTUAL_RATES'
9810 ,x_resource_curr_code => l_plan_res_cur_code
9811 ,x_resource_raw_rate => l_plan_res_raw_rate
9812 ,x_resource_burden_rate => l_plan_res_burden_rate
9813 ,X_burden_multiplier => l_plan_burden_multiplier
9814 ,x_return_status => l_return_status
9815 ,x_msg_count => l_msg_count
9816 ,x_msg_data => l_msg_data);
9817
9818 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9819 x_return_status := 'E';
9820 RAISE FND_API.G_EXC_ERROR;
9821 END IF;
9822
9823 IF g1_debug_mode = 'Y' THEN
9824 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);
9825 END IF;
9826
9827 IF (p_act_rawcost_tc is NULL)
9828 THEN
9829 l_act_rawcost_tc := (nvl(p_act_effort,0) * nvl(l_plan_res_raw_rate,0));
9830 ELSE
9831 l_act_rawcost_tc := p_act_rawcost_tc;
9832 END IF;
9833
9834
9835 l_act_rawcost_tc_this_period := (nvl(p_act_effort_this_period,0) * nvl(l_plan_res_raw_rate,0)); --added new
9836
9837 -- EAC Effort and EAC Rawcost calculations.
9838
9839 IF g1_debug_mode = 'Y' THEN
9840 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);
9841 END IF;
9842 -- Calculate cumulative values
9843 l_actual_effort_to_date := nvl(p_act_effort,0) + nvl(p_act_effort_this_period,0);
9844 l_actual_rawcost_to_date := nvl(l_act_rawcost_tc,0) + nvl(l_act_rawcost_tc_this_period,0);
9845
9846 l_eac_effort := (nvl(p_etc_effort,0) + l_actual_effort_to_date);
9847 l_eac_rawcost_tc := ( nvl(l_etc_rawcost_tc,0) +l_actual_rawcost_to_date );
9848
9849 IF g1_debug_mode = 'Y' THEN
9850 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.convert_effort_to_cost', x_Msg => 'l_eac_effort='||l_eac_effort, x_Log_Level=> 3);
9851 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);
9852 END IF;
9853
9854 -- Percent Complete Effort and Percent Complete Rawcost calculations.
9855
9856 l_prcnt_comp_effort := PA_PROGRESS_UTILS.Percent_Complete_Value(l_actual_effort_to_date,p_etc_effort);
9857 l_prcnt_comp_rawcost_tc := PA_PROGRESS_UTILS.Percent_Complete_Value(l_actual_rawcost_to_date,l_etc_rawcost_tc);
9858
9859 IF g1_debug_mode = 'Y' THEN
9860 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);
9861 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);
9862 END IF;
9863
9864 -- Percent Spent Effort and Percent Spent Rawcost calculations.
9865
9866 l_prcnt_spent_effort := PA_PROGRESS_UTILS.Percent_Spent_Value(l_actual_effort_to_date,p_planned_effort);
9867 l_prcnt_spent_rawcost_tc := PA_PROGRESS_UTILS.Percent_Spent_Value(l_actual_rawcost_to_date,p_planned_rawcost_tc);
9868
9869 IF g1_debug_mode = 'Y' THEN
9870 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);
9871 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);
9872 END IF;
9873
9874 end if; -- If (p_rate_based_flag = 'N')
9875
9876 x_act_rawcost_tc_this_period := nvl(l_act_rawcost_tc_this_period, 0);
9877 x_etc_rawcost_tc := nvl(l_etc_rawcost_tc,0);
9878 x_prcnt_comp_effort := nvl(l_prcnt_comp_effort,0);
9879 x_prcnt_spent_effort := nvl(l_prcnt_spent_effort,0);
9880 x_eac_effort := nvl(l_eac_effort,0);
9881 x_prcnt_comp_rawcost_tc := nvl(l_prcnt_comp_rawcost_tc,0);
9882 x_prcnt_spent_rawcost_tc := nvl(l_prcnt_spent_rawcost_tc,0);
9883 x_eac_rawcost_tc := nvl(l_eac_rawcost_tc,0);
9884
9885 EXCEPTION
9886 WHEN FND_API.G_EXC_ERROR THEN
9887 x_return_status := FND_API.G_RET_STS_ERROR;
9888 x_msg_count := Fnd_Msg_Pub.count_msg;
9889
9890 -- 4537865
9891 x_act_rawcost_tc_this_period := 0 ;
9892 x_etc_rawcost_tc := 0 ;
9893 x_prcnt_comp_effort := 0 ;
9894 x_prcnt_spent_effort := 0 ;
9895 x_eac_effort := 0 ;
9896 x_prcnt_comp_rawcost_tc := 0 ;
9897 x_prcnt_spent_rawcost_tc := 0 ;
9898 x_eac_rawcost_tc := 0 ;
9899
9900 WHEN OTHERS THEN
9901 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
9902 x_msg_count := 1;
9903 x_msg_data := SUBSTRB(SQLERRM,1,240);
9904
9905 -- 4537865
9906 x_act_rawcost_tc_this_period := 0 ;
9907 x_etc_rawcost_tc := 0 ;
9908 x_prcnt_comp_effort := 0 ;
9909 x_prcnt_spent_effort := 0 ;
9910 x_eac_effort := 0 ;
9911 x_prcnt_comp_rawcost_tc := 0 ;
9912 x_prcnt_spent_rawcost_tc := 0 ;
9913 x_eac_rawcost_tc := 0 ;
9914 RAISE;
9915
9916 END convert_effort_to_cost;
9917 --Added by rtarway for BUG 3815202
9918 FUNCTION get_last_published_perc_comp(
9919 p_project_id NUMBER
9920 ,p_object_id NUMBER
9921 ,p_as_of_date Date
9922 ,p_object_type VARCHAR2
9923 ) RETURN NUMBER
9924 IS
9925 l_last_submitted_perc_comp NUMBER ;
9926 Cursor c_get_last_submitted_perc_comp
9927 is
9928 select ppr.completed_percentage
9929 from pa_progress_rollup ppr
9930 where ppr.project_id = p_project_id
9931 and ppr.object_id = p_object_id
9932 and ppr.structure_type = 'WORKPLAN'
9933 and ppr.structure_version_id is null
9934 and ppr.object_type = p_object_type
9935 and ppr.current_flag <> 'W' -- Bug 3879461
9936 and ppr.as_of_date =
9937 (
9938 select max(ppr2.as_of_date)
9939 from pa_progress_rollup ppr2
9940 where ppr2.project_id = p_project_id
9941 and ppr2.object_id = p_object_id
9942 and ppr2.structure_type = 'WORKPLAN'
9943 and ppr2.structure_version_id is null
9944 and ppr.object_type = p_object_type
9945 and ppr2.as_of_date <= p_as_of_date
9946 and ppr2.current_flag = 'Y'
9947 );
9948
9949 Begin
9950 l_last_submitted_perc_comp := null;
9951 OPEN c_get_last_submitted_perc_comp;
9952 FETCH c_get_last_submitted_perc_comp into l_last_submitted_perc_comp;
9953 CLOSE c_get_last_submitted_perc_comp;
9954
9955 return l_last_submitted_perc_comp;
9956 END get_last_published_perc_comp;
9957 --Added by rtarway for BUG 3815202
9958
9959 /* Bug # 3861344: Created API: return_start_end_date(). */
9960
9961 Function return_start_end_date(
9962 p_scheduled_date DATE := NULL
9963 ,p_baselined_date DATE := NULL
9964 ,p_project_id NUMBER
9965 ,p_proj_element_id NUMBER
9966 ,p_object_type VARCHAR2 := 'PA_TASKS'
9967 ,p_start_end_flag VARCHAR2 := 'S'
9968 ) return date
9969
9970 is
9971
9972 cursor cur_lp_sch_start_date(p_str_ver_id NUMBER) is
9973 select scheduled_start_date
9974 from pa_proj_elem_ver_schedule ppevs
9975 where ppevs.project_id = p_project_id
9976 and ppevs.proj_element_id = p_proj_element_id
9977 and ppevs.element_version_id = (select ppev.element_version_id
9978 from pa_proj_element_versions ppev
9979 where ppev.project_id = p_project_id
9980 and ppev.proj_element_id = p_proj_element_id
9981 and ppev.object_type = p_object_type
9982 and ppev.parent_structure_version_id = p_str_ver_id);
9983
9984 cursor cur_lp_sch_end_date(p_str_ver_id NUMBER) is
9985 select scheduled_finish_date
9986 from pa_proj_elem_ver_schedule ppevs
9987 where ppevs.project_id = p_project_id
9988 and ppevs.proj_element_id = p_proj_element_id
9989 and ppevs.element_version_id = (select ppev.element_version_id
9990 from pa_proj_element_versions ppev
9991 where ppev.project_id = p_project_id
9992 and ppev.proj_element_id = p_proj_element_id
9993 and ppev.object_type = p_object_type
9994 and ppev.parent_structure_version_id = p_str_ver_id);
9995
9996 l_lp_str_ver_id NUMBER := NULL;
9997
9998 l_return_date DATE := NULL;
9999
10000 begin
10001
10002 -- If baselined date exists return the baselined date.
10003
10004 if l_return_date is NULL then
10005
10006 l_return_date := p_baselined_date;
10007
10008 end if;
10009
10010 -- If baselined date does not exist return the scheduled date from the latest published version.
10011
10012 if l_return_date is NULL then
10013
10014 -- Get latest published structure version id.
10015
10016 l_lp_str_ver_id := PA_PROJ_ELEMENTS_UTILS.latest_published_ver_id(p_project_id,'WORKPLAN');
10017
10018 if p_start_end_flag = 'S' then
10019
10020 open cur_lp_sch_start_date(l_lp_str_ver_id);
10021 fetch cur_lp_sch_start_date into l_return_date;
10022 close cur_lp_sch_start_date;
10023
10024 else
10025
10026 open cur_lp_sch_end_date(l_lp_str_ver_id);
10027 fetch cur_lp_sch_end_date into l_return_date;
10028 close cur_lp_sch_end_date;
10029
10030 end if;
10031
10032 end if;
10033
10034 -- If baselined date does and scheduled date from the latest published version do not exist
10035 -- return the scheduled date for the current element version.
10036
10037 if l_return_date is NULL then
10038
10039 l_return_date := p_scheduled_date;
10040
10041 end if;
10042
10043 return(l_return_date);
10044
10045 end;
10046
10047
10048 -- Procedure to be called when applying latest progress to / publishing the working workplan version
10049 PROCEDURE check_txn_currency_diff
10050 (
10051 p_structure_version_id IN NUMBER,
10052 p_context IN VARCHAR2 DEFAULT 'PUBLISH_STRUCTURE',
10053 x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10054 )
10055
10056 IS
10057
10058 -- This cursor returns the information for the assignments with mismatched currencies.
10059 -- Bug 5059828. Changed substr to substrb
10060
10061 CURSOR c_get_diff_cur_asgmts(p_struct_ver_id IN NUMBER) IS
10062 SELECT
10063 ra.resource_assignment_id,
10064 substrb(pe.element_number,1,30), -- Bug 4348814 : Added substr
10065 substrb(pe.name,1,30), -- Bug 4348814 : Added substr
10066 substrb(rlm.alias,1,40), -- Bug 4348814 : Added substr
10067 bl.txn_currency_code,
10068 pr.txn_currency_code
10069 FROM
10070 pa_proj_element_versions pev,
10071 pa_proj_elements pe,
10072 pa_resource_assignments ra,
10073 pa_resource_list_members rlm,
10074 pa_budget_lines bl,
10075 pa_progress_rollup pr
10076 WHERE
10077 pev.parent_structure_version_id = p_struct_ver_id AND
10078 pe.proj_element_id = pev.proj_element_id AND
10079 ra.wbs_element_version_id = pev.element_version_id AND
10080 rlm.resource_list_member_id = ra.resource_list_member_id AND
10081 bl.resource_assignment_id = ra.resource_assignment_id AND
10082 pr.project_id = ra.project_id AND
10083 pr.object_id = ra.resource_list_member_id AND
10084 pr.object_type = 'PA_ASSIGNMENTS' AND
10085 pr.structure_type = 'WORKPLAN' AND
10086 pr.proj_element_id = ra.task_id AND
10087 pr.current_flag = 'Y' AND
10088 pr.structure_version_id IS NULL AND
10089 bl.txn_currency_code <> pr.txn_currency_code
10090 GROUP BY
10091 ra.resource_assignment_id,
10092 pe.element_number,
10093 pe.name,
10094 rlm.alias,
10095 bl.txn_currency_code,
10096 pr.txn_currency_code;
10097
10098 -- Bug 4348814 : Task number is 100 chars, name is 240 chars, currency is 15 chars in DB.
10099 -- whereas beloe plsql size is wrong.
10100
10101 l_resource_assignment_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10102 l_task_number_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
10103 l_task_name_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
10104 l_alias_tbl SYSTEM.PA_VARCHAR2_80_TBL_TYPE := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
10105
10106 -- Bug 4348814 : Changed the currency table to 15 from 20
10107 l_currency_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
10108 l_actual_currency_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
10109
10110 l_error_msg VARCHAR2(2000);
10111 l_error_count NUMBER;
10112 l_debug_mode varchar2(1);
10113 BEGIN
10114 -- Bug 4348814 : Added Debug Msgs
10115 x_return_status := FND_API.G_RET_STS_SUCCESS;
10116
10117 l_debug_mode := NVL(FND_PROFILE.value_specific('PA_DEBUG_MODE',fnd_global.user_id,fnd_global.login_id,275,null,null), 'N');
10118
10119 IF l_debug_mode = 'Y' THEN
10120 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);
10121 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CHECK_TXN_CURRENCY_DIFF', x_Msg => 'p_context='||p_context, x_Log_Level=> 3);
10122 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);
10123 END IF;
10124
10125
10126 OPEN c_get_diff_cur_asgmts(p_structure_version_id);
10127 FETCH c_get_diff_cur_asgmts BULK COLLECT INTO l_resource_assignment_id_tbl, l_task_number_tbl,
10128 l_task_name_tbl, l_alias_tbl, l_currency_tbl, l_actual_currency_tbl;
10129 CLOSE c_get_diff_cur_asgmts;
10130
10131 l_error_count := l_resource_assignment_id_tbl.COUNT;
10132
10133 IF l_debug_mode = 'Y' THEN
10134 pa_debug.write(x_Module=>'PA_PROGRESS_UTILS.CHECK_TXN_CURRENCY_DIFF', x_Msg => 'l_error_count='||l_error_count, x_Log_Level=> 3);
10135 END IF;
10136
10137
10138 IF l_error_count > 0 THEN
10139 x_return_status := FND_API.G_RET_STS_ERROR;
10140 FOR i in 1..l_error_count LOOP
10141 IF i = 1 THEN
10142 l_error_msg := l_task_number_tbl(i) || ', ' || l_alias_tbl(i) || ', ' || l_actual_currency_tbl(i);
10143 ELSE
10144 IF length (l_error_msg) >= 1700 THEN -- Bug 4348814 : Added so numeric and value error does not come
10145 exit;
10146 END IF;
10147 l_error_msg := l_error_msg || '; ' || l_task_number_tbl(i) || ', ' || l_alias_tbl(i) || ', ' || l_actual_currency_tbl(i);
10148 END IF;
10149 END LOOP;
10150
10151 --Bug 5059828. Doing this to avoid numeric/value error. Pls refer to code above
10152 --that has a similar check.
10153 l_error_msg := substrb(l_error_msg,1,1700);
10154
10155 IF p_context = 'PUBLISH_STRUCTURE' THEN
10156 PA_UTILS.ADD_MESSAGE
10157 (
10158 p_app_short_name => 'PA',
10159 p_msg_name => 'PA_PUB_MISM_CUR_ERR',
10160 p_token1 => 'PL_RES_LIST',
10161 p_value1 => l_error_msg
10162 );
10163 ELSIF p_context = 'APPLY_PROGRESS' THEN
10164 PA_UTILS.ADD_MESSAGE
10165 (
10166 p_app_short_name => 'PA',
10167 p_msg_name => 'PA_APPLY_PROG_MISM_CUR_ERR',
10168 p_token1 => 'PL_RES_LIST',
10169 p_value1 => l_error_msg
10170 );
10171 END IF;
10172 END IF;
10173
10174 EXCEPTION WHEN OTHERS THEN
10175 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR ; -- 4537865
10176 RAISE;
10177
10178 END check_txn_currency_diff;
10179
10180
10181
10182
10183
10184 -- Procedure to be called when updating task assignments for progress related business rules check.
10185 PROCEDURE check_prog_for_update_asgmts
10186 (
10187 p_task_assignment_tbl IN PA_TASK_ASSIGNMENT_UTILS.l_resource_rec_tbl_type,
10188 x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10189 )
10190
10191 IS
10192
10193 CURSOR get_all_parameters IS
10194 SELECT
10195 ra.resource_assignment_id,
10196 ra.resource_list_member_id,
10197 rat.resource_list_member_id,
10198 pr.txn_currency_code,
10199 rat.override_currency_code,
10200 ra.project_role_id,
10201 rat.project_role_id,
10202 ra.total_plan_quantity,
10203 rat.total_quantity,
10204 decode(ra.resource_class_code, 'PEOPLE', pr.ppl_act_effort_to_date,
10205 'EQUIPMENT', pr.eqpmt_act_effort_to_date ,pr.oth_quantity_to_date),
10206 pr.actual_finish_date,
10207 ra.schedule_start_date,
10208 ra.schedule_end_date,
10209 rat.schedule_start_date,
10210 rat.schedule_end_date,
10211 decode(pr.structure_version_id, NULL, 'Y', 'N')
10212 FROM
10213 pa_res_asgmts_temp rat,
10214 pa_resource_assignments ra,
10215 pa_proj_element_versions pev,
10216 pa_progress_rollup pr
10217 WHERE
10218 ra.resource_assignment_id = rat.resource_assignment_id AND
10219 pev.element_version_id = ra.wbs_element_version_id AND
10220 pr.project_id = ra.project_id AND
10221 pr.object_id = ra.resource_list_member_id AND
10222 pr.object_type = 'PA_ASSIGNMENTS' AND
10223 pr.structure_type = 'WORKPLAN' AND
10224 pr.proj_element_id = ra.task_id AND
10225 pr.current_flag = 'Y' AND
10226 (pr.structure_version_id IS NULL OR pr.structure_version_id = pev.parent_structure_version_id);
10227
10228 l_res_asgmt_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10229 l_old_rlm_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10230 l_new_rlm_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10231 l_actual_cur_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
10232 l_override_cur_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
10233 l_old_project_role_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10234 l_new_project_role_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10235 l_old_total_qty_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10236 l_new_total_qty_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10237 l_actual_qty_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10238 l_actual_finish_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
10239 l_old_sched_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
10240 l_old_sched_finish_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
10241 l_new_sched_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
10242 l_new_sched_finish_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
10243 l_lat_pub_prog_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
10244
10245 l_num_of_asgmts NUMBER;
10246 l_viol_indicator NUMBER;
10247 l_num_of_rows NUMBER;
10248 l_db_block_size NUMBER;
10249 l_num_blocks NUMBER;
10250
10251 BEGIN
10252
10253 x_return_status := FND_API.G_RET_STS_SUCCESS;
10254
10255 l_num_of_asgmts := p_task_assignment_tbl.COUNT;
10256
10257 SELECT to_number(value)
10258 INTO l_db_block_size
10259 FROM v$parameter
10260 WHERE name = 'db_block_size';
10261
10262 l_num_blocks := 1.25 * (l_num_of_asgmts * 75) / l_db_block_size;
10263
10264 IF l_num_of_asgmts > 0 THEN
10265
10266 -- Put the input parameters in individual tables for insert.
10267 l_res_asgmt_id_tbl.extend(l_num_of_asgmts);
10268 l_new_rlm_id_tbl.extend(l_num_of_asgmts);
10269 l_override_cur_tbl.extend(l_num_of_asgmts);
10270 l_new_project_role_id_tbl.extend(l_num_of_asgmts);
10271 l_new_total_qty_tbl.extend(l_num_of_asgmts);
10272 l_new_sched_start_date_tbl.extend(l_num_of_asgmts);
10273 l_new_sched_finish_date_tbl.extend(l_num_of_asgmts);
10274
10275 FOR i IN 1..l_num_of_asgmts LOOP
10276 l_res_asgmt_id_tbl(i) := p_task_assignment_tbl(i).resource_assignment_id;
10277 l_new_rlm_id_tbl(i) := p_task_assignment_tbl(i).resource_list_member_id;
10278 l_override_cur_tbl(i) := p_task_assignment_tbl(i).override_currency_code;
10279 l_new_project_role_id_tbl(i) := p_task_assignment_tbl(i).project_role_id;
10280 l_new_total_qty_tbl(i) := p_task_assignment_tbl(i).total_quantity;
10281 l_new_sched_start_date_tbl(i) := p_task_assignment_tbl(i).schedule_start_date;
10282 l_new_sched_finish_date_tbl(i) := p_task_assignment_tbl(i).schedule_end_date;
10283 END LOOP;
10284
10285 -- Manually seed the statistics for the temporary table.
10286 -- Need to do it before populating the table otherwise the table will be emptied.
10287 PA_TASK_ASSIGNMENT_UTILS.set_table_stats('PA','PA_RES_ASGMTS_TEMP', l_num_of_asgmts, l_num_blocks, 75);
10288
10289 -- Populate the temporary table with the parameters passed in.
10290 DELETE pa_res_asgmts_temp;
10291 FORALL j IN 1..p_task_assignment_tbl.COUNT
10292 INSERT INTO pa_res_asgmts_temp VALUES
10293 (l_res_asgmt_id_tbl(j), l_new_rlm_id_tbl(j), l_override_cur_tbl(j), l_new_project_role_id_tbl(j),
10294 l_new_total_qty_tbl(j), l_new_sched_start_date_tbl(j), l_new_sched_finish_date_tbl(j));
10295
10296 -- Initialize the arrays.
10297 l_res_asgmt_id_tbl := SYSTEM.PA_NUM_TBL_TYPE();
10298 l_new_rlm_id_tbl := SYSTEM.PA_NUM_TBL_TYPE();
10299 l_override_cur_tbl := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
10300 l_new_project_role_id_tbl := SYSTEM.PA_NUM_TBL_TYPE();
10301 l_new_total_qty_tbl := SYSTEM.PA_NUM_TBL_TYPE();
10302 l_new_sched_start_date_tbl := SYSTEM.PA_DATE_TBL_TYPE();
10303 l_new_sched_finish_date_tbl := SYSTEM.PA_DATE_TBL_TYPE();
10304
10305 -- Populate all the parameters.
10306 OPEN get_all_parameters;
10307 FETCH get_all_parameters BULK COLLECT INTO l_res_asgmt_id_tbl, l_old_rlm_id_tbl, l_new_rlm_id_tbl,
10308 l_actual_cur_tbl, l_override_cur_tbl, l_old_project_role_id_tbl, l_new_project_role_id_tbl,
10309 l_old_total_qty_tbl, l_new_total_qty_tbl, l_actual_qty_tbl, l_actual_finish_date_tbl,
10310 l_old_sched_start_date_tbl, l_old_sched_finish_date_tbl, l_new_sched_start_date_tbl,
10311 l_new_sched_finish_date_tbl, l_lat_pub_prog_flag_tbl;
10312 CLOSE get_all_parameters;
10313
10314 l_num_of_rows := l_res_asgmt_id_tbl.COUNT;
10315
10316 IF l_num_of_rows > 0 THEN
10317
10318 FOR k IN 1..l_num_of_rows LOOP
10319
10320 -- Initialize the indicator.
10321 l_viol_indicator := NULL;
10322
10323 -- Latest progress entered. Use this row to compare the override currency and the currency of the actuals.
10324 IF l_lat_pub_prog_flag_tbl(k) = 'Y' THEN
10325
10326 -- Cannot override the currency if progress has been collected.
10327 IF ( l_actual_cur_tbl(k) IS NOT NULL AND l_override_cur_tbl(k) IS NOT NULL
10328 AND l_actual_cur_tbl(k) <> l_override_cur_tbl(k) ) THEN
10329 l_viol_indicator := 1;
10330 END IF;
10331
10332 -- Progress applied to the working version. Check the other business rules.
10333 ELSE -- l_lat_pub_prog_flag_tbl(k) <> 'Y'
10334
10335 -- Cannot change the planning resource if progress has been applied to the working version.
10336 IF ( l_new_rlm_id_tbl(k) = FND_API.G_MISS_NUM AND l_old_rlm_id_tbl IS NOT NULL) OR
10337 ( l_new_rlm_id_tbl(k) <> FND_API.G_MISS_NUM AND l_new_rlm_id_tbl(k) IS NOT NULL
10338 AND ( l_new_rlm_id_tbl(k) <> l_old_rlm_id_tbl(k) OR l_old_rlm_id_tbl(k) IS NULL) ) THEN
10339 l_viol_indicator := 2;
10340 END IF;
10341
10342 -- Cannot change the project role if progress has been applied to the working version.
10343 IF ( l_new_project_role_id_tbl(k) = FND_API.G_MISS_NUM AND l_old_project_role_id_tbl(k) IS NOT NULL )
10344 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
10345 ( 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
10346 l_viol_indicator := 3;
10347 END IF;
10348 /* Bug Fix 5726773
10349 As a part of supporting negative quantities and amounts the following check is commented out.
10350
10351 -- Cannot decrease planned quantity below actual quantity.
10352 IF ( l_actual_qty_tbl(k) IS NOT NULL AND l_new_total_qty_tbl(k) IS NOT NULL AND
10353 ( l_new_total_qty_tbl(k) = FND_API.G_MISS_NUM OR l_new_total_qty_tbl(k) < l_actual_qty_tbl(k) ) ) THEN
10354 l_viol_indicator := 4;
10355 END IF;
10356 */
10357 -- End of Bug Fix 5726773
10358
10359 /* Bug 4570108
10360 9/02 M-closeout - Based on discussion with Koushik, Sakthi, Ansari, removing this check:
10361 -- If the assignment is completed.
10362 IF ( l_actual_finish_date_tbl(k) IS NOT NULL ) THEN
10363
10364 -- Cannot change the scheduled start date if an actual end date has been entered.
10365 IF ( l_new_sched_start_date_tbl(k) = FND_API.G_MISS_DATE AND l_old_sched_start_date_tbl(k) IS NOT NULL )
10366 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
10367 (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
10368 l_viol_indicator := 6;
10369 END IF;
10370
10371 -- Cannot change the scheduled finish date if an actual end date has been entered.
10372 IF ( l_new_sched_finish_date_tbl(k) = FND_API.G_MISS_DATE
10373 AND l_old_sched_finish_date_tbl(k) IS NOT NULL ) OR
10374 ( l_new_sched_finish_date_tbl(k) <> FND_API.G_MISS_DATE AND
10375 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)
10376 OR l_old_sched_finish_date_tbl(k) IS NULL) ) THEN
10377 l_viol_indicator := 7;
10378 END IF;
10379
10380 END IF; -- l_actual_finish_date_tbl(k) IS NOT NULL
10381 */
10382
10383 END IF; -- l_lat_pub_prog_flag_tbl(k) = 'Y'
10384
10385 IF l_viol_indicator IS NOT NULL THEN
10386
10387 x_return_status := FND_API.G_RET_STS_ERROR;
10388
10389 IF l_viol_indicator = 1 THEN
10390 PA_UTILS.ADD_MESSAGE
10391 (
10392 p_app_short_name => 'PA',
10393 p_msg_name => 'PA_UP_TA_CUR_ERR',
10394 p_token1 => 'ACTUAL_CURRENCY',
10395 p_value1 => l_actual_cur_tbl(k)
10396 );
10397 ELSIF l_viol_indicator = 2 OR l_viol_indicator = 3 THEN
10398 PA_UTILS.ADD_MESSAGE
10399 (
10400 p_app_short_name => 'PA',
10401 p_msg_name => 'PA_UP_TA_PL_RES_ERR'
10402 );
10403 ELSIF l_viol_indicator = 4 THEN
10404 PA_UTILS.ADD_MESSAGE
10405 (
10406 p_app_short_name => 'PA',
10407 p_msg_name => 'PA_UP_TA_DECR_QTY_ERR'
10408 );
10409 ELSIF l_viol_indicator = 6 OR l_viol_indicator = 7 THEN
10410 PA_UTILS.ADD_MESSAGE
10411 (
10412 p_app_short_name => 'PA',
10413 p_msg_name => 'PA_UP_TA_ASMT_END_ERR'
10414 );
10415 END IF; -- l_viol_indicator
10416
10417 END IF; -- l_viol_indicator IS NOT NULL
10418
10419 END LOOP;
10420
10421 END IF; -- l_num_of_rows > 0
10422
10423 END IF; -- l_num_of_asgmts > 0
10424
10425 EXCEPTION WHEN OTHERS THEN
10426 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10427 RAISE;
10428
10429 END check_prog_for_update_asgmts;
10430
10431 -- Bug # 3910193: Created API: convert_effort_to_cost_brdn_pc().
10432
10433 PROCEDURE convert_effort_to_cost_brdn_pc
10434 ( p_resource_list_mem_id IN NUMBER
10435 ,p_project_id IN NUMBER
10436 ,p_task_id IN NUMBER
10437 ,p_as_of_date IN DATE
10438 ,p_structure_version_id IN NUMBER
10439 ,p_txn_currency_code IN VARCHAR
10440 ,p_planned_quantity IN NUMBER
10441 ,p_act_quantity_this_period IN NUMBER
10442 ,p_act_quantity IN NUMBER
10443 ,p_act_brdncost_pc IN NUMBER
10444 ,p_etc_quantity IN NUMBER
10445 ,p_rate_based_flag IN VARCHAR := 'Y'
10446 ,x_act_brdncost_pc_this_period OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
10447 ,x_etc_brdncost_pc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
10448 ,x_prcnt_comp_quantity OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
10449 ,x_prcnt_spent_quantity OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
10450 ,x_eac_quantity OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
10451 ,x_prcnt_comp_brdncost_pc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
10452 ,x_prcnt_spent_brdncost_pc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
10453 ,x_eac_brdncost_pc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
10454 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10455 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
10456 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10457 )
10458
10459 IS
10460 /* commented out, performance issue
10461 cursor cur_ptav is
10462 select planned_bur_cost_proj_cur
10463 from pa_task_asgmts_v
10464 where project_id = p_project_id
10465 and task_id = p_task_id
10466 and structure_version_id = p_structure_version_id
10467 and resource_list_member_id = p_resource_list_mem_id;
10468 */
10469
10470 cursor cur_ptav is
10471 select pra.total_project_burdened_cost as planned_bur_cost_proj_cur
10472 , pra.resource_assignment_id -- Bug 4372462
10473 , pra.budget_version_id -- Bug 4372462
10474 FROM pa_resource_assignments pra,
10475 PA_PROJ_ELEMENT_VERSIONS PPEV
10476 where pra.resource_list_member_id = p_resource_list_mem_id
10477 and pra.task_id = p_task_id
10478 AND PPEV.PROJECT_ID = p_project_id
10479 AND PPEV.PARENT_STRUCTURE_VERSION_ID = p_structure_version_id
10480 AND pra.TASK_ID = PPEV.PROJ_ELEMENT_ID
10481 AND pra.wbs_element_version_id = ppev.element_version_id;
10482
10483 l_cur_ptav NUMBER;
10484 l_resource_assignment_id NUMBER; -- Bug 4372462
10485 l_budget_version_id NUMBER; -- Bug 4372462
10486
10487 l_planned_brdncost_pc NUMBER := null;
10488
10489 l_plan_res_cur_code VARCHAR2(30) := null;
10490
10491 l_plan_res_burden_rate_etc NUMBER := null;
10492 l_plan_res_burden_rate_act NUMBER := null;
10493
10494 l_plan_res_raw_rate NUMBER := null;
10495
10496 l_plan_burden_multiplier_etc NUMBER := null;
10497 l_plan_burden_multiplier_act NUMBER := null;
10498
10499 l_rawcost_pc NUMBER := null;
10500 l_rawcost_fc NUMBER := null;
10501
10502 l_txn_currency_code VARCHAR2(15) := null;
10503
10504 l_project_curr_code VARCHAR2(30);
10505 l_project_rate_type VARCHAR2(30);
10506 l_project_rate_date DATE;
10507 l_project_exch_rate NUMBER;
10508
10509 l_projfunc_curr_code VARCHAR2(30);
10510 l_projfunc_cost_rate_type VARCHAR2(30);
10511 l_projfunc_cost_rate_date DATE;
10512 l_projfunc_cost_exch_rate NUMBER;
10513
10514 l_etc_brdncost_tc NUMBER := null;
10515 l_etc_brdncost_pc NUMBER := null;
10516
10517 l_act_brdncost_pc NUMBER := null;
10518
10519 l_act_brdncost_tc_this_period NUMBER := null;
10520 l_act_brdncost_pc_this_period NUMBER := null;
10521
10522 l_act_quantity_to_date NUMBER := null;
10523 l_act_brdncost_to_date_pc NUMBER := null;
10524
10525 l_eac_quantity NUMBER := null;
10526 l_eac_brdncost_pc NUMBER := null;
10527
10528 l_prcnt_comp_quantity NUMBER := null;
10529 l_prcnt_spent_quantity NUMBER := null;
10530
10531 l_prcnt_comp_brdncost_pc NUMBER := null;
10532 l_prcnt_spent_brdncost_pc NUMBER := null;
10533
10534 l_return_status VARCHAR2(1) := null;
10535 l_msg_count NUMBER := null;
10536 l_msg_data VARCHAR2(250) := null;
10537
10538 g1_debug_mode VARCHAR2(1);
10539 l_track_wp_cost_flag VARCHAR2(1) := 'Y'; -- Bug 3921624
10540
10541
10542 BEGIN
10543 l_return_status := fnd_api.g_ret_sts_success ; -- 4537865
10544 g1_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N');
10545
10546 IF g1_debug_mode = 'Y' THEN
10547 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);
10548 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);
10549 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);
10550 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);
10551 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);
10552 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);
10553 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);
10554 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);
10555 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);
10556 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);
10557 END IF;
10558
10559 FND_MSG_PUB.initialize;
10560
10561 l_track_wp_cost_flag := pa_fp_wp_gen_amt_utils.get_wp_track_cost_amt_flag(p_project_id); --Bug 3921624
10562
10563 IF NVL(l_track_wp_cost_flag, 'Y') = 'Y' THEN --Bug 3921624
10564 -- 1). Get the input act_brdncost_pc into the corresponding local variable.
10565
10566 l_act_brdncost_pc := nvl(p_act_brdncost_pc,0);
10567
10568 -- 2). Get the planned_brdncost_pc from pa_task_assignments_v;
10569
10570 open cur_ptav;
10571 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
10572 close cur_ptav;
10573
10574
10575 l_planned_brdncost_pc := nvl(l_cur_ptav,0);
10576
10577 -- 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.
10578
10579 l_plan_res_cur_code := null;
10580 l_plan_res_raw_rate := null;
10581 l_return_status := null;
10582 l_msg_count := null;
10583 l_msg_data := null;
10584 l_plan_burden_multiplier_etc := null;
10585 l_plan_res_burden_rate_etc := null;
10586
10587 PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier(
10588 P_res_list_mem_id => p_resource_list_mem_id
10589 ,P_project_id => p_project_id
10590 ,P_task_id => p_task_id --bug 3927159
10591 ,p_as_of_date => p_as_of_date --bug 3927159
10592 ,p_structure_version_id => p_structure_version_id
10593 ,p_currency_code => p_txn_currency_code
10594 ,p_calling_mode => 'PLAN_RATES'
10595 ,x_resource_curr_code => l_plan_res_cur_code
10596 ,x_resource_raw_rate => l_plan_res_raw_rate
10597 ,x_resource_burden_rate => l_plan_res_burden_rate_etc
10598 ,X_burden_multiplier => l_plan_burden_multiplier_etc
10599 ,x_return_status => l_return_status
10600 ,x_msg_count => l_msg_count
10601 ,x_msg_data => l_msg_data);
10602
10603 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10604 x_return_status := 'E';
10605 RAISE FND_API.G_EXC_ERROR;
10606 END IF;
10607
10608 -- 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.
10609 -- To do this we use the API: PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS() and we pass in
10610 -- txn_currency code into the projfunc_currency_code parameter and read out the value of
10611 -- the parameter projfunc_raw_cost.
10612
10613 IF ((p_rate_based_flag = 'Y') and (p_txn_currency_code <> l_plan_res_cur_code)) then
10614 l_rawcost_pc := null;
10615 l_txn_currency_code := p_txn_currency_code;
10616
10617 PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS(
10618 p_project_id => p_project_id
10619 ,p_task_id => p_task_id
10620 ,p_as_of_date => p_as_of_date
10621 ,p_txn_cost => l_plan_res_burden_rate_etc
10622 ,p_txn_curr_code => l_plan_res_cur_code
10623 ,p_structure_version_id => p_structure_version_id
10624 ,p_project_curr_code => l_txn_currency_code ---l_project_curr_code
10625 ,p_project_rate_type => l_project_rate_type
10626 ,p_project_rate_date => l_project_rate_date
10627 ,p_project_exch_rate => l_project_exch_rate
10628 ,p_project_raw_cost => l_rawcost_pc
10629 ,p_projfunc_curr_code => l_projfunc_curr_code ---txn_currency_code
10630 ,p_projfunc_cost_rate_type => l_projfunc_cost_rate_type
10631 ,p_projfunc_cost_rate_date => l_projfunc_cost_rate_date
10632 ,p_projfunc_cost_exch_rate => l_projfunc_cost_exch_rate
10633 ,p_projfunc_raw_cost => l_rawcost_fc
10634 ,x_return_status => l_return_status
10635 ,x_msg_count => l_msg_count
10636 ,x_msg_data => l_msg_data
10637 );
10638
10639 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10640 x_return_status := 'E';
10641 RAISE FND_API.G_EXC_ERROR;
10642 END IF;
10643
10644 l_plan_res_burden_rate_etc := l_rawcost_pc;
10645
10646 END IF;
10647
10648 -- 4.1). Get resource rate burden multiplier to convert act_rawcost_this_period to
10649 -- act_brdncost_this_period and resource burden rate to convert act_effort_this_period
10650 -- to act_brdncost_tc_this_period.
10651
10652 l_plan_res_cur_code := null;
10653 l_plan_res_raw_rate := null;
10654 l_return_status := null;
10655 l_msg_count := null;
10656 l_msg_data := null;
10657
10658 l_plan_burden_multiplier_act := null;
10659 l_plan_res_burden_rate_act := null;
10660
10661 PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier(
10662 P_res_list_mem_id => p_resource_list_mem_id
10663 ,P_project_id => p_project_id
10664 ,P_task_id => p_task_id --bug 3927159
10665 ,p_as_of_date => p_as_of_date --bug 3927159
10666 ,p_structure_version_id => p_structure_version_id
10667 ,p_currency_code => p_txn_currency_code
10668 ,p_calling_mode => 'ACTUAL_RATES'
10669 ,x_resource_curr_code => l_plan_res_cur_code
10670 ,x_resource_raw_rate => l_plan_res_raw_rate
10671 ,x_resource_burden_rate => l_plan_res_burden_rate_act
10672 ,X_burden_multiplier => l_plan_burden_multiplier_act
10673 ,x_return_status => l_return_status
10674 ,x_msg_count => l_msg_count
10675 ,x_msg_data => l_msg_data);
10676
10677 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10678 x_return_status := 'E';
10679 RAISE FND_API.G_EXC_ERROR;
10680 END IF;
10681
10682 -- 4.2). If the rate_based_flag is 'Y' and the resource burden rate currency code is
10683 -- 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
10690 l_rawcost_pc := null;
10691 l_txn_currency_code := p_txn_currency_code;
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_act
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 ---l_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_act := l_rawcost_pc;
10720 END IF;
10721
10722 -- If (p_rate_based_flag = 'N'), the input quantity values are rawcost_tc values.
10723 If (p_rate_based_flag = 'N') then
10724
10725 -- 5.1). Use the resource rate burden multiplier to convert etc_rawcost_tc into etc_brdncost_tc.
10726
10727 --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);
10728 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);
10729 -- 5.2). Use the resource rate burden multiplier to convert act_rawcost_tc_this_period into act_brdncost_tc_this_period.
10730
10731 --l_act_brdncost_tc_this_period := nvl(pa_currency.round_trans_currency_amt(
10732 -- (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);
10733
10734 l_act_brdncost_tc_this_period := nvl(pa_currency.round_trans_currency_amt1(
10735 (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);
10736
10737 else
10738
10739 -- 6.1). Use resource burden rate to convert etc_effort into etc_brdncost_tc:
10740
10741 --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);
10742 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);
10743
10744 -- 6.2). Use resource burden rate to convert act_effort_this_period into
10745 -- act_brdncost_tc_this_period.
10746
10747 --l_act_brdncost_tc_this_period := pa_currency.round_trans_currency_amt(
10748 -- (nvl(p_act_quantity_this_period,0) * nvl(l_plan_res_burden_rate_act,0)), p_txn_currency_code);
10749 l_act_brdncost_tc_this_period := pa_currency.round_trans_currency_amt1(
10750 (nvl(p_act_quantity_this_period,0) * nvl(l_plan_res_burden_rate_act,0)), p_txn_currency_code);
10751 end if; -- If (p_rate_based_flag = 'N') then
10752
10753 -- 7.1). Convert etc_brdncost_tc into etc_brdncost_pc. To do this we use the API:
10754 -- PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS() and we pass in etc_brdncost_tc
10755 -- into the txn_cost parameter and read out the value of the parameter project_raw_cost.
10756
10757 l_rawcost_pc := null;
10758
10759 PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS(
10760 p_project_id => p_project_id
10761 ,p_task_id => p_task_id
10762 ,p_as_of_date => p_as_of_date
10763 ,p_txn_cost => l_etc_brdncost_tc
10764 ,p_txn_curr_code => p_txn_currency_code
10765 ,p_structure_version_id => p_structure_version_id
10766 ,p_project_curr_code => l_project_curr_code
10767 ,p_project_rate_type => l_project_rate_type
10768 ,p_project_rate_date => l_project_rate_date
10769 ,p_project_exch_rate => l_project_exch_rate
10770 ,p_project_raw_cost => l_rawcost_pc
10771 ,p_projfunc_curr_code => l_projfunc_curr_code
10772 ,p_projfunc_cost_rate_type => l_projfunc_cost_rate_type
10773 ,p_projfunc_cost_rate_date => l_projfunc_cost_rate_date
10774 ,p_projfunc_cost_exch_rate => l_projfunc_cost_exch_rate
10775 ,p_projfunc_raw_cost => l_rawcost_fc
10776 ,p_calling_mode => 'PLAN_RATES' -- Bug 4372462
10777 ,p_budget_version_id => l_budget_version_id -- Bug 4372462
10778 ,p_res_assignment_id => l_resource_assignment_id -- Bug 4372462
10779 ,x_return_status => l_return_status
10780 ,x_msg_count => l_msg_count
10781 ,x_msg_data => l_msg_data
10782 );
10783
10784 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10785 x_return_status := 'E';
10786 RAISE FND_API.G_EXC_ERROR;
10787 END IF;
10788
10789 l_etc_brdncost_pc := l_rawcost_pc;
10790
10791 -- 7.2). Convert act_brdncost_tc_this_period into act_brdncost_pc_this_period.
10792 -- To do this we use the API: PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS()
10793 -- and we pass in act_brdncost_tc_this_period into the txn_cost parameter and
10794 -- read out the value of the parameter project_raw_cost.
10795
10796 l_rawcost_pc := null;
10797
10798 PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS(
10799 p_project_id => p_project_id
10800 ,p_task_id => p_task_id
10801 ,p_as_of_date => p_as_of_date
10802 ,p_txn_cost => l_act_brdncost_tc_this_period
10803 ,p_txn_curr_code => p_txn_currency_code
10804 ,p_structure_version_id => p_structure_version_id
10805 ,p_project_curr_code => l_project_curr_code
10806 ,p_project_rate_type => l_project_rate_type
10807 ,p_project_rate_date => l_project_rate_date
10808 ,p_project_exch_rate => l_project_exch_rate
10809 ,p_project_raw_cost => l_rawcost_pc
10810 ,p_projfunc_curr_code => l_projfunc_curr_code
10811 ,p_projfunc_cost_rate_type => l_projfunc_cost_rate_type
10812 ,p_projfunc_cost_rate_date => l_projfunc_cost_rate_date
10813 ,p_projfunc_cost_exch_rate => l_projfunc_cost_exch_rate
10814 ,p_projfunc_raw_cost => l_rawcost_fc
10815 ,x_return_status => l_return_status
10816 ,x_msg_count => l_msg_count
10817 ,x_msg_data => l_msg_data
10818 );
10819
10820 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10821 x_return_status := 'E';
10822 RAISE FND_API.G_EXC_ERROR;
10823 END IF;
10824
10825 l_act_brdncost_pc_this_period := l_rawcost_pc;
10826
10827 END IF; -- bug 3921624, IF NVL(l_track_wp_cost_flag, 'Y') = 'Y'
10828
10829 l_act_quantity_to_date := nvl(p_act_quantity,0) + nvl(p_act_quantity_this_period,0);
10830 l_eac_quantity := (nvl(p_etc_quantity,0) + l_act_quantity_to_date);
10831 l_prcnt_comp_quantity := PA_PROGRESS_UTILS.Percent_Complete_Value(l_act_quantity_to_date,p_etc_quantity);
10832 l_prcnt_spent_quantity := PA_PROGRESS_UTILS.Percent_Spent_Value(l_act_quantity_to_date,p_planned_quantity);
10833
10834 IF NVL(l_track_wp_cost_flag, 'Y') = 'Y' THEN -- bug 3921624
10835 l_act_brdncost_to_date_pc := nvl(l_act_brdncost_pc,0) + nvl(l_act_brdncost_pc_this_period,0);
10836 l_eac_brdncost_pc := (nvl(l_etc_brdncost_pc,0) + l_act_brdncost_to_date_pc );
10837 l_prcnt_comp_brdncost_pc := PA_PROGRESS_UTILS.Percent_Complete_Value(l_act_brdncost_to_date_pc,l_etc_brdncost_pc);
10838 l_prcnt_spent_brdncost_pc := PA_PROGRESS_UTILS.Percent_Spent_Value(l_act_brdncost_to_date_pc,l_planned_brdncost_pc);
10839 END IF;
10840
10841 IF g1_debug_mode = 'Y' THEN
10842 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);
10843 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);
10844 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);
10845 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);
10846 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);
10847 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);
10848 END IF;
10849
10850 -- Set the values to the output parameters:
10851
10852 x_act_brdncost_pc_this_period := nvl(l_act_brdncost_pc_this_period, 0);
10853 x_etc_brdncost_pc := nvl(l_etc_brdncost_pc,0);
10854
10855 x_prcnt_comp_quantity := nvl(l_prcnt_comp_quantity,0);
10856 x_prcnt_spent_quantity := nvl(l_prcnt_spent_quantity,0);
10857 x_eac_quantity := nvl(l_eac_quantity,0);
10858
10859 x_prcnt_comp_brdncost_pc := nvl(l_prcnt_comp_brdncost_pc,0);
10860 x_prcnt_spent_brdncost_pc := nvl(l_prcnt_spent_brdncost_pc,0);
10861 x_eac_brdncost_pc := nvl(l_eac_brdncost_pc,0);
10862
10863 x_return_status := l_return_status;
10864 x_msg_count := l_msg_count;
10865 x_msg_data := l_msg_data;
10866
10867 EXCEPTION
10868
10869 WHEN FND_API.G_EXC_ERROR THEN
10870 x_return_status := FND_API.G_RET_STS_ERROR;
10871 x_msg_count := Fnd_Msg_Pub.count_msg;
10872
10873 -- 4537865
10874 x_act_brdncost_pc_this_period := 0 ;
10875 x_etc_brdncost_pc := 0 ;
10876 x_prcnt_comp_quantity := 0 ;
10877 x_prcnt_spent_quantity := 0 ;
10878 x_eac_quantity := 0 ;
10879 x_prcnt_comp_brdncost_pc := 0 ;
10880 x_prcnt_spent_brdncost_pc := 0 ;
10881 x_eac_brdncost_pc := 0 ;
10882
10883 WHEN OTHERS THEN
10884 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
10885 x_msg_count := 1;
10886 x_msg_data := SUBSTRB(SQLERRM,1,240);
10887 -- 4537865
10888 x_act_brdncost_pc_this_period := 0 ;
10889 x_etc_brdncost_pc := 0 ;
10890 x_prcnt_comp_quantity := 0 ;
10891 x_prcnt_spent_quantity := 0 ;
10892 x_eac_quantity := 0 ;
10893 x_prcnt_comp_brdncost_pc := 0 ;
10894 x_prcnt_spent_brdncost_pc := 0 ;
10895 x_eac_brdncost_pc := 0 ;
10896 RAISE;
10897
10898 END convert_effort_to_cost_brdn_pc;
10899
10900 function get_actual_summ_date(p_project_id IN NUMBER) return date
10901 is
10902 l_prog_act_summ_date date := null;
10903 begin
10904 /*
10905 select next_progress_update_date
10906 into l_prog_act_summ_date
10907 from pa_proj_progress_attr
10908 where project_id = p_project_id
10909 and object_type = 'PA_STRUCTURES'
10910 and structure_type = 'WORKPLAN';
10911
10912 --- adding if statement for bug 4490380
10913 if l_prog_act_summ_date is null then
10914 */
10915 --- Bug 4652132 always return latest as_of_date for the project/program.
10916 select as_of_date
10917 into l_prog_act_summ_date
10918 from pa_progress_rollup
10919 where project_id = p_project_id
10920 and object_type = 'PA_STRUCTURES'
10921 and structure_type = 'WORKPLAN'
10922 and structure_version_id is null
10923 and current_flag = 'Y';
10924
10925 return l_prog_act_summ_date;
10926
10927 exception when others then
10928 return to_date(null);
10929 end;
10930
10931 /* Bug # 3956235: Created API: get_cost_variance(). */
10932
10933 -- 4392189 Phase 2: ignore p_base_percent_complete
10934 Function get_cost_variance(
10935 p_project_id NUMBER
10936 , p_proj_element_id NUMBER
10937 , p_structure_version_id NUMBER
10938 , p_task_weight_method VARCHAR2
10939 , p_structure_type VARCHAR2 := 'WORKPLAN'
10940 , p_base_percent_complete NUMBER
10941 , p_eff_rollup_percent_comp NUMBER
10942 , p_earned_value NUMBER
10943 , p_oth_act_cost_to_date_pc NUMBER
10944 , p_ppl_act_cost_to_date_pc NUMBER
10945 , p_eqpmt_act_cost_to_date_pc NUMBER
10946 , p_spj_oth_act_cost_to_date_pc NUMBER
10947 , p_spj_ppl_act_cost_pc NUMBER
10948 , p_spj_eqpmt_act_cost_pc NUMBER
10949 ) return number
10950 is
10951
10952 l_cost_variance NUMBER := null;
10953 l_bac_value NUMBER := null;
10954 l_earned_value NUMBER := null;
10955
10956 begin
10957
10958 if (p_task_weight_method = 'EFFORT') then
10959
10960 /* Get the corresponding BAC cost value by passing p_task_weight_method as 'COST'. */
10961
10962 l_bac_value := pa_progress_utils.get_bac_value(
10963 p_project_id => p_project_id
10964 ,p_task_weight_method => 'COST'
10965 ,p_proj_element_id => p_proj_element_id
10966 ,p_structure_version_id => p_structure_version_id
10967 ,p_structure_type => p_structure_type
10968 );
10969
10970 /* Calculate the corresponding earned_value cost using the BAC cost value. */
10971
10972 -- l_earned_value := round((nvl(nvl(p_base_percent_complete
10973 -- ,p_eff_rollup_percent_comp),0)
10974 -- * nvl(l_bac_value,0)/100),5);
10975 l_earned_value := round((nvl(p_eff_rollup_percent_comp,0)
10976 * nvl(l_bac_value,0)/100),5);
10977
10978
10979 else
10980
10981 /* Set earned_value as the input earned_value. */
10982
10983 l_earned_value := nvl(p_earned_value,0);
10984
10985 end if;
10986
10987 /* Calculate the cost_variance. */
10988
10989 l_cost_variance := nvl(l_earned_value,0)-(nvl(p_oth_act_cost_to_date_pc,0)
10990 +nvl(p_ppl_act_cost_to_date_pc,0)
10991 +nvl(p_eqpmt_act_cost_to_date_pc,0)
10992 +nvl(p_spj_oth_act_cost_to_date_pc,0)
10993 +nvl(p_spj_ppl_act_cost_pc,0)
10994 +nvl(p_spj_eqpmt_act_cost_pc,0));
10995
10996 /* Return the calcualted cost variance. */
10997
10998 return(l_cost_variance);
10999
11000 end get_cost_variance;
11001
11002 -- Begin fix for Bug # 4073659.
11003
11004 FUNCTION check_prog_exists_and_delete(
11005 p_project_id NUMBER
11006 ,p_task_id NUMBER
11007 ,p_object_type VARCHAR2 := 'PA_TASKS'
11008 ,p_object_id NUMBER := null
11009 ,p_structure_type VARCHAR2 := 'WORKPLAN'
11010 ,p_delete_progress_flag VARCHAR2 := 'Y' -- Fix for Bug # 4140984.
11011
11012 ) RETURN VARCHAR2 IS
11013
11014 CURSOR cur_ppc_assgn(c_object_id NUMBER, c_task_id NUMBER, c_object_type VARCHAR2
11015 , c_project_id NUMBER, c_structure_type VARCHAR2)
11016 IS
11017 SELECT 'Y'
11018 FROM pa_percent_completes ppc
11019 WHERE ppc.object_id = c_object_id
11020 AND ppc.task_id = c_task_id
11021 AND ppc.object_type = c_object_type
11022 AND ppc.project_id = c_project_id
11023 AND ppc.structure_type = c_structure_type
11024 AND ppc.published_flag = 'Y';
11025
11026 CURSOR cur_ppr_assgn(c_object_id NUMBER, c_task_id NUMBER, c_object_type VARCHAR2
11027 , c_project_id NUMBER, c_structure_type VARCHAR2)
11028 IS
11029 SELECT 'Y'
11030 FROM pa_progress_rollup ppr
11031 WHERE ppr.object_id = c_object_id
11032 AND ppr.proj_element_id = c_task_id
11033 AND ppr.object_type = c_object_type
11034 AND ppr.project_id = c_project_id
11035 AND ppr.structure_type = p_structure_type
11036 AND (((nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)
11037 +nvl(ppr.eqpmt_act_cost_to_date_tc,0)+nvl(ppr.subprj_oth_act_cost_to_date_tc,0)
11038 + nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0)) <> 0 ) -- 4417665 : making it <> 0 rather than >0
11039 OR
11040 ((nvl(ppr.ppl_act_effort_to_date,0)+nvl(ppr.eqpmt_act_effort_to_date,0)
11041 +nvl(ppr.subprj_ppl_act_effort,0)+nvl(ppr.subprj_eqpmt_act_effort,0)) <> 0) -- 4417665 : making it <> 0 rather than >0
11042 OR
11043 ((nvl(ppr.oth_etc_cost_tc,0)+nvl(ppr.ppl_etc_cost_tc,0)
11044 +nvl(ppr.eqpmt_etc_cost_tc,0)+nvl(ppr.subprj_oth_etc_cost_tc,0)
11045 +nvl(ppr.subprj_ppl_etc_cost_tc,0) +nvl(ppr.subprj_eqpmt_etc_cost_tc,0)) > 0)
11046 OR
11047 ((nvl(ppr.estimated_remaining_effort,0)+nvl(ppr.eqpmt_etc_effort,0)
11048 +nvl(ppr.subprj_ppl_etc_effort,0)+nvl(ppr.subprj_eqpmt_etc_effort,0)) > 0))
11049 AND ppr.current_flag in ('Y', 'W')
11050 AND ppr.structure_version_id is null;
11051
11052 CURSOR cur_ppc_task(c_task_id NUMBER, c_object_type VARCHAR2
11053 , c_project_id NUMBER, c_structure_type VARCHAR2)
11054 IS
11055 SELECT 'Y'
11056 FROM pa_percent_completes ppc
11057 WHERE ppc.task_id = c_task_id
11058 AND ppc.object_type = c_object_type
11059 AND ppc.project_id = c_project_id
11060 AND ppc.structure_type = c_structure_type
11061 AND ppc.published_flag = 'Y';
11062
11063 CURSOR cur_ppr_task(c_task_id NUMBER, c_object_type VARCHAR2
11064 , c_project_id NUMBER, c_structure_type VARCHAR2)
11065 IS
11066 SELECT 'Y'
11067 FROM pa_progress_rollup ppr
11068 WHERE ppr.proj_element_id = c_task_id
11069 AND ppr.object_type = c_object_type
11070 AND ppr.project_id = c_project_id
11071 AND ppr.structure_type = p_structure_type
11072 AND (((nvl(ppr.oth_act_cost_to_date_tc,0)+nvl(ppr.ppl_act_cost_to_date_tc,0)
11073 +nvl(ppr.eqpmt_act_cost_to_date_tc,0)+nvl(ppr.subprj_oth_act_cost_to_date_tc,0)
11074 + nvl(ppr.subprj_ppl_act_cost_tc,0)+nvl(ppr.subprj_eqpmt_act_cost_tc,0)) <> 0 ) ---- 4417665 : making it <> 0 rather than >0
11075 OR
11076 ((nvl(ppr.ppl_act_effort_to_date,0)+nvl(ppr.eqpmt_act_effort_to_date,0)
11077 +nvl(ppr.subprj_ppl_act_effort,0)+nvl(ppr.subprj_eqpmt_act_effort,0)) <> 0) -- 4417665 : making it <> 0 rather than >0
11078 OR
11079 ((nvl(ppr.oth_etc_cost_tc,0)+nvl(ppr.ppl_etc_cost_tc,0)
11080 +nvl(ppr.eqpmt_etc_cost_tc,0)+nvl(ppr.subprj_oth_etc_cost_tc,0)
11081 +nvl(ppr.subprj_ppl_etc_cost_tc,0) +nvl(ppr.subprj_eqpmt_etc_cost_tc,0)) > 0)
11082 OR
11083 ((nvl(ppr.estimated_remaining_effort,0)+nvl(ppr.eqpmt_etc_effort,0)
11084 +nvl(ppr.subprj_ppl_etc_effort,0)+nvl(ppr.subprj_eqpmt_etc_effort,0)) > 0))
11085 AND ppr.current_flag in ('Y', 'W')
11086 AND ppr.structure_version_id is null;
11087
11088 l_return_value VARCHAR2(1) := 'N';
11089
11090 BEGIN
11091
11092
11093 -- 1). Default l_return_value.
11094
11095 l_return_value := 'N';
11096
11097 -- 2). If progress check and deletion is requested for a single assignment.
11098
11099 if (p_object_type = 'PA_ASSIGNMENTS') then
11100
11101 -- 2.1). If published progress exists for the assignment
11102 -- return ''Y'.
11103 -- 4469270 : Removed the check for ppc records
11104 --OPEN cur_ppc_assgn (p_object_id, p_task_id, p_object_type, p_project_id, p_structure_type);
11105 --FETCH cur_ppc_assgn INTO l_return_value;
11106 --CLOSE cur_ppc_assgn;
11107
11108 IF NVL(l_return_value,'N') <> 'Y' THEN
11109
11110 -- 2.2). If published progress does not exist for the assignment but latest published
11111 -- or working rollup records exist and actuals / etc > 0 for the assignment
11112 -- assignment return 'Y'.
11113
11114 OPEN cur_ppr_assgn (p_object_id, p_task_id, p_object_type, p_project_id, p_structure_type);
11115 FETCH cur_ppr_assgn INTO l_return_value;
11116 CLOSE cur_ppr_assgn;
11117
11118 l_return_value := NVL(l_return_value, 'N');
11119
11120 END IF;
11121
11122 -- 2.3). If no published progress exists for the assignment and actuals / etc are = 0 on
11123 -- the latest published or working rollup records for the assignment then delete
11124 -- the rollup records for the assignment.
11125
11126 if ((l_return_value = 'N') and (p_delete_progress_flag = 'Y')) then -- fix for Bug # 4140984.
11127
11128 DELETE FROM pa_progress_rollup ppr
11129 WHERE ppr.object_id = p_object_id
11130 AND ppr.proj_element_id = p_task_id
11131 AND ppr.object_type = p_object_type
11132 AND ppr.project_id = p_project_id
11133 AND ppr.structure_type = p_structure_type;
11134
11135 end if;
11136
11137 -- 3). If progress check and deletion is requested for all the assignments of a task.
11138
11139 elsif (p_object_type = 'PA_TASKS') then
11140
11141 -- 3.1). If published progress exists for any of the assignments for the task then
11142 -- return 'Y'.
11143 -- 4469270 : Removed the check for ppc records
11144 --OPEN cur_ppc_task (p_task_id, 'PA_ASSIGNMENTS'
11145 -- , p_project_id, p_structure_type);
11146 --FETCH cur_ppc_task INTO l_return_value;
11147 --CLOSE cur_ppc_task;
11148
11149 IF NVL(l_return_value,'N') <> 'Y' THEN
11150
11151 -- 3.2). If published progress does not exist for any of the assignments for the
11152 -- task but latest published or working rollup records exist and actuals / etc
11153 -- > 0 for any of the assignments return 'Y'.
11154
11155 OPEN cur_ppr_task (p_task_id, 'PA_ASSIGNMENTS'
11156 , p_project_id, p_structure_type);
11157 FETCH cur_ppr_task INTO l_return_value;
11158 CLOSE cur_ppr_task;
11159
11160 l_return_value := NVL(l_return_value, 'N');
11161
11162 END IF;
11163
11164 -- 3.3). If no published progress exists for any of the assignments and actuals / etc = 0
11165 -- on the latest published or working rollup records for all the assignments then
11166 -- delete all the rollup records for all the assignments for the given task.
11167
11168 if ((l_return_value = 'N') and (p_delete_progress_flag = 'Y')) then -- Fix for Bug # 4140984.
11169
11170 DELETE FROM pa_progress_rollup ppr
11171 WHERE ppr.proj_element_id = p_task_id
11172 AND ppr.object_type = 'PA_ASSIGNMENTS'
11173 AND ppr.project_id = p_project_id
11174 AND ppr.structure_type = p_structure_type;
11175
11176 end if;
11177
11178 end if;
11179
11180 return(l_return_value);
11181
11182 END check_prog_exists_and_delete;
11183
11184 -- End fix for Bug # 4073659.
11185
11186 /* Begin fix for bug # 4115607. */
11187
11188 FUNCTION get_app_cost_budget_cb_wor_ver(p_project_id NUMBER)
11189 return NUMBER
11190 IS
11191
11192 l_plan_version_id NUMBER := null;
11193 l_plan_type_id NUMBER;
11194 l_fp_options_id NUMBER;
11195 l_return_status VARCHAR2(2000);
11196 l_msg_data VARCHAR2(2000);
11197 l_msg_count NUMBER;
11198
11199 BEGIN
11200
11201 -- Call the FP API to get the approved cost budget current baselined version id.
11202
11203 l_plan_version_id := PA_FIN_PLAN_UTILS.Get_app_budget_cost_cb_ver(p_project_id);
11204
11205
11206 -- If approved cost budget current baselined version is null then get the approved cost budget
11207 -- plan_type_id.
11208
11209 if l_plan_version_id is null then
11210
11211 -- First get the approved cost budget plan_type_id.
11212
11213 PA_FIN_PLAN_UTILS.Get_Appr_Cost_Plan_Type_Info(
11214 p_project_id => p_project_id
11215 ,x_plan_type_id => l_plan_type_id
11216 ,x_return_status => l_return_status
11217 ,x_msg_count => l_msg_count
11218 ,x_msg_data => l_msg_data);
11219
11220 -- If plan_type_id is not null, use the plan_type_id to get the approved cost budget current working -- version id.
11221
11222 if (l_plan_type_id is not null) then
11223
11224 PA_FIN_PLAN_UTILS.Get_Curr_Working_Version_Info(
11225 p_project_id => p_project_id
11226 ,p_fin_plan_type_id => l_plan_type_id
11227 ,p_version_type => 'COST'
11228 ,x_fp_options_id => l_fp_options_id
11229 ,x_fin_plan_version_id => l_plan_version_id
11230 ,x_return_status => l_return_status
11231 ,x_msg_count => l_msg_count
11232 ,x_msg_data => l_msg_data);
11233
11234 end if;
11235
11236 end if;
11237
11238 return(l_plan_version_id);
11239
11240 END get_app_cost_budget_cb_wor_ver;
11241
11242 /* End fix for bug # 4115607. */
11243
11244 -- procedure to get resource raw and brdn rates
11245 --Bug 5027965. introduced parameter p_etc_cost_calc_mode which can be either COPY or DERIVE.
11246 --If its COPY then
11247 ----the etc cost in the current working workplan version will returned. In this case
11248 ----the parameter p_budget_version_id will contain the budget version id corresponding to the
11249 ----current working workplan version
11250 --If its DERIVE then
11251 ----the etc cost will be derived based on the rate setup on p_as_of_date
11252 ----p_budget_version_id will contain the budget version id corresponding to the latest published
11253 ---- workplan version
11254 procedure get_plan_costs_for_qty
11255 ( p_etc_cost_calc_mode IN VARCHAR2 DEFAULT 'DERIVE' --Bug 5027965
11256 ,p_resource_list_mem_id IN NUMBER
11257 ,p_project_id IN NUMBER
11258 ,p_task_id IN NUMBER
11259 ,p_as_of_date IN DATE
11260 ,p_structure_version_id IN NUMBER
11261 ,p_txn_currency_code IN VARCHAR
11262 ,p_rate_based_flag IN VARCHAR := 'Y'
11263 ,p_quantity IN NUMBER
11264 ,p_budget_version_id IN NUMBER -- Bug 4372462
11265 ,p_res_assignment_id IN NUMBER
11266 ,x_rawcost_tc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11267 ,x_brdncost_tc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11268 ,x_rawcost_pc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11269 ,x_brdncost_pc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11270 ,x_rawcost_fc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11271 ,x_brdncost_fc OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11272 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11273 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11274 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11275 )
11276
11277 IS
11278 x_res_brdn_mult_ovrate NUMBER;
11279 x_res_raw_rate NUMBER;
11280 L_PLAN_RES_CUR_CODE VARCHAR2(30);
11281 l_plan_res_burden_rate_etc NUMBER := null;
11282 l_plan_res_burden_rate_act NUMBER := null;
11283
11284 l_plan_res_raw_rate NUMBER := null;
11285
11286 l_plan_burden_multiplier_etc NUMBER := null;
11287 l_plan_burden_multiplier_act NUMBER := null;
11288
11289 l_rawcost_pc NUMBER := null;
11290 l_rawcost_fc NUMBER := null;
11291
11292 l_txn_currency_code VARCHAR2(30) := null;
11293
11294 l_project_curr_code VARCHAR2(30);
11295 l_project_rate_type VARCHAR2(30);
11296 l_project_rate_date DATE;
11297 l_project_exch_rate NUMBER;
11298
11299 l_projfunc_curr_code VARCHAR2(30);
11300 l_projfunc_cost_rate_type VARCHAR2(30);
11301 l_projfunc_cost_rate_date DATE;
11302 l_projfunc_cost_exch_rate NUMBER;
11303
11304 g1_debug_mode VARCHAR2(1);
11305 l_track_wp_cost_flag VARCHAR2(1) := 'Y'; -- Bug 3921624
11306
11307
11308 BEGIN
11309
11310 g1_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N');
11311 x_return_status := 'S';
11312
11313 IF g1_debug_mode = 'Y' THEN
11314
11315 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);
11316 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);
11317 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);
11318 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);
11319 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);
11320
11321 END IF;
11322
11323 l_track_wp_cost_flag := pa_fp_wp_gen_amt_utils.get_wp_track_cost_amt_flag(p_project_id);
11324
11325 IF NVL(l_track_wp_cost_flag, 'Y') = 'Y' THEN --Bug 3921624
11326
11327 --Bug 5027965
11328 IF p_etc_cost_calc_mode='DERIVE' THEN
11329
11330 -- 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.
11331
11332 l_plan_res_cur_code := null;
11333 l_plan_res_raw_rate := null;
11334 l_plan_burden_multiplier_etc := null;
11335 l_plan_res_burden_rate_etc := null;
11336
11337 PA_PROGRESS_UTILS.Get_Res_Rate_Burden_Multiplier(
11338 P_res_list_mem_id => p_resource_list_mem_id
11339 ,P_project_id => p_project_id
11340 ,P_task_id => p_task_id --bug 3927159
11341 ,p_as_of_date => p_as_of_date --bug 3927159
11342 ,p_structure_version_id => p_structure_version_id
11343 ,p_currency_code => p_txn_currency_code
11344 ,p_calling_mode => 'PLAN_RATES'
11345 ,x_resource_curr_code => l_plan_res_cur_code
11346 ,x_resource_raw_rate => l_plan_res_raw_rate
11347 ,x_resource_burden_rate => l_plan_res_burden_rate_etc
11348 ,X_burden_multiplier => l_plan_burden_multiplier_etc
11349 ,x_return_status => x_return_status
11350 ,x_msg_count => x_msg_count
11351 ,x_msg_data => x_msg_data);
11352 x_res_raw_rate := l_plan_res_raw_rate;
11353
11354 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11355 RAISE FND_API.G_EXC_ERROR;
11356 END IF;
11357
11358 -- 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.
11359 -- to do this we use the API: PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS() and we pass in
11360 -- txn_currency code into the project_currency_code parameter and read out the value of
11361 -- the parameter project_raw_cost.
11362
11363 IF ((p_rate_based_flag = 'Y') and (p_txn_currency_code <> l_plan_res_cur_code)) then
11364 l_rawcost_pc := null;
11365 l_txn_currency_code := p_txn_currency_code;
11366
11367 PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS(
11368 p_project_id => p_project_id
11369 ,p_task_id => p_task_id
11370 ,p_as_of_date => p_as_of_date
11371 ,p_txn_cost => l_plan_res_burden_rate_etc
11372 ,p_txn_curr_code => l_plan_res_cur_code
11373 ,p_structure_version_id => p_structure_version_id
11374 ,p_project_curr_code => l_txn_currency_code ---l_project_curr_code
11375 ,p_project_rate_type => l_project_rate_type
11376 ,p_project_rate_date => l_project_rate_date
11377 ,p_project_exch_rate => l_project_exch_rate
11378 ,p_project_raw_cost => l_rawcost_pc
11379 ,p_projfunc_curr_code => l_projfunc_curr_code
11380 ,p_projfunc_cost_rate_type => l_projfunc_cost_rate_type
11381 ,p_projfunc_cost_rate_date => l_projfunc_cost_rate_date
11382 ,p_projfunc_cost_exch_rate => l_projfunc_cost_exch_rate
11383 ,p_projfunc_raw_cost => l_rawcost_fc
11384 ,x_return_status => x_return_status
11385 ,x_msg_count => x_msg_count
11386 ,x_msg_data => x_msg_data
11387 );
11388
11389 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11390 RAISE FND_API.G_EXC_ERROR;
11391 END IF;
11392
11393 l_plan_res_burden_rate_etc := l_rawcost_pc;
11394 if (l_plan_res_raw_rate <> l_plan_res_burden_rate_etc) then
11395 l_rawcost_pc := null;
11396
11397 PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS(
11398 p_project_id => p_project_id
11399 ,p_task_id => p_task_id
11400 ,p_as_of_date => p_as_of_date
11401 ,p_txn_cost => l_plan_res_raw_rate
11402 ,p_txn_curr_code => l_plan_res_cur_code
11403 ,p_structure_version_id => p_structure_version_id
11404 ,p_project_curr_code => l_txn_currency_code ---l_project_curr_code
11405 ,p_project_rate_type => l_project_rate_type
11406 ,p_project_rate_date => l_project_rate_date
11407 ,p_project_exch_rate => l_project_exch_rate
11408 ,p_project_raw_cost => l_rawcost_pc
11409 ,p_projfunc_curr_code => l_projfunc_curr_code
11410 ,p_projfunc_cost_rate_type => l_projfunc_cost_rate_type
11411 ,p_projfunc_cost_rate_date => l_projfunc_cost_rate_date
11412 ,p_projfunc_cost_exch_rate => l_projfunc_cost_exch_rate
11413 ,p_projfunc_raw_cost => l_rawcost_fc
11414 ,x_return_status => x_return_status
11415 ,x_msg_count => x_msg_count
11416 ,x_msg_data => x_msg_data
11417 );
11418
11419 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11420 RAISE FND_API.G_EXC_ERROR;
11421 END IF;
11422 x_res_raw_rate := l_rawcost_pc;
11423 end if;
11424 END IF;
11425 if (p_rate_based_flag = 'N') then
11426 x_res_raw_rate := 1;
11427 x_res_brdn_mult_ovrate := l_plan_burden_multiplier_etc;
11428 -- 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);
11429 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);
11430 else
11431 x_res_brdn_mult_ovrate := l_plan_res_burden_rate_etc;
11432 --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);
11433 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);
11434 end if;
11435 --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);
11436 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);
11437
11438 -- convert all costs to proj curr and proj func curr
11439
11440 PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS(
11441 p_project_id => p_project_id
11442 ,p_task_id => p_task_id
11443 ,p_as_of_date => p_as_of_date
11444 ,p_txn_cost => x_rawcost_tc
11445 ,p_txn_curr_code => p_txn_currency_code
11446 ,p_structure_version_id => p_structure_version_id
11447 ,p_calling_mode => 'PLAN_RATES' -- Bug 4372462
11448 ,p_budget_version_id => p_budget_version_id -- Bug 4372462
11449 ,p_res_assignment_id => p_res_assignment_id -- Bug 4372462
11450 ,p_project_curr_code => l_project_curr_code
11451 ,p_project_rate_type => l_project_rate_type
11452 ,p_project_rate_date => l_project_rate_date
11453 ,p_project_exch_rate => l_project_exch_rate
11454 ,p_project_raw_cost => l_rawcost_pc
11455 ,p_projfunc_curr_code => l_projfunc_curr_code
11456 ,p_projfunc_cost_rate_type => l_projfunc_cost_rate_type
11457 ,p_projfunc_cost_rate_date => l_projfunc_cost_rate_date
11458 ,p_projfunc_cost_exch_rate => l_projfunc_cost_exch_rate
11459 ,p_projfunc_raw_cost => l_rawcost_fc
11460 ,x_return_status => x_return_status
11461 ,x_msg_count => x_msg_count
11462 ,x_msg_data => x_msg_data
11463 );
11464
11465 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11466 RAISE FND_API.G_EXC_ERROR;
11467 END IF;
11468 x_rawcost_pc := l_rawcost_pc;
11469 x_rawcost_fc := l_rawcost_fc;
11470
11471 PA_PROGRESS_UTILS.CONVERT_CURRENCY_AMOUNTS(
11472 p_project_id => p_project_id
11473 ,p_task_id => p_task_id
11474 ,p_as_of_date => p_as_of_date
11475 ,p_txn_cost => x_brdncost_tc
11476 ,p_txn_curr_code => p_txn_currency_code
11477 ,p_structure_version_id => p_structure_version_id
11478 ,p_calling_mode => 'PLAN_RATES' -- Bug 4372462
11479 ,p_budget_version_id => p_budget_version_id -- Bug 4372462
11480 ,p_res_assignment_id => p_res_assignment_id -- Bug 4372462
11481 ,p_project_curr_code => l_project_curr_code
11482 ,p_project_rate_type => l_project_rate_type
11483 ,p_project_rate_date => l_project_rate_date
11484 ,p_project_exch_rate => l_project_exch_rate
11485 ,p_project_raw_cost => l_rawcost_pc
11486 ,p_projfunc_curr_code => l_projfunc_curr_code
11487 ,p_projfunc_cost_rate_type => l_projfunc_cost_rate_type
11488 ,p_projfunc_cost_rate_date => l_projfunc_cost_rate_date
11489 ,p_projfunc_cost_exch_rate => l_projfunc_cost_exch_rate
11490 ,p_projfunc_raw_cost => l_rawcost_fc
11491 ,x_return_status => x_return_status
11492 ,x_msg_count => x_msg_count
11493 ,x_msg_data => x_msg_data
11494 );
11495
11496 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11497 RAISE FND_API.G_EXC_ERROR;
11498 END IF;
11499 x_brdncost_pc := l_rawcost_pc;
11500 x_brdncost_fc := l_rawcost_fc;
11501 --Bug 5027965
11502 ELSIF p_etc_cost_calc_mode='COPY' THEN
11503
11504 SELECT NVL(SUM(NVL(pbl.txn_raw_cost,0)-NVL(pbl.txn_init_raw_cost,0)),0),
11505 NVL(SUM(NVL(pbl.txn_burdened_cost,0)-NVL(pbl.txn_init_burdened_cost,0)),0),
11506 NVL(SUM(NVL(pbl.project_raw_cost,0)-NVL(pbl.project_init_raw_cost,0)),0),
11507 NVL(SUM(NVL(pbl.project_burdened_cost,0)-NVL(pbl.project_init_burdened_cost,0)),0),
11508 NVL(SUM(NVL(pbl.raw_cost,0)-NVL(pbl.init_raw_cost,0)),0),
11509 NVL(SUM(NVL(pbl.burdened_cost,0)-NVL(pbl.init_burdened_cost,0)),0)
11510 INTO x_rawcost_tc,
11511 x_brdncost_tc,
11512 x_rawcost_pc,
11513 x_brdncost_pc,
11514 x_rawcost_fc,
11515 x_brdncost_fc
11516 FROM pa_budget_lines pbl,
11517 pa_resource_assignments pra
11518 WHERE pra.budget_version_id=p_budget_version_id
11519 AND pra.project_id=p_project_id
11520 AND pra.task_id=p_task_id
11521 AND pra.resource_list_member_id=p_resource_list_mem_id
11522 AND pbl.resource_assignment_id=pra.resource_assignment_id
11523 AND pbl.txn_currency_code=p_txn_currency_code;
11524
11525 END IF;
11526 END IF;
11527
11528
11529 EXCEPTION
11530
11531 WHEN FND_API.G_EXC_ERROR THEN
11532 x_return_status := FND_API.G_RET_STS_ERROR;
11533 x_msg_count := Fnd_Msg_Pub.count_msg;
11534
11535 -- 4537865
11536
11537 x_rawcost_tc := NULL ;
11538 x_brdncost_tc := NULL ;
11539 x_rawcost_pc := NULL ;
11540 x_brdncost_pc := NULL ;
11541 x_rawcost_fc := NULL ;
11542 x_brdncost_fc := NULL ;
11543
11544 WHEN OTHERS THEN
11545 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
11546 x_msg_count := 1;
11547 x_msg_data := SUBSTRB(SQLERRM,1,240);
11548
11549 -- 4537865
11550 x_rawcost_tc := NULL ;
11551 x_brdncost_tc := NULL ;
11552 x_rawcost_pc := NULL ;
11553 x_brdncost_pc := NULL ;
11554 x_rawcost_fc := NULL ;
11555 x_brdncost_fc := NULL ;
11556 RAISE;
11557 END get_plan_costs_for_qty;
11558
11559 /* Begin Fix for Bug # 4108270.*/
11560
11561 FUNCTION get_pc_from_sub_tasks_assgn
11562 (p_project_id NUMBER
11563 ,p_proj_element_id NUMBER
11564 ,p_structure_version_id NUMBER
11565 ,p_include_sub_tasks_flag VARCHAR2 := 'Y'
11566 ,p_structure_type VARCHAR2 := 'WORKPLAN'
11567 ,p_object_type VARCHAR2 := 'PA_TASKS'
11568 ,p_as_of_date DATE := null
11569 ,p_program_flag VARCHAR2 := 'Y' -- 4392189 : Program Reporting Changes - Phase 2
11570 )
11571 RETURN NUMBER
11572 IS
11573
11574 CURSOR cur_assgn( c_task_ver_id NUMBER, c_task_per_comp_deriv_method VARCHAR2
11575 , c_published_structure VARCHAR2, c_wp_rollup_method VARCHAR2
11576 , c_as_of_date DATE, c_structure_type VARCHAR2
11577 , c_structure_version_id NUMBER)
11578 IS
11579 SELECT asgn.resource_assignment_id resource_assignment_id
11580 , asgn.task_version_id task_version_id
11581 , 'PA_ASSIGNMENTS' object_type
11582 , asgn.resource_class_code resource_class_code
11583 , asgn.rate_based_flag rate_based_flag
11584 , decode(asgn.rate_based_flag,'Y','EFFORT','N','COST') assignment_type
11585 , ppr.PPL_ACT_EFFORT_TO_DATE + ppr.EQPMT_ACT_EFFORT_TO_DATE total_act_effort_to_date
11586 , ppr.EQPMT_ETC_EFFORT + ppr.estimated_remaining_effort total_etc_effort
11587 , 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
11588 , 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
11589 , 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
11590 , ppr.OTH_ETC_COST_TC + ppr.PPL_ETC_COST_TC + ppr.EQPMT_ETC_COST_TC total_etc_cost_tc
11591 , ppr.OTH_ETC_COST_PC + ppr.PPL_ETC_COST_PC + ppr.EQPMT_ETC_COST_PC total_etc_cost_pc
11592 , ppr.OTH_ETC_COST_FC + ppr.PPL_ETC_COST_FC + ppr.EQPMT_ETC_COST_FC total_etc_cost_fc
11593
11594 , decode(c_task_per_comp_deriv_method,'EFFORT'
11595 , ( nvl(ppr.PPL_ACT_EFFORT_TO_DATE,0)
11596 + nvl(ppr.EQPMT_ACT_EFFORT_TO_DATE,0))
11597 , ( nvl(ppr.OTH_ACT_COST_TO_DATE_PC,0)
11598 + nvl(ppr.PPL_ACT_COST_TO_DATE_PC,0)
11599 + nvl(ppr.EQPMT_ACT_COST_TO_DATE_PC,0))) earned_value
11600 , decode(c_wp_rollup_method, 'COST'
11601 , nvl(ppr.OTH_ACT_COST_TO_DATE_PC,0)
11602 + nvl(ppr.PPL_ACT_COST_TO_DATE_PC,0)
11603 + nvl(ppr.EQPMT_ACT_COST_TO_DATE_PC,0)
11604 + nvl(ppr.OTH_ETC_COST_PC,0)
11605 + nvl(ppr.PPL_ETC_COST_PC,0)
11606 + nvl(ppr.EQPMT_ETC_COST_PC,0)
11607 , 'EFFORT'
11608 , decode(rate_based_flag,'N', 0,
11609 nvl(ppr.PPL_ACT_EFFORT_TO_DATE,0)
11610 + nvl(ppr.EQPMT_ACT_EFFORT_TO_DATE,0)
11611 + nvl(ppr.EQPMT_ETC_EFFORT,0)
11612 + nvl(ppr.estimated_remaining_effort,0)), 0) bac_value_in_rollup_method
11613 , decode(c_task_per_comp_deriv_method,'EFFORT'
11614 , ( NVL( decode( asgn.rate_based_flag, 'Y',
11615 decode( asgn.resource_class_code,
11616 'PEOPLE', nvl(ppr.PPL_ACT_EFFORT_TO_DATE,0)
11617 + nvl(ppr.estimated_remaining_effort,
11618 decode(sign(nvl(asgn.planned_quantity,0)
11619 -nvl(ppr.PPL_ACT_EFFORT_TO_DATE,0)), -1, 0,
11620 nvl( asgn.planned_quantity-ppr.PPL_ACT_EFFORT_TO_DATE,0))),
11621 'EQUIPMENT', nvl(ppr.EQPMT_ACT_EFFORT_TO_DATE,0)
11622 + nvl(ppr.EQPMT_ETC_EFFORT,
11623 decode(sign(nvl(asgn.planned_quantity,0)
11624 -nvl(ppr.EQPMT_ACT_EFFORT_TO_DATE,0)), -1, 0,
11625 nvl( asgn.planned_quantity-ppr.EQPMT_ACT_EFFORT_TO_DATE,0)))),0),0)
11626 ),
11627 ( NVL( decode( asgn.resource_class_code,
11628 'FINANCIAL_ELEMENTS',
11629 nvl(ppr.OTH_ACT_COST_TO_DATE_PC,0) + nvl(ppr.OTH_ETC_COST_PC,
11630 decode(sign(nvl(asgn.planned_bur_cost_proj_cur,0)
11631 -nvl(ppr.OTH_ACT_COST_TO_DATE_PC,0)), -1, 0,
11632 nvl(asgn.planned_bur_cost_proj_cur-ppr.OTH_ACT_COST_TO_DATE_PC,0))),
11633 'MATERIAL_ITEMS',
11634 nvl(ppr.OTH_ACT_COST_TO_DATE_PC,0) + nvl(ppr.OTH_ETC_COST_PC,
11635 decode(sign(nvl(asgn.planned_bur_cost_proj_cur,0)
11636 -nvl(ppr.OTH_ACT_COST_TO_DATE_PC,0)), -1, 0,
11637 nvl( asgn.planned_bur_cost_proj_cur-ppr.OTH_ACT_COST_TO_DATE_PC,0))),
11638 'PEOPLE',
11639 nvl(ppr.PPL_ACT_COST_TO_DATE_PC,0) + nvl(ppr.PPL_ETC_COST_PC,
11640 decode(sign(nvl(asgn.planned_bur_cost_proj_cur,0)
11641 -nvl(ppr.PPL_ACT_COST_TO_DATE_PC,0)), -1, 0,
11642 nvl(asgn.planned_bur_cost_proj_cur-ppr.PPL_ACT_COST_TO_DATE_PC,0))),
11643 'EQUIPMENT',
11644 nvl(ppr.EQPMT_ACT_COST_TO_DATE_PC,0) + nvl(ppr.EQPMT_ETC_COST_PC,
11645 decode(sign(nvl(asgn.planned_bur_cost_proj_cur,0)
11646 -nvl(ppr.EQPMT_ACT_COST_TO_DATE_PC,0)), -1, 0,
11647 nvl(asgn.planned_bur_cost_proj_cur-ppr.EQPMT_ACT_COST_TO_DATE_PC,0)))),
11648 nvl(asgn.planned_bur_cost_proj_cur,0)
11649 ))) bac_value_in_task_deriv
11650 FROM
11651 pa_task_asgmts_v asgn
11652 , pa_progress_rollup ppr
11653 WHERE asgn.task_version_id = c_task_ver_id
11654 AND asgn.project_id = p_project_id ---4871809
11655 AND asgn.task_id = p_proj_element_id
11656 AND asgn.ta_display_flag = 'Y'
11657 AND asgn.project_id = ppr.project_id
11658 AND asgn.RESOURCE_LIST_MEMBER_ID = ppr.object_id
11659 AND asgn.task_id = ppr.proj_element_id
11660 AND ppr.object_type = 'PA_ASSIGNMENTS'
11661 AND ppr.as_of_date = pa_progress_utils.get_max_rollup_asofdate(asgn.project_id
11662 ,asgn.RESOURCE_LIST_MEMBER_ID, 'PA_ASSIGNMENTS'
11663 ,c_as_of_date,asgn.task_version_id, c_structure_type
11664 , decode(c_published_structure, 'Y', null, c_structure_version_id), asgn.task_id)
11665 AND ppr.current_flag <> 'W'
11666 AND ppr.structure_type = c_structure_type
11667 AND ((c_published_structure = 'Y' AND ppr.structure_version_id is null)
11668 OR (c_published_structure = 'N'
11669 AND ppr.structure_version_id = c_structure_version_id))
11670 UNION ALL
11671 SELECT asgn.resource_assignment_id resource_assignment_id
11672 , asgn.task_version_id task_version_id
11673 , 'PA_ASSIGNMENTS' object_type
11674 , asgn.resource_class_code resource_class_code
11675 , asgn.rate_based_flag rate_based_flag
11676 , decode(asgn.rate_based_flag,'Y','EFFORT','N','COST') assignment_type
11677 , to_number(null) total_act_effort_to_date
11678 , to_number(null) total_etc_effort
11679 , to_number(null) total_act_cost_to_date_tc
11680 , to_number(null) total_act_cost_to_date_pc
11681 , to_number(null) total_act_cost_to_date_fc
11682 , to_number(null) total_etc_cost_tc
11683 , to_number(null) total_etc_cost_pc
11684 , to_number(null) total_etc_cost_fc
11685 , to_number(null) earned_value
11686 , to_number(null) bac_value_in_rollup_method
11687 , decode(c_task_per_comp_deriv_method,'EFFORT',
11688 decode(asgn.rate_based_flag,'Y',
11689 decode(asgn.resource_class_code,'PEOPLE'
11690 , asgn.planned_quantity, 'EQUIPMENT'
11691 , asgn.planned_quantity, 0),0)
11692 ,asgn.planned_bur_cost_proj_cur) bac_value_in_task_deriv
11693 FROM
11694 pa_task_asgmts_v asgn
11695 WHERE asgn.task_version_id = c_task_ver_id
11696 AND asgn.project_id = p_project_id ---4871809
11697 AND asgn.task_id = p_proj_element_id
11698 AND pa_progress_utils.get_max_rollup_asofdate(asgn.project_id
11699 , asgn.RESOURCE_LIST_MEMBER_ID
11700 , 'PA_ASSIGNMENTS',c_as_of_date
11701 ,asgn.task_version_id
11702 , c_structure_type
11703 , decode(c_published_structure, 'Y', null
11704 , c_structure_version_id)
11705 , asgn.task_id) IS NULL
11706 AND asgn.ta_display_flag = 'Y';
11707
11708 CURSOR cur_check_published_version(c_structure_version_id NUMBER, c_project_id NUMBER)
11709 IS
11710 SELECT decode(status.project_system_status_code, 'STRUCTURE_PUBLISHED', 'Y', 'N')
11711 FROM pa_proj_elem_ver_structure str
11712 , pa_project_statuses status
11713 where str.element_version_id = c_structure_version_id
11714 AND str.project_id = c_project_id
11715 AND str.status_code = status.project_status_code;
11716
11717 CURSOR cur_max_as_of_date_leq(c_project_id NUMBER, c_object_id NUMBER
11718 , c_object_type VARCHAR2
11719 , c_structure_type VARCHAR2
11720 , c_published_structure VARCHAR2
11721 , c_structure_version_id NUMBER
11722 , c_as_of_date DATE)
11723 IS
11724 SELECT max(as_of_date)
11725 FROM pa_progress_rollup
11726 WHERE project_id = c_project_id
11727 AND object_id = c_object_id
11728 AND object_type = c_object_type
11729 AND structure_type = c_structure_type
11730 AND ((c_published_structure = 'Y' AND structure_version_id is null)
11731 OR (c_published_structure = 'N'
11732 AND structure_version_id = c_structure_version_id)
11733 OR (c_structure_type = 'FINANCIAL' AND structure_version_id is null) /* Bug#6485646 */
11734 )
11735 AND current_flag <> 'W'
11736 AND as_of_date <= c_as_of_date;
11737
11738 CURSOR cur_max_as_of_date(c_project_id NUMBER, c_object_id NUMBER
11739 , c_object_type VARCHAR2, c_structure_type VARCHAR2
11740 , c_published_structure VARCHAR2
11741 , c_structure_version_id NUMBER)
11742 IS
11743 SELECT max(as_of_date)
11744 FROM pa_progress_rollup ppr, pa_proj_element_versions ppev -- Bug # 4658185.
11745 WHERE ppr.project_id = c_project_id
11746 AND ppr.object_id = c_object_id
11747 AND ppr.object_type = c_object_type
11748 AND ppr.structure_type = c_structure_type
11749 AND ppr.project_id = ppev.project_id -- Bug # 4658185.
11750 AND ppr.object_id = ppev.proj_element_id -- Bug # 4658185.
11751 AND ppr.object_version_id = ppev.element_version_id -- Bug # 4658185.
11752 AND ppev.parent_structure_version_id = c_structure_version_id -- Bug # 4658185.
11753 AND ((c_published_structure = 'Y' AND ppr.structure_version_id is null)
11754 OR (c_published_structure = 'N'
11755 AND ppr.structure_version_id = c_structure_version_id))
11756 AND ppr.current_flag <> 'W';
11757
11758
11759 CURSOR cur_percent_comp(c_project_id NUMBER, c_object_id NUMBER
11760 , c_object_type VARCHAR2, c_structure_type VARCHAR2
11761 , c_as_of_date DATE, c_published_structure VARCHAR2
11762 , c_structure_version_id NUMBER
11763 , c_program_flag VARCHAR2 -- 4392189 : Program Reporting Changes - Phase 2
11764 )
11765 IS
11766 SELECT nvl(ppr.completed_percentage,decode(nvl(c_program_flag,'Y'),'Y', ppr.eff_rollup_percent_comp, ppr.base_percent_complete))
11767 -- 4392189 : Program Reporting Changes - Phase 2 : Added Decode above
11768 FROM pa_progress_rollup ppr
11769 WHERE ppr.project_id = c_project_id
11770 and ppr.object_id = c_object_id
11771 and ppr.object_type = c_object_type
11772 and ppr.structure_type = c_structure_type
11773 and ((c_published_structure = 'Y' AND structure_version_id is null)
11774 OR (c_published_structure = 'N'
11775 AND structure_version_id = c_structure_version_id)
11776 OR (c_structure_type = 'FINANCIAL' AND structure_version_id is null) /* Bug#6485646 */
11777 )
11778 and current_flag <> 'W'
11779 and ppr.as_of_date = c_as_of_date;
11780
11781 CURSOR cur_base_pc_deriv_code(c_task_id NUMBER, c_project_id NUMBER
11782 , c_object_type VARCHAR2)
11783 IS
11784 SELECT decode(elem.base_percent_comp_deriv_code, null
11785 , ttype.base_percent_comp_deriv_code,'^'
11786 ,ttype.base_percent_comp_deriv_code,elem.base_percent_comp_deriv_code)
11787 FROM pa_proj_elements elem
11788 , pa_task_types ttype
11789 where elem.proj_element_id = c_task_id
11790 AND elem.project_id = c_project_id
11791 AND elem.object_type =c_object_type
11792 AND elem.type_id = ttype.task_type_id;
11793
11794 CURSOR cur_progress_rollup_method(c_project_id NUMBER, c_task_id NUMBER
11795 , c_structure_type VARCHAR2
11796 , c_object_type VARCHAR2)
11797 IS
11798 SELECT task_weight_basis_code
11799 from pa_proj_progress_attr pppa
11800 where pppa.project_id = c_project_id
11801 AND pppa.object_id = c_task_id
11802 AND pppa.structure_type = c_structure_type
11803 and pppa.object_type = c_object_type;
11804
11805 l_return_pc NUMBER := null;
11806 l_act_cost NUMBER := null;
11807 l_act_effort NUMBER := null;
11808 l_bac_value_in_rollup_method NUMBER := null;
11809 l_task_per_comp_deriv_method VARCHAR2(30) := null;
11810 l_progress_rollup_method VARCHAR2(30) := null;
11811
11812 l_published_structure VARCHAR2(1) := null;
11813 l_as_of_date DATE := null;
11814
11815 BEGIN
11816
11817 -- 1). Determine if the input structure_version_id corresponds to a published
11818 -- structure version or not.
11819
11820 OPEN cur_check_published_version(p_structure_version_id, p_project_id);
11821 FETCH cur_check_published_version INTO l_published_structure;
11822 CLOSE cur_check_published_version;
11823
11824 -- 2.1). If the input structure_type is 'FINANCIAL' and input as_of_date is not null
11825 -- then use the max as_of_date in the pa_progress_rollup_table less than or equal to
11826 -- the input as_of_date.
11827
11828 if ((p_structure_type = 'FINANCIAL') and (p_as_of_date is not null)) then
11829
11830 open cur_max_as_of_date_leq(p_project_id, p_proj_element_id, p_object_type
11831 , p_structure_type, l_published_structure
11832 , p_structure_version_id, p_as_of_date);
11833 fetch cur_max_as_of_date_leq into l_as_of_date;
11834 close cur_max_as_of_date_leq;
11835
11836 -- 2.2). Else use the latest as_of_date in the pa_progress_rollup table for the
11837 -- given task or structure.
11838
11839 else
11840
11841 open cur_max_as_of_date(p_project_id, p_proj_element_id, p_object_type
11842 , p_structure_type, l_published_structure
11843 , p_structure_version_id);
11844 fetch cur_max_as_of_date into l_as_of_date;
11845 close cur_max_as_of_date;
11846
11847 end if;
11848
11849 -- 3.1). If the p_include_sub_tasks_flag = 'Y' or if the input proj_element_id
11850 -- is a structure_id then return the rolled-up percent complete for the task
11851 -- from the pa_progress_rollup table for the above determined as_of_date.
11852
11853 if ((p_include_sub_tasks_flag = 'Y') or (p_object_type = 'PA_STRUCTURES')) then
11854
11855 open cur_percent_comp(p_project_id, p_proj_element_id, p_object_type
11856 , p_structure_type, l_as_of_date, l_published_structure
11857 , p_structure_version_id
11858 , p_program_flag) ; -- 4392189 : Program Reporting Changes - Phase 2
11859 fetch cur_percent_comp into l_return_pc;
11860 close cur_percent_comp;
11861
11862 -- 3.2). If the p_include_sub_tasks_flag = 'N' then return the rolled-up
11863 -- percent complete from all the assignments directly associated with
11864 -- the task.
11865
11866 else
11867
11868 open cur_base_pc_deriv_code(p_proj_element_id, p_project_id, p_object_type);
11869 fetch cur_base_pc_deriv_code into l_task_per_comp_deriv_method;
11870 close cur_base_pc_deriv_code;
11871
11872 open cur_progress_rollup_method(p_project_id, p_proj_element_id
11873 , p_structure_type, p_object_type);
11874 fetch cur_progress_rollup_method into l_progress_rollup_method;
11875 close cur_progress_rollup_method;
11876
11877 for cur_assgn_rec in cur_assgn(p_proj_element_id
11878 , l_task_per_comp_deriv_method
11879 , l_published_structure
11880 , l_progress_rollup_method
11881 , l_as_of_date
11882 , p_structure_type
11883 , p_structure_version_id)
11884 loop
11885
11886 l_act_cost := (l_act_cost + cur_assgn_rec.total_act_cost_to_date_pc);
11887 l_act_effort := (l_act_effort + cur_assgn_rec.total_act_effort_to_date);
11888 l_bac_value_in_rollup_method := (l_bac_value_in_rollup_method
11889 + cur_assgn_rec.bac_value_in_rollup_method);
11890
11891 end loop;
11892
11893 if (nvl(l_progress_rollup_method, 'COST') = 'EFFORT') then
11894
11895 l_return_pc := (l_act_effort / l_bac_value_in_rollup_method);
11896
11897 else
11898
11899 l_return_pc := (l_act_cost / l_bac_value_in_rollup_method);
11900
11901 end if;
11902
11903 end if;
11904
11905 -- Return the calculated value of percent complete.
11906
11907 return(l_return_pc);
11908
11909 END get_pc_from_sub_tasks_assgn;
11910
11911 /* End Fix for Bug # 4108270.*/
11912
11913
11914 /* Begin fix for Bug # 4185974. */
11915
11916 FUNCTION get_act_for_prev_asofdate (p_as_of_date IN DATE
11917 ,p_project_id IN NUMBER
11918 ,p_object_id IN NUMBER
11919 ,p_object_version_id IN NUMBER
11920 ,p_proj_element_id IN NUMBER := null
11921 ,p_effort_cost_flag IN VARCHAR2 := 'C'
11922 ,p_cost_type_flag IN VARCHAR2 := 'B'
11923 ,p_currency_flag IN VARCHAR2 := 'T') return NUMBER
11924 IS
11925
11926 l_act_for_prev_asofdate NUMBER := NULL;
11927
11928 -- Begin fix for Bug # 4185974.
11929
11930 cursor cur_proj_sharing_code is
11931 select structure_sharing_Code
11932 from pa_projects_all
11933 where project_id=p_project_id;
11934
11935 l_project_sharing_code VARCHAR2(150);
11936
11937 l_as_of_date DATE;
11938
11939 -- End fix for Bug # 4185974.
11940
11941 cursor cur_effort is
11942 select (nvl(ppr.ppl_act_effort_to_date,0)
11943 +nvl(ppr.eqpmt_act_effort_to_date,0)
11944 +nvl(ppr.subprj_ppl_act_effort,0)
11945 +nvl(ppr.subprj_eqpmt_act_effort,0)
11946 +nvl(ppr.oth_quantity_to_date,0)) act_effort_prev_asofdate
11947 from pa_progress_rollup ppr
11948 where ppr.project_id = p_project_id
11949 and ppr.object_id = p_object_id
11950 and ppr.structure_type = 'WORKPLAN'
11951 and ppr.proj_element_id = p_proj_element_id
11952 and ppr.structure_version_id is null
11953 and ppr.as_of_date = (select max(ppr2.as_of_date)
11954 from pa_progress_rollup ppr2
11955 where ppr2.project_id = p_project_id
11956 and ppr2.object_id = p_object_id
11957 and ppr2.structure_type = 'WORKPLAN'
11958 and ppr2.proj_element_id = p_proj_element_id
11959 and ppr2.structure_version_id is null
11960 and ppr2.current_flag <> 'W' -- Fix for Bug # 4249286.
11961 -- Fix for Bug # 4185974.
11962 and ppr2.as_of_date < l_as_of_date); -- Fix for Bug # 4185974.
11963 -- and ppr2.as_of_date < pa_progress_utils.get_prog_asofdate()+1);
11964 -- Fix for Bug # 4222702.
11965 -- Fix for Bug # 4185974.
11966
11967 --- adding 1 in pa_progress_utils.get_prog_asofdate so that it works fine for shared structures
11968 cursor cur_bur_cost_tc is
11969 select (nvl(ppr.oth_act_cost_to_date_tc,0)
11970 +nvl(ppr.ppl_act_cost_to_date_tc,0)
11971 +nvl(ppr.eqpmt_act_cost_to_date_tc,0)
11972 +nvl(ppr.subprj_oth_act_cost_to_date_tc,0)
11973 +nvl(ppr.subprj_ppl_act_cost_tc,0)
11974 +nvl(ppr.subprj_eqpmt_act_cost_tc,0)) act_bur_cost_tc_prev_asofdate
11975 from pa_progress_rollup ppr
11976 where ppr.project_id = p_project_id
11977 and ppr.object_id = p_object_id
11978 and ppr.structure_type = 'WORKPLAN'
11979 and ppr.proj_element_id = p_proj_element_id
11980 and ppr.structure_version_id is null
11981 and ppr.as_of_date = (select max(ppr2.as_of_date)
11982 from pa_progress_rollup ppr2
11983 where ppr2.project_id = p_project_id
11984 and ppr2.object_id = p_object_id
11985 and ppr2.structure_type = 'WORKPLAN'
11986 and ppr2.proj_element_id = p_proj_element_id
11987 and ppr2.structure_version_id is null
11988 and ppr2.current_flag <> 'W' -- Fix for Bug # 4249286.
11989 -- Fix for Bug # 4185974.
11990 and ppr2.as_of_date < l_as_of_date); -- Fix for Bug # 4185974.
11991 -- and ppr2.as_of_date < pa_progress_utils.get_prog_asofdate()+1);
11992 -- Fix for Bug # 4222702.
11993 -- Fix for Bug # 4185974.
11994 cursor cur_bur_cost_pc is
11995 select (nvl(ppr.oth_act_cost_to_date_pc,0)
11996 +nvl(ppr.ppl_act_cost_to_date_pc,0)
11997 +nvl(ppr.eqpmt_act_cost_to_date_pc,0)
11998 +nvl(ppr.subprj_oth_act_cost_to_date_pc,0)
11999 +nvl(ppr.subprj_ppl_act_cost_pc,0)
12000 +nvl(ppr.subprj_eqpmt_act_cost_pc,0)) act_bur_cost_pc_prev_asofdate
12001 from pa_progress_rollup ppr
12002 where ppr.project_id = p_project_id
12003 and ppr.object_id = p_object_id
12004 and ppr.structure_type = 'WORKPLAN'
12005 and ppr.proj_element_id = p_proj_element_id
12006 and ppr.structure_version_id is null
12007 and ppr.as_of_date = (select max(ppr2.as_of_date)
12008 from pa_progress_rollup ppr2
12009 where ppr2.project_id = p_project_id
12010 and ppr2.object_id = p_object_id
12011 and ppr2.structure_type = 'WORKPLAN'
12012 and ppr2.proj_element_id = p_proj_element_id
12013 and ppr2.structure_version_id is null
12014 and ppr2.current_flag <> 'W' -- Fix for Bug # 4249286.
12015 -- Fix for Bug # 4185974.
12016 and ppr2.as_of_date < l_as_of_date); -- Fix for Bug # 4185974.
12017 -- and ppr2.as_of_date < pa_progress_utils.get_prog_asofdate()+1);
12018 -- Fix for Bug # 4222702.
12019 -- Fix for Bug # 4185974.
12020
12021 cursor cur_raw_cost_tc is
12022 select (nvl(ppr.oth_act_rawcost_to_date_tc,0)
12023 +nvl(ppr.ppl_act_rawcost_to_date_tc,0)
12024 +nvl(ppr.eqpmt_act_rawcost_to_date_tc,0)
12025 +nvl(ppr.spj_oth_act_rawcost_to_date_tc,0)
12026 +nvl(ppr.subprj_ppl_act_rawcost_tc,0)
12027 +nvl(ppr.subprj_eqpmt_act_rawcost_tc,0)) act_raw_cost_tc_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 ppr.structure_version_id is null
12034 and ppr.as_of_date = (select max(ppr2.as_of_date)
12035 from pa_progress_rollup ppr2
12036 where ppr2.project_id = p_project_id
12037 and ppr2.object_id = p_object_id
12038 and ppr2.structure_type = 'WORKPLAN'
12039 and ppr2.proj_element_id = p_proj_element_id
12040 and ppr2.structure_version_id is null
12041 and ppr2.current_flag <> 'W' -- Fix for Bug # 4249286.
12042 -- Fix for Bug # 4185974.
12043 and ppr2.as_of_date < l_as_of_date); -- Fix for Bug # 4185974.
12044 -- and ppr2.as_of_date < pa_progress_utils.get_prog_asofdate()+1);
12045 -- Fix for Bug # 4222702.
12046 -- Fix for Bug # 4185974.
12047
12048 BEGIN
12049
12050 -- Begin fix for Bug # 4185974.
12051
12052 l_as_of_date := pa_progress_utils.get_prog_asofdate();
12053
12054 open cur_proj_sharing_code;
12055
12056 fetch cur_proj_sharing_code into l_project_sharing_code;
12057
12058 close cur_proj_sharing_code;
12059
12060 if (nvl(l_project_sharing_Code,'X') = 'SHARE_FULL') then
12061
12062 l_as_of_date := l_as_of_date + 1;
12063
12064 end if;
12065
12066 -- End fix for Bug # 4185974.
12067
12068 if (p_effort_cost_flag = 'E') then
12069
12070 open cur_effort;
12071 fetch cur_effort into l_act_for_prev_asofdate;
12072 close cur_effort;
12073
12074 else
12075
12076 if ((p_cost_type_flag = 'B') and (p_currency_flag = 'T')) then
12077
12078 open cur_bur_cost_tc;
12079 fetch cur_bur_cost_tc into l_act_for_prev_asofdate;
12080 close cur_bur_cost_tc;
12081
12082 elsif ((p_cost_type_flag = 'B') and (p_currency_flag = 'P')) then
12083
12084 open cur_bur_cost_pc;
12085 fetch cur_bur_cost_pc into l_act_for_prev_asofdate;
12086 close cur_bur_cost_pc;
12087
12088 elsif ((p_cost_type_flag = 'R') and (p_currency_flag = 'T')) then
12089
12090 open cur_raw_cost_tc;
12091 fetch cur_raw_cost_tc into l_act_for_prev_asofdate;
12092 close cur_raw_cost_tc;
12093
12094 end if;
12095
12096 end if;
12097
12098
12099 l_act_for_prev_asofdate := nvl(l_act_for_prev_asofdate,0);
12100
12101 /* 4378391 -ive act is allowed
12102 if (l_act_for_prev_asofdate < 0 ) then
12103
12104 l_act_for_prev_asofdate := 0;
12105
12106 end if; */
12107
12108 return(l_act_for_prev_asofdate);
12109
12110 END get_act_for_prev_asofdate;
12111
12112 /* End fix for Bug # 4185974. */
12113
12114
12115 -- Begin fix for Bug # 4319171.
12116
12117 function calc_act(p_ppl_cost_eff IN NUMBER := null
12118 , p_eqpmt_cost_eff IN NUMBER := null
12119 , p_oth_cost_eff IN NUMBER := null
12120 , p_subprj_ppl_cost_eff IN NUMBER := null
12121 , p_subprj_eqpmt_cost_eff IN NUMBER := null
12122 , p_subprj_oth_cost_eff IN NUMBER := null) return NUMBER
12123 is
12124
12125 l_calc_act NUMBER := null;
12126
12127 begin
12128
12129 if ((p_ppl_cost_eff is null)
12130 and (p_eqpmt_cost_eff is null)
12131 and (p_oth_cost_eff is null)
12132 and (p_subprj_ppl_cost_eff is null)
12133 and (p_subprj_eqpmt_cost_eff is null)
12134 and (p_subprj_oth_cost_eff is null)) then
12135
12136 l_calc_act := null;
12137
12138 else
12139
12140 l_calc_act := (nvl(p_ppl_cost_eff,0)
12141 + nvl(p_eqpmt_cost_eff,0)
12142 + nvl(p_oth_cost_eff,0)
12143 + nvl(p_subprj_ppl_cost_eff,0)
12144 + nvl(p_subprj_eqpmt_cost_eff,0)
12145 + nvl(p_subprj_oth_cost_eff,0));
12146
12147 end if;
12148
12149 return(l_calc_act);
12150
12151 end calc_act;
12152
12153 function calc_etc(p_planned_cost_eff IN NUMBER := null
12154 , p_ppl_cost_eff IN NUMBER := null
12155 , p_eqpmt_cost_eff IN NUMBER := null
12156 , p_oth_cost_eff IN NUMBER := null
12157 , p_subprj_ppl_cost_eff IN NUMBER := null
12158 , p_subprj_eqpmt_cost_eff IN NUMBER := null
12159 , p_subprj_oth_cost_eff IN NUMBER := null
12160 , p_oth_quantity IN NUMBER := null
12161 , p_act_cost_eff IN NUMBER := null) return NUMBER
12162 is
12163
12164 l_calc_etc NUMBER := null;
12165
12166 begin
12167
12168 if ((p_ppl_cost_eff is null)
12169 and (p_eqpmt_cost_eff is null)
12170 and (p_oth_cost_eff is null)
12171 and (p_subprj_ppl_cost_eff is null)
12172 and (p_subprj_eqpmt_cost_eff is null)
12173 and (p_subprj_oth_cost_eff is null)
12174 and (p_oth_quantity is null)) then
12175
12176
12177 if ((p_planned_cost_eff is null)
12178 and (p_act_cost_eff is null)) then
12179
12180 l_calc_etc := null;
12181
12182 elsif (p_act_cost_eff is null) then
12183
12184 l_calc_etc := p_planned_cost_eff;
12185
12186 elsif (p_planned_cost_eff is null) then
12187
12188
12189 l_calc_etc := 0;
12190
12191
12192 else
12193
12194 ---5726773 l_calc_etc := (nvl(p_planned_cost_eff,0) - nvl(p_act_cost_eff,0));
12195 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));
12196
12197 end if;
12198
12199 else
12200
12201 l_calc_etc := (nvl(p_ppl_cost_eff,0)
12202 + nvl(p_eqpmt_cost_eff,0)
12203 + nvl(p_oth_cost_eff,0)
12204 + nvl(p_subprj_ppl_cost_eff,0)
12205 + nvl(p_subprj_eqpmt_cost_eff,0)
12206 + nvl(p_subprj_oth_cost_eff,0)
12207 + nvl(p_oth_quantity,0));
12208
12209 end if;
12210
12211 /* 5726773
12212 if (l_calc_etc < 0) then
12213
12214 l_calc_etc := 0;
12215
12216 end if;
12217 */
12218
12219 return(l_calc_etc);
12220
12221 end calc_etc;
12222
12223 function calc_wetc(p_planned_cost_eff IN NUMBER := null
12224 , p_ppl_cost_eff IN NUMBER := null
12225 , p_eqpmt_cost_eff IN NUMBER := null
12226 , p_oth_cost_eff IN NUMBER := null
12227 , p_subprj_ppl_cost_eff IN NUMBER := null
12228 , p_subprj_eqpmt_cost_eff IN NUMBER := null
12229 , p_subprj_oth_cost_eff IN NUMBER := null
12230 , p_oth_quantity IN NUMBER := null) return NUMBER
12231 is
12232
12233 l_calc_wetc NUMBER := null;
12234
12235 begin
12236
12237 if ((p_planned_cost_eff is null)
12238 and (p_ppl_cost_eff is null)
12239 and (p_eqpmt_cost_eff is null)
12240 and (p_oth_cost_eff is null)
12241 and (p_subprj_ppl_cost_eff is null)
12242 and (p_subprj_eqpmt_cost_eff is null)
12243 and (p_subprj_oth_cost_eff is null)
12244 and (p_oth_quantity is null)) then
12245
12246 l_calc_wetc := null;
12247
12248 else
12249
12250 l_calc_wetc := nvl(p_planned_cost_eff,0) - (nvl(p_ppl_cost_eff,0)
12251 + nvl(p_eqpmt_cost_eff,0)
12252 + nvl(p_oth_cost_eff,0)
12253 + nvl(p_subprj_ppl_cost_eff,0)
12254 + nvl(p_subprj_eqpmt_cost_eff,0)
12255 + nvl(p_subprj_oth_cost_eff,0)
12256 + nvl(p_oth_quantity,0));
12257
12258 end if;
12259
12260 if (l_calc_wetc < 0) then
12261
12262 l_calc_wetc := 0;
12263
12264 end if;
12265
12266 return(l_calc_wetc);
12267
12268 end calc_wetc;
12269
12270 function calc_plan(p_ppl_cost_eff IN NUMBER := null
12271 , p_eqpmt_cost_eff IN NUMBER := null
12272 , p_oth_cost_eff IN NUMBER := null) return NUMBER
12273
12274 is
12275
12276 l_calc_plan NUMBER := null;
12277
12278 begin
12279
12280 if ((p_ppl_cost_eff is null)
12281 and (p_eqpmt_cost_eff is null)
12282 and (p_oth_cost_eff is null)) then
12283
12284 l_calc_plan := null;
12285
12286 else
12287
12288 l_calc_plan := (nvl(p_ppl_cost_eff,0)
12289 + nvl(p_eqpmt_cost_eff,0)
12290 + nvl(p_oth_cost_eff,0));
12291
12292 end if;
12293
12294 return(l_calc_plan);
12295
12296 end calc_plan;
12297
12298 -- End fix for Bug # 4319171.
12299
12300 -- Bug 4490532 Begin
12301 function get_self_amounts(p_amount_type IN VARCHAR2
12302 , p_structure_sharing_code IN VARCHAR2
12303 , p_prg_group IN NUMBER
12304 , p_project_id IN NUMBER
12305 , p_object_version_id IN NUMBER
12306 , p_proj_element_id IN NUMBER
12307 , p_as_of_date IN DATE
12308 , p_current_flag IN VARCHAR2
12309 , p_record_version_number IN NUMBER
12310 ) return NUMBER
12311 IS
12312
12313
12314 CURSOR c_get_assgn_prog_rec IS
12315 -- 4573486 Just consider ppl amounts, not eqp
12316 --select nvl(ppl_act_effort_to_date,0)+nvl(eqpmt_act_effort_to_date,0) asgn_act_eff
12317 -- ,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
12318 -- ,nvl(estimated_remaining_effort,0)+nvl(eqpmt_etc_effort,0) asgn_etc_eff
12319 -- ,nvl(ppl_etc_cost_pc,0)+nvl(eqpmt_etc_cost_pc,0)+nvl(oth_etc_cost_pc,0) agn_etc_cost
12320 select nvl(ppl_act_effort_to_date,0) asgn_act_eff
12321 ,nvl(ppl_act_cost_to_date_pc,0) asgn_act_cost
12322 ,nvl(estimated_remaining_effort,0) asgn_etc_eff
12323 ,nvl(ppl_etc_cost_pc,0) agn_etc_cost
12324 from pa_progress_rollup ppr
12325 where ppr.project_id = p_project_id
12326 and ppr.proj_element_id = p_proj_element_id
12327 and ppr.structure_type = 'WORKPLAN'
12328 and ppr.structure_version_id is null
12329 and ppr.object_type = 'PA_ASSIGNMENTS'
12330 and ppr.current_flag = p_current_flag
12331 and ppr.as_of_date = p_as_of_date;
12332
12333 l_actual_effort NUMBER;
12334 l_actual_cost NUMBER;
12335 l_etc_effort NUMBER;
12336 l_etc_cost NUMBER;
12337 l_need_fetch VARCHAR2(1):='N';
12338
12339 BEGIN
12340 IF p_prg_group is NULL THEN
12341 return to_number(null);
12342 END IF;
12343 IF g_self_project_id IS NOT NULL THEN
12344 IF g_self_project_id = p_project_id AND g_self_object_version_id = p_object_version_id
12345 AND g_self_as_of_date = p_as_of_date AND g_self_current_flag = p_current_flag
12346 AND g_self_rec_version_number = p_record_version_number
12347 THEN
12348 l_actual_effort := g_self_act_effort;
12349 l_actual_cost := g_self_act_cost;
12350 l_etc_effort := g_self_etc_effort;
12351 l_etc_cost := g_self_etc_cost;
12352 -- 4591308 : Added code below
12353 -- This is a temporary solution, ideally We should include progress_rollup_id also to this
12354 -- function and it should be passed from the veiws patvw018.sql and patvw007.sql.
12355 IF p_amount_type = 'ACT_COST' THEN
12356 l_need_fetch := 'Y';
12357 END IF;
12358 ELSE
12359 l_need_fetch := 'Y';
12360 END IF;
12361 ELSE
12362 l_need_fetch := 'Y';
12363 END IF;
12364
12365 IF l_need_fetch = 'Y' THEN
12366
12367 IF PA_PROGRESS_UTILS.check_assignment_exists(p_project_id, p_object_version_id, 'PA_TASKS') = 'Y' THEN
12368 l_actual_effort := null;
12369 l_actual_cost := null;
12370 l_etc_effort := null;
12371 l_etc_cost := null;
12372 ELSE
12373 OPEN c_get_assgn_prog_rec;
12374 FETCH c_get_assgn_prog_rec INTO l_actual_effort, l_actual_cost, l_etc_effort, l_etc_cost;
12375 CLOSE c_get_assgn_prog_rec;
12376 IF p_structure_sharing_code = 'SHARE_FULL' THEN
12377 l_actual_effort := null;
12378 l_actual_cost := null;
12379 END IF;
12380 END IF;
12381
12382 g_self_project_id := p_project_id;
12383 g_self_object_version_id := p_object_version_id;
12384 g_self_as_of_date := p_as_of_date;
12385 g_self_current_flag := p_current_flag;
12386 g_self_rec_version_number := p_record_version_number;
12387 g_self_act_effort := l_actual_effort;
12388 g_self_act_cost := l_actual_cost;
12389 g_self_etc_effort := l_etc_effort;
12390 g_self_etc_cost := l_etc_cost;
12391 END IF;
12392
12393 IF p_amount_type = 'ACT_COST' THEN
12394 return l_actual_cost;
12395 ELSIF p_amount_type = 'ACT_EFFORT' THEN
12396 return l_actual_effort;
12397 ELSIF p_amount_type = 'ETC_COST' THEN
12398 return l_etc_cost;
12399 ELSIF p_amount_type = 'ETC_EFFORT' THEN
12400 return l_etc_effort;
12401 ELSE
12402 return to_number(null);
12403 END IF;
12404 END get_self_amounts;
12405 -- Bug 4490532 End
12406
12407 function check_etc_overridden(p_plan_qty IN NUMBER,
12408 p_actual_qty IN NUMBER,
12409 p_etc_qty IN NUMBER) return varchar2 IS
12410 begin
12411 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
12412 return 'N';
12413 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
12414 return 'N';
12415 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
12416 return 'N';
12417 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
12418 return 'N';
12419 else return 'Y';
12420 end if;
12421 end check_etc_overridden;
12422
12423
12424 -- Bug 4871809, added this function for performance reasons, used in pa_progress_pvt
12425 function get_w_pub_prupid_asofdate(p_project_id IN number,
12426 p_object_id IN number,
12427 p_object_type IN varchar2,
12428 p_task_id IN number,
12429 p_as_of_date IN date,
12430 p_chk_task IN varchar2 default 'Y') return number is
12431 cursor get_work_prog_rollupid is
12432 select progress_rollup_id
12433 FROM pa_progress_rollup
12434 WHERE project_id = p_project_id
12435 AND object_id = p_object_id
12436 AND decode(p_chk_task,'Y',proj_element_id,p_task_id) = p_task_id
12437 AND object_type = p_object_type
12438 AND structure_type = 'WORKPLAN'
12439 AND structure_version_id is null
12440 AND as_of_date <= p_as_of_date
12441 AND current_flag = 'W';
12442
12443 cursor get_pub_prog_rollupid is
12444 select progress_rollup_id
12445 from pa_progress_rollup ppr
12446 WHERE ppr.project_id = p_project_id
12447 AND ppr.object_id = p_object_id
12448 AND decode(p_chk_task,'Y',ppr.proj_element_id,p_task_id) = p_task_id
12449 AND ppr.object_type = p_object_Type
12450 AND ppr.structure_type = 'WORKPLAN'
12451 AND ppr.structure_version_id is null
12452 AND ppr.as_of_date = (select max(as_of_date)
12453 from pa_progress_rollup
12454 where project_id = p_project_id
12455 AND object_id = p_object_id
12456 AND decode(p_chk_task,'Y',proj_element_id,p_task_id) = p_task_id
12457 AND object_type = p_object_Type
12458 AND structure_type = 'WORKPLAN'
12459 AND structure_version_id is null
12460 AND as_of_Date <= p_as_of_date);
12461
12462 l_prog_rid number;
12463 l_date date;
12464 begin
12465 open get_work_prog_rollupid;
12466 fetch get_work_prog_rollupid into l_prog_rid;
12467 close get_work_prog_rollupid;
12468
12469 if l_prog_rid is not null then
12470 return l_prog_rid;
12471 else
12472 open get_pub_prog_rollupid;
12473 fetch get_pub_prog_rollupid into l_prog_rid;
12474 close get_pub_prog_rollupid;
12475 if (l_prog_rid is not null) then
12476 return l_prog_rid;
12477 else
12478 return -99;
12479 end if;
12480 end if;
12481
12482 end get_w_pub_prupid_asofdate;
12483
12484 function get_w_pub_currflag(p_project_id IN number,
12485 p_object_id IN number,
12486 p_object_type IN varchar2,
12487 p_task_id IN number,
12488 p_chk_task IN varchar2 default 'N') return varchar2 is
12489 cursor get_w_pub_currflag is
12490 select current_flag
12491 FROM pa_progress_rollup
12492 WHERE project_id = p_project_id
12493 AND object_id = p_object_id
12494 AND object_type = p_object_type
12495 AND decode(p_chk_task,'Y',proj_element_id,nvl(p_task_id,-99)) = nvl(p_task_id,-99)
12496 AND structure_type = 'WORKPLAN'
12497 AND structure_version_id is null
12498 AND current_flag in ('W','Y')
12499 order by current_flag asc;
12500
12501 l_curr_flag varchar2(1):= null;
12502 begin
12503 open get_w_pub_currflag;
12504 fetch get_w_pub_currflag into l_curr_flag;
12505 close get_w_pub_currflag;
12506
12507 return nvl(l_curr_flag,'X');
12508
12509 end get_w_pub_currflag;
12510
12511 function check_ta_has_prog(
12512 p_project_id IN NUMBER,
12513 p_proj_element_id IN NUMBER,
12514 p_element_ver_id IN NUMBER ) return varchar2 is
12515 cursor C_TA_PROG_CURSOR is
12516 select 'Y'
12517 from
12518 pa_resource_assignments pra,
12519 pa_progress_rollup ppr
12520 where pra.ta_display_flag = 'N'
12521 and pra.wbs_element_version_id = p_element_ver_id
12522 and pra.project_id = p_project_id
12523 and ppr.project_id = p_project_id
12524 and ppr.object_type = 'PA_ASSIGNMENTS'
12525 and ppr.object_id = pra.resource_list_member_id
12526 and ppr.structure_type = 'WORKPLAN'
12527 and ppr.structure_version_id is null
12528 and ppr.proj_element_id = p_proj_element_id
12529 and rownum = 1;
12530
12531 l_result varchar2(10);
12532 begin
12533 open C_TA_PROG_CURSOR;
12534 fetch C_TA_PROG_CURSOR into l_result;
12535 if C_TA_PROG_CURSOR%FOUND THEN
12536 close C_TA_PROG_CURSOR;
12537 return 'Y';
12538 ELSE
12539 close C_TA_PROG_CURSOR;
12540 return 'N';
12541 END IF;
12542 end check_ta_has_prog;
12543
12544 --Bug 6664716
12545 -- This function is used to calculate the planned value prorated for the period and the amounts are rolled up
12546 -- to the parent tasks. This proc stores the planned value all the elements of the given structure id in
12547 -- temporary table the first time when it is called and uses the values from this table for next calls.
12548 PROCEDURE get_plan_value(p_project_id number, p_structure_version_id number, p_element_id number, p_as_of_date date)
12549
12550 IS
12551
12552 -- Bug 7259306 - Outer join added to the inner inline view for all 6 cursors on pa_progress_rollup table.
12553
12554 -- Working as of date
12555
12556 --This cursor retrieves the accumulated amounts for the periods before each task before as of date period
12557 cursor cur_accum_amts_w (p_project_id NUMBER, p_structure_version_id NUMBER, p_baseline_struc_id NUMBER,
12558 p_proj_element_id NUMBER,p_cal_id NUMBER, p_cal_type varchar, p_as_of_date date) is
12559 select time_id.proj_element_id proj_element_id
12560 ,time_id.as_of_date as_of_date
12561 ,sum(pfxaf.labor_hrs) labor_hours
12562 ,sum(pfxaf.equipment_hours) equipment_hours
12563 ,sum(pfxaf.brdn_cost) prj_brdn_cost
12564 from pji_fp_xbs_accum_f pfxaf,
12565 pa_budget_versions pbv,
12566 (
12567 select prog_date.proj_element_id proj_element_id,
12568 prog_date.as_of_date as_of_date,
12569 ptcpv.cal_period_id cal_period_id,
12570 ptcpv.name period_name,
12571 ptcpv.start_date pstart_date,
12572 ptcpv.end_date pend_date
12573 from
12574 PJI_TIME_CAL_PERIOD_V ptcpv,
12575 (
12576 select ppv.proj_element_id proj_element_id,
12577 nvl(p_as_of_date,(ppr.as_of_date)) as_of_date
12578 from pa_progress_rollup ppr,
12579 pa_proj_element_versions ppv
12580 where ppv.parent_structure_version_id=p_structure_version_id
12581 and ppv.project_id=p_project_id
12582 and ppv.proj_element_id=p_proj_element_id
12583 and ppr.object_id (+) =ppv.proj_element_id
12584 and ppr.object_version_id (+) =ppv.element_version_id
12585 and ppr.project_id (+) = ppv.project_id
12586 and ppr.structure_version_id (+) = ppv.parent_structure_version_id
12587 and ppr.structure_type (+) = 'WORKPLAN'
12588 and ppr.current_flag (+) = 'Y'
12589 )prog_date
12590 where ptcpv.calendar_id=p_cal_id
12591 -- and ptcpv.start_date <= prog_date.as_of_date
12592 and ptcpv.end_date <= prog_date.as_of_date
12593 )time_id
12594 where pfxaf.project_id=p_project_id
12595 and pfxaf.project_id=pbv.project_id
12596 and pbv.project_structure_version_id=p_baseline_struc_id
12597 and pbv.budget_version_id=pfxaf.plan_version_id
12598 and pfxaf.project_element_id=time_id.proj_element_id
12599 and pfxaf.wbs_rollup_flag='N'
12600 and pfxaf.rbs_aggr_level='T'
12601 and pfxaf.prg_rollup_flag='N'
12602 and pfxaf.period_type_id=32
12603 and pfxaf.calendar_type=p_cal_type
12604 and pfxaf.time_id=time_id.cal_period_id
12605 group by time_id.proj_element_id
12606 ,time_id.as_of_date ;
12607
12608 cursor cur_curr_prd_amts_w (p_project_id NUMBER, p_structure_version_id NUMBER, p_baseline_struc_id NUMBER,
12609 p_proj_element_id NUMBER,p_cal_id NUMBER, p_cal_type varchar, p_as_of_date date) is
12610 select pfxaf.project_element_id proj_element_id
12611 ,time_id.pstart_date pstart_date
12612 ,time_id.pend_date pend_date
12613 ,time_id.as_of_date as_of_date
12614 ,pfxaf.labor_hrs labor_hours
12615 ,pfxaf.equipment_hours equipment_hours
12616 ,pfxaf.brdn_cost prj_brdn_cost
12617 from pji_fp_xbs_accum_f pfxaf,
12618 pa_budget_versions pbv,
12619 (
12620 select prog_date.proj_element_id proj_element_id,
12621 prog_date.as_of_date as_of_date,
12622 ptcpv.cal_period_id cal_period_id,
12623 ptcpv.name period_name,
12624 ptcpv.start_date pstart_date,
12625 ptcpv.end_date pend_date
12626 from
12627 PJI_TIME_CAL_PERIOD_V ptcpv,
12628 (
12629 select ppv.proj_element_id proj_element_id,
12630 nvl(p_as_of_date,(ppr.as_of_date)) as_of_date
12631 from pa_progress_rollup ppr,
12632 pa_proj_element_versions ppv
12633 where ppv.parent_structure_version_id=p_structure_version_id
12634 and ppv.project_id=p_project_id
12635 and ppv.proj_element_id=p_proj_element_id
12636 and ppr.object_id (+) =ppv.proj_element_id
12637 and ppr.object_version_id (+) =ppv.element_version_id
12638 and ppr.project_id (+) = ppv.project_id
12639 and ppr.structure_version_id (+) = ppv.parent_structure_version_id
12640 and ppr.structure_type (+) = 'WORKPLAN'
12641 and ppr.current_flag (+) = 'Y'
12642 )prog_date
12643 where ptcpv.calendar_id=p_cal_id
12644 and ptcpv.start_date <= prog_date.as_of_date
12645 and ptcpv.end_date >prog_date.as_of_date
12646 )time_id
12647 where pfxaf.project_id=p_project_id
12648 and pfxaf.project_id=pbv.project_id
12649 and pbv.project_structure_version_id=p_baseline_struc_id
12650 and pbv.budget_version_id=pfxaf.plan_version_id
12651 and pfxaf.project_element_id=time_id.proj_element_id
12652 and pfxaf.wbs_rollup_flag='N'
12653 and pfxaf.rbs_aggr_level='T'
12654 and pfxaf.prg_rollup_flag='N'
12655 and pfxaf.period_type_id=32
12656 and pfxaf.calendar_type=p_cal_type
12657 and pfxaf.time_id=time_id.cal_period_id
12658 ;
12659
12660
12661
12662 -- Latest Published
12663 --This cursor retrieves the accumulated amounts for lastest published the periods before each task before as of date period
12664 cursor cur_accum_amts_l (p_project_id NUMBER, p_structure_version_id NUMBER, p_baseline_struc_id NUMBER,
12665 p_proj_element_id NUMBER,p_cal_id NUMBER, p_cal_type varchar, p_as_of_date date) is
12666 select time_id.proj_element_id proj_element_id
12667 ,time_id.as_of_date as_of_date
12668 ,sum(pfxaf.labor_hrs) labor_hours
12669 ,sum(pfxaf.equipment_hours) equipment_hours
12670 ,sum(pfxaf.brdn_cost) prj_brdn_cost
12671 from pji_fp_xbs_accum_f pfxaf,
12672 pa_budget_versions pbv,
12673 (
12674 select prog_date.proj_element_id proj_element_id,
12675 prog_date.as_of_date as_of_date,
12676 ptcpv.cal_period_id cal_period_id,
12677 ptcpv.name period_name,
12678 ptcpv.start_date pstart_date,
12679 ptcpv.end_date pend_date
12680 from
12681 PJI_TIME_CAL_PERIOD_V ptcpv,
12682 (
12683 select ppv.proj_element_id proj_element_id,
12684 nvl(p_as_of_date,(ppr.as_of_date)) as_of_date
12685 from pa_progress_rollup ppr,
12686 pa_proj_element_versions ppv
12687 where ppv.parent_structure_version_id=p_structure_version_id
12688 and ppv.project_id=p_project_id
12689 and ppv.proj_element_id=p_proj_element_id
12690 and ppr.object_id (+) =ppv.proj_element_id
12691 and ppr.object_version_id (+) =ppv.element_version_id
12692 and ppr.project_id (+) = ppv.project_id
12693 and ppr.structure_version_id (+) IS NULL
12694 and ppr.structure_type (+) = 'WORKPLAN'
12695 and ppr.current_flag (+) ='Y'
12696 --group by ppv.proj_element_id
12697 )prog_date
12698 where ptcpv.calendar_id=p_cal_id
12699 -- and ptcpv.start_date <= prog_date.as_of_date
12700 and ptcpv.end_date <= prog_date.as_of_date
12701 )time_id
12702 where pfxaf.project_id=p_project_id
12703 and pfxaf.project_id=pbv.project_id
12704 and pbv.project_structure_version_id=p_baseline_struc_id
12705 and pbv.budget_version_id=pfxaf.plan_version_id
12706 and pfxaf.project_element_id=time_id.proj_element_id
12707 and pfxaf.wbs_rollup_flag='N'
12708 and pfxaf.rbs_aggr_level='T'
12709 and pfxaf.prg_rollup_flag='N'
12710 and pfxaf.period_type_id=32
12711 and pfxaf.calendar_type=p_cal_type
12712 and pfxaf.time_id=time_id.cal_period_id
12713 group by time_id.proj_element_id
12714 ,time_id.as_of_date ;
12715
12716 cursor cur_curr_prd_amts_l (p_project_id NUMBER, p_structure_version_id NUMBER, p_baseline_struc_id NUMBER,
12717 p_proj_element_id NUMBER,p_cal_id NUMBER, p_cal_type varchar, p_as_of_date date) is
12718 select pfxaf.project_element_id proj_element_id
12719 ,time_id.pstart_date pstart_date
12720 ,time_id.pend_date pend_date
12721 ,time_id.as_of_date as_of_date
12722 ,pfxaf.labor_hrs labor_hours
12723 ,pfxaf.equipment_hours equipment_hours
12724 ,pfxaf.brdn_cost prj_brdn_cost
12725 from pji_fp_xbs_accum_f pfxaf,
12726 pa_budget_versions pbv,
12727 (
12728 select prog_date.proj_element_id proj_element_id,
12729 prog_date.as_of_date as_of_date,
12730 ptcpv.cal_period_id cal_period_id,
12731 ptcpv.name period_name,
12732 ptcpv.start_date pstart_date,
12733 ptcpv.end_date pend_date
12734 from
12735 PJI_TIME_CAL_PERIOD_V ptcpv,
12736 (
12737 select ppv.proj_element_id proj_element_id,
12738 nvl(p_as_of_date,(ppr.as_of_date)) as_of_date
12739 from pa_progress_rollup ppr,
12740 pa_proj_element_versions ppv
12741 where ppv.parent_structure_version_id=p_structure_version_id
12742 and ppv.project_id=p_project_id
12743 and ppv.proj_element_id=p_proj_element_id
12744 and ppr.object_id (+) =ppv.proj_element_id
12745 and ppr.object_version_id (+) =ppv.element_version_id
12746 and ppr.project_id (+) = ppv.project_id
12747 and ppr.structure_version_id (+) IS NULL
12748 and ppr.structure_type (+) = 'WORKPLAN'
12749 and ppr.current_flag (+) = 'Y'
12750 --group by ppv.proj_element_id
12751 )prog_date
12752 where ptcpv.calendar_id=p_cal_id
12753 and ptcpv.start_date <= prog_date.as_of_date
12754 and ptcpv.end_date >prog_date.as_of_date
12755 )time_id
12756 where pfxaf.project_id=p_project_id
12757 and pfxaf.project_id=pbv.project_id
12758 and pbv.project_structure_version_id=p_baseline_struc_id
12759 and pbv.budget_version_id=pfxaf.plan_version_id
12760 and pfxaf.project_element_id=time_id.proj_element_id
12761 and pfxaf.wbs_rollup_flag='N'
12762 and pfxaf.rbs_aggr_level='T'
12763 and pfxaf.prg_rollup_flag='N'
12764 and pfxaf.period_type_id=32
12765 and pfxaf.calendar_type=p_cal_type
12766 and pfxaf.time_id=time_id.cal_period_id
12767 ;
12768
12769
12770
12771 --Not a Latest Published Seperate cursor for previously published plan is used coz the as of the is picked from older version
12772 --if the passed structure id does have as of date in the progress_rollup table.
12773 --This cursor retrieves the accumulated amounts for lastest published the for periods before before as of date
12774 cursor cur_accum_amts_p (p_project_id NUMBER, p_structure_version_id NUMBER, p_baseline_struc_id NUMBER,
12775 p_proj_element_id NUMBER,p_cal_id NUMBER, p_cal_type varchar, p_as_of_date date) is
12776 select time_id.proj_element_id proj_element_id
12777 ,time_id.as_of_date as_of_date
12778 ,sum(pfxaf.labor_hrs) labor_hours
12779 ,sum(pfxaf.equipment_hours) equipment_hours
12780 ,sum(pfxaf.brdn_cost) prj_brdn_cost
12781 from pji_fp_xbs_accum_f pfxaf,
12782 pa_budget_versions pbv,
12783 (
12784 select prog_date.proj_element_id proj_element_id,
12785 prog_date.as_of_date as_of_date,
12786 ptcpv.cal_period_id cal_period_id,
12787 ptcpv.name period_name,
12788 ptcpv.start_date pstart_date,
12789 ptcpv.end_date pend_date
12790 from
12791 PJI_TIME_CAL_PERIOD_V ptcpv,
12792 (
12793 select ppv.proj_element_id proj_element_id,
12794 max(ppv.parent_structure_version_id) parent_structure_id,
12795 nvl(p_as_of_date,max(ppr.as_of_date)) as_of_date
12796 from pa_progress_rollup ppr,
12797 pa_proj_element_versions ppv
12798 where ppv.parent_structure_version_id<=p_structure_version_id
12799 and ppv.project_id=p_project_id
12800 and ppv.proj_element_id=p_proj_element_id
12801 and ppr.object_id (+) =ppv.proj_element_id
12802 and ppr.object_version_id (+) =ppv.element_version_id
12803 and ppr.project_id (+) = ppv.project_id
12804 and ppr.structure_version_id (+) IS NULL
12805 and ppr.structure_type (+) = 'WORKPLAN'
12806 and ppr.current_flag (+) <> 'W'
12807 group by ppv.proj_element_id
12808 )prog_date
12809 where ptcpv.calendar_id=p_cal_id
12810 -- and ptcpv.start_date <= prog_date.as_of_date
12811 and ptcpv.end_date <= prog_date.as_of_date
12812 )time_id
12813 where pfxaf.project_id=p_project_id
12814 and pfxaf.project_id=pbv.project_id
12815 and pbv.project_structure_version_id=p_baseline_struc_id
12816 and pbv.budget_version_id=pfxaf.plan_version_id
12817 and pfxaf.project_element_id=time_id.proj_element_id
12818 and pfxaf.wbs_rollup_flag='N'
12819 and pfxaf.rbs_aggr_level='T'
12820 and pfxaf.prg_rollup_flag='N'
12821 and pfxaf.period_type_id=32
12822 and pfxaf.calendar_type=p_cal_type
12823 and pfxaf.time_id=time_id.cal_period_id
12824 group by time_id.proj_element_id
12825 ,time_id.as_of_date ;
12826
12827 cursor cur_curr_prd_amts_p (p_project_id NUMBER, p_structure_version_id NUMBER, p_baseline_struc_id NUMBER,
12828 p_proj_element_id NUMBER,p_cal_id NUMBER, p_cal_type varchar, p_as_of_date date) is
12829 select pfxaf.project_element_id proj_element_id
12830 ,time_id.pstart_date pstart_date
12831 ,time_id.pend_date pend_date
12832 ,time_id.as_of_date as_of_date
12833 ,pfxaf.labor_hrs labor_hours
12834 ,pfxaf.equipment_hours equipment_hours
12835 ,pfxaf.brdn_cost prj_brdn_cost
12836 from pji_fp_xbs_accum_f pfxaf,
12837 pa_budget_versions pbv,
12838 (
12839 select prog_date.proj_element_id proj_element_id,
12840 prog_date.as_of_date as_of_date,
12841 ptcpv.cal_period_id cal_period_id,
12842 ptcpv.name period_name,
12843 ptcpv.start_date pstart_date,
12844 ptcpv.end_date pend_date
12845 from
12846 PJI_TIME_CAL_PERIOD_V ptcpv,
12847 (
12848 select ppv.proj_element_id proj_element_id,
12849 max(ppv.parent_structure_version_id) parent_structure_id,
12850 nvl(p_as_of_date,max(ppr.as_of_date)) as_of_date
12851 from pa_progress_rollup ppr,
12852 pa_proj_element_versions ppv
12853 where ppv.parent_structure_version_id<=p_structure_version_id
12854 and ppv.project_id=p_project_id
12855 and ppv.proj_element_id=p_proj_element_id
12856 and ppr.object_id (+) =ppv.proj_element_id
12857 and ppr.object_version_id (+) =ppv.element_version_id
12858 and ppr.project_id (+) = ppv.project_id
12859 and ppr.structure_version_id (+) IS NULL
12860 and ppr.structure_type (+) = 'WORKPLAN'
12861 and ppr.current_flag (+) <> 'W'
12862 group by ppv.proj_element_id
12863 )prog_date
12864 where ptcpv.calendar_id=p_cal_id
12865 and ptcpv.start_date <= prog_date.as_of_date
12866 and ptcpv.end_date >prog_date.as_of_date
12867 )time_id
12868 where pfxaf.project_id=p_project_id
12869 and pfxaf.project_id=pbv.project_id
12870 and pbv.project_structure_version_id=p_baseline_struc_id
12871 and pbv.budget_version_id=pfxaf.plan_version_id
12872 and pfxaf.project_element_id=time_id.proj_element_id
12873 and pfxaf.wbs_rollup_flag='N'
12874 and pfxaf.rbs_aggr_level='T'
12875 and pfxaf.prg_rollup_flag='N'
12876 and pfxaf.period_type_id=32
12877 and pfxaf.calendar_type=p_cal_type
12878 and pfxaf.time_id=time_id.cal_period_id
12879 ;
12880
12881 cursor cur_parent_tasks_info(p_project_id number, p_structure_version_id number) is
12882 select ppev1.proj_element_id proj_element_id,
12883 ppev2.proj_element_id parent_task_id,
12884 ppev1.wbs_level,
12885 nvl(ppe.baseline_start_date,ppevs.scheduled_start_date) sch_start_date,
12886 nvl(ppe.baseline_finish_date,ppevs.scheduled_finish_date) sch_end_date
12887 from pa_proj_element_versions ppev1,
12888 pa_proj_element_versions ppev2,
12889 pa_object_relationships por,
12890 pa_proj_elements ppe,
12891 pa_proj_elem_ver_schedule ppevs
12892 where ppev1.parent_structure_version_id = p_structure_version_id
12893 and ppev1.proj_element_id=ppe.proj_element_id
12894 and nvl(ppe.link_task_flag,'N') = 'N'
12895 and ppev1.element_version_id=ppevs.element_version_id
12896 and ppev1.element_version_id = por.object_id_to1
12897 and ppev2.element_version_id = por.object_id_from1
12898 and por.relationship_type = 'S'
12899 order by ppev1.wbs_level desc;
12900
12901 cursor c1(p_structure_version_id number) is
12902 select 'Y'
12903 from pa_proj_elem_ver_structure
12904 where project_id = p_project_id
12905 and element_version_id = p_structure_version_id
12906 and status_code = 'STRUCTURE_PUBLISHED';
12907
12908 l_cal_id number :=0;
12909 l_cal_type varchar2(1);
12910 l_parent_task_id number;
12911 l_temp_start_date date;
12912 l_temp_end_date date;
12913 l_temp_as_of_date date;
12914 l_multiplier number;
12915 l_flag varchar2(1) := 'N';
12916 l_work_struc_id number := -1;
12917 l_baseline_struc_id number := -1;
12918 l_as_of_date_ovr date := NULL;
12919 l_dummy varchar2(1) := 'N';
12920
12921 BEGIN
12922
12923 -- Initializing
12924 l_bcws_hash_tbl.delete();
12925
12926 l_prv_bcws_project_id := p_project_id;
12927 l_prv_bcws_struc_ver_id := p_structure_version_id;
12928
12929 l_work_struc_id := PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(p_project_id);
12930
12931 -- To decide the structure_version_id passed is latest published or current working or published version
12932 IF PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(p_project_id) = p_structure_version_id THEN
12933 l_flag := 'W';
12934 ELSIF PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_WP_VERSION(p_project_id) = p_structure_version_id THEN
12935 l_flag := 'L';
12936 ELSE
12937 -- Doing this handling for split structures where it is possible to have multiple working versions.
12938 OPEN c1(p_structure_version_id);
12939 FETCH c1 into l_dummy;
12940 CLOSE c1;
12941
12942 IF nvl(l_dummy,'N') = 'Y' THEN
12943 l_flag := 'P';
12944 ELSE
12945 l_flag := 'W';
12946 END IF;
12947
12948 END IF;
12949
12950 --Code for getting the calendar id.
12951 SELECT ppfo.cost_time_phased_code INTO l_cal_type
12952 FROM pa_proj_fp_options ppfo, pa_budget_versions pbv
12953 WHERE pbv.project_id=p_project_id
12954 AND pbv.project_structure_version_id=p_structure_version_id
12955 AND pbv.budget_version_id=ppfo.fin_plan_version_id
12956 AND ppfo.fin_plan_option_level_code='PLAN_VERSION';
12957
12958 -- To calculate planned value based on the existing functionality
12959 -- when workplan is non time phased.
12960 IF l_cal_type = 'N'
12961 THEN
12962 return;
12963 END IF;
12964
12965 IF l_cal_type = 'G' THEN
12966 SELECT ftcn.calendar_id INTO l_cal_id
12967 FROM fii_time_cal_name ftcn,
12968 pa_projects_all ppa,
12969 pa_implementations_all pia,
12970 gl_sets_of_books gsb
12971 WHERE ppa.project_id=p_project_id
12972 AND ppa.org_id=pia.org_id
12973 AND pia.set_of_books_id=gsb.set_of_books_id
12974 AND gsb.period_set_name=ftcn.period_set_name
12975 AND gsb.accounted_period_type=ftcn.period_type;
12976 ELSIF l_cal_type = 'P' THEN
12977 SELECT ftcn.calendar_id INTO l_cal_id
12978 FROM fii_time_cal_name ftcn,
12979 pa_projects_all ppa,
12980 pa_implementations_all pia
12981 WHERE ppa.project_id=p_project_id
12982 AND ppa.org_id=pia.org_id
12983 AND pia.period_set_name=ftcn.period_set_name
12984 AND pia.pa_period_type=ftcn.period_type;
12985 END IF;
12986
12987 -- Retriving baseline structure id to retrive planned values information from baselined structure.
12988 l_baseline_struc_id := PA_PROJECT_STRUCTURE_UTILS.Get_Baseline_Struct_Ver(p_project_id);
12989
12990 IF l_baseline_struc_id = -1 THEN
12991 l_baseline_struc_id := p_structure_version_id;
12992 END IF;
12993
12994 -- Populating the parent task id as well as calculating the com and rolls up the amounts to parent task.
12995 FOR cur_parent_tasks_info_rec in cur_parent_tasks_info(p_project_id, p_structure_version_id)
12996 LOOP
12997 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).parent_task_id := cur_parent_tasks_info_rec.parent_task_id;
12998 l_as_of_date_ovr := NULL;
12999 l_parent_task_id := NULL;
13000
13001 -- Bug 7259306
13002 -- In the absence of progress, the planned value is calculated based on the as of date displayed in the progress report tab.
13003 IF (PA_PROJECT_STRUCTURE_UTILS.CHECK_STRUC_VER_PUBLISHED(p_project_id, p_structure_version_id) = 'Y') AND
13004 (PA_PROGRESS_UTILS.PROJ_TASK_PROG_EXISTS(p_project_id, cur_parent_tasks_info_rec.proj_element_id) = 'N') THEN
13005 l_as_of_date_ovr := get_def_as_of_date_prog_report(p_project_id, cur_parent_tasks_info_rec.proj_element_id);
13006 END IF;
13007
13008 -- Overriding the as of date for showing the changed planned value in progress details page:
13009 IF l_ovr_task_id IS NOT NULL AND l_ovr_task_id <> -1 AND (l_ovr_task_id = p_element_id) THEN
13010 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
13011 l_as_of_date_ovr := p_as_of_date;
13012 END IF;
13013 END IF;
13014
13015 IF l_flag = 'W' THEN
13016 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,
13017 l_cal_id,l_cal_type, l_as_of_date_ovr)
13018 LOOP
13019 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).tlbr_hrs_baod := cur_accum_amts_w_rec.labor_hours;
13020 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).teqp_hrs_baod := cur_accum_amts_w_rec.equipment_hours;
13021 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).tpbc_hrs_baod := cur_accum_amts_w_rec.prj_brdn_cost;
13022
13023 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).as_of_date := cur_accum_amts_w_rec.as_of_date;
13024 END LOOP;
13025
13026 --This loop is used to populate the current period amounts.
13027 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,
13028 l_cal_id,l_cal_type, l_as_of_date_ovr)
13029 LOOP
13030 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_lbr_hrs := cur_curr_prd_amts_w_rec.labor_hours;
13031 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_eqp_hrs := cur_curr_prd_amts_w_rec.equipment_hours;
13032 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_pbc := cur_curr_prd_amts_w_rec.prj_brdn_cost;
13033
13034 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).pstart_date := cur_curr_prd_amts_w_rec.pstart_date;
13035 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).pend_date := cur_curr_prd_amts_w_rec.pend_date;
13036 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;
13037 END LOOP;
13038 ELSIF l_flag ='L' THEN
13039 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,
13040 l_cal_id,l_cal_type,l_as_of_date_ovr)
13041 LOOP
13042 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).tlbr_hrs_baod := cur_accum_amts_l_rec.labor_hours;
13043 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).teqp_hrs_baod := cur_accum_amts_l_rec.equipment_hours;
13044 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).tpbc_hrs_baod := cur_accum_amts_l_rec.prj_brdn_cost;
13045
13046 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).as_of_date := cur_accum_amts_l_rec.as_of_date;
13047 END LOOP;
13048
13049 --This loop is used to populate the current period amounts.
13050 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,
13051 l_cal_id,l_cal_type,l_as_of_date_ovr)
13052 LOOP
13053 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_lbr_hrs := cur_curr_prd_amts_l_rec.labor_hours;
13054 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_eqp_hrs := cur_curr_prd_amts_l_rec.equipment_hours;
13055 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_pbc := cur_curr_prd_amts_l_rec.prj_brdn_cost;
13056
13057 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).pstart_date := cur_curr_prd_amts_l_rec.pstart_date;
13058 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).pend_date := cur_curr_prd_amts_l_rec.pend_date;
13059 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;
13060 END LOOP;
13061 ELSIF l_flag ='P' THEN
13062
13063 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,
13064 l_cal_id,l_cal_type,l_as_of_date_ovr)
13065 LOOP
13066 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).tlbr_hrs_baod := cur_accum_amts_p_rec.labor_hours;
13067 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).teqp_hrs_baod := cur_accum_amts_p_rec.equipment_hours;
13068 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).tpbc_hrs_baod := cur_accum_amts_p_rec.prj_brdn_cost;
13069
13070 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).as_of_date := cur_accum_amts_p_rec.as_of_date;
13071 END LOOP;
13072
13073 --This loop is used to populate the current period amounts.
13074 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,
13075 l_cal_id,l_cal_type,l_as_of_date_ovr)
13076 LOOP
13077 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_lbr_hrs := cur_curr_prd_amts_p_rec.labor_hours;
13078 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_eqp_hrs := cur_curr_prd_amts_p_rec.equipment_hours;
13079 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_pbc := cur_curr_prd_amts_p_rec.prj_brdn_cost;
13080
13081 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).pstart_date := cur_curr_prd_amts_p_rec.pstart_date;
13082 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).pend_date := cur_curr_prd_amts_p_rec.pend_date;
13083 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;
13084 END LOOP;
13085
13086 END IF;
13087
13088
13089 -- TO populate the schedule dates from schedule dates table if baseline date is null
13090 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).sch_start_date := cur_parent_tasks_info_rec.sch_start_date;
13091 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).sch_end_date := cur_parent_tasks_info_rec.sch_end_date;
13092
13093 l_temp_start_date := NULL;
13094 l_temp_end_date := NULL;
13095 l_temp_as_of_date := NULL;
13096 l_multiplier := NULL;
13097
13098 l_temp_start_date := greatest(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).sch_start_date,
13099 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).pstart_date);
13100 l_temp_end_date := least(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).sch_end_date,
13101 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).pend_date);
13102 l_temp_as_of_date := l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).as_of_date;
13103
13104
13105 IF ((l_temp_start_date - l_temp_as_of_date) > 0) THEN
13106 l_multiplier := 0;
13107 ELSIF ((l_temp_as_of_date - l_temp_end_date) >= 0) THEN
13108 l_multiplier := 1;
13109 ELSIF (nvl((l_temp_end_date - l_temp_start_date),0) >= 0) then
13110 l_multiplier := nvl((trunc(l_temp_as_of_date) - trunc(l_temp_start_date)+1),0)/
13111 nvl((trunc(l_temp_end_date) - trunc(l_temp_start_date)+1),1);
13112 END IF;
13113
13114 IF l_multiplier IS NOT NULL THEN
13115 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).labor_hrs :=
13116 nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).labor_hrs,0) +
13117 nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).tlbr_hrs_baod,0) +
13118 nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_lbr_hrs,0) * l_multiplier;
13119
13120 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).equip_hrs :=
13121 nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).equip_hrs,0) +
13122 nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).teqp_hrs_baod,0) +
13123 nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_eqp_hrs,0) * l_multiplier;
13124
13125 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).prj_brdn_cost :=
13126 nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).prj_brdn_cost,0) +
13127 nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).tpbc_hrs_baod,0) +
13128 nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_pbc,0) * l_multiplier;
13129
13130 ELSE -- IF mulitplication factor is null then add complete curr period amount to
13131
13132 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).labor_hrs :=
13133 nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).labor_hrs,0) +
13134 nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).tlbr_hrs_baod,0) +
13135 nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_lbr_hrs,0);
13136
13137 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).equip_hrs :=
13138 nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).equip_hrs,0) +
13139 nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).teqp_hrs_baod,0) +
13140 nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_eqp_hrs,0);
13141
13142 l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).prj_brdn_cost :=
13143 nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).prj_brdn_cost,0) +
13144 nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).tpbc_hrs_baod,0) +
13145 nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).cur_pbc,0);
13146
13147 END IF;
13148
13149
13150 l_parent_task_id := l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).parent_task_id;
13151
13152 -- elements amounts are rolled upto corresponding parent task id.
13153 IF l_bcws_hash_tbl.exists('PA'||l_parent_task_id) THEN
13154 l_bcws_hash_tbl('PA'||l_parent_task_id).labor_hrs := nvl(l_bcws_hash_tbl('PA'||l_parent_task_id).labor_hrs,0) +
13155 nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).labor_hrs,0);
13156
13157 l_bcws_hash_tbl('PA'||l_parent_task_id).equip_hrs := nvl(l_bcws_hash_tbl('PA'||l_parent_task_id).equip_hrs,0) +
13158 nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).equip_hrs,0);
13159
13160 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) +
13161 nvl(l_bcws_hash_tbl('PA'||cur_parent_tasks_info_rec.proj_element_id).prj_brdn_cost,0);
13162 ELSE
13163 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);
13164
13165 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);
13166
13167 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);
13168 END IF;
13169 END LOOP;
13170
13171 EXCEPTION
13172 WHEN OTHERS THEN
13173 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROGRESS_UTILS',
13174 p_procedure_name => 'get_plan_value',
13175 p_error_text => SUBSTRB(SQLERRM,1,120));
13176
13177 END get_plan_value;
13178
13179 -- This is procedure is used to clear the cache.
13180 PROCEDURE clear_tmp_tables(p_task_id Number Default Null)
13181 IS
13182 BEGIN
13183
13184 l_prv_bcws_project_id := -1;
13185 l_prv_bcws_struc_ver_id := -1;
13186 l_ovr_task_id := p_task_id;
13187 END clear_tmp_tables;
13188 --Bug 6664716
13189
13190 -- Bug 7259306
13191 -- Returns the date displayed in the Progress Report tab
13192 -- Cursor is based on the VO - ProgressAsOfDatesVO which is used to populate the 'as of date' poplist
13193 FUNCTION get_def_as_of_date_prog_report(
13194 p_project_id pa_progress_rollup.project_id%TYPE,
13195 p_proj_element_id pa_progress_rollup.proj_element_id%TYPE,
13196 p_object_type pa_progress_rollup.object_type%TYPE := 'PA_TASKS'
13197 ) RETURN DATE IS
13198 l_return_date DATE;
13199
13200 CURSOR cur_get_def_as_of_date
13201 IS
13202 SELECT as_of_date FROM (
13203 SELECT ppe.project_id project_id,
13204 PA_PROGRESS_UTILS.AS_OF_DATE(ppe.project_id, ppe.proj_element_id, ppp.progress_cycle_id, ppe.object_type) as_of_date ,
13205 ppe.object_type object_type
13206 FROM pa_project_statuses po,
13207 pa_proj_progress_attr ppp,
13208 pa_proj_elements ppe
13209 WHERE ppe.project_id = ppp.project_id(+)
13210 AND ppp.structure_type (+) = 'WORKPLAN'
13211 AND ppe.project_id = p_project_id
13212 AND ppe.proj_element_id = p_proj_element_id
13213 AND ppe.object_type = p_object_type
13214 AND ((ppe.object_type IN ('PA_TASKS', 'PA_STRUCTURES')
13215 AND rownum <61)
13216 OR (ppe.object_type = 'PA_DELIVERABLES'
13217 AND rownum <11))
13218 MINUS
13219 SELECT to_number(p_project_id) project_id,
13220 to_date(NULL) as_of_date,
13221 TO_CHAR(p_object_type) object_type
13222 FROM dual
13223 )
13224 WHERE ROWNUM = 1;
13225
13226 BEGIN
13227 OPEN cur_get_def_as_of_date;
13228 FETCH cur_get_def_as_of_date INTO l_return_date;
13229 CLOSE cur_get_def_as_of_date;
13230
13231 -- Bug 7633088
13232 IF g_override_as_of_date is NOT NULL THEN
13233 RETURN ( g_override_as_of_date );
13234 ELSE
13235 RETURN ( l_return_date );
13236 END IF;
13237
13238 END get_def_as_of_date_prog_report;
13239
13240 -- Bug 7633088
13241 PROCEDURE set_override_as_of_date(p_as_of_date IN DATE) IS
13242 BEGIN
13243 g_override_as_of_date := p_as_of_date;
13244 END set_override_as_of_date;
13245
13246
13247 END PA_PROGRESS_UTILS;