[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.69.12020000.7 2013/05/28 12:48:08 djambhek 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 : handle_task_number_change
9 -- Type : PL/SQL procedure
10 PROCEDURE handle_task_number_change
11 ( p_project_id IN NUMBER,
12 p_task_id IN NUMBER,
13 p_in_task_number IN VARCHAR2,
14 p_in_task_tbl IN pa_project_pub.task_in_tbl_type,
15 p_structure_id IN NUMBER ,
16 p_debug_mode IN VARCHAR2 := 'N',
17 p_return_status OUT NOCOPY VARCHAR2
18 ) IS
19
20 CURSOR l_get_task_number_csr (p_task_id IN NUMBER)
21 IS
22 SELECT element_number
23 FROM pa_proj_elements
24 WHERE proj_element_id = p_task_id;
25
26 CURSOR l_get_task_id_csr (p_project_id IN NUMBER,
27 p_task_number IN VARCHAR2 )
28 IS
29 SELECT proj_element_id,pm_source_reference
30 FROM pa_proj_elements
31 WHERE project_id = p_project_id
32 AND element_number = p_task_number ;
33
34 --needed to get the field values associated to a AMG message
35
36 CURSOR l_amg_project_csr
37 (p_pa_project_id pa_projects.project_id%type)
38 IS
39 SELECT segment1
40 FROM pa_projects p
41 WHERE p.project_id = p_pa_project_id;
42
43 l_amg_segment1 VARCHAR2(25);
44 l_amg_task_number VARCHAR2(50);
45
46 l_task_number pa_proj_elements.element_number%TYPE ; -- Bug 13831521
47 l_task_id NUMBER := 0;
48 l_pm_task_reference VARCHAR2(30);
49 l_tot_task_count NUMBER := 0;
50 l_count NUMBER := 0;
51 p_multiple_task_msg VARCHAR2(1) := 'T';
52 l_debug_mode VARCHAR2(1);
53 l_debug_level3 CONSTANT NUMBER := 3;
54 l_module_name VARCHAR2(100) := 'PA_PROJ_TASK_STRUC_PUB.handle_task_number_change';
55
56 BEGIN
57 l_debug_mode := p_debug_mode;
58
59 IF l_debug_mode = 'Y' THEN
60 pa_debug.write(l_module_name, 'PA_PROJ_TASK_STRUC_PUB.handle_task_number_change Start : Passed Parameters :', l_debug_level3);
61 pa_debug.write(l_module_name, 'p_project_id ='||p_project_id , l_debug_level3);
62 pa_debug.write(l_module_name, 'p_task_id ='||p_task_id , l_debug_level3);
63 pa_debug.write(l_module_name, 'p_in_task_number ='||p_in_task_number , l_debug_level3);
64 pa_debug.write(l_module_name, 'p_structure_id ='||p_structure_id , l_debug_level3);
65 pa_debug.write(l_module_name, 'p_debug_mode ='||p_debug_mode , l_debug_level3);
66 END IF;
67
68 p_return_status := FND_API.G_RET_STS_SUCCESS;
69
70 -- Get segment1 for AMG messages
71 OPEN l_amg_project_csr( p_project_id );
72 FETCH l_amg_project_csr INTO l_amg_segment1;
73 CLOSE l_amg_project_csr;
74
75 -- check whether task number is changing
76 IF p_in_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
77 p_in_task_number IS NULL THEN
78 RETURN;
79 END IF;
80
81 OPEN l_get_task_number_csr (p_task_id);
82 FETCH l_get_task_number_csr INTO l_task_number;
83 CLOSE l_get_task_number_csr;
84
85 -- If task number is not being changed, then need not proceed further
86 -- can proceed with the regular update
87 IF l_task_number = p_in_task_number THEN
88 RETURN;
89 END IF;
90
91 -- If the new task number would result in unique constraint violation
92 -- then scan the array to check whether the task which presently
93 -- has the task number to which this task is changing to, is also being
94 -- changed.
95 -- Eg : If we are processing Task number 2.1 which is getting changed to
96 -- 2.3, then check whether the existing task with task number 2.3, is
97 -- also getting changed in the same session. If it is not getting changed
98 -- then we cannot update this task to 2.3 and would raise an error
99 If (PA_PROJ_ELEMENTS_UTILS.check_element_number_unique(p_in_task_number,
100 p_task_id,
101 p_project_id,
102 p_structure_id) <> 'Y') THEN
103
104 -- get the task id and task reference for the task whose
105 -- present task number = the task number which is being changed to
106
107 OPEN l_get_task_id_csr (p_project_id,p_in_task_number);
108 FETCH l_get_task_id_csr
109 INTO l_task_id,
110 l_pm_task_reference;
111 IF l_get_task_id_csr%NOTFOUND THEN
112 CLOSE l_get_task_id_csr;
113 RETURN;
114 ELSE
115 CLOSE l_get_task_id_csr;
116 END IF;
117
118 -- scan the input array to check whether
119 -- the fetched task is also getting changed
120 l_tot_task_count := p_in_task_tbl.COUNT;
121
122 FOR i IN p_in_task_tbl.FIRST..p_in_task_tbl.LAST LOOP
123 IF p_in_task_tbl(i).pa_task_id = l_task_id OR
124 p_in_task_tbl(i).pm_task_reference = l_pm_task_reference THEN
125 IF p_in_task_tbl(i).pa_task_number = p_in_task_number THEN
126
127 IF l_debug_mode = 'Y' THEN
128 pa_debug.write(l_module_name, 'p_in_task_tbl(i).pa_task_id : ' || p_in_task_tbl(i).pa_task_id , l_debug_level3);
129 pa_debug.write(l_module_name, 'p_in_task_tbl(i).pm_task_reference : ' || p_in_task_tbl(i).pm_task_reference, l_debug_level3);
130 pa_debug.write(l_module_name, 'p_in_task_tbl(i).pa_task_number : ' || p_in_task_tbl(i).pa_task_number , l_debug_level3);
131 pa_debug.write(l_module_name, 'l_task_id : ' || l_task_id , l_debug_level3);
132 pa_debug.write(l_module_name, 'l_pm_task_reference : ' || l_pm_task_reference , l_debug_level3);
133 pa_debug.write(l_module_name, 'p_in_task_number : ' || p_in_task_number , l_debug_level3);
134 END IF;
135
136 -- The task number for this task is not getting changed
137 -- Hence , we cannot update the task that we are processing
138 -- to the new task number.
139 -- Eg: We are processing task 2.1
140 -- It is getting changed to 2.3. There is already a task
141 -- in the database with task number = 2.3. Unless, this
142 -- is getting changed to something else, we cannot update
143 -- 2.1 to 2.3
144 l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
145 (p_task_number=> p_in_task_tbl(i).task_name
146 ,p_task_reference => p_in_task_tbl(i).pm_task_reference
147 ,p_task_id => l_task_id);
148
149 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
150 THEN
151 pa_interface_utils_pub.map_new_amg_msg
152 ( p_old_message_code => 'PA_TASK_NUMBER_NOT_UNIQUE'
153 ,p_msg_attribute => 'CHANGE'
154 ,p_resize_flag => 'N'
155 ,p_msg_context => 'TASK'
156 ,p_attribute1 => l_amg_segment1
157 ,p_attribute2 => l_amg_task_number
158 ,p_attribute3 => ''
159 ,p_attribute4 => ''
160 ,p_attribute5 => '');
161 END IF;
162 p_multiple_task_msg := 'F';
163 EXIT;
164 END IF;
165
166 -- Now update the processing task number to a temporary value
167 -- Doing this in loop to handle the existing element_number with ^ || x
168 DECLARE
169 cnt NUMBER := 0 ;
170 k NUMBER := 0;
171 BEGIN
172 WHILE cnt = 0 LOOP -- if no rows updated then loop
173 k := k+1;
174 BEGIN
175 UPDATE pa_proj_elements
176 SET element_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR || TO_CHAR(k)
177 WHERE proj_element_id = l_task_id;
178 cnt := SQL%ROWCOUNT;
179 EXIT;
180 EXCEPTION
181 WHEN DUP_VAL_ON_INDEX THEN
182 NULL;
183 END;
184 END LOOP;
185 END;
186
187 EXIT;
188 END IF;
189 END LOOP;
190
191 IF p_multiple_task_msg = 'F'
192 THEN
193 RAISE FND_API.G_EXC_ERROR;
194 END IF;
195
196 END IF;
197
198 EXCEPTION
199
200 WHEN FND_API.G_EXC_ERROR
201 THEN
202
203 p_return_status := FND_API.G_RET_STS_ERROR;
204
205 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
206 THEN
207
208 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
209
210 WHEN OTHERS THEN
211
212 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
213
214 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
215 THEN
216 FND_MSG_PUB.add_exc_msg
217 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
218 , p_procedure_name =>'handle_task_number_change' );
219
220 END IF;
221
222 END handle_task_number_change;
223
224 -- API name : create_default_structure
225 -- Type : PL/SQL Public procedure
226 -- Pre-reqs : None
227 -- Return Value : N/A
228 -- Prameters
229 -- p_dest_project_id IN NUMBER
230 -- p_dest_project_name IN VARCHAR2
231 -- p_dest_project_number IN VARCHAR2
232 -- p_dest_description IN VARCHAR2
233 -- p_dest_org_id IN NUMBER
234 -- x_msg_count OUT NUMBER
235 -- x_msg_data OUT VARCHAR2
236 -- x_return_status OUT VARCHAR2
237 --
238 -- History
239 --
240 -- 14-DEC-01 MAansari -Created
241 --
242 --
243
244 PROCEDURE create_default_structure
245 ( p_dest_project_id IN NUMBER
246 ,p_dest_project_name IN VARCHAR2
247 ,p_dest_project_number IN VARCHAR2
248 ,p_dest_description IN VARCHAR2
249 ,p_struc_type IN VARCHAR2 := 'WORKPLAN'
250 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
251 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
252 ,x_return_status OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
253
254 cursor get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
255 select nvl(max(version_number),0)+1
256 from pa_proj_elem_ver_structure
257 where project_id = c_project_id
258 and proj_element_id = c_proj_element_id
259 and status_code <> 'STRUCTURE_PUBLISHED';
260
261 X_ROW_ID VARCHAR2(18);
262 x_structure_id NUMBER;
263 x_struc_version_id NUMBER;
264 -- added for Bug: 45377865
265 l_new_struc_version_id NUMBER;
266 -- added for Bug: 4537865
267 l_status_code VARCHAR2(150);
268 l_struc_ver_number NUMBER;
269 l_ref_task_version_id NUMBER;
270 l_peer_or_sub VARCHAR2(4);
271 l_return_status VARCHAR2(1);
272 l_msg_count NUMBER;
273 l_msg_data VARCHAR2(2000);
274 x_task_version_id NUMBER;
275 x_pev_schedule_id NUMBER;
276 x_pev_structure_id NUMBER;
277 x_error_msg VARCHAR2(250);
278 l_old_wbs_level NUMBER;
279 API_ERROR EXCEPTION;
280 l_suffix VARCHAR2(250);
281 l_name VARCHAR2(250);
282 l_append VARCHAR2(250);
283
284 CURSOR cur_elem_ver_seq
285 IS
286 SELECT pa_proj_element_versions_s.nextval
287 FROM sys.dual;
288
289 BEGIN
290
291 --Clear Error Messages.
292 IF FND_MSG_PUB.count_msg = 0
293 THEN
294 FND_MSG_PUB.initialize;
295 END IF;
296
297 IF p_struc_type = 'WORKPLAN'
298 THEN
299 l_append := ': ';
300
301 select meaning
302 into l_suffix
303 from pa_lookups
304 where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
305 and lookup_code = 'WORKPLAN';
306
307 l_name := substr(p_dest_project_name||l_append||l_suffix, 1, 240);
308 ELSE
309 l_name := p_dest_project_name;
310 END IF;
311
312 Savepoint create_dflt_structure;
313 --For each project create 1 structure
314 PA_PROJECT_STRUCTURE_PVT1.Create_Structure(
315 p_project_id => p_dest_project_id
316 ,p_structure_number => p_dest_project_number
317 ,p_structure_name => l_name
318 ,p_structure_description => p_dest_description
319 ,p_calling_flag => p_struc_type
320 ,x_structure_id => x_structure_id
321 ,x_return_status => l_return_status
322 ,x_msg_count => l_msg_count
323 ,x_msg_data => l_msg_data
324 );
325
326
327 IF x_structure_id IS NULL OR l_return_status <> 'S'
328 THEN
329 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
330 ,p_msg_name => 'PA_PS_NO_STRUC_CREATED');
331 raise API_ERROR;
332 END IF;
333
334
335 --The following code is added to populate parent_structure version id.
336
337 OPEN cur_elem_ver_seq;
338 FETCH cur_elem_ver_seq INTO x_struc_version_id;
339 CLOSE cur_elem_ver_seq;
340 --End
341
342 -- Fix for 4657794 :- This is fix for regression introduced by 4537865
343 -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_new_struc_version_id
344 -- to x_struc_version_id
345
346 l_new_struc_version_id := x_struc_version_id ;
347
348 -- End 4657794
349
350 PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row(
351 X_ROW_ID => X_row_id
352 --,X_ELEMENT_VERSION_ID => x_struc_version_id * Commented for Bug Fix: 4537865
353 ,X_ELEMENT_VERSION_ID =>l_new_struc_version_id -- added for Bug fix: 4537865
354 ,X_PROJ_ELEMENT_ID => x_structure_id
355 ,X_OBJECT_TYPE => 'PA_STRUCTURES'
356 ,X_PROJECT_ID => p_dest_project_id
357 ,X_PARENT_STRUCTURE_VERSION_ID => x_struc_version_id
358 ,X_DISPLAY_SEQUENCE => null
359 ,X_WBS_LEVEL => null
360 ,X_WBS_NUMBER => null
361 ,X_ATTRIBUTE_CATEGORY => null
362 ,X_ATTRIBUTE1 => null
363 ,X_ATTRIBUTE2 => null
364 ,X_ATTRIBUTE3 => null
365 ,X_ATTRIBUTE4 => null
366 ,X_ATTRIBUTE5 => null
367 ,X_ATTRIBUTE6 => null
368 ,X_ATTRIBUTE7 => null
369 ,X_ATTRIBUTE8 => null
370 ,X_ATTRIBUTE9 => null
371 ,X_ATTRIBUTE10 => null
372 ,X_ATTRIBUTE11 => null
373 ,X_ATTRIBUTE12 => null
374 ,X_ATTRIBUTE13 => null
375 ,X_ATTRIBUTE14 => null
376 ,X_ATTRIBUTE15 => null
377 ,X_TASK_UNPUB_VER_STATUS_CODE => null
378 ,X_SOURCE_OBJECT_ID => p_dest_project_id
379 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
380 );
381 -- added for Bug fix: 4537865
382 x_struc_version_id := l_new_struc_version_id;
383 -- added for Bug fix: 4537865
384
385 IF x_struc_version_id IS NULL
386 THEN
387 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
388 ,p_msg_name => 'PA_PS_NO_STRUC_VER_CREATED');
389 raise API_ERROR;
390 END IF;
391
392 --Get structure version number
393 OPEN get_working_ver_num(p_dest_project_id, x_structure_id);
394 FETCH get_working_ver_num INTO l_struc_ver_number;
395 CLOSE get_working_ver_num;
396 l_status_code := 'STRUCTURE_WORKING';
397
398
399 PA_PROJ_ELEM_VER_STRUCTURE_PKG.insert_row(
400 X_ROWID => x_row_id
401 , X_PEV_STRUCTURE_ID => x_pev_structure_id
402 , X_ELEMENT_VERSION_ID => x_struc_version_id
403 , X_VERSION_NUMBER => l_struc_ver_number
404 , X_NAME => l_name
405 , X_PROJECT_ID => p_dest_project_id
406 , X_PROJ_ELEMENT_ID => x_structure_id
407 , X_DESCRIPTION => p_dest_description
408 , X_EFFECTIVE_DATE => null
409 , X_PUBLISHED_DATE => null
410 , X_PUBLISHED_BY => null
411 , X_CURRENT_BASELINE_DATE => null
412 , X_CURRENT_BASELINE_FLAG => 'N'
413 , X_CURRENT_BASELINE_BY => null
414 , X_ORIGINAL_BASELINE_DATE => null
415 , X_ORIGINAL_BASELINE_FLAG => 'N'
416 , X_ORIGINAL_BASELINE_BY => null
417 , X_LOCK_STATUS_CODE => NULL
418 , X_LOCKED_BY => NULL
419 , X_LOCKED_DATE => NULL
420 , X_STATUS_CODE => l_status_code
421 , X_WF_STATUS_CODE => NULL
422 , X_LATEST_EFF_PUBLISHED_FLAG => 'N'
423 , X_CHANGE_REASON_CODE => NULL
424 , X_RECORD_VERSION_NUMBER => 1
425 , X_CURRENT_WORKING_FLAG => 'N' /* Not applicable to default financial str. bug 3301192 */
426 , X_SOURCE_OBJECT_ID => p_dest_project_id
427 , X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
428 );
429
430
431 IF NVL( p_struc_type, 'WORKPLAN' ) = 'WORKPLAN'
432 THEN
433 PA_TASK_PUB1.Create_Schedule_Version(
434 p_element_version_id => x_struc_version_id
435 ,p_scheduled_start_date => SYSDATE
436 ,p_scheduled_end_date => SYSDATE
437 ,x_pev_schedule_id => x_pev_schedule_id
438 ,x_return_status => l_return_status
439 ,x_msg_count => l_msg_count
440 ,x_msg_data => l_msg_data
441 );
442
443 IF l_return_status <> 'S'
444 THEN
445 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
446 ,p_msg_name => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
447 raise api_error;
448 END IF;
449 END IF;
450
451
452 x_return_status := FND_API.G_RET_STS_SUCCESS;
453 EXCEPTION
454 WHEN API_ERROR THEN
455 x_return_status := FND_API.G_RET_STS_ERROR;
456 rollback to create_dflt_structure;
457 WHEN OTHERS THEN
458 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
459 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
460 p_procedure_name => 'CREATE_DEFAULT_STRUCTURE',
461 p_error_text => SUBSTRB(SQLERRM,1,240));
462 rollback to create_dflt_structure;
463 raise;
464 END create_default_structure;
465
466
467 -- API name : create_default_task_structure
468 -- Type : PL/SQL Public procedure
469 -- Pre-reqs : None
470 -- Return Value : N/A
471 -- Prameters
472 -- p_project_id IN NUMBER
473 -- x_msg_count OUT NUMBER
474 -- x_msg_data OUT VARCHAR2
475 -- x_return_status OUT VARCHAR2
476 --
477 -- History
478 --
479 -- 14-DEC-01 MAansari -Created
480 --
481 --
482
483 PROCEDURE create_default_task_structure
484 ( p_project_id IN NUMBER
485 ,p_struc_type IN VARCHAR2 := 'WORKPLAN'
486 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
487 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
488 ,x_return_status OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
489
490
491 CURSOR cur_pa_tasks2 IS
492 SELECT distinct top_task_id
493 FROM pa_tasks pt
494 WHERE project_id = p_project_id;
495
496 CURSOR cur_pa_tasks( c_top_task_id NUMBER )
497 IS
498 SELECT task_id, wbs_level, parent_task_id, task_number, task_name, description, carrying_out_organization_id
499 FROM pa_tasks pt
500 WHERE project_id = p_project_id
501 START WITH task_id = c_top_task_id
502 CONNECT BY PRIOR task_id = parent_task_id;
503
504
505 CURSOR parent_of_previous_task( c_task_version_id NUMBER )
506 IS
507 SELECT object_id_from1
508 FROM pa_object_relationships
509 WHERE object_id_to1 = c_task_version_id
510 and object_type_from in ('PA_STRUCTURES','PA_TASKS') -- bug 6429275
511 and object_type_to = 'PA_TASKS'
512 and relationship_type = 'S';
513
514
515 CURSOR cur_pa_projs
516 IS
517 SELECT 'x'
518 FROM pa_projects_all
519 WHERE split_cost_from_workplan_flag = 'Y'
520 AND project_id = p_project_id;
521
522 CURSOR cur_pa_proj_elem_vers2( c_strcu_ver_id NUMBER )
523 IS
524 SELECT 'x'
525 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
526 WHERE c.project_id = p_project_id
527 AND a.structure_type_id = b.structure_type_id
528 AND b.proj_element_id = c.proj_element_id
529 AND a.structure_type = 'WORKPLAN'
530 AND element_version_id = c_strcu_ver_id;
531
532 -- xxlu added for DFF attributes for calling create_schedule_version
533 CURSOR cur_ver_sch_attr_rec(c_element_version_id IN NUMBER) IS
534 SELECT *
535 FROM pa_proj_elem_ver_schedule
536 WHERE element_version_id = c_element_version_id
537 AND project_id = p_project_id
538 ;
539 l_ver_sch_attr_rec cur_ver_sch_attr_rec%ROWTYPE;
540 -- end xxlu changes
541
542 --hsiu added for parent_structure_id column
543 CURSOR get_structure(c_project_id NUMBER, c_struc_type VARCHAR2) IS
544 select a.proj_element_id
545 from pa_proj_elements a,
546 pa_proj_structure_types b,
547 pa_structure_types c
548 where a.project_id = c_project_id
549 and c.structure_type_class_code = c_struc_type
550 and c.structure_type_id = b.structure_type_id
551 and b.proj_element_id = a.proj_element_id;
552 l_structure_id NUMBER;
553
554 l_split_flag VARCHAR2(1);
555
556 X_ROW_ID VARCHAR2(18);
557 x_structure_id NUMBER;
558 x_struc_version_id NUMBER;
559 l_status_code VARCHAR2(150);
560 l_struc_ver_number NUMBER;
561 l_ref_task_version_id NUMBER;
562 l_peer_or_sub VARCHAR2(4);
563 l_return_status VARCHAR2(1);
564 l_msg_count NUMBER;
565 l_msg_data VARCHAR2(2000);
566 x_task_version_id NUMBER;
567 x_pev_schedule_id NUMBER;
568 x_pev_structure_id NUMBER;
569 x_error_msg VARCHAR2(250);
570 l_old_wbs_level NUMBER;
571 l_postfix VARCHAR2(2) := ' ';
572
573 API_ERROR EXCEPTION;
574
575 CURSOR cur_proj_elem_vers
576 IS
577 SELECT ppev.element_version_id
578 FROM pa_proj_element_versions ppev,
579 pa_proj_structure_types ppst,
580 pa_structure_types pst
581 WHERE ppev.project_id = p_project_id
582 AND ppev.object_type = 'PA_STRUCTURES'
583 AND ppev.proj_element_id = ppst.proj_element_id
584 AND pst.structure_type_id = ppst.structure_type_id
585 AND pst.structure_type = p_struc_type;
586
587 l_proj_element_id NUMBER;
588 l_prev_top_task_ver_id NUMBER;
589 l_dummy_char VARCHAR2(1);
590 BEGIN
591
592 --Clear Error Messages.
593 IF FND_MSG_PUB.count_msg = 0
594 THEN
595 FND_MSG_PUB.initialize;
596 END IF;
597
598
599 savepoint create_dflt_task_struc;
600 if p_project_id is null then
601 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
602 ,p_msg_name => 'PA_NO_PROJECT_ID');
603 end if;
604
605
606 l_ref_task_version_id := null;
607
608 FOR cur_pa_tasks2_rec IN cur_pa_tasks2 LOOP
609
610 FOR cur_pa_tasks_rec IN cur_pa_tasks( cur_pa_tasks2_rec.top_task_id ) LOOP
611
612
613
614 --The task will be created with a different ids if the structure is a WORKPLAN and split from COSTING.
615 --Otherwise same ids as in pa_tasks will be used to create tasks in pa_proj_elements if only one default
616 --structure is being created.
617 l_split_flag := null;
618 OPEN cur_pa_projs;
619 FETCH cur_pa_projs INTO l_split_flag;
620 CLOSE cur_pa_projs;
621
622 --For each project create 1 task
623 IF p_struc_type = 'WORKPLAN' AND l_split_flag IS NOT NULL
624 THEN
625 --l_proj_element_id := null;
626 SELECT pa_tasks_s.nextval INTO l_proj_element_id
627 FROM sys.dual;
628 l_postfix := '-'||SUBSTR( p_struc_type, 1, 1 );
629 --hsiu added for parent_structure_id column
630 OPEN get_structure(p_project_id, 'WORKPLAN');
631 FETCH get_structure into l_structure_id;
632 CLOSE get_structure;
633 ELSE
634 --hsiu added for parent_structure_id column
635 l_proj_element_id := cur_pa_tasks_rec.task_id;
636 OPEN get_structure(p_project_id, 'FINANCIAL');
637 FETCH get_structure into l_structure_id;
638 CLOSE get_structure;
639 END IF;
640 PA_PROJ_ELEMENTS_PKG.Insert_Row(
641 X_ROW_ID => X_ROW_ID
642 ,X_PROJ_ELEMENT_ID => l_proj_element_id
643 ,X_PROJECT_ID => p_project_id
644 ,X_OBJECT_TYPE => 'PA_TASKS'
645 ,X_ELEMENT_NUMBER => cur_pa_tasks_rec.task_number||l_postfix
646 ,X_NAME => cur_pa_tasks_rec.task_name
647 ,X_DESCRIPTION => cur_pa_tasks_rec.description
648 ,X_STATUS_CODE => '124' --- NOT_STARTED -- 124 bug 2826235
649 ,X_WF_STATUS_CODE => null
650 ,X_PM_PRODUCT_CODE => null
651 ,X_PM_TASK_REFERENCE => null
652 ,X_CLOSED_DATE => null
653 ,X_LOCATION_ID => null
654 ,X_MANAGER_PERSON_ID => null
655 ,X_CARRYING_OUT_ORGANIZATION_ID => cur_pa_tasks_rec.carrying_out_organization_id
656 ,X_TYPE_ID => 1
657 ,X_PRIORITY_CODE => null
658 ,X_INC_PROJ_PROGRESS_FLAG => 'N'
659 ,X_REQUEST_ID => null
660 ,X_PROGRAM_APPLICATION_ID => null
661 ,X_PROGRAM_ID => null
662 ,X_PROGRAM_UPDATE_DATE => null
663 ,X_LINK_TASK_FLAG => 'N'
664 ,X_ATTRIBUTE_CATEGORY => null
665 ,X_ATTRIBUTE1 => null
666 ,X_ATTRIBUTE2 => null
667 ,X_ATTRIBUTE3 => null
668 ,X_ATTRIBUTE4 => null
669 ,X_ATTRIBUTE5 => null
670 ,X_ATTRIBUTE6 => null
671 ,X_ATTRIBUTE7 => null
672 ,X_ATTRIBUTE8 => null
673 ,X_ATTRIBUTE9 => null
674 ,X_ATTRIBUTE10 => null
675 ,X_ATTRIBUTE11 => null
676 ,X_ATTRIBUTE12 => null
677 ,X_ATTRIBUTE13 => null
678 ,X_ATTRIBUTE14 => null
679 ,X_ATTRIBUTE15 => null
680 ,X_TASK_WEIGHTING_DERIV_CODE => NULl
681 ,X_WORK_ITEM_CODE => NULL
682 ,X_UOM_CODE => NULL
683 ,X_WQ_ACTUAL_ENTRY_CODE => NULL
684 ,X_TASK_PROGRESS_ENTRY_PAGE_ID => NULL
685 ,X_PARENT_STRUCTURE_ID => l_structure_id
686 ,X_PHASE_CODE => NULL
687 ,X_PHASE_VERSION_ID => NULL
688 ,X_SOURCE_OBJECT_ID => p_project_id
689 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
690 );
691
692
693 IF cur_pa_tasks%ROWCOUNT = 1
694 THEN
695
696 IF cur_pa_tasks2%ROWCOUNT = 1
697 THEN
698 OPEN cur_proj_elem_vers;
699 FETCH cur_proj_elem_vers INTO x_struc_version_id;
700 CLOSE cur_proj_elem_vers;
701
702 l_ref_task_version_id := x_struc_version_id;
703 l_peer_or_sub := 'SUB';
704 ELSE
705 l_ref_task_version_id := l_prev_top_task_ver_id;
706 l_peer_or_sub := 'PEER';
707 END IF;
708 ELSE
709 IF cur_pa_tasks_rec.wbs_level > l_old_wbs_level
710 THEN
711 l_peer_or_sub := 'SUB';
712 ELSIF cur_pa_tasks_rec.wbs_level = l_old_wbs_level
713 THEN
714 l_peer_or_sub := 'PEER';
715 ELSE
716 OPEN parent_of_previous_task( l_ref_task_version_id );
717 FETCH parent_of_previous_task INTO l_ref_task_version_id;
718 CLOSE parent_of_previous_task;
719 l_peer_or_sub := 'PEER';
720 END IF;
721 END IF;
722
723 PA_TASK_PVT1.Create_Task_Version(
724 p_ref_task_version_id => l_ref_task_version_id
725 ,p_peer_or_sub => l_peer_or_sub
726 ,p_task_id => l_proj_element_id
727 ,p_WEIGHTING_PERCENTAGE => 100
728 ,p_task_unpub_ver_status_code => 'WORKING'
729 ,x_task_version_id => x_task_version_id
730 ,x_return_status => l_return_status
731 ,x_msg_count => l_msg_count
732 ,x_msg_data => l_msg_data
733 );
734
735 IF cur_pa_tasks%ROWCOUNT = 1
736 THEN
737 l_prev_top_task_ver_id := x_task_version_id;
738 END IF;
739
740 IF l_return_status <> 'S'
741 THEN
742 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
743 ,p_msg_name => 'PA_PS_NO_TASK_VER_CREATED');
744 raise api_error;
745 END IF;
746
747 l_ref_task_version_id := x_task_version_id;
748 l_old_wbs_level := cur_pa_tasks_rec.wbs_level;
749
750 -- IF p_struc_type = 'WORKPLAN'
751
752 --if it is a workplan structure.
753 OPEN cur_pa_proj_elem_vers2( x_struc_version_id );
754 FETCH cur_pa_proj_elem_vers2 INTO l_dummy_char;
755 IF cur_pa_proj_elem_vers2%FOUND
756 THEN
757 -- xxlu added DFF attributes
758 OPEN cur_ver_sch_attr_rec(x_task_version_id);
759 FETCH cur_ver_sch_attr_rec INTO l_ver_sch_attr_rec;
760 CLOSE cur_ver_sch_attr_rec;
761
762 PA_TASK_PUB1.Create_Schedule_Version(
763 p_element_version_id => x_task_version_id
764 ,p_scheduled_start_date => SYSDATE
765 ,p_scheduled_end_date => SYSDATE
766 ,p_attribute_category => l_ver_sch_attr_rec.attribute_category
767 ,p_attribute1 => l_ver_sch_attr_rec.attribute1
768 ,p_attribute2 => l_ver_sch_attr_rec.attribute2
769 ,p_attribute3 => l_ver_sch_attr_rec.attribute3
770 ,p_attribute4 => l_ver_sch_attr_rec.attribute4
771 ,p_attribute5 => l_ver_sch_attr_rec.attribute5
772 ,p_attribute6 => l_ver_sch_attr_rec.attribute6
773 ,p_attribute7 => l_ver_sch_attr_rec.attribute7
774 ,p_attribute8 => l_ver_sch_attr_rec.attribute8
775 ,p_attribute9 => l_ver_sch_attr_rec.attribute9
776 ,p_attribute10 => l_ver_sch_attr_rec.attribute10
777 ,p_attribute11 => l_ver_sch_attr_rec.attribute11
778 ,p_attribute12 => l_ver_sch_attr_rec.attribute12
779 ,p_attribute13 => l_ver_sch_attr_rec.attribute13
780 ,p_attribute14 => l_ver_sch_attr_rec.attribute14
781 ,p_attribute15 => l_ver_sch_attr_rec.attribute15
782 ,x_pev_schedule_id => x_pev_schedule_id
783 ,x_return_status => l_return_status
784 ,x_msg_count => l_msg_count
785 ,x_msg_data => l_msg_data
786 );
787 -- end xxlu changes
788
789 IF l_return_status <> 'S'
790 THEN
791 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
792 ,p_msg_name => 'PA_PS_NO_TASK_SCH_VER_CREATED');
793 raise api_error;
794 END IF;
795 END IF;
796 CLOSE cur_pa_proj_elem_vers2;
797 END LOOP; --task loop end.
798 END LOOP;
799
800 x_return_status := FND_API.G_RET_STS_SUCCESS;
801 EXCEPTION
802 WHEN API_ERROR THEN
803 x_return_status := FND_API.G_RET_STS_ERROR;
804 rollback to create_dflt_task_struc;
805 WHEN OTHERS THEN
806 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
807 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
808 p_procedure_name => 'CREATE_DEFAULT_TASK_STRUCTURE',
809 p_error_text => SUBSTRB(SQLERRM,1,240));
810 rollback to create_dflt_task_struc;
811 raise;
812 END create_default_task_structure;
813
814
815 -- API name : create_task_structure
816 -- Type : PL/sql Public procedure
817 -- Pre-reqs : None
818 -- Return Value : N/A
819 -- Prameters
820 -- p_project_id IN NUMBER
821 -- x_msg_count OUT NUMBER
822 -- x_msg_data OUT VARCHAR2
823 -- x_return_status OUT VARCHAR2
824 --
825 -- History
826 --
827 -- 14-DEC-01 MAansari -Created
828 --
829 -- Notes: This api is called from form PAXPREPR.fmb ON-INSERT of tasks block.
830 -- The call is in PA_TASKS_PKG.ON_INSERT API.
831
832 PROCEDURE create_task_structure(
833 p_calling_module IN VARCHAR2 := 'FORMS'
834 ,p_project_id IN NUMBER
835 ,p_task_id IN NUMBER
836 ,p_parent_task_id IN NUMBER
837 ,p_ref_task_id IN NUMBER := -9999
838 ,p_task_number IN VARCHAR2
839 ,p_task_name IN VARCHAR2
840 ,p_task_description IN VARCHAR2
841 ,p_carrying_out_organization_id IN NUMBER
842 ,p_structure_type IN VARCHAR2 := 'FINANCIAL'
843 ,p_actual_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
844 ,p_actual_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
845 ,p_early_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
846 ,p_early_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
847 ,p_late_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
848 ,p_late_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
849 ,p_scheduled_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
850 ,p_scheduled_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
851 ,P_OBLIGATION_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
852 ,P_OBLIGATION_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
853 ,P_ESTIMATED_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
854 ,P_ESTIMATED_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
855 ,P_BASELINE_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
856 ,P_BASELINE_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
857 ,P_CLOSED_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
858 ,P_WQ_UOM_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
859 ,P_WQ_ITEM_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
860 ,P_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
861 ,P_WF_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
862 ,P_PM_SOURCE_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
863 ,P_PRIORITY_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
864 ,P_MILESTONE_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
865 ,P_CRITICAL_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
866 ,P_INC_PROJ_PROGRESS_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
867 ,P_LINK_TASK_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
868 ,P_CALENDAR_ID IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
869 ,P_PLANNED_EFFORT IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
870 ,P_DURATION IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
871 ,P_PLANNED_WORK_QUANTITY IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
872 ,P_TASK_TYPE IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
873 ,P_PM_SOURCE_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
874 ,p_location_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
875 ,p_manager_person_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
876 ,p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
877 ,p_parent_structure_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
878 ,p_phase_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
879 ,P_PHASE_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
880 ,p_create_task_version_only IN VARCHAR2 := 'N'
881 ,p_financial_task_flag IN VARCHAR2 := 'Y' --bug 3301192
882
883 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
884 ,p_ext_act_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
885 ,p_ext_remain_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
886 ,p_ext_sch_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
887 -- (end venkat) new params for bug #3450684 -------------------------------------------------
888
889 -- (begin) add new params bug - 3654243 -----
890 ,p_base_percent_comp_deriv_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
891 ,p_sch_tool_tsk_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
892 ,p_constraint_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
893 ,p_constraint_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
894 ,p_free_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
895 ,p_total_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
896 ,p_effort_driven_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
897 ,p_level_assignments_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
898 ,p_invoice_method IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
899 ,p_customer_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
900 ,p_gen_etc_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
901 -- (end) add new params bug - 3654243 -----
902
903 --Bug 6153503
904 ,p_validate_dff IN VARCHAR2 := 'N'
905 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
906 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
907 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
908 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
909 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
910 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
911 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
912 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
913 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
914 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
915 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
916 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
917 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
918 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
919 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
920 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
921 --Bug 6153503
922
923 ,x_task_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
924 ,x_task_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
925 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
926 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
927 ,x_return_status OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
928
929 X_ROW_ID VARCHAR2(18);
930 x_structure_id NUMBER;
931 x_struc_version_id NUMBER;
932 l_status_code VARCHAR2(150);
933 l_struc_ver_number NUMBER;
934 l_ref_task_version_id NUMBER;
935 l_peer_or_sub VARCHAR2(4);
936 l_return_status VARCHAR2(1);
937 l_msg_count NUMBER;
938 l_msg_data VARCHAR2(2000);
939 l_task_version_id NUMBER;
940 x_pev_schedule_id NUMBER;
941 x_pev_structure_id NUMBER;
942 x_error_msg VARCHAR2(250);
943 l_old_wbs_level NUMBER;
944 API_ERROR EXCEPTION;
945 l_task_id NUMBER;
946 l_dummy_char VARCHAR2(1);
947 l_task_number VARCHAR2(100);
948
949 -- <Bug#2843596>
950 l_sharing_enabled VARCHAR(1);
951
952 --hsiu: bug 2691868
953 l_scheduled_start_date DATE;
954 l_scheduled_finish_date DATE;
955
956 --hsiu added for task version status
957 CURSOR cur_proj_is_template
958 IS select 'Y'
959 from pa_projects_all
960 where project_id = p_project_id
961 and template_flag = 'Y';
962 l_template_flag VARCHAR2(1);
963 l_task_unpub_ver_status_code PA_PROJ_ELEMENT_VERSIONS.task_unpub_ver_status_code%TYPE;
964 l_parent_struc_ver_id NUMBER;
965
966 --end changes
967
968 CURSOR cur_proj_elem_vers( c_structure_version_id NUMBER )
969 IS
970 SELECT element_version_id
971 FROM pa_proj_element_versions
972 WHERE project_id = p_project_id
973 AND object_type = 'PA_TASKS'
974 AND parent_structure_version_id = c_structure_version_id
975 AND ( ( proj_element_id = ( select top_task_id
976 from pa_tasks
977 where task_id = p_ref_task_id ) AND p_structure_type = 'FINANCIAL' )
978 --OR ( proj_element_id = p_ref_task_id AND p_structure_type = 'WORKPLAN' )
979 )
980 --bug 2852891
981 UNION
982 SELECT element_version_id
983 FROM pa_proj_element_versions
984 WHERE project_id = p_project_id
985 AND object_type = 'PA_TASKS'
986 AND parent_structure_version_id = c_structure_version_id
987 AND p_structure_type = 'WORKPLAN'
988 AND display_sequence = ( SELECT max( display_sequence )
989 FROM pa_proj_element_versions
990 WHERE project_id = p_project_id
991 AND object_type = 'PA_TASKS'
992 AND parent_structure_version_id = c_structure_version_id
993 AND wbs_level = 1 --Since there is no parent task id passed therefore its always created as top task
994 AND display_sequence <= ( SELECT display_sequence
995 FROM pa_proj_element_versions
996 WHERE project_id = p_project_id
997 AND object_type = 'PA_TASKS'
998 AND parent_structure_version_id = c_structure_version_id
999 AND proj_element_id = p_ref_task_id )
1000 )
1001 --bug 2852891
1002 ;
1003
1004 CURSOR cur_ref_task_ver_id( c_structure_version_id NUMBER )
1005 IS
1006 SELECT element_version_id
1007 FROM pa_proj_element_versions
1008 WHERE project_id = p_project_id
1009 AND object_type = 'PA_TASKS'
1010 AND parent_structure_version_id = c_structure_version_id
1011 AND proj_element_id = p_ref_task_id
1012 ;
1013
1014 --AMG bug
1015 CURSOR cur_ref_task_ver_id2( c_structure_version_id NUMBER, c_parent_task_version_id NUMBER )
1016 IS
1017 SELECT element_version_id
1018 FROM pa_proj_element_versions
1019 WHERE project_id = p_project_id
1020 AND object_type = 'PA_TASKS'
1021 AND parent_structure_version_id = c_structure_version_id
1022 and element_version_id in ( SELECT object_id_to1
1023 FROM pa_object_relationships
1024 WHERE object_id_from1 = c_parent_task_version_id
1025 and relationship_type = 'S'
1026 )
1027 AND display_sequence = ( SELECT max( display_sequence )
1028 FROM pa_proj_element_versions
1029 WHERE project_id = p_project_id
1030 AND object_type = 'PA_TASKS'
1031 AND parent_structure_version_id = c_structure_version_id
1032 and element_version_id in ( SELECT object_id_to1
1033 FROM pa_object_relationships
1034 WHERE object_id_from1 = c_parent_task_version_id
1035 and relationship_type = 'S'
1036 )
1037 );
1038
1039 l_parent_task_version_id NUMBER;
1040 --AMG bug
1041
1042 CURSOR cur_pa_proj_elem_vers2( c_task_version_id NUMBER )
1043 IS
1044 SELECT 'x'
1045 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
1046 WHERE c.project_id = p_project_id
1047 AND a.structure_type_id = b.structure_type_id
1048 AND b.proj_element_id = c.proj_element_id
1049 AND a.structure_type = 'WORKPLAN'
1050 AND element_version_id = ( SELECT parent_structure_version_id
1051 FROM pa_proj_element_versions
1052 WHERE element_version_id = c_task_version_id );
1053
1054
1055 --The above sql will return the element_version id that will be served as a
1056 --reference task version to create task version for p_task_id.
1057
1058 CURSOR cur_proj_elem_vers2( c_structure_version_id NUMBER, c_task_id NUMBER )
1059 IS
1060 SELECT element_version_id
1061 FROM pa_proj_element_versions
1062 WHERE project_id = p_project_id
1063 AND proj_element_id = c_task_id
1064 AND parent_structure_version_id = c_structure_version_id
1065 AND object_type = 'PA_TASKS';
1066
1067 CURSOR cur_child_exists(c_task_ver_id NUMBER)
1068 IS
1069 select 'Y'
1070 FROM pa_object_relationships
1071 where object_id_from1 = c_task_ver_id
1072 AND object_type_from IN ('PA_TASKS', 'PA_STRUCTURES') --Corrected 'PA_TASK' TO 'PA_TASKS' for Bug 4035526
1073 and relationship_type = 'S';
1074 l_child_exists VARCHAR2(1);
1075
1076 -- xxlu added for DFF attributes for calling create_schedule_version
1077 CURSOR cur_ver_sch_attr_rec(c_element_version_id IN NUMBER) IS
1078 SELECT *
1079 FROM pa_proj_elem_ver_schedule
1080 WHERE element_version_id = c_element_version_id
1081 and project_id = p_project_id
1082 ;
1083 l_ver_sch_attr_rec cur_ver_sch_attr_rec%ROWTYPE;
1084 -- end xxlu changes
1085
1086 --Adding the following cursor to avoid create_task_structure call if
1087 --execute_update_project is called from import or publish apis.
1088 CURSOR cur_pa_temp_import
1089 IS
1090 SELECT 'X' from PA_TEMP_IMPORT_TASKS
1091 WHERE project_id = p_project_id;
1092
1093 /* Bug 2680486 -- Performance changes -- Added d.project_id= c.project_id
1094 join in the following cursor*/
1095
1096 CURSOR cur_struc_ver_fin
1097 IS
1098 SELECT c.element_version_id
1099 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
1100 ,pa_proj_elem_ver_structure d
1101 WHERE c.project_id = p_project_id
1102 AND a.structure_type_id = b.structure_type_id
1103 AND b.proj_element_id = c.proj_element_id
1104 AND a.structure_type = p_structure_type
1105 AND d.project_id = c.project_id
1106 AND d.element_version_id = c.element_version_id
1107 AND d.status_code = 'STRUCTURE_PUBLISHED'
1108 AND d.latest_eff_published_flag = 'Y'
1109 ;
1110
1111 /* Bug 2680486 -- Performance changes -- Added d.project_id= c.project_id
1112 join in the following cursor*/
1113
1114 CURSOR cur_struc_ver_wp
1115 IS
1116 SELECT c.element_version_id
1117 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
1118 ,pa_proj_elem_ver_structure d
1119 WHERE c.project_id = p_project_id
1120 AND a.structure_type_id = b.structure_type_id
1121 AND b.proj_element_id = c.proj_element_id
1122 AND a.structure_type = p_structure_type
1123 AND d.project_id = c.project_id
1124 AND d.element_version_id = c.element_version_id
1125 AND d.status_code = 'STRUCTURE_WORKING'
1126 ;
1127
1128 --hsiu added for parent_structure_id column
1129 CURSOR get_structure(c_project_id NUMBER, c_struc_type VARCHAR2) IS
1130 select a.proj_element_id
1131 from pa_proj_elements a,
1132 pa_proj_structure_types b,
1133 pa_structure_types c
1134 where a.project_id = c_project_id
1135 and c.structure_type_class_code = c_struc_type
1136 and c.structure_type_id = b.structure_type_id
1137 and b.proj_element_id = a.proj_element_id;
1138 l_structure_id NUMBER;
1139 l_weighting NUMBER(17,2);
1140
1141
1142 --hsiu added for task status
1143 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
1144 select object_id_from1
1145 from pa_object_relationships
1146 where object_id_to1 = c_elem_ver_id
1147 and object_type_to = 'PA_TASKS'
1148 and relationship_type = 'S';
1149 l_parent_ver_id NUMBER;
1150 l_error_msg_code VARCHAR2(255);
1151 l_structure_version_id NUMBER;
1152
1153 --proj conn
1154 CURSOR c1( c_element_version_id NUMBER )
1155 IS
1156 SELECT wbs_level
1157 FROM pa_proj_element_versions
1158 WHERE element_version_id = c_element_version_id;
1159
1160 CURSOR c2( c_structure_version_id NUMBER, c_element_version_id NUMBER, c_wbs_level NUMBER )
1161 IS
1162 SELECT element_version_id
1163 FROM pa_proj_element_versions
1164 WHERE display_sequence = ( SELECT max( display_sequence) from pa_proj_element_versions
1165 WHERE parent_structure_version_id = c_structure_version_id
1166 AND display_sequence < ( SELECT display_sequence from pa_proj_element_versions
1167 WHERE element_version_id = c_element_version_id )
1168 AND wbs_level = c_wbs_level )
1169 AND parent_structure_version_id = c_structure_version_id;
1170 l_wbs_level NUMBER;
1171
1172 CURSOR cur_proj_wrk_attr
1173 IS
1174 select AUTO_PUB_UPON_CREATION_FLAG
1175 from pa_proj_workplan_attr
1176 where project_id = p_project_id;
1177 l_auto_pub_flag VARCHAR2(1);
1178 --proj conn
1179 --bug 2736392
1180 l_str_status_code VARCHAR2(150);
1181 --bug 2736392
1182 l_init_msg_list VARCHAR2(1);
1183
1184 /* Bug 2736392 Begin */
1185 CURSOR cur_struc_ver_wp2
1186 IS
1187 SELECT c.element_version_id
1188 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
1189 ,pa_proj_elem_ver_structure d
1190 WHERE c.project_id = p_project_id
1191 AND a.structure_type_id = b.structure_type_id
1192 AND b.proj_element_id = c.proj_element_id
1193 AND a.structure_type = p_structure_type
1194 AND d.project_id = c.project_id
1195 AND d.element_version_id = c.element_version_id
1196 AND (d.status_code = 'STRUCTURE_SUBMITTED' OR d.status_code='STRUCTURE_REJECTED' OR d.status_code= 'STRUCTURE_APPROVED')
1197 ;
1198 l_dummy_num number;
1199 /* Bug 2736392 End */
1200
1201 l_tasks_out pa_project_pub.task_out_tbl_type ; --dummy variables. --bug 2732895
1202
1203 --bug 2824612
1204 l_wq_planned_quantity NUMBER;
1205 l_task_type_id NUMBER;
1206 --bug 2824612
1207
1208 l_workplan_enabled VARCHAR2(1);
1209
1210 --3035902: process update flag changes
1211 cursor get_task_type_id(c_proj_element_id NUMBER) IS
1212 select type_id
1213 from pa_proj_elements
1214 where proj_element_id = c_proj_element_id;
1215 --3035902: end process update flag changes
1216
1217 l_versioned VARCHAR2(1);
1218 l_shared VARCHAR2(1);
1219 l_published_ver_exists VARCHAR2(1);
1220
1221 /* Bug # 3420093 - Adding Progress Management modifications to create_task flow. */
1222
1223 l_add_task_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
1224 l_add_planned_effort PA_NUM_1000_NUM := PA_NUM_1000_NUM();
1225 l_add_start_date PA_DATE_1000_DATE := PA_DATE_1000_DATE();
1226 l_add_end_date PA_DATE_1000_DATE := PA_DATE_1000_DATE();
1227
1228 l_del_task_ver_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1229
1230 /* Bug # 3420093 - Adding Progress Management modifications to create_task flow. */
1231
1232 --Bug 6153503
1233 l_attribute_category VARCHAR2(30);
1234 l_attribute1 VARCHAR2(150);
1235 l_attribute2 VARCHAR2(150);
1236 l_attribute3 VARCHAR2(150);
1237 l_attribute4 VARCHAR2(150);
1238 l_attribute5 VARCHAR2(150);
1239 l_attribute6 VARCHAR2(150);
1240 l_attribute7 VARCHAR2(150);
1241 l_attribute8 VARCHAR2(150);
1242 l_attribute9 VARCHAR2(150);
1243 l_attribute10 VARCHAR2(150);
1244 l_attribute11 VARCHAR2(150);
1245 l_attribute12 VARCHAR2(150);
1246 l_attribute13 VARCHAR2(150);
1247 l_attribute14 VARCHAR2(150);
1248 l_attribute15 VARCHAR2(150);
1249 l_return_msg varchar2(2000);
1250 l_validate_status varchar2(1);
1251
1252 BEGIN
1253
1254 --Clear Error Messages.
1255 IF FND_MSG_PUB.count_msg = 0
1256 THEN
1257 FND_MSG_PUB.initialize;
1258 END IF;
1259
1260 SAVEPOINT create_task_struc;
1261
1262 OPEN cur_proj_is_template;
1263 FETCH cur_proj_is_template into l_template_flag;
1264 IF cur_proj_is_template%NOTFOUND THEN
1265 l_template_flag := 'N';
1266 END IF;
1267 CLOSE cur_proj_is_template;
1268
1269 OPEN cur_pa_temp_import;
1270 FETCH cur_pa_temp_import INTO l_dummy_char;
1271 IF cur_pa_temp_import%NOTFOUND
1272 THEN
1273
1274 l_versioned := PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id);
1275 l_shared := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id);
1276
1277 IF p_task_id IS NOT NULL AND p_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1278 THEN
1279 l_task_id := p_task_id;
1280 ELSE
1281 l_task_id := null;
1282 END IF;
1283
1284 IF p_structure_type = 'WORKPLAN'
1285 THEN
1286 --The following logic found in add_task_round_one api
1287 IF p_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_task_number IS NULL
1288 THEN
1289 l_task_number := P_PM_SOURCE_reference;
1290 ELSE
1291 l_task_number := p_task_number;
1292 END IF;
1293 --Get workplan structure id
1294
1295 -- <Bug#2843596>
1296 -- only retrieve cached value if projectId matches
1297 -- and the cached workplan struct id is not null
1298 IF (nvl(g_project_id,-99) = p_project_id and g_workplan_struct_id IS NOT NULL) THEN
1299 l_structure_id := g_workplan_struct_id;
1300 ELSE
1301 OPEN get_structure(p_project_id, 'WORKPLAN');
1302 FETCH get_structure into l_structure_id;
1303 CLOSE get_structure;
1304 g_project_id := p_project_id;
1305 g_workplan_struct_id := l_structure_id;
1306 END IF;
1307 -- </Bug#2843596>
1308
1309 IF p_structure_version_id IS NULL OR
1310 p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1311 THEN
1312 --proj conn
1313 --If auto publish upon creation is on and versioning is enabled then
1314 --update the workplan structure as working bcoz it is created as pub by copy structure.
1315 OPEN cur_proj_wrk_attr;
1316 FETCH cur_proj_wrk_attr INTO l_auto_pub_flag ;
1317 CLOSE cur_proj_wrk_attr;
1318 IF NVL( l_auto_pub_flag,'N' ) = 'Y' AND
1319 NVL( IS_WP_VERSIONING_ENABLED(p_project_id), 'N' ) = 'Y'
1320 THEN
1321 UPDATE pa_proj_elem_ver_structure
1322 set status_code = 'STRUCTURE_WORKING'
1323 where project_id = p_project_id
1324 and proj_element_id = l_structure_id;
1325 END IF;
1326 --proj conn
1327 OPEN cur_struc_ver_wp;
1328 FETCH cur_struc_ver_wp INTO l_structure_version_id;
1329 CLOSE cur_struc_ver_wp;
1330 IF l_structure_version_id IS NULL /* If auto publish upon creation is on then
1331 l_structure_version_id will be null */
1332 THEN
1333 DECLARE
1334
1335 /* Bug 2680486 -- Performance changes -- Added d.project_id= c.project_id
1336 join in the following cursor*/
1337
1338 CURSOR c1 is
1339 SELECT c.element_version_id
1340 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
1341 ,pa_proj_elem_ver_structure d
1342 WHERE c.project_id = p_project_id
1343 AND a.structure_type_id = b.structure_type_id
1344 AND b.proj_element_id = c.proj_element_id
1345 AND a.structure_type = p_structure_type
1346 AND d.project_id = c.project_id
1347 AND d.element_version_id = c.element_version_id
1348 AND d.status_code = 'STRUCTURE_PUBLISHED'
1349 ;
1350 begin
1351 OPEN C1;
1352 FETCH C1 into l_structure_version_id;
1353 CLOSE C1;
1354 end;
1355 END IF;
1356 ELSE
1357 l_structure_version_id := p_structure_version_id;
1358 END IF;
1359 ELSE
1360 l_task_number := p_task_number;
1361 --Get financial structure id
1362 -- <Bug#2843596>
1363 -- only retrieve cached value if projectId matches
1364 -- and the cached financial struct id is not null
1365 IF (nvl(g_project_id,-99) = p_project_id and g_financial_struct_id IS NOT NULL) THEN
1366 l_structure_id := g_financial_struct_id;
1367 ELSE
1368 OPEN get_structure(p_project_id, 'FINANCIAL');
1369 FETCH get_structure into l_structure_id;
1370 CLOSE get_structure;
1371 g_project_id := p_project_id;
1372 g_financial_struct_id := l_structure_id;
1373 END IF;
1374 -- </Bug#2843596>
1375
1376 IF p_structure_version_id IS NULL OR
1377 p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1378 THEN
1379 IF l_template_flag = 'N'
1380 THEN
1381
1382 /*IF p_calling_module = 'FORMS' --get the published version bcoz forms cannot add to working version
1383 --This is true only if there are any published version.
1384 THEN
1385 --get structure version if its a top task
1386 OPEN cur_struc_ver_fin;
1387 FETCH cur_struc_ver_fin INTO l_structure_version_id;
1388 CLOSE cur_struc_ver_fin;
1389 ELSE should not stop adding tasks to a WORKING version if there is no PUBLISHED version bug 2777656
1390 */
1391 --get structure version if its a top task
1392 OPEN cur_struc_ver_wp;
1393 FETCH cur_struc_ver_wp INTO l_structure_version_id;
1394 CLOSE cur_struc_ver_wp;
1395 IF l_structure_version_id IS NULL --if versioning is diabled then get the published version
1396 THEN
1397 OPEN cur_struc_ver_fin;
1398 FETCH cur_struc_ver_fin INTO l_structure_version_id;
1399 CLOSE cur_struc_ver_fin;
1400 END IF;
1401 --END IF;
1402 ELSE
1403 --get structure version if its a top task
1404 OPEN cur_struc_ver_wp;
1405 FETCH cur_struc_ver_wp INTO l_structure_version_id;
1406 CLOSE cur_struc_ver_wp;
1407 END IF;
1408 ELSE
1409 l_structure_version_id := p_structure_version_id;
1410 END IF;
1411 END IF;
1412
1413
1414 /*** Commented for Bug 2736392 -- Added new code below
1415 This code will never do the intended task because p_structure_version_id and l_structure_version_id
1416 will be null in this case. If a structure version is in approved, submitted or rejected state, then it
1417 will never be returned from cursor cur_struc_ver_wp, so how can we get the status of a null struc ver.
1418
1419 IF p_structure_version_id IS NOT NULL AND
1420 p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1421 THEN
1422 --Validate the incoming structure version id
1423
1424 PA_PROJECT_STRUCTURE_UTILS.Structure_Version_Name_Or_Id(
1425 p_structure_id => null
1426 ,p_structure_version_name => null
1427 ,p_structure_version_id => p_structure_version_id
1428 ,p_check_id_flag => 'Y'
1429 ,x_structure_version_id => l_structure_version_id
1430 ,x_return_status => l_return_status
1431 ,x_error_message_code => l_msg_data
1432 );
1433 IF l_return_status <> 'S'
1434 THEN
1435 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1436 ,p_msg_name => l_msg_data );
1437 raise api_error;
1438 END IF;
1439
1440 --bug 2736392
1441 l_str_status_code := PA_PROJECT_STRUCTURE_UTILS.get_structrue_version_status
1442 ( p_project_id => p_project_id
1443 ,p_structure_version_id => p_structure_version_id );
1444 IF l_str_status_code IS NULL
1445 THEN
1446 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1447 ,p_msg_name => 'PA_PS_INV_STR_VER_ID' );
1448 raise api_error;
1449 ELSIF l_str_status_code in ( 'STRUCTURE_SUBMITTED', 'STRUCTURE_REJECTED', 'STRUCTURE_APPROVED' )
1450 THEN
1451 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1452 ,p_msg_name => 'PA_PS_INV_STR_VER_ID2' );
1453 raise api_error;
1454 END IF;
1455 --bug 2736392
1456
1457 END IF;
1458 ***/
1459
1460 /* New Code Begin for Bug 2736392 -- Commnted the above code*/
1461
1462 IF p_structure_version_id IS NOT NULL AND p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1463 THEN
1464 l_str_status_code := PA_PROJECT_STRUCTURE_UTILS.get_structrue_version_status
1465 ( p_project_id => p_project_id
1466 ,p_structure_version_id => p_structure_version_id );
1467 IF l_str_status_code IS NULL
1468 THEN
1469 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1470 ,p_msg_name => 'PA_PS_INV_STR_VER_ID' );
1471 raise api_error;
1472 ELSIF l_str_status_code in ( 'STRUCTURE_SUBMITTED', 'STRUCTURE_REJECTED', 'STRUCTURE_APPROVED' )
1473 THEN
1474 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1475 ,p_msg_name => 'PA_PS_INV_STR_VER_ID2' );
1476 raise api_error;
1477 END IF;
1478 ELSIF l_structure_version_id IS NULL
1479 THEN
1480 OPEN cur_struc_ver_wp2;
1481 FETCH cur_struc_ver_wp2 INTO l_dummy_num;
1482 CLOSE cur_struc_ver_wp2;
1483
1484 IF l_dummy_num is NOT NULL THEN
1485 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1486 ,p_msg_name => 'PA_PS_INV_STR_VER_ID2' );
1487 raise api_error;
1488 ELSE
1489 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1490 ,p_msg_name => 'PA_PS_INV_STR_VER_ID' );
1491 raise api_error;
1492 END IF;
1493 END IF;
1494
1495 /* New Code End for Bug 2736392 */
1496
1497 ---The following code is added to prevent message list re-initialization if there are any messages already on stack.
1498 IF p_calling_module = 'AMG' AND FND_MSG_PUB.count_msg > 0
1499 THEN
1500 l_init_msg_list := 'F';
1501 ELSE
1502 l_init_msg_list := 'T';
1503 END IF;
1504
1505 IF p_create_task_version_only = 'N'
1506 THEN
1507
1508 --For each project create 1 task
1509 PA_TASK_PUB1.create_task(
1510 p_calling_module => p_calling_module
1511 ,p_init_msg_list => l_init_msg_list
1512 ,p_object_type => 'PA_TASKS'
1513 ,p_project_id => p_project_id
1514 ,p_structure_id => l_structure_id --1 --anything. does not matter since its not gonna useful to create record
1515 --in pa_proj_elements in PA_TASK_PVT1.CREATE_TASK.
1516 ,p_task_number => l_task_number
1517 ,p_task_name => p_task_name
1518 ,p_task_description => p_task_description
1519 ,p_location_id => p_location_id
1520 ,p_task_manager_id => p_manager_person_id
1521 ,p_carrying_out_org_id => p_carrying_out_organization_id
1522 ,p_priority_code => p_priority_code
1523 ,p_TYPE_ID => p_task_type
1524 ,p_status_code => p_status_code
1525 ,p_inc_proj_progress_flag => p_inc_proj_progress_flag
1526 ,p_pm_product_code => P_PM_SOURCE_CODE
1527 ,p_pm_task_reference => P_PM_SOURCE_reference
1528 ,p_closed_date => p_closed_date
1529 ,p_link_task_flag => p_link_task_flag
1530 ,P_UOM_CODE => P_WQ_UOM_CODE
1531 ,p_work_item_code => P_WQ_ITEM_CODE
1532 ,x_task_id => l_task_id
1533 ----- begin Bug 3654243 --------------------------------------------
1534 ,p_Base_Perc_Comp_Deriv_Code => p_base_percent_comp_deriv_code
1535 ----- end Bug 3654243 ----------------------------------------------
1536
1537 ,x_return_status => l_return_status
1538 ,x_msg_count => l_msg_count
1539 ,x_msg_data => l_msg_data
1540 );
1541
1542 IF l_return_status <> 'S'
1543 THEN
1544 /*PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1545 ,p_msg_name => l_msg_data );
1546 */
1547 raise api_error;
1548 END IF;
1549 END IF;
1550
1551 x_task_id := l_task_id;
1552
1553 -- IF p_structure_type = 'FINANCIAL'
1554 -- THEN
1555 IF p_parent_task_id IS NOT NULL AND p_parent_task_id <> l_task_id
1556 AND p_parent_task_id = p_ref_task_id
1557 THEN
1558 l_peer_or_sub := 'SUB';
1559 --get reference task version id
1560 OPEN cur_proj_elem_vers2( l_structure_version_id, p_parent_task_id );
1561 FETCH cur_proj_elem_vers2 INTO l_ref_task_version_id;
1562 CLOSE cur_proj_elem_vers2;
1563
1564 OPEN cur_child_exists(l_ref_task_version_id);
1565 FETCH cur_child_exists into l_child_exists;
1566 IF (cur_child_exists%NOTFOUND) THEN
1567 l_weighting := 100;
1568 ELSE
1569 l_weighting := 0;
1570 END IF;
1571 CLOSE cur_child_exists;
1572
1573 --Bug 2732907
1574 IF l_ref_task_version_id IS NOT NULL
1575 THEN
1576 update pa_proj_elem_ver_schedule
1577 set WQ_PLANNED_QUANTITY = null
1578 where element_version_id = l_ref_task_version_id
1579 and project_id = p_project_id
1580 and proj_element_id = p_parent_task_id;
1581 END IF;
1582 --Bug 2732907
1583
1584 ELSIF p_ref_task_id IS NOT NULL
1585 THEN
1586 l_peer_or_sub := 'PEER';
1587 IF p_parent_task_id IS NULL --top task
1588 THEN
1589 OPEN cur_proj_elem_vers( l_structure_version_id );
1590 FETCH cur_proj_elem_vers INTO l_ref_task_version_id;
1591 CLOSE cur_proj_elem_vers;
1592 ELSE -- not a top task. Added the following to maintain sequence between the two
1593 --leaf level peer tasks.
1594
1595 OPEN cur_proj_elem_vers2( l_structure_version_id, p_parent_task_id );
1596 FETCH cur_proj_elem_vers2 INTO l_parent_task_version_id;
1597 CLOSE cur_proj_elem_vers2;
1598
1599 /** OPEN cur_ref_task_ver_id2( l_structure_version_id, l_parent_task_version_id );
1600 fetch cur_ref_task_ver_id2 INTO l_ref_task_version_id;
1601 CLOSE cur_ref_task_ver_id2; **/
1602 -- Above code commented and code below added for 4038249. The code above
1603 -- was resetting the p_ref_task_version_id to that of that latest task
1604 -- instead of setting it to the p_ref_task_id passed by the user.
1605 OPEN cur_proj_elem_vers2( l_structure_version_id, p_ref_task_id );
1606 FETCH cur_proj_elem_vers2 INTO l_ref_task_version_id;
1607 CLOSE cur_proj_elem_vers2;
1608 -- Code changes end for 4038249
1609 END IF;
1610 l_weighting := 0;
1611 ELSIF p_ref_task_id IS NULL
1612 THEN
1613 --get structure version if its a top task
1614 l_peer_or_sub := 'SUB';
1615 /*IF l_template_flag = 'N'
1616 THEN
1617 --get structure version if its a top task
1618 OPEN cur_struc_ver_fin;
1619 FETCH cur_struc_ver_fin INTO l_ref_task_version_id;
1620 CLOSE cur_struc_ver_fin;
1621 ELSE
1622 --For templates its always WORKING_STRUCTURE
1623 OPEN cur_struc_ver_wp;
1624 FETCH cur_struc_ver_wp INTO l_ref_task_version_id;
1625 CLOSE cur_struc_ver_wp;
1626 END IF;*/
1627 l_ref_task_version_id := l_structure_version_id;
1628 OPEN cur_child_exists(l_ref_task_version_id);
1629 FETCH cur_child_exists into l_child_exists;
1630 IF cur_child_exists%NOTFOUND THEN
1631 l_weighting := 100;
1632 ELSE
1633 l_weighting := 0;
1634 END IF;
1635 CLOSE cur_child_exists;
1636 END IF;
1637 --Commenting out the following as its not needed. We dont any separate logic for WORKPLAN and FINANCIAL to get the
1638 --ref task version id. There is only one cursor cur_proj_elem_vers that takes structure type
1639 /* ELSIF p_structure_type = 'WORKPLAN'
1640 THEN
1641 IF p_parent_task_id IS NOT NULL AND p_parent_task_id <> l_task_id AND
1642 p_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1643 THEN
1644 l_peer_or_sub := 'SUB';
1645 --get reference task version id
1646 OPEN cur_proj_elem_vers2( l_structure_version_id, p_parent_task_id );
1647 FETCH cur_proj_elem_vers2 INTO l_ref_task_version_id;
1648 CLOSE cur_proj_elem_vers2;
1649
1650 OPEN cur_child_exists(l_ref_task_version_id);
1651 FETCH cur_child_exists into l_child_exists;
1652 IF (cur_child_exists%NOTFOUND) THEN
1653 l_weighting := 100;
1654 ELSE
1655 l_weighting := 0;
1656 END IF;
1657 CLOSE cur_child_exists;
1658
1659 --Bug 2732907
1660 IF l_ref_task_version_id IS NOT NULL
1661 THEN
1662 update pa_proj_elem_ver_schedule
1663 set WQ_PLANNED_QUANTITY = null
1664 where element_version_id = l_ref_task_version_id
1665 and project_id = p_project_id
1666 and proj_element_id = p_parent_task_id;
1667 END IF;
1668 --Bug 2732907
1669
1670 ELSIF ( p_parent_task_id IS NULL OR p_parent_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
1671 --proj conn
1672 AND ( p_ref_task_id is null OR p_ref_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
1673 --proj conn
1674 THEN
1675 --get structure version if its a top task
1676 l_ref_task_version_id := l_structure_version_id;
1677
1678 OPEN cur_child_exists(l_ref_task_version_id);
1679 FETCH cur_child_exists into l_child_exists;
1680 IF cur_child_exists%NOTFOUND THEN
1681 l_weighting := 100;
1682 ELSE
1683 l_weighting := 0;
1684 END IF;
1685 CLOSE cur_child_exists;
1686
1687 l_peer_or_sub := 'SUB';
1688 */
1689 /*IF p_structure_version_id IS NULL OR
1690 p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1691 THEN
1692 OPEN cur_struc_ver_wp;
1693 FETCH cur_struc_ver_wp INTO l_ref_task_version_id;
1694 CLOSE cur_struc_ver_wp;
1695 ELSE
1696 l_ref_task_version_id := p_structure_version_id;
1697 END IF;
1698 */
1699 /* ELSIF p_ref_task_id IS NOT NULL AND p_ref_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1700 THEN
1701 l_weighting := 0;
1702 OPEN cur_proj_elem_vers2( l_structure_version_id, p_ref_task_id );
1703 FETCH cur_proj_elem_vers2 INTO l_ref_task_version_id;
1704 CLOSE cur_proj_elem_vers2;
1705 --proj conn
1706 OPEN c1( l_ref_task_version_id );
1707 FETCH c1 into l_wbs_level;
1708 CLOSE c1;
1709
1710 IF l_wbs_level > 1
1711 THEN
1712 OPEN c2( l_structure_version_id,l_ref_task_version_id,1 );
1713 FETCH c2 into l_ref_task_version_id;
1714 CLOSE c2;
1715 END IF;
1716 l_peer_or_sub := 'PEER';
1717 --proj conn
1718 END IF;
1719 END IF; --<< p_structrue_type >>
1720 */
1721
1722 IF (l_template_flag = 'N') THEN
1723 --check if structure is shared
1724 -- if shared, check if versioned
1725 -- 'WORKING' if versioned; 'PUBLISHED' if not
1726 -- if split, check if 'FINANCIAL'
1727 -- 'PUBLISHED' if financial
1728 -- check if versioned
1729 -- 'WORKING' if versioend; 'PUBLISHED' if not
1730
1731 -- <Bug#2843596>
1732 IF (nvl(g_project_id,-99) = p_project_id and g_sharing_enabled IS NOT NULL) THEN
1733 l_sharing_enabled := g_sharing_enabled;
1734 ELSE
1735 l_sharing_enabled := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id);
1736 g_project_id := p_project_id;
1737 g_sharing_enabled := l_sharing_enabled;
1738 END IF;
1739 -- </Bug#2843596>
1740
1741 IF ('Y' = l_sharing_enabled) THEN
1742 -- Bug 4067757 used l_versioned instead of calling Check_Wp_Versioning_Enabled multiple times
1743 /* IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id)) THEN */
1744 IF (l_versioned = 'Y') THEN
1745 l_task_unpub_ver_status_code := 'WORKING';
1746 ELSE
1747 l_task_unpub_ver_status_code := 'PUBLISHED';
1748 END IF;
1749 ELSE --split
1750 IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'FINANCIAL') AND
1751 'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'WORKPLAN')) THEN
1752 l_task_unpub_ver_status_code := 'PUBLISHED';
1753 ELSE --workplan only
1754 -- Bug 4067757 used l_versioned instead of calling Check_Wp_Versioning_Enabled multiple times
1755 /* IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id)) THEN */
1756 IF (l_versioned = 'Y') THEN
1757 l_task_unpub_ver_status_code := 'WORKING';
1758 ELSE
1759 l_task_unpub_ver_status_code := 'PUBLISHED';
1760 END IF;
1761 END IF;
1762 END IF;
1763 ELSE
1764 l_task_unpub_ver_status_code := 'WORKING';
1765 END IF;
1766
1767 --hsiu added for task status
1768 --check if ok to create subtask
1769 IF (l_peer_or_sub = 'PEER') THEN
1770 OPEN get_parent_version_id(l_ref_task_version_id);
1771 FETCH get_parent_version_id into l_parent_ver_id;
1772 CLOSE get_parent_version_id;
1773 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
1774 p_parent_task_ver_id => l_parent_ver_id
1775 ,x_return_status => l_return_status
1776 ,x_error_message_code => l_error_msg_code
1777 );
1778
1779 IF (l_return_status <> 'Y') THEN
1780 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1781 p_msg_name => l_error_msg_code);
1782 raise api_error;
1783 END IF;
1784 ELSE
1785 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
1786 p_parent_task_ver_id => l_ref_task_version_id
1787 ,x_return_status => l_return_status
1788 ,x_error_message_code => l_error_msg_code
1789 );
1790
1791 IF (l_return_status <> 'Y') THEN
1792 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1793 p_msg_name => l_error_msg_code);
1794 raise api_error;
1795 END IF;
1796 END IF;
1797 --end changes for task status
1798
1799 PA_TASK_PVT1.Create_Task_Version(
1800 p_ref_task_version_id => l_ref_task_version_id
1801 ,p_init_msg_list => l_init_msg_list --Added for bug 4955475
1802 ,p_peer_or_sub => l_peer_or_sub
1803 ,p_task_id => l_task_id
1804 ,p_WEIGHTING_PERCENTAGE => l_weighting
1805 ,p_task_unpub_ver_status_code => l_task_unpub_ver_status_code
1806 ,p_financial_task_flag => p_financial_task_flag --bug 3301192
1807 ,x_task_version_id => l_task_version_id
1808 ,x_return_status => l_return_status
1809 ,x_msg_count => l_msg_count
1810 ,x_msg_data => l_msg_data
1811 );
1812
1813 IF l_return_status <> 'S'
1814 THEN
1815 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1816 ,p_msg_name => 'PA_PS_NO_TASK_VER_CREATED');
1817 raise api_error;
1818 END IF;
1819
1820 x_task_version_id := l_task_version_id;
1821
1822
1823 --bug 3010538
1824
1825 --3035902: process update flag changes
1826 OPEN get_task_type_id(l_task_id);
1827 FETCH get_task_type_id INTO l_task_type_id;
1828 CLOSE get_task_type_id;
1829 --Bug No 3450684 SMukka Commented if condition
1830 --IF NOT ( p_structure_type = 'WORKPLAN' AND
1831 -- l_shared = 'N' AND
1832 -- ( PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id) = 'MANUAL' OR
1833 -- pa_task_type_utils.check_tk_type_progressable(l_task_type_id)='N') )
1834 --THEN
1835
1836 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
1837 ( p_calling_context => p_calling_module
1838 ,p_project_id => p_project_id
1839 ,p_structure_version_id => l_structure_version_id
1840 ,p_update_wbs_flag => 'Y'
1841 ,x_return_status => l_return_status
1842 ,x_msg_count => l_msg_count
1843 ,x_msg_data => l_msg_data);
1844
1845 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
1846 x_msg_count := l_msg_count;
1847 x_msg_data := l_msg_data;
1848 RAISE API_ERROR;
1849 end if;
1850 --END IF;
1851
1852 IF p_structure_type = 'FINANCIAL'
1853 THEN
1854 l_published_ver_exists := PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS( p_project_id, l_structure_id );
1855 IF ( l_versioned = 'N' OR
1856 l_shared = 'N' OR
1857 ( l_versioned = 'Y' AND
1858 l_shared = 'Y' AND
1859 l_published_ver_exists = 'N' ) )
1860 THEN
1861 pa_fp_refresh_elements_pub.set_process_flag_proj(
1862 p_project_id => p_project_id
1863 ,p_request_id => null
1864 ,p_process_code => null
1865 ,p_refresh_required_flag => 'Y'
1866 ,x_return_status => l_return_status
1867 ,x_msg_count => l_msg_count
1868 ,x_msg_data => l_msg_data );
1869
1870 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
1871 x_msg_count := l_msg_count;
1872 x_msg_data := l_msg_data;
1873 RAISE API_ERROR;
1874 end if;
1875 END IF;
1876 END IF;
1877
1878 --End bug 3010538
1879
1880 --hsiu added task status rollup
1881 select parent_structure_version_id
1882 into l_parent_struc_ver_id
1883 from pa_proj_element_versions
1884 where element_version_id = l_task_version_id;
1885
1886 IF (PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id) = 'Y') AND
1887 -- Bug 4067757 used l_versioned instead of calling Check_Wp_Versioning_Enabled multiple times
1888 /* (PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id) = 'N') AND */
1889 (l_versioned = 'N') AND NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER, 'N') = 'N' AND -- Check roll up flag to defer roll ups 14556729
1890 (PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'WORKPLAN') = 'Y') THEN
1891 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
1892 p_structure_version_id => l_parent_struc_ver_id
1893 ,p_element_version_id => l_task_version_id
1894 ,x_return_status => l_return_status
1895 ,x_msg_count => l_msg_count
1896 ,x_msg_data => l_msg_data
1897 );
1898
1899 IF (l_return_status <> 'S') THEN
1900 x_msg_count := l_msg_count;
1901 x_msg_data := l_msg_data;
1902 RAISE API_ERROR;
1903 END IF;
1904
1905 END IF;
1906 --end task status rollup
1907
1908
1909 --Hsiu added
1910 --inherit task type
1911 IF p_create_task_version_only = 'N'
1912 THEN
1913 PA_TASK_PVT1.Inherit_task_type_attr(
1914 p_task_id => l_task_id
1915 ,p_task_version_id => l_task_version_id
1916 ,x_return_status => l_return_status
1917 ,x_msg_count => l_msg_count
1918 ,x_msg_data => l_msg_data
1919 );
1920
1921 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1922 raise api_error;
1923 END IF;
1924 END IF;
1925 --end inherit task type
1926
1927 OPEN cur_pa_proj_elem_vers2(l_task_version_id);
1928 FETCH cur_pa_proj_elem_vers2 INTO l_dummy_char;
1929 IF cur_pa_proj_elem_vers2%FOUND
1930 THEN
1931 -- xxlu added DFF attributes
1932 OPEN cur_ver_sch_attr_rec(l_task_version_id);
1933 FETCH cur_ver_sch_attr_rec INTO l_ver_sch_attr_rec;
1934 CLOSE cur_ver_sch_attr_rec;
1935
1936 --hsiu: added for bug 2691868
1937 IF (p_scheduled_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1938 l_scheduled_start_date := sysdate;
1939 ELSE
1940 l_scheduled_start_date := p_scheduled_start_date;
1941 END IF;
1942
1943 IF (p_scheduled_finish_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1944 l_scheduled_finish_date := sysdate;
1945 ELSE
1946 l_scheduled_finish_date := p_scheduled_finish_date;
1947 END IF;
1948
1949 --bug 2824612
1950
1951 /*
1952 SELECT type_id INTO l_task_type_id
1953 FROM pa_proj_elements
1954 WHERE proj_element_id = l_task_id
1955 AND project_id = p_project_id;
1956 */
1957
1958 IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_wq_enabled(l_task_type_id) OR
1959 'N' = PA_PROGRESS_UTILS.get_project_wq_flag(p_project_id)) THEN
1960 IF (P_PLANNED_WORK_QUANTITY <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND P_PLANNED_WORK_QUANTITY IS NOT NULL) THEN
1961 l_wq_planned_quantity := NULL;
1962 END IF;
1963 ELSE
1964 l_wq_planned_quantity := P_PLANNED_WORK_QUANTITY; --bug 2826992
1965 END IF;
1966
1967 l_workplan_enabled := 'Y';
1968 --bug 2824612
1969
1970 --Bug 6153503 start
1971 if (--p_attribute_category is null or
1972 p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1973 then
1974 l_attribute_category := l_ver_sch_attr_rec.attribute_category;
1975 else
1976 l_attribute_category := p_attribute_category;
1977 end if;
1978
1979
1980
1981 if (--p_attribute1 is null or
1982 p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1983 then
1984 l_attribute1 := l_ver_sch_attr_rec.attribute1;
1985 else
1986 l_attribute1 := p_attribute1;
1987 end if;
1988
1989
1990
1991 if (--p_attribute2 is null or
1992 p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1993 then
1994 l_attribute2 := l_ver_sch_attr_rec.attribute2;
1995 else
1996 l_attribute2 := p_attribute2;
1997 end if;
1998
1999
2000 if (--p_attribute3 is null or
2001 p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2002 then
2003 l_attribute3 := l_ver_sch_attr_rec.attribute3;
2004 else
2005 l_attribute3 := p_attribute3;
2006 end if;
2007
2008 if (--p_attribute4 is null or
2009 p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2010 then
2011 l_attribute4 := l_ver_sch_attr_rec.attribute4;
2012 else
2013 l_attribute4 := p_attribute4;
2014 end if;
2015
2016 if (--p_attribute5 is null or
2017 p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2018 then
2019 l_attribute5 := l_ver_sch_attr_rec.attribute5;
2020 else
2021 l_attribute5 := p_attribute5;
2022 end if;
2023
2024 if (--p_attribute6 is null or
2025 p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2026 then
2027 l_attribute6 := l_ver_sch_attr_rec.attribute6;
2028 else
2029 l_attribute6 := p_attribute6;
2030 end if;
2031
2032 if (--p_attribute7 is null or
2033 p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) -- Changed for Bug #6153681
2034 then
2035 l_attribute7 := l_ver_sch_attr_rec.attribute7;
2036 else
2037 l_attribute7 := p_attribute7;
2038 end if;
2039
2040 if (--p_attribute8 is null or
2041 p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2042 then
2043 l_attribute8 := l_ver_sch_attr_rec.attribute8;
2044 else
2045 l_attribute8 := p_attribute8;
2046 end if;
2047
2048 if (--p_attribute9 is null or
2049 p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2050 then
2051 l_attribute9 := l_ver_sch_attr_rec.attribute9;
2052 else
2053 l_attribute9 := p_attribute9;
2054 end if;
2055
2056 if (--p_attribute10 is null or
2057 p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2058 then
2059 l_attribute10 := l_ver_sch_attr_rec.attribute10;
2060 else
2061 l_attribute10 := p_attribute10;
2062 end if;
2063
2064 if (--p_attribute10 is null or
2065 p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2066 then
2067 l_attribute11 := l_ver_sch_attr_rec.attribute11;
2068 else
2069 l_attribute11 := p_attribute11;
2070 end if;
2071
2072 if (--p_attribute10 is null or
2073 p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2074 then
2075 l_attribute12 := l_ver_sch_attr_rec.attribute12;
2076 else
2077 l_attribute12 := p_attribute12;
2078 end if;
2079
2080 if (--p_attribute10 is null or
2081 p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2082 then
2083 l_attribute13 := l_ver_sch_attr_rec.attribute13;
2084 else
2085 l_attribute13 := p_attribute13;
2086 end if;
2087
2088 if (--p_attribute10 is null or
2089 p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2090 then
2091 l_attribute14 := l_ver_sch_attr_rec.attribute14;
2092 else
2093 l_attribute14 := p_attribute14;
2094 end if;
2095
2096
2097 if (--p_attribute10 is null or
2098 p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2099 then
2100 l_attribute15 := l_ver_sch_attr_rec.attribute15;
2101 else
2102 l_attribute15 := p_attribute15;
2103 end if;
2104
2105 --if added while fixing BUG 3919800
2106 --Add validation for PA_PROJ_ELEM_VER_SCH_DESC_FLEX
2107 --if l_attribute_category is not null and l_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2108 --then
2109 IF p_validate_dff = 'Y' THEN
2110 pa_task_utils.validate_flex_fields(
2111 p_desc_flex_name => 'PA_PROJ_ELEM_VER_SCH_DESC_FLEX'
2112 ,p_attribute_category => l_attribute_category
2113 ,p_attribute1 => l_attribute1
2114 ,p_attribute2 => l_attribute2
2115 ,p_attribute3 => l_attribute3
2116 ,p_attribute4 => l_attribute4
2117 ,p_attribute5 => l_attribute5
2118 ,p_attribute6 => l_attribute6
2119 ,p_attribute7 => l_attribute7
2120 ,p_attribute8 => l_attribute8
2121 ,p_attribute9 => l_attribute9
2122 ,p_attribute10 => l_attribute10
2123 ,p_attribute11 => l_attribute11
2124 ,p_attribute12 => l_attribute12
2125 ,p_attribute13 => l_attribute13
2126 ,p_attribute14 => l_attribute14
2127 ,p_attribute15 => l_attribute15
2128 ,p_RETURN_msg => l_return_msg
2129 ,p_validate_status => l_validate_status
2130 );
2131
2132 --end if;
2133
2134 IF l_validate_status = 'N'
2135 THEN
2136 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2137 THEN
2138 pa_interface_utils_pub.map_new_amg_msg
2139 ( p_old_message_code => 'PA_INVALID_FF_VALUES'
2140 ,p_msg_attribute => 'CHANGE'
2141 ,p_resize_flag => 'N'
2142 ,p_msg_context => 'FLEX'
2143 ,p_attribute1 => l_return_msg
2144 ,p_attribute2 => ''
2145 ,p_attribute3 => ''
2146 ,p_attribute4 => ''
2147 ,p_attribute5 => '');
2148 END IF;
2149 RAISE FND_API.G_EXC_ERROR;
2150 END IF;
2151 END IF;
2152 --Bug 6153503 end
2153 --End add rtarway, 3908013
2154
2155 PA_TASK_PUB1.Create_Schedule_Version(
2156 p_element_version_id => l_task_version_id
2157 ,p_init_msg_list => l_init_msg_list
2158 ,p_scheduled_start_date => l_scheduled_start_date
2159 ,p_scheduled_end_date => l_scheduled_finish_date
2160 ,p_calendar_id => P_CALENDAR_ID
2161 ,p_obligation_start_date => p_obligation_start_date
2162 ,p_obligation_end_date => p_obligation_finish_date
2163 ,p_actual_start_date => p_actual_start_date
2164 ,p_actual_finish_date => p_actual_finish_date
2165 ,p_estimate_start_date => p_estimated_start_date
2166 ,p_estimate_finish_date => p_estimated_finish_date
2167 ,p_duration => p_duration
2168 ,p_early_start_date => p_early_start_date
2169 ,p_early_end_date => p_early_finish_date
2170 ,p_late_start_date => p_late_start_date
2171 ,p_late_end_date => p_late_finish_date
2172 ,p_milestone_flag => p_milestone_flag
2173 ,p_critical_flag => p_critical_flag
2174 ,p_WQ_PLANNED_QUANTITY => l_wq_planned_quantity --bug 2824612
2175 ,p_PLANNED_EFFORT => p_planned_effort
2176 --Bug 6153503
2177 ,p_attribute_category => l_attribute_category --l_ver_sch_attr_rec.attribute_category
2178 ,p_attribute1 => l_attribute1--l_ver_sch_attr_rec.attribute1
2179 ,p_attribute2 => l_attribute2--l_ver_sch_attr_rec.attribute2
2180 ,p_attribute3 => l_attribute3--l_ver_sch_attr_rec.attribute3
2181 ,p_attribute4 => l_attribute4--l_ver_sch_attr_rec.attribute4
2182 ,p_attribute5 => l_attribute5--l_ver_sch_attr_rec.attribute5
2183 ,p_attribute6 => l_attribute6--l_ver_sch_attr_rec.attribute6
2184 ,p_attribute7 => l_attribute7--l_ver_sch_attr_rec.attribute7
2185 ,p_attribute8 => l_attribute8--l_ver_sch_attr_rec.attribute8
2186 ,p_attribute9 => l_attribute9--l_ver_sch_attr_rec.attribute9
2187 ,p_attribute10 => l_attribute10--l_ver_sch_attr_rec.attribute10
2188 ,p_attribute11 => l_attribute11--l_ver_sch_attr_rec.attribute11
2189 ,p_attribute12 => l_attribute12--l_ver_sch_attr_rec.attribute12
2190 ,p_attribute13 => l_attribute13--l_ver_sch_attr_rec.attribute13
2191 ,p_attribute14 => l_attribute14--l_ver_sch_attr_rec.attribute14
2192 ,p_attribute15 => l_attribute15--l_ver_sch_attr_rec.attribute15
2193 --Bug 6153503 end
2194 -- (Begin Venkat) new params for bug #3450684 ----------------------------------------------
2195 ,p_ext_act_duration => p_ext_act_duration
2196 ,p_ext_remain_duration => p_ext_remain_duration
2197 ,p_ext_sch_duration => p_ext_sch_duration
2198 -- (End Venkat) new params for bug #3450684 -------------------------------------------------
2199
2200 -- begin Bug 3654243 -----------------------------------------------------------------------
2201 ,p_def_sch_tool_tsk_type_code => p_sch_tool_tsk_type_code
2202 ,p_constraint_type_code => p_constraint_type_code
2203 ,p_constraint_date => p_constraint_date
2204 ,p_free_slack => p_free_slack
2205 ,p_total_slack => p_total_slack
2206 ,p_effort_driven_flag => p_effort_driven_flag
2207 ,p_level_assignments_flag => p_level_assignments_flag
2208 -- end Bug 3654243 -------------------------------------------------------------------------
2209
2210 ,x_pev_schedule_id => x_pev_schedule_id
2211 ,x_return_status => l_return_status
2212 ,x_msg_count => l_msg_count
2213 ,x_msg_data => l_msg_data
2214 );
2215 -- end xxlu changes
2216 END IF;
2217 CLOSE cur_pa_proj_elem_vers2;
2218
2219 IF l_return_status <> 'S'
2220 THEN
2221 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2222 ,p_msg_name => 'PA_PS_NO_TASK_SCH_VER_CREATED');
2223 raise api_error;
2224 END IF;
2225
2226 --bug 2732895 --create_task_structure
2227 --The following API should NOT be called if CREATE_TASK_STRUCTURE is called from AMG.
2228 --AMG recalculates the weightings once all the tasks are created.
2229 IF p_calling_module = 'FORMS'
2230 THEN
2231 IF l_workplan_enabled = 'Y'
2232 THEN
2233 PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings(
2234 p_tasks_in => l_tasks_out --null if called for one task
2235 ,p_task_version_id => l_task_version_id
2236 ,x_msg_count => l_msg_count
2237 ,x_msg_data => l_msg_data
2238 ,x_return_status => l_return_status
2239 );
2240 IF l_return_status <> 'S'
2241 THEN
2242 raise api_error;
2243 END IF;
2244
2245 --Bug 3170832 --uncommenting the call to rollup dates
2246 PA_PROJ_TASK_STRUC_PUB.rollup_dates(
2247 p_tasks_in => l_tasks_out --null if called for one task
2248 ,p_task_version_id => l_task_version_id
2249 ,p_structure_version_id => l_structure_version_id
2250 ,p_project_id => p_project_id
2251 ,x_msg_count => l_msg_count
2252 ,x_msg_data => l_msg_data
2253 ,x_return_status => l_return_status
2254 );
2255 IF l_return_status <> 'S'
2256 THEN
2257 raise api_error;
2258 END IF;
2259 --Bug 3170832 --uncommenting the call to rollup dates
2260
2261 END IF;
2262 END IF;
2263 --bug 2732895
2264
2265 END IF;
2266 CLOSE cur_pa_temp_import;
2267
2268 /* Bug # 3420093 - Adding Progress Management modifications to create_task flow. */
2269
2270 if (p_structure_type = 'WORKPLAN' ) then
2271
2272 if (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(x_task_version_id) = 'Y') then
2273 l_add_task_ver_ids.extend(1);
2274 l_add_planned_effort.extend(1);
2275 l_add_start_date.extend(1);
2276 l_add_end_date.extend(1);
2277
2278 l_add_task_ver_ids(l_add_task_ver_ids.count):= x_task_version_id;
2279 l_add_planned_effort(l_add_planned_effort.count):= p_planned_effort;
2280 l_add_start_date(l_add_start_date.count):= p_actual_start_date;
2281 l_add_end_date(l_add_end_date.count):= p_actual_finish_date;
2282 else
2283 l_del_task_ver_ids.extend(1);
2284
2285 l_del_task_ver_ids(l_del_task_ver_ids.count):= x_task_version_id;
2286 end if;
2287 end if;
2288
2289 -- Calling pa_task_pub1.call_add_planning_txns for lowest level tasks.
2290
2291 begin
2292 pa_task_pub1.call_add_planning_txns(
2293 p_tasks_ver_ids => l_add_task_ver_ids,
2294 p_planned_effort => l_add_planned_effort,
2295 p_project_id => p_project_id,
2296 p_structure_version_id => l_structure_version_id, --replace p_structure_version_id, bug 3838186
2297 p_start_date => l_add_start_date,
2298 p_end_date => l_add_end_date,
2299 p_pm_product_code => P_PM_SOURCE_CODE, --bug 3811243
2300 x_return_status => l_return_status,
2301 x_msg_count => l_msg_count,
2302 x_msg_data => l_msg_data
2303 );
2304 exception
2305 when others then
2306 fnd_msg_pub.add_exc_msg(p_pkg_name => 'pa_project_pub',
2307 p_procedure_name => 'CREATE_PROJECT',
2308 p_error_text => substrb('PA_TASK_PUB1.CALL_ADD_PLANNING_TXNS:'||sqlerrm,1,240));
2309 raise fnd_api.g_exc_error;
2310 end;
2311
2312 -- Calling pa_fp_planning_transaction_pub.delete_planning_transactions for higher level tasks.
2313
2314 begin
2315 pa_fp_planning_transaction_pub.delete_planning_transactions
2316 (
2317 p_context => 'WORKPLAN'
2318 ,p_task_or_res => 'TASKS'
2319 ,p_element_version_id_tbl => l_del_task_ver_ids
2320 ,x_return_status => l_return_status
2321 ,x_msg_count => l_msg_count
2322 ,x_msg_data => l_msg_data
2323 );
2324 exception
2325 when others then
2326 fnd_msg_pub.add_exc_msg(p_pkg_name => 'pa_project_pub',
2327 p_procedure_name => 'CREATE_PROJECT',
2328 p_error_text => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.DELETE_PLANNING_TRANSACTIONS:'||SQLERRM,1,240));
2329 raise fnd_api.g_exc_error;
2330 end;
2331
2332 /* Bug # 3420093 - Adding Progress Management modifications to create_task flow. */
2333
2334
2335 x_return_status := FND_API.G_RET_STS_SUCCESS;
2336 EXCEPTION
2337 WHEN API_ERROR THEN
2338 x_return_status := FND_API.G_RET_STS_ERROR;
2339 rollback to create_task_struc;
2340 WHEN OTHERS THEN
2341 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2342 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
2343 p_procedure_name => 'create_task_structure',
2344 p_error_text => SUBSTRB(SQLERRM,1,240));
2345 rollback to create_task_struc;
2346 raise;
2347 END create_task_structure;
2348 -- API name : update_task_structure
2349 -- Type : PL/sql Public procedure
2350 -- Pre-reqs : None
2351 -- Return Value : N/A
2352 -- Prameters
2353 -- p_calling_module IN VARCHAR2
2354 -- ,p_task_id IN NUMBER
2355 -- ,p_task_number IN VARCHAR2
2356 -- ,p_task_name IN VARCHAR2
2357 -- ,p_task_description IN VARCHAR2
2358 -- ,p_carrying_out_organization_id IN NUMBER
2359 -- ,p_task_manager_id IN NUMBER
2360 -- ,p_pm_product_code IN VARCHAR2
2361 -- ,p_pm_task_reference IN VARCHAR2
2362 -- ,p_record_version_number IN NUMBER
2363 -- ,x_msg_count OUT NUMBER
2364 -- ,x_msg_data OUT VARCHAR2
2365 -- ,x_return_status OUT VARCHAR2--
2366 -- History
2367 --
2368 -- 25-APR-02 MAansari -Created
2369 -- 05-APR-2004 Rakesh Raghavan Progress Management Changes. Bug # 3420093.
2370 -- 18-MAY-2004 Rakesh Raghavan Modified call to API: pa_task_pub1.update_task_det_sch_info().
2371
2372 PROCEDURE update_task_structure
2373 (
2374 p_calling_module IN VARCHAR2 := 'FORMS'
2375 ,p_ref_task_id IN NUMBER
2376 ,p_project_id IN NUMBER
2377 ,p_task_id IN NUMBER
2378 ,p_task_number IN VARCHAR2
2379 ,p_task_name IN VARCHAR2
2380 ,p_task_description IN VARCHAR2
2381 ,p_carrying_out_organization_id IN NUMBER
2382 ,p_structure_type IN VARCHAR2 := 'FINANCIAL'
2383 ,p_task_manager_id IN NUMBER
2384 ,p_pm_product_code IN VARCHAR2
2385 ,p_pm_task_reference IN VARCHAR2
2386 ,p_location_id IN NUMBER
2387 ,p_actual_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2388 ,p_actual_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2389 ,p_early_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2390 ,p_early_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2391 ,p_late_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2392 ,p_late_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2393 ,p_scheduled_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2394 ,p_scheduled_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2395 ,P_OBLIGATION_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2396 ,P_OBLIGATION_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2397 ,P_ESTIMATED_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2398 ,P_ESTIMATED_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2399 ,P_BASELINE_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2400 ,P_BASELINE_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2401 ,P_CLOSED_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2402 ,P_WQ_UOM_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2403 ,P_WQ_ITEM_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2404 ,P_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2405 ,P_WF_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2406 ,P_PRIORITY_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2407 ,P_MILESTONE_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2408 ,P_CRITICAL_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2409 ,P_INC_PROJ_PROGRESS_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2410 ,P_LINK_TASK_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2411 ,P_CALENDAR_ID IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2412 ,P_PLANNED_EFFORT IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2413 ,P_DURATION IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2414 ,P_PLANNED_WORK_QUANTITY IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2415 ,P_TASK_TYPE IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2416 ,p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2417 ,p_parent_structure_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2418 ,p_phase_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2419 ,P_PHASE_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2420 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
2421 ,p_ext_act_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
2422 ,p_ext_remain_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
2423 ,p_ext_sch_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
2424 -- (end venkat) new params for bug #3450684 -------------------------------------------------
2425 -- (begin) add new params bug - 3654243 -----
2426 ,p_base_percent_comp_deriv_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2427 ,p_sch_tool_tsk_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2428 ,p_constraint_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2429 ,p_constraint_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2430 ,p_free_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2431 ,p_total_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2432 ,p_effort_driven_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2433 ,p_level_assignments_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2434 ,p_invoice_method IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2435 ,p_customer_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2436 ,p_gen_etc_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2437 -- (end) add new params bug - 3654243 -----
2438 -- Progress Management Changes. Bug # 3420093.
2439 ,p_etc_effort IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2440 ,p_percent_complete IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2441 -- Progress Management Changes. Bug # 3420093.
2442 -- rtarway, BUG 3908013
2443 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2444 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2445 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2446 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2447 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2448 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2449 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2450 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2451 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2452 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2453 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2454 --Bug 6153503
2455 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2456 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2457 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2458 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2459 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2460 ,P_PM_SOURCE_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- Added for Huawei 15876400
2461 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2462 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2463 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2464 ) IS
2465
2466 l_return_status VARCHAR2(1);
2467 l_msg_count NUMBER;
2468 l_msg_data VARCHAR2(2000);
2469 API_ERROR EXCEPTION;
2470 l_record_version_number NUMBER;
2471
2472
2473 CURSOR cur_proj_is_template
2474 IS select 'Y'
2475 from pa_projects_all
2476 where project_id = p_project_id
2477 and template_flag = 'Y';
2478 l_template_flag VARCHAR2(1);
2479
2480 CURSOR cur_rec_ver_num
2481 IS
2482 SELECT record_version_number
2483 FROM pa_proj_elements
2484 WHERE proj_element_id = p_task_id
2485 AND object_type = 'PA_TASKS';
2486
2487 /* Bug 2680486 -- Performance changes -- Added d.project_id= c.project_id
2488 join in the following cursor*/
2489
2490 CURSOR cur_struc_ver_fin
2491 IS
2492 SELECT c.element_version_id
2493 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
2494 ,pa_proj_elem_ver_structure d
2495 WHERE c.project_id = p_project_id
2496 AND a.structure_type_id = b.structure_type_id
2497 AND b.proj_element_id = c.proj_element_id
2498 AND a.structure_type = p_structure_type
2499 AND d.project_id = c.project_id
2500 AND d.element_version_id = c.element_version_id
2501 AND d.status_code = 'STRUCTURE_PUBLISHED'
2502 AND d.latest_eff_published_flag = 'Y'
2503 ;
2504
2505 /* Bug 2680486 -- Performance changes -- Added d.project_id= c.project_id
2506 join in the following cursor*/
2507
2508
2509 CURSOR cur_struc_ver_wp
2510 IS
2511 SELECT c.element_version_id
2512 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
2513 ,pa_proj_elem_ver_structure d
2514 WHERE c.project_id = p_project_id
2515 AND a.structure_type_id = b.structure_type_id
2516 AND b.proj_element_id = c.proj_element_id
2517 AND a.structure_type = p_structure_type
2518 AND d.project_id = c.project_id
2519 AND d.element_version_id = c.element_version_id
2520 AND d.status_code = 'STRUCTURE_WORKING'
2521 ;
2522
2523 CURSOR cur_pa_tasks( c_task_id NUMBER )
2524 IS
2525 SELECT parent_task_id
2526 FROM pa_tasks
2527 WHERE project_id = p_project_id
2528 AND task_id = c_task_id;
2529
2530 CURSOR cur_pa_task_ver( c_structure_version_id NUMBER, c_task_id NUMBER )
2531 IS
2532 SELECT element_version_id, record_version_number
2533 FROM pa_proj_element_versions
2534 WHERE project_id = p_project_id
2535 AND proj_element_id = c_task_id
2536 AND parent_structure_version_id = c_structure_version_id
2537 AND object_type = 'PA_TASKS';
2538
2539 CURSOR cur_pa_peer_task_above( c_structure_version_id NUMBER, c_task_version_id NUMBER )
2540 IS
2541 SELECT element_version_id
2542 FROM pa_proj_element_versions
2543 WHERE project_id = p_project_id
2544 AND parent_structure_version_id = c_structure_version_id
2545 AND display_sequence = ( SELECT max( display_sequence ) FROM pa_proj_element_versions
2546 WHERE parent_structure_version_id = c_structure_version_id
2547 AND display_sequence < ( SELECT display_sequence FROM pa_proj_element_versions
2548 WHERE element_version_id = c_task_version_id )
2549 AND wbs_level = ( SELECT wbs_level FROM pa_proj_element_versions
2550 WHERE element_version_id = c_task_version_id )
2551 )
2552 AND object_type = 'PA_TASKS';
2553
2554 CURSOR cur_proj_sch( c_task_version_id NUMBER )
2555 IS
2556 SELECT pev_schedule_id, record_version_number
2557 FROM pa_proj_elem_ver_schedule
2558 WHERE element_version_id = c_task_version_id
2559 AND project_id = p_project_id
2560 AND proj_element_id = p_task_id; --This will give u unique record.
2561
2562 CURSOR cur_pa_obj_rel( c_task_version_id NUMBER )
2563 IS
2564 SELECT object_id_from1
2565 FROM pa_object_relationships
2566 WHERE object_id_to1 = c_task_version_id
2567 and relationship_type = 'S';
2568
2569 CURSOR cur_pa_proj_elem_ver( c_task_version_id NUMBER )
2570 IS
2571 SELECT proj_element_id
2572 FROM pa_proj_element_versions
2573 WHERE project_id = p_project_id
2574 AND element_version_id = c_task_version_id
2575 AND object_type = 'PA_TASKS';
2576
2577 CURSOR cur_pa_proj_elem_vers2( c_task_version_id NUMBER )
2578 IS
2579 SELECT 'x'
2580 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
2581 WHERE c.project_id = p_project_id
2582 AND a.structure_type_id = b.structure_type_id
2583 AND b.proj_element_id = c.proj_element_id
2584 AND a.structure_type = 'WORKPLAN'
2585 AND element_version_id = ( SELECT parent_structure_version_id
2586 FROM pa_proj_element_versions
2587 WHERE element_version_id = c_task_version_id );
2588
2589 -- xxlu added for DFF attributes for calling update_schedule_version
2590 CURSOR cur_ver_sch_attr_rec(c_element_version_id IN NUMBER) IS
2591 SELECT *
2592 FROM pa_proj_elem_ver_schedule
2593 WHERE element_version_id = c_element_version_id
2594 and project_id = p_project_id;
2595 l_ver_sch_attr_rec cur_ver_sch_attr_rec%ROWTYPE;
2596 -- end xxlu changes
2597
2598 l_structure_version_id NUMBER;
2599 l_parent_task_id NUMBER;
2600 l_parent_of_ref_task_id NUMBER;
2601 l_ref_task_version_id NUMBER;
2602 l_task_version_id NUMBER;
2603 l_peer_or_sub VARCHAR2(4);
2604 l_pev_schedule_id NUMBER;
2605
2606 v_parent_task_ver_id_of_ref NUMBER;
2607 v_parent_task_version_id NUMBER;
2608 l_dummy_char VARCHAR2(1);
2609 --bug 2736392
2610 l_str_status_code VARCHAR2(150);
2611 --bug 2736392
2612 l_init_msg_list VARCHAR2(1);
2613
2614 /* Bug 2736392 Begin */
2615 CURSOR cur_struc_ver_wp2
2616 IS
2617 SELECT c.element_version_id
2618 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
2619 ,pa_proj_elem_ver_structure d
2620 WHERE c.project_id = p_project_id
2621 AND a.structure_type_id = b.structure_type_id
2622 AND b.proj_element_id = c.proj_element_id
2623 AND a.structure_type = p_structure_type
2624 AND d.project_id = c.project_id
2625 AND d.element_version_id = c.element_version_id
2626 AND (d.status_code = 'STRUCTURE_SUBMITTED' OR d.status_code='STRUCTURE_REJECTED' OR d.status_code= 'STRUCTURE_APPROVED')
2627 ;
2628 l_dummy_num number;
2629 /* Bug 2736392 End */
2630
2631 l_db_parent_task_version_id number; -- Bug 2790275
2632 l_passed_parent_task_ver_id number; -- Bug 2790275
2633
2634 --bug 2824612
2635 l_wq_planned_quantity NUMBER;
2636 l_task_type_id NUMBER;
2637 --bug 2824612
2638
2639 l_tasks_out pa_project_pub.task_out_tbl_type ; --dummy variables. --bug 2856033
2640 l_process_code VARCHAR2(30);
2641
2642 l_request_id pa_proj_elem_ver_structure.conc_request_id%TYPE; -- Bug 3091798
2643
2644 /* Added for bug 3290037 */
2645
2646 CURSOR cur_task_attr IS
2647 SELECT pe.ELEMENT_NUMBER, pe.NAME
2648 FROM pa_proj_elements pe
2649 WHERE pe.proj_element_id = p_task_id
2650 AND pe.object_type = 'PA_TASKS';
2651
2652 l_task_number pa_proj_elements.element_number%TYPE;
2653 l_task_name pa_proj_elements.name%TYPE;
2654
2655 --rtarway,3666023
2656 l_task_id pa_proj_elements.PROJ_ELEMENT_ID%TYPE;
2657
2658 /* End of code for bug 3290037 */
2659
2660 /* Bug # 3420093 - Adding Progress Management modifications to update_task flow. */
2661
2662 --Bug 5256359. Changed the type of these pl-sql tbls to SYSTEM.pa_xxx_tbl_type from PA_xxx_1000_xxx.
2663
2664 --New tbls (suffixed with _prm), created below will be used as parameters in the call to
2665 --pa_task_pub1.call_add_planning_txns
2666
2667 l_add_task_ver_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
2668 l_add_planned_effort SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
2669 l_add_start_date SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
2670 l_add_end_date SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
2671 l_add_task_ver_ids_prm PA_NUM_1000_NUM := PA_NUM_1000_NUM();
2672 l_add_planned_effort_prm PA_NUM_1000_NUM := PA_NUM_1000_NUM();
2673 l_add_start_date_prm PA_DATE_1000_DATE := PA_DATE_1000_DATE();
2674 l_add_end_date_prm PA_DATE_1000_DATE := PA_DATE_1000_DATE();
2675 rec_count NUMBER;
2676
2677 l_del_task_ver_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
2678
2679 cursor l_task_cur(p_project_id NUMBER, p_struct_ver_id NUMBER) is
2680 /* --bug 3880482
2681 select
2682 element_version_id,planned_effort,actual_start_date,actual_finish_date
2683 from pa_proj_elem_ver_schedule ppevs, pa_proj_elements ppe
2684 where ppevs.project_id = ppe.project_id
2685 and ppevs.proj_element_id = ppe.proj_element_id
2686 and ppe.object_type = 'PA_TASKS'
2687 and ppevs.project_id = p_project_id;
2688 */
2689 SELECT
2690 ppv.element_version_id
2691 ,ppevs.planned_effort
2692 ,ppevs.actual_start_date
2693 ,ppevs.actual_finish_date
2694 FROM
2695 pa_proj_elem_ver_schedule ppevs
2696 ,pa_proj_element_versions ppv
2697 WHERE
2698 ppevs.project_id = ppv.project_id
2699 and ppevs.proj_element_id = ppv.proj_element_id
2700 and ppv.object_type = 'PA_TASKS'
2701 and ppv.element_version_id = ppevs.element_version_id
2702 and ppv.project_id = p_project_id
2703 and ppv.parent_structure_version_id = p_struct_ver_id;
2704
2705 l_task_cur_rec l_task_cur%rowtype;
2706
2707 /* Bug # 3420093 - Adding Progress Management modifications to update_task flow. */
2708
2709 --rtarway, 3908013
2710 l_attribute_category VARCHAR2(150);
2711 l_attribute1 VARCHAR2(150);
2712 l_attribute2 VARCHAR2(150);
2713 l_attribute3 VARCHAR2(150);
2714 l_attribute4 VARCHAR2(150);
2715 l_attribute5 VARCHAR2(150);
2716 l_attribute6 VARCHAR2(150);
2717 l_attribute7 VARCHAR2(150);
2718 l_attribute8 VARCHAR2(150);
2719 l_attribute9 VARCHAR2(150);
2720 l_attribute10 VARCHAR2(150);
2721 --Bug 6153503
2722 l_attribute11 VARCHAR2(150);
2723 l_attribute12 VARCHAR2(150);
2724 l_attribute13 VARCHAR2(150);
2725 l_attribute14 VARCHAR2(150);
2726 l_attribute15 VARCHAR2(150);
2727 l_return_msg varchar2(2000);
2728 l_validate_status varchar2(1);
2729
2730 -- Begin fix for Bug # 4373055.
2731
2732 l_str_ver_id NUMBER:= null;
2733 l_conc_request_id NUMBER := null;
2734 l_message_name VARCHAR2(30) := null;
2735 l_message_type VARCHAR2(30) := null;
2736
2737 -- End fix for Bug # 4373055.
2738
2739 -- 7358214
2740
2741 CURSOR check_hidden_assgn_exists(p_element_version_id IN NUMBER) IS
2742 SELECT 'Y'
2743 FROM pa_resource_assignments ra
2744 WHERE ra.ta_display_flag = 'N'
2745 AND ra.wbs_element_version_id = p_element_version_id
2746 AND rownum = 1;
2747
2748 l_hidden_assgn VARCHAR2(1);
2749 -- 7358214
2750 BEGIN
2751
2752 --Clear Error Messages.
2753 IF FND_MSG_PUB.count_msg = 0
2754 THEN
2755 FND_MSG_PUB.initialize;
2756 END IF;
2757
2758 SAVEPOINT update_task_struc;
2759
2760 OPEN cur_proj_is_template;
2761 FETCH cur_proj_is_template into l_template_flag;
2762 IF cur_proj_is_template%NOTFOUND THEN
2763 l_template_flag := 'N';
2764 END IF;
2765 CLOSE cur_proj_is_template;
2766
2767 OPEN cur_rec_ver_num;
2768 FETCH cur_rec_ver_num INTO l_record_version_number;
2769 CLOSE cur_rec_ver_num;
2770
2771 ---The following code is added to prevent message list re-initialization if there are any messages already on stack.
2772 IF p_calling_module = 'AMG' AND FND_MSG_PUB.count_msg > 0
2773 THEN
2774 l_init_msg_list := 'F';
2775 ELSE
2776 l_init_msg_list := 'T';
2777 END IF;
2778
2779 /* Added for bug 3290037 */
2780
2781 OPEN cur_task_attr;
2782 FETCH cur_task_attr INTO l_task_number, l_task_name;
2783 CLOSE cur_task_attr;
2784 --dbms_output.put_line(('Value of p_task_number' ||p_task_number);
2785 --dbms_output.put_line(('Value of l_task_number' ||l_task_number);
2786
2787 IF ( p_task_number <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_task_number IS NOT NULL)
2788 /* bug#5243018 : Reverting the fix in Bug 4120380
2789 AND nvl(p_task_number,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
2790 nvl(l_task_number,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) --check added for BUg 4120380 Aditi */
2791 THEN
2792 l_task_number := p_task_number;
2793 /* bug#5243018 : Reverting the fix in Bug 4120380
2794 -- dbms_output.put_line('printed once');
2795 IF p_calling_module = 'AMG' THEN --Added this clause for Bug 4762147
2796 -- This is required so that when Update_tas_Strcucture is caled from forms , - sign does not get prepended
2797 l_task_number := '-'||p_task_number;
2798 ELSE
2799 l_task_number := p_task_number;
2800 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.
2801 After updating all the tasks in the script, code again updates the task_number, trimming the '-' added. **/
2802 END IF;
2803 --dbms_output.put_line('Value of l_task_number' ||l_task_number);
2804
2805 IF ( p_task_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_task_name IS NOT NULL )
2806 THEN
2807 l_task_name := p_task_name;
2808 END IF;
2809
2810 /* End of code added for bug 3290037 */
2811 --Begin add by rtarway for BUG 3666023
2812 --3663712, changed 'OR' to and 'AND' in following If condition
2813 IF ( p_task_id IS NOT NULL AND p_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
2814 THEN
2815 l_task_id := p_task_id;
2816 ELSIF
2817 ( p_pm_task_reference IS NOT NULL AND p_pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
2818 THEN
2819 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_all
2820 (p_pa_project_id => p_project_id
2821 ,p_pm_task_reference => p_pm_task_reference
2822 ,p_structure_type => p_structure_type
2823 ,p_out_task_id => l_task_id
2824 ,p_return_status => l_return_status);
2825
2826 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
2827 THEN
2828 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2829 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
2830 THEN
2831 RAISE FND_API.G_EXC_ERROR;
2832 END IF;
2833 END IF;
2834 --End add by rtarway for BUG 3666023
2835
2836
2837 PA_TASK_PUB1.Update_Task(
2838 p_calling_module => p_calling_module
2839 ,p_init_msg_list => l_init_msg_list
2840 --rtarway for BUG 3666023
2841 --,p_task_id => p_task_id
2842 ,p_task_id => l_task_id
2843 ,p_task_number => l_task_number /* Modified p_task_number to l_task_number for 3290037 */
2844 ,p_task_name => l_task_name /* Modified p_task_name to l_task_name for 3290037 */
2845 ,p_task_description => p_task_description
2846 ,p_task_manager_id => p_TASK_MANAGER_ID
2847 ,p_carrying_out_org_id => p_carrying_out_organization_id
2848 ,p_pm_product_code => p_pm_product_code
2849 ,p_pm_task_reference => p_pm_task_reference
2850 ,p_location_id => p_location_id
2851 ,p_priority_code => p_priority_code
2852 ,p_TYPE_ID => p_task_type
2853 ,p_status_code => P_STATUS_CODE
2854 ,p_inc_proj_progress_flag => p_inc_proj_progress_flag
2855 ,p_closed_date => p_closed_date
2856 ,p_record_version_number => l_record_version_number
2857 ,P_UOM_CODE => P_WQ_UOM_CODE
2858 ,p_work_item_code => P_WQ_ITEM_CODE
2859 ----- begin Bug 3654243 --------------------------------------------
2860 ,p_Base_Perc_Comp_Deriv_Code => p_base_percent_comp_deriv_code
2861 ,p_gen_etc_src_code => p_gen_etc_source_code
2862 ----- end Bug 3654243 ----------------------------------------------
2863 ,x_return_status => l_return_status
2864 ,x_msg_count => l_msg_count
2865 ,x_msg_data => l_msg_data
2866 ,P_PM_SOURCE_CODE => P_PM_SOURCE_CODE -- Huawei 15876400 source code
2867 );
2868 --dbms_output.put_line('Before calling PA_TASK_PUB1.Update_Task l_return_status'||l_return_status);
2869
2870 IF l_return_status <> 'S'
2871 THEN
2872 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2873 ,p_msg_name => 'PA_PS_TASK_NOT_UPDATED'
2874 /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
2875 ,p_token1 => 'PROJECT'
2876 ,p_value1 => p_project_id
2877 ,p_token2 => 'TASK'
2878 ,p_value2 => l_task_id);
2879 raise api_error;
2880 END IF;
2881
2882 IF p_calling_module = 'AMG' AND
2883 p_ref_task_id is NOT NULL --to make sure that hierarchy is changed.
2884 AND p_ref_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --bug 3701460
2885 --if p_ref_task_id is null then there is no hierarchy change
2886 --It is also true that it is not necessary that the hierarchy is changed even if
2887 --it p_ref_task_id is NOT null.
2888 THEN
2889
2890 IF p_structure_version_id IS NULL OR
2891 p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2892 THEN
2893
2894 IF p_structure_type = 'FINANCIAL'
2895 THEN
2896 IF l_template_flag = 'N'
2897 THEN
2898 --get structure version if its a top task
2899 OPEN cur_struc_ver_fin;
2900 FETCH cur_struc_ver_fin INTO l_structure_version_id;
2901 CLOSE cur_struc_ver_fin;
2902 ELSE
2903 --For templates its always WORKING_STRUCTURE
2904 OPEN cur_struc_ver_wp;
2905 FETCH cur_struc_ver_wp INTO l_structure_version_id;
2906 CLOSE cur_struc_ver_wp;
2907 END IF;
2908 ELSE
2909 OPEN cur_struc_ver_wp;
2910 FETCH cur_struc_ver_wp INTO l_structure_version_id;
2911 CLOSE cur_struc_ver_wp;
2912 END IF;
2913 ELSE
2914 l_structure_version_id := p_structure_version_id;
2915 END IF;
2916
2917 /*** Commented for Bug 2736392 -- Added new code below
2918 This code will never do the intended task because p_structure_version_id and l_structure_version_id
2919 will be null in this case. If a structure version is in approved, submitted or rejected state, then it
2920 will never be returned from cursor cur_struc_ver_wp, so how can we get the status of a null struc ver.
2921
2922 IF p_structure_version_id IS NOT NULL AND
2923 p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2924 THEN
2925 --Validate the incoming structure version id
2926 PA_PROJECT_STRUCTURE_UTILS.Structure_Version_Name_Or_Id(
2927 p_structure_id => null
2928 ,p_structure_version_name => null
2929 ,p_structure_version_id => p_structure_version_id
2930 ,p_check_id_flag => 'Y'
2931 ,x_structure_version_id => l_structure_version_id
2932 ,x_return_status => l_return_status
2933 ,x_error_message_code => l_msg_data
2934 );
2935 IF l_return_status <> 'S'
2936 THEN
2937 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2938 ,p_msg_name => l_msg_data );
2939 raise api_error;
2940 END IF;
2941 --bug 2736392
2942 l_str_status_code := PA_PROJECT_STRUCTURE_UTILS.get_structrue_version_status
2943 ( p_project_id => p_project_id
2944 ,p_structure_version_id => p_structure_version_id );
2945 IF l_str_status_code IS NULL
2946 THEN
2947 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2948 ,p_msg_name => 'PA_PS_INV_STR_VER_ID' );
2949 raise api_error;
2950 ELSIF l_str_status_code in ( 'STRUCTURE_SUBMITTED', 'STRUCTURE_REJECTED', 'STRUCTURE_APPROVED' )
2951 THEN
2952 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2953 ,p_msg_name => 'PA_PS_INV_STR_VER_ID2' );
2954 raise api_error;
2955 END IF;
2956 --bug 2736392
2957 END IF;
2958 ***/
2959 /* New Code Begin for Bug 2736392 -- Commnted the above code*/
2960
2961 IF p_structure_version_id IS NOT NULL AND p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2962 THEN
2963 l_str_status_code := PA_PROJECT_STRUCTURE_UTILS.get_structrue_version_status
2964 ( p_project_id => p_project_id
2965 ,p_structure_version_id => p_structure_version_id );
2966 IF l_str_status_code IS NULL
2967 THEN
2968 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2969 ,p_msg_name => 'PA_PS_INV_STR_VER_ID' );
2970 raise api_error;
2971 ELSIF l_str_status_code in ( 'STRUCTURE_SUBMITTED', 'STRUCTURE_REJECTED', 'STRUCTURE_APPROVED' )
2972 THEN
2973 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2974 ,p_msg_name => 'PA_PS_INV_STR_VER_ID2' );
2975 raise api_error;
2976 END IF;
2977 ELSIF l_structure_version_id IS NULL
2978 THEN
2979 OPEN cur_struc_ver_wp2;
2980 FETCH cur_struc_ver_wp2 INTO l_dummy_num;
2981 CLOSE cur_struc_ver_wp2;
2982
2983 IF l_dummy_num is NOT NULL THEN
2984 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2985 ,p_msg_name => 'PA_PS_INV_STR_VER_ID2' );
2986 raise api_error;
2987 ELSE
2988 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2989 ,p_msg_name => 'PA_PS_INV_STR_VER_ID' );
2990 raise api_error;
2991 END IF;
2992 END IF;
2993
2994 /* New Code End for Bug 2736392 */
2995
2996
2997 --get the task version id of the reference task
2998 OPEN cur_pa_task_ver( l_structure_version_id, p_ref_task_id );
2999 FETCH cur_pa_task_ver INTO l_ref_task_version_id, l_record_version_number;
3000 CLOSE cur_pa_task_ver;
3001 --get task version id of the task being moved or updated
3002 --rtarway, 3666023, replace by l_task_id
3003 --OPEN cur_pa_task_ver( l_structure_version_id, p_task_id );
3004 OPEN cur_pa_task_ver( l_structure_version_id, l_task_id );
3005 FETCH cur_pa_task_ver INTO l_task_version_id, l_record_version_number;
3006 CLOSE cur_pa_task_ver;
3007
3008
3009 IF p_structure_type = 'FINANCIAL'
3010 THEN
3011 --get the parent of the tak id
3012 --rtarway, 3666023, replace by l_task_id
3013 --OPEN cur_pa_tasks( p_task_id );
3014 OPEN cur_pa_tasks( l_task_id );
3015 FETCH cur_pa_tasks INTO l_parent_task_id;
3016 CLOSE cur_pa_tasks;
3017
3018 --get the parent of the ref tak id
3019 OPEN cur_pa_tasks( p_ref_task_id );
3020 FETCH cur_pa_tasks INTO l_parent_of_ref_task_id;
3021 CLOSE cur_pa_tasks;
3022
3023 ELSIF p_structure_type = 'WORKPLAN'
3024 THEN
3025 --get the parent task version id of the task version id
3026 OPEN cur_pa_obj_rel( l_task_version_id ) ;
3027 FETCH cur_pa_obj_rel INTO v_parent_task_version_id;
3028 CLOSE cur_pa_obj_rel;
3029
3030
3031 --get the parent task id of the parent task version id
3032 OPEN cur_pa_proj_elem_ver( v_parent_task_version_id ) ;
3033 FETCH cur_pa_proj_elem_ver INTO l_parent_task_id;
3034 CLOSE cur_pa_proj_elem_ver;
3035
3036
3037
3038 --get the parent task version id of the ref task version id
3039 OPEN cur_pa_obj_rel( l_ref_task_version_id ) ;
3040 FETCH cur_pa_obj_rel INTO v_parent_task_ver_id_of_ref;
3041 CLOSE cur_pa_obj_rel;
3042
3043
3044 --get the parent task id of the parent ref task version id
3045 OPEN cur_pa_proj_elem_ver( v_parent_task_ver_id_of_ref ) ;
3046 FETCH cur_pa_proj_elem_ver INTO l_parent_of_ref_task_id;
3047 CLOSE cur_pa_proj_elem_ver;
3048
3049
3050 END IF;
3051
3052 IF p_ref_task_id = l_parent_task_id
3053 THEN
3054 l_peer_or_sub := 'SUB';
3055 ELSIF l_parent_of_ref_task_id = l_parent_task_id
3056 THEN
3057 l_peer_or_sub := 'PEER';
3058 ELSE
3059 l_peer_or_sub := 'PEER';
3060 OPEN cur_pa_peer_task_above( l_structure_version_id, l_task_version_id );
3061 FETCH cur_pa_peer_task_above INTO l_ref_task_version_id;
3062 CLOSE cur_pa_peer_task_above;
3063 END IF;
3064
3065 IF l_ref_task_version_id IS NOT NULL
3066 THEN
3067
3068 /* Bug 2790275 Begin */
3069 OPEN cur_pa_obj_rel( l_task_version_id ) ;
3070 FETCH cur_pa_obj_rel INTO l_db_parent_task_version_id;
3071 CLOSE cur_pa_obj_rel;
3072
3073 OPEN cur_pa_obj_rel( l_ref_task_version_id ) ;
3074 FETCH cur_pa_obj_rel INTO l_passed_parent_task_ver_id;
3075 CLOSE cur_pa_obj_rel;
3076
3077 IF ((l_peer_or_sub = 'SUB' AND l_ref_task_version_id <> l_db_parent_task_version_id)
3078 OR
3079 (l_peer_or_sub = 'PEER' AND l_passed_parent_task_ver_id <> l_db_parent_task_version_id))
3080 THEN
3081 /* Bug 2790275 End */
3082
3083 -- Check for the status of the process only if the wbs is going to change.
3084 -- PA L Changes 3010538
3085 -- Need not use map_new_amg_msg api as no context is involved and no _amg messages
3086 -- have been created.
3087 IF p_calling_module = 'AMG' THEN
3088
3089 -- Begin fix for Bug # 4373055.
3090
3091 /*
3092
3093 l_process_code :=
3094 PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_CODE(p_project_id => p_project_id
3095 ,p_structure_type => p_structure_type );
3096 IF nvl(l_process_code,'-1') = 'WUP' THEN
3097
3098 l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => p_project_id -- Bug 3091798
3099 ,p_structure_type => p_structure_type );
3100 PA_UTILS.ADD_MESSAGE
3101 (p_app_short_name => 'PA',
3102 -- p_msg_name => 'PA_PS_VD_UPDWBS_PRC_INPROC'); Bug 3091798
3103 p_msg_name => 'PA_PS_UPDWBS_PRC_INPROC_AMG', -- Bug 3091798. Message includes the request id.
3104 p_token1 => 'REQUESTID',
3105 p_value1 => l_request_id);
3106
3107 raise api_error;
3108
3109 ELSIF nvl(l_process_code,'-1') = 'WUE' THEN
3110 l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => p_project_id --Bug 3091798
3111 ,p_structure_type => p_structure_type );
3112 PA_UTILS.ADD_MESSAGE
3113 (p_app_short_name => 'PA',
3114 -- p_msg_name => 'PA_PS_VD_UPD_WBS_PRC_ERR');
3115 p_msg_name => 'PA_PS_UPDWBS_PRC_ERR_AMG', -- Bug 3091798. Message includes the request id.
3116 p_token1 => 'REQUESTID',
3117 p_value1 => l_request_id);
3118
3119 raise api_error;
3120
3121 END IF;
3122
3123 */
3124
3125 PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_MSG(
3126 p_project_id => p_project_id
3127 , p_structure_type => p_structure_type
3128 , p_structure_version_id => null
3129 , p_context => 'UPDATE_AMG'
3130 , x_message_name => l_message_name
3131 , x_message_type => l_message_type
3132 , x_structure_version_id => l_str_ver_id
3133 , x_conc_request_id => l_conc_request_id);
3134
3135
3136 if l_message_name is not null then
3137
3138 PA_UTILS.ADD_MESSAGE(
3139 p_app_short_name => 'PA'
3140 , p_msg_name => l_message_name
3141 , p_token1 => 'REQUESTID'
3142 , p_value1 => l_conc_request_id);
3143
3144 RAISE FND_API.G_EXC_ERROR;
3145 end if;
3146
3147 -- End fix for Bug # 4373055.
3148
3149 END IF ;
3150
3151 -- PA L Changes 3010538
3152
3153 PA_TASK_PUB1.move_task_version(
3154 p_calling_module => p_calling_module
3155 ,p_init_msg_list => l_init_msg_list
3156 ,p_structure_version_id => l_structure_version_id
3157 ,p_task_version_id => l_task_version_id
3158 ,p_ref_task_version_id => l_ref_task_version_id
3159 ,p_peer_or_sub => l_peer_or_sub
3160 ,p_record_version_number => l_record_version_number
3161 ,x_return_status => l_return_status
3162 ,x_msg_count => l_msg_count
3163 ,x_msg_data => l_msg_data
3164 );
3165
3166 IF l_return_status <> 'S'
3167 THEN
3168 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3169 ,p_msg_name => 'PA_PS_TASK_NOT_UPDATED'
3170 /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
3171 ,p_token1 => 'PROJECT'
3172 ,p_value1 => p_project_id
3173 ,p_token2 => 'TASK'
3174 ,p_value2 => l_task_id);
3175 raise api_error;
3176 END IF;
3177 END IF; -- Bug 2790275
3178 END IF;
3179 END IF; --< p-calling_module = 'AMG' >>
3180
3181 -- Bug#Bug#3747312
3182 -- Commenting the below if statement as cur_pa_proj_elem_vers2
3183 -- will take care of not calling the WORKPLAN related API
3184 -- in FINANCIAL alone structure.
3185
3186 --IF p_structure_type = 'WORKPLAN'
3187 --THEN
3188 --get task version id of the task being moved or updated if
3189 IF l_task_version_id IS NULL
3190 THEN
3191 --rtarway, 3666023, replace by l_task_id
3192 --OPEN cur_pa_task_ver( p_structure_version_id, p_task_id ); --structure version id should be provided for a workplan structure
3193 OPEN cur_pa_task_ver( p_structure_version_id, l_task_id );
3194 FETCH cur_pa_task_ver INTO l_task_version_id, l_record_version_number;
3195 CLOSE cur_pa_task_ver;
3196 END IF;
3197
3198 --END IF; --<< p_structrue_type >
3199
3200
3201 OPEN cur_pa_proj_elem_vers2(l_task_version_id);
3202 FETCH cur_pa_proj_elem_vers2 INTO l_dummy_char;
3203 IF cur_pa_proj_elem_vers2%FOUND
3204 THEN
3205
3206 OPEN cur_proj_sch( l_task_version_id );
3207 FETCH cur_proj_sch INTO l_pev_schedule_id, l_record_version_number;
3208 CLOSE cur_proj_sch;
3209
3210 -- xxlu added DFF attributes
3211 OPEN cur_ver_sch_attr_rec(l_task_version_id);
3212 FETCH cur_ver_sch_attr_rec INTO l_ver_sch_attr_rec;
3213 CLOSE cur_ver_sch_attr_rec;
3214
3215 --bug 2824612
3216
3217 SELECT type_id INTO l_task_type_id
3218 FROM pa_proj_elements
3219 --WHERE proj_element_id = p_task_id, rtarway, BUG 3666023, replace by l_task_id
3220 WHERE proj_element_id = l_task_id
3221 AND project_id = p_project_id;
3222
3223 IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_wq_enabled(l_task_type_id) OR
3224 'N' = PA_PROGRESS_UTILS.get_project_wq_flag(p_project_id)) THEN
3225 IF (P_PLANNED_WORK_QUANTITY <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND P_PLANNED_WORK_QUANTITY IS NOT NULL) THEN
3226 l_wq_planned_quantity := NULL;
3227 END IF;
3228 ELSE
3229 l_wq_planned_quantity := P_PLANNED_WORK_QUANTITY; --bug 2826992
3230 END IF;
3231
3232 --bug 2824612
3233
3234 --Bug 6153503 start
3235 -- rtarway, BUG 3908013
3236 if (--p_attribute_category is null or
3237 p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3238 then
3239 l_attribute_category := l_ver_sch_attr_rec.attribute_category;
3240 else
3241 l_attribute_category := p_attribute_category;
3242 end if;
3243
3244
3245
3246 if (--p_attribute1 is null or
3247 p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3248 then
3249 l_attribute1 := l_ver_sch_attr_rec.attribute1;
3250 else
3251 l_attribute1 := p_attribute1;
3252 end if;
3253
3254
3255
3256 if (--p_attribute2 is null or
3257 p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3258 then
3259 l_attribute2 := l_ver_sch_attr_rec.attribute2;
3260 else
3261 l_attribute2 := p_attribute2;
3262 end if;
3263
3264
3265 if (--p_attribute3 is null or
3266 p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3267 then
3268 l_attribute3 := l_ver_sch_attr_rec.attribute3;
3269 else
3270 l_attribute3 := p_attribute3;
3271 end if;
3272
3273 if (--p_attribute4 is null or
3274 p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3275 then
3276 l_attribute4 := l_ver_sch_attr_rec.attribute4;
3277 else
3278 l_attribute4 := p_attribute4;
3279 end if;
3280
3281 if (--p_attribute5 is null or
3282 p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3283 then
3284 l_attribute5 := l_ver_sch_attr_rec.attribute5;
3285 else
3286 l_attribute5 := p_attribute5;
3287 end if;
3288
3289 if (--p_attribute6 is null or
3290 p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3291 then
3292 l_attribute6 := l_ver_sch_attr_rec.attribute6;
3293 else
3294 l_attribute6 := p_attribute6;
3295 end if;
3296
3297 if (--p_attribute7 is null or
3298 p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) -- Changed for Bug #6153681
3299 then
3300 l_attribute7 := l_ver_sch_attr_rec.attribute7;
3301 else
3302 l_attribute7 := p_attribute7;
3303 end if;
3304
3305 if (--p_attribute8 is null or
3306 p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3307 then
3308 l_attribute8 := l_ver_sch_attr_rec.attribute8;
3309 else
3310 l_attribute8 := p_attribute8;
3311 end if;
3312
3313 if (--p_attribute9 is null or
3314 p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3315 then
3316 l_attribute9 := l_ver_sch_attr_rec.attribute9;
3317 else
3318 l_attribute9 := p_attribute9;
3319 end if;
3320
3321 if (--p_attribute10 is null or
3322 p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3323 then
3324 l_attribute10 := l_ver_sch_attr_rec.attribute10;
3325 else
3326 l_attribute10 := p_attribute10;
3327 end if;
3328
3329 if (--p_attribute10 is null or
3330 p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3331 then
3332 l_attribute11 := l_ver_sch_attr_rec.attribute11;
3333 else
3334 l_attribute11 := p_attribute11;
3335 end if;
3336
3337 if (--p_attribute10 is null or
3338 p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3339 then
3340 l_attribute12 := l_ver_sch_attr_rec.attribute12;
3341 else
3342 l_attribute12 := p_attribute12;
3343 end if;
3344
3345 if (--p_attribute10 is null or
3346 p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3347 then
3348 l_attribute13 := l_ver_sch_attr_rec.attribute13;
3349 else
3350 l_attribute13 := p_attribute13;
3351 end if;
3352
3353 if (--p_attribute10 is null or
3354 p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3355 then
3356 l_attribute14 := l_ver_sch_attr_rec.attribute14;
3357 else
3358 l_attribute14 := p_attribute14;
3359 end if;
3360
3361
3362 if (--p_attribute10 is null or
3363 p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3364 then
3365 l_attribute15 := l_ver_sch_attr_rec.attribute15;
3366 else
3367 l_attribute15 := p_attribute15;
3368 end if;
3369
3370
3371 --if added while fixing BUG 3919800
3372 --Add validation for PA_PROJ_ELEM_VER_SCH_DESC_FLEX
3373 -- if l_attribute_category is not null and l_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3374 -- then
3375 pa_task_utils.validate_flex_fields(
3376 p_desc_flex_name => 'PA_PROJ_ELEM_VER_SCH_DESC_FLEX'
3377 ,p_attribute_category => l_attribute_category
3378 ,p_attribute1 => l_attribute1
3379 ,p_attribute2 => l_attribute2
3380 ,p_attribute3 => l_attribute3
3381 ,p_attribute4 => l_attribute4
3382 ,p_attribute5 => l_attribute5
3383 ,p_attribute6 => l_attribute6
3384 ,p_attribute7 => l_attribute7
3385 ,p_attribute8 => l_attribute8
3386 ,p_attribute9 => l_attribute9
3387 ,p_attribute10 => l_attribute10
3388 ,p_attribute11 => l_attribute11
3389 ,p_attribute12 => l_attribute12
3390 ,p_attribute13 => l_attribute13
3391 ,p_attribute14 => l_attribute14
3392 ,p_attribute15 => l_attribute15
3393 ,p_RETURN_msg => l_return_msg
3394 ,p_validate_status => l_validate_status
3395 );
3396 --end if;
3397
3398 IF l_validate_status = 'N'
3399 THEN
3400 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3401 THEN
3402 pa_interface_utils_pub.map_new_amg_msg
3403 ( p_old_message_code => 'PA_INVALID_FF_VALUES'
3404 ,p_msg_attribute => 'CHANGE'
3405 ,p_resize_flag => 'N'
3406 ,p_msg_context => 'FLEX'
3407 ,p_attribute1 => l_return_msg
3408 ,p_attribute2 => ''
3409 ,p_attribute3 => ''
3410 ,p_attribute4 => ''
3411 ,p_attribute5 => '');
3412 END IF;
3413 RAISE FND_API.G_EXC_ERROR;
3414 END IF;
3415
3416 --Bug 6153503 end
3417 --End add rtarway, 3908013
3418
3419
3420
3421 PA_TASK_PUB1.Update_Schedule_Version(
3422 p_calling_module => p_calling_module
3423 ,p_init_msg_list => l_init_msg_list
3424 ,p_pev_schedule_id => l_pev_schedule_id
3425 ,p_calendar_id => p_calendar_id
3426 ,p_scheduled_start_date => p_scheduled_start_date
3427 ,p_scheduled_end_date => p_scheduled_finish_date
3428 ,p_obligation_start_date => p_obligation_start_date
3429 ,p_obligation_end_date => p_obligation_finish_date
3430 ,p_actual_start_date => p_actual_start_date
3431 ,p_actual_finish_date => p_actual_finish_date
3432 ,p_estimate_start_date => p_estimated_start_date
3433 ,p_estimate_finish_date => p_estimated_finish_date
3434 ,p_duration => p_duration
3435 ,p_early_start_date => p_early_start_date
3436 ,p_early_end_date => p_early_finish_date
3437 ,p_late_start_date => p_late_start_date
3438 ,p_late_end_date => p_late_finish_date
3439 ,p_milestone_flag => p_milestone_flag
3440 ,p_critical_flag => p_critical_flag
3441 ,p_WQ_PLANNED_QUANTITY => l_wq_planned_quantity --bug 2824612
3442 ,p_PLANNED_EFFORT => p_planned_effort
3443 ,p_record_version_number => l_record_version_number
3444 --Changed the param names to l_....rtarway, BUG 3908013
3445 ,p_attribute_category => l_attribute_category
3446 ,p_attribute1 => l_attribute1
3447 ,p_attribute2 => l_attribute2
3448 ,p_attribute3 => l_attribute3
3449 ,p_attribute4 => l_attribute4
3450 ,p_attribute5 => l_attribute5
3451 ,p_attribute6 => l_attribute6
3452 ,p_attribute7 => l_attribute7
3453 ,p_attribute8 => l_attribute8
3454 ,p_attribute9 => l_attribute9
3455 ,p_attribute10 => l_attribute10
3456 --end rtarway, BUG 3908013
3457 --Bug 6153503
3458 ,p_attribute11 => l_attribute11--l_ver_sch_attr_rec.attribute11
3459 ,p_attribute12 => l_attribute12--l_ver_sch_attr_rec.attribute12
3460 ,p_attribute13 => l_attribute13--l_ver_sch_attr_rec.attribute13
3461 ,p_attribute14 => l_attribute14--l_ver_sch_attr_rec.attribute14
3462 ,p_attribute15 => l_attribute15--l_ver_sch_attr_rec.attribute15
3463 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
3464 ,p_ext_act_duration => p_ext_act_duration
3465 ,p_ext_remain_duration => p_ext_remain_duration
3466 ,p_ext_sch_duration => p_ext_sch_duration
3467 -- (end venkat) new params for bug #3450684 ------------------------------------------------
3468
3469
3470 -- begin Bug 3654243 -----------------------------------------------------------------------
3471 ,p_def_sch_tool_tsk_type_code => p_sch_tool_tsk_type_code
3472 ,p_constraint_type_code => p_constraint_type_code
3473 ,p_constraint_date => p_constraint_date
3474 ,p_free_slack => p_free_slack
3475 ,p_total_slack => p_total_slack
3476 ,p_effort_driven_flag => p_effort_driven_flag
3477 ,p_level_assignments_flag => p_level_assignments_flag
3478 -- end Bug 3654243 -------------------------------------------------------------------------
3479 ,x_return_status => l_return_status
3480 ,x_msg_count => l_msg_count
3481 ,x_msg_data => l_msg_data
3482 );
3483 -- end xxlu changes ,
3484 IF l_return_status <> 'S'
3485 THEN
3486 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3487 ,p_msg_name => 'PA_PS_TASK_NOT_UPDATED'
3488 /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
3489 ,p_token1 => 'PROJECT'
3490 ,p_value1 => p_project_id
3491 ,p_token2 => 'TASK'
3492 ,p_value2 => l_task_id);
3493 raise api_error;
3494 END IF;
3495
3496 --The following API should NOT be called if CREATE_TASK_STRUCTURE is called from AMG.
3497 --AMG recalculates the weightings once all the tasks are created.
3498 IF p_calling_module = 'FORMS'
3499 THEN
3500 /* PA_PROJ_TASK_STRUC_PUB.rollup_dates(
3501 p_tasks_in => l_tasks_out --null if called for one task
3502 ,p_task_version_id => l_task_version_id
3503 ,p_structure_version_id => l_structure_version_id
3504 ,p_project_id => p_project_id
3505 ,x_msg_count => l_msg_count
3506 ,x_msg_data => l_msg_data
3507 ,x_return_status => l_return_status
3508 );
3509 IF l_return_status <> 'S'
3510 THEN
3511 raise api_error;
3512 END IF;
3513 */
3514 null;
3515 END IF;
3516 END IF; --< cur_pa_proj_elem_vers2 >
3517
3518 /* Bug # 3420093 - Adding Progress Management modifications to update_task flow. */
3519
3520 -- Bug#3747312
3521 -- Added PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN = 'N'
3522 -- as the add_planning_txn/delete_planning_txn should be called in
3523 -- SHARED case and for SPLIT case if p_structure_type is passed as
3524 -- WORKPLAN.
3525
3526
3527 /* Commenting for bug 7358214
3528
3529 if (p_structure_type = 'WORKPLAN' OR nvl(PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( p_project_id ),'N') = 'N')then
3530
3531 for l_task_cur_rec in l_task_cur(p_project_id, l_structure_version_id)
3532 loop
3533 if (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(l_task_cur_rec.element_version_id) = 'Y') then
3534 l_add_task_ver_ids.extend(1);
3535 l_add_planned_effort.extend(1);
3536 l_add_start_date.extend(1);
3537 l_add_end_date.extend(1);
3538
3539 l_add_task_ver_ids(l_add_task_ver_ids.count):= l_task_cur_rec.element_version_id;
3540 l_add_planned_effort(l_add_planned_effort.count):= l_task_cur_rec.planned_effort;
3541 l_add_start_date(l_add_start_date.count):= l_task_cur_rec.actual_start_date;
3542 l_add_end_date(l_add_end_date.count):= l_task_cur_rec.actual_finish_date;
3543 else
3544 l_del_task_ver_ids.extend(1);
3545 l_del_task_ver_ids(l_del_task_ver_ids.count):= l_task_cur_rec.element_version_id;
3546 end if;
3547 end loop;
3548 end if;
3549
3550 -- Calling pa_task_pub1.call_add_planning_txns for lowest level tasks.
3551 --Bug 5256359. Introduced the loop to call pa_task_pub1.call_add_planning_txns
3552 --for set of 1000 records.
3553 rec_count:=0;
3554 for i in 1..l_add_task_ver_ids.count loop
3555
3556 rec_count := rec_count+1;
3557 l_add_task_ver_ids_prm.extend;
3558 l_add_planned_effort_prm.extend;
3559 l_add_start_date_prm.extend;
3560 l_add_end_date_prm.extend;
3561
3562 l_add_task_ver_ids_prm(rec_count) :=l_add_task_ver_ids(i);
3563 l_add_planned_effort_prm(rec_count):=l_add_planned_effort(i);
3564 l_add_start_date_prm(rec_count) :=l_add_start_date(i);
3565 l_add_end_date_prm(rec_count) :=l_add_end_date(i);
3566
3567 if rec_count=1000 OR
3568 i=l_add_task_ver_ids.count then
3569 begin
3570 pa_task_pub1.call_add_planning_txns(
3571 p_tasks_ver_ids => l_add_task_ver_ids_prm,
3572 p_planned_effort => l_add_planned_effort_prm,
3573 p_project_id => p_project_id,
3574 p_structure_version_id => l_structure_version_id, --replace p_structure_version_id, bug 3838186
3575 p_start_date => l_add_start_date_prm,
3576 p_end_date => l_add_end_date_prm,
3577 p_pm_product_code => p_pm_product_code, --bug 3811243
3578 x_return_status => l_return_status,
3579 x_msg_count => l_msg_count,
3580 x_msg_data => l_msg_data
3581 );
3582 exception
3583 when others then
3584 fnd_msg_pub.add_exc_msg(p_pkg_name => 'pa_project_pub',
3585 p_procedure_name => 'CREATE_PROJECT',
3586 p_error_text => substrb('PA_TASK_PUB1.CALL_ADD_PLANNING_TXNS:'||sqlerrm,1,240));
3587 raise fnd_api.g_exc_error;
3588 end;
3589
3590 l_add_task_ver_ids_prm := PA_NUM_1000_NUM();
3591 l_add_planned_effort_prm := PA_NUM_1000_NUM();
3592 l_add_start_date_prm := PA_DATE_1000_DATE();
3593 l_add_end_date_prm := PA_DATE_1000_DATE();
3594
3595 rec_count:=0;
3596
3597 end if;
3598
3599 end loop;
3600 --End of loop for bug 5256359
3601
3602 */
3603 -- End of commenting for bug 7358214
3604
3605 -- Added for bug 7358214
3606 IF (p_structure_type = 'WORKPLAN' OR
3607 nvl(PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( p_project_id ),'N') = 'N')
3608 THEN
3609 /* 14556729:Added for Huawei changes for update update flow */
3610 if (l_structure_version_id is not null AND NVL(PA_PROJECT_PUB.G_MASS_UPDATE_TASKS,'N') = 'N' ) then
3611 FOR l_task_cur_rec in l_task_cur(p_project_id, l_structure_version_id) LOOP
3612
3613 -- Bug 7437034 (Initialize l_hidden_assgn to N for each iteration)
3614 l_hidden_assgn := 'N';
3615
3616 OPEN check_hidden_assgn_exists(l_task_cur_rec.element_version_id);
3617 FETCH check_hidden_assgn_exists into l_hidden_assgn;
3618 CLOSE check_hidden_assgn_exists;
3619
3620 IF PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(l_task_cur_rec.element_version_id)
3621 = 'N' AND l_hidden_assgn = 'Y' THEN
3622 l_del_task_ver_ids.extend(1);
3623 l_del_task_ver_ids(l_del_task_ver_ids.count):=
3624 l_task_cur_rec.element_version_id;
3625 END IF;
3626 END LOOP;
3627 END IF; -- Huawei changes ends
3628 END IF;
3629 -- End of bug 7358214
3630
3631 -- Calling pa_fp_planning_transaction_pub.delete_planning_transactions for higher level tasks.
3632
3633 IF l_del_task_ver_ids.exists(1) THEN -- Bug 7358214
3634 begin
3635 pa_fp_planning_transaction_pub.delete_planning_transactions
3636 (
3637 p_context => 'WORKPLAN'
3638 ,p_task_or_res => 'TASKS'
3639 ,p_element_version_id_tbl => l_del_task_ver_ids
3640 ,x_return_status => l_return_status
3641 ,x_msg_count => l_msg_count
3642 ,x_msg_data => l_msg_data
3643 );
3644 exception
3645 when others then
3646 fnd_msg_pub.add_exc_msg(p_pkg_name => 'pa_project_pub',
3647 p_procedure_name => 'CREATE_PROJECT',
3648 p_error_text => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.DELETE_PLANNING_TRANSACTIONS:'||SQLERRM,1,240));
3649 raise fnd_api.g_exc_error;
3650 end;
3651 END IF ; --bug 7358214
3652 /* Bug # 3420093 - Adding Progress Management modifications to update_task flow. */
3653
3654 -- Progress Management Changes. Bug # 3420093.
3655
3656 /* Commenting out the condition to check if workplan versioning is enabled for the project
3657 as PA_TASK_PUB1.update_task_det_sch_info() should be called for both versioning enabled
3658 and versioning disabled projects. */
3659
3660 /* if (PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED(p_project_id) = 'Y') then */
3661
3662 /* Calling API: pa_task_pub1.update_task_det_sch_info() only if calling module is not 'FORMS'. */
3663
3664 if p_calling_module <> 'FORMS' then
3665
3666 pa_task_pub1.update_task_det_sch_info(
3667 p_calling_module => p_calling_module
3668 ,p_task_ver_id => l_task_version_id
3669 ,p_project_id => p_project_id
3670 ,p_planned_effort => p_planned_effort
3671 ,p_ETC_effort => p_etc_effort
3672 ,p_structure_version_id => p_structure_version_id
3673 ,p_percent_complete => p_percent_complete
3674 ,x_return_status => x_return_status
3675 ,x_msg_count => x_msg_count
3676 ,x_msg_data => x_msg_data
3677 );
3678
3679 end if;
3680
3681 /* end if; */
3682
3683 -- Progress Management Changes. Bug # 3420093.
3684
3685 x_return_status := FND_API.G_RET_STS_SUCCESS;
3686 EXCEPTION
3687 WHEN API_ERROR THEN
3688 x_return_status := FND_API.G_RET_STS_ERROR;
3689 rollback to update_task_struc;
3690 WHEN OTHERS THEN
3691 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3692 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
3693 p_procedure_name => 'update_task_structure',
3694 p_error_text => SUBSTRB(SQLERRM,1,240));
3695 rollback to update_task_struc;
3696 raise;
3697 END update_task_structure;
3698
3699 -- API name : delete_task_structure
3700 -- Type : PL/sql Public procedure
3701 -- Pre-reqs : None
3702 -- Return Value : N/A
3703 -- Prameters
3704 -- p_calling_module IN VARCHAR2
3705 -- ,p_task_id IN NUMBER
3706 -- ,p_record_version_number IN NUMBER
3707 -- ,x_msg_count OUT NUMBER
3708 -- ,x_msg_data OUT VARCHAR2
3709 -- ,x_return_status OUT VARCHAR2--
3710 -- History
3711 --
3712 -- 25-APR-02 MAansari -Created
3713 --
3714 -- Notes: This api is called from form PAXPREPR.fmb ON-DELETE of tasks block.
3715 -- The call is in PA_PROJECT_STRUCTURES.delete_task_structure API.
3716
3717 PROCEDURE delete_task_structure
3718 (
3719 p_calling_module IN VARCHAR2
3720 ,p_task_id IN NUMBER
3721 ,p_task_version_id IN NUMBER := -9999 --mandatory for workplan task version
3722 ,p_project_id IN NUMBER := -9999 --bug 2765115
3723 ,p_structure_type IN VARCHAR2 := 'FINANCIAL' --bug 3301192
3724 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
3725 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3726 ,x_return_status OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
3727 IS
3728
3729 l_return_status VARCHAR2(1);
3730 l_msg_count NUMBER;
3731 l_msg_data VARCHAR2(2000);
3732 l_task_version_id NUMBER;
3733 l_record_version_number NUMBER;
3734 API_ERROR EXCEPTION;
3735
3736 CURSOR cur_task_ver_id IS
3737 SELECT element_version_id, record_version_number
3738 FROM pa_proj_element_versions ppev
3739 WHERE proj_element_id = p_task_id
3740 AND object_type = 'PA_TASKS'
3741 AND parent_structure_version_id = PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_FIN_STRUC_VER_ID( p_project_id ); -- bug 2765115
3742
3743 CURSOR cur_task_ver_id2 IS
3744 SELECT record_version_number
3745 FROM pa_proj_element_versions ppev
3746 WHERE element_version_id = p_task_version_id
3747 AND object_type = 'PA_TASKS';
3748
3749 -- bug 2765115
3750 CURSOR cur_pa_proj
3751 IS
3752 SELECT template_flag from pa_projects_all where project_id = p_project_id;
3753
3754 l_template_flag VARCHAR2(1) := 'N';
3755
3756 CURSOR cur_task_ver_id3 IS
3757 SELECT element_version_id, record_version_number
3758 FROM pa_proj_element_versions ppev
3759 WHERE proj_element_id = p_task_id
3760 AND object_type = 'PA_TASKS'
3761 AND project_id = p_project_id;
3762 -- bug 2765115
3763
3764
3765 BEGIN
3766
3767 --Clear Error Messages.
3768 IF FND_MSG_PUB.count_msg = 0
3769 THEN
3770 FND_MSG_PUB.initialize;
3771 END IF;
3772
3773 SAVEPOINT delete_task_struc;
3774
3775 IF p_task_version_id IS NULL OR
3776 p_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
3777 p_task_version_id = -9999
3778 THEN
3779
3780 -- bug 2765115
3781 OPEN cur_pa_proj;
3782 FETCH cur_pa_proj INTO l_template_flag;
3783 CLOSE cur_pa_proj;
3784 -- bug 2765115
3785
3786 IF l_template_flag = 'N' -- bug 2765115
3787 THEN
3788 OPEN cur_task_ver_id;
3789 FETCH cur_task_ver_id INTO l_task_version_id, l_record_version_number;
3790 CLOSE cur_task_ver_id;
3791 END IF; -- bug 2765115
3792
3793 -- bug 2765115
3794 IF l_task_version_id IS NULL
3795 THEN
3796 OPEN cur_task_ver_id3;
3797 FETCH cur_task_ver_id3 INTO l_task_version_id, l_record_version_number;
3798 CLOSE cur_task_ver_id3;
3799 END IF;
3800 -- bug 2765115
3801
3802 ELSE
3803 OPEN cur_task_ver_id2;
3804 FETCH cur_task_ver_id2 INTO l_record_version_number;
3805 CLOSE cur_task_ver_id2;
3806
3807 l_task_version_id := p_task_version_id;
3808 END IF;
3809
3810 IF l_task_version_id > 0
3811 THEN
3812 PA_TASK_PUB1.Delete_Task_Version(
3813 p_calling_module => p_calling_module
3814 ,p_structure_type => p_structure_type --bug 3301192
3815 ,p_task_version_id => l_task_version_id
3816 ,p_record_version_number => l_record_version_number
3817 ,x_return_status => l_return_status
3818 ,x_msg_count => l_msg_count
3819 ,x_msg_data => l_msg_data
3820 );
3821 END IF;
3822
3823 IF l_return_status <> 'S'
3824 THEN
3825 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3826 ,p_msg_name => 'PA_PS_TASK_NOT_DELETED');
3827 raise api_error;
3828 END IF;
3829 x_return_status := FND_API.G_RET_STS_SUCCESS;
3830
3831 EXCEPTION
3832 WHEN API_ERROR THEN
3833 x_return_status := FND_API.G_RET_STS_ERROR;
3834 rollback to delete_task_struc;
3835 WHEN OTHERS THEN
3836 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3837 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
3838 p_procedure_name => 'delete_task_structure',
3839 p_error_text => SUBSTRB(SQLERRM,1,240));
3840 rollback to delete_task_struc;
3841 raise;
3842 END delete_task_structure;
3843
3844 -- API name : delete_project_structure
3845 -- Type : PL/sql Public procedure
3846 -- Pre-reqs : None
3847 -- Return Value : N/A
3848 -- Prameters
3849 -- p_calling_module IN VARCHAR2
3850 -- ,p_project_id IN NUMBER
3851 -- ,x_msg_count OUT NUMBER
3852 -- ,x_msg_data OUT VARCHAR2
3853 -- ,x_return_status OUT VARCHAR2--
3854 -- History
3855 --
3856 -- 26-APR-02 MAansari -Created
3857 -- 01-JUL-2004 Rakesh Raghavan Modified.
3858 --
3859 -- Notes: This api is called from form PAXPREPR.fmb ON-DELETE of project block.
3860 -- The call is in PA_PROJECT_STRUCTURES.delete_project_structure API.
3861 -- This api deletes all records from structure tables.
3862
3863 PROCEDURE delete_project_structure
3864 (
3865 p_calling_module IN VARCHAR2
3866 ,p_project_id IN NUMBER
3867 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
3868 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3869 ,x_return_status OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
3870
3871 l_return_status VARCHAR2(1);
3872 l_msg_count NUMBER;
3873 l_msg_data VARCHAR2(2000);
3874 l_error_message_code VARCHAR2(250);
3875 l_task_version_id NUMBER;
3876 l_record_version_number NUMBER;
3877 API_ERROR EXCEPTION;
3878
3879 CURSOR cur_str_ver
3880 IS
3881 SELECT rowid, element_version_id
3882 FROM pa_proj_element_versions
3883 WHERE OBJECT_TYPE = 'PA_STRUCTURES'
3884 AND project_id = p_project_id;
3885
3886 CURSOR cur_task_ver( c_parent_structure_version_id NUMBER )
3887 IS
3888 SELECT rowid, element_version_id
3889 FROM pa_proj_element_versions
3890 WHERE OBJECT_TYPE = 'PA_TASKS'
3891 AND project_id = p_project_id
3892 AND parent_structure_version_id = c_parent_structure_version_id;
3893
3894 CURSOR cur_proj_elems
3895 IS
3896 SELECT rowid, proj_element_id
3897 FROM pa_proj_elements
3898 WHERE project_id = p_project_id;
3899
3900
3901 BEGIN
3902
3903 --Clear Error Messages.
3904 IF FND_MSG_PUB.count_msg = 0
3905 THEN
3906 FND_MSG_PUB.initialize;
3907 END IF;
3908
3909 SAVEPOINT delete_project_struc;
3910
3911
3912 FOR cur_str_ver_rec IN cur_str_ver LOOP
3913 FOR cur_task_ver_rec IN cur_task_ver( cur_str_ver_rec.element_version_id ) LOOP
3914 --Check to see if deleting a version is ok
3915 PA_PROJ_ELEMENTS_UTILS.Check_Delete_task_Ver_Ok(
3916 p_project_id => p_project_id
3917 ,p_task_version_id => cur_task_ver_rec.element_version_id
3918 ,p_parent_structure_ver_id => cur_str_ver_rec.element_version_id
3919 ,x_return_status => l_return_status
3920 ,x_error_message_code => l_error_message_code
3921 );
3922
3923 IF l_return_status <> 'S'
3924 THEN
3925 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3926 ,p_msg_name => l_error_message_code);
3927 raise api_error;
3928 END IF;
3929
3930 DELETE FROM pa_object_relationships
3931 WHERE relationship_type = 'S' AND
3932 (object_id_from1 = cur_task_ver_rec.element_version_id OR
3933 object_id_to1 = cur_task_ver_rec.element_version_id);
3934
3935 PA_PROJ_ELEMENT_VERSIONS_PKG.DELETE_ROW( cur_task_ver_rec.rowid );
3936
3937
3938 END LOOP;
3939
3940 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
3941 p_project_id => p_project_id
3942 ,p_structure_version_id => cur_str_ver_rec.element_version_id
3943 ,x_return_status => l_return_status
3944 ,x_error_message_code => l_error_message_code
3945 );
3946
3947 IF l_return_status <> 'S'
3948 THEN
3949 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3950 ,p_msg_name => l_error_message_code);
3951 raise api_error;
3952 END IF;
3953
3954 DELETE FROM pa_object_relationships
3955 WHERE relationship_type = 'S' AND
3956 (object_id_from1 = cur_str_ver_rec.element_version_id OR
3957 object_id_to1 = cur_str_ver_rec.element_version_id);
3958
3959 PA_PROJ_ELEMENT_VERSIONS_PKG.DELETE_ROW( cur_str_ver_rec.rowid );
3960
3961 END LOOP;
3962
3963 FOR cur_proj_elems_rec IN cur_proj_elems LOOP
3964 DELETE FROM pa_proj_structure_types
3965 WHERE proj_element_id = cur_proj_elems_rec.proj_element_id;
3966
3967 PA_PROJ_ELEMENTS_PKG.DELETE_ROW( cur_proj_elems_rec.rowid );
3968 END LOOP;
3969
3970 DELETE FROM pa_proj_elem_ver_schedule where project_id = p_project_id;
3971 DELETE FROM pa_proj_elem_ver_structure where project_id = p_project_id;
3972
3973 /* Code to delete project records from tables: pa_progress_rollup, pa_proj_progress_attr
3974 and pa_proj_workplan_attr. */
3975
3976 BEGIN
3977
3978 PA_PROGRESS_PUB.delete_working_wp_progress (
3979 p_project_id => p_project_id
3980 ,p_calling_context => 'PROJECT_STRUCTURE'
3981 ,x_return_status => x_return_status
3982 ,x_msg_count => x_msg_count
3983 ,x_Msg_data => x_msg_data
3984 );
3985 EXCEPTION
3986
3987 WHEN OTHERS THEN
3988
3989 fnd_msg_pub.add_exc_msg(
3990 p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
3991 p_procedure_name => 'delete_project_structure',
3992 p_error_text => SUBSTR('PA_PROGRESS_PUB.delete_working_wp_progress:'||SQLERRM,1,240));
3993
3994 RAISE FND_API.G_EXC_ERROR;
3995
3996 END;
3997
3998
3999 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4000
4001 RAISE FND_API.G_EXC_ERROR;
4002
4003 END IF;
4004
4005 x_return_status := FND_API.G_RET_STS_SUCCESS;
4006
4007 EXCEPTION
4008 WHEN API_ERROR THEN
4009 x_return_status := FND_API.G_RET_STS_ERROR;
4010 rollback to delete_project_struc;
4011 WHEN OTHERS THEN
4012 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4013 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
4014 p_procedure_name => 'delete_project_structure',
4015 p_error_text => SUBSTRB(SQLERRM,1,240));
4016 rollback to delete_project_struc;
4017 raise;
4018 END delete_project_structure;
4019
4020 -- API name : Published_version_exists
4021 -- Type : PL/sql Public Function
4022 -- Pre-reqs : None
4023 -- Return Value : N/A
4024 -- Prameters
4025 -- p_project_id IN NUMBER
4026 -- History
4027 --
4028 -- 29-APR-02 MAansari -Created
4029 --
4030 -- Notes: This api is called from form PAXPREPR.fmb ON-DELETE of task block.
4031 -- To check if there exists any published ver.
4032 -- bug 3654011: Added conditions to check for shared or workplan only structure
4033
4034 FUNCTION Published_version_exists
4035 (
4036 p_project_id IN NUMBER
4037 ) RETURN VARCHAR2 IS
4038
4039 CURSOR cur_pub_versions is
4040 select 'Y'
4041 from pa_proj_elem_ver_structure ppevs,
4042 pa_proj_structure_types ppst,
4043 pa_structure_types pst
4044 where ppevs.project_id = p_project_id
4045 and ppevs.STATUS_CODE = 'STRUCTURE_PUBLISHED'
4046 and ppevs.proj_element_id = ppst.proj_element_id
4047 and ppst.structure_type_id = pst.structure_type_id
4048 and pst.structure_type_class_code = 'WORKPLAN';
4049 l_dummy_char VARCHAR2(1);
4050 BEGIN
4051 OPEN cur_pub_versions;
4052 FETCH cur_pub_versions INTO l_dummy_char;
4053 IF cur_pub_versions%FOUND
4054 THEN
4055 CLOSE cur_pub_versions;
4056 RETURN 'Y';
4057 ELSE
4058 CLOSE cur_pub_versions;
4059 RETURN 'N';
4060 END IF;
4061 END Published_version_exists;
4062
4063 -- API name : approve_project
4064 -- Type : PL/sql Public Function
4065 -- Pre-reqs : None
4066 -- Return Value : 'Y', 'N'
4067 -- Prameters
4068 -- p_project_id IN NUMBER
4069 -- History
4070 --
4071 -- 29-APR-02 MAansari -Created
4072 --
4073 -- Notes: This api is called from Pa_project_stus_utils.Handle_Project_Status_Change api
4074 -- to check the following before changing status to APPROVE.
4075 -- 1) The project should contain one structure for Workplan and Costing
4076 -- 2) There should be a published version.
4077
4078 FUNCTION approve_project
4079 (
4080 p_project_id IN NUMBER
4081 ) RETURN VARCHAR2 IS
4082 CURSOR cur_proj_strs
4083 IS
4084 SELECT 'X'
4085 FROM pa_projects_all
4086 WHERE project_id = p_project_id
4087 AND split_cost_from_workplan_flag = 'N';
4088
4089 CURSOR cur_pub_versions is
4090 select 'Y'
4091 from pa_proj_elem_ver_structure
4092 where project_id = p_project_id
4093 and STATUS_CODE = 'STRUCTURE_PUBLISHED';
4094
4095 l_approve VARCHAR2(1);
4096 l_dummy_char VARCHAR2(1);
4097 BEGIN
4098 OPEN cur_proj_strs;
4099 FETCH cur_proj_strs INTO l_dummy_char;
4100 IF cur_proj_strs%FOUND
4101 THEN
4102 l_approve := 'Y';
4103 OPEN cur_pub_versions;
4104 FETCH cur_pub_versions INTO l_dummy_char;
4105 IF cur_pub_versions%NOTFOUND
4106 THEN
4107 l_approve := 'N';
4108 END IF;
4109 CLOSE cur_pub_versions;
4110 ELSE
4111 CLOSE cur_proj_strs;
4112 l_approve := 'Y';
4113 END IF;
4114 RETURN ( l_approve );
4115 END approve_project;
4116
4117 -- API name : Is_PJT_Licensed
4118 -- Type : PL/sql Public Function
4119 -- Pre-reqs : None
4120 -- Return Value : 'Y', 'N'
4121 -- Prameters
4122 -- History
4123 --
4124 -- 01-MAY-02 MAansari -Created
4125 --
4126 -- Notes: This api is called from Projects form and Self Service to display SPLIT_COST_FROM_WORKPLAN_FLAG.
4127
4128 FUNCTION Is_PJT_Licensed RETURN VARCHAR2 IS
4129 BEGIN
4130 RETURN ( PA_INSTALL.IS_PJT_LICENSED );
4131 END Is_PJT_Licensed;
4132
4133 -- API name : Progress_rec_exists
4134 -- Type : PL/sql Public Function
4135 -- Pre-reqs : None
4136 -- Return Value : 'Y', 'N'
4137 -- Prameters
4138 -- p_project_id NUMBER
4139 -- History
4140 --
4141 -- 01-MAY-02 MAansari -Created
4142 --
4143 -- Notes: This api is called from Projects form and Self Service to allow users to update
4144 -- SPLIT_COST_FROM_WORKPLAN_FLAG.
4145
4146 FUNCTION Progress_rec_exists( p_project_id NUMBER ) RETURN VARCHAR2 IS
4147 l_return_value VARCHAR2(1) := 'N';
4148 BEGIN
4149 --l_return_value := call here api from selva's team.
4150 RETURN l_return_value;
4151 END Progress_rec_exists;
4152
4153 -- API name : create_delete_workplan_struc
4154 -- Type : PL/sql Public procedure
4155 -- Pre-reqs : None
4156 -- Return Value : N/A
4157 -- Prameters
4158 -- p_project_id NUMBER
4159 -- p_calling_module IN VARCHAR2
4160 -- p_project_id IN NUMBER
4161 -- p_project_number IN VARCHAR2 := 'JUNK_CHARS'
4162 -- p_project_name IN VARCHAR2 := 'JUNK_CHARS'
4163 -- p_project_description IN VARCHAR2 := 'JUNK_CHARS'
4164 -- p_split_workplan IN VARCHAR2
4165 -- History
4166 --
4167 -- 01-MAY-02 MAansari -Created
4168 --
4169 -- Notes: This api is called from Projects form and Self Service when the SPLIT_COST_FROM_WORKPLAN_FLAG
4170 -- is checked
4171
4172 PROCEDURE create_delete_workplan_struc(
4173 p_calling_module IN VARCHAR2
4174 ,p_project_id IN NUMBER
4175 ,p_project_number IN VARCHAR2
4176 ,p_project_name IN VARCHAR2
4177 ,p_project_description IN VARCHAR2
4178 ,p_split_workplan IN VARCHAR2
4179 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4180 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4181 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4182 ) IS
4183
4184 l_return_status VARCHAR2(1);
4185 l_msg_count NUMBER;
4186 l_msg_data VARCHAR2(2000);
4187 l_data VARCHAR2(2000);
4188 l_msg_index_out NUMBER;
4189 l_error_message_code VARCHAR2(250);
4190 API_ERROR EXCEPTION;
4191
4192 CURSOR cur_projects
4193 IS
4194 SELECT split_cost_from_workplan_flag
4195 FROM pa_projects_all
4196 WHERE project_id = p_project_id;
4197
4198 CURSOR cur_pa_proj_elems
4199 IS
4200 SELECT proj_element_id
4201 FROM pa_proj_elements
4202 WHERE project_id = p_project_id
4203 AND object_type = 'PA_STRUCTURES';
4204
4205 CURSOR cur_pa_proj_elem_vers( c_structure_id NUMBER )
4206 IS
4207 SELECT element_version_id, record_version_number
4208 FROM pa_proj_element_versions
4209 WHERE project_id = p_project_id
4210 AND object_type = 'PA_STRUCTURES'
4211 AND proj_element_id = c_structure_id;
4212
4213 CURSOR cur_struc_type_id
4214 IS
4215 select structure_type_id
4216 from pa_structure_types
4217 where structure_type_class_code = 'WORKPLAN';
4218
4219 CURSOR cur_pa_proj_elem_vers2
4220 IS
4221 SELECT element_version_id
4222 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
4223 WHERE c.project_id = p_project_id
4224 AND a.structure_type_id = b.structure_type_id
4225 AND b.proj_element_id = c.proj_element_id
4226 AND a.structure_type = 'WORKPLAN';
4227
4228 CURSOR cur_pa_proj_elem_vers3( c_parent_struc_ver_id NUMBER )
4229 IS
4230 SELECT element_version_id
4231 FROM pa_proj_element_versions
4232 WHERE project_id = p_project_id
4233 AND parent_structure_version_id = c_parent_struc_ver_id
4234 AND object_type = 'PA_TASKS';
4235
4236
4237 l_structure_type_id NUMBER;
4238 l_proj_structure_type_id NUMBER;
4239 l_rowid VARCHAR2(18);
4240 l_structure_id NUMBER;
4241 l_structure_version_id NUMBER;
4242 l_split_flag VARCHAR2(1);
4243 x_pev_schedule_id NUMBER;
4244
4245 l_append VARCHAR2(10);
4246 l_suffix VARCHAR2(80);
4247 l_name VARCHAR2(240);
4248 BEGIN
4249
4250 --Clear Error Messages.
4251 IF FND_MSG_PUB.count_msg = 0
4252 THEN
4253 FND_MSG_PUB.initialize;
4254 END IF;
4255
4256 SAVEPOINT create_delete_wp_struc;
4257
4258 OPEN cur_projects;
4259 FETCH cur_projects INTO l_split_flag;
4260 CLOSE cur_projects;
4261
4262 UPDATE pa_projects_all
4263 SET split_cost_from_workplan_flag = p_split_workplan
4264 WHERE project_id = p_project_id;
4265
4266 IF p_split_workplan = l_split_flag
4267 THEN
4268 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4269 ,p_msg_name => 'PA_PS_WRONG_SPLIT_OPTION');
4270 raise api_error;
4271 END IF;
4272
4273 IF p_project_id IS NULL
4274 THEN
4275 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4276 ,p_msg_name => 'PA_PS_PROJ_ID_NULL');
4277 raise api_error;
4278 END IF;
4279
4280 IF p_split_workplan = 'Y'
4281 THEN
4282
4283 IF p_project_number IS NULL OR p_project_number = 'JUNK_CHARS'
4284 THEN
4285 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4286 ,p_msg_name => 'PA_PS_INV_PROJ_NUM');
4287 raise api_error;
4288 END IF;
4289
4290 IF p_project_name IS NULL OR p_project_name = 'JUNK_CHARS'
4291 THEN
4292 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4293 ,p_msg_name => 'PA_PS_INV_PROJ_NAME');
4294 raise api_error;
4295 ELSE
4296 l_name := p_project_name;
4297 END IF;
4298
4299 l_append := ': ';
4300
4301 select meaning
4302 into l_suffix
4303 from pa_lookups
4304 where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
4305 and lookup_code = 'WORKPLAN';
4306
4307 l_name := substr(l_name||l_append||l_suffix, 1, 240);
4308
4309 PA_PROJECT_STRUCTURE_PVT1.SPLIT_WORKPLAN(
4310 p_project_id => p_project_id
4311 ,p_structure_name => l_name
4312 ,p_structure_number => p_project_number
4313 ,p_description => p_project_description
4314 ,x_structure_id => l_structure_id
4315 ,x_structure_version_id => l_structure_version_id
4316 ,x_msg_count => l_msg_count
4317 ,x_msg_data => l_msg_data
4318 ,x_return_status => l_return_status
4319 );
4320
4321 l_msg_count := FND_MSG_PUB.count_msg;
4322 if l_msg_count > 0 then
4323 x_msg_count := l_msg_count;
4324 if x_msg_count = 1 then
4325 pa_interface_utils_pub.get_messages
4326 (p_encoded => FND_API.G_TRUE,
4327 p_msg_index => 1,
4328 p_msg_count => l_msg_count,
4329 p_msg_data => l_msg_data,
4330 p_data => l_data,
4331 p_msg_index_out => l_msg_index_out);
4332 x_msg_data := l_data;
4333 end if;
4334 raise API_ERROR;
4335 end if;
4336 ELSE --delete the workplan structure including all its structure versions.
4337 FOR cur_pa_proj_elems_rec IN cur_pa_proj_elems LOOP
4338 --should obly be WORKPLAN structure
4339 IF PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure( cur_pa_proj_elems_rec.proj_element_id, 'WORKPLAN' ) = 'Y' AND
4340 PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure( cur_pa_proj_elems_rec.proj_element_id, 'FINANCIAL' ) = 'N'
4341 THEN
4342 FOR cur_pa_proj_elem_vers_rec IN cur_pa_proj_elem_vers( cur_pa_proj_elems_rec.proj_element_id ) LOOP
4343 PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
4344 p_structure_version_id => cur_pa_proj_elem_vers_rec.element_version_id
4345 ,p_record_version_number => cur_pa_proj_elem_vers_rec.record_version_number
4346 ,x_return_status => l_return_status
4347 ,x_msg_count => l_msg_count
4348 ,x_msg_data => l_msg_data
4349 );
4350
4351 l_msg_count := FND_MSG_PUB.count_msg;
4352 if l_msg_count > 0 then
4353 x_msg_count := l_msg_count;
4354 if x_msg_count = 1 then
4355 pa_interface_utils_pub.get_messages
4356 (p_encoded => FND_API.G_TRUE,
4357 p_msg_index => 1,
4358 p_msg_count => l_msg_count,
4359 p_msg_data => l_msg_data,
4360 p_data => l_data,
4361 p_msg_index_out => l_msg_index_out);
4362 x_msg_data := l_data;
4363 end if;
4364 raise API_ERROR;
4365 end if;
4366 END LOOP;
4367 END IF;
4368
4369 --Now associate the WORKPLAN structure type with the COSTING structure.
4370 IF PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure( cur_pa_proj_elems_rec.proj_element_id, 'FINANCIAL' ) = 'Y'
4371 THEN
4372 OPEN cur_struc_type_id;
4373 FETCH cur_struc_type_id INTO l_structure_type_id;
4374 CLOSE cur_struc_type_id;
4375 PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
4376 X_ROWID => l_rowid
4377 , X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
4378 , X_PROJ_ELEMENT_ID => cur_pa_proj_elems_rec.proj_element_id
4379 , X_STRUCTURE_TYPE_ID => l_structure_type_id
4380 , X_RECORD_VERSION_NUMBER => 1
4381 , X_ATTRIBUTE_CATEGORY => NULL
4382 , X_ATTRIBUTE1 => NULL
4383 , X_ATTRIBUTE2 => NULL
4384 , X_ATTRIBUTE3 => NULL
4385 , X_ATTRIBUTE4 => NULL
4386 , X_ATTRIBUTE5 => NULL
4387 , X_ATTRIBUTE6 => NULL
4388 , X_ATTRIBUTE7 => NULL
4389 , X_ATTRIBUTE8 => NULL
4390 , X_ATTRIBUTE9 => NULL
4391 , X_ATTRIBUTE10 => NULL
4392 , X_ATTRIBUTE11 => NULL
4393 , X_ATTRIBUTE12 => NULL
4394 , X_ATTRIBUTE13 => NULL
4395 , X_ATTRIBUTE14 => NULL
4396 , X_ATTRIBUTE15 => NULL
4397 );
4398 END IF;
4399 END LOOP;
4400 --Now create the schedule versions for the workplan structure version and task versions.
4401 FOR cur_pa_proj_elem_vers_rec2 IN cur_pa_proj_elem_vers2 LOOP
4402 x_pev_schedule_id := null;
4403 PA_TASK_PUB1.Create_Schedule_Version(
4404 p_element_version_id => cur_pa_proj_elem_vers_rec2.element_version_id
4405 ,p_scheduled_start_date => SYSDATE
4406 ,p_scheduled_end_date => SYSDATE
4407 ,x_pev_schedule_id => x_pev_schedule_id
4408 ,x_return_status => l_return_status
4409 ,x_msg_count => l_msg_count
4410 ,x_msg_data => l_msg_data
4411 );
4412
4413 IF l_return_status <> 'S'
4414 THEN
4415 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4416 ,p_msg_name => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
4417 raise api_error;
4418 END IF;
4419 FOR cur_pa_proj_elem_vers_rec3 IN cur_pa_proj_elem_vers3(cur_pa_proj_elem_vers_rec2.element_version_id) LOOP
4420 x_pev_schedule_id := null;
4421 PA_TASK_PUB1.Create_Schedule_Version(
4422 p_element_version_id => cur_pa_proj_elem_vers_rec3.element_version_id
4423 ,p_scheduled_start_date => SYSDATE
4424 ,p_scheduled_end_date => SYSDATE
4425 ,x_pev_schedule_id => x_pev_schedule_id
4426 ,x_return_status => l_return_status
4427 ,x_msg_count => l_msg_count
4428 ,x_msg_data => l_msg_data
4429 );
4430
4431 IF l_return_status <> 'S'
4432 THEN
4433 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4434 ,p_msg_name => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
4435 raise api_error;
4436 END IF;
4437 END LOOP;
4438 END LOOP;
4439 END IF;
4440 x_return_status := FND_API.G_RET_STS_SUCCESS;
4441 EXCEPTION
4442 WHEN API_ERROR THEN
4443 x_return_status := FND_API.G_RET_STS_ERROR;
4444 rollback to create_delete_wp_struc;
4445 WHEN OTHERS THEN
4446 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4447 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
4448 p_procedure_name => 'create_delete_workplan_struc',
4449 p_error_text => SUBSTRB(SQLERRM,1,240));
4450 rollback to create_delete_wp_struc;
4451 raise;
4452 END create_delete_workplan_struc;
4453
4454
4455 -- API name : Copy_Structure
4456 -- Type : PL/sql Public procedure
4457 -- Pre-reqs : None
4458 -- Return Value : N/A
4459 -- Prameters
4460 -- p_src_project_id NUMBER
4461 -- p_dest_project_id NUMBER
4462 -- History
4463 --
4464 -- 03-MAY-02 MAansari -Created
4465 --
4466 -- Notes: This api is called from PA_PROJECT_CORE1.COPY_PROJECT
4467
4468 PROCEDURE Copy_Structure(
4469 p_src_project_id IN NUMBER
4470 ,p_dest_project_id IN NUMBER
4471 ,p_delta IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4472 ,p_copy_task_flag IN VARCHAR2 := 'Y'
4473 ,p_dest_template_flag IN VARCHAR2 := 'N' --bug 2805602
4474 ,p_src_template_flag IN VARCHAR2 := 'N' --bug 2805602
4475 ,p_dest_project_name IN VARCHAR2 --bug 2805602
4476 ,p_target_start_date IN DATE --bug 2805602
4477 ,p_target_finish_date IN DATE --bug 2805602
4478 ,p_calendar_id IN NUMBER
4479 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4480 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4481 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4482 ) IS
4483
4484 l_return_status VARCHAR2(1);
4485 l_msg_count NUMBER;
4486 l_msg_data VARCHAR2(2000);
4487 l_data VARCHAR2(2000);
4488 l_msg_index_out NUMBER;
4489 l_error_message_code VARCHAR2(250);
4490 API_ERROR EXCEPTION;
4491
4492 BEGIN
4493
4494 --Clear Error Messages.
4495 IF FND_MSG_PUB.count_msg = 0
4496 THEN
4497 FND_MSG_PUB.initialize;
4498 END IF;
4499
4500 SAVEPOINT cp_struc;
4501 --bug 2805602
4502
4503 /* PA_PROJECT_STRUCTURE_PUB1.Copy_Structure
4504 (
4505 p_src_project_id => p_src_project_id
4506 ,p_dest_project_id => p_dest_project_id
4507 ,p_delta => p_delta
4508 ,p_copy_task_flag => p_copy_task_flag
4509 ,x_return_status => l_return_status
4510 ,x_msg_count => l_msg_count
4511 ,x_msg_data => l_msg_data
4512 );
4513 */
4514
4515 IF p_copy_task_flag = 'Y'
4516 THEN
4517
4518 --copying structrues and tasks
4519 PA_PROJ_TASK_STRUC_PUB.copy_structures_tasks_bulk
4520 (
4521 p_init_msg_list => FND_API.G_FALSE
4522 ,p_src_project_id => p_src_project_id
4523 ,p_dest_project_id => p_dest_project_id
4524 ,p_delta => p_delta
4525 ,p_copy_task_flag => p_copy_task_flag
4526 ,p_dest_template_flag => p_dest_template_flag
4527 ,p_src_template_flag => p_src_template_flag
4528 ,p_dest_project_name => p_dest_project_name
4529 ,p_target_start_date => p_target_start_date
4530 ,p_target_finish_date => p_target_finish_date
4531 ,p_calendar_id => p_calendar_id
4532 ,x_return_status => l_return_status
4533 ,x_msg_count => l_msg_count
4534 ,x_msg_data => l_msg_data
4535 );
4536 ELSE
4537
4538 -- Bug 4146369 : Added following condition so that the copy_structures_bulk is not get called
4539 -- when both structures are disabled in source project.
4540 IF PA_PROJECT_STRUCTURE_UTILS.check_workplan_enabled( p_src_project_id )= 'Y' OR
4541 PA_PROJECT_STRUCTURE_UTILS.check_financial_enabled( p_src_project_id )= 'Y' THEN
4542 --copying only structrues --This is for AMG
4543 PA_PROJ_TASK_STRUC_PUB.copy_structures_bulk
4544 (
4545 p_src_project_id => p_src_project_id
4546 ,p_dest_project_id => p_dest_project_id
4547 ,p_delta => p_delta
4548 ,p_copy_task_flag => p_copy_task_flag
4549 ,p_dest_template_flag => p_dest_template_flag
4550 ,p_src_template_flag => p_src_template_flag
4551 ,p_dest_project_name => p_dest_project_name
4552 ,p_target_start_date => p_target_start_date
4553 ,p_target_finish_date => p_target_finish_date
4554 ,p_calendar_id => p_calendar_id
4555 ,x_return_status => l_return_status
4556 ,x_msg_count => l_msg_count
4557 ,x_msg_data => l_msg_data
4558 );
4559 END IF;
4560 END IF;
4561 --bug 2805602
4562
4563
4564 l_msg_count := FND_MSG_PUB.count_msg;
4565 if l_msg_count > 0 then
4566 x_msg_count := l_msg_count;
4567 if x_msg_count = 1 then
4568 pa_interface_utils_pub.get_messages
4569 (p_encoded => FND_API.G_TRUE,
4570 p_msg_index => 1,
4571 p_msg_count => l_msg_count,
4572 p_msg_data => l_msg_data,
4573 p_data => l_data,
4574 p_msg_index_out => l_msg_index_out);
4575 x_msg_data := l_data;
4576 end if;
4577 raise API_ERROR;
4578 end if;
4579
4580 x_return_status := FND_API.G_RET_STS_SUCCESS;
4581 EXCEPTION
4582 WHEN API_ERROR THEN
4583 x_return_status := FND_API.G_RET_STS_ERROR;
4584 rollback to cp_struc;
4585 WHEN OTHERS THEN
4586 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4587 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
4588 p_procedure_name => 'Copy_Structure',
4589 p_error_text => SUBSTRB(SQLERRM,1,240));
4590 rollback to cp_struc;
4591 raise;
4592
4593 END Copy_Structure;
4594
4595 -- API name : Clean_unwanted_tasks
4596 -- Type : PL/sql Public procedure
4597 -- Pre-reqs : None
4598 -- Return Value : N/A
4599 -- Prameters
4600 -- p_project_id NUMBER
4601 -- History
4602 --
4603 -- 25-MAY-02 MAansari -Created
4604 --
4605 -- Notes: This api is called from PA_PROJECT_PUB.CREATE_PROJECT to clean up the tasks in pa_proj_elements that were created
4606 -- by calling copy structure api. Copy structure api copies template's tasks to pro_elements though there
4607 -- 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
4608 -- tasks from pa_proj_elements as they were erroneously created by COPY_STRUCTURE and then call create_default_structure
4609 -- to syn up pa_pro_elements with pa_tasks.
4610 --
4611
4612 PROCEDURE Clean_unwanted_tasks(
4613 p_project_id IN NUMBER
4614 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4615 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4616 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4617 ) IS
4618
4619 l_return_status VARCHAR2(1);
4620 l_msg_count NUMBER;
4621 l_msg_data VARCHAR2(2000);
4622 l_data VARCHAR2(2000);
4623 l_msg_index_out NUMBER;
4624 l_error_message_code VARCHAR2(250);
4625 API_ERROR EXCEPTION;
4626
4627 CURSOR cur_pa_proj_elem_vers
4628 IS
4629 SELECT element_version_id
4630 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
4631 WHERE c.project_id = p_project_id
4632 AND a.structure_type_id = b.structure_type_id
4633 AND b.proj_element_id = c.proj_element_id
4634 AND a.structure_type = 'FINANCIAL';
4635
4636 CURSOR cur_task_vers( c_parent_str_ver_id NUMBER )
4637 IS
4638 SELECT element_version_id, proj_element_id
4639 FROM pa_proj_element_versions
4640 WHERE project_id = p_project_id
4641 AND parent_structure_version_id = c_parent_str_ver_id
4642 AND object_type = 'PA_TASKS';
4643
4644 l_cur_pa_proj_elem_vers_rec cur_pa_proj_elem_vers%ROWTYPE;
4645 BEGIN
4646
4647 --Clear Error Messages.
4648 IF FND_MSG_PUB.count_msg = 0
4649 THEN
4650 FND_MSG_PUB.initialize;
4651 END IF;
4652
4653 SAVEPOINT clean_struc;
4654
4655 OPEN cur_pa_proj_elem_vers;
4656 FETCH cur_pa_proj_elem_vers INTO l_cur_pa_proj_elem_vers_rec;
4657 IF cur_pa_proj_elem_vers%FOUND
4658 THEN
4659 FOR cur_task_vers_rec IN cur_task_vers( l_cur_pa_proj_elem_vers_rec.element_version_id ) LOOP
4660 DELETE FROM pa_object_relationships WHERE relationship_type = 'S' AND
4661 (object_id_to1 = cur_task_vers_rec.element_version_id OR
4662 object_id_from1 = cur_task_vers_rec.element_version_id);
4663
4664 --it is possible that COSTING and WORKPLAN str are same. so delete from schedule versions as well.
4665 DELETE FROM pa_proj_elem_ver_schedule WHERE element_version_id = cur_task_vers_rec.element_version_id and project_id = p_project_id;
4666
4667 DELETE FROM pa_proj_element_versions WHERE element_version_id = cur_task_vers_rec.element_version_id;
4668
4669 DELETE FROM pa_proj_elements WHERE proj_element_id = cur_task_vers_rec.proj_element_id;
4670
4671 END LOOP;
4672 END IF;
4673 CLOSE cur_pa_proj_elem_vers;
4674 x_return_status := FND_API.G_RET_STS_SUCCESS;
4675 EXCEPTION
4676 WHEN API_ERROR THEN
4677 x_return_status := FND_API.G_RET_STS_ERROR;
4678 rollback to clean_struc;
4679 WHEN OTHERS THEN
4680 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4681 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
4682 p_procedure_name => 'Clean_unwanted_tasks',
4683 p_error_text => SUBSTRB(SQLERRM,1,240));
4684 rollback to clean_struc;
4685 raise;
4686
4687 END Clean_unwanted_tasks;
4688
4689 -- API name : get_task_above
4690 -- Type : PL/sql Public procedure
4691 -- Pre-reqs : None
4692 -- Return Value : N/A
4693 -- Prameters
4694
4695 -- History
4696 --
4697 -- 14-AUG-02 MAansari -Created
4698 --
4699 -- Notes: This api is called from Projects form and Self Service when the SPLIT_COST_FROM_WORKPLAN_FLAG
4700 -- is checked
4701
4702 /*PROCEDURE get_task_above(
4703 p_task_id IN NUMBER
4704 ,p_tasks_in IN pa_project_pub.task_in_tbl_type
4705 ,p_tasks_out IN pa_project_pub.task_out_tbl_type
4706 ,x_task_id_above OUT NUMBER
4707 ,x_return_status OUT VARCHAR2
4708 ) IS
4709
4710 v_task_id_above NUMBER;
4711 l_msg_count NUMBER ;
4712 l_msg_data VARCHAR2(2000);
4713 l_return_status VARCHAR2(1);
4714 l_last_index1 Number;
4715 l_first_index1 Number;
4716 l_index_number number;
4717
4718 BEGIN
4719 x_return_status := 'S';
4720
4721 l_first_index1 := p_tasks_in.first;
4722 l_last_index1 := p_tasks_in.last;
4723
4724 for i in l_first_index1..l_last_index1 loop
4725
4726 IF p_task_id = p_tasks_out(i).pa_task_id
4727 THEN
4728 l_index_number := i;
4729 exit;
4730 END IF;
4731 end loop;
4732
4733 IF l_index_number > l_first_index1 AND
4734 p_tasks_in(l_index_number-1).pa_task_id IS NOT NULL AND
4735 p_tasks_in(l_index_number-1).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4736 --existing task becomes the ref_task_id
4737 THEN
4738 v_task_id_above := p_tasks_in(l_index_number-1).pa_task_id; --Get the task above.
4739 ELSIF l_index_number > l_first_index1 AND
4740 p_tasks_out(l_index_number-1).pa_task_id IS NOT NULL AND
4741 p_tasks_out(l_index_number-1).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4742 --new task becomes the ref_task_id
4743 THEN
4744 v_task_id_above := p_tasks_out(l_index_number-1).pa_task_id; --Get the task above created newly
4745 ELSIF ( p_tasks_in(l_index_number).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
4746 p_tasks_in(l_index_number).pa_task_id IS NULL
4747 ) AND
4748 l_index_number = l_first_index1
4749 THEN
4750 v_task_id_above := null; --ref is the structure version. structure version is
4751 --derived in PA_PROJ_TASK_STRUC_PUB.create_task_structure API.
4752 END IF;
4753 x_task_id_above := v_task_id_above;
4754
4755 EXCEPTION WHEN OTHERS THEN
4756 x_return_status := 'E';
4757
4758 END get_task_above;*/
4759
4760 -- API name : convert_pm_parent_task_ref
4761 -- Type : PL/sql Public procedure
4762 -- Pre-reqs : None
4763 -- Return Value : N/A
4764 -- Prameters
4765
4766 -- History
4767 --
4768 -- 14-AUG-02 MAansari -Created
4769 --
4770 -- Notes: This api is not included in PA_PROJECT_PVT to avoid dependency.
4771
4772 PROCEDURE convert_pm_parent_task_ref(
4773 p_pm_parent_task_reference IN VARCHAR2
4774 ,p_project_id IN NUMBER
4775 ,x_parent_task_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4776 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4777 ) IS
4778 CURSOR cur_pa_proj_elems
4779 IS
4780 SELECT proj_element_id
4781 FROM pa_proj_elements
4782 WHERE PM_SOURCE_REFERENCE = p_pm_parent_task_reference
4783 AND project_id = p_project_id
4784 AND OBJECT_TYPE = 'PA_TASKS';
4785 BEGIN
4786 x_return_status := FND_API.G_RET_STS_SUCCESS;
4787
4788 OPEN cur_pa_proj_elems;
4789 FETCH cur_pa_proj_elems INTO x_parent_task_id;
4790 IF cur_pa_proj_elems%NOTFOUND
4791 THEN
4792 x_return_status := FND_API.G_RET_STS_ERROR;
4793 END IF;
4794
4795 CLOSE cur_pa_proj_elems;
4796 EXCEPTION WHEN OTHERS THEN
4797 x_return_status := FND_API.G_RET_STS_ERROR;
4798 END convert_pm_parent_task_ref;
4799
4800 -- API name : publish_structure
4801 -- Type : PL/sql Public procedure
4802 -- Pre-reqs : None
4803 -- Return Value : N/A
4804 -- Prameters
4805
4806 -- History
4807 --
4808 -- 19-AUG-02 MAansari -Created
4809 --
4810 -- Notes: This api is a wrapper called from AMG
4811
4812 PROCEDURE publish_structure(
4813 p_api_version IN NUMBER := 1.0
4814 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
4815 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
4816 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
4817 ,p_validation_level IN VARCHAR2 := 100
4818 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
4819 ,p_debug_mode IN VARCHAR2 := 'N'
4820 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4821 ,p_responsibility_id IN NUMBER := 0
4822 ,p_structure_version_id IN NUMBER
4823 ,p_publish_structure_ver_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4824 ,p_structure_ver_desc IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4825 ,p_effective_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4826 ,p_original_baseline_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4827 ,p_current_baseline_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4828 ,x_published_struct_ver_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4829 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4830 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4831 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4832 ) IS
4833 BEGIN
4834 x_return_status := 'S';
4835 PA_PROJECT_STRUCTURE_PUB1.PUBLISH_STRUCTURE(
4836 p_api_version => p_api_version
4837 ,p_init_msg_list => p_init_msg_list
4838 ,p_commit => p_commit
4839 ,p_validate_only => p_validate_only
4840 ,p_validation_level => p_validation_level
4841 ,p_calling_module => p_calling_module
4842 ,p_debug_mode => p_debug_mode
4843 ,p_max_msg_count => p_max_msg_count
4844 ,p_responsibility_id => p_responsibility_id
4845 ,p_structure_version_id => p_structure_version_id
4846 ,p_publish_structure_ver_name => p_publish_structure_ver_name
4847 ,p_structure_ver_desc => p_structure_ver_desc
4848 ,p_effective_date => p_effective_date
4849 ,p_original_baseline_flag => p_original_baseline_flag
4850 ,p_current_baseline_flag => p_current_baseline_flag
4851 ,x_published_struct_ver_id => x_published_struct_ver_id
4852 ,x_return_status => x_return_status
4853 ,x_msg_count => x_msg_count
4854 ,x_msg_data => x_msg_data
4855 );
4856
4857 END publish_structure;
4858
4859 -- API name : delete_structure_version
4860 -- Type : PL/sql Public procedure
4861 -- Pre-reqs : None
4862 -- Return Value : N/A
4863 -- Prameters
4864
4865 -- History
4866 --
4867 -- 19-AUG-02 MAansari -Created
4868 --
4869 -- Notes: This api is a wrapper called from AMG
4870
4871 PROCEDURE delete_structure_version(
4872 p_api_version IN NUMBER := 1.0
4873 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
4874 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
4875 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
4876 ,p_validation_level IN VARCHAR2 := 100
4877 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
4878 ,p_debug_mode IN VARCHAR2 := 'N'
4879 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4880 ,p_structure_version_id IN NUMBER
4881 ,p_record_version_number IN NUMBER
4882 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4883 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4884 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4885 ) IS
4886 BEGIN
4887 x_return_status := 'S';
4888 PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
4889 p_api_version => p_api_version
4890 ,p_init_msg_list => p_init_msg_list
4891 ,p_commit => p_commit
4892 ,p_validate_only => p_validate_only
4893 ,p_validation_level => p_validation_level
4894 ,p_calling_module => p_calling_module
4895 ,p_debug_mode => p_debug_mode
4896 ,p_max_msg_count => p_max_msg_count
4897 ,p_structure_version_id => p_structure_version_id
4898 ,p_record_version_number => p_record_version_number
4899 ,x_return_status => x_return_status
4900 ,x_msg_count => x_msg_count
4901 ,x_msg_data => x_msg_data
4902 );
4903
4904 END delete_structure_version;
4905
4906 -- API name : create_structure
4907 -- Type : PL/sql Public procedure
4908 -- Pre-reqs : None
4909 -- Return Value : N/A
4910 -- Prameters
4911
4912 -- History
4913 --
4914 -- 19-AUG-02 HUBERT -Created
4915 --
4916 -- Notes: This api is a wrapper called from AMG
4917
4918 --This API will only be called with the structure type = 'WORKPLAN'
4919 procedure create_structure(
4920 p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4921 ,p_structure_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4922 ,p_structure_version_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4923 ,p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4924 ,x_structure_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4925 ,x_structure_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4926 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4927 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4928 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4929 )
4930 IS
4931 l_return_status VARCHAR2(1);
4932 l_msg_count NUMBER;
4933 l_msg_data VARCHAR2(2000);
4934 l_error_message_code VARCHAR2(30);
4935
4936 l_project_name PA_PROJECTS_ALL.name%TYPE;
4937 l_project_number PA_PROJECTS_ALL.segment1%TYPE;
4938
4939 l_suffix VARCHAR2(250);
4940 l_name VARCHAR2(240);
4941 l_number VARCHAR2(25);
4942 l_struc_ver_number NUMBER;
4943 l_append VARCHAR2(250);
4944 l_status_code VARCHAR2(150);
4945 x_row_id VARCHAR2(18);
4946 x_pev_structure_id NUMBER;
4947 x_pev_schedule_id NUMBER;
4948 -- added for Bug Fix: 4537865
4949 l_new_structure_version_id NUMBER;
4950 -- added for Bug Fix: 4537865
4951
4952 CURSOR c1 IS
4953 select segment1, name from pa_projects_all
4954 where project_id = p_project_id;
4955
4956 CURSOR cur_elem_ver_seq IS
4957 SELECT pa_proj_element_versions_s.nextval
4958 FROM sys.dual;
4959
4960 cursor get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
4961 select nvl(max(version_number),0)+1
4962 from pa_proj_elem_ver_structure
4963 where project_id = c_project_id
4964 and proj_element_id = c_proj_element_id
4965 and status_code <> 'STRUCTURE_PUBLISHED';
4966
4967 l_current_working_ver_flag VARCHAR2(1); /* FPM bug 3301192 */
4968 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. */
4969 BEGIN
4970
4971 IF FND_MSG_PUB.count_msg = 0
4972 THEN
4973 FND_MSG_PUB.initialize;
4974 END IF;
4975 --check if the project have any structures
4976 PA_PROJECT_STRUCTURE_UTILS.Check_Structure_Type_Exists(
4977 p_project_id,
4978 p_structure_type,
4979 l_return_status,
4980 l_error_message_code);
4981 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4982 --PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4983 --,p_msg_name => l_error_message_code);
4984 --raise FND_API.G_EXC_ERROR;
4985
4986 -- Bug 3075609. When the structure type exists we need to ignore the error.
4987 -- This check has been used just to return with out doing any further
4988 -- processing.
4989 IF l_error_message_code <> 'PA_PS_STRUC_TYPE_EXISTS' THEN
4990 x_return_status := FND_API.G_RET_STS_ERROR; -- Bug3044915
4991 x_msg_data := l_error_message_code ; -- Bug3044915
4992 x_msg_count := FND_MSG_PUB.count_msg; -- Bug3044915
4993 ELSE
4994 x_return_status := FND_API.G_RET_STS_SUCCESS;
4995 x_msg_data := NULL;
4996 x_msg_count := NULL;
4997 END IF;
4998 Return;
4999 END IF;
5000 --If no error, create structure
5001 OPEN c1;
5002 FETCH c1 into l_number, l_name;
5003 CLOSE c1;
5004
5005 select meaning
5006 into l_suffix
5007 from pa_lookups
5008 where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
5009 and lookup_code = 'WORKPLAN';
5010
5011 l_name := substr(l_name||l_append||l_suffix,1,240);
5012 --Create structure
5013 PA_PROJECT_STRUCTURE_PVT1.Create_Structure(
5014 p_project_id => p_project_id
5015 ,p_structure_number => l_number
5016 ,p_structure_name => l_name
5017 ,p_structure_description => p_description
5018 ,p_calling_flag => p_structure_type
5019 ,x_structure_id => x_structure_id
5020 ,x_return_status => l_return_status
5021 ,x_msg_count => l_msg_count
5022 ,x_msg_data => l_msg_data
5023 );
5024 IF x_structure_id IS NULL OR l_return_status <> 'S' THEN
5025 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
5026 ,p_msg_name => 'PA_PS_NO_STRUC_CREATED');
5027 raise FND_API.G_EXC_ERROR;
5028 END IF;
5029 --Create structure version
5030 OPEN cur_elem_ver_seq;
5031 FETCH cur_elem_ver_seq INTO x_structure_version_id;
5032 CLOSE cur_elem_ver_seq;
5033
5034 -- Fix for 4657794 :- This is fix for regression introduced by 4537865
5035 -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_new_structure_version_id
5036 -- to x_structure_version_id
5037
5038 l_new_structure_version_id := x_structure_version_id ;
5039
5040 -- End 4657794
5041
5042 PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row(
5043 X_ROW_ID => X_row_id
5044 --,X_ELEMENT_VERSION_ID => x_structure_version_id * commented got Bug Fix: 4537865
5045 ,X_ELEMENT_VERSION_ID => l_new_structure_version_id --added for Bug Fix: 4537865
5046 ,X_PROJ_ELEMENT_ID => x_structure_id
5047 ,X_OBJECT_TYPE => 'PA_STRUCTURES'
5048 ,X_PROJECT_ID => p_project_id
5049 ,X_PARENT_STRUCTURE_VERSION_ID=> x_structure_version_id
5050 ,X_DISPLAY_SEQUENCE => null
5051 ,X_WBS_LEVEL => null
5052 ,X_WBS_NUMBER => '0'
5053 ,X_ATTRIBUTE_CATEGORY => null
5054 ,X_ATTRIBUTE1 => null
5055 ,X_ATTRIBUTE2 => null
5056 ,X_ATTRIBUTE3 => null
5057 ,X_ATTRIBUTE4 => null
5058 ,X_ATTRIBUTE5 => null
5059 ,X_ATTRIBUTE6 => null
5060 ,X_ATTRIBUTE7 => null
5061 ,X_ATTRIBUTE8 => null
5062 ,X_ATTRIBUTE9 => null
5063 ,X_ATTRIBUTE10 => null
5064 ,X_ATTRIBUTE11 => null
5065 ,X_ATTRIBUTE12 => null
5066 ,X_ATTRIBUTE13 => null
5067 ,X_ATTRIBUTE14 => null
5068 ,X_ATTRIBUTE15 => null
5069 ,X_TASK_UNPUB_VER_STATUS_CODE => null
5070 ,X_SOURCE_OBJECT_ID => p_project_id
5071 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
5072 );
5073 -- added for Bug Fix: 4537865
5074 x_structure_version_id := l_new_structure_version_id;
5075 -- added for Bug Fix: 4537865
5076
5077 IF x_structure_version_id IS NULL THEN
5078 PA_UTILS.ADD_MESSAGE(
5079 p_app_short_name => 'PA'
5080 ,p_msg_name => 'PA_PS_NO_STRUC_VER_CREATED');
5081 raise FND_API.G_EXC_ERROR;
5082 END IF;
5083 --Get structure version number
5084 OPEN get_working_ver_num(p_project_id, x_structure_id);
5085 FETCH get_working_ver_num INTO l_struc_ver_number;
5086 CLOSE get_working_ver_num;
5087
5088 --FPM bug 3301192
5089 IF NVL( PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED(p_project_id), 'N' ) = 'Y'
5090 THEN
5091 l_status_code := 'STRUCTURE_WORKING';
5092 l_current_working_ver_flag := 'Y';
5093 l_latest_eff_published_flag := 'N';
5094 ELSE
5095 l_status_code := 'STRUCTURE_PUBLISHED';
5096 l_current_working_ver_flag := 'N';
5097 l_latest_eff_published_flag := 'Y';
5098 END IF;
5099 --end FPM bug 3301192
5100
5101 PA_PROJ_ELEM_VER_STRUCTURE_PKG.insert_row(
5102 X_ROWID => x_row_id
5103 , X_PEV_STRUCTURE_ID => x_pev_structure_id
5104 , X_ELEMENT_VERSION_ID => x_structure_version_id
5105 , X_VERSION_NUMBER => l_struc_ver_number
5106 , X_NAME => l_name
5107 , X_PROJECT_ID => p_project_id
5108 , X_PROJ_ELEMENT_ID => x_structure_id
5109 , X_DESCRIPTION => p_description
5110 , X_EFFECTIVE_DATE => null
5111 , X_PUBLISHED_DATE => null
5112 , X_PUBLISHED_BY => null
5113 , X_CURRENT_BASELINE_DATE => null
5114 , X_CURRENT_BASELINE_FLAG => 'N'
5115 , X_CURRENT_BASELINE_BY => null
5116 , X_ORIGINAL_BASELINE_DATE => null
5117 , X_ORIGINAL_BASELINE_FLAG => 'N'
5118 , X_ORIGINAL_BASELINE_BY => null
5119 , X_LOCK_STATUS_CODE => NULL
5120 , X_LOCKED_BY => NULL
5121 , X_LOCKED_DATE => NULL
5122 , X_STATUS_CODE => l_status_code
5123 , X_WF_STATUS_CODE => NULL
5124 , X_LATEST_EFF_PUBLISHED_FLAG => l_latest_eff_published_flag
5125 , X_RECORD_VERSION_NUMBER => 1
5126 , X_CHANGE_REASON_CODE => NULL
5127 , X_CURRENT_WORKING_FLAG => l_current_working_ver_flag /* bug 3301192 */
5128 , X_SOURCE_OBJECT_ID => p_project_id
5129 , X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
5130 );
5131
5132 PA_TASK_PUB1.Create_Schedule_Version(
5133 p_element_version_id => x_structure_version_id
5134 ,p_scheduled_start_date => SYSDATE
5135 ,p_scheduled_end_date => SYSDATE
5136 ,x_pev_schedule_id => x_pev_schedule_id
5137 ,x_return_status => l_return_status
5138 ,x_msg_count => l_msg_count
5139 ,x_msg_data => l_msg_data
5140 );
5141
5142 IF l_return_status <> 'S' THEN
5143 PA_UTILS.ADD_MESSAGE(
5144 p_app_short_name => 'PA'
5145 ,p_msg_name => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
5146 raise FND_API.G_EXC_ERROR;
5147 END IF;
5148 x_return_status := FND_API.G_RET_STS_SUCCESS;
5149 EXCEPTION
5150 WHEN FND_API.G_EXC_ERROR THEN
5151 x_msg_count := FND_MSG_PUB.count_msg;
5152 x_return_status := FND_API.G_RET_STS_ERROR;
5153 WHEN OTHERS THEN
5154 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5155 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
5156 p_procedure_name => 'CREATE_STRUCTURE',
5157 p_error_text => SUBSTRB(SQLERRM,1,240));
5158 raise;
5159 END create_structure;
5160
5161 -- API name : create_structure
5162 -- Type : PL/sql Public procedure
5163 -- Pre-reqs : None
5164 -- Return Value : N/A
5165 -- Prameters
5166
5167 -- History
5168 --
5169 -- 19-AUG-02 HUBERT -Created
5170 --
5171 -- Notes: This api is a wrapper called from AMG
5172
5173 procedure create_update_struct_ver(
5174 p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5175 ,p_structure_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5176 ,p_structure_version_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5177 ,p_structure_version_id IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5178 ,p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5179 ,x_structure_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5180 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5181 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5182 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5183 )
5184 IS
5185 cursor c1 is
5186 select pev_structure_id, name, record_version_number
5187 from pa_proj_elem_ver_structure
5188 where project_id = p_project_id
5189 and element_version_id = p_structure_version_id;
5190
5191 l_name VARCHAR2(240);
5192 l_pev_structure_id NUMBER;
5193 l_record_version_number NUMBER;
5194 l_proj_element_id NUMBER;
5195 l_enable_wp_version_flag varchar2(1);
5196 l_dummy varchar2(1);
5197 l_struc_ver_number NUMBER;
5198 l_return_status VARCHAR2(1);
5199 l_msg_count NUMBER;
5200 l_msg_data VARCHAR2(2000);
5201 -- added for Bug Fix: 4537865
5202 l_new_structure_version_id NUMBER;
5203 -- added for Bug Fix: 4537865
5204 x_row_id VARCHAR2(18);
5205 x_pev_structure_id NUMBER;
5206 x_pev_schedule_id NUMBER;
5207
5208 cursor c2 is
5209 select b.proj_element_id
5210 from pa_proj_elements a, pa_proj_structure_types b,
5211 pa_structure_types c
5212 where a.project_id = p_project_id
5213 and a.object_type = 'PA_STRUCTURES'
5214 and a.proj_element_id = b.proj_element_id
5215 and b.structure_type_id = c.structure_type_id
5216 and c.structure_type = p_structure_type;
5217
5218 cursor c3 is
5219 select wp_enable_version_flag
5220 from pa_proj_workplan_attr
5221 where project_id = p_project_id;
5222
5223 cursor c4(c_proj_elem_id NUMBER) is
5224 select '1' from pa_proj_elem_ver_structure
5225 where project_id = p_project_id
5226 and proj_element_id = c_proj_elem_id
5227 and status_code <> 'STRUCTURE_PUBLISHED';
5228
5229 CURSOR cur_elem_ver_seq IS
5230 SELECT pa_proj_element_versions_s.nextval
5231 FROM sys.dual;
5232
5233 cursor get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
5234 select nvl(max(version_number),0)+1
5235 from pa_proj_elem_ver_structure
5236 where project_id = c_project_id
5237 and proj_element_id = c_proj_element_id
5238 and status_code <> 'STRUCTURE_PUBLISHED';
5239
5240 l_current_working_ver_flag VARCHAR2(1); /* FPM bug 3301192 */
5241 BEGIN
5242
5243 IF FND_MSG_PUB.count_msg = 0
5244 THEN
5245 FND_MSG_PUB.initialize;
5246 END IF;
5247
5248 IF (p_structure_version_name IS NOT NULL) AND
5249 (p_structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
5250 ((p_structure_version_id IS NULL) OR (p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) THEN
5251 --get structure for input type
5252 OPEN c2;
5253 FETCH c2 into l_proj_element_id;
5254 IF c2%NOTFOUND THEN
5255 PA_UTILS.ADD_MESSAGE(
5256 p_app_short_name => 'PA'
5257 ,p_msg_name => 'PA_PS_NO_STRUC_VER_CREATED');
5258 CLOSE c2;
5259 RAISE FND_API.G_EXC_ERROR;
5260 END IF;
5261 CLOSE c2;
5262
5263 IF l_proj_element_id IS NOT NULL
5264 THEN
5265 IF PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Name_Unique(
5266 p_structure_version_name => p_structure_version_name
5267 ,p_pev_structure_id => null
5268 ,p_project_id => p_project_id
5269 ,p_structure_id => l_proj_element_id
5270 ) = 'N'
5271 THEN
5272 PA_UTILS.ADD_MESSAGE(
5273 p_app_short_name => 'PA'
5274 ,p_msg_name => 'PA_PS_STRUC_VER_NAM_UNIQUE');
5275 RAISE FND_API.G_EXC_ERROR;
5276 END IF;
5277 END IF;
5278
5279 IF (p_structure_type = 'FINANCIAL') THEN
5280 --If this is financial, check if there is working version
5281 OPEN c3;
5282 FETCH c3 into l_enable_wp_version_flag;
5283 CLOSE c3;
5284 IF (l_enable_wp_version_flag = 'Y') THEN
5285 --if enable wp version flag is 'Y', and if a working (unpublished)
5286 --version exist.
5287 OPEN c4 (l_proj_element_id);
5288 FETCH c4 into l_dummy;
5289 IF (c4%FOUND) THEN
5290 --there is a working version; cannot create another one.
5291 CLOSE c4;
5292 PA_UTILS.ADD_MESSAGE(
5293 p_app_short_name => 'PA'
5294 --,p_msg_name => 'PA_PS_NO_STRUC_VER_CREATED');
5295 ,p_msg_name => 'PA_PS_WORKING_STRUC_VER_EXIST'); --bug # 3713107
5296 RAISE FND_API.G_EXC_ERROR;
5297 END IF;
5298 CLOSE c4;
5299 --create a new financial structure version
5300
5301 --Create structure version
5302 OPEN cur_elem_ver_seq;
5303 FETCH cur_elem_ver_seq INTO x_structure_version_id;
5304 CLOSE cur_elem_ver_seq;
5305
5306 -- Fix for 4657794 :- This is fix for regression introduced by 4537865
5307 -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_new_structure_version_id
5308 -- to x_structure_version_id
5309
5310 l_new_structure_version_id := x_structure_version_id ;
5311
5312 -- End 4657794
5313
5314 PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row(
5315 X_ROW_ID => X_row_id
5316 --,X_ELEMENT_VERSION_ID => x_structure_version_id * Commented for Bug Fix: 4537865
5317 ,X_ELEMENT_VERSION_ID => l_new_structure_version_id -- added for Bug fix: 4537865
5318 ,X_PROJ_ELEMENT_ID => l_proj_element_id
5319 ,X_OBJECT_TYPE => 'PA_STRUCTURES'
5320 ,X_PROJECT_ID => p_project_id
5321 ,X_PARENT_STRUCTURE_VERSION_ID=> x_structure_version_id
5322 ,X_DISPLAY_SEQUENCE => null
5323 ,X_WBS_LEVEL => null
5324 ,X_WBS_NUMBER => '0'
5325 ,X_ATTRIBUTE_CATEGORY => null
5326 ,X_ATTRIBUTE1 => null
5327 ,X_ATTRIBUTE2 => null
5328 ,X_ATTRIBUTE3 => null
5329 ,X_ATTRIBUTE4 => null
5330 ,X_ATTRIBUTE5 => null
5331 ,X_ATTRIBUTE6 => null
5332 ,X_ATTRIBUTE7 => null
5333 ,X_ATTRIBUTE8 => null
5334 ,X_ATTRIBUTE9 => null
5335 ,X_ATTRIBUTE10 => null
5336 ,X_ATTRIBUTE11 => null
5337 ,X_ATTRIBUTE12 => null
5338 ,X_ATTRIBUTE13 => null
5339 ,X_ATTRIBUTE14 => null
5340 ,X_ATTRIBUTE15 => null
5341 ,X_TASK_UNPUB_VER_STATUS_CODE => null
5342 ,X_SOURCE_OBJECT_ID => p_project_id
5343 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
5344 );
5345 -- added for Bug fix: 4537865
5346 x_structure_version_id := l_new_structure_version_id;
5347 -- added for Bug fix: 4537865
5348
5349 IF x_structure_version_id IS NULL THEN
5350 PA_UTILS.ADD_MESSAGE(
5351 p_app_short_name => 'PA'
5352 ,p_msg_name => 'PA_PS_NO_STRUC_VER_CREATED');
5353 raise FND_API.G_EXC_ERROR;
5354 END IF;
5355
5356 --Get structure version number
5357 OPEN get_working_ver_num(p_project_id, l_proj_element_id);
5358 FETCH get_working_ver_num INTO l_struc_ver_number;
5359 CLOSE get_working_ver_num;
5360
5361 PA_PROJ_ELEM_VER_STRUCTURE_PKG.insert_row(
5362 X_ROWID => x_row_id
5363 , X_PEV_STRUCTURE_ID => x_pev_structure_id
5364 , X_ELEMENT_VERSION_ID => x_structure_version_id
5365 , X_VERSION_NUMBER => l_struc_ver_number
5366 , X_NAME => p_structure_version_name
5367 , X_PROJECT_ID => p_project_id
5368 , X_PROJ_ELEMENT_ID => l_proj_element_id
5369 , X_DESCRIPTION => p_description
5370 , X_EFFECTIVE_DATE => null
5371 , X_PUBLISHED_DATE => null
5372 , X_PUBLISHED_BY => null
5373 , X_CURRENT_BASELINE_DATE => null
5374 , X_CURRENT_BASELINE_FLAG => 'N'
5375 , X_CURRENT_BASELINE_BY => null
5376 , X_ORIGINAL_BASELINE_DATE => null
5377 , X_ORIGINAL_BASELINE_FLAG => 'N'
5378 , X_ORIGINAL_BASELINE_BY => null
5379 , X_LOCK_STATUS_CODE => NULL
5380 , X_LOCKED_BY => NULL
5381 , X_LOCKED_DATE => NULL
5382 , X_STATUS_CODE => 'STRUCTURE_WORKING'
5383 , X_WF_STATUS_CODE => NULL
5384 , X_LATEST_EFF_PUBLISHED_FLAG => 'N'
5385 , X_RECORD_VERSION_NUMBER => 1
5386 , X_CHANGE_REASON_CODE => NULL
5387 , X_CURRENT_WORKING_FLAG => 'Y' /* Since this is a shared + versioned senario and only one struc version then it should be CWV. bug 3301192 */
5388 , X_SOURCE_OBJECT_ID => p_project_id
5389 , X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
5390 );
5391
5392 PA_TASK_PUB1.Create_Schedule_Version(
5393 p_element_version_id => x_structure_version_id
5394 ,p_scheduled_start_date => SYSDATE
5395 ,p_scheduled_end_date => SYSDATE
5396 ,x_pev_schedule_id => x_pev_schedule_id
5397 ,x_return_status => l_return_status
5398 ,x_msg_count => l_msg_count
5399 ,x_msg_data => l_msg_data
5400 );
5401
5402 IF l_return_status <> 'S' THEN
5403 PA_UTILS.ADD_MESSAGE(
5404 p_app_short_name => 'PA'
5405 ,p_msg_name => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
5406 raise FND_API.G_EXC_ERROR;
5407 END IF;
5408
5409 ELSE
5410 --a version exists. Cannot create.
5411 PA_UTILS.ADD_MESSAGE(
5412 p_app_short_name => 'PA'
5413 ,p_msg_name => 'PA_PS_NO_STRUC_VER_CREATED');
5414 RAISE FND_API.G_EXC_ERROR;
5415 END IF;
5416 ELSE
5417 /*
5418 --check if this is workplan type structure only
5419 IF (PA_PROJECT_STRUCTURE_UTILS.Get_struc_Type_for_Structure(
5420 l_proj_element_id, 'FINANCIAL') = 'Y') THEN
5421 --cannot create because this structure contains financial information also
5422 PA_UTILS.ADD_MESSAGE(
5423 p_app_short_name => 'PA'
5424 ,p_msg_name => 'PA_PS_NO_STRUC_VER_CREATED');
5425 RAISE FND_API.G_EXC_ERROR;
5426 END IF;
5427 */
5428 IF NVL( IS_WP_VERSIONING_ENABLED( p_project_id ), 'N' ) = 'N'
5429 THEN
5430 --cannot create because versioning is not enabled.
5431 PA_UTILS.ADD_MESSAGE(
5432 p_app_short_name => 'PA'
5433 ,p_msg_name => 'PA_PS_NO_STRUC_VER_CREATED');
5434 RAISE FND_API.G_EXC_ERROR;
5435 END IF;
5436 --create a new workplan structure version
5437 OPEN cur_elem_ver_seq;
5438 FETCH cur_elem_ver_seq INTO x_structure_version_id;
5439 CLOSE cur_elem_ver_seq;
5440
5441 -- Fix for 4657794 :- This is fix for regression introduced by 4537865
5442 -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_new_structure_version_id
5443 -- to x_structure_version_id
5444
5445 l_new_structure_version_id := x_structure_version_id ;
5446
5447 -- End 4657794
5448
5449 PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row(
5450 X_ROW_ID => X_row_id
5451 --,X_ELEMENT_VERSION_ID => x_structure_version_id * commented for Bug fix: 4537865
5452 , X_ELEMENT_VERSION_ID => l_new_structure_version_id -- added for Bug fix: 4537865
5453 ,X_PROJ_ELEMENT_ID => l_proj_element_id
5454 ,X_OBJECT_TYPE => 'PA_STRUCTURES'
5455 ,X_PROJECT_ID => p_project_id
5456 ,X_PARENT_STRUCTURE_VERSION_ID=> x_structure_version_id
5457 ,X_DISPLAY_SEQUENCE => null
5458 ,X_WBS_LEVEL => null
5459 ,X_WBS_NUMBER => '0'
5460 ,X_ATTRIBUTE_CATEGORY => null
5461 ,X_ATTRIBUTE1 => null
5462 ,X_ATTRIBUTE2 => null
5463 ,X_ATTRIBUTE3 => null
5464 ,X_ATTRIBUTE4 => null
5465 ,X_ATTRIBUTE5 => null
5466 ,X_ATTRIBUTE6 => null
5467 ,X_ATTRIBUTE7 => null
5468 ,X_ATTRIBUTE8 => null
5469 ,X_ATTRIBUTE9 => null
5470 ,X_ATTRIBUTE10 => null
5471 ,X_ATTRIBUTE11 => null
5472 ,X_ATTRIBUTE12 => null
5473 ,X_ATTRIBUTE13 => null
5474 ,X_ATTRIBUTE14 => null
5475 ,X_ATTRIBUTE15 => null
5476 ,X_TASK_UNPUB_VER_STATUS_CODE => null
5477 ,X_SOURCE_OBJECT_ID => p_project_id
5478 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
5479 );
5480 -- added for Bug fix: 4537865
5481 x_structure_version_id := l_new_structure_version_id;
5482 -- added for Bug fix: 4537865
5483
5484 IF x_structure_version_id IS NULL THEN
5485 PA_UTILS.ADD_MESSAGE(
5486 p_app_short_name => 'PA'
5487 ,p_msg_name => 'PA_PS_NO_STRUC_VER_CREATED');
5488 raise FND_API.G_EXC_ERROR;
5489 END IF;
5490
5491 --Get structure version number
5492 OPEN get_working_ver_num(p_project_id, l_proj_element_id);
5493 FETCH get_working_ver_num INTO l_struc_ver_number;
5494 --FPM bug 3301192
5495 --if there is no working version( un-publihsed) then this is the CWV
5496 IF get_working_ver_num%NOTFOUND
5497 THEN
5498 l_current_working_ver_flag := 'Y';
5499 ELSE
5500 l_current_working_ver_flag := 'N';
5501 END IF;
5502 --end FPM bug 3301192
5503 CLOSE get_working_ver_num;
5504
5505 PA_PROJ_ELEM_VER_STRUCTURE_PKG.insert_row(
5506 X_ROWID => x_row_id
5507 , X_PEV_STRUCTURE_ID => x_pev_structure_id
5508 , X_ELEMENT_VERSION_ID => x_structure_version_id
5509 , X_VERSION_NUMBER => l_struc_ver_number
5510 , X_NAME => p_structure_version_name
5511 , X_PROJECT_ID => p_project_id
5512 , X_PROJ_ELEMENT_ID => l_proj_element_id
5513 , X_DESCRIPTION => p_description
5514 , X_EFFECTIVE_DATE => null
5515 , X_PUBLISHED_DATE => null
5516 , X_PUBLISHED_BY => null
5517 , X_CURRENT_BASELINE_DATE => null
5518 , X_CURRENT_BASELINE_FLAG => 'N'
5519 , X_CURRENT_BASELINE_BY => null
5520 , X_ORIGINAL_BASELINE_DATE => null
5521 , X_ORIGINAL_BASELINE_FLAG => 'N'
5522 , X_ORIGINAL_BASELINE_BY => null
5523 , X_LOCK_STATUS_CODE => NULL
5524 , X_LOCKED_BY => NULL
5525 , X_LOCKED_DATE => NULL
5526 , X_STATUS_CODE => 'STRUCTURE_WORKING'
5527 , X_WF_STATUS_CODE => NULL
5528 , X_LATEST_EFF_PUBLISHED_FLAG => 'N'
5529 , X_RECORD_VERSION_NUMBER => 1
5530 , X_CHANGE_REASON_CODE => NULL
5531 , X_CURRENT_WORKING_FLAG => l_current_working_ver_flag /* bug 3301192 */
5532 , X_SOURCE_OBJECT_ID => p_project_id
5533 , X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
5534 );
5535
5536 PA_TASK_PUB1.Create_Schedule_Version(
5537 p_element_version_id => x_structure_version_id
5538 ,p_scheduled_start_date => SYSDATE
5539 ,p_scheduled_end_date => SYSDATE
5540 ,x_pev_schedule_id => x_pev_schedule_id
5541 ,x_return_status => l_return_status
5542 ,x_msg_count => l_msg_count
5543 ,x_msg_data => l_msg_data
5544 );
5545
5546 IF l_return_status <> 'S' THEN
5547 PA_UTILS.ADD_MESSAGE(
5548 p_app_short_name => 'PA'
5549 ,p_msg_name => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
5550 raise FND_API.G_EXC_ERROR;
5551 END IF;
5552 -- Bug 4574032 Begin
5553 BEGIN
5554 PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions
5555 (
5556 p_context => 'WORKPLAN'
5557 ,p_project_id => p_project_id
5558 ,p_struct_elem_version_id => x_structure_version_id
5559 ,x_return_status => l_return_status
5560 ,x_msg_count => l_msg_count
5561 ,x_Msg_data => l_msg_data
5562 );
5563 EXCEPTION
5564 WHEN OTHERS THEN
5565 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
5566 p_procedure_name => 'CREATE_UPDATE_STRUCT_VER',
5567 p_error_text => SUBSTRB('call of pa_fp_planning_transaction_pub.add_planning_transactions failed. sqlerrm= :'||SQLERRM,1,240));
5568 raise fnd_api.g_exc_error;
5569 END;
5570 IF l_return_status <> 'S' THEN
5571 raise FND_API.G_EXC_ERROR;
5572 END IF;
5573 -- Bug 4574032 End
5574 END IF;
5575 ELSE
5576 --update existing structure
5577 IF (p_structure_version_id IS NOT NULL) AND (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
5578
5579 --check if name is passed in
5580 open c1;
5581 fetch c1 into l_pev_structure_id, l_name, l_record_version_number;
5582 close c1;
5583 If (p_structure_version_name IS NOT NULL) AND
5584 (p_structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
5585 l_name := p_structure_version_name;
5586 END IF;
5587
5588 --call update_structure_version_attr API
5589 PA_PROJECT_STRUCTURE_PVT1.update_structure_version_attr(
5590 p_pev_structure_id => l_pev_structure_id
5591 ,p_structure_version_name => l_name
5592 ,p_structure_version_desc => p_description
5593 ,p_record_version_number => l_record_version_number
5594 ,x_return_status => x_return_status
5595 ,x_msg_count => x_msg_count
5596 ,x_msg_data => x_msg_data
5597 );
5598 END IF;
5599 END IF;
5600 EXCEPTION
5601 WHEN FND_API.G_EXC_ERROR THEN
5602 x_msg_count := FND_MSG_PUB.count_msg;
5603 x_return_status := FND_API.G_RET_STS_ERROR;
5604 WHEN OTHERS THEN
5605 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5606 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
5607 p_procedure_name => 'CREATE_UPDATE_STRUCT_VER',
5608 p_error_text => SUBSTRB(SQLERRM,1,240));
5609 END create_update_struct_ver;
5610
5611 -- API name : IS_WP_SEPARATE_FROM_FN
5612 -- Type : PL/sql Public Function
5613 -- Pre-reqs : None
5614 -- Return Value : 'Y', 'N'
5615 -- Prameters
5616 -- p_project_id IN NUMBER
5617 -- History
5618 --
5619 -- 21-AUG-02 MAansari -Created
5620 --
5621 -- Notes: This api is returns 'TRUE' if WORKPLAN is separate from
5622 -- FINANCIAL structure
5623
5624 FUNCTION IS_WP_SEPARATE_FROM_FN
5625 (
5626 p_project_id IN NUMBER
5627 ) RETURN VARCHAR2 IS
5628 l_return_value VARCHAR2(1) := 'N';
5629
5630 BEGIN
5631 --Call Huberts API to check whether a workplan structure is separate from financial
5632 IF PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED( p_project_id ) = 'N'
5633 THEN
5634 l_return_value := 'Y';
5635 END IF;
5636 RETURN ( NVL( l_return_value, 'N' ) );
5637 END IS_WP_SEPARATE_FROM_FN;
5638
5639 -- API name : IS_WP_VERSIONING_ENABLED
5640 -- Type : PL/sql Public Function
5641 -- Pre-reqs : None
5642 -- Return Value : 'Y', 'N'
5643 -- Prameters
5644 -- p_project_id IN NUMBER
5645 -- History
5646 --
5647 -- 22-AUG-02 MAansari -Created
5648 --
5649 -- Notes: This api is returns 'Y' if WORKPLAN is separate from
5650 -- FINANCIAL structure
5651
5652 FUNCTION IS_WP_VERSIONING_ENABLED
5653 (
5654 p_project_id IN NUMBER
5655 ) RETURN VARCHAR2 IS
5656 l_return_value VARCHAR2(1) := 'Y';
5657
5658 BEGIN
5659 --Call Andrews API to check whether a workplan versioning is enabled or not.
5660 l_return_value := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED( p_project_id );
5661 RETURN ( NVL( l_return_value, 'N' ) );
5662
5663 END IS_WP_VERSIONING_ENABLED;
5664
5665 -- API name : get_proj_dates_delta
5666 -- Type : PL/sql Public Function
5667 -- Pre-reqs : None
5668 -- Return Value : NUMBER
5669 -- Prameters
5670 -- p_project_id IN NUMBER
5671 -- History
5672 --
5673 -- 22-AUG-02 MAansari -Created
5674 --
5675 -- Notes:
5676
5677 -- get original project start and completion dates
5678 -- determine the shift days (delta).
5679 -- delta = new project start date - nvl(old project start date,
5680 -- earlist task start date)
5681
5682 -- old project new project
5683 -- case start date start date new start date new end date
5684 -- ---- ----------- ----------- ----------------- -----------------
5685 -- A not null not null old start date old end date
5686 -- + delta + delta
5687 -- B-1 null not null old start date old end date
5688 -- (old task has start date) + delta + delta
5689 -- B-2 null not null new proj start new proj completion
5690 -- (old task has no start date) date date
5691 -- C not null null old start date old end date
5692 -- D null null old start date old end date
5693
5694 FUNCTION get_proj_dates_delta(
5695 x_orig_project_id IN NUMBER
5696 ,x_start_date IN DATE )
5697 RETURN NUMBER IS
5698
5699 cursor c1 is
5700 select start_date
5701 from pa_projects
5702 where project_id = x_orig_project_id;
5703
5704 -- use min(start_date) as pseudo original project start
5705 cursor c2 is
5706 select min(start_date) min_start
5707 from pa_tasks
5708 where project_id = x_orig_project_id;
5709
5710 c2_rec c2%rowtype;
5711 x_delta NUMBER;
5712 x_orig_start_date DATE;
5713 begin
5714
5715 open c1;
5716 fetch c1 into x_orig_start_date;
5717 close c1;
5718
5719 if (x_start_date is null) then
5720 -- case C or D
5721 x_delta := 0;
5722 elsif (x_orig_start_date is not null) then
5723 -- case A
5724 x_delta := x_start_date - x_orig_start_date;
5725 else
5726 -- case B
5727 open c2;
5728 fetch c2 into c2_rec;
5729 if c2%found then
5730 -- case B-1: x_delta is difference between
5731 -- new project start date and the
5732 -- start date of the earlist task
5733 -- of old project
5734 -- case B-2: x_delta is NULL
5735 x_delta := x_start_date - c2_rec.min_start;
5736 end if;
5737 close c2;
5738
5739 end if;
5740 RETURN x_delta;
5741 end get_proj_dates_delta;
5742
5743 -- API name : create_task_structure2
5744 -- Type : PL/sql Public procedure
5745 -- Pre-reqs : None
5746 -- Return Value : N/A
5747 -- Prameters
5748 -- p_project_id IN NUMBER
5749 -- ,p_task_id IN NUMBER
5750 -- ,p_parent_task_id IN NUMBER
5751 -- ,p_task_number IN VARCHAR2
5752 -- ,p_task_name IN VARCHAR2
5753 -- ,p_task_description IN VARCHAR2
5754 -- ,p_carrying_out_organization_id NUMBER
5755 -- x_msg_count OUT NUMBER
5756 -- x_msg_data OUT VARCHAR2
5757 -- x_return_status OUT VARCHAR2
5758 --
5759 -- History
5760 --
5761 -- 22-AUG-01 MAansari -Created
5762 --
5763 -- Notes : THis is API is created to avoid the Implementation level error that is thrown
5764 -- in the forms if any parameter with default containg a remote package variable is referenced.
5765
5766 PROCEDURE create_task_structure2(
5767 p_calling_module IN VARCHAR2 := 'FORMS'
5768 ,p_project_id IN NUMBER
5769 ,p_task_id IN NUMBER
5770 ,p_parent_task_id IN NUMBER
5771 ,p_ref_task_id IN NUMBER := -9999
5772 ,p_task_number IN VARCHAR2
5773 ,p_task_name IN VARCHAR2
5774 ,p_task_description IN VARCHAR2
5775 ,p_carrying_out_organization_id IN NUMBER
5776 ,p_structure_type IN VARCHAR2 := 'FINANCIAL'
5777 ,P_PM_SOURCE_reference IN VARCHAR2
5778 ,P_PM_SOURCE_code IN VARCHAR2
5779 ,p_task_manager_id IN NUMBER
5780 ,p_location_id IN NUMBER
5781 ,p_financial_task_flag IN VARCHAR2 := 'Y' --bug 3301192
5782 ,x_task_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5783 ,x_task_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5784 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5785 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5786 ,x_return_status OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
5787 BEGIN
5788 create_task_structure(
5789 p_calling_module => p_calling_module
5790 ,p_project_id => p_project_id
5791 ,p_task_id => p_task_id
5792 ,p_parent_task_id => p_parent_task_id
5793 ,p_ref_task_id => p_ref_task_id
5794 ,p_task_number => p_task_number
5795 ,p_task_name => p_task_name
5796 ,p_task_description => p_task_description
5797 ,p_carrying_out_organization_id => p_carrying_out_organization_id
5798 ,p_manager_person_id => p_task_manager_id
5799 ,p_location_id => p_location_id
5800 ,p_structure_type => p_structure_type
5801 ,p_financial_task_flag => p_financial_task_flag --bug 3301192
5802 ,x_task_version_id => x_task_version_id
5803 ,x_task_id => x_task_id
5804 ,x_msg_count => x_msg_count
5805 ,x_msg_data => x_msg_data
5806 ,x_return_status => x_return_status
5807 );
5808 END create_task_structure2;
5809
5810 -- API name : update_task_structure2
5811 -- Type : PL/sql Public procedure
5812 -- Pre-reqs : None
5813 -- Return Value : N/A
5814 -- Prameters
5815 -- p_calling_module IN VARCHAR2
5816 -- ,p_task_id IN NUMBER
5817 -- ,p_task_number IN VARCHAR2
5818 -- ,p_task_name IN VARCHAR2
5819 -- ,p_task_description IN VARCHAR2
5820 -- ,p_carrying_out_organization_id IN NUMBER
5821 -- ,p_task_manager_id IN NUMBER
5822 -- ,p_pm_product_code IN VARCHAR2
5823 -- ,p_pm_task_reference IN VARCHAR2
5824 -- ,p_record_version_number IN NUMBER
5825 -- ,x_msg_count OUT NUMBER
5826 -- ,x_msg_data OUT VARCHAR2
5827 -- ,x_return_status OUT VARCHAR2--
5828 -- History
5829 --
5830 -- 22-AUG-02 MAansari -Created
5831 --
5832 -- Notes : THis is API is created to avoid the Implementation level error that is thrown
5833 -- in the forms if any parameter with default containg a remote package variable is referenced.
5834
5835 PROCEDURE update_task_structure2
5836 (
5837 p_calling_module IN VARCHAR2 := 'FORMS'
5838 ,p_ref_task_id IN NUMBER
5839 ,p_project_id IN NUMBER
5840 ,p_task_id IN NUMBER
5841 ,p_task_number IN VARCHAR2
5842 ,p_task_name IN VARCHAR2
5843 ,p_task_description IN VARCHAR2
5844 ,p_carrying_out_organization_id IN NUMBER
5845 ,p_structure_type IN VARCHAR2 := 'FINANCIAL'
5846 ,p_task_manager_id IN NUMBER
5847 ,p_pm_product_code IN VARCHAR2
5848 ,p_pm_task_reference IN VARCHAR2
5849 ,p_location_id IN NUMBER
5850 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5851 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5852 ,x_return_status OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
5853 BEGIN
5854
5855 update_task_structure(
5856 p_calling_module => p_calling_module
5857 ,p_ref_task_id => p_ref_task_id
5858 ,p_project_id => p_project_id
5859 ,p_task_id => p_task_id
5860 ,p_task_number => p_task_number
5861 ,p_task_name => p_task_name
5862 ,p_task_description => p_task_description
5863 ,p_carrying_out_organization_id => p_carrying_out_organization_id
5864 ,p_structure_type => p_structure_type
5865 ,p_task_manager_id => p_task_manager_id
5866 ,p_pm_product_code => p_pm_product_code
5867 ,p_pm_task_reference => p_pm_task_reference
5868 ,p_location_id => p_location_id
5869 ,x_msg_count => x_msg_count
5870 ,x_msg_data => x_msg_data
5871 ,x_return_status => x_return_status
5872 );
5873
5874 END update_task_structure2;
5875
5876 -- API name : get_struc_task_ver_ids
5877 -- Type : PL/sql Public Function
5878 -- Pre-reqs : None
5879 -- Return Value : N/A
5880 -- Prameters
5881 -- p_project_id IN NUMBER
5882 -- History
5883 --
5884 -- 21-AUG-02 MAansari -Created
5885 --
5886 -- Notes: This api returns task_version_id and parent_structure_version_id for the tasks
5887 -- displayed in Forms.
5888
5889 PROCEDURE get_struc_task_ver_ids
5890 (
5891 p_project_id IN NUMBER
5892 ,p_task_id IN NUMBER
5893 ,x_task_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5894 ,x_parent_struc_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5895 ) IS
5896
5897 CURSOR cur_proj_elems( c_parent_struc_ver_id NUMBER )
5898 IS
5899 SELECT element_version_id, parent_structure_version_id
5900 FROM pa_proj_element_versions
5901 WHERE project_id = p_project_id
5902 AND proj_element_id = p_task_id
5903 AND parent_structure_version_id = c_parent_struc_ver_id
5904 AND object_type = 'PA_TASKS';
5905
5906 CURSOR cur_pa_work_ver
5907 IS
5908 SELECT element_version_id
5909 FROM pa_proj_elem_ver_structure
5910 WHERE project_id = p_project_id
5911 AND status_code = 'STRUCTURE_WORKING';
5912
5913 l_structure_version_id NUMBER;
5914 BEGIN
5915 l_structure_version_id := PA_PROJ_ELEMENTS_UTILS.latest_published_ver_id( p_project_id,'FINANCIAL' );
5916
5917 IF l_structure_version_id IS NULL OR l_structure_version_id = -1
5918 THEN
5919 OPEN cur_pa_work_ver;
5920 FETCH cur_pa_work_ver INTO l_structure_version_id;
5921 CLOSE cur_pa_work_ver;
5922 END IF;
5923
5924 IF p_task_id IS NOT NULL
5925 THEN
5926 OPEN cur_proj_elems( l_structure_version_id );
5927 FETCH cur_proj_elems INTO x_task_version_id, x_parent_struc_version_id;
5928 CLOSE cur_proj_elems;
5929 ELSE
5930 IF l_structure_version_id <> -1 THEN
5931 x_parent_struc_version_id := l_structure_version_id;
5932 END IF;
5933 END IF;
5934 END get_struc_task_ver_ids;
5935
5936 -- API name : WP_STR_EXISTS
5937 -- Type : PL/sql Public Function
5938 -- Pre-reqs : None
5939 -- Return Value : 'Y', 'N'
5940 -- Prameters
5941 -- p_project_id IN NUMBER
5942 -- History
5943 --
5944 -- 21-AUG-02 MAansari -Created
5945 --
5946 -- Notes: This api is returns 'TRUE' if WORKPLAN str exists
5947
5948 FUNCTION WP_STR_EXISTS
5949 (
5950 p_project_id IN NUMBER
5951 ) RETURN VARCHAR2 IS
5952 l_return_value VARCHAR2(1) := 'N';
5953 l_dummy_char VARCHAR2(1) := 'N';
5954
5955 CURSOR cur_pa_proj
5956 IS
5957 /* SELECT proj_element_id
5958 FROM pa_proj_elements
5959 WHERE project_id = p_project_id
5960 AND object_type = 'PA_STRUCTURES';
5961 */
5962 SELECT 'x'
5963 FROM pa_proj_elements ppe, pa_proj_structure_types ppst
5964 WHERE ppe.project_id = p_project_id
5965 AND ppe.object_type = 'PA_STRUCTURES'
5966 AND ppe.proj_element_id = ppst.proj_element_id
5967 AND ppst.structure_type_id = 1; --'WORKPLAN'
5968
5969
5970 BEGIN
5971 --Call Huberts API to check whether a workplan structure is separate from financial
5972
5973 /* FOR cur_pa_proj_rec in cur_pa_proj LOOP
5974 l_return_value := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(
5975 cur_pa_proj_rec.proj_element_id, 'WORKPLAN' );
5976 IF NVL( l_return_value, 'N' ) = 'Y'
5977 THEN
5978 Exit;
5979 END IF;
5980 END LOOP;
5981 */
5982 open cur_pa_proj;
5983 fetch cur_pa_proj INTO l_dummy_char;
5984 IF cur_pa_proj%FOUND
5985 THEN
5986 l_return_value := 'Y';
5987 ELSE
5988 l_return_value := 'N';
5989 END IF;
5990 CLOSE cur_pa_proj;
5991
5992 RETURN ( NVL( l_return_value, 'N' ) );
5993
5994 END WP_STR_EXISTS;
5995
5996 FUNCTION DATE_SYNC_UP_METHOD
5997 (
5998 p_project_id IN NUMBER
5999 ) RETURN VARCHAR2 IS
6000 CURSOR cur_pa_proj_elems
6001 IS
6002 SELECT ppe.proj_element_id
6003 FROM pa_proj_elements ppe, pa_proj_structure_types ppst
6004 WHERE ppe.project_id = p_project_id
6005 AND ppe.object_type = 'PA_STRUCTURES'
6006 AND ppe.proj_element_id = ppst.proj_element_id
6007 AND ppst.structure_type_id = 1; --'WORKPLAN'
6008
6009 l_proj_element_id NUMBER;
6010 l_return_value VARCHAR2(1);
6011
6012 BEGIN
6013
6014 OPEN cur_pa_proj_elems;
6015 FETCH cur_pa_proj_elems INTO l_proj_element_id;
6016 CLOSE cur_pa_proj_elems;
6017
6018 l_return_value := PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_DATE_SYNC_ENABLED( l_proj_element_id );
6019 RETURN l_return_value;
6020 END DATE_SYNC_UP_METHOD;
6021
6022 PROCEDURE update_trans_dates(
6023 p_project_id IN NUMBER
6024 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6025 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6026 ,x_return_status OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
6027 BEGIN
6028
6029 x_return_status := 'S';
6030 PA_PROJECT_DATES_PUB.COPY_PROJECT_DATES
6031 (
6032 p_project_id => p_project_id
6033 ,x_return_status => x_return_status
6034 ,x_msg_count => x_msg_count
6035 ,x_msg_data => x_msg_data
6036 );
6037
6038 END update_trans_dates;
6039
6040
6041 PROCEDURE update_wp_calendar(
6042 p_project_id IN NUMBER
6043 ,p_calendar_id IN NUMBER
6044 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6045 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6046 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6047 )
6048 IS
6049 BEGIN
6050 PA_PROJECT_STRUCTURE_PVT1.update_wp_calendar(
6051 p_project_id => p_project_id
6052 ,p_calendar_id => p_calendar_id
6053 ,x_return_status => x_return_status
6054 ,x_msg_count => x_msg_count
6055 ,x_msg_data => x_msg_data
6056 );
6057 END update_wp_calendar;
6058
6059 PROCEDURE create_tasks_versions_only(
6060 p_calling_module IN VARCHAR2 := 'FORMS'
6061 ,p_structure_type IN VARCHAR2 := 'FINANCIAL'
6062 ,p_project_id IN NUMBER
6063 ,p_structure_version_id IN NUMBER
6064 ,p_pm_product_code IN VARCHAR2 := 'JUNK_CHARS'
6065 ,p_tasks_in IN pa_project_pub.task_in_tbl_type
6066 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6067 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6068 ,x_return_status OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
6069
6070
6071 v_first_index NUMBER;
6072 i NUMBER;
6073 v_parent_task_id NUMBER;
6074 l_return_status VARCHAR2(1);
6075 l_msg_count NUMBER;
6076 l_msg_data VARCHAR2(2000);
6077 v_ref_task_id NUMBER;
6078 l_task_version_id NUMBER;
6079 l_task_id NUMBER;
6080 --Added by rtarway for BUG 3990873
6081 l_pa_task_id NUMBER;
6082 --Added by rbruno bug 9544348
6083 l_actual_start_date DATE;
6084 l_actual_finish_date DATE;
6085
6086 CURSOR cur_get_existing_task_id (c_project_id pa_projects_all.project_id%TYPE,
6087 c_pm_source_reference pa_proj_elements.pm_source_reference%TYPE) IS
6088 SELECT proj_element_id
6089 FROM pa_proj_elements pelem
6090 WHERE project_id = c_project_id
6091 AND pm_source_reference = c_pm_source_reference
6092 AND exists(select 1
6093 from pa_proj_structure_types pstype, pa_structure_types types
6094 where pstype.proj_element_id = pelem.parent_structure_id
6095 and pstype.structure_type_id = types.structure_type_id
6096 and types.structure_type = p_structure_type);
6097 --End Added by rtarway for BUG 3990873
6098 BEGIN
6099
6100 i := p_tasks_in.first;
6101 v_first_index := i;
6102
6103 IF p_tasks_in.exists(i)
6104 THEN
6105 WHILE i IS NOT NULL LOOP
6106 --Added by rtarway for BUG 4320731
6107 l_pa_task_id := NULL;
6108 --Commented by rtarway , chnaged If condition, BUG 3990873
6109 /*IF p_tasks_in(i).pa_task_id IS NOT NULL AND
6110 p_tasks_in(i).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6111 THEN*/
6112
6113 --Begin add by rtarway, for BUG 3990873
6114 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)
6115 then
6116 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)
6117 then
6118 --Cursor is deliberately used here, because we dont want to populate message in global error stack, in case new tasks
6119 --are being added. At many places in update_task flow, error is raised based on fnd_msg_pub.count > 0
6120 --If NO_DATA_FOUND occurs for this cursor, it will pass without error.
6121 OPEN cur_get_existing_task_id(p_project_id,p_tasks_in(i).pm_task_reference);
6122 FETCH cur_get_existing_task_id into l_pa_task_id;
6123 --Added by rtarway for BUG 4320731
6124 IF ( cur_get_existing_task_id%NOTFOUND ) THEN
6125 l_pa_task_id := NULL;
6126 END IF;
6127 CLOSE cur_get_existing_task_id;
6128 end if;
6129 else
6130 l_pa_task_id := p_tasks_in(i).pa_task_id;
6131 end if;
6132 IF l_pa_task_id IS NOT NULL
6133 then
6134 --end add by rtarway, for BUG 3990873
6135 IF (p_tasks_in(i).pa_parent_task_id IS NOT NULL
6136 AND p_tasks_in(i).pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
6137 THEN
6138 v_parent_task_id := p_tasks_in(i).pa_parent_task_id;
6139 ELSIF (p_tasks_in(i).pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6140 AND p_tasks_in(i).pm_parent_task_reference IS NOT NULL)
6141 THEN
6142 --convert pm_parent_task_reference to parent_task_id.
6143 --All the parent tasks are created first then child tasks are created. See TRM for AMG load_task api.
6144
6145 -- Bug 3601700 changed function call from PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref
6146 -- to PA_PROJECT_PVT.Convert_pm_taskref_to_id_all to retrieve task id for task reference
6147 -- because PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref may return financial task id
6148 -- in case of SHARED structure
6149 -- new api call takes structure type as parameter, so it will return task id for the passed structure type only */
6150 /* PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref(
6151 p_pm_parent_task_reference => p_tasks_in(i).pm_parent_task_reference
6152 ,p_project_id => p_project_id
6153 ,x_parent_task_id => v_parent_task_id
6154 ,x_return_status => l_return_status
6155 ); */
6156
6157 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
6158 p_pa_project_id => p_project_id
6159 , p_structure_type => 'WORKPLAN'
6160 , p_pm_task_reference => p_tasks_in(i).pm_parent_task_reference
6161 , p_out_task_id => v_parent_task_id
6162 , p_return_status => l_return_status );
6163
6164 /*IF l_return_status <> FND_API.G_RET_STS_SUCCESS
6165 THEN
6166 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6167 THEN
6168 pa_interface_utils_pub.map_new_amg_msg
6169 ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
6170 ,p_msg_attribute => 'CHANGE'
6171 ,p_resize_flag => 'N'
6172 ,p_msg_context => 'TASK'
6173 ,p_attribute1 => l_amg_segment1
6174 ,p_attribute2 => l_amg_task_number
6175 ,p_attribute3 => ''
6176 ,p_attribute4 => ''
6177 ,p_attribute5 => '');
6178 END IF;
6179 RAISE FND_API.G_EXC_ERROR;
6180 END IF;
6181 */
6182 ELSE
6183 v_parent_task_id := null;
6184 END IF;
6185
6186 --get the previous task
6187 IF i = v_first_index
6188 THEN
6189 v_ref_task_id := null;
6190 ELSE
6191 --v_ref_task_id := p_tasks_in(i-1).pa_task_id;
6192 --Added by rtarway for BUG 3990873
6193 if ( p_tasks_in(i-1).pa_task_id is not null
6194 and p_tasks_in(i-1).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
6195 then
6196 v_ref_task_id := p_tasks_in(i-1).pa_task_id;
6197 else
6198 if ( p_tasks_in(i-1).pm_task_reference is not null
6199 and p_tasks_in(i-1).pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
6200 then
6201 --get the task id from reference
6202 --Cursor is deliberately used here, because we dont want to populate message in global error stack, in case new tasks
6203 --are being added. At many places in update_task flow, error is raised based on fnd_msg_pub.count > 0
6204 --If NO_DATA_FOUND occurs for this cursor, it will pass without error.
6205 OPEN cur_get_existing_task_id(p_project_id,p_tasks_in(i-1).pm_task_reference);
6206 FETCH cur_get_existing_task_id into v_ref_task_id;
6207 CLOSE cur_get_existing_task_id;
6208 end if;
6209 end if;
6210 END IF;
6211
6212
6213 ---Added by rbruno bug 9544348 begin
6214 l_actual_start_date := null;
6215 l_actual_finish_date := null;
6216
6217
6218 IF p_tasks_in(i).actual_start_date IS NULL OR
6219 p_tasks_in(i).actual_start_date =
6220 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
6221 l_actual_start_date := NULL;
6222 ELSE
6223 l_actual_start_date := p_tasks_in(i).actual_start_date;
6224 END IF;
6225
6226 IF p_tasks_in(i).actual_finish_date IS NULL OR
6227 p_tasks_in(i).actual_finish_date =
6228 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
6229 l_actual_finish_date := NULL;
6230 ELSE
6231 l_actual_finish_date := p_tasks_in(i).actual_finish_date;
6232 END IF;
6233
6234 ---Added by rbruno bug 9544348 end
6235
6236 PA_PROJ_TASK_STRUC_PUB.CREATE_TASK_STRUCTURE(
6237 p_project_id => p_project_id
6238 -- ,p_task_id => p_tasks_in(i).pa_task_id, rtarway, BUG 3990873
6239 ,p_task_id => l_pa_task_id
6240 ,p_parent_task_id => v_parent_task_id
6241 ,p_ref_task_id => v_ref_task_id
6242 ,p_task_number => p_tasks_in(i).pa_task_number
6243 ,p_task_name => p_tasks_in(i).task_name
6244 ,p_task_description => p_tasks_in(i).task_description
6245 ,p_carrying_out_organization_id => p_tasks_in(i).carrying_out_organization_id
6246 ,p_calling_module => 'AMG'
6247 ,p_structure_type => p_structure_type
6248 ,p_OBLIGATION_START_DATE => p_tasks_in(i).OBLIGATION_START_DATE
6249 ,p_OBLIGATION_FINISH_DATE => p_tasks_in(i).OBLIGATION_FINISH_DATE
6250 ,p_ESTIMATED_START_DATE => p_tasks_in(i).ESTIMATED_START_DATE
6251 ,p_ESTIMATED_FINISH_DATE => p_tasks_in(i).ESTIMATED_FINISH_DATE
6252 ,p_BASELINE_START_DATE => p_tasks_in(i).BASELINE_START_DATE
6253 ,p_BASELINE_FINISH_DATE => p_tasks_in(i).BASELINE_FINISH_DATE
6254 ,p_CLOSED_DATE => p_tasks_in(i).CLOSED_DATE
6255 ,p_WQ_UOM_CODE => p_tasks_in(i).WQ_UOM_CODE
6256 ,p_WQ_ITEM_CODE => p_tasks_in(i).WQ_ITEM_CODE
6257 ,p_STATUS_CODE => p_tasks_in(i).STATUS_CODE
6258 ,p_WF_STATUS_CODE => p_tasks_in(i).WF_STATUS_CODE
6259 ,p_PM_SOURCE_CODE => p_pm_product_code --bug 2665656
6260 ,p_PRIORITY_CODE => p_tasks_in(i).PRIORITY_CODE
6261 ,p_MILESTONE_FLAG => p_tasks_in(i).MILESTONE_FLAG
6262 ,p_CRITICAL_FLAG => p_tasks_in(i).CRITICAL_FLAG
6263 ,p_INC_PROJ_PROGRESS_FLAG => p_tasks_in(i).INC_PROJ_PROGRESS_FLAG
6264 ,p_LINK_TASK_FLAG => p_tasks_in(i).LINK_TASK_FLAG
6265 ,p_CALENDAR_ID => p_tasks_in(i).CALENDAR_ID
6266 ,p_PLANNED_EFFORT => p_tasks_in(i).PLANNED_EFFORT
6267 ,p_DURATION => p_tasks_in(i).DURATION
6268 ,p_PLANNED_WORK_QUANTITY => p_tasks_in(i).PLANNED_WORK_QUANTITY
6269 ,p_TASK_TYPE => p_tasks_in(i).TASK_TYPE
6270 ,p_actual_start_date => l_actual_start_date --bug 9544348
6271 ,p_actual_finish_date => l_actual_finish_date --bug 9544348
6272 ,p_early_start_date => p_tasks_in(i).early_start_date
6273 ,p_early_finish_date => p_tasks_in(i).early_finish_date
6274 ,p_late_start_date => p_tasks_in(i).late_start_date
6275 ,p_late_finish_date => p_tasks_in(i).late_finish_date
6276 ,p_scheduled_start_date => p_tasks_in(i).scheduled_start_date
6277 ,p_scheduled_finish_date => p_tasks_in(i).scheduled_finish_date
6278 ,P_PM_SOURCE_reference => p_tasks_in(i).pm_task_reference
6279 ,p_location_id => p_tasks_in(i).address_id
6280 ,p_manager_person_id => p_tasks_in(i).task_manager_person_id
6281 ,p_structure_version_id => p_structure_version_id
6282 ,p_create_task_version_only => 'Y' --we dont need to create tasks in pa_tasks or pa_proj_elements for the existing tasks.
6283 --All we need is just to create task versions under the new structure version.
6284 ,p_financial_task_flag => p_tasks_in(i).financial_task_flag --added by rmuthine, Bug 13420479
6285 ,x_task_version_id => l_task_version_id
6286 ,x_task_id => l_task_id
6287 ,x_msg_count => x_msg_count
6288 ,x_msg_data => x_msg_data
6289 ,x_return_status => x_return_status
6290 );
6291 END IF;
6292 i := p_tasks_in.next(i);
6293 END LOOP;
6294 END IF;
6295
6296 END create_tasks_versions_only;
6297
6298
6299 --The following API is added to re-calculate task weights to call PA_TASK_PUB1.CALC_TASK_WEIGHTS
6300 --The API is called from PA_PROJECT_PUB.create_project and PA_PROJECT_PUB.update_project
6301
6302 PROCEDURE recalc_task_weightings(
6303 p_tasks_in IN pa_project_pub.task_out_tbl_type
6304 ,p_task_version_id IN NUMBER
6305 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6306 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6307 ,x_return_status OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
6308
6309 CURSOR cur_pa_proj_elem_ver( c_task_ver_id NUMBER )
6310 IS
6311 SELECT wbs_level
6312 FROM pa_proj_element_versions
6313 WHERE element_version_id = c_task_ver_id;
6314
6315 i NUMBER;
6316 j NUMBER := 1;
6317
6318 l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
6319 l_outline_level PA_NUM_1000_NUM := PA_NUM_1000_NUM();
6320 l_total_top_tasks NUMBER := 0;
6321 l_wbs_level NUMBER;
6322
6323 l_msg_count NUMBER;
6324 l_return_status VARCHAR2(1);
6325 l_msg_data VARCHAR2(2000);
6326 l_data VARCHAR2(2000);
6327 l_msg_index_out NUMBER;
6328 API_ERROR EXCEPTION;
6329 l_recalculate_flag VARCHAR2(1);
6330
6331 BEGIN
6332
6333 IF p_task_version_id IS NULL
6334 THEN
6335
6336 i := p_tasks_in.first;
6337
6338 IF p_tasks_in.exists(i)
6339 THEN
6340 WHILE i IS NOT NULL LOOP
6341 IF p_tasks_in(i).task_version_id IS NOT NULL AND
6342 p_tasks_in(i).task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6343 THEN
6344 l_tasks_ver_ids.extend;
6345 l_tasks_ver_ids(l_tasks_ver_ids.count) := p_tasks_in(i).task_version_id;
6346
6347 OPEN cur_pa_proj_elem_ver( p_tasks_in(i).task_version_id );
6348 FETCH cur_pa_proj_elem_ver INTO l_wbs_level;
6349 CLOSE cur_pa_proj_elem_ver;
6350
6351 IF l_wbs_level = 1
6352 THEN
6353 l_total_top_tasks := l_total_top_tasks + 1;
6354 END IF;
6355
6356 l_outline_level.extend;
6357 l_outline_level(l_outline_level.count) := l_wbs_level;
6358 l_recalculate_flag := 'Y';
6359 END IF;
6360 j := j + 1;
6361 IF NVL( l_recalculate_flag, 'N' ) = 'Y' AND j >= 1000
6362 THEN
6363 --To avoid no_data_found when this array is read in PA_TASK_PUB1.Cal_Task_weights
6364 l_outline_level.extend;
6365 l_outline_level(l_outline_level.count) := null;
6366
6367 /*--bug 2856033
6368 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
6369 p_commit => FND_API.G_FALSE,
6370 p_element_versions => l_tasks_ver_ids,
6371 x_return_status => l_return_status,
6372 x_msg_count => l_msg_count,
6373 x_msg_data => l_msg_data);
6374
6375 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6376 x_msg_count := FND_MSG_PUB.count_msg;
6377 if x_msg_count = 1 then
6378 pa_interface_utils_pub.get_messages
6379 (p_encoded => FND_API.G_TRUE,
6380 p_msg_index => 1,
6381 p_msg_count => l_msg_count,
6382 p_msg_data => l_msg_data,
6383 p_data => l_data,
6384 p_msg_index_out => l_msg_index_out);
6385 x_msg_data := l_data;
6386 end if;
6387 raise API_ERROR;
6388 end if;
6389 --bug 2856033
6390 */
6391
6392 PA_TASK_PUB1.Calc_Task_Weights(
6393 p_element_versions => l_tasks_ver_ids
6394 ,p_outline_level => l_outline_level
6395 ,p_top_sub_count => l_total_top_tasks
6396 ,x_return_status => l_return_status
6397 ,x_msg_count => l_msg_count
6398 ,x_msg_data => l_msg_data );
6399
6400 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6401 x_msg_count := FND_MSG_PUB.count_msg;
6402 x_return_status := l_return_status ; --bug 3044915
6403 if x_msg_count = 1 then
6404 pa_interface_utils_pub.get_messages
6405 (p_encoded => FND_API.G_TRUE,
6406 p_msg_index => 1,
6407 p_msg_count => l_msg_count,
6408 p_msg_data => l_msg_data,
6409 p_data => l_data,
6410 p_msg_index_out => l_msg_index_out);
6411 x_msg_data := l_data;
6412 end if;
6413 raise API_ERROR;
6414 end if;
6415 l_tasks_ver_ids.DELETE;
6416 l_outline_level.DELETE;
6417 l_recalculate_flag := 'N';
6418 j := 1;
6419 END IF;
6420 i := p_tasks_in.next(i);
6421 END LOOP;
6422 END IF;
6423
6424 ELSIF p_task_version_id IS NOT NULL
6425 THEN
6426 l_tasks_ver_ids.extend;
6427 l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
6428
6429 OPEN cur_pa_proj_elem_ver( p_task_version_id );
6430 FETCH cur_pa_proj_elem_ver INTO l_wbs_level;
6431 CLOSE cur_pa_proj_elem_ver;
6432
6433 IF l_wbs_level = 1
6434 THEN
6435 l_total_top_tasks := l_total_top_tasks + 1;
6436 END IF;
6437
6438 l_outline_level.extend;
6439 l_outline_level(l_outline_level.count) := l_wbs_level;
6440 l_recalculate_flag := 'Y';
6441
6442 END IF;
6443
6444 IF NVL( l_recalculate_flag, 'N' ) = 'Y'
6445 THEN
6446
6447 --To avoid no_data_found when this array is read in PA_TASK_PUB1.Cal_Task_weights
6448 l_outline_level.extend;
6449 l_outline_level(l_outline_level.count) := null;
6450
6451 /*--bug 2856033
6452 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
6453 p_commit => FND_API.G_FALSE,
6454 p_element_versions => l_tasks_ver_ids,
6455 x_return_status => l_return_status,
6456 x_msg_count => l_msg_count,
6457 x_msg_data => l_msg_data);
6458
6459 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6460 x_msg_count := FND_MSG_PUB.count_msg;
6461 if x_msg_count = 1 then
6462 pa_interface_utils_pub.get_messages
6463 (p_encoded => FND_API.G_TRUE,
6464 p_msg_index => 1,
6465 p_msg_count => l_msg_count,
6466 p_msg_data => l_msg_data,
6467 p_data => l_data,
6468 p_msg_index_out => l_msg_index_out);
6469 x_msg_data := l_data;
6470 end if;
6471 raise API_ERROR;
6472 end if;
6473 --bug 2856033
6474 */
6475
6476
6477 PA_TASK_PUB1.Calc_Task_Weights(
6478 p_element_versions => l_tasks_ver_ids
6479 ,p_outline_level => l_outline_level
6480 ,p_top_sub_count => l_total_top_tasks
6481 ,x_return_status => l_return_status
6482 ,x_msg_count => l_msg_count
6483 ,x_msg_data => l_msg_data );
6484
6485 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6486 x_msg_count := FND_MSG_PUB.count_msg;
6487 x_return_status := l_return_status ; --bug 3044915
6488 if x_msg_count = 1 then
6489 pa_interface_utils_pub.get_messages
6490 (p_encoded => FND_API.G_TRUE,
6491 p_msg_index => 1,
6492 p_msg_count => l_msg_count,
6493 p_msg_data => l_msg_data,
6494 p_data => l_data,
6495 p_msg_index_out => l_msg_index_out);
6496 x_msg_data := l_data;
6497 end if;
6498 raise API_ERROR;
6499 end if;
6500 END IF;
6501 x_return_status := FND_API.G_RET_STS_SUCCESS; -- Bug 3044915
6502 END recalc_task_weightings;
6503
6504 FUNCTION GET_MAX_LAST_UPD_DT_WRKNG_VER
6505 ( p_structure_version_id IN NUMBER
6506 ) return DATE
6507 IS
6508 --bug 3074706
6509 CURSOR c2 IS
6510 select project_id
6511 from pa_proj_element_versions
6512 where element_version_id = p_structure_version_id;
6513 l_project_id NUMBER;
6514
6515 CURSOR c1 IS
6516 select MAX(a.last_update_date)
6517 from pa_proj_element_versions b,
6518 pa_proj_elem_ver_schedule a,
6519 pa_proj_elem_ver_structure c
6520 where p_structure_version_id = c.element_version_id
6521 and l_project_id = c.project_id
6522 and c.status_code <> 'STRUCTURE_PUBLISHED'
6523 and b.parent_structure_version_id = c.element_version_id
6524 and b.project_id = c.project_id
6525 and a.element_version_id (+)= b.element_version_id
6526 and a.project_id (+) = b.project_id
6527 and a.proj_element_id (+) = b.proj_element_id;
6528 /*
6529 CURSOR c1 IS
6530 SELECT MAX(a.last_update_date)
6531 FROM pa_proj_element_versions b,
6532 pa_proj_elem_ver_schedule a,
6533 pa_proj_elem_ver_structure c
6534 WHERE a.element_version_id (+)= b.element_version_id
6535 AND a.project_id (+) = b.project_id
6536 AND a.proj_element_id (+) = b.proj_element_id
6537 AND b.parent_structure_version_id = c.element_version_id
6538 AND b.project_id = c.project_id
6539 AND c.status_code <> 'STRUCTURE_PUBLISHED'
6540 AND b.parent_structure_version_id = p_structure_version_id
6541 ;
6542 */
6543 --end bug 3074706
6544
6545 l_date DATE;
6546 l_structure_version_id NUMBER;
6547 BEGIN
6548 --bug 3074706
6549 OPEN c2;
6550 FETCH c2 into l_project_id;
6551 CLOSE c2;
6552 --end bug 3074706
6553 OPEN c1;
6554 FETCH c1 into l_date;
6555 CLOSE c1;
6556 return l_date;
6557 END GET_MAX_LAST_UPD_DT_WRKNG_VER;
6558
6559 -- Procedure : copy_src_financial_version
6560 -- Type : PRIVATE
6561 -- Purpose : Contains logic for copying the financial version from the source to the destination version
6562 -- Note :
6563 -- Assumptions : All FLAGS and WORKPLAN record(s) have been populated in the global temporary table
6564 -- Parameters Type Required Description and Purpose
6565 -- --------------------------- ------ -------- --------------------------------------------------------
6566 -- p_src_project_id NUMBER Y The source project id
6567 -- p_dest_project_id NUMBER Y The destination project id
6568 -- p_dest_fn_structure_id NUMBER Y The destination project's financial structure id
6569 -- p_shared VARCHAR2 Y Whether source/destination project is shared or not
6570 -- p_publish_person_id NUMBER Y The person id required for publishing a version
6571 -- p_dest_template_flag VARCHAR2 Y Creating a template or a project
6572 PROCEDURE copy_src_financial_version( p_api_version IN NUMBER := 1.0
6573 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
6574 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
6575 ,p_validate_only IN VARCHAR2 := FND_API.G_FALSE
6576 ,p_validation_level IN VARCHAR2 := FND_API.G_VALID_LEVEL_FULL
6577 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
6578 ,p_debug_mode IN VARCHAR2 := 'N'
6579 ,p_src_project_id IN NUMBER
6580 ,p_dest_project_id IN NUMBER
6581 ,p_dest_fn_structure_id IN NUMBER
6582 ,p_shared IN VARCHAR2
6583 ,p_dest_template_flag IN VARCHAR2
6584 ,p_publish_person_id IN NUMBER
6585 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6586 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6587 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6588 ) IS
6589 --This cursor fetches the workplan structure attributes
6590 CURSOR cur_get_wp_attr IS
6591 SELECT ppwa.WP_ENABLE_VERSION_FLAG
6592 FROM pa_proj_workplan_attr ppwa
6593 ,pa_proj_structure_types ppst
6594 ,pa_structure_types pst
6595 WHERE ppwa.project_id = p_src_project_id
6596 AND ppwa.proj_element_id = ppst.proj_element_id
6597 AND ppst.structure_type_id = pst.structure_type_id
6598 AND pst.structure_type = 'WORKPLAN' ;
6599
6600 --This cursor retrieves the LATEST PUBLISHED WP version from the source project
6601 CURSOR cur_get_src_fin_version_id IS
6602 SELECT ppev.element_version_id
6603 FROM pa_proj_element_versions ppev,
6604 pa_proj_elem_ver_structure ppevs
6605 WHERE ppev.project_id = p_src_project_id
6606 AND ppev.object_type = 'PA_STRUCTURES'
6607 AND ppev.element_version_id = ppevs.element_version_id
6608 AND ppevs.project_id = p_src_project_id
6609 AND ppevs.latest_eff_published_flag = 'Y';
6610
6611 --This cursor retrieves the CURRENT WORKING WP version from the source project
6612 CURSOR cur_get_src_fin_version_id2 IS
6613 SELECT ppev.element_version_id
6614 FROM pa_proj_element_versions ppev,
6615 pa_proj_elem_ver_structure ppevs
6616 WHERE ppev.project_id = p_src_project_id
6617 AND ppev.object_type = 'PA_STRUCTURES'
6618 AND ppev.element_version_id = ppevs.element_version_id
6619 AND ppevs.project_id = p_src_project_id
6620 AND ppevs.current_working_flag = 'Y';
6621
6622 --This cursor retrieves the version for the financial structure form the source project
6623 CURSOR cur_get_split_fin_ver IS
6624 SELECT ppev.element_version_id
6625 FROM pa_proj_element_versions ppev,
6626 pa_proj_structure_types ppst,
6627 pa_structure_types pst
6628 WHERE ppev.project_id = p_src_project_id
6629 AND ppev.object_type = 'PA_STRUCTURES'
6630 AND ppev.proj_element_id = ppst.proj_element_id
6631 AND ppst.structure_type_id = pst.structure_type_id
6632 AND pst.structure_type = 'FINANCIAL' ;
6633
6634 --This cursor gets the schedule start date from the source project
6635 CURSOR cur_get_src_sch_st_date(c_project_id NUMBER, c_struc_ver_id NUMBER) IS
6636 SELECT scheduled_start_date
6637 FROM pa_proj_elem_ver_schedule
6638 WHERE project_id = c_project_id
6639 AND element_version_id = c_struc_ver_id;
6640
6641 l_debug_mode VARCHAR2(1);
6642 l_debug_level2 CONSTANT NUMBER := 2;
6643 l_debug_level3 CONSTANT NUMBER := 3;
6644 l_debug_level4 CONSTANT NUMBER := 4;
6645 l_debug_level5 CONSTANT NUMBER := 5;
6646
6647 l_src_fin_version_id NUMBER(15);
6648 l_versioning_enabled VARCHAR2(1);
6649 dest_latest_eff_pub_flag VARCHAR2(1);
6650 dest_current_flag VARCHAR2(1);
6651 l_user_id NUMBER := FND_GLOBAL.USER_ID;
6652 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
6653 BEGIN
6654
6655 x_msg_count := 0;
6656 x_return_status := FND_API.G_RET_STS_SUCCESS;
6657 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
6658
6659 IF (p_commit = FND_API.G_TRUE) THEN
6660 SAVEPOINT copy_src_fin_ver;
6661 END IF;
6662
6663 IF p_init_msg_list = FND_API.G_TRUE THEN
6664 FND_MSG_PUB.initialize;
6665 END IF;
6666
6667 IF l_debug_mode = 'Y' THEN
6668 PA_DEBUG.set_curr_function( p_function => 'copy_src_financial_version',
6669 p_debug_mode => l_debug_mode );
6670 END IF;
6671
6672 IF l_debug_mode = 'Y' THEN
6673 Pa_Debug.g_err_stage:= 'Printing Input parameters';
6674 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
6675 l_debug_level3);
6676
6677 Pa_Debug.WRITE(G_PKG_NAME,'p_src_project_id'||':'||p_src_project_id,
6678 l_debug_level3);
6679
6680 Pa_Debug.WRITE(G_PKG_NAME,'p_dest_project_id'||':'||p_dest_project_id,
6681 l_debug_level3);
6682
6683 Pa_Debug.WRITE(G_PKG_NAME,'p_dest_fn_structure_id'||':'||p_dest_fn_structure_id,
6684 l_debug_level3);
6685
6686 Pa_Debug.WRITE(G_PKG_NAME,'p_shared'||':'||p_shared,
6687 l_debug_level3);
6688
6689 Pa_Debug.WRITE(G_PKG_NAME,'p_publish_person_id'||':'||p_publish_person_id,
6690 l_debug_level3);
6691 END IF;
6692
6693 IF l_debug_mode = 'Y' THEN
6694 Pa_Debug.g_err_stage:= 'Validating Input parameters';
6695 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
6696 l_debug_level3);
6697 END IF;
6698
6699 IF ( ( p_src_project_id IS NULL OR p_src_project_id = FND_API.G_MISS_NUM ) AND
6700 ( p_dest_project_id IS NULL OR p_dest_project_id = FND_API.G_MISS_NUM ) AND
6701 ( p_dest_fn_structure_id IS NULL OR p_dest_fn_structure_id = FND_API.G_MISS_NUM ) AND
6702 ( p_shared IS NULL OR p_shared = FND_API.G_MISS_CHAR ) AND
6703 ( p_publish_person_id IS NULL OR p_publish_person_id = FND_API.G_MISS_NUM )
6704 )
6705 THEN
6706 IF l_debug_mode = 'Y' THEN
6707 Pa_Debug.g_err_stage:= 'PA_PROJ_TASK_STRUC_PUB : copy_src_financial_version :
6708 p_src_project_id, p_dest_project_id, p_dest_fn_structure_id, p_shared, p_publish_person_id are NULL';
6709 Pa_Debug.WRITE(G_PKG_NAME, Pa_Debug.g_err_stage, l_debug_level3);
6710 END IF;
6711 RAISE Invalid_Arg_Exc_WP;
6712 END IF;
6713
6714 IF 'Y' = p_shared THEN
6715 --Fetch the WP latest published, else the current working in the source project
6716 OPEN cur_get_src_fin_version_id;
6717 FETCH cur_get_src_fin_version_id INTO l_src_fin_version_id;
6718 IF cur_get_src_fin_version_id%NOTFOUND THEN
6719 OPEN cur_get_src_fin_version_id2;
6720 FETCH cur_get_src_fin_version_id2 INTO l_src_fin_version_id;
6721 CLOSE cur_get_src_fin_version_id2;
6722 END IF;
6723 CLOSE cur_get_src_fin_version_id;
6724 ELSE
6725 --Fetch the financial version from the source project
6726 OPEN cur_get_split_fin_ver;
6727 FETCH cur_get_split_fin_ver INTO l_src_fin_version_id;
6728 CLOSE cur_get_split_fin_ver;
6729 END IF;
6730
6731 IF l_debug_mode = 'Y' THEN
6732 Pa_Debug.WRITE(G_PKG_NAME,'Source financial version id : '||l_src_fin_version_id, l_debug_level3);
6733 END IF;
6734
6735 --Copy entry into pa_proj_element_versions for the financial version in the source project
6736 INSERT INTO pa_proj_element_versions(
6737 ELEMENT_VERSION_ID
6738 ,PROJ_ELEMENT_ID
6739 ,OBJECT_TYPE
6740 ,PROJECT_ID
6741 ,PARENT_STRUCTURE_VERSION_ID
6742 ,DISPLAY_SEQUENCE
6743 ,WBS_LEVEL
6744 ,WBS_NUMBER
6745 ,CREATION_DATE
6746 ,CREATED_BY
6747 ,LAST_UPDATE_DATE
6748 ,LAST_UPDATED_BY
6749 ,LAST_UPDATE_LOGIN
6750 ,RECORD_VERSION_NUMBER
6751 ,attribute15 --This column stores the stucture version id in the src project, to be used to create relationships.
6752 ,ATTRIBUTE_CATEGORY
6753 ,ATTRIBUTE1
6754 ,ATTRIBUTE2
6755 ,ATTRIBUTE3
6756 ,ATTRIBUTE4
6757 ,ATTRIBUTE5
6758 ,ATTRIBUTE6
6759 ,ATTRIBUTE7
6760 ,ATTRIBUTE8
6761 ,ATTRIBUTE9
6762 ,ATTRIBUTE10
6763 ,ATTRIBUTE11
6764 ,ATTRIBUTE12
6765 ,ATTRIBUTE13
6766 ,ATTRIBUTE14
6767 ,TASK_UNPUB_VER_STATUS_CODE
6768 ,FINANCIAL_TASK_FLAG
6769 ,source_object_id
6770 ,source_object_type
6771 )
6772 SELECT
6773 pa_proj_element_versions_s.nextval
6774 ,p_dest_fn_structure_id --This would be the WP/FIN structure id in shared case and FIN structure id in split case
6775 ,ppev.object_type
6776 ,p_dest_project_id
6777 ,pa_proj_element_versions_s.nextval --nextval occuring twice in the same select returns the same value
6778 ,ppev.DISPLAY_SEQUENCE
6779 ,ppev.WBS_LEVEL
6780 ,ppev.WBS_NUMBER
6781 ,SYSDATE ------CREATION_DATE
6782 ,l_user_id ------CREATED_BY
6783 ,SYSDATE ------LAST_UPDATE_DATE
6784 ,l_user_id ------LAST_UPDATED_BY
6785 ,l_login_id ------LAST_UPDATE_LOGIN
6786 ,ppev.RECORD_VERSION_NUMBER ------RECORD_VERSION_NUMBER
6787 ,ppev.element_version_id
6788 ,ppev.ATTRIBUTE_CATEGORY
6789 ,ppev.ATTRIBUTE1
6790 ,ppev.ATTRIBUTE2
6791 ,ppev.ATTRIBUTE3
6792 ,ppev.ATTRIBUTE4
6793 ,ppev.ATTRIBUTE5
6794 ,ppev.ATTRIBUTE6
6795 ,ppev.ATTRIBUTE7
6796 ,ppev.ATTRIBUTE8
6797 ,ppev.ATTRIBUTE9
6798 ,ppev.ATTRIBUTE10
6799 ,ppev.ATTRIBUTE11
6800 ,ppev.ATTRIBUTE12
6801 ,ppev.ATTRIBUTE13
6802 ,ppev.ATTRIBUTE14
6803 ,ppev.TASK_UNPUB_VER_STATUS_CODE
6804 ,ppev.FINANCIAL_TASK_FLAG
6805 ,p_dest_project_id
6806 ,'PA_PROJECTS'
6807 FROM pa_proj_element_versions ppev
6808 WHERE ppev.project_id = p_src_project_id
6809 AND ppev.element_version_id = l_src_fin_version_id ;
6810
6811 OPEN cur_get_wp_attr;
6812 FETCH cur_get_wp_attr INTO l_versioning_enabled;
6813 CLOSE cur_get_wp_attr;
6814
6815 --IF split and financial enabled THEN
6816 IF 'N' = p_shared THEN
6817 IF p_dest_template_flag = 'Y' THEN
6818 dest_latest_eff_pub_flag := 'N';
6819 dest_current_flag := 'N';
6820 ELSE
6821 dest_latest_eff_pub_flag := 'Y';
6822 dest_current_flag := 'S';
6823 END IF;
6824 ELSE
6825 --IF shared AND no wp ver is selected AND fin tasks flag is checked
6826 --IF creating a project AND versioning is disabled THEN
6827 IF 'N' = p_dest_template_flag AND 'N' = l_versioning_enabled THEN
6828 dest_latest_eff_pub_flag := 'Y';
6829 dest_current_flag := 'Y';
6830 ELSE
6831 --IF creating a template OR creating a project with versioning enabled
6832 dest_latest_eff_pub_flag := 'N';
6833 dest_current_flag := 'N';
6834 END IF;
6835 END IF;
6836
6837 IF l_debug_mode = 'Y' THEN
6838 Pa_Debug.WRITE(G_PKG_NAME,'dest_latest_eff_pub_flag : '||dest_latest_eff_pub_flag, l_debug_level3);
6839 Pa_Debug.WRITE(G_PKG_NAME,'dest_current_flag : '||dest_current_flag, l_debug_level3);
6840 END IF;
6841
6842 --Copy entry into pa_proj_elem_ver_structure for financial version in the source project
6843 INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
6844 PEV_STRUCTURE_ID
6845 ,ELEMENT_VERSION_ID
6846 ,VERSION_NUMBER
6847 ,NAME
6848 ,PROJECT_ID
6849 ,PROJ_ELEMENT_ID
6850 ,DESCRIPTION
6851 ,EFFECTIVE_DATE
6852 ,PUBLISHED_DATE
6853 ,PUBLISHED_BY_PERSON_ID
6854 ,CURRENT_BASELINE_DATE
6855 ,CURRENT_FLAG
6856 ,CURRENT_BASELINE_PERSON_ID
6857 ,ORIGINAL_BASELINE_DATE
6858 ,ORIGINAL_FLAG
6859 ,ORIGINAL_BASELINE_PERSON_ID
6860 ,LOCK_STATUS_CODE
6861 ,LOCKED_BY_PERSON_ID
6862 ,LOCKED_DATE
6863 ,STATUS_CODE
6864 ,WF_STATUS_CODE
6865 ,LATEST_EFF_PUBLISHED_FLAG
6866 ,RECORD_VERSION_NUMBER
6867 ,WBS_RECORD_VERSION_NUMBER
6868 ,CREATION_DATE
6869 ,CREATED_BY
6870 ,LAST_UPDATE_DATE
6871 ,LAST_UPDATED_BY
6872 ,LAST_UPDATE_LOGIN
6873 ,change_reason_code
6874 ,PROCESS_UPDATE_WBS_FLAG
6875 ,current_working_flag
6876 ,source_object_id
6877 ,source_object_type
6878 )
6879 SELECT
6880 pa_proj_elem_ver_structure_s.nextval
6881 ,ppev.element_version_id
6882 ,ppevs.version_number
6883 ,ppevs.name
6884 ,p_dest_project_id
6885 ,p_dest_fn_structure_id --This would be WP/FIN structure id in shared case and FIN structure id in split case
6886 ,ppevs.DESCRIPTION
6887 ,ppevs.EFFECTIVE_DATE
6888 ,decode(dest_latest_eff_pub_flag,'Y',sysdate,to_date(null) ) --PUBLISHED_DATE
6889 ,decode(dest_latest_eff_pub_flag,'Y',p_publish_person_id,null ) --PUBLISHED_BY_PERSON_ID
6890 ,decode(dest_current_flag,'S',ppevs.current_baseline_date,
6891 decode(dest_current_flag,'Y',sysdate,to_date(null) ) ) --CURRENT_BASELINE_DATE
6892 ,decode(dest_current_flag,'S',ppevs.current_flag,dest_current_flag) --CURRENT_FLAG
6893 ,decode(dest_current_flag,'S',ppevs.current_baseline_person_id,
6894 decode(dest_current_flag,'Y',p_publish_person_id,null) ) --CURRENT_BASELINE_PERSON_ID
6895 ,ppevs.original_baseline_date --ORIGINAL_BASELINE_DATE
6896 ,ppevs.original_flag --ORIGINAL_FLAG
6897 ,ppevs.original_baseline_person_id --ORIGINAL_BASELINE_PERSON_ID
6898 ,'UNLOCKED'
6899 ,null
6900 ,null
6901 ,decode(dest_latest_eff_pub_flag,'Y','STRUCTURE_PUBLISHED','STRUCTURE_WORKING') --STATUS_CODE
6902 ,ppevs.WF_STATUS_CODE
6903 ,dest_latest_eff_pub_flag --LATEST_EFF_PUBLISHED_FLAG
6904 ,ppevs.RECORD_VERSION_NUMBER
6905 ,ppevs.WBS_RECORD_VERSION_NUMBER
6906 ,SYSDATE
6907 ,l_user_id
6908 ,SYSDATE
6909 ,l_user_id
6910 ,l_login_id
6911 ,ppevs.change_reason_code
6912 ,ppevs.process_update_wbs_flag
6913 ,decode(p_shared,'N',ppevs.current_working_flag,'Y') --CURRENT_WROKING_FLAG
6914 --If SPLIT and fin enabled case, copy cw from source, else populate it as Y
6915 ,p_dest_project_id
6916 ,'PA_PROJECTS'
6917 FROM pa_proj_elem_ver_structure ppevs,
6918 pa_proj_element_versions ppev
6919 WHERE ppevs.project_id = p_src_project_id
6920 AND ppevs.element_version_id = l_src_fin_version_id
6921 AND ppev.attribute15 = ppevs.element_version_id
6922 AND ppev.project_id = p_dest_project_id ;
6923
6924 IF (p_commit = FND_API.G_TRUE) THEN
6925 COMMIT;
6926 END IF;
6927
6928 EXCEPTION
6929
6930 WHEN Invalid_Arg_Exc_WP THEN
6931 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
6932 x_msg_count := 1;
6933 x_msg_data := ' PA_PROJ_TASK_STRUC_PUB : copy_src_financial_version : NULL parameters passed';
6934
6935 IF p_commit = FND_API.G_TRUE THEN
6936 ROLLBACK TO copy_src_fin_ver;
6937 END IF;
6938
6939 Fnd_Msg_Pub.add_exc_msg
6940 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
6941 , p_procedure_name => 'copy_src_financial_version'
6942 , p_error_text => x_msg_data);
6943
6944 IF l_debug_mode = 'Y' THEN
6945 Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
6946 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
6947 l_debug_level5);
6948 Pa_Debug.reset_curr_function;
6949 END IF;
6950 RAISE;
6951
6952 WHEN OTHERS THEN
6953 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
6954 x_msg_count := 1;
6955 x_msg_data := SQLERRM;
6956
6957 IF p_commit = FND_API.G_TRUE THEN
6958 ROLLBACK TO copy_src_fin_ver;
6959 END IF;
6960
6961 Fnd_Msg_Pub.add_exc_msg
6962 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
6963 , p_procedure_name => 'copy_src_financial_version'
6964 , p_error_text => x_msg_data);
6965
6966 IF l_debug_mode = 'Y' THEN
6967 Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
6968 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
6969 l_debug_level5);
6970 Pa_Debug.reset_curr_function;
6971 END IF;
6972 RAISE;
6973
6974 END copy_src_financial_version;
6975
6976
6977
6978
6979
6980 -- Procedure : copy_src_financial_ver_tasks
6981 -- Type : PRIVATE
6982 -- Purpose : Contains logic for copying the tasks belonging to the financial version
6983 -- from the source to the destination project
6984 -- Note :
6985 -- Assumptions : All FLAGS and WORKPLAN record(s) have been populated in the global temporary table
6986 -- Parameters Type Required Description and Purpose
6987 -- --------------------------- ------ -------- --------------------------------------------------------
6988 -- p_src_project_id NUMBER Y The source project id
6989 -- p_dest_project_id NUMBER Y The destination project id
6990 -- p_dest_fn_structure_id NUMBER Y The destination project's financial structure id
6991 -- p_shared VARCHAR2 Y Whether source/destination project is shared or not
6992 -- p_copy_ppevSchedules_flag NUMBER Y Whether pa_proj_elem_ver_schedule entry from the source project
6993 -- should be copied into the destination project or not
6994 -- p_target_start_date DATE Y The start date of the destination project
6995 -- p_target_finish_date DATE Y The finish date of the destination project
6996 -- p_calendar_id NUMBER Y The calendar id
6997 PROCEDURE copy_src_financial_ver_tasks( p_api_version IN NUMBER := 1.0
6998 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
6999 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
7000 ,p_validate_only IN VARCHAR2 := FND_API.G_FALSE
7001 ,p_validation_level IN VARCHAR2 := FND_API.G_VALID_LEVEL_FULL
7002 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
7003 ,p_debug_mode IN VARCHAR2 := 'N'
7004 ,p_src_project_id IN NUMBER
7005 ,p_dest_project_id IN NUMBER
7006 ,p_dest_fn_structure_id IN NUMBER
7007 ,p_shared IN VARCHAR2
7008 ,p_copy_ppevSchedules_flag IN VARCHAR2
7009 ,p_target_start_date IN DATE
7010 ,p_target_finish_date IN DATE
7011 ,p_calendar_id IN NUMBER
7012 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7013 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7014 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7015 ) IS
7016 --This cursor retrieves the LATEST PUBLISHED WP version from the source project
7017 CURSOR cur_get_src_fin_version_id IS
7018 SELECT ppev.element_version_id
7019 FROM pa_proj_element_versions ppev,
7020 pa_proj_elem_ver_structure ppevs
7021 WHERE ppev.project_id = p_src_project_id
7022 AND ppev.object_type = 'PA_STRUCTURES'
7023 AND ppev.element_version_id = ppevs.element_version_id
7024 AND ppevs.project_id = p_src_project_id
7025 AND ppevs.latest_eff_published_flag = 'Y';
7026
7027 --This cursor retrieves the CURRENT WORKING WP version from the source project
7028 CURSOR cur_get_src_fin_version_id2 IS
7029 SELECT ppev.element_version_id
7030 FROM pa_proj_element_versions ppev,
7031 pa_proj_elem_ver_structure ppevs
7032 WHERE ppev.project_id = p_src_project_id
7033 AND ppev.object_type = 'PA_STRUCTURES'
7034 AND ppev.element_version_id = ppevs.element_version_id
7035 AND ppevs.project_id = p_src_project_id
7036 AND ppevs.current_working_flag = 'Y';
7037
7038 --This cursor retrieves the version for the financial structure form the source project
7039 CURSOR cur_get_split_fin_ver IS
7040 SELECT ppev.element_version_id
7041 FROM pa_proj_element_versions ppev,
7042 pa_proj_structure_types ppst,
7043 pa_structure_types pst
7044 WHERE ppev.project_id = p_src_project_id
7045 AND ppev.object_type = 'PA_STRUCTURES'
7046 AND ppev.proj_element_id = ppst.proj_element_id
7047 AND ppst.structure_type_id = pst.structure_type_id
7048 AND pst.structure_type = 'FINANCIAL' ;
7049
7050 --This cursor gets the schedule start date from the source project
7051 CURSOR cur_get_src_sch_st_date(c_project_id NUMBER, c_struc_ver_id NUMBER) IS
7052 SELECT scheduled_start_date
7053 FROM pa_proj_elem_ver_schedule
7054 WHERE project_id = c_project_id
7055 AND element_version_id = c_struc_ver_id;
7056
7057 --Bug 3387963 - Cursor to get destination and source project's organization id
7058 CURSOR cur_get_carrying_out_org IS
7059 SELECT old.carrying_out_organization_id,
7060 new.carrying_out_organization_id
7061 FROM pa_projects_all old,
7062 pa_projects_all new
7063 WHERE old.project_id = p_src_project_id
7064 AND new.project_id = p_dest_project_id;
7065
7066 l_old_proj_org_id NUMBER;
7067 l_new_proj_org_id NUMBER;
7068 -- End of code added for bug 3387963
7069
7070 /* Code added for 6211012*/
7071
7072 TYPE typ_obj_rela_id is TABLE OF pa_object_relationships.object_relationship_id%TYPE
7073 INDEX BY BINARY_INTEGER;
7074 l_obj_rel_id typ_obj_rela_id;
7075
7076 TYPE typ_obj_typ_from is TABLE OF pa_object_relationships.object_type_from%TYPE
7077 INDEX BY BINARY_INTEGER;
7078 l_obj_typ_from typ_obj_typ_from;
7079
7080 TYPE typ_obj_from_id is TABLE OF pa_object_relationships.object_id_from1%TYPE
7081 INDEX BY BINARY_INTEGER;
7082 l_obj_from_id typ_obj_from_id;
7083
7084 TYPE typ_obj_typ_to is TABLE OF pa_object_relationships.object_type_to%TYPE
7085 INDEX BY BINARY_INTEGER;
7086 l_obj_typ_to typ_obj_typ_to;
7087
7088 TYPE typ_obj_to_id is TABLE OF pa_object_relationships.object_id_to1%TYPE
7089 INDEX BY BINARY_INTEGER;
7090 l_obj_to_id typ_obj_to_id;
7091
7092 TYPE typ_rel_typ is TABLE OF pa_object_relationships.relationship_type%TYPE
7093 INDEX BY BINARY_INTEGER;
7094 l_rel_typ typ_rel_typ;
7095
7096 TYPE typ_rel_subtyp is TABLE OF pa_object_relationships.relationship_subtype%TYPE
7097 INDEX BY BINARY_INTEGER;
7098 l_rel_subtyp typ_rel_subtyp;
7099
7100 TYPE typ_rec_ver_num is TABLE OF pa_object_relationships.Record_Version_Number%TYPE
7101 INDEX BY BINARY_INTEGER;
7102 l_rec_ver_num typ_rec_ver_num;
7103
7104 TYPE typ_wt_percent is TABLE OF pa_object_relationships.weighting_percentage%TYPE
7105 INDEX BY BINARY_INTEGER;
7106 l_wt_percent typ_wt_percent;
7107
7108
7109 CURSOR cur_pa_obj_rela_1(c_src_fin_version_id NUMBER,
7110 c_dest_project_id NUMBER
7111 ) IS
7112 SELECT
7113 pa_object_relationships_s.nextval,
7114 pobj.object_type_from,
7115 ppev1.element_version_id,
7116 pobj.object_type_to,
7117 ppev2.element_version_id,
7118 pobj.relationship_type,
7119 pobj.relationship_subtype,
7120 pobj.Record_Version_Number,
7121 pobj.weighting_percentage
7122 FROM ( SELECT object_type_from,
7123 object_id_from1,
7124 object_type_to,
7125 object_id_to1,
7126 relationship_type,
7127 relationship_subtype,
7128 Record_Version_Number,
7129 weighting_percentage
7130 FROM pa_object_relationships
7131 START WITH object_id_from1 = c_src_fin_version_id
7132 AND RELATIONSHIP_TYPE = 'S'
7133 CONNECT BY object_id_from1 = PRIOR object_id_to1
7134 AND RELATIONSHIP_TYPE = 'S' ) pobj,
7135 pa_proj_element_versions ppev1,
7136 pa_proj_element_versions ppev2
7137 WHERE ppev1.attribute15 = pobj.object_id_from1
7138 AND ppev2.attribute15 = pobj.object_id_to1
7139 AND ppev1.project_id = c_dest_project_id
7140 AND ppev2.project_id = c_dest_project_id ;
7141
7142 /*End of Code added for 6211012*/
7143
7144 l_debug_mode VARCHAR2(1);
7145 l_debug_level2 CONSTANT NUMBER := 2;
7146 l_debug_level3 CONSTANT NUMBER := 3;
7147 l_debug_level4 CONSTANT NUMBER := 4;
7148 l_debug_level5 CONSTANT NUMBER := 5;
7149
7150 l_src_fin_version_id NUMBER(15);
7151 l_user_id NUMBER := FND_GLOBAL.USER_ID;
7152 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
7153 l_delta NUMBER;
7154 l_src_sch_st_date DATE;
7155
7156 BEGIN
7157
7158
7159 x_msg_count := 0;
7160 x_return_status := FND_API.G_RET_STS_SUCCESS;
7161 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
7162
7163 IF (p_commit = FND_API.G_TRUE) THEN
7164 SAVEPOINT copy_src_fin_ver_tasks;
7165 END IF;
7166
7167 IF p_init_msg_list = FND_API.G_TRUE THEN
7168 FND_MSG_PUB.initialize;
7169 END IF;
7170
7171 IF l_debug_mode = 'Y' THEN
7172 PA_DEBUG.set_curr_function( p_function => 'copy_src_financial_ver_tasks',
7173 p_debug_mode => l_debug_mode );
7174 END IF;
7175
7176 IF l_debug_mode = 'Y' THEN
7177 Pa_Debug.g_err_stage:= 'Printing Input parameters';
7178 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
7179 l_debug_level3);
7180
7181 Pa_Debug.WRITE(G_PKG_NAME,'p_src_project_id'||':'||p_src_project_id,
7182 l_debug_level3);
7183
7184 Pa_Debug.WRITE(G_PKG_NAME,'p_dest_project_id'||':'||p_dest_project_id,
7185 l_debug_level3);
7186
7187 Pa_Debug.WRITE(G_PKG_NAME,'p_dest_fn_structure_id'||':'||p_dest_fn_structure_id,
7188 l_debug_level3);
7189
7190 Pa_Debug.WRITE(G_PKG_NAME,'p_shared'||':'||p_shared,
7191 l_debug_level3);
7192
7193 Pa_Debug.WRITE(G_PKG_NAME,'p_copy_ppevSchedules_flag'||':'||p_copy_ppevSchedules_flag,
7194 l_debug_level3);
7195
7196 Pa_Debug.WRITE(G_PKG_NAME,'p_target_start_date'||':'||p_target_start_date,
7197 l_debug_level3);
7198
7199 Pa_Debug.WRITE(G_PKG_NAME,'p_target_finish_date'||':'||p_target_finish_date,
7200 l_debug_level3);
7201
7202 Pa_Debug.WRITE(G_PKG_NAME,'p_calendar_id'||':'||p_calendar_id,
7203 l_debug_level3);
7204 END IF;
7205
7206 IF l_debug_mode = 'Y' THEN
7207 Pa_Debug.g_err_stage:= 'Validating Input parameters';
7208 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
7209 l_debug_level3);
7210 END IF;
7211
7212 IF ( ( p_src_project_id IS NULL OR p_src_project_id = FND_API.G_MISS_NUM ) AND
7213 ( p_dest_project_id IS NULL OR p_dest_project_id = FND_API.G_MISS_NUM ) AND
7214 ( p_dest_fn_structure_id IS NULL OR p_dest_fn_structure_id = FND_API.G_MISS_NUM ) AND
7215 ( p_shared IS NULL OR p_shared = FND_API.G_MISS_CHAR ) AND
7216 ( p_copy_ppevSchedules_flag IS NULL OR p_copy_ppevSchedules_flag = FND_API.G_MISS_NUM ) AND
7217 ( p_calendar_id IS NULL OR p_calendar_id = FND_API.G_MISS_NUM )
7218 )
7219 THEN
7220 IF l_debug_mode = 'Y' THEN
7221 Pa_Debug.g_err_stage:= 'PA_PROJ_TASK_STRUC_PUB : copy_src_financial_ver_tasks : p_src_project_id,
7222 p_dest_project_id, p_dest_fn_structure_id, p_shared, p_copy_ppevSchedules_flag, p_calendar_id are NULL';
7223 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
7224 l_debug_level3);
7225 END IF;
7226 RAISE Invalid_Arg_Exc_WP;
7227 END IF;
7228
7229 IF 'Y' = p_shared THEN
7230 --Fetch the WP latest published, else the current working in the source project
7231 OPEN cur_get_src_fin_version_id;
7232 FETCH cur_get_src_fin_version_id INTO l_src_fin_version_id;
7233 IF cur_get_src_fin_version_id%NOTFOUND THEN
7234 OPEN cur_get_src_fin_version_id2;
7235 FETCH cur_get_src_fin_version_id2 INTO l_src_fin_version_id;
7236 CLOSE cur_get_src_fin_version_id2;
7237 END IF;
7238 CLOSE cur_get_src_fin_version_id;
7239 ELSE
7240 --Fetch the financial version from the source project
7241 OPEN cur_get_split_fin_ver;
7242 FETCH cur_get_split_fin_ver INTO l_src_fin_version_id;
7243 CLOSE cur_get_split_fin_ver;
7244 END IF;
7245
7246 IF l_debug_mode = 'Y' THEN
7247 Pa_Debug.WRITE(G_PKG_NAME, 'Source financial version id : '||l_src_fin_version_id, l_debug_level3);
7248 END IF;
7249
7250 --Bug 3387963 - Added to get the cursor values
7251 OPEN cur_get_carrying_out_org;
7252 FETCH cur_get_carrying_out_org INTO l_old_proj_org_id, l_new_proj_org_id;
7253 CLOSE cur_get_carrying_out_org;
7254
7255 --Copy tasks belonging to the single financial version in the source project
7256 INSERT INTO pa_proj_elements(
7257 PROJ_ELEMENT_ID
7258 ,PROJECT_ID
7259 ,OBJECT_TYPE
7260 ,ELEMENT_NUMBER
7261 ,NAME
7262 ,DESCRIPTION
7263 ,STATUS_CODE
7264 ,WF_STATUS_CODE
7265 ,PM_SOURCE_CODE
7266 ,PM_SOURCE_REFERENCE
7267 ,CLOSED_DATE
7268 ,LOCATION_ID
7269 ,MANAGER_PERSON_ID
7270 ,CARRYING_OUT_ORGANIZATION_ID
7271 ,TYPE_ID
7272 ,PRIORITY_CODE
7273 ,CREATION_DATE
7274 ,CREATED_BY
7275 ,LAST_UPDATE_DATE
7276 ,LAST_UPDATED_BY
7277 ,LAST_UPDATE_LOGIN
7278 ,RECORD_VERSION_NUMBER
7279 ,REQUEST_ID
7280 ,PROGRAM_APPLICATION_ID
7281 ,PROGRAM_ID
7282 ,PROGRAM_UPDATE_DATE
7283 ,LINK_TASK_FLAG
7284 ,BASELINE_START_DATE
7285 ,BASELINE_FINISH_DATE
7286 ,progress_outdated_flag
7287 ,ATTRIBUTE_CATEGORY
7288 ,ATTRIBUTE1
7289 ,ATTRIBUTE2
7290 ,ATTRIBUTE3
7291 ,ATTRIBUTE4
7292 ,ATTRIBUTE5
7293 ,ATTRIBUTE6
7294 ,ATTRIBUTE7
7295 ,ATTRIBUTE8
7296 ,ATTRIBUTE9
7297 ,ATTRIBUTE10
7298 ,ATTRIBUTE11
7299 ,ATTRIBUTE12
7300 ,ATTRIBUTE13
7301 ,ATTRIBUTE14
7302 ,ATTRIBUTE15
7303 ,parent_structure_id
7304 ,TYPE_CODE
7305 ,INC_PROJ_PROGRESS_FLAG
7306 ,WQ_ITEM_CODE
7307 ,WQ_UOM_CODE
7308 ,WQ_ACTUAL_ENTRY_CODE
7309 ,TASK_PROGRESS_ENTRY_PAGE_ID
7310 ,BASELINE_DURATION
7311 ,PHASE_CODE
7312 ,PHASE_VERSION_ID
7313 ,source_object_id
7314 ,source_object_type
7315 )
7316 SELECT
7317 pt.task_id
7318 ,p_dest_project_id
7319 ,ppe.object_type
7320 ,ppe.element_number
7321 ,ppe.name
7322 ,ppe.DESCRIPTION
7323 ,INITIAL_STATUS_CODE
7324 ,ppe.WF_STATUS_CODE
7325 ,ppe.PM_SOURCE_CODE
7326 ,ppe.PM_SOURCE_REFERENCE
7327 ,ppe.CLOSED_DATE
7328 ,ppe.LOCATION_ID
7329 ,ppe.MANAGER_PERSON_ID
7330 ,decode(ppe.CARRYING_OUT_ORGANIZATION_ID,l_old_proj_org_id, l_new_proj_org_id,
7331 ppe.CARRYING_OUT_ORGANIZATION_ID) -- Bug 3387963
7332 ,ppe.TYPE_ID
7333 ,ppe.PRIORITY_CODE
7334 ,SYSDATE
7335 ,l_user_id
7336 ,SYSDATE
7337 ,l_user_id
7338 ,l_login_id
7339 ,ppe.RECORD_VERSION_NUMBER
7340 ,ppe.REQUEST_ID
7341 ,ppe.PROGRAM_APPLICATION_ID
7342 ,ppe.PROGRAM_ID
7343 ,ppe.PROGRAM_UPDATE_DATE
7344 ,ppe.LINK_TASK_FLAG
7345 ,ppe.BASELINE_START_DATE
7346 ,ppe.BASELINE_FINISH_DATE
7347 ,'N' --,ppe.progress_outdated_flag
7348 ,ppe.ATTRIBUTE_CATEGORY
7349 ,ppe.ATTRIBUTE1
7350 ,ppe.ATTRIBUTE2
7351 ,ppe.ATTRIBUTE3
7352 ,ppe.ATTRIBUTE4
7353 ,ppe.ATTRIBUTE5
7354 ,ppe.ATTRIBUTE6
7355 ,ppe.ATTRIBUTE7
7356 ,ppe.ATTRIBUTE8
7357 ,ppe.ATTRIBUTE9
7358 ,ppe.ATTRIBUTE10
7359 ,ppe.ATTRIBUTE11
7360 ,ppe.ATTRIBUTE12
7361 ,ppe.ATTRIBUTE13
7362 ,ppe.ATTRIBUTE14
7363 ,ppe.proj_element_id --attribute 15 is used to store old ids.
7364 ,p_dest_fn_structure_id --This would be WP/FIN structure id in shared case. FIN structure id in split case
7365 ,ppe.TYPE_CODE
7366 ,ppe.INC_PROJ_PROGRESS_FLAG
7367 ,ppe.WQ_ITEM_CODE
7368 ,ppe.WQ_UOM_CODE
7369 ,ppe.WQ_ACTUAL_ENTRY_CODE
7370 ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
7371 ,ppe.BASELINE_DURATION
7372 ,ppe.PHASE_CODE
7373 ,ppe.PHASE_VERSION_ID
7374 ,p_dest_project_id
7375 ,'PA_PROJECTS'
7376 FROM pa_task_types ptt,
7377 pa_proj_elements ppe,
7378 pa_proj_element_versions ppev,
7379 pa_tasks pt
7380 WHERE pt.project_id = p_dest_project_id
7381 AND ppe.project_id = p_src_project_id --Added by Sunkalya For the fix of Bug#4600825. This change is done for R12
7382 --Merging of code fix done thru Bug#4589176(115.315) for performance issues.
7383 AND pt.task_number = substrb(rtrim(ppe.element_number),1,25) -- Substrb added for Bug 5152448
7384 AND ptt.object_type = 'PA_TASKS'
7385 AND ppe.type_id = ptt.task_type_id
7386 AND ppe.object_type = 'PA_TASKS'
7387 AND nvl(ppe.link_task_flag,'N') <> 'Y' -- 4348868
7388 AND ppe.parent_structure_id = ppev.proj_element_id
7389 AND ppev.element_version_id = l_src_fin_version_id ;
7390
7391 --Copy tasks versions belonging to the single financial version in the source project
7392 INSERT INTO pa_proj_element_versions(
7393 ELEMENT_VERSION_ID
7394 ,PROJ_ELEMENT_ID
7395 ,OBJECT_TYPE
7396 ,PROJECT_ID
7397 ,PARENT_STRUCTURE_VERSION_ID
7398 ,DISPLAY_SEQUENCE
7399 ,WBS_LEVEL
7400 ,WBS_NUMBER
7401 ,CREATION_DATE
7402 ,CREATED_BY
7403 ,LAST_UPDATE_DATE
7404 ,LAST_UPDATED_BY
7405 ,LAST_UPDATE_LOGIN
7406 ,RECORD_VERSION_NUMBER
7407 ,attribute15 --this column is used to store task ver id of the source project's task versions to be used to created relationships.
7408 ,ATTRIBUTE_CATEGORY
7409 ,ATTRIBUTE1
7410 ,ATTRIBUTE2
7411 ,ATTRIBUTE3
7412 ,ATTRIBUTE4
7413 ,ATTRIBUTE5
7414 ,ATTRIBUTE6
7415 ,ATTRIBUTE7
7416 ,ATTRIBUTE8
7417 ,ATTRIBUTE9
7418 ,ATTRIBUTE10
7419 ,ATTRIBUTE11
7420 ,ATTRIBUTE12
7421 ,ATTRIBUTE13
7422 ,ATTRIBUTE14
7423 ,TASK_UNPUB_VER_STATUS_CODE
7424 ,FINANCIAL_TASK_FLAG
7425 ,source_object_id
7426 ,source_object_type
7427 )
7428 SELECT
7429 pa_proj_element_versions_s.nextval
7430 ,ppe.proj_element_id
7431 ,ppev.object_type
7432 ,p_dest_project_id
7433 ,ppev2.element_version_id
7434 ,ppev.DISPLAY_SEQUENCE
7435 ,ppev.WBS_LEVEL
7436 ,ppev.WBS_NUMBER
7437 ,SYSDATE ------CREATION_DATE
7438 ,l_user_id ------CREATED_BY
7439 ,SYSDATE ------LAST_UPDATE_DATE
7440 ,l_user_id ------LAST_UPDATED_BY
7441 ,l_login_id ------LAST_UPDATE_LOGIN
7442 ,ppev.RECORD_VERSION_NUMBER ------RECORD_VERSION_NUMBER
7443 ,ppev.element_version_id -- to help create relationships from source
7444 ,ppev.ATTRIBUTE_CATEGORY
7445 ,ppev.ATTRIBUTE1
7446 ,ppev.ATTRIBUTE2
7447 ,ppev.ATTRIBUTE3
7448 ,ppev.ATTRIBUTE4
7449 ,ppev.ATTRIBUTE5
7450 ,ppev.ATTRIBUTE6
7451 ,ppev.ATTRIBUTE7
7452 ,ppev.ATTRIBUTE8
7453 ,ppev.ATTRIBUTE9
7454 ,ppev.ATTRIBUTE10
7455 ,ppev.ATTRIBUTE11
7456 ,ppev.ATTRIBUTE12
7457 ,ppev.ATTRIBUTE13
7458 ,ppev.ATTRIBUTE14
7459 ,decode( ppevs.status_code, 'STRUCTURE_PUBLISHED', 'PUBLISHED', 'WORKING' )
7460 ,ppev.FINANCIAL_TASK_FLAG
7461 ,p_dest_project_id
7462 ,'PA_PROJECTS'
7463 FROM pa_proj_element_versions ppev,
7464 pa_proj_elements ppe,
7465 pa_proj_element_versions ppev2,
7466 pa_proj_elem_ver_structure ppevs
7467 WHERE ppev.project_id = p_src_project_id
7468 AND ppev.object_type = 'PA_TASKS'
7469 AND ppev.parent_structure_version_id = l_src_fin_version_id
7470 AND ppev.proj_element_id = ppe.attribute15
7471 AND ppe.project_id = p_dest_project_id
7472 AND ppe.object_type = 'PA_TASKS'
7473 AND ppev.parent_structure_version_id = ppev2.attribute15
7474 AND ppev2.project_id = p_dest_project_id
7475 AND ppev2.object_type = 'PA_STRUCTURES'
7476 AND ppevs.project_id = p_dest_project_id
7477 AND ppevs.element_version_id = ppev2.element_version_id ;
7478
7479 IF l_debug_mode = 'Y' THEN
7480 Pa_Debug.WRITE(G_PKG_NAME, 'Creating object relatiionships for financial tasks', l_debug_level3);
7481 END IF;
7482
7483 --Copy relationships for structure and tasks into destination project
7484 /* Start of addition for bug 6211012 */
7485
7486 l_obj_rel_id.delete;
7487 l_obj_typ_from.delete;
7488 l_obj_from_id.delete;
7489 l_obj_typ_to.delete;
7490 l_obj_to_id.delete;
7491 l_rel_typ.delete;
7492 l_rel_subtyp.delete;
7493 l_rec_ver_num.delete;
7494 l_wt_percent.delete;
7495
7496 OPEN cur_pa_obj_rela_1(l_src_fin_version_id,p_dest_project_id);
7497
7498 LOOP
7499
7500 FETCH cur_pa_obj_rela_1
7501 BULK COLLECT INTO
7502 l_obj_rel_id,
7503 l_obj_typ_from,
7504 l_obj_from_id,
7505 l_obj_typ_to,
7506 l_obj_to_id,
7507 l_rel_typ,
7508 l_rel_subtyp,
7509 l_rec_ver_num,
7510 l_wt_percent
7511 LIMIT 1000;
7512
7513 IF l_obj_rel_id.COUNT >0 THEN
7514
7515 FORALL i IN l_obj_rel_id.FIRST..l_obj_rel_id.LAST
7516 insert into PA_OBJECT_RELATIONSHIPS (
7517 object_relationship_id,
7518 object_type_from,
7519 object_id_from1,
7520 object_type_to,
7521 object_id_to1,
7522 relationship_type,
7523 relationship_subtype,
7524 Record_Version_Number,
7525 CREATED_BY,
7526 CREATION_DATE,
7527 LAST_UPDATED_BY,
7528 LAST_UPDATE_DATE,
7529 LAST_UPDATE_LOGIN,
7530 weighting_percentage
7531 )
7532 values(
7533 l_obj_rel_id(i),
7534 l_obj_typ_from(i),
7535 l_obj_from_id(i),
7536 l_obj_typ_to(i),
7537 l_obj_to_id(i),
7538 l_rel_typ(i),
7539 l_rel_subtyp(i),
7540 l_rec_ver_num(i),
7541 l_user_id,
7542 SYSDATE,
7543 l_user_id,
7544 SYSDATE,
7545 l_login_id,
7546 l_wt_percent(i)
7547 );
7548
7549 END IF;
7550
7551 EXIT WHEN l_obj_rel_id.COUNT < 1000 ;
7552 END LOOP;
7553
7554 l_obj_rel_id.delete;
7555 l_obj_typ_from.delete;
7556 l_obj_from_id.delete;
7557 l_obj_typ_to.delete;
7558 l_obj_to_id.delete;
7559 l_rel_typ.delete;
7560 l_rel_subtyp.delete;
7561 l_rec_ver_num.delete;
7562 l_wt_percent.delete;
7563
7564 CLOSE cur_pa_obj_rela_1;
7565
7566 /*
7567
7568 INSERT INTO PA_OBJECT_RELATIONSHIPS (
7569 object_relationship_id
7570 ,object_type_from
7571 ,object_id_from1
7572 ,object_type_to
7573 ,object_id_to1
7574 ,relationship_type
7575 ,relationship_subtype
7576 ,Record_Version_Number
7577 ,CREATED_BY
7578 ,CREATION_DATE
7579 ,LAST_UPDATED_BY
7580 ,LAST_UPDATE_DATE
7581 ,LAST_UPDATE_LOGIN
7582 ,weighting_percentage
7583 )
7584 SELECT
7585 pa_object_relationships_s.nextval
7586 ,pobj.object_type_from
7587 ,ppev1.element_version_id
7588 ,pobj.object_type_to
7589 ,ppev2.element_version_id
7590 ,pobj.relationship_type
7591 ,pobj.relationship_subtype
7592 ,pobj.Record_Version_Number
7593 ,l_user_id
7594 ,SYSDATE
7595 ,l_user_id
7596 ,SYSDATE
7597 ,l_login_id
7598 ,pobj.weighting_percentage
7599 FROM
7600 ( SELECT object_type_from,
7601 object_id_from1,
7602 object_type_to,
7603 object_id_to1,
7604 relationship_type,
7605 relationship_subtype,
7606 Record_Version_Number,
7607 weighting_percentage
7608 FROM pa_object_relationships
7609 START WITH object_id_from1 = l_src_fin_version_id
7610 AND RELATIONSHIP_TYPE = 'S'
7611 CONNECT BY object_id_from1 = PRIOR object_id_to1
7612 AND RELATIONSHIP_TYPE = 'S' ) pobj,
7613 pa_proj_element_versions ppev1,
7614 pa_proj_element_versions ppev2
7615 WHERE ppev1.attribute15 = pobj.object_id_from1
7616 AND ppev2.attribute15 = pobj.object_id_to1
7617 AND ppev1.project_id = p_dest_project_id
7618 AND ppev2.project_id = p_dest_project_id ;
7619 */
7620 /* End of changes for bug 6211012 */
7621
7622 IF 'Y' = p_copy_ppevSchedules_flag THEN
7623
7624 --calculate delta before inserting schedule rows
7625 --select source structure version scheduled start date
7626 IF (p_target_start_date IS NULL) THEN
7627 l_delta := 0;
7628 ELSE
7629 OPEN cur_get_src_sch_st_date( p_src_project_id, l_src_fin_version_id );
7630 FETCH cur_get_src_sch_st_date INTO l_src_sch_st_date;
7631 CLOSE cur_get_src_sch_st_date;
7632 l_delta := p_target_start_date - l_src_sch_st_date;
7633 END IF;
7634
7635 --Copy entries into pa_proj_elem_ver_schedule
7636 INSERT INTO pa_proj_elem_ver_schedule(
7637 PEV_SCHEDULE_ID
7638 ,ELEMENT_VERSION_ID
7639 ,PROJECT_ID
7640 ,PROJ_ELEMENT_ID
7641 ,CREATION_DATE
7642 ,CREATED_BY
7643 ,LAST_UPDATE_DATE
7644 ,LAST_UPDATED_BY
7645 ,SCHEDULED_START_DATE
7646 ,SCHEDULED_FINISH_DATE
7647 ,OBLIGATION_START_DATE
7648 ,OBLIGATION_FINISH_DATE
7649 ,ACTUAL_START_DATE
7650 ,ACTUAL_FINISH_DATE
7651 ,ESTIMATED_START_DATE
7652 ,ESTIMATED_FINISH_DATE
7653 ,DURATION
7654 ,EARLY_START_DATE
7655 ,EARLY_FINISH_DATE
7656 ,LATE_START_DATE
7657 ,LATE_FINISH_DATE
7658 ,CALENDAR_ID
7659 ,MILESTONE_FLAG
7660 ,CRITICAL_FLAG
7661 ,RECORD_VERSION_NUMBER
7662 ,LAST_UPDATE_LOGIN
7663 ,WQ_PLANNED_QUANTITY
7664 ,PLANNED_EFFORT
7665 ,ACTUAL_DURATION
7666 ,ESTIMATED_DURATION
7667 ,ATTRIBUTE_CATEGORY
7668 ,ATTRIBUTE1
7669 ,ATTRIBUTE2
7670 ,ATTRIBUTE3
7671 ,ATTRIBUTE4
7672 ,ATTRIBUTE5
7673 ,ATTRIBUTE6
7674 ,ATTRIBUTE7
7675 ,ATTRIBUTE8
7676 ,ATTRIBUTE9
7677 ,ATTRIBUTE10
7678 ,ATTRIBUTE11
7679 ,ATTRIBUTE12
7680 ,ATTRIBUTE13
7681 ,ATTRIBUTE14
7682 ,ATTRIBUTE15
7683 ,source_object_id
7684 ,source_object_type
7685 )
7686 SELECT
7687 pa_proj_elem_ver_schedule_s.nextval
7688 ,ppev1.ELEMENT_VERSION_ID
7689 ,p_dest_project_id
7690 ,ppev1.PROJ_ELEMENT_ID
7691 ,SYSDATE
7692 ,l_user_id
7693 ,SYSDATE
7694 ,l_user_id
7695 ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date,
7696 p_target_finish_date,
7697 l_delta,
7698 ppevs.SCHEDULED_START_DATE,
7699 null )
7700 ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date,
7701 p_target_finish_date,
7702 l_delta,
7703 ppevs.SCHEDULED_START_DATE,
7704 SCHEDULED_FINISH_DATE )
7705 ,ppevs.OBLIGATION_START_DATE
7706 ,ppevs.OBLIGATION_FINISH_DATE
7707 ,null
7708 ,null
7709 ,null
7710 ,null
7711 ,ppevs.DURATION
7712 ,ppevs.EARLY_START_DATE
7713 ,ppevs.EARLY_FINISH_DATE
7714 ,ppevs.LATE_START_DATE
7715 ,ppevs.LATE_FINISH_DATE
7716 ,p_calendar_id
7717 ,ppevs.MILESTONE_FLAG
7718 ,ppevs.CRITICAL_FLAG
7719 ,ppevs.RECORD_VERSION_NUMBER
7720 ,l_login_id
7721 ,ppevs.WQ_PLANNED_QUANTITY
7722 ,ppevs.PLANNED_EFFORT
7723 ,ppevs.ACTUAL_DURATION
7724 ,ppevs.ESTIMATED_DURATION
7725 ,ppevs.ATTRIBUTE_CATEGORY
7726 ,ppevs.ATTRIBUTE1
7727 ,ppevs.ATTRIBUTE2
7728 ,ppevs.ATTRIBUTE3
7729 ,ppevs.ATTRIBUTE4
7730 ,ppevs.ATTRIBUTE5
7731 ,ppevs.ATTRIBUTE6
7732 ,ppevs.ATTRIBUTE7
7733 ,ppevs.ATTRIBUTE8
7734 ,ppevs.ATTRIBUTE9
7735 ,ppevs.ATTRIBUTE10
7736 ,ppevs.ATTRIBUTE11
7737 ,ppevs.ATTRIBUTE12
7738 ,ppevs.ATTRIBUTE13
7739 ,ppevs.ATTRIBUTE14
7740 ,ppevs.ATTRIBUTE15
7741 ,p_dest_project_id
7742 ,'PA_PROJECTS'
7743 FROM pa_proj_elem_ver_schedule ppevs,
7744 pa_proj_element_versions ppev1,
7745 pa_proj_element_versions ppev2
7746 WHERE ppev1.project_id = p_dest_project_id
7747 AND ppev1.attribute15 = ppevs.element_version_id
7748 AND ppevs.project_id = p_src_project_id
7749 AND ppev1.attribute15 = ppev2.element_version_id
7750 AND ppev2.project_id = p_src_project_id
7751 AND ppev2.parent_structure_version_id = l_src_fin_version_id ;
7752 END IF; --If p_copy_ppevSchedules_flag = 'Y'
7753
7754 IF (p_commit = FND_API.G_TRUE) THEN
7755 COMMIT;
7756 END IF;
7757
7758 IF l_debug_mode = 'Y' THEN
7759 Pa_Debug.WRITE(G_PKG_NAME, 'Exiting copy_src_financial_ver_tasks...', l_debug_level3);
7760 END IF;
7761 EXCEPTION
7762
7763 WHEN Invalid_Arg_Exc_WP THEN
7764 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
7765 x_msg_count := 1;
7766 x_msg_data := ' PA_PROJ_TASK_STRUC_PUB : copy_src_financial_ver_tasks : NULL parameters passed';
7767
7768 IF p_commit = FND_API.G_TRUE THEN
7769 ROLLBACK TO copy_src_fin_ver_tasks;
7770 END IF;
7771
7772 Fnd_Msg_Pub.add_exc_msg
7773 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
7774 , p_procedure_name => 'copy_src_financial_ver_tasks'
7775 , p_error_text => x_msg_data);
7776
7777 IF l_debug_mode = 'Y' THEN
7778 Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
7779 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
7780 l_debug_level5);
7781 Pa_Debug.reset_curr_function;
7782 END IF;
7783 RAISE;
7784
7785 WHEN OTHERS THEN
7786 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
7787 x_msg_count := 1;
7788 x_msg_data := SQLERRM;
7789
7790 IF p_commit = FND_API.G_TRUE THEN
7791 ROLLBACK TO copy_src_fin_ver_tasks;
7792 END IF;
7793
7794 Fnd_Msg_Pub.add_exc_msg
7795 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
7796 , p_procedure_name => 'copy_src_financial_ver_tasks'
7797 , p_error_text => x_msg_data);
7798
7799 IF l_debug_mode = 'Y' THEN
7800 Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
7801 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
7802 l_debug_level5);
7803 Pa_Debug.reset_curr_function;
7804 END IF;
7805 RAISE;
7806
7807 END copy_src_financial_ver_tasks;
7808
7809
7810
7811
7812 -- Procedure : copy_structures_tasks_bulk
7813 -- Type : PUBLIC
7814 -- Purpose : Contains logic for copying WP/FIN structures, versions and tasks alongwith
7815 -- intra and inter project dependencies, mapping, deliverables etc.
7816 -- All this is done only for the SELECTED or DEFAULTED versions that are present
7817 -- in the global temporary table PA_PROJECT_COPY_OPTIONS_TMP
7818 -- Note : **** THIS API HAS BEEN RE-WRITTEN FOR FPM ****
7819 -- Assumptions : All FLAGS and WORKPLAN record(s) have been populated in the global temporary table
7820 -- Parameters Type Required Description and Purpose
7821 -- --------------------------- ------ -------- --------------------------------------------------------
7822 -- p_src_project_id NUMBER Y The source project id
7823 -- p_dest_project_id NUMBER Y The destination project id
7824 -- p_delta NUMBER N
7825 -- p_dest_template_flag VARCHAR2 N Whether destination is a template or not
7826 -- p_dest_project_name VARCHAR2 Y The name of the destination project
7827 -- p_target_start_date DATE Y The start date of the destination project
7828 -- p_target_finish_date DATE Y The finish date of the destination project
7829 -- p_calendar_id NUMBER Y The calendar id
7830 PROCEDURE copy_structures_tasks_bulk
7831 ( p_api_version IN NUMBER := 1.0
7832 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
7833 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
7834 ,p_validate_only IN VARCHAR2 := FND_API.G_FALSE
7835 ,p_validation_level IN VARCHAR2 := FND_API.G_VALID_LEVEL_FULL
7836 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
7837 ,p_debug_mode IN VARCHAR2 := 'N'
7838 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7839 ,p_src_project_id IN NUMBER
7840 ,p_dest_project_id IN NUMBER
7841 ,p_delta IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7842 ,p_copy_task_flag IN VARCHAR2 := 'Y' /**NOT USED **/
7843 ,p_dest_template_flag IN VARCHAR2 := 'N'
7844 ,p_src_template_flag IN VARCHAR2 := 'N' /**NOT USED **/
7845 ,p_dest_project_name IN VARCHAR2
7846 ,p_target_start_date IN DATE
7847 ,p_target_finish_date IN DATE
7848 ,p_calendar_id IN NUMBER
7849 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7850 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7851 ,x_msg_data OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
7852
7853 --This cursor fetches the workplan structure attributes
7854 CURSOR cur_get_wp_attr IS
7855 SELECT ppwa.WP_ENABLE_VERSION_FLAG
7856 FROM pa_proj_workplan_attr ppwa
7857 ,pa_proj_structure_types ppst
7858 ,pa_structure_types pst
7859 WHERE ppwa.project_id = p_src_project_id
7860 AND ppwa.proj_element_id = ppst.proj_element_id
7861 AND ppst.structure_type_id = pst.structure_type_id
7862 AND pst.structure_type = 'WORKPLAN';
7863
7864 --This cursor determines if atleast one WP version has been selected by the user
7865 CURSOR cur_min_one_wp_version_sel IS
7866 SELECT 'Y'
7867 FROM dual
7868 WHERE EXISTS( SELECT 'Y'
7869 FROM PA_PROJECT_COPY_OPTIONS_TMP
7870 WHERE CONTEXT = 'WORKPLAN'
7871 AND VERSION_ID IS NOT NULL) ;
7872
7873 --This cursor retrieves the values of various flags from the global temporary table
7874 CURSOR cur_get_flag(c_flag_name IN VARCHAR2) IS
7875 SELECT FLAG
7876 FROM PA_PROJECT_COPY_OPTIONS_TMP
7877 WHERE CONTEXT = c_flag_name ;
7878
7879 --This cursor is used to retrieve the destination project's WP/FIN structure id
7880 CURSOR cur_get_dest_structure_id( c_structure_type IN VARCHAR2 ) IS
7881 SELECT ppe.proj_element_id,
7882 ppe.attribute15
7883 FROM pa_proj_elements ppe,
7884 pa_proj_structure_types ppst,
7885 pa_structure_types pst
7886 WHERE ppe.project_id = p_dest_project_id
7887 AND ppe.object_type = 'PA_STRUCTURES'
7888 AND ppe.proj_element_id = ppst.proj_element_id
7889 AND ppst.structure_type_id = pst.structure_type_id
7890 AND pst.structure_type = c_structure_type ;
7891
7892 CURSOR cur_get_person_id(c_user_id NUMBER) IS
7893 SELECT p.person_id
7894 FROM per_all_people_f p,
7895 fnd_user f
7896 WHERE f.employee_id = p.person_id
7897 AND sysdate between p.effective_start_date and p.effective_end_date
7898 AND f.user_id = c_user_id;
7899
7900 --This cursor retrieves all the WP versions of the destination project
7901 CURSOR cur_get_dest_wp_struc_versions(c_dest_wp_struc_id IN NUMBER) IS
7902 SELECT ppev.element_version_id
7903 ,ppev.attribute15
7904 ,ppcot.flag
7905 FROM pa_proj_element_versions ppev,
7906 pa_project_copy_options_tmp ppcot
7907 WHERE ppev.project_id = p_dest_project_id
7908 AND ppev.proj_element_id = c_dest_wp_struc_id
7909 AND ppev.attribute15 = ppcot.version_id
7910 AND ppcot.context = 'WORKPLAN' ;
7911
7912 --This cursor gets the schedule start date from the source project
7913 CURSOR cur_get_src_sch_st_date(c_project_id NUMBER, c_struc_ver_id NUMBER) IS
7914 SELECT scheduled_start_date
7915 FROM pa_proj_elem_ver_schedule
7916 WHERE project_id = c_project_id
7917 AND element_version_id = c_struc_ver_id;
7918
7919 CURSOR cur_get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
7920 SELECT nvl(max(version_number),0)+1
7921 FROM pa_proj_elem_ver_structure
7922 WHERE project_id = c_project_id
7923 AND proj_element_id = c_proj_element_id
7924 AND status_code <> 'STRUCTURE_PUBLISHED';
7925
7926 --This cursor will retrieve the destination project's shared structure id
7927 CURSOR cur_get_shared_struc_id IS
7928 SELECT ppe.proj_element_id,
7929 ppe.attribute15
7930 FROM pa_proj_elements ppe
7931 WHERE ppe.project_id = p_dest_project_id
7932 AND ppe.object_type = 'PA_STRUCTURES'
7933 AND PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y' ;
7934
7935 --This cursor will retrieve the single version id created for the shared structure
7936 CURSOR cur_get_shared_ver_id IS
7937 SELECT ppev.element_version_id
7938 FROM pa_proj_element_versions ppev
7939 WHERE ppev.project_id = p_dest_project_id
7940 AND ppev.object_type = 'PA_STRUCTURES'
7941 AND PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppev.proj_element_id ) = 'Y' ;
7942
7943 --This cursor gets the copied tasks' proj_element_id
7944 CURSOR cur_get_copied_tasks( c_dest_parent_structure_id IN NUMBER ) IS
7945 SELECT dest.attribute15 src_ppe_id,
7946 dest.proj_element_id dest_ppe_id
7947 FROM pa_proj_elements dest
7948 WHERE dest.project_id = p_dest_project_id
7949 AND dest.object_type = 'PA_TASKS'
7950 AND dest.parent_structure_id = c_dest_parent_structure_id ;
7951
7952 --Bug 3387963 - Cursor to get destination and source project's organization id
7953 CURSOR cur_get_carrying_out_org IS
7954 SELECT old.carrying_out_organization_id,
7955 new.carrying_out_organization_id
7956 FROM pa_projects_all old,
7957 pa_projects_all new
7958 WHERE old.project_id = p_src_project_id
7959 AND new.project_id = p_dest_project_id;
7960
7961 /*Included by avaithia for Bug 3922019*/
7962 CURSOR c_template_flag(l_prj_id IN NUMBER) IS
7963 SELECT template_flag
7964 FROM pa_projects_all
7965 WHERE project_id = l_prj_id ;
7966
7967 CURSOR c_only_wp_ver_id(l_proj_id IN NUMBER) IS
7968 SELECT ppv.element_version_id
7969 FROM pa_proj_element_versions ppv ,
7970 pa_proj_structure_types pps,
7971 pa_structure_types pst
7972 WHERE ppv.proj_element_id = pps.proj_element_id
7973 AND ppv.object_type = 'PA_STRUCTURES'
7974 AND pps.structure_type_id = pst.structure_type_id
7975 AND pst.structure_type = 'WORKPLAN'
7976 AND ppv.project_id = l_proj_id ;
7977
7978 l_template_flag PA_PROJECTS_ALL.template_flag%TYPE ;
7979 l_only_wp_ver_id PA_PROJ_ELEMENT_VERSIONS.element_version_id%TYPE ;
7980
7981 /*End of declaration included by avaithia for Bug 3922019*/
7982
7983 l_old_proj_org_id NUMBER;
7984 l_new_proj_org_id NUMBER;
7985 -- End of code added for bug 3387963
7986
7987 l_return_status VARCHAR2(1);
7988 l_msg_count NUMBER;
7989 l_msg_data VARCHAR2(250);
7990 l_debug_mode VARCHAR2(1);
7991 l_data VARCHAR2(2000);
7992 l_msg_index_out NUMBER;
7993 l_debug_level2 CONSTANT NUMBER := 2;
7994 l_debug_level3 CONSTANT NUMBER := 3;
7995 l_debug_level4 CONSTANT NUMBER := 4;
7996 l_debug_level5 CONSTANT NUMBER := 5;
7997
7998 l_workplan_enabled VARCHAR2(1) := 'N';
7999 l_fin_enabled VARCHAR2(1) := 'N';
8000 l_dlv_enabled VARCHAR2(1) := 'N';
8001 l_shared VARCHAR2(1) := 'N';
8002 l_versioning_enabled VARCHAR2(1) := 'N';
8003 l_min_one_wp_ver_sel VARCHAR2(1) := 'N';
8004 l_fin_tasks_flag VARCHAR2(1) := 'Y';
8005
8006 l_wp_deliverables_flag VARCHAR2(1);
8007 l_wp_dlv_item_det_flag VARCHAR2(1);
8008 l_wp_dlv_attach_flag VARCHAR2(1);
8009 l_wp_dlv_assoc_task_flag VARCHAR2(1);
8010
8011 l_suffix VARCHAR2(250);
8012 l_append VARCHAR2(10) := ': ';
8013 l_name VARCHAR2(250);
8014 l_user_id NUMBER := FND_GLOBAL.USER_ID;
8015 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
8016 l_dest_wp_structure_id NUMBER;
8017 l_src_wp_structure_id NUMBER;
8018 l_dest_fn_structure_id NUMBER;
8019 l_src_fn_structure_id NUMBER;
8020 l_dest_shared_struc_id NUMBER;
8021 l_src_shared_struc_id NUMBER;
8022
8023 l_publish_person_id NUMBER;
8024 l_cw_version_id NUMBER(15) := NULL;
8025 l_dest_status_code VARCHAR(150);
8026 l_dest_latest_eff_pub_flag VARCHAR2(1) := 'N';
8027 l_dest_current_working_flag VARCHAR2(1) := 'N';
8028 l_shared_make_working_copy NUMBER(15);
8029 l_new_wp_ver_id NUMBER(15);
8030 l_prefix VARCHAR2(240);
8031
8032 l_default_lat_pub_and_cw_flag VARCHAR2(1) := 'N';
8033 l_delta NUMBER;
8034 l_src_sch_st_date DATE;
8035 l_shared_dest_ver_id NUMBER(15);
8036 l_struc_ver_number NUMBER;
8037 l_dest_latest_pub_ver_id NUMBER;
8038 l_wp_task_attach_flag VARCHAR2(1);
8039 l_fn_task_attach_flag VARCHAR2(1);
8040
8041 rec_dest_wp_struc_versions cur_get_dest_wp_struc_versions%ROWTYPE;
8042
8043 --bug 3907862, start
8044 l_struct_version_number NUMBER;
8045 --bug 3912603, Satish, start
8046 x_pev_schedule_id NUMBER;
8047 check_str_sel_flag VARCHAR2(1) := 'N';
8048 --bug 3912603, Satish, end
8049
8050 cursor get_published_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
8051 select nvl(max(version_number),0)+1
8052 from pa_proj_elem_ver_structure
8053 where project_id = c_project_id
8054 and proj_element_id = c_proj_element_id
8055 and status_code = 'STRUCTURE_PUBLISHED';
8056
8057 cursor get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
8058 select nvl(max(version_number),0)+1
8059 from pa_proj_elem_ver_structure
8060 where project_id = c_project_id
8061 and proj_element_id = c_proj_element_id
8062 and status_code <> 'STRUCTURE_PUBLISHED';
8063 --bug 3907862, end
8064
8065 --3916763 Begin
8066 CURSOR c_get_approval_options IS
8067 SELECT wp_approval_reqd_flag, wp_auto_publish_flag, wp_approver_source_id
8068 FROM PA_PROJ_WORKPLAN_ATTR ppwa
8069 , PA_PROJ_STRUCTURE_TYPES ppst
8070 , PA_STRUCTURE_TYPES pst
8071 WHERE ppwa.PROJECT_ID = p_src_project_id
8072 AND ppwa.PROJ_ELEMENT_ID = ppst.PROJ_ELEMENT_ID
8073 AND ppst.structure_type_id = pst.structure_type_id
8074 and pst.structure_type = 'WORKPLAN';
8075 l_wp_approval_reqd_flag VARCHAR2(1);
8076 l_wp_auto_publish_flag VARCHAR2(1);
8077 l_wp_approver_source_id NUMBER;
8078 l_submit_wf_required VARCHAR2(1);
8079 l_submit_wf_str_version_id NUMBER;
8080 l_submit_wf_str_id NUMBER;
8081 l_puc_version_id NUMBER(15);
8082 l_current_working_selected NUMBER(15) := NULL;
8083 --3916763 End
8084
8085 /* Code added for 6211012*/
8086
8087 TYPE typ_obj_rela_id is TABLE OF pa_object_relationships.object_relationship_id%TYPE
8088 INDEX BY BINARY_INTEGER;
8089 l_obj_rel_id typ_obj_rela_id;
8090
8091 TYPE typ_obj_typ_from is TABLE OF pa_object_relationships.object_type_from%TYPE
8092 INDEX BY BINARY_INTEGER;
8093 l_obj_typ_from typ_obj_typ_from;
8094
8095 TYPE typ_obj_from_id is TABLE OF pa_object_relationships.object_id_from1%TYPE
8096 INDEX BY BINARY_INTEGER;
8097 l_obj_from_id typ_obj_from_id;
8098
8099 TYPE typ_obj_typ_to is TABLE OF pa_object_relationships.object_type_to%TYPE
8100 INDEX BY BINARY_INTEGER;
8101 l_obj_typ_to typ_obj_typ_to;
8102
8103 TYPE typ_obj_to_id is TABLE OF pa_object_relationships.object_id_to1%TYPE
8104 INDEX BY BINARY_INTEGER;
8105 l_obj_to_id typ_obj_to_id;
8106
8107 TYPE typ_rel_typ is TABLE OF pa_object_relationships.relationship_type%TYPE
8108 INDEX BY BINARY_INTEGER;
8109 l_rel_typ typ_rel_typ;
8110
8111 TYPE typ_rel_subtyp is TABLE OF pa_object_relationships.relationship_subtype%TYPE
8112 INDEX BY BINARY_INTEGER;
8113 l_rel_subtyp typ_rel_subtyp;
8114
8115 TYPE typ_rec_ver_num is TABLE OF pa_object_relationships.Record_Version_Number%TYPE
8116 INDEX BY BINARY_INTEGER;
8117 l_rec_ver_num typ_rec_ver_num;
8118
8119 TYPE typ_wt_percent is TABLE OF pa_object_relationships.weighting_percentage%TYPE
8120 INDEX BY BINARY_INTEGER;
8121 l_wt_percent typ_wt_percent;
8122
8123
8124 CURSOR cur_pa_obj_rela_2(c_src_str_version_id NUMBER,
8125 c_struc_version_id NUMBER
8126 ) IS
8127 SELECT /*+ USE_HASH(ppev2 ppev1)*/
8128 pa_object_relationships_s.nextval,
8129 pobj.object_type_from,
8130 ppev1.element_version_id,
8131 pobj.object_type_to,
8132 ppev2.element_version_id,
8133 pobj.relationship_type,
8134 pobj.relationship_subtype,
8135 pobj.Record_Version_Number,
8136 pobj.weighting_percentage
8137 FROM ( SELECT object_type_from, object_id_from1,
8138 object_type_to, object_id_to1,
8139 relationship_type, relationship_subtype,
8140 Record_Version_Number, weighting_percentage
8141 FROM pa_object_relationships
8142 START WITH object_id_from1 = c_src_str_version_id
8143 AND RELATIONSHIP_TYPE = 'S'
8144 CONNECT BY object_id_from1 = PRIOR object_id_to1
8145 AND RELATIONSHIP_TYPE = 'S' ) pobj,
8146 pa_proj_element_versions ppev1,
8147 pa_proj_element_versions ppev2
8148 WHERE ppev1.attribute15 = pobj.object_id_from1
8149 AND ppev2.attribute15 = pobj.object_id_to1
8150 AND ppev1.parent_structure_version_id = c_struc_version_id
8151 AND ppev2.parent_structure_version_id = c_struc_version_id ;
8152
8153 /*End of Code added for 6211012*/
8154
8155 -- gboomina added for bug 9659119 - start
8156 cursor get_record_version_number(c_project_id NUMBER, c_structure_version_id NUMBER) IS
8157 select record_version_number
8158 from pa_proj_elem_ver_structure
8159 where project_id = c_project_id
8160 and element_version_id = c_structure_version_id;
8161
8162 l_record_version_number NUMBER;
8163 -- gboomina added for bug 9659119 - end
8164
8165 l_Cbs_Enabled VARCHAR2(1) := 'N'; -- Added for 16470603
8166
8167 BEGIN
8168
8169 x_msg_count := 0;
8170 x_return_status := FND_API.G_RET_STS_SUCCESS;
8171 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
8172
8173 IF (p_commit = FND_API.G_TRUE) THEN
8174 SAVEPOINT copy_struc_tasks_bulk;
8175 END IF;
8176
8177 IF p_init_msg_list = FND_API.G_TRUE THEN
8178 FND_MSG_PUB.initialize;
8179 END IF;
8180
8181 IF l_debug_mode = 'Y' THEN
8182 PA_DEBUG.set_curr_function( p_function => 'copy_structures_tasks_bulk',
8183 p_debug_mode => l_debug_mode );
8184 END IF;
8185
8186 IF l_debug_mode = 'Y' THEN
8187 Pa_Debug.g_err_stage:= 'Printing Input parameters';
8188 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
8189 l_debug_level3);
8190
8191 Pa_Debug.WRITE(G_PKG_NAME,'p_src_project_id'||':'||p_src_project_id,
8192 l_debug_level3);
8193
8194 Pa_Debug.WRITE(G_PKG_NAME,'p_dest_project_id'||':'||p_dest_project_id,
8195 l_debug_level3);
8196
8197 Pa_Debug.WRITE(G_PKG_NAME,'p_delta'||':'||p_delta,
8198 l_debug_level3);
8199
8200 Pa_Debug.WRITE(G_PKG_NAME,'p_copy_task_flag'||':'||p_copy_task_flag,
8201 l_debug_level3);
8202
8203 Pa_Debug.WRITE(G_PKG_NAME,'p_dest_template_flag'||':'||p_dest_template_flag,
8204 l_debug_level3);
8205
8206 Pa_Debug.WRITE(G_PKG_NAME,'p_src_template_flag'||':'||p_src_template_flag,
8207 l_debug_level3);
8208
8209 Pa_Debug.WRITE(G_PKG_NAME,'p_dest_project_name'||':'||p_dest_project_name,
8210 l_debug_level3);
8211
8212 Pa_Debug.WRITE(G_PKG_NAME,'p_target_start_date'||':'||p_target_start_date,
8213 l_debug_level3);
8214
8215 Pa_Debug.WRITE(G_PKG_NAME,'p_target_finish_date'||':'||p_target_finish_date,
8216 l_debug_level3);
8217
8218 Pa_Debug.WRITE(G_PKG_NAME,'p_calendar_id'||':'||p_calendar_id,
8219 l_debug_level3);
8220 END IF;
8221
8222 --If source and destination project are the same
8223 IF p_src_project_id = p_dest_project_id THEN
8224 x_return_status := FND_API.G_RET_STS_SUCCESS;
8225 RETURN;
8226 END IF;
8227
8228 --Check whether WP structure is enabled for the source project
8229 l_workplan_enabled := PA_PROJECT_STRUCTURE_UTILS.check_workplan_enabled( p_src_project_id );
8230 --Check whether Financial structure is enabled for the source project
8231 l_fin_enabled := PA_PROJECT_STRUCTURE_UTILS.check_financial_enabled( p_src_project_id );
8232 IF NVL( l_workplan_enabled, 'N' ) = 'Y' THEN
8233 --Check whether the structures are shared or not in the source project
8234 l_shared := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_src_project_id);
8235 --Retrieve whether versioning is enabled or not
8236 OPEN cur_get_wp_attr;
8237 FETCH cur_get_wp_attr INTO l_versioning_enabled;
8238 CLOSE cur_get_wp_attr;
8239 END IF;
8240
8241 --Check whether deliverables is enabled
8242 l_dlv_enabled := PA_PROJECT_STRUCTURE_UTILS.check_Deliverable_enabled(p_src_project_id);
8243
8244 --If deliverables is enabled, retrieve the various deliverables flags
8245 IF 'Y' = l_dlv_enabled THEN
8246 OPEN cur_get_flag('WP_DELIVERABLES_FLAG');
8247 FETCH cur_get_flag INTO l_wp_deliverables_flag;
8248 CLOSE cur_get_flag;
8249
8250 OPEN cur_get_flag('WP_DLV_ITEM_DET_FLAG');
8251 FETCH cur_get_flag INTO l_wp_dlv_item_det_flag;
8252 CLOSE cur_get_flag;
8253
8254 OPEN cur_get_flag('WP_DLV_ATTACH_FLAG');
8255 FETCH cur_get_flag INTO l_wp_dlv_attach_flag;
8256 CLOSE cur_get_flag;
8257
8258 OPEN cur_get_flag('WP_DLV_ASSOC_TASK_FLAG');
8259 FETCH cur_get_flag INTO l_wp_dlv_assoc_task_flag;
8260 CLOSE cur_get_flag;
8261 END IF;
8262
8263 --If both workplan and financial structures are disabled, we only need to copy deliverables and return
8264 IF 'N' = l_workplan_enabled AND 'N' = l_fin_enabled THEN
8265 --If deliverables is enabled and deliverables are selected for copying
8266 IF ( 'Y' = l_dlv_enabled AND 'Y' = l_wp_deliverables_flag ) THEN
8267
8268 PA_DELIVERABLE_PUB.copy_deliverables
8269 (p_source_project_id => p_src_project_id
8270 ,p_target_project_id => p_dest_project_id
8271 ,p_item_details_flag => l_wp_dlv_item_det_flag
8272 ,p_dlv_actions_flag => 'Y'
8273 ,p_dlv_attachments_flag => l_wp_dlv_attach_flag
8274 ,p_association_flag => l_wp_dlv_assoc_task_flag
8275 ,p_prefix => 'CP'
8276 ,p_delta => p_delta
8277 ,p_calling_context => 'COPY_PROJECT'
8278 ,x_return_status => x_return_status
8279 ,x_msg_count => x_msg_count
8280 ,x_Msg_data => x_msg_data
8281 );
8282
8283 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8284 RAISE FND_API.G_EXC_ERROR;
8285 END IF;
8286
8287 --Update back the attributes column in pa_proj_elements and pa_proj_element_versions with actual data from source project
8288 UPDATE pa_proj_elements ppe1
8289 SET attribute15 = ( SELECT attribute15 FROM pa_proj_elements ppe2
8290 WHERE ppe2.project_id = p_src_project_id
8291 AND ppe2.proj_element_id = ppe1.attribute15 )
8292 WHERE project_id = p_dest_project_id ;
8293
8294 UPDATE pa_proj_element_versions ppevs1
8295 SET attribute15 = ( SELECT attribute15 FROM pa_proj_element_versions ppevs2
8296 WHERE ppevs2.project_id = p_src_project_id
8297 AND ppevs2.element_version_id = ppevs1.attribute15 )
8298 WHERE project_id = p_dest_project_id ;
8299
8300 END IF;
8301
8302 x_return_status := FND_API.G_RET_STS_SUCCESS ;
8303
8304 IF (p_commit = FND_API.G_TRUE) THEN
8305 COMMIT;
8306 END IF;
8307
8308 RETURN;
8309 END IF;
8310
8311 --Check whether atleast one WP version has been selected by the user or not
8312 OPEN cur_min_one_wp_version_sel;
8313 FETCH cur_min_one_wp_version_sel INTO l_min_one_wp_ver_sel;
8314 CLOSE cur_min_one_wp_version_sel;
8315
8316 --Check whether the financial tasks flag is checked or not
8317 OPEN cur_get_flag('FN_FIN_TASKS_FLAG');
8318 FETCH cur_get_flag INTO l_fin_tasks_flag;
8319 CLOSE cur_get_flag;
8320
8321 -------------------------------------------------------------------------------------------------------
8322 /**** THE FOLLOWING SECTION INSERTS WORKPLAN AND FINANCIAL STRUCTURES AND RELATED ATTRIBUTES INTO THE
8323 DESTINATION PROJECT ****/
8324 -------------------------------------------------------------------------------------------------------
8325
8326 l_name := substr(p_dest_project_name, 1, 240);
8327
8328 IF l_debug_mode = 'Y' THEN
8329 Pa_Debug.WRITE(G_PKG_NAME, 'Atleast one WP ver selected : '||l_min_one_wp_ver_sel, l_debug_level3);
8330 Pa_Debug.WRITE(G_PKG_NAME, 'Financial Tasks flag : '||l_fin_tasks_flag, l_debug_level3);
8331 END IF;
8332
8333 --Copy workplan/financial structures into the destination project
8334 INSERT INTO pa_proj_elements(
8335 PROJ_ELEMENT_ID
8336 ,PROJECT_ID
8337 ,OBJECT_TYPE
8338 ,ELEMENT_NUMBER
8339 ,NAME
8340 ,DESCRIPTION
8341 ,STATUS_CODE
8342 ,WF_STATUS_CODE
8343 ,PM_SOURCE_CODE
8344 ,PM_SOURCE_REFERENCE
8345 ,CLOSED_DATE
8346 ,LOCATION_ID
8347 ,MANAGER_PERSON_ID
8348 ,CARRYING_OUT_ORGANIZATION_ID
8349 ,TYPE_ID
8350 ,PRIORITY_CODE
8351 ,CREATION_DATE
8352 ,CREATED_BY
8353 ,LAST_UPDATE_DATE
8354 ,LAST_UPDATED_BY
8355 ,LAST_UPDATE_LOGIN
8356 ,RECORD_VERSION_NUMBER
8357 ,REQUEST_ID
8358 ,PROGRAM_APPLICATION_ID
8359 ,PROGRAM_ID
8360 ,PROGRAM_UPDATE_DATE
8361 ,LINK_TASK_FLAG
8362 ,BASELINE_START_DATE
8363 ,BASELINE_FINISH_DATE
8364 ,PROGRESS_OUTDATED_FLAG
8365 ,ATTRIBUTE_CATEGORY
8366 ,ATTRIBUTE1
8367 ,ATTRIBUTE2
8368 ,ATTRIBUTE3
8369 ,ATTRIBUTE4
8370 ,ATTRIBUTE5
8371 ,ATTRIBUTE6
8372 ,ATTRIBUTE7
8373 ,ATTRIBUTE8
8374 ,ATTRIBUTE9
8375 ,ATTRIBUTE10
8376 ,ATTRIBUTE11
8377 ,ATTRIBUTE12
8378 ,ATTRIBUTE13
8379 ,ATTRIBUTE14
8380 ,ATTRIBUTE15
8381 ,PARENT_STRUCTURE_ID
8382 ,TYPE_CODE
8383 ,INC_PROJ_PROGRESS_FLAG
8384 ,WQ_ITEM_CODE
8385 ,WQ_UOM_CODE
8386 ,WQ_ACTUAL_ENTRY_CODE
8387 ,TASK_PROGRESS_ENTRY_PAGE_ID
8388 ,BASELINE_DURATION
8389 ,PHASE_CODE
8390 ,PHASE_VERSION_ID
8391 ,PROGRESS_WEIGHT
8392 ,BASE_PERCENT_COMP_DERIV_CODE
8393 ,FUNCTION_CODE
8394 ,ENABLE_WF_FLAG
8395 ,WF_ITEM_TYPE
8396 ,WF_PROCESS
8397 ,WF_START_LEAD_DAYS
8398 ,source_object_id
8399 ,source_object_type
8400 )
8401 SELECT
8402 pa_tasks_s.nextval
8403 ,p_dest_project_id
8404 ,ppe.object_type
8405 ,pa_tasks_s.nextval --Set element_number same as proj_element_id
8406 ,l_name
8407 ,ppe.DESCRIPTION
8408 ,ppe.STATUS_CODE
8409 ,ppe.WF_STATUS_CODE
8410 ,NULL --bug 3810263 replacing ppe.PM_SOURCE_CODE
8411 ,NULL --bug 3810263 replacing ppe.PM_SOURCE_REFERENCE
8412 ,ppe.CLOSED_DATE
8413 ,ppe.LOCATION_ID
8414 ,ppe.MANAGER_PERSON_ID
8415 ,ppe.CARRYING_OUT_ORGANIZATION_ID
8416 ,ppe.TYPE_ID
8417 ,ppe.PRIORITY_CODE
8418 ,SYSDATE
8419 ,l_user_id
8420 ,SYSDATE
8421 ,l_user_id
8422 ,l_login_id
8423 ,ppe.RECORD_VERSION_NUMBER
8424 ,ppe.REQUEST_ID
8425 ,ppe.PROGRAM_APPLICATION_ID
8426 ,ppe.PROGRAM_ID
8427 ,ppe.PROGRAM_UPDATE_DATE
8428 ,ppe.LINK_TASK_FLAG
8429 ,ppe.BASELINE_START_DATE
8430 ,ppe.BASELINE_FINISH_DATE
8431 ,'N' --,ppe.progress_outdated_flag
8432 ,ppe.ATTRIBUTE_CATEGORY
8433 ,ppe.ATTRIBUTE1
8434 ,ppe.ATTRIBUTE2
8435 ,ppe.ATTRIBUTE3
8436 ,ppe.ATTRIBUTE4
8437 ,ppe.ATTRIBUTE5
8438 ,ppe.ATTRIBUTE6
8439 ,ppe.ATTRIBUTE7
8440 ,ppe.ATTRIBUTE8
8441 ,ppe.ATTRIBUTE9
8442 ,ppe.ATTRIBUTE10
8443 ,ppe.ATTRIBUTE11
8444 ,ppe.ATTRIBUTE12
8445 ,ppe.ATTRIBUTE13
8446 ,ppe.ATTRIBUTE14
8447 ,ppe.proj_element_id --attribute 15 is used to store old structure id to identify the structure type
8448 ,null --parent_structure_id is NULL in case of structures
8449 ,ppe.TYPE_CODE
8450 ,ppe.INC_PROJ_PROGRESS_FLAG
8451 ,ppe.WQ_ITEM_CODE
8452 ,ppe.WQ_UOM_CODE
8453 ,ppe.WQ_ACTUAL_ENTRY_CODE
8454 ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
8455 ,ppe.BASELINE_DURATION
8456 ,ppe.PHASE_CODE
8457 ,ppe.PHASE_VERSION_ID
8458 ,ppe.PROGRESS_WEIGHT
8459 ,ppe.BASE_PERCENT_COMP_DERIV_CODE
8460 ,ppe.FUNCTION_CODE
8461 ,ppe.ENABLE_WF_FLAG --'N' Bug 3616964
8462 ,ppe.WF_ITEM_TYPE
8463 ,ppe.WF_PROCESS
8464 ,ppe.WF_START_LEAD_DAYS
8465 ,p_dest_project_id
8466 ,'PA_PROJECTS'
8467 FROM pa_proj_elements ppe
8468 WHERE ppe.project_id = p_src_project_id
8469 AND ppe.proj_element_id IN
8470 ( SELECT ppe2.proj_element_id
8471 FROM pa_proj_elements ppe2
8472 ,pa_proj_structure_types ppst
8473 ,pa_structure_types pst
8474 WHERE ppe2.project_id = p_src_project_id
8475 AND ppe2.object_type = 'PA_STRUCTURES'
8476 AND ppe2.proj_element_id = ppst.proj_element_id
8477 AND ppst.structure_type_id = pst.structure_type_id
8478 AND pst.structure_type IN ('WORKPLAN','FINANCIAL') );
8479 --DONOT use the fn call PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y' in above insert
8480 --Inner query is necessary rather than a straight join of three tables in the outer query bec in case of shared,
8481 --the same record from source project is returned twice.
8482
8483 SELECT meaning INTO l_suffix
8484 FROM pa_lookups
8485 WHERE lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
8486 AND lookup_code = 'WORKPLAN';
8487
8488 --If Split and Workplan enabled
8489 IF 'N' = l_shared AND 'Y' = l_workplan_enabled THEN
8490 --Update the name of the WP structure record
8491 UPDATE pa_proj_elements ppe
8492 SET name = substr(p_dest_project_name||l_append||l_suffix, 1, 240)
8493 WHERE project_id = p_dest_project_id
8494 AND object_type = 'PA_STRUCTURES'
8495 AND EXISTS ( SELECT proj_element_id FROM pa_proj_structure_types
8496 WHERE proj_element_id = ppe.proj_element_id
8497 AND structure_type_id = 1 );
8498 END IF;
8499
8500 --Copy entries in pa_proj_structure_types for financial and workplan structures
8501 INSERT INTO PA_PROJ_STRUCTURE_TYPES(
8502 PROJ_STRUCTURE_TYPE_ID
8503 ,PROJ_ELEMENT_ID
8504 ,STRUCTURE_TYPE_ID
8505 ,CREATION_DATE
8506 ,CREATED_BY
8507 ,LAST_UPDATE_DATE
8508 ,LAST_UPDATED_BY
8509 ,LAST_UPDATE_LOGIN
8510 ,RECORD_VERSION_NUMBER )
8511 SELECT
8512 pa_proj_structure_types_s.nextval
8513 ,ppe.proj_element_id
8514 ,ppst.structure_type_id --structure type
8515 ,sysdate
8516 ,l_user_id
8517 ,sysdate
8518 ,l_user_id
8519 ,l_login_id
8520 ,1
8521 FROM pa_proj_elements ppe,
8522 pa_proj_structure_types ppst
8523 WHERE ppe.project_id = p_dest_project_id
8524 AND ppe.attribute15 IN --DoNot use PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.attribute15 ) = 'Y'
8525 ( SELECT ppe2.proj_element_id
8526 FROM pa_proj_elements ppe2
8527 ,pa_proj_structure_types ppst
8528 ,pa_structure_types pst
8529 WHERE ppe2.project_id = p_src_project_id
8530 AND ppe2.object_type = 'PA_STRUCTURES'
8531 AND ppe2.proj_element_id = ppst.proj_element_id
8532 AND ppst.structure_type_id = pst.structure_type_id
8533 AND pst.structure_type IN ('WORKPLAN','FINANCIAL') )
8534 AND ppe.attribute15 = ppst.proj_element_id ; --proj_element_id is unique in pa_proj_structure_types
8535
8536 --Copy workplan attributes for financial and workplan structures
8537 INSERT INTO pa_proj_workplan_attr(
8538 PROJ_ELEMENT_ID
8539 ,PROJECT_ID
8540 ,LAST_UPDATE_DATE
8541 ,LAST_UPDATED_BY
8542 ,CREATION_DATE
8543 ,CREATED_BY
8544 ,WP_APPROVAL_REQD_FLAG
8545 ,WP_AUTO_PUBLISH_FLAG
8546 ,WP_DEFAULT_DISPLAY_LVL
8547 ,WP_ENABLE_VERSION_FLAG
8548 ,AUTO_PUB_UPON_CREATION_FLAG
8549 ,AUTO_SYNC_TXN_DATE_FLAG
8550 ,WP_APPROVER_SOURCE_ID
8551 ,WP_APPROVER_SOURCE_TYPE
8552 ,RECORD_VERSION_NUMBER
8553 ,LAST_UPDATE_LOGIN
8554 ,TXN_DATE_SYNC_BUF_DAYS
8555 ,LIFECYCLE_VERSION_ID
8556 ,CURRENT_PHASE_VERSION_ID
8557 ,SCHEDULE_THIRD_PARTY_FLAG
8558 ,ALLOW_LOWEST_TSK_DEP_FLAG
8559 -- ,PROGRAM_FLAG
8560 ,AUTO_ROLLUP_SUBPROJ_FLAG
8561 ,THIRD_PARTY_SCHEDULE_CODE
8562 ,source_object_id
8563 ,source_object_type
8564 -- gboomina added for bug 8586393 - start
8565 ,use_task_schedule_flag
8566 -- gboomina added for bug 8586393 - end
8567 )
8568 SELECT
8569 ppe.PROJ_ELEMENT_ID
8570 ,ppe.PROJECT_ID
8571 ,SYSDATE
8572 ,l_user_id
8573 ,SYSDATE
8574 ,l_user_id
8575 ,ppwa.WP_APPROVAL_REQD_FLAG
8576 ,ppwa.WP_AUTO_PUBLISH_FLAG
8577 ,ppwa.WP_DEFAULT_DISPLAY_LVL
8578 ,ppwa.WP_ENABLE_VERSION_FLAG
8579 ,ppwa.AUTO_PUB_UPON_CREATION_FLAG
8580 ,ppwa.AUTO_SYNC_TXN_DATE_FLAG
8581 ,ppwa.WP_APPROVER_SOURCE_ID
8582 ,ppwa.WP_APPROVER_SOURCE_TYPE
8583 ,ppwa.RECORD_VERSION_NUMBER
8584 ,l_login_id
8585 ,ppwa.TXN_DATE_SYNC_BUF_DAYS
8586 ,ppwa.LIFECYCLE_VERSION_ID
8587 ,ppwa.CURRENT_PHASE_VERSION_ID
8588 ,ppwa.SCHEDULE_THIRD_PARTY_FLAG
8589 ,ppwa.ALLOW_LOWEST_TSK_DEP_FLAG
8590 -- ,ppwa.PROGRAM_FLAG
8591 ,ppwa.AUTO_ROLLUP_SUBPROJ_FLAG
8592 ,ppwa.THIRD_PARTY_SCHEDULE_CODE
8593 ,ppe.PROJECT_ID
8594 ,'PA_PROJECTS'
8595 -- gboomina added for bug 8586393 - start
8596 ,ppwa.use_task_schedule_flag
8597 -- gboomina added for bug 8586393 - end
8598 FROM pa_proj_elements ppe,
8599 pa_proj_workplan_attr ppwa
8600 WHERE ppwa.project_id = p_src_project_id
8601 AND ppe.attribute15 = ppwa.proj_element_id
8602 AND PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y'
8603 AND ppe.project_id = p_dest_project_id --bug 3939786
8604 ;
8605
8606 --Copy progress attributes for financial and workplan structures
8607 INSERT INTO pa_proj_progress_attr(
8608 PROJ_PROGRESS_ATTR_ID
8609 ,OBJECT_TYPE
8610 ,OBJECT_ID
8611 ,LAST_UPDATE_DATE
8612 ,LAST_UPDATED_BY
8613 ,CREATION_DATE
8614 ,CREATED_BY
8615 ,LAST_UPDATE_LOGIN
8616 ,PROJECT_ID
8617 ,PROGRESS_CYCLE_ID
8618 ,WQ_ENABLE_FLAG
8619 ,REMAIN_EFFORT_ENABLE_FLAG
8620 ,PERCENT_COMP_ENABLE_FLAG
8621 ,NEXT_PROGRESS_UPDATE_DATE
8622 ,RECORD_VERSION_NUMBER
8623 ,TASK_WEIGHT_BASIS_CODE
8624 ,ALLOW_COLLAB_PROG_ENTRY
8625 ,ALLOW_PHY_PRCNT_CMP_OVERRIDES
8626 ,STRUCTURE_TYPE
8627 )
8628 SELECT
8629 PA_PROJ_PROGRESS_ATTR_S.nextval
8630 ,ppe.OBJECT_TYPE
8631 ,ppe.proj_element_ID
8632 ,sysdate
8633 ,l_user_id
8634 ,SYSDATE
8635 ,l_user_id
8636 ,l_login_id
8637 ,p_dest_project_id
8638 ,pppa.PROGRESS_CYCLE_ID
8639 ,pppa.WQ_ENABLE_FLAG
8640 ,pppa.REMAIN_EFFORT_ENABLE_FLAG
8641 ,pppa.PERCENT_COMP_ENABLE_FLAG
8642 ,pppa.NEXT_PROGRESS_UPDATE_DATE
8643 ,pppa.RECORD_VERSION_NUMBER
8644 ,pppa.TASK_WEIGHT_BASIS_CODE
8645 ,pppa.ALLOW_COLLAB_PROG_ENTRY
8646 ,pppa.ALLOW_PHY_PRCNT_CMP_OVERRIDES
8647 ,pppa.STRUCTURE_TYPE
8648 FROM pa_proj_progress_attr pppa,
8649 pa_proj_elements ppe
8650 WHERE ppe.project_id = p_dest_project_id
8651 AND PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y'
8652 AND ppe.attribute15 = pppa.object_id
8653 AND pppa.project_id = p_src_project_id
8654 AND pppa.object_type = 'PA_STRUCTURES' ;
8655
8656 IF l_debug_mode = 'Y' THEN
8657 Pa_Debug.WRITE(G_PKG_NAME, 'After inserting WP/FIN structures and related attributes', l_debug_level3);
8658 END IF;
8659
8660 ---------------------------------------------------------------------------------------------------------
8661 /**** THE FOLLOWING SECTION COPIES/INSERTS WORKPLAN VERSIONS AND TASKS INTO THE DESTINATION PROJECT ****/
8662 ---------------------------------------------------------------------------------------------------------
8663 --IF 'ATLEAST ONE WP VER IS SELECTED' FOR COPYING THEN
8664 -- Copy selected version(s) and tasks belonging to these version(s)
8665 -- Call API to sync up pa_tasks with pa_proj_elements in case of SHARED structure
8666 --ELSE (if no WP ver selected for copying)
8667 -- IF 'SHARED' AND 'FINANCIAL TASKS FLAG IS CHECKED' THEN
8668 -- Copy financial structure version in the source project and tasks belonging to this version
8669 -- ENF IF;
8670 -- IF ('SHARED' AND 'FINANCAIL TASKS FLAG IS NOT CHECKED') OR (SPLIT AND WORKPLAN ENABLED) THEN
8671 -- Insert new (default) structure version for WP
8672 -- END IF;
8673 --END IF;
8674
8675 --Get the destination project's wp structure id
8676 OPEN cur_get_dest_structure_id('WORKPLAN');
8677 FETCH cur_get_dest_structure_id INTO l_dest_wp_structure_id, l_src_wp_structure_id;
8678 CLOSE cur_get_dest_structure_id;
8679
8680 --Get the destination project's financial structure id
8681 OPEN cur_get_dest_structure_id('FINANCIAL');
8682 FETCH cur_get_dest_structure_id INTO l_dest_fn_structure_id, l_src_fn_structure_id;
8683 CLOSE cur_get_dest_structure_id;
8684
8685 --Get the publish person id
8686 OPEN cur_get_person_id(FND_GLOBAL.USER_ID);
8687 FETCH cur_get_person_id INTO l_publish_person_id;
8688 IF cur_get_person_id%NOTFOUND THEN
8689 l_publish_person_id := NULL;
8690 END IF;
8691 CLOSE cur_get_person_id;
8692
8693 --Bug 3387963 - Added to get the cursor values
8694 OPEN cur_get_carrying_out_org;
8695 FETCH cur_get_carrying_out_org INTO l_old_proj_org_id, l_new_proj_org_id;
8696 CLOSE cur_get_carrying_out_org;
8697
8698
8699
8700 --If there is atleast one WP version selected for copying
8701 IF 'Y' = nvl(l_min_one_wp_ver_sel,'N') THEN
8702
8703 IF l_debug_mode = 'Y' THEN
8704 Pa_Debug.WRITE(G_PKG_NAME, 'Inserting versions and tasks for selected WP version(s)', l_debug_level3);
8705 END IF;
8706
8707 --Copy SELECTED workplan versions
8708 INSERT INTO pa_proj_element_versions(
8709 ELEMENT_VERSION_ID
8710 ,PROJ_ELEMENT_ID
8711 ,OBJECT_TYPE
8712 ,PROJECT_ID
8713 ,PARENT_STRUCTURE_VERSION_ID
8714 ,DISPLAY_SEQUENCE
8715 ,WBS_LEVEL
8716 ,WBS_NUMBER
8717 ,CREATION_DATE
8718 ,CREATED_BY
8719 ,LAST_UPDATE_DATE
8720 ,LAST_UPDATED_BY
8721 ,LAST_UPDATE_LOGIN
8722 ,RECORD_VERSION_NUMBER
8723 ,attribute15 --This column stores the stucture version id in the src project, to be used to create relationships.
8724 ,ATTRIBUTE_CATEGORY
8725 ,ATTRIBUTE1
8726 ,ATTRIBUTE2
8727 ,ATTRIBUTE3
8728 ,ATTRIBUTE4
8729 ,ATTRIBUTE5
8730 ,ATTRIBUTE6
8731 ,ATTRIBUTE7
8732 ,ATTRIBUTE8
8733 ,ATTRIBUTE9
8734 ,ATTRIBUTE10
8735 ,ATTRIBUTE11
8736 ,ATTRIBUTE12
8737 ,ATTRIBUTE13
8738 ,ATTRIBUTE14
8739 ,TASK_UNPUB_VER_STATUS_CODE
8740 ,FINANCIAL_TASK_FLAG
8741 ,PRG_GROUP
8742 ,PRG_LEVEL
8743 ,PRG_COUNT
8744 ,source_object_id
8745 ,source_object_type
8746 )
8747 SELECT
8748 pa_proj_element_versions_s.nextval
8749 ,l_dest_wp_structure_id
8750 ,ppev.object_type
8751 ,p_dest_project_id
8752 ,pa_proj_element_versions_s.nextval --nextval occuring twice in the same select returns the same value
8753 ,ppev.DISPLAY_SEQUENCE
8754 ,ppev.WBS_LEVEL
8755 ,ppev.WBS_NUMBER
8756 ,SYSDATE ------CREATION_DATE
8757 ,l_user_id ------CREATED_BY
8758 ,SYSDATE ------LAST_UPDATE_DATE
8759 ,l_user_id ------LAST_UPDATED_BY
8760 ,l_login_id ------LAST_UPDATE_LOGIN
8761 ,ppev.RECORD_VERSION_NUMBER ------RECORD_VERSION_NUMBER
8762 ,ppev.element_version_id
8763 ,ppev.ATTRIBUTE_CATEGORY
8764 ,ppev.ATTRIBUTE1
8765 ,ppev.ATTRIBUTE2
8766 ,ppev.ATTRIBUTE3
8767 ,ppev.ATTRIBUTE4
8768 ,ppev.ATTRIBUTE5
8769 ,ppev.ATTRIBUTE6
8770 ,ppev.ATTRIBUTE7
8771 ,ppev.ATTRIBUTE8
8772 ,ppev.ATTRIBUTE9
8773 ,ppev.ATTRIBUTE10
8774 ,ppev.ATTRIBUTE11
8775 ,ppev.ATTRIBUTE12
8776 ,ppev.ATTRIBUTE13
8777 ,ppev.ATTRIBUTE14
8778 ,ppev.TASK_UNPUB_VER_STATUS_CODE
8779 ,ppev.FINANCIAL_TASK_FLAG
8780 ,NULL --bug 4261419
8781 ,NULL --bug 4261419
8782 ,NULL --bug 4261419
8783 ,p_dest_project_id
8784 ,'PA_PROJECTS'
8785 FROM pa_proj_element_versions ppev,
8786 pa_project_copy_options_tmp ppcot
8787 WHERE ppcot.context = 'WORKPLAN'
8788 AND ppev.element_version_id = ppcot.version_id
8789 AND ppev.project_id = p_src_project_id
8790 AND ppev.object_type = 'PA_STRUCTURES' ;
8791
8792 /** THE FOLLOWING SECTION OF THE CODE IDENTIFIES THE CURRENT_WORKING VERSION IN THE DESTINATION PROJECT **/
8793
8794 --IF current_working version from source is selected and is not published upon creation
8795 -- --> Copy the same as current_working in the destination project
8796 --IF current_working version from the source is not selected or it is publish upon creation
8797 -- --> Copy the lastest updated working WP version that is selected and is not publish upon creation
8798 --IF no working version is selected or the single selected working version is publish upon creation
8799 -- --> Copy the latest published version as current working, if it is selected and is not publish upon creation
8800 -- --> Else, copy the next latest published version which is selected and is not PUC, as current working
8801 IF 'Y' = l_versioning_enabled AND 'N' = p_dest_template_flag THEN
8802 DECLARE
8803
8804 --This cursor gets the WP version which is selected for Publish Upon Creation
8805 CURSOR get_puc_version_id IS
8806 SELECT version_id
8807 FROM pa_project_copy_options_tmp ppcot
8808 WHERE context = 'WORKPLAN'
8809 AND flag = 'Y';
8810
8811 --Gets the current working version of the source project ONLY if it has been SELECTED for copying
8812 CURSOR get_current_working_selected IS
8813 SELECT ppevs.element_version_id
8814 FROM pa_proj_elem_ver_structure ppevs,
8815 pa_project_copy_options_tmp ppcot
8816 WHERE ppevs.current_working_flag = 'Y'
8817 AND ppevs.status_code = 'STRUCTURE_WORKING'
8818 AND ppevs.project_id = p_src_project_id
8819 AND ppevs.element_version_id = ppcot.version_id
8820 AND ppcot.context = 'WORKPLAN' ;
8821
8822 --This cursor gets the LATEST UPDATED WORKING version from the src project, which is SELECTED for
8823 --copying and is NOT Publish Upon Creation
8824 CURSOR get_latest_working_version IS
8825 SELECT element_version_id FROM
8826 ( SELECT ppevs.element_version_id
8827 FROM pa_proj_elem_ver_structure ppevs,
8828 pa_project_copy_options_tmp ppcot
8829 WHERE ppevs.element_version_id = ppcot.version_id
8830 AND ppevs.project_id = p_src_project_id
8831 AND ppevs.status_code = 'STRUCTURE_WORKING'
8832 AND ppcot.context = 'WORKPLAN'
8833 AND ppcot.flag = 'N'
8834 ORDER BY ppevs.last_update_date desc)
8835 WHERE rownum = 1;
8836
8837 --Gets the LATEST PUBLISHED VERSION from the source project, which is SELECTED for copying and is
8838 --NOT Publish Upon Creation
8839 CURSOR get_latest_published IS
8840 SELECT ppevs.element_version_id
8841 FROM pa_proj_elem_ver_structure ppevs,
8842 pa_project_copy_options_tmp ppcot
8843 WHERE ppevs.latest_eff_published_flag = 'Y'
8844 AND ppevs.status_code = 'STRUCTURE_PUBLISHED'
8845 AND ppevs.element_version_id = ppcot.version_id
8846 AND ppcot.context = 'WORKPLAN'
8847 AND ppevs.project_id= p_src_project_id --bug 4868867 sql id = 14909148
8848 AND ppcot.flag = 'N' ;
8849
8850 --Gets the LAST PUBLISHED version from the source project, which is SELECTED for copying but is
8851 --NOT selected for PUBLISH UPON CREATION
8852 CURSOR get_last_published IS
8853 SELECT element_version_id FROM
8854 ( SELECT ppevs.element_version_id
8855 FROM pa_proj_elem_ver_structure ppevs,
8856 pa_project_copy_options_tmp ppcot
8857 WHERE ppevs.element_version_id = ppcot.version_id
8858 AND ppevs.status_code = 'STRUCTURE_PUBLISHED'
8859 AND ppevs.project_id = p_src_project_id
8860 AND ppcot.context = 'WORKPLAN'
8861 AND ppcot.flag = 'N'
8862 ORDER BY ppevs.published_date DESC )
8863 WHERE ROWNUM = 1;
8864
8865 --l_puc_version_id NUMBER(15); Bug 3916763 : Moved this variable outside so that it can be used ahead
8866 --l_current_working_selected NUMBER(15) := NULL; Bug 3916763 : Moved this variable outside so that it can be used ahead
8867
8868 BEGIN
8869
8870 --Fetch the version which is selected for PUBLISH UPON CREATION
8871 OPEN get_puc_version_id;
8872 FETCH get_puc_version_id INTO l_puc_version_id;
8873 CLOSE get_puc_version_id;
8874
8875 --Fetch the CURRENT WORKING version, if it has been SELECTED for copying
8876 OPEN get_current_working_selected;
8877 FETCH get_current_working_selected INTO l_current_working_selected;
8878
8879 IF l_debug_mode = 'Y' THEN
8880 pa_debug.write(G_PKG_NAME, 'l_puc_version_id='||l_puc_version_id, l_debug_level3);
8881 pa_debug.write(G_PKG_NAME, 'l_current_working_selected='||l_current_working_selected, l_debug_level3);
8882 END IF;
8883
8884
8885 --If the CURRENT WORKING version is SELECTED for copying and is NOT Publish Upon Creatiion
8886 IF l_current_working_selected IS NOT NULL AND l_current_working_selected <> nvl(l_puc_version_id,-88) THEN
8887 l_cw_version_id := l_current_working_selected;
8888 ELSE
8889 OPEN get_latest_working_version;
8890 FETCH get_latest_working_version INTO l_cw_version_id;
8891 IF get_latest_working_version%NOTFOUND THEN
8892 OPEN get_latest_published;
8893 FETCH get_latest_published INTO l_cw_version_id;
8894 IF get_latest_published %NOTFOUND THEN
8895 OPEN get_last_published;
8896 FETCH get_last_published INTO l_cw_version_id;
8897 CLOSE get_last_published;
8898 END IF;
8899 CLOSE get_latest_published;
8900 END IF;
8901 CLOSE get_latest_working_version;
8902 END IF;
8903 CLOSE get_current_working_selected;
8904
8905 IF l_debug_mode = 'Y' THEN
8906 pa_debug.write(G_PKG_NAME, 'l_cw_version_id='||l_cw_version_id, l_debug_level3);
8907 END IF;
8908 END;
8909 END IF; --IF versioning is enabled
8910 /** END OF CODE TO DETERMINE CURRENT WORKING VERSION IN DESTINATION PROJECT **/
8911
8912 IF l_debug_mode = 'Y' THEN
8913 Pa_Debug.WRITE(G_PKG_NAME, 'Source version to be set as current working in dest project : '||l_cw_version_id,
8914 l_debug_level3);
8915 Pa_Debug.WRITE(G_PKG_NAME, 'Printing l_dest_wp_structure_id: '||l_dest_wp_structure_id,
8916 l_debug_level3);
8917 END IF;
8918
8919
8920 --Loop for selected wp versions
8921 FOR rec_dest_wp_struc_versions IN cur_get_dest_wp_struc_versions(l_dest_wp_structure_id) LOOP
8922
8923 IF rec_dest_wp_struc_versions.flag = 'Y' THEN
8924 --In case of versioning disabled, publish upon creation flag would always be 'Y'
8925 l_dest_status_code := 'STRUCTURE_PUBLISHED';
8926 l_dest_latest_eff_pub_flag := 'Y';
8927 l_dest_current_working_flag := 'N';
8928 --We need to make a working copy of the published version in SHARED case and when
8929 --versioning is enabled, becuase in SHARED, it is not possible to create a WORKING copy from
8930 --a publshied version
8931
8932 --Bug 7270458 Need to create a workign version if auto publish is enabled for versioning
8933 --enabled workplan.
8934 --IF 'Y' = l_shared AND 'Y' = l_versioning_enabled THEN
8935 IF 'Y' = l_versioning_enabled THEN --Bug 7270458
8936 l_shared_make_working_copy := rec_dest_wp_struc_versions.element_version_id;
8937 END IF;
8938 --3916763 Begin
8939 l_submit_wf_required := 'N';
8940
8941 IF l_debug_mode = 'Y' THEN
8942 pa_debug.write(G_PKG_NAME, 'l_workplan_enabled='||l_workplan_enabled, l_debug_level3);
8943 pa_debug.write(G_PKG_NAME, 'l_versioning_enabled='||l_versioning_enabled, l_debug_level3);
8944 pa_debug.write(G_PKG_NAME, 'l_min_one_wp_ver_sel='||l_min_one_wp_ver_sel, l_debug_level3);
8945 pa_debug.write(G_PKG_NAME, 'l_cw_version_id='||l_cw_version_id, l_debug_level3);
8946 pa_debug.write(G_PKG_NAME, 'rec_dest_wp_struc_versions.attribute15='||rec_dest_wp_struc_versions.attribute15, l_debug_level3);
8947 pa_debug.write(G_PKG_NAME, 'l_shared='||l_shared, l_debug_level3);
8948 pa_debug.write(G_PKG_NAME, 'p_dest_template_flag='||p_dest_template_flag, l_debug_level3);
8949 END IF;
8950
8951 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
8952 OPEN c_get_approval_options;
8953 FETCH c_get_approval_options INTO l_wp_approval_reqd_flag, l_wp_auto_publish_flag,l_wp_approver_source_id;
8954 CLOSE c_get_approval_options;
8955
8956 IF l_debug_mode = 'Y' THEN
8957 pa_debug.write(G_PKG_NAME, 'l_wp_approval_reqd_flag='||l_wp_approval_reqd_flag, l_debug_level3);
8958 pa_debug.write(G_PKG_NAME, 'l_wp_auto_publish_flag='||l_wp_auto_publish_flag, l_debug_level3);
8959 pa_debug.write(G_PKG_NAME, 'l_wp_approver_source_id='||l_wp_approver_source_id, l_debug_level3);
8960 pa_debug.write(G_PKG_NAME, 'fnd_global.employee_id='||fnd_global.employee_id, l_debug_level3);
8961 END IF;
8962
8963 IF NVL(l_wp_approval_reqd_flag,'N') <> 'N' THEN
8964 IF nvl(fnd_global.employee_id,-999) <> NVL(l_wp_approver_source_id,-999) THEN
8965 -- 3916763 : Use fnd_global.employee_id instead of fnd_global.party_id
8966 l_submit_wf_required := 'Y';
8967 l_dest_status_code := 'STRUCTURE_WORKING';
8968 l_dest_latest_eff_pub_flag := 'N';
8969 IF l_current_working_selected = nvl(l_puc_version_id,-88) OR 'Y' = l_shared OR 'Y' = p_dest_template_flag THEN
8970 l_dest_current_working_flag := 'Y';
8971 ELSE
8972 l_dest_current_working_flag := 'N';
8973 END IF;
8974 l_shared_make_working_copy := null;
8975 l_submit_wf_str_version_id := rec_dest_wp_struc_versions.element_version_id;
8976 l_submit_wf_str_id := l_dest_wp_structure_id;
8977 END IF;
8978 END IF;
8979 END IF;
8980 --3916763 End
8981
8982 --bug 3907862, start
8983 OPEN get_published_ver_num(p_dest_project_id, l_dest_wp_structure_id);
8984 FETCH get_published_ver_num INTO l_struct_version_number;
8985 CLOSE get_published_ver_num;
8986 IF l_debug_mode = 'Y' THEN
8987 Pa_Debug.WRITE(G_PKG_NAME, 'After Getting published version l_struct_version_number: '||l_struct_version_number,
8988 l_debug_level3);
8989 END If;
8990 --bug 3907862, end
8991
8992 ELSE
8993 --In case of creating template, Publish Upon Creation flag is always 'N'
8994 l_dest_status_code := 'STRUCTURE_WORKING';
8995 l_dest_latest_eff_pub_flag := 'N';
8996 IF l_cw_version_id = rec_dest_wp_struc_versions.attribute15 OR 'Y' = l_shared OR 'Y' = p_dest_template_flag THEN
8997 l_dest_current_working_flag := 'Y';
8998 ELSE
8999 l_dest_current_working_flag := 'N';
9000 END IF;
9001
9002 --bug 3907862, start
9003 OPEN get_working_ver_num(p_dest_project_id, l_dest_wp_structure_id);
9004 FETCH get_working_ver_num INTO l_struct_version_number;
9005 CLOSE get_working_ver_num;
9006 IF l_debug_mode = 'Y' THEN
9007 Pa_Debug.WRITE(G_PKG_NAME, 'After Getting working version l_struct_version_number: '||l_struct_version_number,
9008 l_debug_level3);
9009 END If;
9010 --bug 3907862, end
9011
9012 END IF;
9013
9014 IF l_debug_mode = 'Y' THEN
9015 Pa_Debug.WRITE(G_PKG_NAME, 'Creating version : '||rec_dest_wp_struc_versions.element_version_id,
9016 l_debug_level3);
9017 END IF;
9018
9019
9020 INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
9021 PEV_STRUCTURE_ID
9022 ,ELEMENT_VERSION_ID
9023 ,VERSION_NUMBER
9024 ,NAME
9025 ,PROJECT_ID
9026 ,PROJ_ELEMENT_ID
9027 ,DESCRIPTION
9028 ,EFFECTIVE_DATE
9029 ,PUBLISHED_DATE
9030 ,PUBLISHED_BY_PERSON_ID
9031 ,CURRENT_BASELINE_DATE
9032 ,CURRENT_FLAG
9033 ,CURRENT_BASELINE_PERSON_ID
9034 ,ORIGINAL_BASELINE_DATE
9035 ,ORIGINAL_FLAG
9036 ,ORIGINAL_BASELINE_PERSON_ID
9037 ,LOCK_STATUS_CODE
9038 ,LOCKED_BY_PERSON_ID
9039 ,LOCKED_DATE
9040 ,STATUS_CODE
9041 ,WF_STATUS_CODE
9042 ,LATEST_EFF_PUBLISHED_FLAG
9043 ,RECORD_VERSION_NUMBER
9044 ,WBS_RECORD_VERSION_NUMBER
9045 ,CREATION_DATE
9046 ,CREATED_BY
9047 ,LAST_UPDATE_DATE
9048 ,LAST_UPDATED_BY
9049 ,LAST_UPDATE_LOGIN
9050 ,change_reason_code
9051 ,PROCESS_UPDATE_WBS_FLAG
9052 ,current_working_flag
9053 ,source_object_id
9054 ,source_object_type
9055 )
9056 SELECT
9057 pa_proj_elem_ver_structure_s.nextval
9058 ,rec_dest_wp_struc_versions.element_version_id
9059 --,ppevs.version_number --bug 3907862, insert the new version number, intead of coying the old.
9060 ,l_struct_version_number
9061 ,ppevs.name
9062 ,p_dest_project_id
9063 ,ppe.proj_element_id
9064 ,ppevs.DESCRIPTION
9065 ,ppevs.EFFECTIVE_DATE
9066 ,decode(l_dest_status_code, 'STRUCTURE_PUBLISHED', sysdate, to_date(NULL))
9067 ,decode(l_dest_status_code, 'STRUCTURE_PUBLISHED', l_publish_person_id, NULL)
9068 ,decode(l_dest_latest_eff_pub_flag, 'Y', trunc(sysdate), to_date(NULL))
9069 ,l_dest_latest_eff_pub_flag
9070 ,decode(l_dest_latest_eff_pub_flag, 'Y', l_publish_person_id, NULL)
9071 ,decode(l_dest_latest_eff_pub_flag, 'Y', trunc(sysdate), to_date(NULL))
9072 ,l_dest_latest_eff_pub_flag
9073 ,decode(l_dest_latest_eff_pub_flag, 'Y', l_publish_person_id, NULL)
9074 ,'UNLOCKED'
9075 ,null
9076 ,null
9077 ,l_dest_status_code
9078 ,ppevs.WF_STATUS_CODE
9079 ,l_dest_latest_eff_pub_flag --If version is 'publish upon creation', it is the latest eff published version
9080 --In case of version disabled, it'll always be 'publish upon creation'
9081 ,ppevs.RECORD_VERSION_NUMBER
9082 ,ppevs.WBS_RECORD_VERSION_NUMBER
9083 ,SYSDATE
9084 ,l_user_id
9085 ,SYSDATE
9086 ,l_user_id
9087 ,l_login_id
9088 ,ppevs.change_reason_code
9089 ,ppevs.process_update_wbs_flag
9090 ,decode(l_versioning_enabled,'N','Y',l_dest_current_working_flag)
9091 --If versioning is disabled, both LATEST PUBLISHED AND CURRENT WORKING FLAGS are 'Y'
9092 ,p_dest_project_id
9093 ,'PA_PROJECTS'
9094 FROM pa_proj_elem_ver_structure ppevs,
9095 pa_proj_elements ppe
9096 WHERE ppevs.project_id = p_src_project_id
9097 AND ppevs.element_version_id = rec_dest_wp_struc_versions.attribute15
9098 AND ppevs.proj_element_id = ppe.attribute15
9099 AND ppe.proj_element_id = l_dest_wp_structure_id;
9100
9101 -- gboomina added for bug 9659119 - start
9102 -- Create workflow notification for published version during online project creation
9103 if (l_dest_status_code = 'STRUCTURE_PUBLISHED') then
9104 if PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_PUB_AT_CREATION(p_src_project_id) = 'Y' then
9105
9106 OPEN get_record_version_number(p_dest_project_id, rec_dest_wp_struc_versions.element_version_id);
9107 FETCH get_record_version_number into l_record_version_number;
9108 CLOSE get_record_version_number;
9109
9110 PA_PROJECT_STRUCTURE_PVT1.change_workplan_status
9111 (
9112 p_project_id => p_dest_project_id
9113 ,p_structure_version_id => rec_dest_wp_struc_versions.element_version_id
9114 ,p_status_code => 'STRUCTURE_PUBLISHED'
9115 ,p_record_version_number => l_record_version_number
9116 ,x_return_status => l_return_status
9117 ,x_msg_count => l_msg_count
9118 ,x_msg_data => l_msg_data
9119 );
9120
9121 end if;
9122 end if;
9123 -- gboomina added for bug 9659119 - end
9124
9125 END LOOP;
9126
9127 --If it is a shared structure and the only WP version selected is Publish Upon Creation, then
9128 --create a working copy of the Published version
9129 IF l_shared_make_working_copy IS NOT NULL THEN
9130 SELECT pa_proj_element_versions_s.nextval INTO l_new_wp_ver_id
9131 FROM dual;
9132
9133 SELECT meaning INTO l_prefix
9134 FROM pa_lookups
9135 WHERE lookup_type = 'PA_STRUCTURES_PREFIX'
9136 AND lookup_code = 'PA_PREFIX_COPY';
9137
9138 IF l_debug_mode = 'Y' THEN
9139 Pa_Debug.WRITE(G_PKG_NAME, 'Making working copy of '||l_shared_make_working_copy,
9140 l_debug_level3);
9141 END IF;
9142
9143 --Make a copy of the published version
9144 INSERT INTO pa_proj_element_versions(
9145 ELEMENT_VERSION_ID
9146 ,PROJ_ELEMENT_ID
9147 ,OBJECT_TYPE
9148 ,PROJECT_ID
9149 ,PARENT_STRUCTURE_VERSION_ID
9150 ,DISPLAY_SEQUENCE
9151 ,WBS_LEVEL
9152 ,WBS_NUMBER
9153 ,CREATION_DATE
9154 ,CREATED_BY
9155 ,LAST_UPDATE_DATE
9156 ,LAST_UPDATED_BY
9157 ,LAST_UPDATE_LOGIN
9158 ,RECORD_VERSION_NUMBER
9159 ,attribute15 --This column stores the stucture version id in the src project, to be used to create relationships.
9160 ,ATTRIBUTE_CATEGORY
9161 ,ATTRIBUTE1
9162 ,ATTRIBUTE2
9163 ,ATTRIBUTE3
9164 ,ATTRIBUTE4
9165 ,ATTRIBUTE5
9166 ,ATTRIBUTE6
9167 ,ATTRIBUTE7
9168 ,ATTRIBUTE8
9169 ,ATTRIBUTE9
9170 ,ATTRIBUTE10
9171 ,ATTRIBUTE11
9172 ,ATTRIBUTE12
9173 ,ATTRIBUTE13
9174 ,ATTRIBUTE14
9175 ,TASK_UNPUB_VER_STATUS_CODE
9176 ,FINANCIAL_TASK_FLAG
9177 ,source_object_id
9178 ,source_object_type
9179 )
9180 SELECT
9181 l_new_wp_ver_id
9182 ,ppev.proj_element_id
9183 ,ppev.object_type
9184 ,ppev.project_id
9185 ,l_new_wp_ver_id
9186 ,ppev.DISPLAY_SEQUENCE
9187 ,ppev.WBS_LEVEL
9188 ,ppev.WBS_NUMBER
9189 ,SYSDATE ------CREATION_DATE
9190 ,l_user_id ------CREATED_BY
9191 ,SYSDATE ------LAST_UPDATE_DATE
9192 ,l_user_id ------LAST_UPDATED_BY
9193 ,l_login_id ------LAST_UPDATE_LOGIN
9194 ,ppev.RECORD_VERSION_NUMBER ------RECORD_VERSION_NUMBER
9195 ,ppev.attribute15
9196 ,ppev.ATTRIBUTE_CATEGORY
9197 ,ppev.ATTRIBUTE1
9198 ,ppev.ATTRIBUTE2
9199 ,ppev.ATTRIBUTE3
9200 ,ppev.ATTRIBUTE4
9201 ,ppev.ATTRIBUTE5
9202 ,ppev.ATTRIBUTE6
9203 ,ppev.ATTRIBUTE7
9204 ,ppev.ATTRIBUTE8
9205 ,ppev.ATTRIBUTE9
9206 ,ppev.ATTRIBUTE10
9207 ,ppev.ATTRIBUTE11
9208 ,ppev.ATTRIBUTE12
9209 ,ppev.ATTRIBUTE13
9210 ,ppev.ATTRIBUTE14
9211 ,ppev.TASK_UNPUB_VER_STATUS_CODE
9212 ,ppev.FINANCIAL_TASK_FLAG
9213 ,ppev.project_id
9214 ,'PA_PROJECTS'
9215 FROM pa_proj_element_versions ppev
9216 WHERE ppev.project_id = p_dest_project_id
9217 AND ppev.element_version_id = l_shared_make_working_copy ;
9218
9219 INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
9220 PEV_STRUCTURE_ID
9221 ,ELEMENT_VERSION_ID
9222 ,VERSION_NUMBER
9223 ,NAME
9224 ,PROJECT_ID
9225 ,PROJ_ELEMENT_ID
9226 ,DESCRIPTION
9227 ,EFFECTIVE_DATE
9228 ,PUBLISHED_DATE
9229 ,PUBLISHED_BY_PERSON_ID
9230 ,CURRENT_BASELINE_DATE
9231 ,CURRENT_FLAG
9232 ,CURRENT_BASELINE_PERSON_ID
9233 ,ORIGINAL_BASELINE_DATE
9234 ,ORIGINAL_FLAG
9235 ,ORIGINAL_BASELINE_PERSON_ID
9236 ,LOCK_STATUS_CODE
9237 ,LOCKED_BY_PERSON_ID
9238 ,LOCKED_DATE
9239 ,STATUS_CODE
9240 ,WF_STATUS_CODE
9241 ,LATEST_EFF_PUBLISHED_FLAG
9242 ,RECORD_VERSION_NUMBER
9243 ,WBS_RECORD_VERSION_NUMBER
9244 ,CREATION_DATE
9245 ,CREATED_BY
9246 ,LAST_UPDATE_DATE
9247 ,LAST_UPDATED_BY
9248 ,LAST_UPDATE_LOGIN
9249 ,change_reason_code
9250 ,PROCESS_UPDATE_WBS_FLAG
9251 ,current_working_flag
9252 ,source_object_id
9253 ,source_object_type
9254 )
9255 SELECT
9256 pa_proj_elem_ver_structure_s.nextval
9257 ,l_new_wp_ver_id
9258 ,ppevs.version_number
9259 ,substr(l_prefix||ppevs.name, 1, 240)
9260 ,ppevs.project_id
9261 ,ppe.proj_element_id
9262 ,ppevs.DESCRIPTION
9263 ,ppevs.EFFECTIVE_DATE
9264 ,to_date(NULL)
9265 ,NULL
9266 ,to_date(NULL)
9267 ,'N'
9268 ,NULL
9269 ,to_date(NULL)
9270 ,'N'
9271 ,NULL
9272 ,'UNLOCKED'
9273 ,null
9274 ,null
9275 ,'STRUCTURE_WORKING'
9276 ,ppevs.WF_STATUS_CODE
9277 ,'N'
9278 ,ppevs.RECORD_VERSION_NUMBER
9279 ,ppevs.WBS_RECORD_VERSION_NUMBER
9280 ,SYSDATE
9281 ,l_user_id
9282 ,SYSDATE
9283 ,l_user_id
9284 ,l_login_id
9285 ,ppevs.change_reason_code
9286 ,ppevs.process_update_wbs_flag
9287 ,'Y'
9288 ,ppevs.project_id
9289 ,'PA_PROJECTS'
9290 FROM pa_proj_elem_ver_structure ppevs,
9291 pa_proj_elements ppe
9292 WHERE ppevs.project_id = p_dest_project_id
9293 AND ppevs.element_version_id = l_shared_make_working_copy
9294 AND ppevs.proj_element_id = ppe.proj_element_id
9295 AND ppe.proj_element_id = l_dest_wp_structure_id;
9296
9297 END IF;--If l_shared_make_working_copy IS NOT NULL
9298
9299 --Create tasks in the selected WP versions
9300 IF 'Y' = l_shared THEN
9301 --If SHARED case, join with PA_TASKS table
9302 INSERT INTO pa_proj_elements(
9303 PROJ_ELEMENT_ID
9304 ,PROJECT_ID
9305 ,OBJECT_TYPE
9306 ,ELEMENT_NUMBER
9307 ,NAME
9308 ,DESCRIPTION
9309 ,STATUS_CODE
9310 ,WF_STATUS_CODE
9311 ,PM_SOURCE_CODE
9312 ,PM_SOURCE_REFERENCE
9313 ,CLOSED_DATE
9314 ,LOCATION_ID
9315 ,MANAGER_PERSON_ID
9316 ,CARRYING_OUT_ORGANIZATION_ID
9317 ,TYPE_ID
9318 ,PRIORITY_CODE
9319 ,CREATION_DATE
9320 ,CREATED_BY
9321 ,LAST_UPDATE_DATE
9322 ,LAST_UPDATED_BY
9323 ,LAST_UPDATE_LOGIN
9324 ,RECORD_VERSION_NUMBER
9325 ,REQUEST_ID
9326 ,PROGRAM_APPLICATION_ID
9327 ,PROGRAM_ID
9328 ,PROGRAM_UPDATE_DATE
9329 ,LINK_TASK_FLAG
9330 ,BASELINE_START_DATE
9331 ,BASELINE_FINISH_DATE
9332 ,progress_outdated_flag
9333 ,ATTRIBUTE_CATEGORY
9334 ,ATTRIBUTE1
9335 ,ATTRIBUTE2
9336 ,ATTRIBUTE3
9337 ,ATTRIBUTE4
9338 ,ATTRIBUTE5
9339 ,ATTRIBUTE6
9340 ,ATTRIBUTE7
9341 ,ATTRIBUTE8
9342 ,ATTRIBUTE9
9343 ,ATTRIBUTE10
9344 ,ATTRIBUTE11
9345 ,ATTRIBUTE12
9346 ,ATTRIBUTE13
9347 ,ATTRIBUTE14
9348 ,ATTRIBUTE15
9349 ,parent_structure_id
9350 ,TYPE_CODE
9351 ,INC_PROJ_PROGRESS_FLAG
9352 ,WQ_ITEM_CODE
9353 ,WQ_UOM_CODE
9354 ,WQ_ACTUAL_ENTRY_CODE
9355 ,TASK_PROGRESS_ENTRY_PAGE_ID
9356 ,BASELINE_DURATION
9357 ,PHASE_CODE
9358 ,PHASE_VERSION_ID
9359 ,PROGRESS_WEIGHT
9360 ,BASE_PERCENT_COMP_DERIV_CODE
9361 ,FUNCTION_CODE
9362 ,ENABLE_WF_FLAG
9363 ,WF_ITEM_TYPE
9364 ,WF_PROCESS
9365 ,WF_START_LEAD_DAYS
9366 ,source_object_id
9367 ,source_object_type
9368 )
9369 SELECT
9370 nvl(pt.task_id,pa_tasks_s.nextval)
9371 ,p_dest_project_id
9372 ,ppe.object_type
9373 ,ppe.element_number
9374 ,ppe.name
9375 ,ppe.DESCRIPTION
9376 ,INITIAL_STATUS_CODE
9377 ,ppe.WF_STATUS_CODE
9378 ,NULL --bug 3810263 replacing ppe.PM_SOURCE_CODE
9379 ,NULL --bug 3810263 replacing ppe.PM_SOURCE_REFERENCE
9380 ,ppe.CLOSED_DATE
9381 ,ppe.LOCATION_ID
9382 ,ppe.MANAGER_PERSON_ID
9383 ,decode(ppe.CARRYING_OUT_ORGANIZATION_ID,l_old_proj_org_id, l_new_proj_org_id,
9384 ppe.CARRYING_OUT_ORGANIZATION_ID) -- Bug 3387963
9385 ,ppe.TYPE_ID
9386 ,ppe.PRIORITY_CODE
9387 ,SYSDATE
9388 ,l_user_id
9389 ,SYSDATE
9390 ,l_user_id
9391 ,l_login_id
9392 ,ppe.RECORD_VERSION_NUMBER
9393 ,ppe.REQUEST_ID
9394 ,ppe.PROGRAM_APPLICATION_ID
9395 ,ppe.PROGRAM_ID
9396 ,ppe.PROGRAM_UPDATE_DATE
9397 ,ppe.LINK_TASK_FLAG
9398 ,ppe.BASELINE_START_DATE
9399 ,ppe.BASELINE_FINISH_DATE
9400 ,'N' --,ppe.progress_outdated_flag
9401 ,ppe.ATTRIBUTE_CATEGORY
9402 ,ppe.ATTRIBUTE1
9403 ,ppe.ATTRIBUTE2
9404 ,ppe.ATTRIBUTE3
9405 ,ppe.ATTRIBUTE4
9406 ,ppe.ATTRIBUTE5
9407 ,ppe.ATTRIBUTE6
9408 ,ppe.ATTRIBUTE7
9409 ,ppe.ATTRIBUTE8
9410 ,ppe.ATTRIBUTE9
9411 ,ppe.ATTRIBUTE10
9412 ,ppe.ATTRIBUTE11
9413 ,ppe.ATTRIBUTE12
9414 ,ppe.ATTRIBUTE13
9415 ,ppe.ATTRIBUTE14
9416 ,ppe.proj_element_id --attribute 15 is used to store old ids.
9417 ,l_dest_wp_structure_id
9418 ,ppe.TYPE_CODE
9419 ,ppe.INC_PROJ_PROGRESS_FLAG
9420 ,ppe.WQ_ITEM_CODE
9421 ,ppe.WQ_UOM_CODE
9422 ,ppe.WQ_ACTUAL_ENTRY_CODE
9423 ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
9424 ,ppe.BASELINE_DURATION
9425 ,ppe.PHASE_CODE
9426 ,ppe.PHASE_VERSION_ID
9427 ,ppe.PROGRESS_WEIGHT
9428 ,ppe.BASE_PERCENT_COMP_DERIV_CODE
9429 ,ppe.FUNCTION_CODE
9430 ,'N'
9431 ,ppe.WF_ITEM_TYPE
9432 ,ppe.WF_PROCESS
9433 ,ppe.WF_START_LEAD_DAYS
9434 ,p_dest_project_id
9435 ,'PA_PROJECTS'
9436 FROM pa_task_types ptt,
9437 pa_tasks pt,
9438 pa_proj_elements ppe
9439 WHERE ptt.object_type = 'PA_TASKS'
9440 AND ppe.type_id = ptt.task_type_id
9441 AND nvl(ppe.link_task_flag,'N') <> 'Y' -- 4348868
9442 AND pt.task_number (+) = substrb(rtrim(ppe.element_number),1,25) -- Substrb added for Bug 5152448
9443 AND pt.project_id (+) = p_dest_project_id
9444 AND ppe.proj_element_id IN
9445 ( SELECT distinct ppev.proj_element_id
9446 FROM PA_PROJ_ELEMENT_VERSIONS ppev,
9447 PA_PROJECT_COPY_OPTIONS_TMP ppcot
9448 WHERE ppcot.CONTEXT = 'WORKPLAN'
9449 AND ppev.parent_structure_version_id = ppcot.version_id
9450 AND ppev.project_id = p_src_project_id
9451 AND ppev.object_type = 'PA_TASKS' ) ;
9452 ELSE
9453 --If SPLIT case, there should be no join with PA_TASKS table
9454 INSERT INTO pa_proj_elements(
9455 PROJ_ELEMENT_ID
9456 ,PROJECT_ID
9457 ,OBJECT_TYPE
9458 ,ELEMENT_NUMBER
9459 ,NAME
9460 ,DESCRIPTION
9461 ,STATUS_CODE
9462 ,WF_STATUS_CODE
9463 ,PM_SOURCE_CODE
9464 ,PM_SOURCE_REFERENCE
9465 ,CLOSED_DATE
9466 ,LOCATION_ID
9467 ,MANAGER_PERSON_ID
9468 ,CARRYING_OUT_ORGANIZATION_ID
9469 ,TYPE_ID
9470 ,PRIORITY_CODE
9471 ,CREATION_DATE
9472 ,CREATED_BY
9473 ,LAST_UPDATE_DATE
9474 ,LAST_UPDATED_BY
9475 ,LAST_UPDATE_LOGIN
9476 ,RECORD_VERSION_NUMBER
9477 ,REQUEST_ID
9478 ,PROGRAM_APPLICATION_ID
9479 ,PROGRAM_ID
9480 ,PROGRAM_UPDATE_DATE
9481 ,LINK_TASK_FLAG
9482 ,BASELINE_START_DATE
9483 ,BASELINE_FINISH_DATE
9484 ,progress_outdated_flag
9485 ,ATTRIBUTE_CATEGORY
9486 ,ATTRIBUTE1
9487 ,ATTRIBUTE2
9488 ,ATTRIBUTE3
9489 ,ATTRIBUTE4
9490 ,ATTRIBUTE5
9491 ,ATTRIBUTE6
9492 ,ATTRIBUTE7
9493 ,ATTRIBUTE8
9494 ,ATTRIBUTE9
9495 ,ATTRIBUTE10
9496 ,ATTRIBUTE11
9497 ,ATTRIBUTE12
9498 ,ATTRIBUTE13
9499 ,ATTRIBUTE14
9500 ,ATTRIBUTE15
9501 ,parent_structure_id
9502 ,TYPE_CODE
9503 ,INC_PROJ_PROGRESS_FLAG
9504 ,WQ_ITEM_CODE
9505 ,WQ_UOM_CODE
9506 ,WQ_ACTUAL_ENTRY_CODE
9507 ,TASK_PROGRESS_ENTRY_PAGE_ID
9508 ,BASELINE_DURATION
9509 ,PHASE_CODE
9510 ,PHASE_VERSION_ID
9511 ,PROGRESS_WEIGHT
9512 ,BASE_PERCENT_COMP_DERIV_CODE
9513 ,FUNCTION_CODE
9514 ,ENABLE_WF_FLAG
9515 ,WF_ITEM_TYPE
9516 ,WF_PROCESS
9517 ,WF_START_LEAD_DAYS
9518 ,source_object_id
9519 ,source_object_type
9520 )
9521 SELECT
9522 pa_tasks_s.nextval
9523 ,p_dest_project_id
9524 ,ppe.object_type
9525 ,ppe.element_number
9526 ,ppe.name
9527 ,ppe.DESCRIPTION
9528 ,INITIAL_STATUS_CODE
9529 ,ppe.WF_STATUS_CODE
9530 ,NULL --bug 3810263 replacing ppe.PM_SOURCE_CODE
9531 ,NULL --bug 3810263 replacing ppe.PM_SOURCE_REFERENCE
9532 ,ppe.CLOSED_DATE
9533 ,ppe.LOCATION_ID
9534 ,ppe.MANAGER_PERSON_ID
9535 ,decode(ppe.CARRYING_OUT_ORGANIZATION_ID,l_old_proj_org_id, l_new_proj_org_id,
9536 ppe.CARRYING_OUT_ORGANIZATION_ID) -- Bug 3387963
9537 ,ppe.TYPE_ID
9538 ,ppe.PRIORITY_CODE
9539 ,SYSDATE
9540 ,l_user_id
9541 ,SYSDATE
9542 ,l_user_id
9543 ,l_login_id
9544 ,ppe.RECORD_VERSION_NUMBER
9545 ,ppe.REQUEST_ID
9546 ,ppe.PROGRAM_APPLICATION_ID
9547 ,ppe.PROGRAM_ID
9548 ,ppe.PROGRAM_UPDATE_DATE
9549 ,ppe.LINK_TASK_FLAG
9550 ,ppe.BASELINE_START_DATE
9551 ,ppe.BASELINE_FINISH_DATE
9552 ,'N' --,ppe.progress_outdated_flag
9553 ,ppe.ATTRIBUTE_CATEGORY
9554 ,ppe.ATTRIBUTE1
9555 ,ppe.ATTRIBUTE2
9556 ,ppe.ATTRIBUTE3
9557 ,ppe.ATTRIBUTE4
9558 ,ppe.ATTRIBUTE5
9559 ,ppe.ATTRIBUTE6
9560 ,ppe.ATTRIBUTE7
9561 ,ppe.ATTRIBUTE8
9562 ,ppe.ATTRIBUTE9
9563 ,ppe.ATTRIBUTE10
9564 ,ppe.ATTRIBUTE11
9565 ,ppe.ATTRIBUTE12
9566 ,ppe.ATTRIBUTE13
9567 ,ppe.ATTRIBUTE14
9568 ,ppe.proj_element_id --attribute 15 is used to store old ids.
9569 ,l_dest_wp_structure_id
9570 ,ppe.TYPE_CODE
9571 ,ppe.INC_PROJ_PROGRESS_FLAG
9572 ,ppe.WQ_ITEM_CODE
9573 ,ppe.WQ_UOM_CODE
9574 ,ppe.WQ_ACTUAL_ENTRY_CODE
9575 ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
9576 ,ppe.BASELINE_DURATION
9577 ,ppe.PHASE_CODE
9578 ,ppe.PHASE_VERSION_ID
9579 ,ppe.PROGRESS_WEIGHT
9580 ,ppe.BASE_PERCENT_COMP_DERIV_CODE
9581 ,ppe.FUNCTION_CODE
9582 ,'N'
9583 ,ppe.WF_ITEM_TYPE
9584 ,ppe.WF_PROCESS
9585 ,ppe.WF_START_LEAD_DAYS
9586 ,p_dest_project_id
9587 ,'PA_PROJECTS'
9588 FROM pa_task_types ptt,
9589 pa_proj_elements ppe
9590 WHERE ptt.object_type = 'PA_TASKS'
9591 AND ppe.type_id = ptt.task_type_id
9592 AND nvl(ppe.link_task_flag,'N') <> 'Y' -- 4348868
9593 AND ppe.proj_element_id IN
9594 ( SELECT distinct ppev.proj_element_id
9595 FROM PA_PROJ_ELEMENT_VERSIONS ppev,
9596 PA_PROJECT_COPY_OPTIONS_TMP ppcot
9597 WHERE ppcot.CONTEXT = 'WORKPLAN'
9598 AND ppev.parent_structure_version_id = ppcot.version_id
9599 AND ppev.project_id = p_src_project_id
9600 AND ppev.object_type = 'PA_TASKS' ) ;
9601 END IF;
9602
9603 --Copy tasks versions for tasks belonging to the selected wp versions
9604 INSERT INTO pa_proj_element_versions(
9605 ELEMENT_VERSION_ID
9606 ,PROJ_ELEMENT_ID
9607 ,OBJECT_TYPE
9608 ,PROJECT_ID
9609 ,PARENT_STRUCTURE_VERSION_ID
9610 ,DISPLAY_SEQUENCE
9611 ,WBS_LEVEL
9612 ,WBS_NUMBER
9613 ,CREATION_DATE
9614 ,CREATED_BY
9615 ,LAST_UPDATE_DATE
9616 ,LAST_UPDATED_BY
9617 ,LAST_UPDATE_LOGIN
9618 ,RECORD_VERSION_NUMBER
9619 ,attribute15 --this column is used to store task ver id of the source project's task versions to be used to created relationships.
9620 ,ATTRIBUTE_CATEGORY
9621 ,ATTRIBUTE1
9622 ,ATTRIBUTE2
9623 ,ATTRIBUTE3
9624 ,ATTRIBUTE4
9625 ,ATTRIBUTE5
9626 ,ATTRIBUTE6
9627 ,ATTRIBUTE7
9628 ,ATTRIBUTE8
9629 ,ATTRIBUTE9
9630 ,ATTRIBUTE10
9631 ,ATTRIBUTE11
9632 ,ATTRIBUTE12
9633 ,ATTRIBUTE13
9634 ,ATTRIBUTE14
9635 ,TASK_UNPUB_VER_STATUS_CODE
9636 ,FINANCIAL_TASK_FLAG
9637 ,source_object_id
9638 ,source_object_type
9639 )
9640 SELECT
9641 pa_proj_element_versions_s.nextval
9642 ,ppe.proj_element_id
9643 ,ppev.object_type
9644 ,p_dest_project_id
9645 ,ppev2.element_version_id
9646 ,ppev.DISPLAY_SEQUENCE
9647 ,ppev.WBS_LEVEL
9648 ,ppev.WBS_NUMBER
9649 ,SYSDATE ------CREATION_DATE
9650 ,l_user_id ------CREATED_BY
9651 ,SYSDATE ------LAST_UPDATE_DATE
9652 ,l_user_id ------LAST_UPDATED_BY
9653 ,l_login_id ------LAST_UPDATE_LOGIN
9654 ,ppev.RECORD_VERSION_NUMBER ------RECORD_VERSION_NUMBER
9655 ,ppev.element_version_id -- to help create relationships from source
9656 ,ppev.ATTRIBUTE_CATEGORY
9657 ,ppev.ATTRIBUTE1
9658 ,ppev.ATTRIBUTE2
9659 ,ppev.ATTRIBUTE3
9660 ,ppev.ATTRIBUTE4
9661 ,ppev.ATTRIBUTE5
9662 ,ppev.ATTRIBUTE6
9663 ,ppev.ATTRIBUTE7
9664 ,ppev.ATTRIBUTE8
9665 ,ppev.ATTRIBUTE9
9666 ,ppev.ATTRIBUTE10
9667 ,ppev.ATTRIBUTE11
9668 ,ppev.ATTRIBUTE12
9669 ,ppev.ATTRIBUTE13
9670 ,ppev.ATTRIBUTE14
9671 ,decode( ppevs.status_code, 'STRUCTURE_PUBLISHED', 'PUBLISHED', 'WORKING' )
9672 ,ppev.FINANCIAL_TASK_FLAG --Check if this is correct ?
9673 ,p_dest_project_id
9674 ,'PA_PROJECTS'
9675 FROM pa_proj_elements ppe,
9676 pa_proj_element_versions ppev,
9677 pa_proj_element_versions ppev2,
9678 pa_proj_elem_ver_structure ppevs
9679 WHERE ppe.project_id = p_dest_project_id
9680 AND ppe.object_type = 'PA_TASKS'
9681 AND ppe.attribute15 = ppev.proj_element_id
9682 AND ppev.project_id = p_src_project_id
9683 AND ppev.object_type = 'PA_TASKS'
9684 AND ppev.parent_structure_version_id = ppev2.attribute15
9685 AND ppev2.project_id = p_dest_project_id
9686 AND ppev2.object_type = 'PA_STRUCTURES'
9687 AND ppevs.element_version_id = ppev2.element_version_id
9688 AND ppevs.project_id = p_dest_project_id
9689 AND ppevs.project_id = ppe.project_id -- Bug 4141027
9690 AND ppev2.project_id = ppe.project_id -- Bug 4141027
9691 ;
9692
9693 IF l_debug_mode = 'Y' THEN
9694 Pa_Debug.WRITE(G_PKG_NAME, 'Going to insert object relationships',
9695 l_debug_level3);
9696 END IF;
9697
9698 FOR rec_dest_wp_struc_versions IN cur_get_dest_wp_struc_versions(l_dest_wp_structure_id) LOOP
9699 --Copy relationships for structure and tasks into destination project
9700
9701 /* Start of addition for bug 6211012 */
9702
9703 l_obj_rel_id.delete;
9704 l_obj_typ_from.delete;
9705 l_obj_from_id.delete;
9706 l_obj_typ_to.delete;
9707 l_obj_to_id.delete;
9708 l_rel_typ.delete;
9709 l_rel_subtyp.delete;
9710 l_rec_ver_num.delete;
9711 l_wt_percent.delete;
9712
9713 OPEN cur_pa_obj_rela_2(rec_dest_wp_struc_versions.attribute15,rec_dest_wp_struc_versions.element_version_id);
9714
9715 LOOP
9716
9717 FETCH cur_pa_obj_rela_2
9718 BULK COLLECT INTO
9719 l_obj_rel_id,
9720 l_obj_typ_from,
9721 l_obj_from_id,
9722 l_obj_typ_to,
9723 l_obj_to_id,
9724 l_rel_typ,
9725 l_rel_subtyp,
9726 l_rec_ver_num,
9727 l_wt_percent
9728 LIMIT 1000;
9729
9730 IF l_obj_rel_id.COUNT >0 THEN
9731
9732 FORALL i IN l_obj_rel_id.FIRST..l_obj_rel_id.LAST
9733 insert into PA_OBJECT_RELATIONSHIPS (
9734 object_relationship_id,
9735 object_type_from,
9736 object_id_from1,
9737 object_type_to,
9738 object_id_to1,
9739 relationship_type,
9740 relationship_subtype,
9741 Record_Version_Number,
9742 CREATED_BY,
9743 CREATION_DATE,
9744 LAST_UPDATED_BY,
9745 LAST_UPDATE_DATE,
9746 LAST_UPDATE_LOGIN,
9747 weighting_percentage
9748 )
9749 values(
9750 l_obj_rel_id(i),
9751 l_obj_typ_from(i),
9752 l_obj_from_id(i),
9753 l_obj_typ_to(i),
9754 l_obj_to_id(i),
9755 l_rel_typ(i),
9756 l_rel_subtyp(i),
9757 l_rec_ver_num(i),
9758 l_user_id,
9759 SYSDATE,
9760 l_user_id,
9761 SYSDATE,
9762 l_login_id,
9763 l_wt_percent(i)
9764 );
9765
9766 END IF;
9767
9768 EXIT WHEN l_obj_rel_id.COUNT < 1000 ;
9769 END LOOP;
9770
9771 l_obj_rel_id.delete;
9772 l_obj_typ_from.delete;
9773 l_obj_from_id.delete;
9774 l_obj_typ_to.delete;
9775 l_obj_to_id.delete;
9776 l_rel_typ.delete;
9777 l_rel_subtyp.delete;
9778 l_rec_ver_num.delete;
9779 l_wt_percent.delete;
9780
9781 CLOSE cur_pa_obj_rela_2;
9782
9783 /*
9784 INSERT INTO PA_OBJECT_RELATIONSHIPS (
9785 object_relationship_id
9786 ,object_type_from
9787 ,object_id_from1
9788 ,object_type_to
9789 ,object_id_to1
9790 ,relationship_type
9791 ,relationship_subtype
9792 ,Record_Version_Number
9793 ,CREATED_BY
9794 ,CREATION_DATE
9795 ,LAST_UPDATED_BY
9796 ,LAST_UPDATE_DATE
9797 ,LAST_UPDATE_LOGIN
9798 ,weighting_percentage
9799 )
9800 /*Added the hint for the bug 3513853*/
9801 /* SELECT /*+ USE_HASH(ppev2 ppev1)*/
9802 /* pa_object_relationships_s.nextval
9803 ,pobj.object_type_from
9804 ,ppev1.element_version_id
9805 ,pobj.object_type_to
9806 ,ppev2.element_version_id
9807 ,pobj.relationship_type
9808 ,pobj.relationship_subtype
9809 ,pobj.Record_Version_Number
9810 ,l_user_id
9811 ,SYSDATE
9812 ,l_user_id
9813 ,SYSDATE
9814 ,l_login_id
9815 ,pobj.weighting_percentage
9816 FROM
9817 ( SELECT object_type_from,
9818 object_id_from1,
9819 object_type_to,
9820 object_id_to1,
9821 relationship_type,
9822 relationship_subtype,
9823 Record_Version_Number,
9824 weighting_percentage
9825 FROM pa_object_relationships
9826 START WITH object_id_from1 = rec_dest_wp_struc_versions.attribute15
9827 AND RELATIONSHIP_TYPE = 'S'
9828 CONNECT BY object_id_from1 = PRIOR object_id_to1
9829 AND RELATIONSHIP_TYPE = 'S' ) pobj,
9830 pa_proj_element_versions ppev1,
9831 pa_proj_element_versions ppev2
9832 WHERE ppev1.attribute15 = pobj.object_id_from1
9833 AND ppev2.attribute15 = pobj.object_id_to1
9834 AND ppev1.parent_structure_version_id = rec_dest_wp_struc_versions.element_version_id
9835 AND ppev2.parent_structure_version_id = rec_dest_wp_struc_versions.element_version_id ;
9836 */
9837 /* End of changes for bug 6211012 */
9838
9839 --calculate delta before inserting schedule rows
9840 --select source structure version scheduled start date
9841 IF (p_target_start_date IS NULL) THEN
9842 l_delta := 0;
9843 ELSE
9844 OPEN cur_get_src_sch_st_date( p_src_project_id, rec_dest_wp_struc_versions.attribute15 );
9845 FETCH cur_get_src_sch_st_date INTO l_src_sch_st_date;
9846 CLOSE cur_get_src_sch_st_date;
9847 l_delta := p_target_start_date - l_src_sch_st_date;
9848 END IF;
9849
9850 --Copy entries into pa_proj_elem_ver_schedule
9851 INSERT INTO pa_proj_elem_ver_schedule(
9852 PEV_SCHEDULE_ID
9853 ,ELEMENT_VERSION_ID
9854 ,PROJECT_ID
9855 ,PROJ_ELEMENT_ID
9856 ,CREATION_DATE
9857 ,CREATED_BY
9858 ,LAST_UPDATE_DATE
9859 ,LAST_UPDATED_BY
9860 ,SCHEDULED_START_DATE
9861 ,SCHEDULED_FINISH_DATE
9862 ,OBLIGATION_START_DATE
9863 ,OBLIGATION_FINISH_DATE
9864 ,ACTUAL_START_DATE
9865 ,ACTUAL_FINISH_DATE
9866 ,ESTIMATED_START_DATE
9867 ,ESTIMATED_FINISH_DATE
9868 ,DURATION
9869 ,EARLY_START_DATE
9870 ,EARLY_FINISH_DATE
9871 ,LATE_START_DATE
9872 ,LATE_FINISH_DATE
9873 ,CALENDAR_ID
9874 ,MILESTONE_FLAG
9875 ,CRITICAL_FLAG
9876 ,RECORD_VERSION_NUMBER
9877 ,LAST_UPDATE_LOGIN
9878 ,WQ_PLANNED_QUANTITY
9879 ,PLANNED_EFFORT
9880 ,ACTUAL_DURATION
9881 ,ESTIMATED_DURATION
9882 ,ATTRIBUTE_CATEGORY
9883 ,ATTRIBUTE1
9884 ,ATTRIBUTE2
9885 ,ATTRIBUTE3
9886 ,ATTRIBUTE4
9887 ,ATTRIBUTE5
9888 ,ATTRIBUTE6
9889 ,ATTRIBUTE7
9890 ,ATTRIBUTE8
9891 ,ATTRIBUTE9
9892 ,ATTRIBUTE10
9893 ,ATTRIBUTE11
9894 ,ATTRIBUTE12
9895 ,ATTRIBUTE13
9896 ,ATTRIBUTE14
9897 ,ATTRIBUTE15
9898 ,source_object_id
9899 ,source_object_type
9900 ,DEF_SCH_TOOL_TSK_TYPE_CODE --Bug 9378153
9901 ,CONSTRAINT_TYPE_CODE --Bug 3762437
9902 ,CONSTRAINT_DATE
9903 ,FREE_SLACK
9904 ,TOTAL_SLACK
9905 ,EFFORT_DRIVEN_FLAG
9906 ,LEVEL_ASSIGNMENTS_FLAG
9907 ,EXT_ACT_DURATION
9908 ,EXT_REMAIN_DURATION
9909 ,EXT_SCH_DURATION --Bug 3762437
9910 )
9911 SELECT
9912 pa_proj_elem_ver_schedule_s.nextval
9913 ,ppev.ELEMENT_VERSION_ID
9914 ,p_dest_PROJECT_ID
9915 ,ppev.PROJ_ELEMENT_ID
9916 ,SYSDATE
9917 ,l_user_id
9918 ,SYSDATE
9919 ,l_user_id
9920 ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date,
9921 p_target_finish_date,
9922 l_delta,
9923 ppevs.SCHEDULED_START_DATE,
9924 null )
9925 ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date,
9926 p_target_finish_date,
9927 l_delta,
9928 ppevs.SCHEDULED_START_DATE,
9929 SCHEDULED_FINISH_DATE )
9930 ,ppevs.OBLIGATION_START_DATE
9931 ,ppevs.OBLIGATION_FINISH_DATE
9932 ,null
9933 ,null
9934 ,null
9935 ,null
9936 ,ppevs.DURATION
9937 ,ppevs.EARLY_START_DATE
9938 ,ppevs.EARLY_FINISH_DATE
9939 ,ppevs.LATE_START_DATE
9940 ,ppevs.LATE_FINISH_DATE
9941 ,p_calendar_id
9942 ,ppevs.MILESTONE_FLAG
9943 ,ppevs.CRITICAL_FLAG
9944 ,ppevs.RECORD_VERSION_NUMBER
9945 ,l_login_id
9946 ,ppevs.WQ_PLANNED_QUANTITY
9947 ,ppevs.PLANNED_EFFORT
9948 ,ppevs.ACTUAL_DURATION
9949 ,ppevs.ESTIMATED_DURATION
9950 ,ppevs.ATTRIBUTE_CATEGORY
9951 ,ppevs.ATTRIBUTE1
9952 ,ppevs.ATTRIBUTE2
9953 ,ppevs.ATTRIBUTE3
9954 ,ppevs.ATTRIBUTE4
9955 ,ppevs.ATTRIBUTE5
9956 ,ppevs.ATTRIBUTE6
9957 ,ppevs.ATTRIBUTE7
9958 ,ppevs.ATTRIBUTE8
9959 ,ppevs.ATTRIBUTE9
9960 ,ppevs.ATTRIBUTE10
9961 ,ppevs.ATTRIBUTE11
9962 ,ppevs.ATTRIBUTE12
9963 ,ppevs.ATTRIBUTE13
9964 ,ppevs.ATTRIBUTE14
9965 ,ppevs.ATTRIBUTE15
9966 ,p_dest_PROJECT_ID
9967 ,'PA_PROJECTS'
9968 ,ppevs.DEF_SCH_TOOL_TSK_TYPE_CODE --Bug 9378153
9969 ,CONSTRAINT_TYPE_CODE --Bug 3762437
9970 ,CONSTRAINT_DATE
9971 ,FREE_SLACK
9972 ,TOTAL_SLACK
9973 ,EFFORT_DRIVEN_FLAG
9974 ,LEVEL_ASSIGNMENTS_FLAG
9975 ,EXT_ACT_DURATION
9976 ,EXT_REMAIN_DURATION
9977 ,EXT_SCH_DURATION --Bug 3762437
9978 FROM pa_proj_element_versions ppev,
9979 pa_proj_elem_ver_schedule ppevs
9980 WHERE ppev.project_id = p_dest_project_id
9981 AND ppev.parent_structure_version_id = rec_dest_wp_struc_versions.element_version_id
9982 AND ppev.attribute15 = ppevs.element_version_id
9983 AND ppevs.project_id = p_src_project_id ;
9984
9985 END LOOP; --FOR rec_dest_wp_struc_versions IN cur_get_dest_wp_struc_versions
9986
9987 IF 'Y' = l_shared AND 'N' = p_src_template_flag THEN
9988 --No need to sync up if source is a template
9989 IF l_submit_wf_required <> 'Y' THEN --3916763
9990 OPEN cur_get_shared_ver_id;
9991 FETCH cur_get_shared_ver_id INTO l_shared_dest_ver_id;
9992 CLOSE cur_get_shared_ver_id;
9993
9994 IF l_debug_mode = 'Y' THEN
9995 Pa_Debug.WRITE(G_PKG_NAME, 'Calling pa_tasks sync up API for struc version :'||l_shared_dest_ver_id,
9996 l_debug_level3);
9997 END IF;
9998
9999 --Call API to sync up tasks in pa_tasks table, with the new (shared) version [WP version copied from src]
10000 PA_TASKS_MAINT_PUB.SYNC_UP_WP_TASKS_WITH_FIN(
10001 p_project_id => p_dest_project_id
10002 , p_structure_version_id => l_shared_dest_ver_id
10003 , p_mode => 'ALL'
10004 , x_return_status => l_return_status
10005 , x_msg_count => l_msg_count
10006 , x_msg_data => l_msg_data );
10007
10008 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10009 x_msg_count := FND_MSG_PUB.count_msg;
10010 IF x_msg_count = 1 THEN
10011 x_msg_data := l_msg_data;
10012 END IF;
10013 RAISE FND_API.G_EXC_ERROR;
10014 END IF;
10015 END IF; --3916763
10016 END IF;
10017 ELSE --IF THERE IS NO WP VERSION SELECTED FOR COPYING
10018
10019 --If shared and copy financial tasks flag is checked
10020 IF 'Y' = l_shared AND 'Y' = l_fin_tasks_flag THEN
10021
10022 --The following API call will copy the financial version from the source project to the destination project
10023 copy_src_financial_version( p_init_msg_list => p_init_msg_list
10024 ,p_src_project_id => p_src_project_id
10025 ,p_dest_project_id => p_dest_project_id
10026 ,p_dest_fn_structure_id => l_dest_wp_structure_id
10027 ,p_shared => l_shared
10028 ,p_dest_template_flag => p_dest_template_flag
10029 ,p_publish_person_id => l_publish_person_id
10030 ,x_return_status => l_return_status
10031 ,x_msg_count => l_msg_count
10032 ,x_msg_data => l_msg_data
10033 );
10034
10035 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10036 x_msg_count := FND_MSG_PUB.count_msg;
10037 IF x_msg_count = 1 THEN
10038 x_msg_data := l_msg_data;
10039 END IF;
10040 RAISE FND_API.G_EXC_ERROR;
10041 END IF;
10042
10043 --The following API call will copy the tasks belonging to the financial version in the source project into
10044 --the destination project
10045 copy_src_financial_ver_tasks( p_init_msg_list => p_init_msg_list
10046 ,p_src_project_id => p_src_project_id
10047 ,p_dest_project_id => p_dest_project_id
10048 ,p_dest_fn_structure_id => l_dest_wp_structure_id
10049 ,p_shared => l_shared
10050 ,p_copy_ppevSchedules_flag => 'Y' --Copy pa_proj_elem_ver_schedules or not
10051 ,p_target_start_date => p_target_start_date
10052 ,p_target_finish_date => p_target_finish_date
10053 ,p_calendar_id => p_calendar_id
10054 ,x_return_status => l_return_status
10055 ,x_msg_count => l_msg_count
10056 ,x_msg_data => l_msg_data
10057 );
10058 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10059 x_msg_count := FND_MSG_PUB.count_msg;
10060 IF x_msg_count = 1 THEN
10061 x_msg_data := l_msg_data;
10062 END IF;
10063 RAISE FND_API.G_EXC_ERROR;
10064 END IF;
10065
10066 END IF;--If shared and copy financial tasks flag is checked
10067
10068 --If no WP version is selected
10069 --If shared and copy financial tasks flag is not checked OR split and workplan is enabled
10070 IF ('Y' = l_shared AND 'N' = l_fin_tasks_flag)
10071 OR ('N' = l_shared AND 'Y' = l_workplan_enabled) THEN
10072
10073 IF l_debug_mode = 'Y' THEN
10074 Pa_Debug.WRITE(G_PKG_NAME, 'Creating new default WP version', l_debug_level3);
10075 END IF;
10076 --bug 3912603, Satish, this flag is for using this same condition below.
10077 check_str_sel_flag := 'Y';
10078
10079 --Create new default WP structure version
10080 SELECT pa_proj_element_versions_s.nextval INTO l_new_wp_ver_id
10081 FROM dual;
10082
10083 INSERT INTO pa_proj_element_versions(
10084 ELEMENT_VERSION_ID
10085 ,PROJ_ELEMENT_ID
10086 ,OBJECT_TYPE
10087 ,PROJECT_ID
10088 ,CREATION_DATE
10089 ,CREATED_BY
10090 ,LAST_UPDATE_DATE
10091 ,LAST_UPDATED_BY
10092 ,LAST_UPDATE_LOGIN
10093 ,PARENT_STRUCTURE_VERSION_ID
10094 ,WBS_NUMBER
10095 ,RECORD_VERSION_NUMBER
10096 ,FINANCIAL_TASK_FLAG
10097 ,source_object_id
10098 ,source_object_type
10099 )
10100 VALUES (
10101 l_new_wp_ver_id
10102 ,l_dest_wp_structure_id
10103 ,'PA_STRUCTURES'
10104 ,p_dest_project_id
10105 ,sysdate
10106 ,l_user_id
10107 ,sysdate
10108 ,l_user_id
10109 ,l_login_id
10110 ,l_new_wp_ver_id
10111 ,'0'
10112 ,1
10113 ,'N'
10114 ,p_dest_project_id
10115 ,'PA_PROJECTS'
10116 );
10117
10118 OPEN cur_get_working_ver_num(p_dest_project_id, l_dest_wp_structure_id);
10119 FETCH cur_get_working_ver_num INTO l_struc_ver_number;
10120 CLOSE cur_get_working_ver_num;
10121
10122 --If creating a project AND versioning is disabled, then should have both latest published and
10123 --current working flags as 'Y'
10124 IF 'N' = p_dest_template_flag AND 'N' = l_versioning_enabled THEN
10125 l_default_lat_pub_and_cw_flag := 'Y';
10126 END IF;
10127
10128 INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
10129 PEV_STRUCTURE_ID
10130 ,ELEMENT_VERSION_ID
10131 ,VERSION_NUMBER
10132 ,NAME
10133 ,PROJECT_ID
10134 ,PROJ_ELEMENT_ID
10135 ,PUBLISHED_DATE
10136 ,LATEST_EFF_PUBLISHED_FLAG
10137 ,PUBLISHED_BY_PERSON_ID
10138 ,CURRENT_BASELINE_DATE
10139 ,CURRENT_FLAG
10140 ,CURRENT_BASELINE_PERSON_ID
10141 ,ORIGINAL_BASELINE_DATE
10142 ,ORIGINAL_FLAG
10143 ,ORIGINAL_BASELINE_PERSON_ID
10144 ,CREATION_DATE
10145 ,CREATED_BY
10146 ,LAST_UPDATE_DATE
10147 ,LAST_UPDATED_BY
10148 ,LAST_UPDATE_LOGIN
10149 ,STATUS_CODE
10150 ,RECORD_VERSION_NUMBER
10151 ,WBS_RECORD_VERSION_NUMBER
10152 ,CURRENT_WORKING_FLAG
10153 ,SOURCE_OBJECT_ID
10154 ,source_object_type)
10155 VALUES (
10156 pa_proj_elem_ver_structure_s.nextval
10157 ,l_new_wp_ver_id
10158 ,l_struc_ver_number
10159 ,substr(p_dest_project_name||l_append||l_suffix, 1, 240)
10160 ,p_dest_project_id
10161 ,l_dest_wp_structure_id
10162 ,decode(l_default_lat_pub_and_cw_flag,'Y',sysdate,to_date(null))
10163 ,l_default_lat_pub_and_cw_flag
10164 ,decode(l_default_lat_pub_and_cw_flag, 'Y', l_publish_person_id, NULL)
10165 ,decode(l_default_lat_pub_and_cw_flag,'Y',sysdate,to_date(null))
10166 ,l_default_lat_pub_and_cw_flag
10167 ,decode(l_default_lat_pub_and_cw_flag, 'Y', l_publish_person_id, NULL)
10168 ,decode(l_default_lat_pub_and_cw_flag,'Y',sysdate,to_date(null))
10169 ,l_default_lat_pub_and_cw_flag
10170 ,decode(l_default_lat_pub_and_cw_flag, 'Y', l_publish_person_id, NULL)
10171 ,sysdate
10172 ,l_user_id
10173 ,sysdate
10174 ,l_user_id
10175 ,l_login_id
10176 ,decode(l_default_lat_pub_and_cw_flag,'Y','STRUCTURE_PUBLISHED','STRUCTURE_WORKING')
10177 ,1
10178 ,1
10179 ,'Y'
10180 ,p_dest_project_id
10181 ,'PA_PROJECTS'
10182 );
10183
10184 --bug 3912603, insert records into pa_proj_elem_ver_Schedule, Satish, start
10185 PA_TASK_PUB1.Create_Schedule_Version(
10186 p_element_version_id => l_new_wp_ver_id
10187 ,p_scheduled_start_date => SYSDATE
10188 ,p_scheduled_end_date => SYSDATE
10189 ,x_pev_schedule_id => x_pev_schedule_id
10190 ,x_return_status => l_return_status
10191 ,x_msg_count => l_msg_count
10192 ,x_msg_data => l_msg_data
10193 );
10194 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10195 x_msg_count := FND_MSG_PUB.count_msg;
10196 IF x_msg_count = 1 THEN
10197 x_msg_data := l_msg_data;
10198 END IF;
10199 RAISE FND_API.G_EXC_ERROR;
10200 END IF;
10201 --bug 3912603, insert records into pa_proj_elem_ver_Schedule, Satish, end
10202
10203 END IF;
10204 END IF;--If there is atleast one WP version selected
10205
10206 ---------------------------------------------------------------------------------------------------------
10207 /**** THE FOLLOWING SECTION COPIES/INSERTS FINANCIAL VERSIONS AND TASKS INTO THE DESTINATION PROJECT ****/
10208 ---------------------------------------------------------------------------------------------------------
10209 --If split and financial is enabled
10210 IF 'N' = l_shared AND 'Y' = l_fin_enabled THEN
10211
10212 IF l_debug_mode = 'Y' THEN
10213 Pa_Debug.WRITE(G_PKG_NAME, 'Creating financial version in split case', l_debug_level3);
10214 END IF;
10215
10216 --The following API call will copy the financial version from the source project to the destination project
10217 copy_src_financial_version( p_init_msg_list => p_init_msg_list
10218 ,p_src_project_id => p_src_project_id
10219 ,p_dest_project_id => p_dest_project_id
10220 ,p_dest_fn_structure_id => l_dest_fn_structure_id
10221 ,p_shared => l_shared
10222 ,p_dest_template_flag => p_dest_template_flag
10223 ,p_publish_person_id => l_publish_person_id
10224 ,x_return_status => l_return_status
10225 ,x_msg_count => l_msg_count
10226 ,x_msg_data => l_msg_data
10227 );
10228
10229 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10230 x_msg_count := FND_MSG_PUB.count_msg;
10231 IF x_msg_count = 1 THEN
10232 x_msg_data := l_msg_data;
10233 END IF;
10234 RAISE FND_API.G_EXC_ERROR;
10235 END IF;
10236
10237 --If copy financial tasks flag is checked
10238 IF 'Y' = l_fin_tasks_flag THEN
10239
10240 IF l_debug_mode = 'Y' THEN
10241 Pa_Debug.WRITE(G_PKG_NAME, 'Creating financial tasks in split case', l_debug_level3);
10242 END IF;
10243
10244 --The following API call will copy the tasks belonging to the financial version in the source project into
10245 --the destination project
10246 copy_src_financial_ver_tasks( p_init_msg_list => p_init_msg_list
10247 ,p_src_project_id => p_src_project_id
10248 ,p_dest_project_id => p_dest_project_id
10249 ,p_dest_fn_structure_id => l_dest_fn_structure_id
10250 ,p_shared => l_shared
10251 ,p_copy_ppevSchedules_flag => 'N' --Copy pa_proj_elem_ver_schedules or not
10252 ,p_target_start_date => p_target_start_date
10253 ,p_target_finish_date => p_target_finish_date
10254 ,p_calendar_id => p_calendar_id
10255 ,x_return_status => l_return_status
10256 ,x_msg_count => l_msg_count
10257 ,x_msg_data => l_msg_data
10258 );
10259 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10260 x_msg_count := FND_MSG_PUB.count_msg;
10261 IF x_msg_count = 1 THEN
10262 x_msg_data := l_msg_data;
10263 END IF;
10264 RAISE FND_API.G_EXC_ERROR;
10265 END IF;
10266 END IF;
10267
10268 END IF;--If split and financial is enabled
10269
10270 ---------------------------------------------------------------------------------------------------------------------
10271 /**** THE FOLLOWING SECTION COPIES OTHER INFORMATION RELATED TO VERSIONS AND TASKS INTO THE DESTINATION PROJECT ****/
10272 ---------------------------------------------------------------------------------------------------------------------
10273
10274 IF 'Y' = l_shared THEN
10275 --Get the destination project's shared structure id
10276 OPEN cur_get_shared_struc_id;
10277 FETCH cur_get_shared_struc_id INTO l_dest_shared_struc_id, l_src_shared_struc_id;
10278 CLOSE cur_get_shared_struc_id;
10279 END IF;
10280
10281 --Updating Duration
10282 IF l_workplan_enabled = 'Y' THEN
10283 -- Bug 3657808 Remove duration calculation using calendar
10284 -- and rewritting the query
10285 /*UPDATE pa_proj_elem_ver_schedule
10286 SET duration = PA_PROJ_TASK_STRUC_PUB.calc_duration( p_calendar_id,
10287 scheduled_start_date,
10288 scheduled_finish_date )
10289 WHERE project_id = p_dest_project_id;*/
10290 UPDATE pa_proj_elem_ver_schedule
10291 SET duration = trunc(scheduled_finish_date) - trunc(scheduled_start_date) + 1
10292 WHERE project_id = p_dest_project_id;
10293 END IF;
10294
10295 ---Updating Baselined Dates
10296 UPDATE PA_PROJ_ELEMENTS ppe
10297 SET ( BASELINE_START_DATE
10298 ,BASELINE_FINISH_DATE
10299 ,BASELINE_DURATION
10300 ) = ( SELECT ppevs.scheduled_start_date
10301 ,ppevs.scheduled_finish_date
10302 ,ppevs.duration
10303 FROM pa_proj_elem_ver_schedule ppevs,
10304 pa_proj_element_versions ppev
10305 WHERE ppevs.project_id = p_dest_project_id
10306 AND ppevs.proj_element_id = ppev.proj_element_id
10307 AND ppevs.element_version_id = ppev.element_version_id
10308 AND ppev.project_id = p_dest_project_id
10309 AND ppevs.proj_element_id = ppe.proj_element_id
10310 AND ppev.proj_element_id = ppe.proj_element_id
10311 AND ppev.parent_structure_version_id =
10312 ( SELECT ppevst.element_version_id --Changed the inner query for bug 4215666.
10313 FROM pa_proj_elem_ver_structure ppevst,
10314 pa_proj_structure_types struc,
10315 pa_structure_types stype
10316 WHERE ppevst.project_id = p_dest_project_id
10317 AND ppevst.current_flag = 'Y'
10318 AND ppevst.status_code = 'STRUCTURE_PUBLISHED'
10319 AND ppevst.proj_element_id = struc.proj_element_id
10320 AND struc.structure_type_id = stype.structure_type_id
10321 AND stype.structure_type = 'WORKPLAN'
10322 )
10323 )
10324 WHERE project_id = p_dest_project_id;
10325
10326 --Updating Projects Dates
10327 UPDATE pa_projects_all
10328 SET ( BASELINE_START_DATE ,BASELINE_FINISH_DATE, baseline_duration, baseline_as_of_date ) =
10329 ( SELECT BASELINE_START_DATE ,BASELINE_FINISH_DATE, baseline_duration,
10330 decode( BASELINE_START_DATE, null, null, sysdate)
10331 FROM pa_proj_elements ppe, pa_proj_structure_types ppst
10332 WHERE project_id = p_dest_project_id
10333 AND object_type = 'PA_STRUCTURES'
10334 AND ppe.proj_element_id = ppst.proj_element_id
10335 AND ppst.structure_type_id = 1
10336 )
10337 WHERE project_id = p_dest_project_id;
10338
10339 --Get the latest published version id in the destination project
10340 l_dest_latest_pub_ver_id := PA_PROJ_ELEMENTS_UTILS.latest_published_ver_id( p_dest_project_id, 'WORKPLAN' ) ;
10341
10342 IF l_dest_latest_pub_ver_id IS NOT NULL THEN
10343 UPDATE pa_projects_all
10344 SET ( scheduled_START_DATE ,scheduled_FINISH_DATE, scheduled_duration, scheduled_as_of_date ) =
10345 ( SELECT SCHEDULED_START_DATE ,SCHEDULED_FINISH_DATE, duration,
10346 decode( SCHEDULED_START_DATE, null, null, sysdate )
10347 FROM pa_proj_elem_ver_schedule
10348 WHERE project_id = p_dest_project_id
10349 AND element_version_id = l_dest_latest_pub_ver_id
10350 )
10351 WHERE project_id = p_dest_project_id;
10352 END IF;
10353
10354 /* Included for Bug 3922019
10355 In case of templates l_dest_latest_pub_ver_id will be NULL (No latest published version etc. for templates)
10356 So,In that case,Select the Only Workplan Version Id that would be available for the template*/
10357
10358 OPEN c_template_flag(p_dest_project_id) ;
10359 FETCH c_template_flag INTO l_template_flag ;
10360 CLOSE c_template_flag ;
10361
10362 IF nvl(l_template_flag,'N') = 'Y' THEN
10363 OPEN c_only_wp_ver_id(p_dest_project_id) ;
10364 FETCH c_only_wp_ver_id INTO l_only_wp_ver_id ;
10365 CLOSE c_only_wp_ver_id ;
10366
10367 UPDATE pa_projects_all
10368 SET ( scheduled_START_DATE ,scheduled_FINISH_DATE, scheduled_duration, scheduled_as_of_date ) =
10369 ( SELECT SCHEDULED_START_DATE ,SCHEDULED_FINISH_DATE, duration,
10370 decode( SCHEDULED_START_DATE, null, null, sysdate )
10371 FROM pa_proj_elem_ver_schedule
10372 WHERE project_id = p_dest_project_id
10373 AND element_version_id = l_only_wp_ver_id
10374 )
10375 WHERE project_id = p_dest_project_id;
10376 END IF;
10377
10378 /* End of code changes for Bug 3922019*/
10379
10380 IF l_debug_mode = 'Y' THEN
10381 Pa_Debug.WRITE(G_PKG_NAME, 'Copying task attachments...', l_debug_level3);
10382 END IF;
10383
10384 --Copy Task Attachments
10385 OPEN cur_get_flag('WP_TASK_ATTACH_FLAG');
10386 FETCH cur_get_flag INTO l_wp_task_attach_flag;
10387 CLOSE cur_get_flag;
10388
10389 IF l_debug_mode = 'Y' THEN
10390 Pa_Debug.WRITE(G_PKG_NAME, 'l_wp_task_attach_flag '||l_wp_task_attach_flag, l_debug_level3);
10391 END IF;
10392
10393 OPEN cur_get_flag('FN_ATTACHMENTS_FLAG');
10394 FETCH cur_get_flag INTO l_fn_task_attach_flag;
10395 CLOSE cur_get_flag;
10396
10397 IF l_debug_mode = 'Y' THEN
10398 Pa_Debug.WRITE(G_PKG_NAME, 'l_fn_task_attach_flag '||l_fn_task_attach_flag, l_debug_level3);
10399 END IF;
10400
10401 IF 'Y' = l_shared THEN
10402 IF ('Y' = l_min_one_wp_ver_sel AND 'Y' = l_wp_task_attach_flag )
10403 OR ('Y' = l_fin_tasks_flag AND 'Y' = l_fn_task_attach_flag ) THEN
10404 FOR rec_copied_tasks IN cur_get_copied_tasks( l_dest_shared_struc_id ) LOOP
10405 FND_ATTACHED_DOCUMENTS2_PKG.COPY_ATTACHMENTS(
10406 'PA_TASKS',
10407 rec_copied_tasks.src_ppe_id,
10408 null, null, null, null,
10409 'PA_TASKS',
10410 rec_copied_tasks.dest_ppe_id,
10411 null, null, null, null,
10412 FND_GLOBAL.USER_ID,
10413 FND_GLOBAL.LOGIN_ID,
10414 275, null, null
10415 );
10416 END LOOP;
10417 END IF;
10418 ELSE
10419 IF 'Y' = l_wp_task_attach_flag THEN
10420 FOR rec_copied_tasks IN cur_get_copied_tasks( l_dest_wp_structure_id ) LOOP
10421 FND_ATTACHED_DOCUMENTS2_PKG.COPY_ATTACHMENTS(
10422 'PA_TASKS',
10423 rec_copied_tasks.src_ppe_id,
10424 null, null, null, null,
10425 'PA_TASKS',
10426 rec_copied_tasks.dest_ppe_id,
10427 null, null, null, null,
10428 FND_GLOBAL.USER_ID,
10429 FND_GLOBAL.LOGIN_ID,
10430 275, null, null
10431 );
10432 END LOOP;
10433 END IF;
10434
10435 IF 'Y' = l_fn_task_attach_flag THEN
10436 FOR rec_copied_tasks IN cur_get_copied_tasks( l_dest_fn_structure_id ) LOOP
10437 FND_ATTACHED_DOCUMENTS2_PKG.COPY_ATTACHMENTS(
10438 'PA_TASKS',
10439 rec_copied_tasks.src_ppe_id,
10440 null, null, null, null,
10441 'PA_TASKS',
10442 rec_copied_tasks.dest_ppe_id,
10443 null, null, null, null,
10444 FND_GLOBAL.USER_ID,
10445 FND_GLOBAL.LOGIN_ID,
10446 275, null, null
10447 );
10448 END LOOP;
10449 END IF;
10450 END IF;
10451
10452 --Need To Sync Up Transaction Dates If Auto Sync Is On
10453 IF l_shared = 'Y' THEN
10454
10455 IF (PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_DATE_SYNC_ENABLED(l_dest_shared_struc_id) = 'Y')
10456 AND (PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_PUB_AT_CREATION(p_src_project_id) = 'Y') THEN
10457 --Copy to transaction date
10458 PA_PROJECT_DATES_PUB.COPY_PROJECT_DATES(
10459 p_project_id => p_dest_project_id,
10460 x_return_status => l_return_status,
10461 x_msg_count => l_msg_count,
10462 x_msg_data => l_msg_data
10463 );
10464
10465 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10466 x_msg_count := FND_MSG_PUB.count_msg;
10467 IF x_msg_count = 1 THEN
10468 x_msg_data := l_msg_data;
10469 END IF;
10470 RAISE FND_API.G_EXC_ERROR;
10471 END IF;
10472 END IF;
10473 END IF;
10474
10475 DECLARE
10476 Old_Versions_Tab SYSTEM.pa_num_tbl_type;
10477 New_Versions_Tab SYSTEM.pa_num_tbl_type;
10478
10479 l_wp_inter_proj_depend_flag VARCHAR2(1);
10480 BEGIN
10481 SELECT Element_Version_ID, attribute15 BULK COLLECT
10482 INTO New_Versions_Tab, Old_Versions_Tab
10483 FROM PA_Proj_Element_Versions
10484 WHERE Project_ID = p_dest_project_id;
10485
10486 PA_Relationship_Pvt.Copy_Intra_Dependency (
10487 P_Source_Ver_Tbl => Old_Versions_Tab,
10488 P_Destin_Ver_Tbl => New_Versions_Tab,
10489 X_Return_Status => X_Return_Status,
10490 X_Msg_Count => X_Msg_Count,
10491 X_Msg_Data => X_Msg_Data
10492 );
10493 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10494 RAISE FND_API.G_EXC_ERROR;
10495 END IF;
10496
10497 OPEN cur_get_flag('WP_INTER_PROJ_DEPEND_FLAG');
10498 FETCH cur_get_flag INTO l_wp_inter_proj_depend_flag;
10499 CLOSE cur_get_flag;
10500
10501 IF 'Y' = l_wp_inter_proj_depend_flag THEN
10502 PA_RELATIONSHIP_PVT.Copy_Inter_Project_Dependency (
10503 P_Source_Ver_Tbl => Old_Versions_Tab,
10504 P_Destin_Ver_Tbl => New_Versions_Tab,
10505 X_Return_Status => X_Return_Status,
10506 X_Msg_Count => X_Msg_Count,
10507 X_Msg_Data => X_Msg_Data
10508 );
10509 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10510 RAISE FND_API.G_EXC_ERROR;
10511 END IF;
10512 END IF;
10513 END ;--Finished copying Intra and Inter Project Dependencies
10514
10515 DECLARE
10516 CURSOR cur_get_str_shr_code IS
10517 SELECT structure_sharing_code
10518 FROM pa_projects_all
10519 WHERE project_id = p_dest_project_id;
10520
10521 src_versions_tab SYSTEM.pa_num_tbl_type;
10522 dest_versions_tab SYSTEM.pa_num_tbl_type;
10523 l_dest_proj_struc_shr_code VARCHAR2(30);
10524
10525 l_wp_res_assign_flag VARCHAR2(1) := 'N';
10526 l_wp_ra_people_flag VARCHAR2(1) := 'N';
10527 l_wp_ra_equipment_flag VARCHAR2(1) := 'N';
10528 l_wp_ra_material_flag VARCHAR2(1) := 'N';
10529 l_wp_ra_fin_element_flag VARCHAR2(1) := 'N';
10530
10531 BEGIN
10532
10533 SELECT Element_Version_ID, attribute15 BULK COLLECT
10534 INTO dest_versions_tab, src_Versions_Tab
10535 FROM PA_Proj_Element_Versions
10536 WHERE Project_ID = p_dest_project_id
10537 AND ( PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(element_version_id, 'WORKPLAN') = 'Y')
10538 AND object_type = 'PA_STRUCTURES';
10539
10540 OPEN cur_get_str_shr_code;
10541 FETCH cur_get_str_shr_code INTO l_dest_proj_struc_shr_code;
10542 CLOSE cur_get_str_shr_code;
10543
10544 IF l_dest_proj_struc_shr_code = 'SPLIT_MAPPING' THEN
10545 -- Copy mapping only in case of split structures with mapping
10546 PA_PROJ_STRUC_MAPPING_PUB.copy_mapping
10547 ( p_context => 'COPY_PROJECT'
10548 ,p_src_project_id => p_src_project_id
10549 ,p_dest_project_id => p_dest_project_id
10550 ,x_return_status => x_return_status
10551 ,x_msg_count => x_msg_count
10552 ,x_Msg_data => x_msg_data
10553 );
10554 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10555 RAISE FND_API.G_EXC_ERROR;
10556 END IF;
10557 END IF;
10558
10559 OPEN cur_get_flag('WP_RES_ASSIGN_FLAG');
10560 FETCH cur_get_flag INTO l_wp_res_assign_flag;
10561 CLOSE cur_get_flag;
10562 --NOTE : If Resource Assignments flag is unchecked, all other flags - people, equipment, material
10563 --and financial elements would be 'N'
10564
10565 IF 'Y' = l_wp_res_assign_flag THEN
10566 OPEN cur_get_flag('WP_RA_PEOPLE_FLAG');
10567 FETCH cur_get_flag INTO l_wp_ra_people_flag;
10568 CLOSE cur_get_flag;
10569
10570 OPEN cur_get_flag('WP_RA_EQUIPMENT_FLAG');
10571 FETCH cur_get_flag INTO l_wp_ra_equipment_flag;
10572 CLOSE cur_get_flag;
10573
10574 OPEN cur_get_flag('WP_RA_MATERIAL_FLAG');
10575 FETCH cur_get_flag INTO l_wp_ra_material_flag;
10576 CLOSE cur_get_flag;
10577
10578 OPEN cur_get_flag('WP_RA_FIN_ELEMENT_FLAG');
10579 FETCH cur_get_flag INTO l_wp_ra_fin_element_flag;
10580 CLOSE cur_get_flag;
10581 END IF;
10582
10583 --bug 3912603, call add_planning_transactions if no wp selected and split, Satish
10584 -- Copies budget versions, resource assignments and budget lines as required for the workplan version.
10585 --IF ('Y' = l_shared AND 'N' = l_fin_tasks_flag)
10586 --OR ('N' = l_shared AND 'Y' = l_workplan_enabled) THEN
10587 IF ('Y' = check_str_sel_flag AND 'N' = nvl(l_min_one_wp_ver_sel,'N')) THEN
10588 IF l_debug_mode = 'Y' THEN
10589 Pa_Debug.WRITE(G_PKG_NAME, 'Calling add_planning_transactions ', l_debug_level3);
10590 Pa_Debug.WRITE(G_PKG_NAME, 'Calling add_planning_transactions p_dest_project_id '||p_dest_project_id, l_debug_level3);
10591 Pa_Debug.WRITE(G_PKG_NAME, 'Calling add_planning_transactions l_new_wp_ver_id '||l_new_wp_ver_id, l_debug_level3);
10592 END IF;
10593 PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions
10594 (
10595 p_context => 'WORKPLAN'
10596 ,p_project_id => p_dest_project_id
10597 ,p_struct_elem_version_id => l_new_wp_ver_id
10598 ,x_return_status => x_return_status
10599 ,x_msg_count => x_msg_count
10600 ,x_Msg_data => x_msg_data
10601 );
10602 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10603 RAISE FND_API.G_EXC_ERROR;
10604 END IF;
10605 ELSE
10606 IF l_debug_mode = 'Y' THEN
10607 Pa_Debug.WRITE(G_PKG_NAME, 'Calling copy_wp_budget_versions ', l_debug_level3);
10608 END IF;
10609 PA_FP_COPY_FROM_PKG.copy_wp_budget_versions
10610 ( p_source_project_id => p_src_project_id
10611 ,p_target_project_id => p_dest_project_id
10612 ,p_src_sv_ids_tbl => src_Versions_Tab -- Workplan version id tbl
10613 ,p_target_sv_ids_tbl => dest_Versions_Tab -- Workplan version id tbl
10614 ,p_copy_people_flag => l_wp_ra_people_flag
10615 ,p_copy_equip_flag => l_wp_ra_equipment_flag
10616 ,p_copy_mat_item_flag => l_wp_ra_material_flag
10617 ,p_copy_fin_elem_flag => l_wp_ra_fin_element_flag
10618 ,x_return_status => x_return_status
10619 ,x_msg_count => x_msg_count
10620 ,x_Msg_data => x_msg_data
10621 );
10622 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10623 RAISE FND_API.G_EXC_ERROR;
10624 END IF;
10625 END IF;
10626
10627 IF ( 'Y' = l_dlv_enabled AND 'Y' = l_wp_deliverables_flag ) THEN
10628
10629 PA_DELIVERABLE_PUB.copy_deliverables
10630 (p_source_project_id => p_src_project_id
10631 ,p_target_project_id => p_dest_project_id
10632 ,p_item_details_flag => l_wp_dlv_item_det_flag
10633 ,p_dlv_actions_flag => 'Y'
10634 ,p_dlv_attachments_flag => l_wp_dlv_attach_flag
10635 ,p_association_flag => l_wp_dlv_assoc_task_flag
10636 ,p_prefix => 'CP'
10637 ,p_delta => p_delta
10638 ,p_calling_context => 'COPY_PROJECT'
10639 ,x_return_status => x_return_status
10640 ,x_msg_count => x_msg_count
10641 ,x_Msg_data => x_msg_data
10642 );
10643
10644 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10645 RAISE FND_API.G_EXC_ERROR;
10646 END IF;
10647 END IF;
10648 END;
10649
10650 /* 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*/
10651 /* Now update back the attributes column in pa_proj_elements and pa_proj_element_versions with actual data from source project
10652 UPDATE pa_proj_elements ppe1
10653 SET attribute15 = ( SELECT attribute15 FROM pa_proj_elements ppe2
10654 WHERE ppe2.project_id = p_src_project_id
10655 AND ppe2.proj_element_id = ppe1.attribute15 )
10656 WHERE project_id = p_dest_project_id ;
10657
10658 UPDATE pa_proj_element_versions ppevs1
10659 SET attribute15 = ( SELECT attribute15 FROM pa_proj_element_versions ppevs2
10660 WHERE ppevs2.project_id = p_src_project_id
10661 AND ppevs2.element_version_id = ppevs1.attribute15 )
10662 WHERE project_id = p_dest_project_id ; */
10663
10664 --3916763 Begin
10665
10666 IF l_debug_mode = 'Y' THEN
10667 Pa_Debug.WRITE(G_PKG_NAME, 'l_submit_wf_required='||l_submit_wf_required, l_debug_level3);
10668 Pa_Debug.WRITE(G_PKG_NAME, 'p_dest_project_id='||p_dest_project_id, l_debug_level3);
10669 Pa_Debug.WRITE(G_PKG_NAME, 'l_submit_wf_str_id='||l_submit_wf_str_id, l_debug_level3);
10670 Pa_Debug.WRITE(G_PKG_NAME, 'l_submit_wf_str_version_id='||l_submit_wf_str_version_id, l_debug_level3);
10671 Pa_Debug.WRITE(G_PKG_NAME, 'fnd_global.resp_id='||fnd_global.resp_id, l_debug_level3);
10672 END IF;
10673
10674 IF l_submit_wf_required = 'Y' AND l_submit_wf_str_version_id IS NOT NULL THEN
10675 IF l_debug_mode = 'Y' THEN
10676 Pa_Debug.WRITE(G_PKG_NAME, 'Calling SUBMIT_WORKPLAN ', l_debug_level3);
10677 END IF;
10678
10679 PA_PROJECT_STRUCTURE_PUB1.SUBMIT_WORKPLAN
10680 (
10681 p_calling_module => p_calling_module
10682 ,p_project_id => p_dest_project_id
10683 ,p_structure_id => l_submit_wf_str_id
10684 ,p_structure_version_id => l_submit_wf_str_version_id
10685 ,p_responsibility_id => fnd_global.resp_id
10686 ,x_return_status => x_return_status
10687 ,x_msg_count => x_msg_count
10688 ,x_msg_data => x_msg_data
10689 );
10690 IF l_debug_mode = 'Y' THEN
10691 Pa_Debug.WRITE(G_PKG_NAME, 'After Call SUBMIT_WORKPLAN x_return_status='||x_return_status, l_debug_level3);
10692 END IF;
10693 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10694 RAISE FND_API.G_EXC_ERROR;
10695 END IF;
10696 END IF;
10697 --3916763 End
10698
10699 x_return_status := FND_API.G_RET_STS_SUCCESS ;
10700
10701 -- Added for CBS phase 2 16470603
10702
10703 l_Cbs_Enabled := PA_ALTERNATE_TASK_PVT.Is_Cbs_Enabled(p_Project_Id => p_src_project_id);
10704 IF l_Cbs_Enabled='Y' THEN
10705 IF l_debug_mode = 'Y' THEN
10706 Pa_Debug.WRITE(G_PKG_NAME, ' Create Alterante tasks, call PA_ALTERNATE_TASK_PVT.Copy_Cost_Codes_From_Project API', l_debug_level3);
10707 END IF;
10708 PA_ALTERNATE_TASK_PVT.Copy_Cost_Codes_From_Project(
10709 p_Source_Project_Id =>p_src_project_id,
10710 p_Target_Project_Id =>p_dest_project_id,
10711 X_Return_Status =>X_Return_Status,
10712 X_Msg_Data =>X_Msg_Data,
10713 X_Msg_Count=>X_Msg_Count);
10714 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10715 RAISE FND_API.G_EXC_ERROR;
10716 END IF;
10717 IF l_debug_mode = 'Y' THEN
10718 Pa_Debug.WRITE(G_PKG_NAME, ' Created Alterante tasks for cbs enabled projects', l_debug_level3);
10719 END IF;
10720 END IF;-- Added for CBS phase 2 16470603
10721
10722 IF (p_commit = FND_API.G_TRUE) THEN
10723 COMMIT;
10724 END IF;
10725
10726 IF (p_debug_mode = 'Y') THEN
10727 pa_debug.debug('PA_PROJ_TASK_STRUC_PUB.copy_structures_tasks_bulk END');
10728 Pa_Debug.reset_curr_function; --For bug 4252182
10729 END IF;
10730
10731 EXCEPTION
10732
10733 WHEN FND_API.G_EXC_ERROR THEN
10734
10735 x_return_status := Fnd_Api.G_RET_STS_ERROR;
10736
10737 IF p_commit = FND_API.G_TRUE THEN
10738 ROLLBACK TO copy_struc_tasks_bulk;
10739 END IF;
10740
10741 l_msg_count := Fnd_Msg_Pub.count_msg;
10742 IF l_msg_count = 1 AND x_msg_data IS NULL
10743 THEN
10744 Pa_Interface_Utils_Pub.get_messages
10745 ( p_encoded => Fnd_Api.G_FALSE
10746 , p_msg_index => 1
10747 , p_msg_count => l_msg_count
10748 , p_msg_data => l_msg_data
10749 , p_data => l_data
10750 , p_msg_index_out => l_msg_index_out);
10751 x_msg_data := l_data;
10752 x_msg_count := l_msg_count;
10753 ELSE
10754 x_msg_count := l_msg_count;
10755 END IF;
10756
10757 IF l_debug_mode = 'Y' THEN
10758 Pa_Debug.reset_curr_function;
10759 END IF;
10760
10761 WHEN Invalid_Arg_Exc_WP THEN
10762 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
10763 x_msg_count := 1;
10764 x_msg_data := ' PA_PROJ_TASK_STRUC_PUB : copy_structures_tasks_bulk : NULL parameters passed';
10765
10766 IF p_commit = FND_API.G_TRUE THEN
10767 ROLLBACK TO copy_struc_tasks_bulk;
10768 END IF;
10769
10770 Fnd_Msg_Pub.add_exc_msg
10771 ( p_pkg_name => 'PA_TOP_TASK_CUST_INVOICE_PVT'
10772 , p_procedure_name => 'copy_structures_tasks_bulk'
10773 , p_error_text => x_msg_data);
10774
10775 IF l_debug_mode = 'Y' THEN
10776 Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
10777 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
10778 l_debug_level5);
10779 Pa_Debug.reset_curr_function;
10780 END IF;
10781 RAISE;
10782
10783 WHEN OTHERS THEN
10784 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
10785 x_msg_count := 1;
10786 x_msg_data := SQLERRM;
10787
10788 IF p_commit = FND_API.G_TRUE THEN
10789 ROLLBACK TO copy_struc_tasks_bulk;
10790 END IF;
10791
10792 Fnd_Msg_Pub.add_exc_msg
10793 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
10794 , p_procedure_name => 'copy_structures_tasks_bulk'
10795 , p_error_text => x_msg_data);
10796
10797 IF l_debug_mode = 'Y' THEN
10798 Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
10799 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
10800 l_debug_level5);
10801 Pa_Debug.reset_curr_function;
10802 END IF;
10803 RAISE;
10804 END copy_structures_tasks_bulk;
10805
10806
10807 FUNCTION get_adjusted_dates(
10808 p_target_start_date DATE
10809 ,p_target_finish_date DATE
10810 ,p_delta NUMBER
10811 ,p_scheduled_start_date DATE
10812 ,p_scheduled_finish_date DATE
10813 ) RETURN DATE IS
10814 --fix bug 2831973
10815 -- l_delta NUMBER;
10816 l_scheduled_start_date DATE;
10817 l_scheduled_finish_date DATE;
10818 BEGIN
10819
10820 --fix bug 2831973
10821 --replace all l_delta with p_delta
10822 -- IF (p_target_start_date IS NULL) THEN
10823 -- l_delta := 0;
10824 -- ELSE
10825 -- l_delta := p_target_start_date - p_scheduled_start_date;
10826 -- END IF;
10827
10828 --calculate scheduled start and finish dates
10829 IF (p_target_finish_date < p_scheduled_start_date + p_delta) THEN
10830 l_scheduled_start_date := p_target_finish_date;
10831 ELSE
10832 l_scheduled_start_date := p_scheduled_start_date + p_delta;
10833 END IF;
10834
10835 IF (p_target_finish_date < p_scheduled_finish_date + p_delta) THEN
10836 l_scheduled_finish_date := p_target_finish_date;
10837 ELSE
10838 l_scheduled_finish_date := p_scheduled_finish_date + p_delta;
10839 END IF;
10840
10841 IF p_scheduled_finish_date IS NULL
10842 THEN
10843 RETURN l_scheduled_start_date;
10844 ELSE
10845 RETURN l_scheduled_finish_date;
10846 END IF;
10847
10848 END get_adjusted_dates;
10849
10850 PROCEDURE copy_structures_bulk
10851 ( p_commit IN VARCHAR2 := FND_API.G_FALSE
10852 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
10853 ,p_validation_level IN VARCHAR2 := 100
10854 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
10855 ,p_debug_mode IN VARCHAR2 := 'N'
10856 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
10857 ,p_src_project_id IN NUMBER
10858 ,p_dest_project_id IN NUMBER
10859 ,p_delta IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
10860 ,p_copy_task_flag IN VARCHAR2 := 'Y'
10861 ,p_dest_template_flag IN VARCHAR2 := 'N' --bug 2805602
10862 ,p_src_template_flag IN VARCHAR2 := 'N' --bug 2805602
10863 ,p_dest_project_name IN VARCHAR2 --bug 2805602
10864 ,p_target_start_date IN DATE
10865 ,p_target_finish_date IN DATE
10866 ,p_calendar_id IN NUMBER
10867 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10868 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
10869 ,x_msg_data OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
10870 IS
10871 l_return_status VARCHAR2(1);
10872 l_msg_count NUMBER;
10873 l_msg_data VARCHAR2(250);
10874 l_append VARCHAR2(10) := ': ';
10875 l_project_name VARCHAR2(250);
10876 l_workplan_enabled VARCHAR2(1);
10877 l_shared VARCHAR2(1);
10878 l_versioning_enabled VARCHAR2(1);
10879 l_auto_pub_enabled VARCHAR2(1);
10880 l_src_template_flag VARCHAR2(1);
10881 l_dest_template_flag VARCHAR2(1);
10882 l_copy_flag_set VARCHAR2(1);
10883 l_max_date DATE;
10884 l_max_date2 DATE;
10885 l_latst_upd_wrkng_str_ver NUMBER;
10886 l_fin_str_copy_flag VARCHAR2(1);
10887 l_LATEST_EFF_PUBLISHED_FLAG VARCHAR2(1);
10888 l_name VARCHAR2(250);
10889 l_suffix VARCHAR2(250);
10890 l_struc_version_id NUMBER;
10891 l_src_str_version_id NUMBER;
10892 i NUMBER;
10893 j NUMBER ;
10894 k NUMBER ;
10895
10896 --fix bug 2831973
10897 l_delta NUMBER;
10898 l_src_sch_st_date DATE;
10899 CURSOR get_src_sch_st_date(c_project_id NUMBER, c_struc_ver_id NUMBER) IS
10900 select scheduled_start_date
10901 from pa_proj_elem_ver_schedule
10902 where project_id = c_project_id
10903 and element_version_id = c_struc_ver_id;
10904
10905
10906 /*bug 3737444 : The below code commented */
10907 /* CURSOR get_wp_attr IS
10908 select *
10909 from pa_proj_workplan_attr
10910 where project_id = p_src_project_id; */
10911
10912 /* Code Addition starts for bug 3737444 */
10913 CURSOR get_wp_attr IS
10914 select * from pa_proj_workplan_attr pppa where pppa.project_id=p_src_project_id
10915 and exists (select null from pa_proj_structure_types pst, pa_structure_types ps
10916 where pst.structure_type_id=ps.structure_type_id
10917 and ps. STRUCTURE_TYPE ='WORKPLAN'
10918 and pst.proj_element_id=pppa.proj_element_id);
10919
10920
10921 /* Code Addition ends for bug 3737444 */
10922
10923 l_wp_attr_rec get_wp_attr%ROWTYPE;
10924 l_user_id NUMBER := FND_GLOBAL.USER_ID;
10925 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
10926
10927 CURSOR l_get_structure_attr_csr
10928 IS
10929 /* SELECT *
10930 FROM PA_PROJ_ELEM_ver_structure ppevs
10931 WHERE project_id = p_src_project_id;*//*Commented below query and following criteria by SMUKKA */
10932 select ppevs.*
10933 from pa_structure_types pst,
10934 pa_proj_structure_types ppst,
10935 pa_proj_elem_ver_structure ppevs
10936 where ppevs.project_id = p_src_project_id
10937 and ppevs.proj_element_id= ppst.proj_element_id
10938 and ppst.structure_type_id = pst.structure_type_id
10939 and pst.structure_type in ('WORKPLAN','FINANCIAL');
10940
10941 CURSOR l_get_structure_attr_csr2
10942 IS
10943 SELECT ppevs.element_version_id, ppevs.status_code, ppevs.LATEST_EFF_PUBLISHED_FLAG, ppevs.current_flag,
10944 ppst.structure_type_id
10945 /* FROM PA_PROJ_ELEM_ver_structure ppevs,
10946 pa_proj_structure_types ppst
10947 WHERE project_id = p_src_project_id
10948 AND ppst.proj_element_id(+) = ppevs.proj_element_id;*//*Commented below query and following criteria by SMUKKA */
10949 from pa_proj_elem_ver_structure ppevs,
10950 pa_proj_structure_types ppst,
10951 pa_structure_types pst
10952 where project_id = p_src_project_id
10953 and ppst.proj_element_id(+) = ppevs.proj_element_id
10954 and ppst.structure_type_id = pst.structure_type_id
10955 and pst.structure_type in ('WORKPLAN','FINANCIAL');
10956
10957 CURSOR cur_elem_ver_seq
10958 IS
10959 SELECT pa_proj_element_versions_s.nextval
10960 FROM sys.dual;
10961
10962 l_get_structure_attr_csr_rec l_get_structure_attr_csr%ROWTYPE;
10963 l_get_structure_attr_csr_rec2 l_get_structure_attr_csr2%ROWTYPE;
10964
10965 TYPE structure_ver_record IS RECORD
10966 (src_str_version_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10967 src_str_status VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
10968 latest_pub_flag VARCHAR2(1) := 'N',
10969 current_flag VARCHAR2(1) := 'N',
10970 last_update_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
10971 copy_flag VARCHAR2(1) := 'N',
10972 dest_str_status VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
10973 src_stru_type_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
10974 );
10975
10976 TYPE l_dest_str_versions IS TABLE OF structure_ver_record
10977 INDEX BY BINARY_INTEGER;
10978 l_dest_str_versions_tbl l_dest_str_versions;
10979 l_latest_pub_str_ver_id NUMBER;
10980
10981 /* Code added for 6211012*/
10982
10983 TYPE typ_obj_rela_id is TABLE OF pa_object_relationships.object_relationship_id%TYPE
10984 INDEX BY BINARY_INTEGER;
10985 l_obj_rel_id typ_obj_rela_id;
10986
10987 TYPE typ_obj_typ_from is TABLE OF pa_object_relationships.object_type_from%TYPE
10988 INDEX BY BINARY_INTEGER;
10989 l_obj_typ_from typ_obj_typ_from;
10990
10991 TYPE typ_obj_from_id is TABLE OF pa_object_relationships.object_id_from1%TYPE
10992 INDEX BY BINARY_INTEGER;
10993 l_obj_from_id typ_obj_from_id;
10994
10995 TYPE typ_obj_typ_to is TABLE OF pa_object_relationships.object_type_to%TYPE
10996 INDEX BY BINARY_INTEGER;
10997 l_obj_typ_to typ_obj_typ_to;
10998
10999 TYPE typ_obj_to_id is TABLE OF pa_object_relationships.object_id_to1%TYPE
11000 INDEX BY BINARY_INTEGER;
11001 l_obj_to_id typ_obj_to_id;
11002
11003 TYPE typ_rel_typ is TABLE OF pa_object_relationships.relationship_type%TYPE
11004 INDEX BY BINARY_INTEGER;
11005 l_rel_typ typ_rel_typ;
11006
11007 TYPE typ_rel_subtyp is TABLE OF pa_object_relationships.relationship_subtype%TYPE
11008 INDEX BY BINARY_INTEGER;
11009 l_rel_subtyp typ_rel_subtyp;
11010
11011 TYPE typ_rec_ver_num is TABLE OF pa_object_relationships.Record_Version_Number%TYPE
11012 INDEX BY BINARY_INTEGER;
11013 l_rec_ver_num typ_rec_ver_num;
11014
11015 TYPE typ_wt_percent is TABLE OF pa_object_relationships.weighting_percentage%TYPE
11016 INDEX BY BINARY_INTEGER;
11017 l_wt_percent typ_wt_percent;
11018
11019
11020 CURSOR cur_pa_obj_rela_3(c_src_str_version_id NUMBER,
11021 c_struc_version_id NUMBER
11022 ) IS
11023 SELECT /*+ USE_HASH(ppev2 ppev1)*/
11024 pa_object_relationships_s.nextval,
11025 pobj.object_type_from,
11026 ppev1.element_version_id,
11027 pobj.object_type_to,
11028 ppev2.element_version_id,
11029 pobj.relationship_type,
11030 pobj.relationship_subtype,
11031 pobj.Record_Version_Number,
11032 pobj.weighting_percentage
11033 FROM ( SELECT object_type_from, object_id_from1,
11034 object_type_to, object_id_to1,
11035 relationship_type, relationship_subtype,
11036 Record_Version_Number, weighting_percentage
11037 FROM pa_object_relationships
11038 --bug#3094283WHERE RELATIONSHIP_TYPE = 'S'
11039 start with object_id_from1 = c_src_str_version_id
11040 and RELATIONSHIP_TYPE = 'S' /* Bug 2881667 - Added this condition */
11041 connect by object_id_from1 = prior object_id_to1
11042 and RELATIONSHIP_TYPE = 'S' ) pobj, /* Bug 2881667 - Added this condition */
11043 pa_proj_element_versions ppev1,
11044 pa_proj_element_versions ppev2
11045 WHERE
11046 --bug#3094283 ppev1.project_id = p_dest_project_id
11047 ppev1.attribute15 = pobj.object_id_from1
11048 --bug#3094283 AND ppev2.project_id = p_dest_project_id
11049 AND ppev2.attribute15 = pobj.object_id_to1
11050 AND ppev1.parent_structure_version_id = c_struc_version_id
11051 AND ppev2.parent_structure_version_id = c_struc_version_id;
11052
11053 /*End of Code added for 6211012*/
11054
11055 --bug 3138959
11056
11057 CURSOR cur_pa_struct IS
11058 SELECT ppe.proj_element_id, ppe.attribute15, ppst.structure_type_id
11059 /* FROM pa_proj_elements ppe, pa_proj_structure_types ppst
11060 WHERE ppe.proj_element_id = ppst.proj_element_id
11061 AND ppe.project_id = p_dest_project_id
11062 AND ppe.object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11063 from pa_proj_elements ppe,
11064 pa_proj_structure_types ppst,
11065 pa_structure_types pst
11066 where ppe.proj_element_id =ppst.proj_element_id
11067 and ppe.project_id = p_dest_project_id
11068 and ppe.object_type = 'PA_STRUCTURES'
11069 and ppst.structure_type_id = pst.structure_type_id
11070 and pst.structure_type in ('WORKPLAN','FINANCIAL');
11071
11072
11073 x_err_code NUMBER;
11074 x_err_stage VARCHAR2(2000);
11075 x_err_stack VARCHAR2(2000);
11076
11077
11078 --bug 3140032
11079
11080 CURSOR c_attach_tasks(c_orig_parent_structure_id NUMBER,
11081 c_new_parent_structure_id NUMBER) is
11082 SELECT orig.proj_element_id orig_task_id,
11083 new.proj_element_id new_task_id
11084 FROM pa_proj_elements orig, pa_proj_elements new
11085 WHERE orig.project_id = p_src_project_id
11086 AND new.element_number = orig.element_number
11087 AND new.project_id = p_dest_project_id
11088 AND new.object_type = 'PA_TASKS'
11089 AND orig.object_type = 'PA_TASKS'
11090 AND orig.parent_structure_id = c_orig_parent_structure_id
11091 AND new.parent_structure_id = c_new_parent_structure_id
11092 ;
11093
11094 c_atch c_attach_tasks%ROWTYPE ;
11095 l_source_parent_structure_id NUMBER;
11096 l_financial_structure_id Number;
11097 --bug 3140032
11098 --bug 3138959
11099
11100 --fix bug 2831775
11101 l_structure_id NUMBER;
11102 CURSOR get_shared_struc_id IS
11103 select ppe.proj_element_id
11104 /* from pa_proj_elements
11105 where project_id = p_dest_project_id
11106 and object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11107 from pa_proj_elements ppe,
11108 pa_proj_structure_types ppst,
11109 pa_structure_types pst
11110 where project_id = p_dest_project_id
11111 and object_type = 'PA_STRUCTURES'
11112 and ppe.proj_element_id =ppst.proj_element_id
11113 and ppst.structure_type_id = pst.structure_type_id
11114 and pst.structure_type in ('WORKPLAN','FINANCIAL');
11115
11116 --bug 2838547
11117 cursor get_person_id(p_user_id NUMBER) IS
11118 select p.person_id
11119 from per_all_people_f p, fnd_user f
11120 where f.employee_id = p.person_id
11121 and sysdate between p.effective_start_date and p.effective_end_date
11122 and f.user_id = p_user_id;
11123
11124 l_publish_person_id NUMBER;
11125 --bug 2838547
11126
11127 --Bug 2955589.
11128 l_structure_ver_name pa_projects_all.name%TYPE;
11129 l_working_ver_count NUMBER;
11130 l_structure_version_id pa_proj_element_versions.element_version_id%TYPE;
11131 -- The following two flags will indicate if the respective version has to be
11132 -- created when versioning is enabled and no working version exists for the
11133 -- source project.
11134 l_create_fin_version VARCHAR2(1);
11135 l_create_wk_version VARCHAR2(1);
11136
11137 BEGIN
11138
11139 IF (p_debug_mode = 'Y') THEN
11140 pa_debug.init_err_stack ('PA_PROJ_TASK_STRUC_PUB.copy_structures_bulk'); --For bug 4252182
11141 pa_debug.debug('PA_PROJ_TASK_STRUC_PUB.copy_structures_bulk begin');
11142 END IF;
11143
11144 IF (p_commit = FND_API.G_TRUE) THEN
11145 savepoint copy_structure_bulk_pvt;
11146 END IF;
11147
11148 -- Check if source and destination project are the same
11149 if p_src_project_id = p_dest_project_id then
11150 x_return_status := FND_API.G_RET_STS_SUCCESS;
11151 return;
11152 end if;
11153 l_dest_template_flag := p_dest_template_flag; --bug 2805602
11154 l_src_template_flag := p_src_template_flag; --bug 2805602
11155 l_project_name := p_dest_project_name; --bug 2805602
11156
11157 select meaning
11158 into l_suffix
11159 from pa_lookups
11160 where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
11161 and lookup_code = 'WORKPLAN';
11162
11163 -- Bug 3717026 Begin, commented as the structure name should be same as the project name.
11164 --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
11165 --l_name := pa_project_pub.G_structure_in_rec.structure_version_name;
11166 --ELSE
11167 l_name := substr(l_project_name, 1, 240);
11168 --END IF;
11169 -- Bug 3717026 End
11170 l_workplan_enabled := PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( p_src_project_id );
11171
11172 --bug 2838547
11173 open get_person_id(FND_GLOBAL.USER_ID);
11174 fetch get_person_id into l_publish_person_id;
11175 IF get_person_id%NOTFOUND then
11176 l_publish_person_id := NULL;
11177 END IF;
11178 close get_person_id;
11179 --bug 2838547
11180
11181 IF NVL( l_workplan_enabled, 'N' ) = 'Y'
11182 THEN
11183
11184 l_shared := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_src_project_id);
11185 --Get workplan attributes
11186 OPEN get_wp_attr;
11187 FETCH get_wp_attr into l_wp_attr_rec;
11188 CLOSE get_wp_attr;
11189
11190 l_versioning_enabled := l_wp_attr_rec.WP_ENABLE_VERSION_FLAG;
11191 l_auto_pub_enabled := l_wp_attr_rec.AUTO_PUB_UPON_CREATION_FLAG;
11192
11193 --Modify name; add suffix
11194 --l_name := substr(l_project_name||l_append||l_suffix, 1, 240); --update it later
11195
11196 END IF;
11197
11198
11199 --copy pa_proj_elements
11200 --copying structures and tasks as is.
11201 INSERT INTO pa_proj_elements(
11202 PROJ_ELEMENT_ID
11203 ,PROJECT_ID
11204 ,OBJECT_TYPE
11205 ,ELEMENT_NUMBER
11206 ,NAME
11207 ,DESCRIPTION
11208 ,STATUS_CODE
11209 ,WF_STATUS_CODE
11210 ,PM_SOURCE_CODE
11211 ,PM_SOURCE_REFERENCE
11212 ,CLOSED_DATE
11213 ,LOCATION_ID
11214 ,MANAGER_PERSON_ID
11215 ,CARRYING_OUT_ORGANIZATION_ID
11216 ,TYPE_ID
11217 ,PRIORITY_CODE
11218 ,CREATION_DATE
11219 ,CREATED_BY
11220 ,LAST_UPDATE_DATE
11221 ,LAST_UPDATED_BY
11222 ,LAST_UPDATE_LOGIN
11223 ,RECORD_VERSION_NUMBER
11224 ,REQUEST_ID
11225 ,PROGRAM_APPLICATION_ID
11226 ,PROGRAM_ID
11227 ,PROGRAM_UPDATE_DATE
11228 ,LINK_TASK_FLAG
11229 ,BASELINE_START_DATE
11230 ,BASELINE_FINISH_DATE
11231 ,progress_outdated_flag
11232 ,ATTRIBUTE_CATEGORY
11233 ,ATTRIBUTE1
11234 ,ATTRIBUTE2
11235 ,ATTRIBUTE3
11236 ,ATTRIBUTE4
11237 ,ATTRIBUTE5
11238 ,ATTRIBUTE6
11239 ,ATTRIBUTE7
11240 ,ATTRIBUTE8
11241 ,ATTRIBUTE9
11242 ,ATTRIBUTE10
11243 ,ATTRIBUTE11
11244 ,ATTRIBUTE12
11245 ,ATTRIBUTE13
11246 ,ATTRIBUTE14
11247 ,ATTRIBUTE15
11248 ,parent_structure_id
11249 ,TYPE_CODE
11250 ,INC_PROJ_PROGRESS_FLAG
11251 ,WQ_ITEM_CODE
11252 ,WQ_UOM_CODE
11253 ,WQ_ACTUAL_ENTRY_CODE
11254 ,TASK_PROGRESS_ENTRY_PAGE_ID
11255 ,BASELINE_DURATION
11256 ,PHASE_CODE
11257 ,PHASE_VERSION_ID
11258 ,source_object_id
11259 ,source_object_type
11260 ,PROGRESS_WEIGHT --Bug 3616964
11261 ,BASE_PERCENT_COMP_DERIV_CODE
11262 ,FUNCTION_CODE
11263 ,ENABLE_WF_FLAG
11264 ,WF_ITEM_TYPE
11265 ,WF_PROCESS
11266 ,WF_START_LEAD_DAYS
11267 )
11268 SELECT
11269 pa_tasks_s.nextval
11270 ,p_dest_project_id
11271 ,ppe.object_type
11272 ,ppe.element_number
11273 ,DECODE( ppe.object_type, 'PA_STRUCTURES',l_name, ppe.name )
11274 ,ppe.DESCRIPTION
11275 ,ppe.STATUS_CODE
11276 ,ppe.WF_STATUS_CODE
11277 ,ppe.PM_SOURCE_CODE
11278 ,ppe.PM_SOURCE_REFERENCE
11279 ,ppe.CLOSED_DATE
11280 ,ppe.LOCATION_ID
11281 ,ppe.MANAGER_PERSON_ID
11282 ,ppe.CARRYING_OUT_ORGANIZATION_ID
11283 ,ppe.TYPE_ID
11284 ,ppe.PRIORITY_CODE
11285 ,SYSDATE
11286 ,l_user_id
11287 ,SYSDATE
11288 ,l_user_id
11289 ,l_login_id
11290 ,ppe.RECORD_VERSION_NUMBER
11291 ,ppe.REQUEST_ID
11292 ,ppe.PROGRAM_APPLICATION_ID
11293 ,ppe.PROGRAM_ID
11294 ,ppe.PROGRAM_UPDATE_DATE
11295 ,ppe.LINK_TASK_FLAG
11296 ,ppe.BASELINE_START_DATE
11297 ,ppe.BASELINE_FINISH_DATE
11298 ,'N' --,ppe.progress_outdated_flag
11299 ,ppe.ATTRIBUTE_CATEGORY
11300 ,ppe.ATTRIBUTE1
11301 ,ppe.ATTRIBUTE2
11302 ,ppe.ATTRIBUTE3
11303 ,ppe.ATTRIBUTE4
11304 ,ppe.ATTRIBUTE5
11305 ,ppe.ATTRIBUTE6
11306 ,ppe.ATTRIBUTE7
11307 ,ppe.ATTRIBUTE8
11308 ,ppe.ATTRIBUTE9
11309 ,ppe.ATTRIBUTE10
11310 ,ppe.ATTRIBUTE11
11311 ,ppe.ATTRIBUTE12
11312 ,ppe.ATTRIBUTE13
11313 ,ppe.ATTRIBUTE14
11314 ,ppe.proj_element_id --attribute 15 is used to store old structure id to identify the structure type
11315 ,ppe.parent_structure_id
11316 ,ppe.TYPE_CODE
11317 ,ppe.INC_PROJ_PROGRESS_FLAG
11318 ,ppe.WQ_ITEM_CODE
11319 ,ppe.WQ_UOM_CODE
11320 ,ppe.WQ_ACTUAL_ENTRY_CODE
11321 ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
11322 ,ppe.BASELINE_DURATION
11323 ,ppe.PHASE_CODE
11324 ,ppe.PHASE_VERSION_ID
11325 ,p_dest_project_id
11326 ,'PA_PROJECTS'
11327 ,ppe.PROGRESS_WEIGHT --Bug 3616964
11328 ,ppe.BASE_PERCENT_COMP_DERIV_CODE
11329 ,ppe.FUNCTION_CODE
11330 ,ppe.ENABLE_WF_FLAG
11331 ,ppe.WF_ITEM_TYPE
11332 ,ppe.WF_PROCESS
11333 ,ppe.WF_START_LEAD_DAYS
11334 /* FROM pa_proj_elements ppe
11335 where project_id = p_src_project_id
11336 and ppe.object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11337 from pa_proj_elements ppe
11338 where ppe.project_id = p_src_project_id
11339 and ppe.object_type = 'PA_STRUCTURES'
11340 and ppe.proj_element_id IN (select ppe2.proj_element_id
11341 from pa_proj_elements ppe2,
11342 pa_proj_structure_types ppst,
11343 pa_structure_types pst
11344 where ppe2.project_id = p_src_project_id
11345 and ppe2.object_type = 'PA_STRUCTURES'
11346 and ppe2.proj_element_id = ppst.proj_element_id
11347 and ppst.structure_type_id = pst.structure_type_id
11348 and pst.structure_type in ('WORKPLAN','FINANCIAL'));
11349
11350
11351 --updating element_number with the proj_element_id
11352 update pa_proj_elements
11353 set element_number = proj_element_id
11354 WHERE project_id = p_dest_project_id
11355 AND object_type = 'PA_STRUCTURES'
11356 ;
11357
11358
11359 --Copy pa_proj_structure_types
11360
11361 INSERT INTO PA_PROJ_STRUCTURE_TYPES(
11362 PROJ_STRUCTURE_TYPE_ID
11363 ,PROJ_ELEMENT_ID
11364 ,STRUCTURE_TYPE_ID
11365 ,CREATION_DATE
11366 ,CREATED_BY
11367 ,LAST_UPDATE_DATE
11368 ,LAST_UPDATED_BY
11369 ,LAST_UPDATE_LOGIN
11370 ,RECORD_VERSION_NUMBER )
11371 SELECT
11372 pa_proj_structure_types_s.nextval
11373 , ppe.proj_element_id
11374 , ppst.structure_type_id --structure type
11375 , sysdate
11376 , l_user_id
11377 , sysdate
11378 , l_user_id
11379 , l_login_id
11380 , 1
11381 /*from pa_proj_elements ppe, pa_proj_structure_types ppst
11382 where ppe.project_id = p_dest_project_id
11383 and ppe.attribute15 = ppst.proj_element_id ---join with copy_from_proj_element_id to get the structure types
11384 and ppe.object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11385 from pa_proj_elements ppe,
11386 pa_proj_structure_types ppst,
11387 pa_structure_types pst
11388 where ppe.project_id = p_dest_project_id
11389 and ppe.attribute15 = ppst.proj_element_id
11390 and ppe.object_type = 'PA_STRUCTURES'
11391 and ppst.structure_type_id = pst.structure_type_id
11392 and pst.structure_type in ('WORKPLAN','FINANCIAL');
11393
11394 --bug 3138959
11395 IF l_shared = 'N' AND l_workplan_enabled = 'Y' -- For Split structures
11396 AND pa_project_pub.G_structure_in_rec.structure_type = 'WORKPLAN'
11397 THEN
11398 FOR cur_pa_struct_rec in cur_pa_struct LOOP
11399 IF cur_pa_struct_rec.structure_type_id = 6 --Financial
11400 THEN
11401 --call PA_PROJECT_CORE2.copy_task to copy PA_TASKSi tasks.
11402
11403 pa_project_core2.copy_task (
11404 x_orig_project_id => p_src_project_id ,
11405 x_new_project_id => p_dest_project_id,
11406 x_err_code => x_err_code,
11407 x_err_stage => x_err_stage,
11408 x_err_stack => x_err_stack);
11409
11410 if ( x_err_code > 0 or x_err_code < 0 ) then
11411 x_msg_data := x_err_stage;
11412 raise FND_API.G_EXC_ERROR;
11413 end if;
11414
11415 --Split; Creating Financial tasks
11416 INSERT INTO pa_proj_elements(
11417 PROJ_ELEMENT_ID
11418 ,PROJECT_ID
11419 ,OBJECT_TYPE
11420 ,ELEMENT_NUMBER
11421 ,NAME
11422 ,DESCRIPTION
11423 ,STATUS_CODE
11424 ,WF_STATUS_CODE
11425 ,PM_SOURCE_CODE
11426 ,PM_SOURCE_REFERENCE
11427 ,CLOSED_DATE
11428 ,LOCATION_ID
11429 ,MANAGER_PERSON_ID
11430 ,CARRYING_OUT_ORGANIZATION_ID
11431 ,TYPE_ID
11432 ,PRIORITY_CODE
11433 ,CREATION_DATE
11434 ,CREATED_BY
11435 ,LAST_UPDATE_DATE
11436 ,LAST_UPDATED_BY
11437 ,LAST_UPDATE_LOGIN
11438 ,RECORD_VERSION_NUMBER
11439 ,REQUEST_ID
11440 ,PROGRAM_APPLICATION_ID
11441 ,PROGRAM_ID
11442 ,PROGRAM_UPDATE_DATE
11443 ,LINK_TASK_FLAG
11444 ,BASELINE_START_DATE
11445 ,BASELINE_FINISH_DATE
11446 ,progress_outdated_flag
11447 ,ATTRIBUTE_CATEGORY
11448 ,ATTRIBUTE1
11449 ,ATTRIBUTE2
11450 ,ATTRIBUTE3
11451 ,ATTRIBUTE4
11452 ,ATTRIBUTE5
11453 ,ATTRIBUTE6
11454 ,ATTRIBUTE7
11455 ,ATTRIBUTE8
11456 ,ATTRIBUTE9
11457 ,ATTRIBUTE10
11458 ,ATTRIBUTE11
11459 ,ATTRIBUTE12
11460 ,ATTRIBUTE13
11461 ,ATTRIBUTE14
11462 ,ATTRIBUTE15
11463 ,parent_structure_id
11464 ,TYPE_CODE
11465 ,INC_PROJ_PROGRESS_FLAG
11466 ,WQ_ITEM_CODE
11467 ,WQ_UOM_CODE
11468 ,WQ_ACTUAL_ENTRY_CODE
11469 ,TASK_PROGRESS_ENTRY_PAGE_ID
11470 ,BASELINE_DURATION
11471 ,PHASE_CODE
11472 ,PHASE_VERSION_ID
11473 ,source_object_id
11474 ,source_object_type
11475 ,PROGRESS_WEIGHT --Bug 3616964
11476 ,BASE_PERCENT_COMP_DERIV_CODE
11477 ,FUNCTION_CODE
11478 ,ENABLE_WF_FLAG
11479 ,WF_ITEM_TYPE
11480 ,WF_PROCESS
11481 ,WF_START_LEAD_DAYS
11482 )
11483 SELECT
11484 pt.task_id
11485 ,p_dest_project_id
11486 ,ppe.object_type
11487 ,ppe.element_number
11488 ,ppe.name
11489 ,ppe.DESCRIPTION
11490 ,INITIAL_STATUS_CODE --bug 2827090
11491 ,ppe.WF_STATUS_CODE
11492 ,ppe.PM_SOURCE_CODE --update the source code later
11493 ,decode(ppe.PM_SOURCE_REFERENCE, null,pt.task_number, ppe.PM_SOURCE_REFERENCE )
11494 ,ppe.CLOSED_DATE
11495 ,ppe.LOCATION_ID
11496 ,ppe.MANAGER_PERSON_ID
11497 ,ppe.CARRYING_OUT_ORGANIZATION_ID
11498 ,ppe.TYPE_ID
11499 ,ppe.PRIORITY_CODE
11500 ,SYSDATE
11501 ,l_user_id
11502 ,SYSDATE
11503 ,l_user_id
11504 ,l_login_id
11505 ,ppe.RECORD_VERSION_NUMBER
11506 ,ppe.REQUEST_ID
11507 ,ppe.PROGRAM_APPLICATION_ID
11508 ,ppe.PROGRAM_ID
11509 ,ppe.PROGRAM_UPDATE_DATE
11510 ,ppe.LINK_TASK_FLAG
11511 ,ppe.BASELINE_START_DATE
11512 ,ppe.BASELINE_FINISH_DATE
11513 ,'N' --,ppe.progress_outdated_flag
11514 ,ppe.ATTRIBUTE_CATEGORY
11515 ,ppe.ATTRIBUTE1
11516 ,ppe.ATTRIBUTE2
11517 ,ppe.ATTRIBUTE3
11518 ,ppe.ATTRIBUTE4
11519 ,ppe.ATTRIBUTE5
11520 ,ppe.ATTRIBUTE6
11521 ,ppe.ATTRIBUTE7
11522 ,ppe.ATTRIBUTE8
11523 ,ppe.ATTRIBUTE9
11524 ,ppe.ATTRIBUTE10
11525 ,ppe.ATTRIBUTE11
11526 ,ppe.ATTRIBUTE12
11527 ,ppe.ATTRIBUTE13
11528 ,ppe.ATTRIBUTE14
11529 ,ppe.proj_element_id --attribute 15 is used to store old ids
11530 ,cur_pa_struct_rec.proj_element_id
11531 ,ppe.TYPE_CODE
11532 ,ppe.INC_PROJ_PROGRESS_FLAG
11533 ,ppe.WQ_ITEM_CODE
11534 ,ppe.WQ_UOM_CODE
11535 ,ppe.WQ_ACTUAL_ENTRY_CODE
11536 ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
11537 ,ppe.BASELINE_DURATION
11538 ,ppe.PHASE_CODE
11539 ,ppe.PHASE_VERSION_ID
11540 ,p_dest_project_id
11541 ,'PA_PROJECTS'
11542 ,ppe.PROGRESS_WEIGHT --Bug 3616964
11543 ,ppe.BASE_PERCENT_COMP_DERIV_CODE
11544 ,ppe.FUNCTION_CODE
11545 ,'N'
11546 ,ppe.WF_ITEM_TYPE
11547 ,ppe.WF_PROCESS
11548 ,ppe.WF_START_LEAD_DAYS
11549 FROM pa_proj_elements ppe,
11550 pa_tasks pt,
11551 pa_task_types ptt --bug 2827090
11552 WHERE ppe.project_id = p_src_project_id
11553 AND pt.project_id = p_dest_project_id
11554 AND pt.task_number = substrb(rtrim(ppe.element_number),1,25) -- Substrb added for Bug 5152448
11555 AND ppe.parent_structure_id = cur_pa_struct_rec.attribute15
11556 and ppe.object_type = 'PA_TASKS'
11557 and ppe.type_id = ptt.task_type_id --bug 2827090
11558 ;
11559
11560 l_financial_structure_id := cur_pa_struct_rec.proj_element_id;
11561 ---update task reference in pa_tasks for all the
11562 update pa_tasks
11563 set PM_TASK_REFERENCE = task_number
11564 where project_id = p_dest_project_id
11565 and pm_task_reference IS NULL
11566 ;
11567
11568
11569 --bug 3140032
11570 OPEN c_attach_tasks( cur_pa_struct_rec.attribute15,
11571 cur_pa_struct_rec.proj_element_id);
11572 LOOP
11573 FETCH c_attach_tasks INTO c_atch ;
11574 if c_attach_tasks%notfound then
11575 exit ;
11576 end if;
11577 fnd_attached_documents2_pkg.copy_attachments('PA_TASKS',
11578 c_atch.orig_task_id,
11579 null, null, null, null,
11580 'PA_TASKS',
11581 c_atch.new_task_id,
11582 null, null, null, null,
11583 FND_GLOBAL.USER_ID,
11584 FND_GLOBAL.LOGIN_ID,
11585 275, null, null);
11586
11587 END LOOP ;
11588 CLOSE c_attach_tasks;
11589 --bug 3140032
11590 ELSIF cur_pa_struct_rec.structure_type_id = 1
11591 THEN
11592
11593 ---update source reference in pa_proj_elements for all the
11594 Update pa_proj_elements
11595 set PM_SOURCE_CODE = ( SELECT PM_SOURCE_CODE FROM pa_proj_elements
11596 WHERE project_id = p_dest_project_id
11597 AND object_type = 'PA_STRUCTURES'
11598 AND proj_element_id = cur_pa_struct_rec.proj_element_id
11599 AND PM_SOURCE_CODE IS NOT NULL
11600 )
11601 WHERE proj_element_id = l_financial_structure_id
11602 AND project_id = p_dest_project_id
11603 AND PM_SOURCE_CODE IS NULL;
11604
11605 ---update source reference in pa_tasks for all the
11606 Update pa_tasks
11607 set PM_PRODUCT_CODE = ( SELECT PM_SOURCE_CODE FROM pa_proj_elements
11608 WHERE project_id = p_dest_project_id
11609 AND object_type = 'PA_STRUCTURES'
11610 AND proj_element_id = cur_pa_struct_rec.proj_element_id
11611 AND PM_SOURCE_CODE IS NOT NULL
11612 )
11613 WHERE project_id = p_dest_project_id
11614 AND PM_PRODUCT_CODE IS NULL;
11615
11616 END IF; --if structure type = 6
11617 END LOOP;
11618 END IF; --bug 3138959
11619
11620 IF NVL( l_workplan_enabled, 'N' ) = 'N'
11621 THEN
11622 --Only FINANCIAL
11623 --Creating structure version first
11624 OPEN cur_elem_ver_seq;
11625 FETCH cur_elem_ver_seq INTO l_struc_version_id;
11626 CLOSE cur_elem_ver_seq;
11627
11628
11629 --First copy structure version and then copy all task versions
11630 --We cannot perform both with the same sql bcoz we need parent_structure version id for tasks.
11631 INSERT INTO pa_proj_element_versions(
11632 ELEMENT_VERSION_ID
11633 ,PROJ_ELEMENT_ID
11634 ,OBJECT_TYPE
11635 ,PROJECT_ID
11636 ,PARENT_STRUCTURE_VERSION_ID
11637 ,DISPLAY_SEQUENCE
11638 ,WBS_LEVEL
11639 ,WBS_NUMBER
11640 ,CREATION_DATE
11641 ,CREATED_BY
11642 ,LAST_UPDATE_DATE
11643 ,LAST_UPDATED_BY
11644 ,LAST_UPDATE_LOGIN
11645 ,RECORD_VERSION_NUMBER
11646 ,attribute15 --this column is used to store structure ver id of the source project to be used to created relationships.
11647 ,ATTRIBUTE_CATEGORY
11648 ,ATTRIBUTE1
11649 ,ATTRIBUTE2
11650 ,ATTRIBUTE3
11651 ,ATTRIBUTE4
11652 ,ATTRIBUTE5
11653 ,ATTRIBUTE6
11654 ,ATTRIBUTE7
11655 ,ATTRIBUTE8
11656 ,ATTRIBUTE9
11657 ,ATTRIBUTE10
11658 ,ATTRIBUTE11
11659 ,ATTRIBUTE12
11660 ,ATTRIBUTE13
11661 ,ATTRIBUTE14
11662 ,TASK_UNPUB_VER_STATUS_CODE
11663 ,source_object_id
11664 ,source_object_type
11665 )
11666 SELECT
11667 l_struc_version_id
11668 ,ppe.proj_element_id
11669 ,ppev.object_type
11670 ,p_dest_project_id
11671 ,l_struc_version_id
11672 ,ppev.DISPLAY_SEQUENCE
11673 ,ppev.WBS_LEVEL
11674 ,ppev.WBS_NUMBER
11675 ,SYSDATE ------CREATION_DATE
11676 ,l_user_id ------CREATED_BY
11677 ,SYSDATE ------LAST_UPDATE_DATE
11678 ,l_user_id ------LAST_UPDATED_BY
11679 ,l_login_id ------LAST_UPDATE_LOGIN
11680 ,ppev.RECORD_VERSION_NUMBER ------RECORD_VERSION_NUMBER
11681 ,ppev.element_version_id
11682 ,ppev.ATTRIBUTE_CATEGORY
11683 ,ppev.ATTRIBUTE1
11684 ,ppev.ATTRIBUTE2
11685 ,ppev.ATTRIBUTE3
11686 ,ppev.ATTRIBUTE4
11687 ,ppev.ATTRIBUTE5
11688 ,ppev.ATTRIBUTE6
11689 ,ppev.ATTRIBUTE7
11690 ,ppev.ATTRIBUTE8
11691 ,ppev.ATTRIBUTE9
11692 ,ppev.ATTRIBUTE10
11693 ,ppev.ATTRIBUTE11
11694 ,ppev.ATTRIBUTE12
11695 ,ppev.ATTRIBUTE13
11696 ,ppev.ATTRIBUTE14
11697 ,ppev.TASK_UNPUB_VER_STATUS_CODE
11698 ,p_dest_project_id
11699 ,'PA_PROJECTS'
11700 /*from pa_proj_element_versions ppev,
11701 pa_proj_elements ppe
11702 where ppev.project_id = p_src_project_id
11703 and ppe.project_id = p_dest_project_id
11704 and ppev.proj_element_id = ppe.attribute15
11705 and ppe.object_type = 'PA_STRUCTURES'
11706 and ppev.object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11707 from pa_proj_element_Versions ppev,
11708 pa_proj_elements ppe
11709 where ppev.project_id = p_src_project_id
11710 and ppe.project_id = p_dest_project_id
11711 and ppev.proj_element_id = ppe.attribute15
11712 and ppe.object_type = 'PA_STRUCTURES'
11713 and ppev.object_type = 'PA_STRUCTURES'
11714 and ppe.proj_element_id IN
11715 (select ppe2.proj_element_id
11716 from pa_proj_elements ppe2,
11717 pa_proj_structure_types ppst,
11718 pa_structure_types pst
11719 -- where ppe2.project_id = p_src_project_id
11720 where ppe2.project_id = p_dest_project_id --Bug 3585699 SMukka Replaced p_src_project_id by p_dest_project_id
11721 and ppe2.object_type = 'PA_STRUCTURES'
11722 and ppe2.proj_element_id = ppst.proj_element_id
11723 and ppst.structure_type_id = pst.structure_type_id
11724 and pst.structure_type in ('WORKPLAN','FINANCIAL'));
11725
11726
11727
11728 SELECT element_version_id INTO l_src_str_version_id
11729 /*FROM pa_proj_element_versions
11730 WHERE project_id = p_src_project_id
11731 AND object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11732 FROM pa_proj_element_versions
11733 WHERE project_id = p_src_project_id
11734 AND object_type = 'PA_STRUCTURES'
11735 and proj_element_id IN (select ppe2.proj_element_id
11736 from pa_proj_elements ppe2,
11737 pa_proj_structure_types ppst,
11738 pa_structure_types pst
11739 where ppe2.project_id = p_src_project_id
11740 and ppe2.object_type = 'PA_STRUCTURES'
11741 and ppe2.proj_element_id = ppst.proj_element_id
11742 and ppst.structure_type_id = pst.structure_type_id
11743 and pst.structure_type in ('WORKPLAN','FINANCIAL'));
11744
11745
11746 --bug 3010538
11747 --added PROCESS_UPDATE_WBS_FLAG
11748 INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
11749 PEV_STRUCTURE_ID
11750 ,ELEMENT_VERSION_ID
11751 ,VERSION_NUMBER
11752 ,NAME
11753 ,PROJECT_ID
11754 ,PROJ_ELEMENT_ID
11755 ,DESCRIPTION
11756 ,EFFECTIVE_DATE
11757 ,PUBLISHED_DATE
11758 ,PUBLISHED_BY_PERSON_ID
11759 ,CURRENT_BASELINE_DATE
11760 ,CURRENT_FLAG
11761 ,CURRENT_BASELINE_PERSON_ID
11762 ,ORIGINAL_BASELINE_DATE
11763 ,ORIGINAL_FLAG
11764 ,ORIGINAL_BASELINE_PERSON_ID
11765 ,LOCK_STATUS_CODE
11766 ,LOCKED_BY_PERSON_ID
11767 ,LOCKED_DATE
11768 ,STATUS_CODE
11769 ,WF_STATUS_CODE
11770 ,LATEST_EFF_PUBLISHED_FLAG
11771 ,RECORD_VERSION_NUMBER
11772 ,WBS_RECORD_VERSION_NUMBER
11773 ,CREATION_DATE
11774 ,CREATED_BY
11775 ,LAST_UPDATE_DATE
11776 ,LAST_UPDATED_BY
11777 ,LAST_UPDATE_LOGIN
11778 ,change_reason_code
11779 ,PROCESS_UPDATE_WBS_FLAG
11780 ,current_working_flag /* FPM bug 3301192 */
11781 ,source_object_id
11782 ,source_object_type
11783 )
11784 SELECT
11785 pa_proj_elem_ver_structure_s.nextval
11786 ,l_struc_version_id
11787 ,1
11788 --,ppevs.name, rtarway, 3655698, replaced ppevs.name with ppe.name
11789 ,ppe.name
11790 ,p_dest_project_id
11791 ,ppe.proj_element_id
11792 --,ppevs.DESCRIPTION , rtarway, 3655698 replaced ppevs.DESCRIPTION with ppe.DESCRIPTION
11793 ,ppe.description
11794 ,ppevs.EFFECTIVE_DATE
11795 ,decode(p_dest_template_flag, 'N', sysdate, to_date(NULL)) --bug 2838547
11796 ,decode(p_dest_template_flag, 'N', l_publish_person_id, NULL) --bug 2838547
11797 ,ppevs.CURRENT_BASELINE_DATE
11798 ,ppevs.CURRENT_FLAG
11799 ,ppevs.CURRENT_BASELINE_PERSON_ID
11800 ,ppevs.ORIGINAL_BASELINE_DATE
11801 ,ppevs.ORIGINAL_FLAG
11802 ,ppevs.ORIGINAL_BASELINE_PERSON_ID
11803 ,'UNLOCKED'
11804 ,null
11805 ,null
11806 ,decode( p_dest_template_flag, 'N', 'STRUCTURE_PUBLISHED', ppevs.STATUS_CODE )
11807 ,ppevs.WF_STATUS_CODE
11808 ,decode( p_dest_template_flag, 'N', 'Y', ppevs.LATEST_EFF_PUBLISHED_FLAG )
11809 ,ppevs.RECORD_VERSION_NUMBER
11810 ,ppevs.WBS_RECORD_VERSION_NUMBER
11811 ,SYSDATE
11812 ,l_user_id
11813 ,SYSDATE
11814 ,l_user_id
11815 ,l_login_id
11816 ,ppevs.change_reason_code
11817 ,'N'
11818 ,ppevs.current_working_flag /* FPM bug 3301192 */
11819 ,p_dest_project_id
11820 ,'PA_PROJECTS'
11821 /*FROM PA_PROJ_ELEM_VER_STRUCTURE ppevs, pa_proj_elements ppe
11822 WHERE ppevs.project_id = p_src_project_id
11823 AND ppe.project_id = p_dest_project_id
11824 and ppevs.proj_element_id = ppe.attribute15
11825 AND ppe.object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11826 FROM PA_PROJ_ELEM_VER_STRUCTURE ppevs, pa_proj_elements ppe
11827 WHERE ppevs.project_id = p_src_project_id
11828 AND ppe.project_id = p_dest_project_id
11829 and ppevs.proj_element_id = ppe.attribute15
11830 AND ppe.object_type = 'PA_STRUCTURES'
11831 and ppe.proj_element_id IN (SELECT ppe2.proj_element_id
11832 FROM pa_proj_elements ppe2,
11833 pa_proj_structure_types ppst,
11834 pa_structure_types pst
11835 WHERE ppe2.project_id = p_dest_project_id
11836 AND ppe2.object_type = 'PA_STRUCTURES'
11837 AND ppe2.proj_element_id = ppst.proj_element_id
11838 AND ppst.structure_type_id = pst.structure_type_id
11839 AND pst.structure_type in ('WORKPLAN','FINANCIAL'));
11840 --Added by rtarway for BUG 3951701
11841 --Copy workplan attributes for financial only structures
11842
11843 INSERT INTO pa_proj_workplan_attr(
11844 PROJ_ELEMENT_ID
11845 ,PROJECT_ID
11846 ,LAST_UPDATE_DATE
11847 ,LAST_UPDATED_BY
11848 ,CREATION_DATE
11849 ,CREATED_BY
11850 ,WP_APPROVAL_REQD_FLAG
11851 ,WP_AUTO_PUBLISH_FLAG
11852 ,WP_DEFAULT_DISPLAY_LVL
11853 ,WP_ENABLE_VERSION_FLAG
11854 ,AUTO_PUB_UPON_CREATION_FLAG
11855 ,AUTO_SYNC_TXN_DATE_FLAG
11856 ,WP_APPROVER_SOURCE_ID
11857 ,WP_APPROVER_SOURCE_TYPE
11858 ,RECORD_VERSION_NUMBER
11859 ,LAST_UPDATE_LOGIN
11860 ,TXN_DATE_SYNC_BUF_DAYS
11861 ,LIFECYCLE_VERSION_ID
11862 ,CURRENT_PHASE_VERSION_ID
11863 ,SCHEDULE_THIRD_PARTY_FLAG
11864 ,ALLOW_LOWEST_TSK_DEP_FLAG
11865 ,AUTO_ROLLUP_SUBPROJ_FLAG
11866 ,THIRD_PARTY_SCHEDULE_CODE
11867 ,source_object_id
11868 ,source_object_type
11869 -- gboomina Bug 8586393 - start
11870 ,use_task_schedule_flag
11871 -- gboomina Bug 8586393 - end
11872 )
11873 SELECT
11874 ppe.PROJ_ELEMENT_ID
11875 ,ppe.PROJECT_ID
11876 ,SYSDATE
11877 ,l_user_id
11878 ,SYSDATE
11879 ,l_user_id
11880 ,ppwa.WP_APPROVAL_REQD_FLAG
11881 ,ppwa.WP_AUTO_PUBLISH_FLAG
11882 ,ppwa.WP_DEFAULT_DISPLAY_LVL
11883 ,ppwa.WP_ENABLE_VERSION_FLAG
11884 ,ppwa.AUTO_PUB_UPON_CREATION_FLAG
11885 ,ppwa.AUTO_SYNC_TXN_DATE_FLAG
11886 ,ppwa.WP_APPROVER_SOURCE_ID
11887 ,ppwa.WP_APPROVER_SOURCE_TYPE
11888 ,ppwa.RECORD_VERSION_NUMBER
11889 ,l_login_id
11890 ,ppwa.TXN_DATE_SYNC_BUF_DAYS
11891 ,ppwa.LIFECYCLE_VERSION_ID
11892 ,ppwa.CURRENT_PHASE_VERSION_ID
11893 ,ppwa.SCHEDULE_THIRD_PARTY_FLAG
11894 ,ppwa.ALLOW_LOWEST_TSK_DEP_FLAG
11895 ,ppwa.AUTO_ROLLUP_SUBPROJ_FLAG
11896 ,ppwa.THIRD_PARTY_SCHEDULE_CODE
11897 ,ppe.PROJECT_ID
11898 ,'PA_PROJECTS'
11899 -- gboomina Bug 8586393 - start
11900 ,ppwa.use_task_schedule_flag
11901 -- gboomina Bug 8586393 - end
11902 FROM pa_proj_elements ppe,
11903 pa_proj_workplan_attr ppwa
11904 WHERE ppwa.project_id = p_src_project_id
11905 AND ppe.attribute15 = ppwa.proj_element_id
11906 AND ppe.project_id = p_dest_project_id
11907 AND ppe.object_type='PA_STRUCTURES';
11908
11909 --Copy progress attributes for financial only structures
11910 INSERT INTO pa_proj_progress_attr(
11911 PROJ_PROGRESS_ATTR_ID
11912 ,OBJECT_TYPE
11913 ,OBJECT_ID
11914 ,LAST_UPDATE_DATE
11915 ,LAST_UPDATED_BY
11916 ,CREATION_DATE
11917 ,CREATED_BY
11918 ,LAST_UPDATE_LOGIN
11919 ,PROJECT_ID
11920 ,PROGRESS_CYCLE_ID
11921 ,WQ_ENABLE_FLAG
11922 ,REMAIN_EFFORT_ENABLE_FLAG
11923 ,PERCENT_COMP_ENABLE_FLAG
11924 ,NEXT_PROGRESS_UPDATE_DATE
11925 ,RECORD_VERSION_NUMBER
11926 ,TASK_WEIGHT_BASIS_CODE
11927 ,ALLOW_COLLAB_PROG_ENTRY
11928 ,ALLOW_PHY_PRCNT_CMP_OVERRIDES
11929 ,STRUCTURE_TYPE
11930 )
11931 SELECT
11932 PA_PROJ_PROGRESS_ATTR_S.nextval
11933 ,ppe.OBJECT_TYPE
11934 ,ppe.proj_element_ID
11935 ,sysdate
11936 ,l_user_id
11937 ,SYSDATE
11938 ,l_user_id
11939 ,l_login_id
11940 ,p_dest_project_id
11941 ,pppa.PROGRESS_CYCLE_ID
11942 ,pppa.WQ_ENABLE_FLAG
11943 ,pppa.REMAIN_EFFORT_ENABLE_FLAG
11944 ,pppa.PERCENT_COMP_ENABLE_FLAG
11945 ,pppa.NEXT_PROGRESS_UPDATE_DATE
11946 ,pppa.RECORD_VERSION_NUMBER
11947 ,pppa.TASK_WEIGHT_BASIS_CODE
11948 ,pppa.ALLOW_COLLAB_PROG_ENTRY
11949 ,pppa.ALLOW_PHY_PRCNT_CMP_OVERRIDES
11950 ,pppa.STRUCTURE_TYPE
11951 FROM pa_proj_progress_attr pppa,
11952 pa_proj_elements ppe
11953 WHERE ppe.project_id = p_dest_project_id
11954 AND ppe.attribute15 = pppa.object_id
11955 AND pppa.project_id = p_src_project_id
11956 AND pppa.object_type = 'PA_STRUCTURES' ;
11957
11958 --End Added by rtarway for BUG 3951701
11959
11960 ELSE
11961
11962 i := 1;
11963 IF l_shared = 'Y'
11964 THEN
11965 FOR l_get_structure_attr_csr_rec in l_get_structure_attr_csr LOOP
11966 l_dest_str_versions_tbl(i).src_str_version_id := l_get_structure_attr_csr_rec.element_version_id;
11967 l_dest_str_versions_tbl(i).src_str_status := l_get_structure_attr_csr_rec.status_code;
11968 l_dest_str_versions_tbl(i).latest_pub_flag := l_get_structure_attr_csr_rec.LATEST_EFF_PUBLISHED_FLAG;
11969 l_dest_str_versions_tbl(i).current_flag := l_get_structure_attr_csr_rec.current_flag;
11970 i := i + 1;
11971 END LOOP;
11972 ELSE
11973 FOR l_get_structure_attr_csr_rec2 in l_get_structure_attr_csr2 LOOP
11974 l_dest_str_versions_tbl(i).src_str_version_id := l_get_structure_attr_csr_rec2.element_version_id;
11975 l_dest_str_versions_tbl(i).src_str_status := l_get_structure_attr_csr_rec2.status_code;
11976 l_dest_str_versions_tbl(i).latest_pub_flag := l_get_structure_attr_csr_rec2.LATEST_EFF_PUBLISHED_FLAG;
11977 l_dest_str_versions_tbl(i).src_stru_type_id := l_get_structure_attr_csr_rec2.structure_type_id;
11978 l_dest_str_versions_tbl(i).current_flag := l_get_structure_attr_csr_rec2.current_flag;
11979 i := i + 1;
11980 END LOOP;
11981 END IF;
11982 IF l_shared = 'Y'
11983 THEN
11984 IF l_versioning_enabled = 'Y'
11985 THEN
11986 IF l_src_template_flag = 'N' --source is a project
11987 THEN
11988 IF l_dest_template_flag = 'N'
11989 THEN
11990 --senario 1 page 5
11991 --Bug 2955589. Need to copy only one working version to the destination project in AMG
11992 --context. Set the copy flag to N for published versions. Set the copy flag to Y for the
11993 --first working version. If there are no working versions create a new one.
11994 l_working_ver_count := 0;
11995 FOR j in 1..l_dest_str_versions_tbl.count LOOP
11996 IF ( ( l_dest_str_versions_tbl(j).latest_pub_flag = 'Y' OR
11997 l_dest_str_versions_tbl(j).current_flag = 'Y' ) AND --baselined version
11998 l_dest_str_versions_tbl(j).src_str_status = 'STRUCTURE_PUBLISHED' )
11999 THEN
12000 --l_dest_str_versions_tbl(j).copy_flag := 'Y'; Bug 2955589
12001 l_dest_str_versions_tbl(j).copy_flag := 'N';
12002 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
12003 ELSIF l_dest_str_versions_tbl(j).src_str_status <> 'STRUCTURE_PUBLISHED'
12004 THEN
12005 IF l_working_ver_count = 0 THEN --Bug 2955589
12006 l_dest_str_versions_tbl(j).copy_flag := 'Y';
12007 ELSE
12008 l_dest_str_versions_tbl(j).copy_flag := 'N';
12009 END IF;
12010 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
12011 l_working_ver_count := l_working_ver_count + 1;
12012 END IF;
12013 END LOOP;
12014 -- If no working version was found, set the flag so that the version can be created.
12015 -- Bug 2955589.
12016 IF l_working_ver_count = 0 THEN
12017 l_create_fin_version := 'Y';
12018 END IF;
12019 ELSE
12020 --senario 7 page 5
12021 FOR j in 1..l_dest_str_versions_tbl.count LOOP
12022 IF ( l_dest_str_versions_tbl(j).latest_pub_flag = 'Y' AND
12023 l_dest_str_versions_tbl(j).src_str_status = 'STRUCTURE_PUBLISHED' )
12024 THEN
12025 l_dest_str_versions_tbl(j).copy_flag := 'Y';
12026 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
12027 l_copy_flag_set := 'Y';
12028 END IF;
12029 END LOOP;
12030 IF NVL( l_copy_flag_set, 'N' ) = 'N' --latest published was not found, now look for latest updated unpublished str ver
12031 THEN
12032 l_max_date := null;
12033 FOR j in 1..l_dest_str_versions_tbl.count LOOP --look for last updated unpublished version
12034 IF l_dest_str_versions_tbl(j).src_str_status <> 'STRUCTURE_PUBLISHED'
12035 THEN
12036 --Find out which unpublihsed version is last updated.
12037 IF l_max_date IS NULL
12038 THEN
12039 l_latst_upd_wrkng_str_ver := l_dest_str_versions_tbl(j).src_str_version_id;
12040 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 );
12041 ELSE
12042 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 );
12043 IF l_max_date2 > l_max_date
12044 THEN
12045 --for bug 2834111
12046 l_max_date := l_max_date2;
12047 l_latst_upd_wrkng_str_ver := l_dest_str_versions_tbl(j).src_str_version_id;
12048 END IF;
12049 END IF;
12050 END IF; --l_dest_str_versions_tbl(j).src_str_status <> 'STRUCTURE_PUBLISHED'
12051 END LOOP; --look for last updated unpublished version
12052 --for bug 2834111
12053 --mark the last updated unpublished version for copying.
12054 FOR j in 1..l_dest_str_versions_tbl.count LOOP
12055 IF l_dest_str_versions_tbl(j).src_str_version_id = l_latst_upd_wrkng_str_ver
12056 THEN
12057 l_dest_str_versions_tbl(j).copy_flag := 'Y';
12058 l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
12059 END IF;
12060 END LOOP;
12061 END IF; --NVL( l_copy_flag_set, 'N' ) := 'N' --latest published was not found, now look for latest updated unpublished str ver
12062 END IF; --l_dest_template_flag = 'N'
12063 ELSE
12064 --source is a template
12065 --senario 3 on page 5
12066 FOR j in 1..l_dest_str_versions_tbl.count LOOP
12067 l_dest_str_versions_tbl(j).copy_flag := 'Y';
12068 IF l_dest_template_flag = 'N' ---senario 3
12069 THEN
12070 /* Bug 2955589. Irrespective of the value in auto publish flag set the version
12071 status to working so that the process_task_structure_bulk api will process
12072 on this version. Refer to the bug for more details.
12073
12074 IF l_auto_pub_enabled = 'N'
12075 THEN
12076 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
12077 ELSE
12078 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
12079 --bug 2858216
12080 l_dest_str_versions_tbl(j).current_flag := 'Y';
12081 l_dest_str_versions_tbl(j).latest_pub_flag := 'Y';
12082
12083 END IF;
12084 */
12085 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
12086 ELSE ---senario 5
12087 l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
12088 END IF;
12089 exit;
12090 END LOOP;
12091 END IF; --l_src_template_flag = 'N'
12092 ELSE
12093 --Shared and Versioning disabled.
12094 --senario 2, 4, 6 8 page 5
12095 FOR j in 1..l_dest_str_versions_tbl.count LOOP
12096 l_dest_str_versions_tbl(j).copy_flag := 'Y';
12097 IF l_dest_template_flag = 'N' --senario 2 , 4
12098 THEN
12099 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
12100 ELSE
12101 --senario 6 , 8
12102 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
12103 END IF;
12104 exit;
12105 END LOOP;
12106 END IF; --l_versioning_enabled = 'Y'
12107 ELSE
12108 --Split structrues
12109 IF l_versioning_enabled = 'Y'
12110 THEN
12111 IF l_src_template_flag = 'N' --source is a project
12112 THEN
12113 IF l_dest_template_flag = 'N'
12114 THEN
12115 --senario 9; page 6
12116 --Bug 2955589. Need to copy only one working version to the destination project in AMG
12117 --context. Set the copy flag to N for published versions. Set the copy flag to Y for the
12118 --first working version. If there are no working versions create a new one.
12119 l_working_ver_count := 0;
12120 FOR j in 1..l_dest_str_versions_tbl.count LOOP
12121 --Copying workplan str
12122 IF l_dest_str_versions_tbl(j).src_stru_type_id = 1 --WORKPLAN
12123 THEN
12124 IF ( ( l_dest_str_versions_tbl(j).latest_pub_flag = 'Y' OR
12125 l_dest_str_versions_tbl(j).current_flag = 'Y' ) AND --baselined version
12126 l_dest_str_versions_tbl(j).src_str_status = 'STRUCTURE_PUBLISHED' )
12127 THEN
12128 --l_dest_str_versions_tbl(j).copy_flag := 'Y'; --Bug 2955589
12129 l_dest_str_versions_tbl(j).copy_flag := 'N';
12130 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
12131 ELSIF ( l_dest_str_versions_tbl(j).src_str_status <> 'STRUCTURE_PUBLISHED' )
12132 THEN
12133 IF l_working_ver_count = 0 THEN --Bug 2955589
12134 l_dest_str_versions_tbl(j).copy_flag := 'Y';
12135 ELSE
12136 l_dest_str_versions_tbl(j).copy_flag := 'N';
12137 END IF;
12138 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
12139 l_working_ver_count := l_working_ver_count + 1;
12140 END IF;
12141 ELSE
12142 --Copying financial str
12143 IF NVL( l_fin_str_copy_flag, 'N' ) = 'N'
12144 THEN
12145 l_dest_str_versions_tbl(j).copy_flag := 'Y';
12146 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
12147 l_fin_str_copy_flag := 'Y';
12148 END IF;
12149 END IF;
12150 END LOOP;
12151 -- If no working version was found, set the flag so that a version can be created.
12152 -- Bug 2955589.
12153 IF l_working_ver_count = 0 THEN
12154 l_create_wk_version := 'Y';
12155 END IF;
12156 ELSE
12157 --senario 15 page 6
12158 FOR j in 1..l_dest_str_versions_tbl.count LOOP
12159 IF l_dest_str_versions_tbl(j).src_stru_type_id = 1 --WORKPLAN
12160 THEN
12161 IF ( l_dest_str_versions_tbl(j).latest_pub_flag = 'Y' AND
12162 l_dest_str_versions_tbl(j).src_str_status = 'STRUCTURE_PUBLISHED' )
12163 THEN
12164 l_dest_str_versions_tbl(j).copy_flag := 'Y';
12165 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
12166 l_copy_flag_set := 'Y';
12167 END IF;
12168 ELSE
12169 --Copying financial str
12170 IF NVL( l_fin_str_copy_flag, 'N' ) = 'N'
12171 THEN
12172 l_dest_str_versions_tbl(j).copy_flag := 'Y';
12173 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
12174 l_fin_str_copy_flag := 'Y';
12175 END IF;
12176 END IF;
12177 END LOOP;
12178 IF NVL( l_copy_flag_set, 'N' ) = 'N' --latest published was not found, now look for latest updated unpublished str ver
12179 THEN
12180 l_max_date := null;
12181 FOR j in 1..l_dest_str_versions_tbl.count LOOP --look for last updated unpublished version
12182 IF l_dest_str_versions_tbl(j).src_stru_type_id = 1 --WORKPLAN
12183 THEN
12184 IF l_dest_str_versions_tbl(j).src_str_status <> 'STRUCTURE_PUBLISHED'
12185 THEN
12186 --Find out which unpublihsed version is last updated.
12187 IF l_max_date IS NULL
12188 THEN
12189 l_latst_upd_wrkng_str_ver := l_dest_str_versions_tbl(j).src_str_version_id;
12190 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 );
12191 ELSE
12192 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 );
12193 IF l_max_date2 > l_max_date
12194 THEN
12195 --for bug 2834111
12196 l_max_date := l_max_date2;
12197 l_latst_upd_wrkng_str_ver := l_dest_str_versions_tbl(j).src_str_version_id;
12198 END IF;
12199 END IF;
12200 END IF; --l_dest_str_versions_tbl(j).src_str_status <> 'STRUCTURE_PUBLISHED'
12201 END IF; --l_dest_str_versions_tbl(j).src_stru_type_id = 1 --WORKPLAN
12202 END LOOP; --look for last updated unpublished version
12203 --for bug 2834111
12204 --mark the last updated unpublished version for copying.
12205 FOR j in 1..l_dest_str_versions_tbl.count LOOP
12206 IF l_dest_str_versions_tbl(j).src_str_version_id = l_latst_upd_wrkng_str_ver
12207 THEN
12208 l_dest_str_versions_tbl(j).copy_flag := 'Y';
12209 l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
12210 END IF;
12211 END LOOP;
12212
12213 END IF; --NVL( l_copy_flag_set, 'N' ) := 'N' --latest published was not found, now look for latest updated unpublished str ver
12214 END IF; --l_dest_template_flag = 'N'
12215 ELSE
12216 --source is a template
12217 --senario 11 on page 5
12218 --copying workplan
12219 FOR j in 1..l_dest_str_versions_tbl.count LOOP
12220 IF l_dest_str_versions_tbl(j).src_stru_type_id = 1 --WORKPLAN
12221 THEN
12222 l_dest_str_versions_tbl(j).copy_flag := 'Y';
12223 IF l_dest_template_flag = 'N' ---senario 11
12224 THEN
12225 /* Bug 2955589. Irrespective of the value in auto publish flag set the version
12226 status to working so that the process_task_structure_bulk api will process
12227 on this version. Refer to the bug for more details.
12228
12229 IF l_auto_pub_enabled = 'N'
12230 THEN
12231 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
12232 ELSE
12233 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
12234 --bug 2858216
12235 l_dest_str_versions_tbl(j).current_flag := 'Y';
12236 l_dest_str_versions_tbl(j).latest_pub_flag := 'Y';
12237 END IF;
12238 */
12239 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
12240
12241 ELSE ---senario 13
12242 l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
12243 END IF;
12244 exit;
12245 END IF;
12246 END LOOP;
12247 --senario 11 on page 5
12248 --copying financail
12249 FOR j in 1..l_dest_str_versions_tbl.count LOOP
12250 IF l_dest_str_versions_tbl(j).src_stru_type_id = 6 --FINANCIAL
12251 THEN
12252 l_dest_str_versions_tbl(j).copy_flag := 'Y';
12253 IF l_dest_template_flag = 'N' ---senario 11
12254 THEN
12255 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
12256 ELSE ---senario 13
12257 l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
12258 END IF;
12259 exit;
12260 END IF;
12261 END LOOP;
12262 END IF; --l_src_template_flag = 'N'
12263 ELSE
12264 --Versioning disabled.
12265 IF l_src_template_flag = 'N' --source is a project
12266 THEN
12267 --senario 10 and 16; page 6 and 7 respectively
12268 --copying workplan
12269 FOR j in 1..l_dest_str_versions_tbl.count LOOP
12270 IF l_dest_str_versions_tbl(j).src_stru_type_id = 1 --WORKPLAN
12271 THEN
12272 l_dest_str_versions_tbl(j).copy_flag := 'Y';
12273 IF l_dest_template_flag = 'N' --senario 10
12274 THEN
12275 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
12276 ELSE
12277 --senario 8
12278 l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
12279 END IF;
12280 exit;
12281 END IF;
12282 END LOOP;
12283 --copying financial
12284 FOR j in 1..l_dest_str_versions_tbl.count LOOP
12285 IF l_dest_str_versions_tbl(j).src_stru_type_id = 6 --FINANCIAL
12286 THEN
12287 l_dest_str_versions_tbl(j).copy_flag := 'Y';
12288 IF l_dest_template_flag = 'N' --senario 16
12289 THEN
12290 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
12291 ELSE
12292 --senario 8
12293 l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
12294 END IF;
12295 exit;
12296 END IF;
12297 END LOOP;
12298 ELSE
12299 --source is a template
12300 --senario 12 and 14; page 6
12301 FOR j in 1..l_dest_str_versions_tbl.count LOOP
12302 IF l_dest_template_flag = 'N'
12303 THEN
12304 l_dest_str_versions_tbl(j).copy_flag := 'Y';
12305 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
12306 ELSE
12307 l_dest_str_versions_tbl(j).copy_flag := 'Y';
12308 l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
12309 END IF;
12310 END LOOP;
12311 END IF; --l_src_template_flag = 'N'
12312 END IF; --l_versioning_enabled = 'Y'
12313 END IF; --Share Y or N
12314
12315 --WORKPLAN ENABLED ( SHARED or SPLIT )
12316
12317 IF NOT l_dest_str_versions_tbl.exists(1)
12318 AND nvl(l_create_fin_version,'N') = 'N' --Bug 2955589
12319 AND nvl(l_create_wk_version,'N') = 'N'
12320 THEN
12321 return;
12322 END IF;
12323
12324 IF l_shared = 'N'
12325 THEN
12326 UPDATE pa_proj_elements ppe
12327 set name = substr(l_project_name||l_append||l_suffix, 1, 240)
12328 WHERE project_id = p_dest_project_id
12329 AND object_type = 'PA_STRUCTURES'
12330 AND EXISTS ( SELECT proj_element_id FROM pa_proj_structure_types
12331 WHERE proj_element_id = ppe.proj_element_id
12332 AND structure_type_id = 1 );
12333 END IF;
12334
12335 INSERT INTO pa_proj_workplan_attr(
12336 PROJ_ELEMENT_ID
12337 ,PROJECT_ID
12338 ,LAST_UPDATE_DATE
12339 ,LAST_UPDATED_BY
12340 ,CREATION_DATE
12341 ,CREATED_BY
12342 ,WP_APPROVAL_REQD_FLAG
12343 ,WP_AUTO_PUBLISH_FLAG
12344 ,WP_DEFAULT_DISPLAY_LVL
12345 ,WP_ENABLE_VERSION_FLAG
12346 ,AUTO_PUB_UPON_CREATION_FLAG
12347 ,AUTO_SYNC_TXN_DATE_FLAG
12348 ,WP_APPROVER_SOURCE_ID
12349 ,WP_APPROVER_SOURCE_TYPE
12350 ,RECORD_VERSION_NUMBER
12351 ,LAST_UPDATE_LOGIN
12352 ,TXN_DATE_SYNC_BUF_DAYS
12353 ,LIFECYCLE_VERSION_ID
12354 ,CURRENT_PHASE_VERSION_ID
12355 --bug 4061876
12356 ,SCHEDULE_THIRD_PARTY_FLAG
12357 ,ALLOW_LOWEST_TSK_DEP_FLAG
12358 ,AUTO_ROLLUP_SUBPROJ_FLAG
12359 ,THIRD_PARTY_SCHEDULE_CODE
12360 ,source_object_id
12361 ,source_object_type
12362 -- gboomina bug 8586393 - start
12363 ,use_task_schedule_flag
12364 -- gboomina bug 8586393 - end
12365 )
12366 SELECT
12367 ppe.PROJ_ELEMENT_ID
12368 ,ppe.PROJECT_ID
12369 ,SYSDATE
12370 ,l_user_id
12371 ,SYSDATE
12372 ,l_user_id
12373 ,ppwa.WP_APPROVAL_REQD_FLAG
12374 ,ppwa.WP_AUTO_PUBLISH_FLAG
12375 ,ppwa.WP_DEFAULT_DISPLAY_LVL
12376 ,ppwa.WP_ENABLE_VERSION_FLAG
12377 ,ppwa.AUTO_PUB_UPON_CREATION_FLAG
12378 ,ppwa.AUTO_SYNC_TXN_DATE_FLAG
12379 ,ppwa.WP_APPROVER_SOURCE_ID
12380 ,ppwa.WP_APPROVER_SOURCE_TYPE
12381 ,ppwa.RECORD_VERSION_NUMBER
12382 ,ppwa.LAST_UPDATE_LOGIN
12383 ,ppwa.TXN_DATE_SYNC_BUF_DAYS
12384 ,ppwa.LIFECYCLE_VERSION_ID
12385 ,ppwa.CURRENT_PHASE_VERSION_ID
12386 --bug 4061876
12387 ,ppwa.SCHEDULE_THIRD_PARTY_FLAG
12388 ,ppwa.ALLOW_LOWEST_TSK_DEP_FLAG
12389 ,ppwa.AUTO_ROLLUP_SUBPROJ_FLAG
12390 ,ppwa.THIRD_PARTY_SCHEDULE_CODE
12391 ,ppe.PROJECT_ID
12392 ,'PA_PROJECTS'
12393 -- gboomina bug 8586393 - start
12394 ,ppwa.use_task_schedule_flag
12395 -- gboomina bug 8586393 - end
12396 /*FROM pa_proj_elements ppe,
12397 pa_proj_workplan_attr ppwa
12398 WHERE ppe.project_id = p_dest_project_id
12399 and object_type = 'PA_STRUCTURES'
12400 and ppwa.project_id = p_src_project_id
12401 and ppwa.proj_element_id = ppe.attribute15;*//*Commented below query and following criteria by SMUKKA */
12402 FROM pa_proj_elements ppe,
12403 pa_proj_workplan_attr ppwa
12404 WHERE ppwa.project_id = p_src_project_id
12405 AND ppe.project_id = p_dest_project_id
12406 AND ppe.object_type ='PA_STRUCTURES'
12407 AND ppe.attribute15 = ppwa.proj_element_id
12408 AND PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y'; /* bug 3621613 */
12409
12410 --bug 3010538
12411 --added task weighting basis code
12412 INSERT INTO pa_proj_progress_attr(
12413 PROJ_PROGRESS_ATTR_ID
12414 ,OBJECT_TYPE
12415 ,OBJECT_ID
12416 ,LAST_UPDATE_DATE
12417 ,LAST_UPDATED_BY
12418 ,CREATION_DATE
12419 ,CREATED_BY
12420 ,LAST_UPDATE_LOGIN
12421 ,PROJECT_ID
12422 ,PROGRESS_CYCLE_ID
12423 ,WQ_ENABLE_FLAG
12424 ,REMAIN_EFFORT_ENABLE_FLAG
12425 ,PERCENT_COMP_ENABLE_FLAG
12426 ,NEXT_PROGRESS_UPDATE_DATE
12427 ,RECORD_VERSION_NUMBER
12428 ,TASK_WEIGHT_BASIS_CODE
12429 /* FP-M Bug # 3420093. Modified: copy_structures_bulk. */
12430 ,ALLOW_COLLAB_PROG_ENTRY
12431 ,ALLOW_PHY_PRCNT_CMP_OVERRIDES
12432 ,STRUCTURE_TYPE
12433 /* FP-M Bug # 3420093. Modified: copy_structures_bulk. */
12434 ) SELECT
12435 PA_PROJ_PROGRESS_ATTR_S.nextval
12436 ,ppe.OBJECT_TYPE
12437 ,ppe.proj_element_ID
12438 ,sysdate
12439 ,l_user_id
12440 ,SYSDATE
12441 ,l_user_id
12442 ,l_login_id
12443 ,p_dest_project_id
12444 ,pppa.PROGRESS_CYCLE_ID
12445 ,pppa.WQ_ENABLE_FLAG
12446 ,pppa.REMAIN_EFFORT_ENABLE_FLAG
12447 ,pppa.PERCENT_COMP_ENABLE_FLAG
12448 ,pppa.NEXT_PROGRESS_UPDATE_DATE
12449 ,pppa.RECORD_VERSION_NUMBER
12450 ,pppa.TASK_WEIGHT_BASIS_CODE
12451 /* FP-M Bug # 3420093. Modified: copy_structures_bulk. */
12452 ,pppa.ALLOW_COLLAB_PROG_ENTRY
12453 ,pppa.ALLOW_PHY_PRCNT_CMP_OVERRIDES
12454 ,pppa.STRUCTURE_TYPE
12455 /* FP-M Bug # 3420093. Modified: copy_structures_bulk. */
12456 /*FROM pa_proj_progress_attr pppa,
12457 pa_proj_elements ppe
12458 WHERE ppe.project_id = p_dest_project_id
12459 and ppe.attribute15 = pppa.object_id --no need to join with
12460 and pppa.object_type = 'PA_STRUCTURES'
12461 and ppe.object_type = 'PA_STRUCTURES'
12462 and pppa.project_id = p_src_project_id;*//*Commented below query and following criteria by SMUKKA */
12463 FROM pa_proj_progress_attr pppa,
12464 pa_proj_elements ppe
12465 WHERE ppe.project_id = p_dest_project_id
12466 and ppe.attribute15 = pppa.object_id
12467 and pppa.object_type = 'PA_STRUCTURES'
12468 and ppe.object_type = 'PA_STRUCTURES'
12469 and pppa.project_id = p_src_project_id
12470 AND PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y' ; /* bug 3621613 */
12471
12472 --Bug 2955589. If Versioning is enabled and it is a project to project copy, the plsql table will not
12473 --contain any records if there were no working verisons. We need to create one if any of the flags
12474 --l_create_fin_version or l_create_wk_version is 'Y'.
12475 IF nvl(l_create_fin_version,'N') = 'Y' THEN
12476 l_structure_ver_name := substr(l_project_name, 1, 240);
12477 PA_PROJ_TASK_STRUC_PUB.create_update_struct_ver(
12478 p_project_id => p_dest_project_id
12479 ,p_structure_type => 'FINANCIAL'
12480 ,p_structure_version_name => l_structure_ver_name
12481 ,p_structure_version_id => null
12482 ,x_structure_version_id => l_structure_version_id
12483 ,x_msg_count => x_msg_count
12484 ,x_msg_data => x_msg_data
12485 ,x_return_status => x_return_status
12486 );
12487 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR
12488 THEN
12489 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12490 ELSIF x_return_status = FND_API.G_RET_STS_ERROR
12491 THEN
12492 RAISE FND_API.G_EXC_ERROR;
12493 END IF;
12494 ELSIF nvl(l_create_wk_version,'N') = 'Y' THEN
12495 l_structure_ver_name := substr(l_project_name||l_append||l_suffix, 1, 240);
12496
12497 PA_PROJ_TASK_STRUC_PUB.create_update_struct_ver(
12498 p_project_id => p_dest_project_id
12499 ,p_structure_type => 'WORKPLAN'
12500 ,p_structure_version_name => l_structure_ver_name
12501 ,p_structure_version_id => null
12502 ,x_structure_version_id => l_structure_version_id
12503 ,x_msg_count => x_msg_count
12504 ,x_msg_data => x_msg_data
12505 ,x_return_status => x_return_status
12506 );
12507 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR
12508 THEN
12509 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12510 ELSIF x_return_status = FND_API.G_RET_STS_ERROR
12511 THEN
12512 RAISE FND_API.G_EXC_ERROR;
12513 END IF;
12514 END IF;
12515
12516 FOR k in 1..l_dest_str_versions_tbl.count LOOP
12517 IF l_dest_str_versions_tbl(k).copy_flag = 'Y'
12518 THEN
12519
12520
12521 OPEN cur_elem_ver_seq;
12522 FETCH cur_elem_ver_seq INTO l_struc_version_id;
12523 CLOSE cur_elem_ver_seq;
12524 --First copy structure version and then copy all task versions
12525 --We cannot perform both with the same sql bcoz we need parent_structure version id for tasks.
12526 INSERT INTO pa_proj_element_versions(
12527 ELEMENT_VERSION_ID
12528 ,PROJ_ELEMENT_ID
12529 ,OBJECT_TYPE
12530 ,PROJECT_ID
12531 ,PARENT_STRUCTURE_VERSION_ID
12532 ,DISPLAY_SEQUENCE
12533 ,WBS_LEVEL
12534 ,WBS_NUMBER
12535 ,CREATION_DATE
12536 ,CREATED_BY
12537 ,LAST_UPDATE_DATE
12538 ,LAST_UPDATED_BY
12539 ,LAST_UPDATE_LOGIN
12540 ,RECORD_VERSION_NUMBER
12541 ,attribute15 --this column is used to store structure ver id of the source project to be used to created relationships.
12542 ,ATTRIBUTE_CATEGORY
12543 ,ATTRIBUTE1
12544 ,ATTRIBUTE2
12545 ,ATTRIBUTE3
12546 ,ATTRIBUTE4
12547 ,ATTRIBUTE5
12548 ,ATTRIBUTE6
12549 ,ATTRIBUTE7
12550 ,ATTRIBUTE8
12551 ,ATTRIBUTE9
12552 ,ATTRIBUTE10
12553 ,ATTRIBUTE11
12554 ,ATTRIBUTE12
12555 ,ATTRIBUTE13
12556 ,ATTRIBUTE14
12557 ,TASK_UNPUB_VER_STATUS_CODE
12558 ,source_object_id
12559 ,source_object_type
12560 )
12561 SELECT
12562 l_struc_version_id
12563 ,ppe.proj_element_id
12564 ,ppev.object_type
12565 ,p_dest_project_id
12566 ,l_struc_version_id
12567 ,ppev.DISPLAY_SEQUENCE
12568 ,ppev.WBS_LEVEL
12569 ,ppev.WBS_NUMBER
12570 ,SYSDATE ------CREATION_DATE
12571 ,l_user_id ------CREATED_BY
12572 ,SYSDATE ------LAST_UPDATE_DATE
12573 ,l_user_id ------LAST_UPDATED_BY
12574 ,l_login_id ------LAST_UPDATE_LOGIN
12575 ,ppev.RECORD_VERSION_NUMBER ------RECORD_VERSION_NUMBER
12576 ,ppev.element_version_id
12577 ,ppev.ATTRIBUTE_CATEGORY
12578 ,ppev.ATTRIBUTE1
12579 ,ppev.ATTRIBUTE2
12580 ,ppev.ATTRIBUTE3
12581 ,ppev.ATTRIBUTE4
12582 ,ppev.ATTRIBUTE5
12583 ,ppev.ATTRIBUTE6
12584 ,ppev.ATTRIBUTE7
12585 ,ppev.ATTRIBUTE8
12586 ,ppev.ATTRIBUTE9
12587 ,ppev.ATTRIBUTE10
12588 ,ppev.ATTRIBUTE11
12589 ,ppev.ATTRIBUTE12
12590 ,ppev.ATTRIBUTE13
12591 ,ppev.ATTRIBUTE14
12592 ,ppev.TASK_UNPUB_VER_STATUS_CODE
12593 ,p_dest_project_id
12594 ,'PA_PROJECTS'
12595 FROM pa_proj_element_versions ppev,
12596 pa_proj_elements ppe
12597 WHERE ppev.project_id = p_src_project_id
12598 and ppe.project_id = p_dest_project_id
12599 and ppev.element_version_id = l_dest_str_versions_tbl(k).src_str_version_id
12600 and ppev.proj_element_id = ppe.attribute15
12601 and ppe.object_type = 'PA_STRUCTURES'
12602 and ppev.object_type = 'PA_STRUCTURES';
12603
12604 --bug 3138959
12605 --User adding tasks under WORKPLAN structure from AMG, financial plan should be copied over.
12606
12607 IF PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version( l_struc_version_id, 'FINANCIAL' ) = 'Y'
12608 AND l_shared = 'N' AND l_workplan_enabled = 'Y' -- For Split structures
12609 AND pa_project_pub.G_structure_in_rec.structure_type = 'WORKPLAN'
12610 THEN
12611 --Copy financial tasks
12612
12613 INSERT INTO pa_proj_element_versions(
12614 ELEMENT_VERSION_ID
12615 ,PROJ_ELEMENT_ID
12616 ,OBJECT_TYPE
12617 ,PROJECT_ID
12618 ,PARENT_STRUCTURE_VERSION_ID
12619 ,DISPLAY_SEQUENCE
12620 ,WBS_LEVEL
12621 ,WBS_NUMBER
12622 ,CREATION_DATE
12623 ,CREATED_BY
12624 ,LAST_UPDATE_DATE
12625 ,LAST_UPDATED_BY
12626 ,LAST_UPDATE_LOGIN
12627 ,RECORD_VERSION_NUMBER
12628 ,attribute15 --this column is used to store task ver id of the source project's task versions to be used to created relationships.
12629 ,ATTRIBUTE_CATEGORY
12630 ,ATTRIBUTE1
12631 ,ATTRIBUTE2
12632 ,ATTRIBUTE3
12633 ,ATTRIBUTE4
12634 ,ATTRIBUTE5
12635 ,ATTRIBUTE6
12636 ,ATTRIBUTE7
12637 ,ATTRIBUTE8
12638 ,ATTRIBUTE9
12639 ,ATTRIBUTE10
12640 ,ATTRIBUTE11
12641 ,ATTRIBUTE12
12642 ,ATTRIBUTE13
12643 ,ATTRIBUTE14
12644 ,TASK_UNPUB_VER_STATUS_CODE
12645 ,source_object_id
12646 ,source_object_type
12647 ,financial_task_flag --Bug no 3651255
12648 )
12649 SELECT
12650 pa_proj_element_versions_s.nextval
12651 ,ppe.proj_element_id
12652 ,ppev.object_type
12653 ,p_dest_project_id
12654 ,l_struc_version_id --from previous sql
12655 ,ppev.DISPLAY_SEQUENCE
12656 ,ppev.WBS_LEVEL
12657 ,ppev.WBS_NUMBER
12658 ,SYSDATE ------CREATION_DATE
12659 ,l_user_id ------CREATED_BY
12660 ,SYSDATE ------LAST_UPDATE_DATE
12661 ,l_user_id ------LAST_UPDATED_BY
12662 ,l_login_id ------LAST_UPDATE_LOGIN
12663 ,ppev.RECORD_VERSION_NUMBER ------RECORD_VERSION_NUMBER
12664 ,ppev.element_version_id -- to help create relationships from source
12665 ,ppev.ATTRIBUTE_CATEGORY
12666 ,ppev.ATTRIBUTE1
12667 ,ppev.ATTRIBUTE2
12668 ,ppev.ATTRIBUTE3
12669 ,ppev.ATTRIBUTE4
12670 ,ppev.ATTRIBUTE5
12671 ,ppev.ATTRIBUTE6
12672 ,ppev.ATTRIBUTE7
12673 ,ppev.ATTRIBUTE8
12674 ,ppev.ATTRIBUTE9
12675 ,ppev.ATTRIBUTE10
12676 ,ppev.ATTRIBUTE11
12677 ,ppev.ATTRIBUTE12
12678 ,ppev.ATTRIBUTE13
12679 ,ppev.ATTRIBUTE14
12680 ,decode( l_dest_str_versions_tbl(k).dest_str_status, 'STRUCTURE_PUBLISHED', 'PUBLISHED', 'WORKING' )
12681 ,p_dest_project_id
12682 ,'PA_PROJECTS'
12683 ,ppev.financial_task_flag --Bug no 3651255
12684 FROM pa_proj_element_versions ppev,
12685 pa_proj_elements ppe
12686 WHERE ppev.project_id = p_src_project_id
12687 and ppe.project_id = p_dest_project_id
12688 and ppev.parent_structure_version_id = l_dest_str_versions_tbl(k).src_str_version_id
12689 and ppev.proj_element_id = ppe.attribute15
12690 and ppe.object_type = 'PA_TASKS'
12691 and ppev.object_type = 'PA_TASKS';
12692
12693 --Create relationships for structure and tasks
12694
12695 /* Start of changes for bug 6211012 */
12696
12697 l_obj_rel_id.delete;
12698 l_obj_typ_from.delete;
12699 l_obj_from_id.delete;
12700 l_obj_typ_to.delete;
12701 l_obj_to_id.delete;
12702 l_rel_typ.delete;
12703 l_rel_subtyp.delete;
12704 l_rec_ver_num.delete;
12705 l_wt_percent.delete;
12706
12707 OPEN cur_pa_obj_rela_3(l_dest_str_versions_tbl(k).src_str_version_id,l_struc_version_id);
12708
12709 LOOP
12710
12711 FETCH cur_pa_obj_rela_3
12712 BULK COLLECT INTO
12713 l_obj_rel_id,
12714 l_obj_typ_from,
12715 l_obj_from_id,
12716 l_obj_typ_to,
12717 l_obj_to_id,
12718 l_rel_typ,
12719 l_rel_subtyp,
12720 l_rec_ver_num,
12721 l_wt_percent
12722 LIMIT 1000;
12723
12724 IF l_obj_rel_id.COUNT >0 THEN
12725
12726 FORALL i IN l_obj_rel_id.FIRST..l_obj_rel_id.LAST
12727 insert into PA_OBJECT_RELATIONSHIPS (
12728 object_relationship_id,
12729 object_type_from,
12730 object_id_from1,
12731 object_type_to,
12732 object_id_to1,
12733 relationship_type,
12734 relationship_subtype,
12735 Record_Version_Number,
12736 CREATED_BY,
12737 CREATION_DATE,
12738 LAST_UPDATED_BY,
12739 LAST_UPDATE_DATE,
12740 LAST_UPDATE_LOGIN,
12741 weighting_percentage
12742 )
12743 values(
12744 l_obj_rel_id(i),
12745 l_obj_typ_from(i),
12746 l_obj_from_id(i),
12747 l_obj_typ_to(i),
12748 l_obj_to_id(i),
12749 l_rel_typ(i),
12750 l_rel_subtyp(i),
12751 l_rec_ver_num(i),
12752 l_user_id,
12753 SYSDATE,
12754 l_user_id,
12755 SYSDATE,
12756 l_login_id,
12757 l_wt_percent(i)
12758 );
12759 END IF;
12760
12761 EXIT WHEN l_obj_rel_id.COUNT < 1000 ;
12762 END LOOP;
12763
12764 l_obj_rel_id.delete;
12765 l_obj_typ_from.delete;
12766 l_obj_from_id.delete;
12767 l_obj_typ_to.delete;
12768 l_obj_to_id.delete;
12769 l_rel_typ.delete;
12770 l_rel_subtyp.delete;
12771 l_rec_ver_num.delete;
12772 l_wt_percent.delete;
12773
12774 CLOSE cur_pa_obj_rela_3;
12775
12776 /*
12777 INSERT INTO PA_OBJECT_RELATIONSHIPS (
12778 object_relationship_id,
12779 object_type_from,
12780 object_id_from1,
12781 object_type_to,
12782 object_id_to1,
12783 relationship_type,
12784 relationship_subtype,
12785 Record_Version_Number,
12786 CREATED_BY,
12787 CREATION_DATE,
12788 LAST_UPDATED_BY,
12789 LAST_UPDATE_DATE,
12790 LAST_UPDATE_LOGIN,
12791 weighting_percentage
12792 )
12793 /*Added the hint for the bug 3513853*/
12794 /* SELECT /*+ USE_HASH(ppev2 ppev1)*/
12795 /* pa_object_relationships_s.nextval,
12796 pobj.object_type_from,
12797 ppev1.element_version_id,
12798 pobj.object_type_to,
12799 ppev2.element_version_id,
12800 pobj.relationship_type,
12801 pobj.relationship_subtype,
12802 pobj.Record_Version_Number,
12803 l_user_id,
12804 SYSDATE,
12805 l_user_id,
12806 SYSDATE,
12807 l_login_id,
12808 pobj.weighting_percentage
12809 FROM ( SELECT object_type_from, object_id_from1,
12810 object_type_to, object_id_to1,
12811 relationship_type, relationship_subtype,
12812 Record_Version_Number, weighting_percentage
12813 FROM pa_object_relationships
12814 --bug#3094283WHERE RELATIONSHIP_TYPE = 'S'
12815 start with object_id_from1 = l_dest_str_versions_tbl(k).src_str_version_id
12816 and RELATIONSHIP_TYPE = 'S' /* Bug 2881667 Added this condition */
12817 /* connect by object_id_from1 = prior object_id_to1
12818 and RELATIONSHIP_TYPE = 'S' ) pobj, /* Bug 2881667 Added this condition */
12819 /* pa_proj_element_versions ppev1,
12820 pa_proj_element_versions ppev2
12821 WHERE
12822 --bug#3094283 ppev1.project_id = p_dest_project_id
12823 ppev1.attribute15 = pobj.object_id_from1
12824 --bug#3094283 ppev2.project_id = p_dest_project_id
12825 AND ppev2.attribute15 = pobj.object_id_to1
12826 AND ppev1.parent_structure_version_id = l_struc_version_id
12827 AND ppev2.parent_structure_version_id = l_struc_version_id
12828 ;
12829 */
12830 /* End of Code added for 6211012 */
12831 END IF;
12832 --bug 3138959
12833
12834 IF l_dest_str_versions_tbl(k).dest_str_status = 'STRUCTURE_PUBLISHED'
12835 and l_dest_str_versions_tbl(k).current_flag = 'N'
12836 and l_dest_str_versions_tbl(k).latest_pub_flag = 'N'
12837 THEN
12838 l_LATEST_EFF_PUBLISHED_FLAG := 'Y';
12839 ELSE
12840 l_LATEST_EFF_PUBLISHED_FLAG := l_dest_str_versions_tbl(k).latest_pub_flag;
12841 END IF;
12842
12843 IF l_dest_template_flag = 'Y'
12844 THEN
12845 l_LATEST_EFF_PUBLISHED_FLAG := 'N';
12846 l_dest_str_versions_tbl(k).current_flag := 'N';
12847 IF l_dest_str_versions_tbl(k).dest_str_status <> 'STRUCTURE_WORKING'
12848 THEN
12849 l_dest_str_versions_tbl(k).dest_str_status := 'STRUCTURE_WORKING';
12850 END IF;
12851 END IF;
12852
12853 IF l_LATEST_EFF_PUBLISHED_FLAG = 'Y' OR l_dest_template_flag = 'Y'
12854 THEN
12855 l_latest_pub_str_ver_id := l_struc_version_id;
12856 ELSE
12857 l_latest_pub_str_ver_id := null;
12858 END IF;
12859
12860 --bug 3010538
12861 --added PROCESS_UPDATE_WBS_FLAG
12862
12863 INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
12864 PEV_STRUCTURE_ID
12865 ,ELEMENT_VERSION_ID
12866 ,VERSION_NUMBER
12867 ,NAME
12868 ,PROJECT_ID
12869 ,PROJ_ELEMENT_ID
12870 ,DESCRIPTION
12871 ,EFFECTIVE_DATE
12872 ,PUBLISHED_DATE
12873 ,PUBLISHED_BY_PERSON_ID
12874 ,CURRENT_BASELINE_DATE
12875 ,CURRENT_FLAG
12876 ,CURRENT_BASELINE_PERSON_ID
12877 ,ORIGINAL_BASELINE_DATE
12878 ,ORIGINAL_FLAG
12879 ,ORIGINAL_BASELINE_PERSON_ID
12880 ,LOCK_STATUS_CODE
12881 ,LOCKED_BY_PERSON_ID
12882 ,LOCKED_DATE
12883 ,STATUS_CODE
12884 ,WF_STATUS_CODE
12885 ,LATEST_EFF_PUBLISHED_FLAG
12886 ,RECORD_VERSION_NUMBER
12887 ,WBS_RECORD_VERSION_NUMBER
12888 ,CREATION_DATE
12889 ,CREATED_BY
12890 ,LAST_UPDATE_DATE
12891 ,LAST_UPDATED_BY
12892 ,LAST_UPDATE_LOGIN
12893 ,change_reason_code
12894 ,PROCESS_UPDATE_WBS_FLAG
12895 ,current_working_flag /* FPM bug 3301192 */
12896 ,source_object_id
12897 ,source_object_type
12898 )
12899 SELECT
12900 pa_proj_elem_ver_structure_s.nextval
12901 ,l_struc_version_id
12902 ,ppevs.version_number --replaced k with source version_number bug 2829385
12903 --,ppevs.name 3717026, replaced ppevs.name with ppe.name
12904 ,ppe.name
12905 ,p_dest_project_id
12906 ,ppe.proj_element_id
12907 ,ppevs.DESCRIPTION
12908 ,ppevs.EFFECTIVE_DATE
12909 ,decode(l_dest_str_versions_tbl(k).dest_str_status, 'STRUCTURE_PUBLISHED', sysdate, to_date(null)) --bug 2838547
12910 ,decode(l_dest_str_versions_tbl(k).dest_str_status, 'STRUCTURE_PUBLISHED', l_publish_person_id, NULL) --bug 2838547
12911 ,decode(l_dest_str_versions_tbl(k).current_flag, 'Y', trunc(sysdate), to_date(NULL)) --bug 2838547
12912 ,l_dest_str_versions_tbl(k).current_flag
12913 ,decode(l_dest_str_versions_tbl(k).current_flag, 'Y', l_publish_person_id, NULL) --bug 2838547
12914 ,ppevs.ORIGINAL_BASELINE_DATE
12915 ,ppevs.ORIGINAL_FLAG
12916 ,ppevs.ORIGINAL_BASELINE_PERSON_ID
12917 ,'UNLOCKED'
12918 ,null
12919 ,null
12920 ,l_dest_str_versions_tbl(k).dest_str_status
12921 ,ppevs.WF_STATUS_CODE
12922 ,l_LATEST_EFF_PUBLISHED_FLAG
12923 ,ppevs.RECORD_VERSION_NUMBER
12924 ,ppevs.WBS_RECORD_VERSION_NUMBER
12925 ,SYSDATE
12926 ,l_user_id
12927 ,SYSDATE
12928 ,l_user_id
12929 ,l_login_id
12930 ,ppevs.change_reason_code
12931 ,'N'
12932 ,ppevs.current_working_flag /* FPM bug 3301192 */
12933 ,p_dest_project_id
12934 ,'PA_PROJECTS'
12935 FROM PA_PROJ_ELEM_VER_STRUCTURE ppevs, pa_proj_elements ppe
12936 WHERE ppevs.project_id = p_src_project_id
12937 AND ppe.project_id = p_dest_project_id
12938 and ppevs.element_version_id = l_dest_str_versions_tbl(k).src_str_version_id
12939 and ppevs.proj_element_id = ppe.attribute15
12940 AND ppe.object_type = 'PA_STRUCTURES';
12941
12942 --fix bug 2831973
12943 --calculate delta before inserting schedule rows
12944 --select source structure version scheduled start date
12945 IF (p_target_start_date IS NULL) THEN
12946 l_delta := 0;
12947 ELSE
12948 OPEN get_src_sch_st_date(p_src_project_id,
12949 l_dest_str_versions_tbl(k).src_str_version_id);
12950 FETCH get_src_sch_st_date into l_src_sch_st_date;
12951 CLOSE get_src_sch_st_date;
12952 l_delta := p_target_start_date - l_src_sch_st_date;
12953 END IF;
12954
12955 INSERT INTO pa_proj_elem_ver_schedule(
12956 PEV_SCHEDULE_ID
12957 ,ELEMENT_VERSION_ID
12958 ,PROJECT_ID
12959 ,PROJ_ELEMENT_ID
12960 ,CREATION_DATE
12961 ,CREATED_BY
12962 ,LAST_UPDATE_DATE
12963 ,LAST_UPDATED_BY
12964 ,SCHEDULED_START_DATE
12965 ,SCHEDULED_FINISH_DATE
12966 ,OBLIGATION_START_DATE
12967 ,OBLIGATION_FINISH_DATE
12968 ,ACTUAL_START_DATE
12969 ,ACTUAL_FINISH_DATE
12970 ,ESTIMATED_START_DATE
12971 ,ESTIMATED_FINISH_DATE
12972 ,DURATION
12973 ,EARLY_START_DATE
12974 ,EARLY_FINISH_DATE
12975 ,LATE_START_DATE
12976 ,LATE_FINISH_DATE
12977 ,CALENDAR_ID
12978 ,MILESTONE_FLAG
12979 ,CRITICAL_FLAG
12980 ,RECORD_VERSION_NUMBER
12981 ,LAST_UPDATE_LOGIN
12982 ,WQ_PLANNED_QUANTITY
12983 ,PLANNED_EFFORT
12984 ,ACTUAL_DURATION
12985 ,ESTIMATED_DURATION
12986 ,ATTRIBUTE_CATEGORY
12987 ,ATTRIBUTE1
12988 ,ATTRIBUTE2
12989 ,ATTRIBUTE3
12990 ,ATTRIBUTE4
12991 ,ATTRIBUTE5
12992 ,ATTRIBUTE6
12993 ,ATTRIBUTE7
12994 ,ATTRIBUTE8
12995 ,ATTRIBUTE9
12996 ,ATTRIBUTE10
12997 ,ATTRIBUTE11
12998 ,ATTRIBUTE12
12999 ,ATTRIBUTE13
13000 ,ATTRIBUTE14
13001 ,ATTRIBUTE15
13002 ,source_object_id
13003 ,source_object_type
13004 ,DEF_SCH_TOOL_TSK_TYPE_CODE --Bug 9378153
13005 ,CONSTRAINT_TYPE_CODE --Bug 3762437
13006 ,CONSTRAINT_DATE
13007 ,FREE_SLACK
13008 ,TOTAL_SLACK
13009 ,EFFORT_DRIVEN_FLAG
13010 ,LEVEL_ASSIGNMENTS_FLAG
13011 ,EXT_ACT_DURATION
13012 ,EXT_REMAIN_DURATION
13013 ,EXT_SCH_DURATION --Bug 3762437
13014 )
13015 SELECT
13016 pa_proj_elem_ver_schedule_s.nextval
13017 ,ppev1.ELEMENT_VERSION_ID
13018 ,p_dest_PROJECT_ID
13019 ,ppev1.PROJ_ELEMENT_ID
13020 ,SYSDATE
13021 ,l_user_id
13022 ,SYSDATE
13023 ,l_user_id
13024 ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date, --fix bug 2831973
13025 p_target_finish_date,
13026 l_delta,
13027 ppevs.SCHEDULED_START_DATE,
13028 null ) --sch start date
13029 ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date, --fix bug 2831973
13030 p_target_finish_date,
13031 l_delta,
13032 ppevs.SCHEDULED_START_DATE,
13033 SCHEDULED_FINISH_DATE ) --sch end date
13034 ,ppevs.OBLIGATION_START_DATE
13035 ,ppevs.OBLIGATION_FINISH_DATE
13036 ,null --ppevs.ACTUAL_START_DATE bug 2827090
13037 ,null --ppevs.ACTUAL_FINISH_DATE
13038 ,null --ppevs.ESTIMATED_START_DATE
13039 ,null --ppevs.ESTIMATED_FINISH_DATE
13040 ,ppevs.DURATION
13041 ,ppevs.EARLY_START_DATE
13042 ,ppevs.EARLY_FINISH_DATE
13043 ,ppevs.LATE_START_DATE
13044 ,ppevs.LATE_FINISH_DATE
13045 ,p_calendar_id --,ppevs.CALENDAR_ID Bug # 2955589. Use the calendar id passed to
13046 --this API.
13047 ,ppevs.MILESTONE_FLAG
13048 ,ppevs.CRITICAL_FLAG
13049 ,ppevs.RECORD_VERSION_NUMBER
13050 ,l_login_id
13051 ,ppevs.WQ_PLANNED_QUANTITY
13052 ,ppevs.PLANNED_EFFORT
13053 ,ppevs.ACTUAL_DURATION
13054 ,ppevs.ESTIMATED_DURATION
13055 ,ppevs.ATTRIBUTE_CATEGORY
13056 ,ppevs.ATTRIBUTE1
13057 ,ppevs.ATTRIBUTE2
13058 ,ppevs.ATTRIBUTE3
13059 ,ppevs.ATTRIBUTE4
13060 ,ppevs.ATTRIBUTE5
13061 ,ppevs.ATTRIBUTE6
13062 ,ppevs.ATTRIBUTE7
13063 ,ppevs.ATTRIBUTE8
13064 ,ppevs.ATTRIBUTE9
13065 ,ppevs.ATTRIBUTE10
13066 ,ppevs.ATTRIBUTE11
13067 ,ppevs.ATTRIBUTE12
13068 ,ppevs.ATTRIBUTE13
13069 ,ppevs.ATTRIBUTE14
13070 ,ppevs.ATTRIBUTE15
13071 ,p_dest_PROJECT_ID
13072 ,'PA_PROJECTS'
13073 ,ppevs.DEF_SCH_TOOL_TSK_TYPE_CODE --Bug 9378153
13074 ,CONSTRAINT_TYPE_CODE --Bug 3762437
13075 ,CONSTRAINT_DATE
13076 ,FREE_SLACK
13077 ,TOTAL_SLACK
13078 ,EFFORT_DRIVEN_FLAG
13079 ,LEVEL_ASSIGNMENTS_FLAG
13080 ,EXT_ACT_DURATION
13081 ,EXT_REMAIN_DURATION
13082 ,EXT_SCH_DURATION --Bug 3762437
13083 FROM pa_proj_elem_ver_schedule ppevs,
13084 pa_proj_element_versions ppev1,
13085 pa_proj_element_versions ppev2
13086 where ppev1.attribute15 = ppevs.element_version_id
13087 and ppevs.project_id = p_src_project_id
13088 and ppev2.project_id = p_src_project_id
13089 and ppev2.parent_structure_version_id = l_dest_str_versions_tbl(k).src_str_version_id
13090 and ppev2.element_version_id = ppevs.element_version_id
13091 and ppev1.attribute15 = ppev2.element_version_id
13092 and ppev1.object_type = 'PA_STRUCTURES'
13093 and ppev2.object_type = 'PA_STRUCTURES'
13094 and ppev1.project_id = p_dest_project_id;
13095
13096
13097 END IF; --l_dest_str_versions_tbl(k).copy_flag = 'Y'
13098 END LOOP;
13099 END IF; --IF NVL( l_workplan_enabled, 'N' ) = 'N'
13100
13101 IF l_workplan_enabled = 'Y'
13102 THEN
13103 --updating duration
13104 -- Bug 3657808 Remove duration calculation using calendar
13105 -- and rewritting the query
13106 /*UPDATE pa_proj_elem_ver_schedule
13107 SET duration = PA_PROJ_TASK_STRUC_PUB.calc_duration( p_calendar_id,
13108 scheduled_start_date,
13109 scheduled_finish_date )
13110 WHERE project_id = p_dest_project_id;*/
13111 UPDATE pa_proj_elem_ver_schedule
13112 SET duration = trunc(scheduled_finish_date) - trunc(scheduled_start_date) + 1
13113 WHERE project_id = p_dest_project_id;
13114 END IF;
13115
13116 ---updating baselined dates
13117 UPDATE PA_PROJ_ELEMENTS ppe
13118 SET ( BASELINE_START_DATE ,BASELINE_FINISH_DATE,
13119 BASELINE_DURATION ) =
13120 ( Select ppevs.scheduled_start_date, ppevs.scheduled_finish_date,
13121 ppevs.duration
13122 from pa_proj_elem_ver_schedule ppevs,
13123 pa_proj_elem_ver_structure ppevst
13124 WHERE ppevs.project_id = p_dest_project_id
13125 and ppevst.project_id = p_dest_project_id
13126 and ppevst.current_flag = 'Y' --assuming this is the flag used to identify the baselined structure ver.
13127 and ppevst.STATUS_CODE = 'STRUCTURE_PUBLISHED'
13128 and ppevs.element_version_id = ppevst.element_version_id
13129 )
13130 WHERE project_id = p_dest_project_id;
13131 -- and object_type = 'PA_STRUCTURES'
13132 -- and EXISTS ( SELECT proj_element_id FROM pa_proj_structure_types
13133 -- WHERE proj_element_id = ppe.proj_element_id
13134 -- AND structure_type_id = 1 );
13135
13136 --updating projects dates
13137 update pa_projects_all
13138 set ( BASELINE_START_DATE ,BASELINE_FINISH_DATE, baseline_duration, baseline_as_of_date) =
13139 ( SELECT BASELINE_START_DATE ,BASELINE_FINISH_DATE, baseline_duration,
13140 decode(BASELINE_START_DATE, null, null, sysdate)
13141 FROM pa_proj_elements ppe, pa_proj_structure_types ppst
13142 WHERE project_id = p_dest_project_id
13143 and object_type = 'PA_STRUCTURES'
13144 and ppe.proj_element_id = ppst.proj_element_id
13145 and ppst.structure_type_id = 1 )
13146 where project_id = p_dest_project_id;
13147
13148 IF l_latest_pub_str_ver_id IS NOT NULL
13149 THEN
13150 update pa_projects_all
13151 set ( scheduled_START_DATE ,scheduled_FINISH_DATE, scheduled_duration, scheduled_as_of_date ) =
13152 ( SELECT SCHEDULED_START_DATE ,SCHEDULED_FINISH_DATE,duration,
13153 decode(SCHEDULED_START_DATE, null, null, sysdate)
13154 FROM pa_proj_elem_ver_schedule
13155 WHERE project_id = p_dest_project_Id
13156 and element_version_id = l_latest_pub_str_ver_id)
13157 where project_id = p_dest_project_id;
13158 END IF;
13159
13160
13161 --bug 2831775
13162 --need to sync up transaction dates if auto sync is on
13163 If l_shared = 'Y' and l_workplan_enabled = 'Y' THEN
13164 OPEN get_shared_struc_id;
13165 FETCH get_shared_struc_id into l_structure_id;
13166 CLOSE get_shared_struc_id;
13167
13168 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
13169
13170 --Copy to transaction date
13171 PA_PROJECT_DATES_PUB.COPY_PROJECT_DATES(
13172 p_project_id => p_dest_project_id,
13173 x_return_status => l_return_status,
13174 x_msg_count => l_msg_count,
13175 x_msg_data => l_msg_data
13176 );
13177
13178 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
13179 x_msg_count := FND_MSG_PUB.count_msg;
13180 if x_msg_count = 1 then
13181 x_msg_data := l_msg_data;
13182 end if;
13183 raise FND_API.G_EXC_ERROR;
13184 end if;
13185
13186 END IF;
13187 END IF;
13188 --end bug 2831775
13189 ------------------------------------------------------------------------------
13190 -- Changes added by skannoji
13191 -- Added code for doosan customer
13192 Declare
13193 /* Bug #: 3305199 SMukka */
13194 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
13195 /* src_versions_tab PA_PLSQL_DATATYPES.IdTabTyp; */
13196 /* dest_versions_tab PA_PLSQL_DATATYPES.IdTabTyp; */
13197 src_versions_tab SYSTEM.pa_num_tbl_type;
13198 dest_versions_tab SYSTEM.pa_num_tbl_type;
13199 Begin
13200 Select Element_Version_ID, attribute15 BULK COLLECT
13201 INTO dest_versions_tab, src_Versions_Tab
13202 From PA_Proj_Element_Versions
13203 Where Project_ID = p_dest_project_id
13204 AND ( PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(element_version_id, 'WORKPLAN') = 'Y')
13205 AND object_type = 'PA_STRUCTURES';
13206
13207 -- Copies budget versions, resource assignments and budget lines as required for the workplan version.
13208 /*Smukka Bug No. 3474141 Date 03/01/2004 */
13209 /*moved PA_FP_COPY_FROM_PKG.copy_wp_budget_versions into plsql block */
13210 BEGIN
13211 PA_FP_COPY_FROM_PKG.copy_wp_budget_versions
13212 (
13213 p_source_project_id => p_src_project_id
13214 ,p_target_project_id => p_dest_project_id
13215 ,p_src_sv_ids_tbl => src_Versions_Tab -- Workplan version id tbl
13216 ,p_target_sv_ids_tbl => dest_Versions_Tab -- Workplan version id tbl
13217 ,p_copy_mode => null -- Bug 4277801
13218 ,x_return_status => x_return_status
13219 ,x_msg_count => x_msg_count
13220 ,x_Msg_data => x_msg_data
13221 );
13222 EXCEPTION
13223 WHEN OTHERS THEN
13224 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
13225 p_procedure_name => 'copy_structures_bulk',
13226 p_error_text => SUBSTRB('PA_FP_COPY_FROM_PKG.copy_wp_budget_versions:'||SQLERRM,1,240));
13227 RAISE FND_API.G_EXC_ERROR;
13228 END;
13229 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13230 RAISE FND_API.G_EXC_ERROR;
13231 END IF;
13232 End;
13233 -- till here by skannoji
13234 ------------------------------------------------------------------------------
13235
13236 update pa_proj_elements ppe1
13237 set attribute15 = ( select attribute15 from pa_proj_elements ppe2
13238 where ppe2.project_id = p_src_project_id
13239 and ppe2.proj_element_id = ppe1.attribute15 )
13240 where project_id = p_dest_project_id
13241 ;
13242
13243 update pa_proj_element_versions ppevs1
13244 set attribute15 = ( select attribute15 from pa_proj_element_versions ppevs2
13245 where ppevs2.project_id = p_src_project_id
13246 and ppevs2.element_version_id = ppevs1.attribute15 )
13247 where project_id = p_dest_project_id
13248 ;
13249
13250 /* Not required to call the concurrent program bcoz it will
13251 be called from AMG upon project creation. Otherwise it will
13252 be redundant code
13253 --bug 3035902 maansari
13254 DECLARE
13255
13256 CURSOR cur_strs_n_types
13257 IS
13258 SELECT ppe.proj_element_id, ppst.structure_type_id
13259 FROM pa_proj_elements ppe, pa_proj_structure_types ppst
13260 WHERE ppe.project_id = p_dest_project_id
13261 AND ppe.object_type = 'PA_STRUCTURES'
13262 AND ppe.proj_element_id = ppst.proj_element_id
13263 ;
13264
13265 CURSOR cur_str_vers( c_structure_id NUMBER )
13266 IS
13267 SELECT ppevs.element_version_id
13268 FROM pa_proj_element_versions ppevs
13269 WHERE ppevs.project_id = p_dest_project_id
13270 AND ppevs.object_type = 'PA_STRUCTURES'
13271 AND ppevs.proj_element_id = c_structure_id
13272 ;
13273
13274 l_fn_str_id NUMBER;
13275 l_wp_str_id NUMBER;
13276 l_fn_str_ver_id NUMBER;
13277 l_wp_str_ver_id NUMBER;
13278 l_task_weight_basis PA_PROJ_PROGRESS_ATTR.task_weight_basis_code%TYPE;
13279 BEGIN
13280 l_task_weight_basis := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS( p_dest_project_id );
13281 IF NVL( l_task_weight_basis, 'X' ) = 'DURATION'
13282 THEN
13283 FOR cur_strs_n_types_rec in cur_strs_n_types LOOP
13284 IF cur_strs_n_types_rec.structure_type_id = 1 --'WORKPLAN' structure
13285 THEN
13286 l_wp_str_id := cur_strs_n_types_rec.proj_element_id;
13287 UPDATE pa_proj_elem_ver_structure
13288 SET PROCESS_UPDATE_WBS_FLAG = 'Y'
13289 WHERE proj_element_id = cur_strs_n_types_rec.proj_element_id
13290 AND project_id = p_dest_project_id
13291 AND PROCESS_UPDATE_WBS_FLAG = 'N'
13292 ;
13293 ELSE
13294 l_fn_str_id := cur_strs_n_types_rec.proj_element_id;
13295 END IF;
13296 END LOOP;
13297 END IF;
13298
13299 IF l_shared = 'Y' AND NVL( l_task_weight_basis, 'X' ) = 'DURATION'
13300 THEN
13301 OPEN cur_str_vers( l_wp_str_id );
13302 FETCH cur_str_vers INTO l_wp_str_ver_id;
13303 CLOSE cur_str_vers;
13304
13305 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
13306 (
13307 p_calling_context => 'COPY_PROJECT'
13308 ,p_project_id => p_dest_project_id
13309 ,p_structure_version_id => l_wp_str_ver_id
13310 ,x_return_status => l_return_status
13311 ,x_msg_count => l_msg_count
13312 ,x_msg_data => l_msg_data);
13313
13314 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
13315 x_msg_count := FND_MSG_PUB.count_msg;
13316 if x_msg_count = 1 then
13317 x_msg_data := l_msg_data;
13318 end if;
13319 raise FND_API.G_EXC_ERROR;
13320 end if;
13321
13322 ELSIF l_shared = 'N' AND NVL( l_task_weight_basis, 'X' ) = 'DURATION' --Split then call the api twice.
13323 THEN
13324 OPEN cur_str_vers( l_wp_str_id );
13325 FETCH cur_str_vers INTO l_wp_str_ver_id;
13326 CLOSE cur_str_vers;
13327
13328 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
13329 (
13330 p_calling_context => 'COPY_PROJECT'
13331 ,p_project_id => p_dest_project_id
13332 ,p_structure_version_id => l_wp_str_ver_id
13333 ,x_return_status => l_return_status
13334 ,x_msg_count => l_msg_count
13335 ,x_msg_data => l_msg_data);
13336
13337 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
13338 x_msg_count := FND_MSG_PUB.count_msg;
13339 if x_msg_count = 1 then
13340 x_msg_data := l_msg_data;
13341 end if;
13342 raise FND_API.G_EXC_ERROR;
13343 end if;
13344
13345
13346 OPEN cur_str_vers( l_fn_str_id );
13347 FETCH cur_str_vers INTO l_fn_str_ver_id;
13348 CLOSE cur_str_vers;
13349
13350 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
13351 (
13352 p_calling_context => 'COPY_PROJECT'
13353 ,p_project_id => p_dest_project_id
13354 ,p_structure_version_id => l_fn_str_ver_id
13355 ,x_return_status => l_return_status
13356 ,x_msg_count => l_msg_count
13357 ,x_msg_data => l_msg_data);
13358
13359 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
13360 x_msg_count := FND_MSG_PUB.count_msg;
13361 if x_msg_count = 1 then
13362 x_msg_data := l_msg_data;
13363 end if;
13364 raise FND_API.G_EXC_ERROR;
13365 end if;
13366
13367 END IF;
13368 END;
13369 --End 3035902 maansari
13370 */
13371
13372
13373 x_return_status := FND_API.G_RET_STS_SUCCESS;
13374
13375
13376 IF (p_debug_mode = 'Y') THEN
13377 pa_debug.debug('PA_PROJ_TASK_STRUC_PUB.copy_structures_bulk END');
13378 END IF;
13379
13380 EXCEPTION
13381 when FND_API.G_EXC_ERROR then
13382 if p_commit = FND_API.G_TRUE then
13383 rollback to copy_structure_bulk_pvt;
13384 end if;
13385 x_return_status := FND_API.G_RET_STS_ERROR;
13386 when FND_API.G_EXC_UNEXPECTED_ERROR then
13387 if p_commit = FND_API.G_TRUE then
13388 rollback to copy_structure_bulk_pvt;
13389 end if;
13390 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13391 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
13392 p_procedure_name => 'copy_structures_bulk',
13393 p_error_text => SUBSTRB(SQLERRM,1,240));
13394 when OTHERS then
13395 if p_commit = FND_API.G_TRUE then
13396 rollback to copy_structure_bulk_pvt;
13397 end if;
13398 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13399 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
13400 p_procedure_name => 'copy_structures_bulk',
13401 p_error_text => SUBSTRB(SQLERRM,1,240));
13402 raise;
13403 END copy_structures_bulk;
13404
13405 FUNCTION calc_duration( p_calendar_id NUMBER, p_start_date DATE, p_finish_date DATE ) RETURN NUMBER IS
13406 l_return_duration NUMBER;
13407 l_duration_days NUMBER;
13408 l_msg_count NUMBER;
13409 l_msg_data VARCHAR2(250);
13410 l_return_status VARCHAR2(2);
13411 BEGIN
13412
13413 pa_duration_utils.get_duration(p_calendar_id => p_calendar_id ,
13414 p_start_date => p_start_date,
13415 p_end_date => p_finish_date,
13416 x_duration_days => l_duration_days,
13417 x_duration_hours => l_return_duration ,
13418 x_return_status => l_return_status,
13419 x_msg_count => l_msg_count,
13420 x_msg_data => l_msg_data);
13421 return l_return_duration;
13422
13423 END calc_duration;
13424
13425 PROCEDURE get_version_ids(
13426 p_task_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13427 ,p_task_version_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13428 ,p_project_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13429 ,x_structure_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13430 ,x_task_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13431 ) IS
13432 CURSOR cur_str_ver_id1
13433 IS
13434 SELECT parent_structure_version_id
13435 FROM pa_proj_element_versions
13436 WHERE element_version_id = p_task_version_id;
13437
13438 CURSOR cur_str_ver_id2
13439 IS
13440 SELECT element_version_id, parent_structure_version_id
13441 FROM pa_proj_element_versions
13442 WHERE proj_element_id = p_task_id
13443 AND project_id = p_project_id
13444 ;
13445
13446 BEGIN
13447
13448 IF p_task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_task_version_id IS NOT NULL
13449 THEN
13450 OPEN cur_str_ver_id1;
13451 FETCH cur_str_ver_id1 INTO x_structure_version_id;
13452 CLOSE cur_str_ver_id1;
13453 x_task_version_id := p_task_version_id;
13454 ELSIF ( p_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_task_version_id IS NULL ) AND
13455 ( p_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_task_id IS NOT NULL )
13456 THEN
13457 OPEN cur_str_ver_id2;
13458 FETCH cur_str_ver_id2 INTO x_task_version_id, x_structure_version_id;
13459 CLOSE cur_str_ver_id2;
13460 END IF;
13461
13462 END get_version_ids;
13463
13464
13465 PROCEDURE get_task_version_id(
13466 p_project_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13467 ,p_structure_version_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13468 ,p_task_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13469 ,x_task_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13470 ) IS
13471
13472 CURSOR cur_task_ver_id
13473 IS
13474 SELECT element_version_id
13475 FROM pa_proj_element_versions
13476 WHERE proj_element_id = p_task_id
13477 AND parent_structure_version_id = p_structure_version_id
13478 AND project_id = p_project_id;
13479
13480 BEGIN
13481 IF p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_structure_version_id IS NOT NULL AND
13482 p_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_task_id IS NOT NULL AND
13483 p_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_project_id IS NOT NULL
13484 THEN
13485 OPEN cur_task_ver_id;
13486 FETCH cur_task_ver_id INTO x_task_version_id;
13487 CLOSE cur_task_ver_id;
13488 END IF;
13489 END get_task_version_id;
13490
13491
13492 PROCEDURE rollup_dates(
13493 p_tasks_in IN pa_project_pub.task_out_tbl_type
13494 ,p_task_version_id IN NUMBER := null
13495 ,p_structure_version_id IN NUMBER
13496 ,p_project_id IN NUMBER
13497 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13498 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13499 ,x_return_status OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
13500
13501 i NUMBER;
13502
13503 l_tasks_ver_ids PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
13504 l_task_version_id NUMBER;
13505
13506 l_msg_count NUMBER;
13507 l_return_status VARCHAR2(1);
13508 l_msg_data VARCHAR2(2000);
13509 l_data VARCHAR2(2000);
13510 l_msg_index_out NUMBER;
13511 API_ERROR EXCEPTION;
13512 j NUMBER;
13513
13514 BEGIN
13515
13516 IF p_task_version_id IS NULL
13517 THEN
13518 i := p_tasks_in.first;
13519 j := 1;
13520 IF p_tasks_in.exists(i)
13521 THEN
13522 WHILE i IS NOT NULL LOOP
13523 IF p_tasks_in(i).task_version_id IS NOT NULL AND
13524 p_tasks_in(i).task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13525 THEN
13526 --l_tasks_ver_ids.extend;
13527 l_tasks_ver_ids(j) := p_tasks_in(i).task_version_id;
13528
13529 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
13530 ( 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
13531 THEN
13532 --PA_PROJECT_PUB.update_project does not populate task versions for the tasks being updated.
13533 --in this case we have to pick this from databse.
13534 get_task_version_id(
13535 p_project_id => p_project_id
13536 ,p_task_id => p_tasks_in(i).pa_task_id
13537 ,p_structure_version_id => p_structure_version_id
13538 ,x_task_version_id => l_task_version_id
13539 );
13540
13541 --l_tasks_ver_ids.extend;
13542 l_tasks_ver_ids(j) := l_task_version_id;
13543
13544 END IF;
13545 i := p_tasks_in.next(i);
13546 j := j + 1;
13547 END LOOP;
13548 END IF;
13549 --To avoid no_data_found when this array is read in PA_TASK_PUB1.Cal_Task_weights
13550 --l_tasks_ver_ids.extend;
13551 --l_tasks_ver_ids(l_tasks_ver_ids.count) := null;
13552 ELSE
13553 l_tasks_ver_ids(1) := p_task_version_id;
13554 END IF;
13555
13556 PA_STRUCT_TASK_ROLLUP_PUB.TASKS_ROLLUP_UNLIMITED(
13557 p_calling_module => 'AMG'
13558 ,p_element_versions => l_tasks_ver_ids
13559 ,x_return_status => l_return_status
13560 ,x_msg_count => l_msg_count
13561 ,x_msg_data => l_msg_data);
13562
13563 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
13564 x_msg_count := FND_MSG_PUB.count_msg;
13565 x_return_status := l_return_status ; -- Bug 3044915
13566 if x_msg_count = 1 then
13567 pa_interface_utils_pub.get_messages
13568 (p_encoded => FND_API.G_TRUE,
13569 p_msg_index => 1,
13570 p_msg_count => l_msg_count,
13571 p_msg_data => l_msg_data,
13572 p_data => l_data,
13573 p_msg_index_out => l_msg_index_out);
13574 x_msg_data := l_data;
13575 end if;
13576 raise API_ERROR;
13577 end if;
13578 x_return_status := FND_API.G_RET_STS_SUCCESS; -- Bug3044915
13579
13580 -- Start Changes for Bug 6633233
13581 EXCEPTION
13582 WHEN API_ERROR THEN
13583 x_return_status := FND_API.G_RET_STS_ERROR;
13584
13585 WHEN OTHERS THEN
13586 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13587 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
13588 p_procedure_name => 'ROLLUP_DATES',
13589 p_error_text => SUBSTRB(SQLERRM,1,240));
13590 raise;
13591 -- End Changes for Bug 6633233
13592
13593 END rollup_dates;
13594
13595 /*==================================================================
13596 This API is called from pa_project_pub.create_project and does the
13597 processing to create the structure information for the tasks.
13598 Included the api for Post FP K one off. Bug 2931183
13599 This API is called from pa_project_pub.update_project which passes
13600 the structure version id through p_structure_version_id parameter.
13601 The complete WBS is passed to this API in p_tasks_in_tbl. Depending
13602 on whether the task is an existing task or a new task, task creation
13603 or task updation is performed.
13604 ==================================================================*/
13605
13606 PROCEDURE PROCESS_TASK_STRUCTURE_BULK
13607 ( p_api_version_number IN NUMBER
13608 ,p_commit IN VARCHAR2
13609 ,p_init_msg_list IN VARCHAR2
13610 ,p_calling_module IN VARCHAR2
13611 ,p_project_id IN pa_projects_all.project_id%TYPE
13612 ,p_source_project_id IN pa_projects_all.project_id%TYPE
13613 ,p_pm_product_code IN pa_projects_all.pm_product_code%TYPE
13614 ,p_structure_type IN pa_structure_types.structure_type_class_code%TYPE
13615 ,p_tasks_in_tbl IN pa_project_pub.task_in_tbl_type
13616 ,p_create_task_version_only IN VARCHAR2
13617 ,p_wp_str_exists IN VARCHAR2
13618 ,p_is_wp_separate_from_fn IN VARCHAR2
13619 ,p_is_wp_versioning_enabled IN VARCHAR2
13620 ,p_structure_version_id IN pa_proj_elem_ver_structure.element_version_id%TYPE --IUP: Populated only in case of Update_project context
13621 -- Included NOCOPY for the following parameter.
13622 -- PA L Changes 3010538
13623 ,p_process_mode IN VARCHAR2
13624 -- Bug 3075609. To identify create task version only context.
13625 ,p_create_task_versions_only IN VARCHAR2
13626 ,px_tasks_out_tbl IN OUT NOCOPY pa_project_pub.task_out_tbl_type
13627 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13628 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13629 ,x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
13630 AS
13631
13632 -- Cursors Definition
13633
13634 -- This cursor is used to get the auto publish flag on creation for a given project_id
13635 /* Bug 2955589. This cursor is no longer used.
13636 CURSOR cur_auto_pub_flag(c_project_id pa_projects_all.project_id%TYPE)
13637 IS
13638 SELECT AUTO_PUB_UPON_CREATION_FLAG
13639 FROM pa_proj_workplan_attr
13640 WHERE project_id = c_project_id;
13641 */
13642 -- This cursor is used to get the structure id given the structure type and project_id
13643 CURSOR get_structure(c_project_id pa_projects_all.project_id%TYPE, c_struc_type pa_structure_types.structure_type_class_code%TYPE) IS
13644 select pelem.proj_element_id
13645 from pa_proj_elements pelem,
13646 pa_proj_structure_types ppstr,
13647 pa_structure_types pstr
13648 where pelem.project_id = c_project_id
13649 and pstr.structure_type_class_code = c_struc_type
13650 and pstr.structure_type_id = ppstr.structure_type_id
13651 and ppstr.proj_element_id = pelem.proj_element_id;
13652
13653 -- This cursor is used to get the project number given the project_id
13654 CURSOR l_amg_project_csr(c_project_id pa_projects.project_id%type)
13655 IS
13656 SELECT segment1
13657 FROM pa_projects p
13658 WHERE p.project_id = c_project_id;
13659
13660 --The following cursor will be used when the structure type is
13661 --Financial as some of the attributes have been derived and updated
13662 --in the pa_tasks table and we need to use them for structures processing.
13663 CURSOR cur_pa_tasks(c_project_id pa_projects_all.project_id%TYPE,c_task_id pa_tasks.task_id%TYPE)
13664 IS
13665 SELECT task_number, long_task_name, description,
13666 parent_task_id,carrying_out_organization_id,
13667 pm_task_reference, address_id, task_manager_person_id
13668 FROM pa_tasks
13669 WHERE project_id = c_project_id
13670 AND task_id = c_task_id;
13671
13672 l_cur_pa_tasks_rec cur_pa_tasks%ROWTYPE; -- userd only for create task case
13673
13674 --ADUT. This cursor is required to identify if the source is a project / template.
13675 Cursor cur_template_flag(c_proj_id pa_projects_all.project_id%TYPE)
13676 Is
13677 select NVL(template_flag,'N')
13678 from pa_projects
13679 where project_id = c_proj_id;
13680
13681 -- IUP: Cursors added for changes done to this api so it can be called from update_project
13682 --Cursor to get the record version number of the task record which needs to be updated in pa_proj_elements table
13683 CURSOR cur_rec_ver_num(c_task_id pa_tasks.task_id%TYPE)
13684 IS
13685 SELECT record_version_number
13686 FROM pa_proj_elements
13687 WHERE proj_element_id = c_task_id
13688 AND object_type = 'PA_TASKS';
13689
13690 --Cursor to get the task version id when task id and structure version id is known
13691 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 )
13692 IS
13693 SELECT element_version_id, record_version_number
13694 FROM pa_proj_element_versions
13695 WHERE project_id = p_project_id
13696 AND proj_element_id = c_task_id
13697 AND parent_structure_version_id = c_structure_version_id
13698 AND object_type = 'PA_TASKS';
13699
13700 --Cursor to get the parent version id of the task version id
13701 CURSOR cur_parent_object_rel( c_task_version_id pa_proj_elem_ver_schedule.element_version_id%TYPE )
13702 IS
13703 SELECT object_id_from1 -- parent task id
13704 ,object_relationship_id, -- relationship id reqd for update relationship API
13705 record_version_number,
13706 weighting_percentage -- Bug 3075609. We need to get hold of the weightage of the task in db.
13707 FROM pa_object_relationships
13708 WHERE object_id_to1 = c_task_version_id
13709 AND relationship_type = 'S';
13710
13711 -- Added for DFF attributes for calling update_schedule_version
13712 CURSOR cur_ver_sch_attr_rec(c_element_version_id IN pa_proj_elem_ver_schedule.element_version_id%TYPE)
13713 IS
13714 SELECT *
13715 FROM pa_proj_elem_ver_schedule
13716 WHERE element_version_id = c_element_version_id
13717 AND project_id = p_project_id;
13718
13719 l_ver_sch_attr_rec cur_ver_sch_attr_rec%ROWTYPE;
13720
13721 --Cursor to get the task type associated with the task id
13722 CURSOR cur_task_type_id(c_task_id pa_tasks.task_id%TYPE)
13723 IS
13724 SELECT type_id
13725 FROM pa_proj_elements
13726 WHERE proj_element_id = c_task_id
13727 AND project_id = p_project_id;
13728
13729 --Cursor to get the task id if task element version id is known
13730 CURSOR cur_elem_ver_to_task_id( c_task_version_id pa_proj_element_versions.element_version_id%TYPE )
13731 IS
13732 SELECT proj_element_id
13733 FROM pa_proj_element_versions
13734 WHERE project_id = p_project_id
13735 AND element_version_id = c_task_version_id;
13736
13737
13738 --Cursor added for bug 3057575 :
13739 --Cursor to get all the task ver id for a particular Structure version
13740 CURSOR cur_all_task_ver_id( c_structure_version_id pa_proj_element_versions.parent_structure_version_id%TYPE )
13741 IS
13742 Select element_version_id
13743 from pa_proj_element_versions
13744 where parent_structure_version_id = c_structure_version_id
13745 and object_type = 'PA_TASKS'
13746 -- rbruno added for bug 9484327 to get task which are not marked for deletion - start
13747 and task_unpub_ver_status_code <> 'TO_BE_DELETED';
13748 -- rbruno added for bug 9484327 - end
13749
13750
13751 --Cursor added for bug 3057575 :
13752 --Cursor to get the task number from task ver id
13753 CURSOR cur_ver_id_to_task_num( c_task_version_id pa_proj_element_versions.element_version_id%TYPE )
13754 IS
13755 SELECT p1.element_number
13756 FROM pa_proj_elements p1, pa_proj_element_versions pv1
13757 WHERE pv1.element_version_id = c_task_version_id
13758 AND p1.proj_element_id = pv1.proj_element_id;
13759
13760 -- End Cursors Definition
13761
13762 -- Definition for the table types used in this API
13763 TYPE display_sequence_tbl IS TABLE OF pa_proj_element_versions.display_sequence%TYPE
13764 INDEX BY BINARY_INTEGER;
13765 TYPE wbs_level_tbl IS TABLE OF pa_proj_element_versions.wbs_level%TYPE
13766 INDEX BY BINARY_INTEGER;
13767 TYPE wbs_number_tbl IS TABLE OF pa_proj_element_versions.wbs_number%TYPE
13768 INDEX BY BINARY_INTEGER;
13769 TYPE child_count_tbl IS TABLE OF NUMBER
13770 INDEX BY BINARY_INTEGER;
13771 TYPE weighting_percentage_tbl IS TABLE OF pa_object_relationships.weighting_percentage%TYPE
13772 INDEX BY BINARY_INTEGER;
13773 TYPE task_version_id_tbl IS TABLE OF pa_proj_element_versions.element_version_id%TYPE
13774 INDEX BY BINARY_INTEGER;
13775
13776 ----Table Type added for bug 3057575 :
13777 TYPE task_parent_id_tbl_type IS TABLE OF pa_tasks.task_id%TYPE
13778 INDEX BY BINARY_INTEGER;
13779 ----Table Type added for bug 3057575 :
13780 TYPE task_ver_id_passed_tbl_type IS TABLE OF pa_proj_element_versions.element_version_id%TYPE
13781 INDEX BY BINARY_INTEGER;
13782
13783 -- End of Definition for the table types
13784
13785 -- Header level variables common to all tasks required for update/create task/project cases.
13786 l_structure_id pa_proj_elements.proj_element_id%TYPE;
13787 l_structure_version_id pa_proj_element_versions.element_version_id%TYPE;
13788 l_task_unpub_ver_status_code pa_proj_element_versions.task_unpub_ver_status_code%TYPE;
13789 l_add_task_security VARCHAR2(1);
13790 l_default_task_type_id pa_proj_elements.type_id%TYPE;
13791 l_update_task_security VARCHAR2(1);
13792 l_str_status_code pa_proj_elem_ver_structure.status_code%TYPE;
13793 l_amg_segment1 pa_projects_all.segment1%TYPE;
13794
13795 -- Bug 3075609
13796 l_maintain_weightages VARCHAR2(1); -- We need not maintain weightages during code flow always. This var will track it.
13797 l_existing_task_set_max_wt VARCHAR2(1); -- If a task is indented/ moved under a parent with no other progressible task, this
13798 -- task should have a weightage of 100. This flag will track this.
13799
13800 -- Bug 3075609
13801 l_new_structure_version varchar2(1) := 'Y'; -- In the update context, we could be either updating an existing
13802 -- structure version or be creating a new structure version. We need
13803 -- to differentiate the two scenarios.
13804
13805 -- rec that contains all tasks information.
13806 l_task_in_rec pa_project_pub.task_in_rec_type;
13807
13808 -- proj element level variables
13809 l_task_id pa_tasks.task_id%TYPE; -- task id of the current task being processed in loop
13810 l_parent_task_id pa_tasks.parent_task_id%TYPE; -- parent task id of the current task being processed in loop
13811 l_task_version_id pa_proj_element_versions.element_version_id%TYPE; -- stores version id of current task being processed
13812
13813 -- version level variables required only for update task case.
13814 l_proj_elem_ver_rvn pa_proj_element_versions.record_version_number%TYPE; -- record version number of proj element table
13815 l_proj_elem_ver_rowid VARCHAR2(255); -- rowid of the task being updated.
13816 l_relationship_id pa_object_relationships.object_relationship_id%TYPE;
13817 l_obj_rel_rvn NUMBER;
13818
13819 -- flexfield attributes used for updating/creating element version and schedule versions table.
13820 l_attribute_category PA_PROJ_ELEMENT_VERSIONS.attribute_category%TYPE;
13821 l_attribute1 PA_PROJ_ELEMENT_VERSIONS.attribute1%TYPE;
13822 l_attribute2 PA_PROJ_ELEMENT_VERSIONS.attribute2%TYPE;
13823 l_attribute3 PA_PROJ_ELEMENT_VERSIONS.attribute3%TYPE;
13824 l_attribute4 PA_PROJ_ELEMENT_VERSIONS.attribute4%TYPE;
13825 l_attribute5 PA_PROJ_ELEMENT_VERSIONS.attribute5%TYPE;
13826 l_attribute6 PA_PROJ_ELEMENT_VERSIONS.attribute6%TYPE;
13827 l_attribute7 PA_PROJ_ELEMENT_VERSIONS.attribute7%TYPE;
13828 l_attribute8 PA_PROJ_ELEMENT_VERSIONS.attribute8%TYPE;
13829 l_attribute9 PA_PROJ_ELEMENT_VERSIONS.attribute9%TYPE;
13830 l_attribute10 PA_PROJ_ELEMENT_VERSIONS.attribute10%TYPE;
13831 l_attribute11 PA_PROJ_ELEMENT_VERSIONS.attribute11%TYPE;
13832 l_attribute12 PA_PROJ_ELEMENT_VERSIONS.attribute12%TYPE;
13833 l_attribute13 PA_PROJ_ELEMENT_VERSIONS.attribute13%TYPE;
13834 l_attribute14 PA_PROJ_ELEMENT_VERSIONS.attribute14%TYPE;
13835 l_attribute15 PA_PROJ_ELEMENT_VERSIONS.attribute15%TYPE;
13836 --Bug 6153503
13837 l_return_msg varchar2(2000);
13838 l_validate_status varchar2(1);
13839
13840 -- Variables required for calculating display sequence, wbs level and weightage etc.
13841 l_display_sequence_tbl display_sequence_tbl;
13842 l_wbs_level_tbl wbs_level_tbl;
13843 l_wbs_number_tbl wbs_number_tbl;
13844 l_child_count_tbl child_count_tbl;
13845 l_weighting_percentage_tbl weighting_percentage_tbl;
13846 l_task_version_id_tbl task_version_id_tbl;
13847 l_top_task_count NUMBER;
13848 l_disp_seq NUMBER;
13849
13850 -- Bug 3075609. The following plsql table will indicate at any point of time if the parent
13851 -- contains a task which has progress enabled.
13852 l_child_indicator_tbl PA_PLSQL_DATATYPES.Char1TabTyp;
13853
13854 -- Bug 3075609. This is a table of task versions for which atleast one of its child has changed
13855 -- its parent. That a child task has moved out of this branch. This local variable will be indexed
13856 -- with the task version ids so that eliminating duplicates is easy.
13857 l_affected_parents_tbl PA_PLSQL_DATATYPES.Char1TabTyp;
13858
13859 l_dummy_char VARCHAR2(1);
13860 l_dummy_number NUMBER;
13861
13862 -- Standard parameters
13863 l_return_status varchar2(1);
13864 l_error_msg_code varchar2(30);
13865 l_msg_count NUMBER := 0;
13866 l_data VARCHAR2(2000);
13867 l_msg_data VARCHAR2(2000);
13868 l_msg_index_out NUMBER;
13869 l_debug_mode VARCHAR2(1);
13870 l_module_name VARCHAR2(100) := 'pa.plsql.PA_PROJ_TASK_STRUC_PUB';
13871 l_process_code VARCHAR2(30);
13872 l_task_weight_basis_code VARCHAR2(30);
13873 l_update_wbs_flag VARCHAR2(1);
13874
13875 l_debug_level2 CONSTANT NUMBER := 2;
13876 l_debug_level3 CONSTANT NUMBER := 3;
13877 l_debug_level4 CONSTANT NUMBER := 4;
13878 l_debug_level5 CONSTANT NUMBER := 5;
13879 l_debug_level6 CONSTANT NUMBER := 6;
13880
13881 --bug 3010538
13882 l_WBS_changed_flag VARCHAR2(1) := 'N';
13883 l_progressable_task VARCHAR2(1); --bug 3035902 maansari
13884 --end bug 3010538
13885
13886 -- Bug 3091798
13887 l_request_id pa_proj_elem_ver_structure.conc_request_id%TYPE;
13888
13889 -- Variables added for bug 3057575 :
13890 row_task_ver_id cur_all_task_ver_id%ROWTYPE;
13891 task_parent_id_tbl task_parent_id_tbl_type;
13892 task_ver_id_passed_tbl task_ver_id_passed_tbl_type;
13893 l_temp_count NUMBER;
13894 l_temp_success VARCHAR2(1);
13895 l_hierarchy_count NUMBER;
13896 -- l_err_task_number pa_tasks.task_number%TYPE; bug 6193314
13897 l_err_task_number pa_proj_elements.element_number%TYPE;
13898 l_shared VARCHAR(1) := 'N'; -- Added for Bug#3451073
13899
13900 /* Bug # 3420093 - Adding Progress Management modifications to create_project and update_project flow. */
13901
13902 -- Amit Bug 3964548 Begin
13903 -- Changed l_add_task_ver_ids, l_add_planned_effort, l_add_start_date, l_add_end_date
13904 -- to SYSTEM.pa_num_tbl_type from PA_NUM_1000_NUM
13905 --l_add_task_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
13906 --l_add_planned_effort PA_NUM_1000_NUM := PA_NUM_1000_NUM();
13907 --l_add_start_date PA_DATE_1000_DATE := PA_DATE_1000_DATE();
13908 --l_add_end_date PA_DATE_1000_DATE := PA_DATE_1000_DATE();
13909
13910 l_add_task_ver_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13911 l_add_planned_effort SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13912 l_add_start_date SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
13913 l_add_end_date SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
13914 l_pm_product_code SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
13915 l_add_plan_task_id NUMBER;
13916
13917 CURSOR cur_wp_task_csr_duplicate (c_project_id pa_projects_all.project_id%TYPE,
13918 c_pm_source_reference pa_proj_elements.pm_source_reference%TYPE) IS
13919 SELECT proj_element_id
13920 FROM pa_proj_elements pelem
13921 WHERE project_id = c_project_id
13922 AND pm_source_reference = c_pm_source_reference
13923 AND exists(select 1
13924 from pa_proj_structure_types pstype, pa_structure_types types
13925 where pstype.proj_element_id = pelem.parent_structure_id
13926 and pstype.structure_type_id = types.structure_type_id
13927 and types.structure_type = p_structure_type);
13928 -- Amit Bug 3964548 End
13929
13930 l_del_task_ver_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13931
13932 cursor l_task_cur(p_project_id NUMBER) is
13933 select
13934 element_version_id,planned_effort,actual_start_date,actual_finish_date
13935 from pa_proj_elem_ver_schedule ppevs, pa_proj_elements ppe
13936 where ppevs.project_id = ppe.project_id
13937 and ppevs.proj_element_id = ppe.proj_element_id
13938 and ppe.object_type = 'PA_TASKS'
13939 and ppevs.project_id = p_project_id;
13940 /** cursor added by aditi for bug 4120380. This is added to verify if the task_number is being modified by AMG Update_project script,
13941 Only then we need to prefix the task_number with a '-', so as to prevent primary key violation, and sucessful update.**/
13942 /*bug#5243018 : Reverting the fix in Bug 4120380
13943 CURSOR cur_proj_elements_info(c_task_id pa_proj_elements.proj_element_id%TYPE)
13944 IS
13945 SELECT element_number, name
13946 FROM pa_proj_elements
13947 WHERE proj_element_id = c_task_id;
13948 l_proj_elements_info cur_proj_elements_info%ROWTYPE; */
13949 /** changes end for bug 4120380 by aditi **/
13950 l_task_cur_rec l_task_cur%rowtype;
13951
13952 l_taskin_rec pa_project_pub.task_in_rec_type;
13953 l_taskout_rec pa_project_pub.task_out_rec_type;
13954
13955 l_i NUMBER;
13956 --Added by rtarway for BUG 4059962
13957 l_financial_task_flag VARCHAR2(1);
13958 l_share_code VARCHAR2(30);
13959 --Added by rtarway for BUG 4059962
13960
13961 --Added by rtarway for BUG 4132590
13962 CURSOR check_hidden_assgn_exists(p_element_version_id IN NUMBER) IS
13963 SELECT 'Y'
13964 FROM pa_resource_assignments ra
13965 WHERE ra.ta_display_flag = 'N'
13966 AND ra.wbs_element_version_id = p_element_version_id
13967 AND rownum = 1;
13968
13969 l_hidden_assgn VARCHAR2(1);
13970 --Added by rtarway for BUG 4132590
13971 l_fin_task_id NUMBER;
13972 l_fin_task_reference VARCHAR2(250);
13973
13974 /* Bug # 3420093 - Adding Progress Management modifications to create_project and update_project flow. */
13975
13976 -- Begin fix for Bug # 4373055.
13977
13978 l_str_ver_id NUMBER:= null;
13979 l_conc_request_id NUMBER := null;
13980 l_message_name VARCHAR2(30) := null;
13981 l_message_type VARCHAR2(30) := null;
13982
13983 -- End fix for Bug # 4373055.
13984
13985 -- Addition for Bug 6458891
13986 -- Bug 10049710
13987 /*
13988 cursor cur_prev_prog (p_project_id NUMBER, p_object_id NUMBER, p_object_version_id NUMBER) is
13989 select
13990 planned_effort, est_remaining_effort, completed_percentage
13991 from PA_TASK_PROGRESS_AMG_V
13992 where
13993 project_id = p_project_id
13994 and OBJECT_ID = p_object_id
13995 and OBJECT_VERSION_ID = p_object_version_id
13996 and STRUCTURE_TYPE_CLASS_CODE='WORKPLAN';
13997 */
13998 CURSOR cur_prev_prog (p_project_id NUMBER, p_object_id NUMBER, p_object_version_id NUMBER)
13999 IS
14000 SELECT
14001 pa_progress_utils.Calc_plan(pxpv.labor_effort, pxpv.equipment_effort) planned_effort,
14002 pa_progress_utils.Sum_etc_values(
14003 ( Nvl(pxpv.labor_effort, 0) + Nvl(pxpv.equipment_effort, 0) ),
14004 ppr.estimated_remaining_effort,
14005 ppr.eqpmt_etc_effort,
14006 NULL,
14007 ppr.subprj_ppl_etc_effort,
14008 ppr.subprj_eqpmt_etc_effort,
14009 NULL,
14010 NULL,
14011 (
14012 Nvl(ppr.ppl_act_effort_to_date, 0) + Nvl(ppr.eqpmt_act_effort_to_date, 0) +
14013 Nvl(ppr.subprj_ppl_act_effort, 0) + Nvl(ppr.subprj_eqpmt_act_effort, 0)
14014 ),
14015 Decode(ppwa.wp_enable_version_flag, 'Y', 'PUBLISH', 'WORKING')) est_remaining_effort,
14016 Nvl(ppr.completed_percentage, ppr.eff_rollup_percent_comp) completed_percentage
14017 FROM
14018 pa_projects_all ppa,
14019 pa_proj_elements ppe,
14020 pa_proj_element_versions ppv,
14021 pa_proj_elem_ver_structure ppvs,
14022 pa_proj_workplan_attr ppwa,
14023 pa_progress_rollup ppr,
14024 pji_xbs_plans_v pxpv
14025 WHERE
14026 ppv.project_id = ppa.project_id
14027 AND ppv.object_type IN( 'PA_STRUCTURES', 'PA_TASKS' )
14028 AND ppv.parent_structure_version_id = ppvs.element_version_id
14029 AND ppv.project_id = ppvs.project_id
14030 AND ppvs.status_code = 'STRUCTURE_PUBLISHED'
14031 AND ppvs.proj_element_id = ppwa.proj_element_id
14032 AND ppvs.project_id = ppwa.project_id
14033 AND ppv.project_id = ppe.project_id
14034 AND ppv.proj_element_id = ppe.proj_element_id
14035 AND ppv.object_type = ppe.object_type
14036 AND ppr.project_id (+) = ppv.project_id
14037 AND ppr.object_id (+) = ppv.proj_element_id
14038 AND ppr.structure_type (+) = 'WORKPLAN'
14039 AND ppr.current_flag (+) <> 'W'
14040 AND ppr.structure_version_id (+) IS NULL
14041 AND ppr.object_version_id (+) <= ppv.element_version_id
14042 AND Nvl(ppr.as_of_date, Trunc(SYSDATE)) =
14043 (
14044 SELECT Nvl(MAX(ppr2.as_of_date), Trunc(SYSDATE))
14045 FROM
14046 pa_progress_rollup ppr2,
14047 pa_proj_element_versions ppev,
14048 pa_proj_elem_ver_structure ppevs
14049 WHERE
14050 ppr2.object_id = ppv.proj_element_id
14051 AND ppr2.proj_element_id = ppv.proj_element_id
14052 AND ppr2.project_id = ppv.project_id
14053 AND ppr2.object_type = ppv.object_type
14054 AND ppr2.structure_type = 'WORKPLAN'
14055 AND ppr2.structure_version_id IS NULL
14056 AND ppr2.current_flag <> 'W'
14057 AND ppr2.object_version_id = ppev.element_version_id
14058 AND ppevs.project_id = ppev.project_id
14059 AND ppevs.element_version_id = ppev.parent_structure_version_id
14060 AND ppevs.status_code = 'STRUCTURE_PUBLISHED'
14061 AND ppevs.published_date <= ppvs.published_date
14062 )
14063 AND pxpv.project_id(+) = ppv.project_id
14064 AND pxpv.structure_version_id(+) = ppv.parent_structure_version_id
14065 AND pxpv.proj_element_id(+) = ppv.proj_element_id
14066 AND pxpv.structure_type(+) = 'WORKPLAN'
14067 AND ppa.project_id = p_project_id
14068 AND ppv.proj_element_id = p_object_id
14069 AND ppv.element_version_id = p_object_version_id
14070 UNION ALL
14071 SELECT
14072 pa_progress_utils.Calc_plan(pxpv.labor_effort, pxpv.equipment_effort) planned_effort,
14073 pa_progress_utils.Sum_etc_values(
14074 ( Nvl(pxpv.labor_effort, 0) + Nvl(pxpv.equipment_effort, 0) ),
14075 ppr.estimated_remaining_effort,
14076 ppr.eqpmt_etc_effort,
14077 NULL,
14078 ppr.subprj_ppl_etc_effort,
14079 ppr.subprj_eqpmt_etc_effort,
14080 NULL,
14081 NULL,
14082 (
14083 Nvl(ppr.ppl_act_effort_to_date, 0) + Nvl(ppr.eqpmt_act_effort_to_date, 0) +
14084 Nvl(ppr.subprj_ppl_act_effort, 0) + Nvl(ppr.subprj_eqpmt_act_effort, 0)
14085 ),
14086 'WORKING') etc_effort,
14087 Nvl(ppr.completed_percentage, ppr.eff_rollup_percent_comp) physical_percent_complete
14088 FROM
14089 pa_projects_all ppa,
14090 pa_proj_elements ppe,
14091 pa_proj_element_versions ppv,
14092 pa_proj_elem_ver_structure ppvs,
14093 pa_progress_rollup ppr,
14094 pji_xbs_plans_v pxpv
14095 WHERE
14096 ppa.project_id = ppv.project_id
14097 AND ppv.object_type IN( 'PA_STRUCTURES', 'PA_TASKS' )
14098 AND ppv.parent_structure_version_id = ppvs.element_version_id
14099 AND ppv.project_id = ppvs.project_id
14100 AND ppvs.status_code <> 'STRUCTURE_PUBLISHED'
14101 AND ppv.project_id = ppe.project_id
14102 AND ppv.proj_element_id = ppe.proj_element_id
14103 AND ppv.object_type = ppe.object_type
14104 AND ppr.project_id(+) = ppv.project_id
14105 AND ppr.object_id(+) = ppv.proj_element_id
14106 AND ppr.structure_type(+) = 'WORKPLAN'
14107 AND ppr.current_flag(+) = 'Y'
14108 AND ppr.structure_version_id(+) = ppv.parent_structure_version_id
14109 AND ppr.object_version_id(+) = ppv.element_version_id
14110 AND pxpv.project_id(+) = ppv.project_id
14111 AND pxpv.structure_version_id(+) = ppv.parent_structure_version_id
14112 AND pxpv.proj_element_id(+) = ppv.proj_element_id
14113 AND pxpv.structure_type(+) = 'WORKPLAN'
14114 AND ppa.project_id = p_project_id
14115 AND ppv.proj_element_id = p_object_id
14116 AND ppv.element_version_id = p_object_version_id;
14117
14118 l_prev_planned_effort Number;
14119 l_prev_etc_effort Number;
14120 l_prev_percent_comp Number;
14121 l_update_task_det_flag varchar2(1);
14122
14123 -- Bug 6717386
14124 CURSOR cur_struc_ver_wp(c_project_id pa_projects_all.project_id%TYPE, c_structure_type pa_structure_types.structure_type%TYPE)
14125 IS
14126 SELECT c.element_version_id
14127 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
14128 ,pa_proj_elem_ver_structure d
14129 WHERE c.project_id = c_project_id
14130 AND a.structure_type_id = b.structure_type_id
14131 AND b.proj_element_id = c.proj_element_id
14132 AND a.structure_type = c_structure_type
14133 AND d.project_id = c.project_id
14134 AND d.element_version_id = c.element_version_id
14135 AND d.status_code = 'STRUCTURE_WORKING';
14136
14137 l_struct_ver_id pa_proj_element_versions.element_version_id%TYPE;
14138 l_status_code pa_proj_elements.status_code%type;
14139 -- Bug 6717386
14140
14141 -- Start of addition for bug 8301015
14142 l_project_id1 NUMBER;
14143 l_parent_task_id1 NUMBER;
14144 l_tstart_date1 DATE;
14145 l_tend_date1 DATE;
14146 l_tcnt NUMBER;
14147
14148 TYPE TASK_DATES_REC_TYPE IS RECORD (
14149 TASK_ID NUMBER := NULL,
14150 PROJECT_ID NUMBER := NULL,
14151 PARENT_TASK_ID NUMBER := NULL,
14152 OLD_START_DATE DATE := NULL,
14153 OLD_END_DATE DATE := NULL,
14154 NEW_START_DATE DATE := NULL,
14155 NEW_END_DATE DATE := NULL
14156 );
14157
14158 TYPE TASK_DATES_TBL_TYPE IS TABLE OF TASK_DATES_REC_TYPE
14159 INDEX BY BINARY_INTEGER;
14160
14161 l_task_dates TASK_DATES_TBL_TYPE;
14162 -- End of addition for bug 8301015
14163
14164 --Added for Bug 15958106
14165 CURSOR C_GET_TASK_DATES(c_Task_id Number) IS
14166 SELECT pt.project_id,
14167 pt.parent_task_id,
14168 pt.start_date,
14169 pt.completion_date
14170 FROM pa_tasks pt
14171 WHERE pt.task_id = c_Task_id
14172 AND NOT EXISTS --Added for Bug15958106
14173 ( select ppev.proj_element_id from pa_proj_element_versions ppev
14174 where ppev.proj_element_id=pt.task_id and ppev.TASK_UNPUB_VER_STATUS_CODE = 'TO_BE_DELETED' );
14175
14176 BEGIN
14177 l_tcnt := 0; -- added for bug 8301015
14178
14179 IF p_commit = FND_API.G_TRUE THEN
14180 SAVEPOINT process_task_struc;
14181 END IF;
14182
14183 IF p_init_msg_list = FND_API.G_TRUE THEN
14184 FND_MSG_PUB.initialize;
14185 END IF;
14186
14187 x_msg_count := 0;
14188 x_return_status := FND_API.G_RET_STS_SUCCESS;
14189 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
14190
14191 -- Moved down this code during UT.
14192 IF l_debug_mode = 'Y' THEN
14193 pa_debug.g_err_stage:= 'Entering PROCESS_TASK_STRUCTURE_BULK';
14194 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14195 l_debug_level2);
14196
14197 --For bug 4252182
14198 pa_debug.set_curr_function( p_function => 'PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK',
14199 p_debug_mode => l_debug_mode );
14200
14201 END IF;
14202
14203 -- Check for business rules violations
14204 IF l_debug_mode = 'Y' THEN
14205
14206 pa_debug.g_err_stage:= 'Input parameter List :';
14207 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14208 l_debug_level3);
14209
14210 pa_debug.g_err_stage:= 'p_project_id : ' || p_project_id;
14211 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14212 l_debug_level3);
14213
14214 pa_debug.g_err_stage:= 'p_pm_product_code : ' || p_pm_product_code;
14215 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14216 l_debug_level3);
14217
14218 pa_debug.g_err_stage:= 'p_structure_type : ' || p_structure_type;
14219 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14220 l_debug_level3);
14221
14222 pa_debug.g_err_stage:= 'p_wp_str_exists : ' || p_wp_str_exists;
14223 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14224 l_debug_level3);
14225
14226 pa_debug.g_err_stage:= 'p_is_wp_separate_from_fn :' || p_is_wp_separate_from_fn;
14227 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14228 l_debug_level3);
14229
14230 pa_debug.g_err_stage:= 'p_is_wp_versioning_enabled :' || p_is_wp_versioning_enabled;
14231 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14232 l_debug_level3);
14233
14234 -- IUP: Impact of Update_project
14235 pa_debug.g_err_stage:= 'p_structure_version_id :' || p_structure_version_id;
14236 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14237 l_debug_level3);
14238
14239 pa_debug.g_err_stage:= 'p_sprocess_mode :' || p_process_mode;
14240 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14241 l_debug_level3);
14242
14243 END IF;
14244
14245
14246 IF l_debug_mode = 'Y' THEN
14247
14248 pa_debug.g_err_stage:= 'Validating input parameters';
14249 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14250 l_debug_level3);
14251 END IF;
14252
14253 IF (p_project_id IS NULL) OR
14254 (p_pm_product_code IS NULL) OR
14255 (p_structure_type IS NULL) OR
14256 (p_wp_str_exists IS NULL) OR
14257 (p_is_wp_separate_from_fn IS NULL) OR
14258 (p_is_wp_versioning_enabled IS NULL)OR
14259 (p_process_mode IS NULL)
14260 THEN
14261
14262 PA_UTILS.ADD_MESSAGE
14263 (p_app_short_name => 'PA',
14264 p_msg_name => 'PA_INV_PARAM_PASSED'); -- Bug 2955589. Changed the message name to
14265 RAISE Invalid_Arg_Exc_WP; -- have a generic message.
14266
14267 END IF;
14268
14269 -- The following check is not required in the create_project context, but will be required
14270 -- in the update_project context in case we are calling the api for publishing. Having
14271 -- this check as a placeholder for future changes.
14272
14273 ---IUP:below code is commented out as calling api itself is taking care.
14274 /*
14275 open cur_pa_temp_import(p_project_id);
14276 fetch cur_pa_temp_import into l_dummy_char;
14277 IF cur_pa_temp_import%FOUND THEN
14278 IF l_debug_mode = 'Y' THEN
14279 pa_debug.g_err_stage:= 'Records found in PA_TEMP_IMPORT_TASKS - Returning';
14280 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14281 l_debug_level3);
14282 END IF;
14283
14284 close cur_pa_temp_import;
14285 pa_debug.reset_curr_function;
14286 RETURN;
14287 END IF;
14288 close cur_pa_temp_import;*/
14289
14290
14291 -- IUP: Added the below if condition As the processing under this needs to be done only for update_project
14292 -- Following local variables are populated within this if condition
14293 -- l_structure_version_id
14294 -- l_structure_id
14295 -- l_task_unpub_ver_status_code
14296 -- l_add_task_security
14297 -- l_update_task_security populated only for update task case.
14298 -- PA L Changes 3010538
14299 IF p_structure_type IS NOT NULL THEN
14300
14301 -- Begin fix for Bug # 4373055.
14302
14303 /*
14304
14305 l_process_code :=
14306 PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_CODE(p_project_id => p_project_id
14307 ,p_structure_type => p_structure_type );
14308 IF nvl(l_process_code,'-1') = 'WUP' THEN
14309
14310 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14311 THEN
14312 --Commented out as there is no message defined for amg corresponding to PA_PS_VD_UPDWBS_PRC_INPROC
14313 --pa_interface_utils_pub.map_new_amg_msg
14314 -- ( p_old_message_code => 'PA_PS_VD_UPDWBS_PRC_INPROC'
14315 -- ,p_msg_attribute => 'CHANGE'
14316 -- ,p_resize_flag => 'N'
14317 -- ,p_msg_context => 'GENERAL'
14318 -- ,p_attribute1 => ''
14319 -- ,p_attribute2 => ''
14320 -- ,p_attribute3 => ''
14321 -- ,p_attribute4 => ''
14322 -- ,p_attribute5 => '');
14323 l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => p_project_id -- Bug 3091798
14324 ,p_structure_type => p_structure_type );
14325
14326 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
14327 -- ,p_msg_name => 'PA_PS_VD_UPDWBS_PRC_INPROC');Bug 3091798.
14328 ,p_msg_name => 'PA_PS_UPDWBS_PRC_INPROC_AMG', -- Bug 3091798. Message includes the request id.
14329 p_token1 => 'REQUESTID',
14330 p_value1 => l_request_id);
14331
14332
14333 raise Invalid_Arg_Exc_WP;
14334 END IF ;
14335 ELSIF nvl(l_process_code,'-1') = 'WUE' THEN
14336
14337 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14338 THEN
14339 l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => p_project_id --Bug 3091798
14340 ,p_structure_type => p_structure_type );
14341
14342 --Commented out as there is no message defined for amg corresponding to PA_PS_VD_UPD_WBS_PRC_ERR
14343 --pa_interface_utils_pub.map_new_amg_msg
14344 -- ( p_old_message_code => 'PA_PS_VD_UPD_WBS_PRC_ERR'
14345 -- ,p_msg_attribute => 'CHANGE'
14346 -- ,p_resize_flag => 'N'
14347 -- ,p_msg_context => 'GENERAL'
14348 -- ,p_attribute1 => ''
14349 -- ,p_attribute2 => ''
14350 -- ,p_attribute3 => ''
14351 -- ,p_attribute4 => ''
14352 -- ,p_attribute5 => '');
14353 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
14354 -- ,p_msg_name => 'PA_PS_VD_UPD_WBS_PRC_ERR');Bug 3091798.
14355 ,p_msg_name => 'PA_PS_UPDWBS_PRC_ERR_AMG', -- Bug 3091798. Message includes the request id.
14356 p_token1 => 'REQUESTID',
14357 p_value1 => l_request_id);
14358
14359 raise Invalid_Arg_Exc_WP;
14360 END IF;
14361 END IF;
14362
14363 */
14364
14365 PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_MSG(
14366 p_project_id => p_project_id
14367 , p_structure_type => p_structure_type
14368 , p_structure_version_id => null
14369 , p_context => 'UPDATE_AMG'
14370 , x_message_name => l_message_name
14371 , x_message_type => l_message_type
14372 , x_structure_version_id => l_str_ver_id
14373 , x_conc_request_id => l_conc_request_id);
14374
14375
14376 if l_message_name is not null then
14377
14378 PA_UTILS.ADD_MESSAGE(
14379 p_app_short_name => 'PA'
14380 , p_msg_name => l_message_name
14381 , p_token1 => 'REQUESTID'
14382 , p_value1 => l_conc_request_id);
14383
14384 RAISE Invalid_Arg_Exc_WP;
14385 end if;
14386
14387 -- End fix for Bug # 4373055.
14388
14389 END IF ;
14390 -- PA L Changes 3010538
14391
14392 IF (p_structure_version_id IS NOT NULL)
14393 THEN
14394 --IUP:Check whether the structure version passed is in a valid status
14395 l_str_status_code := PA_PROJECT_STRUCTURE_UTILS.get_structrue_version_status(
14396 p_project_id => p_project_id
14397 ,p_structure_version_id => p_structure_version_id );
14398 IF l_str_status_code IS NULL
14399 THEN
14400 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
14401 ,p_msg_name => 'PA_PS_INV_STR_VER_ID' );
14402 raise Invalid_Arg_Exc_WP;
14403 ELSIF l_str_status_code in ( 'STRUCTURE_SUBMITTED', 'STRUCTURE_REJECTED', 'STRUCTURE_APPROVED' )
14404 THEN
14405 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
14406 ,p_msg_name => 'PA_PS_INV_STR_VER_ID2' );
14407 raise Invalid_Arg_Exc_WP;
14408 END IF;
14409
14410 IF l_debug_mode = 'Y' THEN
14411 pa_debug.g_err_stage := 'Structure is in a valid Status' ;
14412 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
14413 END IF;
14414
14415 l_structure_version_id := p_structure_version_id;
14416
14417 -- get the structure id from structure version id
14418 OPEN cur_elem_ver_to_task_id(l_structure_version_id);
14419 FETCH cur_elem_ver_to_task_id INTO l_structure_id;
14420 CLOSE cur_elem_ver_to_task_id;
14421
14422 IF l_debug_mode = 'Y' THEN
14423 pa_debug.g_err_stage:= 'Structure id : '||l_structure_id;
14424 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14425 l_debug_level3);
14426
14427 pa_debug.g_err_stage:= 'Structure version id : '|| l_structure_version_id;
14428 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14429 l_debug_level3);
14430
14431 END IF;
14432
14433 /*
14434 Bug Fix 5263429
14435 Unable to delete the task from MSP.
14436
14437 After succesful deletion of a task and the publishing of the structure, a new task is added to the current
14438 working version. And that the task was deleted and the MSP was returning a message saying 'Mark this task for deletion?'.
14439 Ideally this should be used for tasks which are present in the published versions as well. Only those tasks will be marked
14440 for deletion and during publishing those marked tasks will be deleted. All the other tasks which dont have any transactions
14441 and are not present in the published versions should be deleted right away and the MSP should not show any message.
14442
14443 Analysis:
14444 ---------
14445 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.
14446 This was happening due to the value 'PUBLISHED' was populated in the task_unpub_ver_status_code column.
14447 When ever a task is created in MSP and sent to oracle projects the pa_project_pub.load_project and
14448 pa_project_pub.execute_update_project are called.
14449
14450 The pa_project_pub.execute_update_project -> update_project API ...> PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK is called.
14451
14452 Inside this API the following code is used to derive the value for task_unpub_ver_status_code column.
14453 This is correct. But after this piece of code all the passed in tasks are processed in a loop. In the
14454 loop the same variable l_task_unpub_ver_status_code is used to get the other tasks status. Hence the
14455 earlier derived value for the new task is getting overridden with the other published task status.
14456 Had the tasks processing happned in such a way that (working) the newly added task is processed
14457 first then this is not an issue at all. Due to the published tasks presence the other value is overwritten
14458 and the same got stored for the new task.
14459
14460 Solution:
14461 ---------
14462
14463 Moved the task status derivation code into the loop right before the insert into the element versions table.
14464
14465
14466
14467 --IUP:get the status of newly created task under the passed structure version
14468 IF p_is_wp_separate_from_fn = 'N'
14469 THEN
14470 IF p_is_wp_versioning_enabled = 'Y'
14471 THEN
14472 l_task_unpub_ver_status_code := 'WORKING';
14473 ELSE
14474 l_task_unpub_ver_status_code := 'PUBLISHED';
14475 END IF;
14476 ELSE ---split
14477 IF p_structure_type = 'FINANCIAL'
14478 THEN
14479 l_task_unpub_ver_status_code := 'PUBLISHED';
14480 ELSE --workplan only
14481 IF p_is_wp_versioning_enabled = 'Y'
14482 THEN
14483 l_task_unpub_ver_status_code := 'WORKING';
14484 ELSE
14485 l_task_unpub_ver_status_code := 'PUBLISHED';
14486 END IF;
14487 END IF;
14488 END IF;
14489
14490 */
14491
14492 --IUP:getting the security function allowed into local variables.
14493 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
14494 (p_api_version_number => 1.0,
14495 p_responsibility_id => FND_GLOBAL.Resp_id,
14496 p_function_name => 'PA_PM_ADD_TASK',
14497 p_msg_count => x_msg_count,
14498 p_msg_data => x_msg_data,
14499 p_return_status => x_return_status,
14500 p_function_allowed => l_add_task_security);
14501
14502 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14503 IF l_debug_mode = 'Y' THEN
14504 pa_debug.g_err_stage := 'Error obtaining the value of add task function allowed' ;
14505 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
14506 END IF;
14507 RAISE Invalid_Arg_Exc_WP;
14508 END IF;
14509
14510 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
14511 (p_api_version_number => 1.0,
14512 p_responsibility_id => FND_GLOBAL.Resp_id,
14513 p_function_name => 'PA_PM_UPDATE_TASK',
14514 p_msg_count => x_msg_count,
14515 p_msg_data => x_msg_data,
14516 p_return_status => x_return_status,
14517 p_function_allowed => l_update_task_security);
14518
14519 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14520 IF l_debug_mode = 'Y' THEN
14521 pa_debug.g_err_stage := 'Error obtaining the value of update task function allowed' ;
14522 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
14523 END IF;
14524 RAISE Invalid_Arg_Exc_WP;
14525 END IF;
14526
14527 ELSE -- IF (p_structure_version_id IS NOT NULL) create project case
14528
14529 l_add_task_security := 'Y'; /* this check is already done in create proejct */
14530
14531 -- get structure id and structure version id and
14532 -- If auto publish upon creation is on and versioning is enabled then
14533 -- update the workplan structure as working bcoz it is created as pub by copy structure.
14534
14535 DECLARE
14536 -- We dont require this local var anymore. Bug 2955589.
14537 --l_auto_publish_flag VARCHAR2(1);
14538 --l_source_template_flag VARCHAR2(1);
14539 BEGIN
14540 /* Bug 2955589. As the update is taken care in Copy_Structures_bulk API, the following
14541 cursor need not be opened.
14542
14543 open cur_auto_pub_flag(p_project_id);
14544 fetch cur_auto_pub_flag into l_auto_publish_flag;
14545 close cur_auto_pub_flag;
14546
14547 IF l_debug_mode = 'Y' THEN
14548 pa_debug.g_err_stage:= 'Auto publish flag : '||l_auto_publish_flag;
14549 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14550 l_debug_level3);
14551 END IF;
14552 */
14553
14554 -- This condition included after UT.
14555 IF p_structure_type = 'FINANCIAL' THEN
14556 open get_structure(p_project_id, 'FINANCIAL');
14557 fetch get_structure into l_structure_id;
14558 close get_structure;
14559 ELSE -- structure type is WORKPLAN
14560 open get_structure(p_project_id, 'WORKPLAN');
14561 fetch get_structure into l_structure_id;
14562 close get_structure;
14563 END IF;
14564
14565 IF l_debug_mode = 'Y' THEN
14566 pa_debug.g_err_stage:= 'Structure id : '||l_structure_id;
14567 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14568 l_debug_level3);
14569 END IF;
14570
14571 /* Bug 2955589. The following code is taken care of in Copy_Structures_bulk API.
14572 --ADUT. This cursor will not be opened in the update project context.
14573 open cur_template_flag(p_source_project_id);
14574 fetch cur_template_flag into l_source_template_flag;
14575 close cur_template_flag;
14576
14577 --IF p_structure_type = 'WORKPLAN' and
14578 IF p_wp_str_exists = 'Y' and --ADUT
14579 nvl(l_auto_publish_flag,'N') = 'Y' and
14580 nvl(p_is_wp_versioning_enabled,'N') = 'Y' and
14581 l_source_template_flag = 'Y' --ADUT
14582 THEN
14583
14584 UPDATE pa_proj_elem_ver_structure
14585 set status_code = 'STRUCTURE_WORKING'
14586 where project_id = p_project_id
14587 and proj_element_id = l_structure_id;
14588
14589 IF l_debug_mode = 'Y' THEN
14590 pa_debug.g_err_stage:= 'No of updated records :' || sql%rowcount || ' for structure : ' || l_structure_id;
14591 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14592 l_debug_level3);
14593 END IF;
14594
14595 END IF;
14596
14597 */
14598 -- Obtain the structure version id to proceed with the processing.
14599 PA_PROJ_ELEMENTS_UTILS.GET_STRUCTURE_INFO(
14600 p_project_id => p_project_id
14601 ,p_structure_type => p_structure_type
14602 ,p_structure_id => l_structure_id
14603 ,p_is_wp_separate_from_fn => p_is_wp_separate_from_fn
14604 ,p_is_wp_versioning_enabled => p_is_wp_versioning_enabled
14605 ,x_structure_version_id => l_structure_version_id
14606 ,x_task_unpub_ver_status_code => l_task_unpub_ver_status_code
14607 ,x_return_status => x_return_status
14608 ,x_msg_count => x_msg_count
14609 ,x_msg_data => x_msg_data
14610 );
14611
14612 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14613 IF l_debug_mode = 'Y' THEN
14614 pa_debug.g_err_stage := 'Error obtaining the structure version id' ;
14615 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
14616 END IF;
14617 RAISE Invalid_Arg_Exc_WP;
14618 END IF;
14619
14620 IF l_debug_mode = 'Y' THEN
14621 pa_debug.g_err_stage:= 'Structure version id : '||l_structure_version_id;
14622 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14623 l_debug_level3);
14624 pa_debug.g_err_stage:= 'Task unpublished version status code : '||l_task_unpub_ver_status_code;
14625 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14626 l_debug_level3);
14627 END IF;
14628 END;
14629
14630 END IF; -- End for if p_structure_version_id is null
14631
14632 -- Bug 3075609. Determine if we want to maintain the task weightages during the program
14633 -- flow or they will be recalculated at the end of the flow.
14634 l_task_weight_basis_code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id => p_project_id) ;
14635
14636 -- In the following conditions we will be recalculating the weightages completely. So we need to
14637 -- take care of the rest of the scenarios. Where we need not take care we will just set the task
14638 -- weightage to 0.
14639 IF NOT (
14640 ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' AND
14641 nvl(l_task_weight_basis_code,'-1') <> 'MANUAL'
14642 ) OR
14643 ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
14644 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
14645 PA_PROJECT_PUB.G_Published_version_exists = 'N' AND
14646 nvl(l_task_weight_basis_code,'-1') <> 'MANUAL'
14647 ) OR
14648 (
14649 nvl(l_task_weight_basis_code,'-1') = 'MANUAL' AND
14650 p_structure_version_id is NULL
14651 )
14652 )
14653 THEN
14654 l_maintain_weightages := 'Y';
14655 ELSE
14656 l_maintain_weightages := 'N';
14657 END IF;
14658
14659 -- Initialize l_top_task_cnt to 0. This denotes the number of top tasks processed
14660 -- at any point in this API. This is used to calculate the wbs number of the top task.
14661 -- Intialize l_disp_seq to 0. This is used to determines the display sequence of the currenly
14662 -- processed task.
14663
14664 l_top_task_count := 0;
14665 l_disp_seq := 0;
14666
14667 ----Added for bug 3057575 :
14668 l_hierarchy_count := 1;
14669
14670 -- Get the default task type id. In workplan context, when we create a schedule
14671 -- version we check if the task type allows for non null work quantity. If the task type
14672 -- is passed as null in the input task record, we use the default task type id derived
14673 -- below.
14674 l_default_task_type_id := PA_PROJ_ELEMENTS_UTILS.GET_DEFAULT_TASK_TYPE_ID;
14675
14676 -- Get the segment1 for the project. Used to show context for error messages.
14677 open l_amg_project_csr(p_project_id);
14678 fetch l_amg_project_csr into l_amg_segment1;
14679 close l_amg_project_csr;
14680
14681 IF l_debug_mode = 'Y' THEN
14682 pa_debug.g_err_stage:= 'Entering Loop';
14683 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14684 l_debug_level3);
14685 END IF;
14686 -- Do the processing for all the tasks in the plsql table.
14687
14688 --Added by rtarway for BUG 4320731
14689 task_ver_id_passed_tbl.delete;
14690
14691 IF nvl(p_tasks_in_tbl.last,0) > 0 THEN
14692 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(p_project_id); -- Added for bug#3451073
14693 FOR i in p_tasks_in_tbl.first..p_tasks_in_tbl.last LOOP
14694
14695 -- Reset the locals at the beginning of the loop.
14696 l_parent_task_id := null;
14697 l_task_in_rec := p_tasks_in_tbl(i);
14698
14699 --Bug 6153503
14700 l_attribute1 := null;
14701 l_attribute2 := null;
14702 l_attribute3 := null;
14703 l_attribute4 := null;
14704 l_attribute5 := null;
14705 l_attribute6 := null;
14706 l_attribute7 := null;
14707 l_attribute8 := null;
14708 l_attribute9 := null;
14709 l_attribute10 := null;
14710 l_attribute11 := null;
14711 l_attribute12 := null;
14712 l_attribute13 := null;
14713 l_attribute14 := null;
14714 l_attribute15 := null;
14715
14716 -- Bug 2982072. Derive the task id if task reference only is passed.
14717 -- Currently the api differenciates the task create / update contexts only based
14718 -- on the task_id in the input plsql table which is not correct. The user doesnot pass
14719 -- the task ids even for existing tasks but just passes the task reference. We have to
14720 -- derive the task id from the task reference.
14721 -- Irrespective of the structure type we always query for the proj elements table for
14722 -- the task id given the task reference.
14723 DECLARE
14724 /* Bug 3588013 - Added the exists clause for this bug to get proj_element_id for the correct structure
14725 Task Reference should be unique with in structure.
14726 */
14727 CURSOR cur_wp_task_csr (c_project_id pa_projects_all.project_id%TYPE,
14728 c_pm_source_reference pa_proj_elements.pm_source_reference%TYPE) IS
14729 SELECT proj_element_id
14730 FROM pa_proj_elements pelem
14731 WHERE project_id = c_project_id
14732 AND pm_source_reference = c_pm_source_reference
14733 AND exists(select 1
14734 from pa_proj_structure_types pstype, pa_structure_types types
14735 where pstype.proj_element_id = pelem.parent_structure_id
14736 and pstype.structure_type_id = types.structure_type_id
14737 and types.structure_type = p_structure_type);
14738 BEGIN
14739 IF (NVL(PA_PROJECT_PUB.G_MASS_ADD_TASKS,'N') ='N' ) THEN -- Added for Huawei 14556729 for add flow
14740 IF (l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
14741 l_task_in_rec.pa_task_id IS NULL )
14742 THEN
14743 IF l_task_in_rec.pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
14744 l_task_in_rec.pm_task_reference IS NULL
14745 THEN
14746 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14747 THEN
14748 pa_interface_utils_pub.map_new_amg_msg
14749 ( p_old_message_code => 'PA_TASK_REF_AND_ID_MISSING'
14750 ,p_msg_attribute => 'CHANGE'
14751 ,p_resize_flag => 'N'
14752 ,p_msg_context => 'PROJ'
14753 ,p_attribute1 => l_amg_segment1
14754 ,p_attribute2 => ''
14755 ,p_attribute3 => ''
14756 ,p_attribute4 => ''
14757 ,p_attribute5 => '');
14758 END IF;
14759 px_tasks_out_tbl(i).return_status := FND_API.G_RET_STS_ERROR ;
14760 RAISE Invalid_Arg_Exc_WP;
14761 ELSE
14762 -- We need the differenciator only in the update project context.
14763 -- This is not done in create context to avoid cursor opening for each task.
14764 IF p_structure_version_id is not null THEN
14765 OPEN cur_wp_task_csr(p_project_id,l_task_in_rec.pm_task_reference);
14766 FETCH cur_wp_task_csr INTO l_task_in_rec.pa_task_id;
14767 CLOSE cur_wp_task_csr;
14768 END IF;
14769 END IF;
14770 END IF;
14771 END IF; -- Added for Huawei 14556729
14772 END;
14773 -- End fix for Bug 2982072.
14774
14775 -- Included the following initializations after UT.
14776 -- In the absence of these we will get unique constraint violation.
14777 l_task_version_id := null;
14778 l_relationship_id := null;
14779 l_proj_elem_ver_rvn := null;
14780 l_proj_elem_ver_rowid := null;
14781 l_obj_rel_rvn := null;
14782
14783 -- Initialize the return status for the task record to success.
14784 px_tasks_out_tbl(i).return_status := FND_API.G_RET_STS_SUCCESS;
14785
14786
14787 -- Validation block
14788 -- validate security, task_reference and task names in appropriate contexts.
14789 IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
14790 l_task_in_rec.pa_task_id IS NULL -- new tasks to be crated
14791 THEN
14792 -- Added to check the security as it is not done when called from update_project
14793 IF l_add_task_security = 'N'
14794 THEN
14795 pa_interface_utils_pub.map_new_amg_msg(
14796 p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
14797 ,p_msg_attribute => 'CHANGE'
14798 ,p_resize_flag => 'Y'
14799 ,p_msg_context => 'GENERAL'
14800 ,p_attribute1 => ''
14801 ,p_attribute2 => ''
14802 ,p_attribute3 => ''
14803 ,p_attribute4 => ''
14804 ,p_attribute5 => '');
14805 RAISE Invalid_Arg_Exc_WP;
14806 END IF;
14807 --rtarway, for DHI ER, BUG 4413568
14808 IF (PA_PROJECT_PUB.G_TASK_STR_UPDATE_MODE = 'PA_UPD_TASK_ATTR') THEN --bug 4534919
14809 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
14810 p_msg_name => 'PA_WBS_CANT_CHANGE');
14811 RAISE Invalid_Arg_Exc_WP;
14812 END IF;
14813 -- task reference and task names need to be validated only for workplan cases. For financial cases
14814 -- these validations are done in add_task_round_one/two.
14815 IF p_structure_type = 'WORKPLAN' THEN
14816
14817 -- Task reference should be non null in AMG flow. For financial tasks this
14818 -- is checked in add_task_round_one API.
14819 IF l_task_in_rec.pm_task_reference IS NULL
14820 OR l_task_in_rec.pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14821 THEN
14822 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14823 THEN
14824 pa_interface_utils_pub.map_new_amg_msg
14825 ( p_old_message_code => 'PA_TASK_REF_IS_NULL'
14826 ,p_msg_attribute => 'CHANGE'
14827 ,p_resize_flag => 'N'
14828 ,p_msg_context => 'PROJ'
14829 ,p_attribute1 => l_amg_segment1
14830 ,p_attribute2 => ''
14831 ,p_attribute3 => ''
14832 ,p_attribute4 => ''
14833 ,p_attribute5 => '');
14834 END IF;
14835 px_tasks_out_tbl(i).return_status := FND_API.G_RET_STS_ERROR;
14836 RAISE Invalid_Arg_Exc_WP;
14837 END IF;
14838
14839 --ADUT. The task name cannot be null. For financial tasks this is
14840 --checked in add_task_round_one API.
14841 IF l_task_in_rec.task_name IS NULL
14842 OR l_task_in_rec.task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14843 THEN
14844
14845 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14846 THEN
14847 pa_interface_utils_pub.map_new_amg_msg
14848 ( p_old_message_code => 'PA_TASK_NAME_IS_NULL'
14849 ,p_msg_attribute => 'CHANGE'
14850 ,p_resize_flag => 'N'
14851 ,p_msg_context => 'TASK'
14852 ,p_attribute1 => l_amg_segment1
14853 ,p_attribute2 => l_task_in_rec.pm_task_reference
14854 ,p_attribute3 => ''
14855 ,p_attribute4 => ''
14856 ,p_attribute5 => '');
14857 END IF;
14858
14859 px_tasks_out_tbl(i).return_status := FND_API.G_RET_STS_ERROR;
14860 RAISE Invalid_Arg_Exc_WP;
14861 END IF;
14862 END IF; -- IF p_structure_type = 'WORKPLAN' THEN
14863
14864 -- for update case only security check is required.
14865 ELSE -- IF l_task_in_rec.pa_task_id IS NULL
14866
14867 IF l_update_task_security = 'N'
14868 THEN
14869 pa_interface_utils_pub.map_new_amg_msg(
14870 p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
14871 ,p_msg_attribute => 'CHANGE'
14872 ,p_resize_flag => 'Y'
14873 ,p_msg_context => 'GENERAL'
14874 ,p_attribute1 => ''
14875 ,p_attribute2 => ''
14876 ,p_attribute3 => ''
14877 ,p_attribute4 => ''
14878 ,p_attribute5 => '');
14879 RAISE Invalid_Arg_Exc_WP;
14880 END IF;
14881
14882 END IF; -- IF l_task_in_rec.pa_task_id IS NULL
14883
14884 IF l_debug_mode = 'Y' THEN
14885 pa_debug.g_err_stage:= 'Done with the validations';
14886 pa_debug.write(l_module_name,pa_debug.g_err_stage,
14887 l_debug_level3);
14888 END IF;
14889
14890 -- This block does following:
14891 -- 1. Populate l_cur_pa_tasks_rec which has task_number, long_task_name, description, parent_task_id
14892 -- carrying_out_organization_id, pm_task_reference, address_id, task_manager_person_id
14893 -- 2. l_parent_task_id
14894 -- 3. l_task_id -- the task that is being processed.
14895 -- l_proj_elem_rvn of record of pa_proj_elements to be updated
14896 -- before calling api PA_TASK_PUB1.update_task
14897
14898 IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
14899 l_task_in_rec.pa_task_id IS NULL -- new tasks to be crated
14900 THEN
14901
14902 -- If the structure type is workplan we need to derive the values for certain fields. For financial
14903 -- context they have already been done and is available in the database - So we'll just query it up.
14904 IF p_structure_type = 'WORKPLAN' THEN
14905
14906 -- Derive the task number for the current task
14907 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
14908 THEN
14909 l_cur_pa_tasks_rec.task_number := l_task_in_rec.pm_task_reference;
14910 -- ELSE Bug 6193314 need to comment out
14911 /* bug#5243018 : Reverting the fix in Bug 4120380
14912 l_cur_pa_tasks_rec.task_number := '-'||l_task_in_rec.pa_task_number; -- Bug 4120380 aditi l_task_in_rec.pa_task_number; */
14913 -- l_cur_pa_tasks_rec.task_number := l_task_in_rec.pa_task_number; -- Bug 6193314 need to comment out
14914 /* any new task being created will also be prefixed with '-'. This is for the case below:
14915 1.0
14916 1.1
14917 2.0 .
14918 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.*/
14919 END IF;
14920
14921 -- Derive the parent task id
14922 IF (l_task_in_rec.pa_parent_task_id IS NOT NULL
14923 AND l_task_in_rec.pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14924 THEN
14925 l_cur_pa_tasks_rec.parent_task_id := l_task_in_rec.pa_parent_task_id;
14926 ELSIF (l_task_in_rec.pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14927 AND l_task_in_rec.pm_parent_task_reference IS NOT NULL)
14928 THEN
14929 --convert pm_parent_task_reference to parent_task_id.
14930 --All the parent tasks are created first then child tasks are created. See TRM for AMG load_task api.
14931
14932 -- 3721124 changed function call from PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref
14933 -- to PA_PROJECT_PVT.Convert_pm_taskref_to_id_all to retrieve task id for task reference
14934 -- because PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref may return financial task id
14935 -- in case of SHARED structure
14936 -- new api call takes structure type as parameter, so it will return task id for the passed structure type only
14937
14938 -- PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref(
14939 -- p_pm_parent_task_reference => l_task_in_rec.pm_parent_task_reference
14940 -- ,p_project_id => p_project_id
14941 -- ,x_parent_task_id => l_cur_pa_tasks_rec.parent_task_id
14942 -- ,x_return_status => x_return_status
14943 -- );
14944
14945 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
14946 p_pa_project_id => p_project_id
14947 , p_structure_type => 'WORKPLAN'
14948 -- 3721124 p_pa_task_id will be null in this context
14949 -- , p_pa_task_id => l_cur_pa_tasks_rec.parent_task_id
14950 , p_pm_task_reference => l_task_in_rec.pm_parent_task_reference
14951 , p_out_task_id => l_cur_pa_tasks_rec.parent_task_id
14952 , p_return_status => x_return_status );
14953
14954 px_tasks_out_tbl(i).return_status := x_return_status;
14955 IF x_return_status <> FND_API.G_RET_STS_SUCCESS
14956 THEN
14957 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14958 THEN
14959 pa_interface_utils_pub.map_new_amg_msg
14960 ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
14961 ,p_msg_attribute => 'CHANGE'
14962 ,p_resize_flag => 'N'
14963 ,p_msg_context => 'TASK'
14964 ,p_attribute1 => l_amg_segment1
14965 ,p_attribute2 => l_cur_pa_tasks_rec.task_number
14966 ,p_attribute3 => ''
14967 ,p_attribute4 => ''
14968 ,p_attribute5 => '');
14969 END IF;
14970 RAISE Invalid_Arg_Exc_WP;
14971 END IF;
14972 ELSE -- no parent task information provided for the current task.
14973 -- Current task is a top task. parent id is null.
14974 l_cur_pa_tasks_rec.parent_task_id := null;
14975 END IF;
14976
14977 -- Included the condition during UT to avoid precision errors.
14978 IF l_task_in_rec.carrying_out_organization_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14979 l_cur_pa_tasks_rec.carrying_out_organization_id := NULL;
14980 ELSE
14981 l_cur_pa_tasks_rec.carrying_out_organization_id := l_task_in_rec.carrying_out_organization_id;
14982 END IF;
14983
14984 -- Included the condition during UT to avoid precision errors.
14985 IF l_task_in_rec.address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14986 l_cur_pa_tasks_rec.address_id := NULL;
14987 ELSE
14988 l_cur_pa_tasks_rec.address_id := l_task_in_rec.address_id;
14989 END IF;
14990 -- Included the condition during UT to avoid precision errors.
14991 IF l_task_in_rec.task_manager_person_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14992 l_cur_pa_tasks_rec.task_manager_person_id := NULL;
14993 ELSE
14994 l_cur_pa_tasks_rec.task_manager_person_id := l_task_in_rec.task_manager_person_id;
14995 END IF;
14996 l_task_id := NULL; -- null for workplan create task case.
14997 l_cur_pa_tasks_rec.pm_task_reference := l_task_in_rec.pm_task_reference;
14998 /*Commented for bug 2982057 l_cur_pa_tasks_rec.long_task_name := l_task_in_rec.long_task_name;*/
14999 /* Code addition for bug 2982057 starts */
15000
15001 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
15002 l_cur_pa_tasks_rec.long_task_name := l_task_in_rec.task_name;
15003 else
15004 l_cur_pa_tasks_rec.long_task_name := l_task_in_rec.long_task_name;
15005 end if;
15006
15007 /* Code addition for bug 2982057 ends */
15008
15009 l_cur_pa_tasks_rec.description := l_task_in_rec.task_description;
15010
15011 ELSE -- structure type is financial
15012 IF l_debug_mode = 'Y' THEN
15013 pa_debug.g_err_stage:= 'Task Id in out table: '||px_tasks_out_tbl(i).pa_task_id;
15014 pa_debug.write(l_module_name,pa_debug.g_err_stage,
15015 l_debug_level3);
15016 END IF;
15017
15018 l_task_id := px_tasks_out_tbl(i).pa_task_id;
15019 open cur_pa_tasks(p_project_id,l_task_id);
15020 fetch cur_pa_tasks into l_cur_pa_tasks_rec;
15021 close cur_pa_tasks;
15022
15023 IF l_debug_mode = 'Y' THEN
15024 pa_debug.g_err_stage:= 'Task Id in local var '|| l_task_id;
15025 pa_debug.write(l_module_name,pa_debug.g_err_stage,
15026 l_debug_level3);
15027 END IF;
15028 /** Code changes for bug 4120380. For new tasks similar case mentioned above for workplan.**/
15029 /* bug#5243018 : Reverting the fix in Bug 4120380
15030 IF l_task_in_rec.pa_task_number IS NOT NULL AND
15031 l_task_in_rec.pa_task_number <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15032 THEN
15033 l_cur_pa_tasks_rec.task_number := '-'||l_task_in_rec.pa_task_number;
15034 END IF; */
15035 /** Code end for bug 4120380 by aditi **/
15036 END IF;
15037
15038 l_parent_task_id := l_cur_pa_tasks_rec.parent_task_id;
15039
15040 IF l_debug_mode = 'Y' THEN
15041 pa_debug.g_err_stage:= 'Parent Task Id : '||l_parent_task_id;
15042 pa_debug.write(l_module_name,pa_debug.g_err_stage,
15043 l_debug_level3);
15044 pa_debug.g_err_stage:= 'Task Number : '||l_cur_pa_tasks_rec.task_number;
15045 pa_debug.write(l_module_name,pa_debug.g_err_stage,
15046 l_debug_level3);
15047 END IF;
15048
15049 l_WBS_changed_flag := 'Y'; --bug 3010538
15050
15051 ELSE -- IF l_task_in_rec.pa_task_id IS NULL
15052
15053 -- If the structure type is workplan we need to derive the values for parent task id . For financial
15054 -- context they have already been done and is available in the database - So we'll just query it up.
15055 IF p_structure_type = 'WORKPLAN' THEN
15056
15057 -- Derive the parent task id
15058 IF (l_task_in_rec.pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15059 AND l_task_in_rec.pa_parent_task_id IS NOT NULL)
15060 THEN
15061 l_cur_pa_tasks_rec.parent_task_id := l_task_in_rec.pa_parent_task_id;
15062
15063 ELSIF (l_task_in_rec.pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15064 AND l_task_in_rec.pm_parent_task_reference IS NOT NULL)
15065 THEN
15066 --convert pm_parent_task_reference to parent_task_id.
15067 --All the parent tasks are created first then child tasks are created. See TRM for AMG load_task api.
15068
15069 -- 3721124 changed function call from PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref
15070 -- to PA_PROJECT_PVT.Convert_pm_taskref_to_id_all to retrieve task id for task reference
15071 -- because PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref may return financial task id
15072 -- in case of SHARED structure
15073 -- new api call takes structure type as parameter, so it will return task id for the passed structure type only
15074
15075 --PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref(
15076 -- p_pm_parent_task_reference => l_task_in_rec.pm_parent_task_reference
15077 -- ,p_project_id => p_project_id
15078 -- ,x_parent_task_id => l_cur_pa_tasks_rec.parent_task_id
15079 -- ,x_return_status => x_return_status
15080 -- );
15081
15082
15083 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
15084 p_pa_project_id => p_project_id
15085 , p_structure_type => 'WORKPLAN'
15086 -- 3721124 p_pa_task_id will be null in this context
15087 -- , p_pa_task_id => l_cur_pa_tasks_rec.parent_task_id
15088 , p_pm_task_reference => l_task_in_rec.pm_parent_task_reference
15089 , p_out_task_id => l_cur_pa_tasks_rec.parent_task_id
15090 , p_return_status => x_return_status );
15091
15092 px_tasks_out_tbl(i).return_status := x_return_status;
15093 IF x_return_status <> FND_API.G_RET_STS_SUCCESS
15094 THEN
15095 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
15096 THEN
15097 pa_interface_utils_pub.map_new_amg_msg
15098 ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
15099 ,p_msg_attribute => 'CHANGE'
15100 ,p_resize_flag => 'N'
15101 ,p_msg_context => 'TASK'
15102 ,p_attribute1 => l_amg_segment1
15103 ,p_attribute2 => l_cur_pa_tasks_rec.task_number
15104 ,p_attribute3 => ''
15105 ,p_attribute4 => ''
15106 ,p_attribute5 => '');
15107 END IF;
15108 Raise Invalid_Arg_Exc_WP;
15109 END IF;
15110 ELSIF (l_task_in_rec.pm_parent_task_reference IS NULL)
15111 THEN --Also the values in l_task_in_rec.parent_task_id is null or miss_num so move it as top task
15112 l_cur_pa_tasks_rec.parent_task_id := null;
15113
15114 ELSE -- when l_task_in_rec.pm_parent_task_reference is miss_char
15115 -- no parent task information provided for the current task.
15116 -- get parent information from database
15117 DECLARE
15118
15119 l_task_ver_id_tmp pa_proj_element_versions.element_version_id%TYPE;
15120 l_dummy_number NUMBER;
15121 l_db_parent_task_ver_id_tmp pa_proj_element_versions.element_version_id%TYPE;
15122 l_relationship_id_tmp pa_object_relationships.object_relationship_id%TYPE;
15123
15124 BEGIN
15125
15126 OPEN cur_pa_task_ver( l_structure_version_id, l_task_in_rec.pa_task_id );
15127 FETCH cur_pa_task_ver INTO l_task_ver_id_tmp, l_dummy_number;
15128 CLOSE cur_pa_task_ver;
15129
15130 --Get the database parent task version id
15131 OPEN cur_parent_object_rel( l_task_ver_id_tmp );
15132 FETCH cur_parent_object_rel INTO l_db_parent_task_ver_id_tmp,l_relationship_id_tmp,l_dummy_number,
15133 l_dummy_number; -- Bug 3075609. Reflected the change in cursor.
15134 CLOSE cur_parent_object_rel;
15135
15136 --Get the parent task id from parent task version id
15137 OPEN cur_elem_ver_to_task_id(l_db_parent_task_ver_id_tmp ) ;
15138 FETCH cur_elem_ver_to_task_id INTO l_cur_pa_tasks_rec.parent_task_id;
15139 CLOSE cur_elem_ver_to_task_id;
15140 END;
15141
15142 END IF;
15143 DECLARE
15144 -- Bug 2982072. The following cursor is used to obtain the task name
15145 -- and number for a given task element from the database. These will be used
15146 -- if the user has not passed any value for these parameters.
15147 CURSOR cur_proj_elem_info(c_task_id pa_proj_elements.proj_element_id%TYPE)
15148 IS
15149 SELECT element_number, name
15150 FROM pa_proj_elements
15151 WHERE proj_element_id = c_task_id;
15152
15153 l_proj_elem_info cur_proj_elem_info%ROWTYPE;
15154 BEGIN
15155 -- Bug 2982072. Open the cursor only if any of task number or name needs to
15156 -- be fetched for the task.
15157 IF (l_task_in_rec.pa_task_number is null OR
15158 l_task_in_rec.pa_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
15159 (l_task_in_rec.long_task_name is null OR
15160 l_task_in_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15161 THEN
15162 OPEN cur_proj_elem_info(l_task_in_rec.pa_task_id);
15163 FETCH cur_proj_elem_info into l_proj_elem_info;
15164 CLOSE cur_proj_elem_info;
15165
15166 END IF;
15167
15168 -- Bug 2982072. If task number and task name are passed as null then
15169 -- obtain the values from the database and use them in update_task api.
15170 IF l_task_in_rec.pa_task_number is null OR
15171 l_task_in_rec.pa_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15172 THEN
15173 -- l_task_in_rec.pa_task_number := SUBSTRB(l_proj_elem_info.element_number,1,25); -- Substrb added for Bug 5152448
15174 l_task_in_rec.pa_task_number := l_proj_elem_info.element_number; -- Substrb removed for Bug 6193314
15175 /** added for Bug 4120380 **/
15176 /* bug#5243018 : Reverting the fix in Bug 4120380
15177 ELSE
15178 OPEN cur_proj_elem_info(l_task_in_rec.pa_task_id);
15179 FETCH cur_proj_elem_info into l_proj_elem_info;
15180 CLOSE cur_proj_elem_info;
15181 --dbms_output.put_line(('Value of l_proj_elem_info.element_number'||l_proj_elem_info.element_number);
15182 If l_task_in_rec.pa_task_number <> SUBSTRB(l_proj_elem_info.element_number,1,25) THEN -- Substrb added for Bug 5152448
15183 l_task_in_rec.pa_task_number := '-'||l_task_in_rec.pa_task_number;
15184 End if; */
15185 /** end of changes for Bug 4120380 **/
15186 END IF;
15187
15188 IF l_task_in_rec.long_task_name is null OR
15189 l_task_in_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15190 THEN
15191 /* Start of changes for bug 4503580 */
15192 -- l_task_in_rec.long_task_name := NVL(l_task_in_rec.task_name, l_proj_elem_info.name); --bug 3969651
15193 IF l_task_in_rec.task_name is null OR
15194 l_task_in_rec.task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15195 THEN
15196 l_task_in_rec.long_task_name := l_proj_elem_info.name;
15197 ELSE
15198 l_task_in_rec.long_task_name := l_task_in_rec.task_name;
15199 END IF;
15200 /* End of changes for bug 4503580 */
15201 /* Redundant but added for clarity -Added the else condition for bug 2982057*/
15202 ELSE
15203 l_task_in_rec.long_task_name := l_task_in_rec.long_task_name;
15204 END IF;
15205 END;
15206
15207 ELSE--financial
15208 l_cur_pa_tasks_rec := null; -- added for bug 15899830
15209 open cur_pa_tasks(p_project_id,l_task_in_rec.pa_task_id);
15210 fetch cur_pa_tasks into l_cur_pa_tasks_rec;
15211 close cur_pa_tasks;
15212
15213 -- Bug 2982072. If task number and task name are passed as null then
15214 -- obtain the values from the database and use them in update_task api.
15215 IF l_task_in_rec.pa_task_number is null OR
15216 l_task_in_rec.pa_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15217 THEN
15218 l_task_in_rec.pa_task_number := l_cur_pa_tasks_rec.task_number;
15219 /* Code added for bug 4120380 **/
15220 /* bug#5243018 : Reverting the fix in Bug 4120380
15221 ELSE
15222 OPEN cur_proj_elements_info(l_task_in_rec.pa_task_id);
15223 FETCH cur_proj_elements_info into l_proj_elements_info;
15224 CLOSE cur_proj_elements_info;
15225 If l_task_in_rec.pa_task_number <> SUBSTRB(l_proj_elements_info.element_number,1,25) THEN -- Substrb added for Bug 5152448
15226 l_task_in_rec.pa_task_number := '-'||l_task_in_rec.pa_task_number;
15227 End if; */
15228 /* Code end for bug 4120380 **/
15229 END IF;
15230
15231 IF l_task_in_rec.long_task_name is null OR
15232 l_task_in_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15233 THEN
15234 l_task_in_rec.long_task_name := l_cur_pa_tasks_rec.long_task_name;
15235 /* Redundant but added for clarity -Added the else condition for bug 2982057*/
15236 ELSE
15237 l_task_in_rec.long_task_name := l_task_in_rec.long_task_name;
15238 END IF;
15239
15240 END IF;
15241 l_parent_task_id := l_cur_pa_tasks_rec.parent_task_id;
15242 l_task_id := l_task_in_rec.pa_task_id;
15243
15244 l_Share_Code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id);
15245 IF ((l_Share_Code = 'SHARE_PARTIAL') and (l_parent_task_id is null OR
15246 l_parent_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )) --bug#8647597
15247 THEN
15248 l_parent_task_id := l_task_in_rec.pa_parent_task_id;
15249 END IF;
15250
15251 END IF; -- before calling create or update TASK
15252
15253 /*Bug 11689028 start*/
15254 handle_task_number_change(p_project_id, l_task_in_rec.pa_task_id, l_task_in_rec.pa_task_number, p_tasks_in_tbl , l_structure_id, l_debug_mode, x_return_status) ;
15255 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15256 IF l_debug_mode = 'Y' THEN
15257 pa_debug.g_err_stage := 'Error calling handle_task_number_change : ' || l_task_in_rec.pa_task_id ;
15258 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
15259 END IF;
15260 Raise Invalid_Arg_Exc_WP;
15261 END IF;
15262 /*Bug 11689028 end */
15263
15264 -- In the following block the create task or update_task APIs are called.
15265 -- After call to these APIs populate following
15266 -- px_tasks_out_tbl(i).pa_task_id
15267 -- px_tasks_out_tbl(i).pm_task_reference
15268 -- for workplan create task case l_task_id is output from create task API
15269 IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
15270 l_task_in_rec.pa_task_id IS NULL -- Create Task Context
15271 THEN
15272 IF p_create_task_version_only = 'N' THEN
15273
15274 IF l_debug_mode = 'Y' THEN
15275 pa_debug.g_err_stage := 'Calling API PA_TASK_PUB1.create_task';
15276 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
15277 END IF;
15278 PA_TASK_PUB1.create_task(
15279 p_api_version => p_api_version_number
15280 ,p_commit => p_commit
15281 ,p_validate_only => FND_API.G_FALSE
15282 ,p_calling_module => p_calling_module
15283 ,p_debug_mode => l_debug_mode
15284 ,p_init_msg_list => FND_API.G_FALSE
15285 ,p_object_type => 'PA_TASKS'
15286 ,p_project_id => p_project_id
15287 ,p_structure_id => l_structure_id
15288 ,p_task_number => l_task_in_rec.pa_task_number -- l_cur_pa_tasks_rec.task_number bug 6193314
15289 ,p_task_name => l_task_in_rec.task_name -- l_cur_pa_tasks_rec.long_task_name bug 11676550
15290 ,p_task_description => l_cur_pa_tasks_rec.description
15291 ,p_location_id => l_cur_pa_tasks_rec.address_id
15292 ,p_task_manager_id => l_cur_pa_tasks_rec.task_manager_person_id
15293 ,p_carrying_out_org_id => l_cur_pa_tasks_rec.carrying_out_organization_id
15294 ,p_priority_code => l_task_in_rec.priority_code
15295 ,p_TYPE_ID => l_task_in_rec.task_type
15296 ,p_status_code => l_task_in_rec.status_code
15297 ,p_inc_proj_progress_flag=> l_task_in_rec.inc_proj_progress_flag
15298 ,p_pm_product_code => p_pm_product_code
15299 ,p_pm_task_reference => l_cur_pa_tasks_rec.pm_task_reference
15300 ,p_closed_date => l_task_in_rec.closed_date
15301 ,p_link_task_flag => l_task_in_rec.link_task_flag
15302 ,P_UOM_CODE => l_task_in_rec.wq_uom_code
15303 ,p_work_item_code => l_task_in_rec.wq_item_code
15304 ,p_parent_structure_id => l_structure_id
15305 ---- Begin Bug 3654243 ---------------------------------------------------------------------
15306 ,p_Base_Perc_Comp_Deriv_Code => l_task_in_rec.base_percent_comp_deriv_code
15307 ---- End Bug 3654243 -----------------------------------------------------------------------
15308 ---- Begin Bug 13923366
15309 ,p_pm_source_code => l_task_in_rec.PM_SOURCE_CODE
15310 ---- End Bug 13923366
15311 ,x_task_id => l_task_id -- *** OUT *** --
15312 ,x_return_status => x_return_status
15313 ,x_msg_count => x_msg_count
15314 ,x_msg_data => x_msg_data
15315 );
15316
15317 -- Added for bug 3057575 :TO show task number while throwing err
15318 l_err_task_number := l_cur_pa_tasks_rec.task_number;
15319
15320 px_tasks_out_tbl(i).return_status := x_return_status;
15321
15322 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15323 IF l_debug_mode = 'Y' THEN
15324 pa_debug.g_err_stage := 'Error calling create task : ' || l_task_id ;
15325 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15326 END IF;
15327 Raise Invalid_Arg_Exc_WP;
15328 END IF;
15329
15330
15331 IF l_debug_mode = 'Y' THEN
15332 pa_debug.g_err_stage := 'task id : ' || l_task_id ;
15333 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
15334 END IF;
15335
15336 END IF; -- p_create_task_version_only = 'N'
15337
15338 ELSE
15339 DECLARE
15340 l_proj_elem_rvn NUMBER;
15341 BEGIN
15342
15343 OPEN cur_rec_ver_num(l_task_in_rec.pa_task_id);
15344 FETCH cur_rec_ver_num INTO l_proj_elem_rvn;
15345 CLOSE cur_rec_ver_num;
15346
15347 -- Bug 6717386
15348 If l_struct_ver_id is null then
15349 OPEN cur_struc_ver_wp(p_project_id,'WORKPLAN');
15350 FETCH cur_struc_ver_wp INTO l_struct_ver_id;
15351 CLOSE cur_struc_ver_wp;
15352 end if;
15353
15354 if p_structure_version_id = l_struct_ver_id then
15355 l_status_code := null;
15356 else
15357 l_status_code := l_task_in_rec.STATUS_CODE;
15358 end if;
15359 -- Bug 6717386
15360
15361 PA_TASK_PUB1.Update_Task(
15362 p_calling_module => 'AMG'
15363 ,p_init_msg_list => FND_API.G_FALSE
15364 ,p_task_id => l_task_in_rec.pa_task_id
15365 ,p_task_number => l_task_in_rec.pa_task_number
15366 ,p_task_name => l_task_in_rec.long_task_name
15367 ,p_task_description => l_task_in_rec.task_description
15368 ,p_task_manager_id => l_task_in_rec.task_manager_person_id
15369 ,p_carrying_out_org_id => l_task_in_rec.carrying_out_organization_id
15370 ,p_pm_product_code => l_task_in_rec.PM_SOURCE_CODE
15371 ,p_pm_task_reference => l_task_in_rec.pm_task_reference
15372 ,p_location_id => l_task_in_rec.address_id
15373 ,p_priority_code => l_task_in_rec.PRIORITY_CODE
15374 ,p_TYPE_ID => l_task_in_rec.TASK_TYPE
15375 ,p_status_code => l_status_code -- l_task_in_rec.STATUS_CODE bug 6717386
15376 ,p_inc_proj_progress_flag => l_task_in_rec.INC_PROJ_PROGRESS_FLAG
15377 ,p_closed_date => l_task_in_rec.CLOSED_DATE
15378 ,p_record_version_number => l_proj_elem_rvn
15379 ,P_UOM_CODE => l_task_in_rec.WQ_UOM_CODE
15380 ,p_work_item_code => l_task_in_rec.WQ_ITEM_CODE
15381 ----- begin Bug 3654243 --------------------------------------------
15382 ,p_Base_Perc_Comp_Deriv_Code => l_task_in_rec.base_percent_comp_deriv_code
15383 ,p_gen_etc_src_code => l_task_in_rec.gen_etc_source_code
15384 ----- end Bug 3654243 ----------------------------------------------
15385 ,x_return_status => x_return_status
15386 ,x_msg_count => x_msg_count
15387 ,x_msg_data => x_msg_data
15388 ,p_shared => l_shared -- Added for Bug#3451073
15389 ,p_dates_check => 'N' --bug 8301015
15390 );
15391
15392 -- Added for bug 3057575 :TO show task number while throwing err
15393 l_err_task_number := l_task_in_rec.pa_task_number;
15394
15395 px_tasks_out_tbl(i).return_status := x_return_status;
15396
15397 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15398 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
15399 ,p_msg_name => 'PA_PS_TASK_NOT_UPDATED'
15400 /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
15401 ,p_token1 => 'PROJECT'
15402 ,p_value1 => p_project_id
15403 ,p_token2 => 'TASK'
15404 ,p_value2 => l_task_in_rec.pa_task_id);
15405 IF l_debug_mode = 'Y'
15406 THEN
15407 pa_debug.g_err_stage := 'Error in task updation : ' || p_tasks_in_tbl(i).pa_task_id ;
15408 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15409 END IF;
15410 Raise Invalid_Arg_Exc_WP;
15411
15412 END IF;
15413
15414 END;
15415 --rtarway, added for BUG 4106154
15416 IF ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
15417 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
15418 PA_PROJECT_PUB.G_Published_version_exists = 'Y' AND
15419 --Added by rtarway for BUG 4321313
15420 PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_task_in_rec.pa_task_id)='Y'
15421 )
15422 THEN
15423 -- Changes for --bug 8301015
15424 --Added for Bug15958106
15425 l_tend_date1:=null;
15426 l_tstart_date1:=null;
15427 OPEN C_GET_TASK_DATES(l_task_in_rec.pa_task_id);
15428 FETCH C_GET_TASK_DATES INTO l_project_id1,l_parent_task_id1,l_tstart_date1,l_tend_date1;
15429 IF C_GET_TASK_DATES%ROWCOUNT > 0 THEN
15430 /*
15431 SELECT pt.project_id,
15432 pt.parent_task_id,
15433 pt.start_date,
15434 pt.completion_date
15435 INTO l_project_id1,
15436 l_parent_task_id1,
15437 l_tstart_date1,
15438 l_tend_date1
15439 FROM pa_tasks pt
15440 WHERE pt.task_id = l_task_in_rec.pa_task_id; */
15441
15442 IF ((nvl(l_task_in_rec.task_start_date,sysdate) <> nvl(l_tstart_date1,sysdate))
15443 OR (nvl(l_task_in_rec.task_completion_date,sysdate) <> nvl(l_tend_date1,sysdate))) THEN
15444
15445 l_tcnt := l_tcnt + 1;
15446
15447 l_task_dates(l_tcnt).task_id := l_task_in_rec.pa_task_id;
15448 l_task_dates(l_tcnt).project_id := l_project_id1;
15449 l_task_dates(l_tcnt).parent_task_id := l_parent_task_id1;
15450 l_task_dates(l_tcnt).old_start_date := l_tstart_date1;
15451 l_task_dates(l_tcnt).old_end_date := l_tend_date1;
15452 l_task_dates(l_tcnt).new_start_date := l_task_in_rec.task_start_date;
15453 l_task_dates(l_tcnt).new_end_date := l_task_in_rec.task_completion_date;
15454
15455 End IF;
15456 END IF; --Added for Bug15958106
15457 CLOSE C_GET_TASK_DATES;
15458
15459 -- Changes for --bug 8301015
15460 --Call Update_One_Task to update financial attributes
15461 PA_PROJECT_PVT.Update_One_Task
15462 (
15463 p_api_version_number => p_api_version_number,
15464 p_commit => FND_API.G_FALSE,
15465 p_msg_count => x_msg_count,
15466 p_msg_data => x_msg_data,
15467 p_return_status => x_return_status,
15468 p_pm_product_code => p_pm_product_code,
15469 p_pa_project_id => p_project_id,
15470 p_pa_task_id => l_task_in_rec.pa_task_id,
15471 p_pm_task_reference => l_task_in_rec.pm_task_reference,
15472 p_task_number => l_task_in_rec.pa_task_number,
15473 p_task_name => l_task_in_rec.task_name,
15474 p_long_task_name => l_task_in_rec.long_task_name,
15475 p_task_description => l_task_in_rec.task_description,
15476 p_task_start_date => l_task_in_rec.task_start_date,
15477 p_task_completion_date => l_task_in_rec.task_completion_date,
15478 p_early_start_date => l_task_in_rec.early_start_date,
15479 p_early_finish_date => l_task_in_rec.early_finish_date,
15480 p_late_start_date => l_task_in_rec.late_start_date,
15481 p_late_finish_date => l_task_in_rec.late_finish_date,
15482 p_pm_parent_task_reference => l_task_in_rec.pm_parent_task_reference,
15483 p_pa_parent_task_id => l_task_in_rec.pa_parent_task_id,
15484 p_address_id => l_task_in_rec.address_id,
15485 p_carrying_out_organization_id => l_task_in_rec.carrying_out_organization_id,
15486 p_service_type_code => l_task_in_rec.service_type_code,
15487 p_task_manager_person_id => l_task_in_rec.task_manager_person_id,
15488 p_billable_flag => l_task_in_rec.billable_flag,
15489 p_chargeable_flag => l_task_in_rec.chargeable_flag,
15490 p_ready_to_bill_flag => l_task_in_rec.ready_to_bill_flag,
15491 p_ready_to_distribute_flag => l_task_in_rec.ready_to_distribute_flag,
15492 p_limit_to_txn_controls_flag => l_task_in_rec.limit_to_txn_controls_flag,
15493 p_labor_bill_rate_org_id => l_task_in_rec.labor_bill_rate_org_id,
15494 p_labor_std_bill_rate_schdl => l_task_in_rec.labor_std_bill_rate_schdl,
15495 p_labor_schedule_fixed_date => l_task_in_rec.labor_schedule_fixed_date,
15496 p_labor_schedule_discount => l_task_in_rec.labor_schedule_discount,
15497 p_nl_bill_rate_org_id => l_task_in_rec.non_labor_bill_rate_org_id,
15498 p_nl_std_bill_rate_schdl => l_task_in_rec.non_labor_std_bill_rate_schdl,
15499 p_nl_schedule_fixed_date => l_task_in_rec.non_labor_schedule_fixed_date,
15500 p_nl_schedule_discount => l_task_in_rec.non_labor_schedule_discount,
15501 p_labor_cost_multiplier_name => l_task_in_rec.labor_cost_multiplier_name,
15502 p_cost_ind_rate_sch_id => l_task_in_rec.cost_ind_rate_sch_id,
15503 p_rev_ind_rate_sch_id => l_task_in_rec.rev_ind_rate_sch_id,
15504 p_inv_ind_rate_sch_id => l_task_in_rec.inv_ind_rate_sch_id,
15505 p_cost_ind_sch_fixed_date => l_task_in_rec.cost_ind_sch_fixed_date,
15506 p_rev_ind_sch_fixed_date => l_task_in_rec.rev_ind_sch_fixed_date,
15507 p_inv_ind_sch_fixed_date => l_task_in_rec.inv_ind_sch_fixed_date,
15508 p_labor_sch_type => l_task_in_rec.labor_sch_type,
15509 p_nl_sch_type => l_task_in_rec.non_labor_sch_type,
15510 p_allow_cross_charge_flag => l_task_in_rec.allow_cross_charge_flag,
15511 p_project_rate_type => l_task_in_rec.project_rate_type,
15512 p_project_rate_date => l_task_in_rec.project_rate_date,
15513 p_cc_process_labor_flag => l_task_in_rec.cc_process_labor_flag,
15514 p_labor_tp_schedule_id => l_task_in_rec.labor_tp_schedule_id,
15515 p_labor_tp_fixed_date => l_task_in_rec.labor_tp_fixed_date,
15516 p_cc_process_nl_flag => l_task_in_rec.cc_process_nl_flag,
15517 p_nl_tp_schedule_id => l_task_in_rec.nl_tp_schedule_id,
15518 p_nl_tp_fixed_date => l_task_in_rec.nl_tp_fixed_date,
15519 p_receive_project_invoice_flag => l_task_in_rec.receive_project_invoice_flag,
15520 p_work_type_id => l_task_in_rec.work_type_id,
15521 p_emp_bill_rate_schedule_id => l_task_in_rec.emp_bill_rate_schedule_id,
15522 p_job_bill_rate_schedule_id => l_task_in_rec.job_bill_rate_schedule_id,
15523 p_non_lab_std_bill_rt_sch_id => l_task_in_rec.non_lab_std_bill_rt_sch_id,
15524 p_taskfunc_cost_rate_type => l_task_in_rec.taskfunc_cost_rate_type,
15525 p_taskfunc_cost_rate_date => l_task_in_rec.taskfunc_cost_rate_date,
15526 p_labor_disc_reason_code => l_task_in_rec.labor_disc_reason_code,
15527 p_non_labor_disc_reason_code => l_task_in_rec.non_labor_disc_reason_code,
15528 p_retirement_cost_flag => l_task_in_rec.retirement_cost_flag,
15529 p_cint_eligible_flag => l_task_in_rec.cint_eligible_flag,
15530 p_cint_stop_date => l_task_in_rec.cint_stop_date,
15531 p_gen_etc_source_code => l_task_in_rec.gen_etc_source_code,
15532 p_invoice_method => l_task_in_rec.invoice_method,
15533 p_customer_id => l_task_in_rec.customer_id,
15534 p_out_pa_task_id => l_fin_task_id,
15535 p_out_pm_task_reference => l_fin_task_reference
15536 --Passing below DFF attributes for SR 3-6822387651
15537 ,p_tasks_dff => l_task_in_rec.tasks_dff
15538 ,p_attribute1 => l_task_in_rec.attribute1
15539 ,p_attribute2 => l_task_in_rec.attribute2
15540 ,p_attribute3 => l_task_in_rec.attribute3
15541 ,p_attribute4 => l_task_in_rec.attribute4
15542 ,p_attribute5 => l_task_in_rec.attribute5
15543 ,p_attribute6 => l_task_in_rec.attribute6
15544 ,p_attribute7 => l_task_in_rec.attribute7
15545 ,p_attribute8 => l_task_in_rec.attribute8
15546 ,p_attribute9 => l_task_in_rec.attribute9
15547 ,p_attribute10 => l_task_in_rec.attribute10
15548 --End of changes 3-6822387651
15549 );
15550 px_tasks_out_tbl(i).return_status := x_return_status;
15551
15552 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15553 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
15554 ,p_msg_name => 'PA_PS_TASK_NOT_UPDATED'
15555 /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
15556 ,p_token1 => 'PROJECT'
15557 ,p_value1 => p_project_id
15558 ,p_token2 => 'TASK'
15559 ,p_value2 => l_task_in_rec.pa_task_id);
15560 IF l_debug_mode = 'Y'
15561 THEN
15562 pa_debug.g_err_stage := 'Error in financial task updation : ' || p_tasks_in_tbl(i).pa_task_id ;
15563 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15564 END IF;
15565 Raise Invalid_Arg_Exc_WP;
15566
15567 END IF;
15568
15569 END IF;
15570
15571 --end add for BUG 4106154
15572
15573 END IF; -- After calling create or update TASK
15574 px_tasks_out_tbl(i).pa_task_id := l_task_id;
15575 px_tasks_out_tbl(i).pm_task_reference := l_task_in_rec.pm_task_reference;
15576
15577
15578 -- Updation of the task is done. Now start processing for updating the task version.
15579 -- Task version requires wbs_level, disp sequence, wbs number, flexfield related information etc to be populated.
15580 -- In the coming code we will populate these variables and will update/insert proj element versions.
15581
15582 -- Start processing for display sequence, wbs level and wbs number.
15583 -- Following is the way tables store data
15584 -- 1. l_disp_seq -- the current index for which processing is going on.
15585 -- 2. l_display_sequence_tbl(l_task_id) -- display sequence indexed by task ids.
15586 -- 3. l_wbs_level_tbl(l_task_id) -- wbs level indexed by task id.
15587 -- 4. l_top_task_count -- top tasks processed until current loop.
15588 -- 5. l_wbs_number_tbl(l_task_id) -- wbs number indexed by task id.
15589 -- 6. l_weighting_percentage_tbl(l_task_id) -- weightage indexed by task id.
15590 -- 7. l_child_count_tbl(l_task_id) -- child count indexed by task id.
15591
15592 -- The wbs level is wbs level of parent + 1 for non top tasks else it is 1.
15593 -- The wbs number is top_task_cnt when top task else it is wbs_number || '.'
15594 -- || parent task child count + 1
15595 l_disp_seq := l_disp_seq + 1;
15596 l_display_sequence_tbl(l_task_id) := l_disp_seq;
15597
15598 --Start for Changes for bug 3057575 : Checking whether correct structure has been passed OR NOT
15599 -- As the l_parent_task_id may get populated with l_structure_id for top tasks
15600 -- but as the below code requires it be null
15601 IF l_parent_task_id = l_structure_id THEN
15602 IF l_debug_mode = 'Y' THEN
15603 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 ;
15604 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15605 END IF;
15606 l_parent_task_id := null;
15607 END IF;
15608
15609 IF l_hierarchy_count = 1 THEN
15610 IF l_debug_mode = 'Y' THEN
15611 pa_debug.g_err_stage := 'l_hierarchy_count is 1 : ' || p_tasks_in_tbl(i).pa_task_id ;
15612 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15613
15614 pa_debug.g_err_stage := 'l_parent_task_id is : ' || l_parent_task_id;
15615 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15616
15617 IF task_parent_id_tbl.EXISTS(l_hierarchy_count) THEN
15618 pa_debug.g_err_stage := 'The task in hierarchy is : ' || task_parent_id_tbl(l_hierarchy_count);
15619 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15620 END IF;
15621
15622 END IF;
15623
15624 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
15625 l_hierarchy_count := l_hierarchy_count +1;
15626 ELSE
15627 IF l_parent_task_id IS NOT NULL THEN
15628
15629 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
15630 ,p_msg_name => 'PA_TASK_NOT_IN_HIERARCHY_ORD'
15631 ,p_token1 => 'TASK'
15632 ,p_value1 => l_err_task_number); Raise Invalid_Arg_Exc_WP;
15633 Raise Invalid_Arg_Exc_WP;
15634 END IF;
15635 END IF;
15636 ELSE
15637 IF l_debug_mode = 'Y' THEN
15638 pa_debug.g_err_stage := 'l_hierarchy_count is grater then 1 : ' || p_tasks_in_tbl(i).pa_task_id ;
15639 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15640
15641
15642 pa_debug.g_err_stage := 'l_parent_task_id is : ' || l_parent_task_id;
15643 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15644
15645 IF task_parent_id_tbl.EXISTS(l_hierarchy_count) THEN
15646 pa_debug.g_err_stage := 'The task in hierarchy is : ' || task_parent_id_tbl(l_hierarchy_count);
15647 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15648 END IF;
15649
15650 END IF;
15651
15652 IF l_parent_task_id IS NULL THEN
15653 l_hierarchy_count := 1;
15654 ELSE
15655 l_temp_count := 0;
15656 l_temp_success := 'F';
15657 LOOP
15658 IF l_parent_task_id = task_parent_id_tbl(l_hierarchy_count) THEN
15659 l_temp_success := 'T';
15660 l_hierarchy_count := l_hierarchy_count +1;
15661 ELSE
15662 l_hierarchy_count := l_hierarchy_count - 1;
15663 END IF;
15664 EXIT WHEN l_temp_success = 'T' OR l_hierarchy_count = 0;
15665
15666 END LOOP;
15667 IF l_debug_mode = 'Y' THEN
15668 pa_debug.g_err_stage := 'Value of l_hierarchy_count : ' || l_hierarchy_count ;
15669 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15670 END IF;
15671
15672 IF l_temp_success = 'F' THEN
15673 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
15674 ,p_msg_name => 'PA_TASK_NOT_IN_HIERARCHY_ORD'
15675 ,p_token1 => 'TASK'
15676 ,p_value1 => l_err_task_number);
15677 Raise Invalid_Arg_Exc_WP;
15678
15679
15680 END IF;
15681
15682 END IF; -- End for l_parent_task_id IS NOT NULL
15683
15684 END IF; --End for l_hierarchy_count = 1
15685 --End for Changes for bug 3057575 :
15686
15687
15688 IF l_parent_task_id is null THEN
15689
15690 --Added for bug 3057575
15691 task_parent_id_tbl(l_hierarchy_count) := l_task_id;
15692
15693 l_wbs_level_tbl(l_task_id) := 1;
15694 l_top_task_count := l_top_task_count + 1;
15695 l_wbs_number_tbl(l_task_id) := l_top_task_count;
15696 ELSE -- current task is not a top task.
15697
15698 --Added for bug 3057575
15699 task_parent_id_tbl(l_hierarchy_count) := l_task_id;
15700
15701 l_wbs_level_tbl(l_task_id) := l_wbs_level_tbl(l_parent_task_id) + 1;
15702 l_child_count_tbl(l_parent_task_id) := l_child_count_tbl(l_parent_task_id) + 1;
15703 l_wbs_number_tbl(l_task_id) := l_wbs_number_tbl(l_parent_task_id) || '.' || l_child_count_tbl(l_parent_task_id);
15704 END IF;
15705
15706 --Set the number of children under the current task to 0.
15707 l_child_count_tbl(l_task_id) := 0;
15708
15709 -- Bug 3075609. Modifying the task weightage processing logic. Currently the logic
15710 -- overwrites the weightages in the update project context and doesnot consider the
15711 -- progress enabled property of the task. Please refer to bug 3030664 for details
15712 -- about the issue and the fix.
15713
15714 /* -- Included check for top task after UT.
15715 -- If this is the first top task set its weightage to 100 else 0.
15716 -- If current task is the only child under the parent set its weightage to 100 else 0.
15717 IF l_parent_task_id is null THEN
15718 IF l_top_task_count = 1 THEN
15719 l_weighting_percentage_tbl(l_task_id) := 100;
15720 ELSE
15721 l_weighting_percentage_tbl(l_task_id) := 0;
15722 END IF;
15723 ELSE -- non top tasks.
15724 IF l_child_count_tbl(l_parent_task_id) = 1 THEN
15725 l_weighting_percentage_tbl(l_task_id) := 100;
15726 ELSE
15727 l_weighting_percentage_tbl(l_task_id) := 0;
15728 END IF;
15729 END IF;
15730 */
15731 -- The following plsql block takes care of assigning task weightages to the tasks.
15732 DECLARE
15733 -- This cursor identified the number of progressible tasks under a parent.
15734 CURSOR get_child_count(c_parent_element_version_id NUMBER)
15735 IS
15736 SELECT count(rel.object_id_to1)
15737 FROM PA_OBJECT_RELATIONSHIPS rel, pa_proj_element_versions pev, pa_proj_elements pe, pa_task_types tt
15738 WHERE rel.object_id_from1 = c_parent_element_version_id
15739 AND rel.object_type_to = 'PA_TASKS'
15740 AND rel.relationship_type = 'S'
15741 AND rel.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
15742 AND rel.object_id_to1 = pev.element_version_id
15743 AND pev.proj_element_id = pe.proj_element_id
15744 AND pe.type_id = tt.task_type_id
15745 AND tt.object_type = 'PA_TASKS' /* bug 3279978 FP M Enhancement */
15746 AND tt.prog_entry_enable_flag = 'Y';
15747
15748 l_child_task_count NUMBER;
15749 l_parent_version_id pa_proj_element_versions.element_version_id%TYPE;
15750 l_task_type_id pa_task_types.task_type_id%TYPE;
15751 BEGIN
15752 l_existing_task_set_max_wt := 'N';
15753 IF l_maintain_weightages = 'N' THEN -- no need to maintain weightages.
15754 l_weighting_percentage_tbl(l_task_id) := 0;
15755 ELSE
15756 IF l_parent_task_id is null THEN -- obtain the parent version id
15757 l_parent_version_id := l_structure_version_id;
15758 ELSE
15759 l_parent_version_id := l_task_version_id_tbl(l_parent_task_id);
15760 END IF;
15761
15762 IF l_child_indicator_tbl.exists(l_parent_version_id) THEN
15763 IF l_child_indicator_tbl(l_parent_version_id) = 'Y' THEN
15764 l_weighting_percentage_tbl(l_task_id) := 0;
15765 ELSE
15766 open cur_task_type_id(l_task_id);
15767 fetch cur_task_type_id into l_task_type_id;
15768 close cur_task_type_id;
15769 IF pa_task_type_utils.check_tk_type_progressable(l_task_type_id) = 'Y' THEN -- progressible task
15770 l_weighting_percentage_tbl(l_task_id) := 100;
15771 l_child_indicator_tbl(l_parent_version_id) := 'Y';
15772 ELSE -- non progressible task
15773 l_weighting_percentage_tbl(l_task_id) := 0;
15774 END IF;
15775 END IF;
15776
15777 ELSE -- This is the first child of the parent.
15778 -- If it is update context, check how many progress enabled tasks the parent has.
15779 IF p_structure_version_id is not null THEN -- update context
15780 open get_child_count(l_parent_version_id);
15781 fetch get_child_count into l_child_task_count;
15782 close get_child_count;
15783 END IF;
15784
15785 IF p_structure_version_id is not null and nvl(l_child_task_count,0) > 0 THEN -- progressible task exist
15786 l_child_indicator_tbl(l_parent_version_id) := 'Y';
15787 l_weighting_percentage_tbl(l_task_id) := 0;
15788 ELSE
15789 open cur_task_type_id(l_task_id);
15790 fetch cur_task_type_id into l_task_type_id;
15791 close cur_task_type_id;
15792 IF pa_task_type_utils.check_tk_type_progressable(l_task_type_id) = 'Y' THEN -- progressible task
15793 l_weighting_percentage_tbl(l_task_id) := 100;
15794 l_child_indicator_tbl(l_parent_version_id) := 'Y';
15795 l_existing_task_set_max_wt := 'Y';
15796 ELSE -- non progressible task
15797 l_weighting_percentage_tbl(l_task_id) := 0;
15798 l_child_indicator_tbl(l_parent_version_id) := 'N';
15799 END IF;
15800 END IF;
15801 END IF;
15802 END IF;
15803 EXCEPTION
15804 WHEN OTHERS THEN
15805 If get_child_count%ISOPEN THEN
15806 Close get_child_count;
15807 END IF;
15808 IF l_debug_mode = 'Y' THEN
15809 pa_debug.g_err_stage:= 'Error while calculating the task weightage. Task id : '||l_task_id;
15810 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level6);
15811 END IF;
15812 Raise;
15813 END;
15814
15815 -- Populate following set of variables required to update element versions:
15816 -- attribute_category , attribute1 ...attribute10, in local variables
15817 -- l_task_version_id, l_proj_elem_ver_rowid, l_proj_elem_ver_rvn -- required only in update task.
15818
15819 IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
15820 l_task_in_rec.pa_task_id IS NULL THEN -- Create Task Context
15821 --Bug 6153503
15822 IF l_task_in_rec.tasks_dff = 'N' THEN
15823 -- Handle the dff attributes. Set the local variable to null if passed value is miss char.
15824 -- These attributes would be used both while creating task version and the schedule version.
15825 IF l_task_in_rec.attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15826 l_attribute_category := null;
15827 ELSE
15828 l_attribute_category := l_task_in_rec.attribute_category;
15829 END IF;
15830
15831 IF l_task_in_rec.attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15832 l_attribute1 := null;
15833 ELSE
15834 l_attribute1 := l_task_in_rec.attribute1;
15835 END IF;
15836
15837 IF l_task_in_rec.attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15838 l_attribute2 := null;
15839 ELSE
15840 l_attribute2 := l_task_in_rec.attribute2;
15841 END IF;
15842
15843 IF l_task_in_rec.attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15844 l_attribute3 := null;
15845 ELSE
15846 l_attribute3 := l_task_in_rec.attribute3;
15847 END IF;
15848
15849 IF l_task_in_rec.attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15850 l_attribute4 := null;
15851 ELSE
15852 l_attribute4 := l_task_in_rec.attribute4;
15853 END IF;
15854
15855 IF l_task_in_rec.attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15856 l_attribute5 := null;
15857 ELSE
15858 l_attribute5 := l_task_in_rec.attribute5;
15859 END IF;
15860
15861 IF l_task_in_rec.attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15862 l_attribute6 := null;
15863 ELSE
15864 l_attribute6 := l_task_in_rec.attribute6;
15865 END IF;
15866
15867 IF l_task_in_rec.attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15868 l_attribute7 := null;
15869 ELSE
15870 l_attribute7 := l_task_in_rec.attribute7;
15871 END IF;
15872
15873 IF l_task_in_rec.attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15874 l_attribute8 := null;
15875 ELSE
15876 l_attribute8 := l_task_in_rec.attribute8;
15877 END IF;
15878
15879 IF l_task_in_rec.attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15880 l_attribute9 := null;
15881 ELSE
15882 l_attribute9 := l_task_in_rec.attribute9;
15883 END IF;
15884
15885 IF l_task_in_rec.attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15886 l_attribute10 := null;
15887 ELSE
15888 l_attribute10 := l_task_in_rec.attribute10;
15889 END IF;
15890 --Bug 6153503
15891 IF l_task_in_rec.attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15892 l_attribute11 := null;
15893 ELSE
15894 l_attribute11 := l_task_in_rec.attribute11;
15895 END IF;
15896
15897 IF l_task_in_rec.attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15898 l_attribute12 := null;
15899 ELSE
15900 l_attribute12 := l_task_in_rec.attribute12;
15901 END IF;
15902
15903 IF l_task_in_rec.attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15904 l_attribute13 := null;
15905 ELSE
15906 l_attribute13 := l_task_in_rec.attribute13;
15907 END IF;
15908
15909 IF l_task_in_rec.attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15910 l_attribute14 := null;
15911 ELSE
15912 l_attribute14 := l_task_in_rec.attribute14;
15913 END IF;
15914
15915 IF l_task_in_rec.attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15916 l_attribute15 := null;
15917 ELSE
15918 l_attribute15 := l_task_in_rec.attribute15;
15919 END IF;
15920
15921 pa_task_utils.validate_flex_fields(
15922 p_desc_flex_name => 'PA_PROJ_ELEM_VER_SCH_DESC_FLEX'
15923 ,p_attribute_category => l_attribute_category
15924 ,p_attribute1 => l_attribute1
15925 ,p_attribute2 => l_attribute2
15926 ,p_attribute3 => l_attribute3
15927 ,p_attribute4 => l_attribute4
15928 ,p_attribute5 => l_attribute5
15929 ,p_attribute6 => l_attribute6
15930 ,p_attribute7 => l_attribute7
15931 ,p_attribute8 => l_attribute8
15932 ,p_attribute9 => l_attribute9
15933 ,p_attribute10 => l_attribute10
15934 ,p_attribute11 => l_attribute11
15935 ,p_attribute12 => l_attribute12
15936 ,p_attribute13 => l_attribute13
15937 ,p_attribute14 => l_attribute14
15938 ,p_attribute15 => l_attribute15
15939 ,p_RETURN_msg => l_return_msg
15940 ,p_validate_status => l_validate_status
15941 );
15942
15943 IF l_validate_status = 'N'
15944 THEN
15945 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
15946 THEN
15947 pa_interface_utils_pub.map_new_amg_msg
15948 ( p_old_message_code => 'PA_INVALID_FF_VALUES'
15949 ,p_msg_attribute => 'CHANGE'
15950 ,p_resize_flag => 'N'
15951 ,p_msg_context => 'FLEX'
15952 ,p_attribute1 => l_return_msg
15953 ,p_attribute2 => ''
15954 ,p_attribute3 => ''
15955 ,p_attribute4 => ''
15956 ,p_attribute5 => '');
15957 END IF;
15958 RAISE FND_API.G_EXC_ERROR;
15959 END IF;
15960 END IF;
15961 --Bug 6153503
15962 ELSE -- update task case
15963 DECLARE
15964 --Cursor to get the versioned information of the task
15965 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 )
15966 IS
15967 SELECT rowid,element_version_id,object_type, project_id, proj_element_id, record_version_number,
15968 display_sequence, wbs_number, wbs_level, parent_structure_version_id,
15969 attribute_category, attribute1, attribute2, attribute3, attribute4, attribute5,
15970 attribute6, attribute7, attribute8, attribute9, attribute10, attribute11, attribute12,
15971 attribute13, attribute14, attribute15, TASK_UNPUB_VER_STATUS_CODE
15972 FROM pa_proj_element_versions
15973 WHERE project_id = p_project_id
15974 AND proj_element_id = c_task_id
15975 AND parent_structure_version_id = c_structure_version_id
15976 AND object_type = 'PA_TASKS';
15977
15978 l_cur_proj_elem_ver_info_rec cur_proj_element_version_info%ROWTYPE;
15979
15980 BEGIN
15981
15982 OPEN cur_proj_element_version_info( l_structure_version_id, l_task_id );
15983 FETCH cur_proj_element_version_info INTO l_cur_proj_elem_ver_info_rec;
15984 CLOSE cur_proj_element_version_info;
15985 --Bug 6153503
15986 l_task_version_id := l_cur_proj_elem_ver_info_rec.element_version_id;
15987 OPEN cur_ver_sch_attr_rec(l_task_version_id);
15988 FETCH cur_ver_sch_attr_rec INTO l_ver_sch_attr_rec;
15989 CLOSE cur_ver_sch_attr_rec;
15990
15991 -- Handle the dff attributes. Set the local variable to null if passed value is miss char.
15992 -- These attributes would be used both while creating task version and the schedule version.
15993 --Bug 6153503 start
15994 IF l_task_in_rec.attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15995 OR l_task_in_rec.tasks_dff = 'Y' THEN
15996 l_attribute_category := l_ver_sch_attr_rec.attribute_category;
15997 ELSE
15998 l_attribute_category := l_task_in_rec.attribute_category;
15999 END IF;
16000
16001 IF l_task_in_rec.attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16002 l_attribute1 := l_ver_sch_attr_rec.attribute1;
16003 ELSE
16004 l_attribute1 := l_task_in_rec.attribute1;
16005 END IF;
16006
16007 IF l_task_in_rec.attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16008 l_attribute2 := l_ver_sch_attr_rec.attribute2;
16009 ELSE
16010 l_attribute2 := l_task_in_rec.attribute2;
16011 END IF;
16012
16013 IF l_task_in_rec.attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16014 l_attribute3 := l_ver_sch_attr_rec.attribute3;
16015 ELSE
16016 l_attribute3 := l_task_in_rec.attribute3;
16017 END IF;
16018
16019 IF l_task_in_rec.attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16020 l_attribute4 := l_ver_sch_attr_rec.attribute4;
16021 ELSE
16022 l_attribute4 := l_task_in_rec.attribute4;
16023 END IF;
16024
16025 IF l_task_in_rec.attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16026 l_attribute5 := l_ver_sch_attr_rec.attribute5;
16027 ELSE
16028 l_attribute5 := l_task_in_rec.attribute5;
16029 END IF;
16030
16031 IF l_task_in_rec.attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16032 l_attribute6 := l_ver_sch_attr_rec.attribute6;
16033 ELSE
16034 l_attribute6 := l_task_in_rec.attribute6;
16035 END IF;
16036
16037 IF l_task_in_rec.attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16038 l_attribute7 := l_ver_sch_attr_rec.attribute7;
16039 ELSE
16040 l_attribute7 := l_task_in_rec.attribute7;
16041 END IF;
16042
16043 IF l_task_in_rec.attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16044 l_attribute8 := l_ver_sch_attr_rec.attribute8;
16045 ELSE
16046 l_attribute8 := l_task_in_rec.attribute8;
16047 END IF;
16048
16049 IF l_task_in_rec.attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16050 l_attribute9 := l_ver_sch_attr_rec.attribute9;
16051 ELSE
16052 l_attribute9 := l_task_in_rec.attribute9;
16053 END IF;
16054
16055 IF l_task_in_rec.attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16056 l_attribute10 := l_ver_sch_attr_rec.attribute10;
16057 ELSE
16058 l_attribute10 := l_task_in_rec.attribute10;
16059 END IF;
16060
16061 IF l_task_in_rec.attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16062 l_attribute11 := l_ver_sch_attr_rec.attribute11;
16063 ELSE
16064 l_attribute11 := l_task_in_rec.attribute11;
16065 END IF;
16066
16067 IF l_task_in_rec.attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16068 l_attribute12 := l_ver_sch_attr_rec.attribute12;
16069 ELSE
16070 l_attribute12 := l_task_in_rec.attribute12;
16071 END IF;
16072
16073 IF l_task_in_rec.attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16074 l_attribute13 := l_ver_sch_attr_rec.attribute13;
16075 ELSE
16076 l_attribute13 := l_task_in_rec.attribute13;
16077 END IF;
16078
16079 IF l_task_in_rec.attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16080 l_attribute14 := l_ver_sch_attr_rec.attribute14;
16081 ELSE
16082 l_attribute14 := l_task_in_rec.attribute14;
16083 END IF;
16084
16085 IF l_task_in_rec.attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16086 l_attribute15 := l_ver_sch_attr_rec.attribute15;
16087 ELSE
16088 l_attribute15 := l_task_in_rec.attribute15;
16089 END IF;
16090
16091 pa_task_utils.validate_flex_fields(
16092 p_desc_flex_name => 'PA_PROJ_ELEM_VER_SCH_DESC_FLEX'
16093 ,p_attribute_category => l_attribute_category
16094 ,p_attribute1 => l_attribute1
16095 ,p_attribute2 => l_attribute2
16096 ,p_attribute3 => l_attribute3
16097 ,p_attribute4 => l_attribute4
16098 ,p_attribute5 => l_attribute5
16099 ,p_attribute6 => l_attribute6
16100 ,p_attribute7 => l_attribute7
16101 ,p_attribute8 => l_attribute8
16102 ,p_attribute9 => l_attribute9
16103 ,p_attribute10 => l_attribute10
16104 ,p_attribute11 => l_attribute11
16105 ,p_attribute12 => l_attribute12
16106 ,p_attribute13 => l_attribute13
16107 ,p_attribute14 => l_attribute14
16108 ,p_attribute15 => l_attribute15
16109 ,p_RETURN_msg => l_return_msg
16110 ,p_validate_status => l_validate_status
16111 );
16112
16113 IF l_validate_status = 'N'
16114 THEN
16115 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16116 THEN
16117 pa_interface_utils_pub.map_new_amg_msg
16118 ( p_old_message_code => 'PA_INVALID_FF_VALUES'
16119 ,p_msg_attribute => 'CHANGE'
16120 ,p_resize_flag => 'N'
16121 ,p_msg_context => 'FLEX'
16122 ,p_attribute1 => l_return_msg
16123 ,p_attribute2 => ''
16124 ,p_attribute3 => ''
16125 ,p_attribute4 => ''
16126 ,p_attribute5 => '');
16127 END IF;
16128 RAISE FND_API.G_EXC_ERROR;
16129 END IF;
16130 --Bug 6153503 end
16131
16132
16133 l_task_unpub_ver_status_code := l_cur_proj_elem_ver_info_rec.TASK_UNPUB_VER_STATUS_CODE;
16134
16135 l_task_version_id := l_cur_proj_elem_ver_info_rec.element_version_id;
16136 l_proj_elem_ver_rowid := l_cur_proj_elem_ver_info_rec.rowid;
16137 l_proj_elem_ver_rvn := l_cur_proj_elem_ver_info_rec.record_version_number;
16138
16139 END;
16140 END IF; -- before calling PA_PROJ_ELEMENT_VERSIONS_PKG Insert_Row or Update_Row
16141
16142 -- In the following block do following validations:
16143 -- for create task case check if its ok to create subtask under the parent task.
16144 -- for update task check if the task is being moved. If moved check if move task is ok.
16145 -- check if the task can be moved under the new parent.
16146 -- Also do the lifecycle validations for update case. OPEN ISSUE
16147
16148 -- During these validations following variables are also populated which are used later on
16149 -- l_relationship_id, l_obj_rel_rvn;
16150
16151 IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
16152 l_task_in_rec.pa_task_id IS NULL THEN -- create task
16153 IF l_parent_task_id IS NOT NULL THEN
16154 --Check if it is ok to create a subtask.
16155 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok
16156 ( p_parent_task_ver_id => l_task_version_id_tbl(l_parent_task_id)
16157 ,x_return_status => l_return_status
16158 ,x_error_message_code => l_error_msg_code
16159 );
16160
16161 IF (l_return_status <> 'Y') THEN --Its required to check like this as the called API
16162 --returns return status as Y / N.
16163 IF l_debug_mode = 'Y' THEN
16164 pa_debug.g_err_stage:= 'Cannot create this task under its parent : '||l_task_id;
16165 pa_debug.write(l_module_name,pa_debug.g_err_stage,
16166 l_debug_level6);
16167 END IF;
16168
16169 x_return_status := FND_API.G_RET_STS_ERROR;
16170 px_tasks_out_tbl(i).return_status := x_return_status;
16171 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16172 p_msg_name => l_error_msg_code);
16173 Raise Invalid_Arg_Exc_WP;
16174 END IF;
16175 END IF; --l_parent_task_id IS NOT NULL
16176
16177 ELSE
16178 DECLARE
16179 l_db_parent_task_version_id pa_proj_element_versions.element_version_id%TYPE;
16180 l_parent_task_version_id pa_proj_element_versions.element_version_id%TYPE;
16181
16182 -- Bug 3075609. This will hold the weightage of the task version currently in database.
16183 l_db_task_weightage pa_object_relationships.weighting_percentage%TYPE;
16184 BEGIN
16185 IF (l_parent_task_id IS NOT null)
16186 THEN
16187 l_parent_task_version_id := l_task_version_id_tbl(l_parent_task_id);
16188 ELSE -- top task hence populate structure_version_id as parent
16189 l_parent_task_version_id := l_structure_version_id;
16190 END IF;
16191
16192 --Get the present parent task version id from DB
16193 OPEN cur_parent_object_rel(l_task_version_id );
16194 FETCH cur_parent_object_rel INTO l_db_parent_task_version_id,l_relationship_id, l_obj_rel_rvn,l_db_task_weightage;
16195 CLOSE cur_parent_object_rel;
16196
16197 -- Bug 3075609. For all the existing tasks, we will set the weightage from the database.
16198 l_weighting_percentage_tbl(l_task_id) := l_db_task_weightage;
16199
16200 -- Siva : You can set the flag l_WBS_changed_flag to Y inside the following if
16201 -- Condition. Call the set_update_wbs_flag after the task loop - otherwise for each
16202 -- of the potential change the set_update_wbs_flag api will be called.(This will equal
16203 -- the number of tasks in the create project context)
16204 IF (l_parent_task_version_id <> l_db_parent_task_version_id)
16205 THEN
16206 --rtarway, for DHI ER, BUG 4413568
16207 IF ( PA_PROJECT_PUB.G_TASK_STR_UPDATE_MODE = 'PA_UPD_TASK_ATTR' ) THEN --bug 4534919
16208 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16209 p_msg_name => 'PA_WBS_CANT_CHANGE');
16210 RAISE Invalid_Arg_Exc_WP;
16211 END IF;
16212 -- Lifecycle Phase validation . Check if task has phase associated with it
16213 IF (pa_proj_elements_utils.CHECK_ELEMENT_HAS_PHASE(l_task_in_rec.pa_task_id) = 'Y')
16214 THEN
16215 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16216 p_msg_name => 'PA_LC_NO_MOVE_PHASE_TASK');
16217 RAISE Invalid_Arg_Exc_WP;
16218 END IF;
16219
16220 --check if ok to move this task
16221 PA_PROJ_ELEMENTS_UTILS.check_move_task_ok(
16222 p_task_ver_id => l_task_version_id
16223 ,x_return_status => x_return_status
16224 ,x_error_message_code => x_msg_data
16225 );
16226 IF (x_return_status <> 'Y') THEN
16227 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16228 p_msg_name => x_msg_data);
16229 raise Invalid_Arg_Exc_WP;
16230 END IF;
16231
16232 IF (l_parent_task_id IS NOT NULL) THEN
16233 PA_PROJ_ELEMENTS_UTILS.CHECK_CREATE_SUBTASK_OK(
16234 p_parent_task_ver_id => l_parent_task_version_id
16235 ,x_return_status => x_return_status
16236 ,x_error_message_code => x_msg_data);
16237 IF (x_return_status <> 'Y') THEN
16238 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16239 p_msg_name => x_msg_data);
16240 raise Invalid_Arg_Exc_WP;
16241 END IF;
16242 END IF;
16243
16244 l_WBS_changed_flag := 'Y'; --bug 3010538
16245
16246 -- Bug 3075609. This task is changing its parent. See if the other peer
16247 -- tasks need to be processed. The task that is changing its parent will be
16248 -- set a tw of 100 if this is the first task in the new branch or 0 otherwise.
16249 IF l_maintain_weightages = 'Y' THEN
16250 IF nvl(l_existing_task_set_max_wt,'N') = 'Y' THEN
16251 l_weighting_percentage_tbl(l_task_id) := 100;
16252 ELSE
16253 l_weighting_percentage_tbl(l_task_id) := 0;
16254 END IF;
16255 IF nvl(l_db_task_weightage,0) <> 0 and NOT l_affected_parents_tbl.exists(l_db_parent_task_version_id) THEN
16256 l_affected_parents_tbl(l_db_parent_task_version_id) := 'Y';
16257 END IF;
16258 END IF;
16259 END IF;
16260 END;
16261 END IF;
16262
16263 -- call insert row or update row
16264 -- Set the following local variables after calling PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row
16265 -- l_task_version_id_tbl(l_task_id)
16266 -- px_tasks_out_tbl(i).task_version_id
16267
16268 IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
16269 l_task_in_rec.pa_task_id IS NULL -- Create Task Context
16270 THEN
16271
16272 -- Call the table handler to create a task version.
16273 IF l_debug_mode = 'Y' THEN
16274 pa_debug.g_err_stage := 'Calling API PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row';
16275 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16276 END IF;
16277 --added for 4059962 by rtarway
16278 --Derive financial task flag
16279 l_Share_Code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id);
16280 IF l_shared = 'Y'
16281 THEN
16282 --If P_Structure_Type = 'WORKPLAN' Or l_Share_Code = 'SHARE_PARTIAL' then
16283 If l_Share_Code = 'SHARE_PARTIAL' then --Modified IF condition for 4059962 reopen, rtarway
16284 l_financial_task_flag := 'N';
16285 Else
16286 l_financial_task_flag := 'Y';
16287 End If;
16288 ELSE
16289 If P_Structure_Type = 'WORKPLAN' THEN
16290 l_financial_task_flag := 'N';
16291 Else
16292 l_financial_task_flag := 'Y';
16293 End If;
16294 End IF;
16295 --end added for 4059962 by rtarway
16296
16297 /*
16298 Bug Fix 5263429
16299 Unable to delete the task from MSP.
16300 */
16301 IF p_is_wp_separate_from_fn = 'N'
16302 THEN
16303 IF p_is_wp_versioning_enabled = 'Y'
16304 THEN
16305 l_task_unpub_ver_status_code := 'WORKING';
16306 ELSE
16307 l_task_unpub_ver_status_code := 'PUBLISHED';
16308 END IF;
16309 ELSE ---split
16310 IF p_structure_type = 'FINANCIAL'
16311 THEN
16312 l_task_unpub_ver_status_code := 'PUBLISHED';
16313 ELSE --workplan only
16314 IF p_is_wp_versioning_enabled = 'Y'
16315 THEN
16316 l_task_unpub_ver_status_code := 'WORKING';
16317 ELSE
16318 l_task_unpub_ver_status_code := 'PUBLISHED';
16319 END IF;
16320 END IF;
16321 END IF;
16322 /*
16323 End of Bug Fix 5263429
16324 */
16325 PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row
16326 (
16327 X_ROW_ID => l_proj_elem_ver_rowid
16328 ,X_ELEMENT_VERSION_ID => l_task_version_id
16329 ,X_PROJ_ELEMENT_ID => l_task_id
16330 ,X_OBJECT_TYPE => 'PA_TASKS'
16331 ,X_PROJECT_ID => p_project_id
16332 ,X_PARENT_STRUCTURE_VERSION_ID=> l_structure_version_id
16333 ,X_DISPLAY_SEQUENCE => l_display_sequence_tbl(l_task_id)
16334 ,X_WBS_LEVEL => l_wbs_level_tbl(l_task_id)
16335 ,X_WBS_NUMBER => l_wbs_number_tbl(l_task_id)
16336 ,X_ATTRIBUTE_CATEGORY => l_attribute_category
16337 ,X_ATTRIBUTE1 => l_attribute1
16338 ,X_ATTRIBUTE2 => l_attribute2
16339 ,X_ATTRIBUTE3 => l_attribute3
16340 ,X_ATTRIBUTE4 => l_attribute4
16341 ,X_ATTRIBUTE5 => l_attribute5
16342 ,X_ATTRIBUTE6 => l_attribute6
16343 ,X_ATTRIBUTE7 => l_attribute7
16344 ,X_ATTRIBUTE8 => l_attribute8
16345 ,X_ATTRIBUTE9 => l_attribute9
16346 ,X_ATTRIBUTE10 => l_attribute10
16347 ,X_ATTRIBUTE11 => null
16348 ,X_ATTRIBUTE12 => null
16349 ,X_ATTRIBUTE13 => null
16350 ,X_ATTRIBUTE14 => null
16351 ,X_ATTRIBUTE15 => null
16352 ,X_TASK_UNPUB_VER_STATUS_CODE => l_task_unpub_ver_status_code
16353 ,X_SOURCE_OBJECT_ID => p_project_id
16354 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
16355 --,P_Financial_Task_Flag => PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_task_id)
16356 --commented and added following for bug 4059962 reopen, rtarway
16357 ,P_Financial_Task_Flag => l_financial_task_flag
16358 );
16359
16360 l_task_version_id_tbl(l_task_id) := l_task_version_id;
16361 px_tasks_out_tbl(i).task_version_id := l_task_version_id;
16362
16363 IF l_debug_mode = 'Y' THEN
16364 pa_debug.g_err_stage := 'Task Version id : ' || l_task_version_id ;
16365 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
16366 END IF;
16367
16368 -- Required to inherit task type attributes only in the case of context create_task from update project
16369 IF p_structure_version_id IS NOT NULL
16370 THEN
16371 IF p_create_task_version_only = 'N'
16372 THEN
16373 PA_TASK_PVT1.Inherit_task_type_attr(
16374 p_task_id => l_task_id
16375 ,p_task_version_id => l_task_version_id
16376 ,x_return_status => x_return_status
16377 ,x_msg_count => x_msg_count
16378 ,x_msg_data => x_msg_data
16379 );
16380 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
16381 raise Invalid_Arg_Exc_WP;
16382 END IF;
16383 END IF;--for p_create_task_version_only = 'N'
16384 END IF;-- for p_structure_version_id IS NOT NULL
16385
16386 ELSE -- in update task case
16387 -- check for locking
16388 BEGIN
16389 SELECT 'x' INTO l_dummy_char
16390 FROM PA_PROJ_ELEMENT_VERSIONS
16391 WHERE element_version_id = l_task_version_id
16392 AND record_version_number = l_proj_elem_ver_rvn
16393 FOR UPDATE OF record_version_number NOWAIT;
16394 EXCEPTION
16395 WHEN TIMEOUT_ON_RESOURCE THEN
16396 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16397 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
16398 raise Invalid_Arg_Exc_WP;
16399 WHEN NO_DATA_FOUND THEN
16400 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16401 p_msg_name => 'PA_XC_RECORD_CHANGED');
16402 raise Invalid_Arg_Exc_WP;
16403 WHEN OTHERS THEN
16404 IF SQLCODE = -54 then
16405 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16406 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
16407 raise Invalid_Arg_Exc_WP;
16408 ELSE
16409 raise;
16410 END IF;
16411 END;
16412
16413 -- Call the table handler to create a task version.
16414 IF l_debug_mode = 'Y' THEN
16415 pa_debug.g_err_stage := 'Calling API PA_PROJ_ELEMENT_VERSIONS_PKG.Update_Row';
16416 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16417 END IF;
16418
16419 -- Bug 3075609. Since atleast one task is being updated, this structure version is an
16420 -- existing one. Let us maintain a flag to track this so that if this flag is Y we will
16421 -- not recalculate the task weightages if the basis is MANUAL.
16422 l_new_structure_version := 'N';
16423
16424 PA_PROJ_ELEMENT_VERSIONS_PKG.Update_Row(
16425 X_ROW_ID => l_proj_elem_ver_rowid
16426 ,X_ELEMENT_VERSION_ID => l_task_version_id
16427 ,X_PROJ_ELEMENT_ID => l_task_id
16428 ,X_OBJECT_TYPE => 'PA_TASKS'
16429 ,X_PROJECT_ID => p_project_id
16430 ,X_PARENT_STRUCTURE_VERSION_ID=> l_structure_version_id
16431 ,X_DISPLAY_SEQUENCE => l_display_sequence_tbl(l_task_in_rec.pa_task_id)
16432 ,X_WBS_LEVEL => l_wbs_level_tbl(l_task_in_rec.pa_task_id)
16433 ,X_WBS_NUMBER => l_wbs_number_tbl(l_task_in_rec.pa_task_id)
16434 ,X_ATTRIBUTE_CATEGORY => l_attribute_category
16435 ,X_ATTRIBUTE1 => l_attribute1
16436 ,X_ATTRIBUTE2 => l_attribute2
16437 ,X_ATTRIBUTE3 => l_attribute3
16438 ,X_ATTRIBUTE4 => l_attribute4
16439 ,X_ATTRIBUTE5 => l_attribute5
16440 ,X_ATTRIBUTE6 => l_attribute6
16441 ,X_ATTRIBUTE7 => l_attribute7
16442 ,X_ATTRIBUTE8 => l_attribute8
16443 ,X_ATTRIBUTE9 => l_attribute9
16444 ,X_ATTRIBUTE10 => l_attribute10
16445 ,X_ATTRIBUTE11 => null
16446 ,X_ATTRIBUTE12 => null
16447 ,X_ATTRIBUTE13 => null
16448 ,X_ATTRIBUTE14 => null
16449 ,X_ATTRIBUTE15 => null
16450 ,X_record_version_number => l_proj_elem_ver_rvn
16451 ,X_TASK_UNPUB_VER_STATUS_CODE => l_task_unpub_ver_status_code
16452 );
16453
16454 l_task_version_id_tbl(l_task_id) := l_task_version_id;
16455 px_tasks_out_tbl(i).task_version_id := l_task_version_id;
16456
16457 IF l_debug_mode = 'Y' THEN
16458 pa_debug.g_err_stage := 'Task Version id : ' || l_task_version_id ;
16459 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
16460 END IF;
16461
16462 END IF; /* After calling PA_PROJ_ELEMENT_VERSIONS_PKG Insert_Row or Update_Row*/
16463
16464 -- Added for bug 3057575
16465 -- Here we will poulate the task_ver_id_passed_tbl with all the task version Id processed while
16466 -- Updating a project .This is not done while creating a project as we
16467 -- Are adding task version Id in task_ver_id_passed_tbl to identify all the tasks
16468 -- which are not passed while updating a project.
16469 IF (p_structure_version_id IS NOT NULL) THEN
16470 task_ver_id_passed_tbl(l_task_version_id) := l_task_version_id;
16471 END IF;
16472
16473 -- In following code we will be creating or updating the records in object relationship tables.
16474
16475 DECLARE
16476 l_structure_version_id_from pa_proj_element_versions.element_version_id%TYPE;
16477 l_task_version_id_from pa_proj_element_versions.element_version_id%TYPE;
16478 l_relationship_subtype pa_object_relationships.relationship_subtype%TYPE;
16479
16480 BEGIN
16481
16482 -- Set the following local variables before calling PA_RELATIONSHIP_PUB.Create_Relationship
16483 -- l_structure_version_id_from
16484 -- l_task_version_id_from
16485 -- l_relationship_subtype
16486 IF l_parent_task_id is null THEN -- task is a top task.
16487 l_structure_version_id_from := l_structure_version_id;
16488 l_task_version_id_from := null;
16489 l_relationship_subtype := 'STRUCTURE_TO_TASK';
16490 ELSE -- The task is not a top task
16491 l_structure_version_id_from := null;
16492 l_task_version_id_from := l_task_version_id_tbl(l_parent_task_id);
16493 l_relationship_subtype := 'TASK_TO_TASK';
16494 END IF;
16495
16496 IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
16497 l_task_in_rec.pa_task_id IS NULL -- Create Task Context
16498 THEN
16499 -- Set the following variables after calling PA_RELATIONSHIP_PUB.Create_Relationship
16500 --px_tasks_out_tbl(i).return_status
16501 IF l_debug_mode = 'Y' THEN
16502 pa_debug.g_err_stage := 'Calling API create_relationship';
16503 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16504 END IF;
16505
16506 PA_RELATIONSHIP_PUB.Create_Relationship
16507 (
16508 p_api_version => p_api_version_number
16509 ,p_init_msg_list => FND_API.G_FALSE
16510 ,p_commit => p_commit
16511 ,p_validate_only => FND_API.G_FALSE
16512 ,p_calling_module => p_calling_module
16513 ,p_debug_mode => l_debug_mode
16514 ,p_project_id_from => p_project_id
16515 ,p_structure_id_from => l_structure_id
16516 ,p_structure_version_id_from => l_structure_version_id_from
16517 ,p_task_version_id_from => l_task_version_id_from
16518 ,p_project_id_to => p_project_id
16519 ,p_structure_id_to => l_structure_id
16520 ,p_task_version_id_to => l_task_version_id
16521 ,p_structure_type => null
16522 ,p_initiating_element => null
16523 ,p_relationship_type => 'S'
16524 ,p_relationship_subtype => l_relationship_subtype
16525 ,p_weighting_percentage => l_weighting_percentage_tbl(l_task_id)
16526 ,x_object_relationship_id => l_relationship_id
16527 ,x_return_status => x_return_status
16528 ,x_msg_count => x_msg_count
16529 ,x_msg_data => x_msg_data
16530 );
16531
16532 px_tasks_out_tbl(i).return_status := x_return_status;
16533 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16534 IF l_debug_mode = 'Y' THEN
16535 pa_debug.g_err_stage := 'Error calling create relationship : ' || l_task_version_id ;
16536 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16537 END IF;
16538 Raise Invalid_Arg_Exc_WP;
16539 END IF;
16540
16541 IF l_debug_mode = 'Y' THEN
16542 pa_debug.g_err_stage := 'Relationship id : ' || l_relationship_id ;
16543 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
16544 END IF;
16545
16546 ELSE -- in update task case
16547 -- Set the following variables after calling PA_RELATIONSHIP_PUB.Create_Relationship
16548 -- px_tasks_out_tbl(i).return_status
16549 --rtarway, for DHI ER, BUG 4413568
16550 /*
16551 IF ( PA_PROJECT_PUB.G_TASK_STR_UPDATE_MODE = 'PA_UPD_TASK_ATTR' ) THEN --bug 4534919
16552 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16553 p_msg_name => 'PA_WBS_CANT_CHANGE');
16554 RAISE Invalid_Arg_Exc_WP;
16555 END IF;
16556 This code is not required here. */
16557
16558 PA_RELATIONSHIP_PVT.Update_Relationship
16559 (
16560 p_api_version => p_api_version_number
16561 ,p_init_msg_list => FND_API.G_FALSE
16562 ,p_commit => p_commit
16563 ,p_validate_only => FND_API.G_FALSE
16564 ,p_calling_module => p_calling_module
16565 ,p_debug_mode => l_debug_mode
16566 ,p_object_relationship_id => l_relationship_id
16567 ,p_project_id_from => null
16568 ,p_structure_id_from => null
16569 ,p_structure_version_id_from => l_structure_version_id_from
16570 ,p_task_version_id_from => l_task_version_id_from
16571 ,p_project_id_to => null
16572 ,p_structure_id_to => null
16573 ,p_structure_version_id_to => null
16574 ,p_task_version_id_to => l_task_version_id
16575 ,p_relationship_type => 'S'
16576 ,p_relationship_subtype => l_relationship_subtype
16577 ,p_weighting_percentage => l_weighting_percentage_tbl(l_task_id)
16578 ,p_record_version_number => l_obj_rel_rvn
16579 ,x_return_status => x_return_status
16580 ,x_msg_count => x_msg_count
16581 ,x_msg_data => x_msg_data
16582 );
16583
16584 px_tasks_out_tbl(i).return_status := x_return_status;
16585
16586 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16587 IF l_debug_mode = 'Y' THEN
16588 pa_debug.g_err_stage := 'Error calling create relationship : ' || l_task_version_id ;
16589 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16590 END IF;
16591 Raise Invalid_Arg_Exc_WP;
16592 END IF;
16593
16594 IF l_debug_mode = 'Y' THEN
16595 pa_debug.g_err_stage := 'Relationship id : ' || l_relationship_id ;
16596 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
16597 END IF;
16598
16599 END IF; -- After calling PA_RELATIONSHIP_PUB Create_Relationship or Update_Relationship
16600
16601 END; -- create/update relationship record.
16602
16603
16604 -- Create or update a schedule version for the task version only if the workplan
16605 -- structure is involved.
16606
16607 IF p_is_wp_separate_from_fn = 'N' OR
16608 (p_is_wp_separate_from_fn = 'Y' and p_structure_type = 'WORKPLAN')
16609 THEN
16610
16611 -- Set the following local variables before calling Create_Schedule_Version or Update_Schedule_Version
16612 -- scheduled_start_date,scheduled_finish_date ( only for create task case)
16613 -- l_task_type_id
16614 -- l_wq_planned_quantity
16615 -- l_ver_sch_attr_rec (only for update task)
16616
16617 DECLARE
16618 l_wq_planned_quantity pa_proj_elem_ver_schedule.wq_planned_quantity%TYPE;
16619 l_scheduled_start_date pa_proj_elem_ver_schedule.scheduled_start_date%TYPE;
16620 l_scheduled_finish_date pa_proj_elem_ver_schedule.scheduled_finish_date%TYPE;
16621 l_task_type_id pa_proj_elements.type_id%TYPE;
16622 BEGIN
16623
16624 IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
16625 l_task_in_rec.pa_task_id IS NULL -- Create Task Context
16626 THEN
16627
16628 -- If start date or end date is miss date, then set them to sysdate.
16629 IF (l_task_in_rec.scheduled_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
16630 l_task_in_rec.scheduled_start_date is NULL ) --ADUT
16631 THEN
16632 l_scheduled_start_date := sysdate;
16633 ELSE
16634 l_scheduled_start_date := l_task_in_rec.scheduled_start_date;
16635 END IF;
16636
16637 IF (l_task_in_rec.scheduled_finish_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
16638 l_task_in_rec.scheduled_finish_date is NULL) --ADUT
16639 THEN
16640 l_scheduled_finish_date := sysdate;
16641 ELSE
16642 l_scheduled_finish_date := l_task_in_rec.scheduled_finish_date;
16643 END IF;
16644
16645
16646 -- If the task type for the current task is null, create_task api would have defaulted
16647 -- it to the default task id. So get the default task type id if the passed in id is null.
16648 IF l_task_in_rec.task_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM or
16649 l_task_in_rec.task_type is null
16650 THEN
16651 l_task_type_id := l_default_task_type_id;
16652 ELSE
16653 l_task_type_id := l_task_in_rec.task_type;
16654 END IF;
16655
16656 -- Need to check if the project and the task type allows for planned work quantity. If not allowed then
16657 -- set the value to null so that it can be passed on to create_schedule_version api.
16658 IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_wq_enabled(l_task_type_id) OR
16659 'N' = PA_PROGRESS_UTILS.get_project_wq_flag(p_project_id))
16660 THEN
16661 IF (l_task_in_rec.PLANNED_WORK_QUANTITY <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
16662 l_task_in_rec.PLANNED_WORK_QUANTITY IS NOT NULL)
16663 THEN
16664 l_wq_planned_quantity := NULL;
16665 END IF;
16666 ELSE
16667 --Added by rtarway, for 4029755
16668 IF (l_task_in_rec.PLANNED_WORK_QUANTITY <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
16669 l_task_in_rec.PLANNED_WORK_QUANTITY IS NOT NULL)
16670 THEN
16671 l_wq_planned_quantity := l_task_in_rec.PLANNED_WORK_QUANTITY;
16672 ELSE
16673 l_wq_planned_quantity := NULL;
16674 END IF;
16675 --Added by rtarway, for 4029755
16676
16677 END IF;
16678
16679 --bug 3035902 maansari
16680 IF pa_task_type_utils.check_tk_type_progressable(l_task_TYPE_ID) = 'Y'
16681 AND NVL( l_progressable_task, 'N' ) = 'N'
16682 THEN
16683 l_progressable_task := 'Y';
16684 END IF;
16685 --end bug 3035902 maansari
16686
16687
16688 ELSE /* in update task case */
16689 -- Added for DFF attributes and to get pev_schedule_id and record version number
16690
16691 --Bug 6153503 Need to reopen again because changes to schedule version records by the
16692 -- which is in between earlier open of the cursor and till this place.
16693
16694 OPEN cur_ver_sch_attr_rec(l_task_version_id);
16695 FETCH cur_ver_sch_attr_rec INTO l_ver_sch_attr_rec;
16696 CLOSE cur_ver_sch_attr_rec;
16697
16698 OPEN cur_task_type_id(l_task_in_rec.pa_task_id);
16699 FETCH cur_task_type_id INTO l_task_type_id;
16700 CLOSE cur_task_type_id;
16701
16702 IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_wq_enabled(l_task_type_id) OR
16703 'N' = PA_PROGRESS_UTILS.get_project_wq_flag(p_project_id)) THEN
16704 l_wq_planned_quantity := null;
16705 ELSE
16706 IF (l_task_in_rec.PLANNED_WORK_QUANTITY = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16707 --Added by rtarway, for 4029755
16708 OR
16709 l_task_in_rec.PLANNED_WORK_QUANTITY IS NULL) THEN
16710 l_wq_planned_quantity := l_ver_sch_attr_rec.wq_planned_quantity;
16711 ELSE
16712 l_wq_planned_quantity := l_task_in_rec.PLANNED_WORK_QUANTITY;
16713 END IF;
16714
16715 END IF;
16716
16717 --bug 3035902 maansari
16718 IF pa_task_type_utils.check_tk_type_progressable(l_task_TYPE_ID) = 'Y'
16719 AND NVL( l_progressable_task, 'N' ) = 'N'
16720 THEN
16721 l_progressable_task := 'Y';
16722 END IF;
16723 --end bug 3035902 maansari
16724
16725
16726 END IF; /* Before calling PA_TASK_PUB1 Create_Schedule_Version or Update_Schedule_Version*/
16727
16728 -- set the following after calling Create_Schedule_Version or Update_Schedule_Version
16729 -- px_tasks_out_tbl(i).return_status
16730
16731 IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
16732 l_task_in_rec.pa_task_id IS NULL -- Create Task Context
16733 THEN
16734 -- set the following after calling api PA_TASK_PUB1.Create_Schedule_Version
16735 -- px_tasks_out_tbl(i).return_status
16736
16737 -- Create a schedule version for the task version only if the workplan
16738 -- structure is involved.
16739
16740 IF l_debug_mode = 'Y' THEN
16741 pa_debug.g_err_stage := 'Calling API create schedule version';
16742 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16743 END IF;
16744
16745 PA_TASK_PUB1.Create_Schedule_Version(
16746 p_element_version_id => l_task_version_id
16747 ,p_init_msg_list => FND_API.G_FALSE
16748 ,p_scheduled_start_date => l_scheduled_start_date
16749 ,p_scheduled_end_date => l_scheduled_finish_date
16750 ,p_calendar_id => l_task_in_rec.calendar_id
16751 ,p_obligation_start_date => l_task_in_rec.obligation_start_date
16752 ,p_obligation_end_date => l_task_in_rec.obligation_finish_date
16753 ,p_actual_start_date => l_task_in_rec.actual_start_date
16754 ,p_actual_finish_date => l_task_in_rec.actual_finish_date
16755 ,p_estimate_start_date => l_task_in_rec.estimated_start_date
16756 ,p_estimate_finish_date => l_task_in_rec.estimated_finish_date
16757 ,p_duration => l_task_in_rec.duration
16758 ,p_early_start_date => l_task_in_rec.early_start_date
16759 ,p_early_end_date => l_task_in_rec.early_finish_date
16760 ,p_late_start_date => l_task_in_rec.late_start_date
16761 ,p_late_end_date => l_task_in_rec.late_finish_date
16762 ,p_milestone_flag => l_task_in_rec.milestone_flag
16763 ,p_critical_flag => l_task_in_rec.critical_flag
16764 ,p_WQ_PLANNED_QUANTITY => l_wq_planned_quantity
16765 ,p_PLANNED_EFFORT => l_task_in_rec.planned_effort
16766 ,p_attribute_category => l_attribute_category
16767 ,p_attribute1 => l_attribute1
16768 ,p_attribute2 => l_attribute2
16769 ,p_attribute3 => l_attribute3
16770 ,p_attribute4 => l_attribute4
16771 ,p_attribute5 => l_attribute5
16772 ,p_attribute6 => l_attribute6
16773 ,p_attribute7 => l_attribute7
16774 ,p_attribute8 => l_attribute8
16775 ,p_attribute9 => l_attribute9
16776 ,p_attribute10 => l_attribute10
16777 --Bug 6153503
16778 ,p_attribute11 => l_attribute11
16779 ,p_attribute12 => l_attribute12
16780 ,p_attribute13 => l_attribute13
16781 ,p_attribute14 => l_attribute14
16782 ,p_attribute15 => l_attribute15
16783 ,x_pev_schedule_id => l_dummy_number
16784 ,x_return_status => x_return_status
16785 ,x_msg_count => x_msg_count
16786 ,x_msg_data => x_msg_data
16787 -- (Begin Venkat) new params for bug #3652460 ----------------------------------------------
16788 ,p_ext_act_duration => l_task_in_rec.ext_act_duration
16789 ,p_ext_remain_duration => l_task_in_rec.ext_remain_duration
16790 ,p_ext_sch_duration => l_task_in_rec.ext_sch_duration
16791 -- (End Venkat) new params for bug #3652460 ------------------------------------------------
16792 -- begin Bug 3654243 -----------------------------------------------------------------------
16793 ,p_def_sch_tool_tsk_type_code => l_task_in_rec.sch_tool_tsk_type_code
16794 ,p_constraint_type_code => l_task_in_rec.constraint_type_code
16795 ,p_constraint_date => l_task_in_rec.constraint_date
16796 ,p_free_slack => l_task_in_rec.free_slack
16797 ,p_total_slack => l_task_in_rec.total_slack
16798 ,p_effort_driven_flag => l_task_in_rec.effort_driven_flag
16799 ,p_level_assignments_flag => l_task_in_rec.level_assignments_flag
16800 -- end Bug 3654243 -------------------------------------------------------------------------
16801 );
16802
16803 px_tasks_out_tbl(i).return_status := x_return_status;
16804 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16805 IF l_debug_mode = 'Y' THEN
16806 pa_debug.g_err_stage := 'Error calling create schedule version : ' || l_task_version_id ;
16807 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16808 END IF;
16809
16810 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
16811 ,p_msg_name => 'PA_PS_NO_TASK_SCH_VER_CREATED');
16812 RAISE Invalid_Arg_Exc_WP;
16813 END IF;
16814
16815 IF l_debug_mode = 'Y' THEN
16816 pa_debug.g_err_stage := 'Schedule Version id : ' || l_dummy_number ;
16817 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
16818 END IF;
16819 --rtarway, 4099429 begin
16820 -- Bug 7109656
16821 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 and l_task_in_rec.planned_effort <> '0' ) THEN
16822 if (l_add_task_ver_ids.count = 1000) then
16823 IF l_add_task_ver_ids.exists(1) AND l_structure_version_id IS NOT NULL THEN
16824 BEGIN
16825
16826 pa_fp_planning_transaction_pub.add_planning_transactions(
16827 p_context => 'WORKPLAN'
16828 ,p_project_id => p_project_id
16829 ,p_struct_elem_version_id => l_structure_version_id
16830 ,p_task_elem_version_id_tbl => l_add_task_ver_ids
16831 ,p_planned_people_effort_tbl => l_add_planned_effort
16832 ,p_start_date_tbl => l_add_start_date
16833 ,p_end_date_tbl => l_add_end_date
16834 ,p_pm_product_code => l_pm_product_code
16835 ,x_return_status => l_return_status
16836 ,x_msg_count => l_msg_count
16837 ,x_msg_data => l_msg_data
16838 );
16839
16840 EXCEPTION
16841 WHEN OTHERS THEN
16842 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_PUB',
16843 p_procedure_name => 'PROCESS_TASK_STRUCTURE_BULK',
16844 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.add_planning_transactions:'||SQLERRM,1,240));
16845 raise fnd_api.g_exc_error;
16846 END;
16847
16848 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16849 x_msg_count := FND_MSG_PUB.count_msg;
16850 raise fnd_api.g_exc_error;
16851 END IF;
16852 END IF; -- if l_add_task_ver_ids.exists(1) ends here
16853 l_add_task_ver_ids.delete;
16854 l_add_planned_effort.delete;
16855 l_add_start_date.delete;
16856 l_add_end_date.delete;
16857 l_pm_product_code.delete;
16858 end if;-- if (l_add_task_ver_ids.count = 1000)....ends here
16859 --rtarway,
16860
16861 l_add_task_ver_ids.extend(1);
16862 l_add_planned_effort.extend(1);
16863 l_add_start_date.extend(1);
16864 l_add_end_date.extend(1);
16865 l_pm_product_code.extend(1);
16866
16867 l_add_task_ver_ids(l_add_task_ver_ids.count):= px_tasks_out_tbl(i).task_version_id;
16868 l_add_planned_effort(l_add_planned_effort.count):= l_task_in_rec.planned_effort;
16869 l_add_start_date(l_add_start_date.count):= l_task_in_rec.scheduled_start_date;
16870 l_add_end_date(l_add_end_date.count):= l_task_in_rec.scheduled_finish_date;
16871 l_pm_product_code(l_pm_product_code.count) := p_pm_product_code;
16872 end if;-- if l_task_in_rec.planned_effort is not null....ends here
16873 --rtarway, 4099429 end
16874
16875
16876 ELSE -- in update task case
16877 -- set the following after calling api PA_TASK_PUB1.Update_Schedule_Version
16878 -- px_tasks_out_tbl(i).return_status
16879
16880
16881 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N'; --bug 4145893 do not call PJI.plan_update api
16882 --if tasks are updated in bulk.
16883 --This should set for every single task.
16884 PA_TASK_PUB1.Update_Schedule_Version(
16885 p_calling_module => p_calling_module
16886 ,p_init_msg_list => FND_API.G_FALSE
16887 ,p_pev_schedule_id => l_ver_sch_attr_rec.pev_schedule_id
16888 ,p_calendar_id => l_task_in_rec.calendar_id
16889 ,p_scheduled_start_date => l_task_in_rec.scheduled_start_date
16890 ,p_scheduled_end_date => l_task_in_rec.scheduled_finish_date
16891 ,p_obligation_start_date => l_task_in_rec.obligation_start_date
16892 ,p_obligation_end_date => l_task_in_rec.obligation_finish_date
16893 ,p_actual_start_date => l_task_in_rec.actual_start_date
16894 ,p_actual_finish_date => l_task_in_rec.actual_finish_date
16895 ,p_estimate_start_date => l_task_in_rec.estimated_start_date
16896 ,p_estimate_finish_date => l_task_in_rec.estimated_finish_date
16897 ,p_duration => l_task_in_rec.duration
16898 ,p_early_start_date => l_task_in_rec.early_start_date
16899 ,p_early_end_date => l_task_in_rec.early_finish_date
16900 ,p_late_start_date => l_task_in_rec.late_start_date
16901 ,p_late_end_date => l_task_in_rec.late_finish_date
16902 ,p_milestone_flag => l_task_in_rec.milestone_flag
16903 ,p_critical_flag => l_task_in_rec.critical_flag
16904 ,p_WQ_PLANNED_QUANTITY => l_wq_planned_quantity
16905 ,p_PLANNED_EFFORT => l_task_in_rec.planned_effort
16906 ,p_record_version_number => l_ver_sch_attr_rec.record_version_number
16907 --Bug 6153503
16908 ,p_attribute_category => l_attribute_category
16909 ,p_attribute1 => l_attribute1
16910 ,p_attribute2 => l_attribute2
16911 ,p_attribute3 => l_attribute3
16912 ,p_attribute4 => l_attribute4
16913 ,p_attribute5 => l_attribute5
16914 ,p_attribute6 => l_attribute6
16915 ,p_attribute7 => l_attribute7
16916 ,p_attribute8 => l_attribute8
16917 ,p_attribute9 => l_attribute9
16918 ,p_attribute10 => l_attribute10
16919 ,p_attribute11 => l_attribute11
16920 ,p_attribute12 => l_attribute12
16921 ,p_attribute13 => l_attribute13
16922 ,p_attribute14 => l_attribute14
16923 ,p_attribute15 => l_attribute15
16924 ,x_return_status => x_return_status
16925 ,x_msg_count => x_msg_count
16926 ,x_msg_data => x_msg_data
16927 -- (Begin Venkat) new params for bug #3652460 ----------------------------------------------
16928 ,p_ext_act_duration => l_task_in_rec.ext_act_duration
16929 ,p_ext_remain_duration => l_task_in_rec.ext_remain_duration
16930 ,p_ext_sch_duration => l_task_in_rec.ext_sch_duration
16931 -- (End Venkat) new params for bug #3652460 -------------------------------------------------
16932
16933 -- begin Bug 3654243 -----------------------------------------------------------------------
16934 ,p_def_sch_tool_tsk_type_code => l_task_in_rec.sch_tool_tsk_type_code
16935 ,p_constraint_type_code => l_task_in_rec.constraint_type_code
16936 ,p_constraint_date => l_task_in_rec.constraint_date
16937 ,p_free_slack => l_task_in_rec.free_slack
16938 ,p_total_slack => l_task_in_rec.total_slack
16939 ,p_effort_driven_flag => l_task_in_rec.effort_driven_flag
16940 ,p_level_assignments_flag => l_task_in_rec.level_assignments_flag
16941 -- end Bug 3654243 -------------------------------------------------------------------------
16942
16943 );
16944
16945 --bug 4149392
16946 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
16947 --end bug 4149392
16948
16949 px_tasks_out_tbl(i).return_status := x_return_status;
16950
16951 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16952 IF l_debug_mode = 'Y' THEN
16953 pa_debug.g_err_stage := 'Error calling update schedule version : ' || l_task_version_id ;
16954 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16955 END IF;
16956
16957 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
16958 ,p_msg_name => 'PA_PS_TASK_NOT_UPDATED'
16959 /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
16960 ,p_token1 => 'PROJECT'
16961 ,p_value1 => p_project_id
16962 ,p_token2 => 'TASK'
16963 ,p_value2 => l_task_in_rec.pa_task_id
16964 );
16965 RAISE Invalid_Arg_Exc_WP;
16966 END IF;
16967
16968 IF l_debug_mode = 'Y' THEN
16969 pa_debug.g_err_stage := 'Schedule Version id : ' || l_ver_sch_attr_rec.pev_schedule_id ;
16970 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
16971 END IF;
16972
16973 -- Start Addition 6458891
16974 l_update_task_det_flag := 'Y';
16975 If nvl(p_pm_product_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16976 and nvl(p_pm_product_code,'X') = 'MSPROJECT' then
16977 l_prev_planned_effort := null;
16978 l_prev_etc_effort := null;
16979 l_prev_percent_comp := null;
16980 l_update_task_det_flag:= 'N';
16981
16982 -- Bug 7158172
16983 OPEN cur_prev_prog(p_project_id,l_task_id,l_task_version_id);
16984 FETCH cur_prev_prog INTO l_prev_planned_effort, l_prev_etc_effort,l_prev_percent_comp;
16985 CLOSE cur_prev_prog;
16986
16987 IF (NVL(l_task_in_rec.planned_effort, 0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
16988 NVL(l_task_in_rec.planned_effort, 0) <> NVL(l_prev_planned_effort,0)) THEN
16989 l_update_task_det_flag := 'Y';
16990 END IF;
16991
16992 IF (NVL(l_task_in_rec.etc_effort, 0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
16993 NVL(l_task_in_rec.etc_effort, 0) <> NVL(l_prev_etc_effort,0)) THEN
16994 l_update_task_det_flag := 'Y';
16995 END IF;
16996
16997 IF (NVL(l_task_in_rec.percent_complete, 0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
16998 NVL(l_task_in_rec.percent_complete, 0) <> NVL(l_prev_percent_comp,0)) THEN
16999 l_update_task_det_flag := 'Y';
17000 END IF;
17001 -- Bug 7132911
17002
17003 /* Commented for bug 7132911
17004 If (nvl(l_task_in_rec.planned_effort,0)<> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17005 or
17006 nvl(l_task_in_rec.etc_effort,0)<> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17007 or
17008 nvl(l_task_in_rec.percent_complete,0)<> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
17009 Then
17010
17011 open cur_prev_prog(p_project_id,l_task_id,l_task_version_id);
17012 fetch cur_prev_prog into l_prev_planned_effort, l_prev_etc_effort,l_prev_percent_comp;
17013 close cur_prev_prog;
17014 If nvl(l_task_in_rec.planned_effort,0) <> nvl(l_prev_planned_effort,0)
17015 or
17016 nvl(l_task_in_rec.etc_effort,0)<> nvl(l_prev_etc_effort,0)
17017 or
17018 nvl(l_task_in_rec.percent_complete,0)<> nvl(l_prev_percent_comp,0)
17019 Then
17020 l_update_task_det_flag :='Y';
17021 end if;
17022 end if;
17023 */
17024 end if;
17025 -- End addition for bug 6458891
17026
17027 --Added by rtarway for BUG 39198900
17028 IF p_calling_module <> 'FORMS' and l_update_task_det_flag = 'Y' THEN /* Added flag check for Bug 6458891 */
17029 pa_task_pub1.update_task_det_sch_info(
17030 p_calling_module => p_calling_module
17031 ,p_task_ver_id => l_task_version_id
17032 ,p_project_id => p_project_id
17033 ,p_planned_effort => l_task_in_rec.planned_effort
17034 ,p_ETC_effort => l_task_in_rec.etc_effort
17035 ,p_structure_version_id => l_structure_version_id
17036 ,p_percent_complete => l_task_in_rec.percent_complete
17037 ,x_return_status => x_return_status
17038 ,x_msg_count => x_msg_count
17039 ,x_msg_data => x_msg_data
17040 );
17041 END IF;
17042 --End Added by rtarway for BUG 39198900
17043
17044 END IF; --end for p_tasks_in(i).pa_task_id is null
17045 END;
17046 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')
17047
17048 END LOOP; -- loop through the input tasks table.
17049 END IF; -- nvl(p_tasks_in_tbl.last,0) > 0
17050 /* Start of changes for--bug 8301015 */
17051
17052 -- Validate transaction dates
17053
17054 IF l_task_dates.COUNT <> 0 THEN
17055
17056 l_tcnt := l_task_dates.First;
17057
17058 LOOP
17059
17060 IF (nvl(l_task_dates(l_tcnt).old_start_date,sysdate) <>
17061 nvl(l_task_dates(l_tcnt).new_start_date,sysdate)) THEN
17062
17063 PA_TASKS_MAINT_UTILS.Check_Start_Date(
17064 p_project_id => l_task_dates(l_tcnt).project_id,
17065 p_parent_task_id => l_task_dates(l_tcnt).parent_task_id,
17066 p_task_id => NULL,
17067 p_start_date => l_task_dates(l_tcnt).new_start_date,
17068 x_return_status => l_return_status,
17069 x_msg_count => l_msg_count,
17070 x_msg_data => l_msg_data);
17071
17072 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
17073 PA_UTILS.ADD_MESSAGE('PA', l_msg_data);
17074 END IF;
17075
17076 END IF;
17077
17078 IF (nvl(l_task_dates(l_tcnt).old_end_date,sysdate) <>
17079 nvl(l_task_dates(l_tcnt).new_end_date,sysdate)) THEN
17080
17081 PA_TASKS_MAINT_UTILS.Check_End_Date(
17082 p_project_id => l_task_dates(l_tcnt).project_id,
17083 p_parent_task_id => l_task_dates(l_tcnt).parent_task_id,
17084 p_task_id => l_task_dates(l_tcnt).task_id,
17085 p_end_date => l_task_dates(l_tcnt).new_end_date,
17086 x_return_status => l_return_status,
17087 x_msg_count => l_msg_count,
17088 x_msg_data => l_msg_data);
17089
17090 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
17091 PA_UTILS.ADD_MESSAGE('PA', l_msg_data);
17092 END IF;
17093
17094 END IF;
17095
17096 l_msg_count := FND_MSG_PUB.count_msg;
17097 IF (l_msg_count > 0) THEN
17098 /* Start of 13931870
17099 x_msg_count := l_msg_count;
17100 IF (x_msg_count = 1) THEN
17101 pa_interface_utils_pub.get_messages(
17102 p_encoded => FND_API.G_TRUE,
17103 p_msg_index => 1,
17104 p_data => l_data,
17105 p_msg_index_out => l_msg_index_out);
17106 x_msg_data := l_data;
17107 END IF;
17108 End of 13931870*/
17109 RAISE FND_API.G_EXC_ERROR;
17110 END IF;
17111
17112 EXIT when l_tcnt = l_task_dates.Last;
17113 l_tcnt := l_task_dates.NEXT(l_tcnt);
17114
17115 END LOOP;
17116
17117 END IF;
17118
17119 /* End of changes for --bug 8301015 */
17120 -------------------------------------------------
17121 /** Code change begin for Bug 4120380 **/
17122 /** The code below will update the task_numbers of the tasks passed via update_project script
17123 back to their original value viz. it'll crop the '-' added to aviod the constraint check in
17124 PA_TASKS and PA_PROJ_ELEMENTS. **/
17125 /* bug#5243018 : Reverting the fix in Bug 4120380
17126 IF nvl(p_tasks_in_tbl.last,0) > 0 THEN --IF Added by rtarway for BUG 4336701
17127 FOR i in p_tasks_in_tbl.first..p_tasks_in_tbl.last LOOP
17128 UPDATE pa_proj_elements
17129 SET element_number = p_tasks_in_tbl(i).pa_task_number
17130 WHERE element_number = '-'||p_tasks_in_tbl(i).pa_task_number
17131 AND PROJECT_ID = p_project_id;
17132 UPDATE pa_tasks
17133 SET task_number = p_tasks_in_tbl(i).pa_task_number
17134 WHERE task_number = '-'||p_tasks_in_tbl(i).pa_task_number
17135 AND PROJECT_ID = p_project_id;
17136 --dbms_output.put_line(('value of recod updates in pa_proj_elements'||sql%rowcount);
17137 END LOOP;
17138 END IF;
17139 End Reverting bug#5243018*/
17140 /* Code change end for Bug 4120380 **/
17141 ---------------------------------------------------
17142 --Start of Changes for bug 3057575
17143 -- Here we check that while updating a project any of the tasks are missed while passing to update_project
17144 IF nvl(task_ver_id_passed_tbl.last,0) > 0 THEN -- Added for bug 3719758
17145 IF (p_structure_version_id IS NOT NULL) THEN
17146 OPEN cur_all_task_ver_id(l_structure_version_id);
17147 Loop
17148 FETCH cur_all_task_ver_id into row_task_ver_id;
17149 EXIT WHEN cur_all_task_ver_id%NOTFOUND;
17150 IF NOT(task_ver_id_passed_tbl.EXISTS(row_task_ver_id.element_version_id)) THEN
17151
17152 OPEN cur_ver_id_to_task_num(row_task_ver_id.element_version_id);
17153 FETCH cur_ver_id_to_task_num INTO l_err_task_number;
17154 CLOSE cur_ver_id_to_task_num;
17155
17156 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
17157 ,p_msg_name => 'PA_TASK_MISS_IN_HIERARCHY_ORD'
17158 ,p_token1 => 'TASK'
17159 ,p_value1 => l_err_task_number);
17160
17161 RAISE Invalid_Arg_Exc_WP;
17162 End if;
17163 END LOOP;
17164 CLOSE cur_all_task_ver_id;
17165 END IF;
17166 End If; -- Added for bug 3719758
17167 --End of Changes for bug 3057575
17168
17169 -- Bug 3075609. For some of the tasks the peer task could have moved out of the branch. In this case
17170 -- we will set the first progress enabled task of the parent to 100 and the rest to 0. If any concerns
17171 -- are raised regarding this, we will modify the logic so as to recalculate the weightage of the tasks
17172 -- as per the requirements then.
17173 -- The following is not wrapped with the l_maintain_weightages flag as if the flag is 'N' the plsql table
17174 -- of records will be null and no processing will be done.
17175 DECLARE
17176 -- This cursor will get the relationship id and the progress enabled flag which will be used to
17177 -- reassign the task weightages for the affected peer tasks.
17178 CURSOR cur_get_child_info(c_parent_element_version_id NUMBER)
17179 IS
17180 SELECT rel.OBJECT_RELATIONSHIP_ID,tt.prog_entry_enable_flag
17181 FROM PA_OBJECT_RELATIONSHIPS rel, pa_proj_element_versions pev, pa_proj_elements pe, pa_task_types tt
17182 WHERE rel.object_id_from1 = c_parent_element_version_id
17183 AND rel.object_type_to = 'PA_TASKS'
17184 AND rel.relationship_type = 'S'
17185 AND rel.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
17186 AND rel.object_id_to1 = pev.element_version_id
17187 AND pev.proj_element_id = pe.proj_element_id
17188 AND tt.object_type = 'PA_TASKS' /* bug 3279978 FP M Enhancement */
17189 AND pe.type_id = tt.task_type_id;
17190
17191 TYPE obj_rel_id_tbl is table of pa_object_relationships.object_relationship_id%TYPE
17192 INDEX BY BINARY_INTEGER;
17193
17194 l_parent_version_id pa_proj_element_versions.element_version_id%TYPE;
17195 l_prog_entry_enable_flag_tbl PA_PLSQL_DATATYPES.Char1TabTyp;
17196 l_obj_rel_id_tbl obj_rel_id_tbl;
17197 l_plsql_max_array_size CONSTANT NUMBER := 200; -- limiting the max fetch size
17198 l_task_weightage_tbl weighting_percentage_tbl;
17199 l_weightage_set_flag VARCHAR2(1);
17200 BEGIN
17201 IF nvl(l_affected_parents_tbl.last,0) > 0 THEN -- only if tasks have moved do the processing
17202 FOR l_parent_version_id in l_affected_parents_tbl.first..l_affected_parents_tbl.last LOOP
17203 l_weightage_set_flag := 'N';
17204 OPEN cur_get_child_info(l_parent_version_id);
17205 LOOP
17206 FETCH cur_get_child_info BULK COLLECT INTO
17207 l_obj_rel_id_tbl
17208 ,l_prog_entry_enable_flag_tbl
17209 LIMIT l_plsql_max_array_size;
17210
17211 IF l_debug_mode = 'Y' THEN
17212 pa_debug.g_err_stage:= 'Fetched ' || cur_get_child_info%rowcount || ' records for processing';
17213 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
17214 END IF;
17215
17216 IF nvl(l_obj_rel_id_tbl.last,0) > 0 THEN -- only if something is fetched do the processing
17217 FOR i in l_obj_rel_id_tbl.first..l_obj_rel_id_tbl.last LOOP
17218 -- Set the weightage for the first progress enabled task to 100 and rest to 0.
17219 IF l_prog_entry_enable_flag_tbl(i) = 'Y' and l_weightage_set_flag = 'N' THEN
17220 l_task_weightage_tbl(i) := 100;
17221 l_weightage_set_flag := 'Y';
17222 ELSE
17223 l_task_weightage_tbl(i) := 0;
17224 END IF;
17225 END LOOP;
17226 -- update back the records.
17227 FORALL i in l_obj_rel_id_tbl.first..l_obj_rel_id_tbl.last
17228 UPDATE pa_object_relationships
17229 set weighting_percentage = l_task_weightage_tbl(i)
17230 where object_relationship_id = l_obj_rel_id_tbl(i);
17231 END IF;
17232 EXIT WHEN nvl(l_obj_rel_id_tbl.last,0) < l_plsql_max_array_size;
17233 END LOOP;
17234 CLOSE cur_get_child_info;
17235 END LOOP;
17236 END IF;
17237 EXCEPTION
17238 WHEN OTHERS THEN
17239 IF cur_get_child_info%ISOPEN THEN
17240 close cur_get_child_info;
17241 END IF;
17242 RAISE;
17243 END;
17244
17245 -- Siva: Call the set_update_wbs_flag api here after the processing is completed for all the tasks.
17246
17247 --bug 3010538
17248 IF l_WBS_changed_flag = 'Y'
17249 THEN
17250
17251 --3035902: process update flag changes
17252 --Bug No 3450684 SMukka Commented if condition
17253 --IF NOT ( p_structure_type = 'WORKPLAN' AND
17254 -- p_is_wp_separate_from_fn = 'Y' AND
17255 -- ( PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id) = 'MANUAL' OR
17256 -- NVL( l_progressable_task, 'N' ) = 'N' ))
17257 --THEN
17258 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
17259 (
17260 p_calling_context => 'AMG'
17261 ,p_project_id => p_project_id
17262 ,p_structure_version_id => l_structure_version_id
17263 ,p_update_wbs_flag => 'Y'
17264 ,x_return_status => l_return_status
17265 ,x_msg_count => l_msg_count
17266 ,x_msg_data => l_msg_data);
17267
17268 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
17269 Raise Invalid_Arg_Exc_WP;
17270 end if;
17271 --END IF;
17272
17273 IF p_structure_type = 'FINANCIAL'
17274 THEN
17275 IF ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' OR
17276 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'Y' OR
17277 ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
17278 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
17279 PA_PROJECT_PUB.G_Published_version_exists = 'N' ) )
17280 THEN
17281 pa_fp_refresh_elements_pub.set_process_flag_proj(
17282 p_project_id => p_project_id
17283 ,p_request_id => null
17284 ,p_process_code => null
17285 ,p_refresh_required_flag => 'Y'
17286 ,x_return_status => l_return_status
17287 ,x_msg_count => l_msg_count
17288 ,x_msg_data => l_msg_data );
17289
17290 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
17291 Raise Invalid_Arg_Exc_WP;
17292 end if;
17293 END IF;
17294 END IF;
17295 END IF;
17296 --end bug 3010538
17297
17298 -- Do task status rollup, date rollup and recalculation of task weightings
17299 -- if the workplan structure is involved.
17300 IF p_is_wp_separate_from_fn = 'N' OR
17301 (p_is_wp_separate_from_fn = 'Y' and p_structure_type = 'WORKPLAN')
17302 THEN
17303 -- Call task status rollup with element version id as null so that rollup
17304 -- happens for the entire version. Status rollup needs to be done only if
17305 -- versioning is not enabled.
17306 -- 14556729:Huawei Code change to defer the roll up API when G_ROLLUP_DEFER is set to Y , so that all the roll up is processed once at the end .
17307 IF p_is_wp_versioning_enabled = 'N' and NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER, 'N') = 'N' THEN
17308
17309 IF l_debug_mode = 'Y' THEN
17310 pa_debug.g_err_stage := 'Calling API Task status rollup';
17311 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
17312 END IF;
17313
17314 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
17315 p_structure_version_id => l_structure_version_id
17316 ,p_element_version_id => null
17317 ,x_return_status => x_return_status
17318 ,x_msg_count => x_msg_count
17319 ,x_msg_data => x_msg_data
17320 );
17321
17322 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17323 IF l_debug_mode = 'Y' THEN
17324 pa_debug.g_err_stage := 'Error in task status rollup : ' || l_structure_version_id ;
17325 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
17326 END IF;
17327 Raise Invalid_Arg_Exc_WP;
17328 END IF;
17329
17330
17331 END IF; -- p_is_wp_versioning_enabled = 'N'
17332
17333
17334
17335 -- Rollup dates.
17336 IF l_debug_mode = 'Y' THEN
17337 pa_debug.g_err_stage := 'Calling API rollup dates';
17338 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
17339 END IF;
17340 --Bug3802469, rtarway, this should not be called if px_tasks_out_tbl is empty, this will be empty,
17341 --if no tasks are passed , this will be empty,
17342 -- 14556729:Huawei Code change to defer the roll up API when G_ROLLUP_DEFER is set to Y , so that all the roll up is processed once at the end .
17343 IF ( px_tasks_out_tbl IS NOT NULL AND px_tasks_out_tbl.count > 0 and NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER, 'N') = 'N')
17344 THEN
17345 PA_PROJ_TASK_STRUC_PUB.rollup_dates(
17346 p_tasks_in => px_tasks_out_tbl
17347 ,p_task_version_id => null
17348 ,p_project_id => p_project_id
17349 ,P_structure_version_id => null
17350 ,x_msg_count => x_msg_count
17351 ,x_msg_data => x_msg_data
17352 ,x_return_status => x_return_status
17353 );
17354 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17355 IF l_debug_mode = 'Y' THEN
17356 pa_debug.g_err_stage := 'Error in rollup dates : ' || l_structure_version_id ;
17357 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
17358 END IF;
17359 Raise Invalid_Arg_Exc_WP;
17360 END IF;
17361 END IF;
17362 --Bug3802469, rtarway
17363
17364 l_task_weight_basis_code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id => p_project_id) ;
17365
17366 -- Recalculate the task weightings.
17367 IF nvl(l_task_weight_basis_code,'-1') = 'MANUAL' AND
17368 (l_new_structure_version = 'Y' OR -- Bug 3075609. Recalculate the task weightings only if it is a
17369 nvl(p_create_task_versions_only,'N') = 'Y') THEN -- new structure version. Otherwise donot.
17370 IF l_debug_mode = 'Y' THEN
17371 pa_debug.g_err_stage := 'Calling API recalculate task weightings';
17372 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
17373 END IF;
17374 --Bug3802469, rtarway, this should not be called if px_tasks_out_tbl is empty, this will be empty,
17375 --if no tasks are passed , this will be empty,
17376 IF ( px_tasks_out_tbl IS NOT NULL AND px_tasks_out_tbl.count > 0)
17377 THEN
17378 PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings(
17379 p_tasks_in => px_tasks_out_tbl
17380 ,p_task_version_id => null
17381 ,x_msg_count => x_msg_count
17382 ,x_msg_data => x_msg_data
17383 ,x_return_status => x_return_status
17384 );
17385 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17386 IF l_debug_mode = 'Y' THEN
17387 pa_debug.g_err_stage := 'Error in recalculate task weightings : ' || l_structure_version_id ;
17388 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
17389 END IF;
17390 Raise Invalid_Arg_Exc_WP;
17391 END IF;
17392 END IF;
17393 --Bug3802469, rtarway, IF(null != px_tasks_out_tbl...
17394 END IF ;
17395
17396 END IF; -- p_is_wp_separate_from_fn = 'N' OR (p_is_wp_separate_from_fn = 'Y' and p_structure_type = 'WORKPLAN')
17397
17398 IF NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER, 'N') = 'N' /*added for bug#15926171 */
17399 THEN
17400 -- PA L Changes 3010538
17401 IF ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
17402 ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
17403 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
17404 PA_PROJECT_PUB.G_Published_version_exists = 'N')
17405 THEN
17406 -- Changed p_structure_version_id to l_structure_version_id Bug 3035902.
17407 l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => p_project_id
17408 ,p_structure_version_id => l_structure_version_id ) ;
17409 IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
17410 IF p_process_mode = 'ONLINE' THEN
17411
17412 IF l_debug_mode = 'Y' THEN
17413 pa_debug.g_err_stage := 'Calling API PROCESS_WBS_UPDATES';
17414 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
17415 END IF;
17416
17417 -- Changed p_structure_version_id to l_structure_version_id Bug 3035902.
17418 -- Instead of using local variables, used the out parameters for the standard parameters.
17419
17420 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context => 'ONLINE_UPDATE'
17421 ,p_project_id => p_project_id
17422 ,p_structure_version_id => l_structure_version_id
17423 ,x_return_status => x_return_status
17424 ,x_msg_count => x_msg_count
17425 ,x_msg_data => x_msg_data ) ;
17426
17427 -- Changed the way in which the error is handled.
17428 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17429 IF l_debug_mode = 'Y' THEN
17430 pa_debug.g_err_stage := 'Error in process_wbs_updates : ';
17431 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
17432 END IF;
17433 Raise Invalid_Arg_Exc_WP;
17434 END IF;
17435
17436 ELSIF p_process_mode = 'CONCURRENT' THEN
17437
17438 IF l_debug_mode = 'Y' THEN
17439 pa_debug.g_err_stage := 'Calling API PROCESS_WBS_UPDATES_CONC_WRP';
17440 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
17441 END IF;
17442
17443 -- Changed p_structure_version_id to l_structure_version_id Bug 3035902.
17444 -- Instead of using local variables, used the out parameters for the standard parameters.
17445 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context => 'CONC_UPDATE'
17446 ,p_project_id => p_project_id
17447 ,p_structure_version_id => l_structure_version_id
17448 ,x_return_status => x_return_status
17449 ,x_msg_count => x_msg_count
17450 ,x_msg_data => x_msg_data ) ;
17451 -- Changed the way in which the error is handled.
17452 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17453 IF l_debug_mode = 'Y' THEN
17454 pa_debug.g_err_stage := 'Error in process_wbs_updates_conc_wrp : ';
17455 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
17456 END IF;
17457 Raise Invalid_Arg_Exc_WP;
17458 END IF;
17459
17460 END IF ;
17461 END IF ;
17462 END IF ;
17463 END IF;
17464 --Amit : Bug 3964548 Begin
17465 -- added IF condition for Huawei enhancement - bug 13923366 by skkoppul
17466 -- skip unnecessary processing during bulk update mode
17467 IF NVL(PA_PROJECT_PUB.G_MASS_UPDATE_TASKS,'N') = 'N' THEN
17468
17469 IF l_debug_mode = 'Y' THEN
17470 Pa_Debug.g_err_stage:= 'Calling FP add_planning Txn APIs';
17471 Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,l_debug_level3);
17472 Pa_Debug.WRITE(G_PKG_NAME,'p_structure_type='||p_structure_type,l_debug_level3);
17473 Pa_Debug.WRITE(G_PKG_NAME,'p_is_wp_separate_from_fn='||p_is_wp_separate_from_fn,l_debug_level3);
17474 Pa_Debug.WRITE(G_PKG_NAME,'p_tasks_in_tbl.count='||p_tasks_in_tbl.count,l_debug_level3);
17475 Pa_Debug.WRITE(G_PKG_NAME,'p_structure_version_id='||p_structure_version_id,l_debug_level3);
17476 Pa_Debug.WRITE(G_PKG_NAME,'l_structure_version_id='||l_structure_version_id,l_debug_level3);
17477 END IF;
17478
17479 IF ((p_structure_type = 'WORKPLAN' AND p_is_wp_separate_from_fn = 'Y') OR p_is_wp_separate_from_fn = 'N' ) THEN
17480 -- 4198962 Moved call of add_planning_transactions before population of l_del_task_ver_ids
17481 IF l_add_task_ver_ids.exists(1) AND l_structure_version_id IS NOT NULL THEN
17482 BEGIN
17483 pa_fp_planning_transaction_pub.add_planning_transactions(
17484 p_context => 'WORKPLAN'
17485 ,p_project_id => p_project_id
17486 ,p_struct_elem_version_id => l_structure_version_id
17487 ,p_task_elem_version_id_tbl => l_add_task_ver_ids
17488 ,p_planned_people_effort_tbl => l_add_planned_effort
17489 ,p_start_date_tbl => l_add_start_date
17490 ,p_end_date_tbl => l_add_end_date
17491 ,p_pm_product_code => l_pm_product_code
17492 ,x_return_status => l_return_status
17493 ,x_msg_count => l_msg_count
17494 ,x_msg_data => l_msg_data
17495 );
17496 EXCEPTION
17497 WHEN OTHERS THEN
17498 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_PUB',
17499 p_procedure_name => 'PROCESS_TASK_STRUCTURE_BULK',
17500 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.add_planning_transactions:'||SQLERRM,1,240));
17501 raise fnd_api.g_exc_error;
17502 END;
17503
17504 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17505 x_msg_count := FND_MSG_PUB.count_msg;
17506 raise fnd_api.g_exc_error;
17507 END IF;
17508 END IF; -- l_add_task_ver_ids.exists(1) THEN
17509
17510 IF nvl(p_tasks_in_tbl.LAST,0) > 0 THEN
17511 FOR l_i in p_tasks_in_tbl.first .. p_tasks_in_tbl.last LOOP
17512 --rtarway, 4099429, begin comment
17513 /*IF p_tasks_in_tbl(l_i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
17514 p_tasks_in_tbl(l_i).pa_task_id IS NULL -- Create Task Context
17515 THEN
17516 l_add_plan_task_id := null;
17517 IF p_structure_version_id is not null THEN -- Update Project Context
17518 OPEN cur_wp_task_csr_duplicate(p_project_id,p_tasks_in_tbl(l_i).pm_task_reference);
17519 FETCH cur_wp_task_csr_duplicate INTO l_add_plan_task_id;
17520 CLOSE cur_wp_task_csr_duplicate;
17521 END IF;
17522
17523 IF l_debug_mode = 'Y' THEN
17524 Pa_Debug.WRITE(G_PKG_NAME,'Create Task Context',l_debug_level3);
17525 END IF;
17526 IF PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(px_tasks_out_tbl(l_i).task_version_id) = 'Y'
17527 AND pa_task_assignment_utils.check_asgmt_exists_in_task(px_tasks_out_tbl(l_i).task_version_id) = 'N'
17528 THEN
17529 IF l_debug_mode = 'Y' THEN
17530 Pa_Debug.WRITE(G_PKG_NAME,'Lowest Task With No Assignments',l_debug_level3);
17531 END IF;
17532
17533 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
17534 AND l_add_plan_task_id IS NULL
17535 THEN
17536 IF l_debug_mode = 'Y' THEN
17537 Pa_Debug.WRITE(G_PKG_NAME,'Preparing Tables to call FP add_plan_txn',l_debug_level3);
17538 END IF;
17539
17540 l_add_task_ver_ids.extend(1);
17541 l_add_planned_effort.extend(1);
17542 l_add_start_date.extend(1);
17543 l_add_end_date.extend(1);
17544 l_pm_product_code.extend(1);
17545
17546 l_add_task_ver_ids(l_add_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
17547 l_add_planned_effort(l_add_planned_effort.count):= p_tasks_in_tbl(l_i).planned_effort;
17548 l_add_start_date(l_add_start_date.count):= p_tasks_in_tbl(l_i).scheduled_start_date;
17549 l_add_end_date(l_add_end_date.count):= p_tasks_in_tbl(l_i).scheduled_finish_date;
17550 l_pm_product_code(l_pm_product_code.count) := p_pm_product_code;
17551 IF l_debug_mode = 'Y' THEN
17552 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);
17553 Pa_Debug.WRITE(G_PKG_NAME,'l_add_planned_effort='||l_add_planned_effort(l_add_planned_effort.count),l_debug_level3);
17554 Pa_Debug.WRITE(G_PKG_NAME,'l_add_start_date='||l_add_start_date(l_add_start_date.count),l_debug_level3);
17555 Pa_Debug.WRITE(G_PKG_NAME,'l_add_end_date='||l_add_end_date(l_add_end_date.count),l_debug_level3);
17556 Pa_Debug.WRITE(G_PKG_NAME,'l_pm_product_code='||l_pm_product_code(l_pm_product_code.count),l_debug_level3);
17557 END IF;
17558 END IF;
17559 --As per discussion with Amit we will never enter this else part
17560 ELSE
17561 IF l_debug_mode = 'Y' THEN
17562 Pa_Debug.WRITE(G_PKG_NAME,'Preparing Tables to call FP delete_plan_txn',l_debug_level3);
17563 END IF;
17564 l_del_task_ver_ids.extend(1);
17565 l_del_task_ver_ids(l_del_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
17566 END IF;
17567 ELSE -- Update Task Context
17568 IF l_debug_mode = 'Y' THEN
17569 Pa_Debug.WRITE(G_PKG_NAME,'Update Task Context',l_debug_level3);
17570 END IF;
17571
17572 -- Bug 4078307: Changes start
17573 -- In update task flow we should be deleting all task assignments for summary-level tasks
17574 IF PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(px_tasks_out_tbl(l_i).task_version_id) = 'N'
17575 AND pa_task_assignment_utils.check_asgmt_exists_in_task(px_tasks_out_tbl(l_i).task_version_id) = 'Y'
17576 THEN
17577 IF l_debug_mode = 'Y' THEN
17578 Pa_Debug.WRITE(G_PKG_NAME,'Preparing Tables to call FP delete_plan_txn for summary task in update flow',l_debug_level3);
17579 END IF;
17580
17581 l_del_task_ver_ids.extend(1);
17582 l_del_task_ver_ids(l_del_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
17583 END IF;
17584
17585
17586 IF PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(px_tasks_out_tbl(l_i).task_version_id) = 'Y'
17587 AND pa_task_assignment_utils.check_asgmt_exists_in_task(px_tasks_out_tbl(l_i).task_version_id) = 'N'
17588 THEN
17589 -- We do not have to call update_planning_transaction here bcoz
17590 -- update_schedule_version is already calling it.
17591 null;
17592 ELSE
17593 IF l_debug_mode = 'Y' THEN
17594 Pa_Debug.WRITE(G_PKG_NAME,'Preparing Tables to call FP delete_plan_txn',l_debug_level3);
17595 END IF;
17596
17597 l_del_task_ver_ids.extend(1);
17598 l_del_task_ver_ids(l_del_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
17599 END IF;
17600
17601 -- Bug 4078307: Changes End
17602 END IF;-- Create Task Context*/
17603 --rtarway, 4099429, end comment
17604
17605 -- Bug 7437034 (Initialize l_hidden_assgn to N for each iteration)
17606 l_hidden_assgn := 'N';
17607
17608 --rtarway, 4099429, begin add
17609 --rtarway, 4132590, begin add
17610 OPEN check_hidden_assgn_exists(px_tasks_out_tbl(l_i).task_version_id);
17611 FETCH check_hidden_assgn_exists into l_hidden_assgn;
17612 CLOSE check_hidden_assgn_exists;
17613 --rtarway, 4132590, end add
17614
17615 IF (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(px_tasks_out_tbl(l_i).task_version_id) = 'N'
17616 --AND pa_task_assignment_utils.check_asgmt_exists_in_task(px_tasks_out_tbl(l_i).task_version_id) = 'Y')
17617 AND l_hidden_assgn = 'Y')--modified by rtarway for BUG 4132590
17618 THEN
17619 IF l_debug_mode = 'Y' THEN
17620 Pa_Debug.WRITE(G_PKG_NAME,'Preparing Tables to call FP delete_plan_txn for summary task in update flow',l_debug_level3);
17621 END IF;
17622
17623 if (l_del_task_ver_ids.count = 1000) then
17624 IF l_del_task_ver_ids.exists(1) THEN
17625 BEGIN
17626 pa_fp_planning_transaction_pub.delete_planning_transactions(
17627 p_context => 'WORKPLAN'
17628 ,p_task_or_res => 'TASKS'
17629 ,p_element_version_id_tbl => l_del_task_ver_ids
17630 ,x_return_status => l_return_status
17631 ,x_msg_count => l_msg_count
17632 ,x_msg_data => l_msg_data
17633 );
17634 EXCEPTION
17635 WHEN OTHERS THEN
17636 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_PUB',
17637 p_procedure_name => 'PROCESS_TASK_STRUCTURE_BULK',
17638 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
17639 raise fnd_api.g_exc_error;
17640 END;
17641
17642 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17643 x_msg_count := FND_MSG_PUB.count_msg;
17644 raise fnd_api.g_exc_error;
17645 END IF;
17646 END IF; -- l_del_task_ver_ids.exists(1) THEN
17647 l_del_task_ver_ids.delete;
17648 end if;
17649 l_del_task_ver_ids.extend(1);
17650 l_del_task_ver_ids(l_del_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
17651 END IF;
17652 --rtarway, 4099429, end add
17653 END LOOP;
17654 END IF; -- nvl(p_tasks_in_tbl.LAST,0) > 0 THEN
17655 -- 4198962 Moved call of add_planning_transactions before population of l_del_task_ver_ids
17656
17657 IF l_del_task_ver_ids.exists(1) THEN
17658 BEGIN
17659 pa_fp_planning_transaction_pub.delete_planning_transactions(
17660 p_context => 'WORKPLAN'
17661 ,p_task_or_res => 'TASKS'
17662 ,p_element_version_id_tbl => l_del_task_ver_ids
17663 ,x_return_status => l_return_status
17664 ,x_msg_count => l_msg_count
17665 ,x_msg_data => l_msg_data
17666 );
17667 EXCEPTION
17668 WHEN OTHERS THEN
17669 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_PUB',
17670 p_procedure_name => 'PROCESS_TASK_STRUCTURE_BULK',
17671 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
17672 raise fnd_api.g_exc_error;
17673 END;
17674
17675 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17676 x_msg_count := FND_MSG_PUB.count_msg;
17677 raise fnd_api.g_exc_error;
17678 END IF;
17679 END IF; -- l_del_task_ver_ids.exists(1) THEN
17680 END IF; --((p_structure_type = 'WORKPLAN' AND p_is_wp_separate_from_fn = 'Y') OR p_is_wp_separate_from_fn = 'N' )
17681 --Amit : Bug 3964548 End
17682
17683 END IF; -- end changes for bug 13923366
17684
17685 -- PA L Changes 3010538
17686
17687 --IF (p_structure_version_id IS NOT NULL) then /* create project case */
17688 --
17689 --/* Bug # 3420093 - Adding Progress Management modifications to create_project flow. */
17690 ----BUG 3835474 , rtarway, Added OR condition for shared structures
17691 -- if (p_structure_type = 'WORKPLAN' OR p_is_wp_separate_from_fn = 'N' ) then
17692 --
17693 -- --Bug3802469, rtarway, This loop will not be successfull if p_tasks_in_tbl is empty.
17694 -- --Check should be put before this loop to check if p_tasks_in_tbl is empty
17695 -- if ( p_tasks_in_tbl IS NOT NULL AND p_tasks_in_tbl.count > 0)
17696 -- then
17697 -- for l_i in p_tasks_in_tbl.first .. p_tasks_in_tbl.last
17698 -- loop
17699 -- if (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(px_tasks_out_tbl(l_i).task_version_id) = 'Y') then
17700 -- l_add_task_ver_ids.extend(1);
17701 -- l_add_planned_effort.extend(1);
17702 -- l_add_start_date.extend(1);
17703 -- l_add_end_date.extend(1);
17704 --
17705 -- l_add_task_ver_ids(l_add_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
17706 -- l_add_planned_effort(l_add_planned_effort.count):= p_tasks_in_tbl(l_i).planned_effort;
17707 -- l_add_start_date(l_add_start_date.count):= p_tasks_in_tbl(l_i).actual_start_date;
17708 -- l_add_end_date(l_add_end_date.count):= p_tasks_in_tbl(l_i).actual_finish_date;
17709 -- else
17710 -- l_del_task_ver_ids.extend(1);
17711 --
17712 -- l_del_task_ver_ids(l_del_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
17713 -- end if;
17714 -- end loop;
17715 -- end if;--Bug3802469, rtarway
17716 -- end if;
17717 --
17718 -- -- Calling pa_task_pub1.call_add_planning_txns for lowest level tasks.
17719 --
17720 --
17721 -- begin
17722 -- --BUG 3802469, rtarway , if the tasks table is empty, l_add_task_ver_ids will not be populated.
17723 -- --Check needed before calling call_add_planning_txns, to see if l_add_task_ver_ids is empty
17724 -- if ( l_add_task_ver_ids IS NOT NULL AND l_add_task_ver_ids.count > 0)
17725 -- then
17726 -- pa_task_pub1.call_add_planning_txns(
17727 -- p_tasks_ver_ids => l_add_task_ver_ids,
17728 -- p_planned_effort => l_add_planned_effort,
17729 -- p_project_id => p_project_id,
17730 -- p_structure_version_id => l_structure_version_id, --replace p_structure_version_id, bug 3838186
17731 -- p_start_date => l_add_start_date,
17732 -- p_end_date => l_add_end_date,
17733 -- p_pm_product_code => p_pm_product_code, --bug 3811243
17734 -- x_return_status => l_return_status,
17735 -- x_msg_count => l_msg_count,
17736 -- x_msg_data => l_msg_data
17737 -- );
17738 -- else
17739 -- null;--BUG 3802469, rtarway
17740 -- end if;
17741 -- exception
17742 -- when others then
17743 -- fnd_msg_pub.add_exc_msg(p_pkg_name => 'pa_project_pub',
17744 -- p_procedure_name => 'CREATE_PROJECT',
17745 -- p_error_text => substrb('PA_TASK_PUB1.CALL_ADD_PLANNING_TXNS:'||sqlerrm,1,240));
17746 -- raise fnd_api.g_exc_error;
17747 -- end;
17748 --
17749 -- -- Calling pa_fp_planning_transaction_pub.delete_planning_transactions for higher level tasks.
17750 --
17751 -- begin
17752 -- --BUG 3802469, rtarway , if the tasks table is empty, l_del_task_ver_ids will not be populated.
17753 -- --Check needed before calling delete_planning_transactions, to see if l_del_task_ver_ids is empty
17754 -- if ( l_del_task_ver_ids IS NOT NULL AND l_del_task_ver_ids.count > 0)
17755 -- then
17756 -- pa_fp_planning_transaction_pub.delete_planning_transactions
17757 -- (
17758 -- p_context => 'WORKPLAN'
17759 -- ,p_task_or_res => 'TASKS'
17760 -- ,p_element_version_id_tbl => l_del_task_ver_ids
17761 -- ,x_return_status => l_return_status
17762 -- ,x_msg_count => l_msg_count
17763 -- ,x_msg_data => l_msg_data
17764 -- );
17765 -- else
17766 -- null;
17767 -- end if;
17768 -- exception
17769 -- when others then
17770 -- fnd_msg_pub.add_exc_msg(p_pkg_name => 'pa_project_pub',
17771 -- p_procedure_name => 'CREATE_PROJECT',
17772 -- p_error_text => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.DELETE_PLANNING_TRANSACTIONS:'||SQLERRM,1,240));
17773 -- raise fnd_api.g_exc_error;
17774 -- end;
17775 --
17776 --/* Bug # 3420093 - Adding Progress Management modifications to create_project flow. */
17777 --
17778 --else /* update project case */
17779 --
17780 --/* Bug # 3420093 - Adding Progress Management modifications to update_project flow. */
17781 --BUG 3835474 , rtarway, Added OR condition for shared structures
17782 -- if (p_structure_type = 'WORKPLAN' OR p_is_wp_separate_from_fn = 'N' ) then
17783 --
17784 -- --BUG3802469, rtarway, comment only, no code change
17785 -- --if the str version being updated has no tasks, this loop will not run and l_add_task_ver_ids and
17786 -- --l_del_task_ver_ids will not be populated. before passing these tables to add_planning_transaction
17787 -- --or delete_planning_transaction, checks should be made
17788 -- for l_task_cur_rec in l_task_cur(p_project_id)
17789 -- loop
17790 -- if (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(l_task_cur_rec.element_version_id) = 'Y') then
17791 -- l_add_task_ver_ids.extend(1);
17792 -- l_add_planned_effort.extend(1);
17793 -- l_add_start_date.extend(1);
17794 -- l_add_end_date.extend(1);
17795 --
17796 -- l_add_task_ver_ids(l_add_task_ver_ids.count):= l_task_cur_rec.element_version_id;
17797 -- l_add_planned_effort(l_add_planned_effort.count):= l_task_cur_rec.planned_effort;
17798 -- l_add_start_date(l_add_start_date.count):= l_task_cur_rec.actual_start_date;
17799 -- l_add_end_date(l_add_end_date.count):= l_task_cur_rec.actual_finish_date;
17800 -- else
17801 -- l_del_task_ver_ids.extend(1);
17802 --
17803 -- l_del_task_ver_ids(l_del_task_ver_ids.count):= l_task_cur_rec.element_version_id;
17804 -- end if;
17805 -- end loop;
17806 -- end if;
17807 --
17808 -- -- Calling pa_task_pub1.call_add_planning_txns for lowest level tasks.
17809 --
17810 -- begin
17811 -- --BUG3802469, rtarway, see comments above
17812 -- if ( l_add_task_ver_ids IS NOT NULL and l_add_task_ver_ids.count > 0)
17813 -- then
17814 -- pa_task_pub1.call_add_planning_txns(
17815 -- p_tasks_ver_ids => l_add_task_ver_ids,
17816 -- p_planned_effort => l_add_planned_effort,
17817 -- p_project_id => p_project_id,
17818 -- p_structure_version_id => l_structure_version_id, --replace p_structure_version_id, bug 3838186
17819 -- p_start_date => l_add_start_date,
17820 -- p_end_date => l_add_end_date,
17821 -- p_pm_product_code => p_pm_product_code, --bug 3811243
17822 -- x_return_status => l_return_status,
17823 -- x_msg_count => l_msg_count,
17824 -- x_msg_data => l_msg_data
17825 -- );
17826 -- else
17827 -- null;
17828 -- end if;
17829 -- exception
17830 -- when others then
17831 -- fnd_msg_pub.add_exc_msg(p_pkg_name => 'pa_project_pub',
17832 -- p_procedure_name => 'CREATE_PROJECT',
17833 -- p_error_text => substrb('PA_TASK_PUB1.CALL_ADD_PLANNING_TXNS:'||sqlerrm,1,240));
17834 -- raise fnd_api.g_exc_error;
17835 -- end;
17836 --
17837 -- -- Calling pa_fp_planning_transaction_pub.delete_planning_transactions for higher level tasks.
17838 --
17839 -- begin
17840 -- --BUG3802469, rtarway, see comments above
17841 -- if ( l_del_task_ver_ids IS NOT NULL and l_del_task_ver_ids.count > 0)
17842 -- then
17843 -- pa_fp_planning_transaction_pub.delete_planning_transactions
17844 -- (
17845 -- p_context => 'WORKPLAN'
17846 -- ,p_task_or_res => 'TASKS'
17847 -- ,p_element_version_id_tbl => l_del_task_ver_ids
17848 -- ,x_return_status => l_return_status
17849 -- ,x_msg_count => l_msg_count
17850 -- ,x_msg_data => l_msg_data
17851 -- );
17852 -- else
17853 -- null;
17854 -- end if;
17855 -- exception
17856 -- when others then
17857 -- fnd_msg_pub.add_exc_msg(p_pkg_name => 'pa_project_pub',
17858 -- p_procedure_name => 'CREATE_PROJECT',
17859 -- p_error_text => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.DELETE_PLANNING_TRANSACTIONS:'||SQLERRM,1,240));
17860 -- raise fnd_api.g_exc_error;
17861 -- end;
17862
17863 --/* Bug # 3420093 - Adding Progress Management modifications to update_project flow. */
17864
17865 --end if;
17866
17867 IF l_debug_mode = 'Y' THEN
17868 pa_debug.g_err_stage:= 'Exiting PROCESS_TASK_STRUCTURE_BULK';
17869 pa_debug.write(l_module_name,pa_debug.g_err_stage,
17870 l_debug_level2);
17871 pa_debug.reset_curr_function;
17872
17873 END IF;
17874
17875 EXCEPTION
17876
17877 /* Start of Bug13931870 */
17878 WHEN fnd_api.g_exc_error THEN
17879
17880 IF l_debug_mode = 'Y' THEN
17881 pa_debug.g_err_stage:= 'In fnd_api.g_exc_error exception block';
17882 pa_debug.write(l_module_name,pa_debug.g_err_stage,
17883 l_debug_level4);
17884 END IF;
17885
17886 x_return_status := FND_API.G_RET_STS_ERROR;
17887 l_msg_count := FND_MSG_PUB.count_msg;
17888
17889 IF get_structure%ISOPEN THEN
17890 CLOSE get_structure;
17891 END IF;
17892
17893 IF l_amg_project_csr%ISOPEN THEN
17894 CLOSE l_amg_project_csr;
17895 END IF;
17896
17897 IF cur_pa_tasks%ISOPEN THEN
17898 CLOSE cur_pa_tasks;
17899 END IF;
17900
17901 IF cur_template_flag%ISOPEN THEN
17902 CLOSE cur_template_flag;
17903 END IF;
17904
17905 IF cur_rec_ver_num%ISOPEN THEN
17906 CLOSE cur_rec_ver_num;
17907 END IF;
17908
17909 IF cur_pa_task_ver%ISOPEN THEN
17910 CLOSE cur_pa_task_ver;
17911 END IF;
17912
17913 IF cur_parent_object_rel%ISOPEN THEN
17914 CLOSE cur_parent_object_rel;
17915 END IF;
17916
17917 IF cur_ver_sch_attr_rec%ISOPEN THEN
17918 CLOSE cur_ver_sch_attr_rec;
17919 END IF;
17920
17921 IF cur_task_type_id%ISOPEN THEN
17922 CLOSE cur_task_type_id;
17923 END IF;
17924
17925 IF cur_elem_ver_to_task_id%ISOPEN THEN
17926 CLOSE cur_elem_ver_to_task_id;
17927 END IF;
17928
17929 IF cur_all_task_ver_id%ISOPEN THEN
17930 CLOSE cur_all_task_ver_id;
17931 END IF;
17932
17933
17934
17935 IF l_msg_count = 1 and x_msg_data IS NULL THEN
17936 PA_INTERFACE_UTILS_PUB.get_messages
17937 (p_encoded => FND_API.G_TRUE
17938 ,p_msg_index => 1
17939 ,p_msg_count => l_msg_count
17940 ,p_msg_data => l_msg_data
17941 ,p_data => l_data
17942 ,p_msg_index_out => l_msg_index_out);
17943 x_msg_data := l_data;
17944 x_msg_count := l_msg_count;
17945 ELSE
17946 x_msg_count := l_msg_count;
17947 END IF;
17948
17949 IF l_debug_mode = 'Y' THEN
17950 pa_debug.reset_curr_function;
17951 END IF;
17952
17953 IF p_commit = FND_API.G_TRUE THEN
17954 rollback to process_task_struc;
17955 END IF;
17956
17957 RETURN;
17958 /* End of Bug 13931870 */
17959
17960 WHEN Invalid_Arg_Exc_WP THEN
17961
17962 IF l_debug_mode = 'Y' THEN
17963 pa_debug.g_err_stage:= 'In PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc exception block';
17964 pa_debug.write(l_module_name,pa_debug.g_err_stage,
17965 l_debug_level4);
17966 END IF;
17967
17968 x_return_status := FND_API.G_RET_STS_ERROR;
17969 l_msg_count := FND_MSG_PUB.count_msg;
17970
17971 -- IF cur_auto_pub_flag%ISOPEN THEN
17972 -- CLOSE cur_auto_pub_flag;
17973 -- END IF;
17974
17975
17976 IF get_structure%ISOPEN THEN
17977 CLOSE get_structure;
17978 END IF;
17979
17980 IF l_amg_project_csr%ISOPEN THEN
17981 CLOSE l_amg_project_csr;
17982 END IF;
17983
17984 IF cur_pa_tasks%ISOPEN THEN
17985 CLOSE cur_pa_tasks;
17986 END IF;
17987
17988 IF cur_template_flag%ISOPEN THEN
17989 CLOSE cur_template_flag;
17990 END IF;
17991
17992 IF cur_rec_ver_num%ISOPEN THEN
17993 CLOSE cur_rec_ver_num;
17994 END IF;
17995
17996 IF cur_pa_task_ver%ISOPEN THEN
17997 CLOSE cur_pa_task_ver;
17998 END IF;
17999
18000 IF cur_parent_object_rel%ISOPEN THEN
18001 CLOSE cur_parent_object_rel;
18002 END IF;
18003
18004 IF cur_ver_sch_attr_rec%ISOPEN THEN
18005 CLOSE cur_ver_sch_attr_rec;
18006 END IF;
18007
18008 IF cur_task_type_id%ISOPEN THEN
18009 CLOSE cur_task_type_id;
18010 END IF;
18011
18012 IF cur_elem_ver_to_task_id%ISOPEN THEN
18013 CLOSE cur_elem_ver_to_task_id;
18014 END IF;
18015
18016 IF cur_all_task_ver_id%ISOPEN THEN
18017 CLOSE cur_all_task_ver_id;
18018 END IF;
18019
18020 IF l_msg_count = 1 and x_msg_data IS NULL THEN
18021 PA_INTERFACE_UTILS_PUB.get_messages
18022 (p_encoded => FND_API.G_TRUE
18023 ,p_msg_index => 1
18024 ,p_msg_count => l_msg_count
18025 ,p_msg_data => l_msg_data
18026 ,p_data => l_data
18027 ,p_msg_index_out => l_msg_index_out);
18028 x_msg_data := l_data;
18029 x_msg_count := l_msg_count;
18030 ELSE
18031 x_msg_count := l_msg_count;
18032 END IF;
18033
18034 IF l_debug_mode = 'Y' THEN
18035 pa_debug.reset_curr_function;
18036 END IF;
18037
18038 IF p_commit = FND_API.G_TRUE THEN
18039 rollback to process_task_struc;
18040 END IF;
18041
18042 RETURN;
18043
18044 WHEN others THEN
18045
18046 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
18047 x_msg_count := 1;
18048 x_msg_data := SQLERRM;
18049
18050 -- IF cur_auto_pub_flag%ISOPEN THEN
18051 -- CLOSE cur_auto_pub_flag;
18052 -- END IF;
18053
18054
18055 IF get_structure%ISOPEN THEN
18056 CLOSE get_structure;
18057 END IF;
18058
18059 IF l_amg_project_csr%ISOPEN THEN
18060 CLOSE l_amg_project_csr;
18061 END IF;
18062
18063 IF cur_pa_tasks%ISOPEN THEN
18064 CLOSE cur_pa_tasks;
18065 END IF;
18066
18067 IF cur_template_flag%ISOPEN THEN
18068 CLOSE cur_template_flag;
18069 END IF;
18070
18071 IF cur_rec_ver_num%ISOPEN THEN
18072 CLOSE cur_rec_ver_num;
18073 END IF;
18074
18075 IF cur_pa_task_ver%ISOPEN THEN
18076 CLOSE cur_pa_task_ver;
18077 END IF;
18078
18079 IF cur_parent_object_rel%ISOPEN THEN
18080 CLOSE cur_parent_object_rel;
18081 END IF;
18082
18083 IF cur_ver_sch_attr_rec%ISOPEN THEN
18084 CLOSE cur_ver_sch_attr_rec;
18085 END IF;
18086
18087 IF cur_task_type_id%ISOPEN THEN
18088 CLOSE cur_task_type_id;
18089 END IF;
18090
18091 IF cur_elem_ver_to_task_id%ISOPEN THEN
18092 CLOSE cur_elem_ver_to_task_id;
18093 END IF;
18094
18095 IF cur_all_task_ver_id%ISOPEN THEN
18096 CLOSE cur_all_task_ver_id;
18097 END IF;
18098
18099 FND_MSG_PUB.add_exc_msg
18100 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
18101 ,p_procedure_name => 'PROCESS_TASK_STRUCTURE_BULK'
18102 ,p_error_text => x_msg_data
18103 );
18104
18105 IF l_debug_mode = 'Y' THEN
18106 pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
18107 pa_debug.write(l_module_name,pa_debug.g_err_stage,
18108 l_debug_level6);
18109 pa_debug.reset_curr_function;
18110
18111 END IF;
18112
18113 IF p_commit = FND_API.G_TRUE THEN
18114 rollback to process_task_struc;
18115 END IF;
18116
18117 -- rollback to process_task_struc; Commented during UT.
18118 RAISE;
18119 END PROCESS_TASK_STRUCTURE_BULK;
18120
18121
18122 --Bug 2947492 ( delete )
18123 PROCEDURE delete_fin_plan_from_task(
18124 p_task_id NUMBER
18125 ,p_project_id NUMBER
18126 ,p_calling_module VARCHAR2 := 'FORMS'
18127 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
18128 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
18129 ,x_msg_data OUT NOCOPY VARCHAR2) IS --File.Sql.39 bug 4440895
18130
18131
18132 l_plannable_tasks_tbl PA_FP_ELEMENTS_PUB.l_impacted_task_in_tbl_typ;
18133 l_parent_task_id NUMBER;
18134 l_top_task_id NUMBER;
18135 l_return_status VARCHAR2(1);
18136 l_msg_data VARCHAR2(4000);
18137 l_msg_count NUMBER;
18138 l_msg_index_out NUMBER;
18139 l_data VARCHAR2(4000);
18140 API_ERROR EXCEPTION;
18141
18142 CURSOR get_parent_task_id IS
18143 SELECT parent_task_id, top_task_id
18144 FROM pa_tasks
18145 WHERE project_id = p_project_id
18146 AND task_id = p_task_id;
18147
18148 BEGIN
18149
18150 SAVEPOINT plan_tasks;
18151
18152 OPEN get_parent_task_id;
18153 FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id;
18154 CLOSE get_parent_task_id;
18155
18156 l_plannable_tasks_tbl(1).impacted_task_id := p_task_id;
18157 l_plannable_tasks_tbl(1).action := 'DELETE';
18158 l_plannable_tasks_tbl(1).old_parent_task_id := l_parent_task_id;
18159 l_plannable_tasks_tbl(1).top_task_id := l_top_task_id;
18160
18161 /*
18162 -- Commented out as no more using for doosan customer
18163 -- commented by skannoji
18164 -- commenting out as per mail from venkatesh dated 22 jan 04 -- maansari
18165 PA_FP_ELEMENTS_PUB.MAINTAIN_PLANNABLE_TASKS(
18166 p_project_id => p_project_id
18167 , p_impacted_tasks_tbl => l_plannable_tasks_tbl
18168 , x_return_status => l_return_status
18169 , x_msg_data => l_msg_data
18170 , x_msg_count => l_msg_count
18171 );
18172
18173 l_msg_count := FND_MSG_PUB.count_msg;
18174 if l_msg_count > 0 then
18175 x_msg_count := l_msg_count;
18176 if x_msg_count = 1 then
18177 pa_interface_utils_pub.get_messages
18178 (p_encoded => FND_API.G_TRUE,
18179 p_msg_index => 1,
18180 p_msg_count => l_msg_count,
18181 p_msg_data => l_msg_data,
18182 p_data => l_data,
18183 p_msg_index_out => l_msg_index_out);
18184 x_msg_data := l_data;
18185 end if;
18186 raise API_ERROR;
18187 end if;
18188 */
18189
18190 x_return_status := FND_API.G_RET_STS_SUCCESS;
18191 EXCEPTION
18192 WHEN API_ERROR THEN
18193 x_return_status := FND_API.G_RET_STS_ERROR;
18194 rollback to plan_tasks;
18195 WHEN OTHERS THEN
18196 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
18197 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
18198 p_procedure_name => 'delete_fin_plan_from_task',
18199 p_error_text => SUBSTRB(SQLERRM,1,240));
18200 rollback to plan_tasks;
18201 raise;
18202
18203 END delete_fin_plan_from_task;
18204 --End Bug 2947492
18205
18206 /*==================================================================
18207 This is the wrapper API that decides whether to invoke the concurrent
18208 process wrapper or the online process to process the WBS updates. If
18209 the profile is set to Online, the process is done online always.
18210 Otherwise when the profile is standard the processing is done online/
18211 concurrent based on the number of tasks in the structure version and
18212 the threshold profile.
18213 Bug 3010538 : New API for the Task Weighting Enhancement.
18214 ==================================================================*/
18215
18216 PROCEDURE PROCESS_WBS_UPDATES_WRP
18217 ( p_api_version_number IN NUMBER := 1.0
18218 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
18219 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
18220 ,p_calling_context IN VARCHAR2 := 'UPDATE'
18221 ,p_project_id IN pa_projects_all.project_id%TYPE
18222 ,p_structure_version_id IN pa_proj_element_versions.element_version_id%TYPE
18223 ,p_pub_struc_ver_id IN NUMBER := NULL
18224 ,p_pub_prog_flag IN VARCHAR2 := 'Y' --bug 4019845
18225 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
18226 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
18227 ,x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
18228 AS
18229
18230 -- Cursors used in this Procedure.
18231
18232 -- This cursor obtains the count of the task versions in the structure version.
18233 CURSOR cur_task_count(c_project_id pa_projects_all.project_id%TYPE,
18234 c_structure_version_id pa_proj_element_versions.element_version_id%TYPE)
18235 IS
18236 Select count(element_version_id)
18237 From pa_proj_element_versions
18238 Where project_id = c_project_id
18239 And object_type = 'PA_TASKS'
18240 And parent_structure_version_id = c_structure_version_id;
18241
18242 --Bug# 5973460
18243 CURSOR c_get_process_code(c_structure_version_id NUMBER) IS
18244 SELECT process_code
18245 FROM pa_proj_elem_ver_structure
18246 WHERE element_version_id = c_structure_version_id
18247 and project_id = p_project_id; --Bug 11684912
18248 --Bug# 5973460
18249
18250 l_msg_count NUMBER := 0;
18251 l_data VARCHAR2(2000);
18252 l_msg_data VARCHAR2(2000);
18253 l_msg_index_out NUMBER;
18254 l_debug_mode VARCHAR2(1);
18255
18256 l_debug_level2 CONSTANT NUMBER := 2;
18257 l_debug_level3 CONSTANT NUMBER := 3;
18258 l_debug_level4 CONSTANT NUMBER := 4;
18259 l_debug_level5 CONSTANT NUMBER := 5;
18260
18261 l_process_code pa_proj_elem_ver_structure.process_code%TYPE; --Bug# 5973460
18262
18263 BEGIN
18264
18265 --Bug# 5973460
18266 OPEN c_get_process_code(p_structure_version_id);
18267 FETCH c_get_process_code INTO l_process_code;
18268 CLOSE c_get_process_code;
18269
18270 IF p_calling_context = 'UPDATE' AND l_process_code = 'PUE'
18271 THEN
18272 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
18273 ,p_msg_name => 'PA_PS_PUBLISH_ERROR');
18274
18275 RAISE Invalid_Arg_Exc_WP;
18276 END IF;
18277 --Bug# 5973460
18278
18279 IF p_init_msg_list = FND_API.G_TRUE THEN
18280 FND_MSG_PUB.initialize;
18281 END IF;
18282
18283 x_msg_count := 0;
18284 x_return_status := FND_API.G_RET_STS_SUCCESS;
18285 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
18286
18287 IF l_debug_mode = 'Y' THEN
18288 pa_debug.g_err_stage:= 'Entering PROCESS_WBS_UPDATES_WRP';
18289 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
18290 l_debug_level3);
18291
18292 pa_debug.set_curr_function( p_function => 'PROCESS_WBS_UPDATES_WRP',
18293 p_debug_mode => l_debug_mode );
18294 END IF;
18295
18296 -- Check for business rules violations
18297 IF l_debug_mode = 'Y' THEN
18298 pa_debug.g_err_stage:= 'Validating input parameters';
18299 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
18300 l_debug_level3);
18301
18302 pa_debug.g_err_stage:= 'p_calling_context = '|| p_calling_context;
18303 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18304
18305 pa_debug.g_err_stage:= 'p_project_id = '|| p_project_id;
18306 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18307
18308 pa_debug.g_err_stage:= 'p_structure_version_id = '|| p_structure_version_id;
18309 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18310
18311 END IF;
18312
18313 -- Throw an error if any of the mandatory parameter is NULL.
18314 IF (p_project_id IS NULL) OR
18315 (p_structure_version_id IS NULL)
18316 THEN
18317 PA_UTILS.ADD_MESSAGE
18318 (p_app_short_name => 'PA',
18319 p_msg_name => 'PA_INV_PARAM_PASSED');
18320 RAISE Invalid_Arg_Exc_WP;
18321 END IF;
18322
18323 DECLARE
18324 l_task_count NUMBER;
18325 l_update_option VARCHAR2(30);
18326 l_calling_context VARCHAR2(30);
18327 BEGIN
18328 open cur_task_count(p_project_id,p_structure_version_id);
18329 fetch cur_task_count into l_task_count;
18330 close cur_task_count;
18331 l_update_option := pa_project_structure_utils.get_process_wbs_updates_option(p_task_count => l_task_count,
18332 p_project_id => p_project_id ---bug 4370533
18333 );
18334
18335 IF p_calling_context = 'PUBLISH' THEN
18336 IF l_update_option = 'ONLINE' THEN
18337 l_calling_context := 'ONLINE_PUBLISH';
18338 ELSE
18339 l_calling_context := 'CONC_PUBLISH';
18340 END IF;
18341 ELSIF p_calling_context = 'UPDATE' THEN
18342 IF l_update_option = 'ONLINE' THEN
18343 l_calling_context := 'ONLINE_UPDATE';
18344 ELSE
18345 l_calling_context := 'CONC_UPDATE';
18346 END IF;
18347 -- 4392189 : Added code for APPLY_PROGRESS
18348 -- This is done so that in process_wbs_updates
18349 -- we can determine the online or deferred mode
18350 ELSIF p_calling_context = 'APPLY_PROGRESS' THEN
18351 IF l_update_option = 'ONLINE' THEN
18352 l_calling_context := 'ONLINE_APPLY_PROGRESS';
18353 ELSE
18354 l_calling_context := 'CONC_APPLY_PROGRESS';
18355 END IF;
18356 ELSIF p_calling_context = 'ASGMT_PLAN_CHANGE' THEN ---bug 4492493
18357 l_calling_context := p_calling_context;
18358 l_update_option := 'CONCURRENT'; ---should always launch conc pgm
18359 ELSE
18360 l_calling_context := p_calling_context;
18361 END IF;
18362
18363 -- TWUT
18364 IF l_debug_mode = 'Y' THEN
18365 pa_debug.g_err_stage := 'Update option is '||l_update_option;
18366 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
18367 END IF;
18368
18369 IF l_update_option = 'ONLINE' THEN
18370 pa_proj_task_struc_pub.process_wbs_updates(
18371 p_commit => p_commit
18372 ,p_project_id => p_project_id
18373 ,p_structure_version_id => p_structure_version_id
18374 ,p_pub_struc_ver_id => p_pub_struc_ver_id
18375 ,p_pub_prog_flag => p_pub_prog_flag --bug 4019845
18376 ,p_calling_context => l_calling_context
18377 ,x_return_status => x_return_status
18378 ,x_msg_count => x_msg_count
18379 ,x_msg_data => x_msg_data
18380 );
18381 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18382 IF l_debug_mode = 'Y' THEN
18383 pa_debug.g_err_stage := 'Error calling online wbs update process ';
18384 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
18385 END IF;
18386 Raise Invalid_Arg_Exc_WP;
18387 END IF;
18388 ELSIF l_update_option = 'CONCURRENT' THEN
18389 pa_proj_task_struc_pub.process_wbs_updates_conc_wrp(
18390 p_commit => p_commit
18391 ,p_project_id => p_project_id
18392 ,p_structure_version_id => p_structure_version_id
18393 ,p_pub_struc_ver_id => p_pub_struc_ver_id
18394 ,p_pub_prog_flag => p_pub_prog_flag --bug 4019845
18395 ,p_calling_context => l_calling_context
18396 ,x_return_status => x_return_status
18397 ,x_msg_count => x_msg_count
18398 ,x_msg_data => x_msg_data
18399 );
18400 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18401 IF l_debug_mode = 'Y' THEN
18402 pa_debug.g_err_stage := 'Error calling concurrent wbs update process ';
18403 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
18404 END IF;
18405 Raise Invalid_Arg_Exc_WP;
18406 END IF;
18407 END IF;
18408 END;
18409
18410 IF l_debug_mode = 'Y' THEN
18411 pa_debug.g_err_stage:= 'Exiting PROCESS_WBS_UPDATES_WRP';
18412 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
18413 l_debug_level3);
18414 pa_debug.reset_curr_function;
18415 END IF;
18416 EXCEPTION
18417
18418 WHEN Invalid_Arg_Exc_WP THEN
18419
18420 x_return_status := FND_API.G_RET_STS_ERROR;
18421 l_msg_count := FND_MSG_PUB.count_msg;
18422
18423 IF cur_task_count%ISOPEN THEN
18424 CLOSE cur_task_count;
18425 END IF;
18426
18427 IF l_msg_count = 1 and x_msg_data IS NULL THEN
18428 PA_INTERFACE_UTILS_PUB.get_messages
18429 (p_encoded => FND_API.G_TRUE
18430 ,p_msg_index => 1
18431 ,p_msg_count => l_msg_count
18432 ,p_msg_data => l_msg_data
18433 ,p_data => l_data
18434 ,p_msg_index_out => l_msg_index_out);
18435 x_msg_data := l_data;
18436 x_msg_count := l_msg_count;
18437 ELSE
18438 x_msg_count := l_msg_count;
18439 END IF;
18440 IF l_debug_mode = 'Y' THEN
18441 pa_debug.reset_curr_function;
18442 END IF;
18443
18444 RETURN;
18445
18446 WHEN others THEN
18447
18448 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
18449 x_msg_count := 1;
18450 x_msg_data := SQLERRM;
18451
18452 IF cur_task_count%ISOPEN THEN
18453 CLOSE cur_task_count;
18454 END IF;
18455
18456 FND_MSG_PUB.add_exc_msg
18457 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
18458 ,p_procedure_name => 'PROCESS_WBS_UPDATES_WRP'
18459 ,p_error_text => x_msg_data);
18460
18461 IF l_debug_mode = 'Y' THEN
18462 pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
18463 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
18464 l_debug_level5);
18465 pa_debug.reset_curr_function;
18466 END IF;
18467 RAISE;
18468 END PROCESS_WBS_UPDATES_WRP;
18469
18470 /*==================================================================
18471 This is a wrapper API that will launch the concurrent process that
18472 will in turn call the task weightage calculation and the plannable
18473 tasks APIs.
18474 Bug 3010538 : New API for the Task Weighting Enhancement.
18475 ==================================================================*/
18476
18477 PROCEDURE PROCESS_WBS_UPDATES_CONC_WRP
18478 ( p_api_version_number IN NUMBER := 1.0
18479 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
18480 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
18481 ,p_calling_context IN VARCHAR2 := 'UPDATE'
18482 ,p_project_id IN pa_projects_all.project_id%TYPE
18483 ,p_structure_version_id IN pa_proj_element_versions.element_version_id%TYPE
18484 ,p_pub_struc_ver_id IN NUMBER := NULL
18485 ,p_pub_prog_flag IN VARCHAR2 := 'Y' --bug 4019845
18486 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
18487 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
18488 ,x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
18489 AS
18490
18491 -- Cursors used.
18492
18493 -- This cursor is used to decide if the structure version corresponds to a particular
18494 -- Structure type. Depending on this the plannable tasks api and the task weightage calculation
18495 -- api will be called.
18496 Cursor cur_structure_type(c_project_id pa_projects_all.project_id%TYPE,
18497 c_structure_version_id pa_proj_element_versions.element_version_id%TYPE,
18498 c_structure_type pa_structure_types.structure_type%TYPE)
18499 IS
18500 select 'Y'
18501 from pa_proj_element_versions ver,
18502 pa_proj_structure_types pst,
18503 pa_structure_types st
18504 where ver.element_version_id = c_structure_version_id
18505 and ver.project_id = c_project_id
18506 and pst.proj_element_id = ver.proj_element_id
18507 and pst.structure_type_id = st.structure_type_id
18508 and st.structure_type = c_structure_type;
18509
18510 l_update_wbs_flag pa_proj_elem_ver_structure.process_update_wbs_flag%TYPE;
18511 l_request_id pa_proj_elem_ver_structure.conc_request_id%TYPE;
18512 l_structure_type_flag VARCHAR2(1);
18513 --Bug 3053920.
18514 l_task_weighting_basis pa_proj_progress_attr.task_weight_basis_code%TYPE;
18515
18516 l_msg_count NUMBER := 0;
18517 l_data VARCHAR2(2000);
18518 l_msg_data VARCHAR2(2000);
18519 l_msg_index_out NUMBER;
18520 l_debug_mode VARCHAR2(1);
18521
18522 l_debug_level2 CONSTANT NUMBER := 2;
18523 l_debug_level3 CONSTANT NUMBER := 3;
18524 l_debug_level4 CONSTANT NUMBER := 4;
18525 l_debug_level5 CONSTANT NUMBER := 5;
18526
18527 -- Begin fix for Bug # 4373055.
18528
18529 l_ret_status VARCHAR2(1);
18530 l_calling_context VARCHAR2(30); -- Bug 4392189
18531
18532 -- End fix for Bug # 4373055.
18533
18534 -- Bug 4589289 : Begin
18535 CURSOR c_get_process_code(c_structure_version_id NUMBER) IS
18536 SELECT process_code
18537 FROM pa_proj_elem_ver_structure
18538 WHERE element_version_id = c_structure_version_id
18539 and project_id = p_project_id -- Bug # 4868867.
18540 ;
18541
18542 l_process_code pa_proj_elem_ver_structure.process_code%TYPE;
18543 l_rerun_flag VARCHAR2(1):=null;
18544
18545 -- Bug 4589289 : End
18546
18547 -- 4683461 For MOAC Changes
18548
18549 Cursor cur_proj_ou
18550 IS
18551 select org_id
18552 from pa_projects_all
18553 where project_id = p_project_id;
18554
18555 l_org_id NUMBER;
18556
18557 -- 4683461 Done
18558
18559 BEGIN
18560 IF p_init_msg_list = FND_API.G_TRUE THEN
18561 FND_MSG_PUB.initialize;
18562 END IF;
18563
18564 x_msg_count := 0;
18565 x_return_status := FND_API.G_RET_STS_SUCCESS;
18566 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
18567
18568 IF l_debug_mode = 'Y' THEN
18569 pa_debug.g_err_stage:= 'Entering PROCESS_WBS_UPDATES_CONC_WRP';
18570 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
18571 l_debug_level3);
18572
18573 pa_debug.set_curr_function( p_function => 'PROCESS_WBS_UPDATES_CONC_WRP',
18574 p_debug_mode => l_debug_mode );
18575 END IF;
18576
18577 -- Check for business rules violations
18578 IF l_debug_mode = 'Y' THEN
18579 pa_debug.g_err_stage:= 'Validating input parameters';
18580 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
18581 l_debug_level3);
18582
18583 pa_debug.g_err_stage:= 'p_calling_context = '|| p_calling_context;
18584 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18585
18586 pa_debug.g_err_stage:= 'p_project_id = '|| p_project_id;
18587 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18588
18589 pa_debug.g_err_stage:= 'p_structure_version_id = '|| p_structure_version_id;
18590 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18591
18592 END IF;
18593
18594 -- Throw an error if any of the mandatory parameter is NULL.
18595 IF (p_project_id IS NULL) OR
18596 (p_structure_version_id IS NULL)
18597 THEN
18598 PA_UTILS.ADD_MESSAGE
18599 (p_app_short_name => 'PA',
18600 p_msg_name => 'PA_INV_PARAM_PASSED');
18601 RAISE Invalid_Arg_Exc_WP;
18602 END IF;
18603
18604 --hsiu: bug 3035902
18605 --commenting because financial planning has partial process and
18606 --the update flag should not be check here.
18607 /*
18608 l_update_wbs_flag := pa_project_structure_utils.GET_UPDATE_WBS_FLAG(p_project_id => p_project_id,
18609 p_structure_version_id => p_structure_version_id);
18610 IF l_update_wbs_flag = 'N' THEN
18611 -- No further processing is required for this structure version. Return.
18612 -- TWUT.
18613 IF l_debug_mode = 'Y' THEN
18614 pa_debug.g_err_stage:= 'No updates required for this structure version.';
18615 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18616 END IF;
18617 RETURN;
18618 END IF;
18619 */
18620
18621 -- Bug 3053920. We need not launch the conc process if split structure, structure type is workplan,
18622 -- basis code is MANUAL or flag is N.
18623
18624 l_update_wbs_flag := pa_project_structure_utils.GET_UPDATE_WBS_FLAG(p_project_id => p_project_id,
18625 p_structure_version_id => p_structure_version_id);
18626 l_task_weighting_basis := pa_progress_utils.get_task_weighting_basis(p_project_id => p_project_id);
18627
18628
18629 -- See if the structure version being processed is WORKPLAN.
18630 open cur_structure_type(p_project_id,p_structure_version_id,'WORKPLAN');
18631 fetch cur_structure_type into l_structure_type_flag;
18632 close cur_structure_type;
18633 -- 4392189 : Program Reporting Changes - Phase 2
18634 -- For Apply Progress we do not have to check wbs flag
18635 IF (p_calling_context not in ('CONC_APPLY_PROGRESS','ASGMT_PLAN_CHANGE') ---4627294
18636 AND
18637
18638 -- Begin Bug # 4584710.
18639 /*
18640 PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( p_project_id ) = 'Y' AND
18641 nvl(l_structure_type_flag,'N') = 'Y' AND
18642 ( nvl(l_task_weighting_basis,'-99') = 'MANUAL'
18643 OR
18644 */
18645 -- End Bug # 4584710.
18646 nvl(l_update_wbs_flag,'N') = 'N')
18647 THEN
18648 IF l_debug_mode = 'Y' THEN
18649 -- pa_debug.g_err_stage:= 'split + workplan + MANUAL or flag = N. No further processing required';
18650 pa_debug.g_err_stage:= 'Flag = N. No further processing required';
18651 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18652 END IF;
18653 -- No further processing required. Donot launch the conc process.
18654 RETURN;
18655 END IF;
18656
18657 l_structure_type_flag := NULL;
18658
18659 -- Bug 4589289 : Begin
18660 OPEN c_get_process_code(p_structure_version_id);
18661 FETCH c_get_process_code INTO l_process_code;
18662 CLOSE c_get_process_code;
18663
18664 IF l_process_code IN ('WUE','PUE','AUE') THEN
18665 l_rerun_flag := 'Y';
18666 END IF;
18667 -- Bug 4589289 : End
18668
18669 -- 4683461 For MOAC Changes, retrieving operating unit and setting it before calling
18670 -- fnd_request.submit_request
18671 open cur_proj_ou;
18672 fetch cur_proj_ou into l_org_id;
18673 close cur_proj_ou;
18674
18675 fnd_request.set_org_id(l_org_id);
18676
18677 -- 4683461 end
18678
18679 -- Submit the request.
18680 l_request_id := fnd_request.submit_request
18681 (
18682 application => 'PA',
18683 program => 'PAWPUWBS',
18684 -- description => 'PRC: Process Work Breakdown Structure Updates', -- Fix for Bug # 4409337.
18685 description => 'PRC: Process Structure Updates', -- Fix for Bug # 4409337.
18686 start_time => NULL,
18687 sub_request => false,
18688 argument1 => p_calling_context,
18689 argument2 => p_project_id,
18690 argument3 => p_structure_version_id,
18691 argument4 => p_pub_struc_ver_id,
18692 argument5 => p_pub_prog_flag --bug 4019845
18693 ,argument6 => l_rerun_flag --bug 4589289
18694 );
18695
18696 -- TWUT
18697 IF l_debug_mode = 'Y' THEN
18698 pa_debug.g_err_stage:= 'Request id is '||l_request_id;
18699 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18700 END IF;
18701
18702 -- Throw an error if the request could not be submitted.
18703 IF l_request_id = 0 THEN
18704 PA_UTILS.ADD_MESSAGE
18705 (p_app_short_name => 'PA',
18706 p_msg_name => 'PA_WP_TW_CONC_PGM_ERR');
18707 RAISE Invalid_Arg_Exc_WP;
18708 END IF;
18709
18710 -- Begin fix for Bug # 4373055.
18711
18712 /*
18713
18714 -- Update the structure version record with the request id and the status code.
18715 update pa_proj_elem_ver_structure
18716 set process_code = 'WUP',
18717 conc_request_id = l_request_id
18718 where element_version_id = p_structure_version_id
18719 and project_id = p_project_id;
18720
18721 */
18722 -- Bug 4392189 : Added l_calling_context
18723 IF p_calling_context IN ('CONC_APPLY_PROGRESS', 'ONLINE_APPLY_PROGRESS') THEN
18724 l_calling_context := 'APPLY_PROGRESS';
18725 ELSE
18726 l_calling_context := p_calling_context;
18727 END IF;
18728
18729 PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_IN_PROC(
18730 p_project_id => p_project_id
18731 , p_structure_version_id => p_structure_version_id
18732 , p_calling_context => l_calling_context
18733 , p_conc_request_id => l_request_id
18734 , x_return_status => l_ret_status);
18735
18736
18737 if (p_calling_context = 'CONC_PUBLISH') then
18738
18739 -- Mark the newly created published structure record also with the process code
18740 -- and request_id.
18741
18742 PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_IN_PROC(
18743 p_project_id => p_project_id
18744 , p_structure_version_id => p_pub_struc_ver_id
18745 , p_calling_context => l_calling_context
18746 , p_conc_request_id => l_request_id
18747 , x_return_status => l_ret_status);
18748
18749 end if;
18750
18751 -- End fix for Bug # 4373055.
18752
18753 -- Call the financial planning API if the structure type is FINANCIAL.
18754 open cur_structure_type(p_project_id,p_structure_version_id,'FINANCIAL');
18755 fetch cur_structure_type into l_structure_type_flag;
18756 close cur_structure_type;
18757
18758 IF nvl(l_structure_type_flag,'N') = 'Y' THEN
18759
18760 -- TWUT
18761 IF l_debug_mode = 'Y' THEN
18762 pa_debug.g_err_stage := 'Calling the financial planning API after submitting the concurrent request';
18763 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18764 END IF;
18765
18766 pa_fp_refresh_elements_pub.set_process_flag_proj(
18767 p_project_id => p_project_id
18768 ,p_request_id => l_request_id
18769 ,p_process_code => 'WUP'
18770 ,p_refresh_required_flag => 'Y'
18771 ,x_return_status => x_return_status
18772 ,x_msg_count => x_msg_count
18773 ,x_msg_data => x_msg_data
18774 );
18775 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18776 IF l_debug_mode = 'Y' THEN
18777 pa_debug.g_err_stage := 'Error calling the financial planning API after submitting the concurrent request';
18778 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
18779 END IF;
18780 Raise Invalid_Arg_Exc_WP;
18781 END IF;
18782 END IF;
18783
18784 -- Commit in order to complete the request submission.
18785 commit;
18786
18787 /* DO NOT ADD ANY CODE AFTER THIS COMMIT bug 3163280 */
18788
18789 IF l_debug_mode = 'Y' THEN
18790 pa_debug.g_err_stage:= 'Exiting PROCESS_WBS_UPDATES_CONC_WRP';
18791 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
18792 l_debug_level3);
18793 pa_debug.reset_curr_function;
18794 END IF;
18795 EXCEPTION
18796
18797 WHEN Invalid_Arg_Exc_WP THEN
18798
18799 x_return_status := FND_API.G_RET_STS_ERROR;
18800 l_msg_count := FND_MSG_PUB.count_msg;
18801
18802 IF l_msg_count = 1 and x_msg_data IS NULL THEN
18803 PA_INTERFACE_UTILS_PUB.get_messages
18804 (p_encoded => FND_API.G_TRUE
18805 ,p_msg_index => 1
18806 ,p_msg_count => l_msg_count
18807 ,p_msg_data => l_msg_data
18808 ,p_data => l_data
18809 ,p_msg_index_out => l_msg_index_out);
18810 x_msg_data := l_data;
18811 x_msg_count := l_msg_count;
18812 ELSE
18813 x_msg_count := l_msg_count;
18814 END IF;
18815 IF l_debug_mode = 'Y' THEN
18816 pa_debug.reset_curr_function;
18817 END IF;
18818
18819 RETURN;
18820
18821 WHEN others THEN
18822
18823 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
18824 x_msg_count := 1;
18825 x_msg_data := SQLERRM;
18826
18827 FND_MSG_PUB.add_exc_msg
18828 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
18829 ,p_procedure_name => 'PROCESS_WBS_UPDATES_CONC_WRP'
18830 ,p_error_text => x_msg_data);
18831
18832 IF l_debug_mode = 'Y' THEN
18833 pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
18834 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
18835 l_debug_level5);
18836 pa_debug.reset_curr_function;
18837 END IF;
18838 RAISE;
18839 END PROCESS_WBS_UPDATES_CONC_WRP;
18840
18841
18842 /*==================================================================
18843 This is the procedure that will be registered as the concurrent
18844 program executable with FND.
18845 Bug 3010538 : New API for the Task Weighting Enhancement.
18846 ==================================================================*/
18847
18848 PROCEDURE PROCESS_WBS_UPDATES_CONC
18849 ( errbuf OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
18850 ,retcode OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
18851 ,p_calling_context IN VARCHAR2 := 'UPDATE'
18852 ,p_project_id IN pa_projects_all.project_id%TYPE
18853 ,p_structure_version_id IN pa_proj_element_versions.element_version_id%TYPE
18854 ,p_pub_struc_ver_id IN NUMBER := NULL
18855 ,p_pub_prog_flag IN VARCHAR2 := 'Y' --bug 4019845
18856 ,p_rerun_flag IN VARCHAR2 := null --bug 4589289
18857 )
18858 AS
18859
18860 l_request_id pa_proj_elem_ver_structure.conc_request_id%TYPE;
18861
18862 l_return_status VARCHAR2(1);
18863 l_msg_count NUMBER := 0;
18864 l_data VARCHAR2(2000);
18865 l_msg_data VARCHAR2(2000);
18866 l_msg_index_out NUMBER;
18867 l_debug_mode VARCHAR2(1);
18868
18869 l_debug_level2 CONSTANT NUMBER := 2;
18870 l_debug_level3 CONSTANT NUMBER := 3;
18871 l_debug_level4 CONSTANT NUMBER := 4;
18872 l_debug_level5 CONSTANT NUMBER := 5;
18873
18874 -- Begin fix for Bug # 4373055.
18875
18876 l_ret_status VARCHAR2(1);
18877 l_calling_context VARCHAR2(30);-- Bug 4392189
18878
18879 -- End fix for Bug # 4373055.
18880
18881 /* Bug 8347243 - Start */
18882
18883 l_record_version_number NUMBER;
18884
18885 cursor c2(c_project_id NUMBER, c_structure_version_id NUMBER) IS
18886 select record_version_number
18887 from pa_proj_elem_ver_structure
18888 where project_id = c_project_id
18889 and element_version_id = c_structure_version_id;
18890
18891 /* Bug 8347243 - End */
18892
18893 BEGIN
18894
18895 savepoint process_wbs_updates_conc;
18896
18897 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
18898 l_request_id := FND_GLOBAL.CONC_REQUEST_ID;
18899 retcode := '0';
18900 errbuf := NULL;
18901
18902 IF l_debug_mode = 'Y' THEN
18903 pa_debug.set_curr_function( p_function => 'PROCESS_WBS_UPDATES_CONC',
18904 p_debug_mode => l_debug_mode );
18905 pa_debug.g_err_stage:= 'Entering PROCESS_WBS_UPDATES_CONC';
18906 pa_debug.log_message(p_message=>pa_debug.g_err_stage);
18907 END IF;
18908
18909 -- Check for business rules violations
18910 IF l_debug_mode = 'Y' THEN
18911 pa_debug.g_err_stage:= 'Validating input parameters';
18912 pa_debug.log_message(p_message=>pa_debug.g_err_stage);
18913
18914 pa_debug.g_err_stage:= 'p_project_id = '|| p_project_id;
18915 pa_debug.log_message(p_message => pa_debug.g_err_stage);
18916
18917 pa_debug.g_err_stage:= 'p_structure_version_id = '|| p_structure_version_id;
18918 pa_debug.log_message(p_message => pa_debug.g_err_stage);
18919 END IF;
18920
18921 IF (p_project_id IS NULL) OR
18922 (p_structure_version_id IS NULL)
18923 THEN
18924 IF l_debug_mode = 'Y' THEN
18925 pa_debug.g_err_stage:= 'Some of the mandatory parameters to this API are NULL';
18926 pa_debug.log_message(p_message => pa_debug.g_err_stage);
18927 END IF;
18928 PA_UTILS.ADD_MESSAGE
18929 (p_app_short_name => 'PA',
18930 p_msg_name => 'PA_INV_PARAM_PASSED');
18931 RAISE Invalid_Arg_Exc_WP;
18932 END IF;
18933
18934 pa_proj_task_struc_pub.process_wbs_updates(
18935 p_calling_context => p_calling_context
18936 ,p_project_id => p_project_id
18937 ,p_structure_version_id => p_structure_version_id
18938 ,p_pub_struc_ver_id => p_pub_struc_ver_id
18939 ,p_pub_prog_flag => p_pub_prog_flag --bug 4019845
18940 ,p_rerun_flag => p_rerun_flag -- bug 4589289
18941 ,x_return_status => l_return_status
18942 ,x_msg_count => l_msg_count
18943 ,x_msg_data => l_msg_data
18944 );
18945 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18946 IF l_debug_mode = 'Y' THEN
18947 pa_debug.g_err_stage := 'Error calling process wbs updates API ';
18948 pa_debug.log_message(p_message => pa_debug.g_err_stage);
18949 END IF;
18950 Raise Invalid_Arg_Exc_WP;
18951 END IF;
18952
18953
18954 -- Update to success if the call was successful.
18955 -- It has been decided to update null as the process_code if the
18956 -- process has completed successfully.
18957 update pa_proj_elem_ver_structure
18958 set process_code = NULL,
18959 conc_request_id = l_request_id
18960 where element_version_id = p_structure_version_id
18961 and project_id = p_project_id;
18962
18963
18964 -- Begin fix for Bug # 4373055.
18965
18966 if (p_calling_context = 'CONC_PUBLISH') then
18967
18968 -- Mark the newly created published structure record also with the process code
18969 -- as null.
18970
18971 update pa_proj_elem_ver_structure
18972 set process_code = NULL
18973 , conc_request_id = l_request_id
18974 where element_version_id = p_pub_struc_ver_id
18975 and project_id = p_project_id;
18976
18977 -- Bug 8347243 - Start
18978 -- Workflow notification should happen here for CONCURRENT mode
18979
18980 OPEN c2(p_project_id, p_pub_struc_ver_id);
18981 FETCH c2 into l_record_version_number;
18982 CLOSE c2;
18983
18984 PA_PROJECT_STRUCTURE_PVT1.change_workplan_status
18985 (
18986 p_project_id => p_project_id
18987 ,p_structure_version_id => p_pub_struc_ver_id
18988 ,p_status_code => 'STRUCTURE_PUBLISHED'
18989 ,p_record_version_number => l_record_version_number
18990 ,x_return_status => l_return_status
18991 ,x_msg_count => l_msg_count
18992 ,x_msg_data => l_msg_data
18993 );
18994
18995 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18996 IF l_debug_mode = 'Y' THEN
18997 pa_debug.g_err_stage := 'Error calling change workplan status ';
18998 pa_debug.log_message(p_message => pa_debug.g_err_stage);
18999 END IF;
19000 Raise Invalid_Arg_Exc_WP;
19001 END IF;
19002
19003
19004 PA_WORKPLAN_WORKFLOW.START_PROJECT_EXECUTION_WF
19005 (
19006 p_project_id => p_project_id
19007 ,x_msg_count => l_msg_count
19008 ,x_msg_data => l_msg_data
19009 ,x_return_status => l_return_status
19010 ) ;
19011
19012 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
19013 IF l_debug_mode = 'Y' THEN
19014 pa_debug.g_err_stage := 'Error starting project execution workflow';
19015 pa_debug.log_message(p_message => pa_debug.g_err_stage);
19016 END IF;
19017 Raise Invalid_Arg_Exc_WP;
19018 END IF;
19019
19020 -- Bug 8347243 - End
19021
19022 end if;
19023
19024 -- End fix for Bug # 4373055.
19025
19026 -- Commit so that the changes that have been done are commited.
19027 commit;
19028
19029 IF l_debug_mode = 'Y' THEN
19030 pa_debug.g_err_stage:= 'Exiting PROCESS_WBS_UPDATES_CONC';
19031 pa_debug.log_message(p_message=>pa_debug.g_err_stage);
19032
19033 pa_debug.reset_curr_function;
19034 END IF;
19035 EXCEPTION
19036
19037 WHEN Invalid_Arg_Exc_WP THEN
19038
19039 l_msg_count := FND_MSG_PUB.count_msg;
19040 retcode := '2';
19041
19042 IF l_msg_count >= 1 THEN
19043 PA_INTERFACE_UTILS_PUB.get_messages
19044 (p_encoded => FND_API.G_FALSE -- Bug 4348814 : Made false from true FND_API.G_TRUE
19045 ,p_msg_index => 1
19046 ,p_msg_count => l_msg_count
19047 ,p_msg_data => l_msg_data
19048 ,p_data => l_data
19049 ,p_msg_index_out => l_msg_index_out);
19050 errbuf := l_data;
19051 END IF;
19052
19053 rollback to process_wbs_updates_conc;
19054
19055
19056 -- Begin fix for Bug # 4373055.
19057
19058 /*
19059
19060 update pa_proj_elem_ver_structure
19061 set process_code = 'WUE',
19062 conc_request_id = l_request_id
19063 where element_version_id = p_structure_version_id
19064 and project_id = p_project_id;
19065
19066 commit;
19067
19068 */
19069 -- Bug 4392189 : Added l_calling_context
19070 IF p_calling_context IN ('CONC_APPLY_PROGRESS', 'ONLINE_APPLY_PROGRESS') THEN
19071 l_calling_context := 'APPLY_PROGRESS';
19072 ELSE
19073 l_calling_context := p_calling_context;
19074 END IF;
19075
19076 PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_ERR(
19077 p_project_id => p_project_id
19078 , p_structure_version_id => p_structure_version_id
19079 , p_calling_context => l_calling_context
19080 , p_conc_request_id => l_request_id
19081 , x_return_status => l_ret_status);
19082
19083 if (p_calling_context = 'CONC_PUBLISH') then
19084
19085 -- Mark the newly created published structure record also with the process code
19086 -- and request_id.
19087
19088 PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_ERR(
19089 p_project_id => p_project_id
19090 , p_structure_version_id => p_pub_struc_ver_id
19091 , p_calling_context => l_calling_context
19092 , p_conc_request_id => l_request_id
19093 , x_return_status => l_ret_status);
19094
19095 end if;
19096
19097 -- End fix for Bug # 4373055.
19098
19099 -- Bug # 4655059.
19100
19101 -- If the process that errored out is process_updates then set the process_update_wbs_flag to 'Y'.
19102
19103 if (p_calling_context = 'CONC_UPDATE') then
19104
19105 pa_proj_task_struc_pub.set_update_wbs_flag
19106 (p_project_id => p_project_id
19107 ,p_structure_version_id => p_structure_version_id
19108 ,p_update_wbs_flag => 'Y'
19109 ,x_return_status => l_return_status
19110 ,x_msg_count => l_msg_count
19111 ,x_msg_data => l_msg_data);
19112
19113 if (l_return_status = FND_API.G_RET_STS_SUCCESS) then
19114
19115 commit;
19116
19117 end if;
19118
19119 end if;
19120
19121 -- Bug # 4655059.
19122
19123 IF l_debug_mode = 'Y' THEN
19124 pa_debug.reset_curr_function;
19125 END IF;
19126 RETURN;
19127
19128 WHEN others THEN
19129
19130 retcode := '2';
19131 errbuf := SQLERRM;
19132
19133 FND_MSG_PUB.add_exc_msg
19134 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
19135 ,p_procedure_name => 'PROCESS_WBS_UPDATES_CONC'
19136 ,p_error_text => errbuf);
19137
19138 rollback to process_wbs_updates_conc;
19139
19140 -- Begin fix for Bug # 4373055.
19141
19142 /*
19143
19144 update pa_proj_elem_ver_structure
19145 set process_code = 'WUE',
19146 conc_request_id = l_request_id
19147 where element_version_id = p_structure_version_id
19148 and project_id = p_project_id;
19149
19150 commit;
19151
19152 */
19153
19154 -- Bug 4392189 : Added l_calling_context
19155 IF p_calling_context IN ('CONC_APPLY_PROGRESS', 'ONLINE_APPLY_PROGRESS') THEN
19156 l_calling_context := 'APPLY_PROGRESS';
19157 ELSE
19158 l_calling_context := p_calling_context;
19159 END IF;
19160
19161 PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_ERR(
19162 p_project_id => p_project_id
19163 , p_structure_version_id => p_structure_version_id
19164 , p_calling_context => l_calling_context
19165 , p_conc_request_id => l_request_id
19166 , x_return_status => l_ret_status);
19167
19168 if (p_calling_context = 'CONC_PUBLISH') then
19169
19170 -- Mark the newly created published structure record also with the process code
19171 -- and request_id.
19172
19173 PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_ERR(
19174 p_project_id => p_project_id
19175 , p_structure_version_id => p_pub_struc_ver_id
19176 , p_calling_context => l_calling_context
19177 , p_conc_request_id => l_request_id
19178 , x_return_status => l_ret_status);
19179
19180 end if;
19181
19182 -- End fix for Bug # 4373055.
19183
19184 -- Bug # 4655059.
19185
19186 -- If the process that errored out is process_updates then set the process_update_wbs_flag to 'Y'.
19187
19188 if (p_calling_context = 'CONC_UPDATE') then
19189
19190 pa_proj_task_struc_pub.set_update_wbs_flag
19191 (p_project_id => p_project_id
19192 ,p_structure_version_id => p_structure_version_id
19193 ,p_update_wbs_flag => 'Y'
19194 ,x_return_status => l_return_status
19195 ,x_msg_count => l_msg_count
19196 ,x_msg_data => l_msg_data);
19197
19198 if (l_return_status = FND_API.G_RET_STS_SUCCESS) then
19199
19200 commit;
19201
19202 end if;
19203
19204 end if;
19205
19206 -- Bug # 4655059.
19207
19208 IF l_debug_mode = 'Y' THEN
19209 pa_debug.g_err_stage:= 'Unexpected Error'||errbuf;
19210 pa_debug.log_message(pa_debug.g_err_stage);
19211 pa_debug.reset_curr_function;
19212 END IF;
19213 -- Bug 4360407 : We should no do RAISE, otherweise concurrent process will not error out
19214 --RAISE;
19215 RETURN;
19216 END PROCESS_WBS_UPDATES_CONC;
19217
19218 /*==================================================================
19219 This API takes care of calling the plannable tasks api and the task
19220 weightage api depending on the context. For a financial only structure
19221 version, only the plannable tasks api is called and for a workplan only
19222 structure version only the task weighting api is called. This api will
19223 be called from the concurrent executable and can be called from the other
19224 places where online processing is expected.
19225 Bug 3010538 : New API for the Task Weighting Enhancement.
19226 ==================================================================*/
19227
19228 PROCEDURE PROCESS_WBS_UPDATES
19229 ( p_api_version_number IN NUMBER := 1.0
19230 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
19231 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
19232 ,p_calling_context IN VARCHAR2 := 'UPDATE'
19233 ,p_project_id IN pa_projects_all.project_id%TYPE
19234 ,p_structure_version_id IN pa_proj_element_versions.element_version_id%TYPE
19235 ,p_pub_struc_ver_id IN NUMBER := NULL
19236 ,p_pub_prog_flag IN VARCHAR2 := 'Y' --bug 4019845
19237 ,p_rerun_flag IN VARCHAR2 := null --bug 4589289
19238 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
19239 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
19240 ,x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
19241 AS
19242
19243 -- Cursors Required.
19244
19245 -- This cursor is used to decide if the structure version corresponds to a particular
19246 -- Structure type. Depending on this the plannable tasks api and the task weightage calculation
19247 -- api will be called.
19248 CURSOR cur_structure_type(c_project_id pa_projects_all.project_id%TYPE,
19249 c_structure_version_id pa_proj_element_versions.element_version_id%TYPE,
19250 c_structure_type pa_structure_types.structure_type%TYPE)
19251 IS
19252 SELECT 'Y'
19253 FROM pa_proj_element_versions ver,
19254 pa_proj_structure_types pst,
19255 pa_structure_types st
19256 WHERE ver.element_version_id = c_structure_version_id
19257 AND ver.project_id = c_project_id
19258 AND pst.proj_element_id = ver.proj_element_id
19259 AND pst.structure_type_id = st.structure_type_id
19260 AND st.structure_type = c_structure_type;
19261
19262 l_update_wbs_flag pa_proj_elem_ver_structure.process_update_wbs_flag%TYPE;
19263 l_structure_type_flag VARCHAR2(1);
19264 l_request_id pa_proj_elem_ver_structure.conc_request_id%TYPE;
19265
19266 l_msg_count NUMBER := 0;
19267 l_data VARCHAR2(2000);
19268 l_msg_data VARCHAR2(2000);
19269 l_msg_index_out NUMBER;
19270 l_debug_mode VARCHAR2(1);
19271
19272 l_debug_level2 CONSTANT NUMBER := 2;
19273 l_debug_level3 CONSTANT NUMBER := 3;
19274 l_debug_level4 CONSTANT NUMBER := 4;
19275 l_debug_level5 CONSTANT NUMBER := 5;
19276
19277 l_publish_flag VARCHAR2(1);
19278 l_online_flag VARCHAR2(1);
19279 l_pub_ver_id NUMBER;
19280 l_prev_ver_id NUMBER;
19281 l_proc_code VARCHAR2(30);
19282 l_msg_code VARCHAR2(30);
19283
19284 --bug 3762882
19285 CURSOR get_prev_published_ver(c_struc_ver_id NUMBER) IS
19286 select a.element_version_id
19287 from pa_proj_elem_ver_structure a,
19288 pa_proj_element_versions b
19289 WHERE a.project_id = p_project_id
19290 AND a.proj_element_id = b.proj_element_id
19291 AND b.element_version_id = c_struc_ver_id
19292 AND a.LATEST_EFF_PUBLISHED_FLAG <> 'Y'
19293 AND a.STATUS_CODE = 'STRUCTURE_PUBLISHED'
19294 ORDER BY published_date desc;
19295 --end bug 3762882
19296
19297 --bug 4019845
19298 CURSOR get_scheduled_dates(c_project_id NUMBER, c_structure_version_id NUMBER)
19299 IS
19300 SELECT scheduled_start_date, scheduled_finish_date
19301 FROM pa_proj_elem_ver_schedule
19302 WHERE project_id = c_project_id
19303 AND element_version_id = c_structure_version_id;
19304
19305 CURSOR get_proj_rec_ver_number(c_project_id NUMBER)
19306 IS
19307 SELECT record_version_number
19308 FROM pa_projects_all
19309 WHERE project_id = c_project_id;
19310
19311 CURSOR get_struc_id(c_project_id NUMBER, c_struc_ver_id NUMBER) IS
19312 select pevs.proj_element_id
19313 from pa_proj_elem_ver_structure pevs
19314 where pevs.element_version_id = c_struc_ver_id
19315 and pevs.project_id = c_project_id;
19316
19317 --bug 4472071
19318 -- bug 6414995 : Cursor query changed by adding join with pa_fin_plan_types_b
19319 CURSOR cur_chk_pji_failed
19320 IS
19321 SELECT 'Y'
19322 FROM pji_pjp_wbs_header h,
19323 pa_fin_plan_types_b fin
19324 WHERE h.wbs_version_id= p_pub_struc_ver_id
19325 AND fin.use_for_workplan_flag='Y'
19326 AND h.plan_type_id=fin.fin_plan_type_id;
19327 /*
19328 SELECT 'Y'
19329
19330 FROM pji_pjp_wbs_header
19331 WHERE wbs_version_id= p_pub_struc_ver_id;
19332 */
19333
19334 l_dummy_pji_char VARCHAR2(1);
19335 --bug 4472071
19336
19337
19338 l_project_id NUMBER := p_project_id;
19339 l_responsibility_id NUMBER := FND_GLOBAL.resp_id;
19340 l_resp_appl_id NUMBER := FND_GLOBAL.resp_appl_id; -- 5233777
19341 l_financial_type VARCHAR2(1);
19342 l_workplan_type VARCHAR2(1);
19343 l_scheduled_start_date DATE;
19344 l_scheduled_finish_date DATE;
19345 l_proj_record_ver_number NUMBER;
19346 l_proj_start_date DATE;
19347 l_proj_completion_date DATE;
19348 l_proj_element_id NUMBER; --structure id
19349 l_as_of_date DATE;
19350 l_task_weight_basis_code pa_proj_progress_attr.task_weight_basis_code%TYPE;
19351 l_share_flag VARCHAR2(1) := 'N';
19352 l_copy_actuals_flag VARCHAR2(1) := 'Y';
19353 l_upd_new_elem_ver_id_flag VARCHAR2(1) := 'Y'; --rtarway, 3951024
19354 l_i_msg_count NUMBER := 0;
19355 l_i_msg_data PA_VC_1000_2000:= PA_VC_1000_2000(1);
19356 l_i_return_status VARCHAR2(1);
19357 l_user_id NUMBER := FND_GLOBAL.USER_ID;-- rtarway, 4030358, changed from login id to user_id
19358 --end bug 4019845
19359 l_out_online_flag VARCHAR2(1);
19360
19361 l_plan_version_id NUMBER; --bug 4587145
19362 l_pub_wp_ok VARCHAR2(1) := 'N'; --bug 5029112
19363
19364 BEGIN
19365 IF p_commit = FND_API.G_TRUE THEN
19366 savepoint process_wbs_updates;
19367 END IF;
19368
19369 IF p_init_msg_list = FND_API.G_TRUE THEN
19370 FND_MSG_PUB.initialize;
19371 END IF;
19372
19373 x_msg_count := 0;
19374 x_return_status := FND_API.G_RET_STS_SUCCESS;
19375 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
19376
19377 IF l_debug_mode = 'Y' THEN
19378 pa_debug.write(G_PKG_NAME, 'Entering PROCESS_WBS_UPDATES', 3);
19379 pa_debug.set_curr_function( p_function => 'PROCESS_WBS_UPDATES', p_debug_mode => l_debug_mode );
19380 END IF;
19381
19382 -- Check for business rules violations
19383 IF l_debug_mode = 'Y' THEN
19384 pa_debug.write(G_PKG_NAME, 'Validating input parameters', 3);
19385 pa_debug.write(G_PKG_NAME, 'p_calling_context = '|| p_calling_context, 3);
19386 pa_debug.write(G_PKG_NAME, 'p_project_id = '|| p_project_id, 3);
19387 pa_debug.write(G_PKG_NAME, 'p_structure_version_id = '|| p_structure_version_id, 3);
19388 pa_debug.write(G_PKG_NAME, 'p_pub_struc_ver_id = '|| p_pub_struc_ver_id, 3);
19389 pa_debug.write(G_PKG_NAME, 'p_pub_prog_flag = '|| p_pub_prog_flag, 3);
19390 END IF;
19391
19392 -- Throw an error if any of the mandatory parameter is NULL.
19393 IF (p_project_id IS NULL) OR (p_structure_version_id IS NULL) THEN
19394 PA_UTILS.ADD_MESSAGE
19395 (p_app_short_name => 'PA',
19396 p_msg_name => 'PA_INV_PARAM_PASSED');
19397 RAISE Invalid_Arg_Exc_WP;
19398 END IF;
19399
19400 l_update_wbs_flag := pa_project_structure_utils.GET_UPDATE_WBS_FLAG(p_project_id => p_project_id,
19401 p_structure_version_id => p_structure_version_id);
19402
19403 IF l_debug_mode = 'Y' THEN
19404 pa_debug.write(G_PKG_NAME, 'l_update_wbs_flag = '|| l_update_wbs_flag, 3);
19405 END IF;
19406
19407 --bug 4409337 moved from below to make use of some of these variables for bugfix.
19408 l_workplan_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
19409 l_financial_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'FINANCIAL');
19410 l_share_flag := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(l_project_id);
19411
19412
19413 IF l_debug_mode = 'Y' THEN
19414 pa_debug.write(G_PKG_NAME, 'l_workplan_type = '|| l_workplan_type, 3);
19415 pa_debug.write(G_PKG_NAME, 'l_financial_type = '|| l_financial_type, 3);
19416 pa_debug.write(G_PKG_NAME, 'l_share_flag = '|| l_share_flag, 3);
19417 END IF;
19418 --bug 4409337
19419
19420 IF (p_calling_context = 'ASGMT_PLAN_CHANGE') THEN ---bug 4492493
19421 --- find the as_of_date for which to rollup and
19422 --- rollup method
19423 l_task_weight_basis_code := pa_progress_utils.get_task_weighting_basis(p_project_id => p_project_id);
19424 begin
19425 select max(as_of_date)
19426 into l_as_of_date
19427 from pa_progress_rollup ppr
19428 where ppr.project_id = p_project_id
19429 and ppr.structure_version_id is null
19430 and ppr.structure_type = 'WORKPLAN'
19431 and ppr.current_flag <> 'W'
19432 ;
19433 exception when others then
19434 return;
19435 end;
19436
19437 IF l_debug_mode = 'Y' THEN
19438 pa_debug.write(G_PKG_NAME, 'Calling populate_pji_tab_for_plan' , 3);
19439 END IF;
19440
19441 pa_progress_pub.populate_pji_tab_for_plan(
19442 p_init_msg_list => FND_API.G_FALSE
19443 ,p_commit => FND_API.G_FALSE
19444 ,p_project_id => p_Project_ID
19445 ,p_structure_version_id => p_structure_version_id
19446 ,p_baselined_str_ver_id => p_structure_version_id
19447 ,p_structure_type => 'WORKPLAN'
19448 ,p_program_rollup_flag => 'Y' -- 4392189
19449 ,p_calling_context => 'SUMMARIZE' -- 4392189
19450 ,x_return_status => x_return_status
19451 ,x_msg_count => x_msg_count
19452 ,x_msg_data => x_msg_data);
19453 IF l_debug_mode = 'Y' THEN
19454 pa_debug.write(G_PKG_NAME, 'After populate_pji_tab_for_plan x_return_status='|| x_return_status, 3);
19455 END IF;
19456
19457 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19458 raise Invalid_Arg_Exc_WP;
19459 END IF;
19460 IF l_debug_mode = 'Y' THEN
19461 pa_debug.write(G_PKG_NAME, 'Calling ROLLUP_PROGRESS_PVT', 3);
19462 END IF;
19463
19464 PA_PROGRESS_PVT.ROLLUP_PROGRESS_PVT(
19465 p_init_msg_list => FND_API.G_FALSE
19466 ,p_commit => FND_API.G_FALSE
19467 ,p_project_id => p_Project_ID
19468 ,p_structure_version_id => p_structure_version_id
19469 ,p_as_of_date => l_as_of_date
19470 ,p_wp_rollup_method => l_task_weight_basis_code
19471 ,p_rollup_entire_wbs => 'Y'
19472 ,p_working_wp_prog_flag => 'N'
19473 ,x_return_status => x_return_status
19474 ,x_msg_count => x_msg_count
19475 ,x_msg_data => x_msg_data);
19476
19477 IF l_debug_mode = 'Y' THEN
19478 pa_debug.write(G_PKG_NAME, 'After ROLLUP_PROGRESS_PVT x_return_status='|| x_return_status, 3);
19479 END IF;
19480
19481 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19482 raise Invalid_Arg_Exc_WP;
19483 END IF;
19484 IF l_debug_mode = 'Y' THEN
19485 pa_debug.write(G_PKG_NAME, 'Calling PROGRAM_ROLLUP_PVT', 3);
19486 END IF;
19487
19488 PA_PROGRESS_PVT.PROGRAM_ROLLUP_PVT(
19489 p_init_msg_list => FND_API.G_FALSE
19490 ,p_commit => FND_API.G_FALSE
19491 ,p_validate_only => FND_API.G_FALSE
19492 ,p_calling_module => p_calling_context
19493 ,p_project_id => p_Project_ID
19494 ,p_as_of_date => l_as_of_date
19495 ,p_structure_type => 'WORKPLAN'
19496 ,p_structure_ver_id => p_structure_version_id
19497 ,x_return_status => x_return_status
19498 ,x_msg_count => x_msg_count
19499 ,x_msg_data => x_msg_data);
19500
19501 IF l_debug_mode = 'Y' THEN
19502 pa_debug.write(G_PKG_NAME, 'After PROGRAM_ROLLUP_PVT x_return_status='|| x_return_status, 3);
19503 END IF;
19504
19505 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19506 raise Invalid_Arg_Exc_WP;
19507 END IF; --- bug 4492493
19508
19509 -- Begin code to fix Bug # 4262985.
19510 -- Bug 4392189 : Added call of WBS_MAINT in APPLY_PROGRESS Context
19511 ELSIF (p_calling_context = 'ONLINE_APPLY_PROGRESS' OR p_calling_context = 'CONC_APPLY_PROGRESS') THEN
19512 IF p_calling_context = 'ONLINE_APPLY_PROGRESS' THEN
19513 l_online_flag := 'Y';
19514 ELSE
19515 l_online_flag := 'N';
19516 END IF;
19517
19518 IF l_update_wbs_flag = 'Y' THEN
19519 IF l_debug_mode = 'Y' THEN
19520 pa_debug.write(G_PKG_NAME, 'Calling PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT with l_online_flag='||l_online_flag, 3);
19521 END IF;
19522
19523 BEGIN
19524 -- l_online_flag = 'Y', then it is online
19525 -- 'N' , concurrent
19526 -- Even if it is Y, then wbs_maint defers it for Financial and version disabled case
19527
19528 PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT(
19529 p_new_struct_ver_id => p_structure_version_id
19530 ,p_old_struct_ver_id => p_structure_version_id
19531 ,p_project_id => p_project_id
19532 ,p_online_flag => l_online_flag
19533 ,p_calling_context => 'APPLY_PROGRESS'
19534 ,p_rerun_flag => p_rerun_flag --bug 4589289
19535 ,x_request_id => l_request_id
19536 ,x_processing_code => l_proc_code
19537 ,x_msg_code => l_msg_Code
19538 ,x_return_status => x_return_status
19539 ,x_online_flag => l_out_online_flag
19540 );
19541 IF l_debug_mode = 'Y' THEN
19542 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);
19543 END IF;
19544 EXCEPTION
19545 WHEN OTHERS THEN
19546 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19547 p_procedure_name => 'PROCESS_WBS_UDPATES',
19548 p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT Failed in Apply Progress Mode: SQLERRM='||SQLERRM,1,240));
19549 RAISE Invalid_Arg_Exc_WP;
19550 END;
19551
19552 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
19553 raise Invalid_Arg_Exc_WP;
19554 END IF;
19555 END IF; -- l_update_wbs_flag = 'Y'
19556
19557
19558 IF NVL(l_update_wbs_flag,'N') = 'N' OR NVL(l_out_online_flag, 'Y') <> 'N' THEN
19559 IF l_debug_mode = 'Y' THEN
19560 pa_debug.write(G_PKG_NAME, 'Calling PA_PROGRESS_PUB.APPLY_LP_PROG_ON_CWV', 3);
19561 END IF;
19562
19563 PA_PROGRESS_PUB.APPLY_LP_PROG_ON_CWV
19564 (p_project_id => p_project_id
19565 ,p_working_str_version_id => p_structure_version_id
19566 ,x_return_status => x_return_status
19567 ,x_msg_count => x_msg_count
19568 ,x_msg_data => x_msg_data);
19569
19570 IF l_debug_mode = 'Y' THEN
19571 pa_debug.write(G_PKG_NAME, 'After Call PA_PROGRESS_PUB.APPLY_LP_PROG_ON_CWV x_return_status='||x_return_status, 3);
19572 END IF;
19573
19574 END IF;
19575
19576 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
19577 raise Invalid_Arg_Exc_WP;
19578 END IF;
19579
19580 ELSE -- IF (p_calling_context = 'ONLINE_APPLY_PROGRESS' OR p_calling_context = 'CONC_APPLY_PROGRESS') THEN
19581
19582 -- End code to fix Bug # 4262985.
19583
19584
19585 --hsiu: bug 3035902
19586 --commented condition because there can be partial process
19587 --on financial planning API. Condition is added after processing
19588 --financial planning tasks.
19589 /*
19590 IF l_update_wbs_flag = 'N' THEN
19591 -- No further processing is required for this structure version. Return.
19592 -- TWUT.
19593 IF l_debug_mode = 'Y' THEN
19594 pa_debug.g_err_stage:= 'No updates required for this structure version.';
19595 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
19596 END IF;
19597 RETURN;
19598 END IF;
19599 */
19600
19601 -- Get the request id. If the request id returned is -1 then set it to null.
19602 l_request_id := FND_GLOBAL.CONC_REQUEST_ID;
19603 IF l_request_id = -1 THEN
19604 l_request_id := NULL;
19605 END IF;
19606
19607 -- Check if the structure version to be processed corresponds to the FINANCIAL structure.
19608 -- If yes, do the processing required for the financial version.
19609 OPEN cur_structure_type(p_project_id, p_structure_version_id,'FINANCIAL');
19610 FETCH cur_structure_type INTO l_structure_type_flag;
19611 CLOSE cur_structure_type;
19612
19613 -- TWUT.
19614 IF l_debug_mode = 'Y' THEN
19615 pa_debug.write(G_PKG_NAME, 'Financial structure type flag '||l_structure_type_flag, 3);
19616 END IF;
19617
19618 /*
19619 IF nvl(l_structure_type_flag,'N') = 'Y' THEN
19620 x_return_status := FND_API.G_RET_STS_SUCCESS;
19621 -- Call the financial planning API.
19622 pa_fp_refresh_elements_pub.refresh_planning_elements(
19623 p_project_id => p_project_id
19624 ,p_request_id => l_request_id
19625 ,x_return_status => x_return_status
19626 ,x_msg_count => x_msg_count
19627 ,x_msg_data => x_msg_data
19628 );
19629 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
19630 IF l_debug_mode = 'Y' THEN
19631 pa_debug.g_err_stage := 'Error calling the financial planning API';
19632 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
19633 END IF;
19634 Raise Invalid_Arg_Exc_WP;
19635 END IF;
19636 END IF;
19637 */
19638
19639 -- Begin fix for Bug # 4409337.
19640
19641 if nvl(l_structure_type_flag,'N') = 'Y'
19642 AND p_calling_context IN ( 'ONLINE_UPDATE', 'CONC_UPDATE' ) --bug 4472071
19643 AND ( l_share_flag = 'N' OR l_workplan_type = 'N' ) --call WBS maint only if the project is either split financial or financial only.
19644 then
19645
19646 x_return_status := FND_API.G_RET_STS_SUCCESS;
19647
19648 -- Call the PJI API.
19649
19650 PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT(
19651 p_new_struct_ver_id => p_structure_version_id
19652 ,p_old_struct_ver_id => p_structure_version_id
19653 ,p_project_id => p_project_id
19654 ,p_online_flag => l_online_flag
19655 ,p_calling_context => p_calling_context
19656 ,p_rerun_flag => p_rerun_flag --bug 4589289
19657 ,x_request_id => l_request_id
19658 ,x_processing_code => l_proc_code
19659 ,x_msg_code => l_msg_Code
19660 ,x_return_status => x_return_status
19661 ,x_online_flag => l_out_online_flag
19662 );
19663
19664 if x_return_status <> FND_API.G_RET_STS_SUCCESS then
19665
19666 if l_debug_mode = 'Y' then
19667
19668 pa_debug.g_err_stage := 'Error calling the financial planning API';
19669 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
19670
19671 end if;
19672
19673 Raise Invalid_Arg_Exc_WP;
19674 end if;
19675
19676 end if;
19677
19678 -- End fix for Bug # 4409337.
19679
19680 --hsiu: bug 3035902
19681 --Adding condition because there can be partial process
19682 --on financial planning API and we should not check the flag
19683 --for financial planning.
19684 --hsiu: commented for PJI integration
19685 /*
19686 IF l_update_wbs_flag = 'N' THEN
19687 -- No further processing is required for this structure version. Return.
19688 -- TWUT.
19689 IF l_debug_mode = 'Y' THEN
19690 pa_debug.g_err_stage:= 'No updates required for this structure version.';
19691 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
19692 END IF;
19693 RETURN;
19694 END IF;
19695 */
19696 --end bug 3035902 changes
19697
19698 -- Re initilaize the local as it is again used for a cursor fetch.
19699 -- TWUT
19700 l_structure_type_flag := NULL;
19701
19702 -- Check if the sructure version to be processed corresponds to the WORKPLAN structure.
19703 -- If yes, do the processing required for the workplan version.
19704 OPEN cur_structure_type(p_project_id, p_structure_version_id, 'WORKPLAN');
19705 FETCH cur_structure_type INTO l_structure_type_flag;
19706 CLOSE cur_structure_type;
19707
19708 -- TWUT.
19709 IF l_debug_mode = 'Y' THEN
19710 pa_debug.g_err_stage:= 'Workplan structure type flag '||l_structure_type_flag;
19711 pa_debug.write(G_PKG_NAME, 'Workplan structure type flag '||l_structure_type_flag, 3);
19712 END IF;
19713
19714 IF p_calling_context <> 'COPY_PROJECT' THEN --bug 3035902 maansari
19715 --PJI changes
19716 --bug
19717 IF p_calling_context = 'ONLINE_PUBLISH' THEN
19718 --bug 3762882
19719 OPEN get_prev_published_ver(p_pub_struc_ver_id);
19720 FETCH get_prev_published_ver INTO l_prev_ver_id;
19721 CLOSE get_prev_published_ver;
19722
19723 --bug 4019845
19724 --set current published as working for edit
19725
19726 UPDATE pa_proj_elem_ver_structure
19727 SET status_code = 'STRUCTURE_WORKING',
19728 LOCKED_BY_PERSON_ID = (select locked_by_person_id
19729 from pa_proj_elem_ver_structure
19730 where project_id = l_project_id
19731 and element_version_id = p_structure_version_id),
19732 LOCK_STATUS_CODE = 'LOCKED'
19733 WHERE project_id = l_project_id
19734 AND element_version_id = p_pub_struc_ver_id;
19735
19736 --end bug 4019845
19737 --end bug 3762882
19738 l_pub_ver_id := p_pub_struc_ver_id;
19739 l_online_flag := 'Y';
19740 l_publish_flag := 'Y';
19741 ELSIF p_calling_context = 'ONLINE_UPDATE' THEN
19742 --bug 3574457: changed to p_structure_version_id
19743 l_pub_ver_id := p_structure_version_id;
19744 l_online_flag := 'Y';
19745 l_publish_flag := 'N';
19746 ELSIF p_calling_context = 'CONC_PUBLISH' THEN
19747 --bug 3574457: changed to p_pub_struc_ver_id
19748 --bug 3762882
19749
19750 OPEN get_prev_published_ver(p_pub_struc_ver_id);
19751 FETCH get_prev_published_ver INTO l_prev_ver_id;
19752 CLOSE get_prev_published_ver;
19753
19754 --bug 4019845
19755 --set current published as working for edit
19756
19757 UPDATE pa_proj_elem_ver_structure
19758 SET status_code = 'STRUCTURE_WORKING',
19759 LOCKED_BY_PERSON_ID = (select locked_by_person_id
19760 from pa_proj_elem_ver_structure
19761 where project_id = l_project_id
19762 and element_version_id = p_structure_version_id),
19763 LOCK_STATUS_CODE = 'LOCKED'
19764 WHERE project_id = l_project_id
19765 AND element_version_id = p_pub_struc_ver_id;
19766
19767 --end bug 4019845
19768 --end bug 3762882
19769
19770 l_pub_ver_id := p_pub_struc_ver_id;
19771 l_online_flag := 'N';
19772 l_publish_flag := 'Y';
19773 ELSIF p_calling_context = 'CONC_UPDATE' THEN
19774 l_pub_ver_id := p_structure_version_id;
19775 l_online_flag := 'N';
19776 l_publish_flag := 'N';
19777 END IF;
19778
19779 -- Bug 3762882 : This code should be commented as FP is also
19780 -- pushing actuals for resource assignments so we should not push it for tasks here.
19781 -- BEGIN Bug 4284444 : Commented
19782
19783 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N'; --4149392 fixed during fixing 4186512
19784
19785 --bug 4019845
19786 IF (l_publish_flag = 'Y') THEN
19787 --*******************************************
19788 --Process WBS in PUBLISH mode
19789 --*******************************************
19790
19791 -- bug 5118313 Before proceding further with publishing, first correct the WBS on the working version.
19792 --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.
19793
19794 --bug 4587145 Call plan update one more time for working version in the publish mode.
19795 --This call is required in the publish if a workplan is published without running process WBS update after making some
19796 --wbs changes like indent/outdent/copy/move.
19797 BEGIN
19798
19799 BEGIN
19800
19801 IF l_debug_mode = 'Y' THEN
19802 pa_debug.write(G_PKG_NAME, 'Calling Pa_Fp_wp_gen_amt_utils.get_wp_version_id in PUBLISH mode for workign version', 3);
19803 END IF;
19804
19805 l_plan_version_id := Pa_Fp_wp_gen_amt_utils.get_wp_version_id(
19806 p_project_id => l_project_id,
19807 p_plan_type_id => -1,
19808 p_proj_str_ver_id => p_structure_version_id) ;
19809
19810 IF l_debug_mode = 'Y' THEN
19811 pa_debug.write(G_PKG_NAME, 'l_plan_version_id in UPDATE mode for working version='||l_plan_version_id, 3);
19812 END IF;
19813
19814 EXCEPTION
19815 WHEN OTHERS THEN
19816 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19817 p_procedure_name => 'PROCESS_WBS_UPDATES',
19818 p_error_text => SUBSTRB('Call of Pa_Fp_wp_gen_amt_utils.get_wp_version_id is failed for PUBLISH Mode for working '||
19819 'verison: SQLERRM='||SQLERRM,1,120));
19820 RAISE Invalid_Arg_Exc_WP;
19821
19822 END;
19823 --end bug 4587145
19824
19825 IF l_debug_mode = 'Y' THEN
19826 pa_debug.write(G_PKG_NAME, 'Calling PLAN_UPDATE in PUBLISH mode for working version', 3);
19827 END IF;
19828 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := null; --set the flag so that PJI rolls up data on the working version.
19829
19830 PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE (x_msg_code => l_msg_code,
19831 p_plan_version_id => l_plan_version_id, --bug 4587145
19832 x_return_status => x_return_status);
19833
19834 IF l_debug_mode = 'Y' THEN
19835 pa_debug.write(G_PKG_NAME,'After PLAN_UPDATE in PUBLISH mode for working verison x_return_status='||
19836 x_return_status,l_debug_level3);
19837 END IF;
19838 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.
19839 EXCEPTION
19840 WHEN OTHERS THEN
19841 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19842 p_procedure_name => 'PROCESS_WBS_UPDATES',
19843 p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE failed in PUBLISH mode for'||
19844 ' working verison:SQLERRM='||SQLERRM,1,120));
19845 RAISE Invalid_Arg_Exc_WP;
19846 END;
19847
19848 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
19849 Raise Invalid_Arg_Exc_WP;
19850 END IF;
19851
19852 --end bug 4587145
19853 --end bug 5118313
19854
19855
19856 --bug 4472071 check if PJI summarization failed when WBS_MAIN is called. This means that the following
19857 --api need not run again.
19858 OPEN cur_chk_pji_failed;
19859 FETCH cur_chk_pji_failed INTO l_dummy_pji_char;
19860 IF cur_chk_pji_failed%NOTFOUND
19861 THEN
19862 --bug 4472071
19863 --all code from publishing (before calling process_wbs_updates)
19864
19865 IF l_debug_mode = 'Y' THEN
19866 pa_debug.write(G_PKG_NAME, 'Calling PA_Relationship_Pvt.Copy_Intra_Dependency', 3);
19867 END IF;
19868
19869 PA_Relationship_Pvt.Copy_Intra_Dependency (
19870 P_Source_Ver_Tbl => NULL,
19871 P_Destin_Ver_Tbl => NULL,
19872 P_source_struc_ver_id => p_structure_version_id,
19873 p_dest_struc_ver_id => l_pub_ver_id,
19874 X_Return_Status => X_Return_Status,
19875 X_Msg_Count => X_Msg_Count,
19876 X_Msg_Data => X_Msg_Data
19877 );
19878
19879 IF l_debug_mode = 'Y' THEN
19880 pa_debug.write(G_PKG_NAME, 'After Copy_Intra_Dependency X_Return_Status='||X_Return_Status, 3);
19881 END IF;
19882
19883 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19884 RAISE Invalid_Arg_Exc_WP;
19885 END IF;
19886
19887 IF l_debug_mode = 'Y' THEN
19888 pa_debug.write(G_PKG_NAME, 'Calling Publish_Inter_Proj_Dep', 3);
19889 END IF;
19890
19891 PA_RELATIONSHIP_PVT.Publish_Inter_Proj_Dep ( -- This API needs to be called
19892 p_publishing_struc_ver_id => p_structure_version_id,
19893 p_previous_pub_struc_ver_id => l_prev_ver_id,
19894 p_published_struc_ver_id => l_pub_ver_id,
19895 X_Return_Status => X_Return_Status,
19896 X_Msg_Count => X_Msg_Count,
19897 X_Msg_Data => X_Msg_Data
19898 );
19899
19900 IF l_debug_mode = 'Y' THEN
19901 pa_debug.write(G_PKG_NAME, 'After Publish_Inter_Proj_Dep X_Return_Status='||X_Return_Status, 3);
19902 END IF;
19903
19904 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19905 RAISE Invalid_Arg_Exc_WP;
19906 END IF;
19907
19908 IF l_debug_mode = 'Y' THEN
19909 pa_debug.write(G_PKG_NAME, 'Calling Copy_OG_Lnk_For_Subproj_Ass', 3);
19910 END IF;
19911
19912
19913 PA_RELATIONSHIP_PVT.Copy_OG_Lnk_For_Subproj_Ass(
19914 p_src_str_version_id => p_structure_version_id,
19915 p_dest_str_version_id => l_pub_ver_id, -- Destination Str version id can be of published str also
19916 x_return_status => X_Return_Status,
19917 x_msg_count => X_Msg_Count,
19918 x_msg_data => X_Msg_Data
19919 );
19920
19921
19922 IF l_debug_mode = 'Y' THEN
19923 pa_debug.write(G_PKG_NAME, 'After Copy_OG_Lnk_For_Subproj_Ass X_Return_Status='||X_Return_Status, 3);
19924 END IF;
19925
19926 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19927 RAISE Invalid_Arg_Exc_WP;
19928 END IF;
19929
19930
19931 IF l_debug_mode = 'Y' THEN
19932 pa_debug.write(G_PKG_NAME, 'Calling Move_CI_Lnk_For_subproj_step1', 3);
19933 END IF;
19934
19935 PA_RELATIONSHIP_PVT.Move_CI_Lnk_For_subproj_step1(
19936 p_src_str_version_id => p_structure_version_id,
19937 p_pub_str_version_id => l_pub_ver_id,
19938 p_last_pub_str_version_id => l_prev_ver_id,
19939 x_return_status => x_return_status,
19940 x_msg_count => x_msg_count,
19941 x_msg_data => x_msg_data);
19942
19943 IF l_debug_mode = 'Y' THEN
19944 pa_debug.write(G_PKG_NAME, 'After Move_CI_Lnk_For_subproj_step1 X_Return_Status='||X_Return_Status, 3);
19945 END IF;
19946
19947 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19948 RAISE Invalid_Arg_Exc_WP;
19949 END IF;
19950
19951 IF l_debug_mode = 'Y' THEN
19952 pa_debug.write(G_PKG_NAME, 'Calling copy_mapping', 3);
19953 END IF;
19954
19955
19956 PA_PROJ_STRUC_MAPPING_PUB.copy_mapping(
19957 p_context => 'PUBLISH_VERSION'
19958 ,p_src_project_id => l_project_id
19959 ,p_dest_project_id => l_project_id
19960 ,p_src_str_version_id => p_structure_version_id
19961 ,p_dest_str_version_id => l_pub_ver_id
19962 ,x_return_status => x_return_status
19963 ,x_msg_count => x_msg_count
19964 ,x_msg_data => x_msg_data
19965 );
19966
19967 IF l_debug_mode = 'Y' THEN
19968 pa_debug.write(G_PKG_NAME, 'After copy_mapping X_Return_Status='||X_Return_Status, 3);
19969 END IF;
19970
19971 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19972 RAISE Invalid_Arg_Exc_WP;
19973 END IF;
19974
19975 DECLARE
19976 src_versions_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
19977 dest_versions_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
19978 prev_pub_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); --bug 3847386
19979 BEGIN
19980 src_versions_tab.extend(1);
19981 dest_versions_tab.extend(1);
19982 src_versions_tab(1) := p_structure_version_id;
19983 dest_versions_tab(1) := l_pub_ver_id;
19984 prev_pub_tab.extend(1); --bug 3847386
19985 prev_pub_tab(1) := l_prev_ver_id; --bug 3847386
19986 -- Copies budget versions, resource assignments and budget lines as required
19987 -- for the workplan version.
19988 --Smukka Bug No. 3474141 Date 03/01/2004
19989 --moved PA_FP_COPY_FROM_PKG.copy_wp_budget_versions into plsql block
19990 BEGIN
19991
19992 IF l_debug_mode = 'Y' THEN
19993 pa_debug.write(G_PKG_NAME, 'Calling copy_wp_budget_versions', 3);
19994 END IF;
19995
19996 PA_TASK_ASSIGNMENT_UTILS.g_process_flow := 'PUBLISH'; -- 4646016
19997
19998 PA_FP_COPY_FROM_PKG.copy_wp_budget_versions(
19999 p_source_project_id => l_project_id
20000 ,p_target_project_id => l_project_id
20001 ,p_src_sv_ids_tbl => src_Versions_Tab
20002 ,p_target_sv_ids_tbl => dest_Versions_Tab
20003 ,p_copy_act_from_str_ids_tbl => prev_pub_tab --bug 3847386
20004 --,p_publish_mode => 'Y' --bug 4543744
20005 ,p_copy_mode => 'V' --bug 5118313
20006 ,x_return_status => x_return_status
20007 ,x_msg_count => x_msg_count
20008 ,x_Msg_data => x_msg_data
20009 );
20010
20011 PA_TASK_ASSIGNMENT_UTILS.g_process_flow := null; -- 4646016
20012
20013 IF l_debug_mode = 'Y' THEN
20014 pa_debug.write(G_PKG_NAME, 'After copy_wp_budget_versions X_Return_Status='||X_Return_Status, 3);
20015 END IF;
20016
20017 EXCEPTION
20018 WHEN OTHERS THEN
20019 PA_TASK_ASSIGNMENT_UTILS.g_process_flow := null; -- 4646016
20020 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
20021 p_procedure_name => 'PROCESS_WBS_UDPATES',
20022 p_error_text => SUBSTRB('Call of PA_FP_COPY_FROM_PKG.copy_wp_budget_versions failed: SQLERRM='||SQLERRM,1,240));
20023 RAISE Invalid_Arg_Exc_WP;
20024 END;
20025
20026 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20027 RAISE Invalid_Arg_Exc_WP;
20028 END IF;
20029 END;
20030
20031 --moved these calls in the beginning.
20032 --l_workplan_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
20033 --l_financial_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'FINANCIAL');
20034
20035 IF (l_financial_type = 'Y') THEN
20036
20037 SELECT start_date, completion_date
20038 INTO l_proj_start_date, l_proj_completion_date
20039 FROM pa_projects_all
20040 WHERE project_id = l_project_id;
20041
20042 --Call sync-up API
20043
20044 IF l_debug_mode = 'Y' THEN
20045 pa_debug.write(G_PKG_NAME,'Calling import_task', 3);
20046 END IF;
20047
20048 PA_XC_PROJECT_PUB.import_task(
20049 p_project_id => l_project_id
20050 ,p_task_reference => NULL
20051 ,p_task_name => NULL
20052 ,p_task_start_date => NULL
20053 ,p_task_end_date => NULL
20054 ,p_parent_task_reference => NULL
20055 ,p_task_number => NULL
20056 ,p_wbs_level => NULL
20057 ,p_milestone => NULL
20058 ,p_duration => NULL
20059 ,p_duration_unit => NULL
20060 ,p_early_start_date => NULL
20061 ,p_early_finish_date => NULL
20062 ,p_late_start_date => NULL
20063 ,p_late_finish_date => NULL
20064 ,p_display_seq => NULL
20065 ,p_login_user_name => NULL
20066 ,p_critical_path => NULL
20067 ,p_sub_project_id => NULL
20068 ,p_attribute7 => NULL
20069 ,p_attribute8 => NULL
20070 ,p_attribute9 => NULL
20071 ,p_attribute10 => NULL
20072 ,p_progress_report => NULL
20073 ,p_progress_status => NULL
20074 ,p_progress_comments => NULL
20075 ,p_progress_asof_date => NULL
20076 ,p_predecessors => NULL
20077 ,p_structure_version_id => l_pub_ver_id
20078 ,p_calling_mode => 'PUBLISH' );
20079
20080 IF l_debug_mode = 'Y' THEN
20081 pa_debug.g_err_stage:= 'After import_task FND_MSG_PUB.count_msg='|| FND_MSG_PUB.count_msg;
20082 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
20083 END IF;
20084 -- Fix for Bug # 4513291. Added below Exception handling
20085 x_msg_count := FND_MSG_PUB.count_msg;
20086 IF x_msg_count > 0 THEN
20087 raise Invalid_Arg_Exc_WP;
20088 END IF;
20089
20090
20091 IF l_debug_mode = 'Y' THEN
20092 pa_debug.g_err_stage:= 'Calling import_project ';
20093 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
20094 END IF;
20095
20096 l_i_msg_count := 0;
20097 l_i_return_status := 'S'; -- Fix for Bug # 4513291.
20098 PA_XC_PROJECT_PUB.import_project(
20099 p_user_id => l_user_id
20100 ,p_commit => 'N'
20101 ,p_project_id => l_project_id
20102 ,p_project_mpx_start_date => fnd_date.date_to_canonical(l_proj_start_date)
20103 ,p_project_mpx_end_date => fnd_date.date_to_canonical(l_proj_completion_date)
20104 ,p_task_mgr_override => NULL
20105 ,p_task_pgs_override => NULL
20106 ,p_process_id => NULL
20107 ,p_language => NULL
20108 ,p_delimiter => NULL
20109 ,p_responsibility_id => l_responsibility_id
20110 ,p_structure_id => NULL
20111 ,p_structure_version_id => l_pub_ver_id
20112 ,p_calling_mode => 'PUBLISH'
20113 ,p_resp_appl_id => l_resp_appl_id -- 5233777
20114 ,p_debug_mode => l_debug_mode -- Fix for Bug # 4513291.
20115 ,x_msg_count => l_i_msg_count
20116 ,x_msg_data => l_i_msg_data
20117 ,x_return_status => l_i_return_status);
20118
20119 IF l_debug_mode = 'Y' THEN
20120 pa_debug.g_err_stage:= 'After import_project FND_MSG_PUB.count_msg='|| FND_MSG_PUB.count_msg;
20121 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
20122 pa_debug.write(G_PKG_NAME,'l_i_return_status='||l_i_return_status,l_debug_level3);
20123 -- Fix for Bug # 4513291.
20124 pa_debug.write(G_PKG_NAME,'l_i_msg_count='||l_i_msg_count,l_debug_level3);
20125 -- Fix for Bug # 4513291.
20126 END IF;
20127
20128 l_msg_count := FND_MSG_PUB.count_msg;
20129 --IF l_msg_count > 0 THEN -- Fix for Bug # 4513291.
20130 IF l_msg_count > 0 OR l_i_return_status <> 'S' OR l_i_msg_count > 0 THEN -- Fix for Bug # 4513291.
20131 x_msg_count := l_msg_count;
20132 raise Invalid_Arg_Exc_WP;
20133 END IF;
20134 END IF; --if financial type = Y
20135
20136 --bug 4472071
20137 END IF;
20138 CLOSE cur_chk_pji_failed;
20139 --bug 4472071
20140
20141
20142 --moved this code here from above for bugfix 4296915. This is required in order to pick the
20143 --published str version in tasks_rollup api after its status is set to published..
20144 --bug 4287813 --move the code in PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for
20145 --bug 4541039
20146
20147 --this rollup call is require to rollup from a published structure of sub-project to this project
20148 --if the link is created but process updates is not run.
20149 --The global variable g_apply_progress_flag is used to by pass the check in
20150 --pa_task_assingment_utils.check_edit_task_ok api for any process is running. The api
20151 --pa_task_assignment_utils_adjust_assgnmt_dates is failing for the working verison bcoz there is
20152 --a process(PUB) currently in process and therefore edit_task_ok api will return 'N' to
20153 --adjust_asgnmt api.
20154
20155 PA_TASK_ASSIGNMENT_UTILS.g_apply_progress_flag := 'Y'; --although th
20156 --IF PA_PROJECT_STRUCTURE_UTILS.Check_Subproject_Exists(l_project_id,p_structure_version_id, 'WORKPLAN') = 'Y' THEN
20157 IF PA_RELATIONSHIP_UTILS.Check_link_exists( p_project_id => p_project_id
20158 ,p_link_type => 'WORKPLAN' ) = 'Y'
20159 THEN
20160
20161 --call the dates rollup API for the structure version
20162 IF l_debug_mode = 'Y' THEN
20163 pa_debug.write(G_PKG_NAME, 'Before calling PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for entire grid in PUBLISH mode', 3);
20164 END IF;
20165
20166 PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup(
20167 p_project_id => p_project_id,
20168 p_published_str_ver_id => l_pub_ver_id,
20169 x_return_status => x_return_status,
20170 x_msg_count => x_msg_count,
20171 x_msg_data => x_msg_data);
20172
20173 IF l_debug_mode = 'Y' THEN
20174 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);
20175 END IF;
20176
20177 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20178 RAISE Invalid_Arg_Exc_WP;
20179 END IF;
20180 END IF;
20181
20182 -- bug 8971181 : Moved this code to below the call for schedule dates rollup, as stamping of PUBLISHED version hinders the validation checks for task assignments if attached
20183 --bug 4555289 moved here to avoid multiple working versions.
20184 --if there was a failure in PJI then the following code pieces were not
20185 --getting executed hence there were multiple working verisons.
20186 --set published version back to published status
20187 UPDATE pa_proj_elem_ver_structure
20188 SET status_code = 'STRUCTURE_PUBLISHED',
20189 LOCKED_BY_PERSON_ID = NULL,
20190 LOCK_STATUS_CODE = 'UNLOCKED'
20191 WHERE project_id = l_project_id
20192 AND element_version_id = l_pub_ver_id;
20193
20194 --rollup to the parent project from the current published structure version.
20195 /*IF PA_RELATIONSHIP_UTILS.Check_parent_project_exists(
20196 p_project_id => p_project_id
20197 ,p_structure_ver_id => l_pub_ver_id
20198 ,p_link_type => 'WORKPLAN' ) = 'Y'
20199 IF PA_PROJECT_STRUCTURE_UTILS.Check_Subproject_Exists(l_project_id,l_pub_ver_id, 'WORKPLAN') = 'Y'
20200 THEN
20201 IF l_debug_mode = 'Y' THEN
20202 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);
20203 END IF;
20204
20205 PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup(
20206 p_project_id => p_project_id,
20207 p_structure_version_id => l_pub_ver_id,
20208 x_return_status => x_return_status,
20209 x_msg_count => x_msg_count,
20210 x_msg_data => x_msg_data);
20211
20212 IF l_debug_mode = 'Y' THEN
20213 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);
20214 END IF;
20215
20216 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20217 RAISE Invalid_Arg_Exc_WP;
20218 END IF;
20219
20220 END IF;
20221 */
20222 PA_TASK_ASSIGNMENT_UTILS.g_apply_progress_flag := 'N';
20223 --end bug 4287813
20224 --end bug 4541039
20225
20226 IF l_debug_mode = 'Y' THEN
20227 pa_debug.write(G_PKG_NAME, 'Calling Task_Stat_Pushdown_Rollup', 3);
20228 END IF;
20229
20230 --push down and rollup
20231 PA_STRUCT_TASK_ROLLUP_PUB.Task_Stat_Pushdown_Rollup(
20232 p_structure_version_id => l_pub_ver_id
20233 ,x_return_status => x_return_status
20234 ,x_msg_count => x_msg_count
20235 ,x_msg_data => x_msg_data
20236 );
20237
20238 IF l_debug_mode = 'Y' THEN
20239 pa_debug.write(G_PKG_NAME, 'After Task_Stat_Pushdown_Rollup x_return_status='|| x_return_status, 3);
20240 END IF;
20241
20242 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20243 RAISE Invalid_Arg_Exc_WP;
20244 END IF;
20245 --End bug 4555289
20246
20247 --moved here before calling summarization API for program reporting changes.
20248 -- This was previously called just before COPY_PROGRESS_ACT_ETC api
20249 --bug 3762882
20250
20251 BEGIN -- Bug 4284444
20252 --new published version and prev published version
20253 IF l_debug_mode = 'Y' THEN
20254 pa_debug.write(G_PKG_NAME, 'Calling WBS_MAINT in PUBLISH mode', 3);
20255 END IF;
20256
20257 PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT(
20258 p_new_struct_ver_id => l_pub_ver_id
20259 ,p_old_struct_ver_id => l_prev_ver_id
20260 ,p_project_id => p_project_id
20261 ,p_publish_flag => 'Y'
20262 ,p_online_flag => l_online_flag
20263 ,p_calling_context => p_calling_context -- 4392189
20264 ,p_rerun_flag => p_rerun_flag --bug 4589289
20265 ,x_request_id => l_request_id
20266 ,x_processing_code => l_proc_code
20267 ,x_msg_code => l_msg_Code
20268 ,x_return_status => x_return_status
20269 ,x_online_flag => l_out_online_flag -- 4392189
20270 );
20271 IF l_debug_mode = 'Y' THEN
20272 pa_debug.write(G_PKG_NAME, 'After WBS_MAINT in PUBLISH mode x_return_status='|| x_return_status, 3);
20273 END IF;
20274
20275 EXCEPTION
20276 WHEN OTHERS THEN
20277 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
20278 p_procedure_name => 'PROCESS_WBS_UPDATES',
20279 p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT Failed for Publish Mode: SQLERRM='||SQLERRM,1,240));
20280 RAISE Invalid_Arg_Exc_WP;
20281 END;
20282 --endbug 3762882
20283
20284 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20285 Raise Invalid_Arg_Exc_WP;
20286 END IF;
20287
20288 -- Added this for FP_M changes -- Bhumesh
20289
20290 IF l_debug_mode = 'Y' THEN
20291 pa_debug.write(G_PKG_NAME, 'Calling Pull_Summarized_Actuals', 3);
20292 END IF;
20293
20294 PA_PROGRESS_PUB.Pull_Summarized_Actuals (
20295 P_Project_ID => l_Project_ID
20296 ,p_Calling_Mode => 'PUBLISH'
20297 ,x_return_status => x_return_status
20298 ,x_msg_count => x_msg_count
20299 ,x_msg_data => x_msg_data
20300 );
20301
20302 IF l_debug_mode = 'Y' THEN
20303 pa_debug.write(G_PKG_NAME, 'After Pull_Summarized_Actuals x_return_status='|| x_return_status, 3);
20304 END IF;
20305
20306 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20307 RAISE Invalid_Arg_Exc_WP;
20308 END IF;
20309
20310 --bug 4232150 Moved from above to be called after summarization.
20311 -- Dates changes
20312
20313 IF (l_workplan_type = 'Y') THEN
20314 OPEN get_scheduled_dates(l_project_id, l_pub_ver_id);
20315 FETCH get_scheduled_dates INTO l_scheduled_start_date, l_scheduled_finish_date;
20316 CLOSE get_scheduled_dates;
20317
20318 OPEN get_proj_rec_ver_number(l_project_id);
20319 FETCH get_proj_rec_ver_number INTO l_proj_record_ver_number;
20320 CLOSE get_proj_rec_ver_number;
20321
20322 IF l_debug_mode = 'Y' THEN
20323 pa_debug.write(G_PKG_NAME, 'Calling UPDATE_PROJECT_DATES', 3);
20324 END IF;
20325
20326 PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
20327 p_validate_only => FND_API.G_FALSE
20328 ,p_project_id => l_project_id
20329 ,p_date_type => 'SCHEDULED'
20330 ,p_start_date => l_scheduled_start_date
20331 ,p_finish_date => l_scheduled_finish_date
20332 ,p_record_version_number => l_proj_record_ver_number
20333 ,x_return_status => x_return_status
20334 ,x_msg_count => l_msg_count
20335 ,x_msg_data => l_msg_data );
20336
20337 IF l_debug_mode = 'Y' THEN
20338 pa_debug.write(G_PKG_NAME, 'After UPDATE_PROJECT_DATES x_return_status='|| x_return_status, 3);
20339 END IF;
20340
20341 --Check if there is any error.
20342 l_msg_count := FND_MSG_PUB.count_msg;
20343 IF l_msg_count > 0 THEN
20344 x_msg_count := l_msg_count;
20345 IF x_msg_count = 1 THEN
20346 x_msg_data := l_msg_data;
20347 END IF;
20348 RAISE Invalid_Arg_Exc_WP;
20349 END IF;
20350 END IF; --workplan = Y
20351
20352 -- project dates changes
20353 -- copy dates to transaction dates if 1, share structure
20354 IF ((l_workplan_type = 'Y') AND (l_financial_type = 'Y')) THEN
20355 --select workplan attr
20356 OPEN get_struc_id(l_project_id, l_pub_ver_id);
20357 FETCH get_struc_id INTO l_proj_element_id;
20358 CLOSE get_struc_id;
20359
20360 IF (PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_DATE_SYNC_ENABLED(l_proj_element_id) = 'Y') THEN
20361 --Copy to transaction date
20362 IF l_debug_mode = 'Y' THEN
20363 pa_debug.write(G_PKG_NAME, 'Calling COPY_PROJECT_DATES', 3);
20364 END IF;
20365 PA_PROJECT_DATES_PUB.COPY_PROJECT_DATES(
20366 p_project_id => l_project_id,
20367 x_return_status => x_return_status,
20368 x_msg_count => l_msg_count,
20369 x_msg_data => l_msg_data
20370 );
20371
20372 IF l_debug_mode = 'Y' THEN
20373 pa_debug.write(G_PKG_NAME, 'After COPY_PROJECT_DATES x_return_status='|| x_return_status, 3);
20374 END IF;
20375
20376 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20377 raise Invalid_Arg_Exc_WP;
20378 END IF;
20379
20380 END IF;
20381 END IF; -- ((l_workplan_type = 'Y') AND (l_financial_type = 'Y')) THEN
20382
20383 -- 5029112 (4925192)
20384 l_pub_wp_ok := pa_progress_utils.check_wwp_prog_publishing_ok(l_project_id,p_structure_version_id);
20385 --bug 4232150
20386
20387 IF p_pub_prog_flag = 'Y' THEN
20388
20389 IF l_debug_mode = 'Y' THEN
20390 pa_debug.write(G_PKG_NAME, 'Calling Publish_Progress', 3);
20391 END IF;
20392
20393 PA_PROGRESS_PUB.Publish_Progress(
20394 p_project_id => l_Project_ID
20395 ,p_working_str_ver_id => p_structure_version_id -- Bug 4190086
20396 ,p_pub_structure_version_id => l_pub_ver_id -- Bug 3839288
20397 ,x_upd_new_elem_ver_id_flag => l_upd_new_elem_ver_id_flag -- added by rtarway for BUG 3951024
20398 ,x_as_of_date => l_as_of_date -- Bug 3839288
20399 ,x_task_weight_basis_code => l_task_weight_basis_code -- Bug 3839288
20400 ,x_return_status => x_return_status
20401 ,x_msg_count => x_msg_count
20402 ,x_msg_data => x_msg_data
20403 );
20404
20405 IF l_debug_mode = 'Y' THEN
20406 pa_debug.write(G_PKG_NAME, 'After Publish_Progress x_return_status='|| x_return_status, 3);
20407 END IF;
20408
20409 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20410 raise Invalid_Arg_Exc_WP;
20411 END IF;
20412 END IF; -- p_pub_prog_flag = 'Y' THEN
20413
20414 --bug 4019845
20415 --moved this call in the beginning
20416 --l_share_flag := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(l_project_id);
20417 --The follwoing api is called to push progress data to PJI for the new
20418 --structure version.
20419
20420 --bug 3822112
20421 IF l_share_flag = 'Y' THEN
20422 l_copy_actuals_flag := 'N';
20423 END IF;
20424
20425 IF l_debug_mode = 'Y' THEN
20426 pa_debug.write(G_PKG_NAME, 'Calling COPY_PROGRESS_ACT_ETC', 3);
20427 END IF;
20428
20429 PA_PROGRESS_PUB.COPY_PROGRESS_ACT_ETC(
20430 p_project_id => l_Project_ID
20431 ,p_src_str_ver_id => p_structure_version_id
20432 ,p_dst_str_ver_id => l_pub_ver_id
20433 ,p_pub_wp_with_prog_flag => p_pub_prog_flag
20434 ,p_calling_context => 'PUBLISH'
20435 ,p_copy_actuals_flag => l_copy_actuals_flag --bug 3822112
20436 ,p_last_pub_str_version_id => l_prev_ver_id -- Modified rakragha 28-JUL-2004
20437 ,x_return_status => x_return_status
20438 ,x_msg_count => x_msg_count
20439 ,x_msg_data => x_msg_data
20440 );
20441
20442 IF l_debug_mode = 'Y' THEN
20443 pa_debug.write(G_PKG_NAME, 'After COPY_PROGRESS_ACT_ETC x_return_status='|| x_return_status, 3);
20444 END IF;
20445
20446 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20447 raise Invalid_Arg_Exc_WP;
20448 END IF;
20449
20450 --bug 4149392
20451
20452 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
20453 BEGIN
20454
20455 --bug 4587145
20456 BEGIN
20457
20458 IF l_debug_mode = 'Y' THEN
20459 pa_debug.write(G_PKG_NAME, 'Calling Pa_Fp_wp_gen_amt_utils.get_wp_version_id in PUBLISH mode', 3);
20460 END IF;
20461
20462 l_plan_version_id := Pa_Fp_wp_gen_amt_utils.get_wp_version_id(
20463 p_project_id => l_project_id,
20464 p_plan_type_id => -1,
20465 p_proj_str_ver_id => l_pub_ver_id) ;
20466
20467 IF l_debug_mode = 'Y' THEN
20468 pa_debug.write(G_PKG_NAME, 'l_plan_version_id in PUBLISH mode='||l_plan_version_id, 3);
20469 END IF;
20470
20471 EXCEPTION
20472 WHEN OTHERS THEN
20473 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
20474 p_procedure_name => 'PROCESS_WBS_UPDATES',
20475 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));
20476 RAISE Invalid_Arg_Exc_WP;
20477
20478 END;
20479 --end bug 4587145
20480
20481 IF l_debug_mode = 'Y' THEN
20482 pa_debug.write(G_PKG_NAME, 'Calling PLAN_UPDATE in PUBLISH mode', 3);
20483 END IF;
20484
20485 PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE (x_msg_code => l_msg_code,
20486 p_plan_version_id => l_plan_version_id, --bug 4587145
20487 x_return_status => x_return_status);
20488
20489 IF l_debug_mode = 'Y' THEN
20490 pa_debug.write(G_PKG_NAME, 'After PLAN_UPDATE in PUBLISH mode x_return_status='|| x_return_status, 3);
20491 END IF;
20492
20493 EXCEPTION
20494 WHEN OTHERS THEN
20495 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
20496 p_procedure_name => 'PROCESS_WBS_UPDATES',
20497 p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE is failed for Publish Mode: SQLERRM='||SQLERRM,1,120));
20498 RAISE Invalid_Arg_Exc_WP;
20499 END;
20500 -- Bug 4284444
20501
20502 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20503 Raise Invalid_Arg_Exc_WP;
20504 END IF;
20505
20506 --end bug 4149392
20507
20508
20509 IF p_pub_prog_flag = 'Y' AND l_as_of_date IS NOT NULL THEN
20510
20511 IF l_debug_mode = 'Y' THEN
20512 pa_debug.write(G_PKG_NAME, 'Calling populate_pji_tab_for_plan' , 3);
20513 END IF;
20514
20515 pa_progress_pub.populate_pji_tab_for_plan(
20516 p_init_msg_list => FND_API.G_FALSE
20517 ,p_commit => FND_API.G_FALSE
20518 ,p_project_id => l_Project_ID
20519 ,p_structure_version_id => l_pub_ver_id
20520 ,p_baselined_str_ver_id => PA_PROJECT_STRUCTURE_UTILS.Get_Baseline_Struct_Ver(l_Project_ID)
20521 ,p_structure_type => 'WORKPLAN'
20522 ,p_program_rollup_flag => 'Y' -- 4392189
20523 ,p_calling_context => 'SUMMARIZE' -- 4392189
20524 ,p_as_of_date => l_as_of_date -- 4392189
20525 ,x_return_status => x_return_status
20526 ,x_msg_count => x_msg_count
20527 ,x_msg_data => x_msg_data);
20528
20529 IF l_debug_mode = 'Y' THEN
20530 pa_debug.write(G_PKG_NAME, 'After populate_pji_tab_for_plan x_return_status='|| x_return_status, 3);
20531 END IF;
20532
20533 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20534 raise Invalid_Arg_Exc_WP;
20535 END IF;
20536
20537 IF l_debug_mode = 'Y' THEN
20538 pa_debug.write(G_PKG_NAME, 'Calling ROLLUP_PROGRESS_PVT', 3);
20539 END IF;
20540
20541 PA_PROGRESS_PVT.ROLLUP_PROGRESS_PVT(
20542 p_init_msg_list => FND_API.G_FALSE
20543 ,p_commit => FND_API.G_FALSE
20544 ,p_project_id => l_Project_ID
20545 ,p_structure_version_id => l_pub_ver_id
20546 ,p_as_of_date => l_as_of_date
20547 ,p_wp_rollup_method => l_task_weight_basis_code
20548 ,p_rollup_entire_wbs => 'Y'
20549 ,p_working_wp_prog_flag => 'N'
20550 ,p_upd_new_elem_ver_id_flag => l_upd_new_elem_ver_id_flag --rtarway, 3951024
20551 ,x_return_status => x_return_status
20552 ,x_msg_count => x_msg_count
20553 ,x_msg_data => x_msg_data);
20554
20555 IF l_debug_mode = 'Y' THEN
20556 pa_debug.write(G_PKG_NAME, 'After ROLLUP_PROGRESS_PVT x_return_status='|| x_return_status, 3);
20557 END IF;
20558
20559 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20560 raise Invalid_Arg_Exc_WP;
20561 END IF;
20562 -- 4575855 : Do not call PROGRAM_ROLLUP_PVT
20563 -- instead we are calling now ROLLUP_PROG_FROM_SUBPROJS
20564 /*
20565 -- 4392189 : Added PROGRAM_ROLLUP_PVT call
20566
20567 IF l_debug_mode = 'Y' THEN
20568 pa_debug.write(G_PKG_NAME, 'Calling PROGRAM_ROLLUP_PVT', 3);
20569 END IF;
20570
20571 PA_PROGRESS_PVT.PROGRAM_ROLLUP_PVT(
20572 p_init_msg_list => FND_API.G_FALSE
20573 ,p_commit => FND_API.G_FALSE
20574 ,p_validate_only => FND_API.G_FALSE
20575 ,p_project_id => l_Project_ID
20576 ,p_as_of_date => l_as_of_date
20577 ,p_structure_type => 'WORKPLAN'
20578 ,p_structure_ver_id => l_pub_ver_id
20579 ,x_return_status => x_return_status
20580 ,x_msg_count => x_msg_count
20581 ,x_msg_data => x_msg_data);
20582
20583 IF l_debug_mode = 'Y' THEN
20584 pa_debug.write(G_PKG_NAME, 'After PROGRAM_ROLLUP_PVT x_return_status='|| x_return_status, 3);
20585 END IF;
20586
20587 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20588 raise Invalid_Arg_Exc_WP;
20589 END IF;
20590 */
20591 END IF; -- p_pub_prog_flag = 'Y' AND l_as_of_date IS NOT NULL THEN
20592
20593 IF p_pub_prog_flag = 'Y' THEN
20594 -- 4575855 : Added call of ROLLUP_PROG_FROM_SUBPROJS
20595 IF l_debug_mode = 'Y' THEN
20596 pa_debug.write(G_PKG_NAME, 'Calling ROLLUP_PROG_FROM_SUBPROJS', 3);
20597 END IF;
20598
20599 PA_PROGRESS_PVT.ROLLUP_PROG_FROM_SUBPROJS(
20600 p_init_msg_list => FND_API.G_FALSE
20601 ,p_commit => FND_API.G_FALSE
20602 ,p_validate_only => FND_API.G_FALSE
20603 ,p_project_id => l_Project_ID
20604 ,p_structure_version_id => l_pub_ver_id
20605 ,x_return_status => x_return_status
20606 ,x_msg_count => x_msg_count
20607 ,x_msg_data => x_msg_data);
20608
20609 IF l_debug_mode = 'Y' THEN
20610 pa_debug.write(G_PKG_NAME, 'After ROLLUP_PROG_FROM_SUBPROJS x_return_status='|| x_return_status, 3);
20611 END IF;
20612
20613 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20614 raise Invalid_Arg_Exc_WP;
20615 END IF;
20616
20617 --bug 3851528
20618 IF l_debug_mode = 'Y' THEN
20619 pa_debug.write(G_PKG_NAME, 'Calling clear_prog_outdated_flag', 3);
20620 END IF;
20621
20622 PA_PROGRESS_UTILS.clear_prog_outdated_flag(
20623 p_project_id => l_Project_ID
20624 ,p_structure_version_id => l_pub_ver_id
20625 ,p_object_id => null
20626 ,p_object_type => null
20627 ,x_return_status => x_return_status
20628 ,x_msg_count => x_msg_count
20629 ,x_msg_data => x_msg_data);
20630
20631 IF l_debug_mode = 'Y' THEN
20632 pa_debug.write(G_PKG_NAME, 'After clear_prog_outdated_flag x_return_status='|| x_return_status, 3);
20633 END IF;
20634
20635 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20636 raise Invalid_Arg_Exc_WP;
20637 END IF;
20638 END IF; -- p_pub_prog_flag = 'Y' THEN
20639 --end bug 4019845, publishing changes
20640
20641 -- 5029112 (4925192)
20642 if l_pub_wp_ok = 'Y' then
20643 UPDATE pa_proj_elem_ver_structure
20644 set date_prog_applied_on_wver = sysdate
20645 WHERE project_id = l_project_id
20646 AND element_version_id = p_structure_version_id;
20647 end if;
20648
20649 /* The following call is not required as the mechanics of program data rollup is changed.
20650 Earlier, there was a pull method to rollup the data from sub-project to parent project and this was
20651 the reason we had this api call to mark all the immediate parents to dirty so that when user goes to
20652 parent project, he wil the message to run process wbs in order to see correct program rollup.
20653 But now publishing of a sub-project will push the data to all its parent. This change in pull to
20654 push mechanics does not require the following api call. Hence commenitng out.
20655 IF l_debug_mode = 'Y' THEN
20656 pa_debug.write(G_PKG_NAME, 'Calling UPDATE_PARENT_WBS_FLAG_DIRTY', 3);
20657 END IF;
20658
20659 PA_RELATIONSHIP_PVT.UPDATE_PARENT_WBS_FLAG_DIRTY(
20660 p_project_id => l_Project_ID
20661 ,p_structure_version_id => l_pub_ver_id
20662 ,x_return_status => x_return_status
20663 ,x_msg_count => x_msg_count
20664 ,x_msg_data => x_msg_data);
20665
20666 IF l_debug_mode = 'Y' THEN
20667 pa_debug.write(G_PKG_NAME, 'After UPDATE_PARENT_WBS_FLAG_DIRTY x_return_status='|| x_return_status, 3);
20668 END IF;
20669
20670 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20671 raise Invalid_Arg_Exc_WP;
20672 END IF;
20673 */
20674
20675 --bug 4479392
20676 -- Mark the structure version as no pending wbs updates.
20677 IF l_debug_mode = 'Y' THEN
20678 pa_debug.write(G_PKG_NAME, 'Before calling pa_proj_task_struc_pub.set_update_wbs_flag for published version', 3);
20679 END IF;
20680
20681 pa_proj_task_struc_pub.set_update_wbs_flag(
20682 p_project_id => p_project_id
20683 ,p_structure_version_id => l_pub_ver_id
20684 ,p_update_wbs_flag => 'N'
20685 ,x_return_status => x_return_status
20686 ,x_msg_count => x_msg_count
20687 ,x_msg_data => x_msg_data
20688 );
20689
20690 IF l_debug_mode = 'Y' THEN
20691 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);
20692 END IF;
20693
20694 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20695 raise Invalid_Arg_Exc_WP;
20696 END IF;
20697 --bug 4479392
20698
20699
20700 ELSIF l_publish_flag = 'N' THEN
20701 --*******************************************
20702 --Process WBS in UPDATE MODE
20703 --*******************************************
20704
20705 --bug 4186512
20706 --set the PJI global flag to NULL before calling pji wbsmant for
20707 --indent/outdent/copy/move
20708 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := null;
20709
20710 BEGIN -- Bug 4284444
20711 --both working version
20712 IF l_debug_mode = 'Y' THEN
20713 pa_debug.write(G_PKG_NAME, 'Calling WBS_MAINT in UPDATE mode', 3);
20714 END IF;
20715
20716 PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT(
20717 p_new_struct_ver_id => p_structure_version_id
20718 ,p_old_struct_ver_id => p_structure_version_id
20719 ,p_project_id => p_project_id
20720 ,p_online_flag => l_online_flag
20721 ,p_calling_context => p_calling_context -- 4392189
20722 ,p_rerun_flag => p_rerun_flag --bug 4589289
20723 ,x_request_id => l_request_id
20724 ,x_processing_code => l_proc_code
20725 ,x_msg_code => l_msg_Code
20726 ,x_return_status => x_return_status
20727 ,x_online_flag => l_out_online_flag -- 4392189
20728 );
20729
20730 IF l_debug_mode = 'Y' THEN
20731 pa_debug.write(G_PKG_NAME, 'After WBS_MAINT in UPDATE mode x_return_status='|| x_return_status, 3);
20732 END IF;
20733
20734 EXCEPTION
20735 WHEN OTHERS THEN
20736 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
20737 p_procedure_name => 'PROCESS_WBS_UPDATES',
20738 p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT Failed in Update Mode: SQLERRM='||SQLERRM,1,240));
20739 RAISE Invalid_Arg_Exc_WP;
20740 END;
20741
20742 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20743 Raise Invalid_Arg_Exc_WP;
20744 END IF;
20745
20746 --copy task bug 4186512
20747 --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.
20748
20749 BEGIN
20750
20751 --bug 4587145
20752 BEGIN
20753
20754 IF l_debug_mode = 'Y' THEN
20755 pa_debug.write(G_PKG_NAME, 'Calling Pa_Fp_wp_gen_amt_utils.get_wp_version_id in UPDATE mode', 3);
20756 END IF;
20757
20758 l_plan_version_id := Pa_Fp_wp_gen_amt_utils.get_wp_version_id(
20759 p_project_id => p_project_id,
20760 p_plan_type_id => -1,
20761 p_proj_str_ver_id => p_structure_version_id) ;
20762
20763 IF l_debug_mode = 'Y' THEN
20764 pa_debug.write(G_PKG_NAME, 'l_plan_version_id in UPDATE mode='||l_plan_version_id, 3);
20765 END IF;
20766
20767 EXCEPTION
20768 WHEN OTHERS THEN
20769 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
20770 p_procedure_name => 'PROCESS_WBS_UPDATES',
20771 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));
20772 RAISE Invalid_Arg_Exc_WP;
20773
20774 END;
20775 --end bug 4587145
20776
20777 IF l_debug_mode = 'Y' THEN
20778 pa_debug.write(G_PKG_NAME, 'Calling PLAN_UPDATE in UPDATE mode', 3);
20779 END IF;
20780
20781 PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE (x_msg_code => l_msg_code,
20782 p_plan_version_id => l_plan_version_id, --bug 4587145
20783 x_return_status => x_return_status);
20784
20785 IF l_debug_mode = 'Y' THEN
20786 pa_debug.write(G_PKG_NAME,'After PLAN_UPDATE in UPDATE mode x_return_status='|| x_return_status,l_debug_level3);
20787 END IF;
20788 EXCEPTION
20789 WHEN OTHERS THEN
20790 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
20791 p_procedure_name => 'PROCESS_WBS_UPDATES',
20792 p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE failed in Update mode:SQLERRM='||SQLERRM,1,120));
20793 RAISE Invalid_Arg_Exc_WP;
20794 END;
20795
20796 --end copy task bug 4186512
20797
20798 -- Bug 4284444
20799 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20800 Raise Invalid_Arg_Exc_WP;
20801 END IF;
20802
20803 -- Bug 4284444 : Commented the below code
20804 -- EXCEPTION
20805 -- WHEN OTHERS THEN
20806 -- fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
20807 -- p_procedure_name => 'PROCESS_WBS_UPDATES',
20808 -- p_error_text => SUBSTRB('PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT:'||SQLERRM,1,240));
20809 -- RAISE Invalid_Arg_Exc_WP;
20810 -- END;
20811
20812 IF nvl(l_structure_type_flag,'N') = 'Y' THEN
20813
20814 IF l_debug_mode = 'Y' THEN
20815 pa_debug.write(G_PKG_NAME, 'Calling PROCESS_TASK_WEIGHTAGE', 3);
20816 END IF;
20817
20818 pa_proj_task_struc_pub.PROCESS_TASK_WEIGHTAGE(
20819 p_project_id => p_project_id
20820 -- ,p_structure_version_id => p_structure_version_id
20821 --Modified for BUG 4127178
20822 ,p_structure_version_id => l_pub_ver_id
20823 ,x_return_status => x_return_status
20824 ,x_msg_count => x_msg_count
20825 ,x_msg_data => x_msg_data
20826 );
20827
20828 IF l_debug_mode = 'Y' THEN
20829 pa_debug.write(G_PKG_NAME, 'After PROCESS_TASK_WEIGHTAGE x_return_status='|| x_return_status, 3);
20830 END IF;
20831
20832 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20833 Raise Invalid_Arg_Exc_WP;
20834 END IF;
20835 END IF;
20836 --bug 3035902 maansari
20837
20838 --call progress rollup api if calling context is not copy project.
20839 -- Bug 3764224 : Moved populate_pji_tab_for_plan in RE_ROLLUP_PROGRESS
20840 -- Bug 3693757 : 13-Jul-04 PJI tmp1 table shd be populated so that rollup API can access actuals values in RE_ROLLUP_PROGRESS
20841 /* BEGIN
20842 pa_progress_pub.populate_pji_tab_for_plan(
20843 p_init_msg_list => FND_API.G_FALSE,
20844 p_project_id => p_project_id,
20845 p_structure_version_id => p_structure_version_id,
20846 -- p_baselined_str_ver_id => l_baselined_str_ver_id,
20847 p_structure_type => 'WORKPLAN',
20848 x_return_status => x_return_status,
20849 x_msg_count => x_msg_count,
20850 x_msg_data => x_msg_data
20851 );
20852
20853 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20854 Raise Invalid_Arg_Exc_WP;
20855 END IF;
20856 EXCEPTION
20857 WHEN OTHERS THEN
20858 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
20859 p_procedure_name => 'PROCESS_WBS_UPDATES',
20860 p_error_text => SUBSTRB('PA_PROGRESS_PUB.populate_pji_tab_for_plan:'||SQLERRM,1,240));
20861 RAISE FND_API.G_EXC_ERROR;
20862 END;
20863 */
20864
20865 IF nvl(l_structure_type_flag,'N') = 'Y' THEN --fpm progress management changes
20866
20867 IF l_debug_mode = 'Y' THEN
20868 pa_debug.write(G_PKG_NAME, 'Calling RE_ROLLUP_PROGRESS', 3);
20869 END IF;
20870
20871 PA_PROGRESS_PUB.RE_ROLLUP_PROGRESS(
20872 p_project_id => p_project_id
20873 ,p_structure_version_id => p_structure_version_id
20874 ,x_return_status => x_return_status
20875 ,x_msg_count => x_msg_count
20876 ,x_msg_data => x_msg_data
20877 );
20878 IF l_debug_mode = 'Y' THEN
20879 pa_debug.write(G_PKG_NAME, 'After RE_ROLLUP_PROGRESS x_return_status='|| x_return_status, 3);
20880 END IF;
20881
20882 -- Bug 4575855 : Added call of ROLLUP_PROG_FROM_SUBPROJS
20883 IF PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id) = 'N' THEN
20884 IF l_debug_mode = 'Y' THEN
20885 pa_debug.write(G_PKG_NAME, 'Calling ROLLUP_PROG_FROM_SUBPROJS', 3);
20886 END IF;
20887
20888 PA_PROGRESS_PVT.ROLLUP_PROG_FROM_SUBPROJS(
20889 p_init_msg_list => FND_API.G_FALSE
20890 ,p_commit => FND_API.G_FALSE
20891 ,p_validate_only => FND_API.G_FALSE
20892 ,p_project_id => p_project_id
20893 ,p_structure_version_id => l_pub_ver_id
20894 ,x_return_status => x_return_status
20895 ,x_msg_count => x_msg_count
20896 ,x_msg_data => x_msg_data);
20897
20898 IF l_debug_mode = 'Y' THEN
20899 pa_debug.write(G_PKG_NAME, 'After ROLLUP_PROG_FROM_SUBPROJS x_return_status='|| x_return_status, 3);
20900 END IF;
20901
20902 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20903 raise Invalid_Arg_Exc_WP;
20904 END IF;
20905 END IF;
20906
20907 END IF;
20908
20909 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20910 Raise Invalid_Arg_Exc_WP;
20911 END IF;
20912
20913 --bug 4541039
20914 IF PA_RELATIONSHIP_UTILS.Check_link_exists( p_project_id => p_project_id
20915 ,p_link_type => 'WORKPLAN' ) = 'Y'
20916 THEN
20917 IF l_debug_mode = 'Y' THEN
20918 pa_debug.write(G_PKG_NAME, 'Before calling PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for entire grid in UPDATE mode', 3);
20919 END IF;
20920
20921 PA_TASK_ASSIGNMENT_UTILS.g_apply_progress_flag := 'Y'; --although th
20922 PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup(
20923 p_project_id => p_project_id,
20924 x_return_status => x_return_status,
20925 x_msg_count => x_msg_count,
20926 x_msg_data => x_msg_data);
20927
20928 IF l_debug_mode = 'Y' THEN
20929 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);
20930 END IF;
20931
20932 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20933 RAISE Invalid_Arg_Exc_WP;
20934 END IF;
20935 END IF;
20936 --end bug 4541039
20937
20938 END IF; --publish_flag
20939 ELSIF p_calling_context = 'COPY_PROJECT' THEN
20940 DECLARE
20941 CURSOR cur_all_str_ver
20942 IS
20943 SELECT ppevs2.element_version_id
20944 FROM pa_proj_element_versions ppevs1, pa_proj_element_versions ppevs2
20945 WHERE ppevs1.proj_element_id = ppevs2.proj_element_id
20946 AND ppevs1.project_id = p_project_id
20947 AND ppevs2.project_id = p_project_id
20948 AND ppevs1.element_version_id = p_structure_version_id
20949 AND ppevs1.object_type = 'PA_STRUCTURES'
20950 AND ppevs2.object_type = 'PA_STRUCTURES'
20951 ;
20952 BEGIN
20953 FOR cur_all_str_ver_rec IN cur_all_str_ver LOOP
20954 IF cur_all_str_ver_rec.element_version_id IS NOT NULL THEN
20955 -- Check if the sructure version to be processed corresponds to the WORKPLAN structure.
20956 -- If yes, do the processing required for the workplan version.
20957 OPEN cur_structure_type(p_project_id, cur_all_str_ver_rec.element_version_id, 'WORKPLAN');
20958 fetch cur_structure_type INTO l_structure_type_flag;
20959 CLOSE cur_structure_type;
20960
20961 IF nvl(l_structure_type_flag,'N') = 'Y' THEN
20962 IF l_debug_mode = 'Y' THEN
20963 pa_debug.write(G_PKG_NAME, 'Calling PROCESS_TASK_WEIGHTAGE in Copy Project Mode', 3);
20964 END IF;
20965
20966 pa_proj_task_struc_pub.PROCESS_TASK_WEIGHTAGE(
20967 p_project_id => p_project_id
20968 ,p_structure_version_id => p_structure_version_id
20969 ,x_return_status => x_return_status
20970 ,x_msg_count => x_msg_count
20971 ,x_msg_data => x_msg_data
20972 );
20973
20974 IF l_debug_mode = 'Y' THEN
20975 pa_debug.write(G_PKG_NAME, 'After PROCESS_TASK_WEIGHTAGE in Copy Project Mode x_return_status='|| x_return_status, 3);
20976 END IF;
20977
20978 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20979 Raise Invalid_Arg_Exc_WP;
20980 END IF;
20981 END IF;
20982 END IF;
20983 END LOOP;
20984
20985 -- Begin Bug # 4611373.
20986 --set the PJI global flag to NULL before calling pji wbsmant for
20987 --indent/outdent/copy/move
20988 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := null;
20989
20990 BEGIN
20991 --both working version
20992 IF l_debug_mode = 'Y' THEN
20993 pa_debug.write(G_PKG_NAME, 'Calling WBS_MAINT in UPDATE mode', 3);
20994 END IF;
20995
20996 PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT(
20997 p_new_struct_ver_id => p_structure_version_id
20998 ,p_old_struct_ver_id => p_structure_version_id
20999 ,p_project_id => p_project_id
21000 ,p_online_flag => l_online_flag
21001 ,p_calling_context => p_calling_context -- 4392189
21002 ,p_rerun_flag => p_rerun_flag --bug 4589289
21003 ,x_request_id => l_request_id
21004 ,x_processing_code => l_proc_code
21005 ,x_msg_code => l_msg_Code
21006 ,x_return_status => x_return_status
21007 ,x_online_flag => l_out_online_flag -- 4392189
21008 );
21009
21010 IF l_debug_mode = 'Y' THEN
21011 pa_debug.write(G_PKG_NAME, 'After WBS_MAINT in UPDATE mode x_return_status='
21012 || x_return_status, 3);
21013 END IF;
21014
21015 EXCEPTION
21016 WHEN OTHERS THEN
21017 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
21018 p_procedure_name => 'PROCESS_WBS_UPDATES',
21019 p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT
21020 Failed in Update Mode: SQLERRM='||SQLERRM,1,240));
21021 RAISE Invalid_Arg_Exc_WP;
21022 END;
21023
21024 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
21025 Raise Invalid_Arg_Exc_WP;
21026 END IF;
21027 -- End Bug # 4611373.
21028
21029 END;
21030 END IF; --end bug 3035902 maansari
21031 END IF; -- (if p_calling_mode = 'APPLY_PROGRESS') then -- Fix for Bug # 4262985.
21032
21033 -- Mark the structure version as no pending wbs updates.
21034 pa_proj_task_struc_pub.set_update_wbs_flag(
21035 p_project_id => p_project_id
21036 ,p_structure_version_id => p_structure_version_id
21037 ,p_update_wbs_flag => 'N'
21038 ,x_return_status => x_return_status
21039 ,x_msg_count => x_msg_count
21040 ,x_msg_data => x_msg_data
21041 );
21042
21043 IF l_debug_mode = 'Y' THEN
21044 pa_debug.write(G_PKG_NAME, 'After set_update_wbs_flag x_return_status='|| x_return_status, 3);
21045 END IF;
21046
21047 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
21048 Raise Invalid_Arg_Exc_WP;
21049 END IF;
21050
21051 IF p_commit = FND_API.G_TRUE THEN
21052 commit;
21053 END IF;
21054
21055 IF l_debug_mode = 'Y' THEN
21056 pa_debug.write(G_PKG_NAME, 'Exiting PROCESS_WBS_UPDATES', l_debug_level3);
21057 pa_debug.reset_curr_function;
21058 END IF;
21059 EXCEPTION
21060
21061 WHEN Invalid_Arg_Exc_WP THEN
21062
21063 x_return_status := FND_API.G_RET_STS_ERROR;
21064 l_msg_count := FND_MSG_PUB.count_msg;
21065
21066 IF cur_structure_type%ISOPEN THEN
21067 CLOSE cur_structure_type;
21068 END IF;
21069
21070 IF l_msg_count = 1 and x_msg_data IS NULL THEN
21071 PA_INTERFACE_UTILS_PUB.get_messages
21072 (p_encoded => FND_API.G_TRUE
21073 ,p_msg_index => 1
21074 ,p_msg_count => l_msg_count
21075 ,p_msg_data => l_msg_data
21076 ,p_data => l_data
21077 ,p_msg_index_out => l_msg_index_out);
21078 x_msg_data := l_data;
21079 x_msg_count := l_msg_count;
21080 ELSE
21081 x_msg_count := l_msg_count;
21082 END IF;
21083 IF l_debug_mode = 'Y' THEN
21084 pa_debug.reset_curr_function;
21085 END IF;
21086
21087 IF p_commit = FND_API.G_TRUE THEN
21088 rollback to process_wbs_updates;
21089 END IF;
21090
21091 RETURN;
21092
21093 WHEN others THEN
21094
21095 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21096 x_msg_count := 1;
21097 x_msg_data := SQLERRM;
21098
21099 IF cur_structure_type%ISOPEN THEN
21100 CLOSE cur_structure_type;
21101 END IF;
21102
21103 FND_MSG_PUB.add_exc_msg
21104 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
21105 ,p_procedure_name => 'PROCESS_WBS_UPDATES'
21106 ,p_error_text => x_msg_data);
21107
21108 IF l_debug_mode = 'Y' THEN
21109 pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
21110 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21111 l_debug_level5);
21112 pa_debug.reset_curr_function;
21113 END IF;
21114
21115 IF p_commit = FND_API.G_TRUE THEN
21116 rollback to process_wbs_updates;
21117 END IF;
21118
21119 RAISE;
21120 END PROCESS_WBS_UPDATES;
21121
21122 /*==================================================================
21123 This API calculates the Task Weightages based on the Task Progress
21124 Weighting Basis of the project. This API will be called only when
21125 the Weighting Basis is either Duration or Effort. The basic strategy
21126 used in the API is to query up all the tasks of a structure version
21127 and identify the summed duration of all the tasks parents by doing
21128 minimal PLSQL processing. Once the summed duration of the parent is
21129 identified, the weighting percentage of the task can be easily
21130 identified.
21131 Bug 3010538 : New API for the Task Weighting Enhancement.
21132 ==================================================================*/
21133
21134 PROCEDURE PROCESS_TASK_WEIGHTAGE
21135 ( p_api_version_number IN NUMBER
21136 ,p_commit IN VARCHAR2
21137 ,p_init_msg_list IN VARCHAR2
21138 ,p_calling_context IN VARCHAR2
21139 ,p_project_id IN pa_projects_all.project_id%TYPE
21140 ,p_structure_version_id IN pa_proj_element_versions.element_version_id%TYPE
21141 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
21142 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
21143 ,x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
21144 AS
21145
21146 -- Type declarations local to this Procedure.
21147
21148 -- This record contains the summary information of the child tasks for a parent task.
21149 TYPE CHILD_INFO_REC IS RECORD
21150 (
21151 summed_effort pa_proj_elem_ver_schedule.planned_effort%TYPE
21152 ,summed_duration pa_proj_elem_ver_schedule.duration%TYPE
21153 ,child_count Number
21154 ,cum_alloted_weightage pa_object_relationships.weighting_percentage%TYPE
21155 ,processed_child_count Number
21156 -- Following added for bug 3053472
21157 ,loop_count Number
21158 ,residual_task_count Number
21159 ,adj_direction Number -- This will be +1 / -1
21160 );
21161
21162 TYPE CHILD_INFO_TBL IS TABLE OF CHILD_INFO_REC
21163 INDEX BY BINARY_INTEGER;
21164
21165 TYPE prog_enable_flag_tbl IS TABLE OF pa_task_types.prog_entry_enable_flag%TYPE
21166 INDEX BY BINARY_INTEGER;
21167
21168 TYPE object_rel_id_tbl IS TABLE OF pa_object_relationships.object_relationship_id%TYPE
21169 INDEX BY BINARY_INTEGER;
21170
21171 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
21172 INDEX BY BINARY_INTEGER;
21173
21174 TYPE duration_tbl IS TABLE OF pa_proj_elem_ver_schedule.duration%TYPE
21175 INDEX BY BINARY_INTEGER;
21176
21177 TYPE effort_tbl IS TABLE OF pji_xbs_plans_v.labor_effort%TYPE --pa_proj_elem_ver_schedule.planned_effort%TYPE 3746912
21178 INDEX BY BINARY_INTEGER;
21179
21180 TYPE task_weightage_tbl IS TABLE OF pa_object_relationships.weighting_percentage%TYPE
21181 INDEX BY BINARY_INTEGER;
21182 -- End of Type Declarations.
21183
21184
21185 -- Cursor Declarations.
21186 -- This cursor fetches the duration, effort, relationship id between the task and its parent
21187 -- and progress entry enable flag for the task type associated with the task version. This
21188 -- info is necessary for calculating the task weightage of the tasks.
21189 CURSOR cur_task_info(c_project_id pa_projects_all.project_id%TYPE,
21190 c_structure_version_id pa_proj_element_versions.element_version_id%TYPE
21191 ,c_plan_version_id NUMBER --bug 4726889
21192 )
21193 IS
21194 Select rel.object_relationship_id,
21195 rel.object_id_from1,
21196 -- NVL(pfxat.labor_hours,0) + NVL(pfxat.equipment_hours,0),
21197 NVL(pxpv.labor_effort,0) + NVL(pxpv.equipment_effort,0),
21198 sch.duration,
21199 ptt.prog_entry_enable_flag
21200 from pa_proj_element_versions ver,
21201 pa_object_relationships rel,
21202 pa_proj_elem_ver_schedule sch,
21203 pa_proj_elements ele,
21204 pa_task_types ptt,
21205 pji_xbs_plans_v pxpv
21206 -- pji_fm_xbs_accum_tmp1 pfxat
21207 where ver.project_id = c_project_id
21208 and ver.parent_structure_version_id = c_structure_version_id
21209 and ver.object_type = 'PA_TASKS'
21210 and ver.element_version_id = rel.object_id_to1
21211 and rel.relationship_type = 'S'
21212 and rel.relationship_subtype in ( 'STRUCTURE_TO_TASK','TASK_TO_TASK')
21213 and sch.element_version_id = ver.element_version_id
21214 and sch.project_id = c_project_id
21215 and ele.proj_element_id = ver.proj_element_id
21216 and ptt.object_type = 'PA_TASKS' /* bug 3279978 FP M Enhancement */
21217 and ele.type_id = ptt.task_type_id
21218 and pxpv.project_id (+)= ver.project_id
21219 and pxpv.structure_version_id (+)= ver.parent_structure_version_id
21220 and pxpv.proj_element_id (+)= ver.proj_element_id
21221 and pxpv.plan_version_id (+)= c_plan_version_id --bug 4726889
21222 -- and pfxat.project_id (+)= ver.project_id
21223 -- and pfxat.project_element_id (+)= ver.proj_element_id
21224 -- and pfxat.struct_version_id (+)= ver.parent_structure_version_id
21225 -- and pfxat.calendar_type (+)= 'A'
21226 ;
21227
21228 -- TWUT
21229 -- This cursor is when fetched will lock all the task versions of the structure version.
21230 CURSOR cur_task_ver_lock(c_project_id pa_projects_all.project_id%TYPE,
21231 c_structure_version_id pa_proj_element_versions.element_version_id%TYPE)
21232 IS
21233 select 'X'
21234 from pa_proj_element_versions ver,
21235 pa_proj_elements ele,
21236 pa_task_types ptt
21237 where ver.project_id = c_project_id
21238 and ver.parent_structure_version_id = c_structure_version_id
21239 and ver.object_type = 'PA_TASKS'
21240 and ele.proj_element_id = ver.proj_element_id
21241 and ele.type_id = ptt.task_type_id
21242 and ptt.object_type = 'PA_TASKS' /* bug 3279978 FP M Enhancement */
21243 and nvl(ptt.prog_entry_enable_flag,'N') = 'Y'
21244 for update of ver.record_version_number NOWAIT;
21245 -- End of Cursor Declarations.
21246
21247 -- Procedure level local variables declaration
21248
21249 l_child_info_tbl child_info_tbl;
21250 l_object_rel_id_tbl object_rel_id_tbl;
21251 l_parent_task_ver_id_tbl parent_task_ver_id_tbl;
21252 l_duration_tbl duration_tbl;
21253 l_effort_tbl effort_tbl;
21254
21255 l_task_weighting_basis pa_proj_progress_attr.task_weight_basis_code%TYPE;
21256
21257 L_BASIS_MANUAL CONSTANT pa_proj_progress_attr.task_weight_basis_code%TYPE := 'MANUAL';
21258 L_BASIS_EFFORT CONSTANT pa_proj_progress_attr.task_weight_basis_code%TYPE := 'EFFORT';
21259 L_BASIS_DURATION CONSTANT pa_proj_progress_attr.task_weight_basis_code%TYPE := 'DURATION';
21260
21261 -- End Procedure level local variables declaration
21262
21263 -- Standard local variable declaration.
21264 l_msg_count NUMBER := 0;
21265 l_data VARCHAR2(2000);
21266 l_msg_data VARCHAR2(2000);
21267 l_msg_index_out NUMBER;
21268 l_debug_mode VARCHAR2(1);
21269
21270 l_debug_level2 CONSTANT NUMBER := 2;
21271 l_debug_level3 CONSTANT NUMBER := 3;
21272 l_debug_level4 CONSTANT NUMBER := 4;
21273 l_debug_level5 CONSTANT NUMBER := 5;
21274
21275 l_plan_version_id NUMBER; --bug 4726889
21276
21277 BEGIN
21278 IF p_commit = FND_API.G_TRUE THEN
21279 savepoint process_task_weightage;
21280 END IF;
21281
21282 IF p_init_msg_list = FND_API.G_TRUE THEN
21283 FND_MSG_PUB.initialize;
21284 END IF;
21285
21286 x_msg_count := 0;
21287 x_return_status := FND_API.G_RET_STS_SUCCESS;
21288 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
21289
21290 IF l_debug_mode = 'Y' THEN
21291 pa_debug.g_err_stage:= 'Entering PROCESS_TASK_WEIGHTAGE';
21292 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21293 l_debug_level3);
21294
21295 pa_debug.set_curr_function( p_function => 'PROCESS_TASK_WEIGHTAGE',
21296 p_debug_mode => l_debug_mode );
21297 END IF;
21298
21299 -- Check for business rules violations
21300 IF l_debug_mode = 'Y' THEN
21301 pa_debug.g_err_stage:= 'Validating input parameters';
21302 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21303 l_debug_level3);
21304 pa_debug.g_err_stage:= 'Input Parameter Values';
21305 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21306 l_debug_level3);
21307 pa_debug.g_err_stage:= 'Project Id : ' || p_project_id;
21308 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21309 l_debug_level3);
21310 pa_debug.g_err_stage:= 'Structure Version Id : ' || p_structure_version_id;
21311 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21312 l_debug_level3);
21313 pa_debug.g_err_stage:= 'p_calling_context : ' || p_calling_context;
21314 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21315 l_debug_level3);
21316 END IF;
21317
21318 IF (p_project_id IS NULL) OR
21319 (p_structure_version_id IS NULL)
21320 THEN
21321 PA_UTILS.ADD_MESSAGE
21322 (p_app_short_name => 'PA',
21323 p_msg_name => 'PA_INV_PARAM_PASSED');
21324 RAISE Invalid_Arg_Exc_WP;
21325 END IF;
21326
21327 -- Delete the data in plsql tables.
21328 l_child_info_tbl.delete;
21329 l_object_rel_id_tbl.delete;
21330 l_duration_tbl.delete;
21331 l_effort_tbl.delete;
21332 l_parent_task_ver_id_tbl.delete;
21333
21334
21335 -- Obtain the task weighting basis and do nothing if the basis is MANUAL and throw error if it is NULL.
21336 -- This is a redundant check incorporated just to ensure no processing is done in case the api
21337 -- is wrongly called.
21338 l_task_weighting_basis := pa_progress_utils.get_task_weighting_basis(p_project_id => p_project_id);
21339
21340 IF l_task_weighting_basis is NULL THEN
21341 IF l_debug_mode = 'Y' THEN
21342 pa_debug.g_err_stage:= 'PROCESS_TASK_WEIGHTAGE API has been called when task weighting basis is NULL';
21343 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
21344 END IF;
21345 RAISE Invalid_Arg_Exc_WP;
21346 END IF;
21347
21348 IF l_task_weighting_basis = L_BASIS_MANUAL THEN
21349 IF l_debug_mode = 'Y' THEN
21350 pa_debug.g_err_stage:= 'PROCESS_TASK_WEIGHTAGE API has been called when task weighting basis is MANUAL';
21351 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21352 l_debug_level3);
21353 pa_debug.reset_curr_function;
21354 END IF;
21355 RETURN;
21356 END IF;
21357
21358 -- Lock the structure version record in pa_proj_element_versions table.
21359 -- NEED TO REVISIT THIS LOGIC.
21360 -- TWUT. Previously had a select to lock - but it lead to exact fetch
21361 -- returned more than one row exception. Changed to cursor.
21362 DECLARE
21363 l_dummy VARCHAR2(1);
21364 BEGIN
21365 open cur_task_ver_lock(p_project_id,p_structure_version_id);
21366 fetch cur_task_ver_lock into l_dummy;
21367 close cur_task_ver_lock;
21368 EXCEPTION
21369 WHEN OTHERS THEN
21370 IF SQLCODE = -54 THEN
21371 -- If the record have already been locked, then the sql code would be -54.
21372 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
21373 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
21374 RAISE Invalid_Arg_Exc_WP;
21375 ELSE
21376 raise;
21377 END IF;
21378 END;
21379
21380 --bug 4726889 performance fix to provide plan version id in the cursor cur_task_info
21381 BEGIN
21382 IF l_debug_mode = 'Y' THEN
21383 pa_debug.write(G_PKG_NAME, 'Calling Pa_Fp_wp_gen_amt_utils.get_wp_version_id', 3);
21384 END IF;
21385 l_plan_version_id := Pa_Fp_wp_gen_amt_utils.get_wp_version_id(
21386 p_project_id => p_project_id,
21387 p_plan_type_id => -1,
21388 p_proj_str_ver_id => p_structure_version_id) ;
21389
21390 IF l_debug_mode = 'Y' THEN
21391 pa_debug.write(G_PKG_NAME, 'l_plan_version_id='||l_plan_version_id, 3);
21392 END IF;
21393
21394 EXCEPTION
21395 WHEN OTHERS THEN
21396 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
21397 p_procedure_name => 'PROCESS_TASK_WEIGHTAGE',
21398 p_error_text => SUBSTRB('Call of Pa_Fp_wp_gen_amt_utils.get_wp_version_id is failed='||SQLERRM,1,120));
21399 RAISE Invalid_Arg_Exc_WP;
21400
21401 END;
21402 --bug 4726889
21403
21404 -- The first part of this procedure reads the task version records of the structure version
21405 -- in batches and calculates the summed duration or the summed effort of all the parent tasks.
21406 -- These will be used in the second part of the api to calculate the weightage of the individual
21407 -- tasks.
21408 DECLARE
21409 l_object_rel_id_fetch_tbl object_rel_id_tbl;
21410 l_parent_task_ver_id_fetch_tbl parent_task_ver_id_tbl;
21411 l_duration_fetch_tbl duration_tbl;
21412 l_effort_fetch_tbl effort_tbl;
21413 l_prog_enable_flag_fetch_tbl prog_enable_flag_tbl;
21414
21415 l_plsql_max_array_size CONSTANT NUMBER := 200; -- limiting the max fetch size
21416 l_task_count NUMBER := 0;
21417 l_parent_id pa_proj_element_versions.element_version_id%TYPE;
21418 BEGIN
21419 OPEN cur_task_info(p_project_id,p_structure_version_id
21420 ,l_plan_version_id); --4726889
21421 LOOP
21422 FETCH cur_task_info BULK COLLECT INTO
21423 l_object_rel_id_fetch_tbl
21424 ,l_parent_task_ver_id_fetch_tbl
21425 ,l_effort_fetch_tbl
21426 ,l_duration_fetch_tbl
21427 ,l_prog_enable_flag_fetch_tbl
21428 LIMIT l_plsql_max_array_size;
21429
21430 IF l_debug_mode = 'Y' THEN
21431 pa_debug.g_err_stage:= 'Fetched ' || cur_task_info%rowcount || ' records for processing';
21432 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
21433 END IF;
21434
21435 IF nvl(l_object_rel_id_fetch_tbl.last,0) > 0 THEN -- only if something is fetched do the processing
21436 FOR i in l_object_rel_id_fetch_tbl.first..l_object_rel_id_fetch_tbl.last LOOP
21437 -- Check if progress is enabled for the current task. Do the processing only
21438 -- if progress is enabled. If not just skip the task.
21439
21440 IF nvl(l_prog_enable_flag_fetch_tbl(i),'N') = 'Y' THEN
21441 l_task_count := l_task_count + 1;
21442 l_parent_id := l_parent_task_ver_id_fetch_tbl(i);
21443
21444 -- Copy the value in the fetch table to the complimentary table.
21445 l_object_rel_id_tbl(l_task_count) := l_object_rel_id_fetch_tbl(i);
21446 l_parent_task_ver_id_tbl(l_task_count) := l_parent_task_ver_id_fetch_tbl(i);
21447
21448 -- Set to null the parent task ver record if it doesnot exist.
21449 IF NOT l_child_info_tbl.exists(l_parent_id) THEN
21450 l_child_info_tbl(l_parent_id) := NULL;
21451 END IF;
21452
21453 -- Calculate the summed duration and effort for the parent.
21454 IF l_task_weighting_basis = L_BASIS_DURATION THEN
21455 l_child_info_tbl(l_parent_id).summed_duration :=
21456 nvl(l_child_info_tbl(l_parent_id).summed_duration,0) + nvl(l_duration_fetch_tbl(i),0);
21457
21458 l_duration_tbl(l_task_count) := nvl(l_duration_fetch_tbl(i),0);
21459 ELSIF l_task_weighting_basis = L_BASIS_EFFORT THEN
21460 l_child_info_tbl(l_parent_id).summed_effort :=
21461 nvl(l_child_info_tbl(l_parent_id).summed_effort,0) + nvl(l_effort_fetch_tbl(i),0);
21462
21463 l_effort_tbl(l_task_count) := nvl(l_effort_fetch_tbl(i),0);
21464 END IF;
21465 -- Increment the child count for the parent.
21466 l_child_info_tbl(l_parent_id).child_count :=
21467 nvl(l_child_info_tbl(l_parent_id).child_count,0)+1;
21468 END IF;
21469
21470 END LOOP;
21471 END IF;
21472
21473 EXIT WHEN nvl(l_object_rel_id_fetch_tbl.last,0) < l_plsql_max_array_size;
21474 END LOOP;
21475 CLOSE cur_task_info;
21476 IF l_debug_mode = 'Y' THEN
21477 pa_debug.g_err_stage:= 'Done with Part 1 of the Procedure';
21478 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
21479 END IF;
21480 END;
21481
21482 -- We have the required info to calculate the task weightages in PLSQL tables.
21483 -- Use them and calculate the weightage for each of the task.
21484 DECLARE
21485 l_task_weightage_tbl task_weightage_tbl;
21486
21487 l_parent_id pa_proj_element_versions.element_version_id%TYPE;
21488 l_task_weightage pa_object_relationships.weighting_percentage%TYPE;
21489
21490 --Bug 3053472 - remaining weightage is no more required.
21491 --l_remaining_weightage pa_object_relationships.weighting_percentage%TYPE;
21492
21493 l_residual_weightage pa_object_relationships.weighting_percentage%TYPE;
21494 BEGIN
21495 IF nvl(l_object_rel_id_tbl.last,0) > 0 THEN
21496 FOR i in l_object_rel_id_tbl.first..l_object_rel_id_tbl.last LOOP
21497 l_parent_id := l_parent_task_ver_id_tbl(i);
21498
21499 /* Bug 3053472. Count only the tasks that have non zero task weightage.
21500 l_child_info_tbl(l_parent_id).processed_child_count :=
21501 nvl(l_child_info_tbl(l_parent_id).processed_child_count,0) + 1;
21502 remaining weightage is not required any more.
21503 l_remaining_weightage := 100 - nvl(l_child_info_tbl(l_parent_id).cum_alloted_weightage,0);
21504 */
21505 -- If the basis is duration, obtain the task weightage as ratio of the duration of the task
21506 -- and the summed duration of the parent.
21507 IF l_task_weighting_basis = L_BASIS_DURATION THEN
21508
21509 IF l_duration_tbl(i) = 0 AND l_child_info_tbl(l_parent_id).summed_duration = 0 THEN
21510 l_task_weightage := 1 / l_child_info_tbl(l_parent_id).child_count * 100;
21511 ELSE
21512 l_task_weightage := l_duration_tbl(i) / l_child_info_tbl(l_parent_id).summed_duration * 100;
21513 END IF;
21514
21515 -- If the basis is effort, obtain the task weightage as ratio of the effort of the task
21516 -- and the summed effort of the parent.
21517 -- The case where the effort of the task is 0 is taken care by setting the weightage to 0
21518 -- if the summed effort is not 0 and calculated as mentioned initially if the summed effort
21519 -- is 0.
21520 ELSIF l_task_weighting_basis = L_BASIS_EFFORT THEN
21521
21522 IF l_effort_tbl(i) = 0 AND l_child_info_tbl(l_parent_id).summed_effort = 0 THEN
21523 l_task_weightage := 1 / l_child_info_tbl(l_parent_id).child_count * 100;
21524 ELSE
21525 l_task_weightage := l_effort_tbl(i) / l_child_info_tbl(l_parent_id).summed_effort * 100;
21526 END IF;
21527
21528 END IF;
21529 /* Bug 3053472. Donot take care of the rounding in this pass.
21530 -- Take care of the rounding issue.
21531 IF abs(l_task_weightage - l_remaining_weightage) <= 0.05 THEN
21532 l_task_weightage := l_remaining_weightage;
21533 END IF;
21534 */
21535 -- Bug 3053472. Increment the task count only if the task weightage of the task <> 0.
21536 IF l_task_weightage > 0 THEN
21537 l_child_info_tbl(l_parent_id).processed_child_count :=
21538 nvl(l_child_info_tbl(l_parent_id).processed_child_count,0) + 1;
21539 END IF;
21540
21541 l_child_info_tbl(l_parent_id).cum_alloted_weightage := nvl(l_child_info_tbl(l_parent_id).cum_alloted_weightage,0)
21542 + l_task_weightage;
21543 l_task_weightage_tbl(i) := l_task_weightage;
21544 END LOOP;
21545
21546 -- Bug 3053472. Loop over the plsql table once more to process the residual task weightage of
21547 -- the tasks. The logic used is to distribute the residual task weightage to as many tasks as
21548 -- possible so that the task weightage is uniform. The updates in the bug gives more details
21549 -- on the logic.
21550 FOR i in l_object_rel_id_tbl.first..l_object_rel_id_tbl.last LOOP
21551 l_parent_id := l_parent_task_ver_id_tbl(i);
21552
21553 IF l_child_info_tbl(l_parent_id).loop_count is NULL THEN
21554 -- This means that this is the first task that is being processed for this parent.
21555 -- So calculate how much is the residual weightage.
21556 l_residual_weightage := ( 100 - l_child_info_tbl(l_parent_id).cum_alloted_weightage ) * 100;
21557 l_child_info_tbl(l_parent_id).loop_count :=
21558 floor(abs(l_residual_weightage) / l_child_info_tbl(l_parent_id).processed_child_count);
21559 l_child_info_tbl(l_parent_id).residual_task_count :=
21560 mod(abs(l_residual_weightage) , l_child_info_tbl(l_parent_id).processed_child_count);
21561
21562 -- The adj_direction is set to -1 if the task weigtage has to be adjusted by reducing some amount
21563 -- from the tasks. otherwise the adj_direction is 1.
21564 IF l_residual_weightage < 0 THEN
21565 l_child_info_tbl(l_parent_id).adj_direction := -1;
21566 ELSE
21567 l_child_info_tbl(l_parent_id).adj_direction := 1;
21568 END IF;
21569 END IF;
21570
21571 IF l_task_weightage_tbl(i) > 0 THEN
21572 IF l_child_info_tbl(l_parent_id).residual_task_count > 0 THEN
21573 l_task_weightage_tbl(i) := l_task_weightage_tbl(i) +
21574 (l_child_info_tbl(l_parent_id).loop_count + 1) * 0.01 * l_child_info_tbl(l_parent_id).adj_direction;
21575
21576 l_child_info_tbl(l_parent_id).residual_task_count :=
21577 l_child_info_tbl(l_parent_id).residual_task_count - 1;
21578 ELSE
21579 l_task_weightage_tbl(i) := l_task_weightage_tbl(i) +
21580 l_child_info_tbl(l_parent_id).loop_count * 0.01 * l_child_info_tbl(l_parent_id).adj_direction;
21581 END IF;
21582 END IF;
21583 END LOOP;
21584
21585 -- Do a bulk update into pa_object_relationships table as the weightage has
21586 -- been calculated for all the tasks.
21587 FORALL i in l_object_rel_id_tbl.first..l_object_rel_id_tbl.last
21588 UPDATE pa_object_relationships
21589 SET weighting_percentage = l_task_weightage_tbl(i)
21590 WHERE object_relationship_id = l_object_rel_id_tbl(i);
21591 IF l_debug_mode = 'Y' THEN
21592 pa_debug.g_err_stage:= 'Updated ' || sql%rowcount || ' Records in PA_OBJECT_RELATIONSHIPS';
21593 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
21594 END IF;
21595 END IF;
21596 END;
21597
21598 IF p_commit = FND_API.G_TRUE THEN
21599 commit;
21600 END IF;
21601
21602 IF l_debug_mode = 'Y' THEN
21603 pa_debug.g_err_stage:= 'Exiting PROCESS_TASK_WEIGHTAGE';
21604 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21605 l_debug_level3);
21606 pa_debug.reset_curr_function;
21607 END IF;
21608 EXCEPTION
21609
21610 WHEN Invalid_Arg_Exc_WP THEN
21611
21612 x_return_status := FND_API.G_RET_STS_ERROR;
21613 l_msg_count := FND_MSG_PUB.count_msg;
21614
21615 IF cur_task_info%ISOPEN THEN
21616 CLOSE cur_task_info;
21617 END IF;
21618
21619 IF l_msg_count = 1 and x_msg_data IS NULL THEN
21620 PA_INTERFACE_UTILS_PUB.get_messages
21621 (p_encoded => FND_API.G_TRUE
21622 ,p_msg_index => 1
21623 ,p_msg_count => l_msg_count
21624 ,p_msg_data => l_msg_data
21625 ,p_data => l_data
21626 ,p_msg_index_out => l_msg_index_out);
21627 x_msg_data := l_data;
21628 x_msg_count := l_msg_count;
21629 ELSE
21630 x_msg_count := l_msg_count;
21631 END IF;
21632 IF l_debug_mode = 'Y' THEN
21633 pa_debug.reset_curr_function;
21634 END IF;
21635
21636 IF p_commit = FND_API.G_TRUE THEN
21637 rollback to process_task_weightage;
21638 END IF;
21639
21640 RETURN;
21641
21642 WHEN others THEN
21643
21644 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21645 x_msg_count := 1;
21646 x_msg_data := SQLERRM;
21647
21648 IF cur_task_info%ISOPEN THEN
21649 CLOSE cur_task_info;
21650 END IF;
21651
21652 FND_MSG_PUB.add_exc_msg
21653 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
21654 ,p_procedure_name => 'PROCESS_TASK_WEIGHTAGE'
21655 ,p_error_text => x_msg_data);
21656
21657 IF l_debug_mode = 'Y' THEN
21658 pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
21659 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21660 l_debug_level5);
21661 pa_debug.reset_curr_function;
21662 END IF;
21663
21664 IF p_commit = FND_API.G_TRUE THEN
21665 rollback to process_task_weightage;
21666 END IF;
21667
21668 RAISE;
21669 END PROCESS_TASK_WEIGHTAGE;
21670
21671 /*==================================================================
21672 This API will be called to set the update_required_flag to Y or N.
21673 The default value of the flag is Y. The passed in flag value is
21674 used to update the structure version record in elem_ver_structure
21675 table.
21676 Bug 3010538 : New API for the Task Weighting Enhancement.
21677 ==================================================================*/
21678
21679 PROCEDURE SET_UPDATE_WBS_FLAG
21680 ( p_api_version_number IN NUMBER
21681 ,p_commit IN VARCHAR2
21682 ,p_init_msg_list IN VARCHAR2
21683 ,p_calling_context IN VARCHAR2
21684 ,p_project_id IN pa_projects_all.project_id%TYPE
21685 ,p_structure_version_id IN pa_proj_element_versions.element_version_id%TYPE
21686 ,p_update_wbs_flag IN pa_proj_elem_ver_structure.process_update_wbs_flag%TYPE
21687 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
21688 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
21689 ,x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
21690 AS
21691
21692 l_msg_count NUMBER := 0;
21693 l_data VARCHAR2(2000);
21694 l_msg_data VARCHAR2(2000);
21695 l_msg_index_out NUMBER;
21696 l_debug_mode VARCHAR2(1);
21697
21698 l_debug_level2 CONSTANT NUMBER := 2;
21699 l_debug_level3 CONSTANT NUMBER := 3;
21700 l_debug_level4 CONSTANT NUMBER := 4;
21701 l_debug_level5 CONSTANT NUMBER := 5;
21702
21703 BEGIN
21704
21705 IF p_commit = FND_API.G_TRUE THEN
21706 savepoint set_update_wbs_flag;
21707 END IF;
21708
21709 IF p_init_msg_list = FND_API.G_TRUE THEN
21710 FND_MSG_PUB.initialize;
21711 END IF;
21712
21713 x_msg_count := 0;
21714 x_return_status := FND_API.G_RET_STS_SUCCESS;
21715 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
21716
21717 IF l_debug_mode = 'Y' THEN
21718 pa_debug.g_err_stage:= 'Entering SET_UPDATE_WBS_FLAG';
21719 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21720 l_debug_level3);
21721
21722 pa_debug.set_curr_function( p_function => 'SET_UPDATE_WBS_FLAG',
21723 p_debug_mode => l_debug_mode );
21724 END IF;
21725
21726 -- Check for business rules violations
21727 IF l_debug_mode = 'Y' THEN
21728 pa_debug.g_err_stage:= 'Validating input parameters';
21729 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
21730
21731 pa_debug.g_err_stage:= 'p_project_id = '|| p_project_id;
21732 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
21733
21734 pa_debug.g_err_stage:= 'p_structure_version_id = '|| p_structure_version_id;
21735 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
21736
21737 pa_debug.g_err_stage:= 'p_update_wbs_flag = '|| p_update_wbs_flag;
21738 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
21739 END IF;
21740
21741 IF (p_project_id IS NULL) OR
21742 (p_structure_version_id IS NULL) OR
21743 (p_update_wbs_flag not in ('Y','N'))
21744 THEN
21745 PA_UTILS.ADD_MESSAGE
21746 (p_app_short_name => 'PA',
21747 p_msg_name => 'PA_INV_PARAM_PASSED');
21748 RAISE Invalid_Arg_Exc_WP;
21749 END IF;
21750 --Defer the Structure Update when G_Rollup_Defer is Y.
21751 IF (NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER,'N')='N') THEN
21752 Update pa_proj_elem_ver_structure
21753 Set process_update_wbs_flag = p_update_wbs_flag
21754 Where project_id = p_project_id
21755 And element_version_id = p_structure_version_id;
21756
21757 IF p_commit = FND_API.G_TRUE THEN
21758 commit;
21759 END IF;
21760 END IF;
21761 IF l_debug_mode = 'Y' THEN
21762 pa_debug.g_err_stage:= 'Exiting SET_UPDATE_WBS_FLAG';
21763 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21764 l_debug_level3);
21765 pa_debug.reset_curr_function;
21766 END IF;
21767 EXCEPTION
21768
21769 WHEN Invalid_Arg_Exc_WP THEN
21770
21771 x_return_status := FND_API.G_RET_STS_ERROR;
21772 l_msg_count := FND_MSG_PUB.count_msg;
21773
21774 IF l_msg_count = 1 and x_msg_data IS NULL THEN
21775 PA_INTERFACE_UTILS_PUB.get_messages
21776 (p_encoded => FND_API.G_TRUE
21777 ,p_msg_index => 1
21778 ,p_msg_count => l_msg_count
21779 ,p_msg_data => l_msg_data
21780 ,p_data => l_data
21781 ,p_msg_index_out => l_msg_index_out);
21782 x_msg_data := l_data;
21783 x_msg_count := l_msg_count;
21784 ELSE
21785 x_msg_count := l_msg_count;
21786 END IF;
21787 IF l_debug_mode = 'Y' THEN
21788 pa_debug.reset_curr_function;
21789 END IF;
21790
21791 IF p_commit = FND_API.G_TRUE THEN
21792 rollback to set_update_wbs_flag;
21793 END IF;
21794
21795 RETURN;
21796
21797 WHEN others THEN
21798
21799 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21800 x_msg_count := 1;
21801 x_msg_data := SQLERRM;
21802
21803 FND_MSG_PUB.add_exc_msg
21804 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
21805 ,p_procedure_name => 'SET_UPDATE_WBS_FLAG'
21806 ,p_error_text => x_msg_data);
21807
21808 IF l_debug_mode = 'Y' THEN
21809 pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
21810 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21811 l_debug_level5);
21812 pa_debug.reset_curr_function;
21813 END IF;
21814
21815 IF p_commit = FND_API.G_TRUE THEN
21816 rollback to set_update_wbs_flag;
21817 END IF;
21818
21819 RAISE;
21820 END SET_UPDATE_WBS_FLAG;
21821
21822 -- This API is a wrapper API called for FORMS which in turn
21823 -- calls PROCESS_WBS_UPDATES_WRP, as from FORM the remote
21824 -- package level constants FND_API.G_TRUE , FND_API.G_FLASE
21825 -- can not be reffered .
21826
21827 PROCEDURE PROCESS_WBS_UPDATES_WRP_FORM
21828 ( p_project_id IN pa_projects_all.project_id%TYPE
21829 ,p_structure_version_id IN pa_proj_element_versions.element_version_id%TYPE
21830 ,p_pub_struc_ver_id IN NUMBER := NULL
21831 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
21832 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
21833 ,x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
21834 AS
21835
21836 l_msg_count NUMBER := 0;
21837 l_data VARCHAR2(2000);
21838 l_msg_data VARCHAR2(2000);
21839 l_msg_index_out NUMBER;
21840 l_debug_mode VARCHAR2(1);
21841
21842 BEGIN
21843
21844 -- Not doing the validation of input parameter
21845 -- as it is done in the the called API.
21846
21847 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
21848 ( p_commit => FND_API.G_TRUE
21849 ,p_calling_context => 'UPDATE'
21850 ,p_project_id => p_project_id
21851 ,p_structure_version_id => p_structure_version_id
21852 ,x_return_status => x_return_status
21853 ,x_msg_count => x_msg_count
21854 ,x_msg_data => x_msg_data) ;
21855
21856 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
21857 IF l_debug_mode = 'Y' THEN
21858 pa_debug.g_err_stage := 'Error calling concurrent wbs update process ';
21859 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,4);
21860 END IF;
21861 Raise Invalid_Arg_Exc_WP;
21862 END IF;
21863
21864 EXCEPTION
21865 WHEN Invalid_Arg_Exc_WP THEN
21866
21867 x_return_status := FND_API.G_RET_STS_ERROR;
21868 l_msg_count := FND_MSG_PUB.count_msg;
21869 IF l_msg_count = 1 and x_msg_data IS NULL THEN
21870 PA_INTERFACE_UTILS_PUB.get_messages
21871 (p_encoded => FND_API.G_TRUE
21872 ,p_msg_index => 1
21873 ,p_msg_count => l_msg_count
21874 ,p_msg_data => l_msg_data
21875 ,p_data => l_data
21876 ,p_msg_index_out => l_msg_index_out);
21877 x_msg_data := l_data;
21878 x_msg_count := l_msg_count;
21879 ELSE
21880 x_msg_count := l_msg_count;
21881 END IF;
21882 IF l_debug_mode = 'Y' THEN
21883 pa_debug.reset_curr_function;
21884 END IF;
21885 RETURN;
21886 WHEN others THEN
21887
21888 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21889 x_msg_count := 1;
21890 x_msg_data := SQLERRM;
21891
21892 FND_MSG_PUB.add_exc_msg
21893 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
21894 ,p_procedure_name => 'PROCESS_WBS_UPDATES_WRP'
21895 ,p_error_text => x_msg_data);
21896
21897 IF l_debug_mode = 'Y' THEN
21898 pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
21899 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,5);
21900 pa_debug.reset_curr_function;
21901 END IF;
21902 RAISE;
21903 END PROCESS_WBS_UPDATES_WRP_FORM ;
21904
21905 --bug 3035902 maansari
21906 PROCEDURE call_process_WBS_updates(
21907 p_dest_project_id IN NUMBER
21908 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
21909 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
21910 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
21911 ) AS
21912
21913 CURSOR cur_strs_n_types
21914 IS
21915 SELECT ppe.proj_element_id, ppst.structure_type_id
21916 FROM pa_proj_elements ppe, pa_proj_structure_types ppst, pa_structure_types pst
21917 WHERE ppe.project_id = p_dest_project_id
21918 AND ppe.object_type = 'PA_STRUCTURES'
21919 AND ppe.proj_element_id = ppst.proj_element_id
21920 and ppst.structure_type_id = pst.structure_type_id
21921 and pst.structure_type in ('WORKPLAN','FINANCIAL')
21922 ;
21923
21924 CURSOR cur_str_vers( c_structure_id NUMBER )
21925 IS
21926 SELECT ppevs.element_version_id
21927 FROM pa_proj_element_versions ppevs
21928 WHERE ppevs.project_id = p_dest_project_id
21929 AND ppevs.object_type = 'PA_STRUCTURES'
21930 AND ppevs.proj_element_id = c_structure_id
21931 ;
21932
21933 l_fn_str_id NUMBER;
21934 l_wp_str_id NUMBER;
21935 l_fn_str_ver_id NUMBER;
21936 l_wp_str_ver_id NUMBER;
21937 l_task_weight_basis PA_PROJ_PROGRESS_ATTR.task_weight_basis_code%TYPE;
21938 l_shared VARCHAR2(1);
21939
21940 l_msg_count NUMBER := 0;
21941 l_data VARCHAR2(2000);
21942 l_msg_data VARCHAR2(2000);
21943 l_msg_index_out NUMBER;
21944 l_debug_mode VARCHAR2(1);
21945 BEGIN
21946
21947 x_msg_count := 0;
21948 x_return_status := FND_API.G_RET_STS_SUCCESS;
21949 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
21950 l_shared := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_dest_project_id);
21951
21952 /* The following is the simple solution for this.
21953 Update the Process_WBS_flag only for WORKPLAN enabled structures
21954 if task weighting basis is DURATION.
21955 Call the concurrent wrapper for all structure versions */
21956 l_task_weight_basis := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS( p_dest_project_id );
21957 -- IF NVL( l_task_weight_basis, 'X' ) in( 'DURATION', 'EFFORT') --3127640
21958 -- THEN
21959 FOR cur_strs_n_types_rec in cur_strs_n_types LOOP
21960 IF cur_strs_n_types_rec.structure_type_id = 1 --'WORKPLAN' structure
21961 THEN
21962 l_wp_str_id := cur_strs_n_types_rec.proj_element_id;
21963 IF NVL( l_task_weight_basis, 'X' ) = 'DURATION' --bug 3127640
21964 THEN
21965 --no need to update the flag in case of EFFORT or Manual bcoz
21966 --the onlyu thing affected from quick entry is DURATRION thru dates..
21967
21968 UPDATE pa_proj_elem_ver_structure
21969 SET PROCESS_UPDATE_WBS_FLAG = 'Y'
21970 WHERE proj_element_id = cur_strs_n_types_rec.proj_element_id
21971 AND project_id = p_dest_project_id
21972 AND PROCESS_UPDATE_WBS_FLAG = 'N'
21973 ;
21974 END IF;
21975 ELSE
21976 l_fn_str_id := cur_strs_n_types_rec.proj_element_id;
21977 END IF;
21978 END LOOP;
21979 -- END IF;
21980
21981 IF l_shared = 'Y'
21982 --AND NVL( l_task_weight_basis, 'X' ) in( 'DURATION', 'EFFORT') --bug 3127640
21983 THEN
21984 OPEN cur_str_vers( l_wp_str_id );
21985 FETCH cur_str_vers INTO l_wp_str_ver_id;
21986 CLOSE cur_str_vers;
21987
21988 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
21989 (
21990 p_calling_context => 'COPY_PROJECT'
21991 ,p_project_id => p_dest_project_id
21992 ,p_structure_version_id => l_wp_str_ver_id
21993 ,x_return_status => x_return_status
21994 ,x_msg_count => x_msg_count
21995 ,x_msg_data => x_msg_data);
21996
21997 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
21998 IF l_debug_mode = 'Y' THEN
21999 pa_debug.g_err_stage := 'Error calling concurrent wbs update process ';
22000 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,4);
22001 END IF;
22002 Raise Invalid_Arg_Exc_WP;
22003 END IF;
22004
22005 ELSIF l_shared = 'N'
22006 --AND NVL( l_task_weight_basis, 'X' ) in( 'DURATION', 'EFFORT') --Split then call the api twice. --bug3127640 added 'EFFORT' in the IF clause.
22007 THEN
22008 /*
22009 OPEN cur_str_vers( l_wp_str_id );
22010 FETCH cur_str_vers INTO l_wp_str_ver_id;
22011 CLOSE cur_str_vers;
22012 */
22013 --If there are more than one working versions
22014 FOR cur_str_vers_rec in cur_str_vers( l_wp_str_id ) LOOP
22015
22016 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
22017 (
22018 p_calling_context => 'COPY_PROJECT'
22019 ,p_project_id => p_dest_project_id
22020 ,p_structure_version_id => cur_str_vers_rec.element_version_id
22021 ,x_return_status => x_return_status
22022 ,x_msg_count => x_msg_count
22023 ,x_msg_data => x_msg_data);
22024
22025 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
22026 IF l_debug_mode = 'Y' THEN
22027 pa_debug.g_err_stage := 'Error calling concurrent wbs update process ';
22028 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,4);
22029 END IF;
22030 Raise Invalid_Arg_Exc_WP;
22031 END IF;
22032
22033 END LOOP;
22034
22035
22036 OPEN cur_str_vers( l_fn_str_id );
22037 FETCH cur_str_vers INTO l_fn_str_ver_id;
22038 --hsiu: 3305199 for bug with wp only project
22039 IF cur_str_vers%NOTFOUND THEN
22040 l_fn_str_ver_id := -1;
22041 END IF;
22042 CLOSE cur_str_vers;
22043
22044 --hsiu: 3305199 for bug with wp only project
22045 IF l_fn_str_ver_id <> -1 THEN
22046 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
22047 (
22048 p_calling_context => 'COPY_PROJECT'
22049 ,p_project_id => p_dest_project_id
22050 ,p_structure_version_id => l_fn_str_ver_id
22051 ,x_return_status => x_return_status
22052 ,x_msg_count => x_msg_count
22053 ,x_msg_data => x_msg_data);
22054
22055 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
22056 IF l_debug_mode = 'Y' THEN
22057 pa_debug.g_err_stage := 'Error calling update WBS WRP ';
22058 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,4);
22059 END IF;
22060 Raise Invalid_Arg_Exc_WP;
22061 END IF;
22062 END IF; --hsiu: 3305199 for bug with wp only project
22063
22064 END IF;
22065 EXCEPTION
22066 WHEN Invalid_Arg_Exc_WP THEN
22067
22068 x_return_status := FND_API.G_RET_STS_ERROR;
22069 l_msg_count := FND_MSG_PUB.count_msg;
22070 IF l_msg_count = 1 and x_msg_data IS NULL THEN
22071 PA_INTERFACE_UTILS_PUB.get_messages
22072 (p_encoded => FND_API.G_TRUE
22073 ,p_msg_index => 1
22074 ,p_msg_count => l_msg_count
22075 ,p_msg_data => l_msg_data
22076 ,p_data => l_data
22077 ,p_msg_index_out => l_msg_index_out);
22078 x_msg_data := l_data;
22079 x_msg_count := l_msg_count;
22080 ELSE
22081 x_msg_count := l_msg_count;
22082 END IF;
22083 IF l_debug_mode = 'Y' THEN
22084 pa_debug.reset_curr_function;
22085 END IF;
22086 RETURN;
22087 WHEN others THEN
22088
22089 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
22090 x_msg_count := 1;
22091 x_msg_data := SQLERRM;
22092
22093 FND_MSG_PUB.add_exc_msg
22094 ( p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB'
22095 ,p_procedure_name => 'CALL_PROCESS_WBS_UPDATES'
22096 ,p_error_text => x_msg_data);
22097
22098 IF l_debug_mode = 'Y' THEN
22099 pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
22100 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,5);
22101 pa_debug.reset_curr_function;
22102 END IF;
22103 RAISE;
22104 END call_process_WBS_updates;
22105 --End 3035902 maansari
22106
22107 --hsiu: bug 3254091
22108 PROCEDURE Update_Current_Phase
22109 ( p_api_version_number IN NUMBER := 1.0
22110 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
22111 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
22112 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
22113 ,p_validation_level IN VARCHAR2 := 100
22114 ,p_debug_mode IN VARCHAR2 := 'N'
22115 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22116 ,p_user_id IN NUMBER := FND_GLOBAL.USER_ID
22117 ,p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22118 ,p_project_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22119 ,p_current_lifecycle_phase_id IN NUMBER := FND_API.G_MISS_NUM
22120 ,p_current_lifecycle_phase IN VARCHAR2 := FND_API.G_MISS_CHAR
22121 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
22122 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
22123 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
22124 )
22125 IS
22126 CURSOR cur_get_wp_attr(c_project_id NUMBER)
22127 IS
22128 select ppwa.proj_element_id,
22129 ppwa.wp_approval_reqd_flag,
22130 ppwa.wp_auto_publish_flag,
22131 ppwa.wp_default_display_lvl,
22132 ppwa.wp_enable_version_flag,
22133 ppwa.auto_pub_upon_creation_flag,
22134 ppwa.auto_sync_txn_date_flag,
22135 ppwa.wp_approver_source_id,
22136 ppwa.wp_approver_source_type,
22137 ppwa.record_version_number,
22138 ppwa.txn_date_sync_buf_days,
22139 ppwa.lifecycle_version_id,
22140 -- gboomina Bug 8586393 - start
22141 ppwa.use_task_schedule_flag
22142 -- gboomina Bug 8586393 - end
22143 from pa_proj_workplan_attr ppwa,
22144 pa_proj_elements ppe,
22145 pa_proj_structure_types ppst
22146 where ppwa.project_id = c_project_id
22147 and ppwa.project_id = ppe.project_id
22148 and ppwa.proj_element_id = ppe.proj_element_id
22149 and ppe.proj_element_id = ppst.proj_element_id
22150 and ppst.structure_type_id = 1;
22151
22152 l_proj_element_id NUMBER;
22153 l_project_id NUMBER;
22154 l_wp_approval_reqd_fg VARCHAR2(1);
22155 l_wp_auto_publish_fg VARCHAR2(1);
22156 l_wp_default_display_lvl NUMBER;
22157 l_wp_enable_version_fg VARCHAR2(1);
22158 l_auto_pub_upon_creation_fg VARCHAR2(1);
22159 l_auto_sync_txn_date_fg VARCHAR2(1);
22160 l_wp_approver_source_id NUMBER;
22161 l_wp_approver_source_type NUMBER;
22162 l_record_version_number NUMBER;
22163 l_txn_date_sync_buf_days NUMBER;
22164 l_life_cycle_version_id NUMBER;
22165 l_current_phase_version_id NUMBER;
22166 -- gboomina Bug 8586393 - start
22167 l_use_task_schedule_flag VARCHAR2(1);
22168 -- gboomina Bug 8586393 - end
22169 API_ERROR EXCEPTION;
22170
22171 l_return_status VARCHAR2(1);
22172 l_msg_count NUMBER;
22173 l_msg_data VARCHAR2(250);
22174 l_error_msg_code VARCHAR2(250);
22175 l_data VARCHAR2(250);
22176 l_msg_index_out NUMBER;
22177
22178 BEGIN
22179 --Clear Error Messages.
22180 IF p_init_msg_list = FND_API.G_TRUE THEN
22181 FND_MSG_PUB.initialize;
22182 END IF;
22183
22184 --set savepoint
22185 IF p_commit = FND_API.G_TRUE THEN
22186 SAVEPOINT update_current_phase;
22187 END IF;
22188
22189 x_msg_count := 0;
22190 x_return_status := FND_API.G_RET_STS_SUCCESS;
22191
22192 --Project name to id Conversion
22193 IF ((p_project_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND (p_project_name IS NOT NULL)) OR
22194 ((p_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND (p_project_id IS NOT NULL)) THEN
22195 PA_PROJ_ELEMENTS_UTILS.Project_Name_Or_Id(
22196 p_project_name => p_project_name,
22197 p_project_id => p_project_id,
22198 x_project_id => l_project_id,
22199 x_return_status => l_return_status,
22200 x_error_msg_code => l_error_msg_code);
22201 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
22202 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
22203 p_msg_name => l_error_msg_code);
22204 RAISE API_ERROR;
22205 END IF;
22206 END IF;
22207
22208 --get existing row (need to get life cycle id);
22209 OPEN cur_get_wp_attr(l_project_id);
22210 FETCH cur_get_wp_attr INTO l_proj_element_id,
22211 l_wp_approval_reqd_fg,
22212 l_wp_auto_publish_fg,
22213 l_wp_default_display_lvl,
22214 l_wp_enable_version_fg,
22215 l_auto_pub_upon_creation_fg,
22216 l_auto_sync_txn_date_fg,
22217 l_wp_approver_source_id,
22218 l_wp_approver_source_type,
22219 l_record_version_number,
22220 l_txn_date_sync_buf_days,
22221 l_life_cycle_version_id,
22222 -- gboomina Bug 8586393 - start
22223 l_use_task_schedule_flag;
22224 -- gboomina Bug 8586393 - end
22225 CLOSE cur_get_wp_attr;
22226
22227 --Current Phase name to id conversion
22228 IF ((p_current_lifecycle_phase_id <> FND_API.G_MISS_NUM) AND (p_current_lifecycle_phase_id is not NULL)) OR
22229 ((p_current_lifecycle_phase <> FND_API.G_MISS_CHAR) AND (p_current_lifecycle_phase is not NULL)) then
22230 PA_WORKPLAN_ATTR_UTILS.CHECK_LIFECYCLE_PHASE_NAME_ID
22231 ( p_lifecycle_id => l_life_cycle_version_id
22232 ,p_current_lifecycle_phase_id => p_current_lifecycle_phase_id
22233 ,p_current_lifecycle_phase => p_current_lifecycle_phase
22234 ,p_check_id_flag => 'Y'
22235 ,x_current_lifecycle_phase_id => l_current_phase_version_id
22236 ,x_return_status => l_return_status
22237 ,x_error_msg_code => l_error_msg_code);
22238
22239 IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
22240 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA', p_msg_name => l_error_msg_code);
22241 RAISE API_ERROR;
22242 END IF;
22243 END IF;
22244
22245
22246 --check security if user id is not -1
22247 IF (p_user_id <> -1) THEN
22248 IF 'F' = PA_SECURITY_PVT.check_user_privilege(
22249 'PA_PAXPREPR_OPT_WORKPLAN_STR',
22250 'PA_PROJECTS',
22251 l_project_id
22252 ) THEN
22253 PA_UTILS.ADD_MESSAGE
22254 (p_app_short_name => 'PA',
22255 p_msg_name => 'PA_FUNCTION_SECURITY_ENFORCED');
22256 RAISE API_ERROR;
22257 END IF;
22258 END IF;
22259
22260
22261 --Call existing update API
22262 PA_WORKPLAN_ATTR_PVT.UPDATE_PROJ_WORKPLAN_ATTRS(
22263 p_commit => p_commit
22264 ,p_validate_only => p_validate_only
22265 ,p_validation_level => 50
22266 ,p_debug_mode => p_debug_mode
22267 ,p_max_msg_count => p_max_msg_count
22268 ,p_project_id => l_project_id
22269 ,p_proj_element_id => l_proj_element_id
22270 ,p_approval_reqd_flag => l_wp_approval_reqd_fg
22271 ,p_auto_publish_flag => l_wp_auto_publish_fg
22272 ,p_approver_source_id => l_wp_approver_source_id
22273 ,p_approver_source_type => l_wp_approver_source_type
22274 ,p_default_display_lvl => l_wp_default_display_lvl
22275 ,p_enable_wp_version_flag => l_wp_enable_version_fg
22276 ,p_auto_pub_upon_creation_flag => l_auto_pub_upon_creation_fg
22277 ,p_auto_sync_txn_date_flag => l_auto_sync_txn_date_fg
22278 ,p_txn_date_sync_buf_days => l_txn_date_sync_buf_days
22279 ,p_lifecycle_version_id => l_life_cycle_version_id
22280 ,p_current_phase_version_id => l_current_phase_version_id
22281 ,p_record_version_number => l_record_version_number
22282 -- gboomina Bug 8586393 - start
22283 ,p_use_task_schedule_flag => l_use_task_schedule_flag
22284 -- gboomina Bug 8586393 - end
22285 ,x_return_status => l_return_status
22286 ,x_msg_count => l_msg_count
22287 ,x_msg_data => l_msg_data
22288 );
22289
22290 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
22291 x_msg_count := FND_MSG_PUB.count_msg;
22292 if x_msg_count = 1 then
22293 pa_interface_utils_pub.get_messages
22294 (p_encoded => FND_API.G_TRUE,
22295 p_msg_index => 1,
22296 p_msg_count => l_msg_count,
22297 p_msg_data => l_msg_data,
22298 p_data => l_data,
22299 p_msg_index_out => l_msg_index_out);
22300 x_msg_data := l_data;
22301 end if;
22302 raise API_ERROR;
22303 END IF;
22304
22305 x_return_status := FND_API.G_RET_STS_SUCCESS;
22306
22307 if p_commit = FND_API.G_TRUE then
22308 commit work;
22309 end if;
22310
22311 EXCEPTION
22312 WHEN API_ERROR THEN
22313 x_return_status := FND_API.G_RET_STS_ERROR;
22314 IF p_commit = FND_API.G_TRUE THEN
22315 rollback to update_current_phase;
22316 END IF;
22317 WHEN OTHERS THEN
22318 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
22319 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
22320 p_procedure_name => 'update_current_phase',
22321 p_error_text => SUBSTRB(SQLERRM,1,240));
22322 IF p_commit = FND_API.G_TRUE THEN
22323 rollback to update_current_phase;
22324 END IF;
22325 raise;
22326 END Update_Current_Phase;
22327 --end bug 3254091
22328
22329 -- This API is created for FP_M changes. Refer to tracking bug 3305199
22330 -- This API imports the data from a string into the system
22331 -- Each string will contain the elements Source Ref, Sub Type and Lag Days
22332 Procedure Parse_Predecessor_Import (
22333 P_String IN VARCHAR2,
22334 P_Delimeter IN VARCHAR2 DEFAULT ',',
22335 P_Task_Version_Id IN NUMBER, --SMUKKA Added this parameter
22336 X_Return_Status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
22337 X_Msg_Count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
22338 X_Msg_Data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
22339 )
22340 IS
22341 l_Strings_Tab PA_PLSQL_DATATYPES.Char240TabTyp;
22342 l_begin NUMBER;
22343 l_End NUMBER;
22344 l_Col1 NUMBER;
22345 l_Col2 VARCHAR2(10);
22346 l_Col3 VARCHAR2(10);
22347 l_String_Length NUMBER;
22348 l_temp_char VARCHAR2(1);
22349
22350 l_Type_Position NUMBER;
22351 l_Type_Count NUMBER;
22352
22353 l_Sign_Position NUMBER;
22354 l_Sign_Count NUMBER;
22355
22356 --bug 3613766
22357 cursor get_pred_id(c_pred_ref_id VARCHAR2) IS
22358 select ppev1.project_id, ppev1.element_version_id
22359 from pa_proj_elements ppe,
22360 pa_proj_element_versions ppev1,
22361 pa_proj_element_versions ppev2
22362 where ppev2.element_version_id = P_Task_Version_Id
22363 and ppev2.parent_structure_version_id = ppev1.parent_structure_version_id
22364 and ppev1.proj_element_id = ppe.proj_element_id
22365 and ppe.pm_source_reference = c_pred_ref_id;
22366 l_pred_project_id NUMBER;
22367 l_pred_elem_ver_id NUMBER;
22368 l_lag_val NUMBER;
22369 l_type_val VARCHAR2(2);
22370 --end bug 3613766
22371
22372 l_Delimeter VARCHAR2(10);
22373 BEGIN
22374
22375 IF (P_Delimeter = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
22376 l_Delimeter := ',';
22377 ELSE
22378 l_Delimeter := p_Delimeter;
22379 END IF;
22380
22381 -- Build the PL/SQL Table with all the required strings
22382 l_begin := 1;
22383 For i IN 1..200000 -- Romove this range. Used only for testing
22384 Loop
22385 Select Instr(P_String, l_Delimeter, 1, i) Into l_End from dual;
22386 Select substr(P_String, l_begin, Decode(l_End, 0, 1000, l_End-l_begin))
22387 Into l_Strings_Tab(i) From Dual;
22388 l_begin := l_end + 1;
22389 EXIT When nvl(l_End,0) = 0;
22390 End Loop;
22391
22392 For Rec IN l_Strings_Tab.FIRST..l_Strings_Tab.LAST
22393 Loop
22394 -- Dbms_Output.Put_Line('Input String : -'|| l_Strings_Tab(Rec)||'-');
22395
22396 If l_Strings_Tab(Rec) IS NOT NULL then
22397 l_String_Length := length(l_Strings_Tab(Rec));
22398 Else
22399 -- Dbms_Output.Put_Line('Error: Input string is null');
22400 RETURN;
22401 End If;
22402
22403 /*Added re-initialization of these 3 local variables for bug 8431166*/
22404 l_Col1 := 0;
22405 l_Col2 := NULL ;
22406 -- l_Col3 := NULL ; // This has already been done by bug 7243124
22407 /*re-initialization ends for bug 8431166*/
22408
22409 l_Sign_Count := 0;
22410 l_Type_Count := 0;
22411 l_Type_Position := 0;
22412 l_Sign_Position := 0;
22413 l_Col3 := NULL ; /*Added as part of fwd port bug 7243124*/
22414
22415 FOR char_position in 1..l_String_Length
22416 Loop
22417 l_temp_char := substr(l_Strings_Tab(Rec), char_position, 1);
22418 -- Dbms_Output.Put_Line('Char : '|| l_temp_char );
22419
22420 If ascii(l_temp_char) NOT BETWEEN 48 AND 57 then -- is not number character
22421 -- Validating the dependency code number
22422 If char_position = 1 then
22423 -- Dbms_Output.Put_Line('Error: First char is not number');
22424 RETURN;
22425 End If;
22426 If l_temp_char NOT IN ('F', 'S', '+', '-' ) then
22427 --Dbms_Output.Put_Line('Error: Invalid char found in the string');
22428 RETURN;
22429 End If;
22430
22431 -- Validating sign character
22432 If l_temp_char IN ('+', '-') then
22433 l_Sign_Count := l_Sign_Count + 1;
22434 l_Sign_Position := char_position;
22435 If l_Sign_Count > 1 then
22436 -- Dbms_Output.Put_Line('Error: More than one signs are found');
22437 RETURN;
22438 Else
22439 If l_Type_Count < 1 then
22440 --Dbms_Output.Put_Line('Error: Type code is missing');
22441 RETURN;
22442 End If;
22443 End If;
22444 End If;
22445
22446 -- Validating type code character
22447 If l_temp_char IN ('F', 'S') then
22448 If l_Type_Position > 0 and l_Type_Position+1 <> char_position Then
22449 -- Dbms_Output.Put_Line('Error: Type code is invalid - 2');
22450 RETURN;
22451 End If;
22452 l_Type_Count := l_Type_Count + 1; l_Type_Position := char_position;
22453 If l_Type_Count > 2 then
22454 -- Dbms_Output.Put_Line('Error: Type code is invalid - 3');
22455 RETURN;
22456 End If;
22457 End If;
22458
22459 End If;
22460 End Loop;
22461 -- End of processing single string
22462
22463 Select To_Number(SubStr(l_Strings_Tab(Rec), 1, Decode(l_Type_Position, 0, 100, l_Type_Position-2 )))
22464 Into l_Col1 From Dual;
22465
22466 If l_Type_Position <> 0 then
22467 If l_Type_Count <> 2 then
22468 -- Dbms_Output.Put_Line('Error: Type code is invalid - 4');
22469 RETURN;
22470 End If;
22471 l_Col2 := SubStr(l_Strings_Tab(Rec), l_Type_Position-1, 2);
22472 End If;
22473
22474 If l_Sign_Position <> 0 then
22475 l_Col3 := SubStr(l_Strings_Tab(Rec),l_Sign_Position);
22476 End If;
22477
22478 -- Dbms_Output.Put_Line('Output Columns : '|| l_Col1||' - '||l_Col2||' - '||l_Col3);
22479 OPEN get_pred_id(l_col1);
22480 FETCH get_pred_id INTO l_pred_project_id, l_pred_elem_ver_id;
22481 IF get_pred_id%FOUND THEN
22482
22483 IF (l_Col2 IS NULL) THEN
22484 l_type_val := 'FS';
22485 ELSE
22486 l_type_val := l_Col2;
22487 END IF;
22488
22489 IF (l_Col3 IS NULL) THEN
22490 l_lag_val := 0;
22491 ELSE
22492 l_lag_val := l_Col3;
22493 END IF;
22494
22495 pa_relationship_pvt.create_dependency(
22496 p_calling_module => 'AMG'
22497 ,p_src_proj_id => l_pred_project_id
22498 ,p_src_task_ver_id => P_Task_Version_Id
22499 ,p_dest_proj_id => l_pred_project_id
22500 ,p_dest_task_ver_id => l_pred_elem_ver_id
22501 ,p_type => l_type_val
22502 ,p_lag_days => l_lag_val
22503 ,p_comments => NULL
22504 ,x_return_status => x_return_status
22505 ,x_msg_count => x_msg_count
22506 ,x_msg_data => x_msg_data);
22507 END IF;
22508 CLOSE get_pred_id;
22509
22510 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
22511 return;
22512 END IF;
22513
22514 End Loop;
22515
22516 END Parse_Predecessor_Import;
22517
22518 -- This API is created for FP_M changes. Refer to tracking bug 3305199
22519 -- This API exports the data from a system into an out parameter string
22520 -- Each string will contain the elements Source Ref, Sub Type and Lag Days
22521 Function Parse_Predecessor_Export (
22522 P_Element_Version_ID IN NUMBER,
22523 P_Delimeter IN VARCHAR2 DEFAULT ','
22524 ) RETURN VARCHAR2
22525 IS
22526 l_String VARCHAR2(4000);
22527 Begin
22528 l_String := '';
22529 For i IN ( Select PPE.PM_Source_Reference SourceRef,
22530 POR.Relationship_Subtype SubType,
22531 decode(sign(NVL(POR.Lag_Day,0)),
22532 '0', '', '-1', '', '+') || decode(POR.Lag_Day,0, NULL, POR.Lag_day)/* bug#8583608(10*8*60)*/ LagDays --bug 4348156
22533 From PA_Proj_Elements PPE,
22534 PA_Proj_Element_Versions PEV,
22535 PA_Object_Relationships POR,
22536 PA_PROJ_ELEMENT_VERSIONS PEV2
22537 Where PPE.project_id = PEV.project_id
22538 and PPE.proj_element_id = PEV.proj_element_id
22539 and PEV.element_version_id = POR.object_id_to1
22540 and PEV2.ELEMENT_VERSION_ID = POR.object_id_from1
22541 and PEV2.ELEMENT_VERSION_ID = P_ELEMENT_VERSION_ID
22542 and POR.Relationship_Type = 'D'
22543 and POR.Object_ID_From2 = POR.Object_ID_To2 )
22544 Loop
22545 l_String := l_String||i.SourceRef||i.SubType||i.LagDays||P_Delimeter;
22546 End Loop;
22547 Return substr(l_String,1,length(l_string)-1);
22548 Exception When Others Then NULL;
22549 End Parse_Predecessor_Export;
22550
22551 Function Parse_Predecessor_Export2 (
22552 P_Element_Version_ID IN NUMBER,
22553 P_Delimeter IN VARCHAR2 DEFAULT ','
22554 ) RETURN VARCHAR2
22555 IS
22556 l_String VARCHAR2(4000);
22557 Begin
22558 l_String := '';
22559 For i IN ( Select PPE.proj_element_id ProjElemId,
22560 POR.Relationship_Subtype SubType,
22561 decode(sign(NVL(POR.Lag_Day,0)),
22562 '0', '', '-1', '', '+') || decode(POR.Lag_Day,0, NULL, POR.Lag_day)/* bug#8583608 (10*8*60)*/ LagDays --bug 4348156
22563 From PA_Proj_Elements PPE,
22564 PA_Proj_Element_Versions PEV,
22565 PA_Object_Relationships POR,
22566 PA_PROJ_ELEMENT_VERSIONS PEV2
22567 Where PPE.project_id = PEV.project_id
22568 and PPE.proj_element_id = PEV.proj_element_id
22569 and PEV.element_version_id = POR.object_id_to1
22570 and PEV2.ELEMENT_VERSION_ID = POR.object_id_from1
22571 and PEV2.ELEMENT_VERSION_ID = P_ELEMENT_VERSION_ID
22572 and POR.Relationship_Type = 'D'
22573 and POR.Object_ID_From2 = POR.Object_ID_To2 )
22574 Loop
22575 l_String := l_String||i.ProjElemId||i.SubType||i.LagDays||P_Delimeter;
22576 End Loop;
22577 Return substr(l_String, 1, length(l_string)-1);
22578 Exception When Others Then NULL;
22579 End Parse_Predecessor_Export2;
22580 --Added by rtarway for FP.M Development
22581 Function GET_SHARE_TYPE (
22582 P_Project_ID IN NUMBER
22583 ) RETURN VARCHAR2
22584 IS
22585 Cursor get_proj_share_type
22586 IS
22587 SELECT proj.structure_sharing_code FROM pa_projects_all proj where proj.project_id = P_Project_ID;
22588
22589 l_share_code VARCHAR2(250);
22590
22591 Begin
22592 l_share_code := '';
22593
22594 OPEN get_proj_share_type;
22595 FETCH get_proj_share_type into l_share_code;
22596 CLOSE get_proj_share_type;
22597
22598 Return l_share_code;
22599 Exception When Others Then NULL;
22600 End GET_SHARE_TYPE;
22601 --Added by rtarway for FP.M Development
22602
22603 procedure delete_intra_dependency (p_element_version_id IN NUMBER,
22604 p_commit IN VARCHAR2 := FND_API.G_FALSE,
22605 p_debug_mode IN VARCHAR2 := 'N',
22606 x_return_status OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
22607 IS
22608 l_object_type VARCHAR2(80);
22609 API_ERROR EXCEPTION;
22610 BEGIN
22611 IF (p_debug_mode = 'Y') THEN
22612 pa_debug.init_err_stack('PA_PROJ_TASK_STRUC_PUB.DELETE_INTRA_DEPENDENCY');
22613 pa_debug.debug('PA_PROJ_TASK_STRUC_PUB.DELETE_INTRA_DEPENDENCY Begin');
22614 END IF;
22615 --
22616 IF (p_commit = FND_API.G_TRUE) THEN
22617 savepoint delete_intra_dependency;
22618 END IF;
22619 BEGIN
22620 SELECT object_type
22621 INTO l_object_type
22622 FROM pa_proj_element_versions
22623 WHERE ELEMENT_VERSION_ID = p_element_version_id;
22624 EXCEPTION
22625 WHEN NO_DATA_FOUND THEN
22626 fnd_message.set_name('PA','PA_RECORD_NOT_FOUND');
22627 x_return_status := FND_API.G_RET_STS_ERROR;
22628 WHEN OTHERS THEN
22629 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
22630 raise;
22631 END;
22632 IF l_object_type='PA_TASKS' THEN
22633 BEGIN
22634 DELETE FROM pa_object_relationships por1
22635 WHERE por1.object_relationship_id IN
22636 (SELECT por.object_relationship_id
22637 FROM pa_object_relationships por
22638 WHERE por.relationship_type = 'D'
22639 AND por.object_id_from1 = p_element_version_id
22640 AND por.object_id_from2 = por.object_id_to2
22641 AND por.object_type_from = 'PA_TASKS'
22642 AND por.object_type_to = 'PA_TASKS');
22643 IF SQL%NOTFOUND THEN
22644 fnd_message.set_name('PA','PA_RECORD_NOT_FOUND');
22645 x_return_status := FND_API.G_RET_STS_ERROR;
22646 END IF;
22647 EXCEPTION
22648 WHEN OTHERS THEN
22649 x_return_status := FND_API.G_RET_STS_ERROR;
22650 raise;
22651 END;
22652 ELSIF l_object_type='PA_STRUCTURES' THEN
22653 BEGIN
22654 DELETE FROM pa_object_relationships por1
22655 WHERE por1.object_relationship_id IN
22656 (SELECT por.object_relationship_id
22657 FROM pa_proj_element_versions ppev,
22658 pa_object_relationships por
22659 WHERE relationship_type ='D'
22660 AND ppev.parent_structure_version_id = p_element_version_id
22661 AND ppev.object_type = 'PA_TASKS'
22662 AND por.object_id_from2 = por.object_id_to2
22663 AND por.object_type_from = 'PA_TASKS'
22664 AND por.object_type_to = 'PA_TASKS'
22665 AND por.object_id_from1 = ppev.ELEMENT_VERSION_ID);
22666 IF SQL%NOTFOUND THEN
22667 fnd_message.set_name('PA','PA_RECORD_NOT_FOUND');
22668 x_return_status := FND_API.G_RET_STS_ERROR;
22669 END IF;
22670 EXCEPTION
22671 WHEN OTHERS THEN
22672 x_return_status := FND_API.G_RET_STS_ERROR;
22673 raise;
22674 END;
22675 END IF;
22676 --
22677 x_return_status := FND_API.G_RET_STS_SUCCESS;
22678 --
22679 IF (p_commit = FND_API.G_TRUE) THEN
22680 COMMIT;
22681 END IF;
22682 --
22683 IF (p_debug_mode = 'Y') THEN
22684 pa_debug.debug('PA_PROJ_TASK_STRUC_PUB.DELETE_INTRA_DEPENDENCY END');
22685 END IF;
22686 EXCEPTION
22687 WHEN API_ERROR THEN
22688 x_return_status := FND_API.G_RET_STS_ERROR;
22689 rollback to delete_intra_dependency;
22690 WHEN OTHERS THEN
22691 IF (p_commit = FND_API.G_TRUE) THEN
22692 ROLLBACK TO delete_intra_dependency;
22693 END IF;
22694 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
22695 FND_MSG_PUB.add_exc_msg(
22696 p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
22697 p_procedure_name => 'delete_intra_dependency',
22698 p_error_text => SUBSTRB(SQLERRM,1,240));
22699 ROLLBACK TO delete_intra_dependency;
22700 RAISE;
22701 END delete_intra_dependency;
22702
22703 END PA_PROJ_TASK_STRUC_PUB;
22704