[Home] [Help]
PACKAGE BODY: APPS.PA_PROJ_TASK_STRUC_PUB
Source
1 PACKAGE BODY PA_PROJ_TASK_STRUC_PUB AS
2 /* $Header: PAPSWRPB.pls 120.39.12010000.11 2008/12/04 14:41:23 rthumma ship $ */
3
4 G_PKG_NAME CONSTANT VARCHAR2(30) := 'PA_PROJ_TASK_STRUC_PUB';
5
6 Invalid_Arg_Exc_WP Exception ; -- Bug 2931183.
7
8 -- API name : create_default_structure
9 -- Type : PL/SQL Public procedure
10 -- Pre-reqs : None
11 -- Return Value : N/A
12 -- Prameters
13 -- p_dest_project_id IN NUMBER
14 -- p_dest_project_name IN VARCHAR2
15 -- p_dest_project_number IN VARCHAR2
16 -- p_dest_description IN VARCHAR2
17 -- p_dest_org_id IN NUMBER
18 -- x_msg_count OUT NUMBER
19 -- x_msg_data OUT VARCHAR2
20 -- x_return_status OUT VARCHAR2
21 --
22 -- History
23 --
24 -- 14-DEC-01 MAansari -Created
25 --
26 --
27
28 PROCEDURE create_default_structure
29 ( p_dest_project_id IN NUMBER
30 ,p_dest_project_name IN VARCHAR2
31 ,p_dest_project_number IN VARCHAR2
32 ,p_dest_description IN VARCHAR2
33 ,p_struc_type IN VARCHAR2 := 'WORKPLAN'
34 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
35 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
36 ,x_return_status OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
37
38 cursor get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
39 select nvl(max(version_number),0)+1
40 from pa_proj_elem_ver_structure
41 where project_id = c_project_id
42 and proj_element_id = c_proj_element_id
43 and status_code <> 'STRUCTURE_PUBLISHED';
44
45 X_ROW_ID VARCHAR2(18);
46 x_structure_id NUMBER;
47 x_struc_version_id NUMBER;
48 -- added for Bug: 45377865
49 l_new_struc_version_id NUMBER;
50 -- added for Bug: 4537865
51 l_status_code VARCHAR2(150);
52 l_struc_ver_number NUMBER;
53 l_ref_task_version_id NUMBER;
54 l_peer_or_sub VARCHAR2(4);
55 l_return_status VARCHAR2(1);
56 l_msg_count NUMBER;
57 l_msg_data VARCHAR2(2000);
58 x_task_version_id NUMBER;
59 x_pev_schedule_id NUMBER;
60 x_pev_structure_id NUMBER;
61 x_error_msg VARCHAR2(250);
62 l_old_wbs_level NUMBER;
63 API_ERROR EXCEPTION;
64 l_suffix VARCHAR2(250);
65 l_name VARCHAR2(250);
66 l_append VARCHAR2(250);
67
68 CURSOR cur_elem_ver_seq
69 IS
70 SELECT pa_proj_element_versions_s.nextval
71 FROM sys.dual;
72
73 BEGIN
74
75 --Clear Error Messages.
76 IF FND_MSG_PUB.count_msg = 0
77 THEN
78 FND_MSG_PUB.initialize;
79 END IF;
80
81 IF p_struc_type = 'WORKPLAN'
82 THEN
83 l_append := ': ';
84
85 select meaning
86 into l_suffix
87 from pa_lookups
88 where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
89 and lookup_code = 'WORKPLAN';
90
91 l_name := substr(p_dest_project_name||l_append||l_suffix, 1, 240);
92 ELSE
93 l_name := p_dest_project_name;
94 END IF;
95
96 Savepoint create_dflt_structure;
97 --For each project create 1 structure
98 PA_PROJECT_STRUCTURE_PVT1.Create_Structure(
99 p_project_id => p_dest_project_id
100 ,p_structure_number => p_dest_project_number
101 ,p_structure_name => l_name
102 ,p_structure_description => p_dest_description
103 ,p_calling_flag => p_struc_type
104 ,x_structure_id => x_structure_id
105 ,x_return_status => l_return_status
106 ,x_msg_count => l_msg_count
107 ,x_msg_data => l_msg_data
108 );
109
110
111 IF x_structure_id IS NULL OR l_return_status <> 'S'
112 THEN
113 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
114 ,p_msg_name => 'PA_PS_NO_STRUC_CREATED');
115 raise API_ERROR;
116 END IF;
117
118
119 --The following code is added to populate parent_structure version id.
120
121 OPEN cur_elem_ver_seq;
122 FETCH cur_elem_ver_seq INTO x_struc_version_id;
123 CLOSE cur_elem_ver_seq;
124 --End
125
126 -- Fix for 4657794 :- This is fix for regression introduced by 4537865
127 -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_new_struc_version_id
128 -- to x_struc_version_id
129
130 l_new_struc_version_id := x_struc_version_id ;
131
132 -- End 4657794
133
134 PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row(
135 X_ROW_ID => X_row_id
136 --,X_ELEMENT_VERSION_ID => x_struc_version_id * Commented for Bug Fix: 4537865
137 ,X_ELEMENT_VERSION_ID =>l_new_struc_version_id -- added for Bug fix: 4537865
138 ,X_PROJ_ELEMENT_ID => x_structure_id
139 ,X_OBJECT_TYPE => 'PA_STRUCTURES'
140 ,X_PROJECT_ID => p_dest_project_id
141 ,X_PARENT_STRUCTURE_VERSION_ID => x_struc_version_id
142 ,X_DISPLAY_SEQUENCE => null
143 ,X_WBS_LEVEL => null
144 ,X_WBS_NUMBER => null
145 ,X_ATTRIBUTE_CATEGORY => null
146 ,X_ATTRIBUTE1 => null
147 ,X_ATTRIBUTE2 => null
148 ,X_ATTRIBUTE3 => null
149 ,X_ATTRIBUTE4 => null
150 ,X_ATTRIBUTE5 => null
151 ,X_ATTRIBUTE6 => null
152 ,X_ATTRIBUTE7 => null
153 ,X_ATTRIBUTE8 => null
154 ,X_ATTRIBUTE9 => null
155 ,X_ATTRIBUTE10 => null
156 ,X_ATTRIBUTE11 => null
157 ,X_ATTRIBUTE12 => null
158 ,X_ATTRIBUTE13 => null
159 ,X_ATTRIBUTE14 => null
160 ,X_ATTRIBUTE15 => null
161 ,X_TASK_UNPUB_VER_STATUS_CODE => null
162 ,X_SOURCE_OBJECT_ID => p_dest_project_id
163 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
164 );
165 -- added for Bug fix: 4537865
166 x_struc_version_id := l_new_struc_version_id;
167 -- added for Bug fix: 4537865
168
169 IF x_struc_version_id IS NULL
170 THEN
171 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
172 ,p_msg_name => 'PA_PS_NO_STRUC_VER_CREATED');
173 raise API_ERROR;
174 END IF;
175
176 --Get structure version number
177 OPEN get_working_ver_num(p_dest_project_id, x_structure_id);
178 FETCH get_working_ver_num INTO l_struc_ver_number;
179 CLOSE get_working_ver_num;
180 l_status_code := 'STRUCTURE_WORKING';
181
182
183 PA_PROJ_ELEM_VER_STRUCTURE_PKG.insert_row(
184 X_ROWID => x_row_id
185 , X_PEV_STRUCTURE_ID => x_pev_structure_id
186 , X_ELEMENT_VERSION_ID => x_struc_version_id
187 , X_VERSION_NUMBER => l_struc_ver_number
188 , X_NAME => l_name
189 , X_PROJECT_ID => p_dest_project_id
190 , X_PROJ_ELEMENT_ID => x_structure_id
191 , X_DESCRIPTION => p_dest_description
192 , X_EFFECTIVE_DATE => null
193 , X_PUBLISHED_DATE => null
194 , X_PUBLISHED_BY => null
195 , X_CURRENT_BASELINE_DATE => null
196 , X_CURRENT_BASELINE_FLAG => 'N'
197 , X_CURRENT_BASELINE_BY => null
198 , X_ORIGINAL_BASELINE_DATE => null
199 , X_ORIGINAL_BASELINE_FLAG => 'N'
200 , X_ORIGINAL_BASELINE_BY => null
201 , X_LOCK_STATUS_CODE => NULL
202 , X_LOCKED_BY => NULL
203 , X_LOCKED_DATE => NULL
204 , X_STATUS_CODE => l_status_code
205 , X_WF_STATUS_CODE => NULL
206 , X_LATEST_EFF_PUBLISHED_FLAG => 'N'
207 , X_CHANGE_REASON_CODE => NULL
208 , X_RECORD_VERSION_NUMBER => 1
209 , X_CURRENT_WORKING_FLAG => 'N' /* Not applicable to default financial str. bug 3301192 */
210 , X_SOURCE_OBJECT_ID => p_dest_project_id
211 , X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
212 );
213
214
215 IF NVL( p_struc_type, 'WORKPLAN' ) = 'WORKPLAN'
216 THEN
217 PA_TASK_PUB1.Create_Schedule_Version(
218 p_element_version_id => x_struc_version_id
219 ,p_scheduled_start_date => SYSDATE
220 ,p_scheduled_end_date => SYSDATE
221 ,x_pev_schedule_id => x_pev_schedule_id
222 ,x_return_status => l_return_status
223 ,x_msg_count => l_msg_count
224 ,x_msg_data => l_msg_data
225 );
226
227 IF l_return_status <> 'S'
228 THEN
229 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
230 ,p_msg_name => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
231 raise api_error;
232 END IF;
233 END IF;
234
235
236 x_return_status := FND_API.G_RET_STS_SUCCESS;
237 EXCEPTION
238 WHEN API_ERROR THEN
239 x_return_status := FND_API.G_RET_STS_ERROR;
240 rollback to create_dflt_structure;
241 WHEN OTHERS THEN
242 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
243 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
244 p_procedure_name => 'CREATE_DEFAULT_STRUCTURE',
245 p_error_text => SUBSTRB(SQLERRM,1,240));
246 rollback to create_dflt_structure;
247 raise;
248 END create_default_structure;
249
250
251 -- API name : create_default_task_structure
252 -- Type : PL/SQL Public procedure
253 -- Pre-reqs : None
254 -- Return Value : N/A
255 -- Prameters
256 -- p_project_id IN NUMBER
257 -- x_msg_count OUT NUMBER
258 -- x_msg_data OUT VARCHAR2
259 -- x_return_status OUT VARCHAR2
260 --
261 -- History
262 --
263 -- 14-DEC-01 MAansari -Created
264 --
265 --
266
267 PROCEDURE create_default_task_structure
268 ( p_project_id IN NUMBER
269 ,p_struc_type IN VARCHAR2 := 'WORKPLAN'
270 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
271 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
272 ,x_return_status OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
273
274
275 CURSOR cur_pa_tasks2 IS
276 SELECT distinct top_task_id
277 FROM pa_tasks pt
278 WHERE project_id = p_project_id;
279
280 CURSOR cur_pa_tasks( c_top_task_id NUMBER )
281 IS
282 SELECT task_id, wbs_level, parent_task_id, task_number, task_name, description, carrying_out_organization_id
283 FROM pa_tasks pt
284 WHERE project_id = p_project_id
285 START WITH task_id = c_top_task_id
286 CONNECT BY PRIOR task_id = parent_task_id;
287
288
289 CURSOR parent_of_previous_task( c_task_version_id NUMBER )
290 IS
291 SELECT object_id_from1
292 FROM pa_object_relationships
293 WHERE object_id_to1 = c_task_version_id
294 and object_type_from in ('PA_STRUCTURES','PA_TASKS') -- bug 6429275
295 and object_type_to = 'PA_TASKS'
296 and relationship_type = 'S';
297
298
299 CURSOR cur_pa_projs
300 IS
301 SELECT 'x'
302 FROM pa_projects_all
303 WHERE split_cost_from_workplan_flag = 'Y'
304 AND project_id = p_project_id;
305
306 CURSOR cur_pa_proj_elem_vers2( c_strcu_ver_id NUMBER )
307 IS
308 SELECT 'x'
309 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
310 WHERE c.project_id = p_project_id
311 AND a.structure_type_id = b.structure_type_id
312 AND b.proj_element_id = c.proj_element_id
313 AND a.structure_type = 'WORKPLAN'
314 AND element_version_id = c_strcu_ver_id;
315
316 -- xxlu added for DFF attributes for calling create_schedule_version
317 CURSOR cur_ver_sch_attr_rec(c_element_version_id IN NUMBER) IS
318 SELECT *
319 FROM pa_proj_elem_ver_schedule
320 WHERE element_version_id = c_element_version_id
321 AND project_id = p_project_id
322 ;
323 l_ver_sch_attr_rec cur_ver_sch_attr_rec%ROWTYPE;
324 -- end xxlu changes
325
326 --hsiu added for parent_structure_id column
327 CURSOR get_structure(c_project_id NUMBER, c_struc_type VARCHAR2) IS
328 select a.proj_element_id
329 from pa_proj_elements a,
330 pa_proj_structure_types b,
331 pa_structure_types c
332 where a.project_id = c_project_id
333 and c.structure_type_class_code = c_struc_type
334 and c.structure_type_id = b.structure_type_id
335 and b.proj_element_id = a.proj_element_id;
336 l_structure_id NUMBER;
337
338 l_split_flag VARCHAR2(1);
339
340 X_ROW_ID VARCHAR2(18);
341 x_structure_id NUMBER;
342 x_struc_version_id NUMBER;
343 l_status_code VARCHAR2(150);
344 l_struc_ver_number NUMBER;
345 l_ref_task_version_id NUMBER;
346 l_peer_or_sub VARCHAR2(4);
347 l_return_status VARCHAR2(1);
348 l_msg_count NUMBER;
349 l_msg_data VARCHAR2(2000);
350 x_task_version_id NUMBER;
351 x_pev_schedule_id NUMBER;
352 x_pev_structure_id NUMBER;
353 x_error_msg VARCHAR2(250);
354 l_old_wbs_level NUMBER;
355 l_postfix VARCHAR2(2) := ' ';
356
357 API_ERROR EXCEPTION;
358
359 CURSOR cur_proj_elem_vers
360 IS
361 SELECT ppev.element_version_id
362 FROM pa_proj_element_versions ppev,
363 pa_proj_structure_types ppst,
364 pa_structure_types pst
365 WHERE ppev.project_id = p_project_id
366 AND ppev.object_type = 'PA_STRUCTURES'
367 AND ppev.proj_element_id = ppst.proj_element_id
368 AND pst.structure_type_id = ppst.structure_type_id
369 AND pst.structure_type = p_struc_type;
370
371 l_proj_element_id NUMBER;
372 l_prev_top_task_ver_id NUMBER;
373 l_dummy_char VARCHAR2(1);
374 BEGIN
375
376 --Clear Error Messages.
377 IF FND_MSG_PUB.count_msg = 0
378 THEN
379 FND_MSG_PUB.initialize;
380 END IF;
381
382
383 savepoint create_dflt_task_struc;
384 if p_project_id is null then
385 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
386 ,p_msg_name => 'PA_NO_PROJECT_ID');
387 end if;
388
389
390 l_ref_task_version_id := null;
391
392 FOR cur_pa_tasks2_rec IN cur_pa_tasks2 LOOP
393
394 FOR cur_pa_tasks_rec IN cur_pa_tasks( cur_pa_tasks2_rec.top_task_id ) LOOP
395
396
397
398 --The task will be created with a different ids if the structure is a WORKPLAN and split from COSTING.
399 --Otherwise same ids as in pa_tasks will be used to create tasks in pa_proj_elements if only one default
400 --structure is being created.
401 l_split_flag := null;
402 OPEN cur_pa_projs;
403 FETCH cur_pa_projs INTO l_split_flag;
404 CLOSE cur_pa_projs;
405
406 --For each project create 1 task
407 IF p_struc_type = 'WORKPLAN' AND l_split_flag IS NOT NULL
408 THEN
409 --l_proj_element_id := null;
410 SELECT pa_tasks_s.nextval INTO l_proj_element_id
411 FROM sys.dual;
412 l_postfix := '-'||SUBSTR( p_struc_type, 1, 1 );
413 --hsiu added for parent_structure_id column
414 OPEN get_structure(p_project_id, 'WORKPLAN');
415 FETCH get_structure into l_structure_id;
416 CLOSE get_structure;
417 ELSE
418 --hsiu added for parent_structure_id column
419 l_proj_element_id := cur_pa_tasks_rec.task_id;
420 OPEN get_structure(p_project_id, 'FINANCIAL');
421 FETCH get_structure into l_structure_id;
422 CLOSE get_structure;
423 END IF;
424 PA_PROJ_ELEMENTS_PKG.Insert_Row(
425 X_ROW_ID => X_ROW_ID
426 ,X_PROJ_ELEMENT_ID => l_proj_element_id
427 ,X_PROJECT_ID => p_project_id
428 ,X_OBJECT_TYPE => 'PA_TASKS'
429 ,X_ELEMENT_NUMBER => cur_pa_tasks_rec.task_number||l_postfix
430 ,X_NAME => cur_pa_tasks_rec.task_name
431 ,X_DESCRIPTION => cur_pa_tasks_rec.description
432 ,X_STATUS_CODE => '124' --- NOT_STARTED -- 124 bug 2826235
433 ,X_WF_STATUS_CODE => null
434 ,X_PM_PRODUCT_CODE => null
435 ,X_PM_TASK_REFERENCE => null
436 ,X_CLOSED_DATE => null
437 ,X_LOCATION_ID => null
438 ,X_MANAGER_PERSON_ID => null
439 ,X_CARRYING_OUT_ORGANIZATION_ID => cur_pa_tasks_rec.carrying_out_organization_id
440 ,X_TYPE_ID => 1
441 ,X_PRIORITY_CODE => null
442 ,X_INC_PROJ_PROGRESS_FLAG => 'N'
443 ,X_REQUEST_ID => null
444 ,X_PROGRAM_APPLICATION_ID => null
445 ,X_PROGRAM_ID => null
446 ,X_PROGRAM_UPDATE_DATE => null
447 ,X_LINK_TASK_FLAG => 'N'
448 ,X_ATTRIBUTE_CATEGORY => null
449 ,X_ATTRIBUTE1 => null
450 ,X_ATTRIBUTE2 => null
451 ,X_ATTRIBUTE3 => null
452 ,X_ATTRIBUTE4 => null
453 ,X_ATTRIBUTE5 => null
454 ,X_ATTRIBUTE6 => null
455 ,X_ATTRIBUTE7 => null
456 ,X_ATTRIBUTE8 => null
457 ,X_ATTRIBUTE9 => null
458 ,X_ATTRIBUTE10 => null
459 ,X_ATTRIBUTE11 => null
460 ,X_ATTRIBUTE12 => null
461 ,X_ATTRIBUTE13 => null
462 ,X_ATTRIBUTE14 => null
463 ,X_ATTRIBUTE15 => null
464 ,X_TASK_WEIGHTING_DERIV_CODE => NULl
465 ,X_WORK_ITEM_CODE => NULL
466 ,X_UOM_CODE => NULL
467 ,X_WQ_ACTUAL_ENTRY_CODE => NULL
468 ,X_TASK_PROGRESS_ENTRY_PAGE_ID => NULL
469 ,X_PARENT_STRUCTURE_ID => l_structure_id
470 ,X_PHASE_CODE => NULL
471 ,X_PHASE_VERSION_ID => NULL
472 ,X_SOURCE_OBJECT_ID => p_project_id
473 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
474 );
475
476
477 IF cur_pa_tasks%ROWCOUNT = 1
478 THEN
479
480 IF cur_pa_tasks2%ROWCOUNT = 1
481 THEN
482 OPEN cur_proj_elem_vers;
483 FETCH cur_proj_elem_vers INTO x_struc_version_id;
484 CLOSE cur_proj_elem_vers;
485
486 l_ref_task_version_id := x_struc_version_id;
487 l_peer_or_sub := 'SUB';
488 ELSE
489 l_ref_task_version_id := l_prev_top_task_ver_id;
490 l_peer_or_sub := 'PEER';
491 END IF;
492 ELSE
493 IF cur_pa_tasks_rec.wbs_level > l_old_wbs_level
494 THEN
495 l_peer_or_sub := 'SUB';
496 ELSIF cur_pa_tasks_rec.wbs_level = l_old_wbs_level
497 THEN
498 l_peer_or_sub := 'PEER';
499 ELSE
500 OPEN parent_of_previous_task( l_ref_task_version_id );
501 FETCH parent_of_previous_task INTO l_ref_task_version_id;
502 CLOSE parent_of_previous_task;
503 l_peer_or_sub := 'PEER';
504 END IF;
505 END IF;
506
507 PA_TASK_PVT1.Create_Task_Version(
508 p_ref_task_version_id => l_ref_task_version_id
509 ,p_peer_or_sub => l_peer_or_sub
510 ,p_task_id => l_proj_element_id
511 ,p_WEIGHTING_PERCENTAGE => 100
512 ,p_task_unpub_ver_status_code => 'WORKING'
513 ,x_task_version_id => x_task_version_id
514 ,x_return_status => l_return_status
515 ,x_msg_count => l_msg_count
516 ,x_msg_data => l_msg_data
517 );
518
519 IF cur_pa_tasks%ROWCOUNT = 1
520 THEN
521 l_prev_top_task_ver_id := x_task_version_id;
522 END IF;
523
524 IF l_return_status <> 'S'
525 THEN
526 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
527 ,p_msg_name => 'PA_PS_NO_TASK_VER_CREATED');
528 raise api_error;
529 END IF;
530
531 l_ref_task_version_id := x_task_version_id;
532 l_old_wbs_level := cur_pa_tasks_rec.wbs_level;
533
534 -- IF p_struc_type = 'WORKPLAN'
535
536 --if it is a workplan structure.
537 OPEN cur_pa_proj_elem_vers2( x_struc_version_id );
538 FETCH cur_pa_proj_elem_vers2 INTO l_dummy_char;
539 IF cur_pa_proj_elem_vers2%FOUND
540 THEN
541 -- xxlu added DFF attributes
542 OPEN cur_ver_sch_attr_rec(x_task_version_id);
543 FETCH cur_ver_sch_attr_rec INTO l_ver_sch_attr_rec;
544 CLOSE cur_ver_sch_attr_rec;
545
546 PA_TASK_PUB1.Create_Schedule_Version(
547 p_element_version_id => x_task_version_id
548 ,p_scheduled_start_date => SYSDATE
549 ,p_scheduled_end_date => SYSDATE
550 ,p_attribute_category => l_ver_sch_attr_rec.attribute_category
551 ,p_attribute1 => l_ver_sch_attr_rec.attribute1
552 ,p_attribute2 => l_ver_sch_attr_rec.attribute2
553 ,p_attribute3 => l_ver_sch_attr_rec.attribute3
554 ,p_attribute4 => l_ver_sch_attr_rec.attribute4
555 ,p_attribute5 => l_ver_sch_attr_rec.attribute5
556 ,p_attribute6 => l_ver_sch_attr_rec.attribute6
557 ,p_attribute7 => l_ver_sch_attr_rec.attribute7
558 ,p_attribute8 => l_ver_sch_attr_rec.attribute8
559 ,p_attribute9 => l_ver_sch_attr_rec.attribute9
560 ,p_attribute10 => l_ver_sch_attr_rec.attribute10
561 ,p_attribute11 => l_ver_sch_attr_rec.attribute11
562 ,p_attribute12 => l_ver_sch_attr_rec.attribute12
563 ,p_attribute13 => l_ver_sch_attr_rec.attribute13
564 ,p_attribute14 => l_ver_sch_attr_rec.attribute14
565 ,p_attribute15 => l_ver_sch_attr_rec.attribute15
566 ,x_pev_schedule_id => x_pev_schedule_id
567 ,x_return_status => l_return_status
568 ,x_msg_count => l_msg_count
569 ,x_msg_data => l_msg_data
570 );
571 -- end xxlu changes
572
573 IF l_return_status <> 'S'
574 THEN
575 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
576 ,p_msg_name => 'PA_PS_NO_TASK_SCH_VER_CREATED');
577 raise api_error;
578 END IF;
579 END IF;
580 CLOSE cur_pa_proj_elem_vers2;
581 END LOOP; --task loop end.
582 END LOOP;
583
584 x_return_status := FND_API.G_RET_STS_SUCCESS;
585 EXCEPTION
586 WHEN API_ERROR THEN
587 x_return_status := FND_API.G_RET_STS_ERROR;
588 rollback to create_dflt_task_struc;
589 WHEN OTHERS THEN
590 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
591 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
592 p_procedure_name => 'CREATE_DEFAULT_TASK_STRUCTURE',
593 p_error_text => SUBSTRB(SQLERRM,1,240));
594 rollback to create_dflt_task_struc;
595 raise;
596 END create_default_task_structure;
597
598
599 -- API name : create_task_structure
600 -- Type : PL/sql Public procedure
601 -- Pre-reqs : None
602 -- Return Value : N/A
603 -- Prameters
604 -- p_project_id IN NUMBER
605 -- x_msg_count OUT NUMBER
606 -- x_msg_data OUT VARCHAR2
607 -- x_return_status OUT VARCHAR2
608 --
609 -- History
610 --
611 -- 14-DEC-01 MAansari -Created
612 --
613 -- Notes: This api is called from form PAXPREPR.fmb ON-INSERT of tasks block.
614 -- The call is in PA_TASKS_PKG.ON_INSERT API.
615
616 PROCEDURE create_task_structure(
617 p_calling_module IN VARCHAR2 := 'FORMS'
618 ,p_project_id IN NUMBER
619 ,p_task_id IN NUMBER
620 ,p_parent_task_id IN NUMBER
621 ,p_ref_task_id IN NUMBER := -9999
622 ,p_task_number IN VARCHAR2
623 ,p_task_name IN VARCHAR2
624 ,p_task_description IN VARCHAR2
625 ,p_carrying_out_organization_id IN NUMBER
626 ,p_structure_type IN VARCHAR2 := 'FINANCIAL'
627 ,p_actual_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
628 ,p_actual_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
629 ,p_early_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
630 ,p_early_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
631 ,p_late_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
632 ,p_late_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
633 ,p_scheduled_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
634 ,p_scheduled_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
635 ,P_OBLIGATION_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
636 ,P_OBLIGATION_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
637 ,P_ESTIMATED_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
638 ,P_ESTIMATED_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
639 ,P_BASELINE_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
640 ,P_BASELINE_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
641 ,P_CLOSED_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
642 ,P_WQ_UOM_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
643 ,P_WQ_ITEM_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
644 ,P_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
645 ,P_WF_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
646 ,P_PM_SOURCE_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
647 ,P_PRIORITY_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
648 ,P_MILESTONE_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
649 ,P_CRITICAL_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
650 ,P_INC_PROJ_PROGRESS_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
651 ,P_LINK_TASK_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
652 ,P_CALENDAR_ID IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
653 ,P_PLANNED_EFFORT IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
654 ,P_DURATION IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
655 ,P_PLANNED_WORK_QUANTITY IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
656 ,P_TASK_TYPE IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
657 ,P_PM_SOURCE_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
658 ,p_location_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
659 ,p_manager_person_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
660 ,p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
661 ,p_parent_structure_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
662 ,p_phase_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
663 ,P_PHASE_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
664 ,p_create_task_version_only IN VARCHAR2 := 'N'
665 ,p_financial_task_flag IN VARCHAR2 := 'Y' --bug 3301192
666
667 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
668 ,p_ext_act_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
669 ,p_ext_remain_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
670 ,p_ext_sch_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
671 -- (end venkat) new params for bug #3450684 -------------------------------------------------
672
673 -- (begin) add new params bug - 3654243 -----
674 ,p_base_percent_comp_deriv_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
675 ,p_sch_tool_tsk_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
676 ,p_constraint_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
677 ,p_constraint_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
678 ,p_free_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
679 ,p_total_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
680 ,p_effort_driven_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
681 ,p_level_assignments_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
682 ,p_invoice_method IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
683 ,p_customer_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
684 ,p_gen_etc_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
685 -- (end) add new params bug - 3654243 -----
686
687 --Bug 6153503
688 ,p_validate_dff IN VARCHAR2 := 'N'
689 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
690 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
691 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
692 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
693 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
694 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
695 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
696 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
697 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
698 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
699 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
700 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
701 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
702 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
703 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
704 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
705 --Bug 6153503
706
707 ,x_task_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
708 ,x_task_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
709 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
710 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
711 ,x_return_status OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
712
713 X_ROW_ID VARCHAR2(18);
714 x_structure_id NUMBER;
715 x_struc_version_id NUMBER;
716 l_status_code VARCHAR2(150);
717 l_struc_ver_number NUMBER;
718 l_ref_task_version_id NUMBER;
719 l_peer_or_sub VARCHAR2(4);
720 l_return_status VARCHAR2(1);
721 l_msg_count NUMBER;
722 l_msg_data VARCHAR2(2000);
723 l_task_version_id NUMBER;
724 x_pev_schedule_id NUMBER;
725 x_pev_structure_id NUMBER;
726 x_error_msg VARCHAR2(250);
727 l_old_wbs_level NUMBER;
728 API_ERROR EXCEPTION;
729 l_task_id NUMBER;
730 l_dummy_char VARCHAR2(1);
731 l_task_number VARCHAR2(100);
732
733 -- <Bug#2843596>
734 l_sharing_enabled VARCHAR(1);
735
736 --hsiu: bug 2691868
737 l_scheduled_start_date DATE;
738 l_scheduled_finish_date DATE;
739
740 --hsiu added for task version status
741 CURSOR cur_proj_is_template
742 IS select 'Y'
743 from pa_projects_all
744 where project_id = p_project_id
745 and template_flag = 'Y';
746 l_template_flag VARCHAR2(1);
747 l_task_unpub_ver_status_code PA_PROJ_ELEMENT_VERSIONS.task_unpub_ver_status_code%TYPE;
748 l_parent_struc_ver_id NUMBER;
749
750 --end changes
751
752 CURSOR cur_proj_elem_vers( c_structure_version_id NUMBER )
753 IS
754 SELECT element_version_id
755 FROM pa_proj_element_versions
756 WHERE project_id = p_project_id
757 AND object_type = 'PA_TASKS'
758 AND parent_structure_version_id = c_structure_version_id
759 AND ( ( proj_element_id = ( select top_task_id
760 from pa_tasks
761 where task_id = p_ref_task_id ) AND p_structure_type = 'FINANCIAL' )
762 --OR ( proj_element_id = p_ref_task_id AND p_structure_type = 'WORKPLAN' )
763 )
764 --bug 2852891
765 UNION
766 SELECT element_version_id
767 FROM pa_proj_element_versions
768 WHERE project_id = p_project_id
769 AND object_type = 'PA_TASKS'
770 AND parent_structure_version_id = c_structure_version_id
771 AND p_structure_type = 'WORKPLAN'
772 AND display_sequence = ( SELECT max( display_sequence )
773 FROM pa_proj_element_versions
774 WHERE project_id = p_project_id
775 AND object_type = 'PA_TASKS'
776 AND parent_structure_version_id = c_structure_version_id
777 AND wbs_level = 1 --Since there is no parent task id passed therefore its always created as top task
778 AND display_sequence <= ( SELECT display_sequence
779 FROM pa_proj_element_versions
780 WHERE project_id = p_project_id
781 AND object_type = 'PA_TASKS'
782 AND parent_structure_version_id = c_structure_version_id
783 AND proj_element_id = p_ref_task_id )
784 )
785 --bug 2852891
786 ;
787
788 CURSOR cur_ref_task_ver_id( c_structure_version_id NUMBER )
789 IS
790 SELECT element_version_id
791 FROM pa_proj_element_versions
792 WHERE project_id = p_project_id
793 AND object_type = 'PA_TASKS'
794 AND parent_structure_version_id = c_structure_version_id
795 AND proj_element_id = p_ref_task_id
796 ;
797
798 --AMG bug
799 CURSOR cur_ref_task_ver_id2( c_structure_version_id NUMBER, c_parent_task_version_id NUMBER )
800 IS
801 SELECT element_version_id
802 FROM pa_proj_element_versions
803 WHERE project_id = p_project_id
804 AND object_type = 'PA_TASKS'
805 AND parent_structure_version_id = c_structure_version_id
806 and element_version_id in ( SELECT object_id_to1
807 FROM pa_object_relationships
808 WHERE object_id_from1 = c_parent_task_version_id
809 and relationship_type = 'S'
810 )
811 AND display_sequence = ( SELECT max( display_sequence )
812 FROM pa_proj_element_versions
813 WHERE project_id = p_project_id
814 AND object_type = 'PA_TASKS'
815 AND parent_structure_version_id = c_structure_version_id
816 and element_version_id in ( SELECT object_id_to1
817 FROM pa_object_relationships
818 WHERE object_id_from1 = c_parent_task_version_id
819 and relationship_type = 'S'
820 )
821 );
822
823 l_parent_task_version_id NUMBER;
824 --AMG bug
825
826 CURSOR cur_pa_proj_elem_vers2( c_task_version_id NUMBER )
827 IS
828 SELECT 'x'
829 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
830 WHERE c.project_id = p_project_id
831 AND a.structure_type_id = b.structure_type_id
832 AND b.proj_element_id = c.proj_element_id
833 AND a.structure_type = 'WORKPLAN'
834 AND element_version_id = ( SELECT parent_structure_version_id
835 FROM pa_proj_element_versions
836 WHERE element_version_id = c_task_version_id );
837
838
839 --The above sql will return the element_version id that will be served as a
840 --reference task version to create task version for p_task_id.
841
842 CURSOR cur_proj_elem_vers2( c_structure_version_id NUMBER, c_task_id NUMBER )
843 IS
844 SELECT element_version_id
845 FROM pa_proj_element_versions
846 WHERE project_id = p_project_id
847 AND proj_element_id = c_task_id
848 AND parent_structure_version_id = c_structure_version_id
849 AND object_type = 'PA_TASKS';
850
851 CURSOR cur_child_exists(c_task_ver_id NUMBER)
852 IS
853 select 'Y'
854 FROM pa_object_relationships
855 where object_id_from1 = c_task_ver_id
856 AND object_type_from IN ('PA_TASKS', 'PA_STRUCTURES') --Corrected 'PA_TASK' TO 'PA_TASKS' for Bug 4035526
857 and relationship_type = 'S';
858 l_child_exists VARCHAR2(1);
859
860 -- xxlu added for DFF attributes for calling create_schedule_version
861 CURSOR cur_ver_sch_attr_rec(c_element_version_id IN NUMBER) IS
862 SELECT *
863 FROM pa_proj_elem_ver_schedule
864 WHERE element_version_id = c_element_version_id
865 and project_id = p_project_id
866 ;
867 l_ver_sch_attr_rec cur_ver_sch_attr_rec%ROWTYPE;
868 -- end xxlu changes
869
870 --Adding the following cursor to avoid create_task_structure call if
871 --execute_update_project is called from import or publish apis.
872 CURSOR cur_pa_temp_import
873 IS
874 SELECT 'X' from PA_TEMP_IMPORT_TASKS
875 WHERE project_id = p_project_id;
876
877 /* Bug 2680486 -- Performance changes -- Added d.project_id= c.project_id
878 join in the following cursor*/
879
880 CURSOR cur_struc_ver_fin
881 IS
882 SELECT c.element_version_id
883 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
884 ,pa_proj_elem_ver_structure d
885 WHERE c.project_id = p_project_id
886 AND a.structure_type_id = b.structure_type_id
887 AND b.proj_element_id = c.proj_element_id
888 AND a.structure_type = p_structure_type
889 AND d.project_id = c.project_id
890 AND d.element_version_id = c.element_version_id
891 AND d.status_code = 'STRUCTURE_PUBLISHED'
892 AND d.latest_eff_published_flag = 'Y'
893 ;
894
895 /* Bug 2680486 -- Performance changes -- Added d.project_id= c.project_id
896 join in the following cursor*/
897
898 CURSOR cur_struc_ver_wp
899 IS
900 SELECT c.element_version_id
901 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
902 ,pa_proj_elem_ver_structure d
903 WHERE c.project_id = p_project_id
904 AND a.structure_type_id = b.structure_type_id
905 AND b.proj_element_id = c.proj_element_id
906 AND a.structure_type = p_structure_type
907 AND d.project_id = c.project_id
908 AND d.element_version_id = c.element_version_id
909 AND d.status_code = 'STRUCTURE_WORKING'
910 ;
911
912 --hsiu added for parent_structure_id column
913 CURSOR get_structure(c_project_id NUMBER, c_struc_type VARCHAR2) IS
914 select a.proj_element_id
915 from pa_proj_elements a,
916 pa_proj_structure_types b,
917 pa_structure_types c
918 where a.project_id = c_project_id
919 and c.structure_type_class_code = c_struc_type
920 and c.structure_type_id = b.structure_type_id
921 and b.proj_element_id = a.proj_element_id;
922 l_structure_id NUMBER;
923 l_weighting NUMBER(17,2);
924
925
926 --hsiu added for task status
927 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
928 select object_id_from1
929 from pa_object_relationships
930 where object_id_to1 = c_elem_ver_id
931 and object_type_to = 'PA_TASKS'
932 and relationship_type = 'S';
933 l_parent_ver_id NUMBER;
934 l_error_msg_code VARCHAR2(255);
935 l_structure_version_id NUMBER;
936
937 --proj conn
938 CURSOR c1( c_element_version_id NUMBER )
939 IS
940 SELECT wbs_level
941 FROM pa_proj_element_versions
942 WHERE element_version_id = c_element_version_id;
943
944 CURSOR c2( c_structure_version_id NUMBER, c_element_version_id NUMBER, c_wbs_level NUMBER )
945 IS
946 SELECT element_version_id
947 FROM pa_proj_element_versions
948 WHERE display_sequence = ( SELECT max( display_sequence) from pa_proj_element_versions
949 WHERE parent_structure_version_id = c_structure_version_id
950 AND display_sequence < ( SELECT display_sequence from pa_proj_element_versions
951 WHERE element_version_id = c_element_version_id )
952 AND wbs_level = c_wbs_level )
953 AND parent_structure_version_id = c_structure_version_id;
954 l_wbs_level NUMBER;
955
956 CURSOR cur_proj_wrk_attr
957 IS
958 select AUTO_PUB_UPON_CREATION_FLAG
959 from pa_proj_workplan_attr
960 where project_id = p_project_id;
961 l_auto_pub_flag VARCHAR2(1);
962 --proj conn
963 --bug 2736392
964 l_str_status_code VARCHAR2(150);
965 --bug 2736392
966 l_init_msg_list VARCHAR2(1);
967
968 /* Bug 2736392 Begin */
969 CURSOR cur_struc_ver_wp2
970 IS
971 SELECT c.element_version_id
972 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
973 ,pa_proj_elem_ver_structure d
974 WHERE c.project_id = p_project_id
975 AND a.structure_type_id = b.structure_type_id
976 AND b.proj_element_id = c.proj_element_id
977 AND a.structure_type = p_structure_type
978 AND d.project_id = c.project_id
979 AND d.element_version_id = c.element_version_id
980 AND (d.status_code = 'STRUCTURE_SUBMITTED' OR d.status_code='STRUCTURE_REJECTED' OR d.status_code= 'STRUCTURE_APPROVED')
981 ;
982 l_dummy_num number;
983 /* Bug 2736392 End */
984
985 l_tasks_out pa_project_pub.task_out_tbl_type ; --dummy variables. --bug 2732895
986
987 --bug 2824612
988 l_wq_planned_quantity NUMBER;
989 l_task_type_id NUMBER;
990 --bug 2824612
991
992 l_workplan_enabled VARCHAR2(1);
993
994 --3035902: process update flag changes
995 cursor get_task_type_id(c_proj_element_id NUMBER) IS
996 select type_id
997 from pa_proj_elements
998 where proj_element_id = c_proj_element_id;
999 --3035902: end process update flag changes
1000
1001 l_versioned VARCHAR2(1);
1002 l_shared VARCHAR2(1);
1003 l_published_ver_exists VARCHAR2(1);
1004
1005 /* Bug # 3420093 - Adding Progress Management modifications to create_task flow. */
1006
1007 l_add_task_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
1008 l_add_planned_effort PA_NUM_1000_NUM := PA_NUM_1000_NUM();
1009 l_add_start_date PA_DATE_1000_DATE := PA_DATE_1000_DATE();
1010 l_add_end_date PA_DATE_1000_DATE := PA_DATE_1000_DATE();
1011
1012 l_del_task_ver_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1013
1014 /* Bug # 3420093 - Adding Progress Management modifications to create_task flow. */
1015
1016 --Bug 6153503
1017 l_attribute_category VARCHAR2(30);
1018 l_attribute1 VARCHAR2(150);
1019 l_attribute2 VARCHAR2(150);
1020 l_attribute3 VARCHAR2(150);
1021 l_attribute4 VARCHAR2(150);
1022 l_attribute5 VARCHAR2(150);
1023 l_attribute6 VARCHAR2(150);
1024 l_attribute7 VARCHAR2(150);
1025 l_attribute8 VARCHAR2(150);
1026 l_attribute9 VARCHAR2(150);
1027 l_attribute10 VARCHAR2(150);
1028 l_attribute11 VARCHAR2(150);
1029 l_attribute12 VARCHAR2(150);
1030 l_attribute13 VARCHAR2(150);
1031 l_attribute14 VARCHAR2(150);
1032 l_attribute15 VARCHAR2(150);
1033 l_return_msg varchar2(2000);
1034 l_validate_status varchar2(1);
1035
1036 BEGIN
1037
1038 --Clear Error Messages.
1039 IF FND_MSG_PUB.count_msg = 0
1040 THEN
1041 FND_MSG_PUB.initialize;
1042 END IF;
1043
1044 SAVEPOINT create_task_struc;
1045
1046 OPEN cur_proj_is_template;
1047 FETCH cur_proj_is_template into l_template_flag;
1048 IF cur_proj_is_template%NOTFOUND THEN
1049 l_template_flag := 'N';
1050 END IF;
1051 CLOSE cur_proj_is_template;
1052
1053 OPEN cur_pa_temp_import;
1054 FETCH cur_pa_temp_import INTO l_dummy_char;
1055 IF cur_pa_temp_import%NOTFOUND
1056 THEN
1057
1058 l_versioned := PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id);
1059 l_shared := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id);
1060
1061 IF p_task_id IS NOT NULL AND p_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1062 THEN
1063 l_task_id := p_task_id;
1064 ELSE
1065 l_task_id := null;
1066 END IF;
1067
1068 IF p_structure_type = 'WORKPLAN'
1069 THEN
1070 --The following logic found in add_task_round_one api
1071 IF p_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_task_number IS NULL
1072 THEN
1073 l_task_number := P_PM_SOURCE_reference;
1074 ELSE
1075 l_task_number := p_task_number;
1076 END IF;
1077 --Get workplan structure id
1078
1079 -- <Bug#2843596>
1080 -- only retrieve cached value if projectId matches
1081 -- and the cached workplan struct id is not null
1082 IF (nvl(g_project_id,-99) = p_project_id and g_workplan_struct_id IS NOT NULL) THEN
1083 l_structure_id := g_workplan_struct_id;
1084 ELSE
1085 OPEN get_structure(p_project_id, 'WORKPLAN');
1086 FETCH get_structure into l_structure_id;
1087 CLOSE get_structure;
1088 g_project_id := p_project_id;
1089 g_workplan_struct_id := l_structure_id;
1090 END IF;
1091 -- </Bug#2843596>
1092
1093 IF p_structure_version_id IS NULL OR
1094 p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1095 THEN
1096 --proj conn
1097 --If auto publish upon creation is on and versioning is enabled then
1098 --update the workplan structure as working bcoz it is created as pub by copy structure.
1099 OPEN cur_proj_wrk_attr;
1100 FETCH cur_proj_wrk_attr INTO l_auto_pub_flag ;
1101 CLOSE cur_proj_wrk_attr;
1102 IF NVL( l_auto_pub_flag,'N' ) = 'Y' AND
1103 NVL( IS_WP_VERSIONING_ENABLED(p_project_id), 'N' ) = 'Y'
1104 THEN
1105 UPDATE pa_proj_elem_ver_structure
1106 set status_code = 'STRUCTURE_WORKING'
1107 where project_id = p_project_id
1108 and proj_element_id = l_structure_id;
1109 END IF;
1110 --proj conn
1111 OPEN cur_struc_ver_wp;
1112 FETCH cur_struc_ver_wp INTO l_structure_version_id;
1113 CLOSE cur_struc_ver_wp;
1114 IF l_structure_version_id IS NULL /* If auto publish upon creation is on then
1115 l_structure_version_id will be null */
1116 THEN
1117 DECLARE
1118
1119 /* Bug 2680486 -- Performance changes -- Added d.project_id= c.project_id
1120 join in the following cursor*/
1121
1122 CURSOR c1 is
1123 SELECT c.element_version_id
1124 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
1125 ,pa_proj_elem_ver_structure d
1126 WHERE c.project_id = p_project_id
1127 AND a.structure_type_id = b.structure_type_id
1128 AND b.proj_element_id = c.proj_element_id
1129 AND a.structure_type = p_structure_type
1130 AND d.project_id = c.project_id
1131 AND d.element_version_id = c.element_version_id
1132 AND d.status_code = 'STRUCTURE_PUBLISHED'
1133 ;
1134 begin
1135 OPEN C1;
1136 FETCH C1 into l_structure_version_id;
1137 CLOSE C1;
1138 end;
1139 END IF;
1140 ELSE
1141 l_structure_version_id := p_structure_version_id;
1142 END IF;
1143 ELSE
1144 l_task_number := p_task_number;
1145 --Get financial structure id
1146 -- <Bug#2843596>
1147 -- only retrieve cached value if projectId matches
1148 -- and the cached financial struct id is not null
1149 IF (nvl(g_project_id,-99) = p_project_id and g_financial_struct_id IS NOT NULL) THEN
1150 l_structure_id := g_financial_struct_id;
1151 ELSE
1152 OPEN get_structure(p_project_id, 'FINANCIAL');
1153 FETCH get_structure into l_structure_id;
1154 CLOSE get_structure;
1155 g_project_id := p_project_id;
1156 g_financial_struct_id := l_structure_id;
1157 END IF;
1158 -- </Bug#2843596>
1159
1160 IF p_structure_version_id IS NULL OR
1161 p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1162 THEN
1163 IF l_template_flag = 'N'
1164 THEN
1165
1166 /*IF p_calling_module = 'FORMS' --get the published version bcoz forms cannot add to working version
1167 --This is true only if there are any published version.
1168 THEN
1169 --get structure version if its a top task
1170 OPEN cur_struc_ver_fin;
1171 FETCH cur_struc_ver_fin INTO l_structure_version_id;
1172 CLOSE cur_struc_ver_fin;
1173 ELSE should not stop adding tasks to a WORKING version if there is no PUBLISHED version bug 2777656
1174 */
1175 --get structure version if its a top task
1176 OPEN cur_struc_ver_wp;
1177 FETCH cur_struc_ver_wp INTO l_structure_version_id;
1178 CLOSE cur_struc_ver_wp;
1179 IF l_structure_version_id IS NULL --if versioning is diabled then get the published version
1180 THEN
1181 OPEN cur_struc_ver_fin;
1182 FETCH cur_struc_ver_fin INTO l_structure_version_id;
1183 CLOSE cur_struc_ver_fin;
1184 END IF;
1185 --END IF;
1186 ELSE
1187 --get structure version if its a top task
1188 OPEN cur_struc_ver_wp;
1189 FETCH cur_struc_ver_wp INTO l_structure_version_id;
1190 CLOSE cur_struc_ver_wp;
1191 END IF;
1192 ELSE
1193 l_structure_version_id := p_structure_version_id;
1194 END IF;
1195 END IF;
1196
1197
1198 /*** Commented for Bug 2736392 -- Added new code below
1199 This code will never do the intended task because p_structure_version_id and l_structure_version_id
1200 will be null in this case. If a structure version is in approved, submitted or rejected state, then it
1201 will never be returned from cursor cur_struc_ver_wp, so how can we get the status of a null struc ver.
1202
1203 IF p_structure_version_id IS NOT NULL AND
1204 p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1205 THEN
1206 --Validate the incoming structure version id
1207
1208 PA_PROJECT_STRUCTURE_UTILS.Structure_Version_Name_Or_Id(
1209 p_structure_id => null
1210 ,p_structure_version_name => null
1211 ,p_structure_version_id => p_structure_version_id
1212 ,p_check_id_flag => 'Y'
1213 ,x_structure_version_id => l_structure_version_id
1214 ,x_return_status => l_return_status
1215 ,x_error_message_code => l_msg_data
1216 );
1217 IF l_return_status <> 'S'
1218 THEN
1219 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1220 ,p_msg_name => l_msg_data );
1221 raise api_error;
1222 END IF;
1223
1224 --bug 2736392
1225 l_str_status_code := PA_PROJECT_STRUCTURE_UTILS.get_structrue_version_status
1226 ( p_project_id => p_project_id
1227 ,p_structure_version_id => p_structure_version_id );
1228 IF l_str_status_code IS NULL
1229 THEN
1230 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1231 ,p_msg_name => 'PA_PS_INV_STR_VER_ID' );
1232 raise api_error;
1233 ELSIF l_str_status_code in ( 'STRUCTURE_SUBMITTED', 'STRUCTURE_REJECTED', 'STRUCTURE_APPROVED' )
1234 THEN
1235 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1236 ,p_msg_name => 'PA_PS_INV_STR_VER_ID2' );
1237 raise api_error;
1238 END IF;
1239 --bug 2736392
1240
1241 END IF;
1242 ***/
1243
1244 /* New Code Begin for Bug 2736392 -- Commnted the above code*/
1245
1246 IF p_structure_version_id IS NOT NULL AND p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1247 THEN
1248 l_str_status_code := PA_PROJECT_STRUCTURE_UTILS.get_structrue_version_status
1249 ( p_project_id => p_project_id
1250 ,p_structure_version_id => p_structure_version_id );
1251 IF l_str_status_code IS NULL
1252 THEN
1253 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1254 ,p_msg_name => 'PA_PS_INV_STR_VER_ID' );
1255 raise api_error;
1256 ELSIF l_str_status_code in ( 'STRUCTURE_SUBMITTED', 'STRUCTURE_REJECTED', 'STRUCTURE_APPROVED' )
1257 THEN
1258 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1259 ,p_msg_name => 'PA_PS_INV_STR_VER_ID2' );
1260 raise api_error;
1261 END IF;
1262 ELSIF l_structure_version_id IS NULL
1263 THEN
1264 OPEN cur_struc_ver_wp2;
1265 FETCH cur_struc_ver_wp2 INTO l_dummy_num;
1266 CLOSE cur_struc_ver_wp2;
1267
1268 IF l_dummy_num is NOT NULL THEN
1269 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1270 ,p_msg_name => 'PA_PS_INV_STR_VER_ID2' );
1271 raise api_error;
1272 ELSE
1273 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1274 ,p_msg_name => 'PA_PS_INV_STR_VER_ID' );
1275 raise api_error;
1276 END IF;
1277 END IF;
1278
1279 /* New Code End for Bug 2736392 */
1280
1281 ---The following code is added to prevent message list re-initialization if there are any messages already on stack.
1282 IF p_calling_module = 'AMG' AND FND_MSG_PUB.count_msg > 0
1283 THEN
1284 l_init_msg_list := 'F';
1285 ELSE
1286 l_init_msg_list := 'T';
1287 END IF;
1288
1289 IF p_create_task_version_only = 'N'
1290 THEN
1291
1292 --For each project create 1 task
1293 PA_TASK_PUB1.create_task(
1294 p_calling_module => p_calling_module
1295 ,p_init_msg_list => l_init_msg_list
1296 ,p_object_type => 'PA_TASKS'
1297 ,p_project_id => p_project_id
1298 ,p_structure_id => l_structure_id --1 --anything. does not matter since its not gonna useful to create record
1299 --in pa_proj_elements in PA_TASK_PVT1.CREATE_TASK.
1300 ,p_task_number => l_task_number
1301 ,p_task_name => p_task_name
1302 ,p_task_description => p_task_description
1303 ,p_location_id => p_location_id
1304 ,p_task_manager_id => p_manager_person_id
1305 ,p_carrying_out_org_id => p_carrying_out_organization_id
1306 ,p_priority_code => p_priority_code
1307 ,p_TYPE_ID => p_task_type
1308 ,p_status_code => p_status_code
1309 ,p_inc_proj_progress_flag => p_inc_proj_progress_flag
1310 ,p_pm_product_code => P_PM_SOURCE_CODE
1311 ,p_pm_task_reference => P_PM_SOURCE_reference
1312 ,p_closed_date => p_closed_date
1313 ,p_link_task_flag => p_link_task_flag
1314 ,P_UOM_CODE => P_WQ_UOM_CODE
1315 ,p_work_item_code => P_WQ_ITEM_CODE
1316 ,x_task_id => l_task_id
1317 ----- begin Bug 3654243 --------------------------------------------
1318 ,p_Base_Perc_Comp_Deriv_Code => p_base_percent_comp_deriv_code
1319 ----- end Bug 3654243 ----------------------------------------------
1320
1321 ,x_return_status => l_return_status
1322 ,x_msg_count => l_msg_count
1323 ,x_msg_data => l_msg_data
1324 );
1325
1326 IF l_return_status <> 'S'
1327 THEN
1328 /*PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1329 ,p_msg_name => l_msg_data );
1330 */
1331 raise api_error;
1332 END IF;
1333 END IF;
1334
1335 x_task_id := l_task_id;
1336
1337 -- IF p_structure_type = 'FINANCIAL'
1338 -- THEN
1339 IF p_parent_task_id IS NOT NULL AND p_parent_task_id <> l_task_id
1340 AND p_parent_task_id = p_ref_task_id
1341 THEN
1342 l_peer_or_sub := 'SUB';
1343 --get reference task version id
1344 OPEN cur_proj_elem_vers2( l_structure_version_id, p_parent_task_id );
1345 FETCH cur_proj_elem_vers2 INTO l_ref_task_version_id;
1346 CLOSE cur_proj_elem_vers2;
1347
1348 OPEN cur_child_exists(l_ref_task_version_id);
1349 FETCH cur_child_exists into l_child_exists;
1350 IF (cur_child_exists%NOTFOUND) THEN
1351 l_weighting := 100;
1352 ELSE
1353 l_weighting := 0;
1354 END IF;
1355 CLOSE cur_child_exists;
1356
1357 --Bug 2732907
1358 IF l_ref_task_version_id IS NOT NULL
1359 THEN
1360 update pa_proj_elem_ver_schedule
1361 set WQ_PLANNED_QUANTITY = null
1362 where element_version_id = l_ref_task_version_id
1363 and project_id = p_project_id
1364 and proj_element_id = p_parent_task_id;
1365 END IF;
1366 --Bug 2732907
1367
1368 ELSIF p_ref_task_id IS NOT NULL
1369 THEN
1370 l_peer_or_sub := 'PEER';
1371 IF p_parent_task_id IS NULL --top task
1372 THEN
1373 OPEN cur_proj_elem_vers( l_structure_version_id );
1374 FETCH cur_proj_elem_vers INTO l_ref_task_version_id;
1375 CLOSE cur_proj_elem_vers;
1376 ELSE -- not a top task. Added the following to maintain sequence between the two
1377 --leaf level peer tasks.
1378
1379 OPEN cur_proj_elem_vers2( l_structure_version_id, p_parent_task_id );
1380 FETCH cur_proj_elem_vers2 INTO l_parent_task_version_id;
1381 CLOSE cur_proj_elem_vers2;
1382
1383 /** OPEN cur_ref_task_ver_id2( l_structure_version_id, l_parent_task_version_id );
1384 fetch cur_ref_task_ver_id2 INTO l_ref_task_version_id;
1385 CLOSE cur_ref_task_ver_id2; **/
1386 -- Above code commented and code below added for 4038249. The code above
1387 -- was resetting the p_ref_task_version_id to that of that latest task
1388 -- instead of setting it to the p_ref_task_id passed by the user.
1389 OPEN cur_proj_elem_vers2( l_structure_version_id, p_ref_task_id );
1390 FETCH cur_proj_elem_vers2 INTO l_ref_task_version_id;
1391 CLOSE cur_proj_elem_vers2;
1392 -- Code changes end for 4038249
1393 END IF;
1394 l_weighting := 0;
1395 ELSIF p_ref_task_id IS NULL
1396 THEN
1397 --get structure version if its a top task
1398 l_peer_or_sub := 'SUB';
1399 /*IF l_template_flag = 'N'
1400 THEN
1401 --get structure version if its a top task
1402 OPEN cur_struc_ver_fin;
1403 FETCH cur_struc_ver_fin INTO l_ref_task_version_id;
1404 CLOSE cur_struc_ver_fin;
1405 ELSE
1406 --For templates its always WORKING_STRUCTURE
1407 OPEN cur_struc_ver_wp;
1408 FETCH cur_struc_ver_wp INTO l_ref_task_version_id;
1409 CLOSE cur_struc_ver_wp;
1410 END IF;*/
1411 l_ref_task_version_id := l_structure_version_id;
1412 OPEN cur_child_exists(l_ref_task_version_id);
1413 FETCH cur_child_exists into l_child_exists;
1414 IF cur_child_exists%NOTFOUND THEN
1415 l_weighting := 100;
1416 ELSE
1417 l_weighting := 0;
1418 END IF;
1419 CLOSE cur_child_exists;
1420 END IF;
1421 --Commenting out the following as its not needed. We dont any separate logic for WORKPLAN and FINANCIAL to get the
1422 --ref task version id. There is only one cursor cur_proj_elem_vers that takes structure type
1423 /* ELSIF p_structure_type = 'WORKPLAN'
1424 THEN
1425 IF p_parent_task_id IS NOT NULL AND p_parent_task_id <> l_task_id AND
1426 p_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1427 THEN
1428 l_peer_or_sub := 'SUB';
1429 --get reference task version id
1430 OPEN cur_proj_elem_vers2( l_structure_version_id, p_parent_task_id );
1431 FETCH cur_proj_elem_vers2 INTO l_ref_task_version_id;
1432 CLOSE cur_proj_elem_vers2;
1433
1434 OPEN cur_child_exists(l_ref_task_version_id);
1435 FETCH cur_child_exists into l_child_exists;
1436 IF (cur_child_exists%NOTFOUND) THEN
1437 l_weighting := 100;
1438 ELSE
1439 l_weighting := 0;
1440 END IF;
1441 CLOSE cur_child_exists;
1442
1443 --Bug 2732907
1444 IF l_ref_task_version_id IS NOT NULL
1445 THEN
1446 update pa_proj_elem_ver_schedule
1447 set WQ_PLANNED_QUANTITY = null
1448 where element_version_id = l_ref_task_version_id
1449 and project_id = p_project_id
1450 and proj_element_id = p_parent_task_id;
1451 END IF;
1452 --Bug 2732907
1453
1454 ELSIF ( p_parent_task_id IS NULL OR p_parent_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
1455 --proj conn
1456 AND ( p_ref_task_id is null OR p_ref_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
1457 --proj conn
1458 THEN
1459 --get structure version if its a top task
1460 l_ref_task_version_id := l_structure_version_id;
1461
1462 OPEN cur_child_exists(l_ref_task_version_id);
1463 FETCH cur_child_exists into l_child_exists;
1464 IF cur_child_exists%NOTFOUND THEN
1465 l_weighting := 100;
1466 ELSE
1467 l_weighting := 0;
1468 END IF;
1469 CLOSE cur_child_exists;
1470
1471 l_peer_or_sub := 'SUB';
1472 */
1473 /*IF p_structure_version_id IS NULL OR
1474 p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1475 THEN
1476 OPEN cur_struc_ver_wp;
1477 FETCH cur_struc_ver_wp INTO l_ref_task_version_id;
1478 CLOSE cur_struc_ver_wp;
1479 ELSE
1480 l_ref_task_version_id := p_structure_version_id;
1481 END IF;
1482 */
1483 /* ELSIF p_ref_task_id IS NOT NULL AND p_ref_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1484 THEN
1485 l_weighting := 0;
1486 OPEN cur_proj_elem_vers2( l_structure_version_id, p_ref_task_id );
1487 FETCH cur_proj_elem_vers2 INTO l_ref_task_version_id;
1488 CLOSE cur_proj_elem_vers2;
1489 --proj conn
1490 OPEN c1( l_ref_task_version_id );
1491 FETCH c1 into l_wbs_level;
1492 CLOSE c1;
1493
1494 IF l_wbs_level > 1
1495 THEN
1496 OPEN c2( l_structure_version_id,l_ref_task_version_id,1 );
1497 FETCH c2 into l_ref_task_version_id;
1498 CLOSE c2;
1499 END IF;
1500 l_peer_or_sub := 'PEER';
1501 --proj conn
1502 END IF;
1503 END IF; --<< p_structrue_type >>
1504 */
1505
1506 IF (l_template_flag = 'N') THEN
1507 --check if structure is shared
1508 -- if shared, check if versioned
1509 -- 'WORKING' if versioned; 'PUBLISHED' if not
1510 -- if split, check if 'FINANCIAL'
1511 -- 'PUBLISHED' if financial
1512 -- check if versioned
1513 -- 'WORKING' if versioend; 'PUBLISHED' if not
1514
1515 -- <Bug#2843596>
1516 IF (nvl(g_project_id,-99) = p_project_id and g_sharing_enabled IS NOT NULL) THEN
1517 l_sharing_enabled := g_sharing_enabled;
1518 ELSE
1519 l_sharing_enabled := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id);
1520 g_project_id := p_project_id;
1521 g_sharing_enabled := l_sharing_enabled;
1522 END IF;
1523 -- </Bug#2843596>
1524
1525 IF ('Y' = l_sharing_enabled) THEN
1526 -- Bug 4067757 used l_versioned instead of calling Check_Wp_Versioning_Enabled multiple times
1527 /* IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id)) THEN */
1528 IF (l_versioned = 'Y') THEN
1529 l_task_unpub_ver_status_code := 'WORKING';
1530 ELSE
1531 l_task_unpub_ver_status_code := 'PUBLISHED';
1532 END IF;
1533 ELSE --split
1534 IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'FINANCIAL') AND
1535 'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'WORKPLAN')) THEN
1536 l_task_unpub_ver_status_code := 'PUBLISHED';
1537 ELSE --workplan only
1538 -- Bug 4067757 used l_versioned instead of calling Check_Wp_Versioning_Enabled multiple times
1539 /* IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id)) THEN */
1540 IF (l_versioned = 'Y') THEN
1541 l_task_unpub_ver_status_code := 'WORKING';
1542 ELSE
1543 l_task_unpub_ver_status_code := 'PUBLISHED';
1544 END IF;
1545 END IF;
1546 END IF;
1547 ELSE
1548 l_task_unpub_ver_status_code := 'WORKING';
1549 END IF;
1550
1551 --hsiu added for task status
1552 --check if ok to create subtask
1553 IF (l_peer_or_sub = 'PEER') THEN
1554 OPEN get_parent_version_id(l_ref_task_version_id);
1555 FETCH get_parent_version_id into l_parent_ver_id;
1556 CLOSE get_parent_version_id;
1557 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
1558 p_parent_task_ver_id => l_parent_ver_id
1559 ,x_return_status => l_return_status
1560 ,x_error_message_code => l_error_msg_code
1561 );
1562
1563 IF (l_return_status <> 'Y') THEN
1564 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1565 p_msg_name => l_error_msg_code);
1566 raise api_error;
1567 END IF;
1568 ELSE
1569 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
1570 p_parent_task_ver_id => l_ref_task_version_id
1571 ,x_return_status => l_return_status
1572 ,x_error_message_code => l_error_msg_code
1573 );
1574
1575 IF (l_return_status <> 'Y') THEN
1576 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1577 p_msg_name => l_error_msg_code);
1578 raise api_error;
1579 END IF;
1580 END IF;
1581 --end changes for task status
1582
1583 PA_TASK_PVT1.Create_Task_Version(
1584 p_ref_task_version_id => l_ref_task_version_id
1585 ,p_init_msg_list => l_init_msg_list --Added for bug 4955475
1586 ,p_peer_or_sub => l_peer_or_sub
1587 ,p_task_id => l_task_id
1588 ,p_WEIGHTING_PERCENTAGE => l_weighting
1589 ,p_task_unpub_ver_status_code => l_task_unpub_ver_status_code
1590 ,p_financial_task_flag => p_financial_task_flag --bug 3301192
1591 ,x_task_version_id => l_task_version_id
1592 ,x_return_status => l_return_status
1593 ,x_msg_count => l_msg_count
1594 ,x_msg_data => l_msg_data
1595 );
1596
1597 IF l_return_status <> 'S'
1598 THEN
1599 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1600 ,p_msg_name => 'PA_PS_NO_TASK_VER_CREATED');
1601 raise api_error;
1602 END IF;
1603
1604 x_task_version_id := l_task_version_id;
1605
1606
1607 --bug 3010538
1608
1609 --3035902: process update flag changes
1610 OPEN get_task_type_id(l_task_id);
1611 FETCH get_task_type_id INTO l_task_type_id;
1612 CLOSE get_task_type_id;
1613 --Bug No 3450684 SMukka Commented if condition
1614 --IF NOT ( p_structure_type = 'WORKPLAN' AND
1615 -- l_shared = 'N' AND
1616 -- ( PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id) = 'MANUAL' OR
1617 -- pa_task_type_utils.check_tk_type_progressable(l_task_type_id)='N') )
1618 --THEN
1619
1620 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
1621 ( p_calling_context => p_calling_module
1622 ,p_project_id => p_project_id
1623 ,p_structure_version_id => l_structure_version_id
1624 ,p_update_wbs_flag => 'Y'
1625 ,x_return_status => l_return_status
1626 ,x_msg_count => l_msg_count
1627 ,x_msg_data => l_msg_data);
1628
1629 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
1630 x_msg_count := l_msg_count;
1631 x_msg_data := l_msg_data;
1632 RAISE API_ERROR;
1633 end if;
1634 --END IF;
1635
1636 IF p_structure_type = 'FINANCIAL'
1637 THEN
1638 l_published_ver_exists := PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS( p_project_id, l_structure_id );
1639 IF ( l_versioned = 'N' OR
1640 l_shared = 'N' OR
1641 ( l_versioned = 'Y' AND
1642 l_shared = 'Y' AND
1643 l_published_ver_exists = 'N' ) )
1644 THEN
1645 pa_fp_refresh_elements_pub.set_process_flag_proj(
1646 p_project_id => p_project_id
1647 ,p_request_id => null
1648 ,p_process_code => null
1649 ,p_refresh_required_flag => 'Y'
1650 ,x_return_status => l_return_status
1651 ,x_msg_count => l_msg_count
1652 ,x_msg_data => l_msg_data );
1653
1654 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
1655 x_msg_count := l_msg_count;
1656 x_msg_data := l_msg_data;
1657 RAISE API_ERROR;
1658 end if;
1659 END IF;
1660 END IF;
1661
1662 --End bug 3010538
1663
1664 --hsiu added task status rollup
1665 select parent_structure_version_id
1666 into l_parent_struc_ver_id
1667 from pa_proj_element_versions
1668 where element_version_id = l_task_version_id;
1669
1670 IF (PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id) = 'Y') AND
1671 -- Bug 4067757 used l_versioned instead of calling Check_Wp_Versioning_Enabled multiple times
1672 /* (PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id) = 'N') AND */
1673 (l_versioned = 'N') AND
1674 (PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'WORKPLAN') = 'Y') THEN
1675 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
1676 p_structure_version_id => l_parent_struc_ver_id
1677 ,p_element_version_id => l_task_version_id
1678 ,x_return_status => l_return_status
1679 ,x_msg_count => l_msg_count
1680 ,x_msg_data => l_msg_data
1681 );
1682
1683 IF (l_return_status <> 'S') THEN
1684 x_msg_count := l_msg_count;
1685 x_msg_data := l_msg_data;
1686 RAISE API_ERROR;
1687 END IF;
1688
1689 END IF;
1690 --end task status rollup
1691
1692
1693 --Hsiu added
1694 --inherit task type
1695 IF p_create_task_version_only = 'N'
1696 THEN
1697 PA_TASK_PVT1.Inherit_task_type_attr(
1698 p_task_id => l_task_id
1699 ,p_task_version_id => l_task_version_id
1700 ,x_return_status => l_return_status
1701 ,x_msg_count => l_msg_count
1702 ,x_msg_data => l_msg_data
1703 );
1704
1705 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1706 raise api_error;
1707 END IF;
1708 END IF;
1709 --end inherit task type
1710
1711 OPEN cur_pa_proj_elem_vers2(l_task_version_id);
1712 FETCH cur_pa_proj_elem_vers2 INTO l_dummy_char;
1713 IF cur_pa_proj_elem_vers2%FOUND
1714 THEN
1715 -- xxlu added DFF attributes
1716 OPEN cur_ver_sch_attr_rec(l_task_version_id);
1717 FETCH cur_ver_sch_attr_rec INTO l_ver_sch_attr_rec;
1718 CLOSE cur_ver_sch_attr_rec;
1719
1720 --hsiu: added for bug 2691868
1721 IF (p_scheduled_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1722 l_scheduled_start_date := sysdate;
1723 ELSE
1724 l_scheduled_start_date := p_scheduled_start_date;
1725 END IF;
1726
1727 IF (p_scheduled_finish_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1728 l_scheduled_finish_date := sysdate;
1729 ELSE
1730 l_scheduled_finish_date := p_scheduled_finish_date;
1731 END IF;
1732
1733 --bug 2824612
1734
1735 /*
1736 SELECT type_id INTO l_task_type_id
1737 FROM pa_proj_elements
1738 WHERE proj_element_id = l_task_id
1739 AND project_id = p_project_id;
1740 */
1741
1742 IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_wq_enabled(l_task_type_id) OR
1743 'N' = PA_PROGRESS_UTILS.get_project_wq_flag(p_project_id)) THEN
1744 IF (P_PLANNED_WORK_QUANTITY <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND P_PLANNED_WORK_QUANTITY IS NOT NULL) THEN
1745 l_wq_planned_quantity := NULL;
1746 END IF;
1747 ELSE
1748 l_wq_planned_quantity := P_PLANNED_WORK_QUANTITY; --bug 2826992
1749 END IF;
1750
1751 l_workplan_enabled := 'Y';
1752 --bug 2824612
1753
1754 --Bug 6153503 start
1755 if (--p_attribute_category is null or
1756 p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1757 then
1758 l_attribute_category := l_ver_sch_attr_rec.attribute_category;
1759 else
1760 l_attribute_category := p_attribute_category;
1761 end if;
1762
1763
1764
1765 if (--p_attribute1 is null or
1766 p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1767 then
1768 l_attribute1 := l_ver_sch_attr_rec.attribute1;
1769 else
1770 l_attribute1 := p_attribute1;
1771 end if;
1772
1773
1774
1775 if (--p_attribute2 is null or
1776 p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1777 then
1778 l_attribute2 := l_ver_sch_attr_rec.attribute2;
1779 else
1780 l_attribute2 := p_attribute2;
1781 end if;
1782
1783
1784 if (--p_attribute3 is null or
1785 p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1786 then
1787 l_attribute3 := l_ver_sch_attr_rec.attribute3;
1788 else
1789 l_attribute3 := p_attribute3;
1790 end if;
1791
1792 if (--p_attribute4 is null or
1793 p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1794 then
1795 l_attribute4 := l_ver_sch_attr_rec.attribute4;
1796 else
1797 l_attribute4 := p_attribute4;
1798 end if;
1799
1800 if (--p_attribute5 is null or
1801 p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1802 then
1803 l_attribute5 := l_ver_sch_attr_rec.attribute5;
1804 else
1805 l_attribute5 := p_attribute5;
1806 end if;
1807
1808 if (--p_attribute6 is null or
1809 p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1810 then
1811 l_attribute6 := l_ver_sch_attr_rec.attribute6;
1812 else
1813 l_attribute6 := p_attribute6;
1814 end if;
1815
1816 if (--p_attribute7 is null or
1817 p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) -- Changed for Bug #6153681
1818 then
1819 l_attribute7 := l_ver_sch_attr_rec.attribute7;
1820 else
1821 l_attribute7 := p_attribute7;
1822 end if;
1823
1824 if (--p_attribute8 is null or
1825 p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1826 then
1827 l_attribute8 := l_ver_sch_attr_rec.attribute8;
1828 else
1829 l_attribute8 := p_attribute8;
1830 end if;
1831
1832 if (--p_attribute9 is null or
1833 p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1834 then
1835 l_attribute9 := l_ver_sch_attr_rec.attribute9;
1836 else
1837 l_attribute9 := p_attribute9;
1838 end if;
1839
1840 if (--p_attribute10 is null or
1841 p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1842 then
1843 l_attribute10 := l_ver_sch_attr_rec.attribute10;
1844 else
1845 l_attribute10 := p_attribute10;
1846 end if;
1847
1848 if (--p_attribute10 is null or
1849 p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1850 then
1851 l_attribute11 := l_ver_sch_attr_rec.attribute11;
1852 else
1853 l_attribute11 := p_attribute11;
1854 end if;
1855
1856 if (--p_attribute10 is null or
1857 p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1858 then
1859 l_attribute12 := l_ver_sch_attr_rec.attribute12;
1860 else
1861 l_attribute12 := p_attribute12;
1862 end if;
1863
1864 if (--p_attribute10 is null or
1865 p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1866 then
1867 l_attribute13 := l_ver_sch_attr_rec.attribute13;
1868 else
1869 l_attribute13 := p_attribute13;
1870 end if;
1871
1872 if (--p_attribute10 is null or
1873 p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1874 then
1875 l_attribute14 := l_ver_sch_attr_rec.attribute14;
1876 else
1877 l_attribute14 := p_attribute14;
1878 end if;
1879
1880
1881 if (--p_attribute10 is null or
1882 p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1883 then
1884 l_attribute15 := l_ver_sch_attr_rec.attribute15;
1885 else
1886 l_attribute15 := p_attribute15;
1887 end if;
1888
1889 --if added while fixing BUG 3919800
1890 --Add validation for PA_PROJ_ELEM_VER_SCH_DESC_FLEX
1891 --if l_attribute_category is not null and l_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1892 --then
1893 IF p_validate_dff = 'Y' THEN
1894 pa_task_utils.validate_flex_fields(
1895 p_desc_flex_name => 'PA_PROJ_ELEM_VER_SCH_DESC_FLEX'
1896 ,p_attribute_category => l_attribute_category
1897 ,p_attribute1 => l_attribute1
1898 ,p_attribute2 => l_attribute2
1899 ,p_attribute3 => l_attribute3
1900 ,p_attribute4 => l_attribute4
1901 ,p_attribute5 => l_attribute5
1902 ,p_attribute6 => l_attribute6
1903 ,p_attribute7 => l_attribute7
1904 ,p_attribute8 => l_attribute8
1905 ,p_attribute9 => l_attribute9
1906 ,p_attribute10 => l_attribute10
1907 ,p_attribute11 => l_attribute11
1908 ,p_attribute12 => l_attribute12
1909 ,p_attribute13 => l_attribute13
1910 ,p_attribute14 => l_attribute14
1911 ,p_attribute15 => l_attribute15
1912 ,p_RETURN_msg => l_return_msg
1913 ,p_validate_status => l_validate_status
1914 );
1915
1916 --end if;
1917
1918 IF l_validate_status = 'N'
1919 THEN
1920 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1921 THEN
1922 pa_interface_utils_pub.map_new_amg_msg
1923 ( p_old_message_code => 'PA_INVALID_FF_VALUES'
1924 ,p_msg_attribute => 'CHANGE'
1925 ,p_resize_flag => 'N'
1926 ,p_msg_context => 'FLEX'
1927 ,p_attribute1 => l_return_msg
1928 ,p_attribute2 => ''
1929 ,p_attribute3 => ''
1930 ,p_attribute4 => ''
1931 ,p_attribute5 => '');
1932 END IF;
1933 RAISE FND_API.G_EXC_ERROR;
1934 END IF;
1935 END IF;
1936 --Bug 6153503 end
1937 --End add rtarway, 3908013
1938
1939 PA_TASK_PUB1.Create_Schedule_Version(
1940 p_element_version_id => l_task_version_id
1941 ,p_init_msg_list => l_init_msg_list
1942 ,p_scheduled_start_date => l_scheduled_start_date
1943 ,p_scheduled_end_date => l_scheduled_finish_date
1944 ,p_calendar_id => P_CALENDAR_ID
1945 ,p_obligation_start_date => p_obligation_start_date
1946 ,p_obligation_end_date => p_obligation_finish_date
1947 ,p_actual_start_date => p_actual_start_date
1948 ,p_actual_finish_date => p_actual_finish_date
1949 ,p_estimate_start_date => p_estimated_start_date
1950 ,p_estimate_finish_date => p_estimated_finish_date
1951 ,p_duration => p_duration
1952 ,p_early_start_date => p_early_start_date
1953 ,p_early_end_date => p_early_finish_date
1954 ,p_late_start_date => p_late_start_date
1955 ,p_late_end_date => p_late_finish_date
1956 ,p_milestone_flag => p_milestone_flag
1957 ,p_critical_flag => p_critical_flag
1958 ,p_WQ_PLANNED_QUANTITY => l_wq_planned_quantity --bug 2824612
1959 ,p_PLANNED_EFFORT => p_planned_effort
1960 --Bug 6153503
1961 ,p_attribute_category => l_attribute_category --l_ver_sch_attr_rec.attribute_category
1962 ,p_attribute1 => l_attribute1--l_ver_sch_attr_rec.attribute1
1963 ,p_attribute2 => l_attribute2--l_ver_sch_attr_rec.attribute2
1964 ,p_attribute3 => l_attribute3--l_ver_sch_attr_rec.attribute3
1965 ,p_attribute4 => l_attribute4--l_ver_sch_attr_rec.attribute4
1966 ,p_attribute5 => l_attribute5--l_ver_sch_attr_rec.attribute5
1967 ,p_attribute6 => l_attribute6--l_ver_sch_attr_rec.attribute6
1968 ,p_attribute7 => l_attribute7--l_ver_sch_attr_rec.attribute7
1969 ,p_attribute8 => l_attribute8--l_ver_sch_attr_rec.attribute8
1970 ,p_attribute9 => l_attribute9--l_ver_sch_attr_rec.attribute9
1971 ,p_attribute10 => l_attribute10--l_ver_sch_attr_rec.attribute10
1972 ,p_attribute11 => l_attribute11--l_ver_sch_attr_rec.attribute11
1973 ,p_attribute12 => l_attribute12--l_ver_sch_attr_rec.attribute12
1974 ,p_attribute13 => l_attribute13--l_ver_sch_attr_rec.attribute13
1975 ,p_attribute14 => l_attribute14--l_ver_sch_attr_rec.attribute14
1976 ,p_attribute15 => l_attribute15--l_ver_sch_attr_rec.attribute15
1977 --Bug 6153503 end
1978 -- (Begin Venkat) new params for bug #3450684 ----------------------------------------------
1979 ,p_ext_act_duration => p_ext_act_duration
1980 ,p_ext_remain_duration => p_ext_remain_duration
1981 ,p_ext_sch_duration => p_ext_sch_duration
1982 -- (End Venkat) new params for bug #3450684 -------------------------------------------------
1983
1984 -- begin Bug 3654243 -----------------------------------------------------------------------
1985 ,p_def_sch_tool_tsk_type_code => p_sch_tool_tsk_type_code
1986 ,p_constraint_type_code => p_constraint_type_code
1987 ,p_constraint_date => p_constraint_date
1988 ,p_free_slack => p_free_slack
1989 ,p_total_slack => p_total_slack
1990 ,p_effort_driven_flag => p_effort_driven_flag
1991 ,p_level_assignments_flag => p_level_assignments_flag
1992 -- end Bug 3654243 -------------------------------------------------------------------------
1993
1994 ,x_pev_schedule_id => x_pev_schedule_id
1995 ,x_return_status => l_return_status
1996 ,x_msg_count => l_msg_count
1997 ,x_msg_data => l_msg_data
1998 );
1999 -- end xxlu changes
2000 END IF;
2001 CLOSE cur_pa_proj_elem_vers2;
2002
2003 IF l_return_status <> 'S'
2004 THEN
2005 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2006 ,p_msg_name => 'PA_PS_NO_TASK_SCH_VER_CREATED');
2007 raise api_error;
2008 END IF;
2009
2010 --bug 2732895 --create_task_structure
2011 --The following API should NOT be called if CREATE_TASK_STRUCTURE is called from AMG.
2012 --AMG recalculates the weightings once all the tasks are created.
2013 IF p_calling_module = 'FORMS'
2014 THEN
2015 IF l_workplan_enabled = 'Y'
2016 THEN
2017 PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings(
2018 p_tasks_in => l_tasks_out --null if called for one task
2019 ,p_task_version_id => l_task_version_id
2020 ,x_msg_count => l_msg_count
2021 ,x_msg_data => l_msg_data
2022 ,x_return_status => l_return_status
2023 );
2024 IF l_return_status <> 'S'
2025 THEN
2026 raise api_error;
2027 END IF;
2028
2029 --Bug 3170832 --uncommenting the call to rollup dates
2030 PA_PROJ_TASK_STRUC_PUB.rollup_dates(
2031 p_tasks_in => l_tasks_out --null if called for one task
2032 ,p_task_version_id => l_task_version_id
2033 ,p_structure_version_id => l_structure_version_id
2034 ,p_project_id => p_project_id
2035 ,x_msg_count => l_msg_count
2036 ,x_msg_data => l_msg_data
2037 ,x_return_status => l_return_status
2038 );
2039 IF l_return_status <> 'S'
2040 THEN
2041 raise api_error;
2042 END IF;
2043 --Bug 3170832 --uncommenting the call to rollup dates
2044
2045 END IF;
2046 END IF;
2047 --bug 2732895
2048
2049 END IF;
2050 CLOSE cur_pa_temp_import;
2051
2052 /* Bug # 3420093 - Adding Progress Management modifications to create_task flow. */
2053
2054 if (p_structure_type = 'WORKPLAN' ) then
2055
2056 if (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(x_task_version_id) = 'Y') then
2057 l_add_task_ver_ids.extend(1);
2058 l_add_planned_effort.extend(1);
2059 l_add_start_date.extend(1);
2060 l_add_end_date.extend(1);
2061
2062 l_add_task_ver_ids(l_add_task_ver_ids.count):= x_task_version_id;
2063 l_add_planned_effort(l_add_planned_effort.count):= p_planned_effort;
2064 l_add_start_date(l_add_start_date.count):= p_actual_start_date;
2065 l_add_end_date(l_add_end_date.count):= p_actual_finish_date;
2066 else
2067 l_del_task_ver_ids.extend(1);
2068
2069 l_del_task_ver_ids(l_del_task_ver_ids.count):= x_task_version_id;
2070 end if;
2071 end if;
2072
2073 -- Calling pa_task_pub1.call_add_planning_txns for lowest level tasks.
2074
2075 begin
2076 pa_task_pub1.call_add_planning_txns(
2077 p_tasks_ver_ids => l_add_task_ver_ids,
2078 p_planned_effort => l_add_planned_effort,
2079 p_project_id => p_project_id,
2080 p_structure_version_id => l_structure_version_id, --replace p_structure_version_id, bug 3838186
2081 p_start_date => l_add_start_date,
2082 p_end_date => l_add_end_date,
2083 p_pm_product_code => P_PM_SOURCE_CODE, --bug 3811243
2084 x_return_status => l_return_status,
2085 x_msg_count => l_msg_count,
2086 x_msg_data => l_msg_data
2087 );
2088 exception
2089 when others then
2090 fnd_msg_pub.add_exc_msg(p_pkg_name => 'pa_project_pub',
2091 p_procedure_name => 'CREATE_PROJECT',
2092 p_error_text => substrb('PA_TASK_PUB1.CALL_ADD_PLANNING_TXNS:'||sqlerrm,1,240));
2093 raise fnd_api.g_exc_error;
2094 end;
2095
2096 -- Calling pa_fp_planning_transaction_pub.delete_planning_transactions for higher level tasks.
2097
2098 begin
2099 pa_fp_planning_transaction_pub.delete_planning_transactions
2100 (
2101 p_context => 'WORKPLAN'
2102 ,p_task_or_res => 'TASKS'
2103 ,p_element_version_id_tbl => l_del_task_ver_ids
2104 ,x_return_status => l_return_status
2105 ,x_msg_count => l_msg_count
2106 ,x_msg_data => l_msg_data
2107 );
2108 exception
2109 when others then
2110 fnd_msg_pub.add_exc_msg(p_pkg_name => 'pa_project_pub',
2111 p_procedure_name => 'CREATE_PROJECT',
2112 p_error_text => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.DELETE_PLANNING_TRANSACTIONS:'||SQLERRM,1,240));
2113 raise fnd_api.g_exc_error;
2114 end;
2115
2116 /* Bug # 3420093 - Adding Progress Management modifications to create_task flow. */
2117
2118
2119 x_return_status := FND_API.G_RET_STS_SUCCESS;
2120 EXCEPTION
2121 WHEN API_ERROR THEN
2122 x_return_status := FND_API.G_RET_STS_ERROR;
2123 rollback to create_task_struc;
2124 WHEN OTHERS THEN
2125 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2126 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
2127 p_procedure_name => 'create_task_structure',
2128 p_error_text => SUBSTRB(SQLERRM,1,240));
2129 rollback to create_task_struc;
2130 raise;
2131 END create_task_structure;
2132 -- API name : update_task_structure
2133 -- Type : PL/sql Public procedure
2134 -- Pre-reqs : None
2135 -- Return Value : N/A
2136 -- Prameters
2137 -- p_calling_module IN VARCHAR2
2138 -- ,p_task_id IN NUMBER
2139 -- ,p_task_number IN VARCHAR2
2140 -- ,p_task_name IN VARCHAR2
2141 -- ,p_task_description IN VARCHAR2
2142 -- ,p_carrying_out_organization_id IN NUMBER
2143 -- ,p_task_manager_id IN NUMBER
2144 -- ,p_pm_product_code IN VARCHAR2
2145 -- ,p_pm_task_reference IN VARCHAR2
2146 -- ,p_record_version_number IN NUMBER
2147 -- ,x_msg_count OUT NUMBER
2148 -- ,x_msg_data OUT VARCHAR2
2149 -- ,x_return_status OUT VARCHAR2--
2150 -- History
2151 --
2152 -- 25-APR-02 MAansari -Created
2153 -- 05-APR-2004 Rakesh Raghavan Progress Management Changes. Bug # 3420093.
2154 -- 18-MAY-2004 Rakesh Raghavan Modified call to API: pa_task_pub1.update_task_det_sch_info().
2155
2156 PROCEDURE update_task_structure
2157 (
2158 p_calling_module IN VARCHAR2 := 'FORMS'
2159 ,p_ref_task_id IN NUMBER
2160 ,p_project_id IN NUMBER
2161 ,p_task_id IN NUMBER
2162 ,p_task_number IN VARCHAR2
2163 ,p_task_name IN VARCHAR2
2164 ,p_task_description IN VARCHAR2
2165 ,p_carrying_out_organization_id IN NUMBER
2166 ,p_structure_type IN VARCHAR2 := 'FINANCIAL'
2167 ,p_task_manager_id IN NUMBER
2168 ,p_pm_product_code IN VARCHAR2
2169 ,p_pm_task_reference IN VARCHAR2
2170 ,p_location_id IN NUMBER
2171 ,p_actual_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2172 ,p_actual_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2173 ,p_early_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2174 ,p_early_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2175 ,p_late_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2176 ,p_late_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2177 ,p_scheduled_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2178 ,p_scheduled_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2179 ,P_OBLIGATION_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2180 ,P_OBLIGATION_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2181 ,P_ESTIMATED_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2182 ,P_ESTIMATED_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2183 ,P_BASELINE_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2184 ,P_BASELINE_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2185 ,P_CLOSED_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2186 ,P_WQ_UOM_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2187 ,P_WQ_ITEM_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2188 ,P_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2189 ,P_WF_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2190 ,P_PRIORITY_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2191 ,P_MILESTONE_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2192 ,P_CRITICAL_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2193 ,P_INC_PROJ_PROGRESS_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2194 ,P_LINK_TASK_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2195 ,P_CALENDAR_ID IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2196 ,P_PLANNED_EFFORT IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2197 ,P_DURATION IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2198 ,P_PLANNED_WORK_QUANTITY IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2199 ,P_TASK_TYPE IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2200 ,p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2201 ,p_parent_structure_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2202 ,p_phase_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2203 ,P_PHASE_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2204 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
2205 ,p_ext_act_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
2206 ,p_ext_remain_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
2207 ,p_ext_sch_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
2208 -- (end venkat) new params for bug #3450684 -------------------------------------------------
2209 -- (begin) add new params bug - 3654243 -----
2210 ,p_base_percent_comp_deriv_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2211 ,p_sch_tool_tsk_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2212 ,p_constraint_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2213 ,p_constraint_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2214 ,p_free_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2215 ,p_total_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2216 ,p_effort_driven_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2217 ,p_level_assignments_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2218 ,p_invoice_method IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2219 ,p_customer_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2220 ,p_gen_etc_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2221 -- (end) add new params bug - 3654243 -----
2222 -- Progress Management Changes. Bug # 3420093.
2223 ,p_etc_effort IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2224 ,p_percent_complete IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2225 -- Progress Management Changes. Bug # 3420093.
2226 -- rtarway, BUG 3908013
2227 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2228 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2229 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2230 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2231 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2232 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2233 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2234 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2235 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2236 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2237 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2238 --Bug 6153503
2239 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2240 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2241 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2242 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2243 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2244 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2245 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2246 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2247 ) IS
2248
2249 l_return_status VARCHAR2(1);
2250 l_msg_count NUMBER;
2251 l_msg_data VARCHAR2(2000);
2252 API_ERROR EXCEPTION;
2253 l_record_version_number NUMBER;
2254
2255
2256 CURSOR cur_proj_is_template
2257 IS select 'Y'
2258 from pa_projects_all
2259 where project_id = p_project_id
2260 and template_flag = 'Y';
2261 l_template_flag VARCHAR2(1);
2262
2263 CURSOR cur_rec_ver_num
2264 IS
2265 SELECT record_version_number
2266 FROM pa_proj_elements
2267 WHERE proj_element_id = p_task_id
2268 AND object_type = 'PA_TASKS';
2269
2270 /* Bug 2680486 -- Performance changes -- Added d.project_id= c.project_id
2271 join in the following cursor*/
2272
2273 CURSOR cur_struc_ver_fin
2274 IS
2275 SELECT c.element_version_id
2276 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
2277 ,pa_proj_elem_ver_structure d
2278 WHERE c.project_id = p_project_id
2279 AND a.structure_type_id = b.structure_type_id
2280 AND b.proj_element_id = c.proj_element_id
2281 AND a.structure_type = p_structure_type
2282 AND d.project_id = c.project_id
2283 AND d.element_version_id = c.element_version_id
2284 AND d.status_code = 'STRUCTURE_PUBLISHED'
2285 AND d.latest_eff_published_flag = 'Y'
2286 ;
2287
2288 /* Bug 2680486 -- Performance changes -- Added d.project_id= c.project_id
2289 join in the following cursor*/
2290
2291
2292 CURSOR cur_struc_ver_wp
2293 IS
2294 SELECT c.element_version_id
2295 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
2296 ,pa_proj_elem_ver_structure d
2297 WHERE c.project_id = p_project_id
2298 AND a.structure_type_id = b.structure_type_id
2299 AND b.proj_element_id = c.proj_element_id
2300 AND a.structure_type = p_structure_type
2301 AND d.project_id = c.project_id
2302 AND d.element_version_id = c.element_version_id
2303 AND d.status_code = 'STRUCTURE_WORKING'
2304 ;
2305
2306 CURSOR cur_pa_tasks( c_task_id NUMBER )
2307 IS
2308 SELECT parent_task_id
2309 FROM pa_tasks
2310 WHERE project_id = p_project_id
2311 AND task_id = c_task_id;
2312
2313 CURSOR cur_pa_task_ver( c_structure_version_id NUMBER, c_task_id NUMBER )
2314 IS
2315 SELECT element_version_id, record_version_number
2316 FROM pa_proj_element_versions
2317 WHERE project_id = p_project_id
2318 AND proj_element_id = c_task_id
2319 AND parent_structure_version_id = c_structure_version_id
2320 AND object_type = 'PA_TASKS';
2321
2322 CURSOR cur_pa_peer_task_above( c_structure_version_id NUMBER, c_task_version_id NUMBER )
2323 IS
2324 SELECT element_version_id
2325 FROM pa_proj_element_versions
2326 WHERE project_id = p_project_id
2327 AND parent_structure_version_id = c_structure_version_id
2328 AND display_sequence = ( SELECT max( display_sequence ) FROM pa_proj_element_versions
2329 WHERE parent_structure_version_id = c_structure_version_id
2330 AND display_sequence < ( SELECT display_sequence FROM pa_proj_element_versions
2331 WHERE element_version_id = c_task_version_id )
2332 AND wbs_level = ( SELECT wbs_level FROM pa_proj_element_versions
2333 WHERE element_version_id = c_task_version_id )
2334 )
2335 AND object_type = 'PA_TASKS';
2336
2337 CURSOR cur_proj_sch( c_task_version_id NUMBER )
2338 IS
2339 SELECT pev_schedule_id, record_version_number
2340 FROM pa_proj_elem_ver_schedule
2341 WHERE element_version_id = c_task_version_id
2342 AND project_id = p_project_id
2343 AND proj_element_id = p_task_id; --This will give u unique record.
2344
2345 CURSOR cur_pa_obj_rel( c_task_version_id NUMBER )
2346 IS
2347 SELECT object_id_from1
2348 FROM pa_object_relationships
2349 WHERE object_id_to1 = c_task_version_id
2350 and relationship_type = 'S';
2351
2352 CURSOR cur_pa_proj_elem_ver( c_task_version_id NUMBER )
2353 IS
2354 SELECT proj_element_id
2355 FROM pa_proj_element_versions
2356 WHERE project_id = p_project_id
2357 AND element_version_id = c_task_version_id
2358 AND object_type = 'PA_TASKS';
2359
2360 CURSOR cur_pa_proj_elem_vers2( c_task_version_id NUMBER )
2361 IS
2362 SELECT 'x'
2363 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
2364 WHERE c.project_id = p_project_id
2365 AND a.structure_type_id = b.structure_type_id
2366 AND b.proj_element_id = c.proj_element_id
2367 AND a.structure_type = 'WORKPLAN'
2368 AND element_version_id = ( SELECT parent_structure_version_id
2369 FROM pa_proj_element_versions
2370 WHERE element_version_id = c_task_version_id );
2371
2372 -- xxlu added for DFF attributes for calling update_schedule_version
2373 CURSOR cur_ver_sch_attr_rec(c_element_version_id IN NUMBER) IS
2374 SELECT *
2375 FROM pa_proj_elem_ver_schedule
2376 WHERE element_version_id = c_element_version_id
2377 and project_id = p_project_id;
2378 l_ver_sch_attr_rec cur_ver_sch_attr_rec%ROWTYPE;
2379 -- end xxlu changes
2380
2381 l_structure_version_id NUMBER;
2382 l_parent_task_id NUMBER;
2383 l_parent_of_ref_task_id NUMBER;
2384 l_ref_task_version_id NUMBER;
2385 l_task_version_id NUMBER;
2386 l_peer_or_sub VARCHAR2(4);
2387 l_pev_schedule_id NUMBER;
2388
2389 v_parent_task_ver_id_of_ref NUMBER;
2390 v_parent_task_version_id NUMBER;
2391 l_dummy_char VARCHAR2(1);
2392 --bug 2736392
2393 l_str_status_code VARCHAR2(150);
2394 --bug 2736392
2395 l_init_msg_list VARCHAR2(1);
2396
2397 /* Bug 2736392 Begin */
2398 CURSOR cur_struc_ver_wp2
2399 IS
2400 SELECT c.element_version_id
2401 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
2402 ,pa_proj_elem_ver_structure d
2403 WHERE c.project_id = p_project_id
2404 AND a.structure_type_id = b.structure_type_id
2405 AND b.proj_element_id = c.proj_element_id
2406 AND a.structure_type = p_structure_type
2407 AND d.project_id = c.project_id
2408 AND d.element_version_id = c.element_version_id
2409 AND (d.status_code = 'STRUCTURE_SUBMITTED' OR d.status_code='STRUCTURE_REJECTED' OR d.status_code= 'STRUCTURE_APPROVED')
2410 ;
2411 l_dummy_num number;
2412 /* Bug 2736392 End */
2413
2414 l_db_parent_task_version_id number; -- Bug 2790275
2415 l_passed_parent_task_ver_id number; -- Bug 2790275
2416
2417 --bug 2824612
2418 l_wq_planned_quantity NUMBER;
2419 l_task_type_id NUMBER;
2420 --bug 2824612
2421
2422 l_tasks_out pa_project_pub.task_out_tbl_type ; --dummy variables. --bug 2856033
2423 l_process_code VARCHAR2(30);
2424
2425 l_request_id pa_proj_elem_ver_structure.conc_request_id%TYPE; -- Bug 3091798
2426
2427 /* Added for bug 3290037 */
2428
2429 CURSOR cur_task_attr IS
2430 SELECT pe.ELEMENT_NUMBER, pe.NAME
2431 FROM pa_proj_elements pe
2432 WHERE pe.proj_element_id = p_task_id
2433 AND pe.object_type = 'PA_TASKS';
2434
2435 l_task_number pa_proj_elements.element_number%TYPE;
2436 l_task_name pa_proj_elements.name%TYPE;
2437
2438 --rtarway,3666023
2439 l_task_id pa_proj_elements.PROJ_ELEMENT_ID%TYPE;
2440
2441 /* End of code for bug 3290037 */
2442
2443 /* Bug # 3420093 - Adding Progress Management modifications to update_task flow. */
2444
2445 --Bug 5256359. Changed the type of these pl-sql tbls to SYSTEM.pa_xxx_tbl_type from PA_xxx_1000_xxx.
2446
2447 --New tbls (suffixed with _prm), created below will be used as parameters in the call to
2448 --pa_task_pub1.call_add_planning_txns
2449
2450 l_add_task_ver_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
2451 l_add_planned_effort SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
2452 l_add_start_date SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
2453 l_add_end_date SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
2454 l_add_task_ver_ids_prm PA_NUM_1000_NUM := PA_NUM_1000_NUM();
2455 l_add_planned_effort_prm PA_NUM_1000_NUM := PA_NUM_1000_NUM();
2456 l_add_start_date_prm PA_DATE_1000_DATE := PA_DATE_1000_DATE();
2457 l_add_end_date_prm PA_DATE_1000_DATE := PA_DATE_1000_DATE();
2458 rec_count NUMBER;
2459
2460 l_del_task_ver_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
2461
2462 cursor l_task_cur(p_project_id NUMBER, p_struct_ver_id NUMBER) is
2463 /* --bug 3880482
2464 select
2465 element_version_id,planned_effort,actual_start_date,actual_finish_date
2466 from pa_proj_elem_ver_schedule ppevs, pa_proj_elements ppe
2467 where ppevs.project_id = ppe.project_id
2468 and ppevs.proj_element_id = ppe.proj_element_id
2469 and ppe.object_type = 'PA_TASKS'
2470 and ppevs.project_id = p_project_id;
2471 */
2472 SELECT
2473 ppv.element_version_id
2474 ,ppevs.planned_effort
2475 ,ppevs.actual_start_date
2476 ,ppevs.actual_finish_date
2477 FROM
2478 pa_proj_elem_ver_schedule ppevs
2479 ,pa_proj_element_versions ppv
2480 WHERE
2481 ppevs.project_id = ppv.project_id
2482 and ppevs.proj_element_id = ppv.proj_element_id
2483 and ppv.object_type = 'PA_TASKS'
2484 and ppv.element_version_id = ppevs.element_version_id
2485 and ppv.project_id = p_project_id
2486 and ppv.parent_structure_version_id = p_struct_ver_id;
2487
2488 l_task_cur_rec l_task_cur%rowtype;
2489
2490 /* Bug # 3420093 - Adding Progress Management modifications to update_task flow. */
2491
2492 --rtarway, 3908013
2493 l_attribute_category VARCHAR2(150);
2494 l_attribute1 VARCHAR2(150);
2495 l_attribute2 VARCHAR2(150);
2496 l_attribute3 VARCHAR2(150);
2497 l_attribute4 VARCHAR2(150);
2498 l_attribute5 VARCHAR2(150);
2499 l_attribute6 VARCHAR2(150);
2500 l_attribute7 VARCHAR2(150);
2501 l_attribute8 VARCHAR2(150);
2502 l_attribute9 VARCHAR2(150);
2503 l_attribute10 VARCHAR2(150);
2504 --Bug 6153503
2505 l_attribute11 VARCHAR2(150);
2506 l_attribute12 VARCHAR2(150);
2507 l_attribute13 VARCHAR2(150);
2508 l_attribute14 VARCHAR2(150);
2509 l_attribute15 VARCHAR2(150);
2510 l_return_msg varchar2(2000);
2511 l_validate_status varchar2(1);
2512
2513 -- Begin fix for Bug # 4373055.
2514
2515 l_str_ver_id NUMBER:= null;
2516 l_conc_request_id NUMBER := null;
2517 l_message_name VARCHAR2(30) := null;
2518 l_message_type VARCHAR2(30) := null;
2519
2520 -- End fix for Bug # 4373055.
2521
2522 -- 7358214
2523
2524 CURSOR check_hidden_assgn_exists(p_element_version_id IN NUMBER) IS
2525 SELECT 'Y'
2526 FROM pa_resource_assignments ra
2527 WHERE ra.ta_display_flag = 'N'
2528 AND ra.wbs_element_version_id = p_element_version_id
2529 AND rownum = 1;
2530
2531 l_hidden_assgn VARCHAR2(1);
2532 -- 7358214
2533 BEGIN
2534
2535 --Clear Error Messages.
2536 IF FND_MSG_PUB.count_msg = 0
2537 THEN
2538 FND_MSG_PUB.initialize;
2539 END IF;
2540
2541 SAVEPOINT update_task_struc;
2542
2543 OPEN cur_proj_is_template;
2544 FETCH cur_proj_is_template into l_template_flag;
2545 IF cur_proj_is_template%NOTFOUND THEN
2546 l_template_flag := 'N';
2547 END IF;
2548 CLOSE cur_proj_is_template;
2549
2550 OPEN cur_rec_ver_num;
2551 FETCH cur_rec_ver_num INTO l_record_version_number;
2552 CLOSE cur_rec_ver_num;
2553
2554 ---The following code is added to prevent message list re-initialization if there are any messages already on stack.
2555 IF p_calling_module = 'AMG' AND FND_MSG_PUB.count_msg > 0
2556 THEN
2557 l_init_msg_list := 'F';
2558 ELSE
2559 l_init_msg_list := 'T';
2560 END IF;
2561
2562 /* Added for bug 3290037 */
2563
2564 OPEN cur_task_attr;
2565 FETCH cur_task_attr INTO l_task_number, l_task_name;
2566 CLOSE cur_task_attr;
2567 --dbms_output.put_line(('Value of p_task_number' ||p_task_number);
2568 --dbms_output.put_line(('Value of l_task_number' ||l_task_number);
2569
2570 IF ( p_task_number <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_task_number IS NOT NULL)
2571 /* bug#5243018 : Reverting the fix in Bug 4120380
2572 AND nvl(p_task_number,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
2573 nvl(l_task_number,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) --check added for BUg 4120380 Aditi */
2574 THEN
2575 l_task_number := p_task_number;
2576 /* bug#5243018 : Reverting the fix in Bug 4120380
2577 -- dbms_output.put_line('printed once');
2578 IF p_calling_module = 'AMG' THEN --Added this clause for Bug 4762147
2579 -- This is required so that when Update_tas_Strcucture is caled from forms , - sign does not get prepended
2580 l_task_number := '-'||p_task_number;
2581 ELSE
2582 l_task_number := p_task_number;
2583 END IF;*/ /** '-' prefixed to p_task_number for Bug 4120380. This is to ensure that the when task_numbers are being interchanged,tasks get saved to the database sucessfully to bypass the constranit PA_PROJ_ELEMENTS_U2.
2584 After updating all the tasks in the script, code again updates the task_number, trimming the '-' added. **/
2585 END IF;
2586 --dbms_output.put_line('Value of l_task_number' ||l_task_number);
2587
2588 IF ( p_task_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_task_name IS NOT NULL )
2589 THEN
2590 l_task_name := p_task_name;
2591 END IF;
2592
2593 /* End of code added for bug 3290037 */
2594 --Begin add by rtarway for BUG 3666023
2595 --3663712, changed 'OR' to and 'AND' in following If condition
2596 IF ( p_task_id IS NOT NULL AND p_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
2597 THEN
2598 l_task_id := p_task_id;
2599 ELSIF
2600 ( p_pm_task_reference IS NOT NULL AND p_pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
2601 THEN
2602 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_all
2603 (p_pa_project_id => p_project_id
2604 ,p_pm_task_reference => p_pm_task_reference
2605 ,p_structure_type => p_structure_type
2606 ,p_out_task_id => l_task_id
2607 ,p_return_status => l_return_status);
2608
2609 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
2610 THEN
2611 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2612 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
2613 THEN
2614 RAISE FND_API.G_EXC_ERROR;
2615 END IF;
2616 END IF;
2617 --End add by rtarway for BUG 3666023
2618
2619
2620 PA_TASK_PUB1.Update_Task(
2621 p_calling_module => p_calling_module
2622 ,p_init_msg_list => l_init_msg_list
2623 --rtarway for BUG 3666023
2624 --,p_task_id => p_task_id
2625 ,p_task_id => l_task_id
2626 ,p_task_number => l_task_number /* Modified p_task_number to l_task_number for 3290037 */
2627 ,p_task_name => l_task_name /* Modified p_task_name to l_task_name for 3290037 */
2628 ,p_task_description => p_task_description
2629 ,p_task_manager_id => p_TASK_MANAGER_ID
2630 ,p_carrying_out_org_id => p_carrying_out_organization_id
2631 ,p_pm_product_code => p_pm_product_code
2632 ,p_pm_task_reference => p_pm_task_reference
2633 ,p_location_id => p_location_id
2634 ,p_priority_code => p_priority_code
2635 ,p_TYPE_ID => p_task_type
2636 ,p_status_code => P_STATUS_CODE
2637 ,p_inc_proj_progress_flag => p_inc_proj_progress_flag
2638 ,p_closed_date => p_closed_date
2639 ,p_record_version_number => l_record_version_number
2640 ,P_UOM_CODE => P_WQ_UOM_CODE
2641 ,p_work_item_code => P_WQ_ITEM_CODE
2642 ----- begin Bug 3654243 --------------------------------------------
2643 ,p_Base_Perc_Comp_Deriv_Code => p_base_percent_comp_deriv_code
2644 ,p_gen_etc_src_code => p_gen_etc_source_code
2645 ----- end Bug 3654243 ----------------------------------------------
2646 ,x_return_status => l_return_status
2647 ,x_msg_count => l_msg_count
2648 ,x_msg_data => l_msg_data
2649 );
2650 --dbms_output.put_line('Before calling PA_TASK_PUB1.Update_Task l_return_status'||l_return_status);
2651
2652 IF l_return_status <> 'S'
2653 THEN
2654 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2655 ,p_msg_name => 'PA_PS_TASK_NOT_UPDATED'
2656 /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
2657 ,p_token1 => 'PROJECT'
2658 ,p_value1 => p_project_id
2659 ,p_token2 => 'TASK'
2660 ,p_value2 => l_task_id);
2661 raise api_error;
2662 END IF;
2663
2664 IF p_calling_module = 'AMG' AND
2665 p_ref_task_id is NOT NULL --to make sure that hierarchy is changed.
2666 AND p_ref_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --bug 3701460
2667 --if p_ref_task_id is null then there is no hierarchy change
2668 --It is also true that it is not necessary that the hierarchy is changed even if
2669 --it p_ref_task_id is NOT null.
2670 THEN
2671
2672 IF p_structure_version_id IS NULL OR
2673 p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2674 THEN
2675
2676 IF p_structure_type = 'FINANCIAL'
2677 THEN
2678 IF l_template_flag = 'N'
2679 THEN
2680 --get structure version if its a top task
2681 OPEN cur_struc_ver_fin;
2682 FETCH cur_struc_ver_fin INTO l_structure_version_id;
2683 CLOSE cur_struc_ver_fin;
2684 ELSE
2685 --For templates its always WORKING_STRUCTURE
2686 OPEN cur_struc_ver_wp;
2687 FETCH cur_struc_ver_wp INTO l_structure_version_id;
2688 CLOSE cur_struc_ver_wp;
2689 END IF;
2690 ELSE
2691 OPEN cur_struc_ver_wp;
2692 FETCH cur_struc_ver_wp INTO l_structure_version_id;
2693 CLOSE cur_struc_ver_wp;
2694 END IF;
2695 ELSE
2696 l_structure_version_id := p_structure_version_id;
2697 END IF;
2698
2699 /*** Commented for Bug 2736392 -- Added new code below
2700 This code will never do the intended task because p_structure_version_id and l_structure_version_id
2701 will be null in this case. If a structure version is in approved, submitted or rejected state, then it
2702 will never be returned from cursor cur_struc_ver_wp, so how can we get the status of a null struc ver.
2703
2704 IF p_structure_version_id IS NOT NULL AND
2705 p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2706 THEN
2707 --Validate the incoming structure version id
2708 PA_PROJECT_STRUCTURE_UTILS.Structure_Version_Name_Or_Id(
2709 p_structure_id => null
2710 ,p_structure_version_name => null
2711 ,p_structure_version_id => p_structure_version_id
2712 ,p_check_id_flag => 'Y'
2713 ,x_structure_version_id => l_structure_version_id
2714 ,x_return_status => l_return_status
2715 ,x_error_message_code => l_msg_data
2716 );
2717 IF l_return_status <> 'S'
2718 THEN
2719 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2720 ,p_msg_name => l_msg_data );
2721 raise api_error;
2722 END IF;
2723 --bug 2736392
2724 l_str_status_code := PA_PROJECT_STRUCTURE_UTILS.get_structrue_version_status
2725 ( p_project_id => p_project_id
2726 ,p_structure_version_id => p_structure_version_id );
2727 IF l_str_status_code IS NULL
2728 THEN
2729 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2730 ,p_msg_name => 'PA_PS_INV_STR_VER_ID' );
2731 raise api_error;
2732 ELSIF l_str_status_code in ( 'STRUCTURE_SUBMITTED', 'STRUCTURE_REJECTED', 'STRUCTURE_APPROVED' )
2733 THEN
2734 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2735 ,p_msg_name => 'PA_PS_INV_STR_VER_ID2' );
2736 raise api_error;
2737 END IF;
2738 --bug 2736392
2739 END IF;
2740 ***/
2741 /* New Code Begin for Bug 2736392 -- Commnted the above code*/
2742
2743 IF p_structure_version_id IS NOT NULL AND p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2744 THEN
2745 l_str_status_code := PA_PROJECT_STRUCTURE_UTILS.get_structrue_version_status
2746 ( p_project_id => p_project_id
2747 ,p_structure_version_id => p_structure_version_id );
2748 IF l_str_status_code IS NULL
2749 THEN
2750 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2751 ,p_msg_name => 'PA_PS_INV_STR_VER_ID' );
2752 raise api_error;
2753 ELSIF l_str_status_code in ( 'STRUCTURE_SUBMITTED', 'STRUCTURE_REJECTED', 'STRUCTURE_APPROVED' )
2754 THEN
2755 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2756 ,p_msg_name => 'PA_PS_INV_STR_VER_ID2' );
2757 raise api_error;
2758 END IF;
2759 ELSIF l_structure_version_id IS NULL
2760 THEN
2761 OPEN cur_struc_ver_wp2;
2762 FETCH cur_struc_ver_wp2 INTO l_dummy_num;
2763 CLOSE cur_struc_ver_wp2;
2764
2765 IF l_dummy_num is NOT NULL THEN
2766 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2767 ,p_msg_name => 'PA_PS_INV_STR_VER_ID2' );
2768 raise api_error;
2769 ELSE
2770 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2771 ,p_msg_name => 'PA_PS_INV_STR_VER_ID' );
2772 raise api_error;
2773 END IF;
2774 END IF;
2775
2776 /* New Code End for Bug 2736392 */
2777
2778
2779 --get the task version id of the reference task
2780 OPEN cur_pa_task_ver( l_structure_version_id, p_ref_task_id );
2781 FETCH cur_pa_task_ver INTO l_ref_task_version_id, l_record_version_number;
2782 CLOSE cur_pa_task_ver;
2783 --get task version id of the task being moved or updated
2784 --rtarway, 3666023, replace by l_task_id
2785 --OPEN cur_pa_task_ver( l_structure_version_id, p_task_id );
2786 OPEN cur_pa_task_ver( l_structure_version_id, l_task_id );
2787 FETCH cur_pa_task_ver INTO l_task_version_id, l_record_version_number;
2788 CLOSE cur_pa_task_ver;
2789
2790
2791 IF p_structure_type = 'FINANCIAL'
2792 THEN
2793 --get the parent of the tak id
2794 --rtarway, 3666023, replace by l_task_id
2795 --OPEN cur_pa_tasks( p_task_id );
2796 OPEN cur_pa_tasks( l_task_id );
2797 FETCH cur_pa_tasks INTO l_parent_task_id;
2798 CLOSE cur_pa_tasks;
2799
2800 --get the parent of the ref tak id
2801 OPEN cur_pa_tasks( p_ref_task_id );
2802 FETCH cur_pa_tasks INTO l_parent_of_ref_task_id;
2803 CLOSE cur_pa_tasks;
2804
2805 ELSIF p_structure_type = 'WORKPLAN'
2806 THEN
2807 --get the parent task version id of the task version id
2808 OPEN cur_pa_obj_rel( l_task_version_id ) ;
2809 FETCH cur_pa_obj_rel INTO v_parent_task_version_id;
2810 CLOSE cur_pa_obj_rel;
2811
2812
2813 --get the parent task id of the parent task version id
2814 OPEN cur_pa_proj_elem_ver( v_parent_task_version_id ) ;
2815 FETCH cur_pa_proj_elem_ver INTO l_parent_task_id;
2816 CLOSE cur_pa_proj_elem_ver;
2817
2818
2819
2820 --get the parent task version id of the ref task version id
2821 OPEN cur_pa_obj_rel( l_ref_task_version_id ) ;
2822 FETCH cur_pa_obj_rel INTO v_parent_task_ver_id_of_ref;
2823 CLOSE cur_pa_obj_rel;
2824
2825
2826 --get the parent task id of the parent ref task version id
2827 OPEN cur_pa_proj_elem_ver( v_parent_task_ver_id_of_ref ) ;
2828 FETCH cur_pa_proj_elem_ver INTO l_parent_of_ref_task_id;
2829 CLOSE cur_pa_proj_elem_ver;
2830
2831
2832 END IF;
2833
2834 IF p_ref_task_id = l_parent_task_id
2835 THEN
2836 l_peer_or_sub := 'SUB';
2837 ELSIF l_parent_of_ref_task_id = l_parent_task_id
2838 THEN
2839 l_peer_or_sub := 'PEER';
2840 ELSE
2841 l_peer_or_sub := 'PEER';
2842 OPEN cur_pa_peer_task_above( l_structure_version_id, l_task_version_id );
2843 FETCH cur_pa_peer_task_above INTO l_ref_task_version_id;
2844 CLOSE cur_pa_peer_task_above;
2845 END IF;
2846
2847 IF l_ref_task_version_id IS NOT NULL
2848 THEN
2849
2850 /* Bug 2790275 Begin */
2851 OPEN cur_pa_obj_rel( l_task_version_id ) ;
2852 FETCH cur_pa_obj_rel INTO l_db_parent_task_version_id;
2853 CLOSE cur_pa_obj_rel;
2854
2855 OPEN cur_pa_obj_rel( l_ref_task_version_id ) ;
2856 FETCH cur_pa_obj_rel INTO l_passed_parent_task_ver_id;
2857 CLOSE cur_pa_obj_rel;
2858
2859 IF ((l_peer_or_sub = 'SUB' AND l_ref_task_version_id <> l_db_parent_task_version_id)
2860 OR
2861 (l_peer_or_sub = 'PEER' AND l_passed_parent_task_ver_id <> l_db_parent_task_version_id))
2862 THEN
2863 /* Bug 2790275 End */
2864
2865 -- Check for the status of the process only if the wbs is going to change.
2866 -- PA L Changes 3010538
2867 -- Need not use map_new_amg_msg api as no context is involved and no _amg messages
2868 -- have been created.
2869 IF p_calling_module = 'AMG' THEN
2870
2871 -- Begin fix for Bug # 4373055.
2872
2873 /*
2874
2875 l_process_code :=
2876 PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_CODE(p_project_id => p_project_id
2877 ,p_structure_type => p_structure_type );
2878 IF nvl(l_process_code,'-1') = 'WUP' THEN
2879
2880 l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => p_project_id -- Bug 3091798
2881 ,p_structure_type => p_structure_type );
2882 PA_UTILS.ADD_MESSAGE
2883 (p_app_short_name => 'PA',
2884 -- p_msg_name => 'PA_PS_VD_UPDWBS_PRC_INPROC'); Bug 3091798
2885 p_msg_name => 'PA_PS_UPDWBS_PRC_INPROC_AMG', -- Bug 3091798. Message includes the request id.
2886 p_token1 => 'REQUESTID',
2887 p_value1 => l_request_id);
2888
2889 raise api_error;
2890
2891 ELSIF nvl(l_process_code,'-1') = 'WUE' THEN
2892 l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => p_project_id --Bug 3091798
2893 ,p_structure_type => p_structure_type );
2894 PA_UTILS.ADD_MESSAGE
2895 (p_app_short_name => 'PA',
2896 -- p_msg_name => 'PA_PS_VD_UPD_WBS_PRC_ERR');
2897 p_msg_name => 'PA_PS_UPDWBS_PRC_ERR_AMG', -- Bug 3091798. Message includes the request id.
2898 p_token1 => 'REQUESTID',
2899 p_value1 => l_request_id);
2900
2901 raise api_error;
2902
2903 END IF;
2904
2905 */
2906
2907 PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_MSG(
2908 p_project_id => p_project_id
2909 , p_structure_type => p_structure_type
2910 , p_structure_version_id => null
2911 , p_context => 'UPDATE_AMG'
2912 , x_message_name => l_message_name
2913 , x_message_type => l_message_type
2914 , x_structure_version_id => l_str_ver_id
2915 , x_conc_request_id => l_conc_request_id);
2916
2917
2918 if l_message_name is not null then
2919
2920 PA_UTILS.ADD_MESSAGE(
2921 p_app_short_name => 'PA'
2922 , p_msg_name => l_message_name
2923 , p_token1 => 'REQUESTID'
2924 , p_value1 => l_conc_request_id);
2925
2926 RAISE FND_API.G_EXC_ERROR;
2927 end if;
2928
2929 -- End fix for Bug # 4373055.
2930
2931 END IF ;
2932
2933 -- PA L Changes 3010538
2934
2935 PA_TASK_PUB1.move_task_version(
2936 p_calling_module => p_calling_module
2937 ,p_init_msg_list => l_init_msg_list
2938 ,p_structure_version_id => l_structure_version_id
2939 ,p_task_version_id => l_task_version_id
2940 ,p_ref_task_version_id => l_ref_task_version_id
2941 ,p_peer_or_sub => l_peer_or_sub
2942 ,p_record_version_number => l_record_version_number
2943 ,x_return_status => l_return_status
2944 ,x_msg_count => l_msg_count
2945 ,x_msg_data => l_msg_data
2946 );
2947
2948 IF l_return_status <> 'S'
2949 THEN
2950 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2951 ,p_msg_name => 'PA_PS_TASK_NOT_UPDATED'
2952 /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
2953 ,p_token1 => 'PROJECT'
2954 ,p_value1 => p_project_id
2955 ,p_token2 => 'TASK'
2956 ,p_value2 => l_task_id);
2957 raise api_error;
2958 END IF;
2959 END IF; -- Bug 2790275
2960 END IF;
2961 END IF; --< p-calling_module = 'AMG' >>
2962
2963 -- Bug#Bug#3747312
2964 -- Commenting the below if statement as cur_pa_proj_elem_vers2
2965 -- will take care of not calling the WORKPLAN related API
2966 -- in FINANCIAL alone structure.
2967
2968 --IF p_structure_type = 'WORKPLAN'
2969 --THEN
2970 --get task version id of the task being moved or updated if
2971 IF l_task_version_id IS NULL
2972 THEN
2973 --rtarway, 3666023, replace by l_task_id
2974 --OPEN cur_pa_task_ver( p_structure_version_id, p_task_id ); --structure version id should be provided for a workplan structure
2975 OPEN cur_pa_task_ver( p_structure_version_id, l_task_id );
2976 FETCH cur_pa_task_ver INTO l_task_version_id, l_record_version_number;
2977 CLOSE cur_pa_task_ver;
2978 END IF;
2979
2980 --END IF; --<< p_structrue_type >
2981
2982
2983 OPEN cur_pa_proj_elem_vers2(l_task_version_id);
2984 FETCH cur_pa_proj_elem_vers2 INTO l_dummy_char;
2985 IF cur_pa_proj_elem_vers2%FOUND
2986 THEN
2987
2988 OPEN cur_proj_sch( l_task_version_id );
2989 FETCH cur_proj_sch INTO l_pev_schedule_id, l_record_version_number;
2990 CLOSE cur_proj_sch;
2991
2992 -- xxlu added DFF attributes
2993 OPEN cur_ver_sch_attr_rec(l_task_version_id);
2994 FETCH cur_ver_sch_attr_rec INTO l_ver_sch_attr_rec;
2995 CLOSE cur_ver_sch_attr_rec;
2996
2997 --bug 2824612
2998
2999 SELECT type_id INTO l_task_type_id
3000 FROM pa_proj_elements
3001 --WHERE proj_element_id = p_task_id, rtarway, BUG 3666023, replace by l_task_id
3002 WHERE proj_element_id = l_task_id
3003 AND project_id = p_project_id;
3004
3005 IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_wq_enabled(l_task_type_id) OR
3006 'N' = PA_PROGRESS_UTILS.get_project_wq_flag(p_project_id)) THEN
3007 IF (P_PLANNED_WORK_QUANTITY <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND P_PLANNED_WORK_QUANTITY IS NOT NULL) THEN
3008 l_wq_planned_quantity := NULL;
3009 END IF;
3010 ELSE
3011 l_wq_planned_quantity := P_PLANNED_WORK_QUANTITY; --bug 2826992
3012 END IF;
3013
3014 --bug 2824612
3015
3016 --Bug 6153503 start
3017 -- rtarway, BUG 3908013
3018 if (--p_attribute_category is null or
3019 p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3020 then
3021 l_attribute_category := l_ver_sch_attr_rec.attribute_category;
3022 else
3023 l_attribute_category := p_attribute_category;
3024 end if;
3025
3026
3027
3028 if (--p_attribute1 is null or
3029 p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3030 then
3031 l_attribute1 := l_ver_sch_attr_rec.attribute1;
3032 else
3033 l_attribute1 := p_attribute1;
3034 end if;
3035
3036
3037
3038 if (--p_attribute2 is null or
3039 p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3040 then
3041 l_attribute2 := l_ver_sch_attr_rec.attribute2;
3042 else
3043 l_attribute2 := p_attribute2;
3044 end if;
3045
3046
3047 if (--p_attribute3 is null or
3048 p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3049 then
3050 l_attribute3 := l_ver_sch_attr_rec.attribute3;
3051 else
3052 l_attribute3 := p_attribute3;
3053 end if;
3054
3055 if (--p_attribute4 is null or
3056 p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3057 then
3058 l_attribute4 := l_ver_sch_attr_rec.attribute4;
3059 else
3060 l_attribute4 := p_attribute4;
3061 end if;
3062
3063 if (--p_attribute5 is null or
3064 p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3065 then
3066 l_attribute5 := l_ver_sch_attr_rec.attribute5;
3067 else
3068 l_attribute5 := p_attribute5;
3069 end if;
3070
3071 if (--p_attribute6 is null or
3072 p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3073 then
3074 l_attribute6 := l_ver_sch_attr_rec.attribute6;
3075 else
3076 l_attribute6 := p_attribute6;
3077 end if;
3078
3079 if (--p_attribute7 is null or
3080 p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) -- Changed for Bug #6153681
3081 then
3082 l_attribute7 := l_ver_sch_attr_rec.attribute7;
3083 else
3084 l_attribute7 := p_attribute7;
3085 end if;
3086
3087 if (--p_attribute8 is null or
3088 p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3089 then
3090 l_attribute8 := l_ver_sch_attr_rec.attribute8;
3091 else
3092 l_attribute8 := p_attribute8;
3093 end if;
3094
3095 if (--p_attribute9 is null or
3096 p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3097 then
3098 l_attribute9 := l_ver_sch_attr_rec.attribute9;
3099 else
3100 l_attribute9 := p_attribute9;
3101 end if;
3102
3103 if (--p_attribute10 is null or
3104 p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3105 then
3106 l_attribute10 := l_ver_sch_attr_rec.attribute10;
3107 else
3108 l_attribute10 := p_attribute10;
3109 end if;
3110
3111 if (--p_attribute10 is null or
3112 p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3113 then
3114 l_attribute11 := l_ver_sch_attr_rec.attribute11;
3115 else
3116 l_attribute11 := p_attribute11;
3117 end if;
3118
3119 if (--p_attribute10 is null or
3120 p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3121 then
3122 l_attribute12 := l_ver_sch_attr_rec.attribute12;
3123 else
3124 l_attribute12 := p_attribute12;
3125 end if;
3126
3127 if (--p_attribute10 is null or
3128 p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3129 then
3130 l_attribute13 := l_ver_sch_attr_rec.attribute13;
3131 else
3132 l_attribute13 := p_attribute13;
3133 end if;
3134
3135 if (--p_attribute10 is null or
3136 p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3137 then
3138 l_attribute14 := l_ver_sch_attr_rec.attribute14;
3139 else
3140 l_attribute14 := p_attribute14;
3141 end if;
3142
3143
3144 if (--p_attribute10 is null or
3145 p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3146 then
3147 l_attribute15 := l_ver_sch_attr_rec.attribute15;
3148 else
3149 l_attribute15 := p_attribute15;
3150 end if;
3151
3152
3153 --if added while fixing BUG 3919800
3154 --Add validation for PA_PROJ_ELEM_VER_SCH_DESC_FLEX
3155 -- if l_attribute_category is not null and l_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3156 -- then
3157 pa_task_utils.validate_flex_fields(
3158 p_desc_flex_name => 'PA_PROJ_ELEM_VER_SCH_DESC_FLEX'
3159 ,p_attribute_category => l_attribute_category
3160 ,p_attribute1 => l_attribute1
3161 ,p_attribute2 => l_attribute2
3162 ,p_attribute3 => l_attribute3
3163 ,p_attribute4 => l_attribute4
3164 ,p_attribute5 => l_attribute5
3165 ,p_attribute6 => l_attribute6
3166 ,p_attribute7 => l_attribute7
3167 ,p_attribute8 => l_attribute8
3168 ,p_attribute9 => l_attribute9
3169 ,p_attribute10 => l_attribute10
3170 ,p_attribute11 => l_attribute11
3171 ,p_attribute12 => l_attribute12
3172 ,p_attribute13 => l_attribute13
3173 ,p_attribute14 => l_attribute14
3174 ,p_attribute15 => l_attribute15
3175 ,p_RETURN_msg => l_return_msg
3176 ,p_validate_status => l_validate_status
3177 );
3178 --end if;
3179
3180 IF l_validate_status = 'N'
3181 THEN
3182 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3183 THEN
3184 pa_interface_utils_pub.map_new_amg_msg
3185 ( p_old_message_code => 'PA_INVALID_FF_VALUES'
3186 ,p_msg_attribute => 'CHANGE'
3187 ,p_resize_flag => 'N'
3188 ,p_msg_context => 'FLEX'
3189 ,p_attribute1 => l_return_msg
3190 ,p_attribute2 => ''
3191 ,p_attribute3 => ''
3192 ,p_attribute4 => ''
3193 ,p_attribute5 => '');
3194 END IF;
3195 RAISE FND_API.G_EXC_ERROR;
3196 END IF;
3197
3198 --Bug 6153503 end
3199 --End add rtarway, 3908013
3200
3201
3202
3203 PA_TASK_PUB1.Update_Schedule_Version(
3204 p_calling_module => p_calling_module
3205 ,p_init_msg_list => l_init_msg_list
3206 ,p_pev_schedule_id => l_pev_schedule_id
3207 ,p_calendar_id => p_calendar_id
3208 ,p_scheduled_start_date => p_scheduled_start_date
3209 ,p_scheduled_end_date => p_scheduled_finish_date
3210 ,p_obligation_start_date => p_obligation_start_date
3211 ,p_obligation_end_date => p_obligation_finish_date
3212 ,p_actual_start_date => p_actual_start_date
3213 ,p_actual_finish_date => p_actual_finish_date
3214 ,p_estimate_start_date => p_estimated_start_date
3215 ,p_estimate_finish_date => p_estimated_finish_date
3216 ,p_duration => p_duration
3217 ,p_early_start_date => p_early_start_date
3218 ,p_early_end_date => p_early_finish_date
3219 ,p_late_start_date => p_late_start_date
3220 ,p_late_end_date => p_late_finish_date
3221 ,p_milestone_flag => p_milestone_flag
3222 ,p_critical_flag => p_critical_flag
3223 ,p_WQ_PLANNED_QUANTITY => l_wq_planned_quantity --bug 2824612
3224 ,p_PLANNED_EFFORT => p_planned_effort
3225 ,p_record_version_number => l_record_version_number
3226 --Changed the param names to l_....rtarway, BUG 3908013
3227 ,p_attribute_category => l_attribute_category
3228 ,p_attribute1 => l_attribute1
3229 ,p_attribute2 => l_attribute2
3230 ,p_attribute3 => l_attribute3
3231 ,p_attribute4 => l_attribute4
3232 ,p_attribute5 => l_attribute5
3233 ,p_attribute6 => l_attribute6
3234 ,p_attribute7 => l_attribute7
3235 ,p_attribute8 => l_attribute8
3236 ,p_attribute9 => l_attribute9
3237 ,p_attribute10 => l_attribute10
3238 --end rtarway, BUG 3908013
3239 --Bug 6153503
3240 ,p_attribute11 => l_attribute11--l_ver_sch_attr_rec.attribute11
3241 ,p_attribute12 => l_attribute12--l_ver_sch_attr_rec.attribute12
3242 ,p_attribute13 => l_attribute13--l_ver_sch_attr_rec.attribute13
3243 ,p_attribute14 => l_attribute14--l_ver_sch_attr_rec.attribute14
3244 ,p_attribute15 => l_attribute15--l_ver_sch_attr_rec.attribute15
3245 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
3246 ,p_ext_act_duration => p_ext_act_duration
3247 ,p_ext_remain_duration => p_ext_remain_duration
3248 ,p_ext_sch_duration => p_ext_sch_duration
3249 -- (end venkat) new params for bug #3450684 ------------------------------------------------
3250
3251
3252 -- begin Bug 3654243 -----------------------------------------------------------------------
3253 ,p_def_sch_tool_tsk_type_code => p_sch_tool_tsk_type_code
3254 ,p_constraint_type_code => p_constraint_type_code
3255 ,p_constraint_date => p_constraint_date
3256 ,p_free_slack => p_free_slack
3257 ,p_total_slack => p_total_slack
3258 ,p_effort_driven_flag => p_effort_driven_flag
3259 ,p_level_assignments_flag => p_level_assignments_flag
3260 -- end Bug 3654243 -------------------------------------------------------------------------
3261 ,x_return_status => l_return_status
3262 ,x_msg_count => l_msg_count
3263 ,x_msg_data => l_msg_data
3264 );
3265 -- end xxlu changes ,
3266 IF l_return_status <> 'S'
3267 THEN
3268 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3269 ,p_msg_name => 'PA_PS_TASK_NOT_UPDATED'
3270 /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
3271 ,p_token1 => 'PROJECT'
3272 ,p_value1 => p_project_id
3273 ,p_token2 => 'TASK'
3274 ,p_value2 => l_task_id);
3275 raise api_error;
3276 END IF;
3277
3278 --The following API should NOT be called if CREATE_TASK_STRUCTURE is called from AMG.
3279 --AMG recalculates the weightings once all the tasks are created.
3280 IF p_calling_module = 'FORMS'
3281 THEN
3282 /* PA_PROJ_TASK_STRUC_PUB.rollup_dates(
3283 p_tasks_in => l_tasks_out --null if called for one task
3284 ,p_task_version_id => l_task_version_id
3285 ,p_structure_version_id => l_structure_version_id
3286 ,p_project_id => p_project_id
3287 ,x_msg_count => l_msg_count
3288 ,x_msg_data => l_msg_data
3289 ,x_return_status => l_return_status
3290 );
3291 IF l_return_status <> 'S'
3292 THEN
3293 raise api_error;
3294 END IF;
3295 */
3296 null;
3297 END IF;
3298 END IF; --< cur_pa_proj_elem_vers2 >
3299
3300 /* Bug # 3420093 - Adding Progress Management modifications to update_task flow. */
3301
3302 -- Bug#3747312
3303 -- Added PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN = 'N'
3304 -- as the add_planning_txn/delete_planning_txn should be called in
3305 -- SHARED case and for SPLIT case if p_structure_type is passed as
3306 -- WORKPLAN.
3307
3308
3309 /* Commenting for bug 7358214
3310
3311 if (p_structure_type = 'WORKPLAN' OR nvl(PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( p_project_id ),'N') = 'N')then
3312
3313 for l_task_cur_rec in l_task_cur(p_project_id, l_structure_version_id)
3314 loop
3315 if (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(l_task_cur_rec.element_version_id) = 'Y') then
3316 l_add_task_ver_ids.extend(1);
3317 l_add_planned_effort.extend(1);
3318 l_add_start_date.extend(1);
3319 l_add_end_date.extend(1);
3320
3321 l_add_task_ver_ids(l_add_task_ver_ids.count):= l_task_cur_rec.element_version_id;
3322 l_add_planned_effort(l_add_planned_effort.count):= l_task_cur_rec.planned_effort;
3323 l_add_start_date(l_add_start_date.count):= l_task_cur_rec.actual_start_date;
3324 l_add_end_date(l_add_end_date.count):= l_task_cur_rec.actual_finish_date;
3325 else
3326 l_del_task_ver_ids.extend(1);
3327 l_del_task_ver_ids(l_del_task_ver_ids.count):= l_task_cur_rec.element_version_id;
3328 end if;
3329 end loop;
3330 end if;
3331
3332 -- Calling pa_task_pub1.call_add_planning_txns for lowest level tasks.
3333 --Bug 5256359. Introduced the loop to call pa_task_pub1.call_add_planning_txns
3334 --for set of 1000 records.
3335 rec_count:=0;
3336 for i in 1..l_add_task_ver_ids.count loop
3337
3338 rec_count := rec_count+1;
3339 l_add_task_ver_ids_prm.extend;
3340 l_add_planned_effort_prm.extend;
3341 l_add_start_date_prm.extend;
3342 l_add_end_date_prm.extend;
3343
3344 l_add_task_ver_ids_prm(rec_count) :=l_add_task_ver_ids(i);
3345 l_add_planned_effort_prm(rec_count):=l_add_planned_effort(i);
3346 l_add_start_date_prm(rec_count) :=l_add_start_date(i);
3347 l_add_end_date_prm(rec_count) :=l_add_end_date(i);
3348
3349 if rec_count=1000 OR
3350 i=l_add_task_ver_ids.count then
3351 begin
3352 pa_task_pub1.call_add_planning_txns(
3353 p_tasks_ver_ids => l_add_task_ver_ids_prm,
3354 p_planned_effort => l_add_planned_effort_prm,
3355 p_project_id => p_project_id,
3356 p_structure_version_id => l_structure_version_id, --replace p_structure_version_id, bug 3838186
3357 p_start_date => l_add_start_date_prm,
3358 p_end_date => l_add_end_date_prm,
3359 p_pm_product_code => p_pm_product_code, --bug 3811243
3360 x_return_status => l_return_status,
3361 x_msg_count => l_msg_count,
3362 x_msg_data => l_msg_data
3363 );
3364 exception
3365 when others then
3366 fnd_msg_pub.add_exc_msg(p_pkg_name => 'pa_project_pub',
3367 p_procedure_name => 'CREATE_PROJECT',
3368 p_error_text => substrb('PA_TASK_PUB1.CALL_ADD_PLANNING_TXNS:'||sqlerrm,1,240));
3369 raise fnd_api.g_exc_error;
3370 end;
3371
3372 l_add_task_ver_ids_prm := PA_NUM_1000_NUM();
3373 l_add_planned_effort_prm := PA_NUM_1000_NUM();
3374 l_add_start_date_prm := PA_DATE_1000_DATE();
3375 l_add_end_date_prm := PA_DATE_1000_DATE();
3376
3377 rec_count:=0;
3378
3379 end if;
3380
3381 end loop;
3382 --End of loop for bug 5256359
3383
3384 */
3385 -- End of commenting for bug 7358214
3386
3387 -- Added for bug 7358214
3388 IF (p_structure_type = 'WORKPLAN' OR
3389 nvl(PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( p_project_id ),'N') = 'N')
3390 THEN
3391 FOR l_task_cur_rec in l_task_cur(p_project_id, l_structure_version_id) LOOP
3392
3393 -- Bug 7437034 (Initialize l_hidden_assgn to N for each iteration)
3394 l_hidden_assgn := 'N';
3395
3396 OPEN check_hidden_assgn_exists(l_task_cur_rec.element_version_id);
3397 FETCH check_hidden_assgn_exists into l_hidden_assgn;
3398 CLOSE check_hidden_assgn_exists;
3399
3400 IF PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(l_task_cur_rec.element_version_id)
3401 = 'N' AND l_hidden_assgn = 'Y' THEN
3402 l_del_task_ver_ids.extend(1);
3403 l_del_task_ver_ids(l_del_task_ver_ids.count):=
3404 l_task_cur_rec.element_version_id;
3405 END IF;
3406 END LOOP;
3407 END IF;
3408 -- End of bug 7358214
3409
3410 -- Calling pa_fp_planning_transaction_pub.delete_planning_transactions for higher level tasks.
3411
3412 IF l_del_task_ver_ids.exists(1) THEN -- Bug 7358214
3413 begin
3414 pa_fp_planning_transaction_pub.delete_planning_transactions
3415 (
3416 p_context => 'WORKPLAN'
3417 ,p_task_or_res => 'TASKS'
3418 ,p_element_version_id_tbl => l_del_task_ver_ids
3419 ,x_return_status => l_return_status
3420 ,x_msg_count => l_msg_count
3421 ,x_msg_data => l_msg_data
3422 );
3423 exception
3424 when others then
3425 fnd_msg_pub.add_exc_msg(p_pkg_name => 'pa_project_pub',
3426 p_procedure_name => 'CREATE_PROJECT',
3427 p_error_text => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.DELETE_PLANNING_TRANSACTIONS:'||SQLERRM,1,240));
3428 raise fnd_api.g_exc_error;
3429 end;
3430 END IF ; --bug 7358214
3431 /* Bug # 3420093 - Adding Progress Management modifications to update_task flow. */
3432
3433 -- Progress Management Changes. Bug # 3420093.
3434
3435 /* Commenting out the condition to check if workplan versioning is enabled for the project
3436 as PA_TASK_PUB1.update_task_det_sch_info() should be called for both versioning enabled
3437 and versioning disabled projects. */
3438
3439 /* if (PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED(p_project_id) = 'Y') then */
3440
3441 /* Calling API: pa_task_pub1.update_task_det_sch_info() only if calling module is not 'FORMS'. */
3442
3443 if p_calling_module <> 'FORMS' then
3444
3445 pa_task_pub1.update_task_det_sch_info(
3446 p_calling_module => p_calling_module
3447 ,p_task_ver_id => l_task_version_id
3448 ,p_project_id => p_project_id
3449 ,p_planned_effort => p_planned_effort
3450 ,p_ETC_effort => p_etc_effort
3451 ,p_structure_version_id => p_structure_version_id
3452 ,p_percent_complete => p_percent_complete
3453 ,x_return_status => x_return_status
3454 ,x_msg_count => x_msg_count
3455 ,x_msg_data => x_msg_data
3456 );
3457
3458 end if;
3459
3460 /* end if; */
3461
3462 -- Progress Management Changes. Bug # 3420093.
3463
3464 x_return_status := FND_API.G_RET_STS_SUCCESS;
3465 EXCEPTION
3466 WHEN API_ERROR THEN
3467 x_return_status := FND_API.G_RET_STS_ERROR;
3468 rollback to update_task_struc;
3469 WHEN OTHERS THEN
3470 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3471 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
3472 p_procedure_name => 'update_task_structure',
3473 p_error_text => SUBSTRB(SQLERRM,1,240));
3474 rollback to update_task_struc;
3475 raise;
3476 END update_task_structure;
3477
3478 -- API name : delete_task_structure
3479 -- Type : PL/sql Public procedure
3480 -- Pre-reqs : None
3481 -- Return Value : N/A
3482 -- Prameters
3483 -- p_calling_module IN VARCHAR2
3484 -- ,p_task_id IN NUMBER
3485 -- ,p_record_version_number IN NUMBER
3486 -- ,x_msg_count OUT NUMBER
3487 -- ,x_msg_data OUT VARCHAR2
3488 -- ,x_return_status OUT VARCHAR2--
3489 -- History
3490 --
3491 -- 25-APR-02 MAansari -Created
3492 --
3493 -- Notes: This api is called from form PAXPREPR.fmb ON-DELETE of tasks block.
3494 -- The call is in PA_PROJECT_STRUCTURES.delete_task_structure API.
3495
3496 PROCEDURE delete_task_structure
3497 (
3498 p_calling_module IN VARCHAR2
3499 ,p_task_id IN NUMBER
3500 ,p_task_version_id IN NUMBER := -9999 --mandatory for workplan task version
3501 ,p_project_id IN NUMBER := -9999 --bug 2765115
3502 ,p_structure_type IN VARCHAR2 := 'FINANCIAL' --bug 3301192
3503 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
3504 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3505 ,x_return_status OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
3506 IS
3507
3508 l_return_status VARCHAR2(1);
3509 l_msg_count NUMBER;
3510 l_msg_data VARCHAR2(2000);
3511 l_task_version_id NUMBER;
3512 l_record_version_number NUMBER;
3513 API_ERROR EXCEPTION;
3514
3515 CURSOR cur_task_ver_id IS
3516 SELECT element_version_id, record_version_number
3517 FROM pa_proj_element_versions ppev
3518 WHERE proj_element_id = p_task_id
3519 AND object_type = 'PA_TASKS'
3520 AND parent_structure_version_id = PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_FIN_STRUC_VER_ID( p_project_id ); -- bug 2765115
3521
3522 CURSOR cur_task_ver_id2 IS
3523 SELECT record_version_number
3524 FROM pa_proj_element_versions ppev
3525 WHERE element_version_id = p_task_version_id
3526 AND object_type = 'PA_TASKS';
3527
3528 -- bug 2765115
3529 CURSOR cur_pa_proj
3530 IS
3531 SELECT template_flag from pa_projects_all where project_id = p_project_id;
3532
3533 l_template_flag VARCHAR2(1) := 'N';
3534
3535 CURSOR cur_task_ver_id3 IS
3536 SELECT element_version_id, record_version_number
3537 FROM pa_proj_element_versions ppev
3538 WHERE proj_element_id = p_task_id
3539 AND object_type = 'PA_TASKS'
3540 AND project_id = p_project_id;
3541 -- bug 2765115
3542
3543
3544 BEGIN
3545
3546 --Clear Error Messages.
3547 IF FND_MSG_PUB.count_msg = 0
3548 THEN
3549 FND_MSG_PUB.initialize;
3550 END IF;
3551
3552 SAVEPOINT delete_task_struc;
3553
3554 IF p_task_version_id IS NULL OR
3555 p_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
3556 p_task_version_id = -9999
3557 THEN
3558
3559 -- bug 2765115
3560 OPEN cur_pa_proj;
3561 FETCH cur_pa_proj INTO l_template_flag;
3562 CLOSE cur_pa_proj;
3563 -- bug 2765115
3564
3565 IF l_template_flag = 'N' -- bug 2765115
3566 THEN
3567 OPEN cur_task_ver_id;
3568 FETCH cur_task_ver_id INTO l_task_version_id, l_record_version_number;
3569 CLOSE cur_task_ver_id;
3570 END IF; -- bug 2765115
3571
3572 -- bug 2765115
3573 IF l_task_version_id IS NULL
3574 THEN
3575 OPEN cur_task_ver_id3;
3576 FETCH cur_task_ver_id3 INTO l_task_version_id, l_record_version_number;
3577 CLOSE cur_task_ver_id3;
3578 END IF;
3579 -- bug 2765115
3580
3581 ELSE
3582 OPEN cur_task_ver_id2;
3583 FETCH cur_task_ver_id2 INTO l_record_version_number;
3584 CLOSE cur_task_ver_id2;
3585
3586 l_task_version_id := p_task_version_id;
3587 END IF;
3588
3589 IF l_task_version_id > 0
3590 THEN
3591 PA_TASK_PUB1.Delete_Task_Version(
3592 p_calling_module => p_calling_module
3593 ,p_structure_type => p_structure_type --bug 3301192
3594 ,p_task_version_id => l_task_version_id
3595 ,p_record_version_number => l_record_version_number
3596 ,x_return_status => l_return_status
3597 ,x_msg_count => l_msg_count
3598 ,x_msg_data => l_msg_data
3599 );
3600 END IF;
3601
3602 IF l_return_status <> 'S'
3603 THEN
3604 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3605 ,p_msg_name => 'PA_PS_TASK_NOT_DELETED');
3606 raise api_error;
3607 END IF;
3608 x_return_status := FND_API.G_RET_STS_SUCCESS;
3609
3610 EXCEPTION
3611 WHEN API_ERROR THEN
3612 x_return_status := FND_API.G_RET_STS_ERROR;
3613 rollback to delete_task_struc;
3614 WHEN OTHERS THEN
3615 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3616 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
3617 p_procedure_name => 'delete_task_structure',
3618 p_error_text => SUBSTRB(SQLERRM,1,240));
3619 rollback to delete_task_struc;
3620 raise;
3621 END delete_task_structure;
3622
3623 -- API name : delete_project_structure
3624 -- Type : PL/sql Public procedure
3625 -- Pre-reqs : None
3626 -- Return Value : N/A
3627 -- Prameters
3628 -- p_calling_module IN VARCHAR2
3629 -- ,p_project_id IN NUMBER
3630 -- ,x_msg_count OUT NUMBER
3631 -- ,x_msg_data OUT VARCHAR2
3632 -- ,x_return_status OUT VARCHAR2--
3633 -- History
3634 --
3635 -- 26-APR-02 MAansari -Created
3636 -- 01-JUL-2004 Rakesh Raghavan Modified.
3637 --
3638 -- Notes: This api is called from form PAXPREPR.fmb ON-DELETE of project block.
3639 -- The call is in PA_PROJECT_STRUCTURES.delete_project_structure API.
3640 -- This api deletes all records from structure tables.
3641
3642 PROCEDURE delete_project_structure
3643 (
3644 p_calling_module IN VARCHAR2
3645 ,p_project_id IN NUMBER
3646 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
3647 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3648 ,x_return_status OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
3649
3650 l_return_status VARCHAR2(1);
3651 l_msg_count NUMBER;
3652 l_msg_data VARCHAR2(2000);
3653 l_error_message_code VARCHAR2(250);
3654 l_task_version_id NUMBER;
3655 l_record_version_number NUMBER;
3656 API_ERROR EXCEPTION;
3657
3658 CURSOR cur_str_ver
3659 IS
3660 SELECT rowid, element_version_id
3661 FROM pa_proj_element_versions
3662 WHERE OBJECT_TYPE = 'PA_STRUCTURES'
3663 AND project_id = p_project_id;
3664
3665 CURSOR cur_task_ver( c_parent_structure_version_id NUMBER )
3666 IS
3667 SELECT rowid, element_version_id
3668 FROM pa_proj_element_versions
3669 WHERE OBJECT_TYPE = 'PA_TASKS'
3670 AND project_id = p_project_id
3671 AND parent_structure_version_id = c_parent_structure_version_id;
3672
3673 CURSOR cur_proj_elems
3674 IS
3675 SELECT rowid, proj_element_id
3676 FROM pa_proj_elements
3677 WHERE project_id = p_project_id;
3678
3679
3680 BEGIN
3681
3682 --Clear Error Messages.
3683 IF FND_MSG_PUB.count_msg = 0
3684 THEN
3685 FND_MSG_PUB.initialize;
3686 END IF;
3687
3688 SAVEPOINT delete_project_struc;
3689
3690
3691 FOR cur_str_ver_rec IN cur_str_ver LOOP
3692 FOR cur_task_ver_rec IN cur_task_ver( cur_str_ver_rec.element_version_id ) LOOP
3693 --Check to see if deleting a version is ok
3694 PA_PROJ_ELEMENTS_UTILS.Check_Delete_task_Ver_Ok(
3695 p_project_id => p_project_id
3696 ,p_task_version_id => cur_task_ver_rec.element_version_id
3697 ,p_parent_structure_ver_id => cur_str_ver_rec.element_version_id
3698 ,x_return_status => l_return_status
3699 ,x_error_message_code => l_error_message_code
3700 );
3701
3702 IF l_return_status <> 'S'
3703 THEN
3704 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3705 ,p_msg_name => l_error_message_code);
3706 raise api_error;
3707 END IF;
3708
3709 DELETE FROM pa_object_relationships
3710 WHERE relationship_type = 'S' AND
3711 (object_id_from1 = cur_task_ver_rec.element_version_id OR
3712 object_id_to1 = cur_task_ver_rec.element_version_id);
3713
3714 PA_PROJ_ELEMENT_VERSIONS_PKG.DELETE_ROW( cur_task_ver_rec.rowid );
3715
3716
3717 END LOOP;
3718
3719 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
3720 p_project_id => p_project_id
3721 ,p_structure_version_id => cur_str_ver_rec.element_version_id
3722 ,x_return_status => l_return_status
3723 ,x_error_message_code => l_error_message_code
3724 );
3725
3726 IF l_return_status <> 'S'
3727 THEN
3728 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3729 ,p_msg_name => l_error_message_code);
3730 raise api_error;
3731 END IF;
3732
3733 DELETE FROM pa_object_relationships
3734 WHERE relationship_type = 'S' AND
3735 (object_id_from1 = cur_str_ver_rec.element_version_id OR
3736 object_id_to1 = cur_str_ver_rec.element_version_id);
3737
3738 PA_PROJ_ELEMENT_VERSIONS_PKG.DELETE_ROW( cur_str_ver_rec.rowid );
3739
3740 END LOOP;
3741
3742 FOR cur_proj_elems_rec IN cur_proj_elems LOOP
3743 DELETE FROM pa_proj_structure_types
3744 WHERE proj_element_id = cur_proj_elems_rec.proj_element_id;
3745
3746 PA_PROJ_ELEMENTS_PKG.DELETE_ROW( cur_proj_elems_rec.rowid );
3747 END LOOP;
3748
3749 DELETE FROM pa_proj_elem_ver_schedule where project_id = p_project_id;
3750 DELETE FROM pa_proj_elem_ver_structure where project_id = p_project_id;
3751
3752 /* Code to delete project records from tables: pa_progress_rollup, pa_proj_progress_attr
3753 and pa_proj_workplan_attr. */
3754
3755 BEGIN
3756
3757 PA_PROGRESS_PUB.delete_working_wp_progress (
3758 p_project_id => p_project_id
3759 ,p_calling_context => 'PROJECT_STRUCTURE'
3760 ,x_return_status => x_return_status
3761 ,x_msg_count => x_msg_count
3762 ,x_Msg_data => x_msg_data
3763 );
3764 EXCEPTION
3765
3766 WHEN OTHERS THEN
3767
3768 fnd_msg_pub.add_exc_msg(
3769 p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
3770 p_procedure_name => 'delete_project_structure',
3771 p_error_text => SUBSTR('PA_PROGRESS_PUB.delete_working_wp_progress:'||SQLERRM,1,240));
3772
3773 RAISE FND_API.G_EXC_ERROR;
3774
3775 END;
3776
3777
3778 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3779
3780 RAISE FND_API.G_EXC_ERROR;
3781
3782 END IF;
3783
3784 x_return_status := FND_API.G_RET_STS_SUCCESS;
3785
3786 EXCEPTION
3787 WHEN API_ERROR THEN
3788 x_return_status := FND_API.G_RET_STS_ERROR;
3789 rollback to delete_project_struc;
3790 WHEN OTHERS THEN
3791 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3792 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
3793 p_procedure_name => 'delete_project_structure',
3794 p_error_text => SUBSTRB(SQLERRM,1,240));
3795 rollback to delete_project_struc;
3796 raise;
3797 END delete_project_structure;
3798
3799 -- API name : Published_version_exists
3800 -- Type : PL/sql Public Function
3801 -- Pre-reqs : None
3802 -- Return Value : N/A
3803 -- Prameters
3804 -- p_project_id IN NUMBER
3805 -- History
3806 --
3807 -- 29-APR-02 MAansari -Created
3808 --
3809 -- Notes: This api is called from form PAXPREPR.fmb ON-DELETE of task block.
3810 -- To check if there exists any published ver.
3811 -- bug 3654011: Added conditions to check for shared or workplan only structure
3812
3813 FUNCTION Published_version_exists
3814 (
3815 p_project_id IN NUMBER
3816 ) RETURN VARCHAR2 IS
3817
3818 CURSOR cur_pub_versions is
3819 select 'Y'
3820 from pa_proj_elem_ver_structure ppevs,
3821 pa_proj_structure_types ppst,
3822 pa_structure_types pst
3823 where ppevs.project_id = p_project_id
3824 and ppevs.STATUS_CODE = 'STRUCTURE_PUBLISHED'
3825 and ppevs.proj_element_id = ppst.proj_element_id
3826 and ppst.structure_type_id = pst.structure_type_id
3827 and pst.structure_type_class_code = 'WORKPLAN';
3828 l_dummy_char VARCHAR2(1);
3829 BEGIN
3830 OPEN cur_pub_versions;
3831 FETCH cur_pub_versions INTO l_dummy_char;
3832 IF cur_pub_versions%FOUND
3833 THEN
3834 CLOSE cur_pub_versions;
3835 RETURN 'Y';
3836 ELSE
3837 CLOSE cur_pub_versions;
3838 RETURN 'N';
3839 END IF;
3840 END Published_version_exists;
3841
3842 -- API name : approve_project
3843 -- Type : PL/sql Public Function
3844 -- Pre-reqs : None
3845 -- Return Value : 'Y', 'N'
3846 -- Prameters
3847 -- p_project_id IN NUMBER
3848 -- History
3849 --
3850 -- 29-APR-02 MAansari -Created
3851 --
3852 -- Notes: This api is called from Pa_project_stus_utils.Handle_Project_Status_Change api
3853 -- to check the following before changing status to APPROVE.
3854 -- 1) The project should contain one structure for Workplan and Costing
3855 -- 2) There should be a published version.
3856
3857 FUNCTION approve_project
3858 (
3859 p_project_id IN NUMBER
3860 ) RETURN VARCHAR2 IS
3861 CURSOR cur_proj_strs
3862 IS
3863 SELECT 'X'
3864 FROM pa_projects_all
3865 WHERE project_id = p_project_id
3866 AND split_cost_from_workplan_flag = 'N';
3867
3868 CURSOR cur_pub_versions is
3869 select 'Y'
3870 from pa_proj_elem_ver_structure
3871 where project_id = p_project_id
3872 and STATUS_CODE = 'STRUCTURE_PUBLISHED';
3873
3874 l_approve VARCHAR2(1);
3875 l_dummy_char VARCHAR2(1);
3876 BEGIN
3877 OPEN cur_proj_strs;
3878 FETCH cur_proj_strs INTO l_dummy_char;
3879 IF cur_proj_strs%FOUND
3880 THEN
3881 l_approve := 'Y';
3882 OPEN cur_pub_versions;
3883 FETCH cur_pub_versions INTO l_dummy_char;
3884 IF cur_pub_versions%NOTFOUND
3885 THEN
3886 l_approve := 'N';
3887 END IF;
3888 CLOSE cur_pub_versions;
3889 ELSE
3890 CLOSE cur_proj_strs;
3891 l_approve := 'Y';
3892 END IF;
3893 RETURN ( l_approve );
3894 END approve_project;
3895
3896 -- API name : Is_PJT_Licensed
3897 -- Type : PL/sql Public Function
3898 -- Pre-reqs : None
3899 -- Return Value : 'Y', 'N'
3900 -- Prameters
3901 -- History
3902 --
3903 -- 01-MAY-02 MAansari -Created
3904 --
3905 -- Notes: This api is called from Projects form and Self Service to display SPLIT_COST_FROM_WORKPLAN_FLAG.
3906
3907 FUNCTION Is_PJT_Licensed RETURN VARCHAR2 IS
3908 BEGIN
3909 RETURN ( PA_INSTALL.IS_PJT_LICENSED );
3910 END Is_PJT_Licensed;
3911
3912 -- API name : Progress_rec_exists
3913 -- Type : PL/sql Public Function
3914 -- Pre-reqs : None
3915 -- Return Value : 'Y', 'N'
3916 -- Prameters
3917 -- p_project_id NUMBER
3918 -- History
3919 --
3920 -- 01-MAY-02 MAansari -Created
3921 --
3922 -- Notes: This api is called from Projects form and Self Service to allow users to update
3923 -- SPLIT_COST_FROM_WORKPLAN_FLAG.
3924
3925 FUNCTION Progress_rec_exists( p_project_id NUMBER ) RETURN VARCHAR2 IS
3926 l_return_value VARCHAR2(1) := 'N';
3927 BEGIN
3928 --l_return_value := call here api from selva's team.
3929 RETURN l_return_value;
3930 END Progress_rec_exists;
3931
3932 -- API name : create_delete_workplan_struc
3933 -- Type : PL/sql Public procedure
3934 -- Pre-reqs : None
3935 -- Return Value : N/A
3936 -- Prameters
3937 -- p_project_id NUMBER
3938 -- p_calling_module IN VARCHAR2
3939 -- p_project_id IN NUMBER
3940 -- p_project_number IN VARCHAR2 := 'JUNK_CHARS'
3941 -- p_project_name IN VARCHAR2 := 'JUNK_CHARS'
3942 -- p_project_description IN VARCHAR2 := 'JUNK_CHARS'
3943 -- p_split_workplan IN VARCHAR2
3944 -- History
3945 --
3946 -- 01-MAY-02 MAansari -Created
3947 --
3948 -- Notes: This api is called from Projects form and Self Service when the SPLIT_COST_FROM_WORKPLAN_FLAG
3949 -- is checked
3950
3951 PROCEDURE create_delete_workplan_struc(
3952 p_calling_module IN VARCHAR2
3953 ,p_project_id IN NUMBER
3954 ,p_project_number IN VARCHAR2
3955 ,p_project_name IN VARCHAR2
3956 ,p_project_description IN VARCHAR2
3957 ,p_split_workplan IN VARCHAR2
3958 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
3959 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3960 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3961 ) IS
3962
3963 l_return_status VARCHAR2(1);
3964 l_msg_count NUMBER;
3965 l_msg_data VARCHAR2(2000);
3966 l_data VARCHAR2(2000);
3967 l_msg_index_out NUMBER;
3968 l_error_message_code VARCHAR2(250);
3969 API_ERROR EXCEPTION;
3970
3971 CURSOR cur_projects
3972 IS
3973 SELECT split_cost_from_workplan_flag
3974 FROM pa_projects_all
3975 WHERE project_id = p_project_id;
3976
3977 CURSOR cur_pa_proj_elems
3978 IS
3979 SELECT proj_element_id
3980 FROM pa_proj_elements
3981 WHERE project_id = p_project_id
3982 AND object_type = 'PA_STRUCTURES';
3983
3984 CURSOR cur_pa_proj_elem_vers( c_structure_id NUMBER )
3985 IS
3986 SELECT element_version_id, record_version_number
3987 FROM pa_proj_element_versions
3988 WHERE project_id = p_project_id
3989 AND object_type = 'PA_STRUCTURES'
3990 AND proj_element_id = c_structure_id;
3991
3992 CURSOR cur_struc_type_id
3993 IS
3994 select structure_type_id
3995 from pa_structure_types
3996 where structure_type_class_code = 'WORKPLAN';
3997
3998 CURSOR cur_pa_proj_elem_vers2
3999 IS
4000 SELECT element_version_id
4001 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
4002 WHERE c.project_id = p_project_id
4003 AND a.structure_type_id = b.structure_type_id
4004 AND b.proj_element_id = c.proj_element_id
4005 AND a.structure_type = 'WORKPLAN';
4006
4007 CURSOR cur_pa_proj_elem_vers3( c_parent_struc_ver_id NUMBER )
4008 IS
4009 SELECT element_version_id
4010 FROM pa_proj_element_versions
4011 WHERE project_id = p_project_id
4012 AND parent_structure_version_id = c_parent_struc_ver_id
4013 AND object_type = 'PA_TASKS';
4014
4015
4016 l_structure_type_id NUMBER;
4017 l_proj_structure_type_id NUMBER;
4018 l_rowid VARCHAR2(18);
4019 l_structure_id NUMBER;
4020 l_structure_version_id NUMBER;
4021 l_split_flag VARCHAR2(1);
4022 x_pev_schedule_id NUMBER;
4023
4024 l_append VARCHAR2(10);
4025 l_suffix VARCHAR2(80);
4026 l_name VARCHAR2(240);
4027 BEGIN
4028
4029 --Clear Error Messages.
4030 IF FND_MSG_PUB.count_msg = 0
4031 THEN
4032 FND_MSG_PUB.initialize;
4033 END IF;
4034
4035 SAVEPOINT create_delete_wp_struc;
4036
4037 OPEN cur_projects;
4038 FETCH cur_projects INTO l_split_flag;
4039 CLOSE cur_projects;
4040
4041 UPDATE pa_projects_all
4042 SET split_cost_from_workplan_flag = p_split_workplan
4043 WHERE project_id = p_project_id;
4044
4045 IF p_split_workplan = l_split_flag
4046 THEN
4047 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4048 ,p_msg_name => 'PA_PS_WRONG_SPLIT_OPTION');
4049 raise api_error;
4050 END IF;
4051
4052 IF p_project_id IS NULL
4053 THEN
4054 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4055 ,p_msg_name => 'PA_PS_PROJ_ID_NULL');
4056 raise api_error;
4057 END IF;
4058
4059 IF p_split_workplan = 'Y'
4060 THEN
4061
4062 IF p_project_number IS NULL OR p_project_number = 'JUNK_CHARS'
4063 THEN
4064 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4065 ,p_msg_name => 'PA_PS_INV_PROJ_NUM');
4066 raise api_error;
4067 END IF;
4068
4069 IF p_project_name IS NULL OR p_project_name = 'JUNK_CHARS'
4070 THEN
4071 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4072 ,p_msg_name => 'PA_PS_INV_PROJ_NAME');
4073 raise api_error;
4074 ELSE
4075 l_name := p_project_name;
4076 END IF;
4077
4078 l_append := ': ';
4079
4080 select meaning
4081 into l_suffix
4082 from pa_lookups
4083 where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
4084 and lookup_code = 'WORKPLAN';
4085
4086 l_name := substr(l_name||l_append||l_suffix, 1, 240);
4087
4088 PA_PROJECT_STRUCTURE_PVT1.SPLIT_WORKPLAN(
4089 p_project_id => p_project_id
4090 ,p_structure_name => l_name
4091 ,p_structure_number => p_project_number
4092 ,p_description => p_project_description
4093 ,x_structure_id => l_structure_id
4094 ,x_structure_version_id => l_structure_version_id
4095 ,x_msg_count => l_msg_count
4096 ,x_msg_data => l_msg_data
4097 ,x_return_status => l_return_status
4098 );
4099
4100 l_msg_count := FND_MSG_PUB.count_msg;
4101 if l_msg_count > 0 then
4102 x_msg_count := l_msg_count;
4103 if x_msg_count = 1 then
4104 pa_interface_utils_pub.get_messages
4105 (p_encoded => FND_API.G_TRUE,
4106 p_msg_index => 1,
4107 p_msg_count => l_msg_count,
4108 p_msg_data => l_msg_data,
4109 p_data => l_data,
4110 p_msg_index_out => l_msg_index_out);
4111 x_msg_data := l_data;
4112 end if;
4113 raise API_ERROR;
4114 end if;
4115 ELSE --delete the workplan structure including all its structure versions.
4116 FOR cur_pa_proj_elems_rec IN cur_pa_proj_elems LOOP
4117 --should obly be WORKPLAN structure
4118 IF PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure( cur_pa_proj_elems_rec.proj_element_id, 'WORKPLAN' ) = 'Y' AND
4119 PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure( cur_pa_proj_elems_rec.proj_element_id, 'FINANCIAL' ) = 'N'
4120 THEN
4121 FOR cur_pa_proj_elem_vers_rec IN cur_pa_proj_elem_vers( cur_pa_proj_elems_rec.proj_element_id ) LOOP
4122 PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
4123 p_structure_version_id => cur_pa_proj_elem_vers_rec.element_version_id
4124 ,p_record_version_number => cur_pa_proj_elem_vers_rec.record_version_number
4125 ,x_return_status => l_return_status
4126 ,x_msg_count => l_msg_count
4127 ,x_msg_data => l_msg_data
4128 );
4129
4130 l_msg_count := FND_MSG_PUB.count_msg;
4131 if l_msg_count > 0 then
4132 x_msg_count := l_msg_count;
4133 if x_msg_count = 1 then
4134 pa_interface_utils_pub.get_messages
4135 (p_encoded => FND_API.G_TRUE,
4136 p_msg_index => 1,
4137 p_msg_count => l_msg_count,
4138 p_msg_data => l_msg_data,
4139 p_data => l_data,
4140 p_msg_index_out => l_msg_index_out);
4141 x_msg_data := l_data;
4142 end if;
4143 raise API_ERROR;
4144 end if;
4145 END LOOP;
4146 END IF;
4147
4148 --Now associate the WORKPLAN structure type with the COSTING structure.
4149 IF PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure( cur_pa_proj_elems_rec.proj_element_id, 'FINANCIAL' ) = 'Y'
4150 THEN
4151 OPEN cur_struc_type_id;
4152 FETCH cur_struc_type_id INTO l_structure_type_id;
4153 CLOSE cur_struc_type_id;
4154 PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
4155 X_ROWID => l_rowid
4156 , X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
4157 , X_PROJ_ELEMENT_ID => cur_pa_proj_elems_rec.proj_element_id
4158 , X_STRUCTURE_TYPE_ID => l_structure_type_id
4159 , X_RECORD_VERSION_NUMBER => 1
4160 , X_ATTRIBUTE_CATEGORY => NULL
4161 , X_ATTRIBUTE1 => NULL
4162 , X_ATTRIBUTE2 => NULL
4163 , X_ATTRIBUTE3 => NULL
4164 , X_ATTRIBUTE4 => NULL
4165 , X_ATTRIBUTE5 => NULL
4166 , X_ATTRIBUTE6 => NULL
4167 , X_ATTRIBUTE7 => NULL
4168 , X_ATTRIBUTE8 => NULL
4169 , X_ATTRIBUTE9 => NULL
4170 , X_ATTRIBUTE10 => NULL
4171 , X_ATTRIBUTE11 => NULL
4172 , X_ATTRIBUTE12 => NULL
4173 , X_ATTRIBUTE13 => NULL
4174 , X_ATTRIBUTE14 => NULL
4175 , X_ATTRIBUTE15 => NULL
4176 );
4177 END IF;
4178 END LOOP;
4179 --Now create the schedule versions for the workplan structure version and task versions.
4180 FOR cur_pa_proj_elem_vers_rec2 IN cur_pa_proj_elem_vers2 LOOP
4181 x_pev_schedule_id := null;
4182 PA_TASK_PUB1.Create_Schedule_Version(
4183 p_element_version_id => cur_pa_proj_elem_vers_rec2.element_version_id
4184 ,p_scheduled_start_date => SYSDATE
4185 ,p_scheduled_end_date => SYSDATE
4186 ,x_pev_schedule_id => x_pev_schedule_id
4187 ,x_return_status => l_return_status
4188 ,x_msg_count => l_msg_count
4189 ,x_msg_data => l_msg_data
4190 );
4191
4192 IF l_return_status <> 'S'
4193 THEN
4194 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4195 ,p_msg_name => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
4196 raise api_error;
4197 END IF;
4198 FOR cur_pa_proj_elem_vers_rec3 IN cur_pa_proj_elem_vers3(cur_pa_proj_elem_vers_rec2.element_version_id) LOOP
4199 x_pev_schedule_id := null;
4200 PA_TASK_PUB1.Create_Schedule_Version(
4201 p_element_version_id => cur_pa_proj_elem_vers_rec3.element_version_id
4202 ,p_scheduled_start_date => SYSDATE
4203 ,p_scheduled_end_date => SYSDATE
4204 ,x_pev_schedule_id => x_pev_schedule_id
4205 ,x_return_status => l_return_status
4206 ,x_msg_count => l_msg_count
4207 ,x_msg_data => l_msg_data
4208 );
4209
4210 IF l_return_status <> 'S'
4211 THEN
4212 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4213 ,p_msg_name => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
4214 raise api_error;
4215 END IF;
4216 END LOOP;
4217 END LOOP;
4218 END IF;
4219 x_return_status := FND_API.G_RET_STS_SUCCESS;
4220 EXCEPTION
4221 WHEN API_ERROR THEN
4222 x_return_status := FND_API.G_RET_STS_ERROR;
4223 rollback to create_delete_wp_struc;
4224 WHEN OTHERS THEN
4225 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4226 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
4227 p_procedure_name => 'create_delete_workplan_struc',
4228 p_error_text => SUBSTRB(SQLERRM,1,240));
4229 rollback to create_delete_wp_struc;
4230 raise;
4231 END create_delete_workplan_struc;
4232
4233
4234 -- API name : Copy_Structure
4235 -- Type : PL/sql Public procedure
4236 -- Pre-reqs : None
4237 -- Return Value : N/A
4238 -- Prameters
4239 -- p_src_project_id NUMBER
4240 -- p_dest_project_id NUMBER
4241 -- History
4242 --
4243 -- 03-MAY-02 MAansari -Created
4244 --
4245 -- Notes: This api is called from PA_PROJECT_CORE1.COPY_PROJECT
4246
4247 PROCEDURE Copy_Structure(
4248 p_src_project_id IN NUMBER
4249 ,p_dest_project_id IN NUMBER
4250 ,p_delta IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4251 ,p_copy_task_flag IN VARCHAR2 := 'Y'
4252 ,p_dest_template_flag IN VARCHAR2 := 'N' --bug 2805602
4253 ,p_src_template_flag IN VARCHAR2 := 'N' --bug 2805602
4254 ,p_dest_project_name IN VARCHAR2 --bug 2805602
4255 ,p_target_start_date IN DATE --bug 2805602
4256 ,p_target_finish_date IN DATE --bug 2805602
4257 ,p_calendar_id IN NUMBER
4258 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4259 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4260 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4261 ) IS
4262
4263 l_return_status VARCHAR2(1);
4264 l_msg_count NUMBER;
4265 l_msg_data VARCHAR2(2000);
4266 l_data VARCHAR2(2000);
4267 l_msg_index_out NUMBER;
4268 l_error_message_code VARCHAR2(250);
4269 API_ERROR EXCEPTION;
4270
4271 BEGIN
4272
4273 --Clear Error Messages.
4274 IF FND_MSG_PUB.count_msg = 0
4275 THEN
4276 FND_MSG_PUB.initialize;
4277 END IF;
4278
4279 SAVEPOINT cp_struc;
4280 --bug 2805602
4281
4282 /* PA_PROJECT_STRUCTURE_PUB1.Copy_Structure
4283 (
4284 p_src_project_id => p_src_project_id
4285 ,p_dest_project_id => p_dest_project_id
4286 ,p_delta => p_delta
4287 ,p_copy_task_flag => p_copy_task_flag
4288 ,x_return_status => l_return_status
4289 ,x_msg_count => l_msg_count
4290 ,x_msg_data => l_msg_data
4291 );
4292 */
4293
4294 IF p_copy_task_flag = 'Y'
4295 THEN
4296
4297 --copying structrues and tasks
4298 PA_PROJ_TASK_STRUC_PUB.copy_structures_tasks_bulk
4299 (
4300 p_init_msg_list => FND_API.G_FALSE
4301 ,p_src_project_id => p_src_project_id
4302 ,p_dest_project_id => p_dest_project_id
4303 ,p_delta => p_delta
4304 ,p_copy_task_flag => p_copy_task_flag
4305 ,p_dest_template_flag => p_dest_template_flag
4306 ,p_src_template_flag => p_src_template_flag
4307 ,p_dest_project_name => p_dest_project_name
4308 ,p_target_start_date => p_target_start_date
4309 ,p_target_finish_date => p_target_finish_date
4310 ,p_calendar_id => p_calendar_id
4311 ,x_return_status => l_return_status
4312 ,x_msg_count => l_msg_count
4313 ,x_msg_data => l_msg_data
4314 );
4315 ELSE
4316
4317 -- Bug 4146369 : Added following condition so that the copy_structures_bulk is not get called
4318 -- when both structures are disabled in source project.
4319 IF PA_PROJECT_STRUCTURE_UTILS.check_workplan_enabled( p_src_project_id )= 'Y' OR
4320 PA_PROJECT_STRUCTURE_UTILS.check_financial_enabled( p_src_project_id )= 'Y' THEN
4321 --copying only structrues --This is for AMG
4322 PA_PROJ_TASK_STRUC_PUB.copy_structures_bulk
4323 (
4324 p_src_project_id => p_src_project_id
4325 ,p_dest_project_id => p_dest_project_id
4326 ,p_delta => p_delta
4327 ,p_copy_task_flag => p_copy_task_flag
4328 ,p_dest_template_flag => p_dest_template_flag
4329 ,p_src_template_flag => p_src_template_flag
4330 ,p_dest_project_name => p_dest_project_name
4331 ,p_target_start_date => p_target_start_date
4332 ,p_target_finish_date => p_target_finish_date
4333 ,p_calendar_id => p_calendar_id
4334 ,x_return_status => l_return_status
4335 ,x_msg_count => l_msg_count
4336 ,x_msg_data => l_msg_data
4337 );
4338 END IF;
4339 END IF;
4340 --bug 2805602
4341
4342
4343 l_msg_count := FND_MSG_PUB.count_msg;
4344 if l_msg_count > 0 then
4345 x_msg_count := l_msg_count;
4346 if x_msg_count = 1 then
4347 pa_interface_utils_pub.get_messages
4348 (p_encoded => FND_API.G_TRUE,
4349 p_msg_index => 1,
4350 p_msg_count => l_msg_count,
4351 p_msg_data => l_msg_data,
4352 p_data => l_data,
4353 p_msg_index_out => l_msg_index_out);
4354 x_msg_data := l_data;
4355 end if;
4356 raise API_ERROR;
4357 end if;
4358
4359 x_return_status := FND_API.G_RET_STS_SUCCESS;
4360 EXCEPTION
4361 WHEN API_ERROR THEN
4362 x_return_status := FND_API.G_RET_STS_ERROR;
4363 rollback to cp_struc;
4364 WHEN OTHERS THEN
4365 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4366 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
4367 p_procedure_name => 'Copy_Structure',
4368 p_error_text => SUBSTRB(SQLERRM,1,240));
4369 rollback to cp_struc;
4370 raise;
4371
4372 END Copy_Structure;
4373
4374 -- API name : Clean_unwanted_tasks
4375 -- Type : PL/sql Public procedure
4376 -- Pre-reqs : None
4377 -- Return Value : N/A
4378 -- Prameters
4379 -- p_project_id NUMBER
4380 -- History
4381 --
4382 -- 25-MAY-02 MAansari -Created
4383 --
4384 -- Notes: This api is called from PA_PROJECT_PUB.CREATE_PROJECT to clean up the tasks in pa_proj_elements that were created
4385 -- by calling copy structure api. Copy structure api copies template's tasks to pro_elements though there
4386 -- are no pa_TASKs for the new project. However pa_tasks and pa_proj_elements must be in syn. To d this we need to firts remove
4387 -- tasks from pa_proj_elements as they were erroneously created by COPY_STRUCTURE and then call create_default_structure
4388 -- to syn up pa_pro_elements with pa_tasks.
4389 --
4390
4391 PROCEDURE Clean_unwanted_tasks(
4392 p_project_id IN NUMBER
4393 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4394 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4395 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4396 ) IS
4397
4398 l_return_status VARCHAR2(1);
4399 l_msg_count NUMBER;
4400 l_msg_data VARCHAR2(2000);
4401 l_data VARCHAR2(2000);
4402 l_msg_index_out NUMBER;
4403 l_error_message_code VARCHAR2(250);
4404 API_ERROR EXCEPTION;
4405
4406 CURSOR cur_pa_proj_elem_vers
4407 IS
4408 SELECT element_version_id
4409 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
4410 WHERE c.project_id = p_project_id
4411 AND a.structure_type_id = b.structure_type_id
4412 AND b.proj_element_id = c.proj_element_id
4413 AND a.structure_type = 'FINANCIAL';
4414
4415 CURSOR cur_task_vers( c_parent_str_ver_id NUMBER )
4416 IS
4417 SELECT element_version_id, proj_element_id
4418 FROM pa_proj_element_versions
4419 WHERE project_id = p_project_id
4420 AND parent_structure_version_id = c_parent_str_ver_id
4421 AND object_type = 'PA_TASKS';
4422
4423 l_cur_pa_proj_elem_vers_rec cur_pa_proj_elem_vers%ROWTYPE;
4424 BEGIN
4425
4426 --Clear Error Messages.
4427 IF FND_MSG_PUB.count_msg = 0
4428 THEN
4429 FND_MSG_PUB.initialize;
4430 END IF;
4431
4432 SAVEPOINT clean_struc;
4433
4434 OPEN cur_pa_proj_elem_vers;
4435 FETCH cur_pa_proj_elem_vers INTO l_cur_pa_proj_elem_vers_rec;
4436 IF cur_pa_proj_elem_vers%FOUND
4437 THEN
4438 FOR cur_task_vers_rec IN cur_task_vers( l_cur_pa_proj_elem_vers_rec.element_version_id ) LOOP
4439 DELETE FROM pa_object_relationships WHERE relationship_type = 'S' AND
4440 (object_id_to1 = cur_task_vers_rec.element_version_id OR
4441 object_id_from1 = cur_task_vers_rec.element_version_id);
4442
4443 --it is possible that COSTING and WORKPLAN str are same. so delete from schedule versions as well.
4444 DELETE FROM pa_proj_elem_ver_schedule WHERE element_version_id = cur_task_vers_rec.element_version_id and project_id = p_project_id;
4445
4446 DELETE FROM pa_proj_element_versions WHERE element_version_id = cur_task_vers_rec.element_version_id;
4447
4448 DELETE FROM pa_proj_elements WHERE proj_element_id = cur_task_vers_rec.proj_element_id;
4449
4450 END LOOP;
4451 END IF;
4452 CLOSE cur_pa_proj_elem_vers;
4453 x_return_status := FND_API.G_RET_STS_SUCCESS;
4454 EXCEPTION
4455 WHEN API_ERROR THEN
4456 x_return_status := FND_API.G_RET_STS_ERROR;
4457 rollback to clean_struc;
4458 WHEN OTHERS THEN
4459 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4460 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
4461 p_procedure_name => 'Clean_unwanted_tasks',
4462 p_error_text => SUBSTRB(SQLERRM,1,240));
4463 rollback to clean_struc;
4464 raise;
4465
4466 END Clean_unwanted_tasks;
4467
4468 -- API name : get_task_above
4469 -- Type : PL/sql Public procedure
4470 -- Pre-reqs : None
4471 -- Return Value : N/A
4472 -- Prameters
4473
4474 -- History
4475 --
4476 -- 14-AUG-02 MAansari -Created
4477 --
4478 -- Notes: This api is called from Projects form and Self Service when the SPLIT_COST_FROM_WORKPLAN_FLAG
4479 -- is checked
4480
4481 /*PROCEDURE get_task_above(
4482 p_task_id IN NUMBER
4483 ,p_tasks_in IN pa_project_pub.task_in_tbl_type
4484 ,p_tasks_out IN pa_project_pub.task_out_tbl_type
4485 ,x_task_id_above OUT NUMBER
4486 ,x_return_status OUT VARCHAR2
4487 ) IS
4488
4489 v_task_id_above NUMBER;
4490 l_msg_count NUMBER ;
4491 l_msg_data VARCHAR2(2000);
4492 l_return_status VARCHAR2(1);
4493 l_last_index1 Number;
4494 l_first_index1 Number;
4495 l_index_number number;
4496
4497 BEGIN
4498 x_return_status := 'S';
4499
4500 l_first_index1 := p_tasks_in.first;
4501 l_last_index1 := p_tasks_in.last;
4502
4503 for i in l_first_index1..l_last_index1 loop
4504
4505 IF p_task_id = p_tasks_out(i).pa_task_id
4506 THEN
4507 l_index_number := i;
4508 exit;
4509 END IF;
4510 end loop;
4511
4512 IF l_index_number > l_first_index1 AND
4513 p_tasks_in(l_index_number-1).pa_task_id IS NOT NULL AND
4514 p_tasks_in(l_index_number-1).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4515 --existing task becomes the ref_task_id
4516 THEN
4517 v_task_id_above := p_tasks_in(l_index_number-1).pa_task_id; --Get the task above.
4518 ELSIF l_index_number > l_first_index1 AND
4519 p_tasks_out(l_index_number-1).pa_task_id IS NOT NULL AND
4520 p_tasks_out(l_index_number-1).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4521 --new task becomes the ref_task_id
4522 THEN
4523 v_task_id_above := p_tasks_out(l_index_number-1).pa_task_id; --Get the task above created newly
4524 ELSIF ( p_tasks_in(l_index_number).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
4525 p_tasks_in(l_index_number).pa_task_id IS NULL
4526 ) AND
4527 l_index_number = l_first_index1
4528 THEN
4529 v_task_id_above := null; --ref is the structure version. structure version is
4530 --derived in PA_PROJ_TASK_STRUC_PUB.create_task_structure API.
4531 END IF;
4532 x_task_id_above := v_task_id_above;
4533
4534 EXCEPTION WHEN OTHERS THEN
4535 x_return_status := 'E';
4536
4537 END get_task_above;*/
4538
4539 -- API name : convert_pm_parent_task_ref
4540 -- Type : PL/sql Public procedure
4541 -- Pre-reqs : None
4542 -- Return Value : N/A
4543 -- Prameters
4544
4545 -- History
4546 --
4547 -- 14-AUG-02 MAansari -Created
4548 --
4549 -- Notes: This api is not included in PA_PROJECT_PVT to avoid dependency.
4550
4551 PROCEDURE convert_pm_parent_task_ref(
4552 p_pm_parent_task_reference IN VARCHAR2
4553 ,p_project_id IN NUMBER
4554 ,x_parent_task_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4555 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4556 ) IS
4557 CURSOR cur_pa_proj_elems
4558 IS
4559 SELECT proj_element_id
4560 FROM pa_proj_elements
4561 WHERE PM_SOURCE_REFERENCE = p_pm_parent_task_reference
4562 AND project_id = p_project_id
4563 AND OBJECT_TYPE = 'PA_TASKS';
4564 BEGIN
4565 x_return_status := FND_API.G_RET_STS_SUCCESS;
4566
4567 OPEN cur_pa_proj_elems;
4568 FETCH cur_pa_proj_elems INTO x_parent_task_id;
4569 IF cur_pa_proj_elems%NOTFOUND
4570 THEN
4571 x_return_status := FND_API.G_RET_STS_ERROR;
4572 END IF;
4573
4574 CLOSE cur_pa_proj_elems;
4575 EXCEPTION WHEN OTHERS THEN
4576 x_return_status := FND_API.G_RET_STS_ERROR;
4577 END convert_pm_parent_task_ref;
4578
4579 -- API name : publish_structure
4580 -- Type : PL/sql Public procedure
4581 -- Pre-reqs : None
4582 -- Return Value : N/A
4583 -- Prameters
4584
4585 -- History
4586 --
4587 -- 19-AUG-02 MAansari -Created
4588 --
4589 -- Notes: This api is a wrapper called from AMG
4590
4591 PROCEDURE publish_structure(
4592 p_api_version IN NUMBER := 1.0
4593 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
4594 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
4595 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
4596 ,p_validation_level IN VARCHAR2 := 100
4597 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
4598 ,p_debug_mode IN VARCHAR2 := 'N'
4599 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4600 ,p_responsibility_id IN NUMBER := 0
4601 ,p_structure_version_id IN NUMBER
4602 ,p_publish_structure_ver_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4603 ,p_structure_ver_desc IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4604 ,p_effective_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4605 ,p_original_baseline_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4606 ,p_current_baseline_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4607 ,x_published_struct_ver_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4608 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4609 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4610 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4611 ) IS
4612 BEGIN
4613 x_return_status := 'S';
4614 PA_PROJECT_STRUCTURE_PUB1.PUBLISH_STRUCTURE(
4615 p_api_version => p_api_version
4616 ,p_init_msg_list => p_init_msg_list
4617 ,p_commit => p_commit
4618 ,p_validate_only => p_validate_only
4619 ,p_validation_level => p_validation_level
4620 ,p_calling_module => p_calling_module
4621 ,p_debug_mode => p_debug_mode
4622 ,p_max_msg_count => p_max_msg_count
4623 ,p_responsibility_id => p_responsibility_id
4624 ,p_structure_version_id => p_structure_version_id
4625 ,p_publish_structure_ver_name => p_publish_structure_ver_name
4626 ,p_structure_ver_desc => p_structure_ver_desc
4627 ,p_effective_date => p_effective_date
4628 ,p_original_baseline_flag => p_original_baseline_flag
4629 ,p_current_baseline_flag => p_current_baseline_flag
4630 ,x_published_struct_ver_id => x_published_struct_ver_id
4631 ,x_return_status => x_return_status
4632 ,x_msg_count => x_msg_count
4633 ,x_msg_data => x_msg_data
4634 );
4635
4636 END publish_structure;
4637
4638 -- API name : delete_structure_version
4639 -- Type : PL/sql Public procedure
4640 -- Pre-reqs : None
4641 -- Return Value : N/A
4642 -- Prameters
4643
4644 -- History
4645 --
4646 -- 19-AUG-02 MAansari -Created
4647 --
4648 -- Notes: This api is a wrapper called from AMG
4649
4650 PROCEDURE delete_structure_version(
4651 p_api_version IN NUMBER := 1.0
4652 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
4653 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
4654 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
4655 ,p_validation_level IN VARCHAR2 := 100
4656 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
4657 ,p_debug_mode IN VARCHAR2 := 'N'
4658 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4659 ,p_structure_version_id IN NUMBER
4660 ,p_record_version_number IN NUMBER
4661 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4662 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4663 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4664 ) IS
4665 BEGIN
4666 x_return_status := 'S';
4667 PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
4668 p_api_version => p_api_version
4669 ,p_init_msg_list => p_init_msg_list
4670 ,p_commit => p_commit
4671 ,p_validate_only => p_validate_only
4672 ,p_validation_level => p_validation_level
4673 ,p_calling_module => p_calling_module
4674 ,p_debug_mode => p_debug_mode
4675 ,p_max_msg_count => p_max_msg_count
4676 ,p_structure_version_id => p_structure_version_id
4677 ,p_record_version_number => p_record_version_number
4678 ,x_return_status => x_return_status
4679 ,x_msg_count => x_msg_count
4680 ,x_msg_data => x_msg_data
4681 );
4682
4683 END delete_structure_version;
4684
4685 -- API name : create_structure
4686 -- Type : PL/sql Public procedure
4687 -- Pre-reqs : None
4688 -- Return Value : N/A
4689 -- Prameters
4690
4691 -- History
4692 --
4693 -- 19-AUG-02 HUBERT -Created
4694 --
4695 -- Notes: This api is a wrapper called from AMG
4696
4697 --This API will only be called with the structure type = 'WORKPLAN'
4698 procedure create_structure(
4699 p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4700 ,p_structure_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4701 ,p_structure_version_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4702 ,p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4703 ,x_structure_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4704 ,x_structure_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4705 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4706 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4707 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4708 )
4709 IS
4710 l_return_status VARCHAR2(1);
4711 l_msg_count NUMBER;
4712 l_msg_data VARCHAR2(2000);
4713 l_error_message_code VARCHAR2(30);
4714
4715 l_project_name PA_PROJECTS_ALL.name%TYPE;
4716 l_project_number PA_PROJECTS_ALL.segment1%TYPE;
4717
4718 l_suffix VARCHAR2(250);
4719 l_name VARCHAR2(240);
4720 l_number VARCHAR2(25);
4721 l_struc_ver_number NUMBER;
4722 l_append VARCHAR2(250);
4723 l_status_code VARCHAR2(150);
4724 x_row_id VARCHAR2(18);
4725 x_pev_structure_id NUMBER;
4726 x_pev_schedule_id NUMBER;
4727 -- added for Bug Fix: 4537865
4728 l_new_structure_version_id NUMBER;
4729 -- added for Bug Fix: 4537865
4730
4731 CURSOR c1 IS
4732 select segment1, name from pa_projects_all
4733 where project_id = p_project_id;
4734
4735 CURSOR cur_elem_ver_seq IS
4736 SELECT pa_proj_element_versions_s.nextval
4737 FROM sys.dual;
4738
4739 cursor get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
4740 select nvl(max(version_number),0)+1
4741 from pa_proj_elem_ver_structure
4742 where project_id = c_project_id
4743 and proj_element_id = c_proj_element_id
4744 and status_code <> 'STRUCTURE_PUBLISHED';
4745
4746 l_current_working_ver_flag VARCHAR2(1); /* FPM bug 3301192 */
4747 l_latest_eff_published_flag VARCHAR2(1); /* FPM bug 3301192 */ /* this is added to fix the bug. If version enabled the status should be working other wise it should be published. */
4748 BEGIN
4749
4750 IF FND_MSG_PUB.count_msg = 0
4751 THEN
4752 FND_MSG_PUB.initialize;
4753 END IF;
4754 --check if the project have any structures
4755 PA_PROJECT_STRUCTURE_UTILS.Check_Structure_Type_Exists(
4756 p_project_id,
4757 p_structure_type,
4758 l_return_status,
4759 l_error_message_code);
4760 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4761 --PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4762 --,p_msg_name => l_error_message_code);
4763 --raise FND_API.G_EXC_ERROR;
4764
4765 -- Bug 3075609. When the structure type exists we need to ignore the error.
4766 -- This check has been used just to return with out doing any further
4767 -- processing.
4768 IF l_error_message_code <> 'PA_PS_STRUC_TYPE_EXISTS' THEN
4769 x_return_status := FND_API.G_RET_STS_ERROR; -- Bug3044915
4770 x_msg_data := l_error_message_code ; -- Bug3044915
4771 x_msg_count := FND_MSG_PUB.count_msg; -- Bug3044915
4772 ELSE
4773 x_return_status := FND_API.G_RET_STS_SUCCESS;
4774 x_msg_data := NULL;
4775 x_msg_count := NULL;
4776 END IF;
4777 Return;
4778 END IF;
4779 --If no error, create structure
4780 OPEN c1;
4781 FETCH c1 into l_number, l_name;
4782 CLOSE c1;
4783
4784 select meaning
4785 into l_suffix
4786 from pa_lookups
4787 where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
4788 and lookup_code = 'WORKPLAN';
4789
4790 l_name := substr(l_name||l_append||l_suffix,1,240);
4791 --Create structure
4792 PA_PROJECT_STRUCTURE_PVT1.Create_Structure(
4793 p_project_id => p_project_id
4794 ,p_structure_number => l_number
4795 ,p_structure_name => l_name
4796 ,p_structure_description => p_description
4797 ,p_calling_flag => p_structure_type
4798 ,x_structure_id => x_structure_id
4799 ,x_return_status => l_return_status
4800 ,x_msg_count => l_msg_count
4801 ,x_msg_data => l_msg_data
4802 );
4803 IF x_structure_id IS NULL OR l_return_status <> 'S' THEN
4804 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4805 ,p_msg_name => 'PA_PS_NO_STRUC_CREATED');
4806 raise FND_API.G_EXC_ERROR;
4807 END IF;
4808 --Create structure version
4809 OPEN cur_elem_ver_seq;
4810 FETCH cur_elem_ver_seq INTO x_structure_version_id;
4811 CLOSE cur_elem_ver_seq;
4812
4813 -- Fix for 4657794 :- This is fix for regression introduced by 4537865
4814 -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_new_structure_version_id
4815 -- to x_structure_version_id
4816
4817 l_new_structure_version_id := x_structure_version_id ;
4818
4819 -- End 4657794
4820
4821 PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row(
4822 X_ROW_ID => X_row_id
4823 --,X_ELEMENT_VERSION_ID => x_structure_version_id * commented got Bug Fix: 4537865
4824 ,X_ELEMENT_VERSION_ID => l_new_structure_version_id --added for Bug Fix: 4537865
4825 ,X_PROJ_ELEMENT_ID => x_structure_id
4826 ,X_OBJECT_TYPE => 'PA_STRUCTURES'
4827 ,X_PROJECT_ID => p_project_id
4828 ,X_PARENT_STRUCTURE_VERSION_ID=> x_structure_version_id
4829 ,X_DISPLAY_SEQUENCE => null
4830 ,X_WBS_LEVEL => null
4831 ,X_WBS_NUMBER => '0'
4832 ,X_ATTRIBUTE_CATEGORY => null
4833 ,X_ATTRIBUTE1 => null
4834 ,X_ATTRIBUTE2 => null
4835 ,X_ATTRIBUTE3 => null
4836 ,X_ATTRIBUTE4 => null
4837 ,X_ATTRIBUTE5 => null
4838 ,X_ATTRIBUTE6 => null
4839 ,X_ATTRIBUTE7 => null
4840 ,X_ATTRIBUTE8 => null
4841 ,X_ATTRIBUTE9 => null
4842 ,X_ATTRIBUTE10 => null
4843 ,X_ATTRIBUTE11 => null
4844 ,X_ATTRIBUTE12 => null
4845 ,X_ATTRIBUTE13 => null
4846 ,X_ATTRIBUTE14 => null
4847 ,X_ATTRIBUTE15 => null
4848 ,X_TASK_UNPUB_VER_STATUS_CODE => null
4849 ,X_SOURCE_OBJECT_ID => p_project_id
4850 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
4851 );
4852 -- added for Bug Fix: 4537865
4853 x_structure_version_id := l_new_structure_version_id;
4854 -- added for Bug Fix: 4537865
4855
4856 IF x_structure_version_id IS NULL THEN
4857 PA_UTILS.ADD_MESSAGE(
4858 p_app_short_name => 'PA'
4859 ,p_msg_name => 'PA_PS_NO_STRUC_VER_CREATED');
4860 raise FND_API.G_EXC_ERROR;
4861 END IF;
4862 --Get structure version number
4863 OPEN get_working_ver_num(p_project_id, x_structure_id);
4864 FETCH get_working_ver_num INTO l_struc_ver_number;
4865 CLOSE get_working_ver_num;
4866
4867 --FPM bug 3301192
4868 IF NVL( PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED(p_project_id), 'N' ) = 'Y'
4869 THEN
4870 l_status_code := 'STRUCTURE_WORKING';
4871 l_current_working_ver_flag := 'Y';
4872 l_latest_eff_published_flag := 'N';
4873 ELSE
4874 l_status_code := 'STRUCTURE_PUBLISHED';
4875 l_current_working_ver_flag := 'N';
4876 l_latest_eff_published_flag := 'Y';
4877 END IF;
4878 --end FPM bug 3301192
4879
4880 PA_PROJ_ELEM_VER_STRUCTURE_PKG.insert_row(
4881 X_ROWID => x_row_id
4882 , X_PEV_STRUCTURE_ID => x_pev_structure_id
4883 , X_ELEMENT_VERSION_ID => x_structure_version_id
4884 , X_VERSION_NUMBER => l_struc_ver_number
4885 , X_NAME => l_name
4886 , X_PROJECT_ID => p_project_id
4887 , X_PROJ_ELEMENT_ID => x_structure_id
4888 , X_DESCRIPTION => p_description
4889 , X_EFFECTIVE_DATE => null
4890 , X_PUBLISHED_DATE => null
4891 , X_PUBLISHED_BY => null
4892 , X_CURRENT_BASELINE_DATE => null
4893 , X_CURRENT_BASELINE_FLAG => 'N'
4894 , X_CURRENT_BASELINE_BY => null
4895 , X_ORIGINAL_BASELINE_DATE => null
4896 , X_ORIGINAL_BASELINE_FLAG => 'N'
4897 , X_ORIGINAL_BASELINE_BY => null
4898 , X_LOCK_STATUS_CODE => NULL
4899 , X_LOCKED_BY => NULL
4900 , X_LOCKED_DATE => NULL
4901 , X_STATUS_CODE => l_status_code
4902 , X_WF_STATUS_CODE => NULL
4903 , X_LATEST_EFF_PUBLISHED_FLAG => l_latest_eff_published_flag
4904 , X_RECORD_VERSION_NUMBER => 1
4905 , X_CHANGE_REASON_CODE => NULL
4906 , X_CURRENT_WORKING_FLAG => l_current_working_ver_flag /* bug 3301192 */
4907 , X_SOURCE_OBJECT_ID => p_project_id
4908 , X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
4909 );
4910
4911 PA_TASK_PUB1.Create_Schedule_Version(
4912 p_element_version_id => x_structure_version_id
4913 ,p_scheduled_start_date => SYSDATE
4914 ,p_scheduled_end_date => SYSDATE
4915 ,x_pev_schedule_id => x_pev_schedule_id
4916 ,x_return_status => l_return_status
4917 ,x_msg_count => l_msg_count
4918 ,x_msg_data => l_msg_data
4919 );
4920
4921 IF l_return_status <> 'S' THEN
4922 PA_UTILS.ADD_MESSAGE(
4923 p_app_short_name => 'PA'
4924 ,p_msg_name => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
4925 raise FND_API.G_EXC_ERROR;
4926 END IF;
4927 x_return_status := FND_API.G_RET_STS_SUCCESS;
4928 EXCEPTION
4929 WHEN FND_API.G_EXC_ERROR THEN
4930 x_msg_count := FND_MSG_PUB.count_msg;
4931 x_return_status := FND_API.G_RET_STS_ERROR;
4932 WHEN OTHERS THEN
4933 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4934 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
4935 p_procedure_name => 'CREATE_STRUCTURE',
4936 p_error_text => SUBSTRB(SQLERRM,1,240));
4937 raise;
4938 END create_structure;
4939
4940 -- API name : create_structure
4941 -- Type : PL/sql Public procedure
4942 -- Pre-reqs : None
4943 -- Return Value : N/A
4944 -- Prameters
4945
4946 -- History
4947 --
4948 -- 19-AUG-02 HUBERT -Created
4949 --
4950 -- Notes: This api is a wrapper called from AMG
4951
4952 procedure create_update_struct_ver(
4953 p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4954 ,p_structure_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4955 ,p_structure_version_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4956 ,p_structure_version_id IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4957 ,p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4958 ,x_structure_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4959 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4960 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4961 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4962 )
4963 IS
4964 cursor c1 is
4965 select pev_structure_id, name, record_version_number
4966 from pa_proj_elem_ver_structure
4967 where project_id = p_project_id
4968 and element_version_id = p_structure_version_id;
4969
4970 l_name VARCHAR2(240);
4971 l_pev_structure_id NUMBER;
4972 l_record_version_number NUMBER;
4973 l_proj_element_id NUMBER;
4974 l_enable_wp_version_flag varchar2(1);
4975 l_dummy varchar2(1);
4976 l_struc_ver_number NUMBER;
4977 l_return_status VARCHAR2(1);
4978 l_msg_count NUMBER;
4979 l_msg_data VARCHAR2(2000);
4980 -- added for Bug Fix: 4537865
4981 l_new_structure_version_id NUMBER;
4982 -- added for Bug Fix: 4537865
4983 x_row_id VARCHAR2(18);
4984 x_pev_structure_id NUMBER;
4985 x_pev_schedule_id NUMBER;
4986
4987 cursor c2 is
4988 select b.proj_element_id
4989 from pa_proj_elements a, pa_proj_structure_types b,
4990 pa_structure_types c
4991 where a.project_id = p_project_id
4992 and a.object_type = 'PA_STRUCTURES'
4993 and a.proj_element_id = b.proj_element_id
4994 and b.structure_type_id = c.structure_type_id
4995 and c.structure_type = p_structure_type;
4996
4997 cursor c3 is
4998 select wp_enable_version_flag
4999 from pa_proj_workplan_attr
5000 where project_id = p_project_id;
5001
5002 cursor c4(c_proj_elem_id NUMBER) is
5003 select '1' from pa_proj_elem_ver_structure
5004 where project_id = p_project_id
5005 and proj_element_id = c_proj_elem_id
5006 and status_code <> 'STRUCTURE_PUBLISHED';
5007
5008 CURSOR cur_elem_ver_seq IS
5009 SELECT pa_proj_element_versions_s.nextval
5010 FROM sys.dual;
5011
5012 cursor get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
5013 select nvl(max(version_number),0)+1
5014 from pa_proj_elem_ver_structure
5015 where project_id = c_project_id
5016 and proj_element_id = c_proj_element_id
5017 and status_code <> 'STRUCTURE_PUBLISHED';
5018
5019 l_current_working_ver_flag VARCHAR2(1); /* FPM bug 3301192 */
5020 BEGIN
5021
5022 IF FND_MSG_PUB.count_msg = 0
5023 THEN
5024 FND_MSG_PUB.initialize;
5025 END IF;
5026
5027 IF (p_structure_version_name IS NOT NULL) AND
5028 (p_structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
5029 ((p_structure_version_id IS NULL) OR (p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) THEN
5030 --get structure for input type
5031 OPEN c2;
5032 FETCH c2 into l_proj_element_id;
5033 IF c2%NOTFOUND THEN
5034 PA_UTILS.ADD_MESSAGE(
5035 p_app_short_name => 'PA'
5036 ,p_msg_name => 'PA_PS_NO_STRUC_VER_CREATED');
5037 CLOSE c2;
5038 RAISE FND_API.G_EXC_ERROR;
5039 END IF;
5040 CLOSE c2;
5041
5042 IF l_proj_element_id IS NOT NULL
5043 THEN
5044 IF PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Name_Unique(
5045 p_structure_version_name => p_structure_version_name
5046 ,p_pev_structure_id => null
5047 ,p_project_id => p_project_id
5048 ,p_structure_id => l_proj_element_id
5049 ) = 'N'
5050 THEN
5051 PA_UTILS.ADD_MESSAGE(
5052 p_app_short_name => 'PA'
5053 ,p_msg_name => 'PA_PS_STRUC_VER_NAM_UNIQUE');
5054 RAISE FND_API.G_EXC_ERROR;
5055 END IF;
5056 END IF;
5057
5058 IF (p_structure_type = 'FINANCIAL') THEN
5059 --If this is financial, check if there is working version
5060 OPEN c3;
5061 FETCH c3 into l_enable_wp_version_flag;
5062 CLOSE c3;
5063 IF (l_enable_wp_version_flag = 'Y') THEN
5064 --if enable wp version flag is 'Y', and if a working (unpublished)
5065 --version exist.
5066 OPEN c4 (l_proj_element_id);
5067 FETCH c4 into l_dummy;
5068 IF (c4%FOUND) THEN
5069 --there is a working version; cannot create another one.
5070 CLOSE c4;
5071 PA_UTILS.ADD_MESSAGE(
5072 p_app_short_name => 'PA'
5073 --,p_msg_name => 'PA_PS_NO_STRUC_VER_CREATED');
5074 ,p_msg_name => 'PA_PS_WORKING_STRUC_VER_EXIST'); --bug # 3713107
5075 RAISE FND_API.G_EXC_ERROR;
5076 END IF;
5077 CLOSE c4;
5078 --create a new financial structure version
5079
5080 --Create structure version
5081 OPEN cur_elem_ver_seq;
5082 FETCH cur_elem_ver_seq INTO x_structure_version_id;
5083 CLOSE cur_elem_ver_seq;
5084
5085 -- Fix for 4657794 :- This is fix for regression introduced by 4537865
5086 -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_new_structure_version_id
5087 -- to x_structure_version_id
5088
5089 l_new_structure_version_id := x_structure_version_id ;
5090
5091 -- End 4657794
5092
5093 PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row(
5094 X_ROW_ID => X_row_id
5095 --,X_ELEMENT_VERSION_ID => x_structure_version_id * Commented for Bug Fix: 4537865
5096 ,X_ELEMENT_VERSION_ID => l_new_structure_version_id -- added for Bug fix: 4537865
5097 ,X_PROJ_ELEMENT_ID => l_proj_element_id
5098 ,X_OBJECT_TYPE => 'PA_STRUCTURES'
5099 ,X_PROJECT_ID => p_project_id
5100 ,X_PARENT_STRUCTURE_VERSION_ID=> x_structure_version_id
5101 ,X_DISPLAY_SEQUENCE => null
5102 ,X_WBS_LEVEL => null
5103 ,X_WBS_NUMBER => '0'
5104 ,X_ATTRIBUTE_CATEGORY => null
5105 ,X_ATTRIBUTE1 => null
5106 ,X_ATTRIBUTE2 => null
5107 ,X_ATTRIBUTE3 => null
5108 ,X_ATTRIBUTE4 => null
5109 ,X_ATTRIBUTE5 => null
5110 ,X_ATTRIBUTE6 => null
5111 ,X_ATTRIBUTE7 => null
5112 ,X_ATTRIBUTE8 => null
5113 ,X_ATTRIBUTE9 => null
5114 ,X_ATTRIBUTE10 => null
5115 ,X_ATTRIBUTE11 => null
5116 ,X_ATTRIBUTE12 => null
5117 ,X_ATTRIBUTE13 => null
5118 ,X_ATTRIBUTE14 => null
5119 ,X_ATTRIBUTE15 => null
5120 ,X_TASK_UNPUB_VER_STATUS_CODE => null
5121 ,X_SOURCE_OBJECT_ID => p_project_id
5122 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
5123 );
5124 -- added for Bug fix: 4537865
5125 x_structure_version_id := l_new_structure_version_id;
5126 -- added for Bug fix: 4537865
5127
5128 IF x_structure_version_id IS NULL THEN
5129 PA_UTILS.ADD_MESSAGE(
5130 p_app_short_name => 'PA'
5131 ,p_msg_name => 'PA_PS_NO_STRUC_VER_CREATED');
5132 raise FND_API.G_EXC_ERROR;
5133 END IF;
5134
5135 --Get structure version number
5136 OPEN get_working_ver_num(p_project_id, l_proj_element_id);
5137 FETCH get_working_ver_num INTO l_struc_ver_number;
5138 CLOSE get_working_ver_num;
5139
5140 PA_PROJ_ELEM_VER_STRUCTURE_PKG.insert_row(
5141 X_ROWID => x_row_id
5142 , X_PEV_STRUCTURE_ID => x_pev_structure_id
5143 , X_ELEMENT_VERSION_ID => x_structure_version_id
5144 , X_VERSION_NUMBER => l_struc_ver_number
5145 , X_NAME => p_structure_version_name
5146 , X_PROJECT_ID => p_project_id
5147 , X_PROJ_ELEMENT_ID => l_proj_element_id
5148 , X_DESCRIPTION => p_description
5149 , X_EFFECTIVE_DATE => null
5150 , X_PUBLISHED_DATE => null
5151 , X_PUBLISHED_BY => null
5152 , X_CURRENT_BASELINE_DATE => null
5153 , X_CURRENT_BASELINE_FLAG => 'N'
5154 , X_CURRENT_BASELINE_BY => null
5155 , X_ORIGINAL_BASELINE_DATE => null
5156 , X_ORIGINAL_BASELINE_FLAG => 'N'
5157 , X_ORIGINAL_BASELINE_BY => null
5158 , X_LOCK_STATUS_CODE => NULL
5159 , X_LOCKED_BY => NULL
5160 , X_LOCKED_DATE => NULL
5161 , X_STATUS_CODE => 'STRUCTURE_WORKING'
5162 , X_WF_STATUS_CODE => NULL
5163 , X_LATEST_EFF_PUBLISHED_FLAG => 'N'
5164 , X_RECORD_VERSION_NUMBER => 1
5165 , X_CHANGE_REASON_CODE => NULL
5166 , X_CURRENT_WORKING_FLAG => 'Y' /* Since this is a shared + versioned senario and only one struc version then it should be CWV. bug 3301192 */
5167 , X_SOURCE_OBJECT_ID => p_project_id
5168 , X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
5169 );
5170
5171 PA_TASK_PUB1.Create_Schedule_Version(
5172 p_element_version_id => x_structure_version_id
5173 ,p_scheduled_start_date => SYSDATE
5174 ,p_scheduled_end_date => SYSDATE
5175 ,x_pev_schedule_id => x_pev_schedule_id
5176 ,x_return_status => l_return_status
5177 ,x_msg_count => l_msg_count
5178 ,x_msg_data => l_msg_data
5179 );
5180
5181 IF l_return_status <> 'S' THEN
5182 PA_UTILS.ADD_MESSAGE(
5183 p_app_short_name => 'PA'
5184 ,p_msg_name => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
5185 raise FND_API.G_EXC_ERROR;
5186 END IF;
5187
5188 ELSE
5189 --a version exists. Cannot create.
5190 PA_UTILS.ADD_MESSAGE(
5191 p_app_short_name => 'PA'
5192 ,p_msg_name => 'PA_PS_NO_STRUC_VER_CREATED');
5193 RAISE FND_API.G_EXC_ERROR;
5194 END IF;
5195 ELSE
5196 /*
5197 --check if this is workplan type structure only
5198 IF (PA_PROJECT_STRUCTURE_UTILS.Get_struc_Type_for_Structure(
5199 l_proj_element_id, 'FINANCIAL') = 'Y') THEN
5200 --cannot create because this structure contains financial information also
5201 PA_UTILS.ADD_MESSAGE(
5202 p_app_short_name => 'PA'
5203 ,p_msg_name => 'PA_PS_NO_STRUC_VER_CREATED');
5204 RAISE FND_API.G_EXC_ERROR;
5205 END IF;
5206 */
5207 IF NVL( IS_WP_VERSIONING_ENABLED( p_project_id ), 'N' ) = 'N'
5208 THEN
5209 --cannot create because versioning is not enabled.
5210 PA_UTILS.ADD_MESSAGE(
5211 p_app_short_name => 'PA'
5212 ,p_msg_name => 'PA_PS_NO_STRUC_VER_CREATED');
5213 RAISE FND_API.G_EXC_ERROR;
5214 END IF;
5215 --create a new workplan structure version
5216 OPEN cur_elem_ver_seq;
5217 FETCH cur_elem_ver_seq INTO x_structure_version_id;
5218 CLOSE cur_elem_ver_seq;
5219
5220 -- Fix for 4657794 :- This is fix for regression introduced by 4537865
5221 -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_new_structure_version_id
5222 -- to x_structure_version_id
5223
5224 l_new_structure_version_id := x_structure_version_id ;
5225
5226 -- End 4657794
5227
5228 PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row(
5229 X_ROW_ID => X_row_id
5230 --,X_ELEMENT_VERSION_ID => x_structure_version_id * commented for Bug fix: 4537865
5231 , X_ELEMENT_VERSION_ID => l_new_structure_version_id -- added for Bug fix: 4537865
5232 ,X_PROJ_ELEMENT_ID => l_proj_element_id
5233 ,X_OBJECT_TYPE => 'PA_STRUCTURES'
5234 ,X_PROJECT_ID => p_project_id
5235 ,X_PARENT_STRUCTURE_VERSION_ID=> x_structure_version_id
5236 ,X_DISPLAY_SEQUENCE => null
5237 ,X_WBS_LEVEL => null
5238 ,X_WBS_NUMBER => '0'
5239 ,X_ATTRIBUTE_CATEGORY => null
5240 ,X_ATTRIBUTE1 => null
5241 ,X_ATTRIBUTE2 => null
5242 ,X_ATTRIBUTE3 => null
5243 ,X_ATTRIBUTE4 => null
5244 ,X_ATTRIBUTE5 => null
5245 ,X_ATTRIBUTE6 => null
5246 ,X_ATTRIBUTE7 => null
5247 ,X_ATTRIBUTE8 => null
5248 ,X_ATTRIBUTE9 => null
5249 ,X_ATTRIBUTE10 => null
5250 ,X_ATTRIBUTE11 => null
5251 ,X_ATTRIBUTE12 => null
5252 ,X_ATTRIBUTE13 => null
5253 ,X_ATTRIBUTE14 => null
5254 ,X_ATTRIBUTE15 => null
5255 ,X_TASK_UNPUB_VER_STATUS_CODE => null
5256 ,X_SOURCE_OBJECT_ID => p_project_id
5257 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
5258 );
5259 -- added for Bug fix: 4537865
5260 x_structure_version_id := l_new_structure_version_id;
5261 -- added for Bug fix: 4537865
5262
5263 IF x_structure_version_id IS NULL THEN
5264 PA_UTILS.ADD_MESSAGE(
5265 p_app_short_name => 'PA'
5266 ,p_msg_name => 'PA_PS_NO_STRUC_VER_CREATED');
5267 raise FND_API.G_EXC_ERROR;
5268 END IF;
5269
5270 --Get structure version number
5271 OPEN get_working_ver_num(p_project_id, l_proj_element_id);
5272 FETCH get_working_ver_num INTO l_struc_ver_number;
5273 --FPM bug 3301192
5274 --if there is no working version( un-publihsed) then this is the CWV
5275 IF get_working_ver_num%NOTFOUND
5276 THEN
5277 l_current_working_ver_flag := 'Y';
5278 ELSE
5279 l_current_working_ver_flag := 'N';
5280 END IF;
5281 --end FPM bug 3301192
5282 CLOSE get_working_ver_num;
5283
5284 PA_PROJ_ELEM_VER_STRUCTURE_PKG.insert_row(
5285 X_ROWID => x_row_id
5286 , X_PEV_STRUCTURE_ID => x_pev_structure_id
5287 , X_ELEMENT_VERSION_ID => x_structure_version_id
5288 , X_VERSION_NUMBER => l_struc_ver_number
5289 , X_NAME => p_structure_version_name
5290 , X_PROJECT_ID => p_project_id
5291 , X_PROJ_ELEMENT_ID => l_proj_element_id
5292 , X_DESCRIPTION => p_description
5293 , X_EFFECTIVE_DATE => null
5294 , X_PUBLISHED_DATE => null
5295 , X_PUBLISHED_BY => null
5296 , X_CURRENT_BASELINE_DATE => null
5297 , X_CURRENT_BASELINE_FLAG => 'N'
5298 , X_CURRENT_BASELINE_BY => null
5299 , X_ORIGINAL_BASELINE_DATE => null
5300 , X_ORIGINAL_BASELINE_FLAG => 'N'
5301 , X_ORIGINAL_BASELINE_BY => null
5302 , X_LOCK_STATUS_CODE => NULL
5303 , X_LOCKED_BY => NULL
5304 , X_LOCKED_DATE => NULL
5305 , X_STATUS_CODE => 'STRUCTURE_WORKING'
5306 , X_WF_STATUS_CODE => NULL
5307 , X_LATEST_EFF_PUBLISHED_FLAG => 'N'
5308 , X_RECORD_VERSION_NUMBER => 1
5309 , X_CHANGE_REASON_CODE => NULL
5310 , X_CURRENT_WORKING_FLAG => l_current_working_ver_flag /* bug 3301192 */
5311 , X_SOURCE_OBJECT_ID => p_project_id
5312 , X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
5313 );
5314
5315 PA_TASK_PUB1.Create_Schedule_Version(
5316 p_element_version_id => x_structure_version_id
5317 ,p_scheduled_start_date => SYSDATE
5318 ,p_scheduled_end_date => SYSDATE
5319 ,x_pev_schedule_id => x_pev_schedule_id
5320 ,x_return_status => l_return_status
5321 ,x_msg_count => l_msg_count
5322 ,x_msg_data => l_msg_data
5323 );
5324
5325 IF l_return_status <> 'S' THEN
5326 PA_UTILS.ADD_MESSAGE(
5327 p_app_short_name => 'PA'
5328 ,p_msg_name => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
5329 raise FND_API.G_EXC_ERROR;
5330 END IF;
5331 -- Bug 4574032 Begin
5332 BEGIN
5333 PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions
5334 (
5335 p_context => 'WORKPLAN'
5336 ,p_project_id => p_project_id
5337 ,p_struct_elem_version_id => x_structure_version_id
5338 ,x_return_status => l_return_status
5339 ,x_msg_count => l_msg_count
5340 ,x_Msg_data => l_msg_data
5341 );
5342 EXCEPTION
5343 WHEN OTHERS THEN
5344 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
5345 p_procedure_name => 'CREATE_UPDATE_STRUCT_VER',
5346 p_error_text => SUBSTRB('call of pa_fp_planning_transaction_pub.add_planning_transactions failed. sqlerrm= :'||SQLERRM,1,240));
5347 raise fnd_api.g_exc_error;
5348 END;
5349 IF l_return_status <> 'S' THEN
5350 raise FND_API.G_EXC_ERROR;
5351 END IF;
5352 -- Bug 4574032 End
5353 END IF;
5354 ELSE
5355 --update existing structure
5356 IF (p_structure_version_id IS NOT NULL) AND (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
5357
5358 --check if name is passed in
5359 open c1;
5360 fetch c1 into l_pev_structure_id, l_name, l_record_version_number;
5361 close c1;
5362 If (p_structure_version_name IS NOT NULL) AND
5363 (p_structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
5364 l_name := p_structure_version_name;
5365 END IF;
5366
5367 --call update_structure_version_attr API
5368 PA_PROJECT_STRUCTURE_PVT1.update_structure_version_attr(
5369 p_pev_structure_id => l_pev_structure_id
5370 ,p_structure_version_name => l_name
5371 ,p_structure_version_desc => p_description
5372 ,p_record_version_number => l_record_version_number
5373 ,x_return_status => x_return_status
5374 ,x_msg_count => x_msg_count
5375 ,x_msg_data => x_msg_data
5376 );
5377 END IF;
5378 END IF;
5379 EXCEPTION
5380 WHEN FND_API.G_EXC_ERROR THEN
5381 x_msg_count := FND_MSG_PUB.count_msg;
5382 x_return_status := FND_API.G_RET_STS_ERROR;
5383 WHEN OTHERS THEN
5384 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5385 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
5386 p_procedure_name => 'CREATE_UPDATE_STRUCT_VER',
5387 p_error_text => SUBSTRB(SQLERRM,1,240));
5388 END create_update_struct_ver;
5389
5390 -- API name : IS_WP_SEPARATE_FROM_FN
5391 -- Type : PL/sql Public Function
5392 -- Pre-reqs : None
5393 -- Return Value : 'Y', 'N'
5394 -- Prameters
5395 -- p_project_id IN NUMBER
5396 -- History
5397 --
5398 -- 21-AUG-02 MAansari -Created
5399 --
5400 -- Notes: This api is returns 'TRUE' if WORKPLAN is separate from
5401 -- FINANCIAL structure
5402
5403 FUNCTION IS_WP_SEPARATE_FROM_FN
5404 (
5405 p_project_id IN NUMBER
5406 ) RETURN VARCHAR2 IS
5407 l_return_value VARCHAR2(1) := 'N';
5408
5409 BEGIN
5410 --Call Huberts API to check whether a workplan structure is separate from financial
5411 IF PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED( p_project_id ) = 'N'
5412 THEN
5413 l_return_value := 'Y';
5414 END IF;
5415 RETURN ( NVL( l_return_value, 'N' ) );
5416 END IS_WP_SEPARATE_FROM_FN;
5417
5418 -- API name : IS_WP_VERSIONING_ENABLED
5419 -- Type : PL/sql Public Function
5420 -- Pre-reqs : None
5421 -- Return Value : 'Y', 'N'
5422 -- Prameters
5423 -- p_project_id IN NUMBER
5424 -- History
5425 --
5426 -- 22-AUG-02 MAansari -Created
5427 --
5428 -- Notes: This api is returns 'Y' if WORKPLAN is separate from
5429 -- FINANCIAL structure
5430
5431 FUNCTION IS_WP_VERSIONING_ENABLED
5432 (
5433 p_project_id IN NUMBER
5434 ) RETURN VARCHAR2 IS
5435 l_return_value VARCHAR2(1) := 'Y';
5436
5437 BEGIN
5438 --Call Andrews API to check whether a workplan versioning is enabled or not.
5439 l_return_value := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED( p_project_id );
5440 RETURN ( NVL( l_return_value, 'N' ) );
5441
5442 END IS_WP_VERSIONING_ENABLED;
5443
5444 -- API name : get_proj_dates_delta
5445 -- Type : PL/sql Public Function
5446 -- Pre-reqs : None
5447 -- Return Value : NUMBER
5448 -- Prameters
5449 -- p_project_id IN NUMBER
5450 -- History
5451 --
5452 -- 22-AUG-02 MAansari -Created
5453 --
5454 -- Notes:
5455
5456 -- get original project start and completion dates
5457 -- determine the shift days (delta).
5458 -- delta = new project start date - nvl(old project start date,
5459 -- earlist task start date)
5460
5461 -- old project new project
5462 -- case start date start date new start date new end date
5463 -- ---- ----------- ----------- ----------------- -----------------
5464 -- A not null not null old start date old end date
5465 -- + delta + delta
5466 -- B-1 null not null old start date old end date
5467 -- (old task has start date) + delta + delta
5468 -- B-2 null not null new proj start new proj completion
5469 -- (old task has no start date) date date
5470 -- C not null null old start date old end date
5471 -- D null null old start date old end date
5472
5473 FUNCTION get_proj_dates_delta(
5474 x_orig_project_id IN NUMBER
5475 ,x_start_date IN DATE )
5476 RETURN NUMBER IS
5477
5478 cursor c1 is
5479 select start_date
5480 from pa_projects
5481 where project_id = x_orig_project_id;
5482
5483 -- use min(start_date) as pseudo original project start
5484 cursor c2 is
5485 select min(start_date) min_start
5486 from pa_tasks
5487 where project_id = x_orig_project_id;
5488
5489 c2_rec c2%rowtype;
5490 x_delta NUMBER;
5491 x_orig_start_date DATE;
5492 begin
5493
5494 open c1;
5495 fetch c1 into x_orig_start_date;
5496 close c1;
5497
5498 if (x_start_date is null) then
5499 -- case C or D
5500 x_delta := 0;
5501 elsif (x_orig_start_date is not null) then
5502 -- case A
5503 x_delta := x_start_date - x_orig_start_date;
5504 else
5505 -- case B
5506 open c2;
5507 fetch c2 into c2_rec;
5508 if c2%found then
5509 -- case B-1: x_delta is difference between
5510 -- new project start date and the
5511 -- start date of the earlist task
5512 -- of old project
5513 -- case B-2: x_delta is NULL
5514 x_delta := x_start_date - c2_rec.min_start;
5515 end if;
5516 close c2;
5517
5518 end if;
5519 RETURN x_delta;
5520 end get_proj_dates_delta;
5521
5522 -- API name : create_task_structure2
5523 -- Type : PL/sql Public procedure
5524 -- Pre-reqs : None
5525 -- Return Value : N/A
5526 -- Prameters
5527 -- p_project_id IN NUMBER
5528 -- ,p_task_id IN NUMBER
5529 -- ,p_parent_task_id IN NUMBER
5530 -- ,p_task_number IN VARCHAR2
5531 -- ,p_task_name IN VARCHAR2
5532 -- ,p_task_description IN VARCHAR2
5533 -- ,p_carrying_out_organization_id NUMBER
5534 -- x_msg_count OUT NUMBER
5535 -- x_msg_data OUT VARCHAR2
5536 -- x_return_status OUT VARCHAR2
5537 --
5538 -- History
5539 --
5540 -- 22-AUG-01 MAansari -Created
5541 --
5542 -- Notes : THis is API is created to avoid the Implementation level error that is thrown
5543 -- in the forms if any parameter with default containg a remote package variable is referenced.
5544
5545 PROCEDURE create_task_structure2(
5546 p_calling_module IN VARCHAR2 := 'FORMS'
5547 ,p_project_id IN NUMBER
5548 ,p_task_id IN NUMBER
5549 ,p_parent_task_id IN NUMBER
5550 ,p_ref_task_id IN NUMBER := -9999
5551 ,p_task_number IN VARCHAR2
5552 ,p_task_name IN VARCHAR2
5553 ,p_task_description IN VARCHAR2
5554 ,p_carrying_out_organization_id IN NUMBER
5555 ,p_structure_type IN VARCHAR2 := 'FINANCIAL'
5556 ,P_PM_SOURCE_reference IN VARCHAR2
5557 ,P_PM_SOURCE_code IN VARCHAR2
5558 ,p_task_manager_id IN NUMBER
5559 ,p_location_id IN NUMBER
5560 ,p_financial_task_flag IN VARCHAR2 := 'Y' --bug 3301192
5561 ,x_task_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5562 ,x_task_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5563 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5564 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5565 ,x_return_status OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
5566 BEGIN
5567 create_task_structure(
5568 p_calling_module => p_calling_module
5569 ,p_project_id => p_project_id
5570 ,p_task_id => p_task_id
5571 ,p_parent_task_id => p_parent_task_id
5572 ,p_ref_task_id => p_ref_task_id
5573 ,p_task_number => p_task_number
5574 ,p_task_name => p_task_name
5575 ,p_task_description => p_task_description
5576 ,p_carrying_out_organization_id => p_carrying_out_organization_id
5577 ,p_manager_person_id => p_task_manager_id
5578 ,p_location_id => p_location_id
5579 ,p_structure_type => p_structure_type
5580 ,p_financial_task_flag => p_financial_task_flag --bug 3301192
5581 ,x_task_version_id => x_task_version_id
5582 ,x_task_id => x_task_id
5583 ,x_msg_count => x_msg_count
5584 ,x_msg_data => x_msg_data
5585 ,x_return_status => x_return_status
5586 );
5587 END create_task_structure2;
5588
5589 -- API name : update_task_structure2
5590 -- Type : PL/sql Public procedure
5591 -- Pre-reqs : None
5592 -- Return Value : N/A
5593 -- Prameters
5594 -- p_calling_module IN VARCHAR2
5595 -- ,p_task_id IN NUMBER
5596 -- ,p_task_number IN VARCHAR2
5597 -- ,p_task_name IN VARCHAR2
5598 -- ,p_task_description IN VARCHAR2
5599 -- ,p_carrying_out_organization_id IN NUMBER
5600 -- ,p_task_manager_id IN NUMBER
5601 -- ,p_pm_product_code IN VARCHAR2
5602 -- ,p_pm_task_reference IN VARCHAR2
5603 -- ,p_record_version_number IN NUMBER
5604 -- ,x_msg_count OUT NUMBER
5605 -- ,x_msg_data OUT VARCHAR2
5606 -- ,x_return_status OUT VARCHAR2--
5607 -- History
5608 --
5609 -- 22-AUG-02 MAansari -Created
5610 --
5611 -- Notes : THis is API is created to avoid the Implementation level error that is thrown
5612 -- in the forms if any parameter with default containg a remote package variable is referenced.
5613
5614 PROCEDURE update_task_structure2
5615 (
5616 p_calling_module IN VARCHAR2 := 'FORMS'
5617 ,p_ref_task_id IN NUMBER
5618 ,p_project_id IN NUMBER
5619 ,p_task_id IN NUMBER
5620 ,p_task_number IN VARCHAR2
5621 ,p_task_name IN VARCHAR2
5622 ,p_task_description IN VARCHAR2
5623 ,p_carrying_out_organization_id IN NUMBER
5624 ,p_structure_type IN VARCHAR2 := 'FINANCIAL'
5625 ,p_task_manager_id IN NUMBER
5626 ,p_pm_product_code IN VARCHAR2
5627 ,p_pm_task_reference IN VARCHAR2
5628 ,p_location_id IN NUMBER
5629 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5630 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5631 ,x_return_status OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
5632 BEGIN
5633
5634 update_task_structure(
5635 p_calling_module => p_calling_module
5636 ,p_ref_task_id => p_ref_task_id
5637 ,p_project_id => p_project_id
5638 ,p_task_id => p_task_id
5639 ,p_task_number => p_task_number
5640 ,p_task_name => p_task_name
5641 ,p_task_description => p_task_description
5642 ,p_carrying_out_organization_id => p_carrying_out_organization_id
5643 ,p_structure_type => p_structure_type
5644 ,p_task_manager_id => p_task_manager_id
5645 ,p_pm_product_code => p_pm_product_code
5646 ,p_pm_task_reference => p_pm_task_reference
5647 ,p_location_id => p_location_id
5648 ,x_msg_count => x_msg_count
5649 ,x_msg_data => x_msg_data
5650 ,x_return_status => x_return_status
5651 );
5652
5653 END update_task_structure2;
5654
5655 -- API name : get_struc_task_ver_ids
5656 -- Type : PL/sql Public Function
5657 -- Pre-reqs : None
5658 -- Return Value : N/A
5659 -- Prameters
5660 -- p_project_id IN NUMBER
5661 -- History
5662 --
5663 -- 21-AUG-02 MAansari -Created
5664 --
5665 -- Notes: This api returns task_version_id and parent_structure_version_id for the tasks
5666 -- displayed in Forms.
5667
5668 PROCEDURE get_struc_task_ver_ids
5669 (
5670 p_project_id IN NUMBER
5671 ,p_task_id IN NUMBER
5672 ,x_task_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5673 ,x_parent_struc_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5674 ) IS
5675
5676 CURSOR cur_proj_elems( c_parent_struc_ver_id NUMBER )
5677 IS
5678 SELECT element_version_id, parent_structure_version_id
5679 FROM pa_proj_element_versions
5680 WHERE project_id = p_project_id
5681 AND proj_element_id = p_task_id
5682 AND parent_structure_version_id = c_parent_struc_ver_id
5683 AND object_type = 'PA_TASKS';
5684
5685 CURSOR cur_pa_work_ver
5686 IS
5687 SELECT element_version_id
5688 FROM pa_proj_elem_ver_structure
5689 WHERE project_id = p_project_id
5690 AND status_code = 'STRUCTURE_WORKING';
5691
5692 l_structure_version_id NUMBER;
5693 BEGIN
5694 l_structure_version_id := PA_PROJ_ELEMENTS_UTILS.latest_published_ver_id( p_project_id,'FINANCIAL' );
5695
5696 IF l_structure_version_id IS NULL OR l_structure_version_id = -1
5697 THEN
5698 OPEN cur_pa_work_ver;
5699 FETCH cur_pa_work_ver INTO l_structure_version_id;
5700 CLOSE cur_pa_work_ver;
5701 END IF;
5702
5703 IF p_task_id IS NOT NULL
5704 THEN
5705 OPEN cur_proj_elems( l_structure_version_id );
5706 FETCH cur_proj_elems INTO x_task_version_id, x_parent_struc_version_id;
5707 CLOSE cur_proj_elems;
5708 ELSE
5709 IF l_structure_version_id <> -1 THEN
5710 x_parent_struc_version_id := l_structure_version_id;
5711 END IF;
5712 END IF;
5713 END get_struc_task_ver_ids;
5714
5715 -- API name : WP_STR_EXISTS
5716 -- Type : PL/sql Public Function
5717 -- Pre-reqs : None
5718 -- Return Value : 'Y', 'N'
5719 -- Prameters
5720 -- p_project_id IN NUMBER
5721 -- History
5722 --
5723 -- 21-AUG-02 MAansari -Created
5724 --
5725 -- Notes: This api is returns 'TRUE' if WORKPLAN str exists
5726
5727 FUNCTION WP_STR_EXISTS
5728 (
5729 p_project_id IN NUMBER
5730 ) RETURN VARCHAR2 IS
5731 l_return_value VARCHAR2(1) := 'N';
5732 l_dummy_char VARCHAR2(1) := 'N';
5733
5734 CURSOR cur_pa_proj
5735 IS
5736 /* SELECT proj_element_id
5737 FROM pa_proj_elements
5738 WHERE project_id = p_project_id
5739 AND object_type = 'PA_STRUCTURES';
5740 */
5741 SELECT 'x'
5742 FROM pa_proj_elements ppe, pa_proj_structure_types ppst
5743 WHERE ppe.project_id = p_project_id
5744 AND ppe.object_type = 'PA_STRUCTURES'
5745 AND ppe.proj_element_id = ppst.proj_element_id
5746 AND ppst.structure_type_id = 1; --'WORKPLAN'
5747
5748
5749 BEGIN
5750 --Call Huberts API to check whether a workplan structure is separate from financial
5751
5752 /* FOR cur_pa_proj_rec in cur_pa_proj LOOP
5753 l_return_value := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(
5754 cur_pa_proj_rec.proj_element_id, 'WORKPLAN' );
5755 IF NVL( l_return_value, 'N' ) = 'Y'
5756 THEN
5757 Exit;
5758 END IF;
5759 END LOOP;
5760 */
5761 open cur_pa_proj;
5762 fetch cur_pa_proj INTO l_dummy_char;
5763 IF cur_pa_proj%FOUND
5764 THEN
5765 l_return_value := 'Y';
5766 ELSE
5767 l_return_value := 'N';
5768 END IF;
5769 CLOSE cur_pa_proj;
5770
5771 RETURN ( NVL( l_return_value, 'N' ) );
5772
5773 END WP_STR_EXISTS;
5774
5775 FUNCTION DATE_SYNC_UP_METHOD
5776 (
5777 p_project_id IN NUMBER
5778 ) RETURN VARCHAR2 IS
5779 CURSOR cur_pa_proj_elems
5780 IS
5781 SELECT ppe.proj_element_id
5782 FROM pa_proj_elements ppe, pa_proj_structure_types ppst
5783 WHERE ppe.project_id = p_project_id
5784 AND ppe.object_type = 'PA_STRUCTURES'
5785 AND ppe.proj_element_id = ppst.proj_element_id
5786 AND ppst.structure_type_id = 1; --'WORKPLAN'
5787
5788 l_proj_element_id NUMBER;
5789 l_return_value VARCHAR2(1);
5790
5791 BEGIN
5792
5793 OPEN cur_pa_proj_elems;
5794 FETCH cur_pa_proj_elems INTO l_proj_element_id;
5795 CLOSE cur_pa_proj_elems;
5796
5797 l_return_value := PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_DATE_SYNC_ENABLED( l_proj_element_id );
5798 RETURN l_return_value;
5799 END DATE_SYNC_UP_METHOD;
5800
5801 PROCEDURE update_trans_dates(
5802 p_project_id IN NUMBER
5803 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5804 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5805 ,x_return_status OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
5806 BEGIN
5807
5808 x_return_status := 'S';
5809 PA_PROJECT_DATES_PUB.COPY_PROJECT_DATES
5810 (
5811 p_project_id => p_project_id
5812 ,x_return_status => x_return_status
5813 ,x_msg_count => x_msg_count
5814 ,x_msg_data => x_msg_data
5815 );
5816
5817 END update_trans_dates;
5818
5819
5820 PROCEDURE update_wp_calendar(
5821 p_project_id IN NUMBER
5822 ,p_calendar_id IN NUMBER
5823 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5824 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5825 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5826 )
5827 IS
5828 BEGIN
5829 PA_PROJECT_STRUCTURE_PVT1.update_wp_calendar(
5830 p_project_id => p_project_id
5831 ,p_calendar_id => p_calendar_id
5832 ,x_return_status => x_return_status
5833 ,x_msg_count => x_msg_count
5834 ,x_msg_data => x_msg_data
5835 );
5836 END update_wp_calendar;
5837
5838 PROCEDURE create_tasks_versions_only(
5839 p_calling_module IN VARCHAR2 := 'FORMS'
5840 ,p_structure_type IN VARCHAR2 := 'FINANCIAL'
5841 ,p_project_id IN NUMBER
5842 ,p_structure_version_id IN NUMBER
5843 ,p_pm_product_code IN VARCHAR2 := 'JUNK_CHARS'
5844 ,p_tasks_in IN pa_project_pub.task_in_tbl_type
5845 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5846 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5847 ,x_return_status OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
5848
5849
5850 v_first_index NUMBER;
5851 i NUMBER;
5852 v_parent_task_id NUMBER;
5853 l_return_status VARCHAR2(1);
5854 l_msg_count NUMBER;
5855 l_msg_data VARCHAR2(2000);
5856 v_ref_task_id NUMBER;
5857 l_task_version_id NUMBER;
5858 l_task_id NUMBER;
5859 --Added by rtarway for BUG 3990873
5860 l_pa_task_id NUMBER;
5861
5862 CURSOR cur_get_existing_task_id (c_project_id pa_projects_all.project_id%TYPE,
5863 c_pm_source_reference pa_proj_elements.pm_source_reference%TYPE) IS
5864 SELECT proj_element_id
5865 FROM pa_proj_elements pelem
5866 WHERE project_id = c_project_id
5867 AND pm_source_reference = c_pm_source_reference
5868 AND exists(select 1
5869 from pa_proj_structure_types pstype, pa_structure_types types
5870 where pstype.proj_element_id = pelem.parent_structure_id
5871 and pstype.structure_type_id = types.structure_type_id
5872 and types.structure_type = p_structure_type);
5873 --End Added by rtarway for BUG 3990873
5874 BEGIN
5875
5876 i := p_tasks_in.first;
5877 v_first_index := i;
5878
5879 IF p_tasks_in.exists(i)
5880 THEN
5881 WHILE i IS NOT NULL LOOP
5882 --Added by rtarway for BUG 4320731
5883 l_pa_task_id := NULL;
5884 --Commented by rtarway , chnaged If condition, BUG 3990873
5885 /*IF p_tasks_in(i).pa_task_id IS NOT NULL AND
5886 p_tasks_in(i).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5887 THEN*/
5888
5889 --Begin add by rtarway, for BUG 3990873
5890 if ( p_tasks_in(i).pa_task_id is null or p_tasks_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
5891 then
5892 if (p_tasks_in(i).pm_task_reference is not null and p_tasks_in(i).pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
5893 then
5894 --Cursor is deliberately used here, because we dont want to populate message in global error stack, in case new tasks
5895 --are being added. At many places in update_task flow, error is raised based on fnd_msg_pub.count > 0
5896 --If NO_DATA_FOUND occurs for this cursor, it will pass without error.
5897 OPEN cur_get_existing_task_id(p_project_id,p_tasks_in(i).pm_task_reference);
5898 FETCH cur_get_existing_task_id into l_pa_task_id;
5899 --Added by rtarway for BUG 4320731
5900 IF ( cur_get_existing_task_id%NOTFOUND ) THEN
5901 l_pa_task_id := NULL;
5902 END IF;
5903 CLOSE cur_get_existing_task_id;
5904 end if;
5905 else
5906 l_pa_task_id := p_tasks_in(i).pa_task_id;
5907 end if;
5908 IF l_pa_task_id IS NOT NULL
5909 then
5910 --end add by rtarway, for BUG 3990873
5911 IF (p_tasks_in(i).pa_parent_task_id IS NOT NULL
5912 AND p_tasks_in(i).pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
5913 THEN
5914 v_parent_task_id := p_tasks_in(i).pa_parent_task_id;
5915 ELSIF (p_tasks_in(i).pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5916 AND p_tasks_in(i).pm_parent_task_reference IS NOT NULL)
5917 THEN
5918 --convert pm_parent_task_reference to parent_task_id.
5919 --All the parent tasks are created first then child tasks are created. See TRM for AMG load_task api.
5920
5921 -- Bug 3601700 changed function call from PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref
5922 -- to PA_PROJECT_PVT.Convert_pm_taskref_to_id_all to retrieve task id for task reference
5923 -- because PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref may return financial task id
5924 -- in case of SHARED structure
5925 -- new api call takes structure type as parameter, so it will return task id for the passed structure type only */
5926 /* PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref(
5927 p_pm_parent_task_reference => p_tasks_in(i).pm_parent_task_reference
5928 ,p_project_id => p_project_id
5929 ,x_parent_task_id => v_parent_task_id
5930 ,x_return_status => l_return_status
5931 ); */
5932
5933 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
5934 p_pa_project_id => p_project_id
5935 , p_structure_type => 'WORKPLAN'
5936 , p_pm_task_reference => p_tasks_in(i).pm_parent_task_reference
5937 , p_out_task_id => v_parent_task_id
5938 , p_return_status => l_return_status );
5939
5940 /*IF l_return_status <> FND_API.G_RET_STS_SUCCESS
5941 THEN
5942 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
5943 THEN
5944 pa_interface_utils_pub.map_new_amg_msg
5945 ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
5946 ,p_msg_attribute => 'CHANGE'
5947 ,p_resize_flag => 'N'
5948 ,p_msg_context => 'TASK'
5949 ,p_attribute1 => l_amg_segment1
5950 ,p_attribute2 => l_amg_task_number
5951 ,p_attribute3 => ''
5952 ,p_attribute4 => ''
5953 ,p_attribute5 => '');
5954 END IF;
5955 RAISE FND_API.G_EXC_ERROR;
5956 END IF;
5957 */
5958 ELSE
5959 v_parent_task_id := null;
5960 END IF;
5961
5962 --get the previous task
5963 IF i = v_first_index
5964 THEN
5965 v_ref_task_id := null;
5966 ELSE
5967 --v_ref_task_id := p_tasks_in(i-1).pa_task_id;
5968 --Added by rtarway for BUG 3990873
5969 if ( p_tasks_in(i-1).pa_task_id is not null
5970 and p_tasks_in(i-1).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
5971 then
5972 v_ref_task_id := p_tasks_in(i-1).pa_task_id;
5973 else
5974 if ( p_tasks_in(i-1).pm_task_reference is not null
5975 and p_tasks_in(i-1).pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
5976 then
5977 --get the task id from reference
5978 --Cursor is deliberately used here, because we dont want to populate message in global error stack, in case new tasks
5979 --are being added. At many places in update_task flow, error is raised based on fnd_msg_pub.count > 0
5980 --If NO_DATA_FOUND occurs for this cursor, it will pass without error.
5981 OPEN cur_get_existing_task_id(p_project_id,p_tasks_in(i-1).pm_task_reference);
5982 FETCH cur_get_existing_task_id into v_ref_task_id;
5983 CLOSE cur_get_existing_task_id;
5984 end if;
5985 end if;
5986 END IF;
5987
5988 PA_PROJ_TASK_STRUC_PUB.CREATE_TASK_STRUCTURE(
5989 p_project_id => p_project_id
5990 -- ,p_task_id => p_tasks_in(i).pa_task_id, rtarway, BUG 3990873
5991 ,p_task_id => l_pa_task_id
5992 ,p_parent_task_id => v_parent_task_id
5993 ,p_ref_task_id => v_ref_task_id
5994 ,p_task_number => p_tasks_in(i).pa_task_number
5995 ,p_task_name => p_tasks_in(i).task_name
5996 ,p_task_description => p_tasks_in(i).task_description
5997 ,p_carrying_out_organization_id => p_tasks_in(i).carrying_out_organization_id
5998 ,p_calling_module => 'AMG'
5999 ,p_structure_type => p_structure_type
6000 ,p_OBLIGATION_START_DATE => p_tasks_in(i).OBLIGATION_START_DATE
6001 ,p_OBLIGATION_FINISH_DATE => p_tasks_in(i).OBLIGATION_FINISH_DATE
6002 ,p_ESTIMATED_START_DATE => p_tasks_in(i).ESTIMATED_START_DATE
6003 ,p_ESTIMATED_FINISH_DATE => p_tasks_in(i).ESTIMATED_FINISH_DATE
6004 ,p_BASELINE_START_DATE => p_tasks_in(i).BASELINE_START_DATE
6005 ,p_BASELINE_FINISH_DATE => p_tasks_in(i).BASELINE_FINISH_DATE
6006 ,p_CLOSED_DATE => p_tasks_in(i).CLOSED_DATE
6007 ,p_WQ_UOM_CODE => p_tasks_in(i).WQ_UOM_CODE
6008 ,p_WQ_ITEM_CODE => p_tasks_in(i).WQ_ITEM_CODE
6009 ,p_STATUS_CODE => p_tasks_in(i).STATUS_CODE
6010 ,p_WF_STATUS_CODE => p_tasks_in(i).WF_STATUS_CODE
6011 ,p_PM_SOURCE_CODE => p_pm_product_code --bug 2665656
6012 ,p_PRIORITY_CODE => p_tasks_in(i).PRIORITY_CODE
6013 ,p_MILESTONE_FLAG => p_tasks_in(i).MILESTONE_FLAG
6014 ,p_CRITICAL_FLAG => p_tasks_in(i).CRITICAL_FLAG
6015 ,p_INC_PROJ_PROGRESS_FLAG => p_tasks_in(i).INC_PROJ_PROGRESS_FLAG
6016 ,p_LINK_TASK_FLAG => p_tasks_in(i).LINK_TASK_FLAG
6017 ,p_CALENDAR_ID => p_tasks_in(i).CALENDAR_ID
6018 ,p_PLANNED_EFFORT => p_tasks_in(i).PLANNED_EFFORT
6019 ,p_DURATION => p_tasks_in(i).DURATION
6020 ,p_PLANNED_WORK_QUANTITY => p_tasks_in(i).PLANNED_WORK_QUANTITY
6021 ,p_TASK_TYPE => p_tasks_in(i).TASK_TYPE
6022 ,p_actual_start_date => p_tasks_in(i).actual_start_date
6023 ,p_actual_finish_date => p_tasks_in(i).actual_finish_date
6024 ,p_early_start_date => p_tasks_in(i).early_start_date
6025 ,p_early_finish_date => p_tasks_in(i).early_finish_date
6026 ,p_late_start_date => p_tasks_in(i).late_start_date
6027 ,p_late_finish_date => p_tasks_in(i).late_finish_date
6028 ,p_scheduled_start_date => p_tasks_in(i).scheduled_start_date
6029 ,p_scheduled_finish_date => p_tasks_in(i).scheduled_finish_date
6030 ,P_PM_SOURCE_reference => p_tasks_in(i).pm_task_reference
6031 ,p_location_id => p_tasks_in(i).address_id
6032 ,p_manager_person_id => p_tasks_in(i).task_manager_person_id
6033 ,p_structure_version_id => p_structure_version_id
6034 ,p_create_task_version_only => 'Y' --we dont need to create tasks in pa_tasks or pa_proj_elements for the existing tasks.
6035 --All we need is just to create task versions under the new structure version.
6036 ,x_task_version_id => l_task_version_id
6037 ,x_task_id => l_task_id
6038 ,x_msg_count => x_msg_count
6039 ,x_msg_data => x_msg_data
6040 ,x_return_status => x_return_status
6041 );
6042 END IF;
6043 i := p_tasks_in.next(i);
6044 END LOOP;
6045 END IF;
6046
6047 END create_tasks_versions_only;
6048
6049
6050 --The following API is added to re-calculate task weights to call PA_TASK_PUB1.CALC_TASK_WEIGHTS
6051 --The API is called from PA_PROJECT_PUB.create_project and PA_PROJECT_PUB.update_project
6052
6053 PROCEDURE recalc_task_weightings(
6054 p_tasks_in IN pa_project_pub.task_out_tbl_type
6055 ,p_task_version_id IN NUMBER
6056 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6057 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6058 ,x_return_status OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
6059
6060 CURSOR cur_pa_proj_elem_ver( c_task_ver_id NUMBER )
6061 IS
6062 SELECT wbs_level
6063 FROM pa_proj_element_versions
6064 WHERE element_version_id = c_task_ver_id;
6065
6066 i NUMBER;
6067 j NUMBER := 1;
6068
6069 l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
6070 l_outline_level PA_NUM_1000_NUM := PA_NUM_1000_NUM();
6071 l_total_top_tasks NUMBER := 0;
6072 l_wbs_level NUMBER;
6073
6074 l_msg_count NUMBER;
6075 l_return_status VARCHAR2(1);
6076 l_msg_data VARCHAR2(2000);
6077 l_data VARCHAR2(2000);
6078 l_msg_index_out NUMBER;
6079 API_ERROR EXCEPTION;
6080 l_recalculate_flag VARCHAR2(1);
6081
6082 BEGIN
6083
6084 IF p_task_version_id IS NULL
6085 THEN
6086
6087 i := p_tasks_in.first;
6088
6089 IF p_tasks_in.exists(i)
6090 THEN
6091 WHILE i IS NOT NULL LOOP
6092 IF p_tasks_in(i).task_version_id IS NOT NULL AND
6093 p_tasks_in(i).task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6094 THEN
6095 l_tasks_ver_ids.extend;
6096 l_tasks_ver_ids(l_tasks_ver_ids.count) := p_tasks_in(i).task_version_id;
6097
6098 OPEN cur_pa_proj_elem_ver( p_tasks_in(i).task_version_id );
6099 FETCH cur_pa_proj_elem_ver INTO l_wbs_level;
6100 CLOSE cur_pa_proj_elem_ver;
6101
6102 IF l_wbs_level = 1
6103 THEN
6104 l_total_top_tasks := l_total_top_tasks + 1;
6105 END IF;
6106
6107 l_outline_level.extend;
6108 l_outline_level(l_outline_level.count) := l_wbs_level;
6109 l_recalculate_flag := 'Y';
6110 END IF;
6111 j := j + 1;
6112 IF NVL( l_recalculate_flag, 'N' ) = 'Y' AND j >= 1000
6113 THEN
6114 --To avoid no_data_found when this array is read in PA_TASK_PUB1.Cal_Task_weights
6115 l_outline_level.extend;
6116 l_outline_level(l_outline_level.count) := null;
6117
6118 /*--bug 2856033
6119 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
6120 p_commit => FND_API.G_FALSE,
6121 p_element_versions => l_tasks_ver_ids,
6122 x_return_status => l_return_status,
6123 x_msg_count => l_msg_count,
6124 x_msg_data => l_msg_data);
6125
6126 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6127 x_msg_count := FND_MSG_PUB.count_msg;
6128 if x_msg_count = 1 then
6129 pa_interface_utils_pub.get_messages
6130 (p_encoded => FND_API.G_TRUE,
6131 p_msg_index => 1,
6132 p_msg_count => l_msg_count,
6133 p_msg_data => l_msg_data,
6134 p_data => l_data,
6135 p_msg_index_out => l_msg_index_out);
6136 x_msg_data := l_data;
6137 end if;
6138 raise API_ERROR;
6139 end if;
6140 --bug 2856033
6141 */
6142
6143 PA_TASK_PUB1.Calc_Task_Weights(
6144 p_element_versions => l_tasks_ver_ids
6145 ,p_outline_level => l_outline_level
6146 ,p_top_sub_count => l_total_top_tasks
6147 ,x_return_status => l_return_status
6148 ,x_msg_count => l_msg_count
6149 ,x_msg_data => l_msg_data );
6150
6151 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6152 x_msg_count := FND_MSG_PUB.count_msg;
6153 x_return_status := l_return_status ; --bug 3044915
6154 if x_msg_count = 1 then
6155 pa_interface_utils_pub.get_messages
6156 (p_encoded => FND_API.G_TRUE,
6157 p_msg_index => 1,
6158 p_msg_count => l_msg_count,
6159 p_msg_data => l_msg_data,
6160 p_data => l_data,
6161 p_msg_index_out => l_msg_index_out);
6162 x_msg_data := l_data;
6163 end if;
6164 raise API_ERROR;
6165 end if;
6166 l_tasks_ver_ids.DELETE;
6167 l_outline_level.DELETE;
6168 l_recalculate_flag := 'N';
6169 j := 1;
6170 END IF;
6171 i := p_tasks_in.next(i);
6172 END LOOP;
6173 END IF;
6174
6175 ELSIF p_task_version_id IS NOT NULL
6176 THEN
6177 l_tasks_ver_ids.extend;
6178 l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
6179
6180 OPEN cur_pa_proj_elem_ver( p_task_version_id );
6181 FETCH cur_pa_proj_elem_ver INTO l_wbs_level;
6182 CLOSE cur_pa_proj_elem_ver;
6183
6184 IF l_wbs_level = 1
6185 THEN
6186 l_total_top_tasks := l_total_top_tasks + 1;
6187 END IF;
6188
6189 l_outline_level.extend;
6190 l_outline_level(l_outline_level.count) := l_wbs_level;
6191 l_recalculate_flag := 'Y';
6192
6193 END IF;
6194
6195 IF NVL( l_recalculate_flag, 'N' ) = 'Y'
6196 THEN
6197
6198 --To avoid no_data_found when this array is read in PA_TASK_PUB1.Cal_Task_weights
6199 l_outline_level.extend;
6200 l_outline_level(l_outline_level.count) := null;
6201
6202 /*--bug 2856033
6203 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
6204 p_commit => FND_API.G_FALSE,
6205 p_element_versions => l_tasks_ver_ids,
6206 x_return_status => l_return_status,
6207 x_msg_count => l_msg_count,
6208 x_msg_data => l_msg_data);
6209
6210 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6211 x_msg_count := FND_MSG_PUB.count_msg;
6212 if x_msg_count = 1 then
6213 pa_interface_utils_pub.get_messages
6214 (p_encoded => FND_API.G_TRUE,
6215 p_msg_index => 1,
6216 p_msg_count => l_msg_count,
6217 p_msg_data => l_msg_data,
6218 p_data => l_data,
6219 p_msg_index_out => l_msg_index_out);
6220 x_msg_data := l_data;
6221 end if;
6222 raise API_ERROR;
6223 end if;
6224 --bug 2856033
6225 */
6226
6227
6228 PA_TASK_PUB1.Calc_Task_Weights(
6229 p_element_versions => l_tasks_ver_ids
6230 ,p_outline_level => l_outline_level
6231 ,p_top_sub_count => l_total_top_tasks
6232 ,x_return_status => l_return_status
6233 ,x_msg_count => l_msg_count
6234 ,x_msg_data => l_msg_data );
6235
6236 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6237 x_msg_count := FND_MSG_PUB.count_msg;
6238 x_return_status := l_return_status ; --bug 3044915
6239 if x_msg_count = 1 then
6240 pa_interface_utils_pub.get_messages
6241 (p_encoded => FND_API.G_TRUE,
6242 p_msg_index => 1,
6243 p_msg_count => l_msg_count,
6244 p_msg_data => l_msg_data,
6245 p_data => l_data,
6246 p_msg_index_out => l_msg_index_out);
6247 x_msg_data := l_data;
6248 end if;
6249 raise API_ERROR;
6250 end if;
6251 END IF;
6252 x_return_status := FND_API.G_RET_STS_SUCCESS; -- Bug 3044915
6253 END recalc_task_weightings;
6254
6255 FUNCTION GET_MAX_LAST_UPD_DT_WRKNG_VER
6256 ( p_structure_version_id IN NUMBER
6257 ) return DATE
6258 IS
6259 --bug 3074706
6260 CURSOR c2 IS
6261 select project_id
6262 from pa_proj_element_versions
6263 where element_version_id = p_structure_version_id;
6264 l_project_id NUMBER;
6265
6266 CURSOR c1 IS
6267 select MAX(a.last_update_date)
6268 from pa_proj_element_versions b,
6269 pa_proj_elem_ver_schedule a,
6270 pa_proj_elem_ver_structure c
6271 where p_structure_version_id = c.element_version_id
6272 and l_project_id = c.project_id
6273 and c.status_code <> 'STRUCTURE_PUBLISHED'
6274 and b.parent_structure_version_id = c.element_version_id
6275 and b.project_id = c.project_id
6276 and a.element_version_id (+)= b.element_version_id
6277 and a.project_id (+) = b.project_id
6278 and a.proj_element_id (+) = b.proj_element_id;
6279 /*
6280 CURSOR c1 IS
6281 SELECT MAX(a.last_update_date)
6282 FROM pa_proj_element_versions b,
6283 pa_proj_elem_ver_schedule a,
6284 pa_proj_elem_ver_structure c
6285 WHERE a.element_version_id (+)= b.element_version_id
6286 AND a.project_id (+) = b.project_id
6287 AND a.proj_element_id (+) = b.proj_element_id
6288 AND b.parent_structure_version_id = c.element_version_id
6289 AND b.project_id = c.project_id
6290 AND c.status_code <> 'STRUCTURE_PUBLISHED'
6291 AND b.parent_structure_version_id = p_structure_version_id
6292 ;
6293 */
6294 --end bug 3074706
6295
6296 l_date DATE;
6297 l_structure_version_id NUMBER;
6298 BEGIN
6299 --bug 3074706
6300 OPEN c2;
6301 FETCH c2 into l_project_id;
6302 CLOSE c2;
6303 --end bug 3074706
6304 OPEN c1;
6305 FETCH c1 into l_date;
6306 CLOSE c1;
6307 return l_date;
6308 END GET_MAX_LAST_UPD_DT_WRKNG_VER;
6309
6310 -- Procedure : copy_src_financial_version
6311 -- Type : PRIVATE
6312 -- Purpose : Contains logic for copying the financial version from the source to the destination version
6313 -- Note :
6314 -- Assumptions : All FLAGS and WORKPLAN record(s) have been populated in the global temporary table
6315 -- Parameters Type Required Description and Purpose
6316 -- --------------------------- ------ -------- --------------------------------------------------------
6317 -- p_src_project_id NUMBER Y The source project id
6318 -- p_dest_project_id NUMBER Y The destination project id
6319 -- p_dest_fn_structure_id NUMBER Y The destination project's financial structure id
6320 -- p_shared VARCHAR2 Y Whether source/destination project is shared or not
6321 -- p_publish_person_id NUMBER Y The person id required for publishing a version
6322 -- p_dest_template_flag VARCHAR2 Y Creating a template or a project
6323 PROCEDURE copy_src_financial_version( p_api_version IN NUMBER := 1.0
6324 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
6325 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
6326 ,p_validate_only IN VARCHAR2 := FND_API.G_FALSE
6327 ,p_validation_level IN VARCHAR2 := FND_API.G_VALID_LEVEL_FULL
6328 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
6329 ,p_debug_mode IN VARCHAR2 := 'N'
6330 ,p_src_project_id IN NUMBER
6331 ,p_dest_project_id IN NUMBER
6332 ,p_dest_fn_structure_id IN NUMBER
6333 ,p_shared IN VARCHAR2
6334 ,p_dest_template_flag IN VARCHAR2
6335 ,p_publish_person_id IN NUMBER
6336 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6337 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6338 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6339 ) IS
6340 --This cursor fetches the workplan structure attributes
6341 CURSOR cur_get_wp_attr IS
6342 SELECT ppwa.WP_ENABLE_VERSION_FLAG
6343 FROM pa_proj_workplan_attr ppwa
6344 ,pa_proj_structure_types ppst
6345 ,pa_structure_types pst
6346 WHERE ppwa.project_id = p_src_project_id
6347 AND ppwa.proj_element_id = ppst.proj_element_id
6348 AND ppst.structure_type_id = pst.structure_type_id
6349 AND pst.structure_type = 'WORKPLAN' ;
6350
6351 --This cursor retrieves the LATEST PUBLISHED WP version from the source project
6352 CURSOR cur_get_src_fin_version_id IS
6353 SELECT ppev.element_version_id
6354 FROM pa_proj_element_versions ppev,
6355 pa_proj_elem_ver_structure ppevs
6356 WHERE ppev.project_id = p_src_project_id
6357 AND ppev.object_type = 'PA_STRUCTURES'
6358 AND ppev.element_version_id = ppevs.element_version_id
6359 AND ppevs.project_id = p_src_project_id
6360 AND ppevs.latest_eff_published_flag = 'Y';
6361
6362 --This cursor retrieves the CURRENT WORKING WP version from the source project
6363 CURSOR cur_get_src_fin_version_id2 IS
6364 SELECT ppev.element_version_id
6365 FROM pa_proj_element_versions ppev,
6366 pa_proj_elem_ver_structure ppevs
6367 WHERE ppev.project_id = p_src_project_id
6368 AND ppev.object_type = 'PA_STRUCTURES'
6369 AND ppev.element_version_id = ppevs.element_version_id
6370 AND ppevs.project_id = p_src_project_id
6371 AND ppevs.current_working_flag = 'Y';
6372
6373 --This cursor retrieves the version for the financial structure form the source project
6374 CURSOR cur_get_split_fin_ver IS
6375 SELECT ppev.element_version_id
6376 FROM pa_proj_element_versions ppev,
6377 pa_proj_structure_types ppst,
6378 pa_structure_types pst
6379 WHERE ppev.project_id = p_src_project_id
6380 AND ppev.object_type = 'PA_STRUCTURES'
6381 AND ppev.proj_element_id = ppst.proj_element_id
6382 AND ppst.structure_type_id = pst.structure_type_id
6383 AND pst.structure_type = 'FINANCIAL' ;
6384
6385 --This cursor gets the schedule start date from the source project
6386 CURSOR cur_get_src_sch_st_date(c_project_id NUMBER, c_struc_ver_id NUMBER) IS
6387 SELECT scheduled_start_date
6388 FROM pa_proj_elem_ver_schedule
6389 WHERE project_id = c_project_id
6390 AND element_version_id = c_struc_ver_id;
6391
6392 l_debug_mode VARCHAR2(1);
6393 l_debug_level2 CONSTANT NUMBER := 2;
6394 l_debug_level3 CONSTANT NUMBER := 3;
6395 l_debug_level4 CONSTANT NUMBER := 4;
6396 l_debug_level5 CONSTANT NUMBER := 5;
6397
6398 l_src_fin_version_id NUMBER(15);
6399 l_versioning_enabled VARCHAR2(1);
6400 dest_latest_eff_pub_flag VARCHAR2(1);
6401 dest_current_flag VARCHAR2(1);
6402 l_user_id NUMBER := FND_GLOBAL.USER_ID;
6403 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
6404 BEGIN
6405
6406 x_msg_count := 0;
6407 x_return_status := FND_API.G_RET_STS_SUCCESS;
6408 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
6409
6410 IF (p_commit = FND_API.G_TRUE) THEN
6411 SAVEPOINT copy_src_fin_ver;
6412 END IF;
6413
6414 IF p_init_msg_list = FND_API.G_TRUE THEN
6415 FND_MSG_PUB.initialize;
6416 END IF;
6417
6418 IF l_debug_mode = 'Y' THEN
6419 PA_DEBUG.set_curr_function( p_function => 'copy_src_financial_version',
6420 p_debug_mode => l_debug_mode );
6421 END IF;
6422
6423 IF l_debug_mode = 'Y' THEN
6424 Pa_Debug.g_err_stage:= 'Printing Input parameters';
6425 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
6426 l_debug_level3);
6427
6428 Pa_Debug.WRITE(G_PKG_NAME,'p_src_project_id'||':'||p_src_project_id,
6429 l_debug_level3);
6430
6431 Pa_Debug.WRITE(G_PKG_NAME,'p_dest_project_id'||':'||p_dest_project_id,
6432 l_debug_level3);
6433
6434 Pa_Debug.WRITE(G_PKG_NAME,'p_dest_fn_structure_id'||':'||p_dest_fn_structure_id,
6435 l_debug_level3);
6436
6437 Pa_Debug.WRITE(G_PKG_NAME,'p_shared'||':'||p_shared,
6438 l_debug_level3);
6439
6440 Pa_Debug.WRITE(G_PKG_NAME,'p_publish_person_id'||':'||p_publish_person_id,
6441 l_debug_level3);
6442 END IF;
6443
6444 IF l_debug_mode = 'Y' THEN
6445 Pa_Debug.g_err_stage:= 'Validating Input parameters';
6446 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
6447 l_debug_level3);
6448 END IF;
6449
6450 IF ( ( p_src_project_id IS NULL OR p_src_project_id = FND_API.G_MISS_NUM ) AND
6451 ( p_dest_project_id IS NULL OR p_dest_project_id = FND_API.G_MISS_NUM ) AND
6452 ( p_dest_fn_structure_id IS NULL OR p_dest_fn_structure_id = FND_API.G_MISS_NUM ) AND
6453 ( p_shared IS NULL OR p_shared = FND_API.G_MISS_CHAR ) AND
6454 ( p_publish_person_id IS NULL OR p_publish_person_id = FND_API.G_MISS_NUM )
6455 )
6456 THEN
6457 IF l_debug_mode = 'Y' THEN
6458 Pa_Debug.g_err_stage:= 'PA_PROJ_TASK_STRUC_PUB : copy_src_financial_version :
6459 p_src_project_id, p_dest_project_id, p_dest_fn_structure_id, p_shared, p_publish_person_id are NULL';
6460 Pa_Debug.WRITE(G_PKG_NAME, Pa_Debug.g_err_stage, l_debug_level3);
6461 END IF;
6462 RAISE Invalid_Arg_Exc_WP;
6463 END IF;
6464
6465 IF 'Y' = p_shared THEN
6466 --Fetch the WP latest published, else the current working in the source project
6467 OPEN cur_get_src_fin_version_id;
6468 FETCH cur_get_src_fin_version_id INTO l_src_fin_version_id;
6469 IF cur_get_src_fin_version_id%NOTFOUND THEN
6470 OPEN cur_get_src_fin_version_id2;
6471 FETCH cur_get_src_fin_version_id2 INTO l_src_fin_version_id;
6472 CLOSE cur_get_src_fin_version_id2;
6473 END IF;
6474 CLOSE cur_get_src_fin_version_id;
6475 ELSE
6476 --Fetch the financial version from the source project
6477 OPEN cur_get_split_fin_ver;
6478 FETCH cur_get_split_fin_ver INTO l_src_fin_version_id;
6479 CLOSE cur_get_split_fin_ver;
6480 END IF;
6481
6482 IF l_debug_mode = 'Y' THEN
6483 Pa_Debug.WRITE(G_PKG_NAME,'Source financial version id : '||l_src_fin_version_id, l_debug_level3);
6484 END IF;
6485
6486 --Copy entry into pa_proj_element_versions for the financial version in the source project
6487 INSERT INTO pa_proj_element_versions(
6488 ELEMENT_VERSION_ID
6489 ,PROJ_ELEMENT_ID
6490 ,OBJECT_TYPE
6491 ,PROJECT_ID
6492 ,PARENT_STRUCTURE_VERSION_ID
6493 ,DISPLAY_SEQUENCE
6494 ,WBS_LEVEL
6495 ,WBS_NUMBER
6496 ,CREATION_DATE
6497 ,CREATED_BY
6498 ,LAST_UPDATE_DATE
6499 ,LAST_UPDATED_BY
6500 ,LAST_UPDATE_LOGIN
6501 ,RECORD_VERSION_NUMBER
6502 ,attribute15 --This column stores the stucture version id in the src project, to be used to create relationships.
6503 ,ATTRIBUTE_CATEGORY
6504 ,ATTRIBUTE1
6505 ,ATTRIBUTE2
6506 ,ATTRIBUTE3
6507 ,ATTRIBUTE4
6508 ,ATTRIBUTE5
6509 ,ATTRIBUTE6
6510 ,ATTRIBUTE7
6511 ,ATTRIBUTE8
6512 ,ATTRIBUTE9
6513 ,ATTRIBUTE10
6514 ,ATTRIBUTE11
6515 ,ATTRIBUTE12
6516 ,ATTRIBUTE13
6517 ,ATTRIBUTE14
6518 ,TASK_UNPUB_VER_STATUS_CODE
6519 ,FINANCIAL_TASK_FLAG
6520 ,source_object_id
6521 ,source_object_type
6522 )
6523 SELECT
6524 pa_proj_element_versions_s.nextval
6525 ,p_dest_fn_structure_id --This would be the WP/FIN structure id in shared case and FIN structure id in split case
6526 ,ppev.object_type
6527 ,p_dest_project_id
6528 ,pa_proj_element_versions_s.nextval --nextval occuring twice in the same select returns the same value
6529 ,ppev.DISPLAY_SEQUENCE
6530 ,ppev.WBS_LEVEL
6531 ,ppev.WBS_NUMBER
6532 ,SYSDATE ------CREATION_DATE
6533 ,l_user_id ------CREATED_BY
6534 ,SYSDATE ------LAST_UPDATE_DATE
6535 ,l_user_id ------LAST_UPDATED_BY
6536 ,l_login_id ------LAST_UPDATE_LOGIN
6537 ,ppev.RECORD_VERSION_NUMBER ------RECORD_VERSION_NUMBER
6538 ,ppev.element_version_id
6539 ,ppev.ATTRIBUTE_CATEGORY
6540 ,ppev.ATTRIBUTE1
6541 ,ppev.ATTRIBUTE2
6542 ,ppev.ATTRIBUTE3
6543 ,ppev.ATTRIBUTE4
6544 ,ppev.ATTRIBUTE5
6545 ,ppev.ATTRIBUTE6
6546 ,ppev.ATTRIBUTE7
6547 ,ppev.ATTRIBUTE8
6548 ,ppev.ATTRIBUTE9
6549 ,ppev.ATTRIBUTE10
6550 ,ppev.ATTRIBUTE11
6551 ,ppev.ATTRIBUTE12
6552 ,ppev.ATTRIBUTE13
6553 ,ppev.ATTRIBUTE14
6554 ,ppev.TASK_UNPUB_VER_STATUS_CODE
6555 ,ppev.FINANCIAL_TASK_FLAG
6556 ,p_dest_project_id
6557 ,'PA_PROJECTS'
6558 FROM pa_proj_element_versions ppev
6559 WHERE ppev.project_id = p_src_project_id
6560 AND ppev.element_version_id = l_src_fin_version_id ;
6561
6562 OPEN cur_get_wp_attr;
6563 FETCH cur_get_wp_attr INTO l_versioning_enabled;
6564 CLOSE cur_get_wp_attr;
6565
6566 --IF split and financial enabled THEN
6567 IF 'N' = p_shared THEN
6568 IF p_dest_template_flag = 'Y' THEN
6569 dest_latest_eff_pub_flag := 'N';
6570 dest_current_flag := 'N';
6571 ELSE
6572 dest_latest_eff_pub_flag := 'Y';
6573 dest_current_flag := 'S';
6574 END IF;
6575 ELSE
6576 --IF shared AND no wp ver is selected AND fin tasks flag is checked
6577 --IF creating a project AND versioning is disabled THEN
6578 IF 'N' = p_dest_template_flag AND 'N' = l_versioning_enabled THEN
6579 dest_latest_eff_pub_flag := 'Y';
6580 dest_current_flag := 'Y';
6581 ELSE
6582 --IF creating a template OR creating a project with versioning enabled
6583 dest_latest_eff_pub_flag := 'N';
6584 dest_current_flag := 'N';
6585 END IF;
6586 END IF;
6587
6588 IF l_debug_mode = 'Y' THEN
6589 Pa_Debug.WRITE(G_PKG_NAME,'dest_latest_eff_pub_flag : '||dest_latest_eff_pub_flag, l_debug_level3);
6590 Pa_Debug.WRITE(G_PKG_NAME,'dest_current_flag : '||dest_current_flag, l_debug_level3);
6591 END IF;
6592
6593 --Copy entry into pa_proj_elem_ver_structure for financial version in the source project
6594 INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
6595 PEV_STRUCTURE_ID
6596 ,ELEMENT_VERSION_ID
6597 ,VERSION_NUMBER
6598 ,NAME
6599 ,PROJECT_ID
6600 ,PROJ_ELEMENT_ID
6601 ,DESCRIPTION
6602 ,EFFECTIVE_DATE
6603 ,PUBLISHED_DATE
6604 ,PUBLISHED_BY_PERSON_ID
6605 ,CURRENT_BASELINE_DATE
6606 ,CURRENT_FLAG
6607 ,CURRENT_BASELINE_PERSON_ID
6608 ,ORIGINAL_BASELINE_DATE
6609 ,ORIGINAL_FLAG
6610 ,ORIGINAL_BASELINE_PERSON_ID
6611 ,LOCK_STATUS_CODE
6612 ,LOCKED_BY_PERSON_ID
6613 ,LOCKED_DATE
6614 ,STATUS_CODE
6615 ,WF_STATUS_CODE
6616 ,LATEST_EFF_PUBLISHED_FLAG
6617 ,RECORD_VERSION_NUMBER
6618 ,WBS_RECORD_VERSION_NUMBER
6619 ,CREATION_DATE
6620 ,CREATED_BY
6621 ,LAST_UPDATE_DATE
6622 ,LAST_UPDATED_BY
6623 ,LAST_UPDATE_LOGIN
6624 ,change_reason_code
6625 ,PROCESS_UPDATE_WBS_FLAG
6626 ,current_working_flag
6627 ,source_object_id
6628 ,source_object_type
6629 )
6630 SELECT
6631 pa_proj_elem_ver_structure_s.nextval
6632 ,ppev.element_version_id
6633 ,ppevs.version_number
6634 ,ppevs.name
6635 ,p_dest_project_id
6636 ,p_dest_fn_structure_id --This would be WP/FIN structure id in shared case and FIN structure id in split case
6637 ,ppevs.DESCRIPTION
6638 ,ppevs.EFFECTIVE_DATE
6639 ,decode(dest_latest_eff_pub_flag,'Y',sysdate,to_date(null) ) --PUBLISHED_DATE
6640 ,decode(dest_latest_eff_pub_flag,'Y',p_publish_person_id,null ) --PUBLISHED_BY_PERSON_ID
6641 ,decode(dest_current_flag,'S',ppevs.current_baseline_date,
6642 decode(dest_current_flag,'Y',sysdate,to_date(null) ) ) --CURRENT_BASELINE_DATE
6643 ,decode(dest_current_flag,'S',ppevs.current_flag,dest_current_flag) --CURRENT_FLAG
6644 ,decode(dest_current_flag,'S',ppevs.current_baseline_person_id,
6645 decode(dest_current_flag,'Y',p_publish_person_id,null) ) --CURRENT_BASELINE_PERSON_ID
6646 ,ppevs.original_baseline_date --ORIGINAL_BASELINE_DATE
6647 ,ppevs.original_flag --ORIGINAL_FLAG
6648 ,ppevs.original_baseline_person_id --ORIGINAL_BASELINE_PERSON_ID
6649 ,'UNLOCKED'
6650 ,null
6651 ,null
6652 ,decode(dest_latest_eff_pub_flag,'Y','STRUCTURE_PUBLISHED','STRUCTURE_WORKING') --STATUS_CODE
6653 ,ppevs.WF_STATUS_CODE
6654 ,dest_latest_eff_pub_flag --LATEST_EFF_PUBLISHED_FLAG
6655 ,ppevs.RECORD_VERSION_NUMBER
6656 ,ppevs.WBS_RECORD_VERSION_NUMBER
6657 ,SYSDATE
6658 ,l_user_id
6659 ,SYSDATE
6660 ,l_user_id
6661 ,l_login_id
6662 ,ppevs.change_reason_code
6663 ,ppevs.process_update_wbs_flag
6664 ,decode(p_shared,'N',ppevs.current_working_flag,'Y') --CURRENT_WROKING_FLAG
6665 --If SPLIT and fin enabled case, copy cw from source, else populate it as Y
6666 ,p_dest_project_id
6667 ,'PA_PROJECTS'
6668 FROM pa_proj_elem_ver_structure ppevs,
6669 pa_proj_element_versions ppev
6670 WHERE ppevs.project_id = p_src_project_id
6671 AND ppevs.element_version_id = l_src_fin_version_id
6672 AND ppev.attribute15 = ppevs.element_version_id
6673 AND ppev.project_id = p_dest_project_id ;
6674
6675 IF (p_commit = FND_API.G_TRUE) THEN
6676 COMMIT;
6677 END IF;
6678
6679 EXCEPTION
6680
6681 WHEN Invalid_Arg_Exc_WP THEN
6682 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
6683 x_msg_count := 1;
6684 x_msg_data := ' PA_PROJ_TASK_STRUC_PUB : copy_src_financial_version : NULL parameters passed';
6685
6686 IF p_commit = FND_API.G_TRUE THEN
6687 ROLLBACK TO copy_src_fin_ver;
6688 END IF;
6689
6690 Fnd_Msg_Pub.add_exc_msg
6691 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
6692 , p_procedure_name => 'copy_src_financial_version'
6693 , p_error_text => x_msg_data);
6694
6695 IF l_debug_mode = 'Y' THEN
6696 Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
6697 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
6698 l_debug_level5);
6699 Pa_Debug.reset_curr_function;
6700 END IF;
6701 RAISE;
6702
6703 WHEN OTHERS THEN
6704 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
6705 x_msg_count := 1;
6706 x_msg_data := SQLERRM;
6707
6708 IF p_commit = FND_API.G_TRUE THEN
6709 ROLLBACK TO copy_src_fin_ver;
6710 END IF;
6711
6712 Fnd_Msg_Pub.add_exc_msg
6713 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
6714 , p_procedure_name => 'copy_src_financial_version'
6715 , p_error_text => x_msg_data);
6716
6717 IF l_debug_mode = 'Y' THEN
6718 Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
6719 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
6720 l_debug_level5);
6721 Pa_Debug.reset_curr_function;
6722 END IF;
6723 RAISE;
6724
6725 END copy_src_financial_version;
6726
6727
6728
6729
6730
6731 -- Procedure : copy_src_financial_ver_tasks
6732 -- Type : PRIVATE
6733 -- Purpose : Contains logic for copying the tasks belonging to the financial version
6734 -- from the source to the destination project
6735 -- Note :
6736 -- Assumptions : All FLAGS and WORKPLAN record(s) have been populated in the global temporary table
6737 -- Parameters Type Required Description and Purpose
6738 -- --------------------------- ------ -------- --------------------------------------------------------
6739 -- p_src_project_id NUMBER Y The source project id
6740 -- p_dest_project_id NUMBER Y The destination project id
6741 -- p_dest_fn_structure_id NUMBER Y The destination project's financial structure id
6742 -- p_shared VARCHAR2 Y Whether source/destination project is shared or not
6743 -- p_copy_ppevSchedules_flag NUMBER Y Whether pa_proj_elem_ver_schedule entry from the source project
6744 -- should be copied into the destination project or not
6745 -- p_target_start_date DATE Y The start date of the destination project
6746 -- p_target_finish_date DATE Y The finish date of the destination project
6747 -- p_calendar_id NUMBER Y The calendar id
6748 PROCEDURE copy_src_financial_ver_tasks( p_api_version IN NUMBER := 1.0
6749 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
6750 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
6751 ,p_validate_only IN VARCHAR2 := FND_API.G_FALSE
6752 ,p_validation_level IN VARCHAR2 := FND_API.G_VALID_LEVEL_FULL
6753 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
6754 ,p_debug_mode IN VARCHAR2 := 'N'
6755 ,p_src_project_id IN NUMBER
6756 ,p_dest_project_id IN NUMBER
6757 ,p_dest_fn_structure_id IN NUMBER
6758 ,p_shared IN VARCHAR2
6759 ,p_copy_ppevSchedules_flag IN VARCHAR2
6760 ,p_target_start_date IN DATE
6761 ,p_target_finish_date IN DATE
6762 ,p_calendar_id IN NUMBER
6763 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6764 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6765 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6766 ) IS
6767 --This cursor retrieves the LATEST PUBLISHED WP version from the source project
6768 CURSOR cur_get_src_fin_version_id IS
6769 SELECT ppev.element_version_id
6770 FROM pa_proj_element_versions ppev,
6771 pa_proj_elem_ver_structure ppevs
6772 WHERE ppev.project_id = p_src_project_id
6773 AND ppev.object_type = 'PA_STRUCTURES'
6774 AND ppev.element_version_id = ppevs.element_version_id
6775 AND ppevs.project_id = p_src_project_id
6776 AND ppevs.latest_eff_published_flag = 'Y';
6777
6778 --This cursor retrieves the CURRENT WORKING WP version from the source project
6779 CURSOR cur_get_src_fin_version_id2 IS
6780 SELECT ppev.element_version_id
6781 FROM pa_proj_element_versions ppev,
6782 pa_proj_elem_ver_structure ppevs
6783 WHERE ppev.project_id = p_src_project_id
6784 AND ppev.object_type = 'PA_STRUCTURES'
6785 AND ppev.element_version_id = ppevs.element_version_id
6786 AND ppevs.project_id = p_src_project_id
6787 AND ppevs.current_working_flag = 'Y';
6788
6789 --This cursor retrieves the version for the financial structure form the source project
6790 CURSOR cur_get_split_fin_ver IS
6791 SELECT ppev.element_version_id
6792 FROM pa_proj_element_versions ppev,
6793 pa_proj_structure_types ppst,
6794 pa_structure_types pst
6795 WHERE ppev.project_id = p_src_project_id
6796 AND ppev.object_type = 'PA_STRUCTURES'
6797 AND ppev.proj_element_id = ppst.proj_element_id
6798 AND ppst.structure_type_id = pst.structure_type_id
6799 AND pst.structure_type = 'FINANCIAL' ;
6800
6801 --This cursor gets the schedule start date from the source project
6802 CURSOR cur_get_src_sch_st_date(c_project_id NUMBER, c_struc_ver_id NUMBER) IS
6803 SELECT scheduled_start_date
6804 FROM pa_proj_elem_ver_schedule
6805 WHERE project_id = c_project_id
6806 AND element_version_id = c_struc_ver_id;
6807
6808 --Bug 3387963 - Cursor to get destination and source project's organization id
6809 CURSOR cur_get_carrying_out_org IS
6810 SELECT old.carrying_out_organization_id,
6811 new.carrying_out_organization_id
6812 FROM pa_projects_all old,
6813 pa_projects_all new
6814 WHERE old.project_id = p_src_project_id
6815 AND new.project_id = p_dest_project_id;
6816
6817 l_old_proj_org_id NUMBER;
6818 l_new_proj_org_id NUMBER;
6819 -- End of code added for bug 3387963
6820
6821 /* Code added for 6211012*/
6822
6823 TYPE typ_obj_rela_id is TABLE OF pa_object_relationships.object_relationship_id%TYPE
6824 INDEX BY BINARY_INTEGER;
6825 l_obj_rel_id typ_obj_rela_id;
6826
6827 TYPE typ_obj_typ_from is TABLE OF pa_object_relationships.object_type_from%TYPE
6828 INDEX BY BINARY_INTEGER;
6829 l_obj_typ_from typ_obj_typ_from;
6830
6831 TYPE typ_obj_from_id is TABLE OF pa_object_relationships.object_id_from1%TYPE
6832 INDEX BY BINARY_INTEGER;
6833 l_obj_from_id typ_obj_from_id;
6834
6835 TYPE typ_obj_typ_to is TABLE OF pa_object_relationships.object_type_to%TYPE
6836 INDEX BY BINARY_INTEGER;
6837 l_obj_typ_to typ_obj_typ_to;
6838
6839 TYPE typ_obj_to_id is TABLE OF pa_object_relationships.object_id_to1%TYPE
6840 INDEX BY BINARY_INTEGER;
6841 l_obj_to_id typ_obj_to_id;
6842
6843 TYPE typ_rel_typ is TABLE OF pa_object_relationships.relationship_type%TYPE
6844 INDEX BY BINARY_INTEGER;
6845 l_rel_typ typ_rel_typ;
6846
6847 TYPE typ_rel_subtyp is TABLE OF pa_object_relationships.relationship_subtype%TYPE
6848 INDEX BY BINARY_INTEGER;
6849 l_rel_subtyp typ_rel_subtyp;
6850
6851 TYPE typ_rec_ver_num is TABLE OF pa_object_relationships.Record_Version_Number%TYPE
6852 INDEX BY BINARY_INTEGER;
6853 l_rec_ver_num typ_rec_ver_num;
6854
6855 TYPE typ_wt_percent is TABLE OF pa_object_relationships.weighting_percentage%TYPE
6856 INDEX BY BINARY_INTEGER;
6857 l_wt_percent typ_wt_percent;
6858
6859
6860 CURSOR cur_pa_obj_rela_1(c_src_fin_version_id NUMBER,
6861 c_dest_project_id NUMBER
6862 ) IS
6863 SELECT
6864 pa_object_relationships_s.nextval,
6865 pobj.object_type_from,
6866 ppev1.element_version_id,
6867 pobj.object_type_to,
6868 ppev2.element_version_id,
6869 pobj.relationship_type,
6870 pobj.relationship_subtype,
6871 pobj.Record_Version_Number,
6872 pobj.weighting_percentage
6873 FROM ( SELECT object_type_from,
6874 object_id_from1,
6875 object_type_to,
6876 object_id_to1,
6877 relationship_type,
6878 relationship_subtype,
6879 Record_Version_Number,
6880 weighting_percentage
6881 FROM pa_object_relationships
6882 START WITH object_id_from1 = c_src_fin_version_id
6883 AND RELATIONSHIP_TYPE = 'S'
6884 CONNECT BY object_id_from1 = PRIOR object_id_to1
6885 AND RELATIONSHIP_TYPE = 'S' ) pobj,
6886 pa_proj_element_versions ppev1,
6887 pa_proj_element_versions ppev2
6888 WHERE ppev1.attribute15 = pobj.object_id_from1
6889 AND ppev2.attribute15 = pobj.object_id_to1
6890 AND ppev1.project_id = c_dest_project_id
6891 AND ppev2.project_id = c_dest_project_id ;
6892
6893 /*End of Code added for 6211012*/
6894
6895 l_debug_mode VARCHAR2(1);
6896 l_debug_level2 CONSTANT NUMBER := 2;
6897 l_debug_level3 CONSTANT NUMBER := 3;
6898 l_debug_level4 CONSTANT NUMBER := 4;
6899 l_debug_level5 CONSTANT NUMBER := 5;
6900
6901 l_src_fin_version_id NUMBER(15);
6902 l_user_id NUMBER := FND_GLOBAL.USER_ID;
6903 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
6904 l_delta NUMBER;
6905 l_src_sch_st_date DATE;
6906
6907 BEGIN
6908
6909
6910 x_msg_count := 0;
6911 x_return_status := FND_API.G_RET_STS_SUCCESS;
6912 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
6913
6914 IF (p_commit = FND_API.G_TRUE) THEN
6915 SAVEPOINT copy_src_fin_ver_tasks;
6916 END IF;
6917
6918 IF p_init_msg_list = FND_API.G_TRUE THEN
6919 FND_MSG_PUB.initialize;
6920 END IF;
6921
6922 IF l_debug_mode = 'Y' THEN
6923 PA_DEBUG.set_curr_function( p_function => 'copy_src_financial_ver_tasks',
6924 p_debug_mode => l_debug_mode );
6925 END IF;
6926
6927 IF l_debug_mode = 'Y' THEN
6928 Pa_Debug.g_err_stage:= 'Printing Input parameters';
6929 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
6930 l_debug_level3);
6931
6932 Pa_Debug.WRITE(G_PKG_NAME,'p_src_project_id'||':'||p_src_project_id,
6933 l_debug_level3);
6934
6935 Pa_Debug.WRITE(G_PKG_NAME,'p_dest_project_id'||':'||p_dest_project_id,
6936 l_debug_level3);
6937
6938 Pa_Debug.WRITE(G_PKG_NAME,'p_dest_fn_structure_id'||':'||p_dest_fn_structure_id,
6939 l_debug_level3);
6940
6941 Pa_Debug.WRITE(G_PKG_NAME,'p_shared'||':'||p_shared,
6942 l_debug_level3);
6943
6944 Pa_Debug.WRITE(G_PKG_NAME,'p_copy_ppevSchedules_flag'||':'||p_copy_ppevSchedules_flag,
6945 l_debug_level3);
6946
6947 Pa_Debug.WRITE(G_PKG_NAME,'p_target_start_date'||':'||p_target_start_date,
6948 l_debug_level3);
6949
6950 Pa_Debug.WRITE(G_PKG_NAME,'p_target_finish_date'||':'||p_target_finish_date,
6951 l_debug_level3);
6952
6953 Pa_Debug.WRITE(G_PKG_NAME,'p_calendar_id'||':'||p_calendar_id,
6954 l_debug_level3);
6955 END IF;
6956
6957 IF l_debug_mode = 'Y' THEN
6958 Pa_Debug.g_err_stage:= 'Validating Input parameters';
6959 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
6960 l_debug_level3);
6961 END IF;
6962
6963 IF ( ( p_src_project_id IS NULL OR p_src_project_id = FND_API.G_MISS_NUM ) AND
6964 ( p_dest_project_id IS NULL OR p_dest_project_id = FND_API.G_MISS_NUM ) AND
6965 ( p_dest_fn_structure_id IS NULL OR p_dest_fn_structure_id = FND_API.G_MISS_NUM ) AND
6966 ( p_shared IS NULL OR p_shared = FND_API.G_MISS_CHAR ) AND
6967 ( p_copy_ppevSchedules_flag IS NULL OR p_copy_ppevSchedules_flag = FND_API.G_MISS_NUM ) AND
6968 ( p_calendar_id IS NULL OR p_calendar_id = FND_API.G_MISS_NUM )
6969 )
6970 THEN
6971 IF l_debug_mode = 'Y' THEN
6972 Pa_Debug.g_err_stage:= 'PA_PROJ_TASK_STRUC_PUB : copy_src_financial_ver_tasks : p_src_project_id,
6973 p_dest_project_id, p_dest_fn_structure_id, p_shared, p_copy_ppevSchedules_flag, p_calendar_id are NULL';
6974 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
6975 l_debug_level3);
6976 END IF;
6977 RAISE Invalid_Arg_Exc_WP;
6978 END IF;
6979
6980 IF 'Y' = p_shared THEN
6981 --Fetch the WP latest published, else the current working in the source project
6982 OPEN cur_get_src_fin_version_id;
6983 FETCH cur_get_src_fin_version_id INTO l_src_fin_version_id;
6984 IF cur_get_src_fin_version_id%NOTFOUND THEN
6985 OPEN cur_get_src_fin_version_id2;
6986 FETCH cur_get_src_fin_version_id2 INTO l_src_fin_version_id;
6987 CLOSE cur_get_src_fin_version_id2;
6988 END IF;
6989 CLOSE cur_get_src_fin_version_id;
6990 ELSE
6991 --Fetch the financial version from the source project
6992 OPEN cur_get_split_fin_ver;
6993 FETCH cur_get_split_fin_ver INTO l_src_fin_version_id;
6994 CLOSE cur_get_split_fin_ver;
6995 END IF;
6996
6997 IF l_debug_mode = 'Y' THEN
6998 Pa_Debug.WRITE(G_PKG_NAME, 'Source financial version id : '||l_src_fin_version_id, l_debug_level3);
6999 END IF;
7000
7001 --Bug 3387963 - Added to get the cursor values
7002 OPEN cur_get_carrying_out_org;
7003 FETCH cur_get_carrying_out_org INTO l_old_proj_org_id, l_new_proj_org_id;
7004 CLOSE cur_get_carrying_out_org;
7005
7006 --Copy tasks belonging to the single financial version in the source project
7007 INSERT INTO pa_proj_elements(
7008 PROJ_ELEMENT_ID
7009 ,PROJECT_ID
7010 ,OBJECT_TYPE
7011 ,ELEMENT_NUMBER
7012 ,NAME
7013 ,DESCRIPTION
7014 ,STATUS_CODE
7015 ,WF_STATUS_CODE
7016 ,PM_SOURCE_CODE
7017 ,PM_SOURCE_REFERENCE
7018 ,CLOSED_DATE
7019 ,LOCATION_ID
7020 ,MANAGER_PERSON_ID
7021 ,CARRYING_OUT_ORGANIZATION_ID
7022 ,TYPE_ID
7023 ,PRIORITY_CODE
7024 ,CREATION_DATE
7025 ,CREATED_BY
7026 ,LAST_UPDATE_DATE
7027 ,LAST_UPDATED_BY
7028 ,LAST_UPDATE_LOGIN
7029 ,RECORD_VERSION_NUMBER
7030 ,REQUEST_ID
7031 ,PROGRAM_APPLICATION_ID
7032 ,PROGRAM_ID
7033 ,PROGRAM_UPDATE_DATE
7034 ,LINK_TASK_FLAG
7035 ,BASELINE_START_DATE
7036 ,BASELINE_FINISH_DATE
7037 ,progress_outdated_flag
7038 ,ATTRIBUTE_CATEGORY
7039 ,ATTRIBUTE1
7040 ,ATTRIBUTE2
7041 ,ATTRIBUTE3
7042 ,ATTRIBUTE4
7043 ,ATTRIBUTE5
7044 ,ATTRIBUTE6
7045 ,ATTRIBUTE7
7046 ,ATTRIBUTE8
7047 ,ATTRIBUTE9
7048 ,ATTRIBUTE10
7049 ,ATTRIBUTE11
7050 ,ATTRIBUTE12
7051 ,ATTRIBUTE13
7052 ,ATTRIBUTE14
7053 ,ATTRIBUTE15
7054 ,parent_structure_id
7055 ,TYPE_CODE
7056 ,INC_PROJ_PROGRESS_FLAG
7057 ,WQ_ITEM_CODE
7058 ,WQ_UOM_CODE
7059 ,WQ_ACTUAL_ENTRY_CODE
7060 ,TASK_PROGRESS_ENTRY_PAGE_ID
7061 ,BASELINE_DURATION
7062 ,PHASE_CODE
7063 ,PHASE_VERSION_ID
7064 ,source_object_id
7065 ,source_object_type
7066 )
7067 SELECT
7068 pt.task_id
7069 ,p_dest_project_id
7070 ,ppe.object_type
7071 ,ppe.element_number
7072 ,ppe.name
7073 ,ppe.DESCRIPTION
7074 ,INITIAL_STATUS_CODE
7075 ,ppe.WF_STATUS_CODE
7076 ,ppe.PM_SOURCE_CODE
7077 ,ppe.PM_SOURCE_REFERENCE
7078 ,ppe.CLOSED_DATE
7079 ,ppe.LOCATION_ID
7080 ,ppe.MANAGER_PERSON_ID
7081 ,decode(ppe.CARRYING_OUT_ORGANIZATION_ID,l_old_proj_org_id, l_new_proj_org_id,
7082 ppe.CARRYING_OUT_ORGANIZATION_ID) -- Bug 3387963
7083 ,ppe.TYPE_ID
7084 ,ppe.PRIORITY_CODE
7085 ,SYSDATE
7086 ,l_user_id
7087 ,SYSDATE
7088 ,l_user_id
7089 ,l_login_id
7090 ,ppe.RECORD_VERSION_NUMBER
7091 ,ppe.REQUEST_ID
7092 ,ppe.PROGRAM_APPLICATION_ID
7093 ,ppe.PROGRAM_ID
7094 ,ppe.PROGRAM_UPDATE_DATE
7095 ,ppe.LINK_TASK_FLAG
7096 ,ppe.BASELINE_START_DATE
7097 ,ppe.BASELINE_FINISH_DATE
7098 ,'N' --,ppe.progress_outdated_flag
7099 ,ppe.ATTRIBUTE_CATEGORY
7100 ,ppe.ATTRIBUTE1
7101 ,ppe.ATTRIBUTE2
7102 ,ppe.ATTRIBUTE3
7103 ,ppe.ATTRIBUTE4
7104 ,ppe.ATTRIBUTE5
7105 ,ppe.ATTRIBUTE6
7106 ,ppe.ATTRIBUTE7
7107 ,ppe.ATTRIBUTE8
7108 ,ppe.ATTRIBUTE9
7109 ,ppe.ATTRIBUTE10
7110 ,ppe.ATTRIBUTE11
7111 ,ppe.ATTRIBUTE12
7112 ,ppe.ATTRIBUTE13
7113 ,ppe.ATTRIBUTE14
7114 ,ppe.proj_element_id --attribute 15 is used to store old ids.
7115 ,p_dest_fn_structure_id --This would be WP/FIN structure id in shared case. FIN structure id in split case
7116 ,ppe.TYPE_CODE
7117 ,ppe.INC_PROJ_PROGRESS_FLAG
7118 ,ppe.WQ_ITEM_CODE
7119 ,ppe.WQ_UOM_CODE
7120 ,ppe.WQ_ACTUAL_ENTRY_CODE
7121 ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
7122 ,ppe.BASELINE_DURATION
7123 ,ppe.PHASE_CODE
7124 ,ppe.PHASE_VERSION_ID
7125 ,p_dest_project_id
7126 ,'PA_PROJECTS'
7127 FROM pa_task_types ptt,
7128 pa_proj_elements ppe,
7129 pa_proj_element_versions ppev,
7130 pa_tasks pt
7131 WHERE pt.project_id = p_dest_project_id
7132 AND ppe.project_id = p_src_project_id --Added by Sunkalya For the fix of Bug#4600825. This change is done for R12
7133 --Merging of code fix done thru Bug#4589176(115.315) for performance issues.
7134 AND pt.task_number = substrb(rtrim(ppe.element_number),1,25) -- Substrb added for Bug 5152448
7135 AND ptt.object_type = 'PA_TASKS'
7136 AND ppe.type_id = ptt.task_type_id
7137 AND ppe.object_type = 'PA_TASKS'
7138 AND nvl(ppe.link_task_flag,'N') <> 'Y' -- 4348868
7139 AND ppe.parent_structure_id = ppev.proj_element_id
7140 AND ppev.element_version_id = l_src_fin_version_id ;
7141
7142 --Copy tasks versions belonging to the single financial version in the source project
7143 INSERT INTO pa_proj_element_versions(
7144 ELEMENT_VERSION_ID
7145 ,PROJ_ELEMENT_ID
7146 ,OBJECT_TYPE
7147 ,PROJECT_ID
7148 ,PARENT_STRUCTURE_VERSION_ID
7149 ,DISPLAY_SEQUENCE
7150 ,WBS_LEVEL
7151 ,WBS_NUMBER
7152 ,CREATION_DATE
7153 ,CREATED_BY
7154 ,LAST_UPDATE_DATE
7155 ,LAST_UPDATED_BY
7156 ,LAST_UPDATE_LOGIN
7157 ,RECORD_VERSION_NUMBER
7158 ,attribute15 --this column is used to store task ver id of the source project's task versions to be used to created relationships.
7159 ,ATTRIBUTE_CATEGORY
7160 ,ATTRIBUTE1
7161 ,ATTRIBUTE2
7162 ,ATTRIBUTE3
7163 ,ATTRIBUTE4
7164 ,ATTRIBUTE5
7165 ,ATTRIBUTE6
7166 ,ATTRIBUTE7
7167 ,ATTRIBUTE8
7168 ,ATTRIBUTE9
7169 ,ATTRIBUTE10
7170 ,ATTRIBUTE11
7171 ,ATTRIBUTE12
7172 ,ATTRIBUTE13
7173 ,ATTRIBUTE14
7174 ,TASK_UNPUB_VER_STATUS_CODE
7175 ,FINANCIAL_TASK_FLAG
7176 ,source_object_id
7177 ,source_object_type
7178 )
7179 SELECT
7180 pa_proj_element_versions_s.nextval
7181 ,ppe.proj_element_id
7182 ,ppev.object_type
7183 ,p_dest_project_id
7184 ,ppev2.element_version_id
7185 ,ppev.DISPLAY_SEQUENCE
7186 ,ppev.WBS_LEVEL
7187 ,ppev.WBS_NUMBER
7188 ,SYSDATE ------CREATION_DATE
7189 ,l_user_id ------CREATED_BY
7190 ,SYSDATE ------LAST_UPDATE_DATE
7191 ,l_user_id ------LAST_UPDATED_BY
7192 ,l_login_id ------LAST_UPDATE_LOGIN
7193 ,ppev.RECORD_VERSION_NUMBER ------RECORD_VERSION_NUMBER
7194 ,ppev.element_version_id -- to help create relationships from source
7195 ,ppev.ATTRIBUTE_CATEGORY
7196 ,ppev.ATTRIBUTE1
7197 ,ppev.ATTRIBUTE2
7198 ,ppev.ATTRIBUTE3
7199 ,ppev.ATTRIBUTE4
7200 ,ppev.ATTRIBUTE5
7201 ,ppev.ATTRIBUTE6
7202 ,ppev.ATTRIBUTE7
7203 ,ppev.ATTRIBUTE8
7204 ,ppev.ATTRIBUTE9
7205 ,ppev.ATTRIBUTE10
7206 ,ppev.ATTRIBUTE11
7207 ,ppev.ATTRIBUTE12
7208 ,ppev.ATTRIBUTE13
7209 ,ppev.ATTRIBUTE14
7210 ,decode( ppevs.status_code, 'STRUCTURE_PUBLISHED', 'PUBLISHED', 'WORKING' )
7211 ,ppev.FINANCIAL_TASK_FLAG
7212 ,p_dest_project_id
7213 ,'PA_PROJECTS'
7214 FROM pa_proj_element_versions ppev,
7215 pa_proj_elements ppe,
7216 pa_proj_element_versions ppev2,
7217 pa_proj_elem_ver_structure ppevs
7218 WHERE ppev.project_id = p_src_project_id
7219 AND ppev.object_type = 'PA_TASKS'
7220 AND ppev.parent_structure_version_id = l_src_fin_version_id
7221 AND ppev.proj_element_id = ppe.attribute15
7222 AND ppe.project_id = p_dest_project_id
7223 AND ppe.object_type = 'PA_TASKS'
7224 AND ppev.parent_structure_version_id = ppev2.attribute15
7225 AND ppev2.project_id = p_dest_project_id
7226 AND ppev2.object_type = 'PA_STRUCTURES'
7227 AND ppevs.project_id = p_dest_project_id
7228 AND ppevs.element_version_id = ppev2.element_version_id ;
7229
7230 IF l_debug_mode = 'Y' THEN
7231 Pa_Debug.WRITE(G_PKG_NAME, 'Creating object relatiionships for financial tasks', l_debug_level3);
7232 END IF;
7233
7234 --Copy relationships for structure and tasks into destination project
7235 /* Start of addition for bug 6211012 */
7236
7237 l_obj_rel_id.delete;
7238 l_obj_typ_from.delete;
7239 l_obj_from_id.delete;
7240 l_obj_typ_to.delete;
7241 l_obj_to_id.delete;
7242 l_rel_typ.delete;
7243 l_rel_subtyp.delete;
7244 l_rec_ver_num.delete;
7245 l_wt_percent.delete;
7246
7247 OPEN cur_pa_obj_rela_1(l_src_fin_version_id,p_dest_project_id);
7248
7249 LOOP
7250
7251 FETCH cur_pa_obj_rela_1
7252 BULK COLLECT INTO
7253 l_obj_rel_id,
7254 l_obj_typ_from,
7255 l_obj_from_id,
7256 l_obj_typ_to,
7257 l_obj_to_id,
7258 l_rel_typ,
7259 l_rel_subtyp,
7260 l_rec_ver_num,
7261 l_wt_percent
7262 LIMIT 1000;
7263
7264 IF l_obj_rel_id.COUNT >0 THEN
7265
7266 FORALL i IN l_obj_rel_id.FIRST..l_obj_rel_id.LAST
7267 insert into PA_OBJECT_RELATIONSHIPS (
7268 object_relationship_id,
7269 object_type_from,
7270 object_id_from1,
7271 object_type_to,
7272 object_id_to1,
7273 relationship_type,
7274 relationship_subtype,
7275 Record_Version_Number,
7276 CREATED_BY,
7277 CREATION_DATE,
7278 LAST_UPDATED_BY,
7279 LAST_UPDATE_DATE,
7280 LAST_UPDATE_LOGIN,
7281 weighting_percentage
7282 )
7283 values(
7284 l_obj_rel_id(i),
7285 l_obj_typ_from(i),
7286 l_obj_from_id(i),
7287 l_obj_typ_to(i),
7288 l_obj_to_id(i),
7289 l_rel_typ(i),
7290 l_rel_subtyp(i),
7291 l_rec_ver_num(i),
7292 l_user_id,
7293 SYSDATE,
7294 l_user_id,
7295 SYSDATE,
7296 l_login_id,
7297 l_wt_percent(i)
7298 );
7299
7300 END IF;
7301
7302 EXIT WHEN l_obj_rel_id.COUNT < 1000 ;
7303 END LOOP;
7304
7305 l_obj_rel_id.delete;
7306 l_obj_typ_from.delete;
7307 l_obj_from_id.delete;
7308 l_obj_typ_to.delete;
7309 l_obj_to_id.delete;
7310 l_rel_typ.delete;
7311 l_rel_subtyp.delete;
7312 l_rec_ver_num.delete;
7313 l_wt_percent.delete;
7314
7315 CLOSE cur_pa_obj_rela_1;
7316
7317 /*
7318
7319 INSERT INTO PA_OBJECT_RELATIONSHIPS (
7320 object_relationship_id
7321 ,object_type_from
7322 ,object_id_from1
7323 ,object_type_to
7324 ,object_id_to1
7325 ,relationship_type
7326 ,relationship_subtype
7327 ,Record_Version_Number
7328 ,CREATED_BY
7329 ,CREATION_DATE
7330 ,LAST_UPDATED_BY
7331 ,LAST_UPDATE_DATE
7332 ,LAST_UPDATE_LOGIN
7333 ,weighting_percentage
7334 )
7335 SELECT
7336 pa_object_relationships_s.nextval
7337 ,pobj.object_type_from
7338 ,ppev1.element_version_id
7339 ,pobj.object_type_to
7340 ,ppev2.element_version_id
7341 ,pobj.relationship_type
7342 ,pobj.relationship_subtype
7343 ,pobj.Record_Version_Number
7344 ,l_user_id
7345 ,SYSDATE
7346 ,l_user_id
7347 ,SYSDATE
7348 ,l_login_id
7349 ,pobj.weighting_percentage
7350 FROM
7351 ( SELECT object_type_from,
7352 object_id_from1,
7353 object_type_to,
7354 object_id_to1,
7355 relationship_type,
7356 relationship_subtype,
7357 Record_Version_Number,
7358 weighting_percentage
7359 FROM pa_object_relationships
7360 START WITH object_id_from1 = l_src_fin_version_id
7361 AND RELATIONSHIP_TYPE = 'S'
7362 CONNECT BY object_id_from1 = PRIOR object_id_to1
7363 AND RELATIONSHIP_TYPE = 'S' ) pobj,
7364 pa_proj_element_versions ppev1,
7365 pa_proj_element_versions ppev2
7366 WHERE ppev1.attribute15 = pobj.object_id_from1
7367 AND ppev2.attribute15 = pobj.object_id_to1
7368 AND ppev1.project_id = p_dest_project_id
7369 AND ppev2.project_id = p_dest_project_id ;
7370 */
7371 /* End of changes for bug 6211012 */
7372
7373 IF 'Y' = p_copy_ppevSchedules_flag THEN
7374
7375 --calculate delta before inserting schedule rows
7376 --select source structure version scheduled start date
7377 IF (p_target_start_date IS NULL) THEN
7378 l_delta := 0;
7379 ELSE
7380 OPEN cur_get_src_sch_st_date( p_src_project_id, l_src_fin_version_id );
7381 FETCH cur_get_src_sch_st_date INTO l_src_sch_st_date;
7382 CLOSE cur_get_src_sch_st_date;
7383 l_delta := p_target_start_date - l_src_sch_st_date;
7384 END IF;
7385
7386 --Copy entries into pa_proj_elem_ver_schedule
7387 INSERT INTO pa_proj_elem_ver_schedule(
7388 PEV_SCHEDULE_ID
7389 ,ELEMENT_VERSION_ID
7390 ,PROJECT_ID
7391 ,PROJ_ELEMENT_ID
7392 ,CREATION_DATE
7393 ,CREATED_BY
7394 ,LAST_UPDATE_DATE
7395 ,LAST_UPDATED_BY
7396 ,SCHEDULED_START_DATE
7397 ,SCHEDULED_FINISH_DATE
7398 ,OBLIGATION_START_DATE
7399 ,OBLIGATION_FINISH_DATE
7400 ,ACTUAL_START_DATE
7401 ,ACTUAL_FINISH_DATE
7402 ,ESTIMATED_START_DATE
7403 ,ESTIMATED_FINISH_DATE
7404 ,DURATION
7405 ,EARLY_START_DATE
7406 ,EARLY_FINISH_DATE
7407 ,LATE_START_DATE
7408 ,LATE_FINISH_DATE
7409 ,CALENDAR_ID
7410 ,MILESTONE_FLAG
7411 ,CRITICAL_FLAG
7412 ,RECORD_VERSION_NUMBER
7413 ,LAST_UPDATE_LOGIN
7414 ,WQ_PLANNED_QUANTITY
7415 ,PLANNED_EFFORT
7416 ,ACTUAL_DURATION
7417 ,ESTIMATED_DURATION
7418 ,ATTRIBUTE_CATEGORY
7419 ,ATTRIBUTE1
7420 ,ATTRIBUTE2
7421 ,ATTRIBUTE3
7422 ,ATTRIBUTE4
7423 ,ATTRIBUTE5
7424 ,ATTRIBUTE6
7425 ,ATTRIBUTE7
7426 ,ATTRIBUTE8
7427 ,ATTRIBUTE9
7428 ,ATTRIBUTE10
7429 ,ATTRIBUTE11
7430 ,ATTRIBUTE12
7431 ,ATTRIBUTE13
7432 ,ATTRIBUTE14
7433 ,ATTRIBUTE15
7434 ,source_object_id
7435 ,source_object_type
7436 )
7437 SELECT
7438 pa_proj_elem_ver_schedule_s.nextval
7439 ,ppev1.ELEMENT_VERSION_ID
7440 ,p_dest_project_id
7441 ,ppev1.PROJ_ELEMENT_ID
7442 ,SYSDATE
7443 ,l_user_id
7444 ,SYSDATE
7445 ,l_user_id
7446 ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date,
7447 p_target_finish_date,
7448 l_delta,
7449 ppevs.SCHEDULED_START_DATE,
7450 null )
7451 ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date,
7452 p_target_finish_date,
7453 l_delta,
7454 ppevs.SCHEDULED_START_DATE,
7455 SCHEDULED_FINISH_DATE )
7456 ,ppevs.OBLIGATION_START_DATE
7457 ,ppevs.OBLIGATION_FINISH_DATE
7458 ,null
7459 ,null
7460 ,null
7461 ,null
7462 ,ppevs.DURATION
7463 ,ppevs.EARLY_START_DATE
7464 ,ppevs.EARLY_FINISH_DATE
7465 ,ppevs.LATE_START_DATE
7466 ,ppevs.LATE_FINISH_DATE
7467 ,p_calendar_id
7468 ,ppevs.MILESTONE_FLAG
7469 ,ppevs.CRITICAL_FLAG
7470 ,ppevs.RECORD_VERSION_NUMBER
7471 ,l_login_id
7472 ,ppevs.WQ_PLANNED_QUANTITY
7473 ,ppevs.PLANNED_EFFORT
7474 ,ppevs.ACTUAL_DURATION
7475 ,ppevs.ESTIMATED_DURATION
7476 ,ppevs.ATTRIBUTE_CATEGORY
7477 ,ppevs.ATTRIBUTE1
7478 ,ppevs.ATTRIBUTE2
7479 ,ppevs.ATTRIBUTE3
7480 ,ppevs.ATTRIBUTE4
7481 ,ppevs.ATTRIBUTE5
7482 ,ppevs.ATTRIBUTE6
7483 ,ppevs.ATTRIBUTE7
7484 ,ppevs.ATTRIBUTE8
7485 ,ppevs.ATTRIBUTE9
7486 ,ppevs.ATTRIBUTE10
7487 ,ppevs.ATTRIBUTE11
7488 ,ppevs.ATTRIBUTE12
7489 ,ppevs.ATTRIBUTE13
7490 ,ppevs.ATTRIBUTE14
7491 ,ppevs.ATTRIBUTE15
7492 ,p_dest_project_id
7493 ,'PA_PROJECTS'
7494 FROM pa_proj_elem_ver_schedule ppevs,
7495 pa_proj_element_versions ppev1,
7496 pa_proj_element_versions ppev2
7497 WHERE ppev1.project_id = p_dest_project_id
7498 AND ppev1.attribute15 = ppevs.element_version_id
7499 AND ppevs.project_id = p_src_project_id
7500 AND ppev1.attribute15 = ppev2.element_version_id
7501 AND ppev2.project_id = p_src_project_id
7502 AND ppev2.parent_structure_version_id = l_src_fin_version_id ;
7503 END IF; --If p_copy_ppevSchedules_flag = 'Y'
7504
7505 IF (p_commit = FND_API.G_TRUE) THEN
7506 COMMIT;
7507 END IF;
7508
7509 IF l_debug_mode = 'Y' THEN
7510 Pa_Debug.WRITE(G_PKG_NAME, 'Exiting copy_src_financial_ver_tasks...', l_debug_level3);
7511 END IF;
7512 EXCEPTION
7513
7514 WHEN Invalid_Arg_Exc_WP THEN
7515 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
7516 x_msg_count := 1;
7517 x_msg_data := ' PA_PROJ_TASK_STRUC_PUB : copy_src_financial_ver_tasks : NULL parameters passed';
7518
7519 IF p_commit = FND_API.G_TRUE THEN
7520 ROLLBACK TO copy_src_fin_ver_tasks;
7521 END IF;
7522
7523 Fnd_Msg_Pub.add_exc_msg
7524 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
7525 , p_procedure_name => 'copy_src_financial_ver_tasks'
7526 , p_error_text => x_msg_data);
7527
7528 IF l_debug_mode = 'Y' THEN
7529 Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
7530 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
7531 l_debug_level5);
7532 Pa_Debug.reset_curr_function;
7533 END IF;
7534 RAISE;
7535
7536 WHEN OTHERS THEN
7537 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
7538 x_msg_count := 1;
7539 x_msg_data := SQLERRM;
7540
7541 IF p_commit = FND_API.G_TRUE THEN
7542 ROLLBACK TO copy_src_fin_ver_tasks;
7543 END IF;
7544
7545 Fnd_Msg_Pub.add_exc_msg
7546 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
7547 , p_procedure_name => 'copy_src_financial_ver_tasks'
7548 , p_error_text => x_msg_data);
7549
7550 IF l_debug_mode = 'Y' THEN
7551 Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
7552 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
7553 l_debug_level5);
7554 Pa_Debug.reset_curr_function;
7555 END IF;
7556 RAISE;
7557
7558 END copy_src_financial_ver_tasks;
7559
7560
7561
7562
7563 -- Procedure : copy_structures_tasks_bulk
7564 -- Type : PUBLIC
7565 -- Purpose : Contains logic for copying WP/FIN structures, versions and tasks alongwith
7566 -- intra and inter project dependencies, mapping, deliverables etc.
7567 -- All this is done only for the SELECTED or DEFAULTED versions that are present
7568 -- in the global temporary table PA_PROJECT_COPY_OPTIONS_TMP
7569 -- Note : **** THIS API HAS BEEN RE-WRITTEN FOR FPM ****
7570 -- Assumptions : All FLAGS and WORKPLAN record(s) have been populated in the global temporary table
7571 -- Parameters Type Required Description and Purpose
7572 -- --------------------------- ------ -------- --------------------------------------------------------
7573 -- p_src_project_id NUMBER Y The source project id
7574 -- p_dest_project_id NUMBER Y The destination project id
7575 -- p_delta NUMBER N
7576 -- p_dest_template_flag VARCHAR2 N Whether destination is a template or not
7577 -- p_dest_project_name VARCHAR2 Y The name of the destination project
7578 -- p_target_start_date DATE Y The start date of the destination project
7579 -- p_target_finish_date DATE Y The finish date of the destination project
7580 -- p_calendar_id NUMBER Y The calendar id
7581 PROCEDURE copy_structures_tasks_bulk
7582 ( p_api_version IN NUMBER := 1.0
7583 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
7584 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
7585 ,p_validate_only IN VARCHAR2 := FND_API.G_FALSE
7586 ,p_validation_level IN VARCHAR2 := FND_API.G_VALID_LEVEL_FULL
7587 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
7588 ,p_debug_mode IN VARCHAR2 := 'N'
7589 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7590 ,p_src_project_id IN NUMBER
7591 ,p_dest_project_id IN NUMBER
7592 ,p_delta IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7593 ,p_copy_task_flag IN VARCHAR2 := 'Y' /**NOT USED **/
7594 ,p_dest_template_flag IN VARCHAR2 := 'N'
7595 ,p_src_template_flag IN VARCHAR2 := 'N' /**NOT USED **/
7596 ,p_dest_project_name IN VARCHAR2
7597 ,p_target_start_date IN DATE
7598 ,p_target_finish_date IN DATE
7599 ,p_calendar_id IN NUMBER
7600 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7601 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7602 ,x_msg_data OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
7603
7604 --This cursor fetches the workplan structure attributes
7605 CURSOR cur_get_wp_attr IS
7606 SELECT ppwa.WP_ENABLE_VERSION_FLAG
7607 FROM pa_proj_workplan_attr ppwa
7608 ,pa_proj_structure_types ppst
7609 ,pa_structure_types pst
7610 WHERE ppwa.project_id = p_src_project_id
7611 AND ppwa.proj_element_id = ppst.proj_element_id
7612 AND ppst.structure_type_id = pst.structure_type_id
7613 AND pst.structure_type = 'WORKPLAN';
7614
7615 --This cursor determines if atleast one WP version has been selected by the user
7616 CURSOR cur_min_one_wp_version_sel IS
7617 SELECT 'Y'
7618 FROM dual
7619 WHERE EXISTS( SELECT 'Y'
7620 FROM PA_PROJECT_COPY_OPTIONS_TMP
7621 WHERE CONTEXT = 'WORKPLAN'
7622 AND VERSION_ID IS NOT NULL) ;
7623
7624 --This cursor retrieves the values of various flags from the global temporary table
7625 CURSOR cur_get_flag(c_flag_name IN VARCHAR2) IS
7626 SELECT FLAG
7627 FROM PA_PROJECT_COPY_OPTIONS_TMP
7628 WHERE CONTEXT = c_flag_name ;
7629
7630 --This cursor is used to retrieve the destination project's WP/FIN structure id
7631 CURSOR cur_get_dest_structure_id( c_structure_type IN VARCHAR2 ) IS
7632 SELECT ppe.proj_element_id,
7633 ppe.attribute15
7634 FROM pa_proj_elements ppe,
7635 pa_proj_structure_types ppst,
7636 pa_structure_types pst
7637 WHERE ppe.project_id = p_dest_project_id
7638 AND ppe.object_type = 'PA_STRUCTURES'
7639 AND ppe.proj_element_id = ppst.proj_element_id
7640 AND ppst.structure_type_id = pst.structure_type_id
7641 AND pst.structure_type = c_structure_type ;
7642
7643 CURSOR cur_get_person_id(c_user_id NUMBER) IS
7644 SELECT p.person_id
7645 FROM per_all_people_f p,
7646 fnd_user f
7647 WHERE f.employee_id = p.person_id
7648 AND sysdate between p.effective_start_date and p.effective_end_date
7649 AND f.user_id = c_user_id;
7650
7651 --This cursor retrieves all the WP versions of the destination project
7652 CURSOR cur_get_dest_wp_struc_versions(c_dest_wp_struc_id IN NUMBER) IS
7653 SELECT ppev.element_version_id
7654 ,ppev.attribute15
7655 ,ppcot.flag
7656 FROM pa_proj_element_versions ppev,
7657 pa_project_copy_options_tmp ppcot
7658 WHERE ppev.project_id = p_dest_project_id
7659 AND ppev.proj_element_id = c_dest_wp_struc_id
7660 AND ppev.attribute15 = ppcot.version_id
7661 AND ppcot.context = 'WORKPLAN' ;
7662
7663 --This cursor gets the schedule start date from the source project
7664 CURSOR cur_get_src_sch_st_date(c_project_id NUMBER, c_struc_ver_id NUMBER) IS
7665 SELECT scheduled_start_date
7666 FROM pa_proj_elem_ver_schedule
7667 WHERE project_id = c_project_id
7668 AND element_version_id = c_struc_ver_id;
7669
7670 CURSOR cur_get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
7671 SELECT nvl(max(version_number),0)+1
7672 FROM pa_proj_elem_ver_structure
7673 WHERE project_id = c_project_id
7674 AND proj_element_id = c_proj_element_id
7675 AND status_code <> 'STRUCTURE_PUBLISHED';
7676
7677 --This cursor will retrieve the destination project's shared structure id
7678 CURSOR cur_get_shared_struc_id IS
7679 SELECT ppe.proj_element_id,
7680 ppe.attribute15
7681 FROM pa_proj_elements ppe
7682 WHERE ppe.project_id = p_dest_project_id
7683 AND ppe.object_type = 'PA_STRUCTURES'
7684 AND PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y' ;
7685
7686 --This cursor will retrieve the single version id created for the shared structure
7687 CURSOR cur_get_shared_ver_id IS
7688 SELECT ppev.element_version_id
7689 FROM pa_proj_element_versions ppev
7690 WHERE ppev.project_id = p_dest_project_id
7691 AND ppev.object_type = 'PA_STRUCTURES'
7692 AND PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppev.proj_element_id ) = 'Y' ;
7693
7694 --This cursor gets the copied tasks' proj_element_id
7695 CURSOR cur_get_copied_tasks( c_dest_parent_structure_id IN NUMBER ) IS
7696 SELECT dest.attribute15 src_ppe_id,
7697 dest.proj_element_id dest_ppe_id
7698 FROM pa_proj_elements dest
7699 WHERE dest.project_id = p_dest_project_id
7700 AND dest.object_type = 'PA_TASKS'
7701 AND dest.parent_structure_id = c_dest_parent_structure_id ;
7702
7703 --Bug 3387963 - Cursor to get destination and source project's organization id
7704 CURSOR cur_get_carrying_out_org IS
7705 SELECT old.carrying_out_organization_id,
7706 new.carrying_out_organization_id
7707 FROM pa_projects_all old,
7708 pa_projects_all new
7709 WHERE old.project_id = p_src_project_id
7710 AND new.project_id = p_dest_project_id;
7711
7712 /*Included by avaithia for Bug 3922019*/
7713 CURSOR c_template_flag(l_prj_id IN NUMBER) IS
7714 SELECT template_flag
7715 FROM pa_projects_all
7716 WHERE project_id = l_prj_id ;
7717
7718 CURSOR c_only_wp_ver_id(l_proj_id IN NUMBER) IS
7719 SELECT ppv.element_version_id
7720 FROM pa_proj_element_versions ppv ,
7721 pa_proj_structure_types pps,
7722 pa_structure_types pst
7723 WHERE ppv.proj_element_id = pps.proj_element_id
7724 AND ppv.object_type = 'PA_STRUCTURES'
7725 AND pps.structure_type_id = pst.structure_type_id
7726 AND pst.structure_type = 'WORKPLAN'
7727 AND ppv.project_id = l_proj_id ;
7728
7729 l_template_flag PA_PROJECTS_ALL.template_flag%TYPE ;
7730 l_only_wp_ver_id PA_PROJ_ELEMENT_VERSIONS.element_version_id%TYPE ;
7731
7732 /*End of declaration included by avaithia for Bug 3922019*/
7733
7734 l_old_proj_org_id NUMBER;
7735 l_new_proj_org_id NUMBER;
7736 -- End of code added for bug 3387963
7737
7738 l_return_status VARCHAR2(1);
7739 l_msg_count NUMBER;
7740 l_msg_data VARCHAR2(250);
7741 l_debug_mode VARCHAR2(1);
7742 l_data VARCHAR2(2000);
7743 l_msg_index_out NUMBER;
7744 l_debug_level2 CONSTANT NUMBER := 2;
7745 l_debug_level3 CONSTANT NUMBER := 3;
7746 l_debug_level4 CONSTANT NUMBER := 4;
7747 l_debug_level5 CONSTANT NUMBER := 5;
7748
7749 l_workplan_enabled VARCHAR2(1) := 'N';
7750 l_fin_enabled VARCHAR2(1) := 'N';
7751 l_dlv_enabled VARCHAR2(1) := 'N';
7752 l_shared VARCHAR2(1) := 'N';
7753 l_versioning_enabled VARCHAR2(1) := 'N';
7754 l_min_one_wp_ver_sel VARCHAR2(1) := 'N';
7755 l_fin_tasks_flag VARCHAR2(1) := 'Y';
7756
7757 l_wp_deliverables_flag VARCHAR2(1);
7758 l_wp_dlv_item_det_flag VARCHAR2(1);
7759 l_wp_dlv_attach_flag VARCHAR2(1);
7760 l_wp_dlv_assoc_task_flag VARCHAR2(1);
7761
7762 l_suffix VARCHAR2(250);
7763 l_append VARCHAR2(10) := ': ';
7764 l_name VARCHAR2(250);
7765 l_user_id NUMBER := FND_GLOBAL.USER_ID;
7766 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
7767 l_dest_wp_structure_id NUMBER;
7768 l_src_wp_structure_id NUMBER;
7769 l_dest_fn_structure_id NUMBER;
7770 l_src_fn_structure_id NUMBER;
7771 l_dest_shared_struc_id NUMBER;
7772 l_src_shared_struc_id NUMBER;
7773
7774 l_publish_person_id NUMBER;
7775 l_cw_version_id NUMBER(15) := NULL;
7776 l_dest_status_code VARCHAR(150);
7777 l_dest_latest_eff_pub_flag VARCHAR2(1) := 'N';
7778 l_dest_current_working_flag VARCHAR2(1) := 'N';
7779 l_shared_make_working_copy NUMBER(15);
7780 l_new_wp_ver_id NUMBER(15);
7781 l_prefix VARCHAR2(240);
7782
7783 l_default_lat_pub_and_cw_flag VARCHAR2(1) := 'N';
7784 l_delta NUMBER;
7785 l_src_sch_st_date DATE;
7786 l_shared_dest_ver_id NUMBER(15);
7787 l_struc_ver_number NUMBER;
7788 l_dest_latest_pub_ver_id NUMBER;
7789 l_wp_task_attach_flag VARCHAR2(1);
7790 l_fn_task_attach_flag VARCHAR2(1);
7791
7792 rec_dest_wp_struc_versions cur_get_dest_wp_struc_versions%ROWTYPE;
7793
7794 --bug 3907862, start
7795 l_struct_version_number NUMBER;
7796 --bug 3912603, Satish, start
7797 x_pev_schedule_id NUMBER;
7798 check_str_sel_flag VARCHAR2(1) := 'N';
7799 --bug 3912603, Satish, end
7800
7801 cursor get_published_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
7802 select nvl(max(version_number),0)+1
7803 from pa_proj_elem_ver_structure
7804 where project_id = c_project_id
7805 and proj_element_id = c_proj_element_id
7806 and status_code = 'STRUCTURE_PUBLISHED';
7807
7808 cursor get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
7809 select nvl(max(version_number),0)+1
7810 from pa_proj_elem_ver_structure
7811 where project_id = c_project_id
7812 and proj_element_id = c_proj_element_id
7813 and status_code <> 'STRUCTURE_PUBLISHED';
7814 --bug 3907862, end
7815
7816 --3916763 Begin
7817 CURSOR c_get_approval_options IS
7818 SELECT wp_approval_reqd_flag, wp_auto_publish_flag, wp_approver_source_id
7819 FROM PA_PROJ_WORKPLAN_ATTR ppwa
7820 , PA_PROJ_STRUCTURE_TYPES ppst
7821 , PA_STRUCTURE_TYPES pst
7822 WHERE ppwa.PROJECT_ID = p_src_project_id
7823 AND ppwa.PROJ_ELEMENT_ID = ppst.PROJ_ELEMENT_ID
7824 AND ppst.structure_type_id = pst.structure_type_id
7825 and pst.structure_type = 'WORKPLAN';
7826 l_wp_approval_reqd_flag VARCHAR2(1);
7827 l_wp_auto_publish_flag VARCHAR2(1);
7828 l_wp_approver_source_id NUMBER;
7829 l_submit_wf_required VARCHAR2(1);
7830 l_submit_wf_str_version_id NUMBER;
7831 l_submit_wf_str_id NUMBER;
7832 l_puc_version_id NUMBER(15);
7833 l_current_working_selected NUMBER(15) := NULL;
7834 --3916763 End
7835
7836 /* Code added for 6211012*/
7837
7838 TYPE typ_obj_rela_id is TABLE OF pa_object_relationships.object_relationship_id%TYPE
7839 INDEX BY BINARY_INTEGER;
7840 l_obj_rel_id typ_obj_rela_id;
7841
7842 TYPE typ_obj_typ_from is TABLE OF pa_object_relationships.object_type_from%TYPE
7843 INDEX BY BINARY_INTEGER;
7844 l_obj_typ_from typ_obj_typ_from;
7845
7846 TYPE typ_obj_from_id is TABLE OF pa_object_relationships.object_id_from1%TYPE
7847 INDEX BY BINARY_INTEGER;
7848 l_obj_from_id typ_obj_from_id;
7849
7850 TYPE typ_obj_typ_to is TABLE OF pa_object_relationships.object_type_to%TYPE
7851 INDEX BY BINARY_INTEGER;
7852 l_obj_typ_to typ_obj_typ_to;
7853
7854 TYPE typ_obj_to_id is TABLE OF pa_object_relationships.object_id_to1%TYPE
7855 INDEX BY BINARY_INTEGER;
7856 l_obj_to_id typ_obj_to_id;
7857
7858 TYPE typ_rel_typ is TABLE OF pa_object_relationships.relationship_type%TYPE
7859 INDEX BY BINARY_INTEGER;
7860 l_rel_typ typ_rel_typ;
7861
7862 TYPE typ_rel_subtyp is TABLE OF pa_object_relationships.relationship_subtype%TYPE
7863 INDEX BY BINARY_INTEGER;
7864 l_rel_subtyp typ_rel_subtyp;
7865
7866 TYPE typ_rec_ver_num is TABLE OF pa_object_relationships.Record_Version_Number%TYPE
7867 INDEX BY BINARY_INTEGER;
7868 l_rec_ver_num typ_rec_ver_num;
7869
7870 TYPE typ_wt_percent is TABLE OF pa_object_relationships.weighting_percentage%TYPE
7871 INDEX BY BINARY_INTEGER;
7872 l_wt_percent typ_wt_percent;
7873
7874
7875 CURSOR cur_pa_obj_rela_2(c_src_str_version_id NUMBER,
7876 c_struc_version_id NUMBER
7877 ) IS
7878 SELECT /*+ USE_HASH(ppev2 ppev1)*/
7879 pa_object_relationships_s.nextval,
7880 pobj.object_type_from,
7881 ppev1.element_version_id,
7882 pobj.object_type_to,
7883 ppev2.element_version_id,
7884 pobj.relationship_type,
7885 pobj.relationship_subtype,
7886 pobj.Record_Version_Number,
7887 pobj.weighting_percentage
7888 FROM ( SELECT object_type_from, object_id_from1,
7889 object_type_to, object_id_to1,
7890 relationship_type, relationship_subtype,
7891 Record_Version_Number, weighting_percentage
7892 FROM pa_object_relationships
7893 START WITH object_id_from1 = c_src_str_version_id
7894 AND RELATIONSHIP_TYPE = 'S'
7895 CONNECT BY object_id_from1 = PRIOR object_id_to1
7896 AND RELATIONSHIP_TYPE = 'S' ) pobj,
7897 pa_proj_element_versions ppev1,
7898 pa_proj_element_versions ppev2
7899 WHERE ppev1.attribute15 = pobj.object_id_from1
7900 AND ppev2.attribute15 = pobj.object_id_to1
7901 AND ppev1.parent_structure_version_id = c_struc_version_id
7902 AND ppev2.parent_structure_version_id = c_struc_version_id ;
7903
7904 /*End of Code added for 6211012*/
7905
7906 BEGIN
7907
7908 x_msg_count := 0;
7909 x_return_status := FND_API.G_RET_STS_SUCCESS;
7910 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
7911
7912 IF (p_commit = FND_API.G_TRUE) THEN
7913 SAVEPOINT copy_struc_tasks_bulk;
7914 END IF;
7915
7916 IF p_init_msg_list = FND_API.G_TRUE THEN
7917 FND_MSG_PUB.initialize;
7918 END IF;
7919
7920 IF l_debug_mode = 'Y' THEN
7921 PA_DEBUG.set_curr_function( p_function => 'copy_structures_tasks_bulk',
7922 p_debug_mode => l_debug_mode );
7923 END IF;
7924
7925 IF l_debug_mode = 'Y' THEN
7926 Pa_Debug.g_err_stage:= 'Printing Input parameters';
7927 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
7928 l_debug_level3);
7929
7930 Pa_Debug.WRITE(G_PKG_NAME,'p_src_project_id'||':'||p_src_project_id,
7931 l_debug_level3);
7932
7933 Pa_Debug.WRITE(G_PKG_NAME,'p_dest_project_id'||':'||p_dest_project_id,
7934 l_debug_level3);
7935
7936 Pa_Debug.WRITE(G_PKG_NAME,'p_delta'||':'||p_delta,
7937 l_debug_level3);
7938
7939 Pa_Debug.WRITE(G_PKG_NAME,'p_copy_task_flag'||':'||p_copy_task_flag,
7940 l_debug_level3);
7941
7942 Pa_Debug.WRITE(G_PKG_NAME,'p_dest_template_flag'||':'||p_dest_template_flag,
7943 l_debug_level3);
7944
7945 Pa_Debug.WRITE(G_PKG_NAME,'p_src_template_flag'||':'||p_src_template_flag,
7946 l_debug_level3);
7947
7948 Pa_Debug.WRITE(G_PKG_NAME,'p_dest_project_name'||':'||p_dest_project_name,
7949 l_debug_level3);
7950
7951 Pa_Debug.WRITE(G_PKG_NAME,'p_target_start_date'||':'||p_target_start_date,
7952 l_debug_level3);
7953
7954 Pa_Debug.WRITE(G_PKG_NAME,'p_target_finish_date'||':'||p_target_finish_date,
7955 l_debug_level3);
7956
7957 Pa_Debug.WRITE(G_PKG_NAME,'p_calendar_id'||':'||p_calendar_id,
7958 l_debug_level3);
7959 END IF;
7960
7961 --If source and destination project are the same
7962 IF p_src_project_id = p_dest_project_id THEN
7963 x_return_status := FND_API.G_RET_STS_SUCCESS;
7964 RETURN;
7965 END IF;
7966
7967 --Check whether WP structure is enabled for the source project
7968 l_workplan_enabled := PA_PROJECT_STRUCTURE_UTILS.check_workplan_enabled( p_src_project_id );
7969 --Check whether Financial structure is enabled for the source project
7970 l_fin_enabled := PA_PROJECT_STRUCTURE_UTILS.check_financial_enabled( p_src_project_id );
7971 IF NVL( l_workplan_enabled, 'N' ) = 'Y' THEN
7972 --Check whether the structures are shared or not in the source project
7973 l_shared := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_src_project_id);
7974 --Retrieve whether versioning is enabled or not
7975 OPEN cur_get_wp_attr;
7976 FETCH cur_get_wp_attr INTO l_versioning_enabled;
7977 CLOSE cur_get_wp_attr;
7978 END IF;
7979
7980 --Check whether deliverables is enabled
7981 l_dlv_enabled := PA_PROJECT_STRUCTURE_UTILS.check_Deliverable_enabled(p_src_project_id);
7982
7983 --If deliverables is enabled, retrieve the various deliverables flags
7984 IF 'Y' = l_dlv_enabled THEN
7985 OPEN cur_get_flag('WP_DELIVERABLES_FLAG');
7986 FETCH cur_get_flag INTO l_wp_deliverables_flag;
7987 CLOSE cur_get_flag;
7988
7989 OPEN cur_get_flag('WP_DLV_ITEM_DET_FLAG');
7990 FETCH cur_get_flag INTO l_wp_dlv_item_det_flag;
7991 CLOSE cur_get_flag;
7992
7993 OPEN cur_get_flag('WP_DLV_ATTACH_FLAG');
7994 FETCH cur_get_flag INTO l_wp_dlv_attach_flag;
7995 CLOSE cur_get_flag;
7996
7997 OPEN cur_get_flag('WP_DLV_ASSOC_TASK_FLAG');
7998 FETCH cur_get_flag INTO l_wp_dlv_assoc_task_flag;
7999 CLOSE cur_get_flag;
8000 END IF;
8001
8002 --If both workplan and financial structures are disabled, we only need to copy deliverables and return
8003 IF 'N' = l_workplan_enabled AND 'N' = l_fin_enabled THEN
8004 --If deliverables is enabled and deliverables are selected for copying
8005 IF ( 'Y' = l_dlv_enabled AND 'Y' = l_wp_deliverables_flag ) THEN
8006
8007 PA_DELIVERABLE_PUB.copy_deliverables
8008 (p_source_project_id => p_src_project_id
8009 ,p_target_project_id => p_dest_project_id
8010 ,p_item_details_flag => l_wp_dlv_item_det_flag
8011 ,p_dlv_actions_flag => 'Y'
8012 ,p_dlv_attachments_flag => l_wp_dlv_attach_flag
8013 ,p_association_flag => l_wp_dlv_assoc_task_flag
8014 ,p_prefix => 'CP'
8015 ,p_delta => p_delta
8016 ,p_calling_context => 'COPY_PROJECT'
8017 ,x_return_status => x_return_status
8018 ,x_msg_count => x_msg_count
8019 ,x_Msg_data => x_msg_data
8020 );
8021
8022 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8023 RAISE FND_API.G_EXC_ERROR;
8024 END IF;
8025
8026 --Update back the attributes column in pa_proj_elements and pa_proj_element_versions with actual data from source project
8027 UPDATE pa_proj_elements ppe1
8028 SET attribute15 = ( SELECT attribute15 FROM pa_proj_elements ppe2
8029 WHERE ppe2.project_id = p_src_project_id
8030 AND ppe2.proj_element_id = ppe1.attribute15 )
8031 WHERE project_id = p_dest_project_id ;
8032
8033 UPDATE pa_proj_element_versions ppevs1
8034 SET attribute15 = ( SELECT attribute15 FROM pa_proj_element_versions ppevs2
8035 WHERE ppevs2.project_id = p_src_project_id
8036 AND ppevs2.element_version_id = ppevs1.attribute15 )
8037 WHERE project_id = p_dest_project_id ;
8038
8039 END IF;
8040
8041 x_return_status := FND_API.G_RET_STS_SUCCESS ;
8042
8043 IF (p_commit = FND_API.G_TRUE) THEN
8044 COMMIT;
8045 END IF;
8046
8047 RETURN;
8048 END IF;
8049
8050 --Check whether atleast one WP version has been selected by the user or not
8051 OPEN cur_min_one_wp_version_sel;
8052 FETCH cur_min_one_wp_version_sel INTO l_min_one_wp_ver_sel;
8053 CLOSE cur_min_one_wp_version_sel;
8054
8055 --Check whether the financial tasks flag is checked or not
8056 OPEN cur_get_flag('FN_FIN_TASKS_FLAG');
8057 FETCH cur_get_flag INTO l_fin_tasks_flag;
8058 CLOSE cur_get_flag;
8059
8060 -------------------------------------------------------------------------------------------------------
8061 /**** THE FOLLOWING SECTION INSERTS WORKPLAN AND FINANCIAL STRUCTURES AND RELATED ATTRIBUTES INTO THE
8062 DESTINATION PROJECT ****/
8063 -------------------------------------------------------------------------------------------------------
8064
8065 l_name := substr(p_dest_project_name, 1, 240);
8066
8067 IF l_debug_mode = 'Y' THEN
8068 Pa_Debug.WRITE(G_PKG_NAME, 'Atleast one WP ver selected : '||l_min_one_wp_ver_sel, l_debug_level3);
8069 Pa_Debug.WRITE(G_PKG_NAME, 'Financial Tasks flag : '||l_fin_tasks_flag, l_debug_level3);
8070 END IF;
8071
8072 --Copy workplan/financial structures into the destination project
8073 INSERT INTO pa_proj_elements(
8074 PROJ_ELEMENT_ID
8075 ,PROJECT_ID
8076 ,OBJECT_TYPE
8077 ,ELEMENT_NUMBER
8078 ,NAME
8079 ,DESCRIPTION
8080 ,STATUS_CODE
8081 ,WF_STATUS_CODE
8082 ,PM_SOURCE_CODE
8083 ,PM_SOURCE_REFERENCE
8084 ,CLOSED_DATE
8085 ,LOCATION_ID
8086 ,MANAGER_PERSON_ID
8087 ,CARRYING_OUT_ORGANIZATION_ID
8088 ,TYPE_ID
8089 ,PRIORITY_CODE
8090 ,CREATION_DATE
8091 ,CREATED_BY
8092 ,LAST_UPDATE_DATE
8093 ,LAST_UPDATED_BY
8094 ,LAST_UPDATE_LOGIN
8095 ,RECORD_VERSION_NUMBER
8096 ,REQUEST_ID
8097 ,PROGRAM_APPLICATION_ID
8098 ,PROGRAM_ID
8099 ,PROGRAM_UPDATE_DATE
8100 ,LINK_TASK_FLAG
8101 ,BASELINE_START_DATE
8102 ,BASELINE_FINISH_DATE
8103 ,PROGRESS_OUTDATED_FLAG
8104 ,ATTRIBUTE_CATEGORY
8105 ,ATTRIBUTE1
8106 ,ATTRIBUTE2
8107 ,ATTRIBUTE3
8108 ,ATTRIBUTE4
8109 ,ATTRIBUTE5
8110 ,ATTRIBUTE6
8111 ,ATTRIBUTE7
8112 ,ATTRIBUTE8
8113 ,ATTRIBUTE9
8114 ,ATTRIBUTE10
8115 ,ATTRIBUTE11
8116 ,ATTRIBUTE12
8117 ,ATTRIBUTE13
8118 ,ATTRIBUTE14
8119 ,ATTRIBUTE15
8120 ,PARENT_STRUCTURE_ID
8121 ,TYPE_CODE
8122 ,INC_PROJ_PROGRESS_FLAG
8123 ,WQ_ITEM_CODE
8124 ,WQ_UOM_CODE
8125 ,WQ_ACTUAL_ENTRY_CODE
8126 ,TASK_PROGRESS_ENTRY_PAGE_ID
8127 ,BASELINE_DURATION
8128 ,PHASE_CODE
8129 ,PHASE_VERSION_ID
8130 ,PROGRESS_WEIGHT
8131 ,BASE_PERCENT_COMP_DERIV_CODE
8132 ,FUNCTION_CODE
8133 ,ENABLE_WF_FLAG
8134 ,WF_ITEM_TYPE
8135 ,WF_PROCESS
8136 ,WF_START_LEAD_DAYS
8137 ,source_object_id
8138 ,source_object_type
8139 )
8140 SELECT
8141 pa_tasks_s.nextval
8142 ,p_dest_project_id
8143 ,ppe.object_type
8144 ,pa_tasks_s.nextval --Set element_number same as proj_element_id
8145 ,l_name
8146 ,ppe.DESCRIPTION
8147 ,ppe.STATUS_CODE
8148 ,ppe.WF_STATUS_CODE
8149 ,NULL --bug 3810263 replacing ppe.PM_SOURCE_CODE
8150 ,NULL --bug 3810263 replacing ppe.PM_SOURCE_REFERENCE
8151 ,ppe.CLOSED_DATE
8152 ,ppe.LOCATION_ID
8153 ,ppe.MANAGER_PERSON_ID
8154 ,ppe.CARRYING_OUT_ORGANIZATION_ID
8155 ,ppe.TYPE_ID
8156 ,ppe.PRIORITY_CODE
8157 ,SYSDATE
8158 ,l_user_id
8159 ,SYSDATE
8160 ,l_user_id
8161 ,l_login_id
8162 ,ppe.RECORD_VERSION_NUMBER
8163 ,ppe.REQUEST_ID
8164 ,ppe.PROGRAM_APPLICATION_ID
8165 ,ppe.PROGRAM_ID
8166 ,ppe.PROGRAM_UPDATE_DATE
8167 ,ppe.LINK_TASK_FLAG
8168 ,ppe.BASELINE_START_DATE
8169 ,ppe.BASELINE_FINISH_DATE
8170 ,'N' --,ppe.progress_outdated_flag
8171 ,ppe.ATTRIBUTE_CATEGORY
8172 ,ppe.ATTRIBUTE1
8173 ,ppe.ATTRIBUTE2
8174 ,ppe.ATTRIBUTE3
8175 ,ppe.ATTRIBUTE4
8176 ,ppe.ATTRIBUTE5
8177 ,ppe.ATTRIBUTE6
8178 ,ppe.ATTRIBUTE7
8179 ,ppe.ATTRIBUTE8
8180 ,ppe.ATTRIBUTE9
8181 ,ppe.ATTRIBUTE10
8182 ,ppe.ATTRIBUTE11
8183 ,ppe.ATTRIBUTE12
8184 ,ppe.ATTRIBUTE13
8185 ,ppe.ATTRIBUTE14
8186 ,ppe.proj_element_id --attribute 15 is used to store old structure id to identify the structure type
8187 ,null --parent_structure_id is NULL in case of structures
8188 ,ppe.TYPE_CODE
8189 ,ppe.INC_PROJ_PROGRESS_FLAG
8190 ,ppe.WQ_ITEM_CODE
8191 ,ppe.WQ_UOM_CODE
8192 ,ppe.WQ_ACTUAL_ENTRY_CODE
8193 ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
8194 ,ppe.BASELINE_DURATION
8195 ,ppe.PHASE_CODE
8196 ,ppe.PHASE_VERSION_ID
8197 ,ppe.PROGRESS_WEIGHT
8198 ,ppe.BASE_PERCENT_COMP_DERIV_CODE
8199 ,ppe.FUNCTION_CODE
8200 ,ppe.ENABLE_WF_FLAG --'N' Bug 3616964
8201 ,ppe.WF_ITEM_TYPE
8202 ,ppe.WF_PROCESS
8203 ,ppe.WF_START_LEAD_DAYS
8204 ,p_dest_project_id
8205 ,'PA_PROJECTS'
8206 FROM pa_proj_elements ppe
8207 WHERE ppe.project_id = p_src_project_id
8208 AND ppe.proj_element_id IN
8209 ( SELECT ppe2.proj_element_id
8210 FROM pa_proj_elements ppe2
8211 ,pa_proj_structure_types ppst
8212 ,pa_structure_types pst
8213 WHERE ppe2.project_id = p_src_project_id
8214 AND ppe2.object_type = 'PA_STRUCTURES'
8215 AND ppe2.proj_element_id = ppst.proj_element_id
8216 AND ppst.structure_type_id = pst.structure_type_id
8217 AND pst.structure_type IN ('WORKPLAN','FINANCIAL') );
8218 --DONOT use the fn call PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y' in above insert
8219 --Inner query is necessary rather than a straight join of three tables in the outer query bec in case of shared,
8220 --the same record from source project is returned twice.
8221
8222 SELECT meaning INTO l_suffix
8223 FROM pa_lookups
8224 WHERE lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
8225 AND lookup_code = 'WORKPLAN';
8226
8227 --If Split and Workplan enabled
8228 IF 'N' = l_shared AND 'Y' = l_workplan_enabled THEN
8229 --Update the name of the WP structure record
8230 UPDATE pa_proj_elements ppe
8231 SET name = substr(p_dest_project_name||l_append||l_suffix, 1, 240)
8232 WHERE project_id = p_dest_project_id
8233 AND object_type = 'PA_STRUCTURES'
8234 AND EXISTS ( SELECT proj_element_id FROM pa_proj_structure_types
8235 WHERE proj_element_id = ppe.proj_element_id
8236 AND structure_type_id = 1 );
8237 END IF;
8238
8239 --Copy entries in pa_proj_structure_types for financial and workplan structures
8240 INSERT INTO PA_PROJ_STRUCTURE_TYPES(
8241 PROJ_STRUCTURE_TYPE_ID
8242 ,PROJ_ELEMENT_ID
8243 ,STRUCTURE_TYPE_ID
8244 ,CREATION_DATE
8245 ,CREATED_BY
8246 ,LAST_UPDATE_DATE
8247 ,LAST_UPDATED_BY
8248 ,LAST_UPDATE_LOGIN
8249 ,RECORD_VERSION_NUMBER )
8250 SELECT
8251 pa_proj_structure_types_s.nextval
8252 ,ppe.proj_element_id
8253 ,ppst.structure_type_id --structure type
8254 ,sysdate
8255 ,l_user_id
8256 ,sysdate
8257 ,l_user_id
8258 ,l_login_id
8259 ,1
8260 FROM pa_proj_elements ppe,
8261 pa_proj_structure_types ppst
8262 WHERE ppe.project_id = p_dest_project_id
8263 AND ppe.attribute15 IN --DoNot use PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.attribute15 ) = 'Y'
8264 ( SELECT ppe2.proj_element_id
8265 FROM pa_proj_elements ppe2
8266 ,pa_proj_structure_types ppst
8267 ,pa_structure_types pst
8268 WHERE ppe2.project_id = p_src_project_id
8269 AND ppe2.object_type = 'PA_STRUCTURES'
8270 AND ppe2.proj_element_id = ppst.proj_element_id
8271 AND ppst.structure_type_id = pst.structure_type_id
8272 AND pst.structure_type IN ('WORKPLAN','FINANCIAL') )
8273 AND ppe.attribute15 = ppst.proj_element_id ; --proj_element_id is unique in pa_proj_structure_types
8274
8275 --Copy workplan attributes for financial and workplan structures
8276 INSERT INTO pa_proj_workplan_attr(
8277 PROJ_ELEMENT_ID
8278 ,PROJECT_ID
8279 ,LAST_UPDATE_DATE
8280 ,LAST_UPDATED_BY
8281 ,CREATION_DATE
8282 ,CREATED_BY
8283 ,WP_APPROVAL_REQD_FLAG
8284 ,WP_AUTO_PUBLISH_FLAG
8285 ,WP_DEFAULT_DISPLAY_LVL
8286 ,WP_ENABLE_VERSION_FLAG
8287 ,AUTO_PUB_UPON_CREATION_FLAG
8288 ,AUTO_SYNC_TXN_DATE_FLAG
8289 ,WP_APPROVER_SOURCE_ID
8290 ,WP_APPROVER_SOURCE_TYPE
8291 ,RECORD_VERSION_NUMBER
8292 ,LAST_UPDATE_LOGIN
8293 ,TXN_DATE_SYNC_BUF_DAYS
8294 ,LIFECYCLE_VERSION_ID
8295 ,CURRENT_PHASE_VERSION_ID
8296 ,SCHEDULE_THIRD_PARTY_FLAG
8297 ,ALLOW_LOWEST_TSK_DEP_FLAG
8298 -- ,PROGRAM_FLAG
8299 ,AUTO_ROLLUP_SUBPROJ_FLAG
8300 ,THIRD_PARTY_SCHEDULE_CODE
8301 ,source_object_id
8302 ,source_object_type
8303 )
8304 SELECT
8305 ppe.PROJ_ELEMENT_ID
8306 ,ppe.PROJECT_ID
8307 ,SYSDATE
8308 ,l_user_id
8309 ,SYSDATE
8310 ,l_user_id
8311 ,ppwa.WP_APPROVAL_REQD_FLAG
8312 ,ppwa.WP_AUTO_PUBLISH_FLAG
8313 ,ppwa.WP_DEFAULT_DISPLAY_LVL
8314 ,ppwa.WP_ENABLE_VERSION_FLAG
8315 ,ppwa.AUTO_PUB_UPON_CREATION_FLAG
8316 ,ppwa.AUTO_SYNC_TXN_DATE_FLAG
8317 ,ppwa.WP_APPROVER_SOURCE_ID
8318 ,ppwa.WP_APPROVER_SOURCE_TYPE
8319 ,ppwa.RECORD_VERSION_NUMBER
8320 ,l_login_id
8321 ,ppwa.TXN_DATE_SYNC_BUF_DAYS
8322 ,ppwa.LIFECYCLE_VERSION_ID
8323 ,ppwa.CURRENT_PHASE_VERSION_ID
8324 ,ppwa.SCHEDULE_THIRD_PARTY_FLAG
8325 ,ppwa.ALLOW_LOWEST_TSK_DEP_FLAG
8326 -- ,ppwa.PROGRAM_FLAG
8327 ,ppwa.AUTO_ROLLUP_SUBPROJ_FLAG
8328 ,ppwa.THIRD_PARTY_SCHEDULE_CODE
8329 ,ppe.PROJECT_ID
8330 ,'PA_PROJECTS'
8331 FROM pa_proj_elements ppe,
8332 pa_proj_workplan_attr ppwa
8333 WHERE ppwa.project_id = p_src_project_id
8334 AND ppe.attribute15 = ppwa.proj_element_id
8335 AND PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y'
8336 AND ppe.project_id = p_dest_project_id --bug 3939786
8337 ;
8338
8339 --Copy progress attributes for financial and workplan structures
8340 INSERT INTO pa_proj_progress_attr(
8341 PROJ_PROGRESS_ATTR_ID
8342 ,OBJECT_TYPE
8343 ,OBJECT_ID
8344 ,LAST_UPDATE_DATE
8345 ,LAST_UPDATED_BY
8346 ,CREATION_DATE
8347 ,CREATED_BY
8348 ,LAST_UPDATE_LOGIN
8349 ,PROJECT_ID
8350 ,PROGRESS_CYCLE_ID
8351 ,WQ_ENABLE_FLAG
8352 ,REMAIN_EFFORT_ENABLE_FLAG
8353 ,PERCENT_COMP_ENABLE_FLAG
8354 ,NEXT_PROGRESS_UPDATE_DATE
8355 ,RECORD_VERSION_NUMBER
8356 ,TASK_WEIGHT_BASIS_CODE
8357 ,ALLOW_COLLAB_PROG_ENTRY
8358 ,ALLOW_PHY_PRCNT_CMP_OVERRIDES
8359 ,STRUCTURE_TYPE
8360 )
8361 SELECT
8362 PA_PROJ_PROGRESS_ATTR_S.nextval
8363 ,ppe.OBJECT_TYPE
8364 ,ppe.proj_element_ID
8365 ,sysdate
8366 ,l_user_id
8367 ,SYSDATE
8368 ,l_user_id
8369 ,l_login_id
8370 ,p_dest_project_id
8371 ,pppa.PROGRESS_CYCLE_ID
8372 ,pppa.WQ_ENABLE_FLAG
8373 ,pppa.REMAIN_EFFORT_ENABLE_FLAG
8374 ,pppa.PERCENT_COMP_ENABLE_FLAG
8375 ,pppa.NEXT_PROGRESS_UPDATE_DATE
8376 ,pppa.RECORD_VERSION_NUMBER
8377 ,pppa.TASK_WEIGHT_BASIS_CODE
8378 ,pppa.ALLOW_COLLAB_PROG_ENTRY
8379 ,pppa.ALLOW_PHY_PRCNT_CMP_OVERRIDES
8380 ,pppa.STRUCTURE_TYPE
8381 FROM pa_proj_progress_attr pppa,
8382 pa_proj_elements ppe
8383 WHERE ppe.project_id = p_dest_project_id
8384 AND PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y'
8385 AND ppe.attribute15 = pppa.object_id
8386 AND pppa.project_id = p_src_project_id
8387 AND pppa.object_type = 'PA_STRUCTURES' ;
8388
8389 IF l_debug_mode = 'Y' THEN
8390 Pa_Debug.WRITE(G_PKG_NAME, 'After inserting WP/FIN structures and related attributes', l_debug_level3);
8391 END IF;
8392
8393 ---------------------------------------------------------------------------------------------------------
8394 /**** THE FOLLOWING SECTION COPIES/INSERTS WORKPLAN VERSIONS AND TASKS INTO THE DESTINATION PROJECT ****/
8395 ---------------------------------------------------------------------------------------------------------
8396 --IF 'ATLEAST ONE WP VER IS SELECTED' FOR COPYING THEN
8397 -- Copy selected version(s) and tasks belonging to these version(s)
8398 -- Call API to sync up pa_tasks with pa_proj_elements in case of SHARED structure
8399 --ELSE (if no WP ver selected for copying)
8400 -- IF 'SHARED' AND 'FINANCIAL TASKS FLAG IS CHECKED' THEN
8401 -- Copy financial structure version in the source project and tasks belonging to this version
8402 -- ENF IF;
8403 -- IF ('SHARED' AND 'FINANCAIL TASKS FLAG IS NOT CHECKED') OR (SPLIT AND WORKPLAN ENABLED) THEN
8404 -- Insert new (default) structure version for WP
8405 -- END IF;
8406 --END IF;
8407
8408 --Get the destination project's wp structure id
8409 OPEN cur_get_dest_structure_id('WORKPLAN');
8410 FETCH cur_get_dest_structure_id INTO l_dest_wp_structure_id, l_src_wp_structure_id;
8411 CLOSE cur_get_dest_structure_id;
8412
8413 --Get the destination project's financial structure id
8414 OPEN cur_get_dest_structure_id('FINANCIAL');
8415 FETCH cur_get_dest_structure_id INTO l_dest_fn_structure_id, l_src_fn_structure_id;
8416 CLOSE cur_get_dest_structure_id;
8417
8418 --Get the publish person id
8419 OPEN cur_get_person_id(FND_GLOBAL.USER_ID);
8420 FETCH cur_get_person_id INTO l_publish_person_id;
8421 IF cur_get_person_id%NOTFOUND THEN
8422 l_publish_person_id := NULL;
8423 END IF;
8424 CLOSE cur_get_person_id;
8425
8426 --Bug 3387963 - Added to get the cursor values
8427 OPEN cur_get_carrying_out_org;
8428 FETCH cur_get_carrying_out_org INTO l_old_proj_org_id, l_new_proj_org_id;
8429 CLOSE cur_get_carrying_out_org;
8430
8431
8432
8433 --If there is atleast one WP version selected for copying
8434 IF 'Y' = nvl(l_min_one_wp_ver_sel,'N') THEN
8435
8436 IF l_debug_mode = 'Y' THEN
8437 Pa_Debug.WRITE(G_PKG_NAME, 'Inserting versions and tasks for selected WP version(s)', l_debug_level3);
8438 END IF;
8439
8440 --Copy SELECTED workplan versions
8441 INSERT INTO pa_proj_element_versions(
8442 ELEMENT_VERSION_ID
8443 ,PROJ_ELEMENT_ID
8444 ,OBJECT_TYPE
8445 ,PROJECT_ID
8446 ,PARENT_STRUCTURE_VERSION_ID
8447 ,DISPLAY_SEQUENCE
8448 ,WBS_LEVEL
8449 ,WBS_NUMBER
8450 ,CREATION_DATE
8451 ,CREATED_BY
8452 ,LAST_UPDATE_DATE
8453 ,LAST_UPDATED_BY
8454 ,LAST_UPDATE_LOGIN
8455 ,RECORD_VERSION_NUMBER
8456 ,attribute15 --This column stores the stucture version id in the src project, to be used to create relationships.
8457 ,ATTRIBUTE_CATEGORY
8458 ,ATTRIBUTE1
8459 ,ATTRIBUTE2
8460 ,ATTRIBUTE3
8461 ,ATTRIBUTE4
8462 ,ATTRIBUTE5
8463 ,ATTRIBUTE6
8464 ,ATTRIBUTE7
8465 ,ATTRIBUTE8
8466 ,ATTRIBUTE9
8467 ,ATTRIBUTE10
8468 ,ATTRIBUTE11
8469 ,ATTRIBUTE12
8470 ,ATTRIBUTE13
8471 ,ATTRIBUTE14
8472 ,TASK_UNPUB_VER_STATUS_CODE
8473 ,FINANCIAL_TASK_FLAG
8474 ,PRG_GROUP
8475 ,PRG_LEVEL
8476 ,PRG_COUNT
8477 ,source_object_id
8478 ,source_object_type
8479 )
8480 SELECT
8481 pa_proj_element_versions_s.nextval
8482 ,l_dest_wp_structure_id
8483 ,ppev.object_type
8484 ,p_dest_project_id
8485 ,pa_proj_element_versions_s.nextval --nextval occuring twice in the same select returns the same value
8486 ,ppev.DISPLAY_SEQUENCE
8487 ,ppev.WBS_LEVEL
8488 ,ppev.WBS_NUMBER
8489 ,SYSDATE ------CREATION_DATE
8490 ,l_user_id ------CREATED_BY
8491 ,SYSDATE ------LAST_UPDATE_DATE
8492 ,l_user_id ------LAST_UPDATED_BY
8493 ,l_login_id ------LAST_UPDATE_LOGIN
8494 ,ppev.RECORD_VERSION_NUMBER ------RECORD_VERSION_NUMBER
8495 ,ppev.element_version_id
8496 ,ppev.ATTRIBUTE_CATEGORY
8497 ,ppev.ATTRIBUTE1
8498 ,ppev.ATTRIBUTE2
8499 ,ppev.ATTRIBUTE3
8500 ,ppev.ATTRIBUTE4
8501 ,ppev.ATTRIBUTE5
8502 ,ppev.ATTRIBUTE6
8503 ,ppev.ATTRIBUTE7
8504 ,ppev.ATTRIBUTE8
8505 ,ppev.ATTRIBUTE9
8506 ,ppev.ATTRIBUTE10
8507 ,ppev.ATTRIBUTE11
8508 ,ppev.ATTRIBUTE12
8509 ,ppev.ATTRIBUTE13
8510 ,ppev.ATTRIBUTE14
8511 ,ppev.TASK_UNPUB_VER_STATUS_CODE
8512 ,ppev.FINANCIAL_TASK_FLAG
8513 ,NULL --bug 4261419
8514 ,NULL --bug 4261419
8515 ,NULL --bug 4261419
8516 ,p_dest_project_id
8517 ,'PA_PROJECTS'
8518 FROM pa_proj_element_versions ppev,
8519 pa_project_copy_options_tmp ppcot
8520 WHERE ppcot.context = 'WORKPLAN'
8521 AND ppev.element_version_id = ppcot.version_id
8522 AND ppev.project_id = p_src_project_id
8523 AND ppev.object_type = 'PA_STRUCTURES' ;
8524
8525 /** THE FOLLOWING SECTION OF THE CODE IDENTIFIES THE CURRENT_WORKING VERSION IN THE DESTINATION PROJECT **/
8526
8527 --IF current_working version from source is selected and is not published upon creation
8528 -- --> Copy the same as current_working in the destination project
8529 --IF current_working version from the source is not selected or it is publish upon creation
8530 -- --> Copy the lastest updated working WP version that is selected and is not publish upon creation
8531 --IF no working version is selected or the single selected working version is publish upon creation
8532 -- --> Copy the latest published version as current working, if it is selected and is not publish upon creation
8533 -- --> Else, copy the next latest published version which is selected and is not PUC, as current working
8534 IF 'Y' = l_versioning_enabled AND 'N' = p_dest_template_flag THEN
8535 DECLARE
8536
8537 --This cursor gets the WP version which is selected for Publish Upon Creation
8538 CURSOR get_puc_version_id IS
8539 SELECT version_id
8540 FROM pa_project_copy_options_tmp ppcot
8541 WHERE context = 'WORKPLAN'
8542 AND flag = 'Y';
8543
8544 --Gets the current working version of the source project ONLY if it has been SELECTED for copying
8545 CURSOR get_current_working_selected IS
8546 SELECT ppevs.element_version_id
8547 FROM pa_proj_elem_ver_structure ppevs,
8548 pa_project_copy_options_tmp ppcot
8549 WHERE ppevs.current_working_flag = 'Y'
8550 AND ppevs.status_code = 'STRUCTURE_WORKING'
8551 AND ppevs.project_id = p_src_project_id
8552 AND ppevs.element_version_id = ppcot.version_id
8553 AND ppcot.context = 'WORKPLAN' ;
8554
8555 --This cursor gets the LATEST UPDATED WORKING version from the src project, which is SELECTED for
8556 --copying and is NOT Publish Upon Creation
8557 CURSOR get_latest_working_version IS
8558 SELECT element_version_id FROM
8559 ( SELECT ppevs.element_version_id
8560 FROM pa_proj_elem_ver_structure ppevs,
8561 pa_project_copy_options_tmp ppcot
8562 WHERE ppevs.element_version_id = ppcot.version_id
8563 AND ppevs.project_id = p_src_project_id
8564 AND ppevs.status_code = 'STRUCTURE_WORKING'
8565 AND ppcot.context = 'WORKPLAN'
8566 AND ppcot.flag = 'N'
8567 ORDER BY ppevs.last_update_date desc)
8568 WHERE rownum = 1;
8569
8570 --Gets the LATEST PUBLISHED VERSION from the source project, which is SELECTED for copying and is
8571 --NOT Publish Upon Creation
8572 CURSOR get_latest_published IS
8573 SELECT ppevs.element_version_id
8574 FROM pa_proj_elem_ver_structure ppevs,
8575 pa_project_copy_options_tmp ppcot
8576 WHERE ppevs.latest_eff_published_flag = 'Y'
8577 AND ppevs.status_code = 'STRUCTURE_PUBLISHED'
8578 AND ppevs.element_version_id = ppcot.version_id
8579 AND ppcot.context = 'WORKPLAN'
8580 AND ppevs.project_id= p_src_project_id --bug 4868867 sql id = 14909148
8581 AND ppcot.flag = 'N' ;
8582
8583 --Gets the LAST PUBLISHED version from the source project, which is SELECTED for copying but is
8584 --NOT selected for PUBLISH UPON CREATION
8585 CURSOR get_last_published IS
8586 SELECT element_version_id FROM
8587 ( SELECT ppevs.element_version_id
8588 FROM pa_proj_elem_ver_structure ppevs,
8589 pa_project_copy_options_tmp ppcot
8590 WHERE ppevs.element_version_id = ppcot.version_id
8591 AND ppevs.status_code = 'STRUCTURE_PUBLISHED'
8592 AND ppevs.project_id = p_src_project_id
8593 AND ppcot.context = 'WORKPLAN'
8594 AND ppcot.flag = 'N'
8595 ORDER BY ppevs.published_date DESC )
8596 WHERE ROWNUM = 1;
8597
8598 --l_puc_version_id NUMBER(15); Bug 3916763 : Moved this variable outside so that it can be used ahead
8599 --l_current_working_selected NUMBER(15) := NULL; Bug 3916763 : Moved this variable outside so that it can be used ahead
8600
8601 BEGIN
8602
8603 --Fetch the version which is selected for PUBLISH UPON CREATION
8604 OPEN get_puc_version_id;
8605 FETCH get_puc_version_id INTO l_puc_version_id;
8606 CLOSE get_puc_version_id;
8607
8608 --Fetch the CURRENT WORKING version, if it has been SELECTED for copying
8609 OPEN get_current_working_selected;
8610 FETCH get_current_working_selected INTO l_current_working_selected;
8611
8612 IF l_debug_mode = 'Y' THEN
8613 pa_debug.write(G_PKG_NAME, 'l_puc_version_id='||l_puc_version_id, l_debug_level3);
8614 pa_debug.write(G_PKG_NAME, 'l_current_working_selected='||l_current_working_selected, l_debug_level3);
8615 END IF;
8616
8617
8618 --If the CURRENT WORKING version is SELECTED for copying and is NOT Publish Upon Creatiion
8619 IF l_current_working_selected IS NOT NULL AND l_current_working_selected <> nvl(l_puc_version_id,-88) THEN
8620 l_cw_version_id := l_current_working_selected;
8621 ELSE
8622 OPEN get_latest_working_version;
8623 FETCH get_latest_working_version INTO l_cw_version_id;
8624 IF get_latest_working_version%NOTFOUND THEN
8625 OPEN get_latest_published;
8626 FETCH get_latest_published INTO l_cw_version_id;
8627 IF get_latest_published %NOTFOUND THEN
8628 OPEN get_last_published;
8629 FETCH get_last_published INTO l_cw_version_id;
8630 CLOSE get_last_published;
8631 END IF;
8632 CLOSE get_latest_published;
8633 END IF;
8634 CLOSE get_latest_working_version;
8635 END IF;
8636 CLOSE get_current_working_selected;
8637
8638 IF l_debug_mode = 'Y' THEN
8639 pa_debug.write(G_PKG_NAME, 'l_cw_version_id='||l_cw_version_id, l_debug_level3);
8640 END IF;
8641 END;
8642 END IF; --IF versioning is enabled
8643 /** END OF CODE TO DETERMINE CURRENT WORKING VERSION IN DESTINATION PROJECT **/
8644
8645 IF l_debug_mode = 'Y' THEN
8646 Pa_Debug.WRITE(G_PKG_NAME, 'Source version to be set as current working in dest project : '||l_cw_version_id,
8647 l_debug_level3);
8648 Pa_Debug.WRITE(G_PKG_NAME, 'Printing l_dest_wp_structure_id: '||l_dest_wp_structure_id,
8649 l_debug_level3);
8650 END IF;
8651
8652
8653 --Loop for selected wp versions
8654 FOR rec_dest_wp_struc_versions IN cur_get_dest_wp_struc_versions(l_dest_wp_structure_id) LOOP
8655
8656 IF rec_dest_wp_struc_versions.flag = 'Y' THEN
8657 --In case of versioning disabled, publish upon creation flag would always be 'Y'
8658 l_dest_status_code := 'STRUCTURE_PUBLISHED';
8659 l_dest_latest_eff_pub_flag := 'Y';
8660 l_dest_current_working_flag := 'N';
8661 --We need to make a working copy of the published version in SHARED case and when
8662 --versioning is enabled, becuase in SHARED, it is not possible to create a WORKING copy from
8663 --a publshied version
8664
8665 --Bug 7270458 Need to create a workign version if auto publish is enabled for versioning
8666 --enabled workplan.
8667 --IF 'Y' = l_shared AND 'Y' = l_versioning_enabled THEN
8668 IF 'Y' = l_versioning_enabled THEN --Bug 7270458
8669 l_shared_make_working_copy := rec_dest_wp_struc_versions.element_version_id;
8670 END IF;
8671 --3916763 Begin
8672 l_submit_wf_required := 'N';
8673
8674 IF l_debug_mode = 'Y' THEN
8675 pa_debug.write(G_PKG_NAME, 'l_workplan_enabled='||l_workplan_enabled, l_debug_level3);
8676 pa_debug.write(G_PKG_NAME, 'l_versioning_enabled='||l_versioning_enabled, l_debug_level3);
8677 pa_debug.write(G_PKG_NAME, 'l_min_one_wp_ver_sel='||l_min_one_wp_ver_sel, l_debug_level3);
8678 pa_debug.write(G_PKG_NAME, 'l_cw_version_id='||l_cw_version_id, l_debug_level3);
8679 pa_debug.write(G_PKG_NAME, 'rec_dest_wp_struc_versions.attribute15='||rec_dest_wp_struc_versions.attribute15, l_debug_level3);
8680 pa_debug.write(G_PKG_NAME, 'l_shared='||l_shared, l_debug_level3);
8681 pa_debug.write(G_PKG_NAME, 'p_dest_template_flag='||p_dest_template_flag, l_debug_level3);
8682 END IF;
8683
8684 IF NVL(l_workplan_enabled,'N') = 'Y' AND nvl(l_versioning_enabled,'N') = 'Y' AND nvl(l_min_one_wp_ver_sel,'N') = 'Y' THEN
8685 OPEN c_get_approval_options;
8686 FETCH c_get_approval_options INTO l_wp_approval_reqd_flag, l_wp_auto_publish_flag,l_wp_approver_source_id;
8687 CLOSE c_get_approval_options;
8688
8689 IF l_debug_mode = 'Y' THEN
8690 pa_debug.write(G_PKG_NAME, 'l_wp_approval_reqd_flag='||l_wp_approval_reqd_flag, l_debug_level3);
8691 pa_debug.write(G_PKG_NAME, 'l_wp_auto_publish_flag='||l_wp_auto_publish_flag, l_debug_level3);
8692 pa_debug.write(G_PKG_NAME, 'l_wp_approver_source_id='||l_wp_approver_source_id, l_debug_level3);
8693 pa_debug.write(G_PKG_NAME, 'fnd_global.employee_id='||fnd_global.employee_id, l_debug_level3);
8694 END IF;
8695
8696 IF NVL(l_wp_approval_reqd_flag,'N') <> 'N' THEN
8697 IF nvl(fnd_global.employee_id,-999) <> NVL(l_wp_approver_source_id,-999) THEN
8698 -- 3916763 : Use fnd_global.employee_id instead of fnd_global.party_id
8699 l_submit_wf_required := 'Y';
8700 l_dest_status_code := 'STRUCTURE_WORKING';
8701 l_dest_latest_eff_pub_flag := 'N';
8702 IF l_current_working_selected = nvl(l_puc_version_id,-88) OR 'Y' = l_shared OR 'Y' = p_dest_template_flag THEN
8703 l_dest_current_working_flag := 'Y';
8704 ELSE
8705 l_dest_current_working_flag := 'N';
8706 END IF;
8707 l_shared_make_working_copy := null;
8708 l_submit_wf_str_version_id := rec_dest_wp_struc_versions.element_version_id;
8709 l_submit_wf_str_id := l_dest_wp_structure_id;
8710 END IF;
8711 END IF;
8712 END IF;
8713 --3916763 End
8714
8715 --bug 3907862, start
8716 OPEN get_published_ver_num(p_dest_project_id, l_dest_wp_structure_id);
8717 FETCH get_published_ver_num INTO l_struct_version_number;
8718 CLOSE get_published_ver_num;
8719 IF l_debug_mode = 'Y' THEN
8720 Pa_Debug.WRITE(G_PKG_NAME, 'After Getting published version l_struct_version_number: '||l_struct_version_number,
8721 l_debug_level3);
8722 END If;
8723 --bug 3907862, end
8724
8725 ELSE
8726 --In case of creating template, Publish Upon Creation flag is always 'N'
8727 l_dest_status_code := 'STRUCTURE_WORKING';
8728 l_dest_latest_eff_pub_flag := 'N';
8729 IF l_cw_version_id = rec_dest_wp_struc_versions.attribute15 OR 'Y' = l_shared OR 'Y' = p_dest_template_flag THEN
8730 l_dest_current_working_flag := 'Y';
8731 ELSE
8732 l_dest_current_working_flag := 'N';
8733 END IF;
8734
8735 --bug 3907862, start
8736 OPEN get_working_ver_num(p_dest_project_id, l_dest_wp_structure_id);
8737 FETCH get_working_ver_num INTO l_struct_version_number;
8738 CLOSE get_working_ver_num;
8739 IF l_debug_mode = 'Y' THEN
8740 Pa_Debug.WRITE(G_PKG_NAME, 'After Getting working version l_struct_version_number: '||l_struct_version_number,
8741 l_debug_level3);
8742 END If;
8743 --bug 3907862, end
8744
8745 END IF;
8746
8747 IF l_debug_mode = 'Y' THEN
8748 Pa_Debug.WRITE(G_PKG_NAME, 'Creating version : '||rec_dest_wp_struc_versions.element_version_id,
8749 l_debug_level3);
8750 END IF;
8751
8752
8753 INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
8754 PEV_STRUCTURE_ID
8755 ,ELEMENT_VERSION_ID
8756 ,VERSION_NUMBER
8757 ,NAME
8758 ,PROJECT_ID
8759 ,PROJ_ELEMENT_ID
8760 ,DESCRIPTION
8761 ,EFFECTIVE_DATE
8762 ,PUBLISHED_DATE
8763 ,PUBLISHED_BY_PERSON_ID
8764 ,CURRENT_BASELINE_DATE
8765 ,CURRENT_FLAG
8766 ,CURRENT_BASELINE_PERSON_ID
8767 ,ORIGINAL_BASELINE_DATE
8768 ,ORIGINAL_FLAG
8769 ,ORIGINAL_BASELINE_PERSON_ID
8770 ,LOCK_STATUS_CODE
8771 ,LOCKED_BY_PERSON_ID
8772 ,LOCKED_DATE
8773 ,STATUS_CODE
8774 ,WF_STATUS_CODE
8775 ,LATEST_EFF_PUBLISHED_FLAG
8776 ,RECORD_VERSION_NUMBER
8777 ,WBS_RECORD_VERSION_NUMBER
8778 ,CREATION_DATE
8779 ,CREATED_BY
8780 ,LAST_UPDATE_DATE
8781 ,LAST_UPDATED_BY
8782 ,LAST_UPDATE_LOGIN
8783 ,change_reason_code
8784 ,PROCESS_UPDATE_WBS_FLAG
8785 ,current_working_flag
8786 ,source_object_id
8787 ,source_object_type
8788 )
8789 SELECT
8790 pa_proj_elem_ver_structure_s.nextval
8791 ,rec_dest_wp_struc_versions.element_version_id
8792 --,ppevs.version_number --bug 3907862, insert the new version number, intead of coying the old.
8793 ,l_struct_version_number
8794 ,ppevs.name
8795 ,p_dest_project_id
8796 ,ppe.proj_element_id
8797 ,ppevs.DESCRIPTION
8798 ,ppevs.EFFECTIVE_DATE
8799 ,decode(l_dest_status_code, 'STRUCTURE_PUBLISHED', sysdate, to_date(NULL))
8800 ,decode(l_dest_status_code, 'STRUCTURE_PUBLISHED', l_publish_person_id, NULL)
8801 ,decode(l_dest_latest_eff_pub_flag, 'Y', trunc(sysdate), to_date(NULL))
8802 ,l_dest_latest_eff_pub_flag
8803 ,decode(l_dest_latest_eff_pub_flag, 'Y', l_publish_person_id, NULL)
8804 ,decode(l_dest_latest_eff_pub_flag, 'Y', trunc(sysdate), to_date(NULL))
8805 ,l_dest_latest_eff_pub_flag
8806 ,decode(l_dest_latest_eff_pub_flag, 'Y', l_publish_person_id, NULL)
8807 ,'UNLOCKED'
8808 ,null
8809 ,null
8810 ,l_dest_status_code
8811 ,ppevs.WF_STATUS_CODE
8812 ,l_dest_latest_eff_pub_flag --If version is 'publish upon creation', it is the latest eff published version
8813 --In case of version disabled, it'll always be 'publish upon creation'
8814 ,ppevs.RECORD_VERSION_NUMBER
8815 ,ppevs.WBS_RECORD_VERSION_NUMBER
8816 ,SYSDATE
8817 ,l_user_id
8818 ,SYSDATE
8819 ,l_user_id
8820 ,l_login_id
8821 ,ppevs.change_reason_code
8822 ,ppevs.process_update_wbs_flag
8823 ,decode(l_versioning_enabled,'N','Y',l_dest_current_working_flag)
8824 --If versioning is disabled, both LATEST PUBLISHED AND CURRENT WORKING FLAGS are 'Y'
8825 ,p_dest_project_id
8826 ,'PA_PROJECTS'
8827 FROM pa_proj_elem_ver_structure ppevs,
8828 pa_proj_elements ppe
8829 WHERE ppevs.project_id = p_src_project_id
8830 AND ppevs.element_version_id = rec_dest_wp_struc_versions.attribute15
8831 AND ppevs.proj_element_id = ppe.attribute15
8832 AND ppe.proj_element_id = l_dest_wp_structure_id;
8833 END LOOP;
8834
8835 --If it is a shared structure and the only WP version selected is Publish Upon Creation, then
8836 --create a working copy of the Published version
8837 IF l_shared_make_working_copy IS NOT NULL THEN
8838 SELECT pa_proj_element_versions_s.nextval INTO l_new_wp_ver_id
8839 FROM dual;
8840
8841 SELECT meaning INTO l_prefix
8842 FROM pa_lookups
8843 WHERE lookup_type = 'PA_STRUCTURES_PREFIX'
8844 AND lookup_code = 'PA_PREFIX_COPY';
8845
8846 IF l_debug_mode = 'Y' THEN
8847 Pa_Debug.WRITE(G_PKG_NAME, 'Making working copy of '||l_shared_make_working_copy,
8848 l_debug_level3);
8849 END IF;
8850
8851 --Make a copy of the published version
8852 INSERT INTO pa_proj_element_versions(
8853 ELEMENT_VERSION_ID
8854 ,PROJ_ELEMENT_ID
8855 ,OBJECT_TYPE
8856 ,PROJECT_ID
8857 ,PARENT_STRUCTURE_VERSION_ID
8858 ,DISPLAY_SEQUENCE
8859 ,WBS_LEVEL
8860 ,WBS_NUMBER
8861 ,CREATION_DATE
8862 ,CREATED_BY
8863 ,LAST_UPDATE_DATE
8864 ,LAST_UPDATED_BY
8865 ,LAST_UPDATE_LOGIN
8866 ,RECORD_VERSION_NUMBER
8867 ,attribute15 --This column stores the stucture version id in the src project, to be used to create relationships.
8868 ,ATTRIBUTE_CATEGORY
8869 ,ATTRIBUTE1
8870 ,ATTRIBUTE2
8871 ,ATTRIBUTE3
8872 ,ATTRIBUTE4
8873 ,ATTRIBUTE5
8874 ,ATTRIBUTE6
8875 ,ATTRIBUTE7
8876 ,ATTRIBUTE8
8877 ,ATTRIBUTE9
8878 ,ATTRIBUTE10
8879 ,ATTRIBUTE11
8880 ,ATTRIBUTE12
8881 ,ATTRIBUTE13
8882 ,ATTRIBUTE14
8883 ,TASK_UNPUB_VER_STATUS_CODE
8884 ,FINANCIAL_TASK_FLAG
8885 ,source_object_id
8886 ,source_object_type
8887 )
8888 SELECT
8889 l_new_wp_ver_id
8890 ,ppev.proj_element_id
8891 ,ppev.object_type
8892 ,ppev.project_id
8893 ,l_new_wp_ver_id
8894 ,ppev.DISPLAY_SEQUENCE
8895 ,ppev.WBS_LEVEL
8896 ,ppev.WBS_NUMBER
8897 ,SYSDATE ------CREATION_DATE
8898 ,l_user_id ------CREATED_BY
8899 ,SYSDATE ------LAST_UPDATE_DATE
8900 ,l_user_id ------LAST_UPDATED_BY
8901 ,l_login_id ------LAST_UPDATE_LOGIN
8902 ,ppev.RECORD_VERSION_NUMBER ------RECORD_VERSION_NUMBER
8903 ,ppev.attribute15
8904 ,ppev.ATTRIBUTE_CATEGORY
8905 ,ppev.ATTRIBUTE1
8906 ,ppev.ATTRIBUTE2
8907 ,ppev.ATTRIBUTE3
8908 ,ppev.ATTRIBUTE4
8909 ,ppev.ATTRIBUTE5
8910 ,ppev.ATTRIBUTE6
8911 ,ppev.ATTRIBUTE7
8912 ,ppev.ATTRIBUTE8
8913 ,ppev.ATTRIBUTE9
8914 ,ppev.ATTRIBUTE10
8915 ,ppev.ATTRIBUTE11
8916 ,ppev.ATTRIBUTE12
8917 ,ppev.ATTRIBUTE13
8918 ,ppev.ATTRIBUTE14
8919 ,ppev.TASK_UNPUB_VER_STATUS_CODE
8920 ,ppev.FINANCIAL_TASK_FLAG
8921 ,ppev.project_id
8922 ,'PA_PROJECTS'
8923 FROM pa_proj_element_versions ppev
8924 WHERE ppev.project_id = p_dest_project_id
8925 AND ppev.element_version_id = l_shared_make_working_copy ;
8926
8927 INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
8928 PEV_STRUCTURE_ID
8929 ,ELEMENT_VERSION_ID
8930 ,VERSION_NUMBER
8931 ,NAME
8932 ,PROJECT_ID
8933 ,PROJ_ELEMENT_ID
8934 ,DESCRIPTION
8935 ,EFFECTIVE_DATE
8936 ,PUBLISHED_DATE
8937 ,PUBLISHED_BY_PERSON_ID
8938 ,CURRENT_BASELINE_DATE
8939 ,CURRENT_FLAG
8940 ,CURRENT_BASELINE_PERSON_ID
8941 ,ORIGINAL_BASELINE_DATE
8942 ,ORIGINAL_FLAG
8943 ,ORIGINAL_BASELINE_PERSON_ID
8944 ,LOCK_STATUS_CODE
8945 ,LOCKED_BY_PERSON_ID
8946 ,LOCKED_DATE
8947 ,STATUS_CODE
8948 ,WF_STATUS_CODE
8949 ,LATEST_EFF_PUBLISHED_FLAG
8950 ,RECORD_VERSION_NUMBER
8951 ,WBS_RECORD_VERSION_NUMBER
8952 ,CREATION_DATE
8953 ,CREATED_BY
8954 ,LAST_UPDATE_DATE
8955 ,LAST_UPDATED_BY
8956 ,LAST_UPDATE_LOGIN
8957 ,change_reason_code
8958 ,PROCESS_UPDATE_WBS_FLAG
8959 ,current_working_flag
8960 ,source_object_id
8961 ,source_object_type
8962 )
8963 SELECT
8964 pa_proj_elem_ver_structure_s.nextval
8965 ,l_new_wp_ver_id
8966 ,ppevs.version_number
8967 ,substr(l_prefix||ppevs.name, 1, 240)
8968 ,ppevs.project_id
8969 ,ppe.proj_element_id
8970 ,ppevs.DESCRIPTION
8971 ,ppevs.EFFECTIVE_DATE
8972 ,to_date(NULL)
8973 ,NULL
8974 ,to_date(NULL)
8975 ,'N'
8976 ,NULL
8977 ,to_date(NULL)
8978 ,'N'
8979 ,NULL
8980 ,'UNLOCKED'
8981 ,null
8982 ,null
8983 ,'STRUCTURE_WORKING'
8984 ,ppevs.WF_STATUS_CODE
8985 ,'N'
8986 ,ppevs.RECORD_VERSION_NUMBER
8987 ,ppevs.WBS_RECORD_VERSION_NUMBER
8988 ,SYSDATE
8989 ,l_user_id
8990 ,SYSDATE
8991 ,l_user_id
8992 ,l_login_id
8993 ,ppevs.change_reason_code
8994 ,ppevs.process_update_wbs_flag
8995 ,'Y'
8996 ,ppevs.project_id
8997 ,'PA_PROJECTS'
8998 FROM pa_proj_elem_ver_structure ppevs,
8999 pa_proj_elements ppe
9000 WHERE ppevs.project_id = p_dest_project_id
9001 AND ppevs.element_version_id = l_shared_make_working_copy
9002 AND ppevs.proj_element_id = ppe.proj_element_id
9003 AND ppe.proj_element_id = l_dest_wp_structure_id;
9004
9005 END IF;--If l_shared_make_working_copy IS NOT NULL
9006
9007 --Create tasks in the selected WP versions
9008 IF 'Y' = l_shared THEN
9009 --If SHARED case, join with PA_TASKS table
9010 INSERT INTO pa_proj_elements(
9011 PROJ_ELEMENT_ID
9012 ,PROJECT_ID
9013 ,OBJECT_TYPE
9014 ,ELEMENT_NUMBER
9015 ,NAME
9016 ,DESCRIPTION
9017 ,STATUS_CODE
9018 ,WF_STATUS_CODE
9019 ,PM_SOURCE_CODE
9020 ,PM_SOURCE_REFERENCE
9021 ,CLOSED_DATE
9022 ,LOCATION_ID
9023 ,MANAGER_PERSON_ID
9024 ,CARRYING_OUT_ORGANIZATION_ID
9025 ,TYPE_ID
9026 ,PRIORITY_CODE
9027 ,CREATION_DATE
9028 ,CREATED_BY
9029 ,LAST_UPDATE_DATE
9030 ,LAST_UPDATED_BY
9031 ,LAST_UPDATE_LOGIN
9032 ,RECORD_VERSION_NUMBER
9033 ,REQUEST_ID
9034 ,PROGRAM_APPLICATION_ID
9035 ,PROGRAM_ID
9036 ,PROGRAM_UPDATE_DATE
9037 ,LINK_TASK_FLAG
9038 ,BASELINE_START_DATE
9039 ,BASELINE_FINISH_DATE
9040 ,progress_outdated_flag
9041 ,ATTRIBUTE_CATEGORY
9042 ,ATTRIBUTE1
9043 ,ATTRIBUTE2
9044 ,ATTRIBUTE3
9045 ,ATTRIBUTE4
9046 ,ATTRIBUTE5
9047 ,ATTRIBUTE6
9048 ,ATTRIBUTE7
9049 ,ATTRIBUTE8
9050 ,ATTRIBUTE9
9051 ,ATTRIBUTE10
9052 ,ATTRIBUTE11
9053 ,ATTRIBUTE12
9054 ,ATTRIBUTE13
9055 ,ATTRIBUTE14
9056 ,ATTRIBUTE15
9057 ,parent_structure_id
9058 ,TYPE_CODE
9059 ,INC_PROJ_PROGRESS_FLAG
9060 ,WQ_ITEM_CODE
9061 ,WQ_UOM_CODE
9062 ,WQ_ACTUAL_ENTRY_CODE
9063 ,TASK_PROGRESS_ENTRY_PAGE_ID
9064 ,BASELINE_DURATION
9065 ,PHASE_CODE
9066 ,PHASE_VERSION_ID
9067 ,PROGRESS_WEIGHT
9068 ,BASE_PERCENT_COMP_DERIV_CODE
9069 ,FUNCTION_CODE
9070 ,ENABLE_WF_FLAG
9071 ,WF_ITEM_TYPE
9072 ,WF_PROCESS
9073 ,WF_START_LEAD_DAYS
9074 ,source_object_id
9075 ,source_object_type
9076 )
9077 SELECT
9078 nvl(pt.task_id,pa_tasks_s.nextval)
9079 ,p_dest_project_id
9080 ,ppe.object_type
9081 ,ppe.element_number
9082 ,ppe.name
9083 ,ppe.DESCRIPTION
9084 ,INITIAL_STATUS_CODE
9085 ,ppe.WF_STATUS_CODE
9086 ,NULL --bug 3810263 replacing ppe.PM_SOURCE_CODE
9087 ,NULL --bug 3810263 replacing ppe.PM_SOURCE_REFERENCE
9088 ,ppe.CLOSED_DATE
9089 ,ppe.LOCATION_ID
9090 ,ppe.MANAGER_PERSON_ID
9091 ,decode(ppe.CARRYING_OUT_ORGANIZATION_ID,l_old_proj_org_id, l_new_proj_org_id,
9092 ppe.CARRYING_OUT_ORGANIZATION_ID) -- Bug 3387963
9093 ,ppe.TYPE_ID
9094 ,ppe.PRIORITY_CODE
9095 ,SYSDATE
9096 ,l_user_id
9097 ,SYSDATE
9098 ,l_user_id
9099 ,l_login_id
9100 ,ppe.RECORD_VERSION_NUMBER
9101 ,ppe.REQUEST_ID
9102 ,ppe.PROGRAM_APPLICATION_ID
9103 ,ppe.PROGRAM_ID
9104 ,ppe.PROGRAM_UPDATE_DATE
9105 ,ppe.LINK_TASK_FLAG
9106 ,ppe.BASELINE_START_DATE
9107 ,ppe.BASELINE_FINISH_DATE
9108 ,'N' --,ppe.progress_outdated_flag
9109 ,ppe.ATTRIBUTE_CATEGORY
9110 ,ppe.ATTRIBUTE1
9111 ,ppe.ATTRIBUTE2
9112 ,ppe.ATTRIBUTE3
9113 ,ppe.ATTRIBUTE4
9114 ,ppe.ATTRIBUTE5
9115 ,ppe.ATTRIBUTE6
9116 ,ppe.ATTRIBUTE7
9117 ,ppe.ATTRIBUTE8
9118 ,ppe.ATTRIBUTE9
9119 ,ppe.ATTRIBUTE10
9120 ,ppe.ATTRIBUTE11
9121 ,ppe.ATTRIBUTE12
9122 ,ppe.ATTRIBUTE13
9123 ,ppe.ATTRIBUTE14
9124 ,ppe.proj_element_id --attribute 15 is used to store old ids.
9125 ,l_dest_wp_structure_id
9126 ,ppe.TYPE_CODE
9127 ,ppe.INC_PROJ_PROGRESS_FLAG
9128 ,ppe.WQ_ITEM_CODE
9129 ,ppe.WQ_UOM_CODE
9130 ,ppe.WQ_ACTUAL_ENTRY_CODE
9131 ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
9132 ,ppe.BASELINE_DURATION
9133 ,ppe.PHASE_CODE
9134 ,ppe.PHASE_VERSION_ID
9135 ,ppe.PROGRESS_WEIGHT
9136 ,ppe.BASE_PERCENT_COMP_DERIV_CODE
9137 ,ppe.FUNCTION_CODE
9138 ,'N'
9139 ,ppe.WF_ITEM_TYPE
9140 ,ppe.WF_PROCESS
9141 ,ppe.WF_START_LEAD_DAYS
9142 ,p_dest_project_id
9143 ,'PA_PROJECTS'
9144 FROM pa_task_types ptt,
9145 pa_tasks pt,
9146 pa_proj_elements ppe
9147 WHERE ptt.object_type = 'PA_TASKS'
9148 AND ppe.type_id = ptt.task_type_id
9149 AND nvl(ppe.link_task_flag,'N') <> 'Y' -- 4348868
9150 AND pt.task_number (+) = substrb(rtrim(ppe.element_number),1,25) -- Substrb added for Bug 5152448
9151 AND pt.project_id (+) = p_dest_project_id
9152 AND ppe.proj_element_id IN
9153 ( SELECT distinct ppev.proj_element_id
9154 FROM PA_PROJ_ELEMENT_VERSIONS ppev,
9155 PA_PROJECT_COPY_OPTIONS_TMP ppcot
9156 WHERE ppcot.CONTEXT = 'WORKPLAN'
9157 AND ppev.parent_structure_version_id = ppcot.version_id
9158 AND ppev.project_id = p_src_project_id
9159 AND ppev.object_type = 'PA_TASKS' ) ;
9160 ELSE
9161 --If SPLIT case, there should be no join with PA_TASKS table
9162 INSERT INTO pa_proj_elements(
9163 PROJ_ELEMENT_ID
9164 ,PROJECT_ID
9165 ,OBJECT_TYPE
9166 ,ELEMENT_NUMBER
9167 ,NAME
9168 ,DESCRIPTION
9169 ,STATUS_CODE
9170 ,WF_STATUS_CODE
9171 ,PM_SOURCE_CODE
9172 ,PM_SOURCE_REFERENCE
9173 ,CLOSED_DATE
9174 ,LOCATION_ID
9175 ,MANAGER_PERSON_ID
9176 ,CARRYING_OUT_ORGANIZATION_ID
9177 ,TYPE_ID
9178 ,PRIORITY_CODE
9179 ,CREATION_DATE
9180 ,CREATED_BY
9181 ,LAST_UPDATE_DATE
9182 ,LAST_UPDATED_BY
9183 ,LAST_UPDATE_LOGIN
9184 ,RECORD_VERSION_NUMBER
9185 ,REQUEST_ID
9186 ,PROGRAM_APPLICATION_ID
9187 ,PROGRAM_ID
9188 ,PROGRAM_UPDATE_DATE
9189 ,LINK_TASK_FLAG
9190 ,BASELINE_START_DATE
9191 ,BASELINE_FINISH_DATE
9192 ,progress_outdated_flag
9193 ,ATTRIBUTE_CATEGORY
9194 ,ATTRIBUTE1
9195 ,ATTRIBUTE2
9196 ,ATTRIBUTE3
9197 ,ATTRIBUTE4
9198 ,ATTRIBUTE5
9199 ,ATTRIBUTE6
9200 ,ATTRIBUTE7
9201 ,ATTRIBUTE8
9202 ,ATTRIBUTE9
9203 ,ATTRIBUTE10
9204 ,ATTRIBUTE11
9205 ,ATTRIBUTE12
9206 ,ATTRIBUTE13
9207 ,ATTRIBUTE14
9208 ,ATTRIBUTE15
9209 ,parent_structure_id
9210 ,TYPE_CODE
9211 ,INC_PROJ_PROGRESS_FLAG
9212 ,WQ_ITEM_CODE
9213 ,WQ_UOM_CODE
9214 ,WQ_ACTUAL_ENTRY_CODE
9215 ,TASK_PROGRESS_ENTRY_PAGE_ID
9216 ,BASELINE_DURATION
9217 ,PHASE_CODE
9218 ,PHASE_VERSION_ID
9219 ,PROGRESS_WEIGHT
9220 ,BASE_PERCENT_COMP_DERIV_CODE
9221 ,FUNCTION_CODE
9222 ,ENABLE_WF_FLAG
9223 ,WF_ITEM_TYPE
9224 ,WF_PROCESS
9225 ,WF_START_LEAD_DAYS
9226 ,source_object_id
9227 ,source_object_type
9228 )
9229 SELECT
9230 pa_tasks_s.nextval
9231 ,p_dest_project_id
9232 ,ppe.object_type
9233 ,ppe.element_number
9234 ,ppe.name
9235 ,ppe.DESCRIPTION
9236 ,INITIAL_STATUS_CODE
9237 ,ppe.WF_STATUS_CODE
9238 ,NULL --bug 3810263 replacing ppe.PM_SOURCE_CODE
9239 ,NULL --bug 3810263 replacing ppe.PM_SOURCE_REFERENCE
9240 ,ppe.CLOSED_DATE
9241 ,ppe.LOCATION_ID
9242 ,ppe.MANAGER_PERSON_ID
9243 ,decode(ppe.CARRYING_OUT_ORGANIZATION_ID,l_old_proj_org_id, l_new_proj_org_id,
9244 ppe.CARRYING_OUT_ORGANIZATION_ID) -- Bug 3387963
9245 ,ppe.TYPE_ID
9246 ,ppe.PRIORITY_CODE
9247 ,SYSDATE
9248 ,l_user_id
9249 ,SYSDATE
9250 ,l_user_id
9251 ,l_login_id
9252 ,ppe.RECORD_VERSION_NUMBER
9253 ,ppe.REQUEST_ID
9254 ,ppe.PROGRAM_APPLICATION_ID
9255 ,ppe.PROGRAM_ID
9256 ,ppe.PROGRAM_UPDATE_DATE
9257 ,ppe.LINK_TASK_FLAG
9258 ,ppe.BASELINE_START_DATE
9259 ,ppe.BASELINE_FINISH_DATE
9260 ,'N' --,ppe.progress_outdated_flag
9261 ,ppe.ATTRIBUTE_CATEGORY
9262 ,ppe.ATTRIBUTE1
9263 ,ppe.ATTRIBUTE2
9264 ,ppe.ATTRIBUTE3
9265 ,ppe.ATTRIBUTE4
9266 ,ppe.ATTRIBUTE5
9267 ,ppe.ATTRIBUTE6
9268 ,ppe.ATTRIBUTE7
9269 ,ppe.ATTRIBUTE8
9270 ,ppe.ATTRIBUTE9
9271 ,ppe.ATTRIBUTE10
9272 ,ppe.ATTRIBUTE11
9273 ,ppe.ATTRIBUTE12
9274 ,ppe.ATTRIBUTE13
9275 ,ppe.ATTRIBUTE14
9276 ,ppe.proj_element_id --attribute 15 is used to store old ids.
9277 ,l_dest_wp_structure_id
9278 ,ppe.TYPE_CODE
9279 ,ppe.INC_PROJ_PROGRESS_FLAG
9280 ,ppe.WQ_ITEM_CODE
9281 ,ppe.WQ_UOM_CODE
9282 ,ppe.WQ_ACTUAL_ENTRY_CODE
9283 ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
9284 ,ppe.BASELINE_DURATION
9285 ,ppe.PHASE_CODE
9286 ,ppe.PHASE_VERSION_ID
9287 ,ppe.PROGRESS_WEIGHT
9288 ,ppe.BASE_PERCENT_COMP_DERIV_CODE
9289 ,ppe.FUNCTION_CODE
9290 ,'N'
9291 ,ppe.WF_ITEM_TYPE
9292 ,ppe.WF_PROCESS
9293 ,ppe.WF_START_LEAD_DAYS
9294 ,p_dest_project_id
9295 ,'PA_PROJECTS'
9296 FROM pa_task_types ptt,
9297 pa_proj_elements ppe
9298 WHERE ptt.object_type = 'PA_TASKS'
9299 AND ppe.type_id = ptt.task_type_id
9300 AND nvl(ppe.link_task_flag,'N') <> 'Y' -- 4348868
9301 AND ppe.proj_element_id IN
9302 ( SELECT distinct ppev.proj_element_id
9303 FROM PA_PROJ_ELEMENT_VERSIONS ppev,
9304 PA_PROJECT_COPY_OPTIONS_TMP ppcot
9305 WHERE ppcot.CONTEXT = 'WORKPLAN'
9306 AND ppev.parent_structure_version_id = ppcot.version_id
9307 AND ppev.project_id = p_src_project_id
9308 AND ppev.object_type = 'PA_TASKS' ) ;
9309 END IF;
9310
9311 --Copy tasks versions for tasks belonging to the selected wp versions
9312 INSERT INTO pa_proj_element_versions(
9313 ELEMENT_VERSION_ID
9314 ,PROJ_ELEMENT_ID
9315 ,OBJECT_TYPE
9316 ,PROJECT_ID
9317 ,PARENT_STRUCTURE_VERSION_ID
9318 ,DISPLAY_SEQUENCE
9319 ,WBS_LEVEL
9320 ,WBS_NUMBER
9321 ,CREATION_DATE
9322 ,CREATED_BY
9323 ,LAST_UPDATE_DATE
9324 ,LAST_UPDATED_BY
9325 ,LAST_UPDATE_LOGIN
9326 ,RECORD_VERSION_NUMBER
9327 ,attribute15 --this column is used to store task ver id of the source project's task versions to be used to created relationships.
9328 ,ATTRIBUTE_CATEGORY
9329 ,ATTRIBUTE1
9330 ,ATTRIBUTE2
9331 ,ATTRIBUTE3
9332 ,ATTRIBUTE4
9333 ,ATTRIBUTE5
9334 ,ATTRIBUTE6
9335 ,ATTRIBUTE7
9336 ,ATTRIBUTE8
9337 ,ATTRIBUTE9
9338 ,ATTRIBUTE10
9339 ,ATTRIBUTE11
9340 ,ATTRIBUTE12
9341 ,ATTRIBUTE13
9342 ,ATTRIBUTE14
9343 ,TASK_UNPUB_VER_STATUS_CODE
9344 ,FINANCIAL_TASK_FLAG
9345 ,source_object_id
9346 ,source_object_type
9347 )
9348 SELECT
9349 pa_proj_element_versions_s.nextval
9350 ,ppe.proj_element_id
9351 ,ppev.object_type
9352 ,p_dest_project_id
9353 ,ppev2.element_version_id
9354 ,ppev.DISPLAY_SEQUENCE
9355 ,ppev.WBS_LEVEL
9356 ,ppev.WBS_NUMBER
9357 ,SYSDATE ------CREATION_DATE
9358 ,l_user_id ------CREATED_BY
9359 ,SYSDATE ------LAST_UPDATE_DATE
9360 ,l_user_id ------LAST_UPDATED_BY
9361 ,l_login_id ------LAST_UPDATE_LOGIN
9362 ,ppev.RECORD_VERSION_NUMBER ------RECORD_VERSION_NUMBER
9363 ,ppev.element_version_id -- to help create relationships from source
9364 ,ppev.ATTRIBUTE_CATEGORY
9365 ,ppev.ATTRIBUTE1
9366 ,ppev.ATTRIBUTE2
9367 ,ppev.ATTRIBUTE3
9368 ,ppev.ATTRIBUTE4
9369 ,ppev.ATTRIBUTE5
9370 ,ppev.ATTRIBUTE6
9371 ,ppev.ATTRIBUTE7
9372 ,ppev.ATTRIBUTE8
9373 ,ppev.ATTRIBUTE9
9374 ,ppev.ATTRIBUTE10
9375 ,ppev.ATTRIBUTE11
9376 ,ppev.ATTRIBUTE12
9377 ,ppev.ATTRIBUTE13
9378 ,ppev.ATTRIBUTE14
9379 ,decode( ppevs.status_code, 'STRUCTURE_PUBLISHED', 'PUBLISHED', 'WORKING' )
9380 ,ppev.FINANCIAL_TASK_FLAG --Check if this is correct ?
9381 ,p_dest_project_id
9382 ,'PA_PROJECTS'
9383 FROM pa_proj_elements ppe,
9384 pa_proj_element_versions ppev,
9385 pa_proj_element_versions ppev2,
9386 pa_proj_elem_ver_structure ppevs
9387 WHERE ppe.project_id = p_dest_project_id
9388 AND ppe.object_type = 'PA_TASKS'
9389 AND ppe.attribute15 = ppev.proj_element_id
9390 AND ppev.project_id = p_src_project_id
9391 AND ppev.object_type = 'PA_TASKS'
9392 AND ppev.parent_structure_version_id = ppev2.attribute15
9393 AND ppev2.project_id = p_dest_project_id
9394 AND ppev2.object_type = 'PA_STRUCTURES'
9395 AND ppevs.element_version_id = ppev2.element_version_id
9396 AND ppevs.project_id = p_dest_project_id
9397 AND ppevs.project_id = ppe.project_id -- Bug 4141027
9398 AND ppev2.project_id = ppe.project_id -- Bug 4141027
9399 ;
9400
9401 IF l_debug_mode = 'Y' THEN
9402 Pa_Debug.WRITE(G_PKG_NAME, 'Going to insert object relationships',
9403 l_debug_level3);
9404 END IF;
9405
9406 FOR rec_dest_wp_struc_versions IN cur_get_dest_wp_struc_versions(l_dest_wp_structure_id) LOOP
9407 --Copy relationships for structure and tasks into destination project
9408
9409 /* Start of addition for bug 6211012 */
9410
9411 l_obj_rel_id.delete;
9412 l_obj_typ_from.delete;
9413 l_obj_from_id.delete;
9414 l_obj_typ_to.delete;
9415 l_obj_to_id.delete;
9416 l_rel_typ.delete;
9417 l_rel_subtyp.delete;
9418 l_rec_ver_num.delete;
9419 l_wt_percent.delete;
9420
9421 OPEN cur_pa_obj_rela_2(rec_dest_wp_struc_versions.attribute15,rec_dest_wp_struc_versions.element_version_id);
9422
9423 LOOP
9424
9425 FETCH cur_pa_obj_rela_2
9426 BULK COLLECT INTO
9427 l_obj_rel_id,
9428 l_obj_typ_from,
9429 l_obj_from_id,
9430 l_obj_typ_to,
9431 l_obj_to_id,
9432 l_rel_typ,
9433 l_rel_subtyp,
9434 l_rec_ver_num,
9435 l_wt_percent
9436 LIMIT 1000;
9437
9438 IF l_obj_rel_id.COUNT >0 THEN
9439
9440 FORALL i IN l_obj_rel_id.FIRST..l_obj_rel_id.LAST
9441 insert into PA_OBJECT_RELATIONSHIPS (
9442 object_relationship_id,
9443 object_type_from,
9444 object_id_from1,
9445 object_type_to,
9446 object_id_to1,
9447 relationship_type,
9448 relationship_subtype,
9449 Record_Version_Number,
9450 CREATED_BY,
9451 CREATION_DATE,
9452 LAST_UPDATED_BY,
9453 LAST_UPDATE_DATE,
9454 LAST_UPDATE_LOGIN,
9455 weighting_percentage
9456 )
9457 values(
9458 l_obj_rel_id(i),
9459 l_obj_typ_from(i),
9460 l_obj_from_id(i),
9461 l_obj_typ_to(i),
9462 l_obj_to_id(i),
9463 l_rel_typ(i),
9464 l_rel_subtyp(i),
9465 l_rec_ver_num(i),
9466 l_user_id,
9467 SYSDATE,
9468 l_user_id,
9469 SYSDATE,
9470 l_login_id,
9471 l_wt_percent(i)
9472 );
9473
9474 END IF;
9475
9476 EXIT WHEN l_obj_rel_id.COUNT < 1000 ;
9477 END LOOP;
9478
9479 l_obj_rel_id.delete;
9480 l_obj_typ_from.delete;
9481 l_obj_from_id.delete;
9482 l_obj_typ_to.delete;
9483 l_obj_to_id.delete;
9484 l_rel_typ.delete;
9485 l_rel_subtyp.delete;
9486 l_rec_ver_num.delete;
9487 l_wt_percent.delete;
9488
9489 CLOSE cur_pa_obj_rela_2;
9490
9491 /*
9492 INSERT INTO PA_OBJECT_RELATIONSHIPS (
9493 object_relationship_id
9494 ,object_type_from
9495 ,object_id_from1
9496 ,object_type_to
9497 ,object_id_to1
9498 ,relationship_type
9499 ,relationship_subtype
9500 ,Record_Version_Number
9501 ,CREATED_BY
9502 ,CREATION_DATE
9503 ,LAST_UPDATED_BY
9504 ,LAST_UPDATE_DATE
9505 ,LAST_UPDATE_LOGIN
9506 ,weighting_percentage
9507 )
9508 /*Added the hint for the bug 3513853*/
9509 /* SELECT /*+ USE_HASH(ppev2 ppev1)*/
9510 /* pa_object_relationships_s.nextval
9511 ,pobj.object_type_from
9512 ,ppev1.element_version_id
9513 ,pobj.object_type_to
9514 ,ppev2.element_version_id
9515 ,pobj.relationship_type
9516 ,pobj.relationship_subtype
9517 ,pobj.Record_Version_Number
9518 ,l_user_id
9519 ,SYSDATE
9520 ,l_user_id
9521 ,SYSDATE
9522 ,l_login_id
9523 ,pobj.weighting_percentage
9524 FROM
9525 ( SELECT object_type_from,
9526 object_id_from1,
9527 object_type_to,
9528 object_id_to1,
9529 relationship_type,
9530 relationship_subtype,
9531 Record_Version_Number,
9532 weighting_percentage
9533 FROM pa_object_relationships
9534 START WITH object_id_from1 = rec_dest_wp_struc_versions.attribute15
9535 AND RELATIONSHIP_TYPE = 'S'
9536 CONNECT BY object_id_from1 = PRIOR object_id_to1
9537 AND RELATIONSHIP_TYPE = 'S' ) pobj,
9538 pa_proj_element_versions ppev1,
9539 pa_proj_element_versions ppev2
9540 WHERE ppev1.attribute15 = pobj.object_id_from1
9541 AND ppev2.attribute15 = pobj.object_id_to1
9542 AND ppev1.parent_structure_version_id = rec_dest_wp_struc_versions.element_version_id
9543 AND ppev2.parent_structure_version_id = rec_dest_wp_struc_versions.element_version_id ;
9544 */
9545 /* End of changes for bug 6211012 */
9546
9547 --calculate delta before inserting schedule rows
9548 --select source structure version scheduled start date
9549 IF (p_target_start_date IS NULL) THEN
9550 l_delta := 0;
9551 ELSE
9552 OPEN cur_get_src_sch_st_date( p_src_project_id, rec_dest_wp_struc_versions.attribute15 );
9553 FETCH cur_get_src_sch_st_date INTO l_src_sch_st_date;
9554 CLOSE cur_get_src_sch_st_date;
9555 l_delta := p_target_start_date - l_src_sch_st_date;
9556 END IF;
9557
9558 --Copy entries into pa_proj_elem_ver_schedule
9559 INSERT INTO pa_proj_elem_ver_schedule(
9560 PEV_SCHEDULE_ID
9561 ,ELEMENT_VERSION_ID
9562 ,PROJECT_ID
9563 ,PROJ_ELEMENT_ID
9564 ,CREATION_DATE
9565 ,CREATED_BY
9566 ,LAST_UPDATE_DATE
9567 ,LAST_UPDATED_BY
9568 ,SCHEDULED_START_DATE
9569 ,SCHEDULED_FINISH_DATE
9570 ,OBLIGATION_START_DATE
9571 ,OBLIGATION_FINISH_DATE
9572 ,ACTUAL_START_DATE
9573 ,ACTUAL_FINISH_DATE
9574 ,ESTIMATED_START_DATE
9575 ,ESTIMATED_FINISH_DATE
9576 ,DURATION
9577 ,EARLY_START_DATE
9578 ,EARLY_FINISH_DATE
9579 ,LATE_START_DATE
9580 ,LATE_FINISH_DATE
9581 ,CALENDAR_ID
9582 ,MILESTONE_FLAG
9583 ,CRITICAL_FLAG
9584 ,RECORD_VERSION_NUMBER
9585 ,LAST_UPDATE_LOGIN
9586 ,WQ_PLANNED_QUANTITY
9587 ,PLANNED_EFFORT
9588 ,ACTUAL_DURATION
9589 ,ESTIMATED_DURATION
9590 ,ATTRIBUTE_CATEGORY
9591 ,ATTRIBUTE1
9592 ,ATTRIBUTE2
9593 ,ATTRIBUTE3
9594 ,ATTRIBUTE4
9595 ,ATTRIBUTE5
9596 ,ATTRIBUTE6
9597 ,ATTRIBUTE7
9598 ,ATTRIBUTE8
9599 ,ATTRIBUTE9
9600 ,ATTRIBUTE10
9601 ,ATTRIBUTE11
9602 ,ATTRIBUTE12
9603 ,ATTRIBUTE13
9604 ,ATTRIBUTE14
9605 ,ATTRIBUTE15
9606 ,source_object_id
9607 ,source_object_type
9608 ,CONSTRAINT_TYPE_CODE --Bug 3762437
9609 ,CONSTRAINT_DATE
9610 ,FREE_SLACK
9611 ,TOTAL_SLACK
9612 ,EFFORT_DRIVEN_FLAG
9613 ,LEVEL_ASSIGNMENTS_FLAG
9614 ,EXT_ACT_DURATION
9615 ,EXT_REMAIN_DURATION
9616 ,EXT_SCH_DURATION --Bug 3762437
9617 )
9618 SELECT
9619 pa_proj_elem_ver_schedule_s.nextval
9620 ,ppev.ELEMENT_VERSION_ID
9621 ,p_dest_PROJECT_ID
9622 ,ppev.PROJ_ELEMENT_ID
9623 ,SYSDATE
9624 ,l_user_id
9625 ,SYSDATE
9626 ,l_user_id
9627 ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date,
9628 p_target_finish_date,
9629 l_delta,
9630 ppevs.SCHEDULED_START_DATE,
9631 null )
9632 ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date,
9633 p_target_finish_date,
9634 l_delta,
9635 ppevs.SCHEDULED_START_DATE,
9636 SCHEDULED_FINISH_DATE )
9637 ,ppevs.OBLIGATION_START_DATE
9638 ,ppevs.OBLIGATION_FINISH_DATE
9639 ,null
9640 ,null
9641 ,null
9642 ,null
9643 ,ppevs.DURATION
9644 ,ppevs.EARLY_START_DATE
9645 ,ppevs.EARLY_FINISH_DATE
9646 ,ppevs.LATE_START_DATE
9647 ,ppevs.LATE_FINISH_DATE
9648 ,p_calendar_id
9649 ,ppevs.MILESTONE_FLAG
9650 ,ppevs.CRITICAL_FLAG
9651 ,ppevs.RECORD_VERSION_NUMBER
9652 ,l_login_id
9653 ,ppevs.WQ_PLANNED_QUANTITY
9654 ,ppevs.PLANNED_EFFORT
9655 ,ppevs.ACTUAL_DURATION
9656 ,ppevs.ESTIMATED_DURATION
9657 ,ppevs.ATTRIBUTE_CATEGORY
9658 ,ppevs.ATTRIBUTE1
9659 ,ppevs.ATTRIBUTE2
9660 ,ppevs.ATTRIBUTE3
9661 ,ppevs.ATTRIBUTE4
9662 ,ppevs.ATTRIBUTE5
9663 ,ppevs.ATTRIBUTE6
9664 ,ppevs.ATTRIBUTE7
9665 ,ppevs.ATTRIBUTE8
9666 ,ppevs.ATTRIBUTE9
9667 ,ppevs.ATTRIBUTE10
9668 ,ppevs.ATTRIBUTE11
9669 ,ppevs.ATTRIBUTE12
9670 ,ppevs.ATTRIBUTE13
9671 ,ppevs.ATTRIBUTE14
9672 ,ppevs.ATTRIBUTE15
9673 ,p_dest_PROJECT_ID
9674 ,'PA_PROJECTS'
9675 ,CONSTRAINT_TYPE_CODE --Bug 3762437
9676 ,CONSTRAINT_DATE
9677 ,FREE_SLACK
9678 ,TOTAL_SLACK
9679 ,EFFORT_DRIVEN_FLAG
9680 ,LEVEL_ASSIGNMENTS_FLAG
9681 ,EXT_ACT_DURATION
9682 ,EXT_REMAIN_DURATION
9683 ,EXT_SCH_DURATION --Bug 3762437
9684 FROM pa_proj_element_versions ppev,
9685 pa_proj_elem_ver_schedule ppevs
9686 WHERE ppev.project_id = p_dest_project_id
9687 AND ppev.parent_structure_version_id = rec_dest_wp_struc_versions.element_version_id
9688 AND ppev.attribute15 = ppevs.element_version_id
9689 AND ppevs.project_id = p_src_project_id ;
9690
9691 END LOOP; --FOR rec_dest_wp_struc_versions IN cur_get_dest_wp_struc_versions
9692
9693 IF 'Y' = l_shared AND 'N' = p_src_template_flag THEN
9694 --No need to sync up if source is a template
9695 IF l_submit_wf_required <> 'Y' THEN --3916763
9696 OPEN cur_get_shared_ver_id;
9697 FETCH cur_get_shared_ver_id INTO l_shared_dest_ver_id;
9698 CLOSE cur_get_shared_ver_id;
9699
9700 IF l_debug_mode = 'Y' THEN
9701 Pa_Debug.WRITE(G_PKG_NAME, 'Calling pa_tasks sync up API for struc version :'||l_shared_dest_ver_id,
9702 l_debug_level3);
9703 END IF;
9704
9705 --Call API to sync up tasks in pa_tasks table, with the new (shared) version [WP version copied from src]
9706 PA_TASKS_MAINT_PUB.SYNC_UP_WP_TASKS_WITH_FIN(
9707 p_project_id => p_dest_project_id
9708 , p_structure_version_id => l_shared_dest_ver_id
9709 , p_mode => 'ALL'
9710 , x_return_status => l_return_status
9711 , x_msg_count => l_msg_count
9712 , x_msg_data => l_msg_data );
9713
9714 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9715 x_msg_count := FND_MSG_PUB.count_msg;
9716 IF x_msg_count = 1 THEN
9717 x_msg_data := l_msg_data;
9718 END IF;
9719 RAISE FND_API.G_EXC_ERROR;
9720 END IF;
9721 END IF; --3916763
9722 END IF;
9723 ELSE --IF THERE IS NO WP VERSION SELECTED FOR COPYING
9724
9725 --If shared and copy financial tasks flag is checked
9726 IF 'Y' = l_shared AND 'Y' = l_fin_tasks_flag THEN
9727
9728 --The following API call will copy the financial version from the source project to the destination project
9729 copy_src_financial_version( p_init_msg_list => p_init_msg_list
9730 ,p_src_project_id => p_src_project_id
9731 ,p_dest_project_id => p_dest_project_id
9732 ,p_dest_fn_structure_id => l_dest_wp_structure_id
9733 ,p_shared => l_shared
9734 ,p_dest_template_flag => p_dest_template_flag
9735 ,p_publish_person_id => l_publish_person_id
9736 ,x_return_status => l_return_status
9737 ,x_msg_count => l_msg_count
9738 ,x_msg_data => l_msg_data
9739 );
9740
9741 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9742 x_msg_count := FND_MSG_PUB.count_msg;
9743 IF x_msg_count = 1 THEN
9744 x_msg_data := l_msg_data;
9745 END IF;
9746 RAISE FND_API.G_EXC_ERROR;
9747 END IF;
9748
9749 --The following API call will copy the tasks belonging to the financial version in the source project into
9750 --the destination project
9751 copy_src_financial_ver_tasks( p_init_msg_list => p_init_msg_list
9752 ,p_src_project_id => p_src_project_id
9753 ,p_dest_project_id => p_dest_project_id
9754 ,p_dest_fn_structure_id => l_dest_wp_structure_id
9755 ,p_shared => l_shared
9756 ,p_copy_ppevSchedules_flag => 'Y' --Copy pa_proj_elem_ver_schedules or not
9757 ,p_target_start_date => p_target_start_date
9758 ,p_target_finish_date => p_target_finish_date
9759 ,p_calendar_id => p_calendar_id
9760 ,x_return_status => l_return_status
9761 ,x_msg_count => l_msg_count
9762 ,x_msg_data => l_msg_data
9763 );
9764 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9765 x_msg_count := FND_MSG_PUB.count_msg;
9766 IF x_msg_count = 1 THEN
9767 x_msg_data := l_msg_data;
9768 END IF;
9769 RAISE FND_API.G_EXC_ERROR;
9770 END IF;
9771
9772 END IF;--If shared and copy financial tasks flag is checked
9773
9774 --If no WP version is selected
9775 --If shared and copy financial tasks flag is not checked OR split and workplan is enabled
9776 IF ('Y' = l_shared AND 'N' = l_fin_tasks_flag)
9777 OR ('N' = l_shared AND 'Y' = l_workplan_enabled) THEN
9778
9779 IF l_debug_mode = 'Y' THEN
9780 Pa_Debug.WRITE(G_PKG_NAME, 'Creating new default WP version', l_debug_level3);
9781 END IF;
9782 --bug 3912603, Satish, this flag is for using this same condition below.
9783 check_str_sel_flag := 'Y';
9784
9785 --Create new default WP structure version
9786 SELECT pa_proj_element_versions_s.nextval INTO l_new_wp_ver_id
9787 FROM dual;
9788
9789 INSERT INTO pa_proj_element_versions(
9790 ELEMENT_VERSION_ID
9791 ,PROJ_ELEMENT_ID
9792 ,OBJECT_TYPE
9793 ,PROJECT_ID
9794 ,CREATION_DATE
9795 ,CREATED_BY
9796 ,LAST_UPDATE_DATE
9797 ,LAST_UPDATED_BY
9798 ,LAST_UPDATE_LOGIN
9799 ,PARENT_STRUCTURE_VERSION_ID
9800 ,WBS_NUMBER
9801 ,RECORD_VERSION_NUMBER
9802 ,FINANCIAL_TASK_FLAG
9803 ,source_object_id
9804 ,source_object_type
9805 )
9806 VALUES (
9807 l_new_wp_ver_id
9808 ,l_dest_wp_structure_id
9809 ,'PA_STRUCTURES'
9810 ,p_dest_project_id
9811 ,sysdate
9812 ,l_user_id
9813 ,sysdate
9814 ,l_user_id
9815 ,l_login_id
9816 ,l_new_wp_ver_id
9817 ,'0'
9818 ,1
9819 ,'N'
9820 ,p_dest_project_id
9821 ,'PA_PROJECTS'
9822 );
9823
9824 OPEN cur_get_working_ver_num(p_dest_project_id, l_dest_wp_structure_id);
9825 FETCH cur_get_working_ver_num INTO l_struc_ver_number;
9826 CLOSE cur_get_working_ver_num;
9827
9828 --If creating a project AND versioning is disabled, then should have both latest published and
9829 --current working flags as 'Y'
9830 IF 'N' = p_dest_template_flag AND 'N' = l_versioning_enabled THEN
9831 l_default_lat_pub_and_cw_flag := 'Y';
9832 END IF;
9833
9834 INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
9835 PEV_STRUCTURE_ID
9836 ,ELEMENT_VERSION_ID
9837 ,VERSION_NUMBER
9838 ,NAME
9839 ,PROJECT_ID
9840 ,PROJ_ELEMENT_ID
9841 ,PUBLISHED_DATE
9842 ,LATEST_EFF_PUBLISHED_FLAG
9843 ,PUBLISHED_BY_PERSON_ID
9844 ,CURRENT_BASELINE_DATE
9845 ,CURRENT_FLAG
9846 ,CURRENT_BASELINE_PERSON_ID
9847 ,ORIGINAL_BASELINE_DATE
9848 ,ORIGINAL_FLAG
9849 ,ORIGINAL_BASELINE_PERSON_ID
9850 ,CREATION_DATE
9851 ,CREATED_BY
9852 ,LAST_UPDATE_DATE
9853 ,LAST_UPDATED_BY
9854 ,LAST_UPDATE_LOGIN
9855 ,STATUS_CODE
9856 ,RECORD_VERSION_NUMBER
9857 ,WBS_RECORD_VERSION_NUMBER
9858 ,CURRENT_WORKING_FLAG
9859 ,SOURCE_OBJECT_ID
9860 ,source_object_type)
9861 VALUES (
9862 pa_proj_elem_ver_structure_s.nextval
9863 ,l_new_wp_ver_id
9864 ,l_struc_ver_number
9865 ,substr(p_dest_project_name||l_append||l_suffix, 1, 240)
9866 ,p_dest_project_id
9867 ,l_dest_wp_structure_id
9868 ,decode(l_default_lat_pub_and_cw_flag,'Y',sysdate,to_date(null))
9869 ,l_default_lat_pub_and_cw_flag
9870 ,decode(l_default_lat_pub_and_cw_flag, 'Y', l_publish_person_id, NULL)
9871 ,decode(l_default_lat_pub_and_cw_flag,'Y',sysdate,to_date(null))
9872 ,l_default_lat_pub_and_cw_flag
9873 ,decode(l_default_lat_pub_and_cw_flag, 'Y', l_publish_person_id, NULL)
9874 ,decode(l_default_lat_pub_and_cw_flag,'Y',sysdate,to_date(null))
9875 ,l_default_lat_pub_and_cw_flag
9876 ,decode(l_default_lat_pub_and_cw_flag, 'Y', l_publish_person_id, NULL)
9877 ,sysdate
9878 ,l_user_id
9879 ,sysdate
9880 ,l_user_id
9881 ,l_login_id
9882 ,decode(l_default_lat_pub_and_cw_flag,'Y','STRUCTURE_PUBLISHED','STRUCTURE_WORKING')
9883 ,1
9884 ,1
9885 ,'Y'
9886 ,p_dest_project_id
9887 ,'PA_PROJECTS'
9888 );
9889
9890 --bug 3912603, insert records into pa_proj_elem_ver_Schedule, Satish, start
9891 PA_TASK_PUB1.Create_Schedule_Version(
9892 p_element_version_id => l_new_wp_ver_id
9893 ,p_scheduled_start_date => SYSDATE
9894 ,p_scheduled_end_date => SYSDATE
9895 ,x_pev_schedule_id => x_pev_schedule_id
9896 ,x_return_status => l_return_status
9897 ,x_msg_count => l_msg_count
9898 ,x_msg_data => l_msg_data
9899 );
9900 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9901 x_msg_count := FND_MSG_PUB.count_msg;
9902 IF x_msg_count = 1 THEN
9903 x_msg_data := l_msg_data;
9904 END IF;
9905 RAISE FND_API.G_EXC_ERROR;
9906 END IF;
9907 --bug 3912603, insert records into pa_proj_elem_ver_Schedule, Satish, end
9908
9909 END IF;
9910 END IF;--If there is atleast one WP version selected
9911
9912 ---------------------------------------------------------------------------------------------------------
9913 /**** THE FOLLOWING SECTION COPIES/INSERTS FINANCIAL VERSIONS AND TASKS INTO THE DESTINATION PROJECT ****/
9914 ---------------------------------------------------------------------------------------------------------
9915 --If split and financial is enabled
9916 IF 'N' = l_shared AND 'Y' = l_fin_enabled THEN
9917
9918 IF l_debug_mode = 'Y' THEN
9919 Pa_Debug.WRITE(G_PKG_NAME, 'Creating financial version in split case', l_debug_level3);
9920 END IF;
9921
9922 --The following API call will copy the financial version from the source project to the destination project
9923 copy_src_financial_version( p_init_msg_list => p_init_msg_list
9924 ,p_src_project_id => p_src_project_id
9925 ,p_dest_project_id => p_dest_project_id
9926 ,p_dest_fn_structure_id => l_dest_fn_structure_id
9927 ,p_shared => l_shared
9928 ,p_dest_template_flag => p_dest_template_flag
9929 ,p_publish_person_id => l_publish_person_id
9930 ,x_return_status => l_return_status
9931 ,x_msg_count => l_msg_count
9932 ,x_msg_data => l_msg_data
9933 );
9934
9935 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9936 x_msg_count := FND_MSG_PUB.count_msg;
9937 IF x_msg_count = 1 THEN
9938 x_msg_data := l_msg_data;
9939 END IF;
9940 RAISE FND_API.G_EXC_ERROR;
9941 END IF;
9942
9943 --If copy financial tasks flag is checked
9944 IF 'Y' = l_fin_tasks_flag THEN
9945
9946 IF l_debug_mode = 'Y' THEN
9947 Pa_Debug.WRITE(G_PKG_NAME, 'Creating financial tasks in split case', l_debug_level3);
9948 END IF;
9949
9950 --The following API call will copy the tasks belonging to the financial version in the source project into
9951 --the destination project
9952 copy_src_financial_ver_tasks( p_init_msg_list => p_init_msg_list
9953 ,p_src_project_id => p_src_project_id
9954 ,p_dest_project_id => p_dest_project_id
9955 ,p_dest_fn_structure_id => l_dest_fn_structure_id
9956 ,p_shared => l_shared
9957 ,p_copy_ppevSchedules_flag => 'N' --Copy pa_proj_elem_ver_schedules or not
9958 ,p_target_start_date => p_target_start_date
9959 ,p_target_finish_date => p_target_finish_date
9960 ,p_calendar_id => p_calendar_id
9961 ,x_return_status => l_return_status
9962 ,x_msg_count => l_msg_count
9963 ,x_msg_data => l_msg_data
9964 );
9965 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9966 x_msg_count := FND_MSG_PUB.count_msg;
9967 IF x_msg_count = 1 THEN
9968 x_msg_data := l_msg_data;
9969 END IF;
9970 RAISE FND_API.G_EXC_ERROR;
9971 END IF;
9972 END IF;
9973
9974 END IF;--If split and financial is enabled
9975
9976 ---------------------------------------------------------------------------------------------------------------------
9977 /**** THE FOLLOWING SECTION COPIES OTHER INFORMATION RELATED TO VERSIONS AND TASKS INTO THE DESTINATION PROJECT ****/
9978 ---------------------------------------------------------------------------------------------------------------------
9979
9980 IF 'Y' = l_shared THEN
9981 --Get the destination project's shared structure id
9982 OPEN cur_get_shared_struc_id;
9983 FETCH cur_get_shared_struc_id INTO l_dest_shared_struc_id, l_src_shared_struc_id;
9984 CLOSE cur_get_shared_struc_id;
9985 END IF;
9986
9987 --Updating Duration
9988 IF l_workplan_enabled = 'Y' THEN
9989 -- Bug 3657808 Remove duration calculation using calendar
9990 -- and rewritting the query
9991 /*UPDATE pa_proj_elem_ver_schedule
9992 SET duration = PA_PROJ_TASK_STRUC_PUB.calc_duration( p_calendar_id,
9993 scheduled_start_date,
9994 scheduled_finish_date )
9995 WHERE project_id = p_dest_project_id;*/
9996 UPDATE pa_proj_elem_ver_schedule
9997 SET duration = trunc(scheduled_finish_date) - trunc(scheduled_start_date) + 1
9998 WHERE project_id = p_dest_project_id;
9999 END IF;
10000
10001 ---Updating Baselined Dates
10002 UPDATE PA_PROJ_ELEMENTS ppe
10003 SET ( BASELINE_START_DATE
10004 ,BASELINE_FINISH_DATE
10005 ,BASELINE_DURATION
10006 ) = ( SELECT ppevs.scheduled_start_date
10007 ,ppevs.scheduled_finish_date
10008 ,ppevs.duration
10009 FROM pa_proj_elem_ver_schedule ppevs,
10010 pa_proj_element_versions ppev
10011 WHERE ppevs.project_id = p_dest_project_id
10012 AND ppevs.proj_element_id = ppev.proj_element_id
10013 AND ppevs.element_version_id = ppev.element_version_id
10014 AND ppev.project_id = p_dest_project_id
10015 AND ppevs.proj_element_id = ppe.proj_element_id
10016 AND ppev.proj_element_id = ppe.proj_element_id
10017 AND ppev.parent_structure_version_id =
10018 ( SELECT ppevst.element_version_id --Changed the inner query for bug 4215666.
10019 FROM pa_proj_elem_ver_structure ppevst,
10020 pa_proj_structure_types struc,
10021 pa_structure_types stype
10022 WHERE ppevst.project_id = p_dest_project_id
10023 AND ppevst.current_flag = 'Y'
10024 AND ppevst.status_code = 'STRUCTURE_PUBLISHED'
10025 AND ppevst.proj_element_id = struc.proj_element_id
10026 AND struc.structure_type_id = stype.structure_type_id
10027 AND stype.structure_type = 'WORKPLAN'
10028 )
10029 )
10030 WHERE project_id = p_dest_project_id;
10031
10032 --Updating Projects Dates
10033 UPDATE pa_projects_all
10034 SET ( BASELINE_START_DATE ,BASELINE_FINISH_DATE, baseline_duration, baseline_as_of_date ) =
10035 ( SELECT BASELINE_START_DATE ,BASELINE_FINISH_DATE, baseline_duration,
10036 decode( BASELINE_START_DATE, null, null, sysdate)
10037 FROM pa_proj_elements ppe, pa_proj_structure_types ppst
10038 WHERE project_id = p_dest_project_id
10039 AND object_type = 'PA_STRUCTURES'
10040 AND ppe.proj_element_id = ppst.proj_element_id
10041 AND ppst.structure_type_id = 1
10042 )
10043 WHERE project_id = p_dest_project_id;
10044
10045 --Get the latest published version id in the destination project
10046 l_dest_latest_pub_ver_id := PA_PROJ_ELEMENTS_UTILS.latest_published_ver_id( p_dest_project_id, 'WORKPLAN' ) ;
10047
10048 IF l_dest_latest_pub_ver_id IS NOT NULL THEN
10049 UPDATE pa_projects_all
10050 SET ( scheduled_START_DATE ,scheduled_FINISH_DATE, scheduled_duration, scheduled_as_of_date ) =
10051 ( SELECT SCHEDULED_START_DATE ,SCHEDULED_FINISH_DATE, duration,
10052 decode( SCHEDULED_START_DATE, null, null, sysdate )
10053 FROM pa_proj_elem_ver_schedule
10054 WHERE project_id = p_dest_project_id
10055 AND element_version_id = l_dest_latest_pub_ver_id
10056 )
10057 WHERE project_id = p_dest_project_id;
10058 END IF;
10059
10060 /* Included for Bug 3922019
10061 In case of templates l_dest_latest_pub_ver_id will be NULL (No latest published version etc. for templates)
10062 So,In that case,Select the Only Workplan Version Id that would be available for the template*/
10063
10064 OPEN c_template_flag(p_dest_project_id) ;
10065 FETCH c_template_flag INTO l_template_flag ;
10066 CLOSE c_template_flag ;
10067
10068 IF nvl(l_template_flag,'N') = 'Y' THEN
10069 OPEN c_only_wp_ver_id(p_dest_project_id) ;
10070 FETCH c_only_wp_ver_id INTO l_only_wp_ver_id ;
10071 CLOSE c_only_wp_ver_id ;
10072
10073 UPDATE pa_projects_all
10074 SET ( scheduled_START_DATE ,scheduled_FINISH_DATE, scheduled_duration, scheduled_as_of_date ) =
10075 ( SELECT SCHEDULED_START_DATE ,SCHEDULED_FINISH_DATE, duration,
10076 decode( SCHEDULED_START_DATE, null, null, sysdate )
10077 FROM pa_proj_elem_ver_schedule
10078 WHERE project_id = p_dest_project_id
10079 AND element_version_id = l_only_wp_ver_id
10080 )
10081 WHERE project_id = p_dest_project_id;
10082 END IF;
10083
10084 /* End of code changes for Bug 3922019*/
10085
10086 IF l_debug_mode = 'Y' THEN
10087 Pa_Debug.WRITE(G_PKG_NAME, 'Copying task attachments...', l_debug_level3);
10088 END IF;
10089
10090 --Copy Task Attachments
10091 OPEN cur_get_flag('WP_TASK_ATTACH_FLAG');
10092 FETCH cur_get_flag INTO l_wp_task_attach_flag;
10093 CLOSE cur_get_flag;
10094
10095 IF l_debug_mode = 'Y' THEN
10096 Pa_Debug.WRITE(G_PKG_NAME, 'l_wp_task_attach_flag '||l_wp_task_attach_flag, l_debug_level3);
10097 END IF;
10098
10099 OPEN cur_get_flag('FN_ATTACHMENTS_FLAG');
10100 FETCH cur_get_flag INTO l_fn_task_attach_flag;
10101 CLOSE cur_get_flag;
10102
10103 IF l_debug_mode = 'Y' THEN
10104 Pa_Debug.WRITE(G_PKG_NAME, 'l_fn_task_attach_flag '||l_fn_task_attach_flag, l_debug_level3);
10105 END IF;
10106
10107 IF 'Y' = l_shared THEN
10108 IF ('Y' = l_min_one_wp_ver_sel AND 'Y' = l_wp_task_attach_flag )
10109 OR ('Y' = l_fin_tasks_flag AND 'Y' = l_fn_task_attach_flag ) THEN
10110 FOR rec_copied_tasks IN cur_get_copied_tasks( l_dest_shared_struc_id ) LOOP
10111 FND_ATTACHED_DOCUMENTS2_PKG.COPY_ATTACHMENTS(
10112 'PA_TASKS',
10113 rec_copied_tasks.src_ppe_id,
10114 null, null, null, null,
10115 'PA_TASKS',
10116 rec_copied_tasks.dest_ppe_id,
10117 null, null, null, null,
10118 FND_GLOBAL.USER_ID,
10119 FND_GLOBAL.LOGIN_ID,
10120 275, null, null
10121 );
10122 END LOOP;
10123 END IF;
10124 ELSE
10125 IF 'Y' = l_wp_task_attach_flag THEN
10126 FOR rec_copied_tasks IN cur_get_copied_tasks( l_dest_wp_structure_id ) LOOP
10127 FND_ATTACHED_DOCUMENTS2_PKG.COPY_ATTACHMENTS(
10128 'PA_TASKS',
10129 rec_copied_tasks.src_ppe_id,
10130 null, null, null, null,
10131 'PA_TASKS',
10132 rec_copied_tasks.dest_ppe_id,
10133 null, null, null, null,
10134 FND_GLOBAL.USER_ID,
10135 FND_GLOBAL.LOGIN_ID,
10136 275, null, null
10137 );
10138 END LOOP;
10139 END IF;
10140
10141 IF 'Y' = l_fn_task_attach_flag THEN
10142 FOR rec_copied_tasks IN cur_get_copied_tasks( l_dest_fn_structure_id ) LOOP
10143 FND_ATTACHED_DOCUMENTS2_PKG.COPY_ATTACHMENTS(
10144 'PA_TASKS',
10145 rec_copied_tasks.src_ppe_id,
10146 null, null, null, null,
10147 'PA_TASKS',
10148 rec_copied_tasks.dest_ppe_id,
10149 null, null, null, null,
10150 FND_GLOBAL.USER_ID,
10151 FND_GLOBAL.LOGIN_ID,
10152 275, null, null
10153 );
10154 END LOOP;
10155 END IF;
10156 END IF;
10157
10158 --Need To Sync Up Transaction Dates If Auto Sync Is On
10159 IF l_shared = 'Y' THEN
10160
10161 IF (PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_DATE_SYNC_ENABLED(l_dest_shared_struc_id) = 'Y')
10162 AND (PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_PUB_AT_CREATION(p_src_project_id) = 'Y') THEN
10163 --Copy to transaction date
10164 PA_PROJECT_DATES_PUB.COPY_PROJECT_DATES(
10165 p_project_id => p_dest_project_id,
10166 x_return_status => l_return_status,
10167 x_msg_count => l_msg_count,
10168 x_msg_data => l_msg_data
10169 );
10170
10171 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10172 x_msg_count := FND_MSG_PUB.count_msg;
10173 IF x_msg_count = 1 THEN
10174 x_msg_data := l_msg_data;
10175 END IF;
10176 RAISE FND_API.G_EXC_ERROR;
10177 END IF;
10178 END IF;
10179 END IF;
10180
10181 DECLARE
10182 Old_Versions_Tab SYSTEM.pa_num_tbl_type;
10183 New_Versions_Tab SYSTEM.pa_num_tbl_type;
10184
10185 l_wp_inter_proj_depend_flag VARCHAR2(1);
10186 BEGIN
10187 SELECT Element_Version_ID, attribute15 BULK COLLECT
10188 INTO New_Versions_Tab, Old_Versions_Tab
10189 FROM PA_Proj_Element_Versions
10190 WHERE Project_ID = p_dest_project_id;
10191
10192 PA_Relationship_Pvt.Copy_Intra_Dependency (
10193 P_Source_Ver_Tbl => Old_Versions_Tab,
10194 P_Destin_Ver_Tbl => New_Versions_Tab,
10195 X_Return_Status => X_Return_Status,
10196 X_Msg_Count => X_Msg_Count,
10197 X_Msg_Data => X_Msg_Data
10198 );
10199 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10200 RAISE FND_API.G_EXC_ERROR;
10201 END IF;
10202
10203 OPEN cur_get_flag('WP_INTER_PROJ_DEPEND_FLAG');
10204 FETCH cur_get_flag INTO l_wp_inter_proj_depend_flag;
10205 CLOSE cur_get_flag;
10206
10207 IF 'Y' = l_wp_inter_proj_depend_flag THEN
10208 PA_RELATIONSHIP_PVT.Copy_Inter_Project_Dependency (
10209 P_Source_Ver_Tbl => Old_Versions_Tab,
10210 P_Destin_Ver_Tbl => New_Versions_Tab,
10211 X_Return_Status => X_Return_Status,
10212 X_Msg_Count => X_Msg_Count,
10213 X_Msg_Data => X_Msg_Data
10214 );
10215 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10216 RAISE FND_API.G_EXC_ERROR;
10217 END IF;
10218 END IF;
10219 END ;--Finished copying Intra and Inter Project Dependencies
10220
10221 DECLARE
10222 CURSOR cur_get_str_shr_code IS
10223 SELECT structure_sharing_code
10224 FROM pa_projects_all
10225 WHERE project_id = p_dest_project_id;
10226
10227 src_versions_tab SYSTEM.pa_num_tbl_type;
10228 dest_versions_tab SYSTEM.pa_num_tbl_type;
10229 l_dest_proj_struc_shr_code VARCHAR2(30);
10230
10231 l_wp_res_assign_flag VARCHAR2(1) := 'N';
10232 l_wp_ra_people_flag VARCHAR2(1) := 'N';
10233 l_wp_ra_equipment_flag VARCHAR2(1) := 'N';
10234 l_wp_ra_material_flag VARCHAR2(1) := 'N';
10235 l_wp_ra_fin_element_flag VARCHAR2(1) := 'N';
10236
10237 BEGIN
10238
10239 SELECT Element_Version_ID, attribute15 BULK COLLECT
10240 INTO dest_versions_tab, src_Versions_Tab
10241 FROM PA_Proj_Element_Versions
10242 WHERE Project_ID = p_dest_project_id
10243 AND ( PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(element_version_id, 'WORKPLAN') = 'Y')
10244 AND object_type = 'PA_STRUCTURES';
10245
10246 OPEN cur_get_str_shr_code;
10247 FETCH cur_get_str_shr_code INTO l_dest_proj_struc_shr_code;
10248 CLOSE cur_get_str_shr_code;
10249
10250 IF l_dest_proj_struc_shr_code = 'SPLIT_MAPPING' THEN
10251 -- Copy mapping only in case of split structures with mapping
10252 PA_PROJ_STRUC_MAPPING_PUB.copy_mapping
10253 ( p_context => 'COPY_PROJECT'
10254 ,p_src_project_id => p_src_project_id
10255 ,p_dest_project_id => p_dest_project_id
10256 ,x_return_status => x_return_status
10257 ,x_msg_count => x_msg_count
10258 ,x_Msg_data => x_msg_data
10259 );
10260 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10261 RAISE FND_API.G_EXC_ERROR;
10262 END IF;
10263 END IF;
10264
10265 OPEN cur_get_flag('WP_RES_ASSIGN_FLAG');
10266 FETCH cur_get_flag INTO l_wp_res_assign_flag;
10267 CLOSE cur_get_flag;
10268 --NOTE : If Resource Assignments flag is unchecked, all other flags - people, equipment, material
10269 --and financial elements would be 'N'
10270
10271 IF 'Y' = l_wp_res_assign_flag THEN
10272 OPEN cur_get_flag('WP_RA_PEOPLE_FLAG');
10273 FETCH cur_get_flag INTO l_wp_ra_people_flag;
10274 CLOSE cur_get_flag;
10275
10276 OPEN cur_get_flag('WP_RA_EQUIPMENT_FLAG');
10277 FETCH cur_get_flag INTO l_wp_ra_equipment_flag;
10278 CLOSE cur_get_flag;
10279
10280 OPEN cur_get_flag('WP_RA_MATERIAL_FLAG');
10281 FETCH cur_get_flag INTO l_wp_ra_material_flag;
10282 CLOSE cur_get_flag;
10283
10284 OPEN cur_get_flag('WP_RA_FIN_ELEMENT_FLAG');
10285 FETCH cur_get_flag INTO l_wp_ra_fin_element_flag;
10286 CLOSE cur_get_flag;
10287 END IF;
10288
10289 --bug 3912603, call add_planning_transactions if no wp selected and split, Satish
10290 -- Copies budget versions, resource assignments and budget lines as required for the workplan version.
10291 --IF ('Y' = l_shared AND 'N' = l_fin_tasks_flag)
10292 --OR ('N' = l_shared AND 'Y' = l_workplan_enabled) THEN
10293 IF ('Y' = check_str_sel_flag AND 'N' = nvl(l_min_one_wp_ver_sel,'N')) THEN
10294 IF l_debug_mode = 'Y' THEN
10295 Pa_Debug.WRITE(G_PKG_NAME, 'Calling add_planning_transactions ', l_debug_level3);
10296 Pa_Debug.WRITE(G_PKG_NAME, 'Calling add_planning_transactions p_dest_project_id '||p_dest_project_id, l_debug_level3);
10297 Pa_Debug.WRITE(G_PKG_NAME, 'Calling add_planning_transactions l_new_wp_ver_id '||l_new_wp_ver_id, l_debug_level3);
10298 END IF;
10299 PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions
10300 (
10301 p_context => 'WORKPLAN'
10302 ,p_project_id => p_dest_project_id
10303 ,p_struct_elem_version_id => l_new_wp_ver_id
10304 ,x_return_status => x_return_status
10305 ,x_msg_count => x_msg_count
10306 ,x_Msg_data => x_msg_data
10307 );
10308 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10309 RAISE FND_API.G_EXC_ERROR;
10310 END IF;
10311 ELSE
10312 IF l_debug_mode = 'Y' THEN
10313 Pa_Debug.WRITE(G_PKG_NAME, 'Calling copy_wp_budget_versions ', l_debug_level3);
10314 END IF;
10315 PA_FP_COPY_FROM_PKG.copy_wp_budget_versions
10316 ( p_source_project_id => p_src_project_id
10317 ,p_target_project_id => p_dest_project_id
10318 ,p_src_sv_ids_tbl => src_Versions_Tab -- Workplan version id tbl
10319 ,p_target_sv_ids_tbl => dest_Versions_Tab -- Workplan version id tbl
10320 ,p_copy_people_flag => l_wp_ra_people_flag
10321 ,p_copy_equip_flag => l_wp_ra_equipment_flag
10322 ,p_copy_mat_item_flag => l_wp_ra_material_flag
10323 ,p_copy_fin_elem_flag => l_wp_ra_fin_element_flag
10324 ,x_return_status => x_return_status
10325 ,x_msg_count => x_msg_count
10326 ,x_Msg_data => x_msg_data
10327 );
10328 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10329 RAISE FND_API.G_EXC_ERROR;
10330 END IF;
10331 END IF;
10332
10333 IF ( 'Y' = l_dlv_enabled AND 'Y' = l_wp_deliverables_flag ) THEN
10334
10335 PA_DELIVERABLE_PUB.copy_deliverables
10336 (p_source_project_id => p_src_project_id
10337 ,p_target_project_id => p_dest_project_id
10338 ,p_item_details_flag => l_wp_dlv_item_det_flag
10339 ,p_dlv_actions_flag => 'Y'
10340 ,p_dlv_attachments_flag => l_wp_dlv_attach_flag
10341 ,p_association_flag => l_wp_dlv_assoc_task_flag
10342 ,p_prefix => 'CP'
10343 ,p_delta => p_delta
10344 ,p_calling_context => 'COPY_PROJECT'
10345 ,x_return_status => x_return_status
10346 ,x_msg_count => x_msg_count
10347 ,x_Msg_data => x_msg_data
10348 );
10349
10350 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10351 RAISE FND_API.G_EXC_ERROR;
10352 END IF;
10353 END IF;
10354 END;
10355
10356 /* This code is moved to Copy_Project API for bug 4200168 so that BF can use attribute15 to access source task id in copy finplan API*/
10357 /* Now update back the attributes column in pa_proj_elements and pa_proj_element_versions with actual data from source project
10358 UPDATE pa_proj_elements ppe1
10359 SET attribute15 = ( SELECT attribute15 FROM pa_proj_elements ppe2
10360 WHERE ppe2.project_id = p_src_project_id
10361 AND ppe2.proj_element_id = ppe1.attribute15 )
10362 WHERE project_id = p_dest_project_id ;
10363
10364 UPDATE pa_proj_element_versions ppevs1
10365 SET attribute15 = ( SELECT attribute15 FROM pa_proj_element_versions ppevs2
10366 WHERE ppevs2.project_id = p_src_project_id
10367 AND ppevs2.element_version_id = ppevs1.attribute15 )
10368 WHERE project_id = p_dest_project_id ; */
10369
10370 --3916763 Begin
10371
10372 IF l_debug_mode = 'Y' THEN
10373 Pa_Debug.WRITE(G_PKG_NAME, 'l_submit_wf_required='||l_submit_wf_required, l_debug_level3);
10374 Pa_Debug.WRITE(G_PKG_NAME, 'p_dest_project_id='||p_dest_project_id, l_debug_level3);
10375 Pa_Debug.WRITE(G_PKG_NAME, 'l_submit_wf_str_id='||l_submit_wf_str_id, l_debug_level3);
10376 Pa_Debug.WRITE(G_PKG_NAME, 'l_submit_wf_str_version_id='||l_submit_wf_str_version_id, l_debug_level3);
10377 Pa_Debug.WRITE(G_PKG_NAME, 'fnd_global.resp_id='||fnd_global.resp_id, l_debug_level3);
10378 END IF;
10379
10380 IF l_submit_wf_required = 'Y' AND l_submit_wf_str_version_id IS NOT NULL THEN
10381 IF l_debug_mode = 'Y' THEN
10382 Pa_Debug.WRITE(G_PKG_NAME, 'Calling SUBMIT_WORKPLAN ', l_debug_level3);
10383 END IF;
10384
10385 PA_PROJECT_STRUCTURE_PUB1.SUBMIT_WORKPLAN
10386 (
10387 p_calling_module => p_calling_module
10388 ,p_project_id => p_dest_project_id
10389 ,p_structure_id => l_submit_wf_str_id
10390 ,p_structure_version_id => l_submit_wf_str_version_id
10391 ,p_responsibility_id => fnd_global.resp_id
10392 ,x_return_status => x_return_status
10393 ,x_msg_count => x_msg_count
10394 ,x_msg_data => x_msg_data
10395 );
10396 IF l_debug_mode = 'Y' THEN
10397 Pa_Debug.WRITE(G_PKG_NAME, 'After Call SUBMIT_WORKPLAN x_return_status='||x_return_status, l_debug_level3);
10398 END IF;
10399 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10400 RAISE FND_API.G_EXC_ERROR;
10401 END IF;
10402 END IF;
10403 --3916763 End
10404
10405 x_return_status := FND_API.G_RET_STS_SUCCESS ;
10406
10407 IF (p_commit = FND_API.G_TRUE) THEN
10408 COMMIT;
10409 END IF;
10410
10411 IF (p_debug_mode = 'Y') THEN
10412 pa_debug.debug('PA_PROJ_TASK_STRUC_PUB.copy_structures_tasks_bulk END');
10413 Pa_Debug.reset_curr_function; --For bug 4252182
10414 END IF;
10415
10416 EXCEPTION
10417
10418 WHEN FND_API.G_EXC_ERROR THEN
10419
10420 x_return_status := Fnd_Api.G_RET_STS_ERROR;
10421
10422 IF p_commit = FND_API.G_TRUE THEN
10423 ROLLBACK TO copy_struc_tasks_bulk;
10424 END IF;
10425
10426 l_msg_count := Fnd_Msg_Pub.count_msg;
10427 IF l_msg_count = 1 AND x_msg_data IS NULL
10428 THEN
10429 Pa_Interface_Utils_Pub.get_messages
10430 ( p_encoded => Fnd_Api.G_FALSE
10431 , p_msg_index => 1
10432 , p_msg_count => l_msg_count
10433 , p_msg_data => l_msg_data
10434 , p_data => l_data
10435 , p_msg_index_out => l_msg_index_out);
10436 x_msg_data := l_data;
10437 x_msg_count := l_msg_count;
10438 ELSE
10439 x_msg_count := l_msg_count;
10440 END IF;
10441
10442 IF l_debug_mode = 'Y' THEN
10443 Pa_Debug.reset_curr_function;
10444 END IF;
10445
10446 WHEN Invalid_Arg_Exc_WP THEN
10447 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
10448 x_msg_count := 1;
10449 x_msg_data := ' PA_PROJ_TASK_STRUC_PUB : copy_structures_tasks_bulk : NULL parameters passed';
10450
10451 IF p_commit = FND_API.G_TRUE THEN
10452 ROLLBACK TO copy_struc_tasks_bulk;
10453 END IF;
10454
10455 Fnd_Msg_Pub.add_exc_msg
10456 ( p_pkg_name => 'PA_TOP_TASK_CUST_INVOICE_PVT'
10457 , p_procedure_name => 'copy_structures_tasks_bulk'
10458 , p_error_text => x_msg_data);
10459
10460 IF l_debug_mode = 'Y' THEN
10461 Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
10462 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
10463 l_debug_level5);
10464 Pa_Debug.reset_curr_function;
10465 END IF;
10466 RAISE;
10467
10468 WHEN OTHERS THEN
10469 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
10470 x_msg_count := 1;
10471 x_msg_data := SQLERRM;
10472
10473 IF p_commit = FND_API.G_TRUE THEN
10474 ROLLBACK TO copy_struc_tasks_bulk;
10475 END IF;
10476
10477 Fnd_Msg_Pub.add_exc_msg
10478 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
10479 , p_procedure_name => 'copy_structures_tasks_bulk'
10480 , p_error_text => x_msg_data);
10481
10482 IF l_debug_mode = 'Y' THEN
10483 Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
10484 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
10485 l_debug_level5);
10486 Pa_Debug.reset_curr_function;
10487 END IF;
10488 RAISE;
10489 END copy_structures_tasks_bulk;
10490
10491
10492 FUNCTION get_adjusted_dates(
10493 p_target_start_date DATE
10494 ,p_target_finish_date DATE
10495 ,p_delta NUMBER
10496 ,p_scheduled_start_date DATE
10497 ,p_scheduled_finish_date DATE
10498 ) RETURN DATE IS
10499 --fix bug 2831973
10500 -- l_delta NUMBER;
10501 l_scheduled_start_date DATE;
10502 l_scheduled_finish_date DATE;
10503 BEGIN
10504
10505 --fix bug 2831973
10506 --replace all l_delta with p_delta
10507 -- IF (p_target_start_date IS NULL) THEN
10508 -- l_delta := 0;
10509 -- ELSE
10510 -- l_delta := p_target_start_date - p_scheduled_start_date;
10511 -- END IF;
10512
10513 --calculate scheduled start and finish dates
10514 IF (p_target_finish_date < p_scheduled_start_date + p_delta) THEN
10515 l_scheduled_start_date := p_target_finish_date;
10516 ELSE
10517 l_scheduled_start_date := p_scheduled_start_date + p_delta;
10518 END IF;
10519
10520 IF (p_target_finish_date < p_scheduled_finish_date + p_delta) THEN
10521 l_scheduled_finish_date := p_target_finish_date;
10522 ELSE
10523 l_scheduled_finish_date := p_scheduled_finish_date + p_delta;
10524 END IF;
10525
10526 IF p_scheduled_finish_date IS NULL
10527 THEN
10528 RETURN l_scheduled_start_date;
10529 ELSE
10530 RETURN l_scheduled_finish_date;
10531 END IF;
10532
10533 END get_adjusted_dates;
10534
10535 PROCEDURE copy_structures_bulk
10536 ( p_commit IN VARCHAR2 := FND_API.G_FALSE
10537 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
10538 ,p_validation_level IN VARCHAR2 := 100
10539 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
10540 ,p_debug_mode IN VARCHAR2 := 'N'
10541 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
10542 ,p_src_project_id IN NUMBER
10543 ,p_dest_project_id IN NUMBER
10544 ,p_delta IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
10545 ,p_copy_task_flag IN VARCHAR2 := 'Y'
10546 ,p_dest_template_flag IN VARCHAR2 := 'N' --bug 2805602
10547 ,p_src_template_flag IN VARCHAR2 := 'N' --bug 2805602
10548 ,p_dest_project_name IN VARCHAR2 --bug 2805602
10549 ,p_target_start_date IN DATE
10550 ,p_target_finish_date IN DATE
10551 ,p_calendar_id IN NUMBER
10552 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10553 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
10554 ,x_msg_data OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
10555 IS
10556 l_return_status VARCHAR2(1);
10557 l_msg_count NUMBER;
10558 l_msg_data VARCHAR2(250);
10559 l_append VARCHAR2(10) := ': ';
10560 l_project_name VARCHAR2(250);
10561 l_workplan_enabled VARCHAR2(1);
10562 l_shared VARCHAR2(1);
10563 l_versioning_enabled VARCHAR2(1);
10564 l_auto_pub_enabled VARCHAR2(1);
10565 l_src_template_flag VARCHAR2(1);
10566 l_dest_template_flag VARCHAR2(1);
10567 l_copy_flag_set VARCHAR2(1);
10568 l_max_date DATE;
10569 l_max_date2 DATE;
10570 l_latst_upd_wrkng_str_ver NUMBER;
10571 l_fin_str_copy_flag VARCHAR2(1);
10572 l_LATEST_EFF_PUBLISHED_FLAG VARCHAR2(1);
10573 l_name VARCHAR2(250);
10574 l_suffix VARCHAR2(250);
10575 l_struc_version_id NUMBER;
10576 l_src_str_version_id NUMBER;
10577 i NUMBER;
10578 j NUMBER ;
10579 k NUMBER ;
10580
10581 --fix bug 2831973
10582 l_delta NUMBER;
10583 l_src_sch_st_date DATE;
10584 CURSOR get_src_sch_st_date(c_project_id NUMBER, c_struc_ver_id NUMBER) IS
10585 select scheduled_start_date
10586 from pa_proj_elem_ver_schedule
10587 where project_id = c_project_id
10588 and element_version_id = c_struc_ver_id;
10589
10590
10591 /*bug 3737444 : The below code commented */
10592 /* CURSOR get_wp_attr IS
10593 select *
10594 from pa_proj_workplan_attr
10595 where project_id = p_src_project_id; */
10596
10597 /* Code Addition starts for bug 3737444 */
10598 CURSOR get_wp_attr IS
10599 select * from pa_proj_workplan_attr pppa where pppa.project_id=p_src_project_id
10600 and exists (select null from pa_proj_structure_types pst, pa_structure_types ps
10601 where pst.structure_type_id=ps.structure_type_id
10602 and ps. STRUCTURE_TYPE ='WORKPLAN'
10603 and pst.proj_element_id=pppa.proj_element_id);
10604
10605
10606 /* Code Addition ends for bug 3737444 */
10607
10608 l_wp_attr_rec get_wp_attr%ROWTYPE;
10609 l_user_id NUMBER := FND_GLOBAL.USER_ID;
10610 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
10611
10612 CURSOR l_get_structure_attr_csr
10613 IS
10614 /* SELECT *
10615 FROM PA_PROJ_ELEM_ver_structure ppevs
10616 WHERE project_id = p_src_project_id;*//*Commented below query and following criteria by SMUKKA */
10617 select ppevs.*
10618 from pa_structure_types pst,
10619 pa_proj_structure_types ppst,
10620 pa_proj_elem_ver_structure ppevs
10621 where ppevs.project_id = p_src_project_id
10622 and ppevs.proj_element_id= ppst.proj_element_id
10623 and ppst.structure_type_id = pst.structure_type_id
10624 and pst.structure_type in ('WORKPLAN','FINANCIAL');
10625
10626 CURSOR l_get_structure_attr_csr2
10627 IS
10628 SELECT ppevs.element_version_id, ppevs.status_code, ppevs.LATEST_EFF_PUBLISHED_FLAG, ppevs.current_flag,
10629 ppst.structure_type_id
10630 /* FROM PA_PROJ_ELEM_ver_structure ppevs,
10631 pa_proj_structure_types ppst
10632 WHERE project_id = p_src_project_id
10633 AND ppst.proj_element_id(+) = ppevs.proj_element_id;*//*Commented below query and following criteria by SMUKKA */
10634 from pa_proj_elem_ver_structure ppevs,
10635 pa_proj_structure_types ppst,
10636 pa_structure_types pst
10637 where project_id = p_src_project_id
10638 and ppst.proj_element_id(+) = ppevs.proj_element_id
10639 and ppst.structure_type_id = pst.structure_type_id
10640 and pst.structure_type in ('WORKPLAN','FINANCIAL');
10641
10642 CURSOR cur_elem_ver_seq
10643 IS
10644 SELECT pa_proj_element_versions_s.nextval
10645 FROM sys.dual;
10646
10647 l_get_structure_attr_csr_rec l_get_structure_attr_csr%ROWTYPE;
10648 l_get_structure_attr_csr_rec2 l_get_structure_attr_csr2%ROWTYPE;
10649
10650 TYPE structure_ver_record IS RECORD
10651 (src_str_version_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10652 src_str_status VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
10653 latest_pub_flag VARCHAR2(1) := 'N',
10654 current_flag VARCHAR2(1) := 'N',
10655 last_update_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
10656 copy_flag VARCHAR2(1) := 'N',
10657 dest_str_status VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
10658 src_stru_type_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
10659 );
10660
10661 TYPE l_dest_str_versions IS TABLE OF structure_ver_record
10662 INDEX BY BINARY_INTEGER;
10663 l_dest_str_versions_tbl l_dest_str_versions;
10664 l_latest_pub_str_ver_id NUMBER;
10665
10666 /* Code added for 6211012*/
10667
10668 TYPE typ_obj_rela_id is TABLE OF pa_object_relationships.object_relationship_id%TYPE
10669 INDEX BY BINARY_INTEGER;
10670 l_obj_rel_id typ_obj_rela_id;
10671
10672 TYPE typ_obj_typ_from is TABLE OF pa_object_relationships.object_type_from%TYPE
10673 INDEX BY BINARY_INTEGER;
10674 l_obj_typ_from typ_obj_typ_from;
10675
10676 TYPE typ_obj_from_id is TABLE OF pa_object_relationships.object_id_from1%TYPE
10677 INDEX BY BINARY_INTEGER;
10678 l_obj_from_id typ_obj_from_id;
10679
10680 TYPE typ_obj_typ_to is TABLE OF pa_object_relationships.object_type_to%TYPE
10681 INDEX BY BINARY_INTEGER;
10682 l_obj_typ_to typ_obj_typ_to;
10683
10684 TYPE typ_obj_to_id is TABLE OF pa_object_relationships.object_id_to1%TYPE
10685 INDEX BY BINARY_INTEGER;
10686 l_obj_to_id typ_obj_to_id;
10687
10688 TYPE typ_rel_typ is TABLE OF pa_object_relationships.relationship_type%TYPE
10689 INDEX BY BINARY_INTEGER;
10690 l_rel_typ typ_rel_typ;
10691
10692 TYPE typ_rel_subtyp is TABLE OF pa_object_relationships.relationship_subtype%TYPE
10693 INDEX BY BINARY_INTEGER;
10694 l_rel_subtyp typ_rel_subtyp;
10695
10696 TYPE typ_rec_ver_num is TABLE OF pa_object_relationships.Record_Version_Number%TYPE
10697 INDEX BY BINARY_INTEGER;
10698 l_rec_ver_num typ_rec_ver_num;
10699
10700 TYPE typ_wt_percent is TABLE OF pa_object_relationships.weighting_percentage%TYPE
10701 INDEX BY BINARY_INTEGER;
10702 l_wt_percent typ_wt_percent;
10703
10704
10705 CURSOR cur_pa_obj_rela_3(c_src_str_version_id NUMBER,
10706 c_struc_version_id NUMBER
10707 ) IS
10708 SELECT /*+ USE_HASH(ppev2 ppev1)*/
10709 pa_object_relationships_s.nextval,
10710 pobj.object_type_from,
10711 ppev1.element_version_id,
10712 pobj.object_type_to,
10713 ppev2.element_version_id,
10714 pobj.relationship_type,
10715 pobj.relationship_subtype,
10716 pobj.Record_Version_Number,
10717 pobj.weighting_percentage
10718 FROM ( SELECT object_type_from, object_id_from1,
10719 object_type_to, object_id_to1,
10720 relationship_type, relationship_subtype,
10721 Record_Version_Number, weighting_percentage
10722 FROM pa_object_relationships
10723 --bug#3094283WHERE RELATIONSHIP_TYPE = 'S'
10724 start with object_id_from1 = c_src_str_version_id
10725 and RELATIONSHIP_TYPE = 'S' /* Bug 2881667 - Added this condition */
10726 connect by object_id_from1 = prior object_id_to1
10727 and RELATIONSHIP_TYPE = 'S' ) pobj, /* Bug 2881667 - Added this condition */
10728 pa_proj_element_versions ppev1,
10729 pa_proj_element_versions ppev2
10730 WHERE
10731 --bug#3094283 ppev1.project_id = p_dest_project_id
10732 ppev1.attribute15 = pobj.object_id_from1
10733 --bug#3094283 AND ppev2.project_id = p_dest_project_id
10734 AND ppev2.attribute15 = pobj.object_id_to1
10735 AND ppev1.parent_structure_version_id = c_struc_version_id
10736 AND ppev2.parent_structure_version_id = c_struc_version_id;
10737
10738 /*End of Code added for 6211012*/
10739
10740 --bug 3138959
10741
10742 CURSOR cur_pa_struct IS
10743 SELECT ppe.proj_element_id, ppe.attribute15, ppst.structure_type_id
10744 /* FROM pa_proj_elements ppe, pa_proj_structure_types ppst
10745 WHERE ppe.proj_element_id = ppst.proj_element_id
10746 AND ppe.project_id = p_dest_project_id
10747 AND ppe.object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
10748 from pa_proj_elements ppe,
10749 pa_proj_structure_types ppst,
10750 pa_structure_types pst
10751 where ppe.proj_element_id =ppst.proj_element_id
10752 and ppe.project_id = p_dest_project_id
10753 and ppe.object_type = 'PA_STRUCTURES'
10754 and ppst.structure_type_id = pst.structure_type_id
10755 and pst.structure_type in ('WORKPLAN','FINANCIAL');
10756
10757
10758 x_err_code NUMBER;
10759 x_err_stage VARCHAR2(2000);
10760 x_err_stack VARCHAR2(2000);
10761
10762
10763 --bug 3140032
10764
10765 CURSOR c_attach_tasks(c_orig_parent_structure_id NUMBER,
10766 c_new_parent_structure_id NUMBER) is
10767 SELECT orig.proj_element_id orig_task_id,
10768 new.proj_element_id new_task_id
10769 FROM pa_proj_elements orig, pa_proj_elements new
10770 WHERE orig.project_id = p_src_project_id
10771 AND new.element_number = orig.element_number
10772 AND new.project_id = p_dest_project_id
10773 AND new.object_type = 'PA_TASKS'
10774 AND orig.object_type = 'PA_TASKS'
10775 AND orig.parent_structure_id = c_orig_parent_structure_id
10776 AND new.parent_structure_id = c_new_parent_structure_id
10777 ;
10778
10779 c_atch c_attach_tasks%ROWTYPE ;
10780 l_source_parent_structure_id NUMBER;
10781 l_financial_structure_id Number;
10782 --bug 3140032
10783 --bug 3138959
10784
10785 --fix bug 2831775
10786 l_structure_id NUMBER;
10787 CURSOR get_shared_struc_id IS
10788 select ppe.proj_element_id
10789 /* from pa_proj_elements
10790 where project_id = p_dest_project_id
10791 and object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
10792 from pa_proj_elements ppe,
10793 pa_proj_structure_types ppst,
10794 pa_structure_types pst
10795 where project_id = p_dest_project_id
10796 and object_type = 'PA_STRUCTURES'
10797 and ppe.proj_element_id =ppst.proj_element_id
10798 and ppst.structure_type_id = pst.structure_type_id
10799 and pst.structure_type in ('WORKPLAN','FINANCIAL');
10800
10801 --bug 2838547
10802 cursor get_person_id(p_user_id NUMBER) IS
10803 select p.person_id
10804 from per_all_people_f p, fnd_user f
10805 where f.employee_id = p.person_id
10806 and sysdate between p.effective_start_date and p.effective_end_date
10807 and f.user_id = p_user_id;
10808
10809 l_publish_person_id NUMBER;
10810 --bug 2838547
10811
10812 --Bug 2955589.
10813 l_structure_ver_name pa_projects_all.name%TYPE;
10814 l_working_ver_count NUMBER;
10815 l_structure_version_id pa_proj_element_versions.element_version_id%TYPE;
10816 -- The following two flags will indicate if the respective version has to be
10817 -- created when versioning is enabled and no working version exists for the
10818 -- source project.
10819 l_create_fin_version VARCHAR2(1);
10820 l_create_wk_version VARCHAR2(1);
10821
10822 BEGIN
10823
10824 IF (p_debug_mode = 'Y') THEN
10825 pa_debug.init_err_stack ('PA_PROJ_TASK_STRUC_PUB.copy_structures_bulk'); --For bug 4252182
10826 pa_debug.debug('PA_PROJ_TASK_STRUC_PUB.copy_structures_bulk begin');
10827 END IF;
10828
10829 IF (p_commit = FND_API.G_TRUE) THEN
10830 savepoint copy_structure_bulk_pvt;
10831 END IF;
10832
10833 -- Check if source and destination project are the same
10834 if p_src_project_id = p_dest_project_id then
10835 x_return_status := FND_API.G_RET_STS_SUCCESS;
10836 return;
10837 end if;
10838 l_dest_template_flag := p_dest_template_flag; --bug 2805602
10839 l_src_template_flag := p_src_template_flag; --bug 2805602
10840 l_project_name := p_dest_project_name; --bug 2805602
10841
10842 select meaning
10843 into l_suffix
10844 from pa_lookups
10845 where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
10846 and lookup_code = 'WORKPLAN';
10847
10848 -- Bug 3717026 Begin, commented as the structure name should be same as the project name.
10849 --IF pa_project_pub.G_structure_in_rec.structure_version_name is NOT NULL AND pa_project_pub.G_structure_in_rec.structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10850 --l_name := pa_project_pub.G_structure_in_rec.structure_version_name;
10851 --ELSE
10852 l_name := substr(l_project_name, 1, 240);
10853 --END IF;
10854 -- Bug 3717026 End
10855 l_workplan_enabled := PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( p_src_project_id );
10856
10857 --bug 2838547
10858 open get_person_id(FND_GLOBAL.USER_ID);
10859 fetch get_person_id into l_publish_person_id;
10860 IF get_person_id%NOTFOUND then
10861 l_publish_person_id := NULL;
10862 END IF;
10863 close get_person_id;
10864 --bug 2838547
10865
10866 IF NVL( l_workplan_enabled, 'N' ) = 'Y'
10867 THEN
10868
10869 l_shared := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_src_project_id);
10870 --Get workplan attributes
10871 OPEN get_wp_attr;
10872 FETCH get_wp_attr into l_wp_attr_rec;
10873 CLOSE get_wp_attr;
10874
10875 l_versioning_enabled := l_wp_attr_rec.WP_ENABLE_VERSION_FLAG;
10876 l_auto_pub_enabled := l_wp_attr_rec.AUTO_PUB_UPON_CREATION_FLAG;
10877
10878 --Modify name; add suffix
10879 --l_name := substr(l_project_name||l_append||l_suffix, 1, 240); --update it later
10880
10881 END IF;
10882
10883
10884 --copy pa_proj_elements
10885 --copying structures and tasks as is.
10886 INSERT INTO pa_proj_elements(
10887 PROJ_ELEMENT_ID
10888 ,PROJECT_ID
10889 ,OBJECT_TYPE
10890 ,ELEMENT_NUMBER
10891 ,NAME
10892 ,DESCRIPTION
10893 ,STATUS_CODE
10894 ,WF_STATUS_CODE
10895 ,PM_SOURCE_CODE
10896 ,PM_SOURCE_REFERENCE
10897 ,CLOSED_DATE
10898 ,LOCATION_ID
10899 ,MANAGER_PERSON_ID
10900 ,CARRYING_OUT_ORGANIZATION_ID
10901 ,TYPE_ID
10902 ,PRIORITY_CODE
10903 ,CREATION_DATE
10904 ,CREATED_BY
10905 ,LAST_UPDATE_DATE
10906 ,LAST_UPDATED_BY
10907 ,LAST_UPDATE_LOGIN
10908 ,RECORD_VERSION_NUMBER
10909 ,REQUEST_ID
10910 ,PROGRAM_APPLICATION_ID
10911 ,PROGRAM_ID
10912 ,PROGRAM_UPDATE_DATE
10913 ,LINK_TASK_FLAG
10914 ,BASELINE_START_DATE
10915 ,BASELINE_FINISH_DATE
10916 ,progress_outdated_flag
10917 ,ATTRIBUTE_CATEGORY
10918 ,ATTRIBUTE1
10919 ,ATTRIBUTE2
10920 ,ATTRIBUTE3
10921 ,ATTRIBUTE4
10922 ,ATTRIBUTE5
10923 ,ATTRIBUTE6
10924 ,ATTRIBUTE7
10925 ,ATTRIBUTE8
10926 ,ATTRIBUTE9
10927 ,ATTRIBUTE10
10928 ,ATTRIBUTE11
10929 ,ATTRIBUTE12
10930 ,ATTRIBUTE13
10931 ,ATTRIBUTE14
10932 ,ATTRIBUTE15
10933 ,parent_structure_id
10934 ,TYPE_CODE
10935 ,INC_PROJ_PROGRESS_FLAG
10936 ,WQ_ITEM_CODE
10937 ,WQ_UOM_CODE
10938 ,WQ_ACTUAL_ENTRY_CODE
10939 ,TASK_PROGRESS_ENTRY_PAGE_ID
10940 ,BASELINE_DURATION
10941 ,PHASE_CODE
10942 ,PHASE_VERSION_ID
10943 ,source_object_id
10944 ,source_object_type
10945 ,PROGRESS_WEIGHT --Bug 3616964
10946 ,BASE_PERCENT_COMP_DERIV_CODE
10947 ,FUNCTION_CODE
10948 ,ENABLE_WF_FLAG
10949 ,WF_ITEM_TYPE
10950 ,WF_PROCESS
10951 ,WF_START_LEAD_DAYS
10952 )
10953 SELECT
10954 pa_tasks_s.nextval
10955 ,p_dest_project_id
10956 ,ppe.object_type
10957 ,ppe.element_number
10958 ,DECODE( ppe.object_type, 'PA_STRUCTURES',l_name, ppe.name )
10959 ,ppe.DESCRIPTION
10960 ,ppe.STATUS_CODE
10961 ,ppe.WF_STATUS_CODE
10962 ,ppe.PM_SOURCE_CODE
10963 ,ppe.PM_SOURCE_REFERENCE
10964 ,ppe.CLOSED_DATE
10965 ,ppe.LOCATION_ID
10966 ,ppe.MANAGER_PERSON_ID
10967 ,ppe.CARRYING_OUT_ORGANIZATION_ID
10968 ,ppe.TYPE_ID
10969 ,ppe.PRIORITY_CODE
10970 ,SYSDATE
10971 ,l_user_id
10972 ,SYSDATE
10973 ,l_user_id
10974 ,l_login_id
10975 ,ppe.RECORD_VERSION_NUMBER
10976 ,ppe.REQUEST_ID
10977 ,ppe.PROGRAM_APPLICATION_ID
10978 ,ppe.PROGRAM_ID
10979 ,ppe.PROGRAM_UPDATE_DATE
10980 ,ppe.LINK_TASK_FLAG
10981 ,ppe.BASELINE_START_DATE
10982 ,ppe.BASELINE_FINISH_DATE
10983 ,'N' --,ppe.progress_outdated_flag
10984 ,ppe.ATTRIBUTE_CATEGORY
10985 ,ppe.ATTRIBUTE1
10986 ,ppe.ATTRIBUTE2
10987 ,ppe.ATTRIBUTE3
10988 ,ppe.ATTRIBUTE4
10989 ,ppe.ATTRIBUTE5
10990 ,ppe.ATTRIBUTE6
10991 ,ppe.ATTRIBUTE7
10992 ,ppe.ATTRIBUTE8
10993 ,ppe.ATTRIBUTE9
10994 ,ppe.ATTRIBUTE10
10995 ,ppe.ATTRIBUTE11
10996 ,ppe.ATTRIBUTE12
10997 ,ppe.ATTRIBUTE13
10998 ,ppe.ATTRIBUTE14
10999 ,ppe.proj_element_id --attribute 15 is used to store old structure id to identify the structure type
11000 ,ppe.parent_structure_id
11001 ,ppe.TYPE_CODE
11002 ,ppe.INC_PROJ_PROGRESS_FLAG
11003 ,ppe.WQ_ITEM_CODE
11004 ,ppe.WQ_UOM_CODE
11005 ,ppe.WQ_ACTUAL_ENTRY_CODE
11006 ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
11007 ,ppe.BASELINE_DURATION
11008 ,ppe.PHASE_CODE
11009 ,ppe.PHASE_VERSION_ID
11010 ,p_dest_project_id
11011 ,'PA_PROJECTS'
11012 ,ppe.PROGRESS_WEIGHT --Bug 3616964
11013 ,ppe.BASE_PERCENT_COMP_DERIV_CODE
11014 ,ppe.FUNCTION_CODE
11015 ,ppe.ENABLE_WF_FLAG
11016 ,ppe.WF_ITEM_TYPE
11017 ,ppe.WF_PROCESS
11018 ,ppe.WF_START_LEAD_DAYS
11019 /* FROM pa_proj_elements ppe
11020 where project_id = p_src_project_id
11021 and ppe.object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11022 from pa_proj_elements ppe
11023 where ppe.project_id = p_src_project_id
11024 and ppe.object_type = 'PA_STRUCTURES'
11025 and ppe.proj_element_id IN (select ppe2.proj_element_id
11026 from pa_proj_elements ppe2,
11027 pa_proj_structure_types ppst,
11028 pa_structure_types pst
11029 where ppe2.project_id = p_src_project_id
11030 and ppe2.object_type = 'PA_STRUCTURES'
11031 and ppe2.proj_element_id = ppst.proj_element_id
11032 and ppst.structure_type_id = pst.structure_type_id
11033 and pst.structure_type in ('WORKPLAN','FINANCIAL'));
11034
11035
11036 --updating element_number with the proj_element_id
11037 update pa_proj_elements
11038 set element_number = proj_element_id
11039 WHERE project_id = p_dest_project_id
11040 AND object_type = 'PA_STRUCTURES'
11041 ;
11042
11043
11044 --Copy pa_proj_structure_types
11045
11046 INSERT INTO PA_PROJ_STRUCTURE_TYPES(
11047 PROJ_STRUCTURE_TYPE_ID
11048 ,PROJ_ELEMENT_ID
11049 ,STRUCTURE_TYPE_ID
11050 ,CREATION_DATE
11051 ,CREATED_BY
11052 ,LAST_UPDATE_DATE
11053 ,LAST_UPDATED_BY
11054 ,LAST_UPDATE_LOGIN
11055 ,RECORD_VERSION_NUMBER )
11056 SELECT
11057 pa_proj_structure_types_s.nextval
11058 , ppe.proj_element_id
11059 , ppst.structure_type_id --structure type
11060 , sysdate
11061 , l_user_id
11062 , sysdate
11063 , l_user_id
11064 , l_login_id
11065 , 1
11066 /*from pa_proj_elements ppe, pa_proj_structure_types ppst
11067 where ppe.project_id = p_dest_project_id
11068 and ppe.attribute15 = ppst.proj_element_id ---join with copy_from_proj_element_id to get the structure types
11069 and ppe.object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11070 from pa_proj_elements ppe,
11071 pa_proj_structure_types ppst,
11072 pa_structure_types pst
11073 where ppe.project_id = p_dest_project_id
11074 and ppe.attribute15 = ppst.proj_element_id
11075 and ppe.object_type = 'PA_STRUCTURES'
11076 and ppst.structure_type_id = pst.structure_type_id
11077 and pst.structure_type in ('WORKPLAN','FINANCIAL');
11078
11079 --bug 3138959
11080 IF l_shared = 'N' AND l_workplan_enabled = 'Y' -- For Split structures
11081 AND pa_project_pub.G_structure_in_rec.structure_type = 'WORKPLAN'
11082 THEN
11083 FOR cur_pa_struct_rec in cur_pa_struct LOOP
11084 IF cur_pa_struct_rec.structure_type_id = 6 --Financial
11085 THEN
11086 --call PA_PROJECT_CORE2.copy_task to copy PA_TASKSi tasks.
11087
11088 pa_project_core2.copy_task (
11089 x_orig_project_id => p_src_project_id ,
11090 x_new_project_id => p_dest_project_id,
11091 x_err_code => x_err_code,
11092 x_err_stage => x_err_stage,
11093 x_err_stack => x_err_stack);
11094
11095 if ( x_err_code > 0 or x_err_code < 0 ) then
11096 x_msg_data := x_err_stage;
11097 raise FND_API.G_EXC_ERROR;
11098 end if;
11099
11100 --Split; Creating Financial tasks
11101 INSERT INTO pa_proj_elements(
11102 PROJ_ELEMENT_ID
11103 ,PROJECT_ID
11104 ,OBJECT_TYPE
11105 ,ELEMENT_NUMBER
11106 ,NAME
11107 ,DESCRIPTION
11108 ,STATUS_CODE
11109 ,WF_STATUS_CODE
11110 ,PM_SOURCE_CODE
11111 ,PM_SOURCE_REFERENCE
11112 ,CLOSED_DATE
11113 ,LOCATION_ID
11114 ,MANAGER_PERSON_ID
11115 ,CARRYING_OUT_ORGANIZATION_ID
11116 ,TYPE_ID
11117 ,PRIORITY_CODE
11118 ,CREATION_DATE
11119 ,CREATED_BY
11120 ,LAST_UPDATE_DATE
11121 ,LAST_UPDATED_BY
11122 ,LAST_UPDATE_LOGIN
11123 ,RECORD_VERSION_NUMBER
11124 ,REQUEST_ID
11125 ,PROGRAM_APPLICATION_ID
11126 ,PROGRAM_ID
11127 ,PROGRAM_UPDATE_DATE
11128 ,LINK_TASK_FLAG
11129 ,BASELINE_START_DATE
11130 ,BASELINE_FINISH_DATE
11131 ,progress_outdated_flag
11132 ,ATTRIBUTE_CATEGORY
11133 ,ATTRIBUTE1
11134 ,ATTRIBUTE2
11135 ,ATTRIBUTE3
11136 ,ATTRIBUTE4
11137 ,ATTRIBUTE5
11138 ,ATTRIBUTE6
11139 ,ATTRIBUTE7
11140 ,ATTRIBUTE8
11141 ,ATTRIBUTE9
11142 ,ATTRIBUTE10
11143 ,ATTRIBUTE11
11144 ,ATTRIBUTE12
11145 ,ATTRIBUTE13
11146 ,ATTRIBUTE14
11147 ,ATTRIBUTE15
11148 ,parent_structure_id
11149 ,TYPE_CODE
11150 ,INC_PROJ_PROGRESS_FLAG
11151 ,WQ_ITEM_CODE
11152 ,WQ_UOM_CODE
11153 ,WQ_ACTUAL_ENTRY_CODE
11154 ,TASK_PROGRESS_ENTRY_PAGE_ID
11155 ,BASELINE_DURATION
11156 ,PHASE_CODE
11157 ,PHASE_VERSION_ID
11158 ,source_object_id
11159 ,source_object_type
11160 ,PROGRESS_WEIGHT --Bug 3616964
11161 ,BASE_PERCENT_COMP_DERIV_CODE
11162 ,FUNCTION_CODE
11163 ,ENABLE_WF_FLAG
11164 ,WF_ITEM_TYPE
11165 ,WF_PROCESS
11166 ,WF_START_LEAD_DAYS
11167 )
11168 SELECT
11169 pt.task_id
11170 ,p_dest_project_id
11171 ,ppe.object_type
11172 ,ppe.element_number
11173 ,ppe.name
11174 ,ppe.DESCRIPTION
11175 ,INITIAL_STATUS_CODE --bug 2827090
11176 ,ppe.WF_STATUS_CODE
11177 ,ppe.PM_SOURCE_CODE --update the source code later
11178 ,decode(ppe.PM_SOURCE_REFERENCE, null,pt.task_number, ppe.PM_SOURCE_REFERENCE )
11179 ,ppe.CLOSED_DATE
11180 ,ppe.LOCATION_ID
11181 ,ppe.MANAGER_PERSON_ID
11182 ,ppe.CARRYING_OUT_ORGANIZATION_ID
11183 ,ppe.TYPE_ID
11184 ,ppe.PRIORITY_CODE
11185 ,SYSDATE
11186 ,l_user_id
11187 ,SYSDATE
11188 ,l_user_id
11189 ,l_login_id
11190 ,ppe.RECORD_VERSION_NUMBER
11191 ,ppe.REQUEST_ID
11192 ,ppe.PROGRAM_APPLICATION_ID
11193 ,ppe.PROGRAM_ID
11194 ,ppe.PROGRAM_UPDATE_DATE
11195 ,ppe.LINK_TASK_FLAG
11196 ,ppe.BASELINE_START_DATE
11197 ,ppe.BASELINE_FINISH_DATE
11198 ,'N' --,ppe.progress_outdated_flag
11199 ,ppe.ATTRIBUTE_CATEGORY
11200 ,ppe.ATTRIBUTE1
11201 ,ppe.ATTRIBUTE2
11202 ,ppe.ATTRIBUTE3
11203 ,ppe.ATTRIBUTE4
11204 ,ppe.ATTRIBUTE5
11205 ,ppe.ATTRIBUTE6
11206 ,ppe.ATTRIBUTE7
11207 ,ppe.ATTRIBUTE8
11208 ,ppe.ATTRIBUTE9
11209 ,ppe.ATTRIBUTE10
11210 ,ppe.ATTRIBUTE11
11211 ,ppe.ATTRIBUTE12
11212 ,ppe.ATTRIBUTE13
11213 ,ppe.ATTRIBUTE14
11214 ,ppe.proj_element_id --attribute 15 is used to store old ids
11215 ,cur_pa_struct_rec.proj_element_id
11216 ,ppe.TYPE_CODE
11217 ,ppe.INC_PROJ_PROGRESS_FLAG
11218 ,ppe.WQ_ITEM_CODE
11219 ,ppe.WQ_UOM_CODE
11220 ,ppe.WQ_ACTUAL_ENTRY_CODE
11221 ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
11222 ,ppe.BASELINE_DURATION
11223 ,ppe.PHASE_CODE
11224 ,ppe.PHASE_VERSION_ID
11225 ,p_dest_project_id
11226 ,'PA_PROJECTS'
11227 ,ppe.PROGRESS_WEIGHT --Bug 3616964
11228 ,ppe.BASE_PERCENT_COMP_DERIV_CODE
11229 ,ppe.FUNCTION_CODE
11230 ,'N'
11231 ,ppe.WF_ITEM_TYPE
11232 ,ppe.WF_PROCESS
11233 ,ppe.WF_START_LEAD_DAYS
11234 FROM pa_proj_elements ppe,
11235 pa_tasks pt,
11236 pa_task_types ptt --bug 2827090
11237 WHERE ppe.project_id = p_src_project_id
11238 AND pt.project_id = p_dest_project_id
11239 AND pt.task_number = substrb(rtrim(ppe.element_number),1,25) -- Substrb added for Bug 5152448
11240 AND ppe.parent_structure_id = cur_pa_struct_rec.attribute15
11241 and ppe.object_type = 'PA_TASKS'
11242 and ppe.type_id = ptt.task_type_id --bug 2827090
11243 ;
11244
11245 l_financial_structure_id := cur_pa_struct_rec.proj_element_id;
11246 ---update task reference in pa_tasks for all the
11247 update pa_tasks
11248 set PM_TASK_REFERENCE = task_number
11249 where project_id = p_dest_project_id
11250 and pm_task_reference IS NULL
11251 ;
11252
11253
11254 --bug 3140032
11255 OPEN c_attach_tasks( cur_pa_struct_rec.attribute15,
11256 cur_pa_struct_rec.proj_element_id);
11257 LOOP
11258 FETCH c_attach_tasks INTO c_atch ;
11259 if c_attach_tasks%notfound then
11260 exit ;
11261 end if;
11262 fnd_attached_documents2_pkg.copy_attachments('PA_TASKS',
11263 c_atch.orig_task_id,
11264 null, null, null, null,
11265 'PA_TASKS',
11266 c_atch.new_task_id,
11267 null, null, null, null,
11268 FND_GLOBAL.USER_ID,
11269 FND_GLOBAL.LOGIN_ID,
11270 275, null, null);
11271
11272 END LOOP ;
11273 CLOSE c_attach_tasks;
11274 --bug 3140032
11275 ELSIF cur_pa_struct_rec.structure_type_id = 1
11276 THEN
11277
11278 ---update source reference in pa_proj_elements for all the
11279 Update pa_proj_elements
11280 set PM_SOURCE_CODE = ( SELECT PM_SOURCE_CODE FROM pa_proj_elements
11281 WHERE project_id = p_dest_project_id
11282 AND object_type = 'PA_STRUCTURES'
11283 AND proj_element_id = cur_pa_struct_rec.proj_element_id
11284 AND PM_SOURCE_CODE IS NOT NULL
11285 )
11286 WHERE proj_element_id = l_financial_structure_id
11287 AND project_id = p_dest_project_id
11288 AND PM_SOURCE_CODE IS NULL;
11289
11290 ---update source reference in pa_tasks for all the
11291 Update pa_tasks
11292 set PM_PRODUCT_CODE = ( SELECT PM_SOURCE_CODE FROM pa_proj_elements
11293 WHERE project_id = p_dest_project_id
11294 AND object_type = 'PA_STRUCTURES'
11295 AND proj_element_id = cur_pa_struct_rec.proj_element_id
11296 AND PM_SOURCE_CODE IS NOT NULL
11297 )
11298 WHERE project_id = p_dest_project_id
11299 AND PM_PRODUCT_CODE IS NULL;
11300
11301 END IF; --if structure type = 6
11302 END LOOP;
11303 END IF; --bug 3138959
11304
11305 IF NVL( l_workplan_enabled, 'N' ) = 'N'
11306 THEN
11307 --Only FINANCIAL
11308 --Creating structure version first
11309 OPEN cur_elem_ver_seq;
11310 FETCH cur_elem_ver_seq INTO l_struc_version_id;
11311 CLOSE cur_elem_ver_seq;
11312
11313
11314 --First copy structure version and then copy all task versions
11315 --We cannot perform both with the same sql bcoz we need parent_structure version id for tasks.
11316 INSERT INTO pa_proj_element_versions(
11317 ELEMENT_VERSION_ID
11318 ,PROJ_ELEMENT_ID
11319 ,OBJECT_TYPE
11320 ,PROJECT_ID
11321 ,PARENT_STRUCTURE_VERSION_ID
11322 ,DISPLAY_SEQUENCE
11323 ,WBS_LEVEL
11324 ,WBS_NUMBER
11325 ,CREATION_DATE
11326 ,CREATED_BY
11327 ,LAST_UPDATE_DATE
11328 ,LAST_UPDATED_BY
11329 ,LAST_UPDATE_LOGIN
11330 ,RECORD_VERSION_NUMBER
11331 ,attribute15 --this column is used to store structure ver id of the source project to be used to created relationships.
11332 ,ATTRIBUTE_CATEGORY
11333 ,ATTRIBUTE1
11334 ,ATTRIBUTE2
11335 ,ATTRIBUTE3
11336 ,ATTRIBUTE4
11337 ,ATTRIBUTE5
11338 ,ATTRIBUTE6
11339 ,ATTRIBUTE7
11340 ,ATTRIBUTE8
11341 ,ATTRIBUTE9
11342 ,ATTRIBUTE10
11343 ,ATTRIBUTE11
11344 ,ATTRIBUTE12
11345 ,ATTRIBUTE13
11346 ,ATTRIBUTE14
11347 ,TASK_UNPUB_VER_STATUS_CODE
11348 ,source_object_id
11349 ,source_object_type
11350 )
11351 SELECT
11352 l_struc_version_id
11353 ,ppe.proj_element_id
11354 ,ppev.object_type
11355 ,p_dest_project_id
11356 ,l_struc_version_id
11357 ,ppev.DISPLAY_SEQUENCE
11358 ,ppev.WBS_LEVEL
11359 ,ppev.WBS_NUMBER
11360 ,SYSDATE ------CREATION_DATE
11361 ,l_user_id ------CREATED_BY
11362 ,SYSDATE ------LAST_UPDATE_DATE
11363 ,l_user_id ------LAST_UPDATED_BY
11364 ,l_login_id ------LAST_UPDATE_LOGIN
11365 ,ppev.RECORD_VERSION_NUMBER ------RECORD_VERSION_NUMBER
11366 ,ppev.element_version_id
11367 ,ppev.ATTRIBUTE_CATEGORY
11368 ,ppev.ATTRIBUTE1
11369 ,ppev.ATTRIBUTE2
11370 ,ppev.ATTRIBUTE3
11371 ,ppev.ATTRIBUTE4
11372 ,ppev.ATTRIBUTE5
11373 ,ppev.ATTRIBUTE6
11374 ,ppev.ATTRIBUTE7
11375 ,ppev.ATTRIBUTE8
11376 ,ppev.ATTRIBUTE9
11377 ,ppev.ATTRIBUTE10
11378 ,ppev.ATTRIBUTE11
11379 ,ppev.ATTRIBUTE12
11380 ,ppev.ATTRIBUTE13
11381 ,ppev.ATTRIBUTE14
11382 ,ppev.TASK_UNPUB_VER_STATUS_CODE
11383 ,p_dest_project_id
11384 ,'PA_PROJECTS'
11385 /*from pa_proj_element_versions ppev,
11386 pa_proj_elements ppe
11387 where ppev.project_id = p_src_project_id
11388 and ppe.project_id = p_dest_project_id
11389 and ppev.proj_element_id = ppe.attribute15
11390 and ppe.object_type = 'PA_STRUCTURES'
11391 and ppev.object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11392 from pa_proj_element_Versions ppev,
11393 pa_proj_elements ppe
11394 where ppev.project_id = p_src_project_id
11395 and ppe.project_id = p_dest_project_id
11396 and ppev.proj_element_id = ppe.attribute15
11397 and ppe.object_type = 'PA_STRUCTURES'
11398 and ppev.object_type = 'PA_STRUCTURES'
11399 and ppe.proj_element_id IN
11400 (select ppe2.proj_element_id
11401 from pa_proj_elements ppe2,
11402 pa_proj_structure_types ppst,
11403 pa_structure_types pst
11404 -- where ppe2.project_id = p_src_project_id
11405 where ppe2.project_id = p_dest_project_id --Bug 3585699 SMukka Replaced p_src_project_id by p_dest_project_id
11406 and ppe2.object_type = 'PA_STRUCTURES'
11407 and ppe2.proj_element_id = ppst.proj_element_id
11408 and ppst.structure_type_id = pst.structure_type_id
11409 and pst.structure_type in ('WORKPLAN','FINANCIAL'));
11410
11411
11412
11413 SELECT element_version_id INTO l_src_str_version_id
11414 /*FROM pa_proj_element_versions
11415 WHERE project_id = p_src_project_id
11416 AND object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11417 FROM pa_proj_element_versions
11418 WHERE project_id = p_src_project_id
11419 AND object_type = 'PA_STRUCTURES'
11420 and proj_element_id IN (select ppe2.proj_element_id
11421 from pa_proj_elements ppe2,
11422 pa_proj_structure_types ppst,
11423 pa_structure_types pst
11424 where ppe2.project_id = p_src_project_id
11425 and ppe2.object_type = 'PA_STRUCTURES'
11426 and ppe2.proj_element_id = ppst.proj_element_id
11427 and ppst.structure_type_id = pst.structure_type_id
11428 and pst.structure_type in ('WORKPLAN','FINANCIAL'));
11429
11430
11431 --bug 3010538
11432 --added PROCESS_UPDATE_WBS_FLAG
11433 INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
11434 PEV_STRUCTURE_ID
11435 ,ELEMENT_VERSION_ID
11436 ,VERSION_NUMBER
11437 ,NAME
11438 ,PROJECT_ID
11439 ,PROJ_ELEMENT_ID
11440 ,DESCRIPTION
11441 ,EFFECTIVE_DATE
11442 ,PUBLISHED_DATE
11443 ,PUBLISHED_BY_PERSON_ID
11444 ,CURRENT_BASELINE_DATE
11445 ,CURRENT_FLAG
11446 ,CURRENT_BASELINE_PERSON_ID
11447 ,ORIGINAL_BASELINE_DATE
11448 ,ORIGINAL_FLAG
11449 ,ORIGINAL_BASELINE_PERSON_ID
11450 ,LOCK_STATUS_CODE
11451 ,LOCKED_BY_PERSON_ID
11452 ,LOCKED_DATE
11453 ,STATUS_CODE
11454 ,WF_STATUS_CODE
11455 ,LATEST_EFF_PUBLISHED_FLAG
11456 ,RECORD_VERSION_NUMBER
11457 ,WBS_RECORD_VERSION_NUMBER
11458 ,CREATION_DATE
11459 ,CREATED_BY
11460 ,LAST_UPDATE_DATE
11461 ,LAST_UPDATED_BY
11462 ,LAST_UPDATE_LOGIN
11463 ,change_reason_code
11464 ,PROCESS_UPDATE_WBS_FLAG
11465 ,current_working_flag /* FPM bug 3301192 */
11466 ,source_object_id
11467 ,source_object_type
11468 )
11469 SELECT
11470 pa_proj_elem_ver_structure_s.nextval
11471 ,l_struc_version_id
11472 ,1
11473 --,ppevs.name, rtarway, 3655698, replaced ppevs.name with ppe.name
11474 ,ppe.name
11475 ,p_dest_project_id
11476 ,ppe.proj_element_id
11477 --,ppevs.DESCRIPTION , rtarway, 3655698 replaced ppevs.DESCRIPTION with ppe.DESCRIPTION
11478 ,ppe.description
11479 ,ppevs.EFFECTIVE_DATE
11480 ,decode(p_dest_template_flag, 'N', sysdate, to_date(NULL)) --bug 2838547
11481 ,decode(p_dest_template_flag, 'N', l_publish_person_id, NULL) --bug 2838547
11482 ,ppevs.CURRENT_BASELINE_DATE
11483 ,ppevs.CURRENT_FLAG
11484 ,ppevs.CURRENT_BASELINE_PERSON_ID
11485 ,ppevs.ORIGINAL_BASELINE_DATE
11486 ,ppevs.ORIGINAL_FLAG
11487 ,ppevs.ORIGINAL_BASELINE_PERSON_ID
11488 ,'UNLOCKED'
11489 ,null
11490 ,null
11491 ,decode( p_dest_template_flag, 'N', 'STRUCTURE_PUBLISHED', ppevs.STATUS_CODE )
11492 ,ppevs.WF_STATUS_CODE
11493 ,decode( p_dest_template_flag, 'N', 'Y', ppevs.LATEST_EFF_PUBLISHED_FLAG )
11494 ,ppevs.RECORD_VERSION_NUMBER
11495 ,ppevs.WBS_RECORD_VERSION_NUMBER
11496 ,SYSDATE
11497 ,l_user_id
11498 ,SYSDATE
11499 ,l_user_id
11500 ,l_login_id
11501 ,ppevs.change_reason_code
11502 ,'N'
11503 ,ppevs.current_working_flag /* FPM bug 3301192 */
11504 ,p_dest_project_id
11505 ,'PA_PROJECTS'
11506 /*FROM PA_PROJ_ELEM_VER_STRUCTURE ppevs, pa_proj_elements ppe
11507 WHERE ppevs.project_id = p_src_project_id
11508 AND ppe.project_id = p_dest_project_id
11509 and ppevs.proj_element_id = ppe.attribute15
11510 AND ppe.object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11511 FROM PA_PROJ_ELEM_VER_STRUCTURE ppevs, pa_proj_elements ppe
11512 WHERE ppevs.project_id = p_src_project_id
11513 AND ppe.project_id = p_dest_project_id
11514 and ppevs.proj_element_id = ppe.attribute15
11515 AND ppe.object_type = 'PA_STRUCTURES'
11516 and ppe.proj_element_id IN (SELECT ppe2.proj_element_id
11517 FROM pa_proj_elements ppe2,
11518 pa_proj_structure_types ppst,
11519 pa_structure_types pst
11520 WHERE ppe2.project_id = p_dest_project_id
11521 AND ppe2.object_type = 'PA_STRUCTURES'
11522 AND ppe2.proj_element_id = ppst.proj_element_id
11523 AND ppst.structure_type_id = pst.structure_type_id
11524 AND pst.structure_type in ('WORKPLAN','FINANCIAL'));
11525 --Added by rtarway for BUG 3951701
11526 --Copy workplan attributes for financial only structures
11527
11528 INSERT INTO pa_proj_workplan_attr(
11529 PROJ_ELEMENT_ID
11530 ,PROJECT_ID
11531 ,LAST_UPDATE_DATE
11532 ,LAST_UPDATED_BY
11533 ,CREATION_DATE
11534 ,CREATED_BY
11535 ,WP_APPROVAL_REQD_FLAG
11536 ,WP_AUTO_PUBLISH_FLAG
11537 ,WP_DEFAULT_DISPLAY_LVL
11538 ,WP_ENABLE_VERSION_FLAG
11539 ,AUTO_PUB_UPON_CREATION_FLAG
11540 ,AUTO_SYNC_TXN_DATE_FLAG
11541 ,WP_APPROVER_SOURCE_ID
11542 ,WP_APPROVER_SOURCE_TYPE
11543 ,RECORD_VERSION_NUMBER
11544 ,LAST_UPDATE_LOGIN
11545 ,TXN_DATE_SYNC_BUF_DAYS
11546 ,LIFECYCLE_VERSION_ID
11547 ,CURRENT_PHASE_VERSION_ID
11548 ,SCHEDULE_THIRD_PARTY_FLAG
11549 ,ALLOW_LOWEST_TSK_DEP_FLAG
11550 ,AUTO_ROLLUP_SUBPROJ_FLAG
11551 ,THIRD_PARTY_SCHEDULE_CODE
11552 ,source_object_id
11553 ,source_object_type
11554 )
11555 SELECT
11556 ppe.PROJ_ELEMENT_ID
11557 ,ppe.PROJECT_ID
11558 ,SYSDATE
11559 ,l_user_id
11560 ,SYSDATE
11561 ,l_user_id
11562 ,ppwa.WP_APPROVAL_REQD_FLAG
11563 ,ppwa.WP_AUTO_PUBLISH_FLAG
11564 ,ppwa.WP_DEFAULT_DISPLAY_LVL
11565 ,ppwa.WP_ENABLE_VERSION_FLAG
11566 ,ppwa.AUTO_PUB_UPON_CREATION_FLAG
11567 ,ppwa.AUTO_SYNC_TXN_DATE_FLAG
11568 ,ppwa.WP_APPROVER_SOURCE_ID
11569 ,ppwa.WP_APPROVER_SOURCE_TYPE
11570 ,ppwa.RECORD_VERSION_NUMBER
11571 ,l_login_id
11572 ,ppwa.TXN_DATE_SYNC_BUF_DAYS
11573 ,ppwa.LIFECYCLE_VERSION_ID
11574 ,ppwa.CURRENT_PHASE_VERSION_ID
11575 ,ppwa.SCHEDULE_THIRD_PARTY_FLAG
11576 ,ppwa.ALLOW_LOWEST_TSK_DEP_FLAG
11577 ,ppwa.AUTO_ROLLUP_SUBPROJ_FLAG
11578 ,ppwa.THIRD_PARTY_SCHEDULE_CODE
11579 ,ppe.PROJECT_ID
11580 ,'PA_PROJECTS'
11581 FROM pa_proj_elements ppe,
11582 pa_proj_workplan_attr ppwa
11583 WHERE ppwa.project_id = p_src_project_id
11584 AND ppe.attribute15 = ppwa.proj_element_id
11585 AND ppe.project_id = p_dest_project_id
11586 AND ppe.object_type='PA_STRUCTURES';
11587
11588 --Copy progress attributes for financial only structures
11589 INSERT INTO pa_proj_progress_attr(
11590 PROJ_PROGRESS_ATTR_ID
11591 ,OBJECT_TYPE
11592 ,OBJECT_ID
11593 ,LAST_UPDATE_DATE
11594 ,LAST_UPDATED_BY
11595 ,CREATION_DATE
11596 ,CREATED_BY
11597 ,LAST_UPDATE_LOGIN
11598 ,PROJECT_ID
11599 ,PROGRESS_CYCLE_ID
11600 ,WQ_ENABLE_FLAG
11601 ,REMAIN_EFFORT_ENABLE_FLAG
11602 ,PERCENT_COMP_ENABLE_FLAG
11603 ,NEXT_PROGRESS_UPDATE_DATE
11604 ,RECORD_VERSION_NUMBER
11605 ,TASK_WEIGHT_BASIS_CODE
11606 ,ALLOW_COLLAB_PROG_ENTRY
11607 ,ALLOW_PHY_PRCNT_CMP_OVERRIDES
11608 ,STRUCTURE_TYPE
11609 )
11610 SELECT
11611 PA_PROJ_PROGRESS_ATTR_S.nextval
11612 ,ppe.OBJECT_TYPE
11613 ,ppe.proj_element_ID
11614 ,sysdate
11615 ,l_user_id
11616 ,SYSDATE
11617 ,l_user_id
11618 ,l_login_id
11619 ,p_dest_project_id
11620 ,pppa.PROGRESS_CYCLE_ID
11621 ,pppa.WQ_ENABLE_FLAG
11622 ,pppa.REMAIN_EFFORT_ENABLE_FLAG
11623 ,pppa.PERCENT_COMP_ENABLE_FLAG
11624 ,pppa.NEXT_PROGRESS_UPDATE_DATE
11625 ,pppa.RECORD_VERSION_NUMBER
11626 ,pppa.TASK_WEIGHT_BASIS_CODE
11627 ,pppa.ALLOW_COLLAB_PROG_ENTRY
11628 ,pppa.ALLOW_PHY_PRCNT_CMP_OVERRIDES
11629 ,pppa.STRUCTURE_TYPE
11630 FROM pa_proj_progress_attr pppa,
11631 pa_proj_elements ppe
11632 WHERE ppe.project_id = p_dest_project_id
11633 AND ppe.attribute15 = pppa.object_id
11634 AND pppa.project_id = p_src_project_id
11635 AND pppa.object_type = 'PA_STRUCTURES' ;
11636
11637 --End Added by rtarway for BUG 3951701
11638
11639 ELSE
11640
11641 i := 1;
11642 IF l_shared = 'Y'
11643 THEN
11644 FOR l_get_structure_attr_csr_rec in l_get_structure_attr_csr LOOP
11645 l_dest_str_versions_tbl(i).src_str_version_id := l_get_structure_attr_csr_rec.element_version_id;
11646 l_dest_str_versions_tbl(i).src_str_status := l_get_structure_attr_csr_rec.status_code;
11647 l_dest_str_versions_tbl(i).latest_pub_flag := l_get_structure_attr_csr_rec.LATEST_EFF_PUBLISHED_FLAG;
11648 l_dest_str_versions_tbl(i).current_flag := l_get_structure_attr_csr_rec.current_flag;
11649 i := i + 1;
11650 END LOOP;
11651 ELSE
11652 FOR l_get_structure_attr_csr_rec2 in l_get_structure_attr_csr2 LOOP
11653 l_dest_str_versions_tbl(i).src_str_version_id := l_get_structure_attr_csr_rec2.element_version_id;
11654 l_dest_str_versions_tbl(i).src_str_status := l_get_structure_attr_csr_rec2.status_code;
11655 l_dest_str_versions_tbl(i).latest_pub_flag := l_get_structure_attr_csr_rec2.LATEST_EFF_PUBLISHED_FLAG;
11656 l_dest_str_versions_tbl(i).src_stru_type_id := l_get_structure_attr_csr_rec2.structure_type_id;
11657 l_dest_str_versions_tbl(i).current_flag := l_get_structure_attr_csr_rec2.current_flag;
11658 i := i + 1;
11659 END LOOP;
11660 END IF;
11661 IF l_shared = 'Y'
11662 THEN
11663 IF l_versioning_enabled = 'Y'
11664 THEN
11665 IF l_src_template_flag = 'N' --source is a project
11666 THEN
11667 IF l_dest_template_flag = 'N'
11668 THEN
11669 --senario 1 page 5
11670 --Bug 2955589. Need to copy only one working version to the destination project in AMG
11671 --context. Set the copy flag to N for published versions. Set the copy flag to Y for the
11672 --first working version. If there are no working versions create a new one.
11673 l_working_ver_count := 0;
11674 FOR j in 1..l_dest_str_versions_tbl.count LOOP
11675 IF ( ( l_dest_str_versions_tbl(j).latest_pub_flag = 'Y' OR
11676 l_dest_str_versions_tbl(j).current_flag = 'Y' ) AND --baselined version
11677 l_dest_str_versions_tbl(j).src_str_status = 'STRUCTURE_PUBLISHED' )
11678 THEN
11679 --l_dest_str_versions_tbl(j).copy_flag := 'Y'; Bug 2955589
11680 l_dest_str_versions_tbl(j).copy_flag := 'N';
11681 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
11682 ELSIF l_dest_str_versions_tbl(j).src_str_status <> 'STRUCTURE_PUBLISHED'
11683 THEN
11684 IF l_working_ver_count = 0 THEN --Bug 2955589
11685 l_dest_str_versions_tbl(j).copy_flag := 'Y';
11686 ELSE
11687 l_dest_str_versions_tbl(j).copy_flag := 'N';
11688 END IF;
11689 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
11690 l_working_ver_count := l_working_ver_count + 1;
11691 END IF;
11692 END LOOP;
11693 -- If no working version was found, set the flag so that the version can be created.
11694 -- Bug 2955589.
11695 IF l_working_ver_count = 0 THEN
11696 l_create_fin_version := 'Y';
11697 END IF;
11698 ELSE
11699 --senario 7 page 5
11700 FOR j in 1..l_dest_str_versions_tbl.count LOOP
11701 IF ( l_dest_str_versions_tbl(j).latest_pub_flag = 'Y' AND
11702 l_dest_str_versions_tbl(j).src_str_status = 'STRUCTURE_PUBLISHED' )
11703 THEN
11704 l_dest_str_versions_tbl(j).copy_flag := 'Y';
11705 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
11706 l_copy_flag_set := 'Y';
11707 END IF;
11708 END LOOP;
11709 IF NVL( l_copy_flag_set, 'N' ) = 'N' --latest published was not found, now look for latest updated unpublished str ver
11710 THEN
11711 l_max_date := null;
11712 FOR j in 1..l_dest_str_versions_tbl.count LOOP --look for last updated unpublished version
11713 IF l_dest_str_versions_tbl(j).src_str_status <> 'STRUCTURE_PUBLISHED'
11714 THEN
11715 --Find out which unpublihsed version is last updated.
11716 IF l_max_date IS NULL
11717 THEN
11718 l_latst_upd_wrkng_str_ver := l_dest_str_versions_tbl(j).src_str_version_id;
11719 l_max_date := PA_PROJ_TASK_STRUC_PUB.GET_MAX_LAST_UPD_DT_WRKNG_VER( l_dest_str_versions_tbl(j).src_str_version_id );
11720 ELSE
11721 l_max_date2 := PA_PROJ_TASK_STRUC_PUB.GET_MAX_LAST_UPD_DT_WRKNG_VER( l_dest_str_versions_tbl(j).src_str_version_id );
11722 IF l_max_date2 > l_max_date
11723 THEN
11724 --for bug 2834111
11725 l_max_date := l_max_date2;
11726 l_latst_upd_wrkng_str_ver := l_dest_str_versions_tbl(j).src_str_version_id;
11727 END IF;
11728 END IF;
11729 END IF; --l_dest_str_versions_tbl(j).src_str_status <> 'STRUCTURE_PUBLISHED'
11730 END LOOP; --look for last updated unpublished version
11731 --for bug 2834111
11732 --mark the last updated unpublished version for copying.
11733 FOR j in 1..l_dest_str_versions_tbl.count LOOP
11734 IF l_dest_str_versions_tbl(j).src_str_version_id = l_latst_upd_wrkng_str_ver
11735 THEN
11736 l_dest_str_versions_tbl(j).copy_flag := 'Y';
11737 l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
11738 END IF;
11739 END LOOP;
11740 END IF; --NVL( l_copy_flag_set, 'N' ) := 'N' --latest published was not found, now look for latest updated unpublished str ver
11741 END IF; --l_dest_template_flag = 'N'
11742 ELSE
11743 --source is a template
11744 --senario 3 on page 5
11745 FOR j in 1..l_dest_str_versions_tbl.count LOOP
11746 l_dest_str_versions_tbl(j).copy_flag := 'Y';
11747 IF l_dest_template_flag = 'N' ---senario 3
11748 THEN
11749 /* Bug 2955589. Irrespective of the value in auto publish flag set the version
11750 status to working so that the process_task_structure_bulk api will process
11751 on this version. Refer to the bug for more details.
11752
11753 IF l_auto_pub_enabled = 'N'
11754 THEN
11755 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
11756 ELSE
11757 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
11758 --bug 2858216
11759 l_dest_str_versions_tbl(j).current_flag := 'Y';
11760 l_dest_str_versions_tbl(j).latest_pub_flag := 'Y';
11761
11762 END IF;
11763 */
11764 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
11765 ELSE ---senario 5
11766 l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
11767 END IF;
11768 exit;
11769 END LOOP;
11770 END IF; --l_src_template_flag = 'N'
11771 ELSE
11772 --Shared and Versioning disabled.
11773 --senario 2, 4, 6 8 page 5
11774 FOR j in 1..l_dest_str_versions_tbl.count LOOP
11775 l_dest_str_versions_tbl(j).copy_flag := 'Y';
11776 IF l_dest_template_flag = 'N' --senario 2 , 4
11777 THEN
11778 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
11779 ELSE
11780 --senario 6 , 8
11781 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
11782 END IF;
11783 exit;
11784 END LOOP;
11785 END IF; --l_versioning_enabled = 'Y'
11786 ELSE
11787 --Split structrues
11788 IF l_versioning_enabled = 'Y'
11789 THEN
11790 IF l_src_template_flag = 'N' --source is a project
11791 THEN
11792 IF l_dest_template_flag = 'N'
11793 THEN
11794 --senario 9; page 6
11795 --Bug 2955589. Need to copy only one working version to the destination project in AMG
11796 --context. Set the copy flag to N for published versions. Set the copy flag to Y for the
11797 --first working version. If there are no working versions create a new one.
11798 l_working_ver_count := 0;
11799 FOR j in 1..l_dest_str_versions_tbl.count LOOP
11800 --Copying workplan str
11801 IF l_dest_str_versions_tbl(j).src_stru_type_id = 1 --WORKPLAN
11802 THEN
11803 IF ( ( l_dest_str_versions_tbl(j).latest_pub_flag = 'Y' OR
11804 l_dest_str_versions_tbl(j).current_flag = 'Y' ) AND --baselined version
11805 l_dest_str_versions_tbl(j).src_str_status = 'STRUCTURE_PUBLISHED' )
11806 THEN
11807 --l_dest_str_versions_tbl(j).copy_flag := 'Y'; --Bug 2955589
11808 l_dest_str_versions_tbl(j).copy_flag := 'N';
11809 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
11810 ELSIF ( l_dest_str_versions_tbl(j).src_str_status <> 'STRUCTURE_PUBLISHED' )
11811 THEN
11812 IF l_working_ver_count = 0 THEN --Bug 2955589
11813 l_dest_str_versions_tbl(j).copy_flag := 'Y';
11814 ELSE
11815 l_dest_str_versions_tbl(j).copy_flag := 'N';
11816 END IF;
11817 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
11818 l_working_ver_count := l_working_ver_count + 1;
11819 END IF;
11820 ELSE
11821 --Copying financial str
11822 IF NVL( l_fin_str_copy_flag, 'N' ) = 'N'
11823 THEN
11824 l_dest_str_versions_tbl(j).copy_flag := 'Y';
11825 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
11826 l_fin_str_copy_flag := 'Y';
11827 END IF;
11828 END IF;
11829 END LOOP;
11830 -- If no working version was found, set the flag so that a version can be created.
11831 -- Bug 2955589.
11832 IF l_working_ver_count = 0 THEN
11833 l_create_wk_version := 'Y';
11834 END IF;
11835 ELSE
11836 --senario 15 page 6
11837 FOR j in 1..l_dest_str_versions_tbl.count LOOP
11838 IF l_dest_str_versions_tbl(j).src_stru_type_id = 1 --WORKPLAN
11839 THEN
11840 IF ( l_dest_str_versions_tbl(j).latest_pub_flag = 'Y' AND
11841 l_dest_str_versions_tbl(j).src_str_status = 'STRUCTURE_PUBLISHED' )
11842 THEN
11843 l_dest_str_versions_tbl(j).copy_flag := 'Y';
11844 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
11845 l_copy_flag_set := 'Y';
11846 END IF;
11847 ELSE
11848 --Copying financial str
11849 IF NVL( l_fin_str_copy_flag, 'N' ) = 'N'
11850 THEN
11851 l_dest_str_versions_tbl(j).copy_flag := 'Y';
11852 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
11853 l_fin_str_copy_flag := 'Y';
11854 END IF;
11855 END IF;
11856 END LOOP;
11857 IF NVL( l_copy_flag_set, 'N' ) = 'N' --latest published was not found, now look for latest updated unpublished str ver
11858 THEN
11859 l_max_date := null;
11860 FOR j in 1..l_dest_str_versions_tbl.count LOOP --look for last updated unpublished version
11861 IF l_dest_str_versions_tbl(j).src_stru_type_id = 1 --WORKPLAN
11862 THEN
11863 IF l_dest_str_versions_tbl(j).src_str_status <> 'STRUCTURE_PUBLISHED'
11864 THEN
11865 --Find out which unpublihsed version is last updated.
11866 IF l_max_date IS NULL
11867 THEN
11868 l_latst_upd_wrkng_str_ver := l_dest_str_versions_tbl(j).src_str_version_id;
11869 l_max_date := PA_PROJ_TASK_STRUC_PUB.GET_MAX_LAST_UPD_DT_WRKNG_VER( l_dest_str_versions_tbl(j).src_str_version_id );
11870 ELSE
11871 l_max_date2 := PA_PROJ_TASK_STRUC_PUB.GET_MAX_LAST_UPD_DT_WRKNG_VER( l_dest_str_versions_tbl(j).src_str_version_id );
11872 IF l_max_date2 > l_max_date
11873 THEN
11874 --for bug 2834111
11875 l_max_date := l_max_date2;
11876 l_latst_upd_wrkng_str_ver := l_dest_str_versions_tbl(j).src_str_version_id;
11877 END IF;
11878 END IF;
11879 END IF; --l_dest_str_versions_tbl(j).src_str_status <> 'STRUCTURE_PUBLISHED'
11880 END IF; --l_dest_str_versions_tbl(j).src_stru_type_id = 1 --WORKPLAN
11881 END LOOP; --look for last updated unpublished version
11882 --for bug 2834111
11883 --mark the last updated unpublished version for copying.
11884 FOR j in 1..l_dest_str_versions_tbl.count LOOP
11885 IF l_dest_str_versions_tbl(j).src_str_version_id = l_latst_upd_wrkng_str_ver
11886 THEN
11887 l_dest_str_versions_tbl(j).copy_flag := 'Y';
11888 l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
11889 END IF;
11890 END LOOP;
11891
11892 END IF; --NVL( l_copy_flag_set, 'N' ) := 'N' --latest published was not found, now look for latest updated unpublished str ver
11893 END IF; --l_dest_template_flag = 'N'
11894 ELSE
11895 --source is a template
11896 --senario 11 on page 5
11897 --copying workplan
11898 FOR j in 1..l_dest_str_versions_tbl.count LOOP
11899 IF l_dest_str_versions_tbl(j).src_stru_type_id = 1 --WORKPLAN
11900 THEN
11901 l_dest_str_versions_tbl(j).copy_flag := 'Y';
11902 IF l_dest_template_flag = 'N' ---senario 11
11903 THEN
11904 /* Bug 2955589. Irrespective of the value in auto publish flag set the version
11905 status to working so that the process_task_structure_bulk api will process
11906 on this version. Refer to the bug for more details.
11907
11908 IF l_auto_pub_enabled = 'N'
11909 THEN
11910 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
11911 ELSE
11912 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
11913 --bug 2858216
11914 l_dest_str_versions_tbl(j).current_flag := 'Y';
11915 l_dest_str_versions_tbl(j).latest_pub_flag := 'Y';
11916 END IF;
11917 */
11918 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
11919
11920 ELSE ---senario 13
11921 l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
11922 END IF;
11923 exit;
11924 END IF;
11925 END LOOP;
11926 --senario 11 on page 5
11927 --copying financail
11928 FOR j in 1..l_dest_str_versions_tbl.count LOOP
11929 IF l_dest_str_versions_tbl(j).src_stru_type_id = 6 --FINANCIAL
11930 THEN
11931 l_dest_str_versions_tbl(j).copy_flag := 'Y';
11932 IF l_dest_template_flag = 'N' ---senario 11
11933 THEN
11934 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
11935 ELSE ---senario 13
11936 l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
11937 END IF;
11938 exit;
11939 END IF;
11940 END LOOP;
11941 END IF; --l_src_template_flag = 'N'
11942 ELSE
11943 --Versioning disabled.
11944 IF l_src_template_flag = 'N' --source is a project
11945 THEN
11946 --senario 10 and 16; page 6 and 7 respectively
11947 --copying workplan
11948 FOR j in 1..l_dest_str_versions_tbl.count LOOP
11949 IF l_dest_str_versions_tbl(j).src_stru_type_id = 1 --WORKPLAN
11950 THEN
11951 l_dest_str_versions_tbl(j).copy_flag := 'Y';
11952 IF l_dest_template_flag = 'N' --senario 10
11953 THEN
11954 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
11955 ELSE
11956 --senario 8
11957 l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
11958 END IF;
11959 exit;
11960 END IF;
11961 END LOOP;
11962 --copying financial
11963 FOR j in 1..l_dest_str_versions_tbl.count LOOP
11964 IF l_dest_str_versions_tbl(j).src_stru_type_id = 6 --FINANCIAL
11965 THEN
11966 l_dest_str_versions_tbl(j).copy_flag := 'Y';
11967 IF l_dest_template_flag = 'N' --senario 16
11968 THEN
11969 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
11970 ELSE
11971 --senario 8
11972 l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
11973 END IF;
11974 exit;
11975 END IF;
11976 END LOOP;
11977 ELSE
11978 --source is a template
11979 --senario 12 and 14; page 6
11980 FOR j in 1..l_dest_str_versions_tbl.count LOOP
11981 IF l_dest_template_flag = 'N'
11982 THEN
11983 l_dest_str_versions_tbl(j).copy_flag := 'Y';
11984 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
11985 ELSE
11986 l_dest_str_versions_tbl(j).copy_flag := 'Y';
11987 l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
11988 END IF;
11989 END LOOP;
11990 END IF; --l_src_template_flag = 'N'
11991 END IF; --l_versioning_enabled = 'Y'
11992 END IF; --Share Y or N
11993
11994 --WORKPLAN ENABLED ( SHARED or SPLIT )
11995
11996 IF NOT l_dest_str_versions_tbl.exists(1)
11997 AND nvl(l_create_fin_version,'N') = 'N' --Bug 2955589
11998 AND nvl(l_create_wk_version,'N') = 'N'
11999 THEN
12000 return;
12001 END IF;
12002
12003 IF l_shared = 'N'
12004 THEN
12005 UPDATE pa_proj_elements ppe
12006 set name = substr(l_project_name||l_append||l_suffix, 1, 240)
12007 WHERE project_id = p_dest_project_id
12008 AND object_type = 'PA_STRUCTURES'
12009 AND EXISTS ( SELECT proj_element_id FROM pa_proj_structure_types
12010 WHERE proj_element_id = ppe.proj_element_id
12011 AND structure_type_id = 1 );
12012 END IF;
12013
12014 INSERT INTO pa_proj_workplan_attr(
12015 PROJ_ELEMENT_ID
12016 ,PROJECT_ID
12017 ,LAST_UPDATE_DATE
12018 ,LAST_UPDATED_BY
12019 ,CREATION_DATE
12020 ,CREATED_BY
12021 ,WP_APPROVAL_REQD_FLAG
12022 ,WP_AUTO_PUBLISH_FLAG
12023 ,WP_DEFAULT_DISPLAY_LVL
12024 ,WP_ENABLE_VERSION_FLAG
12025 ,AUTO_PUB_UPON_CREATION_FLAG
12026 ,AUTO_SYNC_TXN_DATE_FLAG
12027 ,WP_APPROVER_SOURCE_ID
12028 ,WP_APPROVER_SOURCE_TYPE
12029 ,RECORD_VERSION_NUMBER
12030 ,LAST_UPDATE_LOGIN
12031 ,TXN_DATE_SYNC_BUF_DAYS
12032 ,LIFECYCLE_VERSION_ID
12033 ,CURRENT_PHASE_VERSION_ID
12034 --bug 4061876
12035 ,SCHEDULE_THIRD_PARTY_FLAG
12036 ,ALLOW_LOWEST_TSK_DEP_FLAG
12037 ,AUTO_ROLLUP_SUBPROJ_FLAG
12038 ,THIRD_PARTY_SCHEDULE_CODE
12039 ,source_object_id
12040 ,source_object_type
12041 )
12042 SELECT
12043 ppe.PROJ_ELEMENT_ID
12044 ,ppe.PROJECT_ID
12045 ,SYSDATE
12046 ,l_user_id
12047 ,SYSDATE
12048 ,l_user_id
12049 ,ppwa.WP_APPROVAL_REQD_FLAG
12050 ,ppwa.WP_AUTO_PUBLISH_FLAG
12051 ,ppwa.WP_DEFAULT_DISPLAY_LVL
12052 ,ppwa.WP_ENABLE_VERSION_FLAG
12053 ,ppwa.AUTO_PUB_UPON_CREATION_FLAG
12054 ,ppwa.AUTO_SYNC_TXN_DATE_FLAG
12055 ,ppwa.WP_APPROVER_SOURCE_ID
12056 ,ppwa.WP_APPROVER_SOURCE_TYPE
12057 ,ppwa.RECORD_VERSION_NUMBER
12058 ,ppwa.LAST_UPDATE_LOGIN
12059 ,ppwa.TXN_DATE_SYNC_BUF_DAYS
12060 ,ppwa.LIFECYCLE_VERSION_ID
12061 ,ppwa.CURRENT_PHASE_VERSION_ID
12062 --bug 4061876
12063 ,ppwa.SCHEDULE_THIRD_PARTY_FLAG
12064 ,ppwa.ALLOW_LOWEST_TSK_DEP_FLAG
12065 ,ppwa.AUTO_ROLLUP_SUBPROJ_FLAG
12066 ,ppwa.THIRD_PARTY_SCHEDULE_CODE
12067 ,ppe.PROJECT_ID
12068 ,'PA_PROJECTS'
12069 /*FROM pa_proj_elements ppe,
12070 pa_proj_workplan_attr ppwa
12071 WHERE ppe.project_id = p_dest_project_id
12072 and object_type = 'PA_STRUCTURES'
12073 and ppwa.project_id = p_src_project_id
12074 and ppwa.proj_element_id = ppe.attribute15;*//*Commented below query and following criteria by SMUKKA */
12075 FROM pa_proj_elements ppe,
12076 pa_proj_workplan_attr ppwa
12077 WHERE ppwa.project_id = p_src_project_id
12078 AND ppe.project_id = p_dest_project_id
12079 AND ppe.object_type ='PA_STRUCTURES'
12080 AND ppe.attribute15 = ppwa.proj_element_id
12081 AND PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y'; /* bug 3621613 */
12082
12083 --bug 3010538
12084 --added task weighting basis code
12085 INSERT INTO pa_proj_progress_attr(
12086 PROJ_PROGRESS_ATTR_ID
12087 ,OBJECT_TYPE
12088 ,OBJECT_ID
12089 ,LAST_UPDATE_DATE
12090 ,LAST_UPDATED_BY
12091 ,CREATION_DATE
12092 ,CREATED_BY
12093 ,LAST_UPDATE_LOGIN
12094 ,PROJECT_ID
12095 ,PROGRESS_CYCLE_ID
12096 ,WQ_ENABLE_FLAG
12097 ,REMAIN_EFFORT_ENABLE_FLAG
12098 ,PERCENT_COMP_ENABLE_FLAG
12099 ,NEXT_PROGRESS_UPDATE_DATE
12100 ,RECORD_VERSION_NUMBER
12101 ,TASK_WEIGHT_BASIS_CODE
12102 /* FP-M Bug # 3420093. Modified: copy_structures_bulk. */
12103 ,ALLOW_COLLAB_PROG_ENTRY
12104 ,ALLOW_PHY_PRCNT_CMP_OVERRIDES
12105 ,STRUCTURE_TYPE
12106 /* FP-M Bug # 3420093. Modified: copy_structures_bulk. */
12107 ) SELECT
12108 PA_PROJ_PROGRESS_ATTR_S.nextval
12109 ,ppe.OBJECT_TYPE
12110 ,ppe.proj_element_ID
12111 ,sysdate
12112 ,l_user_id
12113 ,SYSDATE
12114 ,l_user_id
12115 ,l_login_id
12116 ,p_dest_project_id
12117 ,pppa.PROGRESS_CYCLE_ID
12118 ,pppa.WQ_ENABLE_FLAG
12119 ,pppa.REMAIN_EFFORT_ENABLE_FLAG
12120 ,pppa.PERCENT_COMP_ENABLE_FLAG
12121 ,pppa.NEXT_PROGRESS_UPDATE_DATE
12122 ,pppa.RECORD_VERSION_NUMBER
12123 ,pppa.TASK_WEIGHT_BASIS_CODE
12124 /* FP-M Bug # 3420093. Modified: copy_structures_bulk. */
12125 ,pppa.ALLOW_COLLAB_PROG_ENTRY
12126 ,pppa.ALLOW_PHY_PRCNT_CMP_OVERRIDES
12127 ,pppa.STRUCTURE_TYPE
12128 /* FP-M Bug # 3420093. Modified: copy_structures_bulk. */
12129 /*FROM pa_proj_progress_attr pppa,
12130 pa_proj_elements ppe
12131 WHERE ppe.project_id = p_dest_project_id
12132 and ppe.attribute15 = pppa.object_id --no need to join with
12133 and pppa.object_type = 'PA_STRUCTURES'
12134 and ppe.object_type = 'PA_STRUCTURES'
12135 and pppa.project_id = p_src_project_id;*//*Commented below query and following criteria by SMUKKA */
12136 FROM pa_proj_progress_attr pppa,
12137 pa_proj_elements ppe
12138 WHERE ppe.project_id = p_dest_project_id
12139 and ppe.attribute15 = pppa.object_id
12140 and pppa.object_type = 'PA_STRUCTURES'
12141 and ppe.object_type = 'PA_STRUCTURES'
12142 and pppa.project_id = p_src_project_id
12143 AND PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y' ; /* bug 3621613 */
12144
12145 --Bug 2955589. If Versioning is enabled and it is a project to project copy, the plsql table will not
12146 --contain any records if there were no working verisons. We need to create one if any of the flags
12147 --l_create_fin_version or l_create_wk_version is 'Y'.
12148 IF nvl(l_create_fin_version,'N') = 'Y' THEN
12149 l_structure_ver_name := substr(l_project_name, 1, 240);
12150 PA_PROJ_TASK_STRUC_PUB.create_update_struct_ver(
12151 p_project_id => p_dest_project_id
12152 ,p_structure_type => 'FINANCIAL'
12153 ,p_structure_version_name => l_structure_ver_name
12154 ,p_structure_version_id => null
12155 ,x_structure_version_id => l_structure_version_id
12156 ,x_msg_count => x_msg_count
12157 ,x_msg_data => x_msg_data
12158 ,x_return_status => x_return_status
12159 );
12160 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR
12161 THEN
12162 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12163 ELSIF x_return_status = FND_API.G_RET_STS_ERROR
12164 THEN
12165 RAISE FND_API.G_EXC_ERROR;
12166 END IF;
12167 ELSIF nvl(l_create_wk_version,'N') = 'Y' THEN
12168 l_structure_ver_name := substr(l_project_name||l_append||l_suffix, 1, 240);
12169
12170 PA_PROJ_TASK_STRUC_PUB.create_update_struct_ver(
12171 p_project_id => p_dest_project_id
12172 ,p_structure_type => 'WORKPLAN'
12173 ,p_structure_version_name => l_structure_ver_name
12174 ,p_structure_version_id => null
12175 ,x_structure_version_id => l_structure_version_id
12176 ,x_msg_count => x_msg_count
12177 ,x_msg_data => x_msg_data
12178 ,x_return_status => x_return_status
12179 );
12180 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR
12181 THEN
12182 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12183 ELSIF x_return_status = FND_API.G_RET_STS_ERROR
12184 THEN
12185 RAISE FND_API.G_EXC_ERROR;
12186 END IF;
12187 END IF;
12188
12189 FOR k in 1..l_dest_str_versions_tbl.count LOOP
12190 IF l_dest_str_versions_tbl(k).copy_flag = 'Y'
12191 THEN
12192
12193
12194 OPEN cur_elem_ver_seq;
12195 FETCH cur_elem_ver_seq INTO l_struc_version_id;
12196 CLOSE cur_elem_ver_seq;
12197 --First copy structure version and then copy all task versions
12198 --We cannot perform both with the same sql bcoz we need parent_structure version id for tasks.
12199 INSERT INTO pa_proj_element_versions(
12200 ELEMENT_VERSION_ID
12201 ,PROJ_ELEMENT_ID
12202 ,OBJECT_TYPE
12203 ,PROJECT_ID
12204 ,PARENT_STRUCTURE_VERSION_ID
12205 ,DISPLAY_SEQUENCE
12206 ,WBS_LEVEL
12207 ,WBS_NUMBER
12208 ,CREATION_DATE
12209 ,CREATED_BY
12210 ,LAST_UPDATE_DATE
12211 ,LAST_UPDATED_BY
12212 ,LAST_UPDATE_LOGIN
12213 ,RECORD_VERSION_NUMBER
12214 ,attribute15 --this column is used to store structure ver id of the source project to be used to created relationships.
12215 ,ATTRIBUTE_CATEGORY
12216 ,ATTRIBUTE1
12217 ,ATTRIBUTE2
12218 ,ATTRIBUTE3
12219 ,ATTRIBUTE4
12220 ,ATTRIBUTE5
12221 ,ATTRIBUTE6
12222 ,ATTRIBUTE7
12223 ,ATTRIBUTE8
12224 ,ATTRIBUTE9
12225 ,ATTRIBUTE10
12226 ,ATTRIBUTE11
12227 ,ATTRIBUTE12
12228 ,ATTRIBUTE13
12229 ,ATTRIBUTE14
12230 ,TASK_UNPUB_VER_STATUS_CODE
12231 ,source_object_id
12232 ,source_object_type
12233 )
12234 SELECT
12235 l_struc_version_id
12236 ,ppe.proj_element_id
12237 ,ppev.object_type
12238 ,p_dest_project_id
12239 ,l_struc_version_id
12240 ,ppev.DISPLAY_SEQUENCE
12241 ,ppev.WBS_LEVEL
12242 ,ppev.WBS_NUMBER
12243 ,SYSDATE ------CREATION_DATE
12244 ,l_user_id ------CREATED_BY
12245 ,SYSDATE ------LAST_UPDATE_DATE
12246 ,l_user_id ------LAST_UPDATED_BY
12247 ,l_login_id ------LAST_UPDATE_LOGIN
12248 ,ppev.RECORD_VERSION_NUMBER ------RECORD_VERSION_NUMBER
12249 ,ppev.element_version_id
12250 ,ppev.ATTRIBUTE_CATEGORY
12251 ,ppev.ATTRIBUTE1
12252 ,ppev.ATTRIBUTE2
12253 ,ppev.ATTRIBUTE3
12254 ,ppev.ATTRIBUTE4
12255 ,ppev.ATTRIBUTE5
12256 ,ppev.ATTRIBUTE6
12257 ,ppev.ATTRIBUTE7
12258 ,ppev.ATTRIBUTE8
12259 ,ppev.ATTRIBUTE9
12260 ,ppev.ATTRIBUTE10
12261 ,ppev.ATTRIBUTE11
12262 ,ppev.ATTRIBUTE12
12263 ,ppev.ATTRIBUTE13
12264 ,ppev.ATTRIBUTE14
12265 ,ppev.TASK_UNPUB_VER_STATUS_CODE
12266 ,p_dest_project_id
12267 ,'PA_PROJECTS'
12268 FROM pa_proj_element_versions ppev,
12269 pa_proj_elements ppe
12270 WHERE ppev.project_id = p_src_project_id
12271 and ppe.project_id = p_dest_project_id
12272 and ppev.element_version_id = l_dest_str_versions_tbl(k).src_str_version_id
12273 and ppev.proj_element_id = ppe.attribute15
12274 and ppe.object_type = 'PA_STRUCTURES'
12275 and ppev.object_type = 'PA_STRUCTURES';
12276
12277 --bug 3138959
12278 --User adding tasks under WORKPLAN structure from AMG, financial plan should be copied over.
12279
12280 IF PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version( l_struc_version_id, 'FINANCIAL' ) = 'Y'
12281 AND l_shared = 'N' AND l_workplan_enabled = 'Y' -- For Split structures
12282 AND pa_project_pub.G_structure_in_rec.structure_type = 'WORKPLAN'
12283 THEN
12284 --Copy financial tasks
12285
12286 INSERT INTO pa_proj_element_versions(
12287 ELEMENT_VERSION_ID
12288 ,PROJ_ELEMENT_ID
12289 ,OBJECT_TYPE
12290 ,PROJECT_ID
12291 ,PARENT_STRUCTURE_VERSION_ID
12292 ,DISPLAY_SEQUENCE
12293 ,WBS_LEVEL
12294 ,WBS_NUMBER
12295 ,CREATION_DATE
12296 ,CREATED_BY
12297 ,LAST_UPDATE_DATE
12298 ,LAST_UPDATED_BY
12299 ,LAST_UPDATE_LOGIN
12300 ,RECORD_VERSION_NUMBER
12301 ,attribute15 --this column is used to store task ver id of the source project's task versions to be used to created relationships.
12302 ,ATTRIBUTE_CATEGORY
12303 ,ATTRIBUTE1
12304 ,ATTRIBUTE2
12305 ,ATTRIBUTE3
12306 ,ATTRIBUTE4
12307 ,ATTRIBUTE5
12308 ,ATTRIBUTE6
12309 ,ATTRIBUTE7
12310 ,ATTRIBUTE8
12311 ,ATTRIBUTE9
12312 ,ATTRIBUTE10
12313 ,ATTRIBUTE11
12314 ,ATTRIBUTE12
12315 ,ATTRIBUTE13
12316 ,ATTRIBUTE14
12317 ,TASK_UNPUB_VER_STATUS_CODE
12318 ,source_object_id
12319 ,source_object_type
12320 ,financial_task_flag --Bug no 3651255
12321 )
12322 SELECT
12323 pa_proj_element_versions_s.nextval
12324 ,ppe.proj_element_id
12325 ,ppev.object_type
12326 ,p_dest_project_id
12327 ,l_struc_version_id --from previous sql
12328 ,ppev.DISPLAY_SEQUENCE
12329 ,ppev.WBS_LEVEL
12330 ,ppev.WBS_NUMBER
12331 ,SYSDATE ------CREATION_DATE
12332 ,l_user_id ------CREATED_BY
12333 ,SYSDATE ------LAST_UPDATE_DATE
12334 ,l_user_id ------LAST_UPDATED_BY
12335 ,l_login_id ------LAST_UPDATE_LOGIN
12336 ,ppev.RECORD_VERSION_NUMBER ------RECORD_VERSION_NUMBER
12337 ,ppev.element_version_id -- to help create relationships from source
12338 ,ppev.ATTRIBUTE_CATEGORY
12339 ,ppev.ATTRIBUTE1
12340 ,ppev.ATTRIBUTE2
12341 ,ppev.ATTRIBUTE3
12342 ,ppev.ATTRIBUTE4
12343 ,ppev.ATTRIBUTE5
12344 ,ppev.ATTRIBUTE6
12345 ,ppev.ATTRIBUTE7
12346 ,ppev.ATTRIBUTE8
12347 ,ppev.ATTRIBUTE9
12348 ,ppev.ATTRIBUTE10
12349 ,ppev.ATTRIBUTE11
12350 ,ppev.ATTRIBUTE12
12351 ,ppev.ATTRIBUTE13
12352 ,ppev.ATTRIBUTE14
12353 ,decode( l_dest_str_versions_tbl(k).dest_str_status, 'STRUCTURE_PUBLISHED', 'PUBLISHED', 'WORKING' )
12354 ,p_dest_project_id
12355 ,'PA_PROJECTS'
12356 ,ppev.financial_task_flag --Bug no 3651255
12357 FROM pa_proj_element_versions ppev,
12358 pa_proj_elements ppe
12359 WHERE ppev.project_id = p_src_project_id
12360 and ppe.project_id = p_dest_project_id
12361 and ppev.parent_structure_version_id = l_dest_str_versions_tbl(k).src_str_version_id
12362 and ppev.proj_element_id = ppe.attribute15
12363 and ppe.object_type = 'PA_TASKS'
12364 and ppev.object_type = 'PA_TASKS';
12365
12366 --Create relationships for structure and tasks
12367
12368 /* Start of changes for bug 6211012 */
12369
12370 l_obj_rel_id.delete;
12371 l_obj_typ_from.delete;
12372 l_obj_from_id.delete;
12373 l_obj_typ_to.delete;
12374 l_obj_to_id.delete;
12375 l_rel_typ.delete;
12376 l_rel_subtyp.delete;
12377 l_rec_ver_num.delete;
12378 l_wt_percent.delete;
12379
12380 OPEN cur_pa_obj_rela_3(l_dest_str_versions_tbl(k).src_str_version_id,l_struc_version_id);
12381
12382 LOOP
12383
12384 FETCH cur_pa_obj_rela_3
12385 BULK COLLECT INTO
12386 l_obj_rel_id,
12387 l_obj_typ_from,
12388 l_obj_from_id,
12389 l_obj_typ_to,
12390 l_obj_to_id,
12391 l_rel_typ,
12392 l_rel_subtyp,
12393 l_rec_ver_num,
12394 l_wt_percent
12395 LIMIT 1000;
12396
12397 IF l_obj_rel_id.COUNT >0 THEN
12398
12399 FORALL i IN l_obj_rel_id.FIRST..l_obj_rel_id.LAST
12400 insert into PA_OBJECT_RELATIONSHIPS (
12401 object_relationship_id,
12402 object_type_from,
12403 object_id_from1,
12404 object_type_to,
12405 object_id_to1,
12406 relationship_type,
12407 relationship_subtype,
12408 Record_Version_Number,
12409 CREATED_BY,
12410 CREATION_DATE,
12411 LAST_UPDATED_BY,
12412 LAST_UPDATE_DATE,
12413 LAST_UPDATE_LOGIN,
12414 weighting_percentage
12415 )
12416 values(
12417 l_obj_rel_id(i),
12418 l_obj_typ_from(i),
12419 l_obj_from_id(i),
12420 l_obj_typ_to(i),
12421 l_obj_to_id(i),
12422 l_rel_typ(i),
12423 l_rel_subtyp(i),
12424 l_rec_ver_num(i),
12425 l_user_id,
12426 SYSDATE,
12427 l_user_id,
12428 SYSDATE,
12429 l_login_id,
12430 l_wt_percent(i)
12431 );
12432 END IF;
12433
12434 EXIT WHEN l_obj_rel_id.COUNT < 1000 ;
12435 END LOOP;
12436
12437 l_obj_rel_id.delete;
12438 l_obj_typ_from.delete;
12439 l_obj_from_id.delete;
12440 l_obj_typ_to.delete;
12441 l_obj_to_id.delete;
12442 l_rel_typ.delete;
12443 l_rel_subtyp.delete;
12444 l_rec_ver_num.delete;
12445 l_wt_percent.delete;
12446
12447 CLOSE cur_pa_obj_rela_3;
12448
12449 /*
12450 INSERT INTO PA_OBJECT_RELATIONSHIPS (
12451 object_relationship_id,
12452 object_type_from,
12453 object_id_from1,
12454 object_type_to,
12455 object_id_to1,
12456 relationship_type,
12457 relationship_subtype,
12458 Record_Version_Number,
12459 CREATED_BY,
12460 CREATION_DATE,
12461 LAST_UPDATED_BY,
12462 LAST_UPDATE_DATE,
12463 LAST_UPDATE_LOGIN,
12464 weighting_percentage
12465 )
12466 /*Added the hint for the bug 3513853*/
12467 /* SELECT /*+ USE_HASH(ppev2 ppev1)*/
12468 /* pa_object_relationships_s.nextval,
12469 pobj.object_type_from,
12470 ppev1.element_version_id,
12471 pobj.object_type_to,
12472 ppev2.element_version_id,
12473 pobj.relationship_type,
12474 pobj.relationship_subtype,
12475 pobj.Record_Version_Number,
12476 l_user_id,
12477 SYSDATE,
12478 l_user_id,
12479 SYSDATE,
12480 l_login_id,
12481 pobj.weighting_percentage
12482 FROM ( SELECT object_type_from, object_id_from1,
12483 object_type_to, object_id_to1,
12484 relationship_type, relationship_subtype,
12485 Record_Version_Number, weighting_percentage
12486 FROM pa_object_relationships
12487 --bug#3094283WHERE RELATIONSHIP_TYPE = 'S'
12488 start with object_id_from1 = l_dest_str_versions_tbl(k).src_str_version_id
12489 and RELATIONSHIP_TYPE = 'S' /* Bug 2881667 Added this condition */
12490 /* connect by object_id_from1 = prior object_id_to1
12491 and RELATIONSHIP_TYPE = 'S' ) pobj, /* Bug 2881667 Added this condition */
12492 /* pa_proj_element_versions ppev1,
12493 pa_proj_element_versions ppev2
12494 WHERE
12495 --bug#3094283 ppev1.project_id = p_dest_project_id
12496 ppev1.attribute15 = pobj.object_id_from1
12497 --bug#3094283 ppev2.project_id = p_dest_project_id
12498 AND ppev2.attribute15 = pobj.object_id_to1
12499 AND ppev1.parent_structure_version_id = l_struc_version_id
12500 AND ppev2.parent_structure_version_id = l_struc_version_id
12501 ;
12502 */
12503 /* End of Code added for 6211012 */
12504 END IF;
12505 --bug 3138959
12506
12507 IF l_dest_str_versions_tbl(k).dest_str_status = 'STRUCTURE_PUBLISHED'
12508 and l_dest_str_versions_tbl(k).current_flag = 'N'
12509 and l_dest_str_versions_tbl(k).latest_pub_flag = 'N'
12510 THEN
12511 l_LATEST_EFF_PUBLISHED_FLAG := 'Y';
12512 ELSE
12513 l_LATEST_EFF_PUBLISHED_FLAG := l_dest_str_versions_tbl(k).latest_pub_flag;
12514 END IF;
12515
12516 IF l_dest_template_flag = 'Y'
12517 THEN
12518 l_LATEST_EFF_PUBLISHED_FLAG := 'N';
12519 l_dest_str_versions_tbl(k).current_flag := 'N';
12520 IF l_dest_str_versions_tbl(k).dest_str_status <> 'STRUCTURE_WORKING'
12521 THEN
12522 l_dest_str_versions_tbl(k).dest_str_status := 'STRUCTURE_WORKING';
12523 END IF;
12524 END IF;
12525
12526 IF l_LATEST_EFF_PUBLISHED_FLAG = 'Y' OR l_dest_template_flag = 'Y'
12527 THEN
12528 l_latest_pub_str_ver_id := l_struc_version_id;
12529 ELSE
12530 l_latest_pub_str_ver_id := null;
12531 END IF;
12532
12533 --bug 3010538
12534 --added PROCESS_UPDATE_WBS_FLAG
12535
12536 INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
12537 PEV_STRUCTURE_ID
12538 ,ELEMENT_VERSION_ID
12539 ,VERSION_NUMBER
12540 ,NAME
12541 ,PROJECT_ID
12542 ,PROJ_ELEMENT_ID
12543 ,DESCRIPTION
12544 ,EFFECTIVE_DATE
12545 ,PUBLISHED_DATE
12546 ,PUBLISHED_BY_PERSON_ID
12547 ,CURRENT_BASELINE_DATE
12548 ,CURRENT_FLAG
12549 ,CURRENT_BASELINE_PERSON_ID
12550 ,ORIGINAL_BASELINE_DATE
12551 ,ORIGINAL_FLAG
12552 ,ORIGINAL_BASELINE_PERSON_ID
12553 ,LOCK_STATUS_CODE
12554 ,LOCKED_BY_PERSON_ID
12555 ,LOCKED_DATE
12556 ,STATUS_CODE
12557 ,WF_STATUS_CODE
12558 ,LATEST_EFF_PUBLISHED_FLAG
12559 ,RECORD_VERSION_NUMBER
12560 ,WBS_RECORD_VERSION_NUMBER
12561 ,CREATION_DATE
12562 ,CREATED_BY
12563 ,LAST_UPDATE_DATE
12564 ,LAST_UPDATED_BY
12565 ,LAST_UPDATE_LOGIN
12566 ,change_reason_code
12567 ,PROCESS_UPDATE_WBS_FLAG
12568 ,current_working_flag /* FPM bug 3301192 */
12569 ,source_object_id
12570 ,source_object_type
12571 )
12572 SELECT
12573 pa_proj_elem_ver_structure_s.nextval
12574 ,l_struc_version_id
12575 ,ppevs.version_number --replaced k with source version_number bug 2829385
12576 --,ppevs.name 3717026, replaced ppevs.name with ppe.name
12577 ,ppe.name
12578 ,p_dest_project_id
12579 ,ppe.proj_element_id
12580 ,ppevs.DESCRIPTION
12581 ,ppevs.EFFECTIVE_DATE
12582 ,decode(l_dest_str_versions_tbl(k).dest_str_status, 'STRUCTURE_PUBLISHED', sysdate, to_date(null)) --bug 2838547
12583 ,decode(l_dest_str_versions_tbl(k).dest_str_status, 'STRUCTURE_PUBLISHED', l_publish_person_id, NULL) --bug 2838547
12584 ,decode(l_dest_str_versions_tbl(k).current_flag, 'Y', trunc(sysdate), to_date(NULL)) --bug 2838547
12585 ,l_dest_str_versions_tbl(k).current_flag
12586 ,decode(l_dest_str_versions_tbl(k).current_flag, 'Y', l_publish_person_id, NULL) --bug 2838547
12587 ,ppevs.ORIGINAL_BASELINE_DATE
12588 ,ppevs.ORIGINAL_FLAG
12589 ,ppevs.ORIGINAL_BASELINE_PERSON_ID
12590 ,'UNLOCKED'
12591 ,null
12592 ,null
12593 ,l_dest_str_versions_tbl(k).dest_str_status
12594 ,ppevs.WF_STATUS_CODE
12595 ,l_LATEST_EFF_PUBLISHED_FLAG
12596 ,ppevs.RECORD_VERSION_NUMBER
12597 ,ppevs.WBS_RECORD_VERSION_NUMBER
12598 ,SYSDATE
12599 ,l_user_id
12600 ,SYSDATE
12601 ,l_user_id
12602 ,l_login_id
12603 ,ppevs.change_reason_code
12604 ,'N'
12605 ,ppevs.current_working_flag /* FPM bug 3301192 */
12606 ,p_dest_project_id
12607 ,'PA_PROJECTS'
12608 FROM PA_PROJ_ELEM_VER_STRUCTURE ppevs, pa_proj_elements ppe
12609 WHERE ppevs.project_id = p_src_project_id
12610 AND ppe.project_id = p_dest_project_id
12611 and ppevs.element_version_id = l_dest_str_versions_tbl(k).src_str_version_id
12612 and ppevs.proj_element_id = ppe.attribute15
12613 AND ppe.object_type = 'PA_STRUCTURES';
12614
12615 --fix bug 2831973
12616 --calculate delta before inserting schedule rows
12617 --select source structure version scheduled start date
12618 IF (p_target_start_date IS NULL) THEN
12619 l_delta := 0;
12620 ELSE
12621 OPEN get_src_sch_st_date(p_src_project_id,
12622 l_dest_str_versions_tbl(k).src_str_version_id);
12623 FETCH get_src_sch_st_date into l_src_sch_st_date;
12624 CLOSE get_src_sch_st_date;
12625 l_delta := p_target_start_date - l_src_sch_st_date;
12626 END IF;
12627
12628 INSERT INTO pa_proj_elem_ver_schedule(
12629 PEV_SCHEDULE_ID
12630 ,ELEMENT_VERSION_ID
12631 ,PROJECT_ID
12632 ,PROJ_ELEMENT_ID
12633 ,CREATION_DATE
12634 ,CREATED_BY
12635 ,LAST_UPDATE_DATE
12636 ,LAST_UPDATED_BY
12637 ,SCHEDULED_START_DATE
12638 ,SCHEDULED_FINISH_DATE
12639 ,OBLIGATION_START_DATE
12640 ,OBLIGATION_FINISH_DATE
12641 ,ACTUAL_START_DATE
12642 ,ACTUAL_FINISH_DATE
12643 ,ESTIMATED_START_DATE
12644 ,ESTIMATED_FINISH_DATE
12645 ,DURATION
12646 ,EARLY_START_DATE
12647 ,EARLY_FINISH_DATE
12648 ,LATE_START_DATE
12649 ,LATE_FINISH_DATE
12650 ,CALENDAR_ID
12651 ,MILESTONE_FLAG
12652 ,CRITICAL_FLAG
12653 ,RECORD_VERSION_NUMBER
12654 ,LAST_UPDATE_LOGIN
12655 ,WQ_PLANNED_QUANTITY
12656 ,PLANNED_EFFORT
12657 ,ACTUAL_DURATION
12658 ,ESTIMATED_DURATION
12659 ,ATTRIBUTE_CATEGORY
12660 ,ATTRIBUTE1
12661 ,ATTRIBUTE2
12662 ,ATTRIBUTE3
12663 ,ATTRIBUTE4
12664 ,ATTRIBUTE5
12665 ,ATTRIBUTE6
12666 ,ATTRIBUTE7
12667 ,ATTRIBUTE8
12668 ,ATTRIBUTE9
12669 ,ATTRIBUTE10
12670 ,ATTRIBUTE11
12671 ,ATTRIBUTE12
12672 ,ATTRIBUTE13
12673 ,ATTRIBUTE14
12674 ,ATTRIBUTE15
12675 ,source_object_id
12676 ,source_object_type
12677 ,CONSTRAINT_TYPE_CODE --Bug 3762437
12678 ,CONSTRAINT_DATE
12679 ,FREE_SLACK
12680 ,TOTAL_SLACK
12681 ,EFFORT_DRIVEN_FLAG
12682 ,LEVEL_ASSIGNMENTS_FLAG
12683 ,EXT_ACT_DURATION
12684 ,EXT_REMAIN_DURATION
12685 ,EXT_SCH_DURATION --Bug 3762437
12686 )
12687 SELECT
12688 pa_proj_elem_ver_schedule_s.nextval
12689 ,ppev1.ELEMENT_VERSION_ID
12690 ,p_dest_PROJECT_ID
12691 ,ppev1.PROJ_ELEMENT_ID
12692 ,SYSDATE
12693 ,l_user_id
12694 ,SYSDATE
12695 ,l_user_id
12696 ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date, --fix bug 2831973
12697 p_target_finish_date,
12698 l_delta,
12699 ppevs.SCHEDULED_START_DATE,
12700 null ) --sch start date
12701 ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date, --fix bug 2831973
12702 p_target_finish_date,
12703 l_delta,
12704 ppevs.SCHEDULED_START_DATE,
12705 SCHEDULED_FINISH_DATE ) --sch end date
12706 ,ppevs.OBLIGATION_START_DATE
12707 ,ppevs.OBLIGATION_FINISH_DATE
12708 ,null --ppevs.ACTUAL_START_DATE bug 2827090
12709 ,null --ppevs.ACTUAL_FINISH_DATE
12710 ,null --ppevs.ESTIMATED_START_DATE
12711 ,null --ppevs.ESTIMATED_FINISH_DATE
12712 ,ppevs.DURATION
12713 ,ppevs.EARLY_START_DATE
12714 ,ppevs.EARLY_FINISH_DATE
12715 ,ppevs.LATE_START_DATE
12716 ,ppevs.LATE_FINISH_DATE
12717 ,p_calendar_id --,ppevs.CALENDAR_ID Bug # 2955589. Use the calendar id passed to
12718 --this API.
12719 ,ppevs.MILESTONE_FLAG
12720 ,ppevs.CRITICAL_FLAG
12721 ,ppevs.RECORD_VERSION_NUMBER
12722 ,l_login_id
12723 ,ppevs.WQ_PLANNED_QUANTITY
12724 ,ppevs.PLANNED_EFFORT
12725 ,ppevs.ACTUAL_DURATION
12726 ,ppevs.ESTIMATED_DURATION
12727 ,ppevs.ATTRIBUTE_CATEGORY
12728 ,ppevs.ATTRIBUTE1
12729 ,ppevs.ATTRIBUTE2
12730 ,ppevs.ATTRIBUTE3
12731 ,ppevs.ATTRIBUTE4
12732 ,ppevs.ATTRIBUTE5
12733 ,ppevs.ATTRIBUTE6
12734 ,ppevs.ATTRIBUTE7
12735 ,ppevs.ATTRIBUTE8
12736 ,ppevs.ATTRIBUTE9
12737 ,ppevs.ATTRIBUTE10
12738 ,ppevs.ATTRIBUTE11
12739 ,ppevs.ATTRIBUTE12
12740 ,ppevs.ATTRIBUTE13
12741 ,ppevs.ATTRIBUTE14
12742 ,ppevs.ATTRIBUTE15
12743 ,p_dest_PROJECT_ID
12744 ,'PA_PROJECTS'
12745 ,CONSTRAINT_TYPE_CODE --Bug 3762437
12746 ,CONSTRAINT_DATE
12747 ,FREE_SLACK
12748 ,TOTAL_SLACK
12749 ,EFFORT_DRIVEN_FLAG
12750 ,LEVEL_ASSIGNMENTS_FLAG
12751 ,EXT_ACT_DURATION
12752 ,EXT_REMAIN_DURATION
12753 ,EXT_SCH_DURATION --Bug 3762437
12754 FROM pa_proj_elem_ver_schedule ppevs,
12755 pa_proj_element_versions ppev1,
12756 pa_proj_element_versions ppev2
12757 where ppev1.attribute15 = ppevs.element_version_id
12758 and ppevs.project_id = p_src_project_id
12759 and ppev2.project_id = p_src_project_id
12760 and ppev2.parent_structure_version_id = l_dest_str_versions_tbl(k).src_str_version_id
12761 and ppev2.element_version_id = ppevs.element_version_id
12762 and ppev1.attribute15 = ppev2.element_version_id
12763 and ppev1.object_type = 'PA_STRUCTURES'
12764 and ppev2.object_type = 'PA_STRUCTURES'
12765 and ppev1.project_id = p_dest_project_id;
12766
12767
12768 END IF; --l_dest_str_versions_tbl(k).copy_flag = 'Y'
12769 END LOOP;
12770 END IF; --IF NVL( l_workplan_enabled, 'N' ) = 'N'
12771
12772 IF l_workplan_enabled = 'Y'
12773 THEN
12774 --updating duration
12775 -- Bug 3657808 Remove duration calculation using calendar
12776 -- and rewritting the query
12777 /*UPDATE pa_proj_elem_ver_schedule
12778 SET duration = PA_PROJ_TASK_STRUC_PUB.calc_duration( p_calendar_id,
12779 scheduled_start_date,
12780 scheduled_finish_date )
12781 WHERE project_id = p_dest_project_id;*/
12782 UPDATE pa_proj_elem_ver_schedule
12783 SET duration = trunc(scheduled_finish_date) - trunc(scheduled_start_date) + 1
12784 WHERE project_id = p_dest_project_id;
12785 END IF;
12786
12787 ---updating baselined dates
12788 UPDATE PA_PROJ_ELEMENTS ppe
12789 SET ( BASELINE_START_DATE ,BASELINE_FINISH_DATE,
12790 BASELINE_DURATION ) =
12791 ( Select ppevs.scheduled_start_date, ppevs.scheduled_finish_date,
12792 ppevs.duration
12793 from pa_proj_elem_ver_schedule ppevs,
12794 pa_proj_elem_ver_structure ppevst
12795 WHERE ppevs.project_id = p_dest_project_id
12796 and ppevst.project_id = p_dest_project_id
12797 and ppevst.current_flag = 'Y' --assuming this is the flag used to identify the baselined structure ver.
12798 and ppevst.STATUS_CODE = 'STRUCTURE_PUBLISHED'
12799 and ppevs.element_version_id = ppevst.element_version_id
12800 )
12801 WHERE project_id = p_dest_project_id;
12802 -- and object_type = 'PA_STRUCTURES'
12803 -- and EXISTS ( SELECT proj_element_id FROM pa_proj_structure_types
12804 -- WHERE proj_element_id = ppe.proj_element_id
12805 -- AND structure_type_id = 1 );
12806
12807 --updating projects dates
12808 update pa_projects_all
12809 set ( BASELINE_START_DATE ,BASELINE_FINISH_DATE, baseline_duration, baseline_as_of_date) =
12810 ( SELECT BASELINE_START_DATE ,BASELINE_FINISH_DATE, baseline_duration,
12811 decode(BASELINE_START_DATE, null, null, sysdate)
12812 FROM pa_proj_elements ppe, pa_proj_structure_types ppst
12813 WHERE project_id = p_dest_project_id
12814 and object_type = 'PA_STRUCTURES'
12815 and ppe.proj_element_id = ppst.proj_element_id
12816 and ppst.structure_type_id = 1 )
12817 where project_id = p_dest_project_id;
12818
12819 IF l_latest_pub_str_ver_id IS NOT NULL
12820 THEN
12821 update pa_projects_all
12822 set ( scheduled_START_DATE ,scheduled_FINISH_DATE, scheduled_duration, scheduled_as_of_date ) =
12823 ( SELECT SCHEDULED_START_DATE ,SCHEDULED_FINISH_DATE,duration,
12824 decode(SCHEDULED_START_DATE, null, null, sysdate)
12825 FROM pa_proj_elem_ver_schedule
12826 WHERE project_id = p_dest_project_Id
12827 and element_version_id = l_latest_pub_str_ver_id)
12828 where project_id = p_dest_project_id;
12829 END IF;
12830
12831
12832 --bug 2831775
12833 --need to sync up transaction dates if auto sync is on
12834 If l_shared = 'Y' and l_workplan_enabled = 'Y' THEN
12835 OPEN get_shared_struc_id;
12836 FETCH get_shared_struc_id into l_structure_id;
12837 CLOSE get_shared_struc_id;
12838
12839 If (PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_DATE_SYNC_ENABLED(l_structure_id) = 'Y') AND (PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_PUB_AT_CREATION(p_src_project_id) = 'Y')THEN
12840
12841 --Copy to transaction date
12842 PA_PROJECT_DATES_PUB.COPY_PROJECT_DATES(
12843 p_project_id => p_dest_project_id,
12844 x_return_status => l_return_status,
12845 x_msg_count => l_msg_count,
12846 x_msg_data => l_msg_data
12847 );
12848
12849 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
12850 x_msg_count := FND_MSG_PUB.count_msg;
12851 if x_msg_count = 1 then
12852 x_msg_data := l_msg_data;
12853 end if;
12854 raise FND_API.G_EXC_ERROR;
12855 end if;
12856
12857 END IF;
12858 END IF;
12859 --end bug 2831775
12860 ------------------------------------------------------------------------------
12861 -- Changes added by skannoji
12862 -- Added code for doosan customer
12863 Declare
12864 /* Bug #: 3305199 SMukka */
12865 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
12866 /* src_versions_tab PA_PLSQL_DATATYPES.IdTabTyp; */
12867 /* dest_versions_tab PA_PLSQL_DATATYPES.IdTabTyp; */
12868 src_versions_tab SYSTEM.pa_num_tbl_type;
12869 dest_versions_tab SYSTEM.pa_num_tbl_type;
12870 Begin
12871 Select Element_Version_ID, attribute15 BULK COLLECT
12872 INTO dest_versions_tab, src_Versions_Tab
12873 From PA_Proj_Element_Versions
12874 Where Project_ID = p_dest_project_id
12875 AND ( PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(element_version_id, 'WORKPLAN') = 'Y')
12876 AND object_type = 'PA_STRUCTURES';
12877
12878 -- Copies budget versions, resource assignments and budget lines as required for the workplan version.
12879 /*Smukka Bug No. 3474141 Date 03/01/2004 */
12880 /*moved PA_FP_COPY_FROM_PKG.copy_wp_budget_versions into plsql block */
12881 BEGIN
12882 PA_FP_COPY_FROM_PKG.copy_wp_budget_versions
12883 (
12884 p_source_project_id => p_src_project_id
12885 ,p_target_project_id => p_dest_project_id
12886 ,p_src_sv_ids_tbl => src_Versions_Tab -- Workplan version id tbl
12887 ,p_target_sv_ids_tbl => dest_Versions_Tab -- Workplan version id tbl
12888 ,p_copy_mode => null -- Bug 4277801
12889 ,x_return_status => x_return_status
12890 ,x_msg_count => x_msg_count
12891 ,x_Msg_data => x_msg_data
12892 );
12893 EXCEPTION
12894 WHEN OTHERS THEN
12895 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
12896 p_procedure_name => 'copy_structures_bulk',
12897 p_error_text => SUBSTRB('PA_FP_COPY_FROM_PKG.copy_wp_budget_versions:'||SQLERRM,1,240));
12898 RAISE FND_API.G_EXC_ERROR;
12899 END;
12900 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12901 RAISE FND_API.G_EXC_ERROR;
12902 END IF;
12903 End;
12904 -- till here by skannoji
12905 ------------------------------------------------------------------------------
12906
12907 update pa_proj_elements ppe1
12908 set attribute15 = ( select attribute15 from pa_proj_elements ppe2
12909 where ppe2.project_id = p_src_project_id
12910 and ppe2.proj_element_id = ppe1.attribute15 )
12911 where project_id = p_dest_project_id
12912 ;
12913
12914 update pa_proj_element_versions ppevs1
12915 set attribute15 = ( select attribute15 from pa_proj_element_versions ppevs2
12916 where ppevs2.project_id = p_src_project_id
12917 and ppevs2.element_version_id = ppevs1.attribute15 )
12918 where project_id = p_dest_project_id
12919 ;
12920
12921 /* Not required to call the concurrent program bcoz it will
12922 be called from AMG upon project creation. Otherwise it will
12923 be redundant code
12924 --bug 3035902 maansari
12925 DECLARE
12926
12927 CURSOR cur_strs_n_types
12928 IS
12929 SELECT ppe.proj_element_id, ppst.structure_type_id
12930 FROM pa_proj_elements ppe, pa_proj_structure_types ppst
12931 WHERE ppe.project_id = p_dest_project_id
12932 AND ppe.object_type = 'PA_STRUCTURES'
12933 AND ppe.proj_element_id = ppst.proj_element_id
12934 ;
12935
12936 CURSOR cur_str_vers( c_structure_id NUMBER )
12937 IS
12938 SELECT ppevs.element_version_id
12939 FROM pa_proj_element_versions ppevs
12940 WHERE ppevs.project_id = p_dest_project_id
12941 AND ppevs.object_type = 'PA_STRUCTURES'
12942 AND ppevs.proj_element_id = c_structure_id
12943 ;
12944
12945 l_fn_str_id NUMBER;
12946 l_wp_str_id NUMBER;
12947 l_fn_str_ver_id NUMBER;
12948 l_wp_str_ver_id NUMBER;
12949 l_task_weight_basis PA_PROJ_PROGRESS_ATTR.task_weight_basis_code%TYPE;
12950 BEGIN
12951 l_task_weight_basis := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS( p_dest_project_id );
12952 IF NVL( l_task_weight_basis, 'X' ) = 'DURATION'
12953 THEN
12954 FOR cur_strs_n_types_rec in cur_strs_n_types LOOP
12955 IF cur_strs_n_types_rec.structure_type_id = 1 --'WORKPLAN' structure
12956 THEN
12957 l_wp_str_id := cur_strs_n_types_rec.proj_element_id;
12958 UPDATE pa_proj_elem_ver_structure
12959 SET PROCESS_UPDATE_WBS_FLAG = 'Y'
12960 WHERE proj_element_id = cur_strs_n_types_rec.proj_element_id
12961 AND project_id = p_dest_project_id
12962 AND PROCESS_UPDATE_WBS_FLAG = 'N'
12963 ;
12964 ELSE
12965 l_fn_str_id := cur_strs_n_types_rec.proj_element_id;
12966 END IF;
12967 END LOOP;
12968 END IF;
12969
12970 IF l_shared = 'Y' AND NVL( l_task_weight_basis, 'X' ) = 'DURATION'
12971 THEN
12972 OPEN cur_str_vers( l_wp_str_id );
12973 FETCH cur_str_vers INTO l_wp_str_ver_id;
12974 CLOSE cur_str_vers;
12975
12976 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
12977 (
12978 p_calling_context => 'COPY_PROJECT'
12979 ,p_project_id => p_dest_project_id
12980 ,p_structure_version_id => l_wp_str_ver_id
12981 ,x_return_status => l_return_status
12982 ,x_msg_count => l_msg_count
12983 ,x_msg_data => l_msg_data);
12984
12985 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
12986 x_msg_count := FND_MSG_PUB.count_msg;
12987 if x_msg_count = 1 then
12988 x_msg_data := l_msg_data;
12989 end if;
12990 raise FND_API.G_EXC_ERROR;
12991 end if;
12992
12993 ELSIF l_shared = 'N' AND NVL( l_task_weight_basis, 'X' ) = 'DURATION' --Split then call the api twice.
12994 THEN
12995 OPEN cur_str_vers( l_wp_str_id );
12996 FETCH cur_str_vers INTO l_wp_str_ver_id;
12997 CLOSE cur_str_vers;
12998
12999 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
13000 (
13001 p_calling_context => 'COPY_PROJECT'
13002 ,p_project_id => p_dest_project_id
13003 ,p_structure_version_id => l_wp_str_ver_id
13004 ,x_return_status => l_return_status
13005 ,x_msg_count => l_msg_count
13006 ,x_msg_data => l_msg_data);
13007
13008 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
13009 x_msg_count := FND_MSG_PUB.count_msg;
13010 if x_msg_count = 1 then
13011 x_msg_data := l_msg_data;
13012 end if;
13013 raise FND_API.G_EXC_ERROR;
13014 end if;
13015
13016
13017 OPEN cur_str_vers( l_fn_str_id );
13018 FETCH cur_str_vers INTO l_fn_str_ver_id;
13019 CLOSE cur_str_vers;
13020
13021 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
13022 (
13023 p_calling_context => 'COPY_PROJECT'
13024 ,p_project_id => p_dest_project_id
13025 ,p_structure_version_id => l_fn_str_ver_id
13026 ,x_return_status => l_return_status
13027 ,x_msg_count => l_msg_count
13028 ,x_msg_data => l_msg_data);
13029
13030 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
13031 x_msg_count := FND_MSG_PUB.count_msg;
13032 if x_msg_count = 1 then
13033 x_msg_data := l_msg_data;
13034 end if;
13035 raise FND_API.G_EXC_ERROR;
13036 end if;
13037
13038 END IF;
13039 END;
13040 --End 3035902 maansari
13041 */
13042
13043
13044 x_return_status := FND_API.G_RET_STS_SUCCESS;
13045
13046
13047 IF (p_debug_mode = 'Y') THEN
13048 pa_debug.debug('PA_PROJ_TASK_STRUC_PUB.copy_structures_bulk END');
13049 END IF;
13050
13051 EXCEPTION
13052 when FND_API.G_EXC_ERROR then
13053 if p_commit = FND_API.G_TRUE then
13054 rollback to copy_structure_bulk_pvt;
13055 end if;
13056 x_return_status := FND_API.G_RET_STS_ERROR;
13057 when FND_API.G_EXC_UNEXPECTED_ERROR then
13058 if p_commit = FND_API.G_TRUE then
13059 rollback to copy_structure_bulk_pvt;
13060 end if;
13061 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13062 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
13063 p_procedure_name => 'copy_structures_bulk',
13064 p_error_text => SUBSTRB(SQLERRM,1,240));
13065 when OTHERS then
13066 if p_commit = FND_API.G_TRUE then
13067 rollback to copy_structure_bulk_pvt;
13068 end if;
13069 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13070 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
13071 p_procedure_name => 'copy_structures_bulk',
13072 p_error_text => SUBSTRB(SQLERRM,1,240));
13073 raise;
13074 END copy_structures_bulk;
13075
13076 FUNCTION calc_duration( p_calendar_id NUMBER, p_start_date DATE, p_finish_date DATE ) RETURN NUMBER IS
13077 l_return_duration NUMBER;
13078 l_duration_days NUMBER;
13079 l_msg_count NUMBER;
13080 l_msg_data VARCHAR2(250);
13081 l_return_status VARCHAR2(2);
13082 BEGIN
13083
13084 pa_duration_utils.get_duration(p_calendar_id => p_calendar_id ,
13085 p_start_date => p_start_date,
13086 p_end_date => p_finish_date,
13087 x_duration_days => l_duration_days,
13088 x_duration_hours => l_return_duration ,
13089 x_return_status => l_return_status,
13090 x_msg_count => l_msg_count,
13091 x_msg_data => l_msg_data);
13092 return l_return_duration;
13093
13094 END calc_duration;
13095
13096 PROCEDURE get_version_ids(
13097 p_task_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13098 ,p_task_version_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13099 ,p_project_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13100 ,x_structure_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13101 ,x_task_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13102 ) IS
13103 CURSOR cur_str_ver_id1
13104 IS
13105 SELECT parent_structure_version_id
13106 FROM pa_proj_element_versions
13107 WHERE element_version_id = p_task_version_id;
13108
13109 CURSOR cur_str_ver_id2
13110 IS
13111 SELECT element_version_id, parent_structure_version_id
13112 FROM pa_proj_element_versions
13113 WHERE proj_element_id = p_task_id
13114 AND project_id = p_project_id
13115 ;
13116
13117 BEGIN
13118
13119 IF p_task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_task_version_id IS NOT NULL
13120 THEN
13121 OPEN cur_str_ver_id1;
13122 FETCH cur_str_ver_id1 INTO x_structure_version_id;
13123 CLOSE cur_str_ver_id1;
13124 x_task_version_id := p_task_version_id;
13125 ELSIF ( p_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_task_version_id IS NULL ) AND
13126 ( p_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_task_id IS NOT NULL )
13127 THEN
13128 OPEN cur_str_ver_id2;
13129 FETCH cur_str_ver_id2 INTO x_task_version_id, x_structure_version_id;
13130 CLOSE cur_str_ver_id2;
13131 END IF;
13132
13133 END get_version_ids;
13134
13135
13136 PROCEDURE get_task_version_id(
13137 p_project_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13138 ,p_structure_version_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13139 ,p_task_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13140 ,x_task_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13141 ) IS
13142
13143 CURSOR cur_task_ver_id
13144 IS
13145 SELECT element_version_id
13146 FROM pa_proj_element_versions
13147 WHERE proj_element_id = p_task_id
13148 AND parent_structure_version_id = p_structure_version_id
13149 AND project_id = p_project_id;
13150
13151 BEGIN
13152 IF p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_structure_version_id IS NOT NULL AND
13153 p_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_task_id IS NOT NULL AND
13154 p_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_project_id IS NOT NULL
13155 THEN
13156 OPEN cur_task_ver_id;
13157 FETCH cur_task_ver_id INTO x_task_version_id;
13158 CLOSE cur_task_ver_id;
13159 END IF;
13160 END get_task_version_id;
13161
13162
13163 PROCEDURE rollup_dates(
13164 p_tasks_in IN pa_project_pub.task_out_tbl_type
13165 ,p_task_version_id IN NUMBER := null
13166 ,p_structure_version_id IN NUMBER
13167 ,p_project_id IN NUMBER
13168 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13169 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13170 ,x_return_status OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
13171
13172 i NUMBER;
13173
13174 l_tasks_ver_ids PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
13175 l_task_version_id NUMBER;
13176
13177 l_msg_count NUMBER;
13178 l_return_status VARCHAR2(1);
13179 l_msg_data VARCHAR2(2000);
13180 l_data VARCHAR2(2000);
13181 l_msg_index_out NUMBER;
13182 API_ERROR EXCEPTION;
13183 j NUMBER;
13184
13185 BEGIN
13186
13187 IF p_task_version_id IS NULL
13188 THEN
13189 i := p_tasks_in.first;
13190 j := 1;
13191 IF p_tasks_in.exists(i)
13192 THEN
13193 WHILE i IS NOT NULL LOOP
13194 IF p_tasks_in(i).task_version_id IS NOT NULL AND
13195 p_tasks_in(i).task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13196 THEN
13197 --l_tasks_ver_ids.extend;
13198 l_tasks_ver_ids(j) := p_tasks_in(i).task_version_id;
13199
13200 ELSIF ( p_tasks_in(i).pa_task_id IS NOT NULL AND p_tasks_in(i).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) AND
13201 ( p_tasks_in(i).task_version_id IS NULL OR p_tasks_in(i).task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) AND p_structure_version_id IS NOT NULL
13202 THEN
13203 --PA_PROJECT_PUB.update_project does not populate task versions for the tasks being updated.
13204 --in this case we have to pick this from databse.
13205 get_task_version_id(
13206 p_project_id => p_project_id
13207 ,p_task_id => p_tasks_in(i).pa_task_id
13208 ,p_structure_version_id => p_structure_version_id
13209 ,x_task_version_id => l_task_version_id
13210 );
13211
13212 --l_tasks_ver_ids.extend;
13213 l_tasks_ver_ids(j) := l_task_version_id;
13214
13215 END IF;
13216 i := p_tasks_in.next(i);
13217 j := j + 1;
13218 END LOOP;
13219 END IF;
13220 --To avoid no_data_found when this array is read in PA_TASK_PUB1.Cal_Task_weights
13221 --l_tasks_ver_ids.extend;
13222 --l_tasks_ver_ids(l_tasks_ver_ids.count) := null;
13223 ELSE
13224 l_tasks_ver_ids(1) := p_task_version_id;
13225 END IF;
13226
13227 PA_STRUCT_TASK_ROLLUP_PUB.TASKS_ROLLUP_UNLIMITED(
13228 p_calling_module => 'AMG'
13229 ,p_element_versions => l_tasks_ver_ids
13230 ,x_return_status => l_return_status
13231 ,x_msg_count => l_msg_count
13232 ,x_msg_data => l_msg_data);
13233
13234 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
13235 x_msg_count := FND_MSG_PUB.count_msg;
13236 x_return_status := l_return_status ; -- Bug 3044915
13237 if x_msg_count = 1 then
13238 pa_interface_utils_pub.get_messages
13239 (p_encoded => FND_API.G_TRUE,
13240 p_msg_index => 1,
13241 p_msg_count => l_msg_count,
13242 p_msg_data => l_msg_data,
13243 p_data => l_data,
13244 p_msg_index_out => l_msg_index_out);
13245 x_msg_data := l_data;
13246 end if;
13247 raise API_ERROR;
13248 end if;
13249 x_return_status := FND_API.G_RET_STS_SUCCESS; -- Bug3044915
13250 END rollup_dates;
13251
13252 /*==================================================================
13253 This API is called from pa_project_pub.create_project and does the
13254 processing to create the structure information for the tasks.
13255 Included the api for Post FP K one off. Bug 2931183
13256 This API is called from pa_project_pub.update_project which passes
13257 the structure version id through p_structure_version_id parameter.
13258 The complete WBS is passed to this API in p_tasks_in_tbl. Depending
13259 on whether the task is an existing task or a new task, task creation
13260 or task updation is performed.
13261 ==================================================================*/
13262
13263 PROCEDURE PROCESS_TASK_STRUCTURE_BULK
13264 ( p_api_version_number IN NUMBER
13265 ,p_commit IN VARCHAR2
13266 ,p_init_msg_list IN VARCHAR2
13267 ,p_calling_module IN VARCHAR2
13268 ,p_project_id IN pa_projects_all.project_id%TYPE
13269 ,p_source_project_id IN pa_projects_all.project_id%TYPE
13270 ,p_pm_product_code IN pa_projects_all.pm_product_code%TYPE
13271 ,p_structure_type IN pa_structure_types.structure_type_class_code%TYPE
13272 ,p_tasks_in_tbl IN pa_project_pub.task_in_tbl_type
13273 ,p_create_task_version_only IN VARCHAR2
13274 ,p_wp_str_exists IN VARCHAR2
13275 ,p_is_wp_separate_from_fn IN VARCHAR2
13276 ,p_is_wp_versioning_enabled IN VARCHAR2
13277 ,p_structure_version_id IN pa_proj_elem_ver_structure.element_version_id%TYPE --IUP: Populated only in case of Update_project context
13278 -- Included NOCOPY for the following parameter.
13279 -- PA L Changes 3010538
13280 ,p_process_mode IN VARCHAR2
13281 -- Bug 3075609. To identify create task version only context.
13282 ,p_create_task_versions_only IN VARCHAR2
13283 ,px_tasks_out_tbl IN OUT NOCOPY pa_project_pub.task_out_tbl_type
13284 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13285 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13286 ,x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
13287 AS
13288
13289 -- Cursors Definition
13290
13291 -- This cursor is used to get the auto publish flag on creation for a given project_id
13292 /* Bug 2955589. This cursor is no longer used.
13293 CURSOR cur_auto_pub_flag(c_project_id pa_projects_all.project_id%TYPE)
13294 IS
13295 SELECT AUTO_PUB_UPON_CREATION_FLAG
13296 FROM pa_proj_workplan_attr
13297 WHERE project_id = c_project_id;
13298 */
13299 -- This cursor is used to get the structure id given the structure type and project_id
13300 CURSOR get_structure(c_project_id pa_projects_all.project_id%TYPE, c_struc_type pa_structure_types.structure_type_class_code%TYPE) IS
13301 select pelem.proj_element_id
13302 from pa_proj_elements pelem,
13303 pa_proj_structure_types ppstr,
13304 pa_structure_types pstr
13305 where pelem.project_id = c_project_id
13306 and pstr.structure_type_class_code = c_struc_type
13307 and pstr.structure_type_id = ppstr.structure_type_id
13308 and ppstr.proj_element_id = pelem.proj_element_id;
13309
13310 -- This cursor is used to get the project number given the project_id
13311 CURSOR l_amg_project_csr(c_project_id pa_projects.project_id%type)
13312 IS
13313 SELECT segment1
13314 FROM pa_projects p
13315 WHERE p.project_id = c_project_id;
13316
13317 --The following cursor will be used when the structure type is
13318 --Financial as some of the attributes have been derived and updated
13319 --in the pa_tasks table and we need to use them for structures processing.
13320 CURSOR cur_pa_tasks(c_project_id pa_projects_all.project_id%TYPE,c_task_id pa_tasks.task_id%TYPE)
13321 IS
13322 SELECT task_number, long_task_name, description,
13323 parent_task_id,carrying_out_organization_id,
13324 pm_task_reference, address_id, task_manager_person_id
13325 FROM pa_tasks
13326 WHERE project_id = c_project_id
13327 AND task_id = c_task_id;
13328
13329 l_cur_pa_tasks_rec cur_pa_tasks%ROWTYPE; -- userd only for create task case
13330
13331 --ADUT. This cursor is required to identify if the source is a project / template.
13332 Cursor cur_template_flag(c_proj_id pa_projects_all.project_id%TYPE)
13333 Is
13334 select NVL(template_flag,'N')
13335 from pa_projects
13336 where project_id = c_proj_id;
13337
13338 -- IUP: Cursors added for changes done to this api so it can be called from update_project
13339 --Cursor to get the record version number of the task record which needs to be updated in pa_proj_elements table
13340 CURSOR cur_rec_ver_num(c_task_id pa_tasks.task_id%TYPE)
13341 IS
13342 SELECT record_version_number
13343 FROM pa_proj_elements
13344 WHERE proj_element_id = c_task_id
13345 AND object_type = 'PA_TASKS';
13346
13347 --Cursor to get the task version id when task id and structure version id is known
13348 CURSOR cur_pa_task_ver( c_structure_version_id pa_proj_element_versions.parent_structure_version_id%TYPE, c_task_id pa_tasks.task_id%TYPE )
13349 IS
13350 SELECT element_version_id, record_version_number
13351 FROM pa_proj_element_versions
13352 WHERE project_id = p_project_id
13353 AND proj_element_id = c_task_id
13354 AND parent_structure_version_id = c_structure_version_id
13355 AND object_type = 'PA_TASKS';
13356
13357 --Cursor to get the parent version id of the task version id
13358 CURSOR cur_parent_object_rel( c_task_version_id pa_proj_elem_ver_schedule.element_version_id%TYPE )
13359 IS
13360 SELECT object_id_from1 -- parent task id
13361 ,object_relationship_id, -- relationship id reqd for update relationship API
13362 record_version_number,
13363 weighting_percentage -- Bug 3075609. We need to get hold of the weightage of the task in db.
13364 FROM pa_object_relationships
13365 WHERE object_id_to1 = c_task_version_id
13366 AND relationship_type = 'S';
13367
13368 -- Added for DFF attributes for calling update_schedule_version
13369 CURSOR cur_ver_sch_attr_rec(c_element_version_id IN pa_proj_elem_ver_schedule.element_version_id%TYPE)
13370 IS
13371 SELECT *
13372 FROM pa_proj_elem_ver_schedule
13373 WHERE element_version_id = c_element_version_id
13374 AND project_id = p_project_id;
13375
13376 l_ver_sch_attr_rec cur_ver_sch_attr_rec%ROWTYPE;
13377
13378 --Cursor to get the task type associated with the task id
13379 CURSOR cur_task_type_id(c_task_id pa_tasks.task_id%TYPE)
13380 IS
13381 SELECT type_id
13382 FROM pa_proj_elements
13383 WHERE proj_element_id = c_task_id
13384 AND project_id = p_project_id;
13385
13386 --Cursor to get the task id if task element version id is known
13387 CURSOR cur_elem_ver_to_task_id( c_task_version_id pa_proj_element_versions.element_version_id%TYPE )
13388 IS
13389 SELECT proj_element_id
13390 FROM pa_proj_element_versions
13391 WHERE project_id = p_project_id
13392 AND element_version_id = c_task_version_id;
13393
13394
13395 --Cursor added for bug 3057575 :
13396 --Cursor to get all the task ver id for a particular Structure version
13397 CURSOR cur_all_task_ver_id( c_structure_version_id pa_proj_element_versions.parent_structure_version_id%TYPE )
13398 IS
13399 Select element_version_id
13400 from pa_proj_element_versions
13401 where parent_structure_version_id = c_structure_version_id
13402 and object_type = 'PA_TASKS';
13403
13404 --Cursor added for bug 3057575 :
13405 --Cursor to get the task number from task ver id
13406 CURSOR cur_ver_id_to_task_num( c_task_version_id pa_proj_element_versions.element_version_id%TYPE )
13407 IS
13408 SELECT p1.element_number
13409 FROM pa_proj_elements p1, pa_proj_element_versions pv1
13410 WHERE pv1.element_version_id = c_task_version_id
13411 AND p1.proj_element_id = pv1.proj_element_id;
13412
13413 -- End Cursors Definition
13414
13415 -- Definition for the table types used in this API
13416 TYPE display_sequence_tbl IS TABLE OF pa_proj_element_versions.display_sequence%TYPE
13417 INDEX BY BINARY_INTEGER;
13418 TYPE wbs_level_tbl IS TABLE OF pa_proj_element_versions.wbs_level%TYPE
13419 INDEX BY BINARY_INTEGER;
13420 TYPE wbs_number_tbl IS TABLE OF pa_proj_element_versions.wbs_number%TYPE
13421 INDEX BY BINARY_INTEGER;
13422 TYPE child_count_tbl IS TABLE OF NUMBER
13423 INDEX BY BINARY_INTEGER;
13424 TYPE weighting_percentage_tbl IS TABLE OF pa_object_relationships.weighting_percentage%TYPE
13425 INDEX BY BINARY_INTEGER;
13426 TYPE task_version_id_tbl IS TABLE OF pa_proj_element_versions.element_version_id%TYPE
13427 INDEX BY BINARY_INTEGER;
13428
13429 ----Table Type added for bug 3057575 :
13430 TYPE task_parent_id_tbl_type IS TABLE OF pa_tasks.task_id%TYPE
13431 INDEX BY BINARY_INTEGER;
13432 ----Table Type added for bug 3057575 :
13433 TYPE task_ver_id_passed_tbl_type IS TABLE OF pa_proj_element_versions.element_version_id%TYPE
13434 INDEX BY BINARY_INTEGER;
13435
13436 -- End of Definition for the table types
13437
13438 -- Header level variables common to all tasks required for update/create task/project cases.
13439 l_structure_id pa_proj_elements.proj_element_id%TYPE;
13440 l_structure_version_id pa_proj_element_versions.element_version_id%TYPE;
13441 l_task_unpub_ver_status_code pa_proj_element_versions.task_unpub_ver_status_code%TYPE;
13442 l_add_task_security VARCHAR2(1);
13443 l_default_task_type_id pa_proj_elements.type_id%TYPE;
13444 l_update_task_security VARCHAR2(1);
13445 l_str_status_code pa_proj_elem_ver_structure.status_code%TYPE;
13446 l_amg_segment1 pa_projects_all.segment1%TYPE;
13447
13448 -- Bug 3075609
13449 l_maintain_weightages VARCHAR2(1); -- We need not maintain weightages during code flow always. This var will track it.
13450 l_existing_task_set_max_wt VARCHAR2(1); -- If a task is indented/ moved under a parent with no other progressible task, this
13451 -- task should have a weightage of 100. This flag will track this.
13452
13453 -- Bug 3075609
13454 l_new_structure_version varchar2(1) := 'Y'; -- In the update context, we could be either updating an existing
13455 -- structure version or be creating a new structure version. We need
13456 -- to differentiate the two scenarios.
13457
13458 -- rec that contains all tasks information.
13459 l_task_in_rec pa_project_pub.task_in_rec_type;
13460
13461 -- proj element level variables
13462 l_task_id pa_tasks.task_id%TYPE; -- task id of the current task being processed in loop
13463 l_parent_task_id pa_tasks.parent_task_id%TYPE; -- parent task id of the current task being processed in loop
13464 l_task_version_id pa_proj_element_versions.element_version_id%TYPE; -- stores version id of current task being processed
13465
13466 -- version level variables required only for update task case.
13467 l_proj_elem_ver_rvn pa_proj_element_versions.record_version_number%TYPE; -- record version number of proj element table
13468 l_proj_elem_ver_rowid VARCHAR2(255); -- rowid of the task being updated.
13469 l_relationship_id pa_object_relationships.object_relationship_id%TYPE;
13470 l_obj_rel_rvn NUMBER;
13471
13472 -- flexfield attributes used for updating/creating element version and schedule versions table.
13473 l_attribute_category PA_PROJ_ELEMENT_VERSIONS.attribute_category%TYPE;
13474 l_attribute1 PA_PROJ_ELEMENT_VERSIONS.attribute1%TYPE;
13475 l_attribute2 PA_PROJ_ELEMENT_VERSIONS.attribute2%TYPE;
13476 l_attribute3 PA_PROJ_ELEMENT_VERSIONS.attribute3%TYPE;
13477 l_attribute4 PA_PROJ_ELEMENT_VERSIONS.attribute4%TYPE;
13478 l_attribute5 PA_PROJ_ELEMENT_VERSIONS.attribute5%TYPE;
13479 l_attribute6 PA_PROJ_ELEMENT_VERSIONS.attribute6%TYPE;
13480 l_attribute7 PA_PROJ_ELEMENT_VERSIONS.attribute7%TYPE;
13481 l_attribute8 PA_PROJ_ELEMENT_VERSIONS.attribute8%TYPE;
13482 l_attribute9 PA_PROJ_ELEMENT_VERSIONS.attribute9%TYPE;
13483 l_attribute10 PA_PROJ_ELEMENT_VERSIONS.attribute10%TYPE;
13484 l_attribute11 PA_PROJ_ELEMENT_VERSIONS.attribute11%TYPE;
13485 l_attribute12 PA_PROJ_ELEMENT_VERSIONS.attribute12%TYPE;
13486 l_attribute13 PA_PROJ_ELEMENT_VERSIONS.attribute13%TYPE;
13487 l_attribute14 PA_PROJ_ELEMENT_VERSIONS.attribute14%TYPE;
13488 l_attribute15 PA_PROJ_ELEMENT_VERSIONS.attribute15%TYPE;
13489 --Bug 6153503
13490 l_return_msg varchar2(2000);
13491 l_validate_status varchar2(1);
13492
13493 -- Variables required for calculating display sequence, wbs level and weightage etc.
13494 l_display_sequence_tbl display_sequence_tbl;
13495 l_wbs_level_tbl wbs_level_tbl;
13496 l_wbs_number_tbl wbs_number_tbl;
13497 l_child_count_tbl child_count_tbl;
13498 l_weighting_percentage_tbl weighting_percentage_tbl;
13499 l_task_version_id_tbl task_version_id_tbl;
13500 l_top_task_count NUMBER;
13501 l_disp_seq NUMBER;
13502
13503 -- Bug 3075609. The following plsql table will indicate at any point of time if the parent
13504 -- contains a task which has progress enabled.
13505 l_child_indicator_tbl PA_PLSQL_DATATYPES.Char1TabTyp;
13506
13507 -- Bug 3075609. This is a table of task versions for which atleast one of its child has changed
13508 -- its parent. That a child task has moved out of this branch. This local variable will be indexed
13509 -- with the task version ids so that eliminating duplicates is easy.
13510 l_affected_parents_tbl PA_PLSQL_DATATYPES.Char1TabTyp;
13511
13512 l_dummy_char VARCHAR2(1);
13513 l_dummy_number NUMBER;
13514
13515 -- Standard parameters
13516 l_return_status varchar2(1);
13517 l_error_msg_code varchar2(30);
13518 l_msg_count NUMBER := 0;
13519 l_data VARCHAR2(2000);
13520 l_msg_data VARCHAR2(2000);
13521 l_msg_index_out NUMBER;
13522 l_debug_mode VARCHAR2(1);
13523 l_module_name VARCHAR2(100) := 'pa.plsql.PA_PROJ_TASK_STRUC_PUB';
13524 l_process_code VARCHAR2(30);
13525 l_task_weight_basis_code VARCHAR2(30);
13526 l_update_wbs_flag VARCHAR2(1);
13527
13528 l_debug_level2 CONSTANT NUMBER := 2;
13529 l_debug_level3 CONSTANT NUMBER := 3;
13530 l_debug_level4 CONSTANT NUMBER := 4;
13531 l_debug_level5 CONSTANT NUMBER := 5;
13532 l_debug_level6 CONSTANT NUMBER := 6;
13533
13534 --bug 3010538
13535 l_WBS_changed_flag VARCHAR2(1) := 'N';
13536 l_progressable_task VARCHAR2(1); --bug 3035902 maansari
13537 --end bug 3010538
13538
13539 -- Bug 3091798
13540 l_request_id pa_proj_elem_ver_structure.conc_request_id%TYPE;
13541
13542 -- Variables added for bug 3057575 :
13543 row_task_ver_id cur_all_task_ver_id%ROWTYPE;
13544 task_parent_id_tbl task_parent_id_tbl_type;
13545 task_ver_id_passed_tbl task_ver_id_passed_tbl_type;
13546 l_temp_count NUMBER;
13547 l_temp_success VARCHAR2(1);
13548 l_hierarchy_count NUMBER;
13549 -- l_err_task_number pa_tasks.task_number%TYPE; bug 6193314
13550 l_err_task_number pa_proj_elements.element_number%TYPE;
13551 l_shared VARCHAR(1) := 'N'; -- Added for Bug#3451073
13552
13553 /* Bug # 3420093 - Adding Progress Management modifications to create_project and update_project flow. */
13554
13555 -- Amit Bug 3964548 Begin
13556 -- Changed l_add_task_ver_ids, l_add_planned_effort, l_add_start_date, l_add_end_date
13557 -- to SYSTEM.pa_num_tbl_type from PA_NUM_1000_NUM
13558 --l_add_task_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
13559 --l_add_planned_effort PA_NUM_1000_NUM := PA_NUM_1000_NUM();
13560 --l_add_start_date PA_DATE_1000_DATE := PA_DATE_1000_DATE();
13561 --l_add_end_date PA_DATE_1000_DATE := PA_DATE_1000_DATE();
13562
13563 l_add_task_ver_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13564 l_add_planned_effort SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13565 l_add_start_date SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
13566 l_add_end_date SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
13567 l_pm_product_code SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
13568 l_add_plan_task_id NUMBER;
13569
13570 CURSOR cur_wp_task_csr_duplicate (c_project_id pa_projects_all.project_id%TYPE,
13571 c_pm_source_reference pa_proj_elements.pm_source_reference%TYPE) IS
13572 SELECT proj_element_id
13573 FROM pa_proj_elements pelem
13574 WHERE project_id = c_project_id
13575 AND pm_source_reference = c_pm_source_reference
13576 AND exists(select 1
13577 from pa_proj_structure_types pstype, pa_structure_types types
13578 where pstype.proj_element_id = pelem.parent_structure_id
13579 and pstype.structure_type_id = types.structure_type_id
13580 and types.structure_type = p_structure_type);
13581 -- Amit Bug 3964548 End
13582
13583 l_del_task_ver_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13584
13585 cursor l_task_cur(p_project_id NUMBER) is
13586 select
13587 element_version_id,planned_effort,actual_start_date,actual_finish_date
13588 from pa_proj_elem_ver_schedule ppevs, pa_proj_elements ppe
13589 where ppevs.project_id = ppe.project_id
13590 and ppevs.proj_element_id = ppe.proj_element_id
13591 and ppe.object_type = 'PA_TASKS'
13592 and ppevs.project_id = p_project_id;
13593 /** cursor added by aditi for bug 4120380. This is added to verify if the task_number is being modified by AMG Update_project script,
13594 Only then we need to prefix the task_number with a '-', so as to prevent primary key violation, and sucessful update.**/
13595 /*bug#5243018 : Reverting the fix in Bug 4120380
13596 CURSOR cur_proj_elements_info(c_task_id pa_proj_elements.proj_element_id%TYPE)
13597 IS
13598 SELECT element_number, name
13599 FROM pa_proj_elements
13600 WHERE proj_element_id = c_task_id;
13601 l_proj_elements_info cur_proj_elements_info%ROWTYPE; */
13602 /** changes end for bug 4120380 by aditi **/
13603 l_task_cur_rec l_task_cur%rowtype;
13604
13605 l_taskin_rec pa_project_pub.task_in_rec_type;
13606 l_taskout_rec pa_project_pub.task_out_rec_type;
13607
13608 l_i NUMBER;
13609 --Added by rtarway for BUG 4059962
13610 l_financial_task_flag VARCHAR2(1);
13611 l_share_code VARCHAR2(30);
13612 --Added by rtarway for BUG 4059962
13613
13614 --Added by rtarway for BUG 4132590
13615 CURSOR check_hidden_assgn_exists(p_element_version_id IN NUMBER) IS
13616 SELECT 'Y'
13617 FROM pa_resource_assignments ra
13618 WHERE ra.ta_display_flag = 'N'
13619 AND ra.wbs_element_version_id = p_element_version_id
13620 AND rownum = 1;
13621
13622 l_hidden_assgn VARCHAR2(1);
13623 --Added by rtarway for BUG 4132590
13624 l_fin_task_id NUMBER;
13625 l_fin_task_reference VARCHAR2(250);
13626
13627 /* Bug # 3420093 - Adding Progress Management modifications to create_project and update_project flow. */
13628
13629 -- Begin fix for Bug # 4373055.
13630
13631 l_str_ver_id NUMBER:= null;
13632 l_conc_request_id NUMBER := null;
13633 l_message_name VARCHAR2(30) := null;
13634 l_message_type VARCHAR2(30) := null;
13635
13636 -- End fix for Bug # 4373055.
13637
13638 -- Addition for Bug 6458891
13639 cursor cur_prev_prog (p_project_id NUMBER, p_object_id NUMBER, p_object_version_id NUMBER) is
13640 select
13641 planned_effort, est_remaining_effort, completed_percentage
13642 from PA_TASK_PROGRESS_AMG_V
13643 where
13644 project_id = p_project_id
13645 and OBJECT_ID = p_object_id
13646 and OBJECT_VERSION_ID = p_object_version_id
13647 and STRUCTURE_TYPE_CLASS_CODE='WORKPLAN';
13648
13649 l_prev_planned_effort Number;
13650 l_prev_etc_effort Number;
13651 l_prev_percent_comp Number;
13652 l_update_task_det_flag varchar2(1);
13653
13654 -- Bug 6717386
13655 CURSOR cur_struc_ver_wp(c_project_id pa_projects_all.project_id%TYPE, c_structure_type pa_structure_types.structure_type%TYPE)
13656 IS
13657 SELECT c.element_version_id
13658 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
13659 ,pa_proj_elem_ver_structure d
13660 WHERE c.project_id = c_project_id
13661 AND a.structure_type_id = b.structure_type_id
13662 AND b.proj_element_id = c.proj_element_id
13663 AND a.structure_type = c_structure_type
13664 AND d.project_id = c.project_id
13665 AND d.element_version_id = c.element_version_id
13666 AND d.status_code = 'STRUCTURE_WORKING';
13667
13668 l_struct_ver_id pa_proj_element_versions.element_version_id%TYPE;
13669 l_status_code pa_proj_elements.status_code%type;
13670 -- Bug 6717386
13671
13672 BEGIN
13673
13674 IF p_commit = FND_API.G_TRUE THEN
13675 SAVEPOINT process_task_struc;
13676 END IF;
13677
13678 IF p_init_msg_list = FND_API.G_TRUE THEN
13679 FND_MSG_PUB.initialize;
13680 END IF;
13681
13682 x_msg_count := 0;
13683 x_return_status := FND_API.G_RET_STS_SUCCESS;
13684 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
13685
13686 -- Moved down this code during UT.
13687 IF l_debug_mode = 'Y' THEN
13688 pa_debug.g_err_stage:= 'Entering PROCESS_TASK_STRUCTURE_BULK';
13689 pa_debug.write(l_module_name,pa_debug.g_err_stage,
13690 l_debug_level2);
13691
13692 --For bug 4252182
13693 pa_debug.set_curr_function( p_function => 'PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK',
13694 p_debug_mode => l_debug_mode );
13695
13696 END IF;
13697
13698 -- Check for business rules violations
13699 IF l_debug_mode = 'Y' THEN
13700
13701 pa_debug.g_err_stage:= 'Input parameter List :';
13702 pa_debug.write(l_module_name,pa_debug.g_err_stage,
13703 l_debug_level3);
13704
13705 pa_debug.g_err_stage:= 'p_project_id : ' || p_project_id;
13706 pa_debug.write(l_module_name,pa_debug.g_err_stage,
13707 l_debug_level3);
13708
13709 pa_debug.g_err_stage:= 'p_pm_product_code : ' || p_pm_product_code;
13710 pa_debug.write(l_module_name,pa_debug.g_err_stage,
13711 l_debug_level3);
13712
13713 pa_debug.g_err_stage:= 'p_structure_type : ' || p_structure_type;
13714 pa_debug.write(l_module_name,pa_debug.g_err_stage,
13715 l_debug_level3);
13716
13717 pa_debug.g_err_stage:= 'p_wp_str_exists : ' || p_wp_str_exists;
13718 pa_debug.write(l_module_name,pa_debug.g_err_stage,
13719 l_debug_level3);
13720
13721 pa_debug.g_err_stage:= 'p_is_wp_separate_from_fn :' || p_is_wp_separate_from_fn;
13722 pa_debug.write(l_module_name,pa_debug.g_err_stage,
13723 l_debug_level3);
13724
13725 pa_debug.g_err_stage:= 'p_is_wp_versioning_enabled :' || p_is_wp_versioning_enabled;
13726 pa_debug.write(l_module_name,pa_debug.g_err_stage,
13727 l_debug_level3);
13728
13729 -- IUP: Impact of Update_project
13730 pa_debug.g_err_stage:= 'p_structure_version_id :' || p_structure_version_id;
13731 pa_debug.write(l_module_name,pa_debug.g_err_stage,
13732 l_debug_level3);
13733
13734 pa_debug.g_err_stage:= 'p_sprocess_mode :' || p_process_mode;
13735 pa_debug.write(l_module_name,pa_debug.g_err_stage,
13736 l_debug_level3);
13737
13738 END IF;
13739
13740
13741 IF l_debug_mode = 'Y' THEN
13742
13743 pa_debug.g_err_stage:= 'Validating input parameters';
13744 pa_debug.write(l_module_name,pa_debug.g_err_stage,
13745 l_debug_level3);
13746 END IF;
13747
13748 IF (p_project_id IS NULL) OR
13749 (p_pm_product_code IS NULL) OR
13750 (p_structure_type IS NULL) OR
13751 (p_wp_str_exists IS NULL) OR
13752 (p_is_wp_separate_from_fn IS NULL) OR
13753 (p_is_wp_versioning_enabled IS NULL)OR
13754 (p_process_mode IS NULL)
13755 THEN
13756
13757 PA_UTILS.ADD_MESSAGE
13758 (p_app_short_name => 'PA',
13759 p_msg_name => 'PA_INV_PARAM_PASSED'); -- Bug 2955589. Changed the message name to
13760 RAISE Invalid_Arg_Exc_WP; -- have a generic message.
13761
13762 END IF;
13763
13764 -- The following check is not required in the create_project context, but will be required
13765 -- in the update_project context in case we are calling the api for publishing. Having
13766 -- this check as a placeholder for future changes.
13767
13768 ---IUP:below code is commented out as calling api itself is taking care.
13769 /*
13770 open cur_pa_temp_import(p_project_id);
13771 fetch cur_pa_temp_import into l_dummy_char;
13772 IF cur_pa_temp_import%FOUND THEN
13773 IF l_debug_mode = 'Y' THEN
13774 pa_debug.g_err_stage:= 'Records found in PA_TEMP_IMPORT_TASKS - Returning';
13775 pa_debug.write(l_module_name,pa_debug.g_err_stage,
13776 l_debug_level3);
13777 END IF;
13778
13779 close cur_pa_temp_import;
13780 pa_debug.reset_curr_function;
13781 RETURN;
13782 END IF;
13783 close cur_pa_temp_import;*/
13784
13785
13786 -- IUP: Added the below if condition As the processing under this needs to be done only for update_project
13787 -- Following local variables are populated within this if condition
13788 -- l_structure_version_id
13789 -- l_structure_id
13790 -- l_task_unpub_ver_status_code
13791 -- l_add_task_security
13792 -- l_update_task_security populated only for update task case.
13793 -- PA L Changes 3010538
13794 IF p_structure_type IS NOT NULL THEN
13795
13796 -- Begin fix for Bug # 4373055.
13797
13798 /*
13799
13800 l_process_code :=
13801 PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_CODE(p_project_id => p_project_id
13802 ,p_structure_type => p_structure_type );
13803 IF nvl(l_process_code,'-1') = 'WUP' THEN
13804
13805 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13806 THEN
13807 --Commented out as there is no message defined for amg corresponding to PA_PS_VD_UPDWBS_PRC_INPROC
13808 --pa_interface_utils_pub.map_new_amg_msg
13809 -- ( p_old_message_code => 'PA_PS_VD_UPDWBS_PRC_INPROC'
13810 -- ,p_msg_attribute => 'CHANGE'
13811 -- ,p_resize_flag => 'N'
13812 -- ,p_msg_context => 'GENERAL'
13813 -- ,p_attribute1 => ''
13814 -- ,p_attribute2 => ''
13815 -- ,p_attribute3 => ''
13816 -- ,p_attribute4 => ''
13817 -- ,p_attribute5 => '');
13818 l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => p_project_id -- Bug 3091798
13819 ,p_structure_type => p_structure_type );
13820
13821 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
13822 -- ,p_msg_name => 'PA_PS_VD_UPDWBS_PRC_INPROC');Bug 3091798.
13823 ,p_msg_name => 'PA_PS_UPDWBS_PRC_INPROC_AMG', -- Bug 3091798. Message includes the request id.
13824 p_token1 => 'REQUESTID',
13825 p_value1 => l_request_id);
13826
13827
13828 raise Invalid_Arg_Exc_WP;
13829 END IF ;
13830 ELSIF nvl(l_process_code,'-1') = 'WUE' THEN
13831
13832 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13833 THEN
13834 l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => p_project_id --Bug 3091798
13835 ,p_structure_type => p_structure_type );
13836
13837 --Commented out as there is no message defined for amg corresponding to PA_PS_VD_UPD_WBS_PRC_ERR
13838 --pa_interface_utils_pub.map_new_amg_msg
13839 -- ( p_old_message_code => 'PA_PS_VD_UPD_WBS_PRC_ERR'
13840 -- ,p_msg_attribute => 'CHANGE'
13841 -- ,p_resize_flag => 'N'
13842 -- ,p_msg_context => 'GENERAL'
13843 -- ,p_attribute1 => ''
13844 -- ,p_attribute2 => ''
13845 -- ,p_attribute3 => ''
13846 -- ,p_attribute4 => ''
13847 -- ,p_attribute5 => '');
13848 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
13849 -- ,p_msg_name => 'PA_PS_VD_UPD_WBS_PRC_ERR');Bug 3091798.
13850 ,p_msg_name => 'PA_PS_UPDWBS_PRC_ERR_AMG', -- Bug 3091798. Message includes the request id.
13851 p_token1 => 'REQUESTID',
13852 p_value1 => l_request_id);
13853
13854 raise Invalid_Arg_Exc_WP;
13855 END IF;
13856 END IF;
13857
13858 */
13859
13860 PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_MSG(
13861 p_project_id => p_project_id
13862 , p_structure_type => p_structure_type
13863 , p_structure_version_id => null
13864 , p_context => 'UPDATE_AMG'
13865 , x_message_name => l_message_name
13866 , x_message_type => l_message_type
13867 , x_structure_version_id => l_str_ver_id
13868 , x_conc_request_id => l_conc_request_id);
13869
13870
13871 if l_message_name is not null then
13872
13873 PA_UTILS.ADD_MESSAGE(
13874 p_app_short_name => 'PA'
13875 , p_msg_name => l_message_name
13876 , p_token1 => 'REQUESTID'
13877 , p_value1 => l_conc_request_id);
13878
13879 RAISE Invalid_Arg_Exc_WP;
13880 end if;
13881
13882 -- End fix for Bug # 4373055.
13883
13884 END IF ;
13885 -- PA L Changes 3010538
13886
13887 IF (p_structure_version_id IS NOT NULL)
13888 THEN
13889 --IUP:Check whether the structure version passed is in a valid status
13890 l_str_status_code := PA_PROJECT_STRUCTURE_UTILS.get_structrue_version_status(
13891 p_project_id => p_project_id
13892 ,p_structure_version_id => p_structure_version_id );
13893 IF l_str_status_code IS NULL
13894 THEN
13895 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
13896 ,p_msg_name => 'PA_PS_INV_STR_VER_ID' );
13897 raise Invalid_Arg_Exc_WP;
13898 ELSIF l_str_status_code in ( 'STRUCTURE_SUBMITTED', 'STRUCTURE_REJECTED', 'STRUCTURE_APPROVED' )
13899 THEN
13900 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
13901 ,p_msg_name => 'PA_PS_INV_STR_VER_ID2' );
13902 raise Invalid_Arg_Exc_WP;
13903 END IF;
13904
13905 IF l_debug_mode = 'Y' THEN
13906 pa_debug.g_err_stage := 'Structure is in a valid Status' ;
13907 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
13908 END IF;
13909
13910 l_structure_version_id := p_structure_version_id;
13911
13912 -- get the structure id from structure version id
13913 OPEN cur_elem_ver_to_task_id(l_structure_version_id);
13914 FETCH cur_elem_ver_to_task_id INTO l_structure_id;
13915 CLOSE cur_elem_ver_to_task_id;
13916
13917 IF l_debug_mode = 'Y' THEN
13918 pa_debug.g_err_stage:= 'Structure id : '||l_structure_id;
13919 pa_debug.write(l_module_name,pa_debug.g_err_stage,
13920 l_debug_level3);
13921
13922 pa_debug.g_err_stage:= 'Structure version id : '|| l_structure_version_id;
13923 pa_debug.write(l_module_name,pa_debug.g_err_stage,
13924 l_debug_level3);
13925
13926 END IF;
13927
13928 /*
13929 Bug Fix 5263429
13930 Unable to delete the task from MSP.
13931
13932 After succesful deletion of a task and the publishing of the structure, a new task is added to the current
13933 working version. And that the task was deleted and the MSP was returning a message saying 'Mark this task for deletion?'.
13934 Ideally this should be used for tasks which are present in the published versions as well. Only those tasks will be marked
13935 for deletion and during publishing those marked tasks will be deleted. All the other tasks which dont have any transactions
13936 and are not present in the published versions should be deleted right away and the MSP should not show any message.
13937
13938 Analysis:
13939 ---------
13940 This is happening due to value 'M' being returned from the PA_PROJECT_PUB.check_task_mfd APIs OUT param p_check_task_mfd_flag.
13941 This was happening due to the value 'PUBLISHED' was populated in the task_unpub_ver_status_code column.
13942 When ever a task is created in MSP and sent to oracle projects the pa_project_pub.load_project and
13943 pa_project_pub.execute_update_project are called.
13944
13945 The pa_project_pub.execute_update_project -> update_project API ...> PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK is called.
13946
13947 Inside this API the following code is used to derive the value for task_unpub_ver_status_code column.
13948 This is correct. But after this piece of code all the passed in tasks are processed in a loop. In the
13949 loop the same variable l_task_unpub_ver_status_code is used to get the other tasks status. Hence the
13950 earlier derived value for the new task is getting overridden with the other published task status.
13951 Had the tasks processing happned in such a way that (working) the newly added task is processed
13952 first then this is not an issue at all. Due to the published tasks presence the other value is overwritten
13953 and the same got stored for the new task.
13954
13955 Solution:
13956 ---------
13957
13958 Moved the task status derivation code into the loop right before the insert into the element versions table.
13959
13960
13961
13962 --IUP:get the status of newly created task under the passed structure version
13963 IF p_is_wp_separate_from_fn = 'N'
13964 THEN
13965 IF p_is_wp_versioning_enabled = 'Y'
13966 THEN
13967 l_task_unpub_ver_status_code := 'WORKING';
13968 ELSE
13969 l_task_unpub_ver_status_code := 'PUBLISHED';
13970 END IF;
13971 ELSE ---split
13972 IF p_structure_type = 'FINANCIAL'
13973 THEN
13974 l_task_unpub_ver_status_code := 'PUBLISHED';
13975 ELSE --workplan only
13976 IF p_is_wp_versioning_enabled = 'Y'
13977 THEN
13978 l_task_unpub_ver_status_code := 'WORKING';
13979 ELSE
13980 l_task_unpub_ver_status_code := 'PUBLISHED';
13981 END IF;
13982 END IF;
13983 END IF;
13984
13985 */
13986
13987 --IUP:getting the security function allowed into local variables.
13988 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
13989 (p_api_version_number => 1.0,
13990 p_responsibility_id => FND_GLOBAL.Resp_id,
13991 p_function_name => 'PA_PM_ADD_TASK',
13992 p_msg_count => x_msg_count,
13993 p_msg_data => x_msg_data,
13994 p_return_status => x_return_status,
13995 p_function_allowed => l_add_task_security);
13996
13997 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13998 IF l_debug_mode = 'Y' THEN
13999 pa_debug.g_err_stage := 'Error obtaining the value of add task function allowed' ;
14000 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
14001 END IF;
14002 RAISE Invalid_Arg_Exc_WP;
14003 END IF;
14004
14005 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
14006 (p_api_version_number => 1.0,
14007 p_responsibility_id => FND_GLOBAL.Resp_id,
14008 p_function_name => 'PA_PM_UPDATE_TASK',
14009 p_msg_count => x_msg_count,
14010 p_msg_data => x_msg_data,
14011 p_return_status => x_return_status,
14012 p_function_allowed => l_update_task_security);
14013
14014 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14015 IF l_debug_mode = 'Y' THEN
14016 pa_debug.g_err_stage := 'Error obtaining the value of update task function allowed' ;
14017 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
14018 END IF;
14019 RAISE Invalid_Arg_Exc_WP;
14020 END IF;
14021
14022 ELSE -- IF (p_structure_version_id IS NOT NULL) create project case
14023
14024 l_add_task_security := 'Y'; /* this check is already done in create proejct */
14025
14026 -- get structure id and structure version id and
14027 -- If auto publish upon creation is on and versioning is enabled then
14028 -- update the workplan structure as working bcoz it is created as pub by copy structure.
14029
14030 DECLARE
14031 -- We dont require this local var anymore. Bug 2955589.
14032 --l_auto_publish_flag VARCHAR2(1);
14033 --l_source_template_flag VARCHAR2(1);
14034 BEGIN
14035 /* Bug 2955589. As the update is taken care in Copy_Structures_bulk API, the following
14036 cursor need not be opened.
14037
14038 open cur_auto_pub_flag(p_project_id);
14039 fetch cur_auto_pub_flag into l_auto_publish_flag;
14040 close cur_auto_pub_flag;
14041
14042 IF l_debug_mode = 'Y' THEN
14043 pa_debug.g_err_stage:= 'Auto publish flag : '||l_auto_publish_flag;
14044 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14045 l_debug_level3);
14046 END IF;
14047 */
14048
14049 -- This condition included after UT.
14050 IF p_structure_type = 'FINANCIAL' THEN
14051 open get_structure(p_project_id, 'FINANCIAL');
14052 fetch get_structure into l_structure_id;
14053 close get_structure;
14054 ELSE -- structure type is WORKPLAN
14055 open get_structure(p_project_id, 'WORKPLAN');
14056 fetch get_structure into l_structure_id;
14057 close get_structure;
14058 END IF;
14059
14060 IF l_debug_mode = 'Y' THEN
14061 pa_debug.g_err_stage:= 'Structure id : '||l_structure_id;
14062 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14063 l_debug_level3);
14064 END IF;
14065
14066 /* Bug 2955589. The following code is taken care of in Copy_Structures_bulk API.
14067 --ADUT. This cursor will not be opened in the update project context.
14068 open cur_template_flag(p_source_project_id);
14069 fetch cur_template_flag into l_source_template_flag;
14070 close cur_template_flag;
14071
14072 --IF p_structure_type = 'WORKPLAN' and
14073 IF p_wp_str_exists = 'Y' and --ADUT
14074 nvl(l_auto_publish_flag,'N') = 'Y' and
14075 nvl(p_is_wp_versioning_enabled,'N') = 'Y' and
14076 l_source_template_flag = 'Y' --ADUT
14077 THEN
14078
14079 UPDATE pa_proj_elem_ver_structure
14080 set status_code = 'STRUCTURE_WORKING'
14081 where project_id = p_project_id
14082 and proj_element_id = l_structure_id;
14083
14084 IF l_debug_mode = 'Y' THEN
14085 pa_debug.g_err_stage:= 'No of updated records :' || sql%rowcount || ' for structure : ' || l_structure_id;
14086 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14087 l_debug_level3);
14088 END IF;
14089
14090 END IF;
14091
14092 */
14093 -- Obtain the structure version id to proceed with the processing.
14094 PA_PROJ_ELEMENTS_UTILS.GET_STRUCTURE_INFO(
14095 p_project_id => p_project_id
14096 ,p_structure_type => p_structure_type
14097 ,p_structure_id => l_structure_id
14098 ,p_is_wp_separate_from_fn => p_is_wp_separate_from_fn
14099 ,p_is_wp_versioning_enabled => p_is_wp_versioning_enabled
14100 ,x_structure_version_id => l_structure_version_id
14101 ,x_task_unpub_ver_status_code => l_task_unpub_ver_status_code
14102 ,x_return_status => x_return_status
14103 ,x_msg_count => x_msg_count
14104 ,x_msg_data => x_msg_data
14105 );
14106
14107 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14108 IF l_debug_mode = 'Y' THEN
14109 pa_debug.g_err_stage := 'Error obtaining the structure version id' ;
14110 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
14111 END IF;
14112 RAISE Invalid_Arg_Exc_WP;
14113 END IF;
14114
14115 IF l_debug_mode = 'Y' THEN
14116 pa_debug.g_err_stage:= 'Structure version id : '||l_structure_version_id;
14117 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14118 l_debug_level3);
14119 pa_debug.g_err_stage:= 'Task unpublished version status code : '||l_task_unpub_ver_status_code;
14120 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14121 l_debug_level3);
14122 END IF;
14123 END;
14124
14125 END IF; -- End for if p_structure_version_id is null
14126
14127 -- Bug 3075609. Determine if we want to maintain the task weightages during the program
14128 -- flow or they will be recalculated at the end of the flow.
14129 l_task_weight_basis_code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id => p_project_id) ;
14130
14131 -- In the following conditions we will be recalculating the weightages completely. So we need to
14132 -- take care of the rest of the scenarios. Where we need not take care we will just set the task
14133 -- weightage to 0.
14134 IF NOT (
14135 ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' AND
14136 nvl(l_task_weight_basis_code,'-1') <> 'MANUAL'
14137 ) OR
14138 ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
14139 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
14140 PA_PROJECT_PUB.G_Published_version_exists = 'N' AND
14141 nvl(l_task_weight_basis_code,'-1') <> 'MANUAL'
14142 ) OR
14143 (
14144 nvl(l_task_weight_basis_code,'-1') = 'MANUAL' AND
14145 p_structure_version_id is NULL
14146 )
14147 )
14148 THEN
14149 l_maintain_weightages := 'Y';
14150 ELSE
14151 l_maintain_weightages := 'N';
14152 END IF;
14153
14154 -- Initialize l_top_task_cnt to 0. This denotes the number of top tasks processed
14155 -- at any point in this API. This is used to calculate the wbs number of the top task.
14156 -- Intialize l_disp_seq to 0. This is used to determines the display sequence of the currenly
14157 -- processed task.
14158
14159 l_top_task_count := 0;
14160 l_disp_seq := 0;
14161
14162 ----Added for bug 3057575 :
14163 l_hierarchy_count := 1;
14164
14165 -- Get the default task type id. In workplan context, when we create a schedule
14166 -- version we check if the task type allows for non null work quantity. If the task type
14167 -- is passed as null in the input task record, we use the default task type id derived
14168 -- below.
14169 l_default_task_type_id := PA_PROJ_ELEMENTS_UTILS.GET_DEFAULT_TASK_TYPE_ID;
14170
14171 -- Get the segment1 for the project. Used to show context for error messages.
14172 open l_amg_project_csr(p_project_id);
14173 fetch l_amg_project_csr into l_amg_segment1;
14174 close l_amg_project_csr;
14175
14176 IF l_debug_mode = 'Y' THEN
14177 pa_debug.g_err_stage:= 'Entering Loop';
14178 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14179 l_debug_level3);
14180 END IF;
14181 -- Do the processing for all the tasks in the plsql table.
14182
14183 --Added by rtarway for BUG 4320731
14184 task_ver_id_passed_tbl.delete;
14185
14186 IF nvl(p_tasks_in_tbl.last,0) > 0 THEN
14187 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(p_project_id); -- Added for bug#3451073
14188 FOR i in p_tasks_in_tbl.first..p_tasks_in_tbl.last LOOP
14189
14190 -- Reset the locals at the beginning of the loop.
14191 l_parent_task_id := null;
14192 l_task_in_rec := p_tasks_in_tbl(i);
14193
14194 --Bug 6153503
14195 l_attribute1 := null;
14196 l_attribute2 := null;
14197 l_attribute3 := null;
14198 l_attribute4 := null;
14199 l_attribute5 := null;
14200 l_attribute6 := null;
14201 l_attribute7 := null;
14202 l_attribute8 := null;
14203 l_attribute9 := null;
14204 l_attribute10 := null;
14205 l_attribute11 := null;
14206 l_attribute12 := null;
14207 l_attribute13 := null;
14208 l_attribute14 := null;
14209 l_attribute15 := null;
14210
14211 -- Bug 2982072. Derive the task id if task reference only is passed.
14212 -- Currently the api differenciates the task create / update contexts only based
14213 -- on the task_id in the input plsql table which is not correct. The user doesnot pass
14214 -- the task ids even for existing tasks but just passes the task reference. We have to
14215 -- derive the task id from the task reference.
14216 -- Irrespective of the structure type we always query for the proj elements table for
14217 -- the task id given the task reference.
14218 DECLARE
14219 /* Bug 3588013 - Added the exists clause for this bug to get proj_element_id for the correct structure
14220 Task Reference should be unique with in structure.
14221 */
14222 CURSOR cur_wp_task_csr (c_project_id pa_projects_all.project_id%TYPE,
14223 c_pm_source_reference pa_proj_elements.pm_source_reference%TYPE) IS
14224 SELECT proj_element_id
14225 FROM pa_proj_elements pelem
14226 WHERE project_id = c_project_id
14227 AND pm_source_reference = c_pm_source_reference
14228 AND exists(select 1
14229 from pa_proj_structure_types pstype, pa_structure_types types
14230 where pstype.proj_element_id = pelem.parent_structure_id
14231 and pstype.structure_type_id = types.structure_type_id
14232 and types.structure_type = p_structure_type);
14233 BEGIN
14234 IF (l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
14235 l_task_in_rec.pa_task_id IS NULL )
14236 THEN
14237 IF l_task_in_rec.pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
14238 l_task_in_rec.pm_task_reference IS NULL
14239 THEN
14240 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14241 THEN
14242 pa_interface_utils_pub.map_new_amg_msg
14243 ( p_old_message_code => 'PA_TASK_REF_AND_ID_MISSING'
14244 ,p_msg_attribute => 'CHANGE'
14245 ,p_resize_flag => 'N'
14246 ,p_msg_context => 'PROJ'
14247 ,p_attribute1 => l_amg_segment1
14248 ,p_attribute2 => ''
14249 ,p_attribute3 => ''
14250 ,p_attribute4 => ''
14251 ,p_attribute5 => '');
14252 END IF;
14253 px_tasks_out_tbl(i).return_status := FND_API.G_RET_STS_ERROR ;
14254 RAISE Invalid_Arg_Exc_WP;
14255 ELSE
14256 -- We need the differenciator only in the update project context.
14257 -- This is not done in create context to avoid cursor opening for each task.
14258 IF p_structure_version_id is not null THEN
14259 OPEN cur_wp_task_csr(p_project_id,l_task_in_rec.pm_task_reference);
14260 FETCH cur_wp_task_csr INTO l_task_in_rec.pa_task_id;
14261 CLOSE cur_wp_task_csr;
14262 END IF;
14263 END IF;
14264 END IF;
14265 END;
14266 -- End fix for Bug 2982072.
14267
14268 -- Included the following initializations after UT.
14269 -- In the absence of these we will get unique constraint violation.
14270 l_task_version_id := null;
14271 l_relationship_id := null;
14272 l_proj_elem_ver_rvn := null;
14273 l_proj_elem_ver_rowid := null;
14274 l_obj_rel_rvn := null;
14275
14276 -- Initialize the return status for the task record to success.
14277 px_tasks_out_tbl(i).return_status := FND_API.G_RET_STS_SUCCESS;
14278
14279
14280 -- Validation block
14281 -- validate security, task_reference and task names in appropriate contexts.
14282 IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
14283 l_task_in_rec.pa_task_id IS NULL -- new tasks to be crated
14284 THEN
14285 -- Added to check the security as it is not done when called from update_project
14286 IF l_add_task_security = 'N'
14287 THEN
14288 pa_interface_utils_pub.map_new_amg_msg(
14289 p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
14290 ,p_msg_attribute => 'CHANGE'
14291 ,p_resize_flag => 'Y'
14292 ,p_msg_context => 'GENERAL'
14293 ,p_attribute1 => ''
14294 ,p_attribute2 => ''
14295 ,p_attribute3 => ''
14296 ,p_attribute4 => ''
14297 ,p_attribute5 => '');
14298 RAISE Invalid_Arg_Exc_WP;
14299 END IF;
14300 --rtarway, for DHI ER, BUG 4413568
14301 IF (PA_PROJECT_PUB.G_TASK_STR_UPDATE_MODE = 'PA_UPD_TASK_ATTR') THEN --bug 4534919
14302 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
14303 p_msg_name => 'PA_WBS_CANT_CHANGE');
14304 RAISE Invalid_Arg_Exc_WP;
14305 END IF;
14306 -- task reference and task names need to be validated only for workplan cases. For financial cases
14307 -- these validations are done in add_task_round_one/two.
14308 IF p_structure_type = 'WORKPLAN' THEN
14309
14310 -- Task reference should be non null in AMG flow. For financial tasks this
14311 -- is checked in add_task_round_one API.
14312 IF l_task_in_rec.pm_task_reference IS NULL
14313 OR l_task_in_rec.pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14314 THEN
14315 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14316 THEN
14317 pa_interface_utils_pub.map_new_amg_msg
14318 ( p_old_message_code => 'PA_TASK_REF_IS_NULL'
14319 ,p_msg_attribute => 'CHANGE'
14320 ,p_resize_flag => 'N'
14321 ,p_msg_context => 'PROJ'
14322 ,p_attribute1 => l_amg_segment1
14323 ,p_attribute2 => ''
14324 ,p_attribute3 => ''
14325 ,p_attribute4 => ''
14326 ,p_attribute5 => '');
14327 END IF;
14328 px_tasks_out_tbl(i).return_status := FND_API.G_RET_STS_ERROR;
14329 RAISE Invalid_Arg_Exc_WP;
14330 END IF;
14331
14332 --ADUT. The task name cannot be null. For financial tasks this is
14333 --checked in add_task_round_one API.
14334 IF l_task_in_rec.task_name IS NULL
14335 OR l_task_in_rec.task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14336 THEN
14337
14338 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14339 THEN
14340 pa_interface_utils_pub.map_new_amg_msg
14341 ( p_old_message_code => 'PA_TASK_NAME_IS_NULL'
14342 ,p_msg_attribute => 'CHANGE'
14343 ,p_resize_flag => 'N'
14344 ,p_msg_context => 'TASK'
14345 ,p_attribute1 => l_amg_segment1
14346 ,p_attribute2 => l_task_in_rec.pm_task_reference
14347 ,p_attribute3 => ''
14348 ,p_attribute4 => ''
14349 ,p_attribute5 => '');
14350 END IF;
14351
14352 px_tasks_out_tbl(i).return_status := FND_API.G_RET_STS_ERROR;
14353 RAISE Invalid_Arg_Exc_WP;
14354 END IF;
14355 END IF; -- IF p_structure_type = 'WORKPLAN' THEN
14356
14357 -- for update case only security check is required.
14358 ELSE -- IF l_task_in_rec.pa_task_id IS NULL
14359
14360 IF l_update_task_security = 'N'
14361 THEN
14362 pa_interface_utils_pub.map_new_amg_msg(
14363 p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
14364 ,p_msg_attribute => 'CHANGE'
14365 ,p_resize_flag => 'Y'
14366 ,p_msg_context => 'GENERAL'
14367 ,p_attribute1 => ''
14368 ,p_attribute2 => ''
14369 ,p_attribute3 => ''
14370 ,p_attribute4 => ''
14371 ,p_attribute5 => '');
14372 RAISE Invalid_Arg_Exc_WP;
14373 END IF;
14374
14375 END IF; -- IF l_task_in_rec.pa_task_id IS NULL
14376
14377 IF l_debug_mode = 'Y' THEN
14378 pa_debug.g_err_stage:= 'Done with the validations';
14379 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14380 l_debug_level3);
14381 END IF;
14382
14383 -- This block does following:
14384 -- 1. Populate l_cur_pa_tasks_rec which has task_number, long_task_name, description, parent_task_id
14385 -- carrying_out_organization_id, pm_task_reference, address_id, task_manager_person_id
14386 -- 2. l_parent_task_id
14387 -- 3. l_task_id -- the task that is being processed.
14388 -- l_proj_elem_rvn of record of pa_proj_elements to be updated
14389 -- before calling api PA_TASK_PUB1.update_task
14390
14391 IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
14392 l_task_in_rec.pa_task_id IS NULL -- new tasks to be crated
14393 THEN
14394
14395 -- If the structure type is workplan we need to derive the values for certain fields. For financial
14396 -- context they have already been done and is available in the database - So we'll just query it up.
14397 IF p_structure_type = 'WORKPLAN' THEN
14398
14399 -- Derive the task number for the current task
14400 IF l_task_in_rec.pa_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.pa_task_number IS NULL
14401 THEN
14402 l_cur_pa_tasks_rec.task_number := l_task_in_rec.pm_task_reference;
14403 -- ELSE Bug 6193314 need to comment out
14404 /* bug#5243018 : Reverting the fix in Bug 4120380
14405 l_cur_pa_tasks_rec.task_number := '-'||l_task_in_rec.pa_task_number; -- Bug 4120380 aditi l_task_in_rec.pa_task_number; */
14406 -- l_cur_pa_tasks_rec.task_number := l_task_in_rec.pa_task_number; -- Bug 6193314 need to comment out
14407 /* any new task being created will also be prefixed with '-'. This is for the case below:
14408 1.0
14409 1.1
14410 2.0 .
14411 If we insert a new top task , specifying its task_number as 1.1, and update 1.1 to 2.0 and 2.0 to 3.0.*/
14412 END IF;
14413
14414 -- Derive the parent task id
14415 IF (l_task_in_rec.pa_parent_task_id IS NOT NULL
14416 AND l_task_in_rec.pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14417 THEN
14418 l_cur_pa_tasks_rec.parent_task_id := l_task_in_rec.pa_parent_task_id;
14419 ELSIF (l_task_in_rec.pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14420 AND l_task_in_rec.pm_parent_task_reference IS NOT NULL)
14421 THEN
14422 --convert pm_parent_task_reference to parent_task_id.
14423 --All the parent tasks are created first then child tasks are created. See TRM for AMG load_task api.
14424
14425 -- 3721124 changed function call from PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref
14426 -- to PA_PROJECT_PVT.Convert_pm_taskref_to_id_all to retrieve task id for task reference
14427 -- because PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref may return financial task id
14428 -- in case of SHARED structure
14429 -- new api call takes structure type as parameter, so it will return task id for the passed structure type only
14430
14431 -- PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref(
14432 -- p_pm_parent_task_reference => l_task_in_rec.pm_parent_task_reference
14433 -- ,p_project_id => p_project_id
14434 -- ,x_parent_task_id => l_cur_pa_tasks_rec.parent_task_id
14435 -- ,x_return_status => x_return_status
14436 -- );
14437
14438 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
14439 p_pa_project_id => p_project_id
14440 , p_structure_type => 'WORKPLAN'
14441 -- 3721124 p_pa_task_id will be null in this context
14442 -- , p_pa_task_id => l_cur_pa_tasks_rec.parent_task_id
14443 , p_pm_task_reference => l_task_in_rec.pm_parent_task_reference
14444 , p_out_task_id => l_cur_pa_tasks_rec.parent_task_id
14445 , p_return_status => x_return_status );
14446
14447 px_tasks_out_tbl(i).return_status := x_return_status;
14448 IF x_return_status <> FND_API.G_RET_STS_SUCCESS
14449 THEN
14450 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14451 THEN
14452 pa_interface_utils_pub.map_new_amg_msg
14453 ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
14454 ,p_msg_attribute => 'CHANGE'
14455 ,p_resize_flag => 'N'
14456 ,p_msg_context => 'TASK'
14457 ,p_attribute1 => l_amg_segment1
14458 ,p_attribute2 => l_cur_pa_tasks_rec.task_number
14459 ,p_attribute3 => ''
14460 ,p_attribute4 => ''
14461 ,p_attribute5 => '');
14462 END IF;
14463 RAISE Invalid_Arg_Exc_WP;
14464 END IF;
14465 ELSE -- no parent task information provided for the current task.
14466 -- Current task is a top task. parent id is null.
14467 l_cur_pa_tasks_rec.parent_task_id := null;
14468 END IF;
14469
14470 -- Included the condition during UT to avoid precision errors.
14471 IF l_task_in_rec.carrying_out_organization_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14472 l_cur_pa_tasks_rec.carrying_out_organization_id := NULL;
14473 ELSE
14474 l_cur_pa_tasks_rec.carrying_out_organization_id := l_task_in_rec.carrying_out_organization_id;
14475 END IF;
14476
14477 -- Included the condition during UT to avoid precision errors.
14478 IF l_task_in_rec.address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14479 l_cur_pa_tasks_rec.address_id := NULL;
14480 ELSE
14481 l_cur_pa_tasks_rec.address_id := l_task_in_rec.address_id;
14482 END IF;
14483 -- Included the condition during UT to avoid precision errors.
14484 IF l_task_in_rec.task_manager_person_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14485 l_cur_pa_tasks_rec.task_manager_person_id := NULL;
14486 ELSE
14487 l_cur_pa_tasks_rec.task_manager_person_id := l_task_in_rec.task_manager_person_id;
14488 END IF;
14489 l_task_id := NULL; -- null for workplan create task case.
14490 l_cur_pa_tasks_rec.pm_task_reference := l_task_in_rec.pm_task_reference;
14491 /*Commented for bug 2982057 l_cur_pa_tasks_rec.long_task_name := l_task_in_rec.long_task_name;*/
14492 /* Code addition for bug 2982057 starts */
14493
14494 if l_task_in_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.long_task_name IS NULL then
14495 l_cur_pa_tasks_rec.long_task_name := l_task_in_rec.task_name;
14496 else
14497 l_cur_pa_tasks_rec.long_task_name := l_task_in_rec.long_task_name;
14498 end if;
14499
14500 /* Code addition for bug 2982057 ends */
14501
14502 l_cur_pa_tasks_rec.description := l_task_in_rec.task_description;
14503
14504 ELSE -- structure type is financial
14505 IF l_debug_mode = 'Y' THEN
14506 pa_debug.g_err_stage:= 'Task Id in out table: '||px_tasks_out_tbl(i).pa_task_id;
14507 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14508 l_debug_level3);
14509 END IF;
14510
14511 l_task_id := px_tasks_out_tbl(i).pa_task_id;
14512 open cur_pa_tasks(p_project_id,l_task_id);
14513 fetch cur_pa_tasks into l_cur_pa_tasks_rec;
14514 close cur_pa_tasks;
14515
14516 IF l_debug_mode = 'Y' THEN
14517 pa_debug.g_err_stage:= 'Task Id in local var '|| l_task_id;
14518 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14519 l_debug_level3);
14520 END IF;
14521 /** Code changes for bug 4120380. For new tasks similar case mentioned above for workplan.**/
14522 /* bug#5243018 : Reverting the fix in Bug 4120380
14523 IF l_task_in_rec.pa_task_number IS NOT NULL AND
14524 l_task_in_rec.pa_task_number <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14525 THEN
14526 l_cur_pa_tasks_rec.task_number := '-'||l_task_in_rec.pa_task_number;
14527 END IF; */
14528 /** Code end for bug 4120380 by aditi **/
14529 END IF;
14530
14531 l_parent_task_id := l_cur_pa_tasks_rec.parent_task_id;
14532
14533 IF l_debug_mode = 'Y' THEN
14534 pa_debug.g_err_stage:= 'Parent Task Id : '||l_parent_task_id;
14535 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14536 l_debug_level3);
14537 pa_debug.g_err_stage:= 'Task Number : '||l_cur_pa_tasks_rec.task_number;
14538 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14539 l_debug_level3);
14540 END IF;
14541
14542 l_WBS_changed_flag := 'Y'; --bug 3010538
14543
14544 ELSE -- IF l_task_in_rec.pa_task_id IS NULL
14545
14546 -- If the structure type is workplan we need to derive the values for parent task id . For financial
14547 -- context they have already been done and is available in the database - So we'll just query it up.
14548 IF p_structure_type = 'WORKPLAN' THEN
14549
14550 -- Derive the parent task id
14551 IF (l_task_in_rec.pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14552 AND l_task_in_rec.pa_parent_task_id IS NOT NULL)
14553 THEN
14554 l_cur_pa_tasks_rec.parent_task_id := l_task_in_rec.pa_parent_task_id;
14555
14556 ELSIF (l_task_in_rec.pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14557 AND l_task_in_rec.pm_parent_task_reference IS NOT NULL)
14558 THEN
14559 --convert pm_parent_task_reference to parent_task_id.
14560 --All the parent tasks are created first then child tasks are created. See TRM for AMG load_task api.
14561
14562 -- 3721124 changed function call from PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref
14563 -- to PA_PROJECT_PVT.Convert_pm_taskref_to_id_all to retrieve task id for task reference
14564 -- because PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref may return financial task id
14565 -- in case of SHARED structure
14566 -- new api call takes structure type as parameter, so it will return task id for the passed structure type only
14567
14568 --PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref(
14569 -- p_pm_parent_task_reference => l_task_in_rec.pm_parent_task_reference
14570 -- ,p_project_id => p_project_id
14571 -- ,x_parent_task_id => l_cur_pa_tasks_rec.parent_task_id
14572 -- ,x_return_status => x_return_status
14573 -- );
14574
14575
14576 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
14577 p_pa_project_id => p_project_id
14578 , p_structure_type => 'WORKPLAN'
14579 -- 3721124 p_pa_task_id will be null in this context
14580 -- , p_pa_task_id => l_cur_pa_tasks_rec.parent_task_id
14581 , p_pm_task_reference => l_task_in_rec.pm_parent_task_reference
14582 , p_out_task_id => l_cur_pa_tasks_rec.parent_task_id
14583 , p_return_status => x_return_status );
14584
14585 px_tasks_out_tbl(i).return_status := x_return_status;
14586 IF x_return_status <> FND_API.G_RET_STS_SUCCESS
14587 THEN
14588 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14589 THEN
14590 pa_interface_utils_pub.map_new_amg_msg
14591 ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
14592 ,p_msg_attribute => 'CHANGE'
14593 ,p_resize_flag => 'N'
14594 ,p_msg_context => 'TASK'
14595 ,p_attribute1 => l_amg_segment1
14596 ,p_attribute2 => l_cur_pa_tasks_rec.task_number
14597 ,p_attribute3 => ''
14598 ,p_attribute4 => ''
14599 ,p_attribute5 => '');
14600 END IF;
14601 Raise Invalid_Arg_Exc_WP;
14602 END IF;
14603 ELSIF (l_task_in_rec.pm_parent_task_reference IS NULL)
14604 THEN --Also the values in l_task_in_rec.parent_task_id is null or miss_num so move it as top task
14605 l_cur_pa_tasks_rec.parent_task_id := null;
14606
14607 ELSE -- when l_task_in_rec.pm_parent_task_reference is miss_char
14608 -- no parent task information provided for the current task.
14609 -- get parent information from database
14610 DECLARE
14611
14612 l_task_ver_id_tmp pa_proj_element_versions.element_version_id%TYPE;
14613 l_dummy_number NUMBER;
14614 l_db_parent_task_ver_id_tmp pa_proj_element_versions.element_version_id%TYPE;
14615 l_relationship_id_tmp pa_object_relationships.object_relationship_id%TYPE;
14616
14617 BEGIN
14618
14619 OPEN cur_pa_task_ver( l_structure_version_id, l_task_in_rec.pa_task_id );
14620 FETCH cur_pa_task_ver INTO l_task_ver_id_tmp, l_dummy_number;
14621 CLOSE cur_pa_task_ver;
14622
14623 --Get the database parent task version id
14624 OPEN cur_parent_object_rel( l_task_ver_id_tmp );
14625 FETCH cur_parent_object_rel INTO l_db_parent_task_ver_id_tmp,l_relationship_id_tmp,l_dummy_number,
14626 l_dummy_number; -- Bug 3075609. Reflected the change in cursor.
14627 CLOSE cur_parent_object_rel;
14628
14629 --Get the parent task id from parent task version id
14630 OPEN cur_elem_ver_to_task_id(l_db_parent_task_ver_id_tmp ) ;
14631 FETCH cur_elem_ver_to_task_id INTO l_cur_pa_tasks_rec.parent_task_id;
14632 CLOSE cur_elem_ver_to_task_id;
14633 END;
14634
14635 END IF;
14636 DECLARE
14637 -- Bug 2982072. The following cursor is used to obtain the task name
14638 -- and number for a given task element from the database. These will be used
14639 -- if the user has not passed any value for these parameters.
14640 CURSOR cur_proj_elem_info(c_task_id pa_proj_elements.proj_element_id%TYPE)
14641 IS
14642 SELECT element_number, name
14643 FROM pa_proj_elements
14644 WHERE proj_element_id = c_task_id;
14645
14646 l_proj_elem_info cur_proj_elem_info%ROWTYPE;
14647 BEGIN
14648 -- Bug 2982072. Open the cursor only if any of task number or name needs to
14649 -- be fetched for the task.
14650 IF (l_task_in_rec.pa_task_number is null OR
14651 l_task_in_rec.pa_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
14652 (l_task_in_rec.long_task_name is null OR
14653 l_task_in_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14654 THEN
14655 OPEN cur_proj_elem_info(l_task_in_rec.pa_task_id);
14656 FETCH cur_proj_elem_info into l_proj_elem_info;
14657 CLOSE cur_proj_elem_info;
14658
14659 END IF;
14660
14661 -- Bug 2982072. If task number and task name are passed as null then
14662 -- obtain the values from the database and use them in update_task api.
14663 IF l_task_in_rec.pa_task_number is null OR
14664 l_task_in_rec.pa_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14665 THEN
14666 -- l_task_in_rec.pa_task_number := SUBSTRB(l_proj_elem_info.element_number,1,25); -- Substrb added for Bug 5152448
14667 l_task_in_rec.pa_task_number := l_proj_elem_info.element_number; -- Substrb removed for Bug 6193314
14668 /** added for Bug 4120380 **/
14669 /* bug#5243018 : Reverting the fix in Bug 4120380
14670 ELSE
14671 OPEN cur_proj_elem_info(l_task_in_rec.pa_task_id);
14672 FETCH cur_proj_elem_info into l_proj_elem_info;
14673 CLOSE cur_proj_elem_info;
14674 --dbms_output.put_line(('Value of l_proj_elem_info.element_number'||l_proj_elem_info.element_number);
14675 If l_task_in_rec.pa_task_number <> SUBSTRB(l_proj_elem_info.element_number,1,25) THEN -- Substrb added for Bug 5152448
14676 l_task_in_rec.pa_task_number := '-'||l_task_in_rec.pa_task_number;
14677 End if; */
14678 /** end of changes for Bug 4120380 **/
14679 END IF;
14680
14681 IF l_task_in_rec.long_task_name is null OR
14682 l_task_in_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14683 THEN
14684 /* Start of changes for bug 4503580 */
14685 -- l_task_in_rec.long_task_name := NVL(l_task_in_rec.task_name, l_proj_elem_info.name); --bug 3969651
14686 IF l_task_in_rec.task_name is null OR
14687 l_task_in_rec.task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14688 THEN
14689 l_task_in_rec.long_task_name := l_proj_elem_info.name;
14690 ELSE
14691 l_task_in_rec.long_task_name := l_task_in_rec.task_name;
14692 END IF;
14693 /* End of changes for bug 4503580 */
14694 /* Redundant but added for clarity -Added the else condition for bug 2982057*/
14695 ELSE
14696 l_task_in_rec.long_task_name := l_task_in_rec.long_task_name;
14697 END IF;
14698 END;
14699
14700 ELSE--financial
14701 open cur_pa_tasks(p_project_id,l_task_in_rec.pa_task_id);
14702 fetch cur_pa_tasks into l_cur_pa_tasks_rec;
14703 close cur_pa_tasks;
14704
14705 -- Bug 2982072. If task number and task name are passed as null then
14706 -- obtain the values from the database and use them in update_task api.
14707 IF l_task_in_rec.pa_task_number is null OR
14708 l_task_in_rec.pa_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14709 THEN
14710 l_task_in_rec.pa_task_number := l_cur_pa_tasks_rec.task_number;
14711 /* Code added for bug 4120380 **/
14712 /* bug#5243018 : Reverting the fix in Bug 4120380
14713 ELSE
14714 OPEN cur_proj_elements_info(l_task_in_rec.pa_task_id);
14715 FETCH cur_proj_elements_info into l_proj_elements_info;
14716 CLOSE cur_proj_elements_info;
14717 If l_task_in_rec.pa_task_number <> SUBSTRB(l_proj_elements_info.element_number,1,25) THEN -- Substrb added for Bug 5152448
14718 l_task_in_rec.pa_task_number := '-'||l_task_in_rec.pa_task_number;
14719 End if; */
14720 /* Code end for bug 4120380 **/
14721 END IF;
14722
14723 IF l_task_in_rec.long_task_name is null OR
14724 l_task_in_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14725 THEN
14726 l_task_in_rec.long_task_name := l_cur_pa_tasks_rec.long_task_name;
14727 /* Redundant but added for clarity -Added the else condition for bug 2982057*/
14728 ELSE
14729 l_task_in_rec.long_task_name := l_task_in_rec.long_task_name;
14730 END IF;
14731
14732 END IF;
14733 l_parent_task_id := l_cur_pa_tasks_rec.parent_task_id;
14734 l_task_id := l_task_in_rec.pa_task_id;
14735
14736 END IF; -- before calling create or update TASK
14737
14738
14739 -- In the following block the create task or update_task APIs are called.
14740 -- After call to these APIs populate following
14741 -- px_tasks_out_tbl(i).pa_task_id
14742 -- px_tasks_out_tbl(i).pm_task_reference
14743 -- for workplan create task case l_task_id is output from create task API
14744 IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
14745 l_task_in_rec.pa_task_id IS NULL -- Create Task Context
14746 THEN
14747 IF p_create_task_version_only = 'N' THEN
14748
14749 IF l_debug_mode = 'Y' THEN
14750 pa_debug.g_err_stage := 'Calling API PA_TASK_PUB1.create_task';
14751 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
14752 END IF;
14753
14754 PA_TASK_PUB1.create_task(
14755 p_api_version => p_api_version_number
14756 ,p_commit => p_commit
14757 ,p_validate_only => FND_API.G_FALSE
14758 ,p_calling_module => p_calling_module
14759 ,p_debug_mode => l_debug_mode
14760 ,p_init_msg_list => FND_API.G_FALSE
14761 ,p_object_type => 'PA_TASKS'
14762 ,p_project_id => p_project_id
14763 ,p_structure_id => l_structure_id
14764 ,p_task_number => l_task_in_rec.pa_task_number -- l_cur_pa_tasks_rec.task_number bug 6193314
14765 ,p_task_name => l_cur_pa_tasks_rec.long_task_name
14766 ,p_task_description => l_cur_pa_tasks_rec.description
14767 ,p_location_id => l_cur_pa_tasks_rec.address_id
14768 ,p_task_manager_id => l_cur_pa_tasks_rec.task_manager_person_id
14769 ,p_carrying_out_org_id => l_cur_pa_tasks_rec.carrying_out_organization_id
14770 ,p_priority_code => l_task_in_rec.priority_code
14771 ,p_TYPE_ID => l_task_in_rec.task_type
14772 ,p_status_code => l_task_in_rec.status_code
14773 ,p_inc_proj_progress_flag=> l_task_in_rec.inc_proj_progress_flag
14774 ,p_pm_product_code => p_pm_product_code
14775 ,p_pm_task_reference => l_cur_pa_tasks_rec.pm_task_reference
14776 ,p_closed_date => l_task_in_rec.closed_date
14777 ,p_link_task_flag => l_task_in_rec.link_task_flag
14778 ,P_UOM_CODE => l_task_in_rec.wq_uom_code
14779 ,p_work_item_code => l_task_in_rec.wq_item_code
14780 ,p_parent_structure_id => l_structure_id
14781 ---- Begin Bug 3654243 ---------------------------------------------------------------------
14782 ,p_Base_Perc_Comp_Deriv_Code => l_task_in_rec.base_percent_comp_deriv_code
14783 ---- End Bug 3654243 -----------------------------------------------------------------------
14784 ,x_task_id => l_task_id -- *** OUT *** --
14785 ,x_return_status => x_return_status
14786 ,x_msg_count => x_msg_count
14787 ,x_msg_data => x_msg_data
14788 );
14789
14790 -- Added for bug 3057575 :TO show task number while throwing err
14791 l_err_task_number := l_cur_pa_tasks_rec.task_number;
14792
14793 px_tasks_out_tbl(i).return_status := x_return_status;
14794
14795 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14796 IF l_debug_mode = 'Y' THEN
14797 pa_debug.g_err_stage := 'Error calling create task : ' || l_task_id ;
14798 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
14799 END IF;
14800 Raise Invalid_Arg_Exc_WP;
14801 END IF;
14802
14803
14804 IF l_debug_mode = 'Y' THEN
14805 pa_debug.g_err_stage := 'task id : ' || l_task_id ;
14806 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
14807 END IF;
14808
14809 END IF; -- p_create_task_version_only = 'N'
14810
14811 ELSE
14812 DECLARE
14813 l_proj_elem_rvn NUMBER;
14814 BEGIN
14815
14816 OPEN cur_rec_ver_num(l_task_in_rec.pa_task_id);
14817 FETCH cur_rec_ver_num INTO l_proj_elem_rvn;
14818 CLOSE cur_rec_ver_num;
14819
14820 -- Bug 6717386
14821 If l_struct_ver_id is null then
14822 OPEN cur_struc_ver_wp(p_project_id,'WORKPLAN');
14823 FETCH cur_struc_ver_wp INTO l_struct_ver_id;
14824 CLOSE cur_struc_ver_wp;
14825 end if;
14826
14827 if p_structure_version_id = l_struct_ver_id then
14828 l_status_code := null;
14829 else
14830 l_status_code := l_task_in_rec.STATUS_CODE;
14831 end if;
14832 -- Bug 6717386
14833
14834 PA_TASK_PUB1.Update_Task(
14835 p_calling_module => 'AMG'
14836 ,p_init_msg_list => FND_API.G_FALSE
14837 ,p_task_id => l_task_in_rec.pa_task_id
14838 ,p_task_number => l_task_in_rec.pa_task_number
14839 ,p_task_name => l_task_in_rec.long_task_name
14840 ,p_task_description => l_task_in_rec.task_description
14841 ,p_task_manager_id => l_task_in_rec.task_manager_person_id
14842 ,p_carrying_out_org_id => l_task_in_rec.carrying_out_organization_id
14843 ,p_pm_product_code => l_task_in_rec.PM_SOURCE_CODE
14844 ,p_pm_task_reference => l_task_in_rec.pm_task_reference
14845 ,p_location_id => l_task_in_rec.address_id
14846 ,p_priority_code => l_task_in_rec.PRIORITY_CODE
14847 ,p_TYPE_ID => l_task_in_rec.TASK_TYPE
14848 ,p_status_code => l_status_code -- l_task_in_rec.STATUS_CODE bug 6717386
14849 ,p_inc_proj_progress_flag => l_task_in_rec.INC_PROJ_PROGRESS_FLAG
14850 ,p_closed_date => l_task_in_rec.CLOSED_DATE
14851 ,p_record_version_number => l_proj_elem_rvn
14852 ,P_UOM_CODE => l_task_in_rec.WQ_UOM_CODE
14853 ,p_work_item_code => l_task_in_rec.WQ_ITEM_CODE
14854 ----- begin Bug 3654243 --------------------------------------------
14855 ,p_Base_Perc_Comp_Deriv_Code => l_task_in_rec.base_percent_comp_deriv_code
14856 ,p_gen_etc_src_code => l_task_in_rec.gen_etc_source_code
14857 ----- end Bug 3654243 ----------------------------------------------
14858 ,x_return_status => x_return_status
14859 ,x_msg_count => x_msg_count
14860 ,x_msg_data => x_msg_data
14861 ,p_shared => l_shared -- Added for Bug#3451073
14862 );
14863
14864 -- Added for bug 3057575 :TO show task number while throwing err
14865 l_err_task_number := l_task_in_rec.pa_task_number;
14866
14867 px_tasks_out_tbl(i).return_status := x_return_status;
14868
14869 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14870 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
14871 ,p_msg_name => 'PA_PS_TASK_NOT_UPDATED'
14872 /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
14873 ,p_token1 => 'PROJECT'
14874 ,p_value1 => p_project_id
14875 ,p_token2 => 'TASK'
14876 ,p_value2 => l_task_in_rec.pa_task_id);
14877 IF l_debug_mode = 'Y'
14878 THEN
14879 pa_debug.g_err_stage := 'Error in task updation : ' || p_tasks_in_tbl(i).pa_task_id ;
14880 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
14881 END IF;
14882 Raise Invalid_Arg_Exc_WP;
14883
14884 END IF;
14885
14886 END;
14887 --rtarway, added for BUG 4106154
14888 IF ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
14889 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
14890 PA_PROJECT_PUB.G_Published_version_exists = 'Y' AND
14891 --Added by rtarway for BUG 4321313
14892 PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_task_in_rec.pa_task_id)='Y'
14893 )
14894 THEN
14895 --Call Update_One_Task to update financial attributes
14896 PA_PROJECT_PVT.Update_One_Task
14897 (
14898 p_api_version_number => p_api_version_number,
14899 p_commit => FND_API.G_FALSE,
14900 p_msg_count => x_msg_count,
14901 p_msg_data => x_msg_data,
14902 p_return_status => x_return_status,
14903 p_pm_product_code => p_pm_product_code,
14904 p_pa_project_id => p_project_id,
14905 p_pa_task_id => l_task_in_rec.pa_task_id,
14906 p_pm_task_reference => l_task_in_rec.pm_task_reference,
14907 p_task_number => l_task_in_rec.pa_task_number,
14908 p_task_name => l_task_in_rec.task_name,
14909 p_long_task_name => l_task_in_rec.long_task_name,
14910 p_task_description => l_task_in_rec.task_description,
14911 p_task_start_date => l_task_in_rec.task_start_date,
14912 p_task_completion_date => l_task_in_rec.task_completion_date,
14913 p_early_start_date => l_task_in_rec.early_start_date,
14914 p_early_finish_date => l_task_in_rec.early_finish_date,
14915 p_late_start_date => l_task_in_rec.late_start_date,
14916 p_late_finish_date => l_task_in_rec.late_finish_date,
14917 p_pm_parent_task_reference => l_task_in_rec.pm_parent_task_reference,
14918 p_pa_parent_task_id => l_task_in_rec.pa_parent_task_id,
14919 p_address_id => l_task_in_rec.address_id,
14920 p_carrying_out_organization_id => l_task_in_rec.carrying_out_organization_id,
14921 p_service_type_code => l_task_in_rec.service_type_code,
14922 p_task_manager_person_id => l_task_in_rec.task_manager_person_id,
14923 p_billable_flag => l_task_in_rec.billable_flag,
14924 p_chargeable_flag => l_task_in_rec.chargeable_flag,
14925 p_ready_to_bill_flag => l_task_in_rec.ready_to_bill_flag,
14926 p_ready_to_distribute_flag => l_task_in_rec.ready_to_distribute_flag,
14927 p_limit_to_txn_controls_flag => l_task_in_rec.limit_to_txn_controls_flag,
14928 p_labor_bill_rate_org_id => l_task_in_rec.labor_bill_rate_org_id,
14929 p_labor_std_bill_rate_schdl => l_task_in_rec.labor_std_bill_rate_schdl,
14930 p_labor_schedule_fixed_date => l_task_in_rec.labor_schedule_fixed_date,
14931 p_labor_schedule_discount => l_task_in_rec.labor_schedule_discount,
14932 p_nl_bill_rate_org_id => l_task_in_rec.non_labor_bill_rate_org_id,
14933 p_nl_std_bill_rate_schdl => l_task_in_rec.non_labor_std_bill_rate_schdl,
14934 p_nl_schedule_fixed_date => l_task_in_rec.non_labor_schedule_fixed_date,
14935 p_nl_schedule_discount => l_task_in_rec.non_labor_schedule_discount,
14936 p_labor_cost_multiplier_name => l_task_in_rec.labor_cost_multiplier_name,
14937 p_cost_ind_rate_sch_id => l_task_in_rec.cost_ind_rate_sch_id,
14938 p_rev_ind_rate_sch_id => l_task_in_rec.rev_ind_rate_sch_id,
14939 p_inv_ind_rate_sch_id => l_task_in_rec.inv_ind_rate_sch_id,
14940 p_cost_ind_sch_fixed_date => l_task_in_rec.cost_ind_sch_fixed_date,
14941 p_rev_ind_sch_fixed_date => l_task_in_rec.rev_ind_sch_fixed_date,
14942 p_inv_ind_sch_fixed_date => l_task_in_rec.inv_ind_sch_fixed_date,
14943 p_labor_sch_type => l_task_in_rec.labor_sch_type,
14944 p_nl_sch_type => l_task_in_rec.non_labor_sch_type,
14945 p_allow_cross_charge_flag => l_task_in_rec.allow_cross_charge_flag,
14946 p_project_rate_type => l_task_in_rec.project_rate_type,
14947 p_project_rate_date => l_task_in_rec.project_rate_date,
14948 p_cc_process_labor_flag => l_task_in_rec.cc_process_labor_flag,
14949 p_labor_tp_schedule_id => l_task_in_rec.labor_tp_schedule_id,
14950 p_labor_tp_fixed_date => l_task_in_rec.labor_tp_fixed_date,
14951 p_cc_process_nl_flag => l_task_in_rec.cc_process_nl_flag,
14952 p_nl_tp_schedule_id => l_task_in_rec.nl_tp_schedule_id,
14953 p_nl_tp_fixed_date => l_task_in_rec.nl_tp_fixed_date,
14954 p_receive_project_invoice_flag => l_task_in_rec.receive_project_invoice_flag,
14955 p_work_type_id => l_task_in_rec.work_type_id,
14956 p_emp_bill_rate_schedule_id => l_task_in_rec.emp_bill_rate_schedule_id,
14957 p_job_bill_rate_schedule_id => l_task_in_rec.job_bill_rate_schedule_id,
14958 p_non_lab_std_bill_rt_sch_id => l_task_in_rec.non_lab_std_bill_rt_sch_id,
14959 p_taskfunc_cost_rate_type => l_task_in_rec.taskfunc_cost_rate_type,
14960 p_taskfunc_cost_rate_date => l_task_in_rec.taskfunc_cost_rate_date,
14961 p_labor_disc_reason_code => l_task_in_rec.labor_disc_reason_code,
14962 p_non_labor_disc_reason_code => l_task_in_rec.non_labor_disc_reason_code,
14963 p_retirement_cost_flag => l_task_in_rec.retirement_cost_flag,
14964 p_cint_eligible_flag => l_task_in_rec.cint_eligible_flag,
14965 p_cint_stop_date => l_task_in_rec.cint_stop_date,
14966 p_gen_etc_source_code => l_task_in_rec.gen_etc_source_code,
14967 p_invoice_method => l_task_in_rec.invoice_method,
14968 p_customer_id => l_task_in_rec.customer_id,
14969 p_out_pa_task_id => l_fin_task_id,
14970 p_out_pm_task_reference => l_fin_task_reference
14971 );
14972 px_tasks_out_tbl(i).return_status := x_return_status;
14973
14974 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14975 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
14976 ,p_msg_name => 'PA_PS_TASK_NOT_UPDATED'
14977 /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
14978 ,p_token1 => 'PROJECT'
14979 ,p_value1 => p_project_id
14980 ,p_token2 => 'TASK'
14981 ,p_value2 => l_task_in_rec.pa_task_id);
14982 IF l_debug_mode = 'Y'
14983 THEN
14984 pa_debug.g_err_stage := 'Error in financial task updation : ' || p_tasks_in_tbl(i).pa_task_id ;
14985 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
14986 END IF;
14987 Raise Invalid_Arg_Exc_WP;
14988
14989 END IF;
14990
14991 END IF;
14992
14993 --end add for BUG 4106154
14994
14995 END IF; -- After calling create or update TASK
14996 px_tasks_out_tbl(i).pa_task_id := l_task_id;
14997 px_tasks_out_tbl(i).pm_task_reference := l_task_in_rec.pm_task_reference;
14998
14999
15000 -- Updation of the task is done. Now start processing for updating the task version.
15001 -- Task version requires wbs_level, disp sequence, wbs number, flexfield related information etc to be populated.
15002 -- In the coming code we will populate these variables and will update/insert proj element versions.
15003
15004 -- Start processing for display sequence, wbs level and wbs number.
15005 -- Following is the way tables store data
15006 -- 1. l_disp_seq -- the current index for which processing is going on.
15007 -- 2. l_display_sequence_tbl(l_task_id) -- display sequence indexed by task ids.
15008 -- 3. l_wbs_level_tbl(l_task_id) -- wbs level indexed by task id.
15009 -- 4. l_top_task_count -- top tasks processed until current loop.
15010 -- 5. l_wbs_number_tbl(l_task_id) -- wbs number indexed by task id.
15011 -- 6. l_weighting_percentage_tbl(l_task_id) -- weightage indexed by task id.
15012 -- 7. l_child_count_tbl(l_task_id) -- child count indexed by task id.
15013
15014 -- The wbs level is wbs level of parent + 1 for non top tasks else it is 1.
15015 -- The wbs number is top_task_cnt when top task else it is wbs_number || '.'
15016 -- || parent task child count + 1
15017 l_disp_seq := l_disp_seq + 1;
15018 l_display_sequence_tbl(l_task_id) := l_disp_seq;
15019
15020 --Start for Changes for bug 3057575 : Checking whether correct structure has been passed OR NOT
15021 -- As the l_parent_task_id may get populated with l_structure_id for top tasks
15022 -- but as the below code requires it be null
15023 IF l_parent_task_id = l_structure_id THEN
15024 IF l_debug_mode = 'Y' THEN
15025 pa_debug.g_err_stage := 'Parent task Id is upd with struc. id so shld be nulled out : ' || p_tasks_in_tbl(i).pa_task_id ;
15026 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15027 END IF;
15028 l_parent_task_id := null;
15029 END IF;
15030
15031 IF l_hierarchy_count = 1 THEN
15032 IF l_debug_mode = 'Y' THEN
15033 pa_debug.g_err_stage := 'l_hierarchy_count is 1 : ' || p_tasks_in_tbl(i).pa_task_id ;
15034 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15035
15036 pa_debug.g_err_stage := 'l_parent_task_id is : ' || l_parent_task_id;
15037 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15038
15039 IF task_parent_id_tbl.EXISTS(l_hierarchy_count) THEN
15040 pa_debug.g_err_stage := 'The task in hierarchy is : ' || task_parent_id_tbl(l_hierarchy_count);
15041 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15042 END IF;
15043
15044 END IF;
15045
15046 IF l_parent_task_id IS NOT NULL AND task_parent_id_tbl.EXISTS(l_hierarchy_count) AND l_parent_task_id = task_parent_id_tbl(l_hierarchy_count) THEN
15047 l_hierarchy_count := l_hierarchy_count +1;
15048 ELSE
15049 IF l_parent_task_id IS NOT NULL THEN
15050
15051 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
15052 ,p_msg_name => 'PA_TASK_NOT_IN_HIERARCHY_ORD'
15053 ,p_token1 => 'TASK'
15054 ,p_value1 => l_err_task_number); Raise Invalid_Arg_Exc_WP;
15055 Raise Invalid_Arg_Exc_WP;
15056 END IF;
15057 END IF;
15058 ELSE
15059 IF l_debug_mode = 'Y' THEN
15060 pa_debug.g_err_stage := 'l_hierarchy_count is grater then 1 : ' || p_tasks_in_tbl(i).pa_task_id ;
15061 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15062
15063
15064 pa_debug.g_err_stage := 'l_parent_task_id is : ' || l_parent_task_id;
15065 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15066
15067 IF task_parent_id_tbl.EXISTS(l_hierarchy_count) THEN
15068 pa_debug.g_err_stage := 'The task in hierarchy is : ' || task_parent_id_tbl(l_hierarchy_count);
15069 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15070 END IF;
15071
15072 END IF;
15073
15074 IF l_parent_task_id IS NULL THEN
15075 l_hierarchy_count := 1;
15076 ELSE
15077 l_temp_count := 0;
15078 l_temp_success := 'F';
15079 LOOP
15080 IF l_parent_task_id = task_parent_id_tbl(l_hierarchy_count) THEN
15081 l_temp_success := 'T';
15082 l_hierarchy_count := l_hierarchy_count +1;
15083 ELSE
15084 l_hierarchy_count := l_hierarchy_count - 1;
15085 END IF;
15086 EXIT WHEN l_temp_success = 'T' OR l_hierarchy_count = 0;
15087
15088 END LOOP;
15089 IF l_debug_mode = 'Y' THEN
15090 pa_debug.g_err_stage := 'Value of l_hierarchy_count : ' || l_hierarchy_count ;
15091 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15092 END IF;
15093
15094 IF l_temp_success = 'F' THEN
15095 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
15096 ,p_msg_name => 'PA_TASK_NOT_IN_HIERARCHY_ORD'
15097 ,p_token1 => 'TASK'
15098 ,p_value1 => l_err_task_number);
15099 Raise Invalid_Arg_Exc_WP;
15100
15101
15102 END IF;
15103
15104 END IF; -- End for l_parent_task_id IS NOT NULL
15105
15106 END IF; --End for l_hierarchy_count = 1
15107 --End for Changes for bug 3057575 :
15108
15109
15110 IF l_parent_task_id is null THEN
15111
15112 --Added for bug 3057575
15113 task_parent_id_tbl(l_hierarchy_count) := l_task_id;
15114
15115 l_wbs_level_tbl(l_task_id) := 1;
15116 l_top_task_count := l_top_task_count + 1;
15117 l_wbs_number_tbl(l_task_id) := l_top_task_count;
15118 ELSE -- current task is not a top task.
15119
15120 --Added for bug 3057575
15121 task_parent_id_tbl(l_hierarchy_count) := l_task_id;
15122
15123 l_wbs_level_tbl(l_task_id) := l_wbs_level_tbl(l_parent_task_id) + 1;
15124 l_child_count_tbl(l_parent_task_id) := l_child_count_tbl(l_parent_task_id) + 1;
15125 l_wbs_number_tbl(l_task_id) := l_wbs_number_tbl(l_parent_task_id) || '.' || l_child_count_tbl(l_parent_task_id);
15126 END IF;
15127
15128 --Set the number of children under the current task to 0.
15129 l_child_count_tbl(l_task_id) := 0;
15130
15131 -- Bug 3075609. Modifying the task weightage processing logic. Currently the logic
15132 -- overwrites the weightages in the update project context and doesnot consider the
15133 -- progress enabled property of the task. Please refer to bug 3030664 for details
15134 -- about the issue and the fix.
15135
15136 /* -- Included check for top task after UT.
15137 -- If this is the first top task set its weightage to 100 else 0.
15138 -- If current task is the only child under the parent set its weightage to 100 else 0.
15139 IF l_parent_task_id is null THEN
15140 IF l_top_task_count = 1 THEN
15141 l_weighting_percentage_tbl(l_task_id) := 100;
15142 ELSE
15143 l_weighting_percentage_tbl(l_task_id) := 0;
15144 END IF;
15145 ELSE -- non top tasks.
15146 IF l_child_count_tbl(l_parent_task_id) = 1 THEN
15147 l_weighting_percentage_tbl(l_task_id) := 100;
15148 ELSE
15149 l_weighting_percentage_tbl(l_task_id) := 0;
15150 END IF;
15151 END IF;
15152 */
15153 -- The following plsql block takes care of assigning task weightages to the tasks.
15154 DECLARE
15155 -- This cursor identified the number of progressible tasks under a parent.
15156 CURSOR get_child_count(c_parent_element_version_id NUMBER)
15157 IS
15158 SELECT count(rel.object_id_to1)
15159 FROM PA_OBJECT_RELATIONSHIPS rel, pa_proj_element_versions pev, pa_proj_elements pe, pa_task_types tt
15160 WHERE rel.object_id_from1 = c_parent_element_version_id
15161 AND rel.object_type_to = 'PA_TASKS'
15162 AND rel.relationship_type = 'S'
15163 AND rel.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
15164 AND rel.object_id_to1 = pev.element_version_id
15165 AND pev.proj_element_id = pe.proj_element_id
15166 AND pe.type_id = tt.task_type_id
15167 AND tt.object_type = 'PA_TASKS' /* bug 3279978 FP M Enhancement */
15168 AND tt.prog_entry_enable_flag = 'Y';
15169
15170 l_child_task_count NUMBER;
15171 l_parent_version_id pa_proj_element_versions.element_version_id%TYPE;
15172 l_task_type_id pa_task_types.task_type_id%TYPE;
15173 BEGIN
15174 l_existing_task_set_max_wt := 'N';
15175 IF l_maintain_weightages = 'N' THEN -- no need to maintain weightages.
15176 l_weighting_percentage_tbl(l_task_id) := 0;
15177 ELSE
15178 IF l_parent_task_id is null THEN -- obtain the parent version id
15179 l_parent_version_id := l_structure_version_id;
15180 ELSE
15181 l_parent_version_id := l_task_version_id_tbl(l_parent_task_id);
15182 END IF;
15183
15184 IF l_child_indicator_tbl.exists(l_parent_version_id) THEN
15185 IF l_child_indicator_tbl(l_parent_version_id) = 'Y' THEN
15186 l_weighting_percentage_tbl(l_task_id) := 0;
15187 ELSE
15188 open cur_task_type_id(l_task_id);
15189 fetch cur_task_type_id into l_task_type_id;
15190 close cur_task_type_id;
15191 IF pa_task_type_utils.check_tk_type_progressable(l_task_type_id) = 'Y' THEN -- progressible task
15192 l_weighting_percentage_tbl(l_task_id) := 100;
15193 l_child_indicator_tbl(l_parent_version_id) := 'Y';
15194 ELSE -- non progressible task
15195 l_weighting_percentage_tbl(l_task_id) := 0;
15196 END IF;
15197 END IF;
15198
15199 ELSE -- This is the first child of the parent.
15200 -- If it is update context, check how many progress enabled tasks the parent has.
15201 IF p_structure_version_id is not null THEN -- update context
15202 open get_child_count(l_parent_version_id);
15203 fetch get_child_count into l_child_task_count;
15204 close get_child_count;
15205 END IF;
15206
15207 IF p_structure_version_id is not null and nvl(l_child_task_count,0) > 0 THEN -- progressible task exist
15208 l_child_indicator_tbl(l_parent_version_id) := 'Y';
15209 l_weighting_percentage_tbl(l_task_id) := 0;
15210 ELSE
15211 open cur_task_type_id(l_task_id);
15212 fetch cur_task_type_id into l_task_type_id;
15213 close cur_task_type_id;
15214 IF pa_task_type_utils.check_tk_type_progressable(l_task_type_id) = 'Y' THEN -- progressible task
15215 l_weighting_percentage_tbl(l_task_id) := 100;
15216 l_child_indicator_tbl(l_parent_version_id) := 'Y';
15217 l_existing_task_set_max_wt := 'Y';
15218 ELSE -- non progressible task
15219 l_weighting_percentage_tbl(l_task_id) := 0;
15220 l_child_indicator_tbl(l_parent_version_id) := 'N';
15221 END IF;
15222 END IF;
15223 END IF;
15224 END IF;
15225 EXCEPTION
15226 WHEN OTHERS THEN
15227 If get_child_count%ISOPEN THEN
15228 Close get_child_count;
15229 END IF;
15230 IF l_debug_mode = 'Y' THEN
15231 pa_debug.g_err_stage:= 'Error while calculating the task weightage. Task id : '||l_task_id;
15232 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level6);
15233 END IF;
15234 Raise;
15235 END;
15236
15237 -- Populate following set of variables required to update element versions:
15238 -- attribute_category , attribute1 ...attribute10, in local variables
15239 -- l_task_version_id, l_proj_elem_ver_rowid, l_proj_elem_ver_rvn -- required only in update task.
15240
15241 IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
15242 l_task_in_rec.pa_task_id IS NULL THEN -- Create Task Context
15243 --Bug 6153503
15244 IF l_task_in_rec.tasks_dff = 'N' THEN
15245 -- Handle the dff attributes. Set the local variable to null if passed value is miss char.
15246 -- These attributes would be used both while creating task version and the schedule version.
15247 IF l_task_in_rec.attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15248 l_attribute_category := null;
15249 ELSE
15250 l_attribute_category := l_task_in_rec.attribute_category;
15251 END IF;
15252
15253 IF l_task_in_rec.attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15254 l_attribute1 := null;
15255 ELSE
15256 l_attribute1 := l_task_in_rec.attribute1;
15257 END IF;
15258
15259 IF l_task_in_rec.attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15260 l_attribute2 := null;
15261 ELSE
15262 l_attribute2 := l_task_in_rec.attribute2;
15263 END IF;
15264
15265 IF l_task_in_rec.attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15266 l_attribute3 := null;
15267 ELSE
15268 l_attribute3 := l_task_in_rec.attribute3;
15269 END IF;
15270
15271 IF l_task_in_rec.attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15272 l_attribute4 := null;
15273 ELSE
15274 l_attribute4 := l_task_in_rec.attribute4;
15275 END IF;
15276
15277 IF l_task_in_rec.attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15278 l_attribute5 := null;
15279 ELSE
15280 l_attribute5 := l_task_in_rec.attribute5;
15281 END IF;
15282
15283 IF l_task_in_rec.attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15284 l_attribute6 := null;
15285 ELSE
15286 l_attribute6 := l_task_in_rec.attribute6;
15287 END IF;
15288
15289 IF l_task_in_rec.attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15290 l_attribute7 := null;
15291 ELSE
15292 l_attribute7 := l_task_in_rec.attribute7;
15293 END IF;
15294
15295 IF l_task_in_rec.attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15296 l_attribute8 := null;
15297 ELSE
15298 l_attribute8 := l_task_in_rec.attribute8;
15299 END IF;
15300
15301 IF l_task_in_rec.attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15302 l_attribute9 := null;
15303 ELSE
15304 l_attribute9 := l_task_in_rec.attribute9;
15305 END IF;
15306
15307 IF l_task_in_rec.attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15308 l_attribute10 := null;
15309 ELSE
15310 l_attribute10 := l_task_in_rec.attribute10;
15311 END IF;
15312 --Bug 6153503
15313 IF l_task_in_rec.attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15314 l_attribute11 := null;
15315 ELSE
15316 l_attribute11 := l_task_in_rec.attribute11;
15317 END IF;
15318
15319 IF l_task_in_rec.attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15320 l_attribute12 := null;
15321 ELSE
15322 l_attribute12 := l_task_in_rec.attribute12;
15323 END IF;
15324
15325 IF l_task_in_rec.attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15326 l_attribute13 := null;
15327 ELSE
15328 l_attribute13 := l_task_in_rec.attribute13;
15329 END IF;
15330
15331 IF l_task_in_rec.attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15332 l_attribute14 := null;
15333 ELSE
15334 l_attribute14 := l_task_in_rec.attribute14;
15335 END IF;
15336
15337 IF l_task_in_rec.attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15338 l_attribute15 := null;
15339 ELSE
15340 l_attribute15 := l_task_in_rec.attribute15;
15341 END IF;
15342
15343 pa_task_utils.validate_flex_fields(
15344 p_desc_flex_name => 'PA_PROJ_ELEM_VER_SCH_DESC_FLEX'
15345 ,p_attribute_category => l_attribute_category
15346 ,p_attribute1 => l_attribute1
15347 ,p_attribute2 => l_attribute2
15348 ,p_attribute3 => l_attribute3
15349 ,p_attribute4 => l_attribute4
15350 ,p_attribute5 => l_attribute5
15351 ,p_attribute6 => l_attribute6
15352 ,p_attribute7 => l_attribute7
15353 ,p_attribute8 => l_attribute8
15354 ,p_attribute9 => l_attribute9
15355 ,p_attribute10 => l_attribute10
15356 ,p_attribute11 => l_attribute11
15357 ,p_attribute12 => l_attribute12
15358 ,p_attribute13 => l_attribute13
15359 ,p_attribute14 => l_attribute14
15360 ,p_attribute15 => l_attribute15
15361 ,p_RETURN_msg => l_return_msg
15362 ,p_validate_status => l_validate_status
15363 );
15364
15365 IF l_validate_status = 'N'
15366 THEN
15367 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
15368 THEN
15369 pa_interface_utils_pub.map_new_amg_msg
15370 ( p_old_message_code => 'PA_INVALID_FF_VALUES'
15371 ,p_msg_attribute => 'CHANGE'
15372 ,p_resize_flag => 'N'
15373 ,p_msg_context => 'FLEX'
15374 ,p_attribute1 => l_return_msg
15375 ,p_attribute2 => ''
15376 ,p_attribute3 => ''
15377 ,p_attribute4 => ''
15378 ,p_attribute5 => '');
15379 END IF;
15380 RAISE FND_API.G_EXC_ERROR;
15381 END IF;
15382 END IF;
15383 --Bug 6153503
15384 ELSE -- update task case
15385 DECLARE
15386 --Cursor to get the versioned information of the task
15387 CURSOR cur_proj_element_version_info(c_structure_version_id pa_proj_element_versions.parent_structure_version_id%TYPE, c_task_id pa_tasks.task_id%TYPE )
15388 IS
15389 SELECT rowid,element_version_id,object_type, project_id, proj_element_id, record_version_number,
15390 display_sequence, wbs_number, wbs_level, parent_structure_version_id,
15391 attribute_category, attribute1, attribute2, attribute3, attribute4, attribute5,
15392 attribute6, attribute7, attribute8, attribute9, attribute10, attribute11, attribute12,
15393 attribute13, attribute14, attribute15, TASK_UNPUB_VER_STATUS_CODE
15394 FROM pa_proj_element_versions
15395 WHERE project_id = p_project_id
15396 AND proj_element_id = c_task_id
15397 AND parent_structure_version_id = c_structure_version_id
15398 AND object_type = 'PA_TASKS';
15399
15400 l_cur_proj_elem_ver_info_rec cur_proj_element_version_info%ROWTYPE;
15401
15402 BEGIN
15403
15404 OPEN cur_proj_element_version_info( l_structure_version_id, l_task_id );
15405 FETCH cur_proj_element_version_info INTO l_cur_proj_elem_ver_info_rec;
15406 CLOSE cur_proj_element_version_info;
15407 --Bug 6153503
15408 l_task_version_id := l_cur_proj_elem_ver_info_rec.element_version_id;
15409 OPEN cur_ver_sch_attr_rec(l_task_version_id);
15410 FETCH cur_ver_sch_attr_rec INTO l_ver_sch_attr_rec;
15411 CLOSE cur_ver_sch_attr_rec;
15412
15413 -- Handle the dff attributes. Set the local variable to null if passed value is miss char.
15414 -- These attributes would be used both while creating task version and the schedule version.
15415 --Bug 6153503 start
15416 IF l_task_in_rec.attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15417 OR l_task_in_rec.tasks_dff = 'Y' THEN
15418 l_attribute_category := l_ver_sch_attr_rec.attribute_category;
15419 ELSE
15420 l_attribute_category := l_task_in_rec.attribute_category;
15421 END IF;
15422
15423 IF l_task_in_rec.attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15424 l_attribute1 := l_ver_sch_attr_rec.attribute1;
15425 ELSE
15426 l_attribute1 := l_task_in_rec.attribute1;
15427 END IF;
15428
15429 IF l_task_in_rec.attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15430 l_attribute2 := l_ver_sch_attr_rec.attribute2;
15431 ELSE
15432 l_attribute2 := l_task_in_rec.attribute2;
15433 END IF;
15434
15435 IF l_task_in_rec.attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15436 l_attribute3 := l_ver_sch_attr_rec.attribute3;
15437 ELSE
15438 l_attribute3 := l_task_in_rec.attribute3;
15439 END IF;
15440
15441 IF l_task_in_rec.attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15442 l_attribute4 := l_ver_sch_attr_rec.attribute4;
15443 ELSE
15444 l_attribute4 := l_task_in_rec.attribute4;
15445 END IF;
15446
15447 IF l_task_in_rec.attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15448 l_attribute5 := l_ver_sch_attr_rec.attribute5;
15449 ELSE
15450 l_attribute5 := l_task_in_rec.attribute5;
15451 END IF;
15452
15453 IF l_task_in_rec.attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15454 l_attribute6 := l_ver_sch_attr_rec.attribute6;
15455 ELSE
15456 l_attribute6 := l_task_in_rec.attribute6;
15457 END IF;
15458
15459 IF l_task_in_rec.attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15460 l_attribute7 := l_ver_sch_attr_rec.attribute7;
15461 ELSE
15462 l_attribute7 := l_task_in_rec.attribute7;
15463 END IF;
15464
15465 IF l_task_in_rec.attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15466 l_attribute8 := l_ver_sch_attr_rec.attribute8;
15467 ELSE
15468 l_attribute8 := l_task_in_rec.attribute8;
15469 END IF;
15470
15471 IF l_task_in_rec.attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15472 l_attribute9 := l_ver_sch_attr_rec.attribute9;
15473 ELSE
15474 l_attribute9 := l_task_in_rec.attribute9;
15475 END IF;
15476
15477 IF l_task_in_rec.attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15478 l_attribute10 := l_ver_sch_attr_rec.attribute10;
15479 ELSE
15480 l_attribute10 := l_task_in_rec.attribute10;
15481 END IF;
15482
15483 IF l_task_in_rec.attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15484 l_attribute11 := l_ver_sch_attr_rec.attribute11;
15485 ELSE
15486 l_attribute11 := l_task_in_rec.attribute11;
15487 END IF;
15488
15489 IF l_task_in_rec.attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15490 l_attribute12 := l_ver_sch_attr_rec.attribute12;
15491 ELSE
15492 l_attribute12 := l_task_in_rec.attribute12;
15493 END IF;
15494
15495 IF l_task_in_rec.attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15496 l_attribute13 := l_ver_sch_attr_rec.attribute13;
15497 ELSE
15498 l_attribute13 := l_task_in_rec.attribute13;
15499 END IF;
15500
15501 IF l_task_in_rec.attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15502 l_attribute14 := l_ver_sch_attr_rec.attribute14;
15503 ELSE
15504 l_attribute14 := l_task_in_rec.attribute14;
15505 END IF;
15506
15507 IF l_task_in_rec.attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15508 l_attribute15 := l_ver_sch_attr_rec.attribute15;
15509 ELSE
15510 l_attribute15 := l_task_in_rec.attribute15;
15511 END IF;
15512
15513 pa_task_utils.validate_flex_fields(
15514 p_desc_flex_name => 'PA_PROJ_ELEM_VER_SCH_DESC_FLEX'
15515 ,p_attribute_category => l_attribute_category
15516 ,p_attribute1 => l_attribute1
15517 ,p_attribute2 => l_attribute2
15518 ,p_attribute3 => l_attribute3
15519 ,p_attribute4 => l_attribute4
15520 ,p_attribute5 => l_attribute5
15521 ,p_attribute6 => l_attribute6
15522 ,p_attribute7 => l_attribute7
15523 ,p_attribute8 => l_attribute8
15524 ,p_attribute9 => l_attribute9
15525 ,p_attribute10 => l_attribute10
15526 ,p_attribute11 => l_attribute11
15527 ,p_attribute12 => l_attribute12
15528 ,p_attribute13 => l_attribute13
15529 ,p_attribute14 => l_attribute14
15530 ,p_attribute15 => l_attribute15
15531 ,p_RETURN_msg => l_return_msg
15532 ,p_validate_status => l_validate_status
15533 );
15534
15535 IF l_validate_status = 'N'
15536 THEN
15537 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
15538 THEN
15539 pa_interface_utils_pub.map_new_amg_msg
15540 ( p_old_message_code => 'PA_INVALID_FF_VALUES'
15541 ,p_msg_attribute => 'CHANGE'
15542 ,p_resize_flag => 'N'
15543 ,p_msg_context => 'FLEX'
15544 ,p_attribute1 => l_return_msg
15545 ,p_attribute2 => ''
15546 ,p_attribute3 => ''
15547 ,p_attribute4 => ''
15548 ,p_attribute5 => '');
15549 END IF;
15550 RAISE FND_API.G_EXC_ERROR;
15551 END IF;
15552 --Bug 6153503 end
15553
15554
15555 l_task_unpub_ver_status_code := l_cur_proj_elem_ver_info_rec.TASK_UNPUB_VER_STATUS_CODE;
15556
15557 l_task_version_id := l_cur_proj_elem_ver_info_rec.element_version_id;
15558 l_proj_elem_ver_rowid := l_cur_proj_elem_ver_info_rec.rowid;
15559 l_proj_elem_ver_rvn := l_cur_proj_elem_ver_info_rec.record_version_number;
15560
15561 END;
15562 END IF; -- before calling PA_PROJ_ELEMENT_VERSIONS_PKG Insert_Row or Update_Row
15563
15564 -- In the following block do following validations:
15565 -- for create task case check if its ok to create subtask under the parent task.
15566 -- for update task check if the task is being moved. If moved check if move task is ok.
15567 -- check if the task can be moved under the new parent.
15568 -- Also do the lifecycle validations for update case. OPEN ISSUE
15569
15570 -- During these validations following variables are also populated which are used later on
15571 -- l_relationship_id, l_obj_rel_rvn;
15572
15573 IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
15574 l_task_in_rec.pa_task_id IS NULL THEN -- create task
15575 IF l_parent_task_id IS NOT NULL THEN
15576 --Check if it is ok to create a subtask.
15577 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok
15578 ( p_parent_task_ver_id => l_task_version_id_tbl(l_parent_task_id)
15579 ,x_return_status => l_return_status
15580 ,x_error_message_code => l_error_msg_code
15581 );
15582
15583 IF (l_return_status <> 'Y') THEN --Its required to check like this as the called API
15584 --returns return status as Y / N.
15585 IF l_debug_mode = 'Y' THEN
15586 pa_debug.g_err_stage:= 'Cannot create this task under its parent : '||l_task_id;
15587 pa_debug.write(l_module_name,pa_debug.g_err_stage,
15588 l_debug_level6);
15589 END IF;
15590
15591 x_return_status := FND_API.G_RET_STS_ERROR;
15592 px_tasks_out_tbl(i).return_status := x_return_status;
15593 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15594 p_msg_name => l_error_msg_code);
15595 Raise Invalid_Arg_Exc_WP;
15596 END IF;
15597 END IF; --l_parent_task_id IS NOT NULL
15598
15599 ELSE
15600 DECLARE
15601 l_db_parent_task_version_id pa_proj_element_versions.element_version_id%TYPE;
15602 l_parent_task_version_id pa_proj_element_versions.element_version_id%TYPE;
15603
15604 -- Bug 3075609. This will hold the weightage of the task version currently in database.
15605 l_db_task_weightage pa_object_relationships.weighting_percentage%TYPE;
15606 BEGIN
15607 IF (l_parent_task_id IS NOT null)
15608 THEN
15609 l_parent_task_version_id := l_task_version_id_tbl(l_parent_task_id);
15610 ELSE -- top task hence populate structure_version_id as parent
15611 l_parent_task_version_id := l_structure_version_id;
15612 END IF;
15613
15614 --Get the present parent task version id from DB
15615 OPEN cur_parent_object_rel(l_task_version_id );
15616 FETCH cur_parent_object_rel INTO l_db_parent_task_version_id,l_relationship_id, l_obj_rel_rvn,l_db_task_weightage;
15617 CLOSE cur_parent_object_rel;
15618
15619 -- Bug 3075609. For all the existing tasks, we will set the weightage from the database.
15620 l_weighting_percentage_tbl(l_task_id) := l_db_task_weightage;
15621
15622 -- Siva : You can set the flag l_WBS_changed_flag to Y inside the following if
15623 -- Condition. Call the set_update_wbs_flag after the task loop - otherwise for each
15624 -- of the potential change the set_update_wbs_flag api will be called.(This will equal
15625 -- the number of tasks in the create project context)
15626 IF (l_parent_task_version_id <> l_db_parent_task_version_id)
15627 THEN
15628 --rtarway, for DHI ER, BUG 4413568
15629 IF ( PA_PROJECT_PUB.G_TASK_STR_UPDATE_MODE = 'PA_UPD_TASK_ATTR' ) THEN --bug 4534919
15630 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15631 p_msg_name => 'PA_WBS_CANT_CHANGE');
15632 RAISE Invalid_Arg_Exc_WP;
15633 END IF;
15634 -- Lifecycle Phase validation . Check if task has phase associated with it
15635 IF (pa_proj_elements_utils.CHECK_ELEMENT_HAS_PHASE(l_task_in_rec.pa_task_id) = 'Y')
15636 THEN
15637 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15638 p_msg_name => 'PA_LC_NO_MOVE_PHASE_TASK');
15639 RAISE Invalid_Arg_Exc_WP;
15640 END IF;
15641
15642 --check if ok to move this task
15643 PA_PROJ_ELEMENTS_UTILS.check_move_task_ok(
15644 p_task_ver_id => l_task_version_id
15645 ,x_return_status => x_return_status
15646 ,x_error_message_code => x_msg_data
15647 );
15648 IF (x_return_status <> 'Y') THEN
15649 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15650 p_msg_name => x_msg_data);
15651 raise Invalid_Arg_Exc_WP;
15652 END IF;
15653
15654 IF (l_parent_task_id IS NOT NULL) THEN
15655 PA_PROJ_ELEMENTS_UTILS.CHECK_CREATE_SUBTASK_OK(
15656 p_parent_task_ver_id => l_parent_task_version_id
15657 ,x_return_status => x_return_status
15658 ,x_error_message_code => x_msg_data);
15659 IF (x_return_status <> 'Y') THEN
15660 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15661 p_msg_name => x_msg_data);
15662 raise Invalid_Arg_Exc_WP;
15663 END IF;
15664 END IF;
15665
15666 l_WBS_changed_flag := 'Y'; --bug 3010538
15667
15668 -- Bug 3075609. This task is changing its parent. See if the other peer
15669 -- tasks need to be processed. The task that is changing its parent will be
15670 -- set a tw of 100 if this is the first task in the new branch or 0 otherwise.
15671 IF l_maintain_weightages = 'Y' THEN
15672 IF nvl(l_existing_task_set_max_wt,'N') = 'Y' THEN
15673 l_weighting_percentage_tbl(l_task_id) := 100;
15674 ELSE
15675 l_weighting_percentage_tbl(l_task_id) := 0;
15676 END IF;
15677 IF nvl(l_db_task_weightage,0) <> 0 and NOT l_affected_parents_tbl.exists(l_db_parent_task_version_id) THEN
15678 l_affected_parents_tbl(l_db_parent_task_version_id) := 'Y';
15679 END IF;
15680 END IF;
15681 END IF;
15682 END;
15683 END IF;
15684
15685 -- call insert row or update row
15686 -- Set the following local variables after calling PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row
15687 -- l_task_version_id_tbl(l_task_id)
15688 -- px_tasks_out_tbl(i).task_version_id
15689
15690 IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
15691 l_task_in_rec.pa_task_id IS NULL -- Create Task Context
15692 THEN
15693
15694 -- Call the table handler to create a task version.
15695 IF l_debug_mode = 'Y' THEN
15696 pa_debug.g_err_stage := 'Calling API PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row';
15697 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15698 END IF;
15699 --added for 4059962 by rtarway
15700 --Derive financial task flag
15701 l_Share_Code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id);
15702 IF l_shared = 'Y'
15703 THEN
15704 --If P_Structure_Type = 'WORKPLAN' Or l_Share_Code = 'SHARE_PARTIAL' then
15705 If l_Share_Code = 'SHARE_PARTIAL' then --Modified IF condition for 4059962 reopen, rtarway
15706 l_financial_task_flag := 'N';
15707 Else
15708 l_financial_task_flag := 'Y';
15709 End If;
15710 ELSE
15711 If P_Structure_Type = 'WORKPLAN' THEN
15712 l_financial_task_flag := 'N';
15713 Else
15714 l_financial_task_flag := 'Y';
15715 End If;
15716 End IF;
15717 --end added for 4059962 by rtarway
15718
15719 /*
15720 Bug Fix 5263429
15721 Unable to delete the task from MSP.
15722 */
15723 IF p_is_wp_separate_from_fn = 'N'
15724 THEN
15725 IF p_is_wp_versioning_enabled = 'Y'
15726 THEN
15727 l_task_unpub_ver_status_code := 'WORKING';
15728 ELSE
15729 l_task_unpub_ver_status_code := 'PUBLISHED';
15730 END IF;
15731 ELSE ---split
15732 IF p_structure_type = 'FINANCIAL'
15733 THEN
15734 l_task_unpub_ver_status_code := 'PUBLISHED';
15735 ELSE --workplan only
15736 IF p_is_wp_versioning_enabled = 'Y'
15737 THEN
15738 l_task_unpub_ver_status_code := 'WORKING';
15739 ELSE
15740 l_task_unpub_ver_status_code := 'PUBLISHED';
15741 END IF;
15742 END IF;
15743 END IF;
15744 /*
15745 End of Bug Fix 5263429
15746 */
15747 PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row
15748 (
15749 X_ROW_ID => l_proj_elem_ver_rowid
15750 ,X_ELEMENT_VERSION_ID => l_task_version_id
15751 ,X_PROJ_ELEMENT_ID => l_task_id
15752 ,X_OBJECT_TYPE => 'PA_TASKS'
15753 ,X_PROJECT_ID => p_project_id
15754 ,X_PARENT_STRUCTURE_VERSION_ID=> l_structure_version_id
15755 ,X_DISPLAY_SEQUENCE => l_display_sequence_tbl(l_task_id)
15756 ,X_WBS_LEVEL => l_wbs_level_tbl(l_task_id)
15757 ,X_WBS_NUMBER => l_wbs_number_tbl(l_task_id)
15758 ,X_ATTRIBUTE_CATEGORY => l_attribute_category
15759 ,X_ATTRIBUTE1 => l_attribute1
15760 ,X_ATTRIBUTE2 => l_attribute2
15761 ,X_ATTRIBUTE3 => l_attribute3
15762 ,X_ATTRIBUTE4 => l_attribute4
15763 ,X_ATTRIBUTE5 => l_attribute5
15764 ,X_ATTRIBUTE6 => l_attribute6
15765 ,X_ATTRIBUTE7 => l_attribute7
15766 ,X_ATTRIBUTE8 => l_attribute8
15767 ,X_ATTRIBUTE9 => l_attribute9
15768 ,X_ATTRIBUTE10 => l_attribute10
15769 ,X_ATTRIBUTE11 => null
15770 ,X_ATTRIBUTE12 => null
15771 ,X_ATTRIBUTE13 => null
15772 ,X_ATTRIBUTE14 => null
15773 ,X_ATTRIBUTE15 => null
15774 ,X_TASK_UNPUB_VER_STATUS_CODE => l_task_unpub_ver_status_code
15775 ,X_SOURCE_OBJECT_ID => p_project_id
15776 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
15777 --,P_Financial_Task_Flag => PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_task_id)
15778 --commented and added following for bug 4059962 reopen, rtarway
15779 ,P_Financial_Task_Flag => l_financial_task_flag
15780 );
15781
15782 l_task_version_id_tbl(l_task_id) := l_task_version_id;
15783 px_tasks_out_tbl(i).task_version_id := l_task_version_id;
15784
15785 IF l_debug_mode = 'Y' THEN
15786 pa_debug.g_err_stage := 'Task Version id : ' || l_task_version_id ;
15787 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
15788 END IF;
15789
15790 -- Required to inherit task type attributes only in the case of context create_task from update project
15791 IF p_structure_version_id IS NOT NULL
15792 THEN
15793 IF p_create_task_version_only = 'N'
15794 THEN
15795 PA_TASK_PVT1.Inherit_task_type_attr(
15796 p_task_id => l_task_id
15797 ,p_task_version_id => l_task_version_id
15798 ,x_return_status => x_return_status
15799 ,x_msg_count => x_msg_count
15800 ,x_msg_data => x_msg_data
15801 );
15802 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
15803 raise Invalid_Arg_Exc_WP;
15804 END IF;
15805 END IF;--for p_create_task_version_only = 'N'
15806 END IF;-- for p_structure_version_id IS NOT NULL
15807
15808 ELSE -- in update task case
15809 -- check for locking
15810 BEGIN
15811 SELECT 'x' INTO l_dummy_char
15812 FROM PA_PROJ_ELEMENT_VERSIONS
15813 WHERE element_version_id = l_task_version_id
15814 AND record_version_number = l_proj_elem_ver_rvn
15815 FOR UPDATE OF record_version_number NOWAIT;
15816 EXCEPTION
15817 WHEN TIMEOUT_ON_RESOURCE THEN
15818 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15819 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
15820 raise Invalid_Arg_Exc_WP;
15821 WHEN NO_DATA_FOUND THEN
15822 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15823 p_msg_name => 'PA_XC_RECORD_CHANGED');
15824 raise Invalid_Arg_Exc_WP;
15825 WHEN OTHERS THEN
15826 IF SQLCODE = -54 then
15827 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15828 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
15829 raise Invalid_Arg_Exc_WP;
15830 ELSE
15831 raise;
15832 END IF;
15833 END;
15834
15835 -- Call the table handler to create a task version.
15836 IF l_debug_mode = 'Y' THEN
15837 pa_debug.g_err_stage := 'Calling API PA_PROJ_ELEMENT_VERSIONS_PKG.Update_Row';
15838 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15839 END IF;
15840
15841 -- Bug 3075609. Since atleast one task is being updated, this structure version is an
15842 -- existing one. Let us maintain a flag to track this so that if this flag is Y we will
15843 -- not recalculate the task weightages if the basis is MANUAL.
15844 l_new_structure_version := 'N';
15845
15846 PA_PROJ_ELEMENT_VERSIONS_PKG.Update_Row(
15847 X_ROW_ID => l_proj_elem_ver_rowid
15848 ,X_ELEMENT_VERSION_ID => l_task_version_id
15849 ,X_PROJ_ELEMENT_ID => l_task_id
15850 ,X_OBJECT_TYPE => 'PA_TASKS'
15851 ,X_PROJECT_ID => p_project_id
15852 ,X_PARENT_STRUCTURE_VERSION_ID=> l_structure_version_id
15853 ,X_DISPLAY_SEQUENCE => l_display_sequence_tbl(l_task_in_rec.pa_task_id)
15854 ,X_WBS_LEVEL => l_wbs_level_tbl(l_task_in_rec.pa_task_id)
15855 ,X_WBS_NUMBER => l_wbs_number_tbl(l_task_in_rec.pa_task_id)
15856 ,X_ATTRIBUTE_CATEGORY => l_attribute_category
15857 ,X_ATTRIBUTE1 => l_attribute1
15858 ,X_ATTRIBUTE2 => l_attribute2
15859 ,X_ATTRIBUTE3 => l_attribute3
15860 ,X_ATTRIBUTE4 => l_attribute4
15861 ,X_ATTRIBUTE5 => l_attribute5
15862 ,X_ATTRIBUTE6 => l_attribute6
15863 ,X_ATTRIBUTE7 => l_attribute7
15864 ,X_ATTRIBUTE8 => l_attribute8
15865 ,X_ATTRIBUTE9 => l_attribute9
15866 ,X_ATTRIBUTE10 => l_attribute10
15867 ,X_ATTRIBUTE11 => null
15868 ,X_ATTRIBUTE12 => null
15869 ,X_ATTRIBUTE13 => null
15870 ,X_ATTRIBUTE14 => null
15871 ,X_ATTRIBUTE15 => null
15872 ,X_record_version_number => l_proj_elem_ver_rvn
15873 ,X_TASK_UNPUB_VER_STATUS_CODE => l_task_unpub_ver_status_code
15874 );
15875
15876 l_task_version_id_tbl(l_task_id) := l_task_version_id;
15877 px_tasks_out_tbl(i).task_version_id := l_task_version_id;
15878
15879 IF l_debug_mode = 'Y' THEN
15880 pa_debug.g_err_stage := 'Task Version id : ' || l_task_version_id ;
15881 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
15882 END IF;
15883
15884 END IF; /* After calling PA_PROJ_ELEMENT_VERSIONS_PKG Insert_Row or Update_Row*/
15885
15886 -- Added for bug 3057575
15887 -- Here we will poulate the task_ver_id_passed_tbl with all the task version Id processed while
15888 -- Updating a project .This is not done while creating a project as we
15889 -- Are adding task version Id in task_ver_id_passed_tbl to identify all the tasks
15890 -- which are not passed while updating a project.
15891 IF (p_structure_version_id IS NOT NULL) THEN
15892 task_ver_id_passed_tbl(l_task_version_id) := l_task_version_id;
15893 END IF;
15894
15895 -- In following code we will be creating or updating the records in object relationship tables.
15896
15897 DECLARE
15898 l_structure_version_id_from pa_proj_element_versions.element_version_id%TYPE;
15899 l_task_version_id_from pa_proj_element_versions.element_version_id%TYPE;
15900 l_relationship_subtype pa_object_relationships.relationship_subtype%TYPE;
15901
15902 BEGIN
15903
15904 -- Set the following local variables before calling PA_RELATIONSHIP_PUB.Create_Relationship
15905 -- l_structure_version_id_from
15906 -- l_task_version_id_from
15907 -- l_relationship_subtype
15908 IF l_parent_task_id is null THEN -- task is a top task.
15909 l_structure_version_id_from := l_structure_version_id;
15910 l_task_version_id_from := null;
15911 l_relationship_subtype := 'STRUCTURE_TO_TASK';
15912 ELSE -- The task is not a top task
15913 l_structure_version_id_from := null;
15914 l_task_version_id_from := l_task_version_id_tbl(l_parent_task_id);
15915 l_relationship_subtype := 'TASK_TO_TASK';
15916 END IF;
15917
15918 IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
15919 l_task_in_rec.pa_task_id IS NULL -- Create Task Context
15920 THEN
15921 -- Set the following variables after calling PA_RELATIONSHIP_PUB.Create_Relationship
15922 --px_tasks_out_tbl(i).return_status
15923 IF l_debug_mode = 'Y' THEN
15924 pa_debug.g_err_stage := 'Calling API create_relationship';
15925 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15926 END IF;
15927
15928 PA_RELATIONSHIP_PUB.Create_Relationship
15929 (
15930 p_api_version => p_api_version_number
15931 ,p_init_msg_list => FND_API.G_FALSE
15932 ,p_commit => p_commit
15933 ,p_validate_only => FND_API.G_FALSE
15934 ,p_calling_module => p_calling_module
15935 ,p_debug_mode => l_debug_mode
15936 ,p_project_id_from => p_project_id
15937 ,p_structure_id_from => l_structure_id
15938 ,p_structure_version_id_from => l_structure_version_id_from
15939 ,p_task_version_id_from => l_task_version_id_from
15940 ,p_project_id_to => p_project_id
15941 ,p_structure_id_to => l_structure_id
15942 ,p_task_version_id_to => l_task_version_id
15943 ,p_structure_type => null
15944 ,p_initiating_element => null
15945 ,p_relationship_type => 'S'
15946 ,p_relationship_subtype => l_relationship_subtype
15947 ,p_weighting_percentage => l_weighting_percentage_tbl(l_task_id)
15948 ,x_object_relationship_id => l_relationship_id
15949 ,x_return_status => x_return_status
15950 ,x_msg_count => x_msg_count
15951 ,x_msg_data => x_msg_data
15952 );
15953
15954 px_tasks_out_tbl(i).return_status := x_return_status;
15955 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15956 IF l_debug_mode = 'Y' THEN
15957 pa_debug.g_err_stage := 'Error calling create relationship : ' || l_task_version_id ;
15958 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15959 END IF;
15960 Raise Invalid_Arg_Exc_WP;
15961 END IF;
15962
15963 IF l_debug_mode = 'Y' THEN
15964 pa_debug.g_err_stage := 'Relationship id : ' || l_relationship_id ;
15965 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
15966 END IF;
15967
15968 ELSE -- in update task case
15969 -- Set the following variables after calling PA_RELATIONSHIP_PUB.Create_Relationship
15970 -- px_tasks_out_tbl(i).return_status
15971 --rtarway, for DHI ER, BUG 4413568
15972 /*
15973 IF ( PA_PROJECT_PUB.G_TASK_STR_UPDATE_MODE = 'PA_UPD_TASK_ATTR' ) THEN --bug 4534919
15974 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15975 p_msg_name => 'PA_WBS_CANT_CHANGE');
15976 RAISE Invalid_Arg_Exc_WP;
15977 END IF;
15978 This code is not required here. */
15979
15980 PA_RELATIONSHIP_PVT.Update_Relationship
15981 (
15982 p_api_version => p_api_version_number
15983 ,p_init_msg_list => FND_API.G_FALSE
15984 ,p_commit => p_commit
15985 ,p_validate_only => FND_API.G_FALSE
15986 ,p_calling_module => p_calling_module
15987 ,p_debug_mode => l_debug_mode
15988 ,p_object_relationship_id => l_relationship_id
15989 ,p_project_id_from => null
15990 ,p_structure_id_from => null
15991 ,p_structure_version_id_from => l_structure_version_id_from
15992 ,p_task_version_id_from => l_task_version_id_from
15993 ,p_project_id_to => null
15994 ,p_structure_id_to => null
15995 ,p_structure_version_id_to => null
15996 ,p_task_version_id_to => l_task_version_id
15997 ,p_relationship_type => 'S'
15998 ,p_relationship_subtype => l_relationship_subtype
15999 ,p_weighting_percentage => l_weighting_percentage_tbl(l_task_id)
16000 ,p_record_version_number => l_obj_rel_rvn
16001 ,x_return_status => x_return_status
16002 ,x_msg_count => x_msg_count
16003 ,x_msg_data => x_msg_data
16004 );
16005
16006 px_tasks_out_tbl(i).return_status := x_return_status;
16007
16008 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16009 IF l_debug_mode = 'Y' THEN
16010 pa_debug.g_err_stage := 'Error calling create relationship : ' || l_task_version_id ;
16011 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16012 END IF;
16013 Raise Invalid_Arg_Exc_WP;
16014 END IF;
16015
16016 IF l_debug_mode = 'Y' THEN
16017 pa_debug.g_err_stage := 'Relationship id : ' || l_relationship_id ;
16018 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
16019 END IF;
16020
16021 END IF; -- After calling PA_RELATIONSHIP_PUB Create_Relationship or Update_Relationship
16022
16023 END; -- create/update relationship record.
16024
16025
16026 -- Create or update a schedule version for the task version only if the workplan
16027 -- structure is involved.
16028
16029 IF p_is_wp_separate_from_fn = 'N' OR
16030 (p_is_wp_separate_from_fn = 'Y' and p_structure_type = 'WORKPLAN')
16031 THEN
16032
16033 -- Set the following local variables before calling Create_Schedule_Version or Update_Schedule_Version
16034 -- scheduled_start_date,scheduled_finish_date ( only for create task case)
16035 -- l_task_type_id
16036 -- l_wq_planned_quantity
16037 -- l_ver_sch_attr_rec (only for update task)
16038
16039 DECLARE
16040 l_wq_planned_quantity pa_proj_elem_ver_schedule.wq_planned_quantity%TYPE;
16041 l_scheduled_start_date pa_proj_elem_ver_schedule.scheduled_start_date%TYPE;
16042 l_scheduled_finish_date pa_proj_elem_ver_schedule.scheduled_finish_date%TYPE;
16043 l_task_type_id pa_proj_elements.type_id%TYPE;
16044 BEGIN
16045
16046 IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
16047 l_task_in_rec.pa_task_id IS NULL -- Create Task Context
16048 THEN
16049
16050 -- If start date or end date is miss date, then set them to sysdate.
16051 IF (l_task_in_rec.scheduled_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
16052 l_task_in_rec.scheduled_start_date is NULL ) --ADUT
16053 THEN
16054 l_scheduled_start_date := sysdate;
16055 ELSE
16056 l_scheduled_start_date := l_task_in_rec.scheduled_start_date;
16057 END IF;
16058
16059 IF (l_task_in_rec.scheduled_finish_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
16060 l_task_in_rec.scheduled_finish_date is NULL) --ADUT
16061 THEN
16062 l_scheduled_finish_date := sysdate;
16063 ELSE
16064 l_scheduled_finish_date := l_task_in_rec.scheduled_finish_date;
16065 END IF;
16066
16067
16068 -- If the task type for the current task is null, create_task api would have defaulted
16069 -- it to the default task id. So get the default task type id if the passed in id is null.
16070 IF l_task_in_rec.task_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM or
16071 l_task_in_rec.task_type is null
16072 THEN
16073 l_task_type_id := l_default_task_type_id;
16074 ELSE
16075 l_task_type_id := l_task_in_rec.task_type;
16076 END IF;
16077
16078 -- Need to check if the project and the task type allows for planned work quantity. If not allowed then
16079 -- set the value to null so that it can be passed on to create_schedule_version api.
16080 IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_wq_enabled(l_task_type_id) OR
16081 'N' = PA_PROGRESS_UTILS.get_project_wq_flag(p_project_id))
16082 THEN
16083 IF (l_task_in_rec.PLANNED_WORK_QUANTITY <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
16084 l_task_in_rec.PLANNED_WORK_QUANTITY IS NOT NULL)
16085 THEN
16086 l_wq_planned_quantity := NULL;
16087 END IF;
16088 ELSE
16089 --Added by rtarway, for 4029755
16090 IF (l_task_in_rec.PLANNED_WORK_QUANTITY <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
16091 l_task_in_rec.PLANNED_WORK_QUANTITY IS NOT NULL)
16092 THEN
16093 l_wq_planned_quantity := l_task_in_rec.PLANNED_WORK_QUANTITY;
16094 ELSE
16095 l_wq_planned_quantity := NULL;
16096 END IF;
16097 --Added by rtarway, for 4029755
16098
16099 END IF;
16100
16101 --bug 3035902 maansari
16102 IF pa_task_type_utils.check_tk_type_progressable(l_task_TYPE_ID) = 'Y'
16103 AND NVL( l_progressable_task, 'N' ) = 'N'
16104 THEN
16105 l_progressable_task := 'Y';
16106 END IF;
16107 --end bug 3035902 maansari
16108
16109
16110 ELSE /* in update task case */
16111 -- Added for DFF attributes and to get pev_schedule_id and record version number
16112
16113 --Bug 6153503 Need to reopen again because changes to schedule version records by the
16114 -- which is in between earlier open of the cursor and till this place.
16115
16116 OPEN cur_ver_sch_attr_rec(l_task_version_id);
16117 FETCH cur_ver_sch_attr_rec INTO l_ver_sch_attr_rec;
16118 CLOSE cur_ver_sch_attr_rec;
16119
16120 OPEN cur_task_type_id(l_task_in_rec.pa_task_id);
16121 FETCH cur_task_type_id INTO l_task_type_id;
16122 CLOSE cur_task_type_id;
16123
16124 IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_wq_enabled(l_task_type_id) OR
16125 'N' = PA_PROGRESS_UTILS.get_project_wq_flag(p_project_id)) THEN
16126 l_wq_planned_quantity := null;
16127 ELSE
16128 IF (l_task_in_rec.PLANNED_WORK_QUANTITY = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16129 --Added by rtarway, for 4029755
16130 OR
16131 l_task_in_rec.PLANNED_WORK_QUANTITY IS NULL) THEN
16132 l_wq_planned_quantity := l_ver_sch_attr_rec.wq_planned_quantity;
16133 ELSE
16134 l_wq_planned_quantity := l_task_in_rec.PLANNED_WORK_QUANTITY;
16135 END IF;
16136
16137 END IF;
16138
16139 --bug 3035902 maansari
16140 IF pa_task_type_utils.check_tk_type_progressable(l_task_TYPE_ID) = 'Y'
16141 AND NVL( l_progressable_task, 'N' ) = 'N'
16142 THEN
16143 l_progressable_task := 'Y';
16144 END IF;
16145 --end bug 3035902 maansari
16146
16147
16148 END IF; /* Before calling PA_TASK_PUB1 Create_Schedule_Version or Update_Schedule_Version*/
16149
16150 -- set the following after calling Create_Schedule_Version or Update_Schedule_Version
16151 -- px_tasks_out_tbl(i).return_status
16152
16153 IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
16154 l_task_in_rec.pa_task_id IS NULL -- Create Task Context
16155 THEN
16156 -- set the following after calling api PA_TASK_PUB1.Create_Schedule_Version
16157 -- px_tasks_out_tbl(i).return_status
16158
16159 -- Create a schedule version for the task version only if the workplan
16160 -- structure is involved.
16161
16162 IF l_debug_mode = 'Y' THEN
16163 pa_debug.g_err_stage := 'Calling API create schedule version';
16164 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16165 END IF;
16166
16167 PA_TASK_PUB1.Create_Schedule_Version(
16168 p_element_version_id => l_task_version_id
16169 ,p_init_msg_list => FND_API.G_FALSE
16170 ,p_scheduled_start_date => l_scheduled_start_date
16171 ,p_scheduled_end_date => l_scheduled_finish_date
16172 ,p_calendar_id => l_task_in_rec.calendar_id
16173 ,p_obligation_start_date => l_task_in_rec.obligation_start_date
16174 ,p_obligation_end_date => l_task_in_rec.obligation_finish_date
16175 ,p_actual_start_date => l_task_in_rec.actual_start_date
16176 ,p_actual_finish_date => l_task_in_rec.actual_finish_date
16177 ,p_estimate_start_date => l_task_in_rec.estimated_start_date
16178 ,p_estimate_finish_date => l_task_in_rec.estimated_finish_date
16179 ,p_duration => l_task_in_rec.duration
16180 ,p_early_start_date => l_task_in_rec.early_start_date
16181 ,p_early_end_date => l_task_in_rec.early_finish_date
16182 ,p_late_start_date => l_task_in_rec.late_start_date
16183 ,p_late_end_date => l_task_in_rec.late_finish_date
16184 ,p_milestone_flag => l_task_in_rec.milestone_flag
16185 ,p_critical_flag => l_task_in_rec.critical_flag
16186 ,p_WQ_PLANNED_QUANTITY => l_wq_planned_quantity
16187 ,p_PLANNED_EFFORT => l_task_in_rec.planned_effort
16188 ,p_attribute_category => l_attribute_category
16189 ,p_attribute1 => l_attribute1
16190 ,p_attribute2 => l_attribute2
16191 ,p_attribute3 => l_attribute3
16192 ,p_attribute4 => l_attribute4
16193 ,p_attribute5 => l_attribute5
16194 ,p_attribute6 => l_attribute6
16195 ,p_attribute7 => l_attribute7
16196 ,p_attribute8 => l_attribute8
16197 ,p_attribute9 => l_attribute9
16198 ,p_attribute10 => l_attribute10
16199 --Bug 6153503
16200 ,p_attribute11 => l_attribute11
16201 ,p_attribute12 => l_attribute12
16202 ,p_attribute13 => l_attribute13
16203 ,p_attribute14 => l_attribute14
16204 ,p_attribute15 => l_attribute15
16205 ,x_pev_schedule_id => l_dummy_number
16206 ,x_return_status => x_return_status
16207 ,x_msg_count => x_msg_count
16208 ,x_msg_data => x_msg_data
16209 -- (Begin Venkat) new params for bug #3652460 ----------------------------------------------
16210 ,p_ext_act_duration => l_task_in_rec.ext_act_duration
16211 ,p_ext_remain_duration => l_task_in_rec.ext_remain_duration
16212 ,p_ext_sch_duration => l_task_in_rec.ext_sch_duration
16213 -- (End Venkat) new params for bug #3652460 ------------------------------------------------
16214 -- begin Bug 3654243 -----------------------------------------------------------------------
16215 ,p_def_sch_tool_tsk_type_code => l_task_in_rec.sch_tool_tsk_type_code
16216 ,p_constraint_type_code => l_task_in_rec.constraint_type_code
16217 ,p_constraint_date => l_task_in_rec.constraint_date
16218 ,p_free_slack => l_task_in_rec.free_slack
16219 ,p_total_slack => l_task_in_rec.total_slack
16220 ,p_effort_driven_flag => l_task_in_rec.effort_driven_flag
16221 ,p_level_assignments_flag => l_task_in_rec.level_assignments_flag
16222 -- end Bug 3654243 -------------------------------------------------------------------------
16223 );
16224
16225 px_tasks_out_tbl(i).return_status := x_return_status;
16226 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16227 IF l_debug_mode = 'Y' THEN
16228 pa_debug.g_err_stage := 'Error calling create schedule version : ' || l_task_version_id ;
16229 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16230 END IF;
16231
16232 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
16233 ,p_msg_name => 'PA_PS_NO_TASK_SCH_VER_CREATED');
16234 RAISE Invalid_Arg_Exc_WP;
16235 END IF;
16236
16237 IF l_debug_mode = 'Y' THEN
16238 pa_debug.g_err_stage := 'Schedule Version id : ' || l_dummy_number ;
16239 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
16240 END IF;
16241 --rtarway, 4099429 begin
16242 if (l_task_in_rec.planned_effort is not null and l_task_in_rec.planned_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16243 and l_task_in_rec.planned_effort > 0) then
16244
16245 if (l_add_task_ver_ids.count = 1000) then
16246 IF l_add_task_ver_ids.exists(1) AND l_structure_version_id IS NOT NULL THEN
16247 BEGIN
16248
16249 pa_fp_planning_transaction_pub.add_planning_transactions(
16250 p_context => 'WORKPLAN'
16251 ,p_project_id => p_project_id
16252 ,p_struct_elem_version_id => l_structure_version_id
16253 ,p_task_elem_version_id_tbl => l_add_task_ver_ids
16254 ,p_planned_people_effort_tbl => l_add_planned_effort
16255 ,p_start_date_tbl => l_add_start_date
16256 ,p_end_date_tbl => l_add_end_date
16257 ,p_pm_product_code => l_pm_product_code
16258 ,x_return_status => l_return_status
16259 ,x_msg_count => l_msg_count
16260 ,x_msg_data => l_msg_data
16261 );
16262
16263 EXCEPTION
16264 WHEN OTHERS THEN
16265 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_PUB',
16266 p_procedure_name => 'PROCESS_TASK_STRUCTURE_BULK',
16267 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.add_planning_transactions:'||SQLERRM,1,240));
16268 raise fnd_api.g_exc_error;
16269 END;
16270
16271 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16272 x_msg_count := FND_MSG_PUB.count_msg;
16273 raise fnd_api.g_exc_error;
16274 END IF;
16275 END IF; -- if l_add_task_ver_ids.exists(1) ends here
16276 l_add_task_ver_ids.delete;
16277 l_add_planned_effort.delete;
16278 l_add_start_date.delete;
16279 l_add_end_date.delete;
16280 l_pm_product_code.delete;
16281 end if;-- if (l_add_task_ver_ids.count = 1000)....ends here
16282 --rtarway,
16283
16284 l_add_task_ver_ids.extend(1);
16285 l_add_planned_effort.extend(1);
16286 l_add_start_date.extend(1);
16287 l_add_end_date.extend(1);
16288 l_pm_product_code.extend(1);
16289
16290 l_add_task_ver_ids(l_add_task_ver_ids.count):= px_tasks_out_tbl(i).task_version_id;
16291 l_add_planned_effort(l_add_planned_effort.count):= l_task_in_rec.planned_effort;
16292 l_add_start_date(l_add_start_date.count):= l_task_in_rec.scheduled_start_date;
16293 l_add_end_date(l_add_end_date.count):= l_task_in_rec.scheduled_finish_date;
16294 l_pm_product_code(l_pm_product_code.count) := p_pm_product_code;
16295 end if;-- if l_task_in_rec.planned_effort is not null....ends here
16296 --rtarway, 4099429 end
16297
16298
16299 ELSE -- in update task case
16300 -- set the following after calling api PA_TASK_PUB1.Update_Schedule_Version
16301 -- px_tasks_out_tbl(i).return_status
16302
16303
16304 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N'; --bug 4145893 do not call PJI.plan_update api
16305 --if tasks are updated in bulk.
16306 --This should set for every single task.
16307 PA_TASK_PUB1.Update_Schedule_Version(
16308 p_calling_module => p_calling_module
16309 ,p_init_msg_list => FND_API.G_FALSE
16310 ,p_pev_schedule_id => l_ver_sch_attr_rec.pev_schedule_id
16311 ,p_calendar_id => l_task_in_rec.calendar_id
16312 ,p_scheduled_start_date => l_task_in_rec.scheduled_start_date
16313 ,p_scheduled_end_date => l_task_in_rec.scheduled_finish_date
16314 ,p_obligation_start_date => l_task_in_rec.obligation_start_date
16315 ,p_obligation_end_date => l_task_in_rec.obligation_finish_date
16316 ,p_actual_start_date => l_task_in_rec.actual_start_date
16317 ,p_actual_finish_date => l_task_in_rec.actual_finish_date
16318 ,p_estimate_start_date => l_task_in_rec.estimated_start_date
16319 ,p_estimate_finish_date => l_task_in_rec.estimated_finish_date
16320 ,p_duration => l_task_in_rec.duration
16321 ,p_early_start_date => l_task_in_rec.early_start_date
16322 ,p_early_end_date => l_task_in_rec.early_finish_date
16323 ,p_late_start_date => l_task_in_rec.late_start_date
16324 ,p_late_end_date => l_task_in_rec.late_finish_date
16325 ,p_milestone_flag => l_task_in_rec.milestone_flag
16326 ,p_critical_flag => l_task_in_rec.critical_flag
16327 ,p_WQ_PLANNED_QUANTITY => l_wq_planned_quantity
16328 ,p_PLANNED_EFFORT => l_task_in_rec.planned_effort
16329 ,p_record_version_number => l_ver_sch_attr_rec.record_version_number
16330 --Bug 6153503
16331 ,p_attribute_category => l_attribute_category
16332 ,p_attribute1 => l_attribute1
16333 ,p_attribute2 => l_attribute2
16334 ,p_attribute3 => l_attribute3
16335 ,p_attribute4 => l_attribute4
16336 ,p_attribute5 => l_attribute5
16337 ,p_attribute6 => l_attribute6
16338 ,p_attribute7 => l_attribute7
16339 ,p_attribute8 => l_attribute8
16340 ,p_attribute9 => l_attribute9
16341 ,p_attribute10 => l_attribute10
16342 ,p_attribute11 => l_attribute11
16343 ,p_attribute12 => l_attribute12
16344 ,p_attribute13 => l_attribute13
16345 ,p_attribute14 => l_attribute14
16346 ,p_attribute15 => l_attribute15
16347 ,x_return_status => x_return_status
16348 ,x_msg_count => x_msg_count
16349 ,x_msg_data => x_msg_data
16350 -- (Begin Venkat) new params for bug #3652460 ----------------------------------------------
16351 ,p_ext_act_duration => l_task_in_rec.ext_act_duration
16352 ,p_ext_remain_duration => l_task_in_rec.ext_remain_duration
16353 ,p_ext_sch_duration => l_task_in_rec.ext_sch_duration
16354 -- (End Venkat) new params for bug #3652460 -------------------------------------------------
16355
16356 -- begin Bug 3654243 -----------------------------------------------------------------------
16357 ,p_def_sch_tool_tsk_type_code => l_task_in_rec.sch_tool_tsk_type_code
16358 ,p_constraint_type_code => l_task_in_rec.constraint_type_code
16359 ,p_constraint_date => l_task_in_rec.constraint_date
16360 ,p_free_slack => l_task_in_rec.free_slack
16361 ,p_total_slack => l_task_in_rec.total_slack
16362 ,p_effort_driven_flag => l_task_in_rec.effort_driven_flag
16363 ,p_level_assignments_flag => l_task_in_rec.level_assignments_flag
16364 -- end Bug 3654243 -------------------------------------------------------------------------
16365
16366 );
16367
16368 --bug 4149392
16369 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
16370 --end bug 4149392
16371
16372 px_tasks_out_tbl(i).return_status := x_return_status;
16373
16374 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16375 IF l_debug_mode = 'Y' THEN
16376 pa_debug.g_err_stage := 'Error calling update schedule version : ' || l_task_version_id ;
16377 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16378 END IF;
16379
16380 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
16381 ,p_msg_name => 'PA_PS_TASK_NOT_UPDATED'
16382 /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
16383 ,p_token1 => 'PROJECT'
16384 ,p_value1 => p_project_id
16385 ,p_token2 => 'TASK'
16386 ,p_value2 => l_task_in_rec.pa_task_id
16387 );
16388 RAISE Invalid_Arg_Exc_WP;
16389 END IF;
16390
16391 IF l_debug_mode = 'Y' THEN
16392 pa_debug.g_err_stage := 'Schedule Version id : ' || l_ver_sch_attr_rec.pev_schedule_id ;
16393 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
16394 END IF;
16395
16396 -- Start Addition 6458891
16397 l_update_task_det_flag := 'Y';
16398 If nvl(p_pm_product_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16399 and nvl(p_pm_product_code,'X') = 'MSPROJECT' then
16400 l_prev_planned_effort := null;
16401 l_prev_etc_effort := null;
16402 l_prev_percent_comp := null;
16403 l_update_task_det_flag:= 'N';
16404
16405 -- Bug 7158172
16406 OPEN cur_prev_prog(p_project_id,l_task_id,l_task_version_id);
16407 FETCH cur_prev_prog INTO l_prev_planned_effort, l_prev_etc_effort,l_prev_percent_comp;
16408 CLOSE cur_prev_prog;
16409
16410 IF (NVL(l_task_in_rec.planned_effort, 0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
16411 NVL(l_task_in_rec.planned_effort, 0) <> NVL(l_prev_planned_effort,0)) THEN
16412 l_update_task_det_flag := 'Y';
16413 END IF;
16414
16415 IF (NVL(l_task_in_rec.etc_effort, 0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
16416 NVL(l_task_in_rec.etc_effort, 0) <> NVL(l_prev_etc_effort,0)) THEN
16417 l_update_task_det_flag := 'Y';
16418 END IF;
16419
16420 IF (NVL(l_task_in_rec.percent_complete, 0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
16421 NVL(l_task_in_rec.percent_complete, 0) <> NVL(l_prev_percent_comp,0)) THEN
16422 l_update_task_det_flag := 'Y';
16423 END IF;
16424 -- Bug 7132911
16425
16426 /* Commented for bug 7132911
16427 If (nvl(l_task_in_rec.planned_effort,0)<> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16428 or
16429 nvl(l_task_in_rec.etc_effort,0)<> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16430 or
16431 nvl(l_task_in_rec.percent_complete,0)<> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
16432 Then
16433
16434 open cur_prev_prog(p_project_id,l_task_id,l_task_version_id);
16435 fetch cur_prev_prog into l_prev_planned_effort, l_prev_etc_effort,l_prev_percent_comp;
16436 close cur_prev_prog;
16437 If nvl(l_task_in_rec.planned_effort,0) <> nvl(l_prev_planned_effort,0)
16438 or
16439 nvl(l_task_in_rec.etc_effort,0)<> nvl(l_prev_etc_effort,0)
16440 or
16441 nvl(l_task_in_rec.percent_complete,0)<> nvl(l_prev_percent_comp,0)
16442 Then
16443 l_update_task_det_flag :='Y';
16444 end if;
16445 end if;
16446 */
16447 end if;
16448 -- End addition for bug 6458891
16449
16450 --Added by rtarway for BUG 39198900
16451 IF p_calling_module <> 'FORMS' and l_update_task_det_flag = 'Y' THEN /* Added flag check for Bug 6458891 */
16452 pa_task_pub1.update_task_det_sch_info(
16453 p_calling_module => p_calling_module
16454 ,p_task_ver_id => l_task_version_id
16455 ,p_project_id => p_project_id
16456 ,p_planned_effort => l_task_in_rec.planned_effort
16457 ,p_ETC_effort => l_task_in_rec.etc_effort
16458 ,p_structure_version_id => l_structure_version_id
16459 ,p_percent_complete => l_task_in_rec.percent_complete
16460 ,x_return_status => x_return_status
16461 ,x_msg_count => x_msg_count
16462 ,x_msg_data => x_msg_data
16463 );
16464 END IF;
16465 --End Added by rtarway for BUG 39198900
16466
16467 END IF; --end for p_tasks_in(i).pa_task_id is null
16468 END;
16469 END IF; --END IF For IF p_is_wp_separate_from_fn = 'N' OR (p_is_wp_separate_from_fn = 'Y' and p_structure_type = 'WORKPLAN')
16470
16471 END LOOP; -- loop through the input tasks table.
16472 END IF; -- nvl(p_tasks_in_tbl.last,0) > 0
16473 -------------------------------------------------
16474 /** Code change begin for Bug 4120380 **/
16475 /** The code below will update the task_numbers of the tasks passed via update_project script
16476 back to their original value viz. it'll crop the '-' added to aviod the constraint check in
16477 PA_TASKS and PA_PROJ_ELEMENTS. **/
16478 /* bug#5243018 : Reverting the fix in Bug 4120380
16479 IF nvl(p_tasks_in_tbl.last,0) > 0 THEN --IF Added by rtarway for BUG 4336701
16480 FOR i in p_tasks_in_tbl.first..p_tasks_in_tbl.last LOOP
16481 UPDATE pa_proj_elements
16482 SET element_number = p_tasks_in_tbl(i).pa_task_number
16483 WHERE element_number = '-'||p_tasks_in_tbl(i).pa_task_number
16484 AND PROJECT_ID = p_project_id;
16485 UPDATE pa_tasks
16486 SET task_number = p_tasks_in_tbl(i).pa_task_number
16487 WHERE task_number = '-'||p_tasks_in_tbl(i).pa_task_number
16488 AND PROJECT_ID = p_project_id;
16489 --dbms_output.put_line(('value of recod updates in pa_proj_elements'||sql%rowcount);
16490 END LOOP;
16491 END IF;
16492 End Reverting bug#5243018*/
16493 /* Code change end for Bug 4120380 **/
16494 ---------------------------------------------------
16495 --Start of Changes for bug 3057575
16496 -- Here we check that while updating a project any of the tasks are missed while passing to update_project
16497 IF nvl(task_ver_id_passed_tbl.last,0) > 0 THEN -- Added for bug 3719758
16498 IF (p_structure_version_id IS NOT NULL) THEN
16499 OPEN cur_all_task_ver_id(l_structure_version_id);
16500 Loop
16501 FETCH cur_all_task_ver_id into row_task_ver_id;
16502 EXIT WHEN cur_all_task_ver_id%NOTFOUND;
16503 IF NOT(task_ver_id_passed_tbl.EXISTS(row_task_ver_id.element_version_id)) THEN
16504
16505 OPEN cur_ver_id_to_task_num(row_task_ver_id.element_version_id);
16506 FETCH cur_ver_id_to_task_num INTO l_err_task_number;
16507 CLOSE cur_ver_id_to_task_num;
16508
16509 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
16510 ,p_msg_name => 'PA_TASK_MISS_IN_HIERARCHY_ORD'
16511 ,p_token1 => 'TASK'
16512 ,p_value1 => l_err_task_number);
16513
16514 RAISE Invalid_Arg_Exc_WP;
16515 End if;
16516 END LOOP;
16517 CLOSE cur_all_task_ver_id;
16518 END IF;
16519 End If; -- Added for bug 3719758
16520 --End of Changes for bug 3057575
16521
16522 -- Bug 3075609. For some of the tasks the peer task could have moved out of the branch. In this case
16523 -- we will set the first progress enabled task of the parent to 100 and the rest to 0. If any concerns
16524 -- are raised regarding this, we will modify the logic so as to recalculate the weightage of the tasks
16525 -- as per the requirements then.
16526 -- The following is not wrapped with the l_maintain_weightages flag as if the flag is 'N' the plsql table
16527 -- of records will be null and no processing will be done.
16528 DECLARE
16529 -- This cursor will get the relationship id and the progress enabled flag which will be used to
16530 -- reassign the task weightages for the affected peer tasks.
16531 CURSOR cur_get_child_info(c_parent_element_version_id NUMBER)
16532 IS
16533 SELECT rel.OBJECT_RELATIONSHIP_ID,tt.prog_entry_enable_flag
16534 FROM PA_OBJECT_RELATIONSHIPS rel, pa_proj_element_versions pev, pa_proj_elements pe, pa_task_types tt
16535 WHERE rel.object_id_from1 = c_parent_element_version_id
16536 AND rel.object_type_to = 'PA_TASKS'
16537 AND rel.relationship_type = 'S'
16538 AND rel.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
16539 AND rel.object_id_to1 = pev.element_version_id
16540 AND pev.proj_element_id = pe.proj_element_id
16541 AND tt.object_type = 'PA_TASKS' /* bug 3279978 FP M Enhancement */
16542 AND pe.type_id = tt.task_type_id;
16543
16544 TYPE obj_rel_id_tbl is table of pa_object_relationships.object_relationship_id%TYPE
16545 INDEX BY BINARY_INTEGER;
16546
16547 l_parent_version_id pa_proj_element_versions.element_version_id%TYPE;
16548 l_prog_entry_enable_flag_tbl PA_PLSQL_DATATYPES.Char1TabTyp;
16549 l_obj_rel_id_tbl obj_rel_id_tbl;
16550 l_plsql_max_array_size CONSTANT NUMBER := 200; -- limiting the max fetch size
16551 l_task_weightage_tbl weighting_percentage_tbl;
16552 l_weightage_set_flag VARCHAR2(1);
16553 BEGIN
16554 IF nvl(l_affected_parents_tbl.last,0) > 0 THEN -- only if tasks have moved do the processing
16555 FOR l_parent_version_id in l_affected_parents_tbl.first..l_affected_parents_tbl.last LOOP
16556 l_weightage_set_flag := 'N';
16557 OPEN cur_get_child_info(l_parent_version_id);
16558 LOOP
16559 FETCH cur_get_child_info BULK COLLECT INTO
16560 l_obj_rel_id_tbl
16561 ,l_prog_entry_enable_flag_tbl
16562 LIMIT l_plsql_max_array_size;
16563
16564 IF l_debug_mode = 'Y' THEN
16565 pa_debug.g_err_stage:= 'Fetched ' || cur_get_child_info%rowcount || ' records for processing';
16566 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
16567 END IF;
16568
16569 IF nvl(l_obj_rel_id_tbl.last,0) > 0 THEN -- only if something is fetched do the processing
16570 FOR i in l_obj_rel_id_tbl.first..l_obj_rel_id_tbl.last LOOP
16571 -- Set the weightage for the first progress enabled task to 100 and rest to 0.
16572 IF l_prog_entry_enable_flag_tbl(i) = 'Y' and l_weightage_set_flag = 'N' THEN
16573 l_task_weightage_tbl(i) := 100;
16574 l_weightage_set_flag := 'Y';
16575 ELSE
16576 l_task_weightage_tbl(i) := 0;
16577 END IF;
16578 END LOOP;
16579 -- update back the records.
16580 FORALL i in l_obj_rel_id_tbl.first..l_obj_rel_id_tbl.last
16581 UPDATE pa_object_relationships
16582 set weighting_percentage = l_task_weightage_tbl(i)
16583 where object_relationship_id = l_obj_rel_id_tbl(i);
16584 END IF;
16585 EXIT WHEN nvl(l_obj_rel_id_tbl.last,0) < l_plsql_max_array_size;
16586 END LOOP;
16587 CLOSE cur_get_child_info;
16588 END LOOP;
16589 END IF;
16590 EXCEPTION
16591 WHEN OTHERS THEN
16592 IF cur_get_child_info%ISOPEN THEN
16593 close cur_get_child_info;
16594 END IF;
16595 RAISE;
16596 END;
16597
16598 -- Siva: Call the set_update_wbs_flag api here after the processing is completed for all the tasks.
16599
16600 --bug 3010538
16601 IF l_WBS_changed_flag = 'Y'
16602 THEN
16603
16604 --3035902: process update flag changes
16605 --Bug No 3450684 SMukka Commented if condition
16606 --IF NOT ( p_structure_type = 'WORKPLAN' AND
16607 -- p_is_wp_separate_from_fn = 'Y' AND
16608 -- ( PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id) = 'MANUAL' OR
16609 -- NVL( l_progressable_task, 'N' ) = 'N' ))
16610 --THEN
16611 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
16612 (
16613 p_calling_context => 'AMG'
16614 ,p_project_id => p_project_id
16615 ,p_structure_version_id => l_structure_version_id
16616 ,p_update_wbs_flag => 'Y'
16617 ,x_return_status => l_return_status
16618 ,x_msg_count => l_msg_count
16619 ,x_msg_data => l_msg_data);
16620
16621 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
16622 Raise Invalid_Arg_Exc_WP;
16623 end if;
16624 --END IF;
16625
16626 IF p_structure_type = 'FINANCIAL'
16627 THEN
16628 IF ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' OR
16629 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'Y' OR
16630 ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
16631 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
16632 PA_PROJECT_PUB.G_Published_version_exists = 'N' ) )
16633 THEN
16634 pa_fp_refresh_elements_pub.set_process_flag_proj(
16635 p_project_id => p_project_id
16636 ,p_request_id => null
16637 ,p_process_code => null
16638 ,p_refresh_required_flag => 'Y'
16639 ,x_return_status => l_return_status
16640 ,x_msg_count => l_msg_count
16641 ,x_msg_data => l_msg_data );
16642
16643 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
16644 Raise Invalid_Arg_Exc_WP;
16645 end if;
16646 END IF;
16647 END IF;
16648 END IF;
16649 --end bug 3010538
16650
16651 -- Do task status rollup, date rollup and recalculation of task weightings
16652 -- if the workplan structure is involved.
16653 IF p_is_wp_separate_from_fn = 'N' OR
16654 (p_is_wp_separate_from_fn = 'Y' and p_structure_type = 'WORKPLAN')
16655 THEN
16656 -- Call task status rollup with element version id as null so that rollup
16657 -- happens for the entire version. Status rollup needs to be done only if
16658 -- versioning is not enabled.
16659 IF p_is_wp_versioning_enabled = 'N' THEN
16660
16661 IF l_debug_mode = 'Y' THEN
16662 pa_debug.g_err_stage := 'Calling API Task status rollup';
16663 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16664 END IF;
16665
16666 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
16667 p_structure_version_id => l_structure_version_id
16668 ,p_element_version_id => null
16669 ,x_return_status => x_return_status
16670 ,x_msg_count => x_msg_count
16671 ,x_msg_data => x_msg_data
16672 );
16673
16674 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16675 IF l_debug_mode = 'Y' THEN
16676 pa_debug.g_err_stage := 'Error in task status rollup : ' || l_structure_version_id ;
16677 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16678 END IF;
16679 Raise Invalid_Arg_Exc_WP;
16680 END IF;
16681
16682
16683 END IF; -- p_is_wp_versioning_enabled = 'N'
16684
16685
16686
16687 -- Rollup dates.
16688 IF l_debug_mode = 'Y' THEN
16689 pa_debug.g_err_stage := 'Calling API rollup dates';
16690 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16691 END IF;
16692 --Bug3802469, rtarway, this should not be called if px_tasks_out_tbl is empty, this will be empty,
16693 --if no tasks are passed , this will be empty,
16694 IF ( px_tasks_out_tbl IS NOT NULL AND px_tasks_out_tbl.count > 0)
16695 THEN
16696 PA_PROJ_TASK_STRUC_PUB.rollup_dates(
16697 p_tasks_in => px_tasks_out_tbl
16698 ,p_task_version_id => null
16699 ,p_project_id => p_project_id
16700 ,P_structure_version_id => null
16701 ,x_msg_count => x_msg_count
16702 ,x_msg_data => x_msg_data
16703 ,x_return_status => x_return_status
16704 );
16705 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16706 IF l_debug_mode = 'Y' THEN
16707 pa_debug.g_err_stage := 'Error in rollup dates : ' || l_structure_version_id ;
16708 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16709 END IF;
16710 Raise Invalid_Arg_Exc_WP;
16711 END IF;
16712 END IF;
16713 --Bug3802469, rtarway
16714
16715 l_task_weight_basis_code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id => p_project_id) ;
16716
16717 -- Recalculate the task weightings.
16718 IF nvl(l_task_weight_basis_code,'-1') = 'MANUAL' AND
16719 (l_new_structure_version = 'Y' OR -- Bug 3075609. Recalculate the task weightings only if it is a
16720 nvl(p_create_task_versions_only,'N') = 'Y') THEN -- new structure version. Otherwise donot.
16721 IF l_debug_mode = 'Y' THEN
16722 pa_debug.g_err_stage := 'Calling API recalculate task weightings';
16723 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16724 END IF;
16725 --Bug3802469, rtarway, this should not be called if px_tasks_out_tbl is empty, this will be empty,
16726 --if no tasks are passed , this will be empty,
16727 IF ( px_tasks_out_tbl IS NOT NULL AND px_tasks_out_tbl.count > 0)
16728 THEN
16729 PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings(
16730 p_tasks_in => px_tasks_out_tbl
16731 ,p_task_version_id => null
16732 ,x_msg_count => x_msg_count
16733 ,x_msg_data => x_msg_data
16734 ,x_return_status => x_return_status
16735 );
16736 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16737 IF l_debug_mode = 'Y' THEN
16738 pa_debug.g_err_stage := 'Error in recalculate task weightings : ' || l_structure_version_id ;
16739 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16740 END IF;
16741 Raise Invalid_Arg_Exc_WP;
16742 END IF;
16743 END IF;
16744 --Bug3802469, rtarway, IF(null != px_tasks_out_tbl...
16745 END IF ;
16746
16747 END IF; -- p_is_wp_separate_from_fn = 'N' OR (p_is_wp_separate_from_fn = 'Y' and p_structure_type = 'WORKPLAN')
16748
16749 -- PA L Changes 3010538
16750
16751 IF ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
16752 ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
16753 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
16754 PA_PROJECT_PUB.G_Published_version_exists = 'N')
16755 THEN
16756
16757 -- Changed p_structure_version_id to l_structure_version_id Bug 3035902.
16758 l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => p_project_id
16759 ,p_structure_version_id => l_structure_version_id ) ;
16760 IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
16761 IF p_process_mode = 'ONLINE' THEN
16762
16763 IF l_debug_mode = 'Y' THEN
16764 pa_debug.g_err_stage := 'Calling API PROCESS_WBS_UPDATES';
16765 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16766 END IF;
16767
16768 -- Changed p_structure_version_id to l_structure_version_id Bug 3035902.
16769 -- Instead of using local variables, used the out parameters for the standard parameters.
16770
16771 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context => 'ONLINE_UPDATE'
16772 ,p_project_id => p_project_id
16773 ,p_structure_version_id => l_structure_version_id
16774 ,x_return_status => x_return_status
16775 ,x_msg_count => x_msg_count
16776 ,x_msg_data => x_msg_data ) ;
16777
16778 -- Changed the way in which the error is handled.
16779 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16780 IF l_debug_mode = 'Y' THEN
16781 pa_debug.g_err_stage := 'Error in process_wbs_updates : ';
16782 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16783 END IF;
16784 Raise Invalid_Arg_Exc_WP;
16785 END IF;
16786
16787 ELSIF p_process_mode = 'CONCURRENT' THEN
16788
16789 IF l_debug_mode = 'Y' THEN
16790 pa_debug.g_err_stage := 'Calling API PROCESS_WBS_UPDATES_CONC_WRP';
16791 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16792 END IF;
16793
16794 -- Changed p_structure_version_id to l_structure_version_id Bug 3035902.
16795 -- Instead of using local variables, used the out parameters for the standard parameters.
16796 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context => 'CONC_UPDATE'
16797 ,p_project_id => p_project_id
16798 ,p_structure_version_id => l_structure_version_id
16799 ,x_return_status => x_return_status
16800 ,x_msg_count => x_msg_count
16801 ,x_msg_data => x_msg_data ) ;
16802 -- Changed the way in which the error is handled.
16803 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16804 IF l_debug_mode = 'Y' THEN
16805 pa_debug.g_err_stage := 'Error in process_wbs_updates_conc_wrp : ';
16806 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16807 END IF;
16808 Raise Invalid_Arg_Exc_WP;
16809 END IF;
16810
16811 END IF ;
16812 END IF ;
16813 END IF ;
16814
16815 --Amit : Bug 3964548 Begin
16816
16817 IF l_debug_mode = 'Y' THEN
16818 Pa_Debug.g_err_stage:= 'Calling FP add_planning Txn APIs';
16819 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,l_debug_level3);
16820 Pa_Debug.WRITE(G_PKG_NAME,'p_structure_type='||p_structure_type,l_debug_level3);
16821 Pa_Debug.WRITE(G_PKG_NAME,'p_is_wp_separate_from_fn='||p_is_wp_separate_from_fn,l_debug_level3);
16822 Pa_Debug.WRITE(G_PKG_NAME,'p_tasks_in_tbl.count='||p_tasks_in_tbl.count,l_debug_level3);
16823 Pa_Debug.WRITE(G_PKG_NAME,'p_structure_version_id='||p_structure_version_id,l_debug_level3);
16824 Pa_Debug.WRITE(G_PKG_NAME,'l_structure_version_id='||l_structure_version_id,l_debug_level3);
16825 END IF;
16826
16827 IF ((p_structure_type = 'WORKPLAN' AND p_is_wp_separate_from_fn = 'Y') OR p_is_wp_separate_from_fn = 'N' ) THEN
16828 -- 4198962 Moved call of add_planning_transactions before population of l_del_task_ver_ids
16829 IF l_add_task_ver_ids.exists(1) AND l_structure_version_id IS NOT NULL THEN
16830 BEGIN
16831 pa_fp_planning_transaction_pub.add_planning_transactions(
16832 p_context => 'WORKPLAN'
16833 ,p_project_id => p_project_id
16834 ,p_struct_elem_version_id => l_structure_version_id
16835 ,p_task_elem_version_id_tbl => l_add_task_ver_ids
16836 ,p_planned_people_effort_tbl => l_add_planned_effort
16837 ,p_start_date_tbl => l_add_start_date
16838 ,p_end_date_tbl => l_add_end_date
16839 ,p_pm_product_code => l_pm_product_code
16840 ,x_return_status => l_return_status
16841 ,x_msg_count => l_msg_count
16842 ,x_msg_data => l_msg_data
16843 );
16844 EXCEPTION
16845 WHEN OTHERS THEN
16846 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_PUB',
16847 p_procedure_name => 'PROCESS_TASK_STRUCTURE_BULK',
16848 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.add_planning_transactions:'||SQLERRM,1,240));
16849 raise fnd_api.g_exc_error;
16850 END;
16851
16852 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16853 x_msg_count := FND_MSG_PUB.count_msg;
16854 raise fnd_api.g_exc_error;
16855 END IF;
16856 END IF; -- l_add_task_ver_ids.exists(1) THEN
16857
16858 IF nvl(p_tasks_in_tbl.LAST,0) > 0 THEN
16859 FOR l_i in p_tasks_in_tbl.first .. p_tasks_in_tbl.last LOOP
16860 --rtarway, 4099429, begin comment
16861 /*IF p_tasks_in_tbl(l_i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
16862 p_tasks_in_tbl(l_i).pa_task_id IS NULL -- Create Task Context
16863 THEN
16864 l_add_plan_task_id := null;
16865 IF p_structure_version_id is not null THEN -- Update Project Context
16866 OPEN cur_wp_task_csr_duplicate(p_project_id,p_tasks_in_tbl(l_i).pm_task_reference);
16867 FETCH cur_wp_task_csr_duplicate INTO l_add_plan_task_id;
16868 CLOSE cur_wp_task_csr_duplicate;
16869 END IF;
16870
16871 IF l_debug_mode = 'Y' THEN
16872 Pa_Debug.WRITE(G_PKG_NAME,'Create Task Context',l_debug_level3);
16873 END IF;
16874 IF PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(px_tasks_out_tbl(l_i).task_version_id) = 'Y'
16875 AND pa_task_assignment_utils.check_asgmt_exists_in_task(px_tasks_out_tbl(l_i).task_version_id) = 'N'
16876 THEN
16877 IF l_debug_mode = 'Y' THEN
16878 Pa_Debug.WRITE(G_PKG_NAME,'Lowest Task With No Assignments',l_debug_level3);
16879 END IF;
16880
16881 IF p_tasks_in_tbl(l_i).planned_effort IS NOT NULL AND p_tasks_in_tbl(l_i).planned_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16882 AND l_add_plan_task_id IS NULL
16883 THEN
16884 IF l_debug_mode = 'Y' THEN
16885 Pa_Debug.WRITE(G_PKG_NAME,'Preparing Tables to call FP add_plan_txn',l_debug_level3);
16886 END IF;
16887
16888 l_add_task_ver_ids.extend(1);
16889 l_add_planned_effort.extend(1);
16890 l_add_start_date.extend(1);
16891 l_add_end_date.extend(1);
16892 l_pm_product_code.extend(1);
16893
16894 l_add_task_ver_ids(l_add_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
16895 l_add_planned_effort(l_add_planned_effort.count):= p_tasks_in_tbl(l_i).planned_effort;
16896 l_add_start_date(l_add_start_date.count):= p_tasks_in_tbl(l_i).scheduled_start_date;
16897 l_add_end_date(l_add_end_date.count):= p_tasks_in_tbl(l_i).scheduled_finish_date;
16898 l_pm_product_code(l_pm_product_code.count) := p_pm_product_code;
16899 IF l_debug_mode = 'Y' THEN
16900 Pa_Debug.WRITE(G_PKG_NAME,'l_add_task_ver_ids='||l_add_task_ver_ids(l_add_task_ver_ids.count),l_debug_level3);
16901 Pa_Debug.WRITE(G_PKG_NAME,'l_add_planned_effort='||l_add_planned_effort(l_add_planned_effort.count),l_debug_level3);
16902 Pa_Debug.WRITE(G_PKG_NAME,'l_add_start_date='||l_add_start_date(l_add_start_date.count),l_debug_level3);
16903 Pa_Debug.WRITE(G_PKG_NAME,'l_add_end_date='||l_add_end_date(l_add_end_date.count),l_debug_level3);
16904 Pa_Debug.WRITE(G_PKG_NAME,'l_pm_product_code='||l_pm_product_code(l_pm_product_code.count),l_debug_level3);
16905 END IF;
16906 END IF;
16907 --As per discussion with Amit we will never enter this else part
16908 ELSE
16909 IF l_debug_mode = 'Y' THEN
16910 Pa_Debug.WRITE(G_PKG_NAME,'Preparing Tables to call FP delete_plan_txn',l_debug_level3);
16911 END IF;
16912 l_del_task_ver_ids.extend(1);
16913 l_del_task_ver_ids(l_del_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
16914 END IF;
16915 ELSE -- Update Task Context
16916 IF l_debug_mode = 'Y' THEN
16917 Pa_Debug.WRITE(G_PKG_NAME,'Update Task Context',l_debug_level3);
16918 END IF;
16919
16920 -- Bug 4078307: Changes start
16921 -- In update task flow we should be deleting all task assignments for summary-level tasks
16922 IF PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(px_tasks_out_tbl(l_i).task_version_id) = 'N'
16923 AND pa_task_assignment_utils.check_asgmt_exists_in_task(px_tasks_out_tbl(l_i).task_version_id) = 'Y'
16924 THEN
16925 IF l_debug_mode = 'Y' THEN
16926 Pa_Debug.WRITE(G_PKG_NAME,'Preparing Tables to call FP delete_plan_txn for summary task in update flow',l_debug_level3);
16927 END IF;
16928
16929 l_del_task_ver_ids.extend(1);
16930 l_del_task_ver_ids(l_del_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
16931 END IF;
16932
16933
16934 IF PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(px_tasks_out_tbl(l_i).task_version_id) = 'Y'
16935 AND pa_task_assignment_utils.check_asgmt_exists_in_task(px_tasks_out_tbl(l_i).task_version_id) = 'N'
16936 THEN
16937 -- We do not have to call update_planning_transaction here bcoz
16938 -- update_schedule_version is already calling it.
16939 null;
16940 ELSE
16941 IF l_debug_mode = 'Y' THEN
16942 Pa_Debug.WRITE(G_PKG_NAME,'Preparing Tables to call FP delete_plan_txn',l_debug_level3);
16943 END IF;
16944
16945 l_del_task_ver_ids.extend(1);
16946 l_del_task_ver_ids(l_del_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
16947 END IF;
16948
16949 -- Bug 4078307: Changes End
16950 END IF;-- Create Task Context*/
16951 --rtarway, 4099429, end comment
16952
16953 -- Bug 7437034 (Initialize l_hidden_assgn to N for each iteration)
16954 l_hidden_assgn := 'N';
16955
16956 --rtarway, 4099429, begin add
16957 --rtarway, 4132590, begin add
16958 OPEN check_hidden_assgn_exists(px_tasks_out_tbl(l_i).task_version_id);
16959 FETCH check_hidden_assgn_exists into l_hidden_assgn;
16960 CLOSE check_hidden_assgn_exists;
16961 --rtarway, 4132590, end add
16962
16963 IF (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(px_tasks_out_tbl(l_i).task_version_id) = 'N'
16964 --AND pa_task_assignment_utils.check_asgmt_exists_in_task(px_tasks_out_tbl(l_i).task_version_id) = 'Y')
16965 AND l_hidden_assgn = 'Y')--modified by rtarway for BUG 4132590
16966 THEN
16967 IF l_debug_mode = 'Y' THEN
16968 Pa_Debug.WRITE(G_PKG_NAME,'Preparing Tables to call FP delete_plan_txn for summary task in update flow',l_debug_level3);
16969 END IF;
16970
16971 if (l_del_task_ver_ids.count = 1000) then
16972 IF l_del_task_ver_ids.exists(1) THEN
16973 BEGIN
16974 pa_fp_planning_transaction_pub.delete_planning_transactions(
16975 p_context => 'WORKPLAN'
16976 ,p_task_or_res => 'TASKS'
16977 ,p_element_version_id_tbl => l_del_task_ver_ids
16978 ,x_return_status => l_return_status
16979 ,x_msg_count => l_msg_count
16980 ,x_msg_data => l_msg_data
16981 );
16982 EXCEPTION
16983 WHEN OTHERS THEN
16984 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_PUB',
16985 p_procedure_name => 'PROCESS_TASK_STRUCTURE_BULK',
16986 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
16987 raise fnd_api.g_exc_error;
16988 END;
16989
16990 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16991 x_msg_count := FND_MSG_PUB.count_msg;
16992 raise fnd_api.g_exc_error;
16993 END IF;
16994 END IF; -- l_del_task_ver_ids.exists(1) THEN
16995 l_del_task_ver_ids.delete;
16996 end if;
16997 l_del_task_ver_ids.extend(1);
16998 l_del_task_ver_ids(l_del_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
16999 END IF;
17000 --rtarway, 4099429, end add
17001 END LOOP;
17002 END IF; -- nvl(p_tasks_in_tbl.LAST,0) > 0 THEN
17003 -- 4198962 Moved call of add_planning_transactions before population of l_del_task_ver_ids
17004
17005 IF l_del_task_ver_ids.exists(1) THEN
17006 BEGIN
17007 pa_fp_planning_transaction_pub.delete_planning_transactions(
17008 p_context => 'WORKPLAN'
17009 ,p_task_or_res => 'TASKS'
17010 ,p_element_version_id_tbl => l_del_task_ver_ids
17011 ,x_return_status => l_return_status
17012 ,x_msg_count => l_msg_count
17013 ,x_msg_data => l_msg_data
17014 );
17015 EXCEPTION
17016 WHEN OTHERS THEN
17017 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_PUB',
17018 p_procedure_name => 'PROCESS_TASK_STRUCTURE_BULK',
17019 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
17020 raise fnd_api.g_exc_error;
17021 END;
17022
17023 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17024 x_msg_count := FND_MSG_PUB.count_msg;
17025 raise fnd_api.g_exc_error;
17026 END IF;
17027 END IF; -- l_del_task_ver_ids.exists(1) THEN
17028 END IF; --((p_structure_type = 'WORKPLAN' AND p_is_wp_separate_from_fn = 'Y') OR p_is_wp_separate_from_fn = 'N' )
17029 --Amit : Bug 3964548 End
17030
17031
17032
17033 -- PA L Changes 3010538
17034
17035 --IF (p_structure_version_id IS NOT NULL) then /* create project case */
17036 --
17037 --/* Bug # 3420093 - Adding Progress Management modifications to create_project flow. */
17038 ----BUG 3835474 , rtarway, Added OR condition for shared structures
17039 -- if (p_structure_type = 'WORKPLAN' OR p_is_wp_separate_from_fn = 'N' ) then
17040 --
17041 -- --Bug3802469, rtarway, This loop will not be successfull if p_tasks_in_tbl is empty.
17042 -- --Check should be put before this loop to check if p_tasks_in_tbl is empty
17043 -- if ( p_tasks_in_tbl IS NOT NULL AND p_tasks_in_tbl.count > 0)
17044 -- then
17045 -- for l_i in p_tasks_in_tbl.first .. p_tasks_in_tbl.last
17046 -- loop
17047 -- if (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(px_tasks_out_tbl(l_i).task_version_id) = 'Y') then
17048 -- l_add_task_ver_ids.extend(1);
17049 -- l_add_planned_effort.extend(1);
17050 -- l_add_start_date.extend(1);
17051 -- l_add_end_date.extend(1);
17052 --
17053 -- l_add_task_ver_ids(l_add_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
17054 -- l_add_planned_effort(l_add_planned_effort.count):= p_tasks_in_tbl(l_i).planned_effort;
17055 -- l_add_start_date(l_add_start_date.count):= p_tasks_in_tbl(l_i).actual_start_date;
17056 -- l_add_end_date(l_add_end_date.count):= p_tasks_in_tbl(l_i).actual_finish_date;
17057 -- else
17058 -- l_del_task_ver_ids.extend(1);
17059 --
17060 -- l_del_task_ver_ids(l_del_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
17061 -- end if;
17062 -- end loop;
17063 -- end if;--Bug3802469, rtarway
17064 -- end if;
17065 --
17066 -- -- Calling pa_task_pub1.call_add_planning_txns for lowest level tasks.
17067 --
17068 --
17069 -- begin
17070 -- --BUG 3802469, rtarway , if the tasks table is empty, l_add_task_ver_ids will not be populated.
17071 -- --Check needed before calling call_add_planning_txns, to see if l_add_task_ver_ids is empty
17072 -- if ( l_add_task_ver_ids IS NOT NULL AND l_add_task_ver_ids.count > 0)
17073 -- then
17074 -- pa_task_pub1.call_add_planning_txns(
17075 -- p_tasks_ver_ids => l_add_task_ver_ids,
17076 -- p_planned_effort => l_add_planned_effort,
17077 -- p_project_id => p_project_id,
17078 -- p_structure_version_id => l_structure_version_id, --replace p_structure_version_id, bug 3838186
17079 -- p_start_date => l_add_start_date,
17080 -- p_end_date => l_add_end_date,
17081 -- p_pm_product_code => p_pm_product_code, --bug 3811243
17082 -- x_return_status => l_return_status,
17083 -- x_msg_count => l_msg_count,
17084 -- x_msg_data => l_msg_data
17085 -- );
17086 -- else
17087 -- null;--BUG 3802469, rtarway
17088 -- end if;
17089 -- exception
17090 -- when others then
17091 -- fnd_msg_pub.add_exc_msg(p_pkg_name => 'pa_project_pub',
17092 -- p_procedure_name => 'CREATE_PROJECT',
17093 -- p_error_text => substrb('PA_TASK_PUB1.CALL_ADD_PLANNING_TXNS:'||sqlerrm,1,240));
17094 -- raise fnd_api.g_exc_error;
17095 -- end;
17096 --
17097 -- -- Calling pa_fp_planning_transaction_pub.delete_planning_transactions for higher level tasks.
17098 --
17099 -- begin
17100 -- --BUG 3802469, rtarway , if the tasks table is empty, l_del_task_ver_ids will not be populated.
17101 -- --Check needed before calling delete_planning_transactions, to see if l_del_task_ver_ids is empty
17102 -- if ( l_del_task_ver_ids IS NOT NULL AND l_del_task_ver_ids.count > 0)
17103 -- then
17104 -- pa_fp_planning_transaction_pub.delete_planning_transactions
17105 -- (
17106 -- p_context => 'WORKPLAN'
17107 -- ,p_task_or_res => 'TASKS'
17108 -- ,p_element_version_id_tbl => l_del_task_ver_ids
17109 -- ,x_return_status => l_return_status
17110 -- ,x_msg_count => l_msg_count
17111 -- ,x_msg_data => l_msg_data
17112 -- );
17113 -- else
17114 -- null;
17115 -- end if;
17116 -- exception
17117 -- when others then
17118 -- fnd_msg_pub.add_exc_msg(p_pkg_name => 'pa_project_pub',
17119 -- p_procedure_name => 'CREATE_PROJECT',
17120 -- p_error_text => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.DELETE_PLANNING_TRANSACTIONS:'||SQLERRM,1,240));
17121 -- raise fnd_api.g_exc_error;
17122 -- end;
17123 --
17124 --/* Bug # 3420093 - Adding Progress Management modifications to create_project flow. */
17125 --
17126 --else /* update project case */
17127 --
17128 --/* Bug # 3420093 - Adding Progress Management modifications to update_project flow. */
17129 --BUG 3835474 , rtarway, Added OR condition for shared structures
17130 -- if (p_structure_type = 'WORKPLAN' OR p_is_wp_separate_from_fn = 'N' ) then
17131 --
17132 -- --BUG3802469, rtarway, comment only, no code change
17133 -- --if the str version being updated has no tasks, this loop will not run and l_add_task_ver_ids and
17134 -- --l_del_task_ver_ids will not be populated. before passing these tables to add_planning_transaction
17135 -- --or delete_planning_transaction, checks should be made
17136 -- for l_task_cur_rec in l_task_cur(p_project_id)
17137 -- loop
17138 -- if (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(l_task_cur_rec.element_version_id) = 'Y') then
17139 -- l_add_task_ver_ids.extend(1);
17140 -- l_add_planned_effort.extend(1);
17141 -- l_add_start_date.extend(1);
17142 -- l_add_end_date.extend(1);
17143 --
17144 -- l_add_task_ver_ids(l_add_task_ver_ids.count):= l_task_cur_rec.element_version_id;
17145 -- l_add_planned_effort(l_add_planned_effort.count):= l_task_cur_rec.planned_effort;
17146 -- l_add_start_date(l_add_start_date.count):= l_task_cur_rec.actual_start_date;
17147 -- l_add_end_date(l_add_end_date.count):= l_task_cur_rec.actual_finish_date;
17148 -- else
17149 -- l_del_task_ver_ids.extend(1);
17150 --
17151 -- l_del_task_ver_ids(l_del_task_ver_ids.count):= l_task_cur_rec.element_version_id;
17152 -- end if;
17153 -- end loop;
17154 -- end if;
17155 --
17156 -- -- Calling pa_task_pub1.call_add_planning_txns for lowest level tasks.
17157 --
17158 -- begin
17159 -- --BUG3802469, rtarway, see comments above
17160 -- if ( l_add_task_ver_ids IS NOT NULL and l_add_task_ver_ids.count > 0)
17161 -- then
17162 -- pa_task_pub1.call_add_planning_txns(
17163 -- p_tasks_ver_ids => l_add_task_ver_ids,
17164 -- p_planned_effort => l_add_planned_effort,
17165 -- p_project_id => p_project_id,
17166 -- p_structure_version_id => l_structure_version_id, --replace p_structure_version_id, bug 3838186
17167 -- p_start_date => l_add_start_date,
17168 -- p_end_date => l_add_end_date,
17169 -- p_pm_product_code => p_pm_product_code, --bug 3811243
17170 -- x_return_status => l_return_status,
17171 -- x_msg_count => l_msg_count,
17172 -- x_msg_data => l_msg_data
17173 -- );
17174 -- else
17175 -- null;
17176 -- end if;
17177 -- exception
17178 -- when others then
17179 -- fnd_msg_pub.add_exc_msg(p_pkg_name => 'pa_project_pub',
17180 -- p_procedure_name => 'CREATE_PROJECT',
17181 -- p_error_text => substrb('PA_TASK_PUB1.CALL_ADD_PLANNING_TXNS:'||sqlerrm,1,240));
17182 -- raise fnd_api.g_exc_error;
17183 -- end;
17184 --
17185 -- -- Calling pa_fp_planning_transaction_pub.delete_planning_transactions for higher level tasks.
17186 --
17187 -- begin
17188 -- --BUG3802469, rtarway, see comments above
17189 -- if ( l_del_task_ver_ids IS NOT NULL and l_del_task_ver_ids.count > 0)
17190 -- then
17191 -- pa_fp_planning_transaction_pub.delete_planning_transactions
17192 -- (
17193 -- p_context => 'WORKPLAN'
17194 -- ,p_task_or_res => 'TASKS'
17195 -- ,p_element_version_id_tbl => l_del_task_ver_ids
17196 -- ,x_return_status => l_return_status
17197 -- ,x_msg_count => l_msg_count
17198 -- ,x_msg_data => l_msg_data
17199 -- );
17200 -- else
17201 -- null;
17202 -- end if;
17203 -- exception
17204 -- when others then
17205 -- fnd_msg_pub.add_exc_msg(p_pkg_name => 'pa_project_pub',
17206 -- p_procedure_name => 'CREATE_PROJECT',
17207 -- p_error_text => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.DELETE_PLANNING_TRANSACTIONS:'||SQLERRM,1,240));
17208 -- raise fnd_api.g_exc_error;
17209 -- end;
17210
17211 --/* Bug # 3420093 - Adding Progress Management modifications to update_project flow. */
17212
17213 --end if;
17214
17215 IF l_debug_mode = 'Y' THEN
17216 pa_debug.g_err_stage:= 'Exiting PROCESS_TASK_STRUCTURE_BULK';
17217 pa_debug.write(l_module_name,pa_debug.g_err_stage,
17218 l_debug_level2);
17219 pa_debug.reset_curr_function;
17220
17221 END IF;
17222
17223 EXCEPTION
17224
17225 WHEN Invalid_Arg_Exc_WP THEN
17226
17227 IF l_debug_mode = 'Y' THEN
17228 pa_debug.g_err_stage:= 'In PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc exception block';
17229 pa_debug.write(l_module_name,pa_debug.g_err_stage,
17230 l_debug_level4);
17231 END IF;
17232
17233 x_return_status := FND_API.G_RET_STS_ERROR;
17234 l_msg_count := FND_MSG_PUB.count_msg;
17235
17236 -- IF cur_auto_pub_flag%ISOPEN THEN
17237 -- CLOSE cur_auto_pub_flag;
17238 -- END IF;
17239
17240
17241 IF get_structure%ISOPEN THEN
17242 CLOSE get_structure;
17243 END IF;
17244
17245 IF l_amg_project_csr%ISOPEN THEN
17246 CLOSE l_amg_project_csr;
17247 END IF;
17248
17249 IF cur_pa_tasks%ISOPEN THEN
17250 CLOSE cur_pa_tasks;
17251 END IF;
17252
17253 IF cur_template_flag%ISOPEN THEN
17254 CLOSE cur_template_flag;
17255 END IF;
17256
17257 IF cur_rec_ver_num%ISOPEN THEN
17258 CLOSE cur_rec_ver_num;
17259 END IF;
17260
17261 IF cur_pa_task_ver%ISOPEN THEN
17262 CLOSE cur_pa_task_ver;
17263 END IF;
17264
17265 IF cur_parent_object_rel%ISOPEN THEN
17266 CLOSE cur_parent_object_rel;
17267 END IF;
17268
17269 IF cur_ver_sch_attr_rec%ISOPEN THEN
17270 CLOSE cur_ver_sch_attr_rec;
17271 END IF;
17272
17273 IF cur_task_type_id%ISOPEN THEN
17274 CLOSE cur_task_type_id;
17275 END IF;
17276
17277 IF cur_elem_ver_to_task_id%ISOPEN THEN
17278 CLOSE cur_elem_ver_to_task_id;
17279 END IF;
17280
17281 IF cur_all_task_ver_id%ISOPEN THEN
17282 CLOSE cur_all_task_ver_id;
17283 END IF;
17284
17285 IF l_msg_count = 1 and x_msg_data IS NULL THEN
17286 PA_INTERFACE_UTILS_PUB.get_messages
17287 (p_encoded => FND_API.G_TRUE
17288 ,p_msg_index => 1
17289 ,p_msg_count => l_msg_count
17290 ,p_msg_data => l_msg_data
17291 ,p_data => l_data
17292 ,p_msg_index_out => l_msg_index_out);
17293 x_msg_data := l_data;
17294 x_msg_count := l_msg_count;
17295 ELSE
17296 x_msg_count := l_msg_count;
17297 END IF;
17298
17299 IF l_debug_mode = 'Y' THEN
17300 pa_debug.reset_curr_function;
17301 END IF;
17302
17303 IF p_commit = FND_API.G_TRUE THEN
17304 rollback to process_task_struc;
17305 END IF;
17306
17307 RETURN;
17308
17309 WHEN others THEN
17310
17311 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17312 x_msg_count := 1;
17313 x_msg_data := SQLERRM;
17314
17315 -- IF cur_auto_pub_flag%ISOPEN THEN
17316 -- CLOSE cur_auto_pub_flag;
17317 -- END IF;
17318
17319
17320 IF get_structure%ISOPEN THEN
17321 CLOSE get_structure;
17322 END IF;
17323
17324 IF l_amg_project_csr%ISOPEN THEN
17325 CLOSE l_amg_project_csr;
17326 END IF;
17327
17328 IF cur_pa_tasks%ISOPEN THEN
17329 CLOSE cur_pa_tasks;
17330 END IF;
17331
17332 IF cur_template_flag%ISOPEN THEN
17333 CLOSE cur_template_flag;
17334 END IF;
17335
17336 IF cur_rec_ver_num%ISOPEN THEN
17337 CLOSE cur_rec_ver_num;
17338 END IF;
17339
17340 IF cur_pa_task_ver%ISOPEN THEN
17341 CLOSE cur_pa_task_ver;
17342 END IF;
17343
17344 IF cur_parent_object_rel%ISOPEN THEN
17345 CLOSE cur_parent_object_rel;
17346 END IF;
17347
17348 IF cur_ver_sch_attr_rec%ISOPEN THEN
17349 CLOSE cur_ver_sch_attr_rec;
17350 END IF;
17351
17352 IF cur_task_type_id%ISOPEN THEN
17353 CLOSE cur_task_type_id;
17354 END IF;
17355
17356 IF cur_elem_ver_to_task_id%ISOPEN THEN
17357 CLOSE cur_elem_ver_to_task_id;
17358 END IF;
17359
17360 IF cur_all_task_ver_id%ISOPEN THEN
17361 CLOSE cur_all_task_ver_id;
17362 END IF;
17363
17364 FND_MSG_PUB.add_exc_msg
17365 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
17366 ,p_procedure_name => 'PROCESS_TASK_STRUCTURE_BULK'
17367 ,p_error_text => x_msg_data
17368 );
17369
17370 IF l_debug_mode = 'Y' THEN
17371 pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
17372 pa_debug.write(l_module_name,pa_debug.g_err_stage,
17373 l_debug_level6);
17374 pa_debug.reset_curr_function;
17375
17376 END IF;
17377
17378 IF p_commit = FND_API.G_TRUE THEN
17379 rollback to process_task_struc;
17380 END IF;
17381
17382 -- rollback to process_task_struc; Commented during UT.
17383 RAISE;
17384 END PROCESS_TASK_STRUCTURE_BULK;
17385
17386
17387 --Bug 2947492 ( delete )
17388 PROCEDURE delete_fin_plan_from_task(
17389 p_task_id NUMBER
17390 ,p_project_id NUMBER
17391 ,p_calling_module VARCHAR2 := 'FORMS'
17392 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17393 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17394 ,x_msg_data OUT NOCOPY VARCHAR2) IS --File.Sql.39 bug 4440895
17395
17396
17397 l_plannable_tasks_tbl PA_FP_ELEMENTS_PUB.l_impacted_task_in_tbl_typ;
17398 l_parent_task_id NUMBER;
17399 l_top_task_id NUMBER;
17400 l_return_status VARCHAR2(1);
17401 l_msg_data VARCHAR2(4000);
17402 l_msg_count NUMBER;
17403 l_msg_index_out NUMBER;
17404 l_data VARCHAR2(4000);
17405 API_ERROR EXCEPTION;
17406
17407 CURSOR get_parent_task_id IS
17408 SELECT parent_task_id, top_task_id
17409 FROM pa_tasks
17410 WHERE project_id = p_project_id
17411 AND task_id = p_task_id;
17412
17413 BEGIN
17414
17415 SAVEPOINT plan_tasks;
17416
17417 OPEN get_parent_task_id;
17418 FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id;
17419 CLOSE get_parent_task_id;
17420
17421 l_plannable_tasks_tbl(1).impacted_task_id := p_task_id;
17422 l_plannable_tasks_tbl(1).action := 'DELETE';
17423 l_plannable_tasks_tbl(1).old_parent_task_id := l_parent_task_id;
17424 l_plannable_tasks_tbl(1).top_task_id := l_top_task_id;
17425
17426 /*
17427 -- Commented out as no more using for doosan customer
17428 -- commented by skannoji
17429 -- commenting out as per mail from venkatesh dated 22 jan 04 -- maansari
17430 PA_FP_ELEMENTS_PUB.MAINTAIN_PLANNABLE_TASKS(
17431 p_project_id => p_project_id
17432 , p_impacted_tasks_tbl => l_plannable_tasks_tbl
17433 , x_return_status => l_return_status
17434 , x_msg_data => l_msg_data
17435 , x_msg_count => l_msg_count
17436 );
17437
17438 l_msg_count := FND_MSG_PUB.count_msg;
17439 if l_msg_count > 0 then
17440 x_msg_count := l_msg_count;
17441 if x_msg_count = 1 then
17442 pa_interface_utils_pub.get_messages
17443 (p_encoded => FND_API.G_TRUE,
17444 p_msg_index => 1,
17445 p_msg_count => l_msg_count,
17446 p_msg_data => l_msg_data,
17447 p_data => l_data,
17448 p_msg_index_out => l_msg_index_out);
17449 x_msg_data := l_data;
17450 end if;
17451 raise API_ERROR;
17452 end if;
17453 */
17454
17455 x_return_status := FND_API.G_RET_STS_SUCCESS;
17456 EXCEPTION
17457 WHEN API_ERROR THEN
17458 x_return_status := FND_API.G_RET_STS_ERROR;
17459 rollback to plan_tasks;
17460 WHEN OTHERS THEN
17461 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17462 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
17463 p_procedure_name => 'delete_fin_plan_from_task',
17464 p_error_text => SUBSTRB(SQLERRM,1,240));
17465 rollback to plan_tasks;
17466 raise;
17467
17468 END delete_fin_plan_from_task;
17469 --End Bug 2947492
17470
17471 /*==================================================================
17472 This is the wrapper API that decides whether to invoke the concurrent
17473 process wrapper or the online process to process the WBS updates. If
17474 the profile is set to Online, the process is done online always.
17475 Otherwise when the profile is standard the processing is done online/
17476 concurrent based on the number of tasks in the structure version and
17477 the threshold profile.
17478 Bug 3010538 : New API for the Task Weighting Enhancement.
17479 ==================================================================*/
17480
17481 PROCEDURE PROCESS_WBS_UPDATES_WRP
17482 ( p_api_version_number IN NUMBER := 1.0
17483 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
17484 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
17485 ,p_calling_context IN VARCHAR2 := 'UPDATE'
17486 ,p_project_id IN pa_projects_all.project_id%TYPE
17487 ,p_structure_version_id IN pa_proj_element_versions.element_version_id%TYPE
17488 ,p_pub_struc_ver_id IN NUMBER := NULL
17489 ,p_pub_prog_flag IN VARCHAR2 := 'Y' --bug 4019845
17490 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17491 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17492 ,x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
17493 AS
17494
17495 -- Cursors used in this Procedure.
17496
17497 -- This cursor obtains the count of the task versions in the structure version.
17498 CURSOR cur_task_count(c_project_id pa_projects_all.project_id%TYPE,
17499 c_structure_version_id pa_proj_element_versions.element_version_id%TYPE)
17500 IS
17501 Select count(element_version_id)
17502 From pa_proj_element_versions
17503 Where project_id = c_project_id
17504 And object_type = 'PA_TASKS'
17505 And parent_structure_version_id = c_structure_version_id;
17506
17507 --Bug# 5973460
17508 CURSOR c_get_process_code(c_structure_version_id NUMBER) IS
17509 SELECT process_code
17510 FROM pa_proj_elem_ver_structure
17511 WHERE element_version_id = c_structure_version_id;
17512 --Bug# 5973460
17513
17514 l_msg_count NUMBER := 0;
17515 l_data VARCHAR2(2000);
17516 l_msg_data VARCHAR2(2000);
17517 l_msg_index_out NUMBER;
17518 l_debug_mode VARCHAR2(1);
17519
17520 l_debug_level2 CONSTANT NUMBER := 2;
17521 l_debug_level3 CONSTANT NUMBER := 3;
17522 l_debug_level4 CONSTANT NUMBER := 4;
17523 l_debug_level5 CONSTANT NUMBER := 5;
17524
17525 l_process_code pa_proj_elem_ver_structure.process_code%TYPE; --Bug# 5973460
17526
17527 BEGIN
17528
17529 --Bug# 5973460
17530 OPEN c_get_process_code(p_structure_version_id);
17531 FETCH c_get_process_code INTO l_process_code;
17532 CLOSE c_get_process_code;
17533
17534 IF p_calling_context = 'UPDATE' AND l_process_code = 'PUE'
17535 THEN
17536 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
17537 ,p_msg_name => 'PA_PS_PUBLISH_ERROR');
17538
17539 RAISE Invalid_Arg_Exc_WP;
17540 END IF;
17541 --Bug# 5973460
17542
17543 IF p_init_msg_list = FND_API.G_TRUE THEN
17544 FND_MSG_PUB.initialize;
17545 END IF;
17546
17547 x_msg_count := 0;
17548 x_return_status := FND_API.G_RET_STS_SUCCESS;
17549 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
17550
17551 IF l_debug_mode = 'Y' THEN
17552 pa_debug.g_err_stage:= 'Entering PROCESS_WBS_UPDATES_WRP';
17553 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
17554 l_debug_level3);
17555
17556 pa_debug.set_curr_function( p_function => 'PROCESS_WBS_UPDATES_WRP',
17557 p_debug_mode => l_debug_mode );
17558 END IF;
17559
17560 -- Check for business rules violations
17561 IF l_debug_mode = 'Y' THEN
17562 pa_debug.g_err_stage:= 'Validating input parameters';
17563 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
17564 l_debug_level3);
17565
17566 pa_debug.g_err_stage:= 'p_calling_context = '|| p_calling_context;
17567 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
17568
17569 pa_debug.g_err_stage:= 'p_project_id = '|| p_project_id;
17570 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
17571
17572 pa_debug.g_err_stage:= 'p_structure_version_id = '|| p_structure_version_id;
17573 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
17574
17575 END IF;
17576
17577 -- Throw an error if any of the mandatory parameter is NULL.
17578 IF (p_project_id IS NULL) OR
17579 (p_structure_version_id IS NULL)
17580 THEN
17581 PA_UTILS.ADD_MESSAGE
17582 (p_app_short_name => 'PA',
17583 p_msg_name => 'PA_INV_PARAM_PASSED');
17584 RAISE Invalid_Arg_Exc_WP;
17585 END IF;
17586
17587 DECLARE
17588 l_task_count NUMBER;
17589 l_update_option VARCHAR2(30);
17590 l_calling_context VARCHAR2(30);
17591 BEGIN
17592 open cur_task_count(p_project_id,p_structure_version_id);
17593 fetch cur_task_count into l_task_count;
17594 close cur_task_count;
17595 l_update_option := pa_project_structure_utils.get_process_wbs_updates_option(p_task_count => l_task_count,
17596 p_project_id => p_project_id ---bug 4370533
17597 );
17598
17599 IF p_calling_context = 'PUBLISH' THEN
17600 IF l_update_option = 'ONLINE' THEN
17601 l_calling_context := 'ONLINE_PUBLISH';
17602 ELSE
17603 l_calling_context := 'CONC_PUBLISH';
17604 END IF;
17605 ELSIF p_calling_context = 'UPDATE' THEN
17606 IF l_update_option = 'ONLINE' THEN
17607 l_calling_context := 'ONLINE_UPDATE';
17608 ELSE
17609 l_calling_context := 'CONC_UPDATE';
17610 END IF;
17611 -- 4392189 : Added code for APPLY_PROGRESS
17612 -- This is done so that in process_wbs_updates
17613 -- we can determine the online or deferred mode
17614 ELSIF p_calling_context = 'APPLY_PROGRESS' THEN
17615 IF l_update_option = 'ONLINE' THEN
17616 l_calling_context := 'ONLINE_APPLY_PROGRESS';
17617 ELSE
17618 l_calling_context := 'CONC_APPLY_PROGRESS';
17619 END IF;
17620 ELSIF p_calling_context = 'ASGMT_PLAN_CHANGE' THEN ---bug 4492493
17621 l_calling_context := p_calling_context;
17622 l_update_option := 'CONCURRENT'; ---should always launch conc pgm
17623 ELSE
17624 l_calling_context := p_calling_context;
17625 END IF;
17626
17627 -- TWUT
17628 IF l_debug_mode = 'Y' THEN
17629 pa_debug.g_err_stage := 'Update option is '||l_update_option;
17630 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
17631 END IF;
17632
17633 IF l_update_option = 'ONLINE' THEN
17634 pa_proj_task_struc_pub.process_wbs_updates(
17635 p_commit => p_commit
17636 ,p_project_id => p_project_id
17637 ,p_structure_version_id => p_structure_version_id
17638 ,p_pub_struc_ver_id => p_pub_struc_ver_id
17639 ,p_pub_prog_flag => p_pub_prog_flag --bug 4019845
17640 ,p_calling_context => l_calling_context
17641 ,x_return_status => x_return_status
17642 ,x_msg_count => x_msg_count
17643 ,x_msg_data => x_msg_data
17644 );
17645 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17646 IF l_debug_mode = 'Y' THEN
17647 pa_debug.g_err_stage := 'Error calling online wbs update process ';
17648 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
17649 END IF;
17650 Raise Invalid_Arg_Exc_WP;
17651 END IF;
17652 ELSIF l_update_option = 'CONCURRENT' THEN
17653 pa_proj_task_struc_pub.process_wbs_updates_conc_wrp(
17654 p_commit => p_commit
17655 ,p_project_id => p_project_id
17656 ,p_structure_version_id => p_structure_version_id
17657 ,p_pub_struc_ver_id => p_pub_struc_ver_id
17658 ,p_pub_prog_flag => p_pub_prog_flag --bug 4019845
17659 ,p_calling_context => l_calling_context
17660 ,x_return_status => x_return_status
17661 ,x_msg_count => x_msg_count
17662 ,x_msg_data => x_msg_data
17663 );
17664 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17665 IF l_debug_mode = 'Y' THEN
17666 pa_debug.g_err_stage := 'Error calling concurrent wbs update process ';
17667 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
17668 END IF;
17669 Raise Invalid_Arg_Exc_WP;
17670 END IF;
17671 END IF;
17672 END;
17673
17674 IF l_debug_mode = 'Y' THEN
17675 pa_debug.g_err_stage:= 'Exiting PROCESS_WBS_UPDATES_WRP';
17676 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
17677 l_debug_level3);
17678 pa_debug.reset_curr_function;
17679 END IF;
17680 EXCEPTION
17681
17682 WHEN Invalid_Arg_Exc_WP THEN
17683
17684 x_return_status := FND_API.G_RET_STS_ERROR;
17685 l_msg_count := FND_MSG_PUB.count_msg;
17686
17687 IF cur_task_count%ISOPEN THEN
17688 CLOSE cur_task_count;
17689 END IF;
17690
17691 IF l_msg_count = 1 and x_msg_data IS NULL THEN
17692 PA_INTERFACE_UTILS_PUB.get_messages
17693 (p_encoded => FND_API.G_TRUE
17694 ,p_msg_index => 1
17695 ,p_msg_count => l_msg_count
17696 ,p_msg_data => l_msg_data
17697 ,p_data => l_data
17698 ,p_msg_index_out => l_msg_index_out);
17699 x_msg_data := l_data;
17700 x_msg_count := l_msg_count;
17701 ELSE
17702 x_msg_count := l_msg_count;
17703 END IF;
17704 IF l_debug_mode = 'Y' THEN
17705 pa_debug.reset_curr_function;
17706 END IF;
17707
17708 RETURN;
17709
17710 WHEN others THEN
17711
17712 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17713 x_msg_count := 1;
17714 x_msg_data := SQLERRM;
17715
17716 IF cur_task_count%ISOPEN THEN
17717 CLOSE cur_task_count;
17718 END IF;
17719
17720 FND_MSG_PUB.add_exc_msg
17721 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
17722 ,p_procedure_name => 'PROCESS_WBS_UPDATES_WRP'
17723 ,p_error_text => x_msg_data);
17724
17725 IF l_debug_mode = 'Y' THEN
17726 pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
17727 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
17728 l_debug_level5);
17729 pa_debug.reset_curr_function;
17730 END IF;
17731 RAISE;
17732 END PROCESS_WBS_UPDATES_WRP;
17733
17734 /*==================================================================
17735 This is a wrapper API that will launch the concurrent process that
17736 will in turn call the task weightage calculation and the plannable
17737 tasks APIs.
17738 Bug 3010538 : New API for the Task Weighting Enhancement.
17739 ==================================================================*/
17740
17741 PROCEDURE PROCESS_WBS_UPDATES_CONC_WRP
17742 ( p_api_version_number IN NUMBER := 1.0
17743 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
17744 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
17745 ,p_calling_context IN VARCHAR2 := 'UPDATE'
17746 ,p_project_id IN pa_projects_all.project_id%TYPE
17747 ,p_structure_version_id IN pa_proj_element_versions.element_version_id%TYPE
17748 ,p_pub_struc_ver_id IN NUMBER := NULL
17749 ,p_pub_prog_flag IN VARCHAR2 := 'Y' --bug 4019845
17750 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17751 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17752 ,x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
17753 AS
17754
17755 -- Cursors used.
17756
17757 -- This cursor is used to decide if the structure version corresponds to a particular
17758 -- Structure type. Depending on this the plannable tasks api and the task weightage calculation
17759 -- api will be called.
17760 Cursor cur_structure_type(c_project_id pa_projects_all.project_id%TYPE,
17761 c_structure_version_id pa_proj_element_versions.element_version_id%TYPE,
17762 c_structure_type pa_structure_types.structure_type%TYPE)
17763 IS
17764 select 'Y'
17765 from pa_proj_element_versions ver,
17766 pa_proj_structure_types pst,
17767 pa_structure_types st
17768 where ver.element_version_id = c_structure_version_id
17769 and ver.project_id = c_project_id
17770 and pst.proj_element_id = ver.proj_element_id
17771 and pst.structure_type_id = st.structure_type_id
17772 and st.structure_type = c_structure_type;
17773
17774 l_update_wbs_flag pa_proj_elem_ver_structure.process_update_wbs_flag%TYPE;
17775 l_request_id pa_proj_elem_ver_structure.conc_request_id%TYPE;
17776 l_structure_type_flag VARCHAR2(1);
17777 --Bug 3053920.
17778 l_task_weighting_basis pa_proj_progress_attr.task_weight_basis_code%TYPE;
17779
17780 l_msg_count NUMBER := 0;
17781 l_data VARCHAR2(2000);
17782 l_msg_data VARCHAR2(2000);
17783 l_msg_index_out NUMBER;
17784 l_debug_mode VARCHAR2(1);
17785
17786 l_debug_level2 CONSTANT NUMBER := 2;
17787 l_debug_level3 CONSTANT NUMBER := 3;
17788 l_debug_level4 CONSTANT NUMBER := 4;
17789 l_debug_level5 CONSTANT NUMBER := 5;
17790
17791 -- Begin fix for Bug # 4373055.
17792
17793 l_ret_status VARCHAR2(1);
17794 l_calling_context VARCHAR2(30); -- Bug 4392189
17795
17796 -- End fix for Bug # 4373055.
17797
17798 -- Bug 4589289 : Begin
17799 CURSOR c_get_process_code(c_structure_version_id NUMBER) IS
17800 SELECT process_code
17801 FROM pa_proj_elem_ver_structure
17802 WHERE element_version_id = c_structure_version_id
17803 and project_id = p_project_id -- Bug # 4868867.
17804 ;
17805
17806 l_process_code pa_proj_elem_ver_structure.process_code%TYPE;
17807 l_rerun_flag VARCHAR2(1):=null;
17808
17809 -- Bug 4589289 : End
17810
17811 -- 4683461 For MOAC Changes
17812
17813 Cursor cur_proj_ou
17814 IS
17815 select org_id
17816 from pa_projects_all
17817 where project_id = p_project_id;
17818
17819 l_org_id NUMBER;
17820
17821 -- 4683461 Done
17822
17823 BEGIN
17824 IF p_init_msg_list = FND_API.G_TRUE THEN
17825 FND_MSG_PUB.initialize;
17826 END IF;
17827
17828 x_msg_count := 0;
17829 x_return_status := FND_API.G_RET_STS_SUCCESS;
17830 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
17831
17832 IF l_debug_mode = 'Y' THEN
17833 pa_debug.g_err_stage:= 'Entering PROCESS_WBS_UPDATES_CONC_WRP';
17834 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
17835 l_debug_level3);
17836
17837 pa_debug.set_curr_function( p_function => 'PROCESS_WBS_UPDATES_CONC_WRP',
17838 p_debug_mode => l_debug_mode );
17839 END IF;
17840
17841 -- Check for business rules violations
17842 IF l_debug_mode = 'Y' THEN
17843 pa_debug.g_err_stage:= 'Validating input parameters';
17844 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
17845 l_debug_level3);
17846
17847 pa_debug.g_err_stage:= 'p_calling_context = '|| p_calling_context;
17848 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
17849
17850 pa_debug.g_err_stage:= 'p_project_id = '|| p_project_id;
17851 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
17852
17853 pa_debug.g_err_stage:= 'p_structure_version_id = '|| p_structure_version_id;
17854 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
17855
17856 END IF;
17857
17858 -- Throw an error if any of the mandatory parameter is NULL.
17859 IF (p_project_id IS NULL) OR
17860 (p_structure_version_id IS NULL)
17861 THEN
17862 PA_UTILS.ADD_MESSAGE
17863 (p_app_short_name => 'PA',
17864 p_msg_name => 'PA_INV_PARAM_PASSED');
17865 RAISE Invalid_Arg_Exc_WP;
17866 END IF;
17867
17868 --hsiu: bug 3035902
17869 --commenting because financial planning has partial process and
17870 --the update flag should not be check here.
17871 /*
17872 l_update_wbs_flag := pa_project_structure_utils.GET_UPDATE_WBS_FLAG(p_project_id => p_project_id,
17873 p_structure_version_id => p_structure_version_id);
17874 IF l_update_wbs_flag = 'N' THEN
17875 -- No further processing is required for this structure version. Return.
17876 -- TWUT.
17877 IF l_debug_mode = 'Y' THEN
17878 pa_debug.g_err_stage:= 'No updates required for this structure version.';
17879 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
17880 END IF;
17881 RETURN;
17882 END IF;
17883 */
17884
17885 -- Bug 3053920. We need not launch the conc process if split structure, structure type is workplan,
17886 -- basis code is MANUAL or flag is N.
17887
17888 l_update_wbs_flag := pa_project_structure_utils.GET_UPDATE_WBS_FLAG(p_project_id => p_project_id,
17889 p_structure_version_id => p_structure_version_id);
17890 l_task_weighting_basis := pa_progress_utils.get_task_weighting_basis(p_project_id => p_project_id);
17891
17892
17893 -- See if the structure version being processed is WORKPLAN.
17894 open cur_structure_type(p_project_id,p_structure_version_id,'WORKPLAN');
17895 fetch cur_structure_type into l_structure_type_flag;
17896 close cur_structure_type;
17897 -- 4392189 : Program Reporting Changes - Phase 2
17898 -- For Apply Progress we do not have to check wbs flag
17899 IF (p_calling_context not in ('CONC_APPLY_PROGRESS','ASGMT_PLAN_CHANGE') ---4627294
17900 AND
17901
17902 -- Begin Bug # 4584710.
17903 /*
17904 PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( p_project_id ) = 'Y' AND
17905 nvl(l_structure_type_flag,'N') = 'Y' AND
17906 ( nvl(l_task_weighting_basis,'-99') = 'MANUAL'
17907 OR
17908 */
17909 -- End Bug # 4584710.
17910 nvl(l_update_wbs_flag,'N') = 'N')
17911 THEN
17912 IF l_debug_mode = 'Y' THEN
17913 -- pa_debug.g_err_stage:= 'split + workplan + MANUAL or flag = N. No further processing required';
17914 pa_debug.g_err_stage:= 'Flag = N. No further processing required';
17915 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
17916 END IF;
17917 -- No further processing required. Donot launch the conc process.
17918 RETURN;
17919 END IF;
17920
17921 l_structure_type_flag := NULL;
17922
17923 -- Bug 4589289 : Begin
17924 OPEN c_get_process_code(p_structure_version_id);
17925 FETCH c_get_process_code INTO l_process_code;
17926 CLOSE c_get_process_code;
17927
17928 IF l_process_code IN ('WUE','PUE','AUE') THEN
17929 l_rerun_flag := 'Y';
17930 END IF;
17931 -- Bug 4589289 : End
17932
17933 -- 4683461 For MOAC Changes, retrieving operating unit and setting it before calling
17934 -- fnd_request.submit_request
17935 open cur_proj_ou;
17936 fetch cur_proj_ou into l_org_id;
17937 close cur_proj_ou;
17938
17939 fnd_request.set_org_id(l_org_id);
17940
17941 -- 4683461 end
17942
17943 -- Submit the request.
17944 l_request_id := fnd_request.submit_request
17945 (
17946 application => 'PA',
17947 program => 'PAWPUWBS',
17948 -- description => 'PRC: Process Work Breakdown Structure Updates', -- Fix for Bug # 4409337.
17949 description => 'PRC: Process Structure Updates', -- Fix for Bug # 4409337.
17950 start_time => NULL,
17951 sub_request => false,
17952 argument1 => p_calling_context,
17953 argument2 => p_project_id,
17954 argument3 => p_structure_version_id,
17955 argument4 => p_pub_struc_ver_id,
17956 argument5 => p_pub_prog_flag --bug 4019845
17957 ,argument6 => l_rerun_flag --bug 4589289
17958 );
17959
17960 -- TWUT
17961 IF l_debug_mode = 'Y' THEN
17962 pa_debug.g_err_stage:= 'Request id is '||l_request_id;
17963 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
17964 END IF;
17965
17966 -- Throw an error if the request could not be submitted.
17967 IF l_request_id = 0 THEN
17968 PA_UTILS.ADD_MESSAGE
17969 (p_app_short_name => 'PA',
17970 p_msg_name => 'PA_WP_TW_CONC_PGM_ERR');
17971 RAISE Invalid_Arg_Exc_WP;
17972 END IF;
17973
17974 -- Begin fix for Bug # 4373055.
17975
17976 /*
17977
17978 -- Update the structure version record with the request id and the status code.
17979 update pa_proj_elem_ver_structure
17980 set process_code = 'WUP',
17981 conc_request_id = l_request_id
17982 where element_version_id = p_structure_version_id
17983 and project_id = p_project_id;
17984
17985 */
17986 -- Bug 4392189 : Added l_calling_context
17987 IF p_calling_context IN ('CONC_APPLY_PROGRESS', 'ONLINE_APPLY_PROGRESS') THEN
17988 l_calling_context := 'APPLY_PROGRESS';
17989 ELSE
17990 l_calling_context := p_calling_context;
17991 END IF;
17992
17993 PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_IN_PROC(
17994 p_project_id => p_project_id
17995 , p_structure_version_id => p_structure_version_id
17996 , p_calling_context => l_calling_context
17997 , p_conc_request_id => l_request_id
17998 , x_return_status => l_ret_status);
17999
18000
18001 if (p_calling_context = 'CONC_PUBLISH') then
18002
18003 -- Mark the newly created published structure record also with the process code
18004 -- and request_id.
18005
18006 PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_IN_PROC(
18007 p_project_id => p_project_id
18008 , p_structure_version_id => p_pub_struc_ver_id
18009 , p_calling_context => l_calling_context
18010 , p_conc_request_id => l_request_id
18011 , x_return_status => l_ret_status);
18012
18013 end if;
18014
18015 -- End fix for Bug # 4373055.
18016
18017 -- Call the financial planning API if the structure type is FINANCIAL.
18018 open cur_structure_type(p_project_id,p_structure_version_id,'FINANCIAL');
18019 fetch cur_structure_type into l_structure_type_flag;
18020 close cur_structure_type;
18021
18022 IF nvl(l_structure_type_flag,'N') = 'Y' THEN
18023
18024 -- TWUT
18025 IF l_debug_mode = 'Y' THEN
18026 pa_debug.g_err_stage := 'Calling the financial planning API after submitting the concurrent request';
18027 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18028 END IF;
18029
18030 pa_fp_refresh_elements_pub.set_process_flag_proj(
18031 p_project_id => p_project_id
18032 ,p_request_id => l_request_id
18033 ,p_process_code => 'WUP'
18034 ,p_refresh_required_flag => 'Y'
18035 ,x_return_status => x_return_status
18036 ,x_msg_count => x_msg_count
18037 ,x_msg_data => x_msg_data
18038 );
18039 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18040 IF l_debug_mode = 'Y' THEN
18041 pa_debug.g_err_stage := 'Error calling the financial planning API after submitting the concurrent request';
18042 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
18043 END IF;
18044 Raise Invalid_Arg_Exc_WP;
18045 END IF;
18046 END IF;
18047
18048 -- Commit in order to complete the request submission.
18049 commit;
18050
18051 /* DO NOT ADD ANY CODE AFTER THIS COMMIT bug 3163280 */
18052
18053 IF l_debug_mode = 'Y' THEN
18054 pa_debug.g_err_stage:= 'Exiting PROCESS_WBS_UPDATES_CONC_WRP';
18055 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
18056 l_debug_level3);
18057 pa_debug.reset_curr_function;
18058 END IF;
18059 EXCEPTION
18060
18061 WHEN Invalid_Arg_Exc_WP THEN
18062
18063 x_return_status := FND_API.G_RET_STS_ERROR;
18064 l_msg_count := FND_MSG_PUB.count_msg;
18065
18066 IF l_msg_count = 1 and x_msg_data IS NULL THEN
18067 PA_INTERFACE_UTILS_PUB.get_messages
18068 (p_encoded => FND_API.G_TRUE
18069 ,p_msg_index => 1
18070 ,p_msg_count => l_msg_count
18071 ,p_msg_data => l_msg_data
18072 ,p_data => l_data
18073 ,p_msg_index_out => l_msg_index_out);
18074 x_msg_data := l_data;
18075 x_msg_count := l_msg_count;
18076 ELSE
18077 x_msg_count := l_msg_count;
18078 END IF;
18079 IF l_debug_mode = 'Y' THEN
18080 pa_debug.reset_curr_function;
18081 END IF;
18082
18083 RETURN;
18084
18085 WHEN others THEN
18086
18087 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
18088 x_msg_count := 1;
18089 x_msg_data := SQLERRM;
18090
18091 FND_MSG_PUB.add_exc_msg
18092 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
18093 ,p_procedure_name => 'PROCESS_WBS_UPDATES_CONC_WRP'
18094 ,p_error_text => x_msg_data);
18095
18096 IF l_debug_mode = 'Y' THEN
18097 pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
18098 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
18099 l_debug_level5);
18100 pa_debug.reset_curr_function;
18101 END IF;
18102 RAISE;
18103 END PROCESS_WBS_UPDATES_CONC_WRP;
18104
18105
18106 /*==================================================================
18107 This is the procedure that will be registered as the concurrent
18108 program executable with FND.
18109 Bug 3010538 : New API for the Task Weighting Enhancement.
18110 ==================================================================*/
18111
18112 PROCEDURE PROCESS_WBS_UPDATES_CONC
18113 ( errbuf OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
18114 ,retcode OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
18115 ,p_calling_context IN VARCHAR2 := 'UPDATE'
18116 ,p_project_id IN pa_projects_all.project_id%TYPE
18117 ,p_structure_version_id IN pa_proj_element_versions.element_version_id%TYPE
18118 ,p_pub_struc_ver_id IN NUMBER := NULL
18119 ,p_pub_prog_flag IN VARCHAR2 := 'Y' --bug 4019845
18120 ,p_rerun_flag IN VARCHAR2 := null --bug 4589289
18121 )
18122 AS
18123
18124 l_request_id pa_proj_elem_ver_structure.conc_request_id%TYPE;
18125
18126 l_return_status VARCHAR2(1);
18127 l_msg_count NUMBER := 0;
18128 l_data VARCHAR2(2000);
18129 l_msg_data VARCHAR2(2000);
18130 l_msg_index_out NUMBER;
18131 l_debug_mode VARCHAR2(1);
18132
18133 l_debug_level2 CONSTANT NUMBER := 2;
18134 l_debug_level3 CONSTANT NUMBER := 3;
18135 l_debug_level4 CONSTANT NUMBER := 4;
18136 l_debug_level5 CONSTANT NUMBER := 5;
18137
18138 -- Begin fix for Bug # 4373055.
18139
18140 l_ret_status VARCHAR2(1);
18141 l_calling_context VARCHAR2(30);-- Bug 4392189
18142
18143 -- End fix for Bug # 4373055.
18144
18145 BEGIN
18146
18147 savepoint process_wbs_updates_conc;
18148
18149 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
18150 l_request_id := FND_GLOBAL.CONC_REQUEST_ID;
18151 retcode := '0';
18152 errbuf := NULL;
18153
18154 IF l_debug_mode = 'Y' THEN
18155 pa_debug.set_curr_function( p_function => 'PROCESS_WBS_UPDATES_CONC',
18156 p_debug_mode => l_debug_mode );
18157 pa_debug.g_err_stage:= 'Entering PROCESS_WBS_UPDATES_CONC';
18158 pa_debug.log_message(p_message=>pa_debug.g_err_stage);
18159 END IF;
18160
18161 -- Check for business rules violations
18162 IF l_debug_mode = 'Y' THEN
18163 pa_debug.g_err_stage:= 'Validating input parameters';
18164 pa_debug.log_message(p_message=>pa_debug.g_err_stage);
18165
18166 pa_debug.g_err_stage:= 'p_project_id = '|| p_project_id;
18167 pa_debug.log_message(p_message => pa_debug.g_err_stage);
18168
18169 pa_debug.g_err_stage:= 'p_structure_version_id = '|| p_structure_version_id;
18170 pa_debug.log_message(p_message => pa_debug.g_err_stage);
18171 END IF;
18172
18173 IF (p_project_id IS NULL) OR
18174 (p_structure_version_id IS NULL)
18175 THEN
18176 IF l_debug_mode = 'Y' THEN
18177 pa_debug.g_err_stage:= 'Some of the mandatory parameters to this API are NULL';
18178 pa_debug.log_message(p_message => pa_debug.g_err_stage);
18179 END IF;
18180 PA_UTILS.ADD_MESSAGE
18181 (p_app_short_name => 'PA',
18182 p_msg_name => 'PA_INV_PARAM_PASSED');
18183 RAISE Invalid_Arg_Exc_WP;
18184 END IF;
18185
18186 pa_proj_task_struc_pub.process_wbs_updates(
18187 p_calling_context => p_calling_context
18188 ,p_project_id => p_project_id
18189 ,p_structure_version_id => p_structure_version_id
18190 ,p_pub_struc_ver_id => p_pub_struc_ver_id
18191 ,p_pub_prog_flag => p_pub_prog_flag --bug 4019845
18192 ,p_rerun_flag => p_rerun_flag -- bug 4589289
18193 ,x_return_status => l_return_status
18194 ,x_msg_count => l_msg_count
18195 ,x_msg_data => l_msg_data
18196 );
18197 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18198 IF l_debug_mode = 'Y' THEN
18199 pa_debug.g_err_stage := 'Error calling process wbs updates API ';
18200 pa_debug.log_message(p_message => pa_debug.g_err_stage);
18201 END IF;
18202 Raise Invalid_Arg_Exc_WP;
18203 END IF;
18204
18205
18206 -- Update to success if the call was successful.
18207 -- It has been decided to update null as the process_code if the
18208 -- process has completed successfully.
18209 update pa_proj_elem_ver_structure
18210 set process_code = NULL,
18211 conc_request_id = l_request_id
18212 where element_version_id = p_structure_version_id
18213 and project_id = p_project_id;
18214
18215
18216 -- Begin fix for Bug # 4373055.
18217
18218 if (p_calling_context = 'CONC_PUBLISH') then
18219
18220 -- Mark the newly created published structure record also with the process code
18221 -- as null.
18222
18223 update pa_proj_elem_ver_structure
18224 set process_code = NULL
18225 , conc_request_id = l_request_id
18226 where element_version_id = p_pub_struc_ver_id
18227 and project_id = p_project_id;
18228
18229 end if;
18230
18231 -- End fix for Bug # 4373055.
18232
18233 -- Commit so that the changes that have been done are commited.
18234 commit;
18235
18236 IF l_debug_mode = 'Y' THEN
18237 pa_debug.g_err_stage:= 'Exiting PROCESS_WBS_UPDATES_CONC';
18238 pa_debug.log_message(p_message=>pa_debug.g_err_stage);
18239
18240 pa_debug.reset_curr_function;
18241 END IF;
18242 EXCEPTION
18243
18244 WHEN Invalid_Arg_Exc_WP THEN
18245
18246 l_msg_count := FND_MSG_PUB.count_msg;
18247 retcode := '2';
18248
18249 IF l_msg_count >= 1 THEN
18250 PA_INTERFACE_UTILS_PUB.get_messages
18251 (p_encoded => FND_API.G_FALSE -- Bug 4348814 : Made false from true FND_API.G_TRUE
18252 ,p_msg_index => 1
18253 ,p_msg_count => l_msg_count
18254 ,p_msg_data => l_msg_data
18255 ,p_data => l_data
18256 ,p_msg_index_out => l_msg_index_out);
18257 errbuf := l_data;
18258 END IF;
18259
18260 rollback to process_wbs_updates_conc;
18261
18262
18263 -- Begin fix for Bug # 4373055.
18264
18265 /*
18266
18267 update pa_proj_elem_ver_structure
18268 set process_code = 'WUE',
18269 conc_request_id = l_request_id
18270 where element_version_id = p_structure_version_id
18271 and project_id = p_project_id;
18272
18273 commit;
18274
18275 */
18276 -- Bug 4392189 : Added l_calling_context
18277 IF p_calling_context IN ('CONC_APPLY_PROGRESS', 'ONLINE_APPLY_PROGRESS') THEN
18278 l_calling_context := 'APPLY_PROGRESS';
18279 ELSE
18280 l_calling_context := p_calling_context;
18281 END IF;
18282
18283 PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_ERR(
18284 p_project_id => p_project_id
18285 , p_structure_version_id => p_structure_version_id
18286 , p_calling_context => l_calling_context
18287 , p_conc_request_id => l_request_id
18288 , x_return_status => l_ret_status);
18289
18290 if (p_calling_context = 'CONC_PUBLISH') then
18291
18292 -- Mark the newly created published structure record also with the process code
18293 -- and request_id.
18294
18295 PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_ERR(
18296 p_project_id => p_project_id
18297 , p_structure_version_id => p_pub_struc_ver_id
18298 , p_calling_context => l_calling_context
18299 , p_conc_request_id => l_request_id
18300 , x_return_status => l_ret_status);
18301
18302 end if;
18303
18304 -- End fix for Bug # 4373055.
18305
18306 -- Bug # 4655059.
18307
18308 -- If the process that errored out is process_updates then set the process_update_wbs_flag to 'Y'.
18309
18310 if (p_calling_context = 'CONC_UPDATE') then
18311
18312 pa_proj_task_struc_pub.set_update_wbs_flag
18313 (p_project_id => p_project_id
18314 ,p_structure_version_id => p_structure_version_id
18315 ,p_update_wbs_flag => 'Y'
18316 ,x_return_status => l_return_status
18317 ,x_msg_count => l_msg_count
18318 ,x_msg_data => l_msg_data);
18319
18320 if (l_return_status = FND_API.G_RET_STS_SUCCESS) then
18321
18322 commit;
18323
18324 end if;
18325
18326 end if;
18327
18328 -- Bug # 4655059.
18329
18330 IF l_debug_mode = 'Y' THEN
18331 pa_debug.reset_curr_function;
18332 END IF;
18333 RETURN;
18334
18335 WHEN others THEN
18336
18337 retcode := '2';
18338 errbuf := SQLERRM;
18339
18340 FND_MSG_PUB.add_exc_msg
18341 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
18342 ,p_procedure_name => 'PROCESS_WBS_UPDATES_CONC'
18343 ,p_error_text => errbuf);
18344
18345 rollback to process_wbs_updates_conc;
18346
18347 -- Begin fix for Bug # 4373055.
18348
18349 /*
18350
18351 update pa_proj_elem_ver_structure
18352 set process_code = 'WUE',
18353 conc_request_id = l_request_id
18354 where element_version_id = p_structure_version_id
18355 and project_id = p_project_id;
18356
18357 commit;
18358
18359 */
18360
18361 -- Bug 4392189 : Added l_calling_context
18362 IF p_calling_context IN ('CONC_APPLY_PROGRESS', 'ONLINE_APPLY_PROGRESS') THEN
18363 l_calling_context := 'APPLY_PROGRESS';
18364 ELSE
18365 l_calling_context := p_calling_context;
18366 END IF;
18367
18368 PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_ERR(
18369 p_project_id => p_project_id
18370 , p_structure_version_id => p_structure_version_id
18371 , p_calling_context => l_calling_context
18372 , p_conc_request_id => l_request_id
18373 , x_return_status => l_ret_status);
18374
18375 if (p_calling_context = 'CONC_PUBLISH') then
18376
18377 -- Mark the newly created published structure record also with the process code
18378 -- and request_id.
18379
18380 PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_ERR(
18381 p_project_id => p_project_id
18382 , p_structure_version_id => p_pub_struc_ver_id
18383 , p_calling_context => l_calling_context
18384 , p_conc_request_id => l_request_id
18385 , x_return_status => l_ret_status);
18386
18387 end if;
18388
18389 -- End fix for Bug # 4373055.
18390
18391 -- Bug # 4655059.
18392
18393 -- If the process that errored out is process_updates then set the process_update_wbs_flag to 'Y'.
18394
18395 if (p_calling_context = 'CONC_UPDATE') then
18396
18397 pa_proj_task_struc_pub.set_update_wbs_flag
18398 (p_project_id => p_project_id
18399 ,p_structure_version_id => p_structure_version_id
18400 ,p_update_wbs_flag => 'Y'
18401 ,x_return_status => l_return_status
18402 ,x_msg_count => l_msg_count
18403 ,x_msg_data => l_msg_data);
18404
18405 if (l_return_status = FND_API.G_RET_STS_SUCCESS) then
18406
18407 commit;
18408
18409 end if;
18410
18411 end if;
18412
18413 -- Bug # 4655059.
18414
18415 IF l_debug_mode = 'Y' THEN
18416 pa_debug.g_err_stage:= 'Unexpected Error'||errbuf;
18417 pa_debug.log_message(pa_debug.g_err_stage);
18418 pa_debug.reset_curr_function;
18419 END IF;
18420 -- Bug 4360407 : We should no do RAISE, otherweise concurrent process will not error out
18421 --RAISE;
18422 RETURN;
18423 END PROCESS_WBS_UPDATES_CONC;
18424
18425 /*==================================================================
18426 This API takes care of calling the plannable tasks api and the task
18427 weightage api depending on the context. For a financial only structure
18428 version, only the plannable tasks api is called and for a workplan only
18429 structure version only the task weighting api is called. This api will
18430 be called from the concurrent executable and can be called from the other
18431 places where online processing is expected.
18432 Bug 3010538 : New API for the Task Weighting Enhancement.
18433 ==================================================================*/
18434
18435 PROCEDURE PROCESS_WBS_UPDATES
18436 ( p_api_version_number IN NUMBER := 1.0
18437 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
18438 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
18439 ,p_calling_context IN VARCHAR2 := 'UPDATE'
18440 ,p_project_id IN pa_projects_all.project_id%TYPE
18441 ,p_structure_version_id IN pa_proj_element_versions.element_version_id%TYPE
18442 ,p_pub_struc_ver_id IN NUMBER := NULL
18443 ,p_pub_prog_flag IN VARCHAR2 := 'Y' --bug 4019845
18444 ,p_rerun_flag IN VARCHAR2 := null --bug 4589289
18445 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
18446 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
18447 ,x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
18448 AS
18449
18450 -- Cursors Required.
18451
18452 -- This cursor is used to decide if the structure version corresponds to a particular
18453 -- Structure type. Depending on this the plannable tasks api and the task weightage calculation
18454 -- api will be called.
18455 CURSOR cur_structure_type(c_project_id pa_projects_all.project_id%TYPE,
18456 c_structure_version_id pa_proj_element_versions.element_version_id%TYPE,
18457 c_structure_type pa_structure_types.structure_type%TYPE)
18458 IS
18459 SELECT 'Y'
18460 FROM pa_proj_element_versions ver,
18461 pa_proj_structure_types pst,
18462 pa_structure_types st
18463 WHERE ver.element_version_id = c_structure_version_id
18464 AND ver.project_id = c_project_id
18465 AND pst.proj_element_id = ver.proj_element_id
18466 AND pst.structure_type_id = st.structure_type_id
18467 AND st.structure_type = c_structure_type;
18468
18469 l_update_wbs_flag pa_proj_elem_ver_structure.process_update_wbs_flag%TYPE;
18470 l_structure_type_flag VARCHAR2(1);
18471 l_request_id pa_proj_elem_ver_structure.conc_request_id%TYPE;
18472
18473 l_msg_count NUMBER := 0;
18474 l_data VARCHAR2(2000);
18475 l_msg_data VARCHAR2(2000);
18476 l_msg_index_out NUMBER;
18477 l_debug_mode VARCHAR2(1);
18478
18479 l_debug_level2 CONSTANT NUMBER := 2;
18480 l_debug_level3 CONSTANT NUMBER := 3;
18481 l_debug_level4 CONSTANT NUMBER := 4;
18482 l_debug_level5 CONSTANT NUMBER := 5;
18483
18484 l_publish_flag VARCHAR2(1);
18485 l_online_flag VARCHAR2(1);
18486 l_pub_ver_id NUMBER;
18487 l_prev_ver_id NUMBER;
18488 l_proc_code VARCHAR2(30);
18489 l_msg_code VARCHAR2(30);
18490
18491 --bug 3762882
18492 CURSOR get_prev_published_ver(c_struc_ver_id NUMBER) IS
18493 select a.element_version_id
18494 from pa_proj_elem_ver_structure a,
18495 pa_proj_element_versions b
18496 WHERE a.project_id = p_project_id
18497 AND a.proj_element_id = b.proj_element_id
18498 AND b.element_version_id = c_struc_ver_id
18499 AND a.LATEST_EFF_PUBLISHED_FLAG <> 'Y'
18500 AND a.STATUS_CODE = 'STRUCTURE_PUBLISHED'
18501 ORDER BY published_date desc;
18502 --end bug 3762882
18503
18504 --bug 4019845
18505 CURSOR get_scheduled_dates(c_project_id NUMBER, c_structure_version_id NUMBER)
18506 IS
18507 SELECT scheduled_start_date, scheduled_finish_date
18508 FROM pa_proj_elem_ver_schedule
18509 WHERE project_id = c_project_id
18510 AND element_version_id = c_structure_version_id;
18511
18512 CURSOR get_proj_rec_ver_number(c_project_id NUMBER)
18513 IS
18514 SELECT record_version_number
18515 FROM pa_projects_all
18516 WHERE project_id = c_project_id;
18517
18518 CURSOR get_struc_id(c_project_id NUMBER, c_struc_ver_id NUMBER) IS
18519 select pevs.proj_element_id
18520 from pa_proj_elem_ver_structure pevs
18521 where pevs.element_version_id = c_struc_ver_id
18522 and pevs.project_id = c_project_id;
18523
18524 --bug 4472071
18525 -- bug 6414995 : Cursor query changed by adding join with pa_fin_plan_types_b
18526 CURSOR cur_chk_pji_failed
18527 IS
18528 SELECT 'Y'
18529 FROM pji_pjp_wbs_header h,
18530 pa_fin_plan_types_b fin
18531 WHERE h.wbs_version_id= p_pub_struc_ver_id
18532 AND fin.use_for_workplan_flag='Y'
18533 AND h.plan_type_id=fin.fin_plan_type_id;
18534 /*
18535 SELECT 'Y'
18536
18537 FROM pji_pjp_wbs_header
18538 WHERE wbs_version_id= p_pub_struc_ver_id;
18539 */
18540
18541 l_dummy_pji_char VARCHAR2(1);
18542 --bug 4472071
18543
18544
18545 l_project_id NUMBER := p_project_id;
18546 l_responsibility_id NUMBER := FND_GLOBAL.resp_id;
18547 l_resp_appl_id NUMBER := FND_GLOBAL.resp_appl_id; -- 5233777
18548 l_financial_type VARCHAR2(1);
18549 l_workplan_type VARCHAR2(1);
18550 l_scheduled_start_date DATE;
18551 l_scheduled_finish_date DATE;
18552 l_proj_record_ver_number NUMBER;
18553 l_proj_start_date DATE;
18554 l_proj_completion_date DATE;
18555 l_proj_element_id NUMBER; --structure id
18556 l_as_of_date DATE;
18557 l_task_weight_basis_code pa_proj_progress_attr.task_weight_basis_code%TYPE;
18558 l_share_flag VARCHAR2(1) := 'N';
18559 l_copy_actuals_flag VARCHAR2(1) := 'Y';
18560 l_upd_new_elem_ver_id_flag VARCHAR2(1) := 'Y'; --rtarway, 3951024
18561 l_i_msg_count NUMBER := 0;
18562 l_i_msg_data PA_VC_1000_2000:= PA_VC_1000_2000(1);
18563 l_i_return_status VARCHAR2(1);
18564 l_user_id NUMBER := FND_GLOBAL.USER_ID;-- rtarway, 4030358, changed from login id to user_id
18565 --end bug 4019845
18566 l_out_online_flag VARCHAR2(1);
18567
18568 l_plan_version_id NUMBER; --bug 4587145
18569 l_pub_wp_ok VARCHAR2(1) := 'N'; --bug 5029112
18570
18571 BEGIN
18572 IF p_commit = FND_API.G_TRUE THEN
18573 savepoint process_wbs_updates;
18574 END IF;
18575
18576 IF p_init_msg_list = FND_API.G_TRUE THEN
18577 FND_MSG_PUB.initialize;
18578 END IF;
18579
18580 x_msg_count := 0;
18581 x_return_status := FND_API.G_RET_STS_SUCCESS;
18582 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
18583
18584 IF l_debug_mode = 'Y' THEN
18585 pa_debug.write(G_PKG_NAME, 'Entering PROCESS_WBS_UPDATES', 3);
18586 pa_debug.set_curr_function( p_function => 'PROCESS_WBS_UPDATES', p_debug_mode => l_debug_mode );
18587 END IF;
18588
18589 -- Check for business rules violations
18590 IF l_debug_mode = 'Y' THEN
18591 pa_debug.write(G_PKG_NAME, 'Validating input parameters', 3);
18592 pa_debug.write(G_PKG_NAME, 'p_calling_context = '|| p_calling_context, 3);
18593 pa_debug.write(G_PKG_NAME, 'p_project_id = '|| p_project_id, 3);
18594 pa_debug.write(G_PKG_NAME, 'p_structure_version_id = '|| p_structure_version_id, 3);
18595 pa_debug.write(G_PKG_NAME, 'p_pub_struc_ver_id = '|| p_pub_struc_ver_id, 3);
18596 pa_debug.write(G_PKG_NAME, 'p_pub_prog_flag = '|| p_pub_prog_flag, 3);
18597 END IF;
18598
18599 -- Throw an error if any of the mandatory parameter is NULL.
18600 IF (p_project_id IS NULL) OR (p_structure_version_id IS NULL) THEN
18601 PA_UTILS.ADD_MESSAGE
18602 (p_app_short_name => 'PA',
18603 p_msg_name => 'PA_INV_PARAM_PASSED');
18604 RAISE Invalid_Arg_Exc_WP;
18605 END IF;
18606
18607 l_update_wbs_flag := pa_project_structure_utils.GET_UPDATE_WBS_FLAG(p_project_id => p_project_id,
18608 p_structure_version_id => p_structure_version_id);
18609
18610 IF l_debug_mode = 'Y' THEN
18611 pa_debug.write(G_PKG_NAME, 'l_update_wbs_flag = '|| l_update_wbs_flag, 3);
18612 END IF;
18613
18614 --bug 4409337 moved from below to make use of some of these variables for bugfix.
18615 l_workplan_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
18616 l_financial_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'FINANCIAL');
18617 l_share_flag := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(l_project_id);
18618
18619
18620 IF l_debug_mode = 'Y' THEN
18621 pa_debug.write(G_PKG_NAME, 'l_workplan_type = '|| l_workplan_type, 3);
18622 pa_debug.write(G_PKG_NAME, 'l_financial_type = '|| l_financial_type, 3);
18623 pa_debug.write(G_PKG_NAME, 'l_share_flag = '|| l_share_flag, 3);
18624 END IF;
18625 --bug 4409337
18626
18627 IF (p_calling_context = 'ASGMT_PLAN_CHANGE') THEN ---bug 4492493
18628 --- find the as_of_date for which to rollup and
18629 --- rollup method
18630 l_task_weight_basis_code := pa_progress_utils.get_task_weighting_basis(p_project_id => p_project_id);
18631 begin
18632 select max(as_of_date)
18633 into l_as_of_date
18634 from pa_progress_rollup ppr
18635 where ppr.project_id = p_project_id
18636 and ppr.structure_version_id is null
18637 and ppr.structure_type = 'WORKPLAN'
18638 and ppr.current_flag <> 'W'
18639 ;
18640 exception when others then
18641 return;
18642 end;
18643
18644 IF l_debug_mode = 'Y' THEN
18645 pa_debug.write(G_PKG_NAME, 'Calling populate_pji_tab_for_plan' , 3);
18646 END IF;
18647
18648 pa_progress_pub.populate_pji_tab_for_plan(
18649 p_init_msg_list => FND_API.G_FALSE
18650 ,p_commit => FND_API.G_FALSE
18651 ,p_project_id => p_Project_ID
18652 ,p_structure_version_id => p_structure_version_id
18653 ,p_baselined_str_ver_id => p_structure_version_id
18654 ,p_structure_type => 'WORKPLAN'
18655 ,p_program_rollup_flag => 'Y' -- 4392189
18656 ,p_calling_context => 'SUMMARIZE' -- 4392189
18657 ,x_return_status => x_return_status
18658 ,x_msg_count => x_msg_count
18659 ,x_msg_data => x_msg_data);
18660 IF l_debug_mode = 'Y' THEN
18661 pa_debug.write(G_PKG_NAME, 'After populate_pji_tab_for_plan x_return_status='|| x_return_status, 3);
18662 END IF;
18663
18664 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
18665 raise Invalid_Arg_Exc_WP;
18666 END IF;
18667 IF l_debug_mode = 'Y' THEN
18668 pa_debug.write(G_PKG_NAME, 'Calling ROLLUP_PROGRESS_PVT', 3);
18669 END IF;
18670
18671 PA_PROGRESS_PVT.ROLLUP_PROGRESS_PVT(
18672 p_init_msg_list => FND_API.G_FALSE
18673 ,p_commit => FND_API.G_FALSE
18674 ,p_project_id => p_Project_ID
18675 ,p_structure_version_id => p_structure_version_id
18676 ,p_as_of_date => l_as_of_date
18677 ,p_wp_rollup_method => l_task_weight_basis_code
18678 ,p_rollup_entire_wbs => 'Y'
18679 ,p_working_wp_prog_flag => 'N'
18680 ,x_return_status => x_return_status
18681 ,x_msg_count => x_msg_count
18682 ,x_msg_data => x_msg_data);
18683
18684 IF l_debug_mode = 'Y' THEN
18685 pa_debug.write(G_PKG_NAME, 'After ROLLUP_PROGRESS_PVT x_return_status='|| x_return_status, 3);
18686 END IF;
18687
18688 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
18689 raise Invalid_Arg_Exc_WP;
18690 END IF;
18691 IF l_debug_mode = 'Y' THEN
18692 pa_debug.write(G_PKG_NAME, 'Calling PROGRAM_ROLLUP_PVT', 3);
18693 END IF;
18694
18695 PA_PROGRESS_PVT.PROGRAM_ROLLUP_PVT(
18696 p_init_msg_list => FND_API.G_FALSE
18697 ,p_commit => FND_API.G_FALSE
18698 ,p_validate_only => FND_API.G_FALSE
18699 ,p_calling_module => p_calling_context
18700 ,p_project_id => p_Project_ID
18701 ,p_as_of_date => l_as_of_date
18702 ,p_structure_type => 'WORKPLAN'
18703 ,p_structure_ver_id => p_structure_version_id
18704 ,x_return_status => x_return_status
18705 ,x_msg_count => x_msg_count
18706 ,x_msg_data => x_msg_data);
18707
18708 IF l_debug_mode = 'Y' THEN
18709 pa_debug.write(G_PKG_NAME, 'After PROGRAM_ROLLUP_PVT x_return_status='|| x_return_status, 3);
18710 END IF;
18711
18712 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
18713 raise Invalid_Arg_Exc_WP;
18714 END IF; --- bug 4492493
18715
18716 -- Begin code to fix Bug # 4262985.
18717 -- Bug 4392189 : Added call of WBS_MAINT in APPLY_PROGRESS Context
18718 ELSIF (p_calling_context = 'ONLINE_APPLY_PROGRESS' OR p_calling_context = 'CONC_APPLY_PROGRESS') THEN
18719 IF p_calling_context = 'ONLINE_APPLY_PROGRESS' THEN
18720 l_online_flag := 'Y';
18721 ELSE
18722 l_online_flag := 'N';
18723 END IF;
18724
18725 IF l_update_wbs_flag = 'Y' THEN
18726 IF l_debug_mode = 'Y' THEN
18727 pa_debug.write(G_PKG_NAME, 'Calling PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT with l_online_flag='||l_online_flag, 3);
18728 END IF;
18729
18730 BEGIN
18731 -- l_online_flag = 'Y', then it is online
18732 -- 'N' , concurrent
18733 -- Even if it is Y, then wbs_maint defers it for Financial and version disabled case
18734
18735 PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT(
18736 p_new_struct_ver_id => p_structure_version_id
18737 ,p_old_struct_ver_id => p_structure_version_id
18738 ,p_project_id => p_project_id
18739 ,p_online_flag => l_online_flag
18740 ,p_calling_context => 'APPLY_PROGRESS'
18741 ,p_rerun_flag => p_rerun_flag --bug 4589289
18742 ,x_request_id => l_request_id
18743 ,x_processing_code => l_proc_code
18744 ,x_msg_code => l_msg_Code
18745 ,x_return_status => x_return_status
18746 ,x_online_flag => l_out_online_flag
18747 );
18748 IF l_debug_mode = 'Y' THEN
18749 pa_debug.write(G_PKG_NAME, 'After Call PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT with x_return_status='||x_return_status||' l_out_online_flag='||l_out_online_flag, 3);
18750 END IF;
18751 EXCEPTION
18752 WHEN OTHERS THEN
18753 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
18754 p_procedure_name => 'PROCESS_WBS_UDPATES',
18755 p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT Failed in Apply Progress Mode: SQLERRM='||SQLERRM,1,240));
18756 RAISE Invalid_Arg_Exc_WP;
18757 END;
18758
18759 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18760 raise Invalid_Arg_Exc_WP;
18761 END IF;
18762 END IF; -- l_update_wbs_flag = 'Y'
18763
18764
18765 IF NVL(l_update_wbs_flag,'N') = 'N' OR NVL(l_out_online_flag, 'Y') <> 'N' THEN
18766 IF l_debug_mode = 'Y' THEN
18767 pa_debug.write(G_PKG_NAME, 'Calling PA_PROGRESS_PUB.APPLY_LP_PROG_ON_CWV', 3);
18768 END IF;
18769
18770 PA_PROGRESS_PUB.APPLY_LP_PROG_ON_CWV
18771 (p_project_id => p_project_id
18772 ,p_working_str_version_id => p_structure_version_id
18773 ,x_return_status => x_return_status
18774 ,x_msg_count => x_msg_count
18775 ,x_msg_data => x_msg_data);
18776
18777 IF l_debug_mode = 'Y' THEN
18778 pa_debug.write(G_PKG_NAME, 'After Call PA_PROGRESS_PUB.APPLY_LP_PROG_ON_CWV x_return_status='||x_return_status, 3);
18779 END IF;
18780
18781 END IF;
18782
18783 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18784 raise Invalid_Arg_Exc_WP;
18785 END IF;
18786
18787 ELSE -- IF (p_calling_context = 'ONLINE_APPLY_PROGRESS' OR p_calling_context = 'CONC_APPLY_PROGRESS') THEN
18788
18789 -- End code to fix Bug # 4262985.
18790
18791
18792 --hsiu: bug 3035902
18793 --commented condition because there can be partial process
18794 --on financial planning API. Condition is added after processing
18795 --financial planning tasks.
18796 /*
18797 IF l_update_wbs_flag = 'N' THEN
18798 -- No further processing is required for this structure version. Return.
18799 -- TWUT.
18800 IF l_debug_mode = 'Y' THEN
18801 pa_debug.g_err_stage:= 'No updates required for this structure version.';
18802 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18803 END IF;
18804 RETURN;
18805 END IF;
18806 */
18807
18808 -- Get the request id. If the request id returned is -1 then set it to null.
18809 l_request_id := FND_GLOBAL.CONC_REQUEST_ID;
18810 IF l_request_id = -1 THEN
18811 l_request_id := NULL;
18812 END IF;
18813
18814 -- Check if the structure version to be processed corresponds to the FINANCIAL structure.
18815 -- If yes, do the processing required for the financial version.
18816 OPEN cur_structure_type(p_project_id, p_structure_version_id,'FINANCIAL');
18817 FETCH cur_structure_type INTO l_structure_type_flag;
18818 CLOSE cur_structure_type;
18819
18820 -- TWUT.
18821 IF l_debug_mode = 'Y' THEN
18822 pa_debug.write(G_PKG_NAME, 'Financial structure type flag '||l_structure_type_flag, 3);
18823 END IF;
18824
18825 /*
18826 IF nvl(l_structure_type_flag,'N') = 'Y' THEN
18827 x_return_status := FND_API.G_RET_STS_SUCCESS;
18828 -- Call the financial planning API.
18829 pa_fp_refresh_elements_pub.refresh_planning_elements(
18830 p_project_id => p_project_id
18831 ,p_request_id => l_request_id
18832 ,x_return_status => x_return_status
18833 ,x_msg_count => x_msg_count
18834 ,x_msg_data => x_msg_data
18835 );
18836 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18837 IF l_debug_mode = 'Y' THEN
18838 pa_debug.g_err_stage := 'Error calling the financial planning API';
18839 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
18840 END IF;
18841 Raise Invalid_Arg_Exc_WP;
18842 END IF;
18843 END IF;
18844 */
18845
18846 -- Begin fix for Bug # 4409337.
18847
18848 if nvl(l_structure_type_flag,'N') = 'Y'
18849 AND p_calling_context IN ( 'ONLINE_UPDATE', 'CONC_UPDATE' ) --bug 4472071
18850 AND ( l_share_flag = 'N' OR l_workplan_type = 'N' ) --call WBS maint only if the project is either split financial or financial only.
18851 then
18852
18853 x_return_status := FND_API.G_RET_STS_SUCCESS;
18854
18855 -- Call the PJI API.
18856
18857 PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT(
18858 p_new_struct_ver_id => p_structure_version_id
18859 ,p_old_struct_ver_id => p_structure_version_id
18860 ,p_project_id => p_project_id
18861 ,p_online_flag => l_online_flag
18862 ,p_calling_context => p_calling_context
18863 ,p_rerun_flag => p_rerun_flag --bug 4589289
18864 ,x_request_id => l_request_id
18865 ,x_processing_code => l_proc_code
18866 ,x_msg_code => l_msg_Code
18867 ,x_return_status => x_return_status
18868 ,x_online_flag => l_out_online_flag
18869 );
18870
18871 if x_return_status <> FND_API.G_RET_STS_SUCCESS then
18872
18873 if l_debug_mode = 'Y' then
18874
18875 pa_debug.g_err_stage := 'Error calling the financial planning API';
18876 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
18877
18878 end if;
18879
18880 Raise Invalid_Arg_Exc_WP;
18881 end if;
18882
18883 end if;
18884
18885 -- End fix for Bug # 4409337.
18886
18887 --hsiu: bug 3035902
18888 --Adding condition because there can be partial process
18889 --on financial planning API and we should not check the flag
18890 --for financial planning.
18891 --hsiu: commented for PJI integration
18892 /*
18893 IF l_update_wbs_flag = 'N' THEN
18894 -- No further processing is required for this structure version. Return.
18895 -- TWUT.
18896 IF l_debug_mode = 'Y' THEN
18897 pa_debug.g_err_stage:= 'No updates required for this structure version.';
18898 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18899 END IF;
18900 RETURN;
18901 END IF;
18902 */
18903 --end bug 3035902 changes
18904
18905 -- Re initilaize the local as it is again used for a cursor fetch.
18906 -- TWUT
18907 l_structure_type_flag := NULL;
18908
18909 -- Check if the sructure version to be processed corresponds to the WORKPLAN structure.
18910 -- If yes, do the processing required for the workplan version.
18911 OPEN cur_structure_type(p_project_id, p_structure_version_id, 'WORKPLAN');
18912 FETCH cur_structure_type INTO l_structure_type_flag;
18913 CLOSE cur_structure_type;
18914
18915 -- TWUT.
18916 IF l_debug_mode = 'Y' THEN
18917 pa_debug.g_err_stage:= 'Workplan structure type flag '||l_structure_type_flag;
18918 pa_debug.write(G_PKG_NAME, 'Workplan structure type flag '||l_structure_type_flag, 3);
18919 END IF;
18920
18921 IF p_calling_context <> 'COPY_PROJECT' THEN --bug 3035902 maansari
18922 --PJI changes
18923 --bug
18924 IF p_calling_context = 'ONLINE_PUBLISH' THEN
18925 --bug 3762882
18926 OPEN get_prev_published_ver(p_pub_struc_ver_id);
18927 FETCH get_prev_published_ver INTO l_prev_ver_id;
18928 CLOSE get_prev_published_ver;
18929
18930 --bug 4019845
18931 --set current published as working for edit
18932
18933 UPDATE pa_proj_elem_ver_structure
18934 SET status_code = 'STRUCTURE_WORKING',
18935 LOCKED_BY_PERSON_ID = (select locked_by_person_id
18936 from pa_proj_elem_ver_structure
18937 where project_id = l_project_id
18938 and element_version_id = p_structure_version_id),
18939 LOCK_STATUS_CODE = 'LOCKED'
18940 WHERE project_id = l_project_id
18941 AND element_version_id = p_pub_struc_ver_id;
18942
18943 --end bug 4019845
18944 --end bug 3762882
18945 l_pub_ver_id := p_pub_struc_ver_id;
18946 l_online_flag := 'Y';
18947 l_publish_flag := 'Y';
18948 ELSIF p_calling_context = 'ONLINE_UPDATE' THEN
18949 --bug 3574457: changed to p_structure_version_id
18950 l_pub_ver_id := p_structure_version_id;
18951 l_online_flag := 'Y';
18952 l_publish_flag := 'N';
18953 ELSIF p_calling_context = 'CONC_PUBLISH' THEN
18954 --bug 3574457: changed to p_pub_struc_ver_id
18955 --bug 3762882
18956
18957 OPEN get_prev_published_ver(p_pub_struc_ver_id);
18958 FETCH get_prev_published_ver INTO l_prev_ver_id;
18959 CLOSE get_prev_published_ver;
18960
18961 --bug 4019845
18962 --set current published as working for edit
18963
18964 UPDATE pa_proj_elem_ver_structure
18965 SET status_code = 'STRUCTURE_WORKING',
18966 LOCKED_BY_PERSON_ID = (select locked_by_person_id
18967 from pa_proj_elem_ver_structure
18968 where project_id = l_project_id
18969 and element_version_id = p_structure_version_id),
18970 LOCK_STATUS_CODE = 'LOCKED'
18971 WHERE project_id = l_project_id
18972 AND element_version_id = p_pub_struc_ver_id;
18973
18974 --end bug 4019845
18975 --end bug 3762882
18976
18977 l_pub_ver_id := p_pub_struc_ver_id;
18978 l_online_flag := 'N';
18979 l_publish_flag := 'Y';
18980 ELSIF p_calling_context = 'CONC_UPDATE' THEN
18981 l_pub_ver_id := p_structure_version_id;
18982 l_online_flag := 'N';
18983 l_publish_flag := 'N';
18984 END IF;
18985
18986 -- Bug 3762882 : This code should be commented as FP is also
18987 -- pushing actuals for resource assignments so we should not push it for tasks here.
18988 -- BEGIN Bug 4284444 : Commented
18989
18990 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N'; --4149392 fixed during fixing 4186512
18991
18992 --bug 4019845
18993 IF (l_publish_flag = 'Y') THEN
18994 --*******************************************
18995 --Process WBS in PUBLISH mode
18996 --*******************************************
18997
18998 -- bug 5118313 Before proceding further with publishing, first correct the WBS on the working version.
18999 --For performance improvements, PJI copies the WBS from working version to the publish version and hence a call to plan update will correct the data on working version before it gets copied to the published version.
19000
19001 --bug 4587145 Call plan update one more time for working version in the publish mode.
19002 --This call is required in the publish if a workplan is published without running process WBS update after making some
19003 --wbs changes like indent/outdent/copy/move.
19004 BEGIN
19005
19006 BEGIN
19007
19008 IF l_debug_mode = 'Y' THEN
19009 pa_debug.write(G_PKG_NAME, 'Calling Pa_Fp_wp_gen_amt_utils.get_wp_version_id in PUBLISH mode for workign version', 3);
19010 END IF;
19011
19012 l_plan_version_id := Pa_Fp_wp_gen_amt_utils.get_wp_version_id(
19013 p_project_id => l_project_id,
19014 p_plan_type_id => -1,
19015 p_proj_str_ver_id => p_structure_version_id) ;
19016
19017 IF l_debug_mode = 'Y' THEN
19018 pa_debug.write(G_PKG_NAME, 'l_plan_version_id in UPDATE mode for working version='||l_plan_version_id, 3);
19019 END IF;
19020
19021 EXCEPTION
19022 WHEN OTHERS THEN
19023 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19024 p_procedure_name => 'PROCESS_WBS_UPDATES',
19025 p_error_text => SUBSTRB('Call of Pa_Fp_wp_gen_amt_utils.get_wp_version_id is failed for PUBLISH Mode for working '||
19026 'verison: SQLERRM='||SQLERRM,1,120));
19027 RAISE Invalid_Arg_Exc_WP;
19028
19029 END;
19030 --end bug 4587145
19031
19032 IF l_debug_mode = 'Y' THEN
19033 pa_debug.write(G_PKG_NAME, 'Calling PLAN_UPDATE in PUBLISH mode for working version', 3);
19034 END IF;
19035 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := null; --set the flag so that PJI rolls up data on the working version.
19036
19037 PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE (x_msg_code => l_msg_code,
19038 p_plan_version_id => l_plan_version_id, --bug 4587145
19039 x_return_status => x_return_status);
19040
19041 IF l_debug_mode = 'Y' THEN
19042 pa_debug.write(G_PKG_NAME,'After PLAN_UPDATE in PUBLISH mode for working verison x_return_status='||
19043 x_return_status,l_debug_level3);
19044 END IF;
19045 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N'; --Set the flag back to 'N' to bypass any PJI rollup api call untill explicit plan_update gets called.
19046 EXCEPTION
19047 WHEN OTHERS THEN
19048 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19049 p_procedure_name => 'PROCESS_WBS_UPDATES',
19050 p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE failed in PUBLISH mode for'||
19051 ' working verison:SQLERRM='||SQLERRM,1,120));
19052 RAISE Invalid_Arg_Exc_WP;
19053 END;
19054
19055 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
19056 Raise Invalid_Arg_Exc_WP;
19057 END IF;
19058
19059 --end bug 4587145
19060 --end bug 5118313
19061
19062
19063 --bug 4472071 check if PJI summarization failed when WBS_MAIN is called. This means that the following
19064 --api need not run again.
19065 OPEN cur_chk_pji_failed;
19066 FETCH cur_chk_pji_failed INTO l_dummy_pji_char;
19067 IF cur_chk_pji_failed%NOTFOUND
19068 THEN
19069 --bug 4472071
19070 --all code from publishing (before calling process_wbs_updates)
19071
19072 IF l_debug_mode = 'Y' THEN
19073 pa_debug.write(G_PKG_NAME, 'Calling PA_Relationship_Pvt.Copy_Intra_Dependency', 3);
19074 END IF;
19075
19076 PA_Relationship_Pvt.Copy_Intra_Dependency (
19077 P_Source_Ver_Tbl => NULL,
19078 P_Destin_Ver_Tbl => NULL,
19079 P_source_struc_ver_id => p_structure_version_id,
19080 p_dest_struc_ver_id => l_pub_ver_id,
19081 X_Return_Status => X_Return_Status,
19082 X_Msg_Count => X_Msg_Count,
19083 X_Msg_Data => X_Msg_Data
19084 );
19085
19086 IF l_debug_mode = 'Y' THEN
19087 pa_debug.write(G_PKG_NAME, 'After Copy_Intra_Dependency X_Return_Status='||X_Return_Status, 3);
19088 END IF;
19089
19090 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19091 RAISE Invalid_Arg_Exc_WP;
19092 END IF;
19093
19094 IF l_debug_mode = 'Y' THEN
19095 pa_debug.write(G_PKG_NAME, 'Calling Publish_Inter_Proj_Dep', 3);
19096 END IF;
19097
19098 PA_RELATIONSHIP_PVT.Publish_Inter_Proj_Dep ( -- This API needs to be called
19099 p_publishing_struc_ver_id => p_structure_version_id,
19100 p_previous_pub_struc_ver_id => l_prev_ver_id,
19101 p_published_struc_ver_id => l_pub_ver_id,
19102 X_Return_Status => X_Return_Status,
19103 X_Msg_Count => X_Msg_Count,
19104 X_Msg_Data => X_Msg_Data
19105 );
19106
19107 IF l_debug_mode = 'Y' THEN
19108 pa_debug.write(G_PKG_NAME, 'After Publish_Inter_Proj_Dep X_Return_Status='||X_Return_Status, 3);
19109 END IF;
19110
19111 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19112 RAISE Invalid_Arg_Exc_WP;
19113 END IF;
19114
19115 IF l_debug_mode = 'Y' THEN
19116 pa_debug.write(G_PKG_NAME, 'Calling Copy_OG_Lnk_For_Subproj_Ass', 3);
19117 END IF;
19118
19119
19120 PA_RELATIONSHIP_PVT.Copy_OG_Lnk_For_Subproj_Ass(
19121 p_src_str_version_id => p_structure_version_id,
19122 p_dest_str_version_id => l_pub_ver_id, -- Destination Str version id can be of published str also
19123 x_return_status => X_Return_Status,
19124 x_msg_count => X_Msg_Count,
19125 x_msg_data => X_Msg_Data
19126 );
19127
19128
19129 IF l_debug_mode = 'Y' THEN
19130 pa_debug.write(G_PKG_NAME, 'After Copy_OG_Lnk_For_Subproj_Ass X_Return_Status='||X_Return_Status, 3);
19131 END IF;
19132
19133 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19134 RAISE Invalid_Arg_Exc_WP;
19135 END IF;
19136
19137
19138 IF l_debug_mode = 'Y' THEN
19139 pa_debug.write(G_PKG_NAME, 'Calling Move_CI_Lnk_For_subproj_step1', 3);
19140 END IF;
19141
19142 PA_RELATIONSHIP_PVT.Move_CI_Lnk_For_subproj_step1(
19143 p_src_str_version_id => p_structure_version_id,
19144 p_pub_str_version_id => l_pub_ver_id,
19145 p_last_pub_str_version_id => l_prev_ver_id,
19146 x_return_status => x_return_status,
19147 x_msg_count => x_msg_count,
19148 x_msg_data => x_msg_data);
19149
19150 IF l_debug_mode = 'Y' THEN
19151 pa_debug.write(G_PKG_NAME, 'After Move_CI_Lnk_For_subproj_step1 X_Return_Status='||X_Return_Status, 3);
19152 END IF;
19153
19154 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19155 RAISE Invalid_Arg_Exc_WP;
19156 END IF;
19157
19158 IF l_debug_mode = 'Y' THEN
19159 pa_debug.write(G_PKG_NAME, 'Calling copy_mapping', 3);
19160 END IF;
19161
19162
19163 PA_PROJ_STRUC_MAPPING_PUB.copy_mapping(
19164 p_context => 'PUBLISH_VERSION'
19165 ,p_src_project_id => l_project_id
19166 ,p_dest_project_id => l_project_id
19167 ,p_src_str_version_id => p_structure_version_id
19168 ,p_dest_str_version_id => l_pub_ver_id
19169 ,x_return_status => x_return_status
19170 ,x_msg_count => x_msg_count
19171 ,x_msg_data => x_msg_data
19172 );
19173
19174 IF l_debug_mode = 'Y' THEN
19175 pa_debug.write(G_PKG_NAME, 'After copy_mapping X_Return_Status='||X_Return_Status, 3);
19176 END IF;
19177
19178 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19179 RAISE Invalid_Arg_Exc_WP;
19180 END IF;
19181
19182 DECLARE
19183 src_versions_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
19184 dest_versions_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
19185 prev_pub_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); --bug 3847386
19186 BEGIN
19187 src_versions_tab.extend(1);
19188 dest_versions_tab.extend(1);
19189 src_versions_tab(1) := p_structure_version_id;
19190 dest_versions_tab(1) := l_pub_ver_id;
19191 prev_pub_tab.extend(1); --bug 3847386
19192 prev_pub_tab(1) := l_prev_ver_id; --bug 3847386
19193 -- Copies budget versions, resource assignments and budget lines as required
19194 -- for the workplan version.
19195 --Smukka Bug No. 3474141 Date 03/01/2004
19196 --moved PA_FP_COPY_FROM_PKG.copy_wp_budget_versions into plsql block
19197 BEGIN
19198
19199 IF l_debug_mode = 'Y' THEN
19200 pa_debug.write(G_PKG_NAME, 'Calling copy_wp_budget_versions', 3);
19201 END IF;
19202
19203 PA_TASK_ASSIGNMENT_UTILS.g_process_flow := 'PUBLISH'; -- 4646016
19204
19205 PA_FP_COPY_FROM_PKG.copy_wp_budget_versions(
19206 p_source_project_id => l_project_id
19207 ,p_target_project_id => l_project_id
19208 ,p_src_sv_ids_tbl => src_Versions_Tab
19209 ,p_target_sv_ids_tbl => dest_Versions_Tab
19210 ,p_copy_act_from_str_ids_tbl => prev_pub_tab --bug 3847386
19211 --,p_publish_mode => 'Y' --bug 4543744
19212 ,p_copy_mode => 'V' --bug 5118313
19213 ,x_return_status => x_return_status
19214 ,x_msg_count => x_msg_count
19215 ,x_Msg_data => x_msg_data
19216 );
19217
19218 PA_TASK_ASSIGNMENT_UTILS.g_process_flow := null; -- 4646016
19219
19220 IF l_debug_mode = 'Y' THEN
19221 pa_debug.write(G_PKG_NAME, 'After copy_wp_budget_versions X_Return_Status='||X_Return_Status, 3);
19222 END IF;
19223
19224 EXCEPTION
19225 WHEN OTHERS THEN
19226 PA_TASK_ASSIGNMENT_UTILS.g_process_flow := null; -- 4646016
19227 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19228 p_procedure_name => 'PROCESS_WBS_UDPATES',
19229 p_error_text => SUBSTRB('Call of PA_FP_COPY_FROM_PKG.copy_wp_budget_versions failed: SQLERRM='||SQLERRM,1,240));
19230 RAISE Invalid_Arg_Exc_WP;
19231 END;
19232
19233 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19234 RAISE Invalid_Arg_Exc_WP;
19235 END IF;
19236 END;
19237
19238 --moved these calls in the beginning.
19239 --l_workplan_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
19240 --l_financial_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'FINANCIAL');
19241
19242 IF (l_financial_type = 'Y') THEN
19243
19244 SELECT start_date, completion_date
19245 INTO l_proj_start_date, l_proj_completion_date
19246 FROM pa_projects_all
19247 WHERE project_id = l_project_id;
19248
19249 --Call sync-up API
19250
19251 IF l_debug_mode = 'Y' THEN
19252 pa_debug.write(G_PKG_NAME,'Calling import_task', 3);
19253 END IF;
19254
19255 PA_XC_PROJECT_PUB.import_task(
19256 p_project_id => l_project_id
19257 ,p_task_reference => NULL
19258 ,p_task_name => NULL
19259 ,p_task_start_date => NULL
19260 ,p_task_end_date => NULL
19261 ,p_parent_task_reference => NULL
19262 ,p_task_number => NULL
19263 ,p_wbs_level => NULL
19264 ,p_milestone => NULL
19265 ,p_duration => NULL
19266 ,p_duration_unit => NULL
19267 ,p_early_start_date => NULL
19268 ,p_early_finish_date => NULL
19269 ,p_late_start_date => NULL
19270 ,p_late_finish_date => NULL
19271 ,p_display_seq => NULL
19272 ,p_login_user_name => NULL
19273 ,p_critical_path => NULL
19274 ,p_sub_project_id => NULL
19275 ,p_attribute7 => NULL
19276 ,p_attribute8 => NULL
19277 ,p_attribute9 => NULL
19278 ,p_attribute10 => NULL
19279 ,p_progress_report => NULL
19280 ,p_progress_status => NULL
19281 ,p_progress_comments => NULL
19282 ,p_progress_asof_date => NULL
19283 ,p_predecessors => NULL
19284 ,p_structure_version_id => l_pub_ver_id
19285 ,p_calling_mode => 'PUBLISH' );
19286
19287 IF l_debug_mode = 'Y' THEN
19288 pa_debug.g_err_stage:= 'After import_task FND_MSG_PUB.count_msg='|| FND_MSG_PUB.count_msg;
19289 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
19290 END IF;
19291 -- Fix for Bug # 4513291. Added below Exception handling
19292 x_msg_count := FND_MSG_PUB.count_msg;
19293 IF x_msg_count > 0 THEN
19294 raise Invalid_Arg_Exc_WP;
19295 END IF;
19296
19297
19298 IF l_debug_mode = 'Y' THEN
19299 pa_debug.g_err_stage:= 'Calling import_project ';
19300 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
19301 END IF;
19302
19303 l_i_msg_count := 0;
19304 l_i_return_status := 'S'; -- Fix for Bug # 4513291.
19305 PA_XC_PROJECT_PUB.import_project(
19306 p_user_id => l_user_id
19307 ,p_commit => 'N'
19308 ,p_project_id => l_project_id
19309 ,p_project_mpx_start_date => fnd_date.date_to_canonical(l_proj_start_date)
19310 ,p_project_mpx_end_date => fnd_date.date_to_canonical(l_proj_completion_date)
19311 ,p_task_mgr_override => NULL
19312 ,p_task_pgs_override => NULL
19313 ,p_process_id => NULL
19314 ,p_language => NULL
19315 ,p_delimiter => NULL
19316 ,p_responsibility_id => l_responsibility_id
19317 ,p_structure_id => NULL
19318 ,p_structure_version_id => l_pub_ver_id
19319 ,p_calling_mode => 'PUBLISH'
19320 ,p_resp_appl_id => l_resp_appl_id -- 5233777
19321 ,p_debug_mode => l_debug_mode -- Fix for Bug # 4513291.
19322 ,x_msg_count => l_i_msg_count
19323 ,x_msg_data => l_i_msg_data
19324 ,x_return_status => l_i_return_status);
19325
19326 IF l_debug_mode = 'Y' THEN
19327 pa_debug.g_err_stage:= 'After import_project FND_MSG_PUB.count_msg='|| FND_MSG_PUB.count_msg;
19328 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
19329 pa_debug.write(G_PKG_NAME,'l_i_return_status='||l_i_return_status,l_debug_level3);
19330 -- Fix for Bug # 4513291.
19331 pa_debug.write(G_PKG_NAME,'l_i_msg_count='||l_i_msg_count,l_debug_level3);
19332 -- Fix for Bug # 4513291.
19333 END IF;
19334
19335 l_msg_count := FND_MSG_PUB.count_msg;
19336 --IF l_msg_count > 0 THEN -- Fix for Bug # 4513291.
19337 IF l_msg_count > 0 OR l_i_return_status <> 'S' OR l_i_msg_count > 0 THEN -- Fix for Bug # 4513291.
19338 x_msg_count := l_msg_count;
19339 raise Invalid_Arg_Exc_WP;
19340 END IF;
19341 END IF; --if financial type = Y
19342
19343 --bug 4472071
19344 END IF;
19345 CLOSE cur_chk_pji_failed;
19346 --bug 4472071
19347
19348 --bug 4555289 moved here to avoid multiple working versions.
19349 --if there was a failure in PJI then the following code pieces were not
19350 --getting executed hence there were multiple working verisons.
19351 --set published version back to published status
19352 UPDATE pa_proj_elem_ver_structure
19353 SET status_code = 'STRUCTURE_PUBLISHED',
19354 LOCKED_BY_PERSON_ID = NULL,
19355 LOCK_STATUS_CODE = 'UNLOCKED'
19356 WHERE project_id = l_project_id
19357 AND element_version_id = l_pub_ver_id;
19358
19359 --moved this code here from above for bugfix 4296915. This is required in order to pick the
19360 --published str version in tasks_rollup api after its status is set to published..
19361 --bug 4287813 --move the code in PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for
19362 --bug 4541039
19363
19364 --this rollup call is require to rollup from a published structure of sub-project to this project
19365 --if the link is created but process updates is not run.
19366 --The global variable g_apply_progress_flag is used to by pass the check in
19367 --pa_task_assingment_utils.check_edit_task_ok api for any process is running. The api
19368 --pa_task_assignment_utils_adjust_assgnmt_dates is failing for the working verison bcoz there is
19369 --a process(PUB) currently in process and therefore edit_task_ok api will return 'N' to
19370 --adjust_asgnmt api.
19371
19372 PA_TASK_ASSIGNMENT_UTILS.g_apply_progress_flag := 'Y'; --although th
19373 --IF PA_PROJECT_STRUCTURE_UTILS.Check_Subproject_Exists(l_project_id,p_structure_version_id, 'WORKPLAN') = 'Y' THEN
19374 IF PA_RELATIONSHIP_UTILS.Check_link_exists( p_project_id => p_project_id
19375 ,p_link_type => 'WORKPLAN' ) = 'Y'
19376 THEN
19377
19378 --call the dates rollup API for the structure version
19379 IF l_debug_mode = 'Y' THEN
19380 pa_debug.write(G_PKG_NAME, 'Before calling PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for entire grid in PUBLISH mode', 3);
19381 END IF;
19382
19383 PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup(
19384 p_project_id => p_project_id,
19385 p_published_str_ver_id => l_pub_ver_id,
19386 x_return_status => x_return_status,
19387 x_msg_count => x_msg_count,
19388 x_msg_data => x_msg_data);
19389
19390 IF l_debug_mode = 'Y' THEN
19391 pa_debug.write(G_PKG_NAME, 'After calling PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for entire grid in PUBLISH mode x_return_status='||x_return_status, 3);
19392 END IF;
19393
19394 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19395 RAISE Invalid_Arg_Exc_WP;
19396 END IF;
19397 END IF;
19398
19399 --rollup to the parent project from the current published structure version.
19400 /*IF PA_RELATIONSHIP_UTILS.Check_parent_project_exists(
19401 p_project_id => p_project_id
19402 ,p_structure_ver_id => l_pub_ver_id
19403 ,p_link_type => 'WORKPLAN' ) = 'Y'
19404 IF PA_PROJECT_STRUCTURE_UTILS.Check_Subproject_Exists(l_project_id,l_pub_ver_id, 'WORKPLAN') = 'Y'
19405 THEN
19406 IF l_debug_mode = 'Y' THEN
19407 pa_debug.write(G_PKG_NAME, 'Before calling PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for published structure verison in PUBLISH mode', 3);
19408 END IF;
19409
19410 PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup(
19411 p_project_id => p_project_id,
19412 p_structure_version_id => l_pub_ver_id,
19413 x_return_status => x_return_status,
19414 x_msg_count => x_msg_count,
19415 x_msg_data => x_msg_data);
19416
19417 IF l_debug_mode = 'Y' THEN
19418 pa_debug.write(G_PKG_NAME, 'After calling PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for published structure version in PUBLISH mode x_return_status='||x_return_status, 3);
19419 END IF;
19420
19421 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19422 RAISE Invalid_Arg_Exc_WP;
19423 END IF;
19424
19425 END IF;
19426 */
19427 PA_TASK_ASSIGNMENT_UTILS.g_apply_progress_flag := 'N';
19428 --end bug 4287813
19429 --end bug 4541039
19430
19431 IF l_debug_mode = 'Y' THEN
19432 pa_debug.write(G_PKG_NAME, 'Calling Task_Stat_Pushdown_Rollup', 3);
19433 END IF;
19434
19435 --push down and rollup
19436 PA_STRUCT_TASK_ROLLUP_PUB.Task_Stat_Pushdown_Rollup(
19437 p_structure_version_id => l_pub_ver_id
19438 ,x_return_status => x_return_status
19439 ,x_msg_count => x_msg_count
19440 ,x_msg_data => x_msg_data
19441 );
19442
19443 IF l_debug_mode = 'Y' THEN
19444 pa_debug.write(G_PKG_NAME, 'After Task_Stat_Pushdown_Rollup x_return_status='|| x_return_status, 3);
19445 END IF;
19446
19447 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19448 RAISE Invalid_Arg_Exc_WP;
19449 END IF;
19450 --End bug 4555289
19451
19452 --moved here before calling summarization API for program reporting changes.
19453 -- This was previously called just before COPY_PROGRESS_ACT_ETC api
19454 --bug 3762882
19455
19456 BEGIN -- Bug 4284444
19457 --new published version and prev published version
19458 IF l_debug_mode = 'Y' THEN
19459 pa_debug.write(G_PKG_NAME, 'Calling WBS_MAINT in PUBLISH mode', 3);
19460 END IF;
19461
19462 PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT(
19463 p_new_struct_ver_id => l_pub_ver_id
19464 ,p_old_struct_ver_id => l_prev_ver_id
19465 ,p_project_id => p_project_id
19466 ,p_publish_flag => 'Y'
19467 ,p_online_flag => l_online_flag
19468 ,p_calling_context => p_calling_context -- 4392189
19469 ,p_rerun_flag => p_rerun_flag --bug 4589289
19470 ,x_request_id => l_request_id
19471 ,x_processing_code => l_proc_code
19472 ,x_msg_code => l_msg_Code
19473 ,x_return_status => x_return_status
19474 ,x_online_flag => l_out_online_flag -- 4392189
19475 );
19476 IF l_debug_mode = 'Y' THEN
19477 pa_debug.write(G_PKG_NAME, 'After WBS_MAINT in PUBLISH mode x_return_status='|| x_return_status, 3);
19478 END IF;
19479
19480 EXCEPTION
19481 WHEN OTHERS THEN
19482 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19483 p_procedure_name => 'PROCESS_WBS_UPDATES',
19484 p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT Failed for Publish Mode: SQLERRM='||SQLERRM,1,240));
19485 RAISE Invalid_Arg_Exc_WP;
19486 END;
19487 --endbug 3762882
19488
19489 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
19490 Raise Invalid_Arg_Exc_WP;
19491 END IF;
19492
19493 -- Added this for FP_M changes -- Bhumesh
19494
19495 IF l_debug_mode = 'Y' THEN
19496 pa_debug.write(G_PKG_NAME, 'Calling Pull_Summarized_Actuals', 3);
19497 END IF;
19498
19499 PA_PROGRESS_PUB.Pull_Summarized_Actuals (
19500 P_Project_ID => l_Project_ID
19501 ,p_Calling_Mode => 'PUBLISH'
19502 ,x_return_status => x_return_status
19503 ,x_msg_count => x_msg_count
19504 ,x_msg_data => x_msg_data
19505 );
19506
19507 IF l_debug_mode = 'Y' THEN
19508 pa_debug.write(G_PKG_NAME, 'After Pull_Summarized_Actuals x_return_status='|| x_return_status, 3);
19509 END IF;
19510
19511 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19512 RAISE Invalid_Arg_Exc_WP;
19513 END IF;
19514
19515 --bug 4232150 Moved from above to be called after summarization.
19516 -- Dates changes
19517
19518 IF (l_workplan_type = 'Y') THEN
19519 OPEN get_scheduled_dates(l_project_id, l_pub_ver_id);
19520 FETCH get_scheduled_dates INTO l_scheduled_start_date, l_scheduled_finish_date;
19521 CLOSE get_scheduled_dates;
19522
19523 OPEN get_proj_rec_ver_number(l_project_id);
19524 FETCH get_proj_rec_ver_number INTO l_proj_record_ver_number;
19525 CLOSE get_proj_rec_ver_number;
19526
19527 IF l_debug_mode = 'Y' THEN
19528 pa_debug.write(G_PKG_NAME, 'Calling UPDATE_PROJECT_DATES', 3);
19529 END IF;
19530
19531 PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
19532 p_validate_only => FND_API.G_FALSE
19533 ,p_project_id => l_project_id
19534 ,p_date_type => 'SCHEDULED'
19535 ,p_start_date => l_scheduled_start_date
19536 ,p_finish_date => l_scheduled_finish_date
19537 ,p_record_version_number => l_proj_record_ver_number
19538 ,x_return_status => x_return_status
19539 ,x_msg_count => l_msg_count
19540 ,x_msg_data => l_msg_data );
19541
19542 IF l_debug_mode = 'Y' THEN
19543 pa_debug.write(G_PKG_NAME, 'After UPDATE_PROJECT_DATES x_return_status='|| x_return_status, 3);
19544 END IF;
19545
19546 --Check if there is any error.
19547 l_msg_count := FND_MSG_PUB.count_msg;
19548 IF l_msg_count > 0 THEN
19549 x_msg_count := l_msg_count;
19550 IF x_msg_count = 1 THEN
19551 x_msg_data := l_msg_data;
19552 END IF;
19553 RAISE Invalid_Arg_Exc_WP;
19554 END IF;
19555 END IF; --workplan = Y
19556
19557 -- project dates changes
19558 -- copy dates to transaction dates if 1, share structure
19559 IF ((l_workplan_type = 'Y') AND (l_financial_type = 'Y')) THEN
19560 --select workplan attr
19561 OPEN get_struc_id(l_project_id, l_pub_ver_id);
19562 FETCH get_struc_id INTO l_proj_element_id;
19563 CLOSE get_struc_id;
19564
19565 IF (PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_DATE_SYNC_ENABLED(l_proj_element_id) = 'Y') THEN
19566 --Copy to transaction date
19567 IF l_debug_mode = 'Y' THEN
19568 pa_debug.write(G_PKG_NAME, 'Calling COPY_PROJECT_DATES', 3);
19569 END IF;
19570 PA_PROJECT_DATES_PUB.COPY_PROJECT_DATES(
19571 p_project_id => l_project_id,
19572 x_return_status => x_return_status,
19573 x_msg_count => l_msg_count,
19574 x_msg_data => l_msg_data
19575 );
19576
19577 IF l_debug_mode = 'Y' THEN
19578 pa_debug.write(G_PKG_NAME, 'After COPY_PROJECT_DATES x_return_status='|| x_return_status, 3);
19579 END IF;
19580
19581 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19582 raise Invalid_Arg_Exc_WP;
19583 END IF;
19584
19585 END IF;
19586 END IF; -- ((l_workplan_type = 'Y') AND (l_financial_type = 'Y')) THEN
19587
19588 -- 5029112 (4925192)
19589 l_pub_wp_ok := pa_progress_utils.check_wwp_prog_publishing_ok(l_project_id,p_structure_version_id);
19590 --bug 4232150
19591
19592 IF p_pub_prog_flag = 'Y' THEN
19593
19594 IF l_debug_mode = 'Y' THEN
19595 pa_debug.write(G_PKG_NAME, 'Calling Publish_Progress', 3);
19596 END IF;
19597
19598 PA_PROGRESS_PUB.Publish_Progress(
19599 p_project_id => l_Project_ID
19600 ,p_working_str_ver_id => p_structure_version_id -- Bug 4190086
19601 ,p_pub_structure_version_id => l_pub_ver_id -- Bug 3839288
19602 ,x_upd_new_elem_ver_id_flag => l_upd_new_elem_ver_id_flag -- added by rtarway for BUG 3951024
19603 ,x_as_of_date => l_as_of_date -- Bug 3839288
19604 ,x_task_weight_basis_code => l_task_weight_basis_code -- Bug 3839288
19605 ,x_return_status => x_return_status
19606 ,x_msg_count => x_msg_count
19607 ,x_msg_data => x_msg_data
19608 );
19609
19610 IF l_debug_mode = 'Y' THEN
19611 pa_debug.write(G_PKG_NAME, 'After Publish_Progress x_return_status='|| x_return_status, 3);
19612 END IF;
19613
19614 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19615 raise Invalid_Arg_Exc_WP;
19616 END IF;
19617 END IF; -- p_pub_prog_flag = 'Y' THEN
19618
19619 --bug 4019845
19620 --moved this call in the beginning
19621 --l_share_flag := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(l_project_id);
19622 --The follwoing api is called to push progress data to PJI for the new
19623 --structure version.
19624
19625 --bug 3822112
19626 IF l_share_flag = 'Y' THEN
19627 l_copy_actuals_flag := 'N';
19628 END IF;
19629
19630 IF l_debug_mode = 'Y' THEN
19631 pa_debug.write(G_PKG_NAME, 'Calling COPY_PROGRESS_ACT_ETC', 3);
19632 END IF;
19633
19634 PA_PROGRESS_PUB.COPY_PROGRESS_ACT_ETC(
19635 p_project_id => l_Project_ID
19636 ,p_src_str_ver_id => p_structure_version_id
19637 ,p_dst_str_ver_id => l_pub_ver_id
19638 ,p_pub_wp_with_prog_flag => p_pub_prog_flag
19639 ,p_calling_context => 'PUBLISH'
19640 ,p_copy_actuals_flag => l_copy_actuals_flag --bug 3822112
19641 ,p_last_pub_str_version_id => l_prev_ver_id -- Modified rakragha 28-JUL-2004
19642 ,x_return_status => x_return_status
19643 ,x_msg_count => x_msg_count
19644 ,x_msg_data => x_msg_data
19645 );
19646
19647 IF l_debug_mode = 'Y' THEN
19648 pa_debug.write(G_PKG_NAME, 'After COPY_PROGRESS_ACT_ETC x_return_status='|| x_return_status, 3);
19649 END IF;
19650
19651 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19652 raise Invalid_Arg_Exc_WP;
19653 END IF;
19654
19655 --bug 4149392
19656
19657 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
19658 BEGIN
19659
19660 --bug 4587145
19661 BEGIN
19662
19663 IF l_debug_mode = 'Y' THEN
19664 pa_debug.write(G_PKG_NAME, 'Calling Pa_Fp_wp_gen_amt_utils.get_wp_version_id in PUBLISH mode', 3);
19665 END IF;
19666
19667 l_plan_version_id := Pa_Fp_wp_gen_amt_utils.get_wp_version_id(
19668 p_project_id => l_project_id,
19669 p_plan_type_id => -1,
19670 p_proj_str_ver_id => l_pub_ver_id) ;
19671
19672 IF l_debug_mode = 'Y' THEN
19673 pa_debug.write(G_PKG_NAME, 'l_plan_version_id in PUBLISH mode='||l_plan_version_id, 3);
19674 END IF;
19675
19676 EXCEPTION
19677 WHEN OTHERS THEN
19678 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19679 p_procedure_name => 'PROCESS_WBS_UPDATES',
19680 p_error_text => SUBSTRB('Call of Pa_Fp_wp_gen_amt_utils.get_wp_version_id is failed for Publish Mode: SQLERRM='||SQLERRM,1,120));
19681 RAISE Invalid_Arg_Exc_WP;
19682
19683 END;
19684 --end bug 4587145
19685
19686 IF l_debug_mode = 'Y' THEN
19687 pa_debug.write(G_PKG_NAME, 'Calling PLAN_UPDATE in PUBLISH mode', 3);
19688 END IF;
19689
19690 PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE (x_msg_code => l_msg_code,
19691 p_plan_version_id => l_plan_version_id, --bug 4587145
19692 x_return_status => x_return_status);
19693
19694 IF l_debug_mode = 'Y' THEN
19695 pa_debug.write(G_PKG_NAME, 'After PLAN_UPDATE in PUBLISH mode x_return_status='|| x_return_status, 3);
19696 END IF;
19697
19698 EXCEPTION
19699 WHEN OTHERS THEN
19700 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19701 p_procedure_name => 'PROCESS_WBS_UPDATES',
19702 p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE is failed for Publish Mode: SQLERRM='||SQLERRM,1,120));
19703 RAISE Invalid_Arg_Exc_WP;
19704 END;
19705 -- Bug 4284444
19706
19707 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
19708 Raise Invalid_Arg_Exc_WP;
19709 END IF;
19710
19711 --end bug 4149392
19712
19713
19714 IF p_pub_prog_flag = 'Y' AND l_as_of_date IS NOT NULL THEN
19715
19716 IF l_debug_mode = 'Y' THEN
19717 pa_debug.write(G_PKG_NAME, 'Calling populate_pji_tab_for_plan' , 3);
19718 END IF;
19719
19720 pa_progress_pub.populate_pji_tab_for_plan(
19721 p_init_msg_list => FND_API.G_FALSE
19722 ,p_commit => FND_API.G_FALSE
19723 ,p_project_id => l_Project_ID
19724 ,p_structure_version_id => l_pub_ver_id
19725 ,p_baselined_str_ver_id => PA_PROJECT_STRUCTURE_UTILS.Get_Baseline_Struct_Ver(l_Project_ID)
19726 ,p_structure_type => 'WORKPLAN'
19727 ,p_program_rollup_flag => 'Y' -- 4392189
19728 ,p_calling_context => 'SUMMARIZE' -- 4392189
19729 ,p_as_of_date => l_as_of_date -- 4392189
19730 ,x_return_status => x_return_status
19731 ,x_msg_count => x_msg_count
19732 ,x_msg_data => x_msg_data);
19733
19734 IF l_debug_mode = 'Y' THEN
19735 pa_debug.write(G_PKG_NAME, 'After populate_pji_tab_for_plan x_return_status='|| x_return_status, 3);
19736 END IF;
19737
19738 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19739 raise Invalid_Arg_Exc_WP;
19740 END IF;
19741
19742 IF l_debug_mode = 'Y' THEN
19743 pa_debug.write(G_PKG_NAME, 'Calling ROLLUP_PROGRESS_PVT', 3);
19744 END IF;
19745
19746 PA_PROGRESS_PVT.ROLLUP_PROGRESS_PVT(
19747 p_init_msg_list => FND_API.G_FALSE
19748 ,p_commit => FND_API.G_FALSE
19749 ,p_project_id => l_Project_ID
19750 ,p_structure_version_id => l_pub_ver_id
19751 ,p_as_of_date => l_as_of_date
19752 ,p_wp_rollup_method => l_task_weight_basis_code
19753 ,p_rollup_entire_wbs => 'Y'
19754 ,p_working_wp_prog_flag => 'N'
19755 ,p_upd_new_elem_ver_id_flag => l_upd_new_elem_ver_id_flag --rtarway, 3951024
19756 ,x_return_status => x_return_status
19757 ,x_msg_count => x_msg_count
19758 ,x_msg_data => x_msg_data);
19759
19760 IF l_debug_mode = 'Y' THEN
19761 pa_debug.write(G_PKG_NAME, 'After ROLLUP_PROGRESS_PVT x_return_status='|| x_return_status, 3);
19762 END IF;
19763
19764 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19765 raise Invalid_Arg_Exc_WP;
19766 END IF;
19767 -- 4575855 : Do not call PROGRAM_ROLLUP_PVT
19768 -- instead we are calling now ROLLUP_PROG_FROM_SUBPROJS
19769 /*
19770 -- 4392189 : Added PROGRAM_ROLLUP_PVT call
19771
19772 IF l_debug_mode = 'Y' THEN
19773 pa_debug.write(G_PKG_NAME, 'Calling PROGRAM_ROLLUP_PVT', 3);
19774 END IF;
19775
19776 PA_PROGRESS_PVT.PROGRAM_ROLLUP_PVT(
19777 p_init_msg_list => FND_API.G_FALSE
19778 ,p_commit => FND_API.G_FALSE
19779 ,p_validate_only => FND_API.G_FALSE
19780 ,p_project_id => l_Project_ID
19781 ,p_as_of_date => l_as_of_date
19782 ,p_structure_type => 'WORKPLAN'
19783 ,p_structure_ver_id => l_pub_ver_id
19784 ,x_return_status => x_return_status
19785 ,x_msg_count => x_msg_count
19786 ,x_msg_data => x_msg_data);
19787
19788 IF l_debug_mode = 'Y' THEN
19789 pa_debug.write(G_PKG_NAME, 'After PROGRAM_ROLLUP_PVT x_return_status='|| x_return_status, 3);
19790 END IF;
19791
19792 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19793 raise Invalid_Arg_Exc_WP;
19794 END IF;
19795 */
19796 END IF; -- p_pub_prog_flag = 'Y' AND l_as_of_date IS NOT NULL THEN
19797
19798 IF p_pub_prog_flag = 'Y' THEN
19799 -- 4575855 : Added call of ROLLUP_PROG_FROM_SUBPROJS
19800 IF l_debug_mode = 'Y' THEN
19801 pa_debug.write(G_PKG_NAME, 'Calling ROLLUP_PROG_FROM_SUBPROJS', 3);
19802 END IF;
19803
19804 PA_PROGRESS_PVT.ROLLUP_PROG_FROM_SUBPROJS(
19805 p_init_msg_list => FND_API.G_FALSE
19806 ,p_commit => FND_API.G_FALSE
19807 ,p_validate_only => FND_API.G_FALSE
19808 ,p_project_id => l_Project_ID
19809 ,p_structure_version_id => l_pub_ver_id
19810 ,x_return_status => x_return_status
19811 ,x_msg_count => x_msg_count
19812 ,x_msg_data => x_msg_data);
19813
19814 IF l_debug_mode = 'Y' THEN
19815 pa_debug.write(G_PKG_NAME, 'After ROLLUP_PROG_FROM_SUBPROJS x_return_status='|| x_return_status, 3);
19816 END IF;
19817
19818 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19819 raise Invalid_Arg_Exc_WP;
19820 END IF;
19821
19822 --bug 3851528
19823 IF l_debug_mode = 'Y' THEN
19824 pa_debug.write(G_PKG_NAME, 'Calling clear_prog_outdated_flag', 3);
19825 END IF;
19826
19827 PA_PROGRESS_UTILS.clear_prog_outdated_flag(
19828 p_project_id => l_Project_ID
19829 ,p_structure_version_id => l_pub_ver_id
19830 ,p_object_id => null
19831 ,p_object_type => null
19832 ,x_return_status => x_return_status
19833 ,x_msg_count => x_msg_count
19834 ,x_msg_data => x_msg_data);
19835
19836 IF l_debug_mode = 'Y' THEN
19837 pa_debug.write(G_PKG_NAME, 'After clear_prog_outdated_flag x_return_status='|| x_return_status, 3);
19838 END IF;
19839
19840 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19841 raise Invalid_Arg_Exc_WP;
19842 END IF;
19843 END IF; -- p_pub_prog_flag = 'Y' THEN
19844 --end bug 4019845, publishing changes
19845
19846 -- 5029112 (4925192)
19847 if l_pub_wp_ok = 'Y' then
19848 UPDATE pa_proj_elem_ver_structure
19849 set date_prog_applied_on_wver = sysdate
19850 WHERE project_id = l_project_id
19851 AND element_version_id = p_structure_version_id;
19852 end if;
19853
19854 /* The following call is not required as the mechanics of program data rollup is changed.
19855 Earlier, there was a pull method to rollup the data from sub-project to parent project and this was
19856 the reason we had this api call to mark all the immediate parents to dirty so that when user goes to
19857 parent project, he wil the message to run process wbs in order to see correct program rollup.
19858 But now publishing of a sub-project will push the data to all its parent. This change in pull to
19859 push mechanics does not require the following api call. Hence commenitng out.
19860 IF l_debug_mode = 'Y' THEN
19861 pa_debug.write(G_PKG_NAME, 'Calling UPDATE_PARENT_WBS_FLAG_DIRTY', 3);
19862 END IF;
19863
19864 PA_RELATIONSHIP_PVT.UPDATE_PARENT_WBS_FLAG_DIRTY(
19865 p_project_id => l_Project_ID
19866 ,p_structure_version_id => l_pub_ver_id
19867 ,x_return_status => x_return_status
19868 ,x_msg_count => x_msg_count
19869 ,x_msg_data => x_msg_data);
19870
19871 IF l_debug_mode = 'Y' THEN
19872 pa_debug.write(G_PKG_NAME, 'After UPDATE_PARENT_WBS_FLAG_DIRTY x_return_status='|| x_return_status, 3);
19873 END IF;
19874
19875 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19876 raise Invalid_Arg_Exc_WP;
19877 END IF;
19878 */
19879
19880 --bug 4479392
19881 -- Mark the structure version as no pending wbs updates.
19882 IF l_debug_mode = 'Y' THEN
19883 pa_debug.write(G_PKG_NAME, 'Before calling pa_proj_task_struc_pub.set_update_wbs_flag for published version', 3);
19884 END IF;
19885
19886 pa_proj_task_struc_pub.set_update_wbs_flag(
19887 p_project_id => p_project_id
19888 ,p_structure_version_id => l_pub_ver_id
19889 ,p_update_wbs_flag => 'N'
19890 ,x_return_status => x_return_status
19891 ,x_msg_count => x_msg_count
19892 ,x_msg_data => x_msg_data
19893 );
19894
19895 IF l_debug_mode = 'Y' THEN
19896 pa_debug.write(G_PKG_NAME, 'After pa_proj_task_struc_pub.set_update_wbs_flag for published version x_return_status='|| x_return_status, 3);
19897 END IF;
19898
19899 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19900 raise Invalid_Arg_Exc_WP;
19901 END IF;
19902 --bug 4479392
19903
19904
19905 ELSIF l_publish_flag = 'N' THEN
19906 --*******************************************
19907 --Process WBS in UPDATE MODE
19908 --*******************************************
19909
19910 --bug 4186512
19911 --set the PJI global flag to NULL before calling pji wbsmant for
19912 --indent/outdent/copy/move
19913 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := null;
19914
19915 BEGIN -- Bug 4284444
19916 --both working version
19917 IF l_debug_mode = 'Y' THEN
19918 pa_debug.write(G_PKG_NAME, 'Calling WBS_MAINT in UPDATE mode', 3);
19919 END IF;
19920
19921 PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT(
19922 p_new_struct_ver_id => p_structure_version_id
19923 ,p_old_struct_ver_id => p_structure_version_id
19924 ,p_project_id => p_project_id
19925 ,p_online_flag => l_online_flag
19926 ,p_calling_context => p_calling_context -- 4392189
19927 ,p_rerun_flag => p_rerun_flag --bug 4589289
19928 ,x_request_id => l_request_id
19929 ,x_processing_code => l_proc_code
19930 ,x_msg_code => l_msg_Code
19931 ,x_return_status => x_return_status
19932 ,x_online_flag => l_out_online_flag -- 4392189
19933 );
19934
19935 IF l_debug_mode = 'Y' THEN
19936 pa_debug.write(G_PKG_NAME, 'After WBS_MAINT in UPDATE mode x_return_status='|| x_return_status, 3);
19937 END IF;
19938
19939 EXCEPTION
19940 WHEN OTHERS THEN
19941 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19942 p_procedure_name => 'PROCESS_WBS_UPDATES',
19943 p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT Failed in Update Mode: SQLERRM='||SQLERRM,1,240));
19944 RAISE Invalid_Arg_Exc_WP;
19945 END;
19946
19947 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
19948 Raise Invalid_Arg_Exc_WP;
19949 END IF;
19950
19951 --copy task bug 4186512
19952 --Since PJI wbs maint does not pick the extr lines, need to call plan_update for copy task. Move may also require this call. So calling it regardless of any WBS change except publishing.
19953
19954 BEGIN
19955
19956 --bug 4587145
19957 BEGIN
19958
19959 IF l_debug_mode = 'Y' THEN
19960 pa_debug.write(G_PKG_NAME, 'Calling Pa_Fp_wp_gen_amt_utils.get_wp_version_id in UPDATE mode', 3);
19961 END IF;
19962
19963 l_plan_version_id := Pa_Fp_wp_gen_amt_utils.get_wp_version_id(
19964 p_project_id => p_project_id,
19965 p_plan_type_id => -1,
19966 p_proj_str_ver_id => p_structure_version_id) ;
19967
19968 IF l_debug_mode = 'Y' THEN
19969 pa_debug.write(G_PKG_NAME, 'l_plan_version_id in UPDATE mode='||l_plan_version_id, 3);
19970 END IF;
19971
19972 EXCEPTION
19973 WHEN OTHERS THEN
19974 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19975 p_procedure_name => 'PROCESS_WBS_UPDATES',
19976 p_error_text => SUBSTRB('Call of Pa_Fp_wp_gen_amt_utils.get_wp_version_id is failed for UPDATE Mode: SQLERRM='||SQLERRM,1,120));
19977 RAISE Invalid_Arg_Exc_WP;
19978
19979 END;
19980 --end bug 4587145
19981
19982 IF l_debug_mode = 'Y' THEN
19983 pa_debug.write(G_PKG_NAME, 'Calling PLAN_UPDATE in UPDATE mode', 3);
19984 END IF;
19985
19986 PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE (x_msg_code => l_msg_code,
19987 p_plan_version_id => l_plan_version_id, --bug 4587145
19988 x_return_status => x_return_status);
19989
19990 IF l_debug_mode = 'Y' THEN
19991 pa_debug.write(G_PKG_NAME,'After PLAN_UPDATE in UPDATE mode x_return_status='|| x_return_status,l_debug_level3);
19992 END IF;
19993 EXCEPTION
19994 WHEN OTHERS THEN
19995 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19996 p_procedure_name => 'PROCESS_WBS_UPDATES',
19997 p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE failed in Update mode:SQLERRM='||SQLERRM,1,120));
19998 RAISE Invalid_Arg_Exc_WP;
19999 END;
20000
20001 --end copy task bug 4186512
20002
20003 -- Bug 4284444
20004 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20005 Raise Invalid_Arg_Exc_WP;
20006 END IF;
20007
20008 -- Bug 4284444 : Commented the below code
20009 -- EXCEPTION
20010 -- WHEN OTHERS THEN
20011 -- fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
20012 -- p_procedure_name => 'PROCESS_WBS_UPDATES',
20013 -- p_error_text => SUBSTRB('PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT:'||SQLERRM,1,240));
20014 -- RAISE Invalid_Arg_Exc_WP;
20015 -- END;
20016
20017 IF nvl(l_structure_type_flag,'N') = 'Y' THEN
20018
20019 IF l_debug_mode = 'Y' THEN
20020 pa_debug.write(G_PKG_NAME, 'Calling PROCESS_TASK_WEIGHTAGE', 3);
20021 END IF;
20022
20023 pa_proj_task_struc_pub.PROCESS_TASK_WEIGHTAGE(
20024 p_project_id => p_project_id
20025 -- ,p_structure_version_id => p_structure_version_id
20026 --Modified for BUG 4127178
20027 ,p_structure_version_id => l_pub_ver_id
20028 ,x_return_status => x_return_status
20029 ,x_msg_count => x_msg_count
20030 ,x_msg_data => x_msg_data
20031 );
20032
20033 IF l_debug_mode = 'Y' THEN
20034 pa_debug.write(G_PKG_NAME, 'After PROCESS_TASK_WEIGHTAGE x_return_status='|| x_return_status, 3);
20035 END IF;
20036
20037 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20038 Raise Invalid_Arg_Exc_WP;
20039 END IF;
20040 END IF;
20041 --bug 3035902 maansari
20042
20043 --call progress rollup api if calling context is not copy project.
20044 -- Bug 3764224 : Moved populate_pji_tab_for_plan in RE_ROLLUP_PROGRESS
20045 -- Bug 3693757 : 13-Jul-04 PJI tmp1 table shd be populated so that rollup API can access actuals values in RE_ROLLUP_PROGRESS
20046 /* BEGIN
20047 pa_progress_pub.populate_pji_tab_for_plan(
20048 p_init_msg_list => FND_API.G_FALSE,
20049 p_project_id => p_project_id,
20050 p_structure_version_id => p_structure_version_id,
20051 -- p_baselined_str_ver_id => l_baselined_str_ver_id,
20052 p_structure_type => 'WORKPLAN',
20053 x_return_status => x_return_status,
20054 x_msg_count => x_msg_count,
20055 x_msg_data => x_msg_data
20056 );
20057
20058 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20059 Raise Invalid_Arg_Exc_WP;
20060 END IF;
20061 EXCEPTION
20062 WHEN OTHERS THEN
20063 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
20064 p_procedure_name => 'PROCESS_WBS_UPDATES',
20065 p_error_text => SUBSTRB('PA_PROGRESS_PUB.populate_pji_tab_for_plan:'||SQLERRM,1,240));
20066 RAISE FND_API.G_EXC_ERROR;
20067 END;
20068 */
20069
20070 IF nvl(l_structure_type_flag,'N') = 'Y' THEN --fpm progress management changes
20071
20072 IF l_debug_mode = 'Y' THEN
20073 pa_debug.write(G_PKG_NAME, 'Calling RE_ROLLUP_PROGRESS', 3);
20074 END IF;
20075
20076 PA_PROGRESS_PUB.RE_ROLLUP_PROGRESS(
20077 p_project_id => p_project_id
20078 ,p_structure_version_id => p_structure_version_id
20079 ,x_return_status => x_return_status
20080 ,x_msg_count => x_msg_count
20081 ,x_msg_data => x_msg_data
20082 );
20083 IF l_debug_mode = 'Y' THEN
20084 pa_debug.write(G_PKG_NAME, 'After RE_ROLLUP_PROGRESS x_return_status='|| x_return_status, 3);
20085 END IF;
20086
20087 -- Bug 4575855 : Added call of ROLLUP_PROG_FROM_SUBPROJS
20088 IF PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id) = 'N' THEN
20089 IF l_debug_mode = 'Y' THEN
20090 pa_debug.write(G_PKG_NAME, 'Calling ROLLUP_PROG_FROM_SUBPROJS', 3);
20091 END IF;
20092
20093 PA_PROGRESS_PVT.ROLLUP_PROG_FROM_SUBPROJS(
20094 p_init_msg_list => FND_API.G_FALSE
20095 ,p_commit => FND_API.G_FALSE
20096 ,p_validate_only => FND_API.G_FALSE
20097 ,p_project_id => p_project_id
20098 ,p_structure_version_id => l_pub_ver_id
20099 ,x_return_status => x_return_status
20100 ,x_msg_count => x_msg_count
20101 ,x_msg_data => x_msg_data);
20102
20103 IF l_debug_mode = 'Y' THEN
20104 pa_debug.write(G_PKG_NAME, 'After ROLLUP_PROG_FROM_SUBPROJS x_return_status='|| x_return_status, 3);
20105 END IF;
20106
20107 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20108 raise Invalid_Arg_Exc_WP;
20109 END IF;
20110 END IF;
20111
20112 END IF;
20113
20114 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20115 Raise Invalid_Arg_Exc_WP;
20116 END IF;
20117
20118 --bug 4541039
20119 IF PA_RELATIONSHIP_UTILS.Check_link_exists( p_project_id => p_project_id
20120 ,p_link_type => 'WORKPLAN' ) = 'Y'
20121 THEN
20122 IF l_debug_mode = 'Y' THEN
20123 pa_debug.write(G_PKG_NAME, 'Before calling PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for entire grid in UPDATE mode', 3);
20124 END IF;
20125
20126 PA_TASK_ASSIGNMENT_UTILS.g_apply_progress_flag := 'Y'; --although th
20127 PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup(
20128 p_project_id => p_project_id,
20129 x_return_status => x_return_status,
20130 x_msg_count => x_msg_count,
20131 x_msg_data => x_msg_data);
20132
20133 IF l_debug_mode = 'Y' THEN
20134 pa_debug.write(G_PKG_NAME, 'After calling PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for entire grid in UPDATE mode x_return_status='||x_return_status, 3);
20135 END IF;
20136
20137 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20138 RAISE Invalid_Arg_Exc_WP;
20139 END IF;
20140 END IF;
20141 --end bug 4541039
20142
20143 END IF; --publish_flag
20144 ELSIF p_calling_context = 'COPY_PROJECT' THEN
20145 DECLARE
20146 CURSOR cur_all_str_ver
20147 IS
20148 SELECT ppevs2.element_version_id
20149 FROM pa_proj_element_versions ppevs1, pa_proj_element_versions ppevs2
20150 WHERE ppevs1.proj_element_id = ppevs2.proj_element_id
20151 AND ppevs1.project_id = p_project_id
20152 AND ppevs2.project_id = p_project_id
20153 AND ppevs1.element_version_id = p_structure_version_id
20154 AND ppevs1.object_type = 'PA_STRUCTURES'
20155 AND ppevs2.object_type = 'PA_STRUCTURES'
20156 ;
20157 BEGIN
20158 FOR cur_all_str_ver_rec IN cur_all_str_ver LOOP
20159 IF cur_all_str_ver_rec.element_version_id IS NOT NULL THEN
20160 -- Check if the sructure version to be processed corresponds to the WORKPLAN structure.
20161 -- If yes, do the processing required for the workplan version.
20162 OPEN cur_structure_type(p_project_id, cur_all_str_ver_rec.element_version_id, 'WORKPLAN');
20163 fetch cur_structure_type INTO l_structure_type_flag;
20164 CLOSE cur_structure_type;
20165
20166 IF nvl(l_structure_type_flag,'N') = 'Y' THEN
20167 IF l_debug_mode = 'Y' THEN
20168 pa_debug.write(G_PKG_NAME, 'Calling PROCESS_TASK_WEIGHTAGE in Copy Project Mode', 3);
20169 END IF;
20170
20171 pa_proj_task_struc_pub.PROCESS_TASK_WEIGHTAGE(
20172 p_project_id => p_project_id
20173 ,p_structure_version_id => p_structure_version_id
20174 ,x_return_status => x_return_status
20175 ,x_msg_count => x_msg_count
20176 ,x_msg_data => x_msg_data
20177 );
20178
20179 IF l_debug_mode = 'Y' THEN
20180 pa_debug.write(G_PKG_NAME, 'After PROCESS_TASK_WEIGHTAGE in Copy Project Mode x_return_status='|| x_return_status, 3);
20181 END IF;
20182
20183 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20184 Raise Invalid_Arg_Exc_WP;
20185 END IF;
20186 END IF;
20187 END IF;
20188 END LOOP;
20189
20190 -- Begin Bug # 4611373.
20191 --set the PJI global flag to NULL before calling pji wbsmant for
20192 --indent/outdent/copy/move
20193 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := null;
20194
20195 BEGIN
20196 --both working version
20197 IF l_debug_mode = 'Y' THEN
20198 pa_debug.write(G_PKG_NAME, 'Calling WBS_MAINT in UPDATE mode', 3);
20199 END IF;
20200
20201 PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT(
20202 p_new_struct_ver_id => p_structure_version_id
20203 ,p_old_struct_ver_id => p_structure_version_id
20204 ,p_project_id => p_project_id
20205 ,p_online_flag => l_online_flag
20206 ,p_calling_context => p_calling_context -- 4392189
20207 ,p_rerun_flag => p_rerun_flag --bug 4589289
20208 ,x_request_id => l_request_id
20209 ,x_processing_code => l_proc_code
20210 ,x_msg_code => l_msg_Code
20211 ,x_return_status => x_return_status
20212 ,x_online_flag => l_out_online_flag -- 4392189
20213 );
20214
20215 IF l_debug_mode = 'Y' THEN
20216 pa_debug.write(G_PKG_NAME, 'After WBS_MAINT in UPDATE mode x_return_status='
20217 || x_return_status, 3);
20218 END IF;
20219
20220 EXCEPTION
20221 WHEN OTHERS THEN
20222 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
20223 p_procedure_name => 'PROCESS_WBS_UPDATES',
20224 p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT
20225 Failed in Update Mode: SQLERRM='||SQLERRM,1,240));
20226 RAISE Invalid_Arg_Exc_WP;
20227 END;
20228
20229 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20230 Raise Invalid_Arg_Exc_WP;
20231 END IF;
20232 -- End Bug # 4611373.
20233
20234 END;
20235 END IF; --end bug 3035902 maansari
20236 END IF; -- (if p_calling_mode = 'APPLY_PROGRESS') then -- Fix for Bug # 4262985.
20237
20238 -- Mark the structure version as no pending wbs updates.
20239 pa_proj_task_struc_pub.set_update_wbs_flag(
20240 p_project_id => p_project_id
20241 ,p_structure_version_id => p_structure_version_id
20242 ,p_update_wbs_flag => 'N'
20243 ,x_return_status => x_return_status
20244 ,x_msg_count => x_msg_count
20245 ,x_msg_data => x_msg_data
20246 );
20247
20248 IF l_debug_mode = 'Y' THEN
20249 pa_debug.write(G_PKG_NAME, 'After set_update_wbs_flag x_return_status='|| x_return_status, 3);
20250 END IF;
20251
20252 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20253 Raise Invalid_Arg_Exc_WP;
20254 END IF;
20255
20256 IF p_commit = FND_API.G_TRUE THEN
20257 commit;
20258 END IF;
20259
20260 IF l_debug_mode = 'Y' THEN
20261 pa_debug.write(G_PKG_NAME, 'Exiting PROCESS_WBS_UPDATES', l_debug_level3);
20262 pa_debug.reset_curr_function;
20263 END IF;
20264 EXCEPTION
20265
20266 WHEN Invalid_Arg_Exc_WP THEN
20267
20268 x_return_status := FND_API.G_RET_STS_ERROR;
20269 l_msg_count := FND_MSG_PUB.count_msg;
20270
20271 IF cur_structure_type%ISOPEN THEN
20272 CLOSE cur_structure_type;
20273 END IF;
20274
20275 IF l_msg_count = 1 and x_msg_data IS NULL THEN
20276 PA_INTERFACE_UTILS_PUB.get_messages
20277 (p_encoded => FND_API.G_TRUE
20278 ,p_msg_index => 1
20279 ,p_msg_count => l_msg_count
20280 ,p_msg_data => l_msg_data
20281 ,p_data => l_data
20282 ,p_msg_index_out => l_msg_index_out);
20283 x_msg_data := l_data;
20284 x_msg_count := l_msg_count;
20285 ELSE
20286 x_msg_count := l_msg_count;
20287 END IF;
20288 IF l_debug_mode = 'Y' THEN
20289 pa_debug.reset_curr_function;
20290 END IF;
20291
20292 IF p_commit = FND_API.G_TRUE THEN
20293 rollback to process_wbs_updates;
20294 END IF;
20295
20296 RETURN;
20297
20298 WHEN others THEN
20299
20300 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20301 x_msg_count := 1;
20302 x_msg_data := SQLERRM;
20303
20304 IF cur_structure_type%ISOPEN THEN
20305 CLOSE cur_structure_type;
20306 END IF;
20307
20308 FND_MSG_PUB.add_exc_msg
20309 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
20310 ,p_procedure_name => 'PROCESS_WBS_UPDATES'
20311 ,p_error_text => x_msg_data);
20312
20313 IF l_debug_mode = 'Y' THEN
20314 pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
20315 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20316 l_debug_level5);
20317 pa_debug.reset_curr_function;
20318 END IF;
20319
20320 IF p_commit = FND_API.G_TRUE THEN
20321 rollback to process_wbs_updates;
20322 END IF;
20323
20324 RAISE;
20325 END PROCESS_WBS_UPDATES;
20326
20327 /*==================================================================
20328 This API calculates the Task Weightages based on the Task Progress
20329 Weighting Basis of the project. This API will be called only when
20330 the Weighting Basis is either Duration or Effort. The basic strategy
20331 used in the API is to query up all the tasks of a structure version
20332 and identify the summed duration of all the tasks parents by doing
20333 minimal PLSQL processing. Once the summed duration of the parent is
20334 identified, the weighting percentage of the task can be easily
20335 identified.
20336 Bug 3010538 : New API for the Task Weighting Enhancement.
20337 ==================================================================*/
20338
20339 PROCEDURE PROCESS_TASK_WEIGHTAGE
20340 ( p_api_version_number IN NUMBER
20341 ,p_commit IN VARCHAR2
20342 ,p_init_msg_list IN VARCHAR2
20343 ,p_calling_context IN VARCHAR2
20344 ,p_project_id IN pa_projects_all.project_id%TYPE
20345 ,p_structure_version_id IN pa_proj_element_versions.element_version_id%TYPE
20346 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
20347 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
20348 ,x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
20349 AS
20350
20351 -- Type declarations local to this Procedure.
20352
20353 -- This record contains the summary information of the child tasks for a parent task.
20354 TYPE CHILD_INFO_REC IS RECORD
20355 (
20356 summed_effort pa_proj_elem_ver_schedule.planned_effort%TYPE
20357 ,summed_duration pa_proj_elem_ver_schedule.duration%TYPE
20358 ,child_count Number
20359 ,cum_alloted_weightage pa_object_relationships.weighting_percentage%TYPE
20360 ,processed_child_count Number
20361 -- Following added for bug 3053472
20362 ,loop_count Number
20363 ,residual_task_count Number
20364 ,adj_direction Number -- This will be +1 / -1
20365 );
20366
20367 TYPE CHILD_INFO_TBL IS TABLE OF CHILD_INFO_REC
20368 INDEX BY BINARY_INTEGER;
20369
20370 TYPE prog_enable_flag_tbl IS TABLE OF pa_task_types.prog_entry_enable_flag%TYPE
20371 INDEX BY BINARY_INTEGER;
20372
20373 TYPE object_rel_id_tbl IS TABLE OF pa_object_relationships.object_relationship_id%TYPE
20374 INDEX BY BINARY_INTEGER;
20375
20376 TYPE parent_task_ver_id_tbl IS TABLE OF pa_object_relationships.object_id_from1%TYPE --pa_proj_element_versions.element_version_id%TYPE 3746912
20377 INDEX BY BINARY_INTEGER;
20378
20379 TYPE duration_tbl IS TABLE OF pa_proj_elem_ver_schedule.duration%TYPE
20380 INDEX BY BINARY_INTEGER;
20381
20382 TYPE effort_tbl IS TABLE OF pji_xbs_plans_v.labor_effort%TYPE --pa_proj_elem_ver_schedule.planned_effort%TYPE 3746912
20383 INDEX BY BINARY_INTEGER;
20384
20385 TYPE task_weightage_tbl IS TABLE OF pa_object_relationships.weighting_percentage%TYPE
20386 INDEX BY BINARY_INTEGER;
20387 -- End of Type Declarations.
20388
20389
20390 -- Cursor Declarations.
20391 -- This cursor fetches the duration, effort, relationship id between the task and its parent
20392 -- and progress entry enable flag for the task type associated with the task version. This
20393 -- info is necessary for calculating the task weightage of the tasks.
20394 CURSOR cur_task_info(c_project_id pa_projects_all.project_id%TYPE,
20395 c_structure_version_id pa_proj_element_versions.element_version_id%TYPE
20396 ,c_plan_version_id NUMBER --bug 4726889
20397 )
20398 IS
20399 Select rel.object_relationship_id,
20400 rel.object_id_from1,
20401 -- NVL(pfxat.labor_hours,0) + NVL(pfxat.equipment_hours,0),
20402 NVL(pxpv.labor_effort,0) + NVL(pxpv.equipment_effort,0),
20403 sch.duration,
20404 ptt.prog_entry_enable_flag
20405 from pa_proj_element_versions ver,
20406 pa_object_relationships rel,
20407 pa_proj_elem_ver_schedule sch,
20408 pa_proj_elements ele,
20409 pa_task_types ptt,
20410 pji_xbs_plans_v pxpv
20411 -- pji_fm_xbs_accum_tmp1 pfxat
20412 where ver.project_id = c_project_id
20413 and ver.parent_structure_version_id = c_structure_version_id
20414 and ver.object_type = 'PA_TASKS'
20415 and ver.element_version_id = rel.object_id_to1
20416 and rel.relationship_type = 'S'
20417 and rel.relationship_subtype in ( 'STRUCTURE_TO_TASK','TASK_TO_TASK')
20418 and sch.element_version_id = ver.element_version_id
20419 and sch.project_id = c_project_id
20420 and ele.proj_element_id = ver.proj_element_id
20421 and ptt.object_type = 'PA_TASKS' /* bug 3279978 FP M Enhancement */
20422 and ele.type_id = ptt.task_type_id
20423 and pxpv.project_id (+)= ver.project_id
20424 and pxpv.structure_version_id (+)= ver.parent_structure_version_id
20425 and pxpv.proj_element_id (+)= ver.proj_element_id
20426 and pxpv.plan_version_id (+)= c_plan_version_id --bug 4726889
20427 -- and pfxat.project_id (+)= ver.project_id
20428 -- and pfxat.project_element_id (+)= ver.proj_element_id
20429 -- and pfxat.struct_version_id (+)= ver.parent_structure_version_id
20430 -- and pfxat.calendar_type (+)= 'A'
20431 ;
20432
20433 -- TWUT
20434 -- This cursor is when fetched will lock all the task versions of the structure version.
20435 CURSOR cur_task_ver_lock(c_project_id pa_projects_all.project_id%TYPE,
20436 c_structure_version_id pa_proj_element_versions.element_version_id%TYPE)
20437 IS
20438 select 'X'
20439 from pa_proj_element_versions ver,
20440 pa_proj_elements ele,
20441 pa_task_types ptt
20442 where ver.project_id = c_project_id
20443 and ver.parent_structure_version_id = c_structure_version_id
20444 and ver.object_type = 'PA_TASKS'
20445 and ele.proj_element_id = ver.proj_element_id
20446 and ele.type_id = ptt.task_type_id
20447 and ptt.object_type = 'PA_TASKS' /* bug 3279978 FP M Enhancement */
20448 and nvl(ptt.prog_entry_enable_flag,'N') = 'Y'
20449 for update of ver.record_version_number NOWAIT;
20450 -- End of Cursor Declarations.
20451
20452 -- Procedure level local variables declaration
20453
20454 l_child_info_tbl child_info_tbl;
20455 l_object_rel_id_tbl object_rel_id_tbl;
20456 l_parent_task_ver_id_tbl parent_task_ver_id_tbl;
20457 l_duration_tbl duration_tbl;
20458 l_effort_tbl effort_tbl;
20459
20460 l_task_weighting_basis pa_proj_progress_attr.task_weight_basis_code%TYPE;
20461
20462 L_BASIS_MANUAL CONSTANT pa_proj_progress_attr.task_weight_basis_code%TYPE := 'MANUAL';
20463 L_BASIS_EFFORT CONSTANT pa_proj_progress_attr.task_weight_basis_code%TYPE := 'EFFORT';
20464 L_BASIS_DURATION CONSTANT pa_proj_progress_attr.task_weight_basis_code%TYPE := 'DURATION';
20465
20466 -- End Procedure level local variables declaration
20467
20468 -- Standard local variable declaration.
20469 l_msg_count NUMBER := 0;
20470 l_data VARCHAR2(2000);
20471 l_msg_data VARCHAR2(2000);
20472 l_msg_index_out NUMBER;
20473 l_debug_mode VARCHAR2(1);
20474
20475 l_debug_level2 CONSTANT NUMBER := 2;
20476 l_debug_level3 CONSTANT NUMBER := 3;
20477 l_debug_level4 CONSTANT NUMBER := 4;
20478 l_debug_level5 CONSTANT NUMBER := 5;
20479
20480 l_plan_version_id NUMBER; --bug 4726889
20481
20482 BEGIN
20483 IF p_commit = FND_API.G_TRUE THEN
20484 savepoint process_task_weightage;
20485 END IF;
20486
20487 IF p_init_msg_list = FND_API.G_TRUE THEN
20488 FND_MSG_PUB.initialize;
20489 END IF;
20490
20491 x_msg_count := 0;
20492 x_return_status := FND_API.G_RET_STS_SUCCESS;
20493 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
20494
20495 IF l_debug_mode = 'Y' THEN
20496 pa_debug.g_err_stage:= 'Entering PROCESS_TASK_WEIGHTAGE';
20497 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20498 l_debug_level3);
20499
20500 pa_debug.set_curr_function( p_function => 'PROCESS_TASK_WEIGHTAGE',
20501 p_debug_mode => l_debug_mode );
20502 END IF;
20503
20504 -- Check for business rules violations
20505 IF l_debug_mode = 'Y' THEN
20506 pa_debug.g_err_stage:= 'Validating input parameters';
20507 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20508 l_debug_level3);
20509 pa_debug.g_err_stage:= 'Input Parameter Values';
20510 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20511 l_debug_level3);
20512 pa_debug.g_err_stage:= 'Project Id : ' || p_project_id;
20513 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20514 l_debug_level3);
20515 pa_debug.g_err_stage:= 'Structure Version Id : ' || p_structure_version_id;
20516 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20517 l_debug_level3);
20518 pa_debug.g_err_stage:= 'p_calling_context : ' || p_calling_context;
20519 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20520 l_debug_level3);
20521 END IF;
20522
20523 IF (p_project_id IS NULL) OR
20524 (p_structure_version_id IS NULL)
20525 THEN
20526 PA_UTILS.ADD_MESSAGE
20527 (p_app_short_name => 'PA',
20528 p_msg_name => 'PA_INV_PARAM_PASSED');
20529 RAISE Invalid_Arg_Exc_WP;
20530 END IF;
20531
20532 -- Delete the data in plsql tables.
20533 l_child_info_tbl.delete;
20534 l_object_rel_id_tbl.delete;
20535 l_duration_tbl.delete;
20536 l_effort_tbl.delete;
20537 l_parent_task_ver_id_tbl.delete;
20538
20539
20540 -- Obtain the task weighting basis and do nothing if the basis is MANUAL and throw error if it is NULL.
20541 -- This is a redundant check incorporated just to ensure no processing is done in case the api
20542 -- is wrongly called.
20543 l_task_weighting_basis := pa_progress_utils.get_task_weighting_basis(p_project_id => p_project_id);
20544
20545 IF l_task_weighting_basis is NULL THEN
20546 IF l_debug_mode = 'Y' THEN
20547 pa_debug.g_err_stage:= 'PROCESS_TASK_WEIGHTAGE API has been called when task weighting basis is NULL';
20548 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
20549 END IF;
20550 RAISE Invalid_Arg_Exc_WP;
20551 END IF;
20552
20553 IF l_task_weighting_basis = L_BASIS_MANUAL THEN
20554 IF l_debug_mode = 'Y' THEN
20555 pa_debug.g_err_stage:= 'PROCESS_TASK_WEIGHTAGE API has been called when task weighting basis is MANUAL';
20556 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20557 l_debug_level3);
20558 pa_debug.reset_curr_function;
20559 END IF;
20560 RETURN;
20561 END IF;
20562
20563 -- Lock the structure version record in pa_proj_element_versions table.
20564 -- NEED TO REVISIT THIS LOGIC.
20565 -- TWUT. Previously had a select to lock - but it lead to exact fetch
20566 -- returned more than one row exception. Changed to cursor.
20567 DECLARE
20568 l_dummy VARCHAR2(1);
20569 BEGIN
20570 open cur_task_ver_lock(p_project_id,p_structure_version_id);
20571 fetch cur_task_ver_lock into l_dummy;
20572 close cur_task_ver_lock;
20573 EXCEPTION
20574 WHEN OTHERS THEN
20575 IF SQLCODE = -54 THEN
20576 -- If the record have already been locked, then the sql code would be -54.
20577 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
20578 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
20579 RAISE Invalid_Arg_Exc_WP;
20580 ELSE
20581 raise;
20582 END IF;
20583 END;
20584
20585 --bug 4726889 performance fix to provide plan version id in the cursor cur_task_info
20586 BEGIN
20587 IF l_debug_mode = 'Y' THEN
20588 pa_debug.write(G_PKG_NAME, 'Calling Pa_Fp_wp_gen_amt_utils.get_wp_version_id', 3);
20589 END IF;
20590 l_plan_version_id := Pa_Fp_wp_gen_amt_utils.get_wp_version_id(
20591 p_project_id => p_project_id,
20592 p_plan_type_id => -1,
20593 p_proj_str_ver_id => p_structure_version_id) ;
20594
20595 IF l_debug_mode = 'Y' THEN
20596 pa_debug.write(G_PKG_NAME, 'l_plan_version_id='||l_plan_version_id, 3);
20597 END IF;
20598
20599 EXCEPTION
20600 WHEN OTHERS THEN
20601 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
20602 p_procedure_name => 'PROCESS_TASK_WEIGHTAGE',
20603 p_error_text => SUBSTRB('Call of Pa_Fp_wp_gen_amt_utils.get_wp_version_id is failed='||SQLERRM,1,120));
20604 RAISE Invalid_Arg_Exc_WP;
20605
20606 END;
20607 --bug 4726889
20608
20609 -- The first part of this procedure reads the task version records of the structure version
20610 -- in batches and calculates the summed duration or the summed effort of all the parent tasks.
20611 -- These will be used in the second part of the api to calculate the weightage of the individual
20612 -- tasks.
20613 DECLARE
20614 l_object_rel_id_fetch_tbl object_rel_id_tbl;
20615 l_parent_task_ver_id_fetch_tbl parent_task_ver_id_tbl;
20616 l_duration_fetch_tbl duration_tbl;
20617 l_effort_fetch_tbl effort_tbl;
20618 l_prog_enable_flag_fetch_tbl prog_enable_flag_tbl;
20619
20620 l_plsql_max_array_size CONSTANT NUMBER := 200; -- limiting the max fetch size
20621 l_task_count NUMBER := 0;
20622 l_parent_id pa_proj_element_versions.element_version_id%TYPE;
20623 BEGIN
20624 OPEN cur_task_info(p_project_id,p_structure_version_id
20625 ,l_plan_version_id); --4726889
20626 LOOP
20627 FETCH cur_task_info BULK COLLECT INTO
20628 l_object_rel_id_fetch_tbl
20629 ,l_parent_task_ver_id_fetch_tbl
20630 ,l_effort_fetch_tbl
20631 ,l_duration_fetch_tbl
20632 ,l_prog_enable_flag_fetch_tbl
20633 LIMIT l_plsql_max_array_size;
20634
20635 IF l_debug_mode = 'Y' THEN
20636 pa_debug.g_err_stage:= 'Fetched ' || cur_task_info%rowcount || ' records for processing';
20637 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
20638 END IF;
20639
20640 IF nvl(l_object_rel_id_fetch_tbl.last,0) > 0 THEN -- only if something is fetched do the processing
20641 FOR i in l_object_rel_id_fetch_tbl.first..l_object_rel_id_fetch_tbl.last LOOP
20642 -- Check if progress is enabled for the current task. Do the processing only
20643 -- if progress is enabled. If not just skip the task.
20644
20645 IF nvl(l_prog_enable_flag_fetch_tbl(i),'N') = 'Y' THEN
20646 l_task_count := l_task_count + 1;
20647 l_parent_id := l_parent_task_ver_id_fetch_tbl(i);
20648
20649 -- Copy the value in the fetch table to the complimentary table.
20650 l_object_rel_id_tbl(l_task_count) := l_object_rel_id_fetch_tbl(i);
20651 l_parent_task_ver_id_tbl(l_task_count) := l_parent_task_ver_id_fetch_tbl(i);
20652
20653 -- Set to null the parent task ver record if it doesnot exist.
20654 IF NOT l_child_info_tbl.exists(l_parent_id) THEN
20655 l_child_info_tbl(l_parent_id) := NULL;
20656 END IF;
20657
20658 -- Calculate the summed duration and effort for the parent.
20659 IF l_task_weighting_basis = L_BASIS_DURATION THEN
20660 l_child_info_tbl(l_parent_id).summed_duration :=
20661 nvl(l_child_info_tbl(l_parent_id).summed_duration,0) + nvl(l_duration_fetch_tbl(i),0);
20662
20663 l_duration_tbl(l_task_count) := nvl(l_duration_fetch_tbl(i),0);
20664 ELSIF l_task_weighting_basis = L_BASIS_EFFORT THEN
20665 l_child_info_tbl(l_parent_id).summed_effort :=
20666 nvl(l_child_info_tbl(l_parent_id).summed_effort,0) + nvl(l_effort_fetch_tbl(i),0);
20667
20668 l_effort_tbl(l_task_count) := nvl(l_effort_fetch_tbl(i),0);
20669 END IF;
20670 -- Increment the child count for the parent.
20671 l_child_info_tbl(l_parent_id).child_count :=
20672 nvl(l_child_info_tbl(l_parent_id).child_count,0)+1;
20673 END IF;
20674
20675 END LOOP;
20676 END IF;
20677
20678 EXIT WHEN nvl(l_object_rel_id_fetch_tbl.last,0) < l_plsql_max_array_size;
20679 END LOOP;
20680 CLOSE cur_task_info;
20681 IF l_debug_mode = 'Y' THEN
20682 pa_debug.g_err_stage:= 'Done with Part 1 of the Procedure';
20683 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
20684 END IF;
20685 END;
20686
20687 -- We have the required info to calculate the task weightages in PLSQL tables.
20688 -- Use them and calculate the weightage for each of the task.
20689 DECLARE
20690 l_task_weightage_tbl task_weightage_tbl;
20691
20692 l_parent_id pa_proj_element_versions.element_version_id%TYPE;
20693 l_task_weightage pa_object_relationships.weighting_percentage%TYPE;
20694
20695 --Bug 3053472 - remaining weightage is no more required.
20696 --l_remaining_weightage pa_object_relationships.weighting_percentage%TYPE;
20697
20698 l_residual_weightage pa_object_relationships.weighting_percentage%TYPE;
20699 BEGIN
20700 IF nvl(l_object_rel_id_tbl.last,0) > 0 THEN
20701 FOR i in l_object_rel_id_tbl.first..l_object_rel_id_tbl.last LOOP
20702 l_parent_id := l_parent_task_ver_id_tbl(i);
20703
20704 /* Bug 3053472. Count only the tasks that have non zero task weightage.
20705 l_child_info_tbl(l_parent_id).processed_child_count :=
20706 nvl(l_child_info_tbl(l_parent_id).processed_child_count,0) + 1;
20707 remaining weightage is not required any more.
20708 l_remaining_weightage := 100 - nvl(l_child_info_tbl(l_parent_id).cum_alloted_weightage,0);
20709 */
20710 -- If the basis is duration, obtain the task weightage as ratio of the duration of the task
20711 -- and the summed duration of the parent.
20712 IF l_task_weighting_basis = L_BASIS_DURATION THEN
20713
20714 IF l_duration_tbl(i) = 0 AND l_child_info_tbl(l_parent_id).summed_duration = 0 THEN
20715 l_task_weightage := 1 / l_child_info_tbl(l_parent_id).child_count * 100;
20716 ELSE
20717 l_task_weightage := l_duration_tbl(i) / l_child_info_tbl(l_parent_id).summed_duration * 100;
20718 END IF;
20719
20720 -- If the basis is effort, obtain the task weightage as ratio of the effort of the task
20721 -- and the summed effort of the parent.
20722 -- The case where the effort of the task is 0 is taken care by setting the weightage to 0
20723 -- if the summed effort is not 0 and calculated as mentioned initially if the summed effort
20724 -- is 0.
20725 ELSIF l_task_weighting_basis = L_BASIS_EFFORT THEN
20726
20727 IF l_effort_tbl(i) = 0 AND l_child_info_tbl(l_parent_id).summed_effort = 0 THEN
20728 l_task_weightage := 1 / l_child_info_tbl(l_parent_id).child_count * 100;
20729 ELSE
20730 l_task_weightage := l_effort_tbl(i) / l_child_info_tbl(l_parent_id).summed_effort * 100;
20731 END IF;
20732
20733 END IF;
20734 /* Bug 3053472. Donot take care of the rounding in this pass.
20735 -- Take care of the rounding issue.
20736 IF abs(l_task_weightage - l_remaining_weightage) <= 0.05 THEN
20737 l_task_weightage := l_remaining_weightage;
20738 END IF;
20739 */
20740 -- Bug 3053472. Increment the task count only if the task weightage of the task <> 0.
20741 IF l_task_weightage > 0 THEN
20742 l_child_info_tbl(l_parent_id).processed_child_count :=
20743 nvl(l_child_info_tbl(l_parent_id).processed_child_count,0) + 1;
20744 END IF;
20745
20746 l_child_info_tbl(l_parent_id).cum_alloted_weightage := nvl(l_child_info_tbl(l_parent_id).cum_alloted_weightage,0)
20747 + l_task_weightage;
20748 l_task_weightage_tbl(i) := l_task_weightage;
20749 END LOOP;
20750
20751 -- Bug 3053472. Loop over the plsql table once more to process the residual task weightage of
20752 -- the tasks. The logic used is to distribute the residual task weightage to as many tasks as
20753 -- possible so that the task weightage is uniform. The updates in the bug gives more details
20754 -- on the logic.
20755 FOR i in l_object_rel_id_tbl.first..l_object_rel_id_tbl.last LOOP
20756 l_parent_id := l_parent_task_ver_id_tbl(i);
20757
20758 IF l_child_info_tbl(l_parent_id).loop_count is NULL THEN
20759 -- This means that this is the first task that is being processed for this parent.
20760 -- So calculate how much is the residual weightage.
20761 l_residual_weightage := ( 100 - l_child_info_tbl(l_parent_id).cum_alloted_weightage ) * 100;
20762 l_child_info_tbl(l_parent_id).loop_count :=
20763 floor(abs(l_residual_weightage) / l_child_info_tbl(l_parent_id).processed_child_count);
20764 l_child_info_tbl(l_parent_id).residual_task_count :=
20765 mod(abs(l_residual_weightage) , l_child_info_tbl(l_parent_id).processed_child_count);
20766
20767 -- The adj_direction is set to -1 if the task weigtage has to be adjusted by reducing some amount
20768 -- from the tasks. otherwise the adj_direction is 1.
20769 IF l_residual_weightage < 0 THEN
20770 l_child_info_tbl(l_parent_id).adj_direction := -1;
20771 ELSE
20772 l_child_info_tbl(l_parent_id).adj_direction := 1;
20773 END IF;
20774 END IF;
20775
20776 IF l_task_weightage_tbl(i) > 0 THEN
20777 IF l_child_info_tbl(l_parent_id).residual_task_count > 0 THEN
20778 l_task_weightage_tbl(i) := l_task_weightage_tbl(i) +
20779 (l_child_info_tbl(l_parent_id).loop_count + 1) * 0.01 * l_child_info_tbl(l_parent_id).adj_direction;
20780
20781 l_child_info_tbl(l_parent_id).residual_task_count :=
20782 l_child_info_tbl(l_parent_id).residual_task_count - 1;
20783 ELSE
20784 l_task_weightage_tbl(i) := l_task_weightage_tbl(i) +
20785 l_child_info_tbl(l_parent_id).loop_count * 0.01 * l_child_info_tbl(l_parent_id).adj_direction;
20786 END IF;
20787 END IF;
20788 END LOOP;
20789
20790 -- Do a bulk update into pa_object_relationships table as the weightage has
20791 -- been calculated for all the tasks.
20792 FORALL i in l_object_rel_id_tbl.first..l_object_rel_id_tbl.last
20793 UPDATE pa_object_relationships
20794 SET weighting_percentage = l_task_weightage_tbl(i)
20795 WHERE object_relationship_id = l_object_rel_id_tbl(i);
20796 IF l_debug_mode = 'Y' THEN
20797 pa_debug.g_err_stage:= 'Updated ' || sql%rowcount || ' Records in PA_OBJECT_RELATIONSHIPS';
20798 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
20799 END IF;
20800 END IF;
20801 END;
20802
20803 IF p_commit = FND_API.G_TRUE THEN
20804 commit;
20805 END IF;
20806
20807 IF l_debug_mode = 'Y' THEN
20808 pa_debug.g_err_stage:= 'Exiting PROCESS_TASK_WEIGHTAGE';
20809 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20810 l_debug_level3);
20811 pa_debug.reset_curr_function;
20812 END IF;
20813 EXCEPTION
20814
20815 WHEN Invalid_Arg_Exc_WP THEN
20816
20817 x_return_status := FND_API.G_RET_STS_ERROR;
20818 l_msg_count := FND_MSG_PUB.count_msg;
20819
20820 IF cur_task_info%ISOPEN THEN
20821 CLOSE cur_task_info;
20822 END IF;
20823
20824 IF l_msg_count = 1 and x_msg_data IS NULL THEN
20825 PA_INTERFACE_UTILS_PUB.get_messages
20826 (p_encoded => FND_API.G_TRUE
20827 ,p_msg_index => 1
20828 ,p_msg_count => l_msg_count
20829 ,p_msg_data => l_msg_data
20830 ,p_data => l_data
20831 ,p_msg_index_out => l_msg_index_out);
20832 x_msg_data := l_data;
20833 x_msg_count := l_msg_count;
20834 ELSE
20835 x_msg_count := l_msg_count;
20836 END IF;
20837 IF l_debug_mode = 'Y' THEN
20838 pa_debug.reset_curr_function;
20839 END IF;
20840
20841 IF p_commit = FND_API.G_TRUE THEN
20842 rollback to process_task_weightage;
20843 END IF;
20844
20845 RETURN;
20846
20847 WHEN others THEN
20848
20849 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20850 x_msg_count := 1;
20851 x_msg_data := SQLERRM;
20852
20853 IF cur_task_info%ISOPEN THEN
20854 CLOSE cur_task_info;
20855 END IF;
20856
20857 FND_MSG_PUB.add_exc_msg
20858 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
20859 ,p_procedure_name => 'PROCESS_TASK_WEIGHTAGE'
20860 ,p_error_text => x_msg_data);
20861
20862 IF l_debug_mode = 'Y' THEN
20863 pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
20864 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20865 l_debug_level5);
20866 pa_debug.reset_curr_function;
20867 END IF;
20868
20869 IF p_commit = FND_API.G_TRUE THEN
20870 rollback to process_task_weightage;
20871 END IF;
20872
20873 RAISE;
20874 END PROCESS_TASK_WEIGHTAGE;
20875
20876 /*==================================================================
20877 This API will be called to set the update_required_flag to Y or N.
20878 The default value of the flag is Y. The passed in flag value is
20879 used to update the structure version record in elem_ver_structure
20880 table.
20881 Bug 3010538 : New API for the Task Weighting Enhancement.
20882 ==================================================================*/
20883
20884 PROCEDURE SET_UPDATE_WBS_FLAG
20885 ( p_api_version_number IN NUMBER
20886 ,p_commit IN VARCHAR2
20887 ,p_init_msg_list IN VARCHAR2
20888 ,p_calling_context IN VARCHAR2
20889 ,p_project_id IN pa_projects_all.project_id%TYPE
20890 ,p_structure_version_id IN pa_proj_element_versions.element_version_id%TYPE
20891 ,p_update_wbs_flag IN pa_proj_elem_ver_structure.process_update_wbs_flag%TYPE
20892 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
20893 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
20894 ,x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
20895 AS
20896
20897 l_msg_count NUMBER := 0;
20898 l_data VARCHAR2(2000);
20899 l_msg_data VARCHAR2(2000);
20900 l_msg_index_out NUMBER;
20901 l_debug_mode VARCHAR2(1);
20902
20903 l_debug_level2 CONSTANT NUMBER := 2;
20904 l_debug_level3 CONSTANT NUMBER := 3;
20905 l_debug_level4 CONSTANT NUMBER := 4;
20906 l_debug_level5 CONSTANT NUMBER := 5;
20907
20908 BEGIN
20909
20910 IF p_commit = FND_API.G_TRUE THEN
20911 savepoint set_update_wbs_flag;
20912 END IF;
20913
20914 IF p_init_msg_list = FND_API.G_TRUE THEN
20915 FND_MSG_PUB.initialize;
20916 END IF;
20917
20918 x_msg_count := 0;
20919 x_return_status := FND_API.G_RET_STS_SUCCESS;
20920 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
20921
20922 IF l_debug_mode = 'Y' THEN
20923 pa_debug.g_err_stage:= 'Entering SET_UPDATE_WBS_FLAG';
20924 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20925 l_debug_level3);
20926
20927 pa_debug.set_curr_function( p_function => 'SET_UPDATE_WBS_FLAG',
20928 p_debug_mode => l_debug_mode );
20929 END IF;
20930
20931 -- Check for business rules violations
20932 IF l_debug_mode = 'Y' THEN
20933 pa_debug.g_err_stage:= 'Validating input parameters';
20934 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
20935
20936 pa_debug.g_err_stage:= 'p_project_id = '|| p_project_id;
20937 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
20938
20939 pa_debug.g_err_stage:= 'p_structure_version_id = '|| p_structure_version_id;
20940 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
20941
20942 pa_debug.g_err_stage:= 'p_update_wbs_flag = '|| p_update_wbs_flag;
20943 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
20944 END IF;
20945
20946 IF (p_project_id IS NULL) OR
20947 (p_structure_version_id IS NULL) OR
20948 (p_update_wbs_flag not in ('Y','N'))
20949 THEN
20950 PA_UTILS.ADD_MESSAGE
20951 (p_app_short_name => 'PA',
20952 p_msg_name => 'PA_INV_PARAM_PASSED');
20953 RAISE Invalid_Arg_Exc_WP;
20954 END IF;
20955
20956 Update pa_proj_elem_ver_structure
20957 Set process_update_wbs_flag = p_update_wbs_flag
20958 Where project_id = p_project_id
20959 And element_version_id = p_structure_version_id;
20960
20961 IF p_commit = FND_API.G_TRUE THEN
20962 commit;
20963 END IF;
20964
20965 IF l_debug_mode = 'Y' THEN
20966 pa_debug.g_err_stage:= 'Exiting SET_UPDATE_WBS_FLAG';
20967 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20968 l_debug_level3);
20969 pa_debug.reset_curr_function;
20970 END IF;
20971 EXCEPTION
20972
20973 WHEN Invalid_Arg_Exc_WP THEN
20974
20975 x_return_status := FND_API.G_RET_STS_ERROR;
20976 l_msg_count := FND_MSG_PUB.count_msg;
20977
20978 IF l_msg_count = 1 and x_msg_data IS NULL THEN
20979 PA_INTERFACE_UTILS_PUB.get_messages
20980 (p_encoded => FND_API.G_TRUE
20981 ,p_msg_index => 1
20982 ,p_msg_count => l_msg_count
20983 ,p_msg_data => l_msg_data
20984 ,p_data => l_data
20985 ,p_msg_index_out => l_msg_index_out);
20986 x_msg_data := l_data;
20987 x_msg_count := l_msg_count;
20988 ELSE
20989 x_msg_count := l_msg_count;
20990 END IF;
20991 IF l_debug_mode = 'Y' THEN
20992 pa_debug.reset_curr_function;
20993 END IF;
20994
20995 IF p_commit = FND_API.G_TRUE THEN
20996 rollback to set_update_wbs_flag;
20997 END IF;
20998
20999 RETURN;
21000
21001 WHEN others THEN
21002
21003 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21004 x_msg_count := 1;
21005 x_msg_data := SQLERRM;
21006
21007 FND_MSG_PUB.add_exc_msg
21008 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
21009 ,p_procedure_name => 'SET_UPDATE_WBS_FLAG'
21010 ,p_error_text => x_msg_data);
21011
21012 IF l_debug_mode = 'Y' THEN
21013 pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
21014 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21015 l_debug_level5);
21016 pa_debug.reset_curr_function;
21017 END IF;
21018
21019 IF p_commit = FND_API.G_TRUE THEN
21020 rollback to set_update_wbs_flag;
21021 END IF;
21022
21023 RAISE;
21024 END SET_UPDATE_WBS_FLAG;
21025
21026 -- This API is a wrapper API called for FORMS which in turn
21027 -- calls PROCESS_WBS_UPDATES_WRP, as from FORM the remote
21028 -- package level constants FND_API.G_TRUE , FND_API.G_FLASE
21029 -- can not be reffered .
21030
21031 PROCEDURE PROCESS_WBS_UPDATES_WRP_FORM
21032 ( p_project_id IN pa_projects_all.project_id%TYPE
21033 ,p_structure_version_id IN pa_proj_element_versions.element_version_id%TYPE
21034 ,p_pub_struc_ver_id IN NUMBER := NULL
21035 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
21036 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
21037 ,x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
21038 AS
21039
21040 l_msg_count NUMBER := 0;
21041 l_data VARCHAR2(2000);
21042 l_msg_data VARCHAR2(2000);
21043 l_msg_index_out NUMBER;
21044 l_debug_mode VARCHAR2(1);
21045
21046 BEGIN
21047
21048 -- Not doing the validation of input parameter
21049 -- as it is done in the the called API.
21050
21051 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
21052 ( p_commit => FND_API.G_TRUE
21053 ,p_calling_context => 'UPDATE'
21054 ,p_project_id => p_project_id
21055 ,p_structure_version_id => p_structure_version_id
21056 ,x_return_status => x_return_status
21057 ,x_msg_count => x_msg_count
21058 ,x_msg_data => x_msg_data) ;
21059
21060 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
21061 IF l_debug_mode = 'Y' THEN
21062 pa_debug.g_err_stage := 'Error calling concurrent wbs update process ';
21063 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,4);
21064 END IF;
21065 Raise Invalid_Arg_Exc_WP;
21066 END IF;
21067
21068 EXCEPTION
21069 WHEN Invalid_Arg_Exc_WP THEN
21070
21071 x_return_status := FND_API.G_RET_STS_ERROR;
21072 l_msg_count := FND_MSG_PUB.count_msg;
21073 IF l_msg_count = 1 and x_msg_data IS NULL THEN
21074 PA_INTERFACE_UTILS_PUB.get_messages
21075 (p_encoded => FND_API.G_TRUE
21076 ,p_msg_index => 1
21077 ,p_msg_count => l_msg_count
21078 ,p_msg_data => l_msg_data
21079 ,p_data => l_data
21080 ,p_msg_index_out => l_msg_index_out);
21081 x_msg_data := l_data;
21082 x_msg_count := l_msg_count;
21083 ELSE
21084 x_msg_count := l_msg_count;
21085 END IF;
21086 IF l_debug_mode = 'Y' THEN
21087 pa_debug.reset_curr_function;
21088 END IF;
21089 RETURN;
21090 WHEN others THEN
21091
21092 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21093 x_msg_count := 1;
21094 x_msg_data := SQLERRM;
21095
21096 FND_MSG_PUB.add_exc_msg
21097 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
21098 ,p_procedure_name => 'PROCESS_WBS_UPDATES_WRP'
21099 ,p_error_text => x_msg_data);
21100
21101 IF l_debug_mode = 'Y' THEN
21102 pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
21103 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,5);
21104 pa_debug.reset_curr_function;
21105 END IF;
21106 RAISE;
21107 END PROCESS_WBS_UPDATES_WRP_FORM ;
21108
21109 --bug 3035902 maansari
21110 PROCEDURE call_process_WBS_updates(
21111 p_dest_project_id IN NUMBER
21112 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
21113 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
21114 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
21115 ) AS
21116
21117 CURSOR cur_strs_n_types
21118 IS
21119 SELECT ppe.proj_element_id, ppst.structure_type_id
21120 FROM pa_proj_elements ppe, pa_proj_structure_types ppst, pa_structure_types pst
21121 WHERE ppe.project_id = p_dest_project_id
21122 AND ppe.object_type = 'PA_STRUCTURES'
21123 AND ppe.proj_element_id = ppst.proj_element_id
21124 and ppst.structure_type_id = pst.structure_type_id
21125 and pst.structure_type in ('WORKPLAN','FINANCIAL')
21126 ;
21127
21128 CURSOR cur_str_vers( c_structure_id NUMBER )
21129 IS
21130 SELECT ppevs.element_version_id
21131 FROM pa_proj_element_versions ppevs
21132 WHERE ppevs.project_id = p_dest_project_id
21133 AND ppevs.object_type = 'PA_STRUCTURES'
21134 AND ppevs.proj_element_id = c_structure_id
21135 ;
21136
21137 l_fn_str_id NUMBER;
21138 l_wp_str_id NUMBER;
21139 l_fn_str_ver_id NUMBER;
21140 l_wp_str_ver_id NUMBER;
21141 l_task_weight_basis PA_PROJ_PROGRESS_ATTR.task_weight_basis_code%TYPE;
21142 l_shared VARCHAR2(1);
21143
21144 l_msg_count NUMBER := 0;
21145 l_data VARCHAR2(2000);
21146 l_msg_data VARCHAR2(2000);
21147 l_msg_index_out NUMBER;
21148 l_debug_mode VARCHAR2(1);
21149 BEGIN
21150
21151 x_msg_count := 0;
21152 x_return_status := FND_API.G_RET_STS_SUCCESS;
21153 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
21154 l_shared := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_dest_project_id);
21155
21156 /* The following is the simple solution for this.
21157 Update the Process_WBS_flag only for WORKPLAN enabled structures
21158 if task weighting basis is DURATION.
21159 Call the concurrent wrapper for all structure versions */
21160 l_task_weight_basis := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS( p_dest_project_id );
21161 -- IF NVL( l_task_weight_basis, 'X' ) in( 'DURATION', 'EFFORT') --3127640
21162 -- THEN
21163 FOR cur_strs_n_types_rec in cur_strs_n_types LOOP
21164 IF cur_strs_n_types_rec.structure_type_id = 1 --'WORKPLAN' structure
21165 THEN
21166 l_wp_str_id := cur_strs_n_types_rec.proj_element_id;
21167 IF NVL( l_task_weight_basis, 'X' ) = 'DURATION' --bug 3127640
21168 THEN
21169 --no need to update the flag in case of EFFORT or Manual bcoz
21170 --the onlyu thing affected from quick entry is DURATRION thru dates..
21171
21172 UPDATE pa_proj_elem_ver_structure
21173 SET PROCESS_UPDATE_WBS_FLAG = 'Y'
21174 WHERE proj_element_id = cur_strs_n_types_rec.proj_element_id
21175 AND project_id = p_dest_project_id
21176 AND PROCESS_UPDATE_WBS_FLAG = 'N'
21177 ;
21178 END IF;
21179 ELSE
21180 l_fn_str_id := cur_strs_n_types_rec.proj_element_id;
21181 END IF;
21182 END LOOP;
21183 -- END IF;
21184
21185 IF l_shared = 'Y'
21186 --AND NVL( l_task_weight_basis, 'X' ) in( 'DURATION', 'EFFORT') --bug 3127640
21187 THEN
21188 OPEN cur_str_vers( l_wp_str_id );
21189 FETCH cur_str_vers INTO l_wp_str_ver_id;
21190 CLOSE cur_str_vers;
21191
21192 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
21193 (
21194 p_calling_context => 'COPY_PROJECT'
21195 ,p_project_id => p_dest_project_id
21196 ,p_structure_version_id => l_wp_str_ver_id
21197 ,x_return_status => x_return_status
21198 ,x_msg_count => x_msg_count
21199 ,x_msg_data => x_msg_data);
21200
21201 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
21202 IF l_debug_mode = 'Y' THEN
21203 pa_debug.g_err_stage := 'Error calling concurrent wbs update process ';
21204 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,4);
21205 END IF;
21206 Raise Invalid_Arg_Exc_WP;
21207 END IF;
21208
21209 ELSIF l_shared = 'N'
21210 --AND NVL( l_task_weight_basis, 'X' ) in( 'DURATION', 'EFFORT') --Split then call the api twice. --bug3127640 added 'EFFORT' in the IF clause.
21211 THEN
21212 /*
21213 OPEN cur_str_vers( l_wp_str_id );
21214 FETCH cur_str_vers INTO l_wp_str_ver_id;
21215 CLOSE cur_str_vers;
21216 */
21217 --If there are more than one working versions
21218 FOR cur_str_vers_rec in cur_str_vers( l_wp_str_id ) LOOP
21219
21220 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
21221 (
21222 p_calling_context => 'COPY_PROJECT'
21223 ,p_project_id => p_dest_project_id
21224 ,p_structure_version_id => cur_str_vers_rec.element_version_id
21225 ,x_return_status => x_return_status
21226 ,x_msg_count => x_msg_count
21227 ,x_msg_data => x_msg_data);
21228
21229 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
21230 IF l_debug_mode = 'Y' THEN
21231 pa_debug.g_err_stage := 'Error calling concurrent wbs update process ';
21232 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,4);
21233 END IF;
21234 Raise Invalid_Arg_Exc_WP;
21235 END IF;
21236
21237 END LOOP;
21238
21239
21240 OPEN cur_str_vers( l_fn_str_id );
21241 FETCH cur_str_vers INTO l_fn_str_ver_id;
21242 --hsiu: 3305199 for bug with wp only project
21243 IF cur_str_vers%NOTFOUND THEN
21244 l_fn_str_ver_id := -1;
21245 END IF;
21246 CLOSE cur_str_vers;
21247
21248 --hsiu: 3305199 for bug with wp only project
21249 IF l_fn_str_ver_id <> -1 THEN
21250 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
21251 (
21252 p_calling_context => 'COPY_PROJECT'
21253 ,p_project_id => p_dest_project_id
21254 ,p_structure_version_id => l_fn_str_ver_id
21255 ,x_return_status => x_return_status
21256 ,x_msg_count => x_msg_count
21257 ,x_msg_data => x_msg_data);
21258
21259 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
21260 IF l_debug_mode = 'Y' THEN
21261 pa_debug.g_err_stage := 'Error calling update WBS WRP ';
21262 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,4);
21263 END IF;
21264 Raise Invalid_Arg_Exc_WP;
21265 END IF;
21266 END IF; --hsiu: 3305199 for bug with wp only project
21267
21268 END IF;
21269 EXCEPTION
21270 WHEN Invalid_Arg_Exc_WP THEN
21271
21272 x_return_status := FND_API.G_RET_STS_ERROR;
21273 l_msg_count := FND_MSG_PUB.count_msg;
21274 IF l_msg_count = 1 and x_msg_data IS NULL THEN
21275 PA_INTERFACE_UTILS_PUB.get_messages
21276 (p_encoded => FND_API.G_TRUE
21277 ,p_msg_index => 1
21278 ,p_msg_count => l_msg_count
21279 ,p_msg_data => l_msg_data
21280 ,p_data => l_data
21281 ,p_msg_index_out => l_msg_index_out);
21282 x_msg_data := l_data;
21283 x_msg_count := l_msg_count;
21284 ELSE
21285 x_msg_count := l_msg_count;
21286 END IF;
21287 IF l_debug_mode = 'Y' THEN
21288 pa_debug.reset_curr_function;
21289 END IF;
21290 RETURN;
21291 WHEN others THEN
21292
21293 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21294 x_msg_count := 1;
21295 x_msg_data := SQLERRM;
21296
21297 FND_MSG_PUB.add_exc_msg
21298 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
21299 ,p_procedure_name => 'CALL_PROCESS_WBS_UPDATES'
21300 ,p_error_text => x_msg_data);
21301
21302 IF l_debug_mode = 'Y' THEN
21303 pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
21304 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,5);
21305 pa_debug.reset_curr_function;
21306 END IF;
21307 RAISE;
21308 END call_process_WBS_updates;
21309 --End 3035902 maansari
21310
21311 --hsiu: bug 3254091
21312 PROCEDURE Update_Current_Phase
21313 ( p_api_version_number IN NUMBER := 1.0
21314 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
21315 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
21316 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
21317 ,p_validation_level IN VARCHAR2 := 100
21318 ,p_debug_mode IN VARCHAR2 := 'N'
21319 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
21320 ,p_user_id IN NUMBER := FND_GLOBAL.USER_ID
21321 ,p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
21322 ,p_project_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
21323 ,p_current_lifecycle_phase_id IN NUMBER := FND_API.G_MISS_NUM
21324 ,p_current_lifecycle_phase IN VARCHAR2 := FND_API.G_MISS_CHAR
21325 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
21326 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
21327 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
21328 )
21329 IS
21330 CURSOR cur_get_wp_attr(c_project_id NUMBER)
21331 IS
21332 select ppwa.proj_element_id,
21333 ppwa.wp_approval_reqd_flag,
21334 ppwa.wp_auto_publish_flag,
21335 ppwa.wp_default_display_lvl,
21336 ppwa.wp_enable_version_flag,
21337 ppwa.auto_pub_upon_creation_flag,
21338 ppwa.auto_sync_txn_date_flag,
21339 ppwa.wp_approver_source_id,
21340 ppwa.wp_approver_source_type,
21341 ppwa.record_version_number,
21342 ppwa.txn_date_sync_buf_days,
21343 ppwa.lifecycle_version_id
21344 from pa_proj_workplan_attr ppwa,
21345 pa_proj_elements ppe,
21346 pa_proj_structure_types ppst
21347 where ppwa.project_id = c_project_id
21348 and ppwa.project_id = ppe.project_id
21349 and ppwa.proj_element_id = ppe.proj_element_id
21350 and ppe.proj_element_id = ppst.proj_element_id
21351 and ppst.structure_type_id = 1;
21352
21353 l_proj_element_id NUMBER;
21354 l_project_id NUMBER;
21355 l_wp_approval_reqd_fg VARCHAR2(1);
21356 l_wp_auto_publish_fg VARCHAR2(1);
21357 l_wp_default_display_lvl NUMBER;
21358 l_wp_enable_version_fg VARCHAR2(1);
21359 l_auto_pub_upon_creation_fg VARCHAR2(1);
21360 l_auto_sync_txn_date_fg VARCHAR2(1);
21361 l_wp_approver_source_id NUMBER;
21362 l_wp_approver_source_type NUMBER;
21363 l_record_version_number NUMBER;
21364 l_txn_date_sync_buf_days NUMBER;
21365 l_life_cycle_version_id NUMBER;
21366 l_current_phase_version_id NUMBER;
21367 API_ERROR EXCEPTION;
21368
21369 l_return_status VARCHAR2(1);
21370 l_msg_count NUMBER;
21371 l_msg_data VARCHAR2(250);
21372 l_error_msg_code VARCHAR2(250);
21373 l_data VARCHAR2(250);
21374 l_msg_index_out NUMBER;
21375
21376 BEGIN
21377 --Clear Error Messages.
21378 IF p_init_msg_list = FND_API.G_TRUE THEN
21379 FND_MSG_PUB.initialize;
21380 END IF;
21381
21382 --set savepoint
21383 IF p_commit = FND_API.G_TRUE THEN
21384 SAVEPOINT update_current_phase;
21385 END IF;
21386
21387 x_msg_count := 0;
21388 x_return_status := FND_API.G_RET_STS_SUCCESS;
21389
21390 --Project name to id Conversion
21391 IF ((p_project_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND (p_project_name IS NOT NULL)) OR
21392 ((p_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND (p_project_id IS NOT NULL)) THEN
21393 PA_PROJ_ELEMENTS_UTILS.Project_Name_Or_Id(
21394 p_project_name => p_project_name,
21395 p_project_id => p_project_id,
21396 x_project_id => l_project_id,
21397 x_return_status => l_return_status,
21398 x_error_msg_code => l_error_msg_code);
21399 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
21400 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
21401 p_msg_name => l_error_msg_code);
21402 RAISE API_ERROR;
21403 END IF;
21404 END IF;
21405
21406 --get existing row (need to get life cycle id);
21407 OPEN cur_get_wp_attr(l_project_id);
21408 FETCH cur_get_wp_attr INTO l_proj_element_id,
21409 l_wp_approval_reqd_fg,
21410 l_wp_auto_publish_fg,
21411 l_wp_default_display_lvl,
21412 l_wp_enable_version_fg,
21413 l_auto_pub_upon_creation_fg,
21414 l_auto_sync_txn_date_fg,
21415 l_wp_approver_source_id,
21416 l_wp_approver_source_type,
21417 l_record_version_number,
21418 l_txn_date_sync_buf_days,
21419 l_life_cycle_version_id;
21420 CLOSE cur_get_wp_attr;
21421
21422 --Current Phase name to id conversion
21423 IF ((p_current_lifecycle_phase_id <> FND_API.G_MISS_NUM) AND (p_current_lifecycle_phase_id is not NULL)) OR
21424 ((p_current_lifecycle_phase <> FND_API.G_MISS_CHAR) AND (p_current_lifecycle_phase is not NULL)) then
21425 PA_WORKPLAN_ATTR_UTILS.CHECK_LIFECYCLE_PHASE_NAME_ID
21426 ( p_lifecycle_id => l_life_cycle_version_id
21427 ,p_current_lifecycle_phase_id => p_current_lifecycle_phase_id
21428 ,p_current_lifecycle_phase => p_current_lifecycle_phase
21429 ,p_check_id_flag => 'Y'
21430 ,x_current_lifecycle_phase_id => l_current_phase_version_id
21431 ,x_return_status => l_return_status
21432 ,x_error_msg_code => l_error_msg_code);
21433
21434 IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
21435 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA', p_msg_name => l_error_msg_code);
21436 RAISE API_ERROR;
21437 END IF;
21438 END IF;
21439
21440
21441 --check security if user id is not -1
21442 IF (p_user_id <> -1) THEN
21443 IF 'F' = PA_SECURITY_PVT.check_user_privilege(
21444 'PA_PAXPREPR_OPT_WORKPLAN_STR',
21445 'PA_PROJECTS',
21446 l_project_id
21447 ) THEN
21448 PA_UTILS.ADD_MESSAGE
21449 (p_app_short_name => 'PA',
21450 p_msg_name => 'PA_FUNCTION_SECURITY_ENFORCED');
21451 RAISE API_ERROR;
21452 END IF;
21453 END IF;
21454
21455
21456 --Call existing update API
21457 PA_WORKPLAN_ATTR_PVT.UPDATE_PROJ_WORKPLAN_ATTRS(
21458 p_commit => p_commit
21459 ,p_validate_only => p_validate_only
21460 ,p_validation_level => 50
21461 ,p_debug_mode => p_debug_mode
21462 ,p_max_msg_count => p_max_msg_count
21463 ,p_project_id => l_project_id
21464 ,p_proj_element_id => l_proj_element_id
21465 ,p_approval_reqd_flag => l_wp_approval_reqd_fg
21466 ,p_auto_publish_flag => l_wp_auto_publish_fg
21467 ,p_approver_source_id => l_wp_approver_source_id
21468 ,p_approver_source_type => l_wp_approver_source_type
21469 ,p_default_display_lvl => l_wp_default_display_lvl
21470 ,p_enable_wp_version_flag => l_wp_enable_version_fg
21471 ,p_auto_pub_upon_creation_flag => l_auto_pub_upon_creation_fg
21472 ,p_auto_sync_txn_date_flag => l_auto_sync_txn_date_fg
21473 ,p_txn_date_sync_buf_days => l_txn_date_sync_buf_days
21474 ,p_lifecycle_version_id => l_life_cycle_version_id
21475 ,p_current_phase_version_id => l_current_phase_version_id
21476 ,p_record_version_number => l_record_version_number
21477 ,x_return_status => l_return_status
21478 ,x_msg_count => l_msg_count
21479 ,x_msg_data => l_msg_data
21480 );
21481
21482 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
21483 x_msg_count := FND_MSG_PUB.count_msg;
21484 if x_msg_count = 1 then
21485 pa_interface_utils_pub.get_messages
21486 (p_encoded => FND_API.G_TRUE,
21487 p_msg_index => 1,
21488 p_msg_count => l_msg_count,
21489 p_msg_data => l_msg_data,
21490 p_data => l_data,
21491 p_msg_index_out => l_msg_index_out);
21492 x_msg_data := l_data;
21493 end if;
21494 raise API_ERROR;
21495 END IF;
21496
21497 x_return_status := FND_API.G_RET_STS_SUCCESS;
21498
21499 if p_commit = FND_API.G_TRUE then
21500 commit work;
21501 end if;
21502
21503 EXCEPTION
21504 WHEN API_ERROR THEN
21505 x_return_status := FND_API.G_RET_STS_ERROR;
21506 IF p_commit = FND_API.G_TRUE THEN
21507 rollback to update_current_phase;
21508 END IF;
21509 WHEN OTHERS THEN
21510 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21511 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
21512 p_procedure_name => 'update_current_phase',
21513 p_error_text => SUBSTRB(SQLERRM,1,240));
21514 IF p_commit = FND_API.G_TRUE THEN
21515 rollback to update_current_phase;
21516 END IF;
21517 raise;
21518 END Update_Current_Phase;
21519 --end bug 3254091
21520
21521 -- This API is created for FP_M changes. Refer to tracking bug 3305199
21522 -- This API imports the data from a string into the system
21523 -- Each string will contain the elements Source Ref, Sub Type and Lag Days
21524 Procedure Parse_Predecessor_Import (
21525 P_String IN VARCHAR2,
21526 P_Delimeter IN VARCHAR2 DEFAULT ',',
21527 P_Task_Version_Id IN NUMBER, --SMUKKA Added this parameter
21528 X_Return_Status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
21529 X_Msg_Count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
21530 X_Msg_Data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
21531 )
21532 IS
21533 l_Strings_Tab PA_PLSQL_DATATYPES.Char240TabTyp;
21534 l_begin NUMBER;
21535 l_End NUMBER;
21536 l_Col1 NUMBER;
21537 l_Col2 VARCHAR2(10);
21538 l_Col3 VARCHAR2(10);
21539 l_String_Length NUMBER;
21540 l_temp_char VARCHAR2(1);
21541
21542 l_Type_Position NUMBER;
21543 l_Type_Count NUMBER;
21544
21545 l_Sign_Position NUMBER;
21546 l_Sign_Count NUMBER;
21547
21548 --bug 3613766
21549 cursor get_pred_id(c_pred_ref_id VARCHAR2) IS
21550 select ppev1.project_id, ppev1.element_version_id
21551 from pa_proj_elements ppe,
21552 pa_proj_element_versions ppev1,
21553 pa_proj_element_versions ppev2
21554 where ppev2.element_version_id = P_Task_Version_Id
21555 and ppev2.parent_structure_version_id = ppev1.parent_structure_version_id
21556 and ppev1.proj_element_id = ppe.proj_element_id
21557 and ppe.pm_source_reference = c_pred_ref_id;
21558 l_pred_project_id NUMBER;
21559 l_pred_elem_ver_id NUMBER;
21560 l_lag_val NUMBER;
21561 l_type_val VARCHAR2(2);
21562 --end bug 3613766
21563
21564 l_Delimeter VARCHAR2(10);
21565 BEGIN
21566
21567 IF (P_Delimeter = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
21568 l_Delimeter := ',';
21569 ELSE
21570 l_Delimeter := p_Delimeter;
21571 END IF;
21572
21573 -- Build the PL/SQL Table with all the required strings
21574 l_begin := 1;
21575 For i IN 1..200000 -- Romove this range. Used only for testing
21576 Loop
21577 Select Instr(P_String, l_Delimeter, 1, i) Into l_End from dual;
21578 Select substr(P_String, l_begin, Decode(l_End, 0, 1000, l_End-l_begin))
21579 Into l_Strings_Tab(i) From Dual;
21580 l_begin := l_end + 1;
21581 EXIT When nvl(l_End,0) = 0;
21582 End Loop;
21583
21584 For Rec IN l_Strings_Tab.FIRST..l_Strings_Tab.LAST
21585 Loop
21586 -- Dbms_Output.Put_Line('Input String : -'|| l_Strings_Tab(Rec)||'-');
21587
21588 If l_Strings_Tab(Rec) IS NOT NULL then
21589 l_String_Length := length(l_Strings_Tab(Rec));
21590 Else
21591 -- Dbms_Output.Put_Line('Error: Input string is null');
21592 RETURN;
21593 End If;
21594
21595 l_Sign_Count := 0;
21596 l_Type_Count := 0;
21597 l_Type_Position := 0;
21598 l_Sign_Position := 0;
21599
21600 FOR char_position in 1..l_String_Length
21601 Loop
21602 l_temp_char := substr(l_Strings_Tab(Rec), char_position, 1);
21603 -- Dbms_Output.Put_Line('Char : '|| l_temp_char );
21604
21605 If ascii(l_temp_char) NOT BETWEEN 48 AND 57 then -- is not number character
21606 -- Validating the dependency code number
21607 If char_position = 1 then
21608 -- Dbms_Output.Put_Line('Error: First char is not number');
21609 RETURN;
21610 End If;
21611 If l_temp_char NOT IN ('F', 'S', '+', '-' ) then
21612 --Dbms_Output.Put_Line('Error: Invalid char found in the string');
21613 RETURN;
21614 End If;
21615
21616 -- Validating sign character
21617 If l_temp_char IN ('+', '-') then
21618 l_Sign_Count := l_Sign_Count + 1;
21619 l_Sign_Position := char_position;
21620 If l_Sign_Count > 1 then
21621 -- Dbms_Output.Put_Line('Error: More than one signs are found');
21622 RETURN;
21623 Else
21624 If l_Type_Count < 1 then
21625 --Dbms_Output.Put_Line('Error: Type code is missing');
21626 RETURN;
21627 End If;
21628 End If;
21629 End If;
21630
21631 -- Validating type code character
21632 If l_temp_char IN ('F', 'S') then
21633 If l_Type_Position > 0 and l_Type_Position+1 <> char_position Then
21634 -- Dbms_Output.Put_Line('Error: Type code is invalid - 2');
21635 RETURN;
21636 End If;
21637 l_Type_Count := l_Type_Count + 1; l_Type_Position := char_position;
21638 If l_Type_Count > 2 then
21639 -- Dbms_Output.Put_Line('Error: Type code is invalid - 3');
21640 RETURN;
21641 End If;
21642 End If;
21643
21644 End If;
21645 End Loop;
21646 -- End of processing single string
21647
21648 Select To_Number(SubStr(l_Strings_Tab(Rec), 1, Decode(l_Type_Position, 0, 100, l_Type_Position-2 )))
21649 Into l_Col1 From Dual;
21650
21651 If l_Type_Position <> 0 then
21652 If l_Type_Count <> 2 then
21653 -- Dbms_Output.Put_Line('Error: Type code is invalid - 4');
21654 RETURN;
21655 End If;
21656 l_Col2 := SubStr(l_Strings_Tab(Rec), l_Type_Position-1, 2);
21657 End If;
21658
21659 If l_Sign_Position <> 0 then
21660 l_Col3 := SubStr(l_Strings_Tab(Rec),l_Sign_Position);
21661 End If;
21662
21663 -- Dbms_Output.Put_Line('Output Columns : '|| l_Col1||' - '||l_Col2||' - '||l_Col3);
21664 OPEN get_pred_id(l_col1);
21665 FETCH get_pred_id INTO l_pred_project_id, l_pred_elem_ver_id;
21666 IF get_pred_id%FOUND THEN
21667
21668 IF (l_Col2 IS NULL) THEN
21669 l_type_val := 'FS';
21670 ELSE
21671 l_type_val := l_Col2;
21672 END IF;
21673
21674 IF (l_Col3 IS NULL) THEN
21675 l_lag_val := 0;
21676 ELSE
21677 l_lag_val := l_Col3;
21678 END IF;
21679
21680 pa_relationship_pvt.create_dependency(
21681 p_calling_module => 'AMG'
21682 ,p_src_proj_id => l_pred_project_id
21683 ,p_src_task_ver_id => P_Task_Version_Id
21684 ,p_dest_proj_id => l_pred_project_id
21685 ,p_dest_task_ver_id => l_pred_elem_ver_id
21686 ,p_type => l_type_val
21687 ,p_lag_days => l_lag_val
21688 ,p_comments => NULL
21689 ,x_return_status => x_return_status
21690 ,x_msg_count => x_msg_count
21691 ,x_msg_data => x_msg_data);
21692 END IF;
21693 CLOSE get_pred_id;
21694
21695 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
21696 return;
21697 END IF;
21698
21699 End Loop;
21700
21701 END Parse_Predecessor_Import;
21702
21703 -- This API is created for FP_M changes. Refer to tracking bug 3305199
21704 -- This API exports the data from a system into an out parameter string
21705 -- Each string will contain the elements Source Ref, Sub Type and Lag Days
21706 Function Parse_Predecessor_Export (
21707 P_Element_Version_ID IN NUMBER,
21708 P_Delimeter IN VARCHAR2 DEFAULT ','
21709 ) RETURN VARCHAR2
21710 IS
21711 l_String VARCHAR2(4000);
21712 Begin
21713 l_String := '';
21714 For i IN ( Select PPE.PM_Source_Reference SourceRef,
21715 POR.Relationship_Subtype SubType,
21716 decode(sign(NVL(POR.Lag_Day,0)),
21717 '0', '', '-1', '', '+') || decode(POR.Lag_Day,0, NULL, POR.Lag_day)/(10*8*60) LagDays --bug 4348156
21718 From PA_Proj_Elements PPE,
21719 PA_Proj_Element_Versions PEV,
21720 PA_Object_Relationships POR,
21721 PA_PROJ_ELEMENT_VERSIONS PEV2
21722 Where PPE.project_id = PEV.project_id
21723 and PPE.proj_element_id = PEV.proj_element_id
21724 and PEV.element_version_id = POR.object_id_to1
21725 and PEV2.ELEMENT_VERSION_ID = POR.object_id_from1
21726 and PEV2.ELEMENT_VERSION_ID = P_ELEMENT_VERSION_ID
21727 and POR.Relationship_Type = 'D'
21728 and POR.Object_ID_From2 = POR.Object_ID_To2 )
21729 Loop
21730 l_String := l_String||i.SourceRef||i.SubType||i.LagDays||P_Delimeter;
21731 End Loop;
21732 Return substr(l_String,1,length(l_string)-1);
21733 Exception When Others Then NULL;
21734 End Parse_Predecessor_Export;
21735
21736 Function Parse_Predecessor_Export2 (
21737 P_Element_Version_ID IN NUMBER,
21738 P_Delimeter IN VARCHAR2 DEFAULT ','
21739 ) RETURN VARCHAR2
21740 IS
21741 l_String VARCHAR2(4000);
21742 Begin
21743 l_String := '';
21744 For i IN ( Select PPE.proj_element_id ProjElemId,
21745 POR.Relationship_Subtype SubType,
21746 decode(sign(NVL(POR.Lag_Day,0)),
21747 '0', '', '-1', '', '+') || decode(POR.Lag_Day,0, NULL, POR.Lag_day)/(10*8*60) LagDays --bug 4348156
21748 From PA_Proj_Elements PPE,
21749 PA_Proj_Element_Versions PEV,
21750 PA_Object_Relationships POR,
21751 PA_PROJ_ELEMENT_VERSIONS PEV2
21752 Where PPE.project_id = PEV.project_id
21753 and PPE.proj_element_id = PEV.proj_element_id
21754 and PEV.element_version_id = POR.object_id_to1
21755 and PEV2.ELEMENT_VERSION_ID = POR.object_id_from1
21756 and PEV2.ELEMENT_VERSION_ID = P_ELEMENT_VERSION_ID
21757 and POR.Relationship_Type = 'D'
21758 and POR.Object_ID_From2 = POR.Object_ID_To2 )
21759 Loop
21760 l_String := l_String||i.ProjElemId||i.SubType||i.LagDays||P_Delimeter;
21761 End Loop;
21762 Return substr(l_String, 1, length(l_string)-1);
21763 Exception When Others Then NULL;
21764 End Parse_Predecessor_Export2;
21765 --Added by rtarway for FP.M Development
21766 Function GET_SHARE_TYPE (
21767 P_Project_ID IN NUMBER
21768 ) RETURN VARCHAR2
21769 IS
21770 Cursor get_proj_share_type
21771 IS
21772 SELECT proj.structure_sharing_code FROM pa_projects_all proj where proj.project_id = P_Project_ID;
21773
21774 l_share_code VARCHAR2(250);
21775
21776 Begin
21777 l_share_code := '';
21778
21779 OPEN get_proj_share_type;
21780 FETCH get_proj_share_type into l_share_code;
21781 CLOSE get_proj_share_type;
21782
21783 Return l_share_code;
21784 Exception When Others Then NULL;
21785 End GET_SHARE_TYPE;
21786 --Added by rtarway for FP.M Development
21787
21788 procedure delete_intra_dependency (p_element_version_id IN NUMBER,
21789 p_commit IN VARCHAR2 := FND_API.G_FALSE,
21790 p_debug_mode IN VARCHAR2 := 'N',
21791 x_return_status OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
21792 IS
21793 l_object_type VARCHAR2(80);
21794 API_ERROR EXCEPTION;
21795 BEGIN
21796 IF (p_debug_mode = 'Y') THEN
21797 pa_debug.init_err_stack('PA_PROJ_TASK_STRUC_PUB.DELETE_INTRA_DEPENDENCY');
21798 pa_debug.debug('PA_PROJ_TASK_STRUC_PUB.DELETE_INTRA_DEPENDENCY Begin');
21799 END IF;
21800 --
21801 IF (p_commit = FND_API.G_TRUE) THEN
21802 savepoint delete_intra_dependency;
21803 END IF;
21804 BEGIN
21805 SELECT object_type
21806 INTO l_object_type
21807 FROM pa_proj_element_versions
21808 WHERE ELEMENT_VERSION_ID = p_element_version_id;
21809 EXCEPTION
21810 WHEN NO_DATA_FOUND THEN
21811 fnd_message.set_name('PA','PA_RECORD_NOT_FOUND');
21812 x_return_status := FND_API.G_RET_STS_ERROR;
21813 WHEN OTHERS THEN
21814 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21815 raise;
21816 END;
21817 IF l_object_type='PA_TASKS' THEN
21818 BEGIN
21819 DELETE FROM pa_object_relationships por1
21820 WHERE por1.object_relationship_id IN
21821 (SELECT por.object_relationship_id
21822 FROM pa_object_relationships por
21823 WHERE por.relationship_type = 'D'
21824 AND por.object_id_from1 = p_element_version_id
21825 AND por.object_id_from2 = por.object_id_to2
21826 AND por.object_type_from = 'PA_TASKS'
21827 AND por.object_type_to = 'PA_TASKS');
21828 IF SQL%NOTFOUND THEN
21829 fnd_message.set_name('PA','PA_RECORD_NOT_FOUND');
21830 x_return_status := FND_API.G_RET_STS_ERROR;
21831 END IF;
21832 EXCEPTION
21833 WHEN OTHERS THEN
21834 x_return_status := FND_API.G_RET_STS_ERROR;
21835 raise;
21836 END;
21837 ELSIF l_object_type='PA_STRUCTURES' THEN
21838 BEGIN
21839 DELETE FROM pa_object_relationships por1
21840 WHERE por1.object_relationship_id IN
21841 (SELECT por.object_relationship_id
21842 FROM pa_proj_element_versions ppev,
21843 pa_object_relationships por
21844 WHERE relationship_type ='D'
21845 AND ppev.parent_structure_version_id = p_element_version_id
21846 AND ppev.object_type = 'PA_TASKS'
21847 AND por.object_id_from2 = por.object_id_to2
21848 AND por.object_type_from = 'PA_TASKS'
21849 AND por.object_type_to = 'PA_TASKS'
21850 AND por.object_id_from1 = ppev.ELEMENT_VERSION_ID);
21851 IF SQL%NOTFOUND THEN
21852 fnd_message.set_name('PA','PA_RECORD_NOT_FOUND');
21853 x_return_status := FND_API.G_RET_STS_ERROR;
21854 END IF;
21855 EXCEPTION
21856 WHEN OTHERS THEN
21857 x_return_status := FND_API.G_RET_STS_ERROR;
21858 raise;
21859 END;
21860 END IF;
21861 --
21862 x_return_status := FND_API.G_RET_STS_SUCCESS;
21863 --
21864 IF (p_commit = FND_API.G_TRUE) THEN
21865 COMMIT;
21866 END IF;
21867 --
21868 IF (p_debug_mode = 'Y') THEN
21869 pa_debug.debug('PA_PROJ_TASK_STRUC_PUB.DELETE_INTRA_DEPENDENCY END');
21870 END IF;
21871 EXCEPTION
21872 WHEN API_ERROR THEN
21873 x_return_status := FND_API.G_RET_STS_ERROR;
21874 rollback to delete_intra_dependency;
21875 WHEN OTHERS THEN
21876 IF (p_commit = FND_API.G_TRUE) THEN
21877 ROLLBACK TO delete_intra_dependency;
21878 END IF;
21879 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21880 FND_MSG_PUB.add_exc_msg(
21881 p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
21882 p_procedure_name => 'delete_intra_dependency',
21883 p_error_text => SUBSTRB(SQLERRM,1,240));
21884 ROLLBACK TO delete_intra_dependency;
21885 RAISE;
21886 END delete_intra_dependency;
21887
21888 END PA_PROJ_TASK_STRUC_PUB;
21889