DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_PROJ_TASK_STRUC_PUB

Source


1 PACKAGE BODY PA_PROJ_TASK_STRUC_PUB AS
2 /* $Header: PAPSWRPB.pls 120.39.12010000.11 2008/12/04 14:41:23 rthumma ship $ */
3 
4 G_PKG_NAME              CONSTANT VARCHAR2(30) := 'PA_PROJ_TASK_STRUC_PUB';
5 
6 Invalid_Arg_Exc_WP      Exception ; -- Bug 2931183.
7 
8 -- API name                      : create_default_structure
9 -- Type                          : PL/SQL Public procedure
10 -- Pre-reqs                      : None
11 -- Return Value                  : N/A
12 -- Prameters
13 -- p_dest_project_id            IN NUMBER
14 -- p_dest_project_name          IN VARCHAR2
15 -- p_dest_project_number        IN VARCHAR2
16 -- p_dest_description           IN VARCHAR2
17 -- p_dest_org_id                IN NUMBER
18 -- x_msg_count             OUT NUMBER
19 -- x_msg_data              OUT VARCHAR2
20 -- x_return_status         OUT VARCHAR2
21 --
22 --  History
23 --
24 --  14-DEC-01   MAansari             -Created
25 --
26 --
27 
28 PROCEDURE create_default_structure
29 ( p_dest_project_id            IN NUMBER
30  ,p_dest_project_name          IN VARCHAR2
31  ,p_dest_project_number        IN VARCHAR2
32  ,p_dest_description           IN VARCHAR2
33  ,p_struc_type            IN VARCHAR2 := 'WORKPLAN'
34  ,x_msg_count             OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
35  ,x_msg_data              OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
36  ,x_return_status         OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
37 
38     cursor get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
39     select nvl(max(version_number),0)+1
40       from pa_proj_elem_ver_structure
41      where project_id = c_project_id
42        and proj_element_id = c_proj_element_id
43        and status_code <> 'STRUCTURE_PUBLISHED';
44 
45   X_ROW_ID              VARCHAR2(18);
46   x_structure_id        NUMBER;
47   x_struc_version_id    NUMBER;
48   -- added for Bug: 45377865
49   l_new_struc_version_id    NUMBER;
50   -- added for Bug: 4537865
51   l_status_code         VARCHAR2(150);
52   l_struc_ver_number    NUMBER;
53   l_ref_task_version_id NUMBER;
54   l_peer_or_sub         VARCHAR2(4);
55   l_return_status       VARCHAR2(1);
56   l_msg_count           NUMBER;
57   l_msg_data            VARCHAR2(2000);
58   x_task_version_id     NUMBER;
59   x_pev_schedule_id     NUMBER;
60   x_pev_structure_id    NUMBER;
61   x_error_msg           VARCHAR2(250);
62   l_old_wbs_level       NUMBER;
63   API_ERROR            EXCEPTION;
64   l_suffix              VARCHAR2(250);
65   l_name                VARCHAR2(250);
66   l_append              VARCHAR2(250);
67 
68     CURSOR cur_elem_ver_seq
69         IS
70           SELECT pa_proj_element_versions_s.nextval
71             FROM sys.dual;
72 
73 BEGIN
74 
75       --Clear Error Messages.
76       IF FND_MSG_PUB.count_msg = 0
77       THEN
78           FND_MSG_PUB.initialize;
79       END IF;
80 
81       IF p_struc_type = 'WORKPLAN'
82       THEN
83          l_append := ': ';
84 
85          select meaning
86            into l_suffix
87            from pa_lookups
88           where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
89             and lookup_code = 'WORKPLAN';
90 
91          l_name := substr(p_dest_project_name||l_append||l_suffix, 1, 240);
92       ELSE
93          l_name := p_dest_project_name;
94       END IF;
95 
96       Savepoint create_dflt_structure;
97       --For each project create 1 structure
98       PA_PROJECT_STRUCTURE_PVT1.Create_Structure(
99                         p_project_id                        => p_dest_project_id
100                        ,p_structure_number                  => p_dest_project_number
101                        ,p_structure_name                    => l_name
102                        ,p_structure_description             => p_dest_description
103                        ,p_calling_flag                      => p_struc_type
104                        ,x_structure_id                      => x_structure_id
105                        ,x_return_status                     => l_return_status
106                        ,x_msg_count                         => l_msg_count
107                        ,x_msg_data                          => l_msg_data
108                      );
109 
110 
111       IF x_structure_id IS NULL OR l_return_status <> 'S'
112       THEN
113           PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
114                                ,p_msg_name       => 'PA_PS_NO_STRUC_CREATED');
115           raise API_ERROR;
116       END IF;
117 
118 
119 --The following code is added to populate parent_structure version id.
120 
121       OPEN cur_elem_ver_seq;
122       FETCH cur_elem_ver_seq INTO x_struc_version_id;
123       CLOSE cur_elem_ver_seq;
124 --End
125 
126     -- Fix for 4657794 :- This is fix for regression introduced by 4537865
127     -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_new_struc_version_id
128     -- to  x_struc_version_id
129 
130     l_new_struc_version_id := x_struc_version_id ;
131 
132     -- End 4657794
133 
134       PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row(
135             X_ROW_ID                   => X_row_id
136          --,X_ELEMENT_VERSION_ID       => x_struc_version_id            * Commented for Bug Fix: 4537865
137            ,X_ELEMENT_VERSION_ID       =>l_new_struc_version_id          -- added for Bug fix: 4537865
138            ,X_PROJ_ELEMENT_ID          => x_structure_id
139            ,X_OBJECT_TYPE              => 'PA_STRUCTURES'
140            ,X_PROJECT_ID                => p_dest_project_id
141            ,X_PARENT_STRUCTURE_VERSION_ID    => x_struc_version_id
142            ,X_DISPLAY_SEQUENCE        => null
143            ,X_WBS_LEVEL                 => null
144            ,X_WBS_NUMBER          => null
145            ,X_ATTRIBUTE_CATEGORY      => null
146            ,X_ATTRIBUTE1          => null
147            ,X_ATTRIBUTE2          => null
148            ,X_ATTRIBUTE3          => null
149            ,X_ATTRIBUTE4          => null
150            ,X_ATTRIBUTE5          => null
151            ,X_ATTRIBUTE6          => null
152            ,X_ATTRIBUTE7          => null
153            ,X_ATTRIBUTE8          => null
154            ,X_ATTRIBUTE9          => null
155            ,X_ATTRIBUTE10              => null
156            ,X_ATTRIBUTE11              => null
157            ,X_ATTRIBUTE12              => null
158            ,X_ATTRIBUTE13              => null
159            ,X_ATTRIBUTE14              => null
160            ,X_ATTRIBUTE15              => null
161            ,X_TASK_UNPUB_VER_STATUS_CODE => null
162            ,X_SOURCE_OBJECT_ID           => p_dest_project_id
163            ,X_SOURCE_OBJECT_TYPE         => 'PA_PROJECTS'
164        );
165       -- added for Bug fix: 4537865
166         x_struc_version_id := l_new_struc_version_id;
167       -- added for Bug fix: 4537865
168 
169       IF x_struc_version_id IS NULL
170       THEN
171           PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
172                                ,p_msg_name       => 'PA_PS_NO_STRUC_VER_CREATED');
173           raise API_ERROR;
174       END IF;
175 
176       --Get structure version number
177       OPEN get_working_ver_num(p_dest_project_id, x_structure_id);
178       FETCH get_working_ver_num INTO l_struc_ver_number;
179       CLOSE get_working_ver_num;
180       l_status_code := 'STRUCTURE_WORKING';
181 
182 
183     PA_PROJ_ELEM_VER_STRUCTURE_PKG.insert_row(
184      X_ROWID                       => x_row_id
185    , X_PEV_STRUCTURE_ID            => x_pev_structure_id
186    , X_ELEMENT_VERSION_ID          => x_struc_version_id
187    , X_VERSION_NUMBER              => l_struc_ver_number
188    , X_NAME                        => l_name
189    , X_PROJECT_ID                  => p_dest_project_id
190    , X_PROJ_ELEMENT_ID             => x_structure_id
191    , X_DESCRIPTION                 => p_dest_description
192    , X_EFFECTIVE_DATE              => null
193    , X_PUBLISHED_DATE              => null
194    , X_PUBLISHED_BY                => null
195    , X_CURRENT_BASELINE_DATE       => null
196    , X_CURRENT_BASELINE_FLAG       => 'N'
197    , X_CURRENT_BASELINE_BY         => null
198    , X_ORIGINAL_BASELINE_DATE      => null
199    , X_ORIGINAL_BASELINE_FLAG      => 'N'
200    , X_ORIGINAL_BASELINE_BY        => null
201    , X_LOCK_STATUS_CODE            => NULL
202    , X_LOCKED_BY                   => NULL
203    , X_LOCKED_DATE                 => NULL
204    , X_STATUS_CODE                 => l_status_code
205    , X_WF_STATUS_CODE              => NULL
206    , X_LATEST_EFF_PUBLISHED_FLAG   => 'N'
207    , X_CHANGE_REASON_CODE          => NULL
208    , X_RECORD_VERSION_NUMBER       => 1
209    , X_CURRENT_WORKING_FLAG        => 'N'            /* Not applicable to default financial str. bug 3301192 */
210    , X_SOURCE_OBJECT_ID            => p_dest_project_id
211    , X_SOURCE_OBJECT_TYPE          => 'PA_PROJECTS'
212     );
213 
214 
215     IF NVL( p_struc_type, 'WORKPLAN' ) = 'WORKPLAN'
216     THEN
217         PA_TASK_PUB1.Create_Schedule_Version(
218                    p_element_version_id        => x_struc_version_id
219                   ,p_scheduled_start_date      => SYSDATE
220                   ,p_scheduled_end_date        => SYSDATE
221                   ,x_pev_schedule_id         => x_pev_schedule_id
222                   ,x_return_status           => l_return_status
223                   ,x_msg_count                     => l_msg_count
224                   ,x_msg_data                      => l_msg_data
225           );
226 
227         IF l_return_status <> 'S'
228         THEN
229             PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
230                                  ,p_msg_name       => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
231             raise api_error;
232         END IF;
233     END IF;
234 
235 
236   x_return_status := FND_API.G_RET_STS_SUCCESS;
237 EXCEPTION
238 WHEN API_ERROR THEN
239   x_return_status := FND_API.G_RET_STS_ERROR;
240   rollback to create_dflt_structure;
241 WHEN OTHERS THEN
242   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
243   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
244                           p_procedure_name => 'CREATE_DEFAULT_STRUCTURE',
245                           p_error_text     => SUBSTRB(SQLERRM,1,240));
246   rollback to create_dflt_structure;
247   raise;
248 END create_default_structure;
249 
250 
251 -- API name                      : create_default_task_structure
252 -- Type                          : PL/SQL Public procedure
253 -- Pre-reqs                      : None
254 -- Return Value                  : N/A
255 -- Prameters
256 -- p_project_id            IN NUMBER
257 -- x_msg_count             OUT NUMBER
258 -- x_msg_data              OUT VARCHAR2
259 -- x_return_status         OUT VARCHAR2
260 --
261 --  History
262 --
263 --  14-DEC-01   MAansari             -Created
264 --
265 --
266 
267 PROCEDURE create_default_task_structure
268 ( p_project_id            IN NUMBER
269  ,p_struc_type            IN VARCHAR2 := 'WORKPLAN'
270  ,x_msg_count             OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
271  ,x_msg_data              OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
272  ,x_return_status         OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
273 
274 
275   CURSOR cur_pa_tasks2 IS
276    SELECT distinct top_task_id
277      FROM pa_tasks pt
278    WHERE project_id = p_project_id;
279 
280    CURSOR cur_pa_tasks( c_top_task_id NUMBER )
281    IS
282      SELECT task_id, wbs_level, parent_task_id, task_number, task_name, description, carrying_out_organization_id
283        FROM pa_tasks pt
284       WHERE project_id = p_project_id
285        START WITH task_id = c_top_task_id
286       CONNECT BY PRIOR task_id = parent_task_id;
287 
288 
289    CURSOR parent_of_previous_task( c_task_version_id NUMBER )
290    IS
291      SELECT object_id_from1
292        FROM pa_object_relationships
293       WHERE object_id_to1 = c_task_version_id
294         and object_type_from in ('PA_STRUCTURES','PA_TASKS')     -- bug 6429275
295         and object_type_to = 'PA_TASKS'
296         and relationship_type = 'S';
297 
298 
299    CURSOR cur_pa_projs
300    IS
301      SELECT 'x'
302        FROM pa_projects_all
303       WHERE split_cost_from_workplan_flag = 'Y'
304         AND project_id = p_project_id;
305 
306   CURSOR cur_pa_proj_elem_vers2( c_strcu_ver_id NUMBER )
307   IS
308     SELECT 'x'
309       FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
310      WHERE c.project_id = p_project_id
311        AND a.structure_type_id = b.structure_type_id
312        AND b.proj_element_id = c.proj_element_id
313        AND a.structure_type = 'WORKPLAN'
314        AND element_version_id = c_strcu_ver_id;
315 
316   -- xxlu added for DFF attributes for calling create_schedule_version
317   CURSOR cur_ver_sch_attr_rec(c_element_version_id IN NUMBER) IS
318     SELECT *
319     FROM pa_proj_elem_ver_schedule
320     WHERE element_version_id = c_element_version_id
321     AND project_id = p_project_id
322    ;
323   l_ver_sch_attr_rec cur_ver_sch_attr_rec%ROWTYPE;
324   -- end xxlu changes
325 
326 --hsiu added for parent_structure_id column
327   CURSOR get_structure(c_project_id NUMBER, c_struc_type VARCHAR2) IS
328     select a.proj_element_id
329       from pa_proj_elements a,
330            pa_proj_structure_types b,
331            pa_structure_types c
332      where a.project_id = c_project_id
333        and c.structure_type_class_code = c_struc_type
334        and c.structure_type_id = b.structure_type_id
335        and b.proj_element_id = a.proj_element_id;
336   l_structure_id        NUMBER;
337 
338   l_split_flag          VARCHAR2(1);
339 
340   X_ROW_ID              VARCHAR2(18);
341   x_structure_id        NUMBER;
342   x_struc_version_id    NUMBER;
343   l_status_code         VARCHAR2(150);
344   l_struc_ver_number    NUMBER;
345   l_ref_task_version_id NUMBER;
346   l_peer_or_sub         VARCHAR2(4);
347   l_return_status       VARCHAR2(1);
348   l_msg_count           NUMBER;
349   l_msg_data            VARCHAR2(2000);
350   x_task_version_id     NUMBER;
351   x_pev_schedule_id     NUMBER;
352   x_pev_structure_id    NUMBER;
353   x_error_msg           VARCHAR2(250);
354   l_old_wbs_level       NUMBER;
355   l_postfix             VARCHAR2(2) := ' ';
356 
357   API_ERROR            EXCEPTION;
358 
359   CURSOR cur_proj_elem_vers
360   IS
361     SELECT ppev.element_version_id
362       FROM pa_proj_element_versions ppev,
363            pa_proj_structure_types ppst,
364            pa_structure_types pst
365      WHERE ppev.project_id = p_project_id
366        AND ppev.object_type = 'PA_STRUCTURES'
367        AND ppev.proj_element_id = ppst.proj_element_id
368        AND pst.structure_type_id = ppst.structure_type_id
369        AND pst.structure_type = p_struc_type;
370 
371   l_proj_element_id NUMBER;
372   l_prev_top_task_ver_id  NUMBER;
373   l_dummy_char VARCHAR2(1);
374 BEGIN
375 
376     --Clear Error Messages.
377       IF FND_MSG_PUB.count_msg = 0
378       THEN
379           FND_MSG_PUB.initialize;
380       END IF;
381 
382 
383     savepoint create_dflt_task_struc;
384     if p_project_id is null then
385        PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
386                             ,p_msg_name       => 'PA_NO_PROJECT_ID');
387     end if;
388 
389 
390 l_ref_task_version_id := null;
391 
392 FOR cur_pa_tasks2_rec IN cur_pa_tasks2 LOOP
393 
394     FOR cur_pa_tasks_rec IN  cur_pa_tasks( cur_pa_tasks2_rec.top_task_id ) LOOP
395 
396 
397 
398       --The task will be created with a different ids if the structure is a WORKPLAN and split from COSTING.
399       --Otherwise same ids as in pa_tasks will be used to create tasks in pa_proj_elements if only one default
400       --structure is being created.
401       l_split_flag := null;
402       OPEN cur_pa_projs;
403       FETCH cur_pa_projs INTO l_split_flag;
404       CLOSE cur_pa_projs;
405 
406       --For each project create 1 task
407       IF p_struc_type = 'WORKPLAN' AND l_split_flag IS NOT NULL
408       THEN
409           --l_proj_element_id := null;
410           SELECT pa_tasks_s.nextval INTO l_proj_element_id
411             FROM sys.dual;
412           l_postfix := '-'||SUBSTR( p_struc_type, 1, 1 );
413 --hsiu added for parent_structure_id column
414           OPEN get_structure(p_project_id, 'WORKPLAN');
415           FETCH get_structure into l_structure_id;
416           CLOSE get_structure;
417       ELSE
418 --hsiu added for parent_structure_id column
419           l_proj_element_id := cur_pa_tasks_rec.task_id;
420           OPEN get_structure(p_project_id, 'FINANCIAL');
421           FETCH get_structure into l_structure_id;
422           CLOSE get_structure;
423       END IF;
424       PA_PROJ_ELEMENTS_PKG.Insert_Row(
425                  X_ROW_ID                             => X_ROW_ID
426                 ,X_PROJ_ELEMENT_ID                    => l_proj_element_id
427                 ,X_PROJECT_ID                         => p_project_id
428                 ,X_OBJECT_TYPE                       => 'PA_TASKS'
429                 ,X_ELEMENT_NUMBER                     => cur_pa_tasks_rec.task_number||l_postfix
430                 ,X_NAME                               => cur_pa_tasks_rec.task_name
431                 ,X_DESCRIPTION                       => cur_pa_tasks_rec.description
432                 ,X_STATUS_CODE                       => '124'          --- NOT_STARTED  -- 124 bug 2826235
433                 ,X_WF_STATUS_CODE                     => null
434                 ,X_PM_PRODUCT_CODE                    => null
435                 ,X_PM_TASK_REFERENCE                  => null
436                 ,X_CLOSED_DATE                       => null
437                 ,X_LOCATION_ID                       => null
438                 ,X_MANAGER_PERSON_ID                => null
439                 ,X_CARRYING_OUT_ORGANIZATION_ID       => cur_pa_tasks_rec.carrying_out_organization_id
440                 ,X_TYPE_ID                            => 1
441                 ,X_PRIORITY_CODE                     => null
442                 ,X_INC_PROJ_PROGRESS_FLAG             => 'N'
443                 ,X_REQUEST_ID                         => null
444                 ,X_PROGRAM_APPLICATION_ID             => null
445                 ,X_PROGRAM_ID                         => null
446                 ,X_PROGRAM_UPDATE_DATE              => null
447                 ,X_LINK_TASK_FLAG                     => 'N'
448                 ,X_ATTRIBUTE_CATEGORY               => null
449                 ,X_ATTRIBUTE1                         => null
450                 ,X_ATTRIBUTE2                         => null
451                 ,X_ATTRIBUTE3                         => null
452                 ,X_ATTRIBUTE4                         => null
453                 ,X_ATTRIBUTE5                         => null
454                 ,X_ATTRIBUTE6                         => null
455                 ,X_ATTRIBUTE7                         => null
456                 ,X_ATTRIBUTE8                         => null
457                 ,X_ATTRIBUTE9                         => null
458                 ,X_ATTRIBUTE10                       => null
459                 ,X_ATTRIBUTE11                       => null
460                 ,X_ATTRIBUTE12                       => null
461                 ,X_ATTRIBUTE13                       => null
462                 ,X_ATTRIBUTE14                       => null
463                 ,X_ATTRIBUTE15                       => null
464                 ,X_TASK_WEIGHTING_DERIV_CODE       => NULl
465                 ,X_WORK_ITEM_CODE                  => NULL
466                 ,X_UOM_CODE                        => NULL
467                 ,X_WQ_ACTUAL_ENTRY_CODE            => NULL
468                 ,X_TASK_PROGRESS_ENTRY_PAGE_ID => NULL
469                 ,X_PARENT_STRUCTURE_ID         => l_structure_id
470                 ,X_PHASE_CODE                  => NULL
471                 ,X_PHASE_VERSION_ID            => NULL
472                 ,X_SOURCE_OBJECT_ID            => p_project_id
473               ,X_SOURCE_OBJECT_TYPE          => 'PA_PROJECTS'
474              );
475 
476 
477              IF cur_pa_tasks%ROWCOUNT = 1
478              THEN
479 
480                  IF cur_pa_tasks2%ROWCOUNT = 1
481                  THEN
482                      OPEN cur_proj_elem_vers;
483                      FETCH cur_proj_elem_vers INTO x_struc_version_id;
484                      CLOSE cur_proj_elem_vers;
485 
486                      l_ref_task_version_id := x_struc_version_id;
487                      l_peer_or_sub         := 'SUB';
488                  ELSE
489                      l_ref_task_version_id := l_prev_top_task_ver_id;
490                      l_peer_or_sub         := 'PEER';
491                  END IF;
492              ELSE
493                  IF cur_pa_tasks_rec.wbs_level > l_old_wbs_level
494                  THEN
495                      l_peer_or_sub         := 'SUB';
496                  ELSIF cur_pa_tasks_rec.wbs_level = l_old_wbs_level
497                  THEN
498                      l_peer_or_sub         := 'PEER';
499                  ELSE
500                      OPEN parent_of_previous_task( l_ref_task_version_id );
501                      FETCH parent_of_previous_task INTO l_ref_task_version_id;
502                      CLOSE parent_of_previous_task;
503                      l_peer_or_sub         := 'PEER';
504                  END IF;
505              END IF;
506 
507               PA_TASK_PVT1.Create_Task_Version(
508                    p_ref_task_version_id     => l_ref_task_version_id
509                   ,p_peer_or_sub         => l_peer_or_sub
510                   ,p_task_id              => l_proj_element_id
511                   ,p_WEIGHTING_PERCENTAGE  => 100
512                   ,p_task_unpub_ver_status_code => 'WORKING'
513                   ,x_task_version_id      => x_task_version_id
514                   ,x_return_status        => l_return_status
515                   ,x_msg_count           => l_msg_count
516                   ,x_msg_data             => l_msg_data
517                 );
518 
519              IF cur_pa_tasks%ROWCOUNT = 1
520              THEN
521                 l_prev_top_task_ver_id := x_task_version_id;
522              END IF;
523 
524               IF l_return_status <> 'S'
525               THEN
526                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
527                                        ,p_msg_name       => 'PA_PS_NO_TASK_VER_CREATED');
528                   raise api_error;
529               END IF;
530 
531               l_ref_task_version_id := x_task_version_id;
532               l_old_wbs_level := cur_pa_tasks_rec.wbs_level;
533 
534 --            IF p_struc_type = 'WORKPLAN'
535 
536             --if it is a workplan structure.
537             OPEN cur_pa_proj_elem_vers2( x_struc_version_id );
538             FETCH cur_pa_proj_elem_vers2 INTO l_dummy_char;
539             IF cur_pa_proj_elem_vers2%FOUND
540             THEN
541               -- xxlu added DFF attributes
542               OPEN cur_ver_sch_attr_rec(x_task_version_id);
543               FETCH cur_ver_sch_attr_rec INTO l_ver_sch_attr_rec;
544               CLOSE cur_ver_sch_attr_rec;
545 
546                PA_TASK_PUB1.Create_Schedule_Version(
547                       p_element_version_id     => x_task_version_id
548                      ,p_scheduled_start_date   => SYSDATE
549                      ,p_scheduled_end_date     => SYSDATE
550                      ,p_attribute_category        => l_ver_sch_attr_rec.attribute_category
551                      ,p_attribute1              => l_ver_sch_attr_rec.attribute1
552                      ,p_attribute2              => l_ver_sch_attr_rec.attribute2
553                      ,p_attribute3              => l_ver_sch_attr_rec.attribute3
554                      ,p_attribute4              => l_ver_sch_attr_rec.attribute4
555                      ,p_attribute5              => l_ver_sch_attr_rec.attribute5
556                      ,p_attribute6              => l_ver_sch_attr_rec.attribute6
557                      ,p_attribute7              => l_ver_sch_attr_rec.attribute7
558                      ,p_attribute8              => l_ver_sch_attr_rec.attribute8
559                      ,p_attribute9              => l_ver_sch_attr_rec.attribute9
560                      ,p_attribute10                => l_ver_sch_attr_rec.attribute10
561                      ,p_attribute11                => l_ver_sch_attr_rec.attribute11
562                      ,p_attribute12                => l_ver_sch_attr_rec.attribute12
563                      ,p_attribute13                => l_ver_sch_attr_rec.attribute13
564                      ,p_attribute14                => l_ver_sch_attr_rec.attribute14
565                      ,p_attribute15                => l_ver_sch_attr_rec.attribute15
566                      ,x_pev_schedule_id         => x_pev_schedule_id
567                      ,x_return_status           => l_return_status
568                      ,x_msg_count                => l_msg_count
569                      ,x_msg_data                 => l_msg_data
570                  );
571                -- end xxlu changes
572 
573               IF l_return_status <> 'S'
574               THEN
575                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
576                                        ,p_msg_name       => 'PA_PS_NO_TASK_SCH_VER_CREATED');
577                   raise api_error;
578               END IF;
579             END IF;
580             CLOSE cur_pa_proj_elem_vers2;
581     END LOOP;  --task loop end.
582 END LOOP;
583 
584   x_return_status := FND_API.G_RET_STS_SUCCESS;
585 EXCEPTION
586 WHEN API_ERROR THEN
587   x_return_status := FND_API.G_RET_STS_ERROR;
588   rollback to create_dflt_task_struc;
589 WHEN OTHERS THEN
590   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
591   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
592                           p_procedure_name => 'CREATE_DEFAULT_TASK_STRUCTURE',
593                           p_error_text     => SUBSTRB(SQLERRM,1,240));
594   rollback to create_dflt_task_struc;
595   raise;
596 END create_default_task_structure;
597 
598 
599 -- API name                      : create_task_structure
600 -- Type                          : PL/sql Public procedure
601 -- Pre-reqs                      : None
602 -- Return Value                  : N/A
603 -- Prameters
604 -- p_project_id            IN NUMBER
605 -- x_msg_count             OUT NUMBER
606 -- x_msg_data              OUT VARCHAR2
607 -- x_return_status         OUT VARCHAR2
608 --
609 --  History
610 --
611 --  14-DEC-01   MAansari             -Created
612 --
613 --  Notes: This api is called from form PAXPREPR.fmb ON-INSERT of tasks block.
614 --         The call is in PA_TASKS_PKG.ON_INSERT API.
615 
616 PROCEDURE create_task_structure(
617    p_calling_module         IN VARCHAR2 := 'FORMS'
618   ,p_project_id           IN NUMBER
619   ,p_task_id              IN NUMBER
620   ,p_parent_task_id       IN NUMBER
621   ,p_ref_task_id          IN NUMBER   := -9999
622   ,p_task_number          IN VARCHAR2
623   ,p_task_name            IN VARCHAR2
624   ,p_task_description     IN VARCHAR2
625   ,p_carrying_out_organization_id IN NUMBER
626   ,p_structure_type       IN VARCHAR2 := 'FINANCIAL'
627   ,p_actual_start_date                  IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
628   ,p_actual_finish_date                 IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
629   ,p_early_start_date                   IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
630   ,p_early_finish_date                  IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
631   ,p_late_start_date                    IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
632   ,p_late_finish_date                   IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
633   ,p_scheduled_start_date               IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
634   ,p_scheduled_finish_date              IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
635   ,P_OBLIGATION_START_DATE              IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
636   ,P_OBLIGATION_FINISH_DATE             IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
637   ,P_ESTIMATED_START_DATE               IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
638   ,P_ESTIMATED_FINISH_DATE              IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
639   ,P_BASELINE_START_DATE                IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
640   ,P_BASELINE_FINISH_DATE               IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
641   ,P_CLOSED_DATE                        IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
642   ,P_WQ_UOM_CODE                        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
643   ,P_WQ_ITEM_CODE                       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
644   ,P_STATUS_CODE                        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
645   ,P_WF_STATUS_CODE                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
646   ,P_PM_SOURCE_CODE                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
647   ,P_PRIORITY_CODE                      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
648   ,P_MILESTONE_FLAG                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
649   ,P_CRITICAL_FLAG                      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
650   ,P_INC_PROJ_PROGRESS_FLAG             IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
651   ,P_LINK_TASK_FLAG                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
652   ,P_CALENDAR_ID                        IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
653   ,P_PLANNED_EFFORT                     IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
654   ,P_DURATION                           IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
655   ,P_PLANNED_WORK_QUANTITY              IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
656   ,P_TASK_TYPE                          IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
657   ,P_PM_SOURCE_reference                IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
658   ,p_location_id                        IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
659   ,p_manager_person_id                  IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
660   ,p_structure_version_id               IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
661   ,p_parent_structure_id                IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
662   ,p_phase_version_id                   IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
663   ,P_PHASE_CODE                         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
664   ,p_create_task_version_only           IN VARCHAR2 := 'N'
665   ,p_financial_task_flag                IN VARCHAR2 := 'Y'   --bug 3301192
666 
667   -- (begin venkat) new params for bug #3450684 ----------------------------------------------
668   ,p_ext_act_duration            IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
669   ,p_ext_remain_duration         IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
670   ,p_ext_sch_duration            IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
671   -- (end venkat) new params for bug #3450684 -------------------------------------------------
672 
673   -- (begin) add new params bug - 3654243 -----
674   ,p_base_percent_comp_deriv_code   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
675   ,p_sch_tool_tsk_type_code     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
676   ,p_constraint_type_code       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
677   ,p_constraint_date            IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
678   ,p_free_slack             IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
679   ,p_total_slack            IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
680   ,p_effort_driven_flag         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
681   ,p_level_assignments_flag     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
682   ,p_invoice_method         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
683   ,p_customer_id            IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
684   ,p_gen_etc_source_code        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
685   -- (end) add new params bug - 3654243 -----
686 
687   --Bug 6153503
688   ,p_validate_dff                  IN VARCHAR2 := 'N'
689   ,p_attribute_category            IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
690   ,p_attribute1                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
691   ,p_attribute2                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
692   ,p_attribute3                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
693   ,p_attribute4                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
694   ,p_attribute5                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
695   ,p_attribute6                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
696   ,p_attribute7                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
697   ,p_attribute8                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
698   ,p_attribute9                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
699   ,p_attribute10                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
700   ,p_attribute11                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
701   ,p_attribute12                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
702   ,p_attribute13                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
703   ,p_attribute14                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
704   ,p_attribute15                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
705    --Bug 6153503
706 
707   ,x_task_version_id                    OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
708   ,x_task_id                            OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
709   ,x_msg_count                          OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
710   ,x_msg_data             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
711   ,x_return_status        OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
712 
713   X_ROW_ID              VARCHAR2(18);
714   x_structure_id        NUMBER;
715   x_struc_version_id    NUMBER;
716   l_status_code         VARCHAR2(150);
717   l_struc_ver_number    NUMBER;
718   l_ref_task_version_id NUMBER;
719   l_peer_or_sub         VARCHAR2(4);
720   l_return_status       VARCHAR2(1);
721   l_msg_count           NUMBER;
722   l_msg_data            VARCHAR2(2000);
723   l_task_version_id     NUMBER;
724   x_pev_schedule_id     NUMBER;
725   x_pev_structure_id    NUMBER;
726   x_error_msg           VARCHAR2(250);
727   l_old_wbs_level       NUMBER;
728   API_ERROR            EXCEPTION;
729   l_task_id            NUMBER;
730   l_dummy_char         VARCHAR2(1);
731   l_task_number        VARCHAR2(100);
732 
733   -- <Bug#2843596>
734   l_sharing_enabled VARCHAR(1);
735 
736 --hsiu: bug 2691868
737   l_scheduled_start_date DATE;
738   l_scheduled_finish_date DATE;
739 
740 --hsiu added for task version status
741   CURSOR cur_proj_is_template
742   IS     select 'Y'
743            from pa_projects_all
744           where project_id = p_project_id
745             and template_flag = 'Y';
746   l_template_flag VARCHAR2(1);
747   l_task_unpub_ver_status_code PA_PROJ_ELEMENT_VERSIONS.task_unpub_ver_status_code%TYPE;
748   l_parent_struc_ver_id NUMBER;
749 
750 --end changes
751 
752   CURSOR cur_proj_elem_vers( c_structure_version_id NUMBER )
753   IS
754        SELECT element_version_id
755          FROM pa_proj_element_versions
756         WHERE project_id = p_project_id
757           AND object_type = 'PA_TASKS'
758           AND parent_structure_version_id = c_structure_version_id
759           AND ( ( proj_element_id = ( select top_task_id
760                                         from pa_tasks
761                                        where task_id = p_ref_task_id ) AND p_structure_type = 'FINANCIAL' )
762                 --OR ( proj_element_id = p_ref_task_id AND p_structure_type = 'WORKPLAN' )
763                )
764         --bug  2852891
765          UNION
766        SELECT element_version_id
767          FROM pa_proj_element_versions
768         WHERE project_id = p_project_id
769           AND object_type = 'PA_TASKS'
770           AND parent_structure_version_id = c_structure_version_id
771           AND p_structure_type = 'WORKPLAN'
772           AND display_sequence = ( SELECT max( display_sequence )
773                                      FROM pa_proj_element_versions
774                                     WHERE project_id = p_project_id
775                                       AND object_type = 'PA_TASKS'
776                                       AND parent_structure_version_id = c_structure_version_id
777                                       AND wbs_level = 1    --Since there is no parent task id passed therefore its always created as top task
778                                       AND display_sequence <= ( SELECT display_sequence
779                                                                  FROM pa_proj_element_versions
780                                                                 WHERE project_id = p_project_id
781                                                                   AND object_type = 'PA_TASKS'
782                                                                   AND parent_structure_version_id = c_structure_version_id
783                                                                   AND proj_element_id = p_ref_task_id )
784                                    )
785         --bug  2852891
786 ;
787 
788   CURSOR cur_ref_task_ver_id( c_structure_version_id NUMBER )
789   IS
790        SELECT element_version_id
791          FROM pa_proj_element_versions
792         WHERE project_id = p_project_id
793           AND object_type = 'PA_TASKS'
794           AND parent_structure_version_id = c_structure_version_id
795           AND proj_element_id = p_ref_task_id
796           ;
797 
798 --AMG bug
799   CURSOR cur_ref_task_ver_id2( c_structure_version_id NUMBER, c_parent_task_version_id NUMBER )
800   IS
801        SELECT element_version_id
802          FROM pa_proj_element_versions
803         WHERE project_id = p_project_id
804           AND object_type = 'PA_TASKS'
805           AND parent_structure_version_id = c_structure_version_id
806           and element_version_id in ( SELECT object_id_to1
807                                         FROM pa_object_relationships
808                                        WHERE object_id_from1 = c_parent_task_version_id
809                                          and relationship_type = 'S'
810                                          )
811           AND display_sequence = ( SELECT max( display_sequence )
812                                      FROM pa_proj_element_versions
813                                     WHERE project_id = p_project_id
814                                       AND object_type = 'PA_TASKS'
815                                       AND parent_structure_version_id = c_structure_version_id
816                                       and element_version_id in ( SELECT object_id_to1
817                                                                     FROM pa_object_relationships
818                                                                     WHERE object_id_from1 = c_parent_task_version_id
819                                                                     and relationship_type = 'S'
820                                                                  )
821                                  );
822 
823 l_parent_task_version_id   NUMBER;
824 --AMG bug
825 
826     CURSOR cur_pa_proj_elem_vers2( c_task_version_id NUMBER )
827   IS
828     SELECT 'x'
829       FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
830      WHERE c.project_id = p_project_id
831        AND a.structure_type_id = b.structure_type_id
832        AND b.proj_element_id = c.proj_element_id
833        AND a.structure_type = 'WORKPLAN'
834        AND element_version_id = ( SELECT parent_structure_version_id
835                                    FROM  pa_proj_element_versions
836                                    WHERE element_version_id = c_task_version_id );
837 
838 
839        --The above sql will return the element_version id that will be served as a
840        --reference task version to create task version for p_task_id.
841 
842   CURSOR cur_proj_elem_vers2( c_structure_version_id NUMBER, c_task_id NUMBER )
843   IS
844     SELECT element_version_id
845       FROM pa_proj_element_versions
846      WHERE project_id = p_project_id
847        AND proj_element_id = c_task_id
848        AND parent_structure_version_id = c_structure_version_id
849        AND object_type = 'PA_TASKS';
850 
851   CURSOR cur_child_exists(c_task_ver_id NUMBER)
852   IS
853     select 'Y'
854       FROM pa_object_relationships
855      where object_id_from1 = c_task_ver_id
856        AND object_type_from IN ('PA_TASKS', 'PA_STRUCTURES') --Corrected 'PA_TASK' TO 'PA_TASKS' for Bug 4035526
857        and relationship_type = 'S';
858   l_child_exists  VARCHAR2(1);
859 
860   -- xxlu added for DFF attributes for calling create_schedule_version
861   CURSOR cur_ver_sch_attr_rec(c_element_version_id IN NUMBER) IS
862     SELECT *
863     FROM pa_proj_elem_ver_schedule
864     WHERE element_version_id = c_element_version_id
865       and project_id = p_project_id
866     ;
867   l_ver_sch_attr_rec cur_ver_sch_attr_rec%ROWTYPE;
868   -- end xxlu changes
869 
870          --Adding the following cursor to avoid create_task_structure call if
871          --execute_update_project is called from import or publish apis.
872   CURSOR cur_pa_temp_import
873   IS
874     SELECT 'X' from PA_TEMP_IMPORT_TASKS
875      WHERE project_id = p_project_id;
876 
877 /* Bug 2680486 -- Performance changes -- Added d.project_id= c.project_id
878                   join in the following cursor*/
879 
880    CURSOR cur_struc_ver_fin
881    IS
882      SELECT c.element_version_id
883        FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
884             ,pa_proj_elem_ver_structure d
885       WHERE c.project_id = p_project_id
886         AND a.structure_type_id = b.structure_type_id
887         AND b.proj_element_id = c.proj_element_id
888         AND a.structure_type = p_structure_type
889      AND d.project_id = c.project_id
890         AND d.element_version_id = c.element_version_id
891         AND d.status_code = 'STRUCTURE_PUBLISHED'
892         AND d.latest_eff_published_flag = 'Y'
893         ;
894 
895 /* Bug 2680486 -- Performance changes -- Added d.project_id= c.project_id
896                   join in the following cursor*/
897 
898    CURSOR cur_struc_ver_wp
899    IS
900      SELECT c.element_version_id
901        FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
902             ,pa_proj_elem_ver_structure d
903       WHERE c.project_id = p_project_id
904         AND a.structure_type_id = b.structure_type_id
905         AND b.proj_element_id = c.proj_element_id
906         AND a.structure_type = p_structure_type
907      AND d.project_id = c.project_id
908         AND d.element_version_id = c.element_version_id
909         AND d.status_code = 'STRUCTURE_WORKING'
910         ;
911 
912 --hsiu added for parent_structure_id column
913   CURSOR get_structure(c_project_id NUMBER, c_struc_type VARCHAR2) IS
914     select a.proj_element_id
915       from pa_proj_elements a,
916            pa_proj_structure_types b,
917            pa_structure_types c
918      where a.project_id = c_project_id
919        and c.structure_type_class_code = c_struc_type
920        and c.structure_type_id = b.structure_type_id
921        and b.proj_element_id = a.proj_element_id;
922   l_structure_id        NUMBER;
923   l_weighting           NUMBER(17,2);
924 
925 
926 --hsiu added for task status
927   CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
928     select object_id_from1
929       from pa_object_relationships
930      where object_id_to1 = c_elem_ver_id
931        and object_type_to = 'PA_TASKS'
932        and relationship_type = 'S';
933   l_parent_ver_id NUMBER;
934   l_error_msg_code VARCHAR2(255);
935   l_structure_version_id  NUMBER;
936 
937    --proj conn
938    CURSOR c1( c_element_version_id NUMBER )
939    IS
940       SELECT wbs_level
941         FROM pa_proj_element_versions
942        WHERE element_version_id = c_element_version_id;
943 
944    CURSOR c2( c_structure_version_id NUMBER, c_element_version_id NUMBER, c_wbs_level NUMBER )
945    IS
946       SELECT element_version_id
947         FROM pa_proj_element_versions
948        WHERE display_sequence = ( SELECT max( display_sequence) from pa_proj_element_versions
949                                    WHERE parent_structure_version_id = c_structure_version_id
950                                      AND display_sequence < ( SELECT display_sequence from pa_proj_element_versions
951                                                                WHERE element_version_id = c_element_version_id )
952                                      AND wbs_level = c_wbs_level )
953          AND parent_structure_version_id = c_structure_version_id;
954     l_wbs_level    NUMBER;
955 
956    CURSOR cur_proj_wrk_attr
957    IS
958      select AUTO_PUB_UPON_CREATION_FLAG
959      from   pa_proj_workplan_attr
960     where project_id = p_project_id;
961     l_auto_pub_flag    VARCHAR2(1);
962    --proj conn
963 --bug 2736392
964   l_str_status_code            VARCHAR2(150);
965 --bug 2736392
966   l_init_msg_list              VARCHAR2(1);
967 
968   /* Bug 2736392 Begin */
969      CURSOR cur_struc_ver_wp2
970    IS
971      SELECT c.element_version_id
972        FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
973             ,pa_proj_elem_ver_structure d
974       WHERE c.project_id = p_project_id
975         AND a.structure_type_id = b.structure_type_id
976         AND b.proj_element_id = c.proj_element_id
977         AND a.structure_type = p_structure_type
978      AND d.project_id = c.project_id
979         AND d.element_version_id = c.element_version_id
980         AND (d.status_code = 'STRUCTURE_SUBMITTED' OR d.status_code='STRUCTURE_REJECTED' OR d.status_code= 'STRUCTURE_APPROVED')
981         ;
982 l_dummy_num number;
983 /* Bug 2736392 End */
984 
985   l_tasks_out     pa_project_pub.task_out_tbl_type ;     --dummy variables.  --bug 2732895
986 
987 --bug 2824612
988   l_wq_planned_quantity     NUMBER;
989   l_task_type_id            NUMBER;
990 --bug 2824612
991 
992   l_workplan_enabled        VARCHAR2(1);
993 
994 --3035902: process update flag changes
995   cursor get_task_type_id(c_proj_element_id NUMBER) IS
996       select type_id
997         from pa_proj_elements
998        where proj_element_id = c_proj_element_id;
999 --3035902: end process update flag changes
1000 
1001 l_versioned                VARCHAR2(1);
1002 l_shared                   VARCHAR2(1);
1003 l_published_ver_exists     VARCHAR2(1);
1004 
1005 /* Bug # 3420093 - Adding Progress Management modifications to create_task flow. */
1006 
1007     l_add_task_ver_ids      PA_NUM_1000_NUM := PA_NUM_1000_NUM();
1008     l_add_planned_effort    PA_NUM_1000_NUM := PA_NUM_1000_NUM();
1009     l_add_start_date    PA_DATE_1000_DATE := PA_DATE_1000_DATE();
1010     l_add_end_date          PA_DATE_1000_DATE := PA_DATE_1000_DATE();
1011 
1012         l_del_task_ver_ids      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1013 
1014 /* Bug # 3420093 - Adding Progress Management modifications to create_task flow. */
1015 
1016 --Bug 6153503
1017 l_attribute_category          VARCHAR2(30);
1018 l_attribute1                  VARCHAR2(150);
1019 l_attribute2                  VARCHAR2(150);
1020 l_attribute3                  VARCHAR2(150);
1021 l_attribute4                  VARCHAR2(150);
1022 l_attribute5                  VARCHAR2(150);
1023 l_attribute6                  VARCHAR2(150);
1024 l_attribute7                  VARCHAR2(150);
1025 l_attribute8                  VARCHAR2(150);
1026 l_attribute9                  VARCHAR2(150);
1027 l_attribute10                 VARCHAR2(150);
1028 l_attribute11                 VARCHAR2(150);
1029 l_attribute12                 VARCHAR2(150);
1030 l_attribute13                 VARCHAR2(150);
1031 l_attribute14                 VARCHAR2(150);
1032 l_attribute15                 VARCHAR2(150);
1033 l_return_msg                  varchar2(2000);
1034 l_validate_status             varchar2(1);
1035 
1036 BEGIN
1037 
1038    --Clear Error Messages.
1039       IF FND_MSG_PUB.count_msg = 0
1040       THEN
1041           FND_MSG_PUB.initialize;
1042       END IF;
1043 
1044    SAVEPOINT create_task_struc;
1045 
1046    OPEN cur_proj_is_template;
1047    FETCH cur_proj_is_template into l_template_flag;
1048    IF cur_proj_is_template%NOTFOUND THEN
1049      l_template_flag := 'N';
1050    END IF;
1051    CLOSE cur_proj_is_template;
1052 
1053    OPEN cur_pa_temp_import;
1054    FETCH cur_pa_temp_import INTO l_dummy_char;
1055    IF cur_pa_temp_import%NOTFOUND
1056    THEN
1057 
1058        l_versioned               := PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id);
1059        l_shared                  := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id);
1060 
1061        IF p_task_id IS NOT NULL AND p_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1062        THEN
1063            l_task_id := p_task_id;
1064        ELSE
1065            l_task_id := null;
1066        END IF;
1067 
1068        IF p_structure_type = 'WORKPLAN'
1069        THEN
1070           --The following logic found in add_task_round_one api
1071           IF p_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_task_number IS NULL
1072           THEN
1073              l_task_number := P_PM_SOURCE_reference;
1074           ELSE
1075              l_task_number := p_task_number;
1076           END IF;
1077           --Get workplan structure id
1078 
1079           -- <Bug#2843596>
1080           -- only retrieve cached value if projectId matches
1081           -- and the cached workplan struct id is not null
1082           IF (nvl(g_project_id,-99) = p_project_id and g_workplan_struct_id IS NOT NULL) THEN
1083              l_structure_id := g_workplan_struct_id;
1084           ELSE
1085              OPEN get_structure(p_project_id, 'WORKPLAN');
1086              FETCH get_structure into l_structure_id;
1087              CLOSE get_structure;
1088              g_project_id      := p_project_id;
1089              g_workplan_struct_id := l_structure_id;
1090           END IF;
1091           -- </Bug#2843596>
1092 
1093           IF p_structure_version_id IS NULL OR
1094              p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1095           THEN
1096               --proj conn
1097               --If auto publish upon creation is on and versioning is enabled then
1098               --update the workplan structure as working bcoz it is created as pub by copy structure.
1099               OPEN  cur_proj_wrk_attr;
1100               FETCH cur_proj_wrk_attr INTO l_auto_pub_flag ;
1101               CLOSE cur_proj_wrk_attr;
1102               IF NVL( l_auto_pub_flag,'N' ) = 'Y' AND
1103                  NVL( IS_WP_VERSIONING_ENABLED(p_project_id), 'N' ) = 'Y'
1104               THEN
1105                  UPDATE pa_proj_elem_ver_structure
1106                     set status_code = 'STRUCTURE_WORKING'
1107                   where project_id = p_project_id
1108                     and proj_element_id = l_structure_id;
1109               END IF;
1110               --proj conn
1111               OPEN cur_struc_ver_wp;
1112               FETCH cur_struc_ver_wp INTO l_structure_version_id;
1113               CLOSE cur_struc_ver_wp;
1114               IF l_structure_version_id IS NULL   /* If auto publish upon creation is on then
1115                                                      l_structure_version_id will be null */
1116               THEN
1117                   DECLARE
1118 
1119             /* Bug 2680486 -- Performance changes -- Added d.project_id= c.project_id
1120                   join in the following cursor*/
1121 
1122                      CURSOR c1 is
1123                      SELECT c.element_version_id
1124                        FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
1125                             ,pa_proj_elem_ver_structure d
1126                       WHERE c.project_id = p_project_id
1127                         AND a.structure_type_id = b.structure_type_id
1128                         AND b.proj_element_id = c.proj_element_id
1129                         AND a.structure_type = p_structure_type
1130                AND d.project_id = c.project_id
1131                         AND d.element_version_id = c.element_version_id
1132                         AND d.status_code = 'STRUCTURE_PUBLISHED'
1133                                           ;
1134                  begin
1135                      OPEN C1;
1136                      FETCH C1 into l_structure_version_id;
1137                      CLOSE C1;
1138                  end;
1139               END IF;
1140           ELSE
1141               l_structure_version_id := p_structure_version_id;
1142           END IF;
1143        ELSE
1144           l_task_number := p_task_number;
1145           --Get financial structure id
1146           -- <Bug#2843596>
1147           -- only retrieve cached value if projectId matches
1148           -- and the cached financial struct id is not null
1149           IF (nvl(g_project_id,-99) = p_project_id and g_financial_struct_id IS NOT NULL) THEN
1150              l_structure_id := g_financial_struct_id;
1151           ELSE
1152              OPEN get_structure(p_project_id, 'FINANCIAL');
1153              FETCH get_structure into l_structure_id;
1154              CLOSE get_structure;
1155              g_project_id      := p_project_id;
1156              g_financial_struct_id := l_structure_id;
1157           END IF;
1158           -- </Bug#2843596>
1159 
1160           IF p_structure_version_id IS NULL OR
1161              p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1162           THEN
1163               IF l_template_flag = 'N'
1164               THEN
1165 
1166                  /*IF p_calling_module = 'FORMS'   --get the published version bcoz forms cannot add to working version
1167                                         --This is true only if there are any published version.
1168                  THEN
1169                      --get structure version if its a top task
1170                       OPEN cur_struc_ver_fin;
1171                       FETCH cur_struc_ver_fin INTO l_structure_version_id;
1172                       CLOSE cur_struc_ver_fin;
1173                  ELSE    should not stop adding tasks to a WORKING version if there is no PUBLISHED version bug 2777656
1174                  */
1175                       --get structure version if its a top task
1176                       OPEN cur_struc_ver_wp;
1177                       FETCH cur_struc_ver_wp INTO l_structure_version_id;
1178                       CLOSE cur_struc_ver_wp;
1179                       IF l_structure_version_id IS NULL  --if versioning is diabled then get the published version
1180                       THEN
1181                           OPEN cur_struc_ver_fin;
1182                           FETCH cur_struc_ver_fin INTO l_structure_version_id;
1183                           CLOSE cur_struc_ver_fin;
1184                       END IF;
1185                  --END IF;
1186               ELSE
1187                  --get structure version if its a top task
1188                  OPEN cur_struc_ver_wp;
1189                  FETCH cur_struc_ver_wp INTO l_structure_version_id;
1190                  CLOSE cur_struc_ver_wp;
1191               END IF;
1192           ELSE
1193               l_structure_version_id := p_structure_version_id;
1194           END IF;
1195        END IF;
1196 
1197 
1198       /*** Commented for Bug 2736392 -- Added new code below
1199            This code will never do the intended task because p_structure_version_id and l_structure_version_id
1200            will be null in this case. If a structure version is in approved, submitted or rejected state, then it
1201            will never be returned from cursor cur_struc_ver_wp, so how can we get the status of a null struc ver.
1202 
1203           IF p_structure_version_id IS NOT NULL AND
1204              p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1205           THEN
1206               --Validate the incoming structure version id
1207 
1208               PA_PROJECT_STRUCTURE_UTILS.Structure_Version_Name_Or_Id(
1209                       p_structure_id                     => null
1210                      ,p_structure_version_name           => null
1211                      ,p_structure_version_id             => p_structure_version_id
1212                      ,p_check_id_flag                    => 'Y'
1213                      ,x_structure_version_id             => l_structure_version_id
1214                      ,x_return_status                    => l_return_status
1215                      ,x_error_message_code               => l_msg_data
1216                  );
1217               IF l_return_status <> 'S'
1218               THEN
1219                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1220                                 ,p_msg_name       => l_msg_data );
1221                   raise api_error;
1222               END IF;
1223 
1224            --bug 2736392
1225               l_str_status_code := PA_PROJECT_STRUCTURE_UTILS.get_structrue_version_status
1226                            ( p_project_id                => p_project_id
1227                              ,p_structure_version_id      => p_structure_version_id );
1228               IF l_str_status_code IS NULL
1229               THEN
1230                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1231                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID' );
1232                   raise api_error;
1233               ELSIF l_str_status_code in ( 'STRUCTURE_SUBMITTED', 'STRUCTURE_REJECTED', 'STRUCTURE_APPROVED' )
1234               THEN
1235                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1236                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID2' );
1237                   raise api_error;
1238               END IF;
1239               --bug 2736392
1240 
1241           END IF;
1242      ***/
1243 
1244      /* New Code Begin for Bug 2736392 -- Commnted the above code*/
1245 
1246        IF p_structure_version_id IS NOT NULL AND p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1247           THEN
1248               l_str_status_code := PA_PROJECT_STRUCTURE_UTILS.get_structrue_version_status
1249                            ( p_project_id                => p_project_id
1250                              ,p_structure_version_id      => p_structure_version_id );
1251               IF l_str_status_code IS NULL
1252               THEN
1253                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1254                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID' );
1255                   raise api_error;
1256               ELSIF l_str_status_code in ( 'STRUCTURE_SUBMITTED', 'STRUCTURE_REJECTED', 'STRUCTURE_APPROVED' )
1257               THEN
1258                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1259                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID2' );
1260                   raise api_error;
1261               END IF;
1262        ELSIF l_structure_version_id IS  NULL
1263           THEN
1264                  OPEN cur_struc_ver_wp2;
1265                  FETCH cur_struc_ver_wp2 INTO l_dummy_num;
1266                  CLOSE cur_struc_ver_wp2;
1267 
1268            IF l_dummy_num is NOT NULL THEN
1269                        PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1270                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID2' );
1271                     raise api_error;
1272            ELSE
1273                         PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1274                                       ,p_msg_name       => 'PA_PS_INV_STR_VER_ID' );
1275                        raise api_error;
1276            END IF;
1277           END IF;
1278 
1279       /* New Code End for Bug 2736392 */
1280 
1281 ---The following code is added to prevent message list re-initialization if there are any messages already on stack.
1282         IF p_calling_module = 'AMG' AND FND_MSG_PUB.count_msg > 0
1283         THEN
1284             l_init_msg_list := 'F';
1285         ELSE
1286             l_init_msg_list := 'T';
1287         END IF;
1288 
1289        IF p_create_task_version_only = 'N'
1290        THEN
1291 
1292            --For each project create 1 task
1293            PA_TASK_PUB1.create_task(
1294                p_calling_module          => p_calling_module
1295                ,p_init_msg_list            => l_init_msg_list
1296                ,p_object_type             => 'PA_TASKS'
1297                ,p_project_id              => p_project_id
1298                ,p_structure_id             => l_structure_id --1    --anything. does not matter since its not gonna useful to create record
1299                                                    --in pa_proj_elements in PA_TASK_PVT1.CREATE_TASK.
1300                ,p_task_number             => l_task_number
1301                ,p_task_name               => p_task_name
1302                ,p_task_description       => p_task_description
1303                ,p_location_id             => p_location_id
1304                ,p_task_manager_id        => p_manager_person_id
1305                ,p_carrying_out_org_id   => p_carrying_out_organization_id
1306                ,p_priority_code          => p_priority_code
1307                ,p_TYPE_ID                 => p_task_type
1308                ,p_status_code             => p_status_code
1309                ,p_inc_proj_progress_flag     => p_inc_proj_progress_flag
1310                ,p_pm_product_code        => P_PM_SOURCE_CODE
1311                ,p_pm_task_reference           => P_PM_SOURCE_reference
1312                ,p_closed_date             => p_closed_date
1313                ,p_link_task_flag           => p_link_task_flag
1314                ,P_UOM_CODE              => P_WQ_UOM_CODE
1315                ,p_work_item_code           => P_WQ_ITEM_CODE
1316                ,x_task_id                 => l_task_id
1317 ----- begin Bug 3654243 --------------------------------------------
1318            ,p_Base_Perc_Comp_Deriv_Code => p_base_percent_comp_deriv_code
1319 ----- end Bug 3654243 ----------------------------------------------
1320 
1321                ,x_return_status          => l_return_status
1322                ,x_msg_count               => l_msg_count
1323                ,x_msg_data                => l_msg_data
1324                );
1325 
1326               IF l_return_status <> 'S'
1327               THEN
1328                  /*PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1329                                        ,p_msg_name       => l_msg_data );
1330                   */
1331                   raise api_error;
1332               END IF;
1333        END IF;
1334 
1335               x_task_id := l_task_id;
1336 
1337 --              IF p_structure_type = 'FINANCIAL'
1338 --              THEN
1339                  IF p_parent_task_id IS NOT NULL AND p_parent_task_id <> l_task_id
1340                     AND p_parent_task_id = p_ref_task_id
1341                  THEN
1342                     l_peer_or_sub := 'SUB';
1343                     --get reference task version id
1344                     OPEN cur_proj_elem_vers2( l_structure_version_id, p_parent_task_id );
1345                     FETCH cur_proj_elem_vers2 INTO l_ref_task_version_id;
1346                     CLOSE cur_proj_elem_vers2;
1347 
1348                     OPEN cur_child_exists(l_ref_task_version_id);
1349                     FETCH cur_child_exists into l_child_exists;
1350                     IF (cur_child_exists%NOTFOUND) THEN
1351                       l_weighting := 100;
1352                     ELSE
1353                       l_weighting := 0;
1354                     END IF;
1355                     CLOSE cur_child_exists;
1356 
1357                     --Bug 2732907
1358                     IF l_ref_task_version_id IS NOT NULL
1359                     THEN
1360                        update pa_proj_elem_ver_schedule
1361                           set WQ_PLANNED_QUANTITY = null
1362                         where element_version_id = l_ref_task_version_id
1363                           and project_id = p_project_id
1364                           and proj_element_id = p_parent_task_id;
1365                     END IF;
1366                     --Bug 2732907
1367 
1368                  ELSIF p_ref_task_id IS NOT NULL
1369                  THEN
1370                      l_peer_or_sub := 'PEER';
1371                      IF p_parent_task_id IS NULL   --top task
1372                      THEN
1373                          OPEN cur_proj_elem_vers( l_structure_version_id );
1374                          FETCH cur_proj_elem_vers INTO l_ref_task_version_id;
1375                          CLOSE cur_proj_elem_vers;
1376                      ELSE   -- not a top task. Added the following to maintain sequence between the two
1377                             --leaf level peer tasks.
1378 
1379                          OPEN cur_proj_elem_vers2( l_structure_version_id, p_parent_task_id );
1380                          FETCH cur_proj_elem_vers2 INTO l_parent_task_version_id;
1381                          CLOSE cur_proj_elem_vers2;
1382 
1383                        /**  OPEN cur_ref_task_ver_id2( l_structure_version_id, l_parent_task_version_id );
1384                          fetch cur_ref_task_ver_id2 INTO l_ref_task_version_id;
1385                          CLOSE cur_ref_task_ver_id2; **/
1386                            --  Above code commented and code below added for 4038249. The code above
1387                -- was resetting the p_ref_task_version_id to that of that latest task
1388                -- instead of setting it to the p_ref_task_id passed by the user.
1389              OPEN cur_proj_elem_vers2( l_structure_version_id, p_ref_task_id );
1390                          FETCH cur_proj_elem_vers2 INTO l_ref_task_version_id;
1391                          CLOSE cur_proj_elem_vers2;
1392                          --  Code changes end for 4038249
1393                      END IF;
1394                      l_weighting := 0;
1395                  ELSIF p_ref_task_id IS NULL
1396                  THEN
1397                      --get structure version if its a top task
1398                      l_peer_or_sub := 'SUB';
1399                      /*IF l_template_flag = 'N'
1400                      THEN
1401                          --get structure version if its a top task
1402                          OPEN cur_struc_ver_fin;
1403                          FETCH cur_struc_ver_fin INTO l_ref_task_version_id;
1404                          CLOSE cur_struc_ver_fin;
1405                      ELSE
1406                          --For templates its always WORKING_STRUCTURE
1407                          OPEN cur_struc_ver_wp;
1408                          FETCH cur_struc_ver_wp INTO l_ref_task_version_id;
1409                          CLOSE cur_struc_ver_wp;
1410                      END IF;*/
1411                      l_ref_task_version_id := l_structure_version_id;
1412                      OPEN cur_child_exists(l_ref_task_version_id);
1413                      FETCH cur_child_exists into l_child_exists;
1414                      IF cur_child_exists%NOTFOUND THEN
1415                        l_weighting := 100;
1416                      ELSE
1417                        l_weighting := 0;
1418                      END IF;
1419                      CLOSE cur_child_exists;
1420                  END IF;
1421 --Commenting out the following as its not needed. We dont any separate logic for WORKPLAN and FINANCIAL to get the
1422 --ref task version id. There is only one cursor cur_proj_elem_vers that takes structure type
1423 /*              ELSIF p_structure_type = 'WORKPLAN'
1424               THEN
1425                  IF p_parent_task_id IS NOT NULL AND p_parent_task_id <> l_task_id AND
1426                     p_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1427                  THEN
1428                     l_peer_or_sub := 'SUB';
1429                     --get reference task version id
1430                     OPEN cur_proj_elem_vers2( l_structure_version_id, p_parent_task_id );
1431                     FETCH cur_proj_elem_vers2 INTO l_ref_task_version_id;
1432                     CLOSE cur_proj_elem_vers2;
1433 
1434                     OPEN cur_child_exists(l_ref_task_version_id);
1435                     FETCH cur_child_exists into l_child_exists;
1436                     IF (cur_child_exists%NOTFOUND) THEN
1437                       l_weighting := 100;
1438                     ELSE
1439                       l_weighting := 0;
1440                     END IF;
1441                     CLOSE cur_child_exists;
1442 
1443                     --Bug 2732907
1444                     IF l_ref_task_version_id IS NOT NULL
1445                     THEN
1446                        update pa_proj_elem_ver_schedule
1447                           set WQ_PLANNED_QUANTITY = null
1448                         where element_version_id = l_ref_task_version_id
1449                           and project_id = p_project_id
1450                           and proj_element_id = p_parent_task_id;
1451                     END IF;
1452                     --Bug 2732907
1453 
1454                  ELSIF ( p_parent_task_id IS NULL OR p_parent_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
1455                  --proj conn
1456                        AND ( p_ref_task_id is null OR p_ref_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
1457                  --proj conn
1458                  THEN
1459                      --get structure version if its a top task
1460                      l_ref_task_version_id := l_structure_version_id;
1461 
1462                      OPEN cur_child_exists(l_ref_task_version_id);
1463                      FETCH cur_child_exists into l_child_exists;
1464                      IF cur_child_exists%NOTFOUND THEN
1465                        l_weighting := 100;
1466                      ELSE
1467                        l_weighting := 0;
1468                      END IF;
1469                      CLOSE cur_child_exists;
1470 
1471                      l_peer_or_sub := 'SUB';
1472 */
1473                      /*IF p_structure_version_id IS NULL OR
1474                         p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1475                      THEN
1476                          OPEN cur_struc_ver_wp;
1477                          FETCH cur_struc_ver_wp INTO l_ref_task_version_id;
1478                          CLOSE cur_struc_ver_wp;
1479                      ELSE
1480                          l_ref_task_version_id := p_structure_version_id;
1481                      END IF;
1482                      */
1483 /*                 ELSIF p_ref_task_id IS NOT NULL AND p_ref_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1484                  THEN
1485                     l_weighting := 0;
1486                     OPEN cur_proj_elem_vers2( l_structure_version_id, p_ref_task_id );
1487                     FETCH cur_proj_elem_vers2 INTO l_ref_task_version_id;
1488                     CLOSE cur_proj_elem_vers2;
1489                     --proj conn
1490                        OPEN c1(   l_ref_task_version_id );
1491                        FETCH c1 into l_wbs_level;
1492                        CLOSE c1;
1493 
1494                        IF l_wbs_level > 1
1495                        THEN
1496                           OPEN c2( l_structure_version_id,l_ref_task_version_id,1 );
1497                           FETCH c2 into l_ref_task_version_id;
1498                           CLOSE c2;
1499                        END IF;
1500                        l_peer_or_sub := 'PEER';
1501                     --proj conn
1502                  END IF;
1503               END IF;  --<< p_structrue_type >>
1504 */
1505 
1506               IF (l_template_flag = 'N') THEN
1507                 --check if structure is shared
1508                 --  if shared, check if versioned
1509                 --    'WORKING' if versioned; 'PUBLISHED' if not
1510                 --  if split, check if 'FINANCIAL'
1511                 --    'PUBLISHED' if financial
1512                 --    check if versioned
1513                 --    'WORKING' if versioend; 'PUBLISHED' if not
1514 
1515                 -- <Bug#2843596>
1516                 IF (nvl(g_project_id,-99) = p_project_id and g_sharing_enabled IS NOT NULL) THEN
1517                     l_sharing_enabled := g_sharing_enabled;
1518                 ELSE
1519                     l_sharing_enabled := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id);
1520                     g_project_id      := p_project_id;
1521                     g_sharing_enabled := l_sharing_enabled;
1522                 END IF;
1523                 -- </Bug#2843596>
1524 
1525                 IF ('Y' = l_sharing_enabled) THEN
1526         -- Bug 4067757 used l_versioned instead of calling Check_Wp_Versioning_Enabled multiple times
1527                 /*  IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id)) THEN  */
1528                   IF (l_versioned = 'Y') THEN
1529                     l_task_unpub_ver_status_code := 'WORKING';
1530                   ELSE
1531                     l_task_unpub_ver_status_code := 'PUBLISHED';
1532                   END IF;
1533                 ELSE --split
1534                   IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'FINANCIAL')  AND
1535                       'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'WORKPLAN')) THEN
1536                     l_task_unpub_ver_status_code := 'PUBLISHED';
1537                   ELSE --workplan only
1538           -- Bug 4067757 used l_versioned instead of calling Check_Wp_Versioning_Enabled multiple times
1539                  /*   IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id)) THEN */
1540                       IF (l_versioned = 'Y') THEN
1541                       l_task_unpub_ver_status_code := 'WORKING';
1542                     ELSE
1543                       l_task_unpub_ver_status_code := 'PUBLISHED';
1544                     END IF;
1545                   END IF;
1546                 END IF;
1547               ELSE
1548                 l_task_unpub_ver_status_code := 'WORKING';
1549               END IF;
1550 
1551               --hsiu added for task status
1552               --check if ok to create subtask
1553               IF (l_peer_or_sub = 'PEER') THEN
1554                 OPEN get_parent_version_id(l_ref_task_version_id);
1555                 FETCH get_parent_version_id into l_parent_ver_id;
1556                 CLOSE get_parent_version_id;
1557                 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
1558                   p_parent_task_ver_id => l_parent_ver_id
1559                  ,x_return_status      => l_return_status
1560                  ,x_error_message_code => l_error_msg_code
1561                 );
1562 
1563                 IF (l_return_status <> 'Y') THEN
1564                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1565                                        p_msg_name => l_error_msg_code);
1566                   raise api_error;
1567                 END IF;
1568               ELSE
1569                 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
1570                   p_parent_task_ver_id => l_ref_task_version_id
1571                  ,x_return_status      => l_return_status
1572                  ,x_error_message_code => l_error_msg_code
1573                 );
1574 
1575                 IF (l_return_status <> 'Y') THEN
1576                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1577                              p_msg_name => l_error_msg_code);
1578                   raise api_error;
1579                 END IF;
1580               END IF;
1581               --end changes for task status
1582 
1583               PA_TASK_PVT1.Create_Task_Version(
1584                    p_ref_task_version_id     => l_ref_task_version_id
1585                   ,p_init_msg_list           => l_init_msg_list            --Added for bug 4955475
1586                   ,p_peer_or_sub         => l_peer_or_sub
1587                   ,p_task_id              => l_task_id
1588                   ,p_WEIGHTING_PERCENTAGE   => l_weighting
1589                   ,p_task_unpub_ver_status_code => l_task_unpub_ver_status_code
1590                   ,p_financial_task_flag => p_financial_task_flag    --bug 3301192
1591                   ,x_task_version_id      => l_task_version_id
1592                   ,x_return_status        => l_return_status
1593                   ,x_msg_count           => l_msg_count
1594                   ,x_msg_data             => l_msg_data
1595                 );
1596 
1597               IF l_return_status <> 'S'
1598               THEN
1599                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1600                                        ,p_msg_name       => 'PA_PS_NO_TASK_VER_CREATED');
1601                   raise api_error;
1602               END IF;
1603 
1604               x_task_version_id      := l_task_version_id;
1605 
1606 
1607               --bug 3010538
1608 
1609               --3035902: process update flag changes
1610               OPEN get_task_type_id(l_task_id);
1611               FETCH get_task_type_id INTO l_task_type_id;
1612               CLOSE get_task_type_id;
1613            --Bug No 3450684 SMukka Commented if condition
1614            --IF NOT ( p_structure_type = 'WORKPLAN' AND
1615            --         l_shared = 'N' AND
1616            --        ( PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id) = 'MANUAL' OR
1617            --           pa_task_type_utils.check_tk_type_progressable(l_task_type_id)='N') )
1618            --THEN
1619 
1620               PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
1621                (  p_calling_context       => p_calling_module
1622                  ,p_project_id            => p_project_id
1623                  ,p_structure_version_id  => l_structure_version_id
1624                  ,p_update_wbs_flag       => 'Y'
1625                  ,x_return_status         => l_return_status
1626                  ,x_msg_count             => l_msg_count
1627                  ,x_msg_data              => l_msg_data);
1628 
1629              if l_return_status <> FND_API.G_RET_STS_SUCCESS then
1630                  x_msg_count := l_msg_count;
1631                  x_msg_data := l_msg_data;
1632                  RAISE API_ERROR;
1633              end if;
1634            --END IF;
1635 
1636              IF p_structure_type = 'FINANCIAL'
1637              THEN
1638                  l_published_ver_exists := PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS( p_project_id, l_structure_id );
1639                  IF ( l_versioned = 'N' OR
1640                       l_shared = 'N' OR
1641                       ( l_versioned = 'Y' AND
1642                         l_shared = 'Y' AND
1643                         l_published_ver_exists = 'N' ) )
1644                  THEN
1645                      pa_fp_refresh_elements_pub.set_process_flag_proj(
1646                            p_project_id               => p_project_id
1647                           ,p_request_id               => null
1648                           ,p_process_code             => null
1649                           ,p_refresh_required_flag    => 'Y'
1650                           ,x_return_status            => l_return_status
1651                           ,x_msg_count                => l_msg_count
1652                           ,x_msg_data                 => l_msg_data );
1653 
1654                       if l_return_status <> FND_API.G_RET_STS_SUCCESS then
1655                          x_msg_count := l_msg_count;
1656                          x_msg_data := l_msg_data;
1657                          RAISE API_ERROR;
1658                       end if;
1659                   END IF;
1660              END IF;
1661 
1662            --End bug 3010538
1663 
1664 --hsiu added task status rollup
1665               select parent_structure_version_id
1666                 into l_parent_struc_ver_id
1667                 from pa_proj_element_versions
1668                where element_version_id = l_task_version_id;
1669 
1670               IF (PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id) = 'Y') AND
1671            -- Bug 4067757 used l_versioned instead of calling Check_Wp_Versioning_Enabled multiple times
1672            /*      (PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id) = 'N') AND */
1673              (l_versioned = 'N') AND
1674                  (PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'WORKPLAN') = 'Y') THEN
1675                 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
1676                   p_structure_version_id => l_parent_struc_ver_id
1677                  ,p_element_version_id => l_task_version_id
1678                  ,x_return_status => l_return_status
1679                  ,x_msg_count => l_msg_count
1680                  ,x_msg_data => l_msg_data
1681                 );
1682 
1683                 IF (l_return_status <> 'S') THEN
1684                   x_msg_count := l_msg_count;
1685                   x_msg_data := l_msg_data;
1686                   RAISE API_ERROR;
1687                 END IF;
1688 
1689               END IF;
1690 --end task status rollup
1691 
1692 
1693 --Hsiu added
1694 --inherit task type
1695               IF p_create_task_version_only = 'N'
1696               THEN
1697                   PA_TASK_PVT1.Inherit_task_type_attr(
1698                       p_task_id => l_task_id
1699                      ,p_task_version_id => l_task_version_id
1700                      ,x_return_status => l_return_status
1701                      ,x_msg_count => l_msg_count
1702                      ,x_msg_data => l_msg_data
1703                      );
1704 
1705                   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1706                      raise api_error;
1707                   END IF;
1708               END IF;
1709 --end inherit task type
1710 
1711               OPEN cur_pa_proj_elem_vers2(l_task_version_id);
1712               FETCH cur_pa_proj_elem_vers2 INTO l_dummy_char;
1713               IF cur_pa_proj_elem_vers2%FOUND
1714               THEN
1715                   -- xxlu added DFF attributes
1716                   OPEN cur_ver_sch_attr_rec(l_task_version_id);
1717                   FETCH cur_ver_sch_attr_rec INTO l_ver_sch_attr_rec;
1718                   CLOSE cur_ver_sch_attr_rec;
1719 
1720                   --hsiu: added for bug 2691868
1721                   IF (p_scheduled_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1722                     l_scheduled_start_date := sysdate;
1723                   ELSE
1724                     l_scheduled_start_date := p_scheduled_start_date;
1725                   END IF;
1726 
1727                   IF (p_scheduled_finish_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1728                     l_scheduled_finish_date := sysdate;
1729                   ELSE
1730                     l_scheduled_finish_date := p_scheduled_finish_date;
1731                   END IF;
1732 
1733                   --bug  2824612
1734 
1735 /*
1736                   SELECT type_id  INTO l_task_type_id
1737                     FROM pa_proj_elements
1738                    WHERE proj_element_id = l_task_id
1739                      AND project_id = p_project_id;
1740 */
1741 
1742                   IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_wq_enabled(l_task_type_id) OR
1743                       'N' = PA_PROGRESS_UTILS.get_project_wq_flag(p_project_id)) THEN
1744                       IF (P_PLANNED_WORK_QUANTITY <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND P_PLANNED_WORK_QUANTITY IS NOT NULL) THEN
1745                           l_wq_planned_quantity := NULL;
1746                       END IF;
1747                   ELSE
1748                      l_wq_planned_quantity := P_PLANNED_WORK_QUANTITY;    --bug 2826992
1749                   END IF;
1750 
1751                   l_workplan_enabled := 'Y';
1752                   --bug  2824612
1753 
1754                   --Bug 6153503 start
1755                   if (--p_attribute_category is null or
1756                         p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1757                     then
1758                          l_attribute_category :=  l_ver_sch_attr_rec.attribute_category;
1759                     else
1760                           l_attribute_category :=  p_attribute_category;
1761                     end if;
1762 
1763 
1764 
1765                     if (--p_attribute1 is null or
1766                         p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1767                     then
1768                          l_attribute1  :=  l_ver_sch_attr_rec.attribute1;
1769                     else
1770                          l_attribute1  :=  p_attribute1;
1771                     end if;
1772 
1773 
1774 
1775                     if (--p_attribute2 is null or
1776                         p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1777                     then
1778                          l_attribute2  :=  l_ver_sch_attr_rec.attribute2;
1779                     else
1780                          l_attribute2  :=  p_attribute2;
1781                     end if;
1782 
1783 
1784                     if (--p_attribute3 is null or
1785                         p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1786                     then
1787                          l_attribute3 :=  l_ver_sch_attr_rec.attribute3;
1788                     else
1789                           l_attribute3 :=  p_attribute3;
1790                     end if;
1791 
1792                     if (--p_attribute4 is null or
1793                         p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1794                     then
1795                          l_attribute4 :=  l_ver_sch_attr_rec.attribute4;
1796                     else
1797                           l_attribute4 :=  p_attribute4;
1798                     end if;
1799 
1800                     if (--p_attribute5 is null or
1801                         p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1802                     then
1803                          l_attribute5 :=  l_ver_sch_attr_rec.attribute5;
1804                     else
1805                           l_attribute5 :=  p_attribute5;
1806                     end if;
1807 
1808                     if (--p_attribute6 is null or
1809                         p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1810                     then
1811                          l_attribute6 :=  l_ver_sch_attr_rec.attribute6;
1812                     else
1813                           l_attribute6 :=  p_attribute6;
1814                     end if;
1815 
1816                     if (--p_attribute7 is null or
1817                         p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)  -- Changed for Bug #6153681
1818                     then
1819                          l_attribute7 :=  l_ver_sch_attr_rec.attribute7;
1820                     else
1821                           l_attribute7 :=  p_attribute7;
1822                     end if;
1823 
1824                     if (--p_attribute8 is null or
1825                         p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1826                     then
1827                          l_attribute8 :=  l_ver_sch_attr_rec.attribute8;
1828                     else
1829                           l_attribute8  :=  p_attribute8;
1830                     end if;
1831 
1832                     if (--p_attribute9 is null or
1833                         p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1834                     then
1835                          l_attribute9 :=  l_ver_sch_attr_rec.attribute9;
1836                     else
1837                          l_attribute9 :=  p_attribute9;
1838                     end if;
1839 
1840                     if (--p_attribute10 is null or
1841                         p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1842                     then
1843                          l_attribute10 :=  l_ver_sch_attr_rec.attribute10;
1844                     else
1845                           l_attribute10 :=  p_attribute10;
1846                     end if;
1847 
1848                     if (--p_attribute10 is null or
1849                         p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1850                     then
1851                          l_attribute11 :=  l_ver_sch_attr_rec.attribute11;
1852                     else
1853                           l_attribute11 :=  p_attribute11;
1854                     end if;
1855 
1856                     if (--p_attribute10 is null or
1857                         p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1858                     then
1859                          l_attribute12 :=  l_ver_sch_attr_rec.attribute12;
1860                     else
1861                           l_attribute12 :=  p_attribute12;
1862                     end if;
1863 
1864                     if (--p_attribute10 is null or
1865                         p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1866                     then
1867                          l_attribute13 :=  l_ver_sch_attr_rec.attribute13;
1868                     else
1869                           l_attribute13 :=  p_attribute13;
1870                     end if;
1871 
1872                     if (--p_attribute10 is null or
1873                         p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1874                     then
1875                          l_attribute14 :=  l_ver_sch_attr_rec.attribute14;
1876                     else
1877                           l_attribute14 :=  p_attribute14;
1878                     end if;
1879 
1880 
1881                     if (--p_attribute10 is null or
1882                         p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1883                     then
1884                          l_attribute15 :=  l_ver_sch_attr_rec.attribute15;
1885                     else
1886                           l_attribute15 :=  p_attribute15;
1887                     end if;
1888 
1889                   --if added while fixing BUG 3919800
1890                   --Add validation for PA_PROJ_ELEM_VER_SCH_DESC_FLEX
1891                   --if l_attribute_category is not null and l_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1892                   --then
1893                   IF p_validate_dff = 'Y' THEN
1894                        pa_task_utils.validate_flex_fields(
1895                        p_desc_flex_name        => 'PA_PROJ_ELEM_VER_SCH_DESC_FLEX'
1896                       ,p_attribute_category    => l_attribute_category
1897                       ,p_attribute1            => l_attribute1
1898                       ,p_attribute2            => l_attribute2
1899                       ,p_attribute3            => l_attribute3
1900                       ,p_attribute4            => l_attribute4
1901                       ,p_attribute5            => l_attribute5
1902                       ,p_attribute6            => l_attribute6
1903                       ,p_attribute7            => l_attribute7
1904                       ,p_attribute8            => l_attribute8
1905                       ,p_attribute9            => l_attribute9
1906                       ,p_attribute10           => l_attribute10
1907                       ,p_attribute11           => l_attribute11
1908                       ,p_attribute12           => l_attribute12
1909                       ,p_attribute13           => l_attribute13
1910                       ,p_attribute14           => l_attribute14
1911                       ,p_attribute15           => l_attribute15
1912                       ,p_RETURN_msg            => l_return_msg
1913                       ,p_validate_status       => l_validate_status
1914                       );
1915 
1916                  --end if;
1917 
1918                   IF l_validate_status = 'N'
1919                     THEN
1920                          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1921                          THEN
1922                               pa_interface_utils_pub.map_new_amg_msg
1923                                         ( p_old_message_code => 'PA_INVALID_FF_VALUES'
1924                                         ,p_msg_attribute    => 'CHANGE'
1925                                         ,p_resize_flag      => 'N'
1926                                         ,p_msg_context      => 'FLEX'
1927                                         ,p_attribute1       => l_return_msg
1928                                         ,p_attribute2       => ''
1929                                         ,p_attribute3       => ''
1930                                         ,p_attribute4       => ''
1931                                         ,p_attribute5       => '');
1932                         END IF;
1933                     RAISE FND_API.G_EXC_ERROR;
1934                   END IF;
1935                END IF;
1936         --Bug 6153503 end
1937 --End add rtarway, 3908013
1938 
1939                   PA_TASK_PUB1.Create_Schedule_Version(
1940                       p_element_version_id     => l_task_version_id
1941                      ,p_init_msg_list            => l_init_msg_list
1942                      ,p_scheduled_start_date   => l_scheduled_start_date
1943                      ,p_scheduled_end_date     => l_scheduled_finish_date
1944                      ,p_calendar_id                   => P_CALENDAR_ID
1945                      ,p_obligation_start_date     => p_obligation_start_date
1946                      ,p_obligation_end_date    => p_obligation_finish_date
1947                      ,p_actual_start_date            => p_actual_start_date
1948                      ,p_actual_finish_date     => p_actual_finish_date
1949                      ,p_estimate_start_date    => p_estimated_start_date
1950                      ,p_estimate_finish_date   => p_estimated_finish_date
1951                      ,p_duration                 => p_duration
1952                      ,p_early_start_date             => p_early_start_date
1953                      ,p_early_end_date          => p_early_finish_date
1954                      ,p_late_start_date         => p_late_start_date
1955                      ,p_late_end_date           => p_late_finish_date
1956                      ,p_milestone_flag          => p_milestone_flag
1957                      ,p_critical_flag           => p_critical_flag
1958                      ,p_WQ_PLANNED_QUANTITY     => l_wq_planned_quantity  --bug  2824612
1959                      ,p_PLANNED_EFFORT          => p_planned_effort
1960                      --Bug 6153503
1961                      ,p_attribute_category      => l_attribute_category --l_ver_sch_attr_rec.attribute_category
1962                      ,p_attribute1              => l_attribute1--l_ver_sch_attr_rec.attribute1
1963                      ,p_attribute2              => l_attribute2--l_ver_sch_attr_rec.attribute2
1964                      ,p_attribute3              => l_attribute3--l_ver_sch_attr_rec.attribute3
1965                      ,p_attribute4              => l_attribute4--l_ver_sch_attr_rec.attribute4
1966                      ,p_attribute5              => l_attribute5--l_ver_sch_attr_rec.attribute5
1967                      ,p_attribute6              => l_attribute6--l_ver_sch_attr_rec.attribute6
1968                      ,p_attribute7              => l_attribute7--l_ver_sch_attr_rec.attribute7
1969                      ,p_attribute8              => l_attribute8--l_ver_sch_attr_rec.attribute8
1970                      ,p_attribute9              => l_attribute9--l_ver_sch_attr_rec.attribute9
1971                      ,p_attribute10             => l_attribute10--l_ver_sch_attr_rec.attribute10
1972                      ,p_attribute11             => l_attribute11--l_ver_sch_attr_rec.attribute11
1973                      ,p_attribute12             => l_attribute12--l_ver_sch_attr_rec.attribute12
1974                      ,p_attribute13             => l_attribute13--l_ver_sch_attr_rec.attribute13
1975                      ,p_attribute14             => l_attribute14--l_ver_sch_attr_rec.attribute14
1976                      ,p_attribute15             => l_attribute15--l_ver_sch_attr_rec.attribute15
1977                      --Bug 6153503 end
1978 -- (Begin Venkat) new params for bug #3450684 ----------------------------------------------
1979              ,p_ext_act_duration    => p_ext_act_duration
1980              ,p_ext_remain_duration => p_ext_remain_duration
1981              ,p_ext_sch_duration    => p_ext_sch_duration
1982 -- (End Venkat) new params for bug #3450684 -------------------------------------------------
1983 
1984 -- begin Bug 3654243 -----------------------------------------------------------------------
1985         ,p_def_sch_tool_tsk_type_code =>   p_sch_tool_tsk_type_code
1986         ,p_constraint_type_code  =>        p_constraint_type_code
1987         ,p_constraint_date =>              p_constraint_date
1988         ,p_free_slack =>                   p_free_slack
1989         ,p_total_slack =>                  p_total_slack
1990         ,p_effort_driven_flag =>           p_effort_driven_flag
1991         ,p_level_assignments_flag =>       p_level_assignments_flag
1992 -- end Bug 3654243 -------------------------------------------------------------------------
1993 
1994                      ,x_pev_schedule_id         => x_pev_schedule_id
1995                      ,x_return_status           => l_return_status
1996                      ,x_msg_count                => l_msg_count
1997                      ,x_msg_data                 => l_msg_data
1998                  );
1999                  -- end xxlu changes
2000               END IF;
2001               CLOSE cur_pa_proj_elem_vers2;
2002 
2003               IF l_return_status <> 'S'
2004               THEN
2005                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2006                                        ,p_msg_name       => 'PA_PS_NO_TASK_SCH_VER_CREATED');
2007                   raise api_error;
2008               END IF;
2009 
2010               --bug 2732895   --create_task_structure
2011               --The following API should NOT be called if CREATE_TASK_STRUCTURE is called from AMG.
2012               --AMG recalculates the weightings once all the tasks are created.
2013               IF p_calling_module = 'FORMS'
2014               THEN
2015                   IF l_workplan_enabled  = 'Y'
2016                   THEN
2017                       PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings(
2018                             p_tasks_in             => l_tasks_out            --null if called for one task
2019                            ,p_task_version_id      => l_task_version_id
2020                            ,x_msg_count            => l_msg_count
2021                            ,x_msg_data             => l_msg_data
2022                            ,x_return_status        => l_return_status
2023                        );
2024                       IF l_return_status <> 'S'
2025                       THEN
2026                           raise api_error;
2027                       END IF;
2028 
2029                       --Bug 3170832  --uncommenting the call to rollup dates
2030                       PA_PROJ_TASK_STRUC_PUB.rollup_dates(
2031                             p_tasks_in             => l_tasks_out            --null if called for one task
2032                            ,p_task_version_id      => l_task_version_id
2033                            ,p_structure_version_id => l_structure_version_id
2034                            ,p_project_id           => p_project_id
2035                            ,x_msg_count            => l_msg_count
2036                            ,x_msg_data             => l_msg_data
2037                            ,x_return_status        => l_return_status
2038                        );
2039                       IF l_return_status <> 'S'
2040                       THEN
2041                           raise api_error;
2042                       END IF;
2043                       --Bug 3170832  --uncommenting the call to rollup dates
2044 
2045                   END IF;
2046               END IF;
2047               --bug 2732895
2048 
2049    END IF;
2050    CLOSE cur_pa_temp_import;
2051 
2052 /* Bug # 3420093 - Adding Progress Management modifications to create_task flow. */
2053 
2054     if (p_structure_type = 'WORKPLAN' ) then
2055 
2056                 if (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(x_task_version_id) = 'Y') then
2057                 l_add_task_ver_ids.extend(1);
2058                 l_add_planned_effort.extend(1);
2059                 l_add_start_date.extend(1);
2060                 l_add_end_date.extend(1);
2061 
2062                 l_add_task_ver_ids(l_add_task_ver_ids.count):= x_task_version_id;
2063                 l_add_planned_effort(l_add_planned_effort.count):= p_planned_effort;
2064                                 l_add_start_date(l_add_start_date.count):= p_actual_start_date;
2065                                 l_add_end_date(l_add_end_date.count):= p_actual_finish_date;
2066             else
2067                                 l_del_task_ver_ids.extend(1);
2068 
2069                                 l_del_task_ver_ids(l_del_task_ver_ids.count):= x_task_version_id;
2070             end if;
2071     end if;
2072 
2073     -- Calling pa_task_pub1.call_add_planning_txns for lowest level tasks.
2074 
2075     begin
2076             pa_task_pub1.call_add_planning_txns(
2077             p_tasks_ver_ids                  => l_add_task_ver_ids,
2078             p_planned_effort                 => l_add_planned_effort,
2079             p_project_id                     => p_project_id,
2080             p_structure_version_id           => l_structure_version_id,  --replace p_structure_version_id, bug 3838186
2081             p_start_date                     => l_add_start_date,
2082             p_end_date                       => l_add_end_date,
2083             p_pm_product_code                => P_PM_SOURCE_CODE,   --bug 3811243
2084             x_return_status                  => l_return_status,
2085             x_msg_count                      => l_msg_count,
2086             x_msg_data                       => l_msg_data
2087             );
2088     exception
2089             when others then
2090                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'pa_project_pub',
2091                                 p_procedure_name => 'CREATE_PROJECT',
2092                                         p_error_text     => substrb('PA_TASK_PUB1.CALL_ADD_PLANNING_TXNS:'||sqlerrm,1,240));
2093             raise fnd_api.g_exc_error;
2094         end;
2095 
2096     -- Calling pa_fp_planning_transaction_pub.delete_planning_transactions for higher level tasks.
2097 
2098        begin
2099            pa_fp_planning_transaction_pub.delete_planning_transactions
2100            (
2101             p_context                      => 'WORKPLAN'
2102            ,p_task_or_res                  => 'TASKS'
2103            ,p_element_version_id_tbl       => l_del_task_ver_ids
2104            ,x_return_status                => l_return_status
2105            ,x_msg_count                    => l_msg_count
2106            ,x_msg_data                     => l_msg_data
2107           );
2108        exception
2109            when others then
2110                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'pa_project_pub',
2111                                         p_procedure_name => 'CREATE_PROJECT',
2112                                         p_error_text     => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.DELETE_PLANNING_TRANSACTIONS:'||SQLERRM,1,240));
2113            raise fnd_api.g_exc_error;
2114        end;
2115 
2116 /* Bug # 3420093 - Adding Progress Management modifications to create_task flow. */
2117 
2118 
2119   x_return_status := FND_API.G_RET_STS_SUCCESS;
2120 EXCEPTION
2121 WHEN API_ERROR THEN
2122   x_return_status := FND_API.G_RET_STS_ERROR;
2123   rollback to create_task_struc;
2124 WHEN OTHERS THEN
2125   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2126   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
2127                           p_procedure_name => 'create_task_structure',
2128                           p_error_text     => SUBSTRB(SQLERRM,1,240));
2129   rollback to create_task_struc;
2130   raise;
2131 END create_task_structure;
2132 -- API name                      : update_task_structure
2133 -- Type                          : PL/sql Public procedure
2134 -- Pre-reqs                      : None
2135 -- Return Value                  : N/A
2136 -- Prameters
2137 --   p_calling_module                   IN VARCHAR2
2138 --  ,p_task_id                          IN NUMBER
2139 --  ,p_task_number                      IN VARCHAR2
2140 --  ,p_task_name                        IN VARCHAR2
2141 --  ,p_task_description                 IN VARCHAR2
2142 --  ,p_carrying_out_organization_id     IN NUMBER
2143 --  ,p_task_manager_id                  IN NUMBER
2144 --  ,p_pm_product_code                  IN VARCHAR2
2145 --  ,p_pm_task_reference                IN VARCHAR2
2146 --  ,p_record_version_number           IN NUMBER
2147 --  ,x_msg_count                        OUT NUMBER
2148 --  ,x_msg_data                         OUT VARCHAR2
2149 --  ,x_return_status                    OUT VARCHAR2--
2150 --  History
2151 --
2152 --  25-APR-02      MAansari             -Created
2153 --  05-APR-2004    Rakesh Raghavan      Progress Management Changes. Bug # 3420093.
2154 --  18-MAY-2004    Rakesh Raghavan      Modified call to API: pa_task_pub1.update_task_det_sch_info().
2155 
2156 PROCEDURE update_task_structure
2157 (
2158    p_calling_module                   IN VARCHAR2 := 'FORMS'
2159   ,p_ref_task_id                      IN NUMBER
2160   ,p_project_id                       IN NUMBER
2161   ,p_task_id                          IN NUMBER
2162   ,p_task_number                      IN VARCHAR2
2163   ,p_task_name                        IN VARCHAR2
2164   ,p_task_description                 IN VARCHAR2
2165   ,p_carrying_out_organization_id     IN NUMBER
2166   ,p_structure_type                   IN VARCHAR2 := 'FINANCIAL'
2167   ,p_task_manager_id                  IN NUMBER
2168   ,p_pm_product_code                  IN VARCHAR2
2169   ,p_pm_task_reference                IN VARCHAR2
2170   ,p_location_id                      IN NUMBER
2171   ,p_actual_start_date                  IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2172   ,p_actual_finish_date                 IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2173   ,p_early_start_date                   IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2174   ,p_early_finish_date                  IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2175   ,p_late_start_date                    IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2176   ,p_late_finish_date                   IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2177   ,p_scheduled_start_date               IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2178   ,p_scheduled_finish_date              IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2179   ,P_OBLIGATION_START_DATE              IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2180   ,P_OBLIGATION_FINISH_DATE             IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2181   ,P_ESTIMATED_START_DATE               IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2182   ,P_ESTIMATED_FINISH_DATE              IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2183   ,P_BASELINE_START_DATE                IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2184   ,P_BASELINE_FINISH_DATE               IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2185   ,P_CLOSED_DATE                        IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2186   ,P_WQ_UOM_CODE                        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2187   ,P_WQ_ITEM_CODE                       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2188   ,P_STATUS_CODE                        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2189   ,P_WF_STATUS_CODE                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2190   ,P_PRIORITY_CODE                      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2191   ,P_MILESTONE_FLAG                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2192   ,P_CRITICAL_FLAG                      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2193   ,P_INC_PROJ_PROGRESS_FLAG             IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2194   ,P_LINK_TASK_FLAG                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2195   ,P_CALENDAR_ID                        IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2196   ,P_PLANNED_EFFORT                     IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2197   ,P_DURATION                           IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2198   ,P_PLANNED_WORK_QUANTITY              IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2199   ,P_TASK_TYPE                          IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2200   ,p_structure_version_id               IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2201   ,p_parent_structure_id               IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2202   ,p_phase_version_id                  IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2203   ,P_PHASE_CODE                         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2204 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
2205   ,p_ext_act_duration               IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
2206   ,p_ext_remain_duration            IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
2207   ,p_ext_sch_duration               IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
2208 -- (end venkat) new params for bug #3450684 -------------------------------------------------
2209 -- (begin) add new params bug - 3654243 -----
2210   ,p_base_percent_comp_deriv_code   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2211   ,p_sch_tool_tsk_type_code     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2212   ,p_constraint_type_code       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2213   ,p_constraint_date            IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2214   ,p_free_slack             IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2215   ,p_total_slack            IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2216   ,p_effort_driven_flag         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2217   ,p_level_assignments_flag     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2218   ,p_invoice_method         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2219   ,p_customer_id            IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2220   ,p_gen_etc_source_code        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2221 -- (end) add new params bug - 3654243 -----
2222 -- Progress Management Changes. Bug # 3420093.
2223   ,p_etc_effort                 IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2224   ,p_percent_complete           IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2225 -- Progress Management Changes. Bug # 3420093.
2226 -- rtarway, BUG 3908013
2227      ,p_attribute_category            IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2228      ,p_attribute1                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2229      ,p_attribute2                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2230      ,p_attribute3                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2231      ,p_attribute4                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2232      ,p_attribute5                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2233      ,p_attribute6                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2234      ,p_attribute7                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2235      ,p_attribute8                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2236      ,p_attribute9                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2237      ,p_attribute10                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2238      --Bug 6153503
2239      ,p_attribute11                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2240      ,p_attribute12                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2241      ,p_attribute13                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2242      ,p_attribute14                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2243      ,p_attribute15                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2244   ,x_msg_count                        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2245   ,x_msg_data                         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2246   ,x_return_status                    OUT NOCOPY VARCHAR2  --File.Sql.39 bug 4440895
2247   ) IS
2248 
2249   l_return_status       VARCHAR2(1);
2250   l_msg_count           NUMBER;
2251   l_msg_data            VARCHAR2(2000);
2252   API_ERROR            EXCEPTION;
2253   l_record_version_number NUMBER;
2254 
2255 
2256   CURSOR cur_proj_is_template
2257   IS     select 'Y'
2258            from pa_projects_all
2259           where project_id = p_project_id
2260             and template_flag = 'Y';
2261   l_template_flag VARCHAR2(1);
2262 
2263     CURSOR cur_rec_ver_num
2264     IS
2265       SELECT record_version_number
2266         FROM pa_proj_elements
2267        WHERE proj_element_id = p_task_id
2268          AND object_type = 'PA_TASKS';
2269 
2270 /* Bug 2680486 -- Performance changes -- Added d.project_id= c.project_id
2271                   join in the following cursor*/
2272 
2273    CURSOR cur_struc_ver_fin
2274    IS
2275      SELECT c.element_version_id
2276        FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
2277             ,pa_proj_elem_ver_structure d
2278       WHERE c.project_id = p_project_id
2279         AND a.structure_type_id = b.structure_type_id
2280         AND b.proj_element_id = c.proj_element_id
2281         AND a.structure_type = p_structure_type
2282      AND d.project_id = c.project_id
2283         AND d.element_version_id = c.element_version_id
2284         AND d.status_code = 'STRUCTURE_PUBLISHED'
2285         AND d.latest_eff_published_flag = 'Y'
2286         ;
2287 
2288 /* Bug 2680486 -- Performance changes -- Added d.project_id= c.project_id
2289                   join in the following cursor*/
2290 
2291 
2292    CURSOR cur_struc_ver_wp
2293    IS
2294      SELECT c.element_version_id
2295        FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
2296             ,pa_proj_elem_ver_structure d
2297       WHERE c.project_id = p_project_id
2298         AND a.structure_type_id = b.structure_type_id
2299         AND b.proj_element_id = c.proj_element_id
2300         AND a.structure_type = p_structure_type
2301      AND d.project_id = c.project_id
2302         AND d.element_version_id = c.element_version_id
2303         AND d.status_code = 'STRUCTURE_WORKING'
2304         ;
2305 
2306    CURSOR cur_pa_tasks( c_task_id NUMBER )
2307    IS
2308      SELECT parent_task_id
2309        FROM pa_tasks
2310       WHERE project_id = p_project_id
2311         AND task_id = c_task_id;
2312 
2313    CURSOR cur_pa_task_ver( c_structure_version_id NUMBER, c_task_id NUMBER )
2314    IS
2315      SELECT element_version_id, record_version_number
2316        FROM pa_proj_element_versions
2317       WHERE project_id = p_project_id
2318         AND proj_element_id = c_task_id
2319         AND parent_structure_version_id = c_structure_version_id
2320         AND object_type = 'PA_TASKS';
2321 
2322    CURSOR cur_pa_peer_task_above( c_structure_version_id NUMBER, c_task_version_id NUMBER )
2323    IS
2324      SELECT element_version_id
2325        FROM pa_proj_element_versions
2326       WHERE project_id = p_project_id
2327         AND parent_structure_version_id = c_structure_version_id
2328         AND display_sequence = ( SELECT max( display_sequence ) FROM pa_proj_element_versions
2329                                   WHERE parent_structure_version_id = c_structure_version_id
2330                                     AND display_sequence < ( SELECT display_sequence FROM pa_proj_element_versions
2331                                                                WHERE element_version_id = c_task_version_id )
2332                                     AND wbs_level = ( SELECT wbs_level FROM pa_proj_element_versions
2333                                                        WHERE element_version_id = c_task_version_id )
2334                                )
2335         AND object_type = 'PA_TASKS';
2336 
2337   CURSOR cur_proj_sch( c_task_version_id NUMBER )
2338   IS
2339     SELECT pev_schedule_id, record_version_number
2340       FROM pa_proj_elem_ver_schedule
2341      WHERE element_version_id = c_task_version_id
2342        AND project_id = p_project_id
2343        AND proj_element_id = p_task_id;  --This will give u unique record.
2344 
2345     CURSOR cur_pa_obj_rel( c_task_version_id NUMBER )
2346     IS
2347       SELECT object_id_from1
2348         FROM pa_object_relationships
2349        WHERE object_id_to1 = c_task_version_id
2350          and relationship_type = 'S';
2351 
2352     CURSOR cur_pa_proj_elem_ver( c_task_version_id NUMBER )
2353     IS
2354       SELECT proj_element_id
2355         FROM pa_proj_element_versions
2356        WHERE project_id = p_project_id
2357          AND element_version_id = c_task_version_id
2358          AND object_type = 'PA_TASKS';
2359 
2360     CURSOR cur_pa_proj_elem_vers2( c_task_version_id NUMBER )
2361   IS
2362     SELECT 'x'
2363       FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
2364      WHERE c.project_id = p_project_id
2365        AND a.structure_type_id = b.structure_type_id
2366        AND b.proj_element_id = c.proj_element_id
2367        AND a.structure_type = 'WORKPLAN'
2368        AND element_version_id = ( SELECT parent_structure_version_id
2369                                    FROM  pa_proj_element_versions
2370                                    WHERE element_version_id = c_task_version_id );
2371 
2372   -- xxlu added for DFF attributes for calling update_schedule_version
2373   CURSOR cur_ver_sch_attr_rec(c_element_version_id IN NUMBER) IS
2374     SELECT *
2375     FROM pa_proj_elem_ver_schedule
2376     WHERE element_version_id = c_element_version_id
2377      and  project_id = p_project_id;
2378   l_ver_sch_attr_rec cur_ver_sch_attr_rec%ROWTYPE;
2379   -- end xxlu changes
2380 
2381   l_structure_version_id   NUMBER;
2382   l_parent_task_id         NUMBER;
2383   l_parent_of_ref_task_id  NUMBER;
2384   l_ref_task_version_id    NUMBER;
2385   l_task_version_id        NUMBER;
2386   l_peer_or_sub            VARCHAR2(4);
2387   l_pev_schedule_id        NUMBER;
2388 
2389   v_parent_task_ver_id_of_ref  NUMBER;
2390   v_parent_task_version_id     NUMBER;
2391   l_dummy_char                 VARCHAR2(1);
2392 --bug 2736392
2393   l_str_status_code            VARCHAR2(150);
2394 --bug 2736392
2395   l_init_msg_list              VARCHAR2(1);
2396 
2397 /* Bug 2736392 Begin */
2398     CURSOR cur_struc_ver_wp2
2399    IS
2400      SELECT c.element_version_id
2401        FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
2402             ,pa_proj_elem_ver_structure d
2403       WHERE c.project_id = p_project_id
2404         AND a.structure_type_id = b.structure_type_id
2405         AND b.proj_element_id = c.proj_element_id
2406         AND a.structure_type = p_structure_type
2407      AND d.project_id = c.project_id
2408         AND d.element_version_id = c.element_version_id
2409         AND (d.status_code = 'STRUCTURE_SUBMITTED' OR d.status_code='STRUCTURE_REJECTED' OR d.status_code= 'STRUCTURE_APPROVED')
2410         ;
2411 l_dummy_num number;
2412 /* Bug 2736392 End */
2413 
2414 l_db_parent_task_version_id number; -- Bug 2790275
2415 l_passed_parent_task_ver_id number; -- Bug 2790275
2416 
2417 --bug 2824612
2418   l_wq_planned_quantity     NUMBER;
2419   l_task_type_id            NUMBER;
2420 --bug 2824612
2421 
2422   l_tasks_out     pa_project_pub.task_out_tbl_type ;     --dummy variables.  --bug 2856033
2423   l_process_code           VARCHAR2(30);
2424 
2425   l_request_id    pa_proj_elem_ver_structure.conc_request_id%TYPE; -- Bug 3091798
2426 
2427 /* Added for bug 3290037 */
2428 
2429    CURSOR cur_task_attr IS
2430      SELECT pe.ELEMENT_NUMBER, pe.NAME
2431        FROM pa_proj_elements pe
2432       WHERE pe.proj_element_id = p_task_id
2433         AND pe.object_type = 'PA_TASKS';
2434 
2435    l_task_number       pa_proj_elements.element_number%TYPE;
2436    l_task_name         pa_proj_elements.name%TYPE;
2437 
2438    --rtarway,3666023
2439    l_task_id           pa_proj_elements.PROJ_ELEMENT_ID%TYPE;
2440 
2441 /* End of code for bug 3290037 */
2442 
2443 /* Bug # 3420093 - Adding Progress Management modifications to update_task flow. */
2444 
2445 --Bug 5256359. Changed the type of these pl-sql tbls to SYSTEM.pa_xxx_tbl_type from PA_xxx_1000_xxx.
2446 
2447 --New tbls (suffixed with _prm), created  below will be used as parameters in the call to
2448 --pa_task_pub1.call_add_planning_txns
2449 
2450 l_add_task_ver_ids          SYSTEM.pa_num_tbl_type  := SYSTEM.pa_num_tbl_type();
2451 l_add_planned_effort        SYSTEM.pa_num_tbl_type  := SYSTEM.pa_num_tbl_type();
2452 l_add_start_date            SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
2453 l_add_end_date              SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
2454 l_add_task_ver_ids_prm      PA_NUM_1000_NUM         := PA_NUM_1000_NUM();
2455 l_add_planned_effort_prm    PA_NUM_1000_NUM         := PA_NUM_1000_NUM();
2456 l_add_start_date_prm        PA_DATE_1000_DATE       := PA_DATE_1000_DATE();
2457 l_add_end_date_prm          PA_DATE_1000_DATE       := PA_DATE_1000_DATE();
2458 rec_count                   NUMBER;
2459 
2460         l_del_task_ver_ids      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
2461 
2462     cursor l_task_cur(p_project_id NUMBER, p_struct_ver_id NUMBER) is
2463 /*  --bug 3880482
2464     select
2465     element_version_id,planned_effort,actual_start_date,actual_finish_date
2466     from pa_proj_elem_ver_schedule ppevs, pa_proj_elements ppe
2467     where ppevs.project_id = ppe.project_id
2468     and ppevs.proj_element_id = ppe.proj_element_id
2469     and ppe.object_type = 'PA_TASKS'
2470     and ppevs.project_id = p_project_id;
2471 */
2472     SELECT
2473       ppv.element_version_id
2474      ,ppevs.planned_effort
2475      ,ppevs.actual_start_date
2476      ,ppevs.actual_finish_date
2477     FROM
2478       pa_proj_elem_ver_schedule ppevs
2479      ,pa_proj_element_versions ppv
2480     WHERE
2481       ppevs.project_id = ppv.project_id
2482       and ppevs.proj_element_id = ppv.proj_element_id
2483       and ppv.object_type = 'PA_TASKS'
2484       and ppv.element_version_id = ppevs.element_version_id
2485       and ppv.project_id = p_project_id
2486       and ppv.parent_structure_version_id = p_struct_ver_id;
2487 
2488     l_task_cur_rec      l_task_cur%rowtype;
2489 
2490 /* Bug # 3420093 - Adding Progress Management modifications to update_task flow. */
2491 
2492 --rtarway, 3908013
2493 l_attribute_category          VARCHAR2(150);
2494 l_attribute1                  VARCHAR2(150);
2495 l_attribute2                  VARCHAR2(150);
2496 l_attribute3                  VARCHAR2(150);
2497 l_attribute4                  VARCHAR2(150);
2498 l_attribute5                  VARCHAR2(150);
2499 l_attribute6                  VARCHAR2(150);
2500 l_attribute7                  VARCHAR2(150);
2501 l_attribute8                  VARCHAR2(150);
2502 l_attribute9                  VARCHAR2(150);
2503 l_attribute10                 VARCHAR2(150);
2504 --Bug 6153503
2505 l_attribute11                 VARCHAR2(150);
2506 l_attribute12                 VARCHAR2(150);
2507 l_attribute13                 VARCHAR2(150);
2508 l_attribute14                 VARCHAR2(150);
2509 l_attribute15                 VARCHAR2(150);
2510 l_return_msg                  varchar2(2000);
2511 l_validate_status             varchar2(1);
2512 
2513 -- Begin fix for Bug # 4373055.
2514 
2515 l_str_ver_id            NUMBER:= null;
2516 l_conc_request_id       NUMBER := null;
2517 l_message_name      VARCHAR2(30) := null;
2518 l_message_type      VARCHAR2(30) := null;
2519 
2520 -- End fix for Bug # 4373055.
2521 
2522 -- 7358214
2523 
2524 CURSOR check_hidden_assgn_exists(p_element_version_id IN NUMBER) IS
2525 SELECT 'Y'
2526 FROM pa_resource_assignments ra
2527 WHERE ra.ta_display_flag = 'N'
2528 AND ra.wbs_element_version_id = p_element_version_id
2529 AND rownum = 1;
2530 
2531 l_hidden_assgn VARCHAR2(1);
2532 -- 7358214
2533 BEGIN
2534 
2535       --Clear Error Messages.
2536       IF FND_MSG_PUB.count_msg = 0
2537       THEN
2538           FND_MSG_PUB.initialize;
2539       END IF;
2540 
2541       SAVEPOINT update_task_struc;
2542 
2543       OPEN cur_proj_is_template;
2544       FETCH cur_proj_is_template into l_template_flag;
2545       IF cur_proj_is_template%NOTFOUND THEN
2546          l_template_flag := 'N';
2547       END IF;
2548       CLOSE cur_proj_is_template;
2549 
2550       OPEN cur_rec_ver_num;
2551       FETCH cur_rec_ver_num INTO l_record_version_number;
2552       CLOSE cur_rec_ver_num;
2553 
2554 ---The following code is added to prevent message list re-initialization if there are any messages already on stack.
2555         IF p_calling_module = 'AMG' AND FND_MSG_PUB.count_msg > 0
2556         THEN
2557             l_init_msg_list := 'F';
2558         ELSE
2559             l_init_msg_list := 'T';
2560         END IF;
2561 
2562      /* Added for bug 3290037 */
2563 
2564        OPEN cur_task_attr;
2565        FETCH cur_task_attr INTO l_task_number, l_task_name;
2566        CLOSE cur_task_attr;
2567        --dbms_output.put_line(('Value of p_task_number' ||p_task_number);
2568        --dbms_output.put_line(('Value of l_task_number' ||l_task_number);
2569 
2570       IF ( p_task_number <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_task_number IS NOT NULL)
2571       /* bug#5243018 : Reverting the fix in Bug 4120380
2572       AND nvl(p_task_number,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
2573            nvl(l_task_number,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) --check added for BUg 4120380 Aditi */
2574       THEN
2575        l_task_number := p_task_number;
2576 	 /* bug#5243018 : Reverting the fix in Bug 4120380
2577        -- dbms_output.put_line('printed once');
2578        IF p_calling_module = 'AMG' THEN --Added this clause for Bug 4762147
2579        -- This is required so that when Update_tas_Strcucture is caled from forms , - sign does not get prepended
2580        l_task_number := '-'||p_task_number;
2581        ELSE
2582        l_task_number := p_task_number;
2583        END IF;*/ /** '-' prefixed to p_task_number for Bug 4120380. This is to ensure that the when task_numbers are being interchanged,tasks get saved to the database sucessfully to bypass the constranit PA_PROJ_ELEMENTS_U2.
2584        After updating all the tasks in the script, code again updates the task_number, trimming the '-' added. **/
2585       END IF;
2586        --dbms_output.put_line('Value of l_task_number' ||l_task_number);
2587 
2588       IF ( p_task_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_task_name IS NOT NULL )
2589       THEN
2590        l_task_name := p_task_name;
2591       END IF;
2592 
2593       /* End of code added for bug 3290037 */
2594       --Begin add by rtarway for BUG 3666023
2595       --3663712, changed 'OR' to and 'AND' in following If condition
2596       IF (  p_task_id IS NOT NULL AND p_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  )
2597       THEN
2598              l_task_id := p_task_id;
2599       ELSIF
2600           ( p_pm_task_reference IS NOT NULL AND p_pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
2601       THEN
2602              PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_all
2603                                               (p_pa_project_id     => p_project_id
2604                                               ,p_pm_task_reference => p_pm_task_reference
2605                                               ,p_structure_type    => p_structure_type
2606                                               ,p_out_task_id       => l_task_id
2607                                               ,p_return_status     => l_return_status);
2608 
2609              IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
2610                   THEN
2611                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2612              ELSIF l_return_status = FND_API.G_RET_STS_ERROR
2613                   THEN
2614                     RAISE FND_API.G_EXC_ERROR;
2615              END IF;
2616       END IF;
2617       --End add by rtarway for BUG 3666023
2618 
2619 
2620       PA_TASK_PUB1.Update_Task(
2621          p_calling_module             => p_calling_module
2622         ,p_init_msg_list            => l_init_msg_list
2623         --rtarway for BUG 3666023
2624         --,p_task_id                    => p_task_id
2625         ,p_task_id                    => l_task_id
2626         ,p_task_number                 => l_task_number  /* Modified p_task_number to l_task_number for 3290037 */
2627         ,p_task_name                   => l_task_name    /* Modified p_task_name to l_task_name for 3290037 */
2628         ,p_task_description           => p_task_description
2629         ,p_task_manager_id            => p_TASK_MANAGER_ID
2630         ,p_carrying_out_org_id       => p_carrying_out_organization_id
2631         ,p_pm_product_code            => p_pm_product_code
2632         ,p_pm_task_reference          => p_pm_task_reference
2633         ,p_location_id                 => p_location_id
2634         ,p_priority_code         => p_priority_code
2635         ,p_TYPE_ID                     => p_task_type
2636         ,p_status_code                 => P_STATUS_CODE
2637         ,p_inc_proj_progress_flag     => p_inc_proj_progress_flag
2638         ,p_closed_date                 => p_closed_date
2639         ,p_record_version_number      => l_record_version_number
2640         ,P_UOM_CODE              => P_WQ_UOM_CODE
2641         ,p_work_item_code           => P_WQ_ITEM_CODE
2642 ----- begin Bug 3654243 --------------------------------------------
2643     ,p_Base_Perc_Comp_Deriv_Code => p_base_percent_comp_deriv_code
2644         ,p_gen_etc_src_code          => p_gen_etc_source_code
2645 ----- end Bug 3654243 ----------------------------------------------
2646         ,x_return_status         => l_return_status
2647         ,x_msg_count                   => l_msg_count
2648         ,x_msg_data               => l_msg_data
2649        );
2650 --dbms_output.put_line('Before calling PA_TASK_PUB1.Update_Task l_return_status'||l_return_status);
2651 
2652         IF l_return_status <> 'S'
2653         THEN
2654             PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2655                                  ,p_msg_name       => 'PA_PS_TASK_NOT_UPDATED'
2656                  /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
2657                  ,p_token1         => 'PROJECT'
2658                  ,p_value1         =>  p_project_id
2659                  ,p_token2          => 'TASK'
2660                  ,p_value2          => l_task_id);
2661             raise api_error;
2662         END IF;
2663 
2664         IF p_calling_module = 'AMG' AND
2665            p_ref_task_id is NOT NULL    --to make sure that hierarchy is changed.
2666            AND p_ref_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  --bug 3701460
2667                                         --if p_ref_task_id is null then there is no hierarchy change
2668                                         --It is also true that it is not necessary that the hierarchy is changed even if
2669                                         --it p_ref_task_id is NOT null.
2670         THEN
2671 
2672           IF p_structure_version_id IS NULL OR
2673              p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2674           THEN
2675 
2676               IF p_structure_type = 'FINANCIAL'
2677               THEN
2678                   IF l_template_flag   = 'N'
2679                   THEN
2680                       --get structure version if its a top task
2681                       OPEN cur_struc_ver_fin;
2682                       FETCH cur_struc_ver_fin INTO l_structure_version_id;
2683                       CLOSE cur_struc_ver_fin;
2684                   ELSE
2685                       --For templates its always WORKING_STRUCTURE
2686                       OPEN cur_struc_ver_wp;
2687                       FETCH cur_struc_ver_wp INTO l_structure_version_id;
2688                       CLOSE cur_struc_ver_wp;
2689                   END IF;
2690               ELSE
2691                   OPEN cur_struc_ver_wp;
2692                   FETCH cur_struc_ver_wp INTO l_structure_version_id;
2693                   CLOSE cur_struc_ver_wp;
2694               END IF;
2695           ELSE
2696               l_structure_version_id := p_structure_version_id;
2697           END IF;
2698 
2699       /*** Commented for Bug 2736392 -- Added new code below
2700            This code will never do the intended task because p_structure_version_id and l_structure_version_id
2701            will be null in this case. If a structure version is in approved, submitted or rejected state, then it
2702            will never be returned from cursor cur_struc_ver_wp, so how can we get the status of a null struc ver.
2703 
2704           IF p_structure_version_id IS NOT NULL AND
2705              p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2706           THEN
2707               --Validate the incoming structure version id
2708               PA_PROJECT_STRUCTURE_UTILS.Structure_Version_Name_Or_Id(
2709                       p_structure_id                     => null
2710                      ,p_structure_version_name           => null
2711                      ,p_structure_version_id             => p_structure_version_id
2712                      ,p_check_id_flag                    => 'Y'
2713                      ,x_structure_version_id             => l_structure_version_id
2714                      ,x_return_status                    => l_return_status
2715                      ,x_error_message_code               => l_msg_data
2716                  );
2717               IF l_return_status <> 'S'
2718               THEN
2719                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2720                                 ,p_msg_name       => l_msg_data );
2721                   raise api_error;
2722               END IF;
2723               --bug 2736392
2724               l_str_status_code := PA_PROJECT_STRUCTURE_UTILS.get_structrue_version_status
2725                            ( p_project_id                => p_project_id
2726                              ,p_structure_version_id      => p_structure_version_id );
2727               IF l_str_status_code IS NULL
2728               THEN
2729                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2730                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID' );
2731                   raise api_error;
2732               ELSIF l_str_status_code in ( 'STRUCTURE_SUBMITTED', 'STRUCTURE_REJECTED', 'STRUCTURE_APPROVED' )
2733               THEN
2734                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2735                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID2' );
2736                   raise api_error;
2737               END IF;
2738               --bug 2736392
2739           END IF;
2740         ***/
2741      /* New Code Begin for Bug 2736392 -- Commnted the above code*/
2742 
2743        IF p_structure_version_id IS NOT NULL AND p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2744           THEN
2745               l_str_status_code := PA_PROJECT_STRUCTURE_UTILS.get_structrue_version_status
2746                            ( p_project_id                => p_project_id
2747                              ,p_structure_version_id      => p_structure_version_id );
2748               IF l_str_status_code IS NULL
2749               THEN
2750                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2751                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID' );
2752                   raise api_error;
2753               ELSIF l_str_status_code in ( 'STRUCTURE_SUBMITTED', 'STRUCTURE_REJECTED', 'STRUCTURE_APPROVED' )
2754               THEN
2755                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2756                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID2' );
2757                   raise api_error;
2758               END IF;
2759        ELSIF l_structure_version_id IS  NULL
2760           THEN
2761                  OPEN cur_struc_ver_wp2;
2762                  FETCH cur_struc_ver_wp2 INTO l_dummy_num;
2763                  CLOSE cur_struc_ver_wp2;
2764 
2765            IF l_dummy_num is NOT NULL THEN
2766                        PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2767                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID2' );
2768                     raise api_error;
2769            ELSE
2770                         PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2771                                       ,p_msg_name       => 'PA_PS_INV_STR_VER_ID' );
2772                        raise api_error;
2773            END IF;
2774           END IF;
2775 
2776         /* New Code End for Bug 2736392 */
2777 
2778 
2779             --get the task version id of the reference task
2780             OPEN cur_pa_task_ver( l_structure_version_id, p_ref_task_id );
2781             FETCH cur_pa_task_ver INTO l_ref_task_version_id, l_record_version_number;
2782             CLOSE cur_pa_task_ver;
2783             --get task version id of the task being moved or updated
2784             --rtarway, 3666023, replace by l_task_id
2785             --OPEN cur_pa_task_ver( l_structure_version_id, p_task_id );
2786             OPEN cur_pa_task_ver( l_structure_version_id, l_task_id );
2787             FETCH cur_pa_task_ver INTO l_task_version_id, l_record_version_number;
2788             CLOSE cur_pa_task_ver;
2789 
2790 
2791             IF p_structure_type = 'FINANCIAL'
2792             THEN
2793                --get the parent of the tak id
2794                --rtarway, 3666023, replace by l_task_id
2795                --OPEN cur_pa_tasks( p_task_id );
2796                OPEN cur_pa_tasks( l_task_id );
2797                FETCH cur_pa_tasks INTO l_parent_task_id;
2798                CLOSE cur_pa_tasks;
2799 
2800                --get the parent of the ref tak id
2801                OPEN cur_pa_tasks( p_ref_task_id );
2802                FETCH cur_pa_tasks INTO l_parent_of_ref_task_id;
2803                CLOSE cur_pa_tasks;
2804 
2805             ELSIF p_structure_type = 'WORKPLAN'
2806             THEN
2807               --get the parent task version id of the task version id
2808               OPEN cur_pa_obj_rel( l_task_version_id ) ;
2809               FETCH cur_pa_obj_rel INTO v_parent_task_version_id;
2810               CLOSE cur_pa_obj_rel;
2811 
2812 
2813               --get the parent task id of the parent task version id
2814               OPEN cur_pa_proj_elem_ver( v_parent_task_version_id ) ;
2815               FETCH cur_pa_proj_elem_ver INTO l_parent_task_id;
2816               CLOSE cur_pa_proj_elem_ver;
2817 
2818 
2819 
2820               --get the parent task version id of the ref task version id
2821               OPEN cur_pa_obj_rel( l_ref_task_version_id ) ;
2822               FETCH cur_pa_obj_rel INTO v_parent_task_ver_id_of_ref;
2823               CLOSE cur_pa_obj_rel;
2824 
2825 
2826               --get the parent task id of the parent ref task version id
2827               OPEN cur_pa_proj_elem_ver( v_parent_task_ver_id_of_ref ) ;
2828               FETCH cur_pa_proj_elem_ver INTO l_parent_of_ref_task_id;
2829               CLOSE cur_pa_proj_elem_ver;
2830 
2831 
2832             END IF;
2833 
2834             IF p_ref_task_id = l_parent_task_id
2835             THEN
2836                l_peer_or_sub := 'SUB';
2837             ELSIF l_parent_of_ref_task_id = l_parent_task_id
2838             THEN
2839                l_peer_or_sub := 'PEER';
2840             ELSE
2841                l_peer_or_sub := 'PEER';
2842                OPEN cur_pa_peer_task_above( l_structure_version_id, l_task_version_id );
2843                FETCH cur_pa_peer_task_above INTO l_ref_task_version_id;
2844                CLOSE cur_pa_peer_task_above;
2845             END IF;
2846 
2847             IF l_ref_task_version_id IS NOT NULL
2848             THEN
2849 
2850           /* Bug 2790275 Begin */
2851               OPEN cur_pa_obj_rel( l_task_version_id ) ;
2852               FETCH cur_pa_obj_rel INTO l_db_parent_task_version_id;
2853               CLOSE cur_pa_obj_rel;
2854 
2855               OPEN cur_pa_obj_rel( l_ref_task_version_id ) ;
2856               FETCH cur_pa_obj_rel INTO l_passed_parent_task_ver_id;
2857               CLOSE cur_pa_obj_rel;
2858 
2859            IF ((l_peer_or_sub = 'SUB' AND l_ref_task_version_id <> l_db_parent_task_version_id)
2860                                        OR
2861            (l_peer_or_sub = 'PEER' AND l_passed_parent_task_ver_id <> l_db_parent_task_version_id))
2862            THEN
2863           /* Bug 2790275 End */
2864 
2865          -- Check for the status of the process only if the wbs is going to change.
2866          -- PA L Changes 3010538
2867          -- Need not use map_new_amg_msg api as no context is involved and no _amg messages
2868          -- have been created.
2869          IF p_calling_module = 'AMG' THEN
2870 
2871 -- Begin fix for Bug # 4373055.
2872 
2873 /*
2874 
2875               l_process_code :=
2876                                 PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_CODE(p_project_id => p_project_id
2877                                                                                   ,p_structure_type => p_structure_type );
2878                IF nvl(l_process_code,'-1') = 'WUP' THEN
2879 
2880                     l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => p_project_id  -- Bug 3091798
2881                                                                                   ,p_structure_type => p_structure_type );
2882                     PA_UTILS.ADD_MESSAGE
2883                           (p_app_short_name => 'PA',
2884                           -- p_msg_name       => 'PA_PS_VD_UPDWBS_PRC_INPROC'); Bug 3091798
2885                            p_msg_name       => 'PA_PS_UPDWBS_PRC_INPROC_AMG',  -- Bug 3091798. Message includes the request id.
2886                            p_token1         => 'REQUESTID',
2887                            p_value1         => l_request_id);
2888 
2889                   raise api_error;
2890 
2891                ELSIF nvl(l_process_code,'-1') = 'WUE' THEN
2892                     l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => p_project_id  --Bug 3091798
2893                                                                                   ,p_structure_type => p_structure_type );
2894                     PA_UTILS.ADD_MESSAGE
2895                           (p_app_short_name => 'PA',
2896                        --    p_msg_name       => 'PA_PS_VD_UPD_WBS_PRC_ERR');
2897                            p_msg_name       => 'PA_PS_UPDWBS_PRC_ERR_AMG',  -- Bug 3091798. Message includes the request id.
2898                            p_token1         => 'REQUESTID',
2899                            p_value1         => l_request_id);
2900 
2901                   raise api_error;
2902 
2903                END IF;
2904 
2905 */
2906 
2907         PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_MSG(
2908         p_project_id              => p_project_id
2909         , p_structure_type        => p_structure_type
2910         , p_structure_version_id  => null
2911         , p_context               => 'UPDATE_AMG'
2912         , x_message_name          => l_message_name
2913         , x_message_type          => l_message_type
2914         , x_structure_version_id  => l_str_ver_id
2915         , x_conc_request_id       => l_conc_request_id);
2916 
2917 
2918         if l_message_name is not null then
2919 
2920                      PA_UTILS.ADD_MESSAGE(
2921                      p_app_short_name => 'PA'
2922                      , p_msg_name       => l_message_name
2923                      , p_token1         => 'REQUESTID'
2924                      , p_value1         => l_conc_request_id);
2925 
2926                       RAISE FND_API.G_EXC_ERROR;
2927         end if;
2928 
2929 -- End fix for Bug # 4373055.
2930 
2931          END IF ;
2932 
2933          -- PA L Changes 3010538
2934 
2935           PA_TASK_PUB1.move_task_version(
2936                     p_calling_module            => p_calling_module
2937                    ,p_init_msg_list            => l_init_msg_list
2938                    ,p_structure_version_id      => l_structure_version_id
2939                    ,p_task_version_id           => l_task_version_id
2940                    ,p_ref_task_version_id    => l_ref_task_version_id
2941                    ,p_peer_or_sub          => l_peer_or_sub
2942                    ,p_record_version_number     => l_record_version_number
2943                    ,x_return_status             => l_return_status
2944                    ,x_msg_count                    => l_msg_count
2945                    ,x_msg_data                     => l_msg_data
2946                  );
2947 
2948                IF l_return_status <> 'S'
2949                THEN
2950                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2951                                         ,p_msg_name       => 'PA_PS_TASK_NOT_UPDATED'
2952                     /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
2953                         ,p_token1         => 'PROJECT'
2954                         ,p_value1         =>  p_project_id
2955                         ,p_token2          => 'TASK'
2956                         ,p_value2          => l_task_id);
2957                   raise api_error;
2958                END IF;
2959               END IF; -- Bug 2790275
2960             END IF;
2961         END IF;  --< p-calling_module = 'AMG' >>
2962 
2963         -- Bug#Bug#3747312
2964         -- Commenting the below if statement as cur_pa_proj_elem_vers2
2965         -- will take care of not calling the WORKPLAN related API
2966         -- in FINANCIAL alone structure.
2967 
2968         --IF p_structure_type = 'WORKPLAN'
2969         --THEN
2970             --get task version id of the task being moved or updated if
2971             IF l_task_version_id IS NULL
2972             THEN
2973                --rtarway, 3666023, replace by l_task_id
2974                --OPEN cur_pa_task_ver( p_structure_version_id, p_task_id );       --structure version id should be provided for a workplan structure
2975                OPEN cur_pa_task_ver( p_structure_version_id, l_task_id );
2976                FETCH cur_pa_task_ver INTO l_task_version_id, l_record_version_number;
2977                CLOSE cur_pa_task_ver;
2978             END IF;
2979 
2980          --END IF;   --<< p_structrue_type >
2981 
2982 
2983           OPEN cur_pa_proj_elem_vers2(l_task_version_id);
2984           FETCH cur_pa_proj_elem_vers2 INTO l_dummy_char;
2985           IF cur_pa_proj_elem_vers2%FOUND
2986           THEN
2987 
2988             OPEN cur_proj_sch( l_task_version_id );
2989             FETCH cur_proj_sch INTO l_pev_schedule_id, l_record_version_number;
2990             CLOSE cur_proj_sch;
2991 
2992             -- xxlu added DFF attributes
2993             OPEN cur_ver_sch_attr_rec(l_task_version_id);
2994             FETCH cur_ver_sch_attr_rec INTO l_ver_sch_attr_rec;
2995             CLOSE cur_ver_sch_attr_rec;
2996 
2997                   --bug  2824612
2998 
2999                   SELECT type_id  INTO l_task_type_id
3000                     FROM pa_proj_elements
3001                     --WHERE proj_element_id = p_task_id, rtarway, BUG 3666023, replace by l_task_id
3002                     WHERE proj_element_id = l_task_id
3003                     AND project_id = p_project_id;
3004 
3005                   IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_wq_enabled(l_task_type_id) OR
3006                       'N' = PA_PROGRESS_UTILS.get_project_wq_flag(p_project_id)) THEN
3007                       IF (P_PLANNED_WORK_QUANTITY <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND P_PLANNED_WORK_QUANTITY IS NOT NULL) THEN
3008                           l_wq_planned_quantity := NULL;
3009                       END IF;
3010                   ELSE
3011                      l_wq_planned_quantity := P_PLANNED_WORK_QUANTITY;    --bug 2826992
3012                   END IF;
3013 
3014                   --bug  2824612
3015 
3016                     --Bug 6153503 start
3017                   -- rtarway, BUG 3908013
3018                     if (--p_attribute_category is null or
3019                         p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3020                     then
3021                          l_attribute_category :=  l_ver_sch_attr_rec.attribute_category;
3022                     else
3023                           l_attribute_category :=  p_attribute_category;
3024                     end if;
3025 
3026 
3027 
3028                     if (--p_attribute1 is null or
3029                         p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3030                     then
3031                          l_attribute1  :=  l_ver_sch_attr_rec.attribute1;
3032                     else
3033                          l_attribute1  :=  p_attribute1;
3034                     end if;
3035 
3036 
3037 
3038                     if (--p_attribute2 is null or
3039                         p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3040                     then
3041                          l_attribute2  :=  l_ver_sch_attr_rec.attribute2;
3042                     else
3043                          l_attribute2  :=  p_attribute2;
3044                     end if;
3045 
3046 
3047                     if (--p_attribute3 is null or
3048                         p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3049                     then
3050                          l_attribute3 :=  l_ver_sch_attr_rec.attribute3;
3051                     else
3052                           l_attribute3 :=  p_attribute3;
3053                     end if;
3054 
3055                     if (--p_attribute4 is null or
3056                         p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3057                     then
3058                          l_attribute4 :=  l_ver_sch_attr_rec.attribute4;
3059                     else
3060                           l_attribute4 :=  p_attribute4;
3061                     end if;
3062 
3063                     if (--p_attribute5 is null or
3064                         p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3065                     then
3066                          l_attribute5 :=  l_ver_sch_attr_rec.attribute5;
3067                     else
3068                           l_attribute5 :=  p_attribute5;
3069                     end if;
3070 
3071                     if (--p_attribute6 is null or
3072                         p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3073                     then
3074                          l_attribute6 :=  l_ver_sch_attr_rec.attribute6;
3075                     else
3076                           l_attribute6 :=  p_attribute6;
3077                     end if;
3078 
3079                     if (--p_attribute7 is null or
3080                         p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)  -- Changed for Bug #6153681
3081                     then
3082                          l_attribute7 :=  l_ver_sch_attr_rec.attribute7;
3083                     else
3084                           l_attribute7 :=  p_attribute7;
3085                     end if;
3086 
3087                     if (--p_attribute8 is null or
3088                         p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3089                     then
3090                          l_attribute8 :=  l_ver_sch_attr_rec.attribute8;
3091                     else
3092                           l_attribute8  :=  p_attribute8;
3093                     end if;
3094 
3095                     if (--p_attribute9 is null or
3096                         p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3097                     then
3098                          l_attribute9 :=  l_ver_sch_attr_rec.attribute9;
3099                     else
3100                          l_attribute9 :=  p_attribute9;
3101                     end if;
3102 
3103                     if (--p_attribute10 is null or
3104                         p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3105                     then
3106                          l_attribute10 :=  l_ver_sch_attr_rec.attribute10;
3107                     else
3108                           l_attribute10 :=  p_attribute10;
3109                     end if;
3110 
3111                     if (--p_attribute10 is null or
3112                         p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3113                     then
3114                          l_attribute11 :=  l_ver_sch_attr_rec.attribute11;
3115                     else
3116                           l_attribute11 :=  p_attribute11;
3117                     end if;
3118 
3119                     if (--p_attribute10 is null or
3120                         p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3121                     then
3122                          l_attribute12 :=  l_ver_sch_attr_rec.attribute12;
3123                     else
3124                           l_attribute12 :=  p_attribute12;
3125                     end if;
3126 
3127                     if (--p_attribute10 is null or
3128                         p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3129                     then
3130                          l_attribute13 :=  l_ver_sch_attr_rec.attribute13;
3131                     else
3132                           l_attribute13 :=  p_attribute13;
3133                     end if;
3134 
3135                     if (--p_attribute10 is null or
3136                         p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3137                     then
3138                          l_attribute14 :=  l_ver_sch_attr_rec.attribute14;
3139                     else
3140                           l_attribute14 :=  p_attribute14;
3141                     end if;
3142 
3143 
3144                     if (--p_attribute10 is null or
3145                         p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3146                     then
3147                          l_attribute15 :=  l_ver_sch_attr_rec.attribute15;
3148                     else
3149                           l_attribute15 :=  p_attribute15;
3150                     end if;
3151 
3152 
3153                   --if added while fixing BUG 3919800
3154                   --Add validation for PA_PROJ_ELEM_VER_SCH_DESC_FLEX
3155                  -- if l_attribute_category is not null and l_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3156                  -- then
3157                        pa_task_utils.validate_flex_fields(
3158                        p_desc_flex_name        => 'PA_PROJ_ELEM_VER_SCH_DESC_FLEX'
3159                       ,p_attribute_category    => l_attribute_category
3160                       ,p_attribute1            => l_attribute1
3161                       ,p_attribute2            => l_attribute2
3162                       ,p_attribute3            => l_attribute3
3163                       ,p_attribute4            => l_attribute4
3164                       ,p_attribute5            => l_attribute5
3165                       ,p_attribute6            => l_attribute6
3166                       ,p_attribute7            => l_attribute7
3167                       ,p_attribute8            => l_attribute8
3168                       ,p_attribute9            => l_attribute9
3169                       ,p_attribute10           => l_attribute10
3170                       ,p_attribute11           => l_attribute11
3171                       ,p_attribute12           => l_attribute12
3172                       ,p_attribute13           => l_attribute13
3173                       ,p_attribute14           => l_attribute14
3174                       ,p_attribute15           => l_attribute15
3175                       ,p_RETURN_msg            => l_return_msg
3176                       ,p_validate_status       => l_validate_status
3177                       );
3178                  --end if;
3179 
3180                   IF l_validate_status = 'N'
3181                     THEN
3182                          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3183                          THEN
3184                               pa_interface_utils_pub.map_new_amg_msg
3185                                         ( p_old_message_code => 'PA_INVALID_FF_VALUES'
3186                                         ,p_msg_attribute    => 'CHANGE'
3187                                         ,p_resize_flag      => 'N'
3188                                         ,p_msg_context      => 'FLEX'
3189                                         ,p_attribute1       => l_return_msg
3190                                         ,p_attribute2       => ''
3191                                         ,p_attribute3       => ''
3192                                         ,p_attribute4       => ''
3193                                         ,p_attribute5       => '');
3194                         END IF;
3195                     RAISE FND_API.G_EXC_ERROR;
3196                   END IF;
3197 
3198             --Bug 6153503 end
3199 --End add rtarway, 3908013
3200 
3201 
3202 
3203             PA_TASK_PUB1.Update_Schedule_Version(
3204                     p_calling_module          => p_calling_module
3205                    ,p_init_msg_list            => l_init_msg_list
3206                    ,p_pev_schedule_id         => l_pev_schedule_id
3207                    ,p_calendar_id              => p_calendar_id
3208                    ,p_scheduled_start_date   => p_scheduled_start_date
3209                    ,p_scheduled_end_date           => p_scheduled_finish_date
3210                    ,p_obligation_start_date     => p_obligation_start_date
3211                    ,p_obligation_end_date          => p_obligation_finish_date
3212                    ,p_actual_start_date       => p_actual_start_date
3213                    ,p_actual_finish_date           => p_actual_finish_date
3214                    ,p_estimate_start_date          => p_estimated_start_date
3215                    ,p_estimate_finish_date   => p_estimated_finish_date
3216                    ,p_duration                 => p_duration
3217                    ,p_early_start_date        => p_early_start_date
3218                    ,p_early_end_date          => p_early_finish_date
3219                    ,p_late_start_date         => p_late_start_date
3220                    ,p_late_end_date           => p_late_finish_date
3221                    ,p_milestone_flag          => p_milestone_flag
3222                    ,p_critical_flag                 => p_critical_flag
3223                    ,p_WQ_PLANNED_QUANTITY     => l_wq_planned_quantity   --bug  2824612
3224                    ,p_PLANNED_EFFORT          => p_planned_effort
3225                    ,p_record_version_number    => l_record_version_number
3226                    --Changed the param names to l_....rtarway, BUG 3908013
3227                    ,p_attribute_category          => l_attribute_category
3228                    ,p_attribute1                => l_attribute1
3229                    ,p_attribute2                => l_attribute2
3230                    ,p_attribute3                => l_attribute3
3231                    ,p_attribute4                => l_attribute4
3232                    ,p_attribute5                => l_attribute5
3233                    ,p_attribute6                => l_attribute6
3234                    ,p_attribute7                => l_attribute7
3235                    ,p_attribute8                => l_attribute8
3236                    ,p_attribute9                => l_attribute9
3237                    ,p_attribute10             => l_attribute10
3238                    --end rtarway, BUG 3908013
3239                    --Bug 6153503
3240                    ,p_attribute11             => l_attribute11--l_ver_sch_attr_rec.attribute11
3241                    ,p_attribute12             => l_attribute12--l_ver_sch_attr_rec.attribute12
3242                    ,p_attribute13             => l_attribute13--l_ver_sch_attr_rec.attribute13
3243                    ,p_attribute14             => l_attribute14--l_ver_sch_attr_rec.attribute14
3244                    ,p_attribute15             => l_attribute15--l_ver_sch_attr_rec.attribute15
3245 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
3246                    ,p_ext_act_duration        => p_ext_act_duration
3247                    ,p_ext_remain_duration     => p_ext_remain_duration
3248                    ,p_ext_sch_duration        => p_ext_sch_duration
3249 -- (end venkat) new params for bug #3450684 ------------------------------------------------
3250 
3251 
3252 -- begin Bug 3654243 -----------------------------------------------------------------------
3253         ,p_def_sch_tool_tsk_type_code =>   p_sch_tool_tsk_type_code
3254         ,p_constraint_type_code  =>        p_constraint_type_code
3255         ,p_constraint_date =>              p_constraint_date
3256         ,p_free_slack =>                   p_free_slack
3257         ,p_total_slack =>                  p_total_slack
3258         ,p_effort_driven_flag =>           p_effort_driven_flag
3259         ,p_level_assignments_flag =>       p_level_assignments_flag
3260 -- end Bug 3654243 -------------------------------------------------------------------------
3261                    ,x_return_status                 => l_return_status
3262                    ,x_msg_count                => l_msg_count
3263                    ,x_msg_data                 => l_msg_data
3264                );
3265                -- end xxlu changes                   ,
3266             IF l_return_status <> 'S'
3267             THEN
3268                PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3269                                     ,p_msg_name       => 'PA_PS_TASK_NOT_UPDATED'
3270                                 /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
3271                         ,p_token1         => 'PROJECT'
3272                     ,p_value1         =>  p_project_id
3273                     ,p_token2          => 'TASK'
3274                     ,p_value2          => l_task_id);
3275                raise api_error;
3276             END IF;
3277 
3278               --The following API should NOT be called if CREATE_TASK_STRUCTURE is called from AMG.
3279               --AMG recalculates the weightings once all the tasks are created.
3280               IF p_calling_module = 'FORMS'
3281               THEN
3282 /*                      PA_PROJ_TASK_STRUC_PUB.rollup_dates(
3283                             p_tasks_in             => l_tasks_out            --null if called for one task
3284                            ,p_task_version_id      => l_task_version_id
3285                            ,p_structure_version_id => l_structure_version_id
3286                            ,p_project_id           => p_project_id
3287                            ,x_msg_count            => l_msg_count
3288                            ,x_msg_data             => l_msg_data
3289                            ,x_return_status        => l_return_status
3290                        );
3291                       IF l_return_status <> 'S'
3292                       THEN
3293                           raise api_error;
3294                       END IF;
3295 */
3296 null;
3297               END IF;
3298         END IF;  --< cur_pa_proj_elem_vers2 >
3299 
3300 /* Bug # 3420093 - Adding Progress Management modifications to update_task flow. */
3301 
3302     -- Bug#3747312
3303     -- Added PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN = 'N'
3304     -- as the add_planning_txn/delete_planning_txn should be called in
3305     -- SHARED case and for SPLIT case if p_structure_type is passed as
3306     -- WORKPLAN.
3307 
3308 
3309 /* Commenting for bug 7358214
3310 
3311     if (p_structure_type = 'WORKPLAN' OR nvl(PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( p_project_id ),'N') = 'N')then
3312 
3313             for l_task_cur_rec in l_task_cur(p_project_id, l_structure_version_id)
3314             loop
3315                 if (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(l_task_cur_rec.element_version_id) = 'Y') then
3316                 l_add_task_ver_ids.extend(1);
3317                 l_add_planned_effort.extend(1);
3318                 l_add_start_date.extend(1);
3319                 l_add_end_date.extend(1);
3320 
3321                 l_add_task_ver_ids(l_add_task_ver_ids.count):= l_task_cur_rec.element_version_id;
3322                 l_add_planned_effort(l_add_planned_effort.count):= l_task_cur_rec.planned_effort;
3323                 l_add_start_date(l_add_start_date.count):= l_task_cur_rec.actual_start_date;
3324                 l_add_end_date(l_add_end_date.count):= l_task_cur_rec.actual_finish_date;
3325             else
3326                 l_del_task_ver_ids.extend(1);
3327                 l_del_task_ver_ids(l_del_task_ver_ids.count):= l_task_cur_rec.element_version_id;
3328             end if;
3329         end loop;
3330     end if;
3331 
3332     -- Calling pa_task_pub1.call_add_planning_txns for lowest level tasks.
3333  --Bug 5256359. Introduced the loop to call pa_task_pub1.call_add_planning_txns
3334 --for set of 1000 records.
3335 rec_count:=0;
3336 for i  in 1..l_add_task_ver_ids.count loop
3337 
3338         rec_count := rec_count+1;
3339  	l_add_task_ver_ids_prm.extend;
3340  	l_add_planned_effort_prm.extend;
3341  	l_add_start_date_prm.extend;
3342  	l_add_end_date_prm.extend;
3343 
3344         l_add_task_ver_ids_prm(rec_count)  :=l_add_task_ver_ids(i);
3345  	l_add_planned_effort_prm(rec_count):=l_add_planned_effort(i);
3346  	l_add_start_date_prm(rec_count)    :=l_add_start_date(i);
3347  	l_add_end_date_prm(rec_count)      :=l_add_end_date(i);
3348 
3349  	if rec_count=1000 OR
3350  	   i=l_add_task_ver_ids.count then
3351     begin
3352             pa_task_pub1.call_add_planning_txns(
3353             p_tasks_ver_ids                  => l_add_task_ver_ids_prm,
3354             p_planned_effort                 => l_add_planned_effort_prm,
3355             p_project_id                     => p_project_id,
3356             p_structure_version_id           => l_structure_version_id,  --replace p_structure_version_id, bug 3838186
3357             p_start_date                     => l_add_start_date_prm,
3358             p_end_date                       => l_add_end_date_prm,
3359             p_pm_product_code                => p_pm_product_code,   --bug 3811243
3360             x_return_status                  => l_return_status,
3361             x_msg_count                      => l_msg_count,
3362             x_msg_data                       => l_msg_data
3363             );
3364     exception
3365             when others then
3366                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'pa_project_pub',
3367                                 p_procedure_name => 'CREATE_PROJECT',
3368                                         p_error_text     => substrb('PA_TASK_PUB1.CALL_ADD_PLANNING_TXNS:'||sqlerrm,1,240));
3369             raise fnd_api.g_exc_error;
3370         end;
3371 
3372 	l_add_task_ver_ids_prm   := PA_NUM_1000_NUM();
3373  	l_add_planned_effort_prm := PA_NUM_1000_NUM();
3374  	l_add_start_date_prm     := PA_DATE_1000_DATE();
3375  	l_add_end_date_prm       := PA_DATE_1000_DATE();
3376 
3377  	rec_count:=0;
3378 
3379 	end if;
3380 
3381 end loop;
3382 --End of loop for bug 5256359
3383 
3384 */
3385 -- End of commenting for bug 7358214
3386 
3387 -- Added for bug 7358214
3388 IF (p_structure_type = 'WORKPLAN' OR
3389 nvl(PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( p_project_id ),'N') = 'N')
3390 THEN
3391   FOR l_task_cur_rec in l_task_cur(p_project_id, l_structure_version_id) LOOP
3392 
3393     -- Bug 7437034 (Initialize l_hidden_assgn to N for each iteration)
3394     l_hidden_assgn := 'N';
3395 
3396     OPEN  check_hidden_assgn_exists(l_task_cur_rec.element_version_id);
3397     FETCH check_hidden_assgn_exists into l_hidden_assgn;
3398     CLOSE check_hidden_assgn_exists;
3399 
3400     IF PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(l_task_cur_rec.element_version_id)
3401 = 'N' AND l_hidden_assgn = 'Y' THEN
3402         l_del_task_ver_ids.extend(1);
3403         l_del_task_ver_ids(l_del_task_ver_ids.count):=
3404 l_task_cur_rec.element_version_id;
3405     END IF;
3406   END LOOP;
3407 END IF;
3408 -- End of bug 7358214
3409 
3410     -- Calling pa_fp_planning_transaction_pub.delete_planning_transactions for higher level tasks.
3411 
3412      IF l_del_task_ver_ids.exists(1) THEN -- Bug 7358214
3413        begin
3414            pa_fp_planning_transaction_pub.delete_planning_transactions
3415            (
3416             p_context                      => 'WORKPLAN'
3417            ,p_task_or_res                  => 'TASKS'
3418            ,p_element_version_id_tbl       => l_del_task_ver_ids
3419            ,x_return_status                => l_return_status
3420            ,x_msg_count                    => l_msg_count
3421            ,x_msg_data                     => l_msg_data
3422           );
3423        exception
3424            when others then
3425                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'pa_project_pub',
3426                                         p_procedure_name => 'CREATE_PROJECT',
3427                                         p_error_text     => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.DELETE_PLANNING_TRANSACTIONS:'||SQLERRM,1,240));
3428            raise fnd_api.g_exc_error;
3429        end;
3430      END IF ; --bug 7358214
3431 /* Bug # 3420093 - Adding Progress Management modifications to update_task flow. */
3432 
3433 -- Progress Management Changes. Bug # 3420093.
3434 
3435 /* Commenting out the condition to check if workplan versioning is enabled for the project
3436    as PA_TASK_PUB1.update_task_det_sch_info() should be called for both versioning enabled
3437    and versioning disabled projects. */
3438 
3439 /* if (PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED(p_project_id) = 'Y') then */
3440 
3441 /* Calling  API: pa_task_pub1.update_task_det_sch_info() only if calling module is not 'FORMS'. */
3442 
3443    if p_calling_module <> 'FORMS' then
3444 
3445     pa_task_pub1.update_task_det_sch_info(
3446     p_calling_module    =>      p_calling_module
3447     ,p_task_ver_id      =>  l_task_version_id
3448     ,p_project_id       =>  p_project_id
3449     ,p_planned_effort   =>      p_planned_effort
3450     ,p_ETC_effort       =>  p_etc_effort
3451     ,p_structure_version_id =>  p_structure_version_id
3452     ,p_percent_complete =>  p_percent_complete
3453     ,x_return_status    =>  x_return_status
3454     ,x_msg_count        =>  x_msg_count
3455     ,x_msg_data     =>  x_msg_data
3456     );
3457 
3458    end if;
3459 
3460 /* end if; */
3461 
3462 -- Progress Management Changes. Bug # 3420093.
3463 
3464         x_return_status := FND_API.G_RET_STS_SUCCESS;
3465 EXCEPTION
3466 WHEN API_ERROR THEN
3467   x_return_status := FND_API.G_RET_STS_ERROR;
3468   rollback to update_task_struc;
3469 WHEN OTHERS THEN
3470   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3471   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
3472                           p_procedure_name => 'update_task_structure',
3473                           p_error_text     => SUBSTRB(SQLERRM,1,240));
3474   rollback to update_task_struc;
3475   raise;
3476 END update_task_structure;
3477 
3478 -- API name                      : delete_task_structure
3479 -- Type                          : PL/sql Public procedure
3480 -- Pre-reqs                      : None
3481 -- Return Value                  : N/A
3482 -- Prameters
3483 --   p_calling_module                   IN VARCHAR2
3484 --  ,p_task_id                          IN NUMBER
3485 --  ,p_record_version_number           IN NUMBER
3486 --  ,x_msg_count                        OUT NUMBER
3487 --  ,x_msg_data                         OUT VARCHAR2
3488 --  ,x_return_status                    OUT VARCHAR2--
3489 --  History
3490 --
3491 --  25-APR-02   MAansari             -Created
3492 --
3493 --  Notes: This api is called from form PAXPREPR.fmb ON-DELETE of tasks block.
3494 --         The call is in PA_PROJECT_STRUCTURES.delete_task_structure API.
3495 
3496 PROCEDURE delete_task_structure
3497 (
3498    p_calling_module                   IN VARCHAR2
3499   ,p_task_id                          IN NUMBER
3500   ,p_task_version_id                  IN NUMBER := -9999    --mandatory for workplan task version
3501   ,p_project_id                  IN NUMBER := -9999      --bug 2765115
3502   ,p_structure_type              IN VARCHAR2 := 'FINANCIAL'   --bug 3301192
3503   ,x_msg_count                        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
3504   ,x_msg_data                         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3505   ,x_return_status                    OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
3506 IS
3507 
3508   l_return_status       VARCHAR2(1);
3509   l_msg_count           NUMBER;
3510   l_msg_data            VARCHAR2(2000);
3511   l_task_version_id     NUMBER;
3512   l_record_version_number NUMBER;
3513   API_ERROR            EXCEPTION;
3514 
3515   CURSOR cur_task_ver_id IS
3516        SELECT element_version_id, record_version_number
3517          FROM pa_proj_element_versions ppev
3518         WHERE proj_element_id = p_task_id
3519           AND object_type = 'PA_TASKS'
3520           AND parent_structure_version_id = PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_FIN_STRUC_VER_ID( p_project_id );   -- bug 2765115
3521 
3522   CURSOR cur_task_ver_id2 IS
3523        SELECT record_version_number
3524          FROM pa_proj_element_versions ppev
3525         WHERE element_version_id = p_task_version_id
3526           AND object_type = 'PA_TASKS';
3527 
3528 -- bug 2765115
3529   CURSOR cur_pa_proj
3530   IS
3531     SELECT template_flag from pa_projects_all where project_id = p_project_id;
3532 
3533    l_template_flag   VARCHAR2(1) := 'N';
3534 
3535   CURSOR cur_task_ver_id3 IS
3536        SELECT element_version_id, record_version_number
3537          FROM pa_proj_element_versions ppev
3538         WHERE proj_element_id = p_task_id
3539           AND object_type = 'PA_TASKS'
3540           AND project_id = p_project_id;
3541 -- bug 2765115
3542 
3543 
3544 BEGIN
3545 
3546       --Clear Error Messages.
3547       IF FND_MSG_PUB.count_msg = 0
3548       THEN
3549           FND_MSG_PUB.initialize;
3550       END IF;
3551 
3552       SAVEPOINT delete_task_struc;
3553 
3554       IF p_task_version_id IS NULL OR
3555          p_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
3556          p_task_version_id = -9999
3557       THEN
3558 
3559 -- bug 2765115
3560           OPEN cur_pa_proj;
3561           FETCH  cur_pa_proj INTO l_template_flag;
3562           CLOSE cur_pa_proj;
3563 -- bug 2765115
3564 
3565           IF l_template_flag = 'N'   -- bug 2765115
3566           THEN
3567               OPEN cur_task_ver_id;
3568               FETCH cur_task_ver_id INTO l_task_version_id, l_record_version_number;
3569               CLOSE cur_task_ver_id;
3570           END IF;                    -- bug 2765115
3571 
3572 -- bug 2765115
3573           IF l_task_version_id IS NULL
3574           THEN
3575               OPEN cur_task_ver_id3;
3576               FETCH cur_task_ver_id3 INTO l_task_version_id, l_record_version_number;
3577               CLOSE cur_task_ver_id3;
3578           END IF;
3579 -- bug 2765115
3580 
3581       ELSE
3582           OPEN cur_task_ver_id2;
3583           FETCH cur_task_ver_id2 INTO l_record_version_number;
3584           CLOSE cur_task_ver_id2;
3585 
3586           l_task_version_id := p_task_version_id;
3587       END IF;
3588 
3589       IF l_task_version_id > 0
3590       THEN
3591           PA_TASK_PUB1.Delete_Task_Version(
3592                p_calling_module                   => p_calling_module
3593               ,p_structure_type                   => p_structure_type   --bug 3301192
3594               ,p_task_version_id                  => l_task_version_id
3595               ,p_record_version_number           => l_record_version_number
3596               ,x_return_status                    => l_return_status
3597               ,x_msg_count                         => l_msg_count
3598               ,x_msg_data                          => l_msg_data
3599          );
3600       END IF;
3601 
3602       IF l_return_status <> 'S'
3603       THEN
3604          PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3605                               ,p_msg_name       => 'PA_PS_TASK_NOT_DELETED');
3606          raise api_error;
3607       END IF;
3608       x_return_status := FND_API.G_RET_STS_SUCCESS;
3609 
3610 EXCEPTION
3611 WHEN API_ERROR THEN
3612   x_return_status := FND_API.G_RET_STS_ERROR;
3613   rollback to delete_task_struc;
3614 WHEN OTHERS THEN
3615   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3616   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
3617                           p_procedure_name => 'delete_task_structure',
3618                           p_error_text     => SUBSTRB(SQLERRM,1,240));
3619   rollback to delete_task_struc;
3620   raise;
3621 END delete_task_structure;
3622 
3623 -- API name                      : delete_project_structure
3624 -- Type                          : PL/sql Public procedure
3625 -- Pre-reqs                      : None
3626 -- Return Value                  : N/A
3627 -- Prameters
3628 --   p_calling_module                   IN VARCHAR2
3629 --  ,p_project_id                       IN NUMBER
3630 --  ,x_msg_count                        OUT NUMBER
3631 --  ,x_msg_data                         OUT VARCHAR2
3632 --  ,x_return_status                    OUT VARCHAR2--
3633 --  History
3634 --
3635 --  26-APR-02   MAansari             -Created
3636 --  01-JUL-2004 Rakesh Raghavan      Modified.
3637 --
3638 --  Notes: This api is called from form PAXPREPR.fmb ON-DELETE of project block.
3639 --         The call is in PA_PROJECT_STRUCTURES.delete_project_structure API.
3640 --         This api deletes all records from structure tables.
3641 
3642 PROCEDURE delete_project_structure
3643 (
3644    p_calling_module                   IN VARCHAR2
3645   ,p_project_id                          IN NUMBER
3646   ,x_msg_count                        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
3647   ,x_msg_data                         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3648   ,x_return_status                    OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
3649 
3650   l_return_status       VARCHAR2(1);
3651   l_msg_count           NUMBER;
3652   l_msg_data            VARCHAR2(2000);
3653   l_error_message_code  VARCHAR2(250);
3654   l_task_version_id     NUMBER;
3655   l_record_version_number NUMBER;
3656   API_ERROR            EXCEPTION;
3657 
3658   CURSOR cur_str_ver
3659   IS
3660     SELECT rowid, element_version_id
3661       FROM pa_proj_element_versions
3662      WHERE OBJECT_TYPE = 'PA_STRUCTURES'
3663        AND project_id = p_project_id;
3664 
3665   CURSOR cur_task_ver( c_parent_structure_version_id NUMBER )
3666   IS
3667     SELECT rowid, element_version_id
3668       FROM pa_proj_element_versions
3669      WHERE OBJECT_TYPE = 'PA_TASKS'
3670        AND project_id = p_project_id
3671        AND parent_structure_version_id = c_parent_structure_version_id;
3672 
3673  CURSOR cur_proj_elems
3674  IS
3675    SELECT rowid, proj_element_id
3676      FROM pa_proj_elements
3677     WHERE project_id = p_project_id;
3678 
3679 
3680 BEGIN
3681 
3682      --Clear Error Messages.
3683       IF FND_MSG_PUB.count_msg = 0
3684       THEN
3685           FND_MSG_PUB.initialize;
3686       END IF;
3687 
3688      SAVEPOINT delete_project_struc;
3689 
3690 
3691      FOR cur_str_ver_rec IN cur_str_ver LOOP
3692          FOR cur_task_ver_rec IN cur_task_ver( cur_str_ver_rec.element_version_id ) LOOP
3693              --Check to see if deleting a version is ok
3694              PA_PROJ_ELEMENTS_UTILS.Check_Delete_task_Ver_Ok(
3695                        p_project_id                 => p_project_id
3696                       ,p_task_version_id            => cur_task_ver_rec.element_version_id
3697                       ,p_parent_structure_ver_id    => cur_str_ver_rec.element_version_id
3698                       ,x_return_status              => l_return_status
3699                       ,x_error_message_code         => l_error_message_code
3700                     );
3701 
3702              IF l_return_status <> 'S'
3703              THEN
3704                  PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3705                                       ,p_msg_name       => l_error_message_code);
3706                  raise api_error;
3707              END IF;
3708 
3709              DELETE FROM pa_object_relationships
3710               WHERE relationship_type = 'S' AND
3711                     (object_id_from1 = cur_task_ver_rec.element_version_id OR
3712                     object_id_to1   = cur_task_ver_rec.element_version_id);
3713 
3714              PA_PROJ_ELEMENT_VERSIONS_PKG.DELETE_ROW( cur_task_ver_rec.rowid );
3715 
3716 
3717          END LOOP;
3718 
3719          PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
3720              p_project_id                        => p_project_id
3721             ,p_structure_version_id              => cur_str_ver_rec.element_version_id
3722             ,x_return_status                     => l_return_status
3723             ,x_error_message_code                => l_error_message_code
3724          );
3725 
3726          IF l_return_status <> 'S'
3727          THEN
3728              PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3729                                   ,p_msg_name       => l_error_message_code);
3730              raise api_error;
3731          END IF;
3732 
3733          DELETE FROM pa_object_relationships
3734           WHERE relationship_type = 'S' AND
3735                 (object_id_from1 = cur_str_ver_rec.element_version_id OR
3736                  object_id_to1   = cur_str_ver_rec.element_version_id);
3737 
3738          PA_PROJ_ELEMENT_VERSIONS_PKG.DELETE_ROW( cur_str_ver_rec.rowid );
3739 
3740      END LOOP;
3741 
3742      FOR cur_proj_elems_rec IN cur_proj_elems LOOP
3743          DELETE FROM pa_proj_structure_types
3744           WHERE proj_element_id = cur_proj_elems_rec.proj_element_id;
3745 
3746          PA_PROJ_ELEMENTS_PKG.DELETE_ROW( cur_proj_elems_rec.rowid );
3747      END LOOP;
3748 
3749      DELETE FROM pa_proj_elem_ver_schedule where project_id = p_project_id;
3750      DELETE FROM pa_proj_elem_ver_structure where project_id = p_project_id;
3751 
3752      /* Code to delete project records from tables: pa_progress_rollup, pa_proj_progress_attr
3753     and pa_proj_workplan_attr. */
3754 
3755       BEGIN
3756 
3757            PA_PROGRESS_PUB.delete_working_wp_progress (
3758                      p_project_id               => p_project_id
3759                     ,p_calling_context          => 'PROJECT_STRUCTURE'
3760                     ,x_return_status            => x_return_status
3761                     ,x_msg_count                => x_msg_count
3762                     ,x_Msg_data                 => x_msg_data
3763                     );
3764        EXCEPTION
3765 
3766            WHEN OTHERS THEN
3767 
3768                 fnd_msg_pub.add_exc_msg(
3769                    p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
3770                    p_procedure_name => 'delete_project_structure',
3771                    p_error_text     => SUBSTR('PA_PROGRESS_PUB.delete_working_wp_progress:'||SQLERRM,1,240));
3772 
3773            RAISE FND_API.G_EXC_ERROR;
3774 
3775        END;
3776 
3777 
3778       IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3779 
3780          RAISE FND_API.G_EXC_ERROR;
3781 
3782       END IF;
3783 
3784      x_return_status := FND_API.G_RET_STS_SUCCESS;
3785 
3786 EXCEPTION
3787 WHEN API_ERROR THEN
3788   x_return_status := FND_API.G_RET_STS_ERROR;
3789   rollback to delete_project_struc;
3790 WHEN OTHERS THEN
3791   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3792   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
3793                           p_procedure_name => 'delete_project_structure',
3794                           p_error_text     => SUBSTRB(SQLERRM,1,240));
3795   rollback to delete_project_struc;
3796   raise;
3797 END delete_project_structure;
3798 
3799 -- API name                      : Published_version_exists
3800 -- Type                          : PL/sql Public Function
3801 -- Pre-reqs                      : None
3802 -- Return Value                  : N/A
3803 -- Prameters
3804 -- p_project_id                       IN NUMBER
3805 --  History
3806 --
3807 --  29-APR-02   MAansari             -Created
3808 --
3809 --  Notes: This api is called from form PAXPREPR.fmb ON-DELETE of task block.
3810 --         To check if there exists any published ver.
3811 --  bug 3654011: Added conditions to check for shared or workplan only structure
3812 
3813 FUNCTION Published_version_exists
3814 (
3815   p_project_id                       IN NUMBER
3816  ) RETURN VARCHAR2 IS
3817 
3818     CURSOR cur_pub_versions is
3819       select 'Y'
3820         from pa_proj_elem_ver_structure ppevs,
3821              pa_proj_structure_types ppst,
3822              pa_structure_types pst
3823        where ppevs.project_id = p_project_id
3824          and ppevs.STATUS_CODE = 'STRUCTURE_PUBLISHED'
3825          and ppevs.proj_element_id = ppst.proj_element_id
3826          and ppst.structure_type_id = pst.structure_type_id
3827          and pst.structure_type_class_code = 'WORKPLAN';
3828    l_dummy_char VARCHAR2(1);
3829 BEGIN
3830    OPEN cur_pub_versions;
3831    FETCH cur_pub_versions INTO l_dummy_char;
3832    IF cur_pub_versions%FOUND
3833    THEN
3834       CLOSE cur_pub_versions;
3835       RETURN 'Y';
3836    ELSE
3837       CLOSE cur_pub_versions;
3838       RETURN 'N';
3839    END IF;
3840 END Published_version_exists;
3841 
3842 -- API name                      : approve_project
3843 -- Type                          : PL/sql Public Function
3844 -- Pre-reqs                      : None
3845 -- Return Value                  : 'Y', 'N'
3846 -- Prameters
3847 -- p_project_id                       IN NUMBER
3848 --  History
3849 --
3850 --  29-APR-02   MAansari             -Created
3851 --
3852 --  Notes: This api is called from Pa_project_stus_utils.Handle_Project_Status_Change api
3853 --         to check the following before changing status to APPROVE.
3854 --         1) The project should contain one structure for Workplan and Costing
3855 --         2) There should be a published version.
3856 
3857 FUNCTION approve_project
3858 (
3859   p_project_id                       IN NUMBER
3860  ) RETURN VARCHAR2 IS
3861    CURSOR cur_proj_strs
3862    IS
3863      SELECT 'X'
3864        FROM pa_projects_all
3865       WHERE project_id = p_project_id
3866         AND split_cost_from_workplan_flag = 'N';
3867 
3868     CURSOR cur_pub_versions is
3869       select 'Y'
3870         from pa_proj_elem_ver_structure
3871        where project_id = p_project_id
3872          and STATUS_CODE = 'STRUCTURE_PUBLISHED';
3873 
3874    l_approve  VARCHAR2(1);
3875    l_dummy_char VARCHAR2(1);
3876 BEGIN
3877    OPEN cur_proj_strs;
3878    FETCH cur_proj_strs INTO l_dummy_char;
3879    IF cur_proj_strs%FOUND
3880    THEN
3881       l_approve := 'Y';
3882       OPEN cur_pub_versions;
3883       FETCH cur_pub_versions INTO l_dummy_char;
3884       IF cur_pub_versions%NOTFOUND
3885       THEN
3886          l_approve := 'N';
3887       END IF;
3888       CLOSE cur_pub_versions;
3889    ELSE
3890       CLOSE cur_proj_strs;
3891       l_approve := 'Y';
3892    END IF;
3893    RETURN ( l_approve );
3894 END approve_project;
3895 
3896 -- API name                      : Is_PJT_Licensed
3897 -- Type                          : PL/sql Public Function
3898 -- Pre-reqs                      : None
3899 -- Return Value                  : 'Y', 'N'
3900 -- Prameters
3901 --  History
3902 --
3903 --  01-MAY-02   MAansari             -Created
3904 --
3905 --  Notes: This api is called from Projects form and Self Service to display SPLIT_COST_FROM_WORKPLAN_FLAG.
3906 
3907 FUNCTION Is_PJT_Licensed RETURN VARCHAR2 IS
3908 BEGIN
3909     RETURN ( PA_INSTALL.IS_PJT_LICENSED );
3910 END Is_PJT_Licensed;
3911 
3912 -- API name                      : Progress_rec_exists
3913 -- Type                          : PL/sql Public Function
3914 -- Pre-reqs                      : None
3915 -- Return Value                  : 'Y', 'N'
3916 -- Prameters
3917 -- p_project_id                  NUMBER
3918 --  History
3919 --
3920 --  01-MAY-02   MAansari             -Created
3921 --
3922 --  Notes: This api is called from Projects form and Self Service to allow users to update
3923 --  SPLIT_COST_FROM_WORKPLAN_FLAG.
3924 
3925 FUNCTION Progress_rec_exists( p_project_id NUMBER ) RETURN VARCHAR2 IS
3926    l_return_value VARCHAR2(1) := 'N';
3927 BEGIN
3928     --l_return_value := call here api from selva's team.
3929     RETURN l_return_value;
3930 END Progress_rec_exists;
3931 
3932 -- API name                      : create_delete_workplan_struc
3933 -- Type                          : PL/sql Public procedure
3934 -- Pre-reqs                      : None
3935 -- Return Value                  : N/A
3936 -- Prameters
3937 -- p_project_id                  NUMBER
3938 -- p_calling_module                   IN VARCHAR2
3939 -- p_project_id                       IN NUMBER
3940 -- p_project_number                   IN VARCHAR2 := 'JUNK_CHARS'
3941 -- p_project_name                     IN VARCHAR2 := 'JUNK_CHARS'
3942 -- p_project_description              IN VARCHAR2 := 'JUNK_CHARS'
3943 -- p_split_workplan                   IN VARCHAR2
3944 --  History
3945 --
3946 --  01-MAY-02   MAansari             -Created
3947 --
3948 --  Notes: This api is called from Projects form and Self Service when the SPLIT_COST_FROM_WORKPLAN_FLAG
3949 --         is checked
3950 
3951 PROCEDURE create_delete_workplan_struc(
3952    p_calling_module                   IN VARCHAR2
3953   ,p_project_id                       IN NUMBER
3954   ,p_project_number                   IN VARCHAR2
3955   ,p_project_name                     IN VARCHAR2
3956   ,p_project_description              IN VARCHAR2
3957   ,p_split_workplan                   IN VARCHAR2
3958   ,x_msg_count                        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
3959   ,x_msg_data                         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3960   ,x_return_status                    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3961  ) IS
3962 
3963   l_return_status       VARCHAR2(1);
3964   l_msg_count           NUMBER;
3965   l_msg_data            VARCHAR2(2000);
3966   l_data               VARCHAR2(2000);
3967   l_msg_index_out      NUMBER;
3968   l_error_message_code  VARCHAR2(250);
3969   API_ERROR            EXCEPTION;
3970 
3971   CURSOR cur_projects
3972   IS
3973     SELECT split_cost_from_workplan_flag
3974       FROM pa_projects_all
3975      WHERE project_id = p_project_id;
3976 
3977   CURSOR cur_pa_proj_elems
3978   IS
3979     SELECT proj_element_id
3980       FROM pa_proj_elements
3981      WHERE project_id = p_project_id
3982        AND object_type = 'PA_STRUCTURES';
3983 
3984   CURSOR cur_pa_proj_elem_vers( c_structure_id NUMBER )
3985   IS
3986     SELECT element_version_id, record_version_number
3987       FROM pa_proj_element_versions
3988      WHERE project_id = p_project_id
3989        AND object_type = 'PA_STRUCTURES'
3990        AND proj_element_id = c_structure_id;
3991 
3992    CURSOR cur_struc_type_id
3993     IS
3994     select structure_type_id
3995       from pa_structure_types
3996      where structure_type_class_code = 'WORKPLAN';
3997 
3998   CURSOR cur_pa_proj_elem_vers2
3999   IS
4000     SELECT element_version_id
4001       FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
4002      WHERE c.project_id = p_project_id
4003        AND a.structure_type_id = b.structure_type_id
4004        AND b.proj_element_id = c.proj_element_id
4005        AND a.structure_type = 'WORKPLAN';
4006 
4007   CURSOR cur_pa_proj_elem_vers3( c_parent_struc_ver_id NUMBER )
4008     IS
4009     SELECT element_version_id
4010       FROM pa_proj_element_versions
4011      WHERE project_id = p_project_id
4012        AND parent_structure_version_id = c_parent_struc_ver_id
4013        AND object_type = 'PA_TASKS';
4014 
4015 
4016   l_structure_type_id      NUMBER;
4017   l_proj_structure_type_id NUMBER;
4018   l_rowid                  VARCHAR2(18);
4019   l_structure_id           NUMBER;
4020   l_structure_version_id   NUMBER;
4021   l_split_flag             VARCHAR2(1);
4022   x_pev_schedule_id        NUMBER;
4023 
4024   l_append   VARCHAR2(10);
4025   l_suffix   VARCHAR2(80);
4026   l_name     VARCHAR2(240);
4027 BEGIN
4028 
4029      --Clear Error Messages.
4030       IF FND_MSG_PUB.count_msg = 0
4031       THEN
4032           FND_MSG_PUB.initialize;
4033       END IF;
4034 
4035      SAVEPOINT create_delete_wp_struc;
4036 
4037      OPEN cur_projects;
4038      FETCH cur_projects INTO l_split_flag;
4039      CLOSE cur_projects;
4040 
4041      UPDATE pa_projects_all
4042         SET split_cost_from_workplan_flag = p_split_workplan
4043       WHERE project_id = p_project_id;
4044 
4045      IF p_split_workplan = l_split_flag
4046      THEN
4047          PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4048                               ,p_msg_name       => 'PA_PS_WRONG_SPLIT_OPTION');
4049          raise api_error;
4050      END IF;
4051 
4052      IF p_project_id IS NULL
4053      THEN
4054          PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4055                               ,p_msg_name       => 'PA_PS_PROJ_ID_NULL');
4056          raise api_error;
4057      END IF;
4058 
4059      IF p_split_workplan = 'Y'
4060      THEN
4061 
4062         IF p_project_number IS NULL OR p_project_number = 'JUNK_CHARS'
4063         THEN
4064             PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4065                                  ,p_msg_name       => 'PA_PS_INV_PROJ_NUM');
4066             raise api_error;
4067         END IF;
4068 
4069         IF p_project_name IS NULL OR p_project_name = 'JUNK_CHARS'
4070         THEN
4071             PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4072                                  ,p_msg_name       => 'PA_PS_INV_PROJ_NAME');
4073             raise api_error;
4074         ELSE
4075            l_name := p_project_name;
4076         END IF;
4077 
4078         l_append := ': ';
4079 
4080         select meaning
4081           into l_suffix
4082           from pa_lookups
4083          where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
4084            and lookup_code = 'WORKPLAN';
4085 
4086         l_name := substr(l_name||l_append||l_suffix, 1, 240);
4087 
4088         PA_PROJECT_STRUCTURE_PVT1.SPLIT_WORKPLAN(
4089              p_project_id                 => p_project_id
4090             ,p_structure_name             => l_name
4091             ,p_structure_number           => p_project_number
4092             ,p_description                => p_project_description
4093             ,x_structure_id               => l_structure_id
4094             ,x_structure_version_id       => l_structure_version_id
4095             ,x_msg_count                  => l_msg_count
4096             ,x_msg_data                   => l_msg_data
4097             ,x_return_status              => l_return_status
4098           );
4099 
4100        l_msg_count := FND_MSG_PUB.count_msg;
4101        if l_msg_count > 0 then
4102           x_msg_count := l_msg_count;
4103          if x_msg_count = 1 then
4104             pa_interface_utils_pub.get_messages
4105              (p_encoded        => FND_API.G_TRUE,
4106               p_msg_index      => 1,
4107               p_msg_count      => l_msg_count,
4108               p_msg_data       => l_msg_data,
4109               p_data           => l_data,
4110               p_msg_index_out  => l_msg_index_out);
4111             x_msg_data := l_data;
4112          end if;
4113          raise API_ERROR;
4114       end if;
4115      ELSE  --delete the workplan structure including all its structure versions.
4116          FOR cur_pa_proj_elems_rec IN cur_pa_proj_elems LOOP
4117              --should obly be WORKPLAN structure
4118              IF  PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure( cur_pa_proj_elems_rec.proj_element_id, 'WORKPLAN' ) = 'Y' AND
4119                  PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure( cur_pa_proj_elems_rec.proj_element_id, 'FINANCIAL' ) = 'N'
4120              THEN
4121                 FOR cur_pa_proj_elem_vers_rec IN cur_pa_proj_elem_vers( cur_pa_proj_elems_rec.proj_element_id ) LOOP
4122                     PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
4123                                p_structure_version_id              => cur_pa_proj_elem_vers_rec.element_version_id
4124                               ,p_record_version_number             => cur_pa_proj_elem_vers_rec.record_version_number
4125                               ,x_return_status                     => l_return_status
4126                               ,x_msg_count                         => l_msg_count
4127                               ,x_msg_data                          => l_msg_data
4128                             );
4129 
4130                      l_msg_count := FND_MSG_PUB.count_msg;
4131                      if l_msg_count > 0 then
4132                         x_msg_count := l_msg_count;
4133                        if x_msg_count = 1 then
4134                          pa_interface_utils_pub.get_messages
4135                          (p_encoded        => FND_API.G_TRUE,
4136                           p_msg_index      => 1,
4137                           p_msg_count      => l_msg_count,
4138                           p_msg_data       => l_msg_data,
4139                           p_data           => l_data,
4140                           p_msg_index_out  => l_msg_index_out);
4141                           x_msg_data := l_data;
4142                         end if;
4143                         raise API_ERROR;
4144                      end if;
4145                 END LOOP;
4146              END IF;
4147 
4148              --Now associate the WORKPLAN structure type with the COSTING structure.
4149              IF PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure( cur_pa_proj_elems_rec.proj_element_id, 'FINANCIAL' ) = 'Y'
4150              THEN
4151                  OPEN cur_struc_type_id;
4152                  FETCH cur_struc_type_id INTO l_structure_type_id;
4153                  CLOSE cur_struc_type_id;
4154                  PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
4155                             X_ROWID                  => l_rowid
4156                           , X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
4157                           , X_PROJ_ELEMENT_ID        => cur_pa_proj_elems_rec.proj_element_id
4158                           , X_STRUCTURE_TYPE_ID      => l_structure_type_id
4159                           , X_RECORD_VERSION_NUMBER  => 1
4160                           , X_ATTRIBUTE_CATEGORY     => NULL
4161                           , X_ATTRIBUTE1             => NULL
4162                           , X_ATTRIBUTE2             => NULL
4163                           , X_ATTRIBUTE3             => NULL
4164                           , X_ATTRIBUTE4             => NULL
4165                           , X_ATTRIBUTE5             => NULL
4166                           , X_ATTRIBUTE6             => NULL
4167                           , X_ATTRIBUTE7             => NULL
4168                           , X_ATTRIBUTE8             => NULL
4169                           , X_ATTRIBUTE9             => NULL
4170                           , X_ATTRIBUTE10            => NULL
4171                           , X_ATTRIBUTE11            => NULL
4172                           , X_ATTRIBUTE12            => NULL
4173                           , X_ATTRIBUTE13            => NULL
4174                           , X_ATTRIBUTE14            => NULL
4175                           , X_ATTRIBUTE15            => NULL
4176                         );
4177              END IF;
4178          END LOOP;
4179          --Now create the schedule versions for the workplan structure version and task versions.
4180          FOR cur_pa_proj_elem_vers_rec2 IN cur_pa_proj_elem_vers2 LOOP
4181              x_pev_schedule_id := null;
4182              PA_TASK_PUB1.Create_Schedule_Version(
4183                    p_element_version_id        => cur_pa_proj_elem_vers_rec2.element_version_id
4184                   ,p_scheduled_start_date      => SYSDATE
4185                   ,p_scheduled_end_date        => SYSDATE
4186                   ,x_pev_schedule_id           => x_pev_schedule_id
4187                   ,x_return_status             => l_return_status
4188                   ,x_msg_count                 => l_msg_count
4189                   ,x_msg_data                  => l_msg_data
4190              );
4191 
4192             IF l_return_status <> 'S'
4193             THEN
4194                PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4195                                     ,p_msg_name       => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
4196                raise api_error;
4197             END IF;
4198             FOR cur_pa_proj_elem_vers_rec3 IN cur_pa_proj_elem_vers3(cur_pa_proj_elem_vers_rec2.element_version_id) LOOP
4199                x_pev_schedule_id := null;
4200                PA_TASK_PUB1.Create_Schedule_Version(
4201                    p_element_version_id        => cur_pa_proj_elem_vers_rec3.element_version_id
4202                   ,p_scheduled_start_date      => SYSDATE
4203                   ,p_scheduled_end_date        => SYSDATE
4204                   ,x_pev_schedule_id           => x_pev_schedule_id
4205                   ,x_return_status             => l_return_status
4206                   ,x_msg_count                 => l_msg_count
4207                   ,x_msg_data                  => l_msg_data
4208                 );
4209 
4210                IF l_return_status <> 'S'
4211                THEN
4212                    PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4213                                         ,p_msg_name       => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
4214                    raise api_error;
4215                END IF;
4216             END LOOP;
4217          END LOOP;
4218      END IF;
4219      x_return_status := FND_API.G_RET_STS_SUCCESS;
4220 EXCEPTION
4221 WHEN API_ERROR THEN
4222   x_return_status := FND_API.G_RET_STS_ERROR;
4223   rollback to create_delete_wp_struc;
4224 WHEN OTHERS THEN
4225   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4226   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
4227                           p_procedure_name => 'create_delete_workplan_struc',
4228                           p_error_text     => SUBSTRB(SQLERRM,1,240));
4229   rollback to create_delete_wp_struc;
4230   raise;
4231 END create_delete_workplan_struc;
4232 
4233 
4234 -- API name                      : Copy_Structure
4235 -- Type                          : PL/sql Public procedure
4236 -- Pre-reqs                      : None
4237 -- Return Value                  : N/A
4238 -- Prameters
4239 -- p_src_project_id                  NUMBER
4240 -- p_dest_project_id                  NUMBER
4241 --  History
4242 --
4243 --  03-MAY-02   MAansari             -Created
4244 --
4245 --  Notes: This api is called from PA_PROJECT_CORE1.COPY_PROJECT
4246 
4247 PROCEDURE Copy_Structure(
4248    p_src_project_id                       IN NUMBER
4249   ,p_dest_project_id                      IN NUMBER
4250   ,p_delta                            IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4251   ,p_copy_task_flag                   IN VARCHAR2 := 'Y'
4252   ,p_dest_template_flag            IN VARCHAR2    := 'N'     --bug 2805602
4253   ,p_src_template_flag            IN VARCHAR2    := 'N'   --bug 2805602
4254   ,p_dest_project_name             IN VARCHAR2               --bug 2805602
4255   ,p_target_start_date             IN DATE                --bug 2805602
4256   ,p_target_finish_date             IN DATE               --bug 2805602
4257   ,p_calendar_id                   IN NUMBER
4258   ,x_msg_count                        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4259   ,x_msg_data                         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4260   ,x_return_status                    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4261  ) IS
4262 
4263   l_return_status       VARCHAR2(1);
4264   l_msg_count           NUMBER;
4265   l_msg_data            VARCHAR2(2000);
4266   l_data               VARCHAR2(2000);
4267   l_msg_index_out      NUMBER;
4268   l_error_message_code  VARCHAR2(250);
4269   API_ERROR            EXCEPTION;
4270 
4271 BEGIN
4272 
4273      --Clear Error Messages.
4274       IF FND_MSG_PUB.count_msg = 0
4275       THEN
4276           FND_MSG_PUB.initialize;
4277       END IF;
4278 
4279      SAVEPOINT cp_struc;
4280      --bug 2805602
4281 
4282 /*     PA_PROJECT_STRUCTURE_PUB1.Copy_Structure
4283                     (
4284                   p_src_project_id       => p_src_project_id
4285                  ,p_dest_project_id      => p_dest_project_id
4286                  ,p_delta                => p_delta
4287                  ,p_copy_task_flag       => p_copy_task_flag
4288                  ,x_return_status        => l_return_status
4289                  ,x_msg_count            => l_msg_count
4290                  ,x_msg_data             => l_msg_data
4291                     );
4292 */
4293 
4294      IF p_copy_task_flag = 'Y'
4295      THEN
4296 
4297           --copying structrues and tasks
4298           PA_PROJ_TASK_STRUC_PUB.copy_structures_tasks_bulk
4299                     (
4300                   p_init_msg_list        => FND_API.G_FALSE
4301                  ,p_src_project_id       => p_src_project_id
4302                  ,p_dest_project_id      => p_dest_project_id
4303                  ,p_delta                => p_delta
4304                  ,p_copy_task_flag       => p_copy_task_flag
4305                  ,p_dest_template_flag   => p_dest_template_flag
4306                  ,p_src_template_flag    => p_src_template_flag
4307                  ,p_dest_project_name    => p_dest_project_name
4308                  ,p_target_start_date    => p_target_start_date
4309                  ,p_target_finish_date   => p_target_finish_date
4310                  ,p_calendar_id          => p_calendar_id
4311                  ,x_return_status        => l_return_status
4312                  ,x_msg_count            => l_msg_count
4313                  ,x_msg_data             => l_msg_data
4314                     );
4315      ELSE
4316 
4317       -- Bug 4146369 : Added following condition so that the copy_structures_bulk is not get called
4318       -- when both structures are disabled in source project.
4319       IF PA_PROJECT_STRUCTURE_UTILS.check_workplan_enabled( p_src_project_id )= 'Y' OR
4320          PA_PROJECT_STRUCTURE_UTILS.check_financial_enabled( p_src_project_id )= 'Y' THEN
4321           --copying only structrues   --This is for AMG
4322           PA_PROJ_TASK_STRUC_PUB.copy_structures_bulk
4323                     (
4324                   p_src_project_id       => p_src_project_id
4325                  ,p_dest_project_id      => p_dest_project_id
4326                  ,p_delta                => p_delta
4327                  ,p_copy_task_flag       => p_copy_task_flag
4328                  ,p_dest_template_flag   => p_dest_template_flag
4329                  ,p_src_template_flag    => p_src_template_flag
4330                  ,p_dest_project_name    => p_dest_project_name
4331                  ,p_target_start_date    => p_target_start_date
4332                  ,p_target_finish_date   => p_target_finish_date
4333                  ,p_calendar_id          => p_calendar_id
4334                  ,x_return_status        => l_return_status
4335                  ,x_msg_count            => l_msg_count
4336                  ,x_msg_data             => l_msg_data
4337                     );
4338     END IF;
4339      END IF;
4340      --bug 2805602
4341 
4342 
4343        l_msg_count := FND_MSG_PUB.count_msg;
4344        if l_msg_count > 0 then
4345           x_msg_count := l_msg_count;
4346          if x_msg_count = 1 then
4347             pa_interface_utils_pub.get_messages
4348              (p_encoded        => FND_API.G_TRUE,
4349               p_msg_index      => 1,
4350               p_msg_count      => l_msg_count,
4351               p_msg_data       => l_msg_data,
4352               p_data           => l_data,
4353               p_msg_index_out  => l_msg_index_out);
4354             x_msg_data := l_data;
4355          end if;
4356          raise API_ERROR;
4357       end if;
4358 
4359      x_return_status := FND_API.G_RET_STS_SUCCESS;
4360 EXCEPTION
4361 WHEN API_ERROR THEN
4362   x_return_status := FND_API.G_RET_STS_ERROR;
4363   rollback to cp_struc;
4364 WHEN OTHERS THEN
4365   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4366   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
4367                           p_procedure_name => 'Copy_Structure',
4368                           p_error_text     => SUBSTRB(SQLERRM,1,240));
4369   rollback to cp_struc;
4370   raise;
4371 
4372 END Copy_Structure;
4373 
4374 -- API name                      : Clean_unwanted_tasks
4375 -- Type                          : PL/sql Public procedure
4376 -- Pre-reqs                      : None
4377 -- Return Value                  : N/A
4378 -- Prameters
4379 -- p_project_id                  NUMBER
4380 --  History
4381 --
4382 --  25-MAY-02   MAansari             -Created
4383 --
4384 --  Notes: This api is called from PA_PROJECT_PUB.CREATE_PROJECT to clean up the tasks in pa_proj_elements that were created
4385 --         by calling copy structure api. Copy structure api copies template's tasks to pro_elements though there
4386 --         are no pa_TASKs for the new project. However pa_tasks and pa_proj_elements must be in syn. To d this we need to firts remove
4387 --         tasks from pa_proj_elements as they were erroneously created by COPY_STRUCTURE and then call create_default_structure
4388 --         to syn up pa_pro_elements with pa_tasks.
4389 --
4390 
4391 PROCEDURE Clean_unwanted_tasks(
4392    p_project_id                       IN NUMBER
4393   ,x_msg_count                        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4394   ,x_msg_data                         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4395   ,x_return_status                    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4396  ) IS
4397 
4398   l_return_status       VARCHAR2(1);
4399   l_msg_count           NUMBER;
4400   l_msg_data            VARCHAR2(2000);
4401   l_data               VARCHAR2(2000);
4402   l_msg_index_out      NUMBER;
4403   l_error_message_code  VARCHAR2(250);
4404   API_ERROR            EXCEPTION;
4405 
4406   CURSOR cur_pa_proj_elem_vers
4407   IS
4408     SELECT element_version_id
4409       FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
4410      WHERE c.project_id = p_project_id
4411        AND a.structure_type_id = b.structure_type_id
4412        AND b.proj_element_id = c.proj_element_id
4413        AND a.structure_type = 'FINANCIAL';
4414 
4415   CURSOR cur_task_vers( c_parent_str_ver_id NUMBER )
4416   IS
4417     SELECT element_version_id, proj_element_id
4418       FROM pa_proj_element_versions
4419      WHERE project_id = p_project_id
4420        AND parent_structure_version_id = c_parent_str_ver_id
4421        AND object_type = 'PA_TASKS';
4422 
4423 l_cur_pa_proj_elem_vers_rec  cur_pa_proj_elem_vers%ROWTYPE;
4424 BEGIN
4425 
4426      --Clear Error Messages.
4427       IF FND_MSG_PUB.count_msg = 0
4428       THEN
4429           FND_MSG_PUB.initialize;
4430       END IF;
4431 
4432      SAVEPOINT clean_struc;
4433 
4434      OPEN  cur_pa_proj_elem_vers;
4435      FETCH cur_pa_proj_elem_vers INTO l_cur_pa_proj_elem_vers_rec;
4436      IF cur_pa_proj_elem_vers%FOUND
4437      THEN
4438          FOR cur_task_vers_rec IN cur_task_vers( l_cur_pa_proj_elem_vers_rec.element_version_id ) LOOP
4439              DELETE FROM pa_object_relationships WHERE relationship_type = 'S' AND
4440                                                        (object_id_to1 = cur_task_vers_rec.element_version_id OR
4441                                                         object_id_from1 = cur_task_vers_rec.element_version_id);
4442 
4443              --it is possible that COSTING and WORKPLAN str are same. so delete from schedule versions as well.
4444              DELETE FROM pa_proj_elem_ver_schedule WHERE element_version_id = cur_task_vers_rec.element_version_id and project_id = p_project_id;
4445 
4446              DELETE FROM pa_proj_element_versions WHERE element_version_id = cur_task_vers_rec.element_version_id;
4447 
4448              DELETE FROM pa_proj_elements WHERE proj_element_id = cur_task_vers_rec.proj_element_id;
4449 
4450          END LOOP;
4451      END IF;
4452      CLOSE cur_pa_proj_elem_vers;
4453     x_return_status := FND_API.G_RET_STS_SUCCESS;
4454 EXCEPTION
4455 WHEN API_ERROR THEN
4456   x_return_status := FND_API.G_RET_STS_ERROR;
4457   rollback to clean_struc;
4458 WHEN OTHERS THEN
4459   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4460   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
4461                           p_procedure_name => 'Clean_unwanted_tasks',
4462                           p_error_text     => SUBSTRB(SQLERRM,1,240));
4463   rollback to clean_struc;
4464   raise;
4465 
4466 END Clean_unwanted_tasks;
4467 
4468 -- API name                      : get_task_above
4469 -- Type                          : PL/sql Public procedure
4470 -- Pre-reqs                      : None
4471 -- Return Value                  : N/A
4472 -- Prameters
4473 
4474 --  History
4475 --
4476 --  14-AUG-02   MAansari             -Created
4477 --
4478 --  Notes: This api is called from Projects form and Self Service when the SPLIT_COST_FROM_WORKPLAN_FLAG
4479 --         is checked
4480 
4481 /*PROCEDURE get_task_above(
4482    p_task_id                              IN      NUMBER
4483   ,p_tasks_in                             IN      pa_project_pub.task_in_tbl_type
4484   ,p_tasks_out                            IN      pa_project_pub.task_out_tbl_type
4485   ,x_task_id_above                        OUT     NUMBER
4486   ,x_return_status                    OUT VARCHAR2
4487  ) IS
4488 
4489   v_task_id_above   NUMBER;
4490   l_msg_count       NUMBER ;
4491   l_msg_data        VARCHAR2(2000);
4492   l_return_status   VARCHAR2(1);
4493   l_last_index1      Number;
4494   l_first_index1      Number;
4495   l_index_number    number;
4496 
4497 BEGIN
4498      x_return_status := 'S';
4499 
4500      l_first_index1 := p_tasks_in.first;
4501      l_last_index1 := p_tasks_in.last;
4502 
4503      for i in l_first_index1..l_last_index1 loop
4504 
4505          IF p_task_id = p_tasks_out(i).pa_task_id
4506          THEN
4507             l_index_number := i;
4508             exit;
4509          END IF;
4510      end loop;
4511 
4512      IF l_index_number > l_first_index1 AND
4513         p_tasks_in(l_index_number-1).pa_task_id IS NOT NULL AND
4514         p_tasks_in(l_index_number-1).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4515         --existing task becomes the ref_task_id
4516      THEN
4517         v_task_id_above := p_tasks_in(l_index_number-1).pa_task_id;  --Get the task above.
4518      ELSIF l_index_number > l_first_index1 AND
4519         p_tasks_out(l_index_number-1).pa_task_id IS NOT NULL AND
4520         p_tasks_out(l_index_number-1).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4521         --new task becomes the ref_task_id
4522      THEN
4523         v_task_id_above := p_tasks_out(l_index_number-1).pa_task_id;  --Get the task above created newly
4524      ELSIF  ( p_tasks_in(l_index_number).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
4525               p_tasks_in(l_index_number).pa_task_id IS NULL
4526             ) AND
4527          l_index_number = l_first_index1
4528      THEN
4529          v_task_id_above := null;  --ref is the structure version. structure version is
4530                                    --derived in PA_PROJ_TASK_STRUC_PUB.create_task_structure API.
4531      END IF;
4532      x_task_id_above := v_task_id_above;
4533 
4534 EXCEPTION WHEN OTHERS THEN
4535           x_return_status := 'E';
4536 
4537 END get_task_above;*/
4538 
4539 -- API name                      : convert_pm_parent_task_ref
4540 -- Type                          : PL/sql Public procedure
4541 -- Pre-reqs                      : None
4542 -- Return Value                  : N/A
4543 -- Prameters
4544 
4545 --  History
4546 --
4547 --  14-AUG-02   MAansari             -Created
4548 --
4549 --  Notes: This api is not included in PA_PROJECT_PVT to avoid dependency.
4550 
4551 PROCEDURE convert_pm_parent_task_ref(
4552    p_pm_parent_task_reference             IN      VARCHAR2
4553   ,p_project_id                           IN      NUMBER
4554   ,x_parent_task_id                       OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
4555   ,x_return_status                        OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4556  ) IS
4557    CURSOR cur_pa_proj_elems
4558    IS
4559      SELECT proj_element_id
4560        FROM pa_proj_elements
4561       WHERE PM_SOURCE_REFERENCE = p_pm_parent_task_reference
4562         AND project_id = p_project_id
4563         AND OBJECT_TYPE = 'PA_TASKS';
4564 BEGIN
4565      x_return_status := FND_API.G_RET_STS_SUCCESS;
4566 
4567      OPEN cur_pa_proj_elems;
4568      FETCH cur_pa_proj_elems INTO x_parent_task_id;
4569      IF cur_pa_proj_elems%NOTFOUND
4570      THEN
4571          x_return_status := FND_API.G_RET_STS_ERROR;
4572      END IF;
4573 
4574      CLOSE cur_pa_proj_elems;
4575 EXCEPTION WHEN OTHERS THEN
4576           x_return_status := FND_API.G_RET_STS_ERROR;
4577 END convert_pm_parent_task_ref;
4578 
4579 -- API name                      : publish_structure
4580 -- Type                          : PL/sql Public procedure
4581 -- Pre-reqs                      : None
4582 -- Return Value                  : N/A
4583 -- Prameters
4584 
4585 --  History
4586 --
4587 --  19-AUG-02   MAansari             -Created
4588 --
4589 --  Notes: This api is a wrapper called from AMG
4590 
4591 PROCEDURE publish_structure(
4592     p_api_version                       IN  NUMBER      := 1.0
4593    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
4594    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
4595    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
4596    ,p_validation_level                  IN  VARCHAR2    := 100
4597    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
4598    ,p_debug_mode                        IN  VARCHAR2    := 'N'
4599    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4600    ,p_responsibility_id                 IN  NUMBER      := 0
4601    ,p_structure_version_id              IN  NUMBER
4602    ,p_publish_structure_ver_name        IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4603    ,p_structure_ver_desc                IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4604    ,p_effective_date                    IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4605    ,p_original_baseline_flag            IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4606    ,p_current_baseline_flag             IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4607    ,x_published_struct_ver_id           OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
4608    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4609    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
4610    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4611 ) IS
4612 BEGIN
4613   x_return_status := 'S';
4614   PA_PROJECT_STRUCTURE_PUB1.PUBLISH_STRUCTURE(
4615     p_api_version                       => p_api_version
4616    ,p_init_msg_list                     => p_init_msg_list
4617    ,p_commit                            => p_commit
4618    ,p_validate_only                     => p_validate_only
4619    ,p_validation_level                  => p_validation_level
4620    ,p_calling_module                    => p_calling_module
4621    ,p_debug_mode                        => p_debug_mode
4622    ,p_max_msg_count                     => p_max_msg_count
4623    ,p_responsibility_id                 => p_responsibility_id
4624    ,p_structure_version_id              => p_structure_version_id
4625    ,p_publish_structure_ver_name        => p_publish_structure_ver_name
4626    ,p_structure_ver_desc                => p_structure_ver_desc
4627    ,p_effective_date                    => p_effective_date
4628    ,p_original_baseline_flag            => p_original_baseline_flag
4629    ,p_current_baseline_flag             => p_current_baseline_flag
4630    ,x_published_struct_ver_id           => x_published_struct_ver_id
4631    ,x_return_status                     => x_return_status
4632    ,x_msg_count                         => x_msg_count
4633    ,x_msg_data                          => x_msg_data
4634   );
4635 
4636 END publish_structure;
4637 
4638 -- API name                      : delete_structure_version
4639 -- Type                          : PL/sql Public procedure
4640 -- Pre-reqs                      : None
4641 -- Return Value                  : N/A
4642 -- Prameters
4643 
4644 --  History
4645 --
4646 --  19-AUG-02   MAansari             -Created
4647 --
4648 --  Notes: This api is a wrapper called from AMG
4649 
4650 PROCEDURE delete_structure_version(
4651     p_api_version                       IN  NUMBER      := 1.0
4652    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
4653    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
4654    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
4655    ,p_validation_level                  IN  VARCHAR2    := 100
4656    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
4657    ,p_debug_mode                        IN  VARCHAR2    := 'N'
4658    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4659    ,p_structure_version_id              IN  NUMBER
4660    ,p_record_version_number             IN  NUMBER
4661    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4662    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
4663    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4664 ) IS
4665 BEGIN
4666   x_return_status := 'S';
4667   PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
4668     p_api_version                       => p_api_version
4669    ,p_init_msg_list                     => p_init_msg_list
4670    ,p_commit                            => p_commit
4671    ,p_validate_only                     => p_validate_only
4672    ,p_validation_level                  => p_validation_level
4673    ,p_calling_module                    => p_calling_module
4674    ,p_debug_mode                        => p_debug_mode
4675    ,p_max_msg_count                     => p_max_msg_count
4676    ,p_structure_version_id              => p_structure_version_id
4677    ,p_record_version_number             => p_record_version_number
4678    ,x_return_status                     => x_return_status
4679    ,x_msg_count                         => x_msg_count
4680    ,x_msg_data                          => x_msg_data
4681   );
4682 
4683 END delete_structure_version;
4684 
4685 -- API name                      : create_structure
4686 -- Type                          : PL/sql Public procedure
4687 -- Pre-reqs                      : None
4688 -- Return Value                  : N/A
4689 -- Prameters
4690 
4691 --  History
4692 --
4693 --  19-AUG-02   HUBERT             -Created
4694 --
4695 --  Notes: This api is a wrapper called from AMG
4696 
4697   --This API will only be called with the structure type = 'WORKPLAN'
4698 procedure create_structure(
4699     p_project_id             IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4700    ,p_structure_type         IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4701    ,p_structure_version_name IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4702    ,p_description            IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4703    ,x_structure_id           OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4704    ,x_structure_version_id   OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4705    ,x_msg_count              OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4706    ,x_msg_data               OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4707    ,x_return_status          OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4708   )
4709   IS
4710     l_return_status          VARCHAR2(1);
4711     l_msg_count              NUMBER;
4712     l_msg_data               VARCHAR2(2000);
4713     l_error_message_code     VARCHAR2(30);
4714 
4715     l_project_name           PA_PROJECTS_ALL.name%TYPE;
4716     l_project_number         PA_PROJECTS_ALL.segment1%TYPE;
4717 
4718     l_suffix                 VARCHAR2(250);
4719     l_name                   VARCHAR2(240);
4720     l_number                 VARCHAR2(25);
4721     l_struc_ver_number       NUMBER;
4722     l_append                 VARCHAR2(250);
4723     l_status_code            VARCHAR2(150);
4724     x_row_id                 VARCHAR2(18);
4725     x_pev_structure_id       NUMBER;
4726     x_pev_schedule_id        NUMBER;
4727     -- added for Bug Fix: 4537865
4728     l_new_structure_version_id  NUMBER;
4729     -- added for Bug Fix: 4537865
4730 
4731     CURSOR c1 IS
4732       select segment1, name from pa_projects_all
4733        where project_id = p_project_id;
4734 
4735     CURSOR cur_elem_ver_seq IS
4736       SELECT pa_proj_element_versions_s.nextval
4737         FROM sys.dual;
4738 
4739     cursor get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
4740     select nvl(max(version_number),0)+1
4741       from pa_proj_elem_ver_structure
4742      where project_id = c_project_id
4743        and proj_element_id = c_proj_element_id
4744        and status_code <> 'STRUCTURE_PUBLISHED';
4745 
4746     l_current_working_ver_flag     VARCHAR2(1);   /* FPM bug 3301192 */
4747     l_latest_eff_published_flag    VARCHAR2(1);   /* FPM bug 3301192 */ /* this is added to fix the bug. If version enabled the status should be working other wise it should be published. */
4748   BEGIN
4749 
4750       IF FND_MSG_PUB.count_msg = 0
4751       THEN
4752           FND_MSG_PUB.initialize;
4753       END IF;
4754     --check if the project have any structures
4755     PA_PROJECT_STRUCTURE_UTILS.Check_Structure_Type_Exists(
4756                                 p_project_id,
4757                                 p_structure_type,
4758                                 l_return_status,
4759                                 l_error_message_code);
4760     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4761       --PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4762                            --,p_msg_name => l_error_message_code);
4763       --raise FND_API.G_EXC_ERROR;
4764 
4765       -- Bug 3075609. When the structure type exists we need to ignore the error.
4766       -- This check has been used just to return with out doing any further
4767       -- processing.
4768       IF l_error_message_code <> 'PA_PS_STRUC_TYPE_EXISTS' THEN
4769            x_return_status := FND_API.G_RET_STS_ERROR;   -- Bug3044915
4770            x_msg_data := l_error_message_code ;          -- Bug3044915
4771            x_msg_count := FND_MSG_PUB.count_msg;         -- Bug3044915
4772       ELSE
4773            x_return_status := FND_API.G_RET_STS_SUCCESS;
4774            x_msg_data := NULL;
4775            x_msg_count := NULL;
4776       END IF;
4777       Return;
4778     END IF;
4779     --If no error, create structure
4780     OPEN c1;
4781     FETCH c1 into l_number, l_name;
4782     CLOSE c1;
4783 
4784     select meaning
4785       into l_suffix
4786       from pa_lookups
4787      where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
4788        and lookup_code = 'WORKPLAN';
4789 
4790     l_name := substr(l_name||l_append||l_suffix,1,240);
4791     --Create structure
4792     PA_PROJECT_STRUCTURE_PVT1.Create_Structure(
4793                         p_project_id            => p_project_id
4794                        ,p_structure_number      => l_number
4795                        ,p_structure_name        => l_name
4796                        ,p_structure_description => p_description
4797                        ,p_calling_flag          => p_structure_type
4798                        ,x_structure_id          => x_structure_id
4799                        ,x_return_status         => l_return_status
4800                        ,x_msg_count             => l_msg_count
4801                        ,x_msg_data              => l_msg_data
4802                      );
4803     IF x_structure_id IS NULL OR l_return_status <> 'S' THEN
4804       PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4805                            ,p_msg_name       => 'PA_PS_NO_STRUC_CREATED');
4806       raise FND_API.G_EXC_ERROR;
4807     END IF;
4808     --Create structure version
4809     OPEN cur_elem_ver_seq;
4810     FETCH cur_elem_ver_seq INTO x_structure_version_id;
4811     CLOSE cur_elem_ver_seq;
4812 
4813     -- Fix for 4657794 :- This is fix for regression introduced by 4537865
4814     -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_new_structure_version_id
4815     -- to  x_structure_version_id
4816 
4817     l_new_structure_version_id := x_structure_version_id ;
4818 
4819     -- End 4657794
4820 
4821     PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row(
4822             X_ROW_ID                     => X_row_id
4823          --,X_ELEMENT_VERSION_ID         => x_structure_version_id      * commented got Bug Fix: 4537865
4824            ,X_ELEMENT_VERSION_ID     => l_new_structure_version_id      --added for Bug Fix: 4537865
4825            ,X_PROJ_ELEMENT_ID            => x_structure_id
4826            ,X_OBJECT_TYPE                => 'PA_STRUCTURES'
4827            ,X_PROJECT_ID                 => p_project_id
4828            ,X_PARENT_STRUCTURE_VERSION_ID=> x_structure_version_id
4829            ,X_DISPLAY_SEQUENCE           => null
4830            ,X_WBS_LEVEL                   => null
4831            ,X_WBS_NUMBER          => '0'
4832            ,X_ATTRIBUTE_CATEGORY    => null
4833            ,X_ATTRIBUTE1          => null
4834            ,X_ATTRIBUTE2          => null
4835            ,X_ATTRIBUTE3          => null
4836            ,X_ATTRIBUTE4          => null
4837            ,X_ATTRIBUTE5          => null
4838            ,X_ATTRIBUTE6          => null
4839            ,X_ATTRIBUTE7          => null
4840            ,X_ATTRIBUTE8          => null
4841            ,X_ATTRIBUTE9          => null
4842            ,X_ATTRIBUTE10              => null
4843            ,X_ATTRIBUTE11              => null
4844            ,X_ATTRIBUTE12              => null
4845            ,X_ATTRIBUTE13              => null
4846            ,X_ATTRIBUTE14              => null
4847            ,X_ATTRIBUTE15              => null
4848            ,X_TASK_UNPUB_VER_STATUS_CODE => null
4849            ,X_SOURCE_OBJECT_ID            => p_project_id
4850            ,X_SOURCE_OBJECT_TYPE          => 'PA_PROJECTS'
4851        );
4852     -- added for Bug Fix: 4537865
4853         x_structure_version_id := l_new_structure_version_id;
4854     -- added for Bug Fix: 4537865
4855 
4856     IF x_structure_version_id IS NULL THEN
4857       PA_UTILS.ADD_MESSAGE(
4858                          p_app_short_name => 'PA'
4859                         ,p_msg_name       => 'PA_PS_NO_STRUC_VER_CREATED');
4860       raise FND_API.G_EXC_ERROR;
4861     END IF;
4862     --Get structure version number
4863     OPEN get_working_ver_num(p_project_id, x_structure_id);
4864     FETCH get_working_ver_num INTO l_struc_ver_number;
4865     CLOSE get_working_ver_num;
4866 
4867     --FPM bug 3301192
4868     IF NVL( PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED(p_project_id), 'N' ) = 'Y'
4869     THEN
4870        l_status_code := 'STRUCTURE_WORKING';
4871        l_current_working_ver_flag := 'Y';
4872        l_latest_eff_published_flag := 'N';
4873     ELSE
4874        l_status_code := 'STRUCTURE_PUBLISHED';
4875        l_current_working_ver_flag := 'N';
4876        l_latest_eff_published_flag := 'Y';
4877     END IF;
4878     --end FPM bug 3301192
4879 
4880     PA_PROJ_ELEM_VER_STRUCTURE_PKG.insert_row(
4881      X_ROWID                       => x_row_id
4882    , X_PEV_STRUCTURE_ID            => x_pev_structure_id
4883    , X_ELEMENT_VERSION_ID          => x_structure_version_id
4884    , X_VERSION_NUMBER              => l_struc_ver_number
4885    , X_NAME                        => l_name
4886    , X_PROJECT_ID                  => p_project_id
4887    , X_PROJ_ELEMENT_ID             => x_structure_id
4888    , X_DESCRIPTION                 => p_description
4889    , X_EFFECTIVE_DATE              => null
4890    , X_PUBLISHED_DATE              => null
4891    , X_PUBLISHED_BY                => null
4892    , X_CURRENT_BASELINE_DATE       => null
4893    , X_CURRENT_BASELINE_FLAG       => 'N'
4894    , X_CURRENT_BASELINE_BY         => null
4895    , X_ORIGINAL_BASELINE_DATE      => null
4896    , X_ORIGINAL_BASELINE_FLAG      => 'N'
4897    , X_ORIGINAL_BASELINE_BY        => null
4898    , X_LOCK_STATUS_CODE            => NULL
4899    , X_LOCKED_BY                   => NULL
4900    , X_LOCKED_DATE                 => NULL
4901    , X_STATUS_CODE                 => l_status_code
4902    , X_WF_STATUS_CODE              => NULL
4903    , X_LATEST_EFF_PUBLISHED_FLAG   => l_latest_eff_published_flag
4904    , X_RECORD_VERSION_NUMBER       => 1
4905    , X_CHANGE_REASON_CODE          => NULL
4906    , X_CURRENT_WORKING_FLAG        => l_current_working_ver_flag      /* bug 3301192 */
4907    , X_SOURCE_OBJECT_ID            => p_project_id
4908    , X_SOURCE_OBJECT_TYPE          => 'PA_PROJECTS'
4909     );
4910 
4911     PA_TASK_PUB1.Create_Schedule_Version(
4912                    p_element_version_id        => x_structure_version_id
4913                   ,p_scheduled_start_date      => SYSDATE
4914                   ,p_scheduled_end_date        => SYSDATE
4915                   ,x_pev_schedule_id           => x_pev_schedule_id
4916                   ,x_return_status             => l_return_status
4917                   ,x_msg_count                 => l_msg_count
4918                   ,x_msg_data                  => l_msg_data
4919     );
4920 
4921     IF l_return_status <> 'S' THEN
4922       PA_UTILS.ADD_MESSAGE(
4923                        p_app_short_name => 'PA'
4924                       ,p_msg_name       => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
4925       raise FND_API.G_EXC_ERROR;
4926     END IF;
4927     x_return_status := FND_API.G_RET_STS_SUCCESS;
4928   EXCEPTION
4929     WHEN FND_API.G_EXC_ERROR THEN
4930       x_msg_count := FND_MSG_PUB.count_msg;
4931       x_return_status := FND_API.G_RET_STS_ERROR;
4932     WHEN OTHERS THEN
4933       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4934       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
4935                           p_procedure_name => 'CREATE_STRUCTURE',
4936                           p_error_text     => SUBSTRB(SQLERRM,1,240));
4937       raise;
4938 END create_structure;
4939 
4940 -- API name                      : create_structure
4941 -- Type                          : PL/sql Public procedure
4942 -- Pre-reqs                      : None
4943 -- Return Value                  : N/A
4944 -- Prameters
4945 
4946 --  History
4947 --
4948 --  19-AUG-02   HUBERT             -Created
4949 --
4950 --  Notes: This api is a wrapper called from AMG
4951 
4952 procedure create_update_struct_ver(
4953     p_project_id             IN  NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4954    ,p_structure_type         IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4955    ,p_structure_version_name IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4956    ,p_structure_version_id   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4957    ,p_description            IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4958    ,x_structure_version_id   OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4959    ,x_msg_count              OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4960    ,x_msg_data               OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4961    ,x_return_status          OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4962   )
4963   IS
4964     cursor c1 is
4965       select pev_structure_id, name, record_version_number
4966         from pa_proj_elem_ver_structure
4967        where project_id = p_project_id
4968          and element_version_id = p_structure_version_id;
4969 
4970     l_name             VARCHAR2(240);
4971     l_pev_structure_id NUMBER;
4972     l_record_version_number NUMBER;
4973     l_proj_element_id NUMBER;
4974     l_enable_wp_version_flag varchar2(1);
4975     l_dummy varchar2(1);
4976     l_struc_ver_number       NUMBER;
4977     l_return_status          VARCHAR2(1);
4978     l_msg_count              NUMBER;
4979     l_msg_data               VARCHAR2(2000);
4980     -- added for Bug Fix: 4537865
4981     l_new_structure_version_id  NUMBER;
4982     -- added for Bug Fix: 4537865
4983     x_row_id                 VARCHAR2(18);
4984     x_pev_structure_id       NUMBER;
4985     x_pev_schedule_id        NUMBER;
4986 
4987     cursor c2 is
4988       select b.proj_element_id
4989         from pa_proj_elements a, pa_proj_structure_types b,
4990              pa_structure_types c
4991        where a.project_id = p_project_id
4992          and a.object_type = 'PA_STRUCTURES'
4993          and a.proj_element_id = b.proj_element_id
4994          and b.structure_type_id = c.structure_type_id
4995          and c.structure_type = p_structure_type;
4996 
4997     cursor c3 is
4998       select wp_enable_version_flag
4999         from pa_proj_workplan_attr
5000        where project_id = p_project_id;
5001 
5002     cursor c4(c_proj_elem_id NUMBER) is
5003       select '1' from pa_proj_elem_ver_structure
5004        where project_id = p_project_id
5005          and proj_element_id = c_proj_elem_id
5006          and status_code <> 'STRUCTURE_PUBLISHED';
5007 
5008     CURSOR cur_elem_ver_seq IS
5009       SELECT pa_proj_element_versions_s.nextval
5010         FROM sys.dual;
5011 
5012     cursor get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
5013     select nvl(max(version_number),0)+1
5014       from pa_proj_elem_ver_structure
5015      where project_id = c_project_id
5016        and proj_element_id = c_proj_element_id
5017        and status_code <> 'STRUCTURE_PUBLISHED';
5018 
5019     l_current_working_ver_flag    VARCHAR2(1);   /* FPM bug 3301192 */
5020   BEGIN
5021 
5022       IF FND_MSG_PUB.count_msg = 0
5023       THEN
5024           FND_MSG_PUB.initialize;
5025       END IF;
5026 
5027     IF (p_structure_version_name IS NOT NULL) AND
5028        (p_structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
5029        ((p_structure_version_id IS NULL) OR (p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) THEN
5030       --get structure for input type
5031       OPEN c2;
5032       FETCH c2 into l_proj_element_id;
5033       IF c2%NOTFOUND THEN
5034         PA_UTILS.ADD_MESSAGE(
5035                          p_app_short_name => 'PA'
5036                         ,p_msg_name       => 'PA_PS_NO_STRUC_VER_CREATED');
5037         CLOSE c2;
5038         RAISE FND_API.G_EXC_ERROR;
5039       END IF;
5040       CLOSE c2;
5041 
5042       IF l_proj_element_id IS NOT NULL
5043       THEN
5044           IF PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Name_Unique(
5045                    p_structure_version_name       => p_structure_version_name
5046                   ,p_pev_structure_id             => null
5047                   ,p_project_id                   => p_project_id
5048                   ,p_structure_id                 => l_proj_element_id
5049                ) = 'N'
5050           THEN
5051               PA_UTILS.ADD_MESSAGE(
5052                          p_app_short_name => 'PA'
5053                         ,p_msg_name       => 'PA_PS_STRUC_VER_NAM_UNIQUE');
5054               RAISE FND_API.G_EXC_ERROR;
5055           END IF;
5056       END IF;
5057 
5058       IF (p_structure_type = 'FINANCIAL') THEN
5059         --If this is financial, check if there is working version
5060         OPEN c3;
5061         FETCH c3 into l_enable_wp_version_flag;
5062         CLOSE c3;
5063         IF (l_enable_wp_version_flag = 'Y') THEN
5064           --if enable wp version flag is 'Y', and if a working (unpublished)
5065           --version exist.
5066           OPEN c4 (l_proj_element_id);
5067           FETCH c4 into l_dummy;
5068           IF (c4%FOUND) THEN
5069             --there is a working version; cannot create another one.
5070             CLOSE c4;
5071             PA_UTILS.ADD_MESSAGE(
5072                          p_app_short_name => 'PA'
5073                         --,p_msg_name       => 'PA_PS_NO_STRUC_VER_CREATED');
5074             ,p_msg_name       => 'PA_PS_WORKING_STRUC_VER_EXIST'); --bug # 3713107
5075             RAISE FND_API.G_EXC_ERROR;
5076           END IF;
5077           CLOSE c4;
5078           --create a new financial structure version
5079 
5080           --Create structure version
5081           OPEN cur_elem_ver_seq;
5082           FETCH cur_elem_ver_seq INTO x_structure_version_id;
5083           CLOSE cur_elem_ver_seq;
5084 
5085     -- Fix for 4657794 :- This is fix for regression introduced by 4537865
5086     -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_new_structure_version_id
5087     -- to  x_structure_version_id
5088 
5089     l_new_structure_version_id := x_structure_version_id ;
5090 
5091     -- End 4657794
5092 
5093           PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row(
5094             X_ROW_ID                     => X_row_id
5095          --,X_ELEMENT_VERSION_ID         => x_structure_version_id       * Commented for Bug Fix: 4537865
5096            ,X_ELEMENT_VERSION_ID     => l_new_structure_version_id       -- added for Bug fix: 4537865
5097            ,X_PROJ_ELEMENT_ID            => l_proj_element_id
5098            ,X_OBJECT_TYPE                => 'PA_STRUCTURES'
5099            ,X_PROJECT_ID                 => p_project_id
5100            ,X_PARENT_STRUCTURE_VERSION_ID=> x_structure_version_id
5101            ,X_DISPLAY_SEQUENCE           => null
5102            ,X_WBS_LEVEL                   => null
5103            ,X_WBS_NUMBER          => '0'
5104            ,X_ATTRIBUTE_CATEGORY    => null
5105            ,X_ATTRIBUTE1          => null
5106            ,X_ATTRIBUTE2          => null
5107            ,X_ATTRIBUTE3          => null
5108            ,X_ATTRIBUTE4          => null
5109            ,X_ATTRIBUTE5          => null
5110            ,X_ATTRIBUTE6          => null
5111            ,X_ATTRIBUTE7          => null
5112            ,X_ATTRIBUTE8          => null
5113            ,X_ATTRIBUTE9          => null
5114            ,X_ATTRIBUTE10              => null
5115            ,X_ATTRIBUTE11              => null
5116            ,X_ATTRIBUTE12              => null
5117            ,X_ATTRIBUTE13              => null
5118            ,X_ATTRIBUTE14              => null
5119            ,X_ATTRIBUTE15              => null
5120            ,X_TASK_UNPUB_VER_STATUS_CODE => null
5121            ,X_SOURCE_OBJECT_ID           => p_project_id
5122            ,X_SOURCE_OBJECT_TYPE         => 'PA_PROJECTS'
5123           );
5124           -- added for Bug fix: 4537865
5125             x_structure_version_id := l_new_structure_version_id;
5126           -- added for Bug fix: 4537865
5127 
5128           IF x_structure_version_id IS NULL THEN
5129             PA_UTILS.ADD_MESSAGE(
5130                          p_app_short_name => 'PA'
5131                         ,p_msg_name       => 'PA_PS_NO_STRUC_VER_CREATED');
5132             raise FND_API.G_EXC_ERROR;
5133           END IF;
5134 
5135           --Get structure version number
5136           OPEN get_working_ver_num(p_project_id, l_proj_element_id);
5137           FETCH get_working_ver_num INTO l_struc_ver_number;
5138           CLOSE get_working_ver_num;
5139 
5140           PA_PROJ_ELEM_VER_STRUCTURE_PKG.insert_row(
5141             X_ROWID                       => x_row_id
5142           , X_PEV_STRUCTURE_ID            => x_pev_structure_id
5143           , X_ELEMENT_VERSION_ID          => x_structure_version_id
5144           , X_VERSION_NUMBER              => l_struc_ver_number
5145           , X_NAME                        => p_structure_version_name
5146           , X_PROJECT_ID                  => p_project_id
5147           , X_PROJ_ELEMENT_ID             => l_proj_element_id
5148           , X_DESCRIPTION                 => p_description
5149           , X_EFFECTIVE_DATE              => null
5150           , X_PUBLISHED_DATE              => null
5151           , X_PUBLISHED_BY                => null
5152           , X_CURRENT_BASELINE_DATE       => null
5153           , X_CURRENT_BASELINE_FLAG       => 'N'
5154           , X_CURRENT_BASELINE_BY         => null
5155           , X_ORIGINAL_BASELINE_DATE      => null
5156           , X_ORIGINAL_BASELINE_FLAG      => 'N'
5157           , X_ORIGINAL_BASELINE_BY        => null
5158           , X_LOCK_STATUS_CODE            => NULL
5159           , X_LOCKED_BY                   => NULL
5160           , X_LOCKED_DATE                 => NULL
5161           , X_STATUS_CODE                 => 'STRUCTURE_WORKING'
5162           , X_WF_STATUS_CODE              => NULL
5163           , X_LATEST_EFF_PUBLISHED_FLAG   => 'N'
5164           , X_RECORD_VERSION_NUMBER       => 1
5165           , X_CHANGE_REASON_CODE          => NULL
5166           , X_CURRENT_WORKING_FLAG        => 'Y'            /* Since this is a shared + versioned senario and only one struc version then it should be CWV. bug 3301192 */
5167           , X_SOURCE_OBJECT_ID            => p_project_id
5168           , X_SOURCE_OBJECT_TYPE          => 'PA_PROJECTS'
5169           );
5170 
5171             PA_TASK_PUB1.Create_Schedule_Version(
5172                    p_element_version_id        => x_structure_version_id
5173                   ,p_scheduled_start_date      => SYSDATE
5174                   ,p_scheduled_end_date        => SYSDATE
5175                   ,x_pev_schedule_id           => x_pev_schedule_id
5176                   ,x_return_status             => l_return_status
5177                   ,x_msg_count                 => l_msg_count
5178                   ,x_msg_data                  => l_msg_data
5179              );
5180 
5181             IF l_return_status <> 'S' THEN
5182                 PA_UTILS.ADD_MESSAGE(
5183                        p_app_short_name => 'PA'
5184                       ,p_msg_name       => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
5185                 raise FND_API.G_EXC_ERROR;
5186             END IF;
5187 
5188         ELSE
5189           --a version exists. Cannot create.
5190           PA_UTILS.ADD_MESSAGE(
5191                          p_app_short_name => 'PA'
5192                         ,p_msg_name       => 'PA_PS_NO_STRUC_VER_CREATED');
5193           RAISE FND_API.G_EXC_ERROR;
5194         END IF;
5195       ELSE
5196 /*
5197         --check if this is workplan type structure only
5198         IF (PA_PROJECT_STRUCTURE_UTILS.Get_struc_Type_for_Structure(
5199                                        l_proj_element_id, 'FINANCIAL') = 'Y') THEN
5200           --cannot create because this structure contains financial information also
5201           PA_UTILS.ADD_MESSAGE(
5202                          p_app_short_name => 'PA'
5203                         ,p_msg_name       => 'PA_PS_NO_STRUC_VER_CREATED');
5204           RAISE FND_API.G_EXC_ERROR;
5205         END IF;
5206 */
5207         IF NVL( IS_WP_VERSIONING_ENABLED( p_project_id ), 'N' ) = 'N'
5208         THEN
5209           --cannot create because versioning is not enabled.
5210           PA_UTILS.ADD_MESSAGE(
5211                          p_app_short_name => 'PA'
5212                         ,p_msg_name       => 'PA_PS_NO_STRUC_VER_CREATED');
5213           RAISE FND_API.G_EXC_ERROR;
5214         END IF;
5215         --create a new workplan structure version
5216         OPEN cur_elem_ver_seq;
5217         FETCH cur_elem_ver_seq INTO x_structure_version_id;
5218         CLOSE cur_elem_ver_seq;
5219 
5220     -- Fix for 4657794 :- This is fix for regression introduced by 4537865
5221     -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_new_structure_version_id
5222     -- to  x_structure_version_id
5223 
5224     l_new_structure_version_id := x_structure_version_id ;
5225 
5226     -- End 4657794
5227 
5228         PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row(
5229             X_ROW_ID                     => X_row_id
5230          --,X_ELEMENT_VERSION_ID         => x_structure_version_id      * commented for Bug fix: 4537865
5231            , X_ELEMENT_VERSION_ID    => l_new_structure_version_id       -- added for Bug fix: 4537865
5232            ,X_PROJ_ELEMENT_ID            => l_proj_element_id
5233            ,X_OBJECT_TYPE                => 'PA_STRUCTURES'
5234            ,X_PROJECT_ID                 => p_project_id
5235            ,X_PARENT_STRUCTURE_VERSION_ID=> x_structure_version_id
5236            ,X_DISPLAY_SEQUENCE           => null
5237            ,X_WBS_LEVEL                   => null
5238            ,X_WBS_NUMBER          => '0'
5239            ,X_ATTRIBUTE_CATEGORY    => null
5240            ,X_ATTRIBUTE1          => null
5241            ,X_ATTRIBUTE2          => null
5242            ,X_ATTRIBUTE3          => null
5243            ,X_ATTRIBUTE4          => null
5244            ,X_ATTRIBUTE5          => null
5245            ,X_ATTRIBUTE6          => null
5246            ,X_ATTRIBUTE7          => null
5247            ,X_ATTRIBUTE8          => null
5248            ,X_ATTRIBUTE9          => null
5249            ,X_ATTRIBUTE10              => null
5250            ,X_ATTRIBUTE11              => null
5251            ,X_ATTRIBUTE12              => null
5252            ,X_ATTRIBUTE13              => null
5253            ,X_ATTRIBUTE14              => null
5254            ,X_ATTRIBUTE15              => null
5255            ,X_TASK_UNPUB_VER_STATUS_CODE => null
5256            ,X_SOURCE_OBJECT_ID           => p_project_id
5257            ,X_SOURCE_OBJECT_TYPE         => 'PA_PROJECTS'
5258         );
5259          -- added for Bug fix: 4537865
5260          x_structure_version_id := l_new_structure_version_id;
5261           -- added for Bug fix: 4537865
5262 
5263         IF x_structure_version_id IS NULL THEN
5264           PA_UTILS.ADD_MESSAGE(
5265                          p_app_short_name => 'PA'
5266                         ,p_msg_name       => 'PA_PS_NO_STRUC_VER_CREATED');
5267           raise FND_API.G_EXC_ERROR;
5268         END IF;
5269 
5270         --Get structure version number
5271         OPEN get_working_ver_num(p_project_id, l_proj_element_id);
5272         FETCH get_working_ver_num INTO l_struc_ver_number;
5273         --FPM bug 3301192
5274         --if there is no working version( un-publihsed) then this is the CWV
5275         IF get_working_ver_num%NOTFOUND
5276         THEN
5277            l_current_working_ver_flag := 'Y';
5278         ELSE
5279            l_current_working_ver_flag := 'N';
5280         END IF;
5281         --end FPM bug 3301192
5282         CLOSE get_working_ver_num;
5283 
5284         PA_PROJ_ELEM_VER_STRUCTURE_PKG.insert_row(
5285             X_ROWID                       => x_row_id
5286           , X_PEV_STRUCTURE_ID            => x_pev_structure_id
5287           , X_ELEMENT_VERSION_ID          => x_structure_version_id
5288           , X_VERSION_NUMBER              => l_struc_ver_number
5289           , X_NAME                        => p_structure_version_name
5290           , X_PROJECT_ID                  => p_project_id
5291           , X_PROJ_ELEMENT_ID             => l_proj_element_id
5292           , X_DESCRIPTION                 => p_description
5293           , X_EFFECTIVE_DATE              => null
5294           , X_PUBLISHED_DATE              => null
5295           , X_PUBLISHED_BY                => null
5296           , X_CURRENT_BASELINE_DATE       => null
5297           , X_CURRENT_BASELINE_FLAG       => 'N'
5298           , X_CURRENT_BASELINE_BY         => null
5299           , X_ORIGINAL_BASELINE_DATE      => null
5300           , X_ORIGINAL_BASELINE_FLAG      => 'N'
5301           , X_ORIGINAL_BASELINE_BY        => null
5302           , X_LOCK_STATUS_CODE            => NULL
5303           , X_LOCKED_BY                   => NULL
5304           , X_LOCKED_DATE                 => NULL
5305           , X_STATUS_CODE                 => 'STRUCTURE_WORKING'
5306           , X_WF_STATUS_CODE              => NULL
5307           , X_LATEST_EFF_PUBLISHED_FLAG   => 'N'
5308           , X_RECORD_VERSION_NUMBER       => 1
5309           , X_CHANGE_REASON_CODE          => NULL
5310           , X_CURRENT_WORKING_FLAG        => l_current_working_ver_flag      /* bug 3301192 */
5311           , X_SOURCE_OBJECT_ID            => p_project_id
5312           , X_SOURCE_OBJECT_TYPE          => 'PA_PROJECTS'
5313         );
5314 
5315         PA_TASK_PUB1.Create_Schedule_Version(
5316                    p_element_version_id        => x_structure_version_id
5317                   ,p_scheduled_start_date      => SYSDATE
5318                   ,p_scheduled_end_date        => SYSDATE
5319                   ,x_pev_schedule_id           => x_pev_schedule_id
5320                   ,x_return_status             => l_return_status
5321                   ,x_msg_count                 => l_msg_count
5322                   ,x_msg_data                  => l_msg_data
5323         );
5324 
5325         IF l_return_status <> 'S' THEN
5326           PA_UTILS.ADD_MESSAGE(
5327                        p_app_short_name => 'PA'
5328                       ,p_msg_name       => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
5329           raise FND_API.G_EXC_ERROR;
5330         END IF;
5331     -- Bug 4574032 Begin
5332     BEGIN
5333     PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions
5334               (
5335                 p_context                => 'WORKPLAN'
5336                ,p_project_id             => p_project_id
5337                ,p_struct_elem_version_id => x_structure_version_id
5338                ,x_return_status          => l_return_status
5339                ,x_msg_count              => l_msg_count
5340                ,x_Msg_data               => l_msg_data
5341               );
5342     EXCEPTION
5343         WHEN OTHERS THEN
5344             fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
5345                 p_procedure_name => 'CREATE_UPDATE_STRUCT_VER',
5346                 p_error_text => SUBSTRB('call of pa_fp_planning_transaction_pub.add_planning_transactions failed. sqlerrm= :'||SQLERRM,1,240));
5347                         raise  fnd_api.g_exc_error;
5348     END;
5349         IF l_return_status <> 'S' THEN
5350           raise FND_API.G_EXC_ERROR;
5351         END IF;
5352     -- Bug 4574032 End
5353       END IF;
5354     ELSE
5355       --update existing structure
5356       IF (p_structure_version_id IS NOT NULL) AND (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
5357 
5358         --check if name is passed in
5359         open c1;
5360         fetch c1 into l_pev_structure_id, l_name, l_record_version_number;
5361         close c1;
5362         If (p_structure_version_name IS NOT NULL) AND
5363            (p_structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
5364           l_name := p_structure_version_name;
5365         END IF;
5366 
5367         --call update_structure_version_attr API
5368         PA_PROJECT_STRUCTURE_PVT1.update_structure_version_attr(
5369           p_pev_structure_id => l_pev_structure_id
5370          ,p_structure_version_name => l_name
5371          ,p_structure_version_desc => p_description
5372          ,p_record_version_number => l_record_version_number
5373          ,x_return_status => x_return_status
5374          ,x_msg_count => x_msg_count
5375          ,x_msg_data => x_msg_data
5376         );
5377       END IF;
5378     END IF;
5379   EXCEPTION
5380     WHEN FND_API.G_EXC_ERROR THEN
5381       x_msg_count := FND_MSG_PUB.count_msg;
5382       x_return_status := FND_API.G_RET_STS_ERROR;
5383     WHEN OTHERS THEN
5384       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5385       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
5386                           p_procedure_name => 'CREATE_UPDATE_STRUCT_VER',
5387                           p_error_text     => SUBSTRB(SQLERRM,1,240));
5388 END create_update_struct_ver;
5389 
5390 -- API name                      : IS_WP_SEPARATE_FROM_FN
5391 -- Type                          : PL/sql Public Function
5392 -- Pre-reqs                      : None
5393 -- Return Value                  : 'Y', 'N'
5394 -- Prameters
5395 -- p_project_id                       IN NUMBER
5396 --  History
5397 --
5398 --  21-AUG-02   MAansari             -Created
5399 --
5400 --  Notes: This api is returns 'TRUE' if WORKPLAN is separate from
5401 --         FINANCIAL structure
5402 
5403 FUNCTION IS_WP_SEPARATE_FROM_FN
5404 (
5405   p_project_id                       IN NUMBER
5406  ) RETURN VARCHAR2 IS
5407    l_return_value  VARCHAR2(1) := 'N';
5408 
5409 BEGIN
5410     --Call Huberts API to check whether a workplan structure is separate from financial
5411     IF PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED( p_project_id ) = 'N'
5412     THEN
5413         l_return_value := 'Y';
5414     END IF;
5415     RETURN ( NVL( l_return_value, 'N' ) );
5416 END IS_WP_SEPARATE_FROM_FN;
5417 
5418 -- API name                      : IS_WP_VERSIONING_ENABLED
5419 -- Type                          : PL/sql Public Function
5420 -- Pre-reqs                      : None
5421 -- Return Value                  : 'Y', 'N'
5422 -- Prameters
5423 -- p_project_id                       IN NUMBER
5424 --  History
5425 --
5426 --  22-AUG-02   MAansari             -Created
5427 --
5428 --  Notes: This api is returns 'Y' if WORKPLAN is separate from
5429 --         FINANCIAL structure
5430 
5431 FUNCTION IS_WP_VERSIONING_ENABLED
5432 (
5433   p_project_id                       IN NUMBER
5434  ) RETURN VARCHAR2 IS
5435    l_return_value  VARCHAR2(1) := 'Y';
5436 
5437 BEGIN
5438     --Call Andrews API to check whether a workplan versioning is enabled or not.
5439     l_return_value := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED( p_project_id );
5440     RETURN ( NVL( l_return_value, 'N' ) );
5441 
5442 END IS_WP_VERSIONING_ENABLED;
5443 
5444 -- API name                      : get_proj_dates_delta
5445 -- Type                          : PL/sql Public Function
5446 -- Pre-reqs                      : None
5447 -- Return Value                  : NUMBER
5448 -- Prameters
5449 -- p_project_id                       IN NUMBER
5450 --  History
5451 --
5452 --  22-AUG-02   MAansari             -Created
5453 --
5454 --  Notes:
5455 
5456      -- get original project start and completion dates
5457      -- determine the shift days (delta).
5458      -- delta = new project start date - nvl(old project start date,
5459      --             earlist task start date)
5460 
5461    --        old project   new project
5462    --  case  start date    start date    new start date     new end date
5463    --  ----   -----------   -----------  -----------------  -----------------
5464    --   A     not null      not null     old start date     old end date
5465    --                          + delta      + delta
5466    --   B-1   null      not null     old start date     old end date
5467    --         (old task has start date)    + delta         + delta
5468    --   B-2   null      not null     new proj start     new proj completion
5469    --         (old task has no start date) date            date
5470    --   C     not null       null   old start date         old end date
5471    --   D     null      null   old start date         old end date
5472 
5473 FUNCTION get_proj_dates_delta(
5474    x_orig_project_id  IN NUMBER
5475   ,x_start_date       IN DATE )
5476 RETURN NUMBER IS
5477 
5478         cursor c1 is
5479           select start_date
5480           from pa_projects
5481           where project_id = x_orig_project_id;
5482 
5483             -- use min(start_date) as pseudo original project start
5484          cursor c2 is
5485                select min(start_date) min_start
5486                  from pa_tasks
5487                 where project_id = x_orig_project_id;
5488 
5489          c2_rec  c2%rowtype;
5490          x_delta       NUMBER;
5491          x_orig_start_date DATE;
5492 begin
5493 
5494           open c1;
5495           fetch c1 into x_orig_start_date;
5496           close c1;
5497 
5498           if (x_start_date is null) then
5499                -- case C or D
5500                x_delta := 0;
5501           elsif (x_orig_start_date is not null) then
5502                -- case A
5503                x_delta := x_start_date - x_orig_start_date;
5504           else
5505                -- case B
5506                         open c2;
5507                         fetch c2 into c2_rec;
5508                         if c2%found then
5509                   -- case B-1:  x_delta is difference between
5510                   --            new project start date and the
5511                   --            start date of the earlist task
5512                   --            of old project
5513                   -- case B-2:  x_delta is NULL
5514                            x_delta := x_start_date - c2_rec.min_start;
5515                         end if;
5516                         close c2;
5517 
5518           end if;
5519             RETURN x_delta;
5520 end get_proj_dates_delta;
5521 
5522 -- API name                      : create_task_structure2
5523 -- Type                          : PL/sql Public procedure
5524 -- Pre-reqs                      : None
5525 -- Return Value                  : N/A
5526 -- Prameters
5527 -- p_project_id            IN NUMBER
5528 --  ,p_task_id              IN NUMBER
5529 --  ,p_parent_task_id       IN NUMBER
5530 --  ,p_task_number          IN VARCHAR2
5531 --  ,p_task_name            IN VARCHAR2
5532 --  ,p_task_description     IN VARCHAR2
5533 --  ,p_carrying_out_organization_id NUMBER
5534 -- x_msg_count             OUT NUMBER
5535 -- x_msg_data              OUT VARCHAR2
5536 -- x_return_status         OUT VARCHAR2
5537 --
5538 --  History
5539 --
5540 --  22-AUG-01   MAansari             -Created
5541 --
5542 --  Notes : THis is API is created to avoid the Implementation level error that is thrown
5543 --          in the forms if any parameter with default containg a remote package variable is referenced.
5544 
5545 PROCEDURE create_task_structure2(
5546    p_calling_module         IN VARCHAR2 := 'FORMS'
5547   ,p_project_id           IN NUMBER
5548   ,p_task_id              IN NUMBER
5549   ,p_parent_task_id       IN NUMBER
5550   ,p_ref_task_id          IN NUMBER   := -9999
5551   ,p_task_number          IN VARCHAR2
5552   ,p_task_name            IN VARCHAR2
5553   ,p_task_description     IN VARCHAR2
5554   ,p_carrying_out_organization_id IN NUMBER
5555   ,p_structure_type       IN VARCHAR2 := 'FINANCIAL'
5556   ,P_PM_SOURCE_reference                IN VARCHAR2
5557   ,P_PM_SOURCE_code                     IN VARCHAR2
5558   ,p_task_manager_id                  IN NUMBER
5559   ,p_location_id                      IN NUMBER
5560   ,p_financial_task_flag              IN VARCHAR2 := 'Y'   --bug 3301192
5561   ,x_task_version_id                    OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5562   ,x_task_id                            OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5563   ,x_msg_count            OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5564   ,x_msg_data             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5565   ,x_return_status        OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
5566 BEGIN
5567     create_task_structure(
5568        p_calling_module                => p_calling_module
5569       ,p_project_id                    => p_project_id
5570       ,p_task_id                       => p_task_id
5571       ,p_parent_task_id                => p_parent_task_id
5572       ,p_ref_task_id                   => p_ref_task_id
5573       ,p_task_number                   => p_task_number
5574       ,p_task_name                     => p_task_name
5575       ,p_task_description              => p_task_description
5576       ,p_carrying_out_organization_id  => p_carrying_out_organization_id
5577       ,p_manager_person_id             => p_task_manager_id
5578       ,p_location_id                   => p_location_id
5579       ,p_structure_type                => p_structure_type
5580       ,p_financial_task_flag           => p_financial_task_flag  --bug 3301192
5581       ,x_task_version_id               => x_task_version_id
5582       ,x_task_id                       => x_task_id
5583       ,x_msg_count                     => x_msg_count
5584       ,x_msg_data                      => x_msg_data
5585       ,x_return_status                 => x_return_status
5586     );
5587 END create_task_structure2;
5588 
5589 -- API name                      : update_task_structure2
5590 -- Type                          : PL/sql Public procedure
5591 -- Pre-reqs                      : None
5592 -- Return Value                  : N/A
5593 -- Prameters
5594 --   p_calling_module                   IN VARCHAR2
5595 --  ,p_task_id                          IN NUMBER
5596 --  ,p_task_number                      IN VARCHAR2
5597 --  ,p_task_name                        IN VARCHAR2
5598 --  ,p_task_description                 IN VARCHAR2
5599 --  ,p_carrying_out_organization_id     IN NUMBER
5600 --  ,p_task_manager_id                  IN NUMBER
5601 --  ,p_pm_product_code                  IN VARCHAR2
5602 --  ,p_pm_task_reference                IN VARCHAR2
5603 --  ,p_record_version_number           IN NUMBER
5604 --  ,x_msg_count                        OUT NUMBER
5605 --  ,x_msg_data                         OUT VARCHAR2
5606 --  ,x_return_status                    OUT VARCHAR2--
5607 --  History
5608 --
5609 --  22-AUG-02   MAansari             -Created
5610 --
5611 --  Notes : THis is API is created to avoid the Implementation level error that is thrown
5612 --          in the forms if any parameter with default containg a remote package variable is referenced.
5613 
5614 PROCEDURE update_task_structure2
5615 (
5616    p_calling_module                   IN VARCHAR2 := 'FORMS'
5617   ,p_ref_task_id                      IN NUMBER
5618   ,p_project_id                       IN NUMBER
5619   ,p_task_id                          IN NUMBER
5620   ,p_task_number                      IN VARCHAR2
5621   ,p_task_name                        IN VARCHAR2
5622   ,p_task_description                 IN VARCHAR2
5623   ,p_carrying_out_organization_id     IN NUMBER
5624   ,p_structure_type                   IN VARCHAR2 := 'FINANCIAL'
5625   ,p_task_manager_id                  IN NUMBER
5626   ,p_pm_product_code                  IN VARCHAR2
5627   ,p_pm_task_reference                IN VARCHAR2
5628   ,p_location_id                      IN NUMBER
5629   ,x_msg_count                        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5630   ,x_msg_data                         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5631   ,x_return_status                    OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
5632 BEGIN
5633 
5634     update_task_structure(
5635        p_calling_module                => p_calling_module
5636       ,p_ref_task_id                   => p_ref_task_id
5637       ,p_project_id                    => p_project_id
5638       ,p_task_id                       => p_task_id
5639       ,p_task_number                   => p_task_number
5640       ,p_task_name                     => p_task_name
5641       ,p_task_description              => p_task_description
5642       ,p_carrying_out_organization_id  => p_carrying_out_organization_id
5643       ,p_structure_type                => p_structure_type
5644       ,p_task_manager_id               => p_task_manager_id
5645       ,p_pm_product_code               => p_pm_product_code
5646       ,p_pm_task_reference             => p_pm_task_reference
5647       ,p_location_id                   => p_location_id
5648       ,x_msg_count                     => x_msg_count
5649       ,x_msg_data                      => x_msg_data
5650       ,x_return_status                 => x_return_status
5651     );
5652 
5653 END update_task_structure2;
5654 
5655 -- API name                      : get_struc_task_ver_ids
5656 -- Type                          : PL/sql Public Function
5657 -- Pre-reqs                      : None
5658 -- Return Value                  : N/A
5659 -- Prameters
5660 -- p_project_id                       IN NUMBER
5661 --  History
5662 --
5663 --  21-AUG-02   MAansari             -Created
5664 --
5665 --  Notes: This api returns task_version_id and parent_structure_version_id for the tasks
5666 --         displayed in Forms.
5667 
5668 PROCEDURE get_struc_task_ver_ids
5669   (
5670     p_project_id                       IN NUMBER
5671     ,p_task_id                          IN NUMBER
5672     ,x_task_version_id                  OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5673     ,x_parent_struc_version_id          OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5674    ) IS
5675 
5676      CURSOR cur_proj_elems( c_parent_struc_ver_id NUMBER )
5677      IS
5678        SELECT element_version_id, parent_structure_version_id
5679          FROM pa_proj_element_versions
5680         WHERE project_id = p_project_id
5681           AND proj_element_id = p_task_id
5682           AND parent_structure_version_id = c_parent_struc_ver_id
5683           AND object_type = 'PA_TASKS';
5684 
5685       CURSOR cur_pa_work_ver
5686       IS
5687          SELECT element_version_id
5688            FROM pa_proj_elem_ver_structure
5689           WHERE project_id = p_project_id
5690             AND status_code = 'STRUCTURE_WORKING';
5691 
5692       l_structure_version_id NUMBER;
5693   BEGIN
5694       l_structure_version_id := PA_PROJ_ELEMENTS_UTILS.latest_published_ver_id( p_project_id,'FINANCIAL' );
5695 
5696       IF l_structure_version_id IS NULL OR l_structure_version_id = -1
5697       THEN
5698           OPEN cur_pa_work_ver;
5699           FETCH cur_pa_work_ver INTO l_structure_version_id;
5700           CLOSE cur_pa_work_ver;
5701       END IF;
5702 
5703       IF p_task_id IS NOT NULL
5704       THEN
5705        OPEN cur_proj_elems( l_structure_version_id );
5706        FETCH cur_proj_elems INTO x_task_version_id, x_parent_struc_version_id;
5707        CLOSE cur_proj_elems;
5708       ELSE
5709          IF l_structure_version_id <> -1 THEN
5710             x_parent_struc_version_id := l_structure_version_id;
5711          END IF;
5712       END IF;
5713   END get_struc_task_ver_ids;
5714 
5715 -- API name                      : WP_STR_EXISTS
5716 -- Type                          : PL/sql Public Function
5717 -- Pre-reqs                      : None
5718 -- Return Value                  : 'Y', 'N'
5719 -- Prameters
5720 -- p_project_id                       IN NUMBER
5721 --  History
5722 --
5723 --  21-AUG-02   MAansari             -Created
5724 --
5725 --  Notes: This api is returns 'TRUE' if WORKPLAN str exists
5726 
5727 FUNCTION WP_STR_EXISTS
5728 (
5729   p_project_id                       IN NUMBER
5730  ) RETURN VARCHAR2 IS
5731    l_return_value  VARCHAR2(1) := 'N';
5732    l_dummy_char  VARCHAR2(1) := 'N';
5733 
5734   CURSOR cur_pa_proj
5735   IS
5736 /*    SELECT proj_element_id
5737       FROM pa_proj_elements
5738      WHERE project_id = p_project_id
5739        AND object_type = 'PA_STRUCTURES';
5740 */
5741     SELECT 'x'
5742       FROM pa_proj_elements ppe, pa_proj_structure_types ppst
5743      WHERE ppe.project_id = p_project_id
5744        AND ppe.object_type = 'PA_STRUCTURES'
5745        AND ppe.proj_element_id = ppst.proj_element_id
5746        AND ppst.structure_type_id = 1;  --'WORKPLAN'
5747 
5748 
5749 BEGIN
5750     --Call Huberts API to check whether a workplan structure is separate from financial
5751 
5752  /*   FOR cur_pa_proj_rec in cur_pa_proj LOOP
5753         l_return_value := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(
5754                           cur_pa_proj_rec.proj_element_id, 'WORKPLAN' );
5755         IF NVL( l_return_value, 'N' ) = 'Y'
5756         THEN
5757             Exit;
5758         END IF;
5759     END LOOP;
5760 */
5761     open cur_pa_proj;
5762     fetch cur_pa_proj INTO l_dummy_char;
5763     IF cur_pa_proj%FOUND
5764     THEN
5765         l_return_value  := 'Y';
5766     ELSE
5767         l_return_value  := 'N';
5768     END IF;
5769     CLOSE cur_pa_proj;
5770 
5771     RETURN ( NVL( l_return_value, 'N' ) );
5772 
5773 END WP_STR_EXISTS;
5774 
5775 FUNCTION DATE_SYNC_UP_METHOD
5776 (
5777   p_project_id                       IN NUMBER
5778  ) RETURN VARCHAR2 IS
5779   CURSOR cur_pa_proj_elems
5780   IS
5781     SELECT ppe.proj_element_id
5782       FROM pa_proj_elements ppe, pa_proj_structure_types ppst
5783      WHERE ppe.project_id = p_project_id
5784        AND ppe.object_type = 'PA_STRUCTURES'
5785        AND ppe.proj_element_id = ppst.proj_element_id
5786        AND ppst.structure_type_id = 1;  --'WORKPLAN'
5787 
5788     l_proj_element_id  NUMBER;
5789   l_return_value   VARCHAR2(1);
5790 
5791 BEGIN
5792 
5793     OPEN cur_pa_proj_elems;
5794     FETCH cur_pa_proj_elems INTO l_proj_element_id;
5795     CLOSE cur_pa_proj_elems;
5796 
5797     l_return_value := PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_DATE_SYNC_ENABLED( l_proj_element_id );
5798     RETURN l_return_value;
5799 END DATE_SYNC_UP_METHOD;
5800 
5801 PROCEDURE update_trans_dates(
5802    p_project_id                       IN  NUMBER
5803   ,x_msg_count                        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5804   ,x_msg_data                         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5805   ,x_return_status                    OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
5806 BEGIN
5807 
5808     x_return_status := 'S';
5809     PA_PROJECT_DATES_PUB.COPY_PROJECT_DATES
5810   (
5811      p_project_id                    => p_project_id
5812     ,x_return_status                 => x_return_status
5813     ,x_msg_count                     => x_msg_count
5814     ,x_msg_data                      => x_msg_data
5815   );
5816 
5817 END update_trans_dates;
5818 
5819 
5820 PROCEDURE update_wp_calendar(
5821     p_project_id                      IN  NUMBER
5822    ,p_calendar_id                     IN  NUMBER
5823    ,x_return_status                   OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5824    ,x_msg_count                       OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5825    ,x_msg_data                        OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5826   )
5827 IS
5828 BEGIN
5829   PA_PROJECT_STRUCTURE_PVT1.update_wp_calendar(
5830             p_project_id => p_project_id
5831            ,p_calendar_id => p_calendar_id
5832            ,x_return_status => x_return_status
5833            ,x_msg_count => x_msg_count
5834            ,x_msg_data => x_msg_data
5835           );
5836 END update_wp_calendar;
5837 
5838 PROCEDURE create_tasks_versions_only(
5839    p_calling_module       IN VARCHAR2 := 'FORMS'
5840   ,p_structure_type       IN VARCHAR2 := 'FINANCIAL'
5841   ,p_project_id           IN NUMBER
5842   ,p_structure_version_id IN NUMBER
5843   ,p_pm_product_code      IN VARCHAR2 := 'JUNK_CHARS'
5844   ,p_tasks_in              IN pa_project_pub.task_in_tbl_type
5845   ,x_msg_count            OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5846   ,x_msg_data             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5847   ,x_return_status        OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
5848 
5849 
5850   v_first_index                NUMBER;
5851   i                            NUMBER;
5852   v_parent_task_id             NUMBER;
5853   l_return_status          VARCHAR2(1);
5854   l_msg_count              NUMBER;
5855   l_msg_data               VARCHAR2(2000);
5856   v_ref_task_id            NUMBER;
5857   l_task_version_id        NUMBER;
5858   l_task_id                NUMBER;
5859   --Added by rtarway for BUG 3990873
5860   l_pa_task_id             NUMBER;
5861 
5862   CURSOR cur_get_existing_task_id (c_project_id pa_projects_all.project_id%TYPE,
5863                             c_pm_source_reference pa_proj_elements.pm_source_reference%TYPE) IS
5864     SELECT proj_element_id
5865     FROM   pa_proj_elements pelem
5866     WHERE  project_id  = c_project_id
5867     AND    pm_source_reference = c_pm_source_reference
5868     AND    exists(select 1
5869                      from pa_proj_structure_types pstype, pa_structure_types types
5870                      where pstype.proj_element_id = pelem.parent_structure_id
5871                      and pstype.structure_type_id = types.structure_type_id
5872                      and types.structure_type = p_structure_type);
5873   --End Added by rtarway for BUG 3990873
5874 BEGIN
5875 
5876 i := p_tasks_in.first;
5877 v_first_index := i;
5878 
5879 IF p_tasks_in.exists(i)
5880 THEN
5881      WHILE i IS NOT NULL LOOP
5882         --Added by rtarway for BUG 4320731
5883     l_pa_task_id := NULL;
5884         --Commented by rtarway , chnaged If condition, BUG 3990873
5885         /*IF p_tasks_in(i).pa_task_id IS NOT NULL AND
5886            p_tasks_in(i).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5887         THEN*/
5888 
5889           --Begin add by rtarway, for BUG 3990873
5890           if ( p_tasks_in(i).pa_task_id is null or p_tasks_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
5891           then
5892                if (p_tasks_in(i).pm_task_reference is not null and p_tasks_in(i).pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
5893                then
5894                     --Cursor is deliberately used here, because we dont want to populate message in global error stack, in case new tasks
5895                     --are being added. At many places in update_task flow, error is raised based on fnd_msg_pub.count > 0
5896                     --If NO_DATA_FOUND occurs for this cursor, it will pass without error.
5897                     OPEN  cur_get_existing_task_id(p_project_id,p_tasks_in(i).pm_task_reference);
5898                     FETCH cur_get_existing_task_id into l_pa_task_id;
5899             --Added by rtarway for BUG 4320731
5900             IF ( cur_get_existing_task_id%NOTFOUND ) THEN
5901                l_pa_task_id := NULL;
5902             END IF;
5903                     CLOSE cur_get_existing_task_id;
5904                end if;
5905           else
5906                l_pa_task_id := p_tasks_in(i).pa_task_id;
5907           end if;
5908            IF l_pa_task_id IS NOT NULL
5909            then
5910           --end add by rtarway, for BUG 3990873
5911             IF (p_tasks_in(i).pa_parent_task_id IS NOT NULL
5912                 AND p_tasks_in(i).pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
5913             THEN
5914                 v_parent_task_id := p_tasks_in(i).pa_parent_task_id;
5915             ELSIF (p_tasks_in(i).pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5916                 AND p_tasks_in(i).pm_parent_task_reference IS NOT NULL)
5917             THEN
5918                 --convert pm_parent_task_reference to parent_task_id.
5919                 --All the parent tasks are created first then child tasks are created. See TRM for AMG load_task api.
5920 
5921 -- Bug 3601700 changed function call from  PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref
5922 -- to PA_PROJECT_PVT.Convert_pm_taskref_to_id_all to retrieve task id for task reference
5923 -- because PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref may return financial task id
5924 -- in case of SHARED structure
5925 -- new api call takes structure type as parameter, so it will return task id for the passed structure type only */
5926               /*   PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref(
5927                     p_pm_parent_task_reference      =>  p_tasks_in(i).pm_parent_task_reference
5928                    ,p_project_id                    =>  p_project_id
5929                    ,x_parent_task_id                =>  v_parent_task_id
5930                    ,x_return_status                 =>  l_return_status
5931                  ); */
5932 
5933            PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
5934                     p_pa_project_id      => p_project_id
5935                   , p_structure_type    => 'WORKPLAN'
5936                   , p_pm_task_reference  => p_tasks_in(i).pm_parent_task_reference
5937                   , p_out_task_id        => v_parent_task_id
5938                   , p_return_status      => l_return_status );
5939 
5940         /*IF l_return_status <> FND_API.G_RET_STS_SUCCESS
5941                 THEN
5942                    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
5943                    THEN
5944                        pa_interface_utils_pub.map_new_amg_msg
5945                           ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
5946                            ,p_msg_attribute    => 'CHANGE'
5947                            ,p_resize_flag      => 'N'
5948                            ,p_msg_context      => 'TASK'
5949                            ,p_attribute1       => l_amg_segment1
5950                            ,p_attribute2       => l_amg_task_number
5951                            ,p_attribute3       => ''
5952                            ,p_attribute4       => ''
5953                            ,p_attribute5       => '');
5954                     END IF;
5955                     RAISE  FND_API.G_EXC_ERROR;
5956                 END IF;
5957                 */
5958             ELSE
5959                 v_parent_task_id := null;
5960             END IF;
5961 
5962            --get the previous task
5963            IF i = v_first_index
5964            THEN
5965                v_ref_task_id := null;
5966            ELSE
5967                --v_ref_task_id := p_tasks_in(i-1).pa_task_id;
5968                --Added by rtarway for BUG 3990873
5969                if ( p_tasks_in(i-1).pa_task_id is not null
5970                     and p_tasks_in(i-1).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
5971                then
5972                     v_ref_task_id := p_tasks_in(i-1).pa_task_id;
5973                else
5974                      if ( p_tasks_in(i-1).pm_task_reference is not null
5975                           and p_tasks_in(i-1).pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
5976                      then
5977                          --get the task id from reference
5978                          --Cursor is deliberately used here, because we dont want to populate message in global error stack, in case new tasks
5979                          --are being added. At many places in update_task flow, error is raised based on fnd_msg_pub.count > 0
5980                          --If NO_DATA_FOUND occurs for this cursor, it will pass without error.
5981                           OPEN  cur_get_existing_task_id(p_project_id,p_tasks_in(i-1).pm_task_reference);
5982                           FETCH cur_get_existing_task_id into v_ref_task_id;
5983                           CLOSE cur_get_existing_task_id;
5984                      end if;
5985                end if;
5986            END IF;
5987 
5988             PA_PROJ_TASK_STRUC_PUB.CREATE_TASK_STRUCTURE(
5989                          p_project_id                   => p_project_id
5990 --                        ,p_task_id                      => p_tasks_in(i).pa_task_id, rtarway, BUG 3990873
5991                         ,p_task_id                      => l_pa_task_id
5992                         ,p_parent_task_id               => v_parent_task_id
5993                         ,p_ref_task_id                  => v_ref_task_id
5994                         ,p_task_number                  => p_tasks_in(i).pa_task_number
5995                         ,p_task_name                    => p_tasks_in(i).task_name
5996                         ,p_task_description             => p_tasks_in(i).task_description
5997                         ,p_carrying_out_organization_id => p_tasks_in(i).carrying_out_organization_id
5998                         ,p_calling_module               => 'AMG'
5999                         ,p_structure_type               => p_structure_type
6000                         ,p_OBLIGATION_START_DATE        => p_tasks_in(i).OBLIGATION_START_DATE
6001                         ,p_OBLIGATION_FINISH_DATE       => p_tasks_in(i).OBLIGATION_FINISH_DATE
6002                         ,p_ESTIMATED_START_DATE         => p_tasks_in(i).ESTIMATED_START_DATE
6003                         ,p_ESTIMATED_FINISH_DATE        => p_tasks_in(i).ESTIMATED_FINISH_DATE
6004                         ,p_BASELINE_START_DATE          => p_tasks_in(i).BASELINE_START_DATE
6005                         ,p_BASELINE_FINISH_DATE         => p_tasks_in(i).BASELINE_FINISH_DATE
6006                         ,p_CLOSED_DATE                  => p_tasks_in(i).CLOSED_DATE
6007                         ,p_WQ_UOM_CODE                  => p_tasks_in(i).WQ_UOM_CODE
6008                         ,p_WQ_ITEM_CODE                 => p_tasks_in(i).WQ_ITEM_CODE
6009                         ,p_STATUS_CODE                  => p_tasks_in(i).STATUS_CODE
6010                         ,p_WF_STATUS_CODE               => p_tasks_in(i).WF_STATUS_CODE
6011                         ,p_PM_SOURCE_CODE               => p_pm_product_code        --bug 2665656
6012                         ,p_PRIORITY_CODE                => p_tasks_in(i).PRIORITY_CODE
6013                         ,p_MILESTONE_FLAG               => p_tasks_in(i).MILESTONE_FLAG
6014                         ,p_CRITICAL_FLAG                => p_tasks_in(i).CRITICAL_FLAG
6015                         ,p_INC_PROJ_PROGRESS_FLAG       => p_tasks_in(i).INC_PROJ_PROGRESS_FLAG
6016                         ,p_LINK_TASK_FLAG               => p_tasks_in(i).LINK_TASK_FLAG
6017                         ,p_CALENDAR_ID                  => p_tasks_in(i).CALENDAR_ID
6018                         ,p_PLANNED_EFFORT               => p_tasks_in(i).PLANNED_EFFORT
6019                         ,p_DURATION                     => p_tasks_in(i).DURATION
6020                         ,p_PLANNED_WORK_QUANTITY        => p_tasks_in(i).PLANNED_WORK_QUANTITY
6021                         ,p_TASK_TYPE                    => p_tasks_in(i).TASK_TYPE
6022                         ,p_actual_start_date                  => p_tasks_in(i).actual_start_date
6023                         ,p_actual_finish_date                 => p_tasks_in(i).actual_finish_date
6024                         ,p_early_start_date                   => p_tasks_in(i).early_start_date
6025                         ,p_early_finish_date                  => p_tasks_in(i).early_finish_date
6026                         ,p_late_start_date                    => p_tasks_in(i).late_start_date
6027                         ,p_late_finish_date                   => p_tasks_in(i).late_finish_date
6028                         ,p_scheduled_start_date               => p_tasks_in(i).scheduled_start_date
6029                         ,p_scheduled_finish_date              => p_tasks_in(i).scheduled_finish_date
6030                         ,P_PM_SOURCE_reference                => p_tasks_in(i).pm_task_reference
6031                         ,p_location_id                        => p_tasks_in(i).address_id
6032                         ,p_manager_person_id                  => p_tasks_in(i).task_manager_person_id
6033                         ,p_structure_version_id               => p_structure_version_id
6034                         ,p_create_task_version_only           => 'Y'    --we dont need to create tasks in pa_tasks or pa_proj_elements for the existing tasks.
6035                                                                         --All we need is just to create task versions under the new structure version.
6036                         ,x_task_version_id                    => l_task_version_id
6037                         ,x_task_id                            => l_task_id
6038                         ,x_msg_count                    => x_msg_count
6039                         ,x_msg_data                     => x_msg_data
6040                         ,x_return_status                => x_return_status
6041                      );
6042         END IF;
6043         i := p_tasks_in.next(i);
6044      END LOOP;
6045 END IF;
6046 
6047 END create_tasks_versions_only;
6048 
6049 
6050 --The following API is added to re-calculate task weights to call PA_TASK_PUB1.CALC_TASK_WEIGHTS
6051 --The API is called from PA_PROJECT_PUB.create_project and PA_PROJECT_PUB.update_project
6052 
6053 PROCEDURE recalc_task_weightings(
6054    p_tasks_in             IN pa_project_pub.task_out_tbl_type
6055   ,p_task_version_id      IN NUMBER
6056   ,x_msg_count            OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6057   ,x_msg_data             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6058   ,x_return_status        OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
6059 
6060   CURSOR cur_pa_proj_elem_ver( c_task_ver_id  NUMBER )
6061   IS
6062     SELECT wbs_level
6063       FROM pa_proj_element_versions
6064     WHERE element_version_id = c_task_ver_id;
6065 
6066   i                    NUMBER;
6067   j                    NUMBER := 1;
6068 
6069   l_tasks_ver_ids      PA_NUM_1000_NUM := PA_NUM_1000_NUM();
6070   l_outline_level      PA_NUM_1000_NUM := PA_NUM_1000_NUM();
6071   l_total_top_tasks    NUMBER := 0;
6072   l_wbs_level          NUMBER;
6073 
6074   l_msg_count          NUMBER;
6075   l_return_status      VARCHAR2(1);
6076   l_msg_data           VARCHAR2(2000);
6077   l_data               VARCHAR2(2000);
6078   l_msg_index_out      NUMBER;
6079   API_ERROR            EXCEPTION;
6080   l_recalculate_flag   VARCHAR2(1);
6081 
6082 BEGIN
6083 
6084 IF p_task_version_id IS NULL
6085 THEN
6086 
6087   i := p_tasks_in.first;
6088 
6089   IF p_tasks_in.exists(i)
6090   THEN
6091      WHILE i IS NOT NULL LOOP
6092         IF p_tasks_in(i).task_version_id IS NOT NULL AND
6093            p_tasks_in(i).task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6094         THEN
6095             l_tasks_ver_ids.extend;
6096             l_tasks_ver_ids(l_tasks_ver_ids.count) := p_tasks_in(i).task_version_id;
6097 
6098             OPEN cur_pa_proj_elem_ver( p_tasks_in(i).task_version_id );
6099             FETCH cur_pa_proj_elem_ver INTO l_wbs_level;
6100             CLOSE cur_pa_proj_elem_ver;
6101 
6102             IF l_wbs_level = 1
6103             THEN
6104                 l_total_top_tasks := l_total_top_tasks + 1;
6105             END IF;
6106 
6107             l_outline_level.extend;
6108             l_outline_level(l_outline_level.count) := l_wbs_level;
6109             l_recalculate_flag := 'Y';
6110         END IF;
6111         j := j + 1;
6112         IF NVL( l_recalculate_flag, 'N' ) = 'Y' AND j >= 1000
6113         THEN
6114             --To avoid no_data_found when this array is read in PA_TASK_PUB1.Cal_Task_weights
6115             l_outline_level.extend;
6116             l_outline_level(l_outline_level.count) := null;
6117 
6118 /*--bug 2856033
6119     PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
6120                        p_commit => FND_API.G_FALSE,
6121                        p_element_versions => l_tasks_ver_ids,
6122                        x_return_status => l_return_status,
6123                        x_msg_count => l_msg_count,
6124                        x_msg_data => l_msg_data);
6125 
6126      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6127        x_msg_count := FND_MSG_PUB.count_msg;
6128        if x_msg_count = 1 then
6129          pa_interface_utils_pub.get_messages
6130          (p_encoded        => FND_API.G_TRUE,
6131           p_msg_index      => 1,
6132           p_msg_count      => l_msg_count,
6133           p_msg_data       => l_msg_data,
6134           p_data           => l_data,
6135           p_msg_index_out  => l_msg_index_out);
6136           x_msg_data := l_data;
6137        end if;
6138        raise API_ERROR;
6139      end if;
6140 --bug 2856033
6141 */
6142 
6143             PA_TASK_PUB1.Calc_Task_Weights(
6144             p_element_versions => l_tasks_ver_ids
6145            ,p_outline_level    => l_outline_level
6146            ,p_top_sub_count    => l_total_top_tasks
6147            ,x_return_status    => l_return_status
6148            ,x_msg_count        => l_msg_count
6149            ,x_msg_data         => l_msg_data );
6150 
6151           if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6152              x_msg_count := FND_MSG_PUB.count_msg;
6153              x_return_status := l_return_status ;     --bug 3044915
6154             if x_msg_count = 1 then
6155                pa_interface_utils_pub.get_messages
6156                (p_encoded        => FND_API.G_TRUE,
6157                 p_msg_index      => 1,
6158                 p_msg_count      => l_msg_count,
6159                 p_msg_data       => l_msg_data,
6160                 p_data           => l_data,
6161                 p_msg_index_out  => l_msg_index_out);
6162                 x_msg_data := l_data;
6163             end if;
6164             raise API_ERROR;
6165          end if;
6166          l_tasks_ver_ids.DELETE;
6167          l_outline_level.DELETE;
6168          l_recalculate_flag := 'N';
6169          j := 1;
6170         END IF;
6171         i := p_tasks_in.next(i);
6172      END LOOP;
6173   END IF;
6174 
6175 ELSIF p_task_version_id IS NOT NULL
6176 THEN
6177     l_tasks_ver_ids.extend;
6178     l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
6179 
6180     OPEN cur_pa_proj_elem_ver( p_task_version_id );
6181     FETCH cur_pa_proj_elem_ver INTO l_wbs_level;
6182     CLOSE cur_pa_proj_elem_ver;
6183 
6184     IF l_wbs_level = 1
6185     THEN
6186        l_total_top_tasks := l_total_top_tasks + 1;
6187     END IF;
6188 
6189     l_outline_level.extend;
6190     l_outline_level(l_outline_level.count) := l_wbs_level;
6191     l_recalculate_flag := 'Y';
6192 
6193 END IF;
6194 
6195 IF NVL( l_recalculate_flag, 'N' ) = 'Y'
6196 THEN
6197 
6198     --To avoid no_data_found when this array is read in PA_TASK_PUB1.Cal_Task_weights
6199     l_outline_level.extend;
6200     l_outline_level(l_outline_level.count) := null;
6201 
6202 /*--bug 2856033
6203     PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
6204                        p_commit => FND_API.G_FALSE,
6205                        p_element_versions => l_tasks_ver_ids,
6206                        x_return_status => l_return_status,
6207                        x_msg_count => l_msg_count,
6208                        x_msg_data => l_msg_data);
6209 
6210      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6211        x_msg_count := FND_MSG_PUB.count_msg;
6212        if x_msg_count = 1 then
6213          pa_interface_utils_pub.get_messages
6214          (p_encoded        => FND_API.G_TRUE,
6215           p_msg_index      => 1,
6216           p_msg_count      => l_msg_count,
6217           p_msg_data       => l_msg_data,
6218           p_data           => l_data,
6219           p_msg_index_out  => l_msg_index_out);
6220           x_msg_data := l_data;
6221        end if;
6222        raise API_ERROR;
6223      end if;
6224 --bug 2856033
6225 */
6226 
6227 
6228   PA_TASK_PUB1.Calc_Task_Weights(
6229      p_element_versions => l_tasks_ver_ids
6230     ,p_outline_level    => l_outline_level
6231     ,p_top_sub_count    => l_total_top_tasks
6232     ,x_return_status    => l_return_status
6233     ,x_msg_count        => l_msg_count
6234     ,x_msg_data         => l_msg_data );
6235 
6236     if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6237       x_msg_count := FND_MSG_PUB.count_msg;
6238       x_return_status := l_return_status ;     --bug 3044915
6239       if x_msg_count = 1 then
6240         pa_interface_utils_pub.get_messages
6241         (p_encoded        => FND_API.G_TRUE,
6242          p_msg_index      => 1,
6243          p_msg_count      => l_msg_count,
6244          p_msg_data       => l_msg_data,
6245          p_data           => l_data,
6246          p_msg_index_out  => l_msg_index_out);
6247          x_msg_data := l_data;
6248       end if;
6249       raise API_ERROR;
6250     end if;
6251 END IF;
6252 x_return_status := FND_API.G_RET_STS_SUCCESS;        -- Bug 3044915
6253 END recalc_task_weightings;
6254 
6255   FUNCTION GET_MAX_LAST_UPD_DT_WRKNG_VER
6256   (  p_structure_version_id IN NUMBER
6257   ) return DATE
6258   IS
6259     --bug 3074706
6260     CURSOR c2 IS
6261       select project_id
6262         from pa_proj_element_versions
6263        where element_version_id = p_structure_version_id;
6264     l_project_id NUMBER;
6265 
6266     CURSOR c1 IS
6267        select MAX(a.last_update_date)
6268          from pa_proj_element_versions b,
6269               pa_proj_elem_ver_schedule a,
6270               pa_proj_elem_ver_structure c
6271         where p_structure_version_id = c.element_version_id
6272           and l_project_id  = c.project_id
6273           and c.status_code <> 'STRUCTURE_PUBLISHED'
6274           and b.parent_structure_version_id = c.element_version_id
6275           and b.project_id = c.project_id
6276           and a.element_version_id (+)= b.element_version_id
6277           and a.project_id (+) = b.project_id
6278           and a.proj_element_id (+) = b.proj_element_id;
6279 /*
6280     CURSOR c1 IS
6281       SELECT MAX(a.last_update_date)
6282         FROM pa_proj_element_versions b,
6283              pa_proj_elem_ver_schedule a,
6284              pa_proj_elem_ver_structure c
6285        WHERE a.element_version_id (+)= b.element_version_id
6286          AND a.project_id (+) = b.project_id
6287          AND a.proj_element_id (+) = b.proj_element_id
6288          AND b.parent_structure_version_id = c.element_version_id
6289          AND b.project_id = c.project_id
6290          AND c.status_code <> 'STRUCTURE_PUBLISHED'
6291          AND b.parent_structure_version_id = p_structure_version_id
6292     ;
6293 */
6294     --end bug 3074706
6295 
6296     l_date                 DATE;
6297     l_structure_version_id NUMBER;
6298   BEGIN
6299     --bug 3074706
6300     OPEN c2;
6301     FETCH c2 into l_project_id;
6302     CLOSE c2;
6303     --end bug 3074706
6304     OPEN c1;
6305     FETCH c1 into l_date;
6306     CLOSE c1;
6307     return l_date;
6308   END GET_MAX_LAST_UPD_DT_WRKNG_VER;
6309 
6310 -- Procedure            : copy_src_financial_version
6311 -- Type                 : PRIVATE
6312 -- Purpose              : Contains logic for copying the financial version from the source to the destination version
6313 -- Note                 :
6314 -- Assumptions          : All FLAGS and WORKPLAN record(s) have been populated in the global temporary table
6315 -- Parameters                    Type      Required  Description and Purpose
6316 -- ---------------------------  ------     --------  --------------------------------------------------------
6317 -- p_src_project_id             NUMBER        Y      The source project id
6318 -- p_dest_project_id            NUMBER        Y      The destination project id
6319 -- p_dest_fn_structure_id       NUMBER        Y      The destination project's financial structure id
6320 -- p_shared                     VARCHAR2      Y      Whether source/destination project is shared or not
6321 -- p_publish_person_id          NUMBER        Y      The person id required for publishing a version
6322 -- p_dest_template_flag         VARCHAR2      Y      Creating a template or a project
6323 PROCEDURE copy_src_financial_version(  p_api_version        IN  NUMBER      := 1.0
6324                                       ,p_commit             IN  VARCHAR2    := FND_API.G_FALSE
6325                                       ,p_init_msg_list      IN  VARCHAR2    := FND_API.G_TRUE
6326                                       ,p_validate_only      IN  VARCHAR2    := FND_API.G_FALSE
6327                                       ,p_validation_level   IN  VARCHAR2    := FND_API.G_VALID_LEVEL_FULL
6328                                       ,p_calling_module     IN  VARCHAR2    := 'SELF_SERVICE'
6329                                       ,p_debug_mode         IN  VARCHAR2    := 'N'
6330                                       ,p_src_project_id       IN NUMBER
6331                                       ,p_dest_project_id      IN NUMBER
6332                                       ,p_dest_fn_structure_id IN NUMBER
6333                                       ,p_shared               IN VARCHAR2
6334                                       ,p_dest_template_flag   IN VARCHAR2
6335                                       ,p_publish_person_id    IN NUMBER
6336                                       ,x_return_status  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6337                                       ,x_msg_count      OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6338                                       ,x_msg_data       OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6339                                      ) IS
6340 --This cursor fetches the workplan structure attributes
6341 CURSOR cur_get_wp_attr IS
6342 SELECT ppwa.WP_ENABLE_VERSION_FLAG
6343 FROM   pa_proj_workplan_attr   ppwa
6344       ,pa_proj_structure_types ppst
6345       ,pa_structure_types      pst
6346 WHERE  ppwa.project_id = p_src_project_id
6347 AND    ppwa.proj_element_id = ppst.proj_element_id
6348 AND    ppst.structure_type_id = pst.structure_type_id
6349 AND    pst.structure_type = 'WORKPLAN' ;
6350 
6351 --This cursor retrieves the LATEST PUBLISHED WP version from the source project
6352 CURSOR cur_get_src_fin_version_id IS
6353 SELECT ppev.element_version_id
6354 FROM   pa_proj_element_versions ppev,
6355        pa_proj_elem_ver_structure ppevs
6356 WHERE  ppev.project_id = p_src_project_id
6357 AND    ppev.object_type = 'PA_STRUCTURES'
6358 AND    ppev.element_version_id = ppevs.element_version_id
6359 AND    ppevs.project_id = p_src_project_id
6360 AND    ppevs.latest_eff_published_flag = 'Y';
6361 
6362 --This cursor retrieves the CURRENT WORKING WP version from the source project
6363 CURSOR cur_get_src_fin_version_id2 IS
6364 SELECT ppev.element_version_id
6365 FROM   pa_proj_element_versions ppev,
6366        pa_proj_elem_ver_structure ppevs
6367 WHERE  ppev.project_id = p_src_project_id
6368 AND    ppev.object_type = 'PA_STRUCTURES'
6369 AND    ppev.element_version_id = ppevs.element_version_id
6370 AND    ppevs.project_id = p_src_project_id
6371 AND    ppevs.current_working_flag = 'Y';
6372 
6373 --This cursor retrieves the version for the financial structure form the source project
6374 CURSOR cur_get_split_fin_ver IS
6375 SELECT ppev.element_version_id
6376 FROM   pa_proj_element_versions ppev,
6377        pa_proj_structure_types ppst,
6378        pa_structure_types pst
6379 WHERE  ppev.project_id = p_src_project_id
6380 AND    ppev.object_type = 'PA_STRUCTURES'
6381 AND    ppev.proj_element_id = ppst.proj_element_id
6382 AND    ppst.structure_type_id = pst.structure_type_id
6383 AND    pst.structure_type = 'FINANCIAL' ;
6384 
6385 --This cursor gets the schedule start date from the source project
6386 CURSOR cur_get_src_sch_st_date(c_project_id NUMBER, c_struc_ver_id NUMBER) IS
6387 SELECT scheduled_start_date
6388 FROM   pa_proj_elem_ver_schedule
6389 WHERE project_id = c_project_id
6390 AND   element_version_id = c_struc_ver_id;
6391 
6392 l_debug_mode                     VARCHAR2(1);
6393 l_debug_level2                   CONSTANT NUMBER := 2;
6394 l_debug_level3                   CONSTANT NUMBER := 3;
6395 l_debug_level4                   CONSTANT NUMBER := 4;
6396 l_debug_level5                   CONSTANT NUMBER := 5;
6397 
6398 l_src_fin_version_id     NUMBER(15);
6399 l_versioning_enabled     VARCHAR2(1);
6400 dest_latest_eff_pub_flag VARCHAR2(1);
6401 dest_current_flag        VARCHAR2(1);
6402 l_user_id               NUMBER := FND_GLOBAL.USER_ID;
6403 l_login_id              NUMBER := FND_GLOBAL.LOGIN_ID;
6404 BEGIN
6405 
6406      x_msg_count := 0;
6407      x_return_status := FND_API.G_RET_STS_SUCCESS;
6408      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
6409 
6410      IF (p_commit = FND_API.G_TRUE) THEN
6411         SAVEPOINT copy_src_fin_ver;
6412      END IF;
6413 
6414      IF p_init_msg_list = FND_API.G_TRUE THEN
6415           FND_MSG_PUB.initialize;
6416      END IF;
6417 
6418      IF l_debug_mode = 'Y' THEN
6419         PA_DEBUG.set_curr_function( p_function   => 'copy_src_financial_version',
6420                                     p_debug_mode => l_debug_mode );
6421      END IF;
6422 
6423      IF l_debug_mode = 'Y' THEN
6424         Pa_Debug.g_err_stage:= 'Printing Input parameters';
6425         Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
6426                                    l_debug_level3);
6427 
6428         Pa_Debug.WRITE(G_PKG_NAME,'p_src_project_id'||':'||p_src_project_id,
6429                                    l_debug_level3);
6430 
6431         Pa_Debug.WRITE(G_PKG_NAME,'p_dest_project_id'||':'||p_dest_project_id,
6432                                    l_debug_level3);
6433 
6434         Pa_Debug.WRITE(G_PKG_NAME,'p_dest_fn_structure_id'||':'||p_dest_fn_structure_id,
6435                                    l_debug_level3);
6436 
6437         Pa_Debug.WRITE(G_PKG_NAME,'p_shared'||':'||p_shared,
6438                                    l_debug_level3);
6439 
6440         Pa_Debug.WRITE(G_PKG_NAME,'p_publish_person_id'||':'||p_publish_person_id,
6441                                    l_debug_level3);
6442      END IF;
6443 
6444      IF l_debug_mode = 'Y' THEN
6445           Pa_Debug.g_err_stage:= 'Validating Input parameters';
6446           Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
6447                                      l_debug_level3);
6448      END IF;
6449 
6450      IF ( ( p_src_project_id       IS NULL OR p_src_project_id       = FND_API.G_MISS_NUM  ) AND
6451           ( p_dest_project_id      IS NULL OR p_dest_project_id      = FND_API.G_MISS_NUM  ) AND
6452           ( p_dest_fn_structure_id IS NULL OR p_dest_fn_structure_id = FND_API.G_MISS_NUM  ) AND
6453           ( p_shared               IS NULL OR p_shared               = FND_API.G_MISS_CHAR ) AND
6454           ( p_publish_person_id    IS NULL OR p_publish_person_id    = FND_API.G_MISS_NUM  )
6455         )
6456      THEN
6457            IF l_debug_mode = 'Y' THEN
6458                Pa_Debug.g_err_stage:= 'PA_PROJ_TASK_STRUC_PUB : copy_src_financial_version :
6459                p_src_project_id, p_dest_project_id, p_dest_fn_structure_id, p_shared, p_publish_person_id are NULL';
6460                Pa_Debug.WRITE(G_PKG_NAME, Pa_Debug.g_err_stage, l_debug_level3);
6461            END IF;
6462           RAISE Invalid_Arg_Exc_WP;
6463      END IF;
6464 
6465     IF 'Y' = p_shared THEN
6466         --Fetch the WP latest published, else the current working in the source project
6467         OPEN  cur_get_src_fin_version_id;
6468         FETCH cur_get_src_fin_version_id INTO l_src_fin_version_id;
6469         IF cur_get_src_fin_version_id%NOTFOUND THEN
6470             OPEN  cur_get_src_fin_version_id2;
6471             FETCH cur_get_src_fin_version_id2 INTO l_src_fin_version_id;
6472             CLOSE cur_get_src_fin_version_id2;
6473         END IF;
6474         CLOSE cur_get_src_fin_version_id;
6475     ELSE
6476         --Fetch the financial version from the source project
6477         OPEN  cur_get_split_fin_ver;
6478         FETCH cur_get_split_fin_ver INTO l_src_fin_version_id;
6479         CLOSE cur_get_split_fin_ver;
6480     END IF;
6481 
6482     IF l_debug_mode = 'Y' THEN
6483         Pa_Debug.WRITE(G_PKG_NAME,'Source financial version id : '||l_src_fin_version_id, l_debug_level3);
6484     END IF;
6485 
6486     --Copy entry into pa_proj_element_versions for the financial version in the source project
6487     INSERT INTO pa_proj_element_versions(
6488      ELEMENT_VERSION_ID
6489     ,PROJ_ELEMENT_ID
6490     ,OBJECT_TYPE
6491     ,PROJECT_ID
6492     ,PARENT_STRUCTURE_VERSION_ID
6493     ,DISPLAY_SEQUENCE
6494     ,WBS_LEVEL
6495     ,WBS_NUMBER
6496     ,CREATION_DATE
6497     ,CREATED_BY
6498     ,LAST_UPDATE_DATE
6499     ,LAST_UPDATED_BY
6500     ,LAST_UPDATE_LOGIN
6501     ,RECORD_VERSION_NUMBER
6502     ,attribute15          --This column stores the stucture version id in the src project, to be used to create relationships.
6503     ,ATTRIBUTE_CATEGORY
6504     ,ATTRIBUTE1
6505     ,ATTRIBUTE2
6506     ,ATTRIBUTE3
6507     ,ATTRIBUTE4
6508     ,ATTRIBUTE5
6509     ,ATTRIBUTE6
6510     ,ATTRIBUTE7
6511     ,ATTRIBUTE8
6512     ,ATTRIBUTE9
6513     ,ATTRIBUTE10
6514     ,ATTRIBUTE11
6515     ,ATTRIBUTE12
6516     ,ATTRIBUTE13
6517     ,ATTRIBUTE14
6518     ,TASK_UNPUB_VER_STATUS_CODE
6519     ,FINANCIAL_TASK_FLAG
6520     ,source_object_id
6521     ,source_object_type
6522     )
6523     SELECT
6524      pa_proj_element_versions_s.nextval
6525     ,p_dest_fn_structure_id --This would be the WP/FIN structure id in shared case and FIN structure id in split case
6526     ,ppev.object_type
6527     ,p_dest_project_id
6528     ,pa_proj_element_versions_s.nextval --nextval occuring twice in the same select returns the same value
6529     ,ppev.DISPLAY_SEQUENCE
6530     ,ppev.WBS_LEVEL
6531     ,ppev.WBS_NUMBER
6532     ,SYSDATE                    ------CREATION_DATE
6533     ,l_user_id                  ------CREATED_BY
6534     ,SYSDATE                    ------LAST_UPDATE_DATE
6535     ,l_user_id                  ------LAST_UPDATED_BY
6536     ,l_login_id                 ------LAST_UPDATE_LOGIN
6537     ,ppev.RECORD_VERSION_NUMBER ------RECORD_VERSION_NUMBER
6538     ,ppev.element_version_id
6539     ,ppev.ATTRIBUTE_CATEGORY
6540     ,ppev.ATTRIBUTE1
6541     ,ppev.ATTRIBUTE2
6542     ,ppev.ATTRIBUTE3
6543     ,ppev.ATTRIBUTE4
6544     ,ppev.ATTRIBUTE5
6545     ,ppev.ATTRIBUTE6
6546     ,ppev.ATTRIBUTE7
6547     ,ppev.ATTRIBUTE8
6548     ,ppev.ATTRIBUTE9
6549     ,ppev.ATTRIBUTE10
6550     ,ppev.ATTRIBUTE11
6551     ,ppev.ATTRIBUTE12
6552     ,ppev.ATTRIBUTE13
6553     ,ppev.ATTRIBUTE14
6554     ,ppev.TASK_UNPUB_VER_STATUS_CODE
6555     ,ppev.FINANCIAL_TASK_FLAG
6556     ,p_dest_project_id
6557     ,'PA_PROJECTS'
6558     FROM pa_proj_element_versions ppev
6559     WHERE ppev.project_id = p_src_project_id
6560     AND   ppev.element_version_id = l_src_fin_version_id ;
6561 
6562     OPEN  cur_get_wp_attr;
6563     FETCH cur_get_wp_attr INTO l_versioning_enabled;
6564     CLOSE cur_get_wp_attr;
6565 
6566     --IF split and financial enabled THEN
6567     IF 'N' = p_shared THEN
6568           IF p_dest_template_flag = 'Y' THEN
6569                dest_latest_eff_pub_flag := 'N';
6570                dest_current_flag := 'N';
6571           ELSE
6572                dest_latest_eff_pub_flag := 'Y';
6573                dest_current_flag := 'S';
6574           END IF;
6575     ELSE
6576     --IF shared AND no wp ver is selected AND fin tasks flag is checked
6577           --IF creating a project AND versioning is disabled THEN
6578           IF 'N' = p_dest_template_flag AND 'N' = l_versioning_enabled THEN
6579                dest_latest_eff_pub_flag := 'Y';
6580                dest_current_flag        := 'Y';
6581           ELSE
6582           --IF creating a template OR creating a project with versioning enabled
6583                dest_latest_eff_pub_flag := 'N';
6584                dest_current_flag        := 'N';
6585           END IF;
6586     END IF;
6587 
6588     IF l_debug_mode = 'Y' THEN
6589         Pa_Debug.WRITE(G_PKG_NAME,'dest_latest_eff_pub_flag : '||dest_latest_eff_pub_flag, l_debug_level3);
6590         Pa_Debug.WRITE(G_PKG_NAME,'dest_current_flag : '||dest_current_flag, l_debug_level3);
6591     END IF;
6592 
6593     --Copy entry into pa_proj_elem_ver_structure for financial version in the source project
6594     INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
6595      PEV_STRUCTURE_ID
6596     ,ELEMENT_VERSION_ID
6597     ,VERSION_NUMBER
6598     ,NAME
6599     ,PROJECT_ID
6600     ,PROJ_ELEMENT_ID
6601     ,DESCRIPTION
6602     ,EFFECTIVE_DATE
6603     ,PUBLISHED_DATE
6604     ,PUBLISHED_BY_PERSON_ID
6605     ,CURRENT_BASELINE_DATE
6606     ,CURRENT_FLAG
6607     ,CURRENT_BASELINE_PERSON_ID
6608     ,ORIGINAL_BASELINE_DATE
6609     ,ORIGINAL_FLAG
6610     ,ORIGINAL_BASELINE_PERSON_ID
6611     ,LOCK_STATUS_CODE
6612     ,LOCKED_BY_PERSON_ID
6613     ,LOCKED_DATE
6614     ,STATUS_CODE
6615     ,WF_STATUS_CODE
6616     ,LATEST_EFF_PUBLISHED_FLAG
6617     ,RECORD_VERSION_NUMBER
6618     ,WBS_RECORD_VERSION_NUMBER
6619     ,CREATION_DATE
6620     ,CREATED_BY
6621     ,LAST_UPDATE_DATE
6622     ,LAST_UPDATED_BY
6623     ,LAST_UPDATE_LOGIN
6624     ,change_reason_code
6625     ,PROCESS_UPDATE_WBS_FLAG
6626     ,current_working_flag
6627     ,source_object_id
6628     ,source_object_type
6629     )
6630     SELECT
6631      pa_proj_elem_ver_structure_s.nextval
6632     ,ppev.element_version_id
6633     ,ppevs.version_number
6634     ,ppevs.name
6635     ,p_dest_project_id
6636     ,p_dest_fn_structure_id  --This would be WP/FIN structure id in shared case and FIN structure id in split case
6637     ,ppevs.DESCRIPTION
6638     ,ppevs.EFFECTIVE_DATE
6639     ,decode(dest_latest_eff_pub_flag,'Y',sysdate,to_date(null) )                                       --PUBLISHED_DATE
6640     ,decode(dest_latest_eff_pub_flag,'Y',p_publish_person_id,null )                                    --PUBLISHED_BY_PERSON_ID
6641     ,decode(dest_current_flag,'S',ppevs.current_baseline_date,
6642             decode(dest_current_flag,'Y',sysdate,to_date(null) ) )                                     --CURRENT_BASELINE_DATE
6643     ,decode(dest_current_flag,'S',ppevs.current_flag,dest_current_flag)                                --CURRENT_FLAG
6644     ,decode(dest_current_flag,'S',ppevs.current_baseline_person_id,
6645             decode(dest_current_flag,'Y',p_publish_person_id,null) )                                   --CURRENT_BASELINE_PERSON_ID
6646     ,ppevs.original_baseline_date                                                                      --ORIGINAL_BASELINE_DATE
6647     ,ppevs.original_flag                                                                               --ORIGINAL_FLAG
6648     ,ppevs.original_baseline_person_id                                                                 --ORIGINAL_BASELINE_PERSON_ID
6649     ,'UNLOCKED'
6650     ,null
6651     ,null
6652     ,decode(dest_latest_eff_pub_flag,'Y','STRUCTURE_PUBLISHED','STRUCTURE_WORKING')                    --STATUS_CODE
6653     ,ppevs.WF_STATUS_CODE
6654     ,dest_latest_eff_pub_flag                                                                          --LATEST_EFF_PUBLISHED_FLAG
6655     ,ppevs.RECORD_VERSION_NUMBER
6656     ,ppevs.WBS_RECORD_VERSION_NUMBER
6657     ,SYSDATE
6658     ,l_user_id
6659     ,SYSDATE
6660     ,l_user_id
6661     ,l_login_id
6662     ,ppevs.change_reason_code
6663     ,ppevs.process_update_wbs_flag
6664     ,decode(p_shared,'N',ppevs.current_working_flag,'Y')                                              --CURRENT_WROKING_FLAG
6665             --If SPLIT and fin enabled case, copy cw from source, else populate it as Y
6666     ,p_dest_project_id
6667     ,'PA_PROJECTS'
6668     FROM pa_proj_elem_ver_structure ppevs,
6669          pa_proj_element_versions ppev
6670     WHERE ppevs.project_id = p_src_project_id
6671     AND   ppevs.element_version_id = l_src_fin_version_id
6672     AND   ppev.attribute15 = ppevs.element_version_id
6673     AND   ppev.project_id = p_dest_project_id  ;
6674 
6675     IF (p_commit = FND_API.G_TRUE) THEN
6676       COMMIT;
6677     END IF;
6678 
6679 EXCEPTION
6680 
6681 WHEN Invalid_Arg_Exc_WP THEN
6682      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
6683      x_msg_count     := 1;
6684      x_msg_data      := ' PA_PROJ_TASK_STRUC_PUB : copy_src_financial_version : NULL parameters passed';
6685 
6686      IF p_commit = FND_API.G_TRUE THEN
6687         ROLLBACK TO copy_src_fin_ver;
6688      END IF;
6689 
6690      Fnd_Msg_Pub.add_exc_msg
6691                (  p_pkg_name        => 'PA_PROJ_TASK_STRUC_PUB'
6692                 , p_procedure_name  => 'copy_src_financial_version'
6693                 , p_error_text      => x_msg_data);
6694 
6695      IF l_debug_mode = 'Y' THEN
6696           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
6697           Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
6698                               l_debug_level5);
6699           Pa_Debug.reset_curr_function;
6700      END IF;
6701      RAISE;
6702 
6703 WHEN OTHERS THEN
6704      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
6705      x_msg_count     := 1;
6706      x_msg_data      := SQLERRM;
6707 
6708      IF p_commit = FND_API.G_TRUE THEN
6709         ROLLBACK TO copy_src_fin_ver;
6710      END IF;
6711 
6712      Fnd_Msg_Pub.add_exc_msg
6713        (  p_pkg_name         => 'PA_PROJ_TASK_STRUC_PUB'
6714         , p_procedure_name  => 'copy_src_financial_version'
6715         , p_error_text      => x_msg_data);
6716 
6717      IF l_debug_mode = 'Y' THEN
6718           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
6719           Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
6720                               l_debug_level5);
6721           Pa_Debug.reset_curr_function;
6722      END IF;
6723      RAISE;
6724 
6725 END copy_src_financial_version;
6726 
6727 
6728 
6729 
6730 
6731 -- Procedure            : copy_src_financial_ver_tasks
6732 -- Type                 : PRIVATE
6733 -- Purpose              : Contains logic for copying the tasks belonging to the financial version
6734 --                        from the source to the destination project
6735 -- Note                 :
6736 -- Assumptions          : All FLAGS and WORKPLAN record(s) have been populated in the global temporary table
6737 -- Parameters                    Type      Required  Description and Purpose
6738 -- ---------------------------  ------     --------  --------------------------------------------------------
6739 -- p_src_project_id             NUMBER        Y      The source project id
6740 -- p_dest_project_id            NUMBER        Y      The destination project id
6741 -- p_dest_fn_structure_id       NUMBER        Y      The destination project's financial structure id
6742 -- p_shared                     VARCHAR2      Y      Whether source/destination project is shared or not
6743 -- p_copy_ppevSchedules_flag    NUMBER        Y      Whether pa_proj_elem_ver_schedule entry from the source project
6744 --                                                   should be copied into the destination project or not
6745 -- p_target_start_date          DATE          Y      The start date of the destination project
6746 -- p_target_finish_date         DATE          Y      The finish date of the destination project
6747 -- p_calendar_id                NUMBER        Y      The calendar id
6748 PROCEDURE copy_src_financial_ver_tasks(  p_api_version        IN  NUMBER      := 1.0
6749                                         ,p_commit             IN  VARCHAR2    := FND_API.G_FALSE
6750                                         ,p_init_msg_list      IN  VARCHAR2    := FND_API.G_TRUE
6751                                         ,p_validate_only      IN  VARCHAR2    := FND_API.G_FALSE
6752                                         ,p_validation_level   IN  VARCHAR2    := FND_API.G_VALID_LEVEL_FULL
6753                                         ,p_calling_module     IN  VARCHAR2    := 'SELF_SERVICE'
6754                                         ,p_debug_mode         IN  VARCHAR2    := 'N'
6755                                         ,p_src_project_id           IN NUMBER
6756                                         ,p_dest_project_id          IN NUMBER
6757                                         ,p_dest_fn_structure_id     IN NUMBER
6758                                         ,p_shared                   IN VARCHAR2
6759                                         ,p_copy_ppevSchedules_flag  IN VARCHAR2
6760                                         ,p_target_start_date        IN DATE
6761                                         ,p_target_finish_date       IN DATE
6762                                         ,p_calendar_id              IN NUMBER
6763                                         ,x_return_status  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6764                                         ,x_msg_count      OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6765                                         ,x_msg_data       OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6766                                       ) IS
6767 --This cursor retrieves the LATEST PUBLISHED WP version from the source project
6768 CURSOR cur_get_src_fin_version_id IS
6769 SELECT ppev.element_version_id
6770 FROM   pa_proj_element_versions ppev,
6771        pa_proj_elem_ver_structure ppevs
6772 WHERE  ppev.project_id = p_src_project_id
6773 AND    ppev.object_type = 'PA_STRUCTURES'
6774 AND    ppev.element_version_id = ppevs.element_version_id
6775 AND    ppevs.project_id = p_src_project_id
6776 AND    ppevs.latest_eff_published_flag = 'Y';
6777 
6778 --This cursor retrieves the CURRENT WORKING WP version from the source project
6779 CURSOR cur_get_src_fin_version_id2 IS
6780 SELECT ppev.element_version_id
6781 FROM   pa_proj_element_versions ppev,
6782        pa_proj_elem_ver_structure ppevs
6783 WHERE  ppev.project_id = p_src_project_id
6784 AND    ppev.object_type = 'PA_STRUCTURES'
6785 AND    ppev.element_version_id = ppevs.element_version_id
6786 AND    ppevs.project_id = p_src_project_id
6787 AND    ppevs.current_working_flag = 'Y';
6788 
6789 --This cursor retrieves the version for the financial structure form the source project
6790 CURSOR cur_get_split_fin_ver IS
6791 SELECT ppev.element_version_id
6792 FROM   pa_proj_element_versions ppev,
6793        pa_proj_structure_types ppst,
6794        pa_structure_types pst
6795 WHERE  ppev.project_id = p_src_project_id
6796 AND    ppev.object_type = 'PA_STRUCTURES'
6797 AND    ppev.proj_element_id = ppst.proj_element_id
6798 AND    ppst.structure_type_id = pst.structure_type_id
6799 AND    pst.structure_type = 'FINANCIAL' ;
6800 
6801 --This cursor gets the schedule start date from the source project
6802 CURSOR cur_get_src_sch_st_date(c_project_id NUMBER, c_struc_ver_id NUMBER) IS
6803 SELECT scheduled_start_date
6804 FROM pa_proj_elem_ver_schedule
6805 WHERE project_id = c_project_id
6806 AND   element_version_id = c_struc_ver_id;
6807 
6808 --Bug 3387963 - Cursor to get destination and source project's organization id
6809 CURSOR cur_get_carrying_out_org IS
6810 SELECT old.carrying_out_organization_id,
6811        new.carrying_out_organization_id
6812 FROM pa_projects_all old,
6813      pa_projects_all new
6814 WHERE old.project_id = p_src_project_id
6815 AND   new.project_id = p_dest_project_id;
6816 
6817 l_old_proj_org_id       NUMBER;
6818 l_new_proj_org_id       NUMBER;
6819 -- End of code added for bug 3387963
6820 
6821 /* Code added for 6211012*/
6822 
6823 TYPE typ_obj_rela_id is TABLE OF pa_object_relationships.object_relationship_id%TYPE
6824 INDEX BY BINARY_INTEGER;
6825 l_obj_rel_id typ_obj_rela_id;
6826 
6827 TYPE typ_obj_typ_from is TABLE OF pa_object_relationships.object_type_from%TYPE
6828 INDEX BY BINARY_INTEGER;
6829 l_obj_typ_from typ_obj_typ_from;
6830 
6831 TYPE typ_obj_from_id is TABLE OF pa_object_relationships.object_id_from1%TYPE
6832 INDEX BY BINARY_INTEGER;
6833 l_obj_from_id typ_obj_from_id;
6834 
6835 TYPE typ_obj_typ_to is TABLE OF pa_object_relationships.object_type_to%TYPE
6836 INDEX BY BINARY_INTEGER;
6837 l_obj_typ_to typ_obj_typ_to;
6838 
6839 TYPE typ_obj_to_id is TABLE OF pa_object_relationships.object_id_to1%TYPE
6840 INDEX BY BINARY_INTEGER;
6841 l_obj_to_id typ_obj_to_id;
6842 
6843 TYPE typ_rel_typ is TABLE OF pa_object_relationships.relationship_type%TYPE
6844 INDEX BY BINARY_INTEGER;
6845 l_rel_typ typ_rel_typ;
6846 
6847 TYPE typ_rel_subtyp is TABLE OF pa_object_relationships.relationship_subtype%TYPE
6848 INDEX BY BINARY_INTEGER;
6849 l_rel_subtyp typ_rel_subtyp;
6850 
6851 TYPE typ_rec_ver_num is TABLE OF pa_object_relationships.Record_Version_Number%TYPE
6852 INDEX BY BINARY_INTEGER;
6853 l_rec_ver_num typ_rec_ver_num;
6854 
6855 TYPE typ_wt_percent is TABLE OF pa_object_relationships.weighting_percentage%TYPE
6856 INDEX BY BINARY_INTEGER;
6857 l_wt_percent typ_wt_percent;
6858 
6859 
6860 CURSOR cur_pa_obj_rela_1(c_src_fin_version_id NUMBER,
6861 		     c_dest_project_id NUMBER
6862 		     ) IS
6863 SELECT
6864      pa_object_relationships_s.nextval,
6865      pobj.object_type_from,
6866      ppev1.element_version_id,
6867      pobj.object_type_to,
6868      ppev2.element_version_id,
6869      pobj.relationship_type,
6870      pobj.relationship_subtype,
6871      pobj.Record_Version_Number,
6872      pobj.weighting_percentage
6873 FROM ( SELECT object_type_from,
6874              object_id_from1,
6875              object_type_to,
6876              object_id_to1,
6877              relationship_type,
6878              relationship_subtype,
6879              Record_Version_Number,
6880              weighting_percentage
6881       FROM pa_object_relationships
6882       START WITH object_id_from1 = c_src_fin_version_id
6883       AND  RELATIONSHIP_TYPE = 'S'
6884       CONNECT BY  object_id_from1 =  PRIOR object_id_to1
6885       AND  RELATIONSHIP_TYPE = 'S' ) pobj,
6886     pa_proj_element_versions ppev1,
6887     pa_proj_element_versions ppev2
6888     WHERE ppev1.attribute15 = pobj.object_id_from1
6889     AND   ppev2.attribute15 = pobj.object_id_to1
6890     AND   ppev1.project_id = c_dest_project_id
6891     AND   ppev2.project_id = c_dest_project_id ;
6892 
6893 /*End of Code added for 6211012*/
6894 
6895 l_debug_mode                     VARCHAR2(1);
6896 l_debug_level2                   CONSTANT NUMBER := 2;
6897 l_debug_level3                   CONSTANT NUMBER := 3;
6898 l_debug_level4                   CONSTANT NUMBER := 4;
6899 l_debug_level5                   CONSTANT NUMBER := 5;
6900 
6901 l_src_fin_version_id    NUMBER(15);
6902 l_user_id               NUMBER := FND_GLOBAL.USER_ID;
6903 l_login_id              NUMBER := FND_GLOBAL.LOGIN_ID;
6904 l_delta                 NUMBER;
6905 l_src_sch_st_date       DATE;
6906 
6907 BEGIN
6908 
6909 
6910      x_msg_count := 0;
6911      x_return_status := FND_API.G_RET_STS_SUCCESS;
6912      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
6913 
6914      IF (p_commit = FND_API.G_TRUE) THEN
6915         SAVEPOINT copy_src_fin_ver_tasks;
6916      END IF;
6917 
6918      IF p_init_msg_list = FND_API.G_TRUE THEN
6919           FND_MSG_PUB.initialize;
6920      END IF;
6921 
6922      IF l_debug_mode = 'Y' THEN
6923         PA_DEBUG.set_curr_function( p_function   => 'copy_src_financial_ver_tasks',
6924                                     p_debug_mode => l_debug_mode );
6925      END IF;
6926 
6927      IF l_debug_mode = 'Y' THEN
6928         Pa_Debug.g_err_stage:= 'Printing Input parameters';
6929         Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
6930                                    l_debug_level3);
6931 
6932         Pa_Debug.WRITE(G_PKG_NAME,'p_src_project_id'||':'||p_src_project_id,
6933                                    l_debug_level3);
6934 
6935         Pa_Debug.WRITE(G_PKG_NAME,'p_dest_project_id'||':'||p_dest_project_id,
6936                                    l_debug_level3);
6937 
6938         Pa_Debug.WRITE(G_PKG_NAME,'p_dest_fn_structure_id'||':'||p_dest_fn_structure_id,
6939                                    l_debug_level3);
6940 
6941         Pa_Debug.WRITE(G_PKG_NAME,'p_shared'||':'||p_shared,
6942                                    l_debug_level3);
6943 
6944         Pa_Debug.WRITE(G_PKG_NAME,'p_copy_ppevSchedules_flag'||':'||p_copy_ppevSchedules_flag,
6945                                    l_debug_level3);
6946 
6947         Pa_Debug.WRITE(G_PKG_NAME,'p_target_start_date'||':'||p_target_start_date,
6948                                    l_debug_level3);
6949 
6950         Pa_Debug.WRITE(G_PKG_NAME,'p_target_finish_date'||':'||p_target_finish_date,
6951                                    l_debug_level3);
6952 
6953         Pa_Debug.WRITE(G_PKG_NAME,'p_calendar_id'||':'||p_calendar_id,
6954                                    l_debug_level3);
6955      END IF;
6956 
6957      IF l_debug_mode = 'Y' THEN
6958           Pa_Debug.g_err_stage:= 'Validating Input parameters';
6959           Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
6960                                      l_debug_level3);
6961      END IF;
6962 
6963      IF ( ( p_src_project_id          IS NULL OR p_src_project_id          = FND_API.G_MISS_NUM  ) AND
6964           ( p_dest_project_id         IS NULL OR p_dest_project_id         = FND_API.G_MISS_NUM  ) AND
6965           ( p_dest_fn_structure_id    IS NULL OR p_dest_fn_structure_id    = FND_API.G_MISS_NUM  ) AND
6966           ( p_shared                  IS NULL OR p_shared                  = FND_API.G_MISS_CHAR ) AND
6967           ( p_copy_ppevSchedules_flag IS NULL OR p_copy_ppevSchedules_flag = FND_API.G_MISS_NUM  ) AND
6968           ( p_calendar_id             IS NULL OR p_calendar_id             = FND_API.G_MISS_NUM  )
6969         )
6970      THEN
6971            IF l_debug_mode = 'Y' THEN
6972                Pa_Debug.g_err_stage:= 'PA_PROJ_TASK_STRUC_PUB : copy_src_financial_ver_tasks : p_src_project_id,
6973                p_dest_project_id, p_dest_fn_structure_id, p_shared, p_copy_ppevSchedules_flag, p_calendar_id are NULL';
6974                Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
6975                               l_debug_level3);
6976            END IF;
6977           RAISE Invalid_Arg_Exc_WP;
6978      END IF;
6979 
6980     IF 'Y' = p_shared THEN
6981         --Fetch the WP latest published, else the current working in the source project
6982         OPEN  cur_get_src_fin_version_id;
6983         FETCH cur_get_src_fin_version_id INTO l_src_fin_version_id;
6984         IF cur_get_src_fin_version_id%NOTFOUND THEN
6985             OPEN  cur_get_src_fin_version_id2;
6986             FETCH cur_get_src_fin_version_id2 INTO l_src_fin_version_id;
6987             CLOSE cur_get_src_fin_version_id2;
6988         END IF;
6989         CLOSE cur_get_src_fin_version_id;
6990     ELSE
6991         --Fetch the financial version from the source project
6992         OPEN  cur_get_split_fin_ver;
6993         FETCH cur_get_split_fin_ver INTO l_src_fin_version_id;
6994         CLOSE cur_get_split_fin_ver;
6995     END IF;
6996 
6997     IF l_debug_mode = 'Y' THEN
6998         Pa_Debug.WRITE(G_PKG_NAME, 'Source financial version id : '||l_src_fin_version_id, l_debug_level3);
6999     END IF;
7000 
7001      --Bug 3387963 - Added to get the cursor values
7002     OPEN  cur_get_carrying_out_org;
7003     FETCH cur_get_carrying_out_org INTO l_old_proj_org_id, l_new_proj_org_id;
7004     CLOSE cur_get_carrying_out_org;
7005 
7006     --Copy tasks belonging to the single financial version in the source project
7007     INSERT INTO pa_proj_elements(
7008      PROJ_ELEMENT_ID
7009     ,PROJECT_ID
7010     ,OBJECT_TYPE
7011     ,ELEMENT_NUMBER
7012     ,NAME
7013     ,DESCRIPTION
7014     ,STATUS_CODE
7015     ,WF_STATUS_CODE
7016     ,PM_SOURCE_CODE
7017     ,PM_SOURCE_REFERENCE
7018     ,CLOSED_DATE
7019     ,LOCATION_ID
7020     ,MANAGER_PERSON_ID
7021     ,CARRYING_OUT_ORGANIZATION_ID
7022     ,TYPE_ID
7023     ,PRIORITY_CODE
7024     ,CREATION_DATE
7025     ,CREATED_BY
7026     ,LAST_UPDATE_DATE
7027     ,LAST_UPDATED_BY
7028     ,LAST_UPDATE_LOGIN
7029     ,RECORD_VERSION_NUMBER
7030     ,REQUEST_ID
7031     ,PROGRAM_APPLICATION_ID
7032     ,PROGRAM_ID
7033     ,PROGRAM_UPDATE_DATE
7034     ,LINK_TASK_FLAG
7035     ,BASELINE_START_DATE
7036     ,BASELINE_FINISH_DATE
7037     ,progress_outdated_flag
7038     ,ATTRIBUTE_CATEGORY
7039     ,ATTRIBUTE1
7040     ,ATTRIBUTE2
7041     ,ATTRIBUTE3
7042     ,ATTRIBUTE4
7043     ,ATTRIBUTE5
7044     ,ATTRIBUTE6
7045     ,ATTRIBUTE7
7046     ,ATTRIBUTE8
7047     ,ATTRIBUTE9
7048     ,ATTRIBUTE10
7049     ,ATTRIBUTE11
7050     ,ATTRIBUTE12
7051     ,ATTRIBUTE13
7052     ,ATTRIBUTE14
7053     ,ATTRIBUTE15
7054     ,parent_structure_id
7055     ,TYPE_CODE
7056     ,INC_PROJ_PROGRESS_FLAG
7057     ,WQ_ITEM_CODE
7058     ,WQ_UOM_CODE
7059     ,WQ_ACTUAL_ENTRY_CODE
7060     ,TASK_PROGRESS_ENTRY_PAGE_ID
7061     ,BASELINE_DURATION
7062     ,PHASE_CODE
7063     ,PHASE_VERSION_ID
7064     ,source_object_id
7065     ,source_object_type
7066     )
7067     SELECT
7068      pt.task_id
7069     ,p_dest_project_id
7070     ,ppe.object_type
7071     ,ppe.element_number
7072     ,ppe.name
7073     ,ppe.DESCRIPTION
7074     ,INITIAL_STATUS_CODE
7075     ,ppe.WF_STATUS_CODE
7076     ,ppe.PM_SOURCE_CODE
7077     ,ppe.PM_SOURCE_REFERENCE
7078     ,ppe.CLOSED_DATE
7079     ,ppe.LOCATION_ID
7080     ,ppe.MANAGER_PERSON_ID
7081     ,decode(ppe.CARRYING_OUT_ORGANIZATION_ID,l_old_proj_org_id, l_new_proj_org_id,
7082             ppe.CARRYING_OUT_ORGANIZATION_ID) -- Bug 3387963
7083     ,ppe.TYPE_ID
7084     ,ppe.PRIORITY_CODE
7085     ,SYSDATE
7086     ,l_user_id
7087     ,SYSDATE
7088     ,l_user_id
7089     ,l_login_id
7090     ,ppe.RECORD_VERSION_NUMBER
7091     ,ppe.REQUEST_ID
7092     ,ppe.PROGRAM_APPLICATION_ID
7093     ,ppe.PROGRAM_ID
7094     ,ppe.PROGRAM_UPDATE_DATE
7095     ,ppe.LINK_TASK_FLAG
7096     ,ppe.BASELINE_START_DATE
7097     ,ppe.BASELINE_FINISH_DATE
7098     ,'N'       --,ppe.progress_outdated_flag
7099     ,ppe.ATTRIBUTE_CATEGORY
7100     ,ppe.ATTRIBUTE1
7101     ,ppe.ATTRIBUTE2
7102     ,ppe.ATTRIBUTE3
7103     ,ppe.ATTRIBUTE4
7104     ,ppe.ATTRIBUTE5
7105     ,ppe.ATTRIBUTE6
7106     ,ppe.ATTRIBUTE7
7107     ,ppe.ATTRIBUTE8
7108     ,ppe.ATTRIBUTE9
7109     ,ppe.ATTRIBUTE10
7110     ,ppe.ATTRIBUTE11
7111     ,ppe.ATTRIBUTE12
7112     ,ppe.ATTRIBUTE13
7113     ,ppe.ATTRIBUTE14
7114     ,ppe.proj_element_id    --attribute 15 is used to store old ids.
7115     ,p_dest_fn_structure_id  --This would be WP/FIN structure id in shared case. FIN structure id in split case
7116     ,ppe.TYPE_CODE
7117     ,ppe.INC_PROJ_PROGRESS_FLAG
7118     ,ppe.WQ_ITEM_CODE
7119     ,ppe.WQ_UOM_CODE
7120     ,ppe.WQ_ACTUAL_ENTRY_CODE
7121     ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
7122     ,ppe.BASELINE_DURATION
7123     ,ppe.PHASE_CODE
7124     ,ppe.PHASE_VERSION_ID
7125     ,p_dest_project_id
7126     ,'PA_PROJECTS'
7127     FROM pa_task_types ptt,
7128          pa_proj_elements ppe,
7129          pa_proj_element_versions ppev,
7130          pa_tasks      pt
7131     WHERE pt.project_id = p_dest_project_id
7132     AND   ppe.project_id = p_src_project_id          --Added by Sunkalya For the fix of Bug#4600825. This change is done for R12
7133     						     --Merging of code fix done thru Bug#4589176(115.315) for performance issues.
7134     AND   pt.task_number = substrb(rtrim(ppe.element_number),1,25) -- Substrb added for Bug 5152448
7135     AND   ptt.object_type    = 'PA_TASKS'
7136     AND   ppe.type_id        = ptt.task_type_id
7137     AND   ppe.object_type = 'PA_TASKS'
7138     AND   nvl(ppe.link_task_flag,'N') <> 'Y' -- 4348868
7139     AND   ppe.parent_structure_id = ppev.proj_element_id
7140     AND   ppev.element_version_id = l_src_fin_version_id ;
7141 
7142     --Copy tasks versions belonging to the single financial version in the source project
7143     INSERT INTO pa_proj_element_versions(
7144      ELEMENT_VERSION_ID
7145     ,PROJ_ELEMENT_ID
7146     ,OBJECT_TYPE
7147     ,PROJECT_ID
7148     ,PARENT_STRUCTURE_VERSION_ID
7149     ,DISPLAY_SEQUENCE
7150     ,WBS_LEVEL
7151     ,WBS_NUMBER
7152     ,CREATION_DATE
7153     ,CREATED_BY
7154     ,LAST_UPDATE_DATE
7155     ,LAST_UPDATED_BY
7156     ,LAST_UPDATE_LOGIN
7157     ,RECORD_VERSION_NUMBER
7158     ,attribute15          --this column is used to store task ver id of the source project's task versions to be used to created relationships.
7159     ,ATTRIBUTE_CATEGORY
7160     ,ATTRIBUTE1
7161     ,ATTRIBUTE2
7162     ,ATTRIBUTE3
7163     ,ATTRIBUTE4
7164     ,ATTRIBUTE5
7165     ,ATTRIBUTE6
7166     ,ATTRIBUTE7
7167     ,ATTRIBUTE8
7168     ,ATTRIBUTE9
7169     ,ATTRIBUTE10
7170     ,ATTRIBUTE11
7171     ,ATTRIBUTE12
7172     ,ATTRIBUTE13
7173     ,ATTRIBUTE14
7174     ,TASK_UNPUB_VER_STATUS_CODE
7175     ,FINANCIAL_TASK_FLAG
7176     ,source_object_id
7177     ,source_object_type
7178     )
7179     SELECT
7180      pa_proj_element_versions_s.nextval
7181     ,ppe.proj_element_id
7182     ,ppev.object_type
7183     ,p_dest_project_id
7184     ,ppev2.element_version_id
7185     ,ppev.DISPLAY_SEQUENCE
7186     ,ppev.WBS_LEVEL
7187     ,ppev.WBS_NUMBER
7188     ,SYSDATE                     ------CREATION_DATE
7189     ,l_user_id                   ------CREATED_BY
7190     ,SYSDATE                     ------LAST_UPDATE_DATE
7191     ,l_user_id                   ------LAST_UPDATED_BY
7192     ,l_login_id                  ------LAST_UPDATE_LOGIN
7193     ,ppev.RECORD_VERSION_NUMBER  ------RECORD_VERSION_NUMBER
7194     ,ppev.element_version_id     -- to help create relationships from source
7195     ,ppev.ATTRIBUTE_CATEGORY
7196     ,ppev.ATTRIBUTE1
7197     ,ppev.ATTRIBUTE2
7198     ,ppev.ATTRIBUTE3
7199     ,ppev.ATTRIBUTE4
7200     ,ppev.ATTRIBUTE5
7201     ,ppev.ATTRIBUTE6
7202     ,ppev.ATTRIBUTE7
7203     ,ppev.ATTRIBUTE8
7204     ,ppev.ATTRIBUTE9
7205     ,ppev.ATTRIBUTE10
7206     ,ppev.ATTRIBUTE11
7207     ,ppev.ATTRIBUTE12
7208     ,ppev.ATTRIBUTE13
7209     ,ppev.ATTRIBUTE14
7210     ,decode( ppevs.status_code, 'STRUCTURE_PUBLISHED', 'PUBLISHED', 'WORKING' )
7211     ,ppev.FINANCIAL_TASK_FLAG
7212     ,p_dest_project_id
7213     ,'PA_PROJECTS'
7214     FROM pa_proj_element_versions ppev,
7215          pa_proj_elements ppe,
7216          pa_proj_element_versions ppev2,
7217          pa_proj_elem_ver_structure ppevs
7218     WHERE ppev.project_id = p_src_project_id
7219     AND   ppev.object_type = 'PA_TASKS'
7220     AND   ppev.parent_structure_version_id = l_src_fin_version_id
7221     AND   ppev.proj_element_id = ppe.attribute15
7222     AND   ppe.project_id = p_dest_project_id
7223     AND   ppe.object_type = 'PA_TASKS'
7224     AND   ppev.parent_structure_version_id = ppev2.attribute15
7225     AND   ppev2.project_id = p_dest_project_id
7226     AND   ppev2.object_type = 'PA_STRUCTURES'
7227     AND   ppevs.project_id = p_dest_project_id
7228     AND   ppevs.element_version_id = ppev2.element_version_id ;
7229 
7230     IF l_debug_mode = 'Y' THEN
7231         Pa_Debug.WRITE(G_PKG_NAME, 'Creating object relatiionships for financial tasks', l_debug_level3);
7232     END IF;
7233 
7234     --Copy relationships for structure and tasks into destination project
7235   /* Start of addition for bug 6211012 */
7236 
7237         l_obj_rel_id.delete;
7238 	l_obj_typ_from.delete;
7239 	l_obj_from_id.delete;
7240 	l_obj_typ_to.delete;
7241 	l_obj_to_id.delete;
7242 	l_rel_typ.delete;
7243 	l_rel_subtyp.delete;
7244 	l_rec_ver_num.delete;
7245 	l_wt_percent.delete;
7246 
7247         OPEN cur_pa_obj_rela_1(l_src_fin_version_id,p_dest_project_id);
7248 
7249 	LOOP
7250 
7251 	  FETCH cur_pa_obj_rela_1
7252 	  BULK COLLECT INTO
7253 		l_obj_rel_id,
7254 		l_obj_typ_from,
7255 		l_obj_from_id,
7256 		l_obj_typ_to,
7257 		l_obj_to_id,
7258 		l_rel_typ,
7259 		l_rel_subtyp,
7260 		l_rec_ver_num,
7261 		l_wt_percent
7262 	  LIMIT 1000;
7263 
7264 	  IF l_obj_rel_id.COUNT >0 THEN
7265 
7266 	    FORALL i IN l_obj_rel_id.FIRST..l_obj_rel_id.LAST
7267             insert into PA_OBJECT_RELATIONSHIPS (
7268                  object_relationship_id,
7269                  object_type_from,
7270                  object_id_from1,
7271                  object_type_to,
7272                  object_id_to1,
7273                  relationship_type,
7274                  relationship_subtype,
7275                  Record_Version_Number,
7276                  CREATED_BY,
7277                  CREATION_DATE,
7278                  LAST_UPDATED_BY,
7279                  LAST_UPDATE_DATE,
7280                  LAST_UPDATE_LOGIN,
7281                  weighting_percentage
7282                        )
7283 		 values(
7284 		 l_obj_rel_id(i),
7285 	         l_obj_typ_from(i),
7286 	         l_obj_from_id(i),
7287 	         l_obj_typ_to(i),
7288 	         l_obj_to_id(i),
7289 	         l_rel_typ(i),
7290 	         l_rel_subtyp(i),
7291 	         l_rec_ver_num(i),
7292                  l_user_id,
7293                  SYSDATE,
7294                  l_user_id,
7295                  SYSDATE,
7296                  l_login_id,
7297 	         l_wt_percent(i)
7298 		 );
7299 
7300 	  END IF;
7301 
7302           EXIT WHEN l_obj_rel_id.COUNT < 1000 ;
7303 	END LOOP;
7304 
7305 	l_obj_rel_id.delete;
7306 	l_obj_typ_from.delete;
7307 	l_obj_from_id.delete;
7308 	l_obj_typ_to.delete;
7309 	l_obj_to_id.delete;
7310 	l_rel_typ.delete;
7311 	l_rel_subtyp.delete;
7312 	l_rec_ver_num.delete;
7313 	l_wt_percent.delete;
7314 
7315 	CLOSE cur_pa_obj_rela_1;
7316 
7317 /*
7318 
7319     INSERT INTO PA_OBJECT_RELATIONSHIPS (
7320      object_relationship_id
7321     ,object_type_from
7322     ,object_id_from1
7323     ,object_type_to
7324     ,object_id_to1
7325     ,relationship_type
7326     ,relationship_subtype
7327     ,Record_Version_Number
7328     ,CREATED_BY
7329     ,CREATION_DATE
7330     ,LAST_UPDATED_BY
7331     ,LAST_UPDATE_DATE
7332     ,LAST_UPDATE_LOGIN
7333     ,weighting_percentage
7334     )
7335     SELECT
7336      pa_object_relationships_s.nextval
7337     ,pobj.object_type_from
7338     ,ppev1.element_version_id
7339     ,pobj.object_type_to
7340     ,ppev2.element_version_id
7341     ,pobj.relationship_type
7342     ,pobj.relationship_subtype
7343     ,pobj.Record_Version_Number
7344     ,l_user_id
7345     ,SYSDATE
7346     ,l_user_id
7347     ,SYSDATE
7348     ,l_login_id
7349     ,pobj.weighting_percentage
7350     FROM
7351     ( SELECT object_type_from,
7352              object_id_from1,
7353              object_type_to,
7354              object_id_to1,
7355              relationship_type,
7356              relationship_subtype,
7357              Record_Version_Number,
7358              weighting_percentage
7359       FROM pa_object_relationships
7360       START WITH object_id_from1 = l_src_fin_version_id
7361       AND  RELATIONSHIP_TYPE = 'S'
7362       CONNECT BY  object_id_from1 =  PRIOR object_id_to1
7363       AND  RELATIONSHIP_TYPE = 'S' ) pobj,
7364     pa_proj_element_versions ppev1,
7365     pa_proj_element_versions ppev2
7366     WHERE ppev1.attribute15 = pobj.object_id_from1
7367     AND   ppev2.attribute15 = pobj.object_id_to1
7368     AND   ppev1.project_id = p_dest_project_id
7369     AND   ppev2.project_id = p_dest_project_id ;
7370 */
7371 /* End of changes for bug 6211012 */
7372 
7373     IF 'Y' = p_copy_ppevSchedules_flag THEN
7374 
7375         --calculate delta before inserting schedule rows
7376         --select source structure version scheduled start date
7377         IF (p_target_start_date IS NULL) THEN
7378             l_delta := 0;
7379         ELSE
7380             OPEN cur_get_src_sch_st_date( p_src_project_id, l_src_fin_version_id );
7381             FETCH cur_get_src_sch_st_date INTO l_src_sch_st_date;
7382             CLOSE cur_get_src_sch_st_date;
7383             l_delta := p_target_start_date - l_src_sch_st_date;
7384         END IF;
7385 
7386         --Copy entries into pa_proj_elem_ver_schedule
7387         INSERT INTO pa_proj_elem_ver_schedule(
7388          PEV_SCHEDULE_ID
7389         ,ELEMENT_VERSION_ID
7390         ,PROJECT_ID
7391         ,PROJ_ELEMENT_ID
7392         ,CREATION_DATE
7393         ,CREATED_BY
7394         ,LAST_UPDATE_DATE
7395         ,LAST_UPDATED_BY
7396         ,SCHEDULED_START_DATE
7397         ,SCHEDULED_FINISH_DATE
7398         ,OBLIGATION_START_DATE
7399         ,OBLIGATION_FINISH_DATE
7400         ,ACTUAL_START_DATE
7401         ,ACTUAL_FINISH_DATE
7402         ,ESTIMATED_START_DATE
7403         ,ESTIMATED_FINISH_DATE
7404         ,DURATION
7405         ,EARLY_START_DATE
7406         ,EARLY_FINISH_DATE
7407         ,LATE_START_DATE
7408         ,LATE_FINISH_DATE
7409         ,CALENDAR_ID
7410         ,MILESTONE_FLAG
7411         ,CRITICAL_FLAG
7412         ,RECORD_VERSION_NUMBER
7413         ,LAST_UPDATE_LOGIN
7414         ,WQ_PLANNED_QUANTITY
7415         ,PLANNED_EFFORT
7416         ,ACTUAL_DURATION
7417         ,ESTIMATED_DURATION
7418         ,ATTRIBUTE_CATEGORY
7419         ,ATTRIBUTE1
7420         ,ATTRIBUTE2
7421         ,ATTRIBUTE3
7422         ,ATTRIBUTE4
7423         ,ATTRIBUTE5
7424         ,ATTRIBUTE6
7425         ,ATTRIBUTE7
7426         ,ATTRIBUTE8
7427         ,ATTRIBUTE9
7428         ,ATTRIBUTE10
7429         ,ATTRIBUTE11
7430         ,ATTRIBUTE12
7431         ,ATTRIBUTE13
7432         ,ATTRIBUTE14
7433         ,ATTRIBUTE15
7434         ,source_object_id
7435         ,source_object_type
7436         )
7437         SELECT
7438          pa_proj_elem_ver_schedule_s.nextval
7439         ,ppev1.ELEMENT_VERSION_ID
7440         ,p_dest_project_id
7441         ,ppev1.PROJ_ELEMENT_ID
7442         ,SYSDATE
7443         ,l_user_id
7444         ,SYSDATE
7445         ,l_user_id
7446         ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date,
7447                                                     p_target_finish_date,
7448                                                     l_delta,
7449                                                     ppevs.SCHEDULED_START_DATE,
7450                                                     null )
7451         ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date,
7452                                                     p_target_finish_date,
7453                                                     l_delta,
7454                                                     ppevs.SCHEDULED_START_DATE,
7455                                                     SCHEDULED_FINISH_DATE )
7456         ,ppevs.OBLIGATION_START_DATE
7457         ,ppevs.OBLIGATION_FINISH_DATE
7458         ,null
7459         ,null
7460         ,null
7461         ,null
7462         ,ppevs.DURATION
7463         ,ppevs.EARLY_START_DATE
7464         ,ppevs.EARLY_FINISH_DATE
7465         ,ppevs.LATE_START_DATE
7466         ,ppevs.LATE_FINISH_DATE
7467         ,p_calendar_id
7468         ,ppevs.MILESTONE_FLAG
7469         ,ppevs.CRITICAL_FLAG
7470         ,ppevs.RECORD_VERSION_NUMBER
7471         ,l_login_id
7472         ,ppevs.WQ_PLANNED_QUANTITY
7473         ,ppevs.PLANNED_EFFORT
7474         ,ppevs.ACTUAL_DURATION
7475         ,ppevs.ESTIMATED_DURATION
7476         ,ppevs.ATTRIBUTE_CATEGORY
7477         ,ppevs.ATTRIBUTE1
7478         ,ppevs.ATTRIBUTE2
7479         ,ppevs.ATTRIBUTE3
7480         ,ppevs.ATTRIBUTE4
7481         ,ppevs.ATTRIBUTE5
7482         ,ppevs.ATTRIBUTE6
7483         ,ppevs.ATTRIBUTE7
7484         ,ppevs.ATTRIBUTE8
7485         ,ppevs.ATTRIBUTE9
7486         ,ppevs.ATTRIBUTE10
7487         ,ppevs.ATTRIBUTE11
7488         ,ppevs.ATTRIBUTE12
7489         ,ppevs.ATTRIBUTE13
7490         ,ppevs.ATTRIBUTE14
7491         ,ppevs.ATTRIBUTE15
7492     ,p_dest_project_id
7493     ,'PA_PROJECTS'
7494         FROM pa_proj_elem_ver_schedule ppevs,
7495              pa_proj_element_versions ppev1,
7496              pa_proj_element_versions ppev2
7497         WHERE ppev1.project_id = p_dest_project_id
7498         AND   ppev1.attribute15 = ppevs.element_version_id
7499         AND   ppevs.project_id = p_src_project_id
7500         AND   ppev1.attribute15 = ppev2.element_version_id
7501         AND   ppev2.project_id = p_src_project_id
7502         AND   ppev2.parent_structure_version_id = l_src_fin_version_id ;
7503     END IF; --If p_copy_ppevSchedules_flag = 'Y'
7504 
7505     IF (p_commit = FND_API.G_TRUE) THEN
7506       COMMIT;
7507     END IF;
7508 
7509     IF l_debug_mode = 'Y' THEN
7510         Pa_Debug.WRITE(G_PKG_NAME, 'Exiting copy_src_financial_ver_tasks...', l_debug_level3);
7511     END IF;
7512 EXCEPTION
7513 
7514 WHEN Invalid_Arg_Exc_WP THEN
7515      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
7516      x_msg_count     := 1;
7517      x_msg_data      := ' PA_PROJ_TASK_STRUC_PUB : copy_src_financial_ver_tasks : NULL parameters passed';
7518 
7519      IF p_commit = FND_API.G_TRUE THEN
7520         ROLLBACK TO copy_src_fin_ver_tasks;
7521      END IF;
7522 
7523      Fnd_Msg_Pub.add_exc_msg
7524                (  p_pkg_name        => 'PA_PROJ_TASK_STRUC_PUB'
7525                 , p_procedure_name  => 'copy_src_financial_ver_tasks'
7526                 , p_error_text      => x_msg_data);
7527 
7528      IF l_debug_mode = 'Y' THEN
7529           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
7530           Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
7531                               l_debug_level5);
7532           Pa_Debug.reset_curr_function;
7533      END IF;
7534      RAISE;
7535 
7536 WHEN OTHERS THEN
7537      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
7538      x_msg_count     := 1;
7539      x_msg_data      := SQLERRM;
7540 
7541      IF p_commit = FND_API.G_TRUE THEN
7542         ROLLBACK TO copy_src_fin_ver_tasks;
7543      END IF;
7544 
7545      Fnd_Msg_Pub.add_exc_msg
7546        ( p_pkg_name         => 'PA_PROJ_TASK_STRUC_PUB'
7547         , p_procedure_name  => 'copy_src_financial_ver_tasks'
7548         , p_error_text      => x_msg_data);
7549 
7550      IF l_debug_mode = 'Y' THEN
7551           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
7552           Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
7553                               l_debug_level5);
7554           Pa_Debug.reset_curr_function;
7555      END IF;
7556      RAISE;
7557 
7558 END copy_src_financial_ver_tasks;
7559 
7560 
7561 
7562 
7563 -- Procedure            : copy_structures_tasks_bulk
7564 -- Type                 : PUBLIC
7565 -- Purpose              : Contains logic for copying WP/FIN structures, versions and tasks alongwith
7566 --                        intra and inter project dependencies, mapping, deliverables etc.
7567 --                        All this is done only for the SELECTED or DEFAULTED versions that are present
7568 --                        in the global temporary table PA_PROJECT_COPY_OPTIONS_TMP
7569 -- Note                 : **** THIS API HAS BEEN RE-WRITTEN FOR FPM ****
7570 -- Assumptions          : All FLAGS and WORKPLAN record(s) have been populated in the global temporary table
7571 -- Parameters                    Type      Required  Description and Purpose
7572 -- ---------------------------  ------     --------  --------------------------------------------------------
7573 -- p_src_project_id             NUMBER        Y      The source project id
7574 -- p_dest_project_id            NUMBER        Y      The destination project id
7575 -- p_delta                      NUMBER        N
7576 -- p_dest_template_flag         VARCHAR2      N      Whether destination is a template or not
7577 -- p_dest_project_name          VARCHAR2      Y      The name of the destination project
7578 -- p_target_start_date          DATE          Y      The start date of the destination project
7579 -- p_target_finish_date         DATE          Y      The finish date of the destination project
7580 -- p_calendar_id                NUMBER        Y      The calendar id
7581 PROCEDURE copy_structures_tasks_bulk
7582 ( p_api_version                  IN  NUMBER      := 1.0
7583  ,p_commit                       IN  VARCHAR2    := FND_API.G_FALSE
7584  ,p_init_msg_list                IN  VARCHAR2    := FND_API.G_TRUE
7585  ,p_validate_only                IN  VARCHAR2    := FND_API.G_FALSE
7586  ,p_validation_level             IN  VARCHAR2    := FND_API.G_VALID_LEVEL_FULL
7587  ,p_calling_module               IN  VARCHAR2    := 'SELF_SERVICE'
7588  ,p_debug_mode                   IN  VARCHAR2    := 'N'
7589  ,p_max_msg_count                IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7590  ,p_src_project_id               IN  NUMBER
7591  ,p_dest_project_id              IN  NUMBER
7592  ,p_delta                        IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7593  ,p_copy_task_flag               IN  VARCHAR2    := 'Y'  /**NOT USED **/
7594  ,p_dest_template_flag           IN  VARCHAR2    := 'N'
7595  ,p_src_template_flag            IN  VARCHAR2    := 'N'  /**NOT USED **/
7596  ,p_dest_project_name            IN  VARCHAR2
7597  ,p_target_start_date            IN  DATE
7598  ,p_target_finish_date           IN  DATE
7599  ,p_calendar_id                  IN  NUMBER
7600  ,x_return_status                OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7601  ,x_msg_count                    OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7602  ,x_msg_data                     OUT NOCOPY VARCHAR2 )  IS --File.Sql.39 bug 4440895
7603 
7604 --This cursor fetches the workplan structure attributes
7605 CURSOR cur_get_wp_attr IS
7606 SELECT ppwa.WP_ENABLE_VERSION_FLAG
7607 FROM   pa_proj_workplan_attr   ppwa
7608       ,pa_proj_structure_types ppst
7609       ,pa_structure_types      pst
7610 WHERE  ppwa.project_id = p_src_project_id
7611 AND    ppwa.proj_element_id = ppst.proj_element_id
7612 AND    ppst.structure_type_id = pst.structure_type_id
7613 AND    pst.structure_type = 'WORKPLAN';
7614 
7615 --This cursor determines if atleast one WP version has been selected by the user
7616 CURSOR cur_min_one_wp_version_sel IS
7617 SELECT 'Y'
7618 FROM   dual
7619 WHERE EXISTS( SELECT 'Y'
7620               FROM  PA_PROJECT_COPY_OPTIONS_TMP
7621               WHERE CONTEXT = 'WORKPLAN'
7622               AND   VERSION_ID IS NOT NULL) ;
7623 
7624 --This cursor retrieves the values of various flags from the global temporary table
7625 CURSOR cur_get_flag(c_flag_name IN VARCHAR2) IS
7626 SELECT FLAG
7627 FROM   PA_PROJECT_COPY_OPTIONS_TMP
7628 WHERE  CONTEXT = c_flag_name ;
7629 
7630 --This cursor is used to retrieve the destination project's WP/FIN structure id
7631 CURSOR cur_get_dest_structure_id( c_structure_type IN VARCHAR2 ) IS
7632 SELECT ppe.proj_element_id,
7633        ppe.attribute15
7634 FROM   pa_proj_elements ppe,
7635        pa_proj_structure_types ppst,
7636        pa_structure_types pst
7637 WHERE  ppe.project_id = p_dest_project_id
7638 AND    ppe.object_type = 'PA_STRUCTURES'
7639 AND    ppe.proj_element_id = ppst.proj_element_id
7640 AND    ppst.structure_type_id = pst.structure_type_id
7641 AND    pst.structure_type = c_structure_type ;
7642 
7643 CURSOR cur_get_person_id(c_user_id NUMBER) IS
7644 SELECT p.person_id
7645 FROM   per_all_people_f p,
7646        fnd_user f
7647 WHERE f.employee_id = p.person_id
7648 AND   sysdate between p.effective_start_date and p.effective_end_date
7649 AND   f.user_id = c_user_id;
7650 
7651 --This cursor retrieves all the WP versions of the destination project
7652 CURSOR cur_get_dest_wp_struc_versions(c_dest_wp_struc_id IN NUMBER) IS
7653 SELECT ppev.element_version_id
7654       ,ppev.attribute15
7655       ,ppcot.flag
7656 FROM   pa_proj_element_versions ppev,
7657        pa_project_copy_options_tmp ppcot
7658 WHERE  ppev.project_id = p_dest_project_id
7659 AND    ppev.proj_element_id = c_dest_wp_struc_id
7660 AND    ppev.attribute15 = ppcot.version_id
7661 AND    ppcot.context = 'WORKPLAN' ;
7662 
7663 --This cursor gets the schedule start date from the source project
7664 CURSOR cur_get_src_sch_st_date(c_project_id NUMBER, c_struc_ver_id NUMBER) IS
7665 SELECT scheduled_start_date
7666 FROM   pa_proj_elem_ver_schedule
7667 WHERE project_id = c_project_id
7668 AND   element_version_id = c_struc_ver_id;
7669 
7670 CURSOR cur_get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
7671 SELECT nvl(max(version_number),0)+1
7672   FROM pa_proj_elem_ver_structure
7673  WHERE project_id = c_project_id
7674    AND proj_element_id = c_proj_element_id
7675    AND status_code <> 'STRUCTURE_PUBLISHED';
7676 
7677 --This cursor will retrieve the destination project's shared structure id
7678 CURSOR cur_get_shared_struc_id IS
7679 SELECT ppe.proj_element_id,
7680        ppe.attribute15
7681 FROM  pa_proj_elements ppe
7682 WHERE ppe.project_id = p_dest_project_id
7683 AND   ppe.object_type = 'PA_STRUCTURES'
7684 AND   PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y' ;
7685 
7686 --This cursor will retrieve the single version id created for the shared structure
7687 CURSOR cur_get_shared_ver_id IS
7688 SELECT ppev.element_version_id
7689 FROM   pa_proj_element_versions ppev
7690 WHERE ppev.project_id = p_dest_project_id
7691 AND   ppev.object_type = 'PA_STRUCTURES'
7692 AND   PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppev.proj_element_id ) = 'Y' ;
7693 
7694 --This cursor gets the copied tasks' proj_element_id
7695 CURSOR cur_get_copied_tasks( c_dest_parent_structure_id IN NUMBER ) IS
7696 SELECT dest.attribute15     src_ppe_id,
7697        dest.proj_element_id dest_ppe_id
7698 FROM   pa_proj_elements dest
7699 WHERE  dest.project_id = p_dest_project_id
7700 AND    dest.object_type = 'PA_TASKS'
7701 AND    dest.parent_structure_id = c_dest_parent_structure_id  ;
7702 
7703 --Bug 3387963 - Cursor to get destination and source project's organization id
7704 CURSOR cur_get_carrying_out_org IS
7705 SELECT old.carrying_out_organization_id,
7706        new.carrying_out_organization_id
7707 FROM pa_projects_all old,
7708      pa_projects_all new
7709 WHERE old.project_id = p_src_project_id
7710 AND   new.project_id = p_dest_project_id;
7711 
7712 /*Included by avaithia for Bug 3922019*/
7713 CURSOR c_template_flag(l_prj_id IN NUMBER) IS
7714 SELECT template_flag
7715 FROM pa_projects_all
7716 WHERE project_id = l_prj_id ;
7717 
7718 CURSOR c_only_wp_ver_id(l_proj_id IN NUMBER) IS
7719 SELECT ppv.element_version_id
7720   FROM pa_proj_element_versions ppv ,
7721        pa_proj_structure_types pps,
7722        pa_structure_types pst
7723  WHERE ppv.proj_element_id = pps.proj_element_id
7724    AND ppv.object_type = 'PA_STRUCTURES'
7725    AND pps.structure_type_id = pst.structure_type_id
7726    AND pst.structure_type = 'WORKPLAN'
7727    AND ppv.project_id = l_proj_id ;
7728 
7729 l_template_flag         PA_PROJECTS_ALL.template_flag%TYPE ;
7730 l_only_wp_ver_id        PA_PROJ_ELEMENT_VERSIONS.element_version_id%TYPE ;
7731 
7732 /*End of declaration included by avaithia for Bug 3922019*/
7733 
7734 l_old_proj_org_id       NUMBER;
7735 l_new_proj_org_id       NUMBER;
7736 -- End of code added for bug 3387963
7737 
7738 l_return_status         VARCHAR2(1);
7739 l_msg_count             NUMBER;
7740 l_msg_data              VARCHAR2(250);
7741 l_debug_mode            VARCHAR2(1);
7742 l_data                  VARCHAR2(2000);
7743 l_msg_index_out         NUMBER;
7744 l_debug_level2          CONSTANT NUMBER := 2;
7745 l_debug_level3          CONSTANT NUMBER := 3;
7746 l_debug_level4          CONSTANT NUMBER := 4;
7747 l_debug_level5          CONSTANT NUMBER := 5;
7748 
7749 l_workplan_enabled      VARCHAR2(1) := 'N';
7750 l_fin_enabled           VARCHAR2(1) := 'N';
7751 l_dlv_enabled           VARCHAR2(1) := 'N';
7752 l_shared                VARCHAR2(1) := 'N';
7753 l_versioning_enabled    VARCHAR2(1) := 'N';
7754 l_min_one_wp_ver_sel    VARCHAR2(1) := 'N';
7755 l_fin_tasks_flag        VARCHAR2(1) := 'Y';
7756 
7757 l_wp_deliverables_flag     VARCHAR2(1);
7758 l_wp_dlv_item_det_flag     VARCHAR2(1);
7759 l_wp_dlv_attach_flag       VARCHAR2(1);
7760 l_wp_dlv_assoc_task_flag   VARCHAR2(1);
7761 
7762 l_suffix                VARCHAR2(250);
7763 l_append                VARCHAR2(10) := ': ';
7764 l_name                  VARCHAR2(250);
7765 l_user_id               NUMBER := FND_GLOBAL.USER_ID;
7766 l_login_id              NUMBER := FND_GLOBAL.LOGIN_ID;
7767 l_dest_wp_structure_id  NUMBER;
7768 l_src_wp_structure_id   NUMBER;
7769 l_dest_fn_structure_id  NUMBER;
7770 l_src_fn_structure_id   NUMBER;
7771 l_dest_shared_struc_id  NUMBER;
7772 l_src_shared_struc_id   NUMBER;
7773 
7774 l_publish_person_id         NUMBER;
7775 l_cw_version_id             NUMBER(15)  := NULL;
7776 l_dest_status_code          VARCHAR(150);
7777 l_dest_latest_eff_pub_flag  VARCHAR2(1) := 'N';
7778 l_dest_current_working_flag VARCHAR2(1) := 'N';
7779 l_shared_make_working_copy  NUMBER(15);
7780 l_new_wp_ver_id             NUMBER(15);
7781 l_prefix                    VARCHAR2(240);
7782 
7783 l_default_lat_pub_and_cw_flag VARCHAR2(1) := 'N';
7784 l_delta                     NUMBER;
7785 l_src_sch_st_date           DATE;
7786 l_shared_dest_ver_id        NUMBER(15);
7787 l_struc_ver_number          NUMBER;
7788 l_dest_latest_pub_ver_id    NUMBER;
7789 l_wp_task_attach_flag       VARCHAR2(1);
7790 l_fn_task_attach_flag       VARCHAR2(1);
7791 
7792 rec_dest_wp_struc_versions   cur_get_dest_wp_struc_versions%ROWTYPE;
7793 
7794 --bug 3907862, start
7795 l_struct_version_number           NUMBER;
7796 --bug 3912603, Satish, start
7797 x_pev_schedule_id     NUMBER;
7798 check_str_sel_flag   VARCHAR2(1) := 'N';
7799 --bug 3912603, Satish, end
7800 
7801 cursor get_published_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
7802 select nvl(max(version_number),0)+1
7803 from pa_proj_elem_ver_structure
7804 where project_id = c_project_id
7805 and proj_element_id = c_proj_element_id
7806 and status_code = 'STRUCTURE_PUBLISHED';
7807 
7808 cursor get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
7809 select nvl(max(version_number),0)+1
7810 from pa_proj_elem_ver_structure
7811 where project_id = c_project_id
7812 and proj_element_id = c_proj_element_id
7813 and status_code <> 'STRUCTURE_PUBLISHED';
7814 --bug 3907862, end
7815 
7816 --3916763 Begin
7817 CURSOR c_get_approval_options IS
7818     SELECT wp_approval_reqd_flag, wp_auto_publish_flag, wp_approver_source_id
7819     FROM PA_PROJ_WORKPLAN_ATTR ppwa
7820     , PA_PROJ_STRUCTURE_TYPES ppst
7821     , PA_STRUCTURE_TYPES pst
7822     WHERE ppwa.PROJECT_ID = p_src_project_id
7823     AND ppwa.PROJ_ELEMENT_ID = ppst.PROJ_ELEMENT_ID
7824     AND ppst.structure_type_id = pst.structure_type_id
7825     and pst.structure_type = 'WORKPLAN';
7826 l_wp_approval_reqd_flag VARCHAR2(1);
7827 l_wp_auto_publish_flag VARCHAR2(1);
7828 l_wp_approver_source_id NUMBER;
7829 l_submit_wf_required VARCHAR2(1);
7830 l_submit_wf_str_version_id NUMBER;
7831 l_submit_wf_str_id NUMBER;
7832 l_puc_version_id           NUMBER(15);
7833 l_current_working_selected NUMBER(15) := NULL;
7834 --3916763 End
7835 
7836 /* Code added for 6211012*/
7837 
7838 TYPE typ_obj_rela_id is TABLE OF pa_object_relationships.object_relationship_id%TYPE
7839 INDEX BY BINARY_INTEGER;
7840 l_obj_rel_id typ_obj_rela_id;
7841 
7842 TYPE typ_obj_typ_from is TABLE OF pa_object_relationships.object_type_from%TYPE
7843 INDEX BY BINARY_INTEGER;
7844 l_obj_typ_from typ_obj_typ_from;
7845 
7846 TYPE typ_obj_from_id is TABLE OF pa_object_relationships.object_id_from1%TYPE
7847 INDEX BY BINARY_INTEGER;
7848 l_obj_from_id typ_obj_from_id;
7849 
7850 TYPE typ_obj_typ_to is TABLE OF pa_object_relationships.object_type_to%TYPE
7851 INDEX BY BINARY_INTEGER;
7852 l_obj_typ_to typ_obj_typ_to;
7853 
7854 TYPE typ_obj_to_id is TABLE OF pa_object_relationships.object_id_to1%TYPE
7855 INDEX BY BINARY_INTEGER;
7856 l_obj_to_id typ_obj_to_id;
7857 
7858 TYPE typ_rel_typ is TABLE OF pa_object_relationships.relationship_type%TYPE
7859 INDEX BY BINARY_INTEGER;
7860 l_rel_typ typ_rel_typ;
7861 
7862 TYPE typ_rel_subtyp is TABLE OF pa_object_relationships.relationship_subtype%TYPE
7863 INDEX BY BINARY_INTEGER;
7864 l_rel_subtyp typ_rel_subtyp;
7865 
7866 TYPE typ_rec_ver_num is TABLE OF pa_object_relationships.Record_Version_Number%TYPE
7867 INDEX BY BINARY_INTEGER;
7868 l_rec_ver_num typ_rec_ver_num;
7869 
7870 TYPE typ_wt_percent is TABLE OF pa_object_relationships.weighting_percentage%TYPE
7871 INDEX BY BINARY_INTEGER;
7872 l_wt_percent typ_wt_percent;
7873 
7874 
7875 CURSOR cur_pa_obj_rela_2(c_src_str_version_id NUMBER,
7876 		       c_struc_version_id NUMBER
7877 		       ) IS
7878 SELECT /*+ USE_HASH(ppev2 ppev1)*/
7879      pa_object_relationships_s.nextval,
7880      pobj.object_type_from,
7881      ppev1.element_version_id,
7882      pobj.object_type_to,
7883      ppev2.element_version_id,
7884      pobj.relationship_type,
7885      pobj.relationship_subtype,
7886      pobj.Record_Version_Number,
7887      pobj.weighting_percentage
7888 FROM ( SELECT  object_type_from, object_id_from1,
7889                object_type_to,   object_id_to1,
7890                relationship_type, relationship_subtype,
7891                Record_Version_Number, weighting_percentage
7892        FROM pa_object_relationships
7893        START WITH object_id_from1 = c_src_str_version_id
7894              AND  RELATIONSHIP_TYPE = 'S'
7895              CONNECT BY  object_id_from1 =  PRIOR object_id_to1
7896              AND  RELATIONSHIP_TYPE = 'S' ) pobj,
7897             pa_proj_element_versions ppev1,
7898             pa_proj_element_versions ppev2
7899        WHERE ppev1.attribute15 = pobj.object_id_from1
7900        AND   ppev2.attribute15 = pobj.object_id_to1
7901        AND   ppev1.parent_structure_version_id = c_struc_version_id
7902        AND   ppev2.parent_structure_version_id = c_struc_version_id ;
7903 
7904 /*End of Code added for 6211012*/
7905 
7906 BEGIN
7907 
7908      x_msg_count := 0;
7909      x_return_status := FND_API.G_RET_STS_SUCCESS;
7910      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
7911 
7912      IF (p_commit = FND_API.G_TRUE) THEN
7913         SAVEPOINT copy_struc_tasks_bulk;
7914      END IF;
7915 
7916      IF p_init_msg_list = FND_API.G_TRUE THEN
7917           FND_MSG_PUB.initialize;
7918      END IF;
7919 
7920      IF l_debug_mode = 'Y' THEN
7921         PA_DEBUG.set_curr_function( p_function   => 'copy_structures_tasks_bulk',
7922                                     p_debug_mode => l_debug_mode );
7923      END IF;
7924 
7925      IF l_debug_mode = 'Y' THEN
7926         Pa_Debug.g_err_stage:= 'Printing Input parameters';
7927         Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
7928                                    l_debug_level3);
7929 
7930         Pa_Debug.WRITE(G_PKG_NAME,'p_src_project_id'||':'||p_src_project_id,
7931                                    l_debug_level3);
7932 
7933         Pa_Debug.WRITE(G_PKG_NAME,'p_dest_project_id'||':'||p_dest_project_id,
7934                                    l_debug_level3);
7935 
7936         Pa_Debug.WRITE(G_PKG_NAME,'p_delta'||':'||p_delta,
7937                                    l_debug_level3);
7938 
7939         Pa_Debug.WRITE(G_PKG_NAME,'p_copy_task_flag'||':'||p_copy_task_flag,
7940                                    l_debug_level3);
7941 
7942         Pa_Debug.WRITE(G_PKG_NAME,'p_dest_template_flag'||':'||p_dest_template_flag,
7943                                    l_debug_level3);
7944 
7945         Pa_Debug.WRITE(G_PKG_NAME,'p_src_template_flag'||':'||p_src_template_flag,
7946                                    l_debug_level3);
7947 
7948         Pa_Debug.WRITE(G_PKG_NAME,'p_dest_project_name'||':'||p_dest_project_name,
7949                                    l_debug_level3);
7950 
7951         Pa_Debug.WRITE(G_PKG_NAME,'p_target_start_date'||':'||p_target_start_date,
7952                                    l_debug_level3);
7953 
7954         Pa_Debug.WRITE(G_PKG_NAME,'p_target_finish_date'||':'||p_target_finish_date,
7955                                    l_debug_level3);
7956 
7957         Pa_Debug.WRITE(G_PKG_NAME,'p_calendar_id'||':'||p_calendar_id,
7958                                    l_debug_level3);
7959      END IF;
7960 
7961     --If source and destination project are the same
7962     IF p_src_project_id = p_dest_project_id THEN
7963         x_return_status := FND_API.G_RET_STS_SUCCESS;
7964         RETURN;
7965     END IF;
7966 
7967     --Check whether WP structure is enabled for the source project
7968     l_workplan_enabled := PA_PROJECT_STRUCTURE_UTILS.check_workplan_enabled( p_src_project_id );
7969     --Check whether Financial structure is enabled for the source project
7970     l_fin_enabled      := PA_PROJECT_STRUCTURE_UTILS.check_financial_enabled( p_src_project_id );
7971     IF NVL( l_workplan_enabled, 'N' ) = 'Y' THEN
7972         --Check whether the structures are shared or not in the source project
7973         l_shared := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_src_project_id);
7974         --Retrieve whether versioning is enabled or not
7975         OPEN  cur_get_wp_attr;
7976         FETCH cur_get_wp_attr INTO l_versioning_enabled;
7977         CLOSE cur_get_wp_attr;
7978     END IF;
7979 
7980     --Check whether deliverables is enabled
7981     l_dlv_enabled := PA_PROJECT_STRUCTURE_UTILS.check_Deliverable_enabled(p_src_project_id);
7982 
7983     --If deliverables is enabled, retrieve the various deliverables flags
7984     IF 'Y' = l_dlv_enabled  THEN
7985         OPEN  cur_get_flag('WP_DELIVERABLES_FLAG');
7986         FETCH cur_get_flag INTO l_wp_deliverables_flag;
7987         CLOSE cur_get_flag;
7988 
7989         OPEN  cur_get_flag('WP_DLV_ITEM_DET_FLAG');
7990         FETCH cur_get_flag INTO l_wp_dlv_item_det_flag;
7991         CLOSE cur_get_flag;
7992 
7993         OPEN  cur_get_flag('WP_DLV_ATTACH_FLAG');
7994         FETCH cur_get_flag INTO l_wp_dlv_attach_flag;
7995         CLOSE cur_get_flag;
7996 
7997         OPEN  cur_get_flag('WP_DLV_ASSOC_TASK_FLAG');
7998         FETCH cur_get_flag INTO l_wp_dlv_assoc_task_flag;
7999         CLOSE cur_get_flag;
8000     END IF;
8001 
8002     --If both workplan and financial structures are disabled, we only need to copy deliverables and return
8003     IF 'N' = l_workplan_enabled AND 'N' = l_fin_enabled THEN
8004         --If deliverables is enabled and deliverables are selected for copying
8005         IF ( 'Y' = l_dlv_enabled AND 'Y' = l_wp_deliverables_flag ) THEN
8006 
8007             PA_DELIVERABLE_PUB.copy_deliverables
8008              (p_source_project_id    => p_src_project_id
8009              ,p_target_project_id    => p_dest_project_id
8010              ,p_item_details_flag    => l_wp_dlv_item_det_flag
8011              ,p_dlv_actions_flag     => 'Y'
8012              ,p_dlv_attachments_flag => l_wp_dlv_attach_flag
8013              ,p_association_flag     => l_wp_dlv_assoc_task_flag
8014              ,p_prefix               => 'CP'
8015              ,p_delta                => p_delta
8016              ,p_calling_context      => 'COPY_PROJECT'
8017              ,x_return_status        => x_return_status
8018              ,x_msg_count            => x_msg_count
8019              ,x_Msg_data             => x_msg_data
8020              );
8021 
8022             IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8023              RAISE FND_API.G_EXC_ERROR;
8024             END IF;
8025 
8026             --Update back the attributes column in pa_proj_elements and pa_proj_element_versions with actual data from source project
8027             UPDATE pa_proj_elements ppe1
8028             SET attribute15 = ( SELECT attribute15 FROM pa_proj_elements ppe2
8029                                  WHERE ppe2.project_id = p_src_project_id
8030                                    AND ppe2.proj_element_id = ppe1.attribute15 )
8031             WHERE project_id = p_dest_project_id ;
8032 
8033             UPDATE pa_proj_element_versions ppevs1
8034             SET attribute15 = ( SELECT attribute15 FROM pa_proj_element_versions ppevs2
8035                                  WHERE ppevs2.project_id = p_src_project_id
8036                                    AND ppevs2.element_version_id = ppevs1.attribute15 )
8037             WHERE project_id = p_dest_project_id ;
8038 
8039         END IF;
8040 
8041         x_return_status := FND_API.G_RET_STS_SUCCESS ;
8042 
8043         IF (p_commit = FND_API.G_TRUE) THEN
8044             COMMIT;
8045         END IF;
8046 
8047         RETURN;
8048     END IF;
8049 
8050     --Check whether atleast one WP version has been selected by the user or not
8051     OPEN  cur_min_one_wp_version_sel;
8052     FETCH cur_min_one_wp_version_sel INTO l_min_one_wp_ver_sel;
8053     CLOSE cur_min_one_wp_version_sel;
8054 
8055     --Check whether the financial tasks flag is checked or not
8056     OPEN  cur_get_flag('FN_FIN_TASKS_FLAG');
8057     FETCH cur_get_flag INTO l_fin_tasks_flag;
8058     CLOSE cur_get_flag;
8059 
8060     -------------------------------------------------------------------------------------------------------
8061     /**** THE FOLLOWING SECTION INSERTS WORKPLAN AND FINANCIAL STRUCTURES AND RELATED ATTRIBUTES INTO THE
8062           DESTINATION PROJECT ****/
8063     -------------------------------------------------------------------------------------------------------
8064 
8065     l_name := substr(p_dest_project_name, 1, 240);
8066 
8067     IF l_debug_mode = 'Y' THEN
8068         Pa_Debug.WRITE(G_PKG_NAME, 'Atleast one WP ver selected : '||l_min_one_wp_ver_sel, l_debug_level3);
8069         Pa_Debug.WRITE(G_PKG_NAME, 'Financial Tasks flag : '||l_fin_tasks_flag, l_debug_level3);
8070     END IF;
8071 
8072     --Copy workplan/financial structures into the destination project
8073     INSERT INTO pa_proj_elements(
8074      PROJ_ELEMENT_ID
8075     ,PROJECT_ID
8076     ,OBJECT_TYPE
8077     ,ELEMENT_NUMBER
8078     ,NAME
8079     ,DESCRIPTION
8080     ,STATUS_CODE
8081     ,WF_STATUS_CODE
8082     ,PM_SOURCE_CODE
8083     ,PM_SOURCE_REFERENCE
8084     ,CLOSED_DATE
8085     ,LOCATION_ID
8086     ,MANAGER_PERSON_ID
8087     ,CARRYING_OUT_ORGANIZATION_ID
8088     ,TYPE_ID
8089     ,PRIORITY_CODE
8090     ,CREATION_DATE
8091     ,CREATED_BY
8092     ,LAST_UPDATE_DATE
8093     ,LAST_UPDATED_BY
8094     ,LAST_UPDATE_LOGIN
8095     ,RECORD_VERSION_NUMBER
8096     ,REQUEST_ID
8097     ,PROGRAM_APPLICATION_ID
8098     ,PROGRAM_ID
8099     ,PROGRAM_UPDATE_DATE
8100     ,LINK_TASK_FLAG
8101     ,BASELINE_START_DATE
8102     ,BASELINE_FINISH_DATE
8103     ,PROGRESS_OUTDATED_FLAG
8104     ,ATTRIBUTE_CATEGORY
8105     ,ATTRIBUTE1
8106     ,ATTRIBUTE2
8107     ,ATTRIBUTE3
8108     ,ATTRIBUTE4
8109     ,ATTRIBUTE5
8110     ,ATTRIBUTE6
8111     ,ATTRIBUTE7
8112     ,ATTRIBUTE8
8113     ,ATTRIBUTE9
8114     ,ATTRIBUTE10
8115     ,ATTRIBUTE11
8116     ,ATTRIBUTE12
8117     ,ATTRIBUTE13
8118     ,ATTRIBUTE14
8119     ,ATTRIBUTE15
8120     ,PARENT_STRUCTURE_ID
8121     ,TYPE_CODE
8122     ,INC_PROJ_PROGRESS_FLAG
8123     ,WQ_ITEM_CODE
8124     ,WQ_UOM_CODE
8125     ,WQ_ACTUAL_ENTRY_CODE
8126     ,TASK_PROGRESS_ENTRY_PAGE_ID
8127     ,BASELINE_DURATION
8128     ,PHASE_CODE
8129     ,PHASE_VERSION_ID
8130     ,PROGRESS_WEIGHT
8131     ,BASE_PERCENT_COMP_DERIV_CODE
8132     ,FUNCTION_CODE
8133     ,ENABLE_WF_FLAG
8134     ,WF_ITEM_TYPE
8135     ,WF_PROCESS
8136     ,WF_START_LEAD_DAYS
8137     ,source_object_id
8138     ,source_object_type
8139     )
8140     SELECT
8141      pa_tasks_s.nextval
8142     ,p_dest_project_id
8143     ,ppe.object_type
8144     ,pa_tasks_s.nextval     --Set element_number same as proj_element_id
8145     ,l_name
8146     ,ppe.DESCRIPTION
8147     ,ppe.STATUS_CODE
8148     ,ppe.WF_STATUS_CODE
8149     ,NULL                   --bug 3810263 replacing ppe.PM_SOURCE_CODE
8150     ,NULL                   --bug 3810263 replacing ppe.PM_SOURCE_REFERENCE
8151     ,ppe.CLOSED_DATE
8152     ,ppe.LOCATION_ID
8153     ,ppe.MANAGER_PERSON_ID
8154     ,ppe.CARRYING_OUT_ORGANIZATION_ID
8155     ,ppe.TYPE_ID
8156     ,ppe.PRIORITY_CODE
8157     ,SYSDATE
8158     ,l_user_id
8159     ,SYSDATE
8160     ,l_user_id
8161     ,l_login_id
8162     ,ppe.RECORD_VERSION_NUMBER
8163     ,ppe.REQUEST_ID
8164     ,ppe.PROGRAM_APPLICATION_ID
8165     ,ppe.PROGRAM_ID
8166     ,ppe.PROGRAM_UPDATE_DATE
8167     ,ppe.LINK_TASK_FLAG
8168     ,ppe.BASELINE_START_DATE
8169     ,ppe.BASELINE_FINISH_DATE
8170     ,'N'    --,ppe.progress_outdated_flag
8171     ,ppe.ATTRIBUTE_CATEGORY
8172     ,ppe.ATTRIBUTE1
8173     ,ppe.ATTRIBUTE2
8174     ,ppe.ATTRIBUTE3
8175     ,ppe.ATTRIBUTE4
8176     ,ppe.ATTRIBUTE5
8177     ,ppe.ATTRIBUTE6
8178     ,ppe.ATTRIBUTE7
8179     ,ppe.ATTRIBUTE8
8180     ,ppe.ATTRIBUTE9
8181     ,ppe.ATTRIBUTE10
8182     ,ppe.ATTRIBUTE11
8183     ,ppe.ATTRIBUTE12
8184     ,ppe.ATTRIBUTE13
8185     ,ppe.ATTRIBUTE14
8186     ,ppe.proj_element_id    --attribute 15 is used to store old structure id to identify the structure type
8187     ,null                   --parent_structure_id is NULL in case of structures
8188     ,ppe.TYPE_CODE
8189     ,ppe.INC_PROJ_PROGRESS_FLAG
8190     ,ppe.WQ_ITEM_CODE
8191     ,ppe.WQ_UOM_CODE
8192     ,ppe.WQ_ACTUAL_ENTRY_CODE
8193     ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
8194     ,ppe.BASELINE_DURATION
8195     ,ppe.PHASE_CODE
8196     ,ppe.PHASE_VERSION_ID
8197     ,ppe.PROGRESS_WEIGHT
8198     ,ppe.BASE_PERCENT_COMP_DERIV_CODE
8199     ,ppe.FUNCTION_CODE
8200     ,ppe.ENABLE_WF_FLAG    --'N'  Bug 3616964
8201     ,ppe.WF_ITEM_TYPE
8202     ,ppe.WF_PROCESS
8203     ,ppe.WF_START_LEAD_DAYS
8204     ,p_dest_project_id
8205     ,'PA_PROJECTS'
8206     FROM pa_proj_elements ppe
8207     WHERE ppe.project_id = p_src_project_id
8208     AND   ppe.proj_element_id IN
8209        ( SELECT ppe2.proj_element_id
8210            FROM  pa_proj_elements ppe2
8211                 ,pa_proj_structure_types ppst
8212                 ,pa_structure_types pst
8213           WHERE ppe2.project_id = p_src_project_id
8214             AND ppe2.object_type = 'PA_STRUCTURES'
8215             AND ppe2.proj_element_id = ppst.proj_element_id
8216             AND ppst.structure_type_id = pst.structure_type_id
8217             AND pst.structure_type IN ('WORKPLAN','FINANCIAL') );
8218     --DONOT use the fn call PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y' in above insert
8219     --Inner query is necessary rather than a straight join of three tables in the outer query bec in case of shared,
8220     --the same record from source project is returned twice.
8221 
8222     SELECT meaning INTO l_suffix
8223     FROM pa_lookups
8224     WHERE lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
8225     AND   lookup_code = 'WORKPLAN';
8226 
8227     --If Split and Workplan enabled
8228     IF 'N' = l_shared AND 'Y' = l_workplan_enabled THEN
8229         --Update the name of the WP structure record
8230         UPDATE pa_proj_elements ppe
8231         SET    name = substr(p_dest_project_name||l_append||l_suffix, 1, 240)
8232         WHERE project_id = p_dest_project_id
8233         AND   object_type = 'PA_STRUCTURES'
8234         AND   EXISTS ( SELECT proj_element_id FROM pa_proj_structure_types
8235                        WHERE proj_element_id = ppe.proj_element_id
8236                        AND   structure_type_id = 1 );
8237     END IF;
8238 
8239     --Copy entries in pa_proj_structure_types for financial and workplan structures
8240     INSERT INTO PA_PROJ_STRUCTURE_TYPES(
8241      PROJ_STRUCTURE_TYPE_ID
8242     ,PROJ_ELEMENT_ID
8243     ,STRUCTURE_TYPE_ID
8244     ,CREATION_DATE
8245     ,CREATED_BY
8246     ,LAST_UPDATE_DATE
8247     ,LAST_UPDATED_BY
8248     ,LAST_UPDATE_LOGIN
8249     ,RECORD_VERSION_NUMBER )
8250     SELECT
8251      pa_proj_structure_types_s.nextval
8252     ,ppe.proj_element_id
8253     ,ppst.structure_type_id            --structure type
8254     ,sysdate
8255     ,l_user_id
8256     ,sysdate
8257     ,l_user_id
8258     ,l_login_id
8259     ,1
8260     FROM pa_proj_elements ppe,
8261          pa_proj_structure_types ppst
8262     WHERE ppe.project_id = p_dest_project_id
8263     AND   ppe.attribute15 IN        --DoNot use PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.attribute15 ) = 'Y'
8264        ( SELECT ppe2.proj_element_id
8265            FROM  pa_proj_elements ppe2
8266                 ,pa_proj_structure_types ppst
8267                 ,pa_structure_types pst
8268           WHERE ppe2.project_id = p_src_project_id
8269             AND ppe2.object_type = 'PA_STRUCTURES'
8270             AND ppe2.proj_element_id = ppst.proj_element_id
8271             AND ppst.structure_type_id = pst.structure_type_id
8272             AND pst.structure_type IN ('WORKPLAN','FINANCIAL') )
8273     AND   ppe.attribute15 = ppst.proj_element_id ; --proj_element_id is unique in pa_proj_structure_types
8274 
8275     --Copy workplan attributes for financial and workplan structures
8276     INSERT INTO pa_proj_workplan_attr(
8277      PROJ_ELEMENT_ID
8278     ,PROJECT_ID
8279     ,LAST_UPDATE_DATE
8280     ,LAST_UPDATED_BY
8281     ,CREATION_DATE
8282     ,CREATED_BY
8283     ,WP_APPROVAL_REQD_FLAG
8284     ,WP_AUTO_PUBLISH_FLAG
8285     ,WP_DEFAULT_DISPLAY_LVL
8286     ,WP_ENABLE_VERSION_FLAG
8287     ,AUTO_PUB_UPON_CREATION_FLAG
8288     ,AUTO_SYNC_TXN_DATE_FLAG
8289     ,WP_APPROVER_SOURCE_ID
8290     ,WP_APPROVER_SOURCE_TYPE
8291     ,RECORD_VERSION_NUMBER
8292     ,LAST_UPDATE_LOGIN
8293     ,TXN_DATE_SYNC_BUF_DAYS
8294     ,LIFECYCLE_VERSION_ID
8295     ,CURRENT_PHASE_VERSION_ID
8296     ,SCHEDULE_THIRD_PARTY_FLAG
8297     ,ALLOW_LOWEST_TSK_DEP_FLAG
8298 --    ,PROGRAM_FLAG
8299     ,AUTO_ROLLUP_SUBPROJ_FLAG
8300     ,THIRD_PARTY_SCHEDULE_CODE
8301     ,source_object_id
8302     ,source_object_type
8303     )
8304     SELECT
8305      ppe.PROJ_ELEMENT_ID
8306     ,ppe.PROJECT_ID
8307     ,SYSDATE
8308     ,l_user_id
8309     ,SYSDATE
8310     ,l_user_id
8311     ,ppwa.WP_APPROVAL_REQD_FLAG
8312     ,ppwa.WP_AUTO_PUBLISH_FLAG
8313     ,ppwa.WP_DEFAULT_DISPLAY_LVL
8314     ,ppwa.WP_ENABLE_VERSION_FLAG
8315     ,ppwa.AUTO_PUB_UPON_CREATION_FLAG
8316     ,ppwa.AUTO_SYNC_TXN_DATE_FLAG
8317     ,ppwa.WP_APPROVER_SOURCE_ID
8318     ,ppwa.WP_APPROVER_SOURCE_TYPE
8319     ,ppwa.RECORD_VERSION_NUMBER
8320     ,l_login_id
8321     ,ppwa.TXN_DATE_SYNC_BUF_DAYS
8322     ,ppwa.LIFECYCLE_VERSION_ID
8323     ,ppwa.CURRENT_PHASE_VERSION_ID
8324     ,ppwa.SCHEDULE_THIRD_PARTY_FLAG
8325     ,ppwa.ALLOW_LOWEST_TSK_DEP_FLAG
8326 --    ,ppwa.PROGRAM_FLAG
8327     ,ppwa.AUTO_ROLLUP_SUBPROJ_FLAG
8328     ,ppwa.THIRD_PARTY_SCHEDULE_CODE
8329     ,ppe.PROJECT_ID
8330     ,'PA_PROJECTS'
8331     FROM pa_proj_elements ppe,
8332          pa_proj_workplan_attr ppwa
8333     WHERE ppwa.project_id = p_src_project_id
8334     AND   ppe.attribute15 = ppwa.proj_element_id
8335     AND   PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y'
8336     AND   ppe.project_id = p_dest_project_id   --bug 3939786
8337     ;
8338 
8339     --Copy progress attributes for financial and workplan structures
8340     INSERT INTO pa_proj_progress_attr(
8341      PROJ_PROGRESS_ATTR_ID
8342     ,OBJECT_TYPE
8343     ,OBJECT_ID
8344     ,LAST_UPDATE_DATE
8345     ,LAST_UPDATED_BY
8346     ,CREATION_DATE
8347     ,CREATED_BY
8348     ,LAST_UPDATE_LOGIN
8349     ,PROJECT_ID
8350     ,PROGRESS_CYCLE_ID
8351     ,WQ_ENABLE_FLAG
8352     ,REMAIN_EFFORT_ENABLE_FLAG
8353     ,PERCENT_COMP_ENABLE_FLAG
8354     ,NEXT_PROGRESS_UPDATE_DATE
8355     ,RECORD_VERSION_NUMBER
8356     ,TASK_WEIGHT_BASIS_CODE
8357     ,ALLOW_COLLAB_PROG_ENTRY
8358     ,ALLOW_PHY_PRCNT_CMP_OVERRIDES
8359     ,STRUCTURE_TYPE
8360     )
8361     SELECT
8362      PA_PROJ_PROGRESS_ATTR_S.nextval
8363     ,ppe.OBJECT_TYPE
8364     ,ppe.proj_element_ID
8365     ,sysdate
8366     ,l_user_id
8367     ,SYSDATE
8368     ,l_user_id
8369     ,l_login_id
8370     ,p_dest_project_id
8371     ,pppa.PROGRESS_CYCLE_ID
8372     ,pppa.WQ_ENABLE_FLAG
8373     ,pppa.REMAIN_EFFORT_ENABLE_FLAG
8374     ,pppa.PERCENT_COMP_ENABLE_FLAG
8375     ,pppa.NEXT_PROGRESS_UPDATE_DATE
8376     ,pppa.RECORD_VERSION_NUMBER
8377     ,pppa.TASK_WEIGHT_BASIS_CODE
8378     ,pppa.ALLOW_COLLAB_PROG_ENTRY
8379     ,pppa.ALLOW_PHY_PRCNT_CMP_OVERRIDES
8380     ,pppa.STRUCTURE_TYPE
8381     FROM pa_proj_progress_attr pppa,
8382          pa_proj_elements ppe
8383     WHERE ppe.project_id = p_dest_project_id
8384     AND   PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y'
8385     AND   ppe.attribute15 = pppa.object_id
8386     AND   pppa.project_id = p_src_project_id
8387     AND   pppa.object_type = 'PA_STRUCTURES' ;
8388 
8389     IF l_debug_mode = 'Y' THEN
8390         Pa_Debug.WRITE(G_PKG_NAME, 'After inserting WP/FIN structures and related attributes', l_debug_level3);
8391     END IF;
8392 
8393     ---------------------------------------------------------------------------------------------------------
8394     /**** THE FOLLOWING SECTION COPIES/INSERTS WORKPLAN VERSIONS AND TASKS INTO THE DESTINATION PROJECT ****/
8395     ---------------------------------------------------------------------------------------------------------
8396 --IF 'ATLEAST ONE WP VER IS SELECTED' FOR COPYING THEN
8397 --  Copy selected version(s) and tasks belonging to these version(s)
8398 --  Call API to sync up pa_tasks with pa_proj_elements in case of SHARED structure
8399 --ELSE (if no WP ver selected for copying)
8400 --  IF 'SHARED' AND 'FINANCIAL TASKS FLAG IS CHECKED' THEN
8401 --      Copy financial structure version in the source project and tasks belonging to this version
8402 --  ENF IF;
8403 --  IF ('SHARED' AND 'FINANCAIL TASKS FLAG IS NOT CHECKED') OR (SPLIT AND WORKPLAN ENABLED) THEN
8404 --      Insert new (default) structure version for WP
8405 --  END IF;
8406 --END IF;
8407 
8408     --Get the destination project's wp structure id
8409     OPEN  cur_get_dest_structure_id('WORKPLAN');
8410     FETCH cur_get_dest_structure_id INTO l_dest_wp_structure_id, l_src_wp_structure_id;
8411     CLOSE cur_get_dest_structure_id;
8412 
8413     --Get the destination project's financial structure id
8414     OPEN  cur_get_dest_structure_id('FINANCIAL');
8415     FETCH cur_get_dest_structure_id INTO l_dest_fn_structure_id, l_src_fn_structure_id;
8416     CLOSE cur_get_dest_structure_id;
8417 
8418     --Get the publish person id
8419     OPEN cur_get_person_id(FND_GLOBAL.USER_ID);
8420     FETCH cur_get_person_id INTO l_publish_person_id;
8421         IF cur_get_person_id%NOTFOUND THEN
8422             l_publish_person_id := NULL;
8423         END IF;
8424     CLOSE cur_get_person_id;
8425 
8426      --Bug 3387963 - Added to get the cursor values
8427     OPEN  cur_get_carrying_out_org;
8428     FETCH cur_get_carrying_out_org INTO l_old_proj_org_id, l_new_proj_org_id;
8429     CLOSE cur_get_carrying_out_org;
8430 
8431 
8432 
8433     --If there is atleast one WP version selected for copying
8434     IF 'Y' = nvl(l_min_one_wp_ver_sel,'N') THEN
8435 
8436         IF l_debug_mode = 'Y' THEN
8437             Pa_Debug.WRITE(G_PKG_NAME, 'Inserting versions and tasks for selected WP version(s)', l_debug_level3);
8438         END IF;
8439 
8440         --Copy SELECTED workplan versions
8441         INSERT INTO pa_proj_element_versions(
8442          ELEMENT_VERSION_ID
8443         ,PROJ_ELEMENT_ID
8444         ,OBJECT_TYPE
8445         ,PROJECT_ID
8446         ,PARENT_STRUCTURE_VERSION_ID
8447         ,DISPLAY_SEQUENCE
8448         ,WBS_LEVEL
8449         ,WBS_NUMBER
8450         ,CREATION_DATE
8451         ,CREATED_BY
8452         ,LAST_UPDATE_DATE
8453         ,LAST_UPDATED_BY
8454         ,LAST_UPDATE_LOGIN
8455         ,RECORD_VERSION_NUMBER
8456         ,attribute15          --This column stores the stucture version id in the src project, to be used to create relationships.
8457         ,ATTRIBUTE_CATEGORY
8458         ,ATTRIBUTE1
8459         ,ATTRIBUTE2
8460         ,ATTRIBUTE3
8461         ,ATTRIBUTE4
8462         ,ATTRIBUTE5
8463         ,ATTRIBUTE6
8464         ,ATTRIBUTE7
8465         ,ATTRIBUTE8
8466         ,ATTRIBUTE9
8467         ,ATTRIBUTE10
8468         ,ATTRIBUTE11
8469         ,ATTRIBUTE12
8470         ,ATTRIBUTE13
8471         ,ATTRIBUTE14
8472         ,TASK_UNPUB_VER_STATUS_CODE
8473         ,FINANCIAL_TASK_FLAG
8474         ,PRG_GROUP
8475         ,PRG_LEVEL
8476         ,PRG_COUNT
8477        ,source_object_id
8478        ,source_object_type
8479         )
8480         SELECT
8481          pa_proj_element_versions_s.nextval
8482         ,l_dest_wp_structure_id
8483         ,ppev.object_type
8484         ,p_dest_project_id
8485         ,pa_proj_element_versions_s.nextval --nextval occuring twice in the same select returns the same value
8486         ,ppev.DISPLAY_SEQUENCE
8487         ,ppev.WBS_LEVEL
8488         ,ppev.WBS_NUMBER
8489         ,SYSDATE                    ------CREATION_DATE
8490         ,l_user_id                  ------CREATED_BY
8491         ,SYSDATE                    ------LAST_UPDATE_DATE
8492         ,l_user_id                  ------LAST_UPDATED_BY
8493         ,l_login_id                 ------LAST_UPDATE_LOGIN
8494         ,ppev.RECORD_VERSION_NUMBER ------RECORD_VERSION_NUMBER
8495         ,ppev.element_version_id
8496         ,ppev.ATTRIBUTE_CATEGORY
8497         ,ppev.ATTRIBUTE1
8498         ,ppev.ATTRIBUTE2
8499         ,ppev.ATTRIBUTE3
8500         ,ppev.ATTRIBUTE4
8501         ,ppev.ATTRIBUTE5
8502         ,ppev.ATTRIBUTE6
8503         ,ppev.ATTRIBUTE7
8504         ,ppev.ATTRIBUTE8
8505         ,ppev.ATTRIBUTE9
8506         ,ppev.ATTRIBUTE10
8507         ,ppev.ATTRIBUTE11
8508         ,ppev.ATTRIBUTE12
8509         ,ppev.ATTRIBUTE13
8510         ,ppev.ATTRIBUTE14
8511         ,ppev.TASK_UNPUB_VER_STATUS_CODE
8512         ,ppev.FINANCIAL_TASK_FLAG
8513         ,NULL --bug 4261419
8514         ,NULL --bug 4261419
8515         ,NULL --bug 4261419
8516     ,p_dest_project_id
8517     ,'PA_PROJECTS'
8518         FROM pa_proj_element_versions ppev,
8519              pa_project_copy_options_tmp ppcot
8520         WHERE ppcot.context = 'WORKPLAN'
8521          AND  ppev.element_version_id = ppcot.version_id
8522          AND  ppev.project_id = p_src_project_id
8523          AND  ppev.object_type = 'PA_STRUCTURES' ;
8524 
8525         /** THE FOLLOWING SECTION OF THE CODE IDENTIFIES THE CURRENT_WORKING VERSION IN THE DESTINATION PROJECT **/
8526 
8527         --IF current_working version from source is selected and is not published upon creation
8528         --      --> Copy the same as current_working in the destination project
8529         --IF current_working version from the source is not selected or it is publish upon creation
8530         --      --> Copy the lastest updated working WP version that is selected and is not publish upon creation
8531         --IF no working version is selected or the single selected working version is publish upon creation
8532         --      --> Copy the latest published version as current working, if it is selected and is not publish upon creation
8533         --      --> Else, copy the next latest published version which is selected and is not PUC, as current working
8534         IF 'Y' = l_versioning_enabled AND 'N' = p_dest_template_flag THEN
8535             DECLARE
8536 
8537             --This cursor gets the WP version which is selected for Publish Upon Creation
8538             CURSOR get_puc_version_id IS
8539             SELECT version_id
8540             FROM   pa_project_copy_options_tmp ppcot
8541             WHERE context = 'WORKPLAN'
8542             AND   flag = 'Y';
8543 
8544             --Gets the current working version of the source project ONLY if it has been SELECTED for copying
8545             CURSOR get_current_working_selected IS
8546             SELECT ppevs.element_version_id
8547             FROM pa_proj_elem_ver_structure ppevs,
8548                  pa_project_copy_options_tmp ppcot
8549             WHERE ppevs.current_working_flag = 'Y'
8550             AND   ppevs.status_code = 'STRUCTURE_WORKING'
8551             AND   ppevs.project_id = p_src_project_id
8552             AND   ppevs.element_version_id = ppcot.version_id
8553             AND   ppcot.context = 'WORKPLAN' ;
8554 
8555             --This cursor gets the LATEST UPDATED WORKING version from the src project, which is SELECTED for
8556             --copying and is NOT Publish Upon Creation
8557             CURSOR get_latest_working_version IS
8558             SELECT element_version_id FROM
8559             ( SELECT ppevs.element_version_id
8560               FROM pa_proj_elem_ver_structure ppevs,
8561                    pa_project_copy_options_tmp ppcot
8562               WHERE ppevs.element_version_id = ppcot.version_id
8563               AND   ppevs.project_id  = p_src_project_id
8564               AND   ppevs.status_code = 'STRUCTURE_WORKING'
8565               AND   ppcot.context = 'WORKPLAN'
8566               AND   ppcot.flag = 'N'
8567               ORDER BY ppevs.last_update_date desc)
8568             WHERE rownum = 1;
8569 
8570             --Gets the LATEST PUBLISHED VERSION from the source project, which is SELECTED for copying and is
8571             --NOT Publish Upon Creation
8572             CURSOR get_latest_published IS
8573             SELECT ppevs.element_version_id
8574             FROM pa_proj_elem_ver_structure ppevs,
8575                  pa_project_copy_options_tmp ppcot
8576             WHERE ppevs.latest_eff_published_flag = 'Y'
8577             AND   ppevs.status_code = 'STRUCTURE_PUBLISHED'
8578             AND   ppevs.element_version_id = ppcot.version_id
8579             AND   ppcot.context = 'WORKPLAN'
8580             AND   ppevs.project_id= p_src_project_id     --bug 4868867 sql id = 14909148
8581             AND   ppcot.flag = 'N' ;
8582 
8583             --Gets the LAST PUBLISHED version from the source project, which is SELECTED for copying but is
8584             --NOT selected for PUBLISH UPON CREATION
8585             CURSOR get_last_published IS
8586             SELECT element_version_id FROM
8587             ( SELECT ppevs.element_version_id
8588               FROM pa_proj_elem_ver_structure ppevs,
8589                    pa_project_copy_options_tmp ppcot
8590               WHERE ppevs.element_version_id = ppcot.version_id
8591               AND   ppevs.status_code = 'STRUCTURE_PUBLISHED'
8592               AND   ppevs.project_id = p_src_project_id
8593               AND   ppcot.context = 'WORKPLAN'
8594               AND   ppcot.flag = 'N'
8595               ORDER BY ppevs.published_date DESC )
8596             WHERE ROWNUM = 1;
8597 
8598             --l_puc_version_id           NUMBER(15); Bug 3916763 : Moved this variable outside so that it can be used ahead
8599             --l_current_working_selected NUMBER(15) := NULL; Bug 3916763 : Moved this variable outside so that it can be used ahead
8600 
8601             BEGIN
8602 
8603                 --Fetch the version which is selected for PUBLISH UPON CREATION
8604                 OPEN  get_puc_version_id;
8605                 FETCH get_puc_version_id INTO l_puc_version_id;
8606                 CLOSE get_puc_version_id;
8607 
8608                 --Fetch the CURRENT WORKING version, if it has been SELECTED for copying
8609                 OPEN  get_current_working_selected;
8610                 FETCH get_current_working_selected INTO l_current_working_selected;
8611 
8612         IF l_debug_mode = 'Y' THEN
8613             pa_debug.write(G_PKG_NAME, 'l_puc_version_id='||l_puc_version_id, l_debug_level3);
8614             pa_debug.write(G_PKG_NAME, 'l_current_working_selected='||l_current_working_selected, l_debug_level3);
8615         END IF;
8616 
8617 
8618                 --If the CURRENT WORKING version is SELECTED for copying and is NOT Publish Upon Creatiion
8619                 IF l_current_working_selected IS NOT NULL AND l_current_working_selected <> nvl(l_puc_version_id,-88) THEN
8620                     l_cw_version_id := l_current_working_selected;
8621                 ELSE
8622                     OPEN  get_latest_working_version;
8623                     FETCH get_latest_working_version INTO l_cw_version_id;
8624                     IF get_latest_working_version%NOTFOUND THEN
8625                         OPEN  get_latest_published;
8626                         FETCH get_latest_published INTO l_cw_version_id;
8627                         IF get_latest_published %NOTFOUND THEN
8628                             OPEN  get_last_published;
8629                             FETCH get_last_published INTO l_cw_version_id;
8630                             CLOSE get_last_published;
8631                         END IF;
8632                         CLOSE get_latest_published;
8633                     END IF;
8634                     CLOSE get_latest_working_version;
8635                 END IF;
8636                 CLOSE get_current_working_selected;
8637 
8638         IF l_debug_mode = 'Y' THEN
8639             pa_debug.write(G_PKG_NAME, 'l_cw_version_id='||l_cw_version_id, l_debug_level3);
8640         END IF;
8641             END;
8642         END IF; --IF versioning is enabled
8643         /** END OF CODE TO DETERMINE CURRENT WORKING VERSION IN DESTINATION PROJECT **/
8644 
8645         IF l_debug_mode = 'Y' THEN
8646             Pa_Debug.WRITE(G_PKG_NAME, 'Source version to be set as current working in dest project : '||l_cw_version_id,
8647                            l_debug_level3);
8648             Pa_Debug.WRITE(G_PKG_NAME, 'Printing  l_dest_wp_structure_id: '||l_dest_wp_structure_id,
8649                            l_debug_level3);
8650         END IF;
8651 
8652 
8653         --Loop for selected wp versions
8654         FOR rec_dest_wp_struc_versions IN cur_get_dest_wp_struc_versions(l_dest_wp_structure_id) LOOP
8655 
8656             IF rec_dest_wp_struc_versions.flag = 'Y' THEN
8657             --In case of versioning disabled, publish upon creation flag would always be 'Y'
8658                 l_dest_status_code := 'STRUCTURE_PUBLISHED';
8659                 l_dest_latest_eff_pub_flag  := 'Y';
8660                 l_dest_current_working_flag := 'N';
8661                 --We need to make a working copy of the published version in SHARED case and when
8662                 --versioning is enabled, becuase in SHARED, it is not possible to create a WORKING copy from
8663                 --a publshied version
8664 
8665                 --Bug 7270458 Need to create a workign version if auto publish is enabled for versioning
8666                 --enabled workplan.
8667                 --IF 'Y' = l_shared AND 'Y' = l_versioning_enabled THEN
8668                 IF 'Y' = l_versioning_enabled THEN  --Bug 7270458
8669                     l_shared_make_working_copy := rec_dest_wp_struc_versions.element_version_id;
8670                 END IF;
8671         --3916763 Begin
8672         l_submit_wf_required := 'N';
8673 
8674         IF l_debug_mode = 'Y' THEN
8675             pa_debug.write(G_PKG_NAME, 'l_workplan_enabled='||l_workplan_enabled, l_debug_level3);
8676             pa_debug.write(G_PKG_NAME, 'l_versioning_enabled='||l_versioning_enabled, l_debug_level3);
8677             pa_debug.write(G_PKG_NAME, 'l_min_one_wp_ver_sel='||l_min_one_wp_ver_sel, l_debug_level3);
8678             pa_debug.write(G_PKG_NAME, 'l_cw_version_id='||l_cw_version_id, l_debug_level3);
8679             pa_debug.write(G_PKG_NAME, 'rec_dest_wp_struc_versions.attribute15='||rec_dest_wp_struc_versions.attribute15, l_debug_level3);
8680             pa_debug.write(G_PKG_NAME, 'l_shared='||l_shared, l_debug_level3);
8681             pa_debug.write(G_PKG_NAME, 'p_dest_template_flag='||p_dest_template_flag, l_debug_level3);
8682         END IF;
8683 
8684         IF NVL(l_workplan_enabled,'N') = 'Y' AND nvl(l_versioning_enabled,'N') = 'Y' AND nvl(l_min_one_wp_ver_sel,'N') = 'Y' THEN
8685             OPEN  c_get_approval_options;
8686             FETCH c_get_approval_options INTO l_wp_approval_reqd_flag, l_wp_auto_publish_flag,l_wp_approver_source_id;
8687             CLOSE c_get_approval_options;
8688 
8689             IF l_debug_mode = 'Y' THEN
8690                pa_debug.write(G_PKG_NAME, 'l_wp_approval_reqd_flag='||l_wp_approval_reqd_flag, l_debug_level3);
8691                pa_debug.write(G_PKG_NAME, 'l_wp_auto_publish_flag='||l_wp_auto_publish_flag, l_debug_level3);
8692                pa_debug.write(G_PKG_NAME, 'l_wp_approver_source_id='||l_wp_approver_source_id, l_debug_level3);
8693                pa_debug.write(G_PKG_NAME, 'fnd_global.employee_id='||fnd_global.employee_id, l_debug_level3);
8694             END IF;
8695 
8696             IF NVL(l_wp_approval_reqd_flag,'N') <> 'N' THEN
8697               IF nvl(fnd_global.employee_id,-999) <> NVL(l_wp_approver_source_id,-999) THEN
8698               -- 3916763 : Use fnd_global.employee_id instead of fnd_global.party_id
8699                 l_submit_wf_required := 'Y';
8700                 l_dest_status_code := 'STRUCTURE_WORKING';
8701                 l_dest_latest_eff_pub_flag  := 'N';
8702                 IF l_current_working_selected = nvl(l_puc_version_id,-88) OR 'Y' = l_shared OR 'Y' = p_dest_template_flag THEN
8703                     l_dest_current_working_flag := 'Y';
8704                 ELSE
8705                     l_dest_current_working_flag := 'N';
8706                 END IF;
8707                 l_shared_make_working_copy  := null;
8708                 l_submit_wf_str_version_id  := rec_dest_wp_struc_versions.element_version_id;
8709                 l_submit_wf_str_id := l_dest_wp_structure_id;
8710               END IF;
8711             END IF;
8712         END IF;
8713         --3916763 End
8714 
8715         --bug 3907862, start
8716             OPEN get_published_ver_num(p_dest_project_id, l_dest_wp_structure_id);
8717             FETCH get_published_ver_num INTO l_struct_version_number;
8718             CLOSE get_published_ver_num;
8719         IF l_debug_mode = 'Y' THEN
8720                Pa_Debug.WRITE(G_PKG_NAME, 'After Getting published version l_struct_version_number: '||l_struct_version_number,
8721                l_debug_level3);
8722         END If;
8723         --bug 3907862, end
8724 
8725         ELSE
8726             --In case of creating template, Publish Upon Creation flag is always 'N'
8727                 l_dest_status_code := 'STRUCTURE_WORKING';
8728                 l_dest_latest_eff_pub_flag  := 'N';
8729                 IF l_cw_version_id = rec_dest_wp_struc_versions.attribute15 OR 'Y' = l_shared OR 'Y' = p_dest_template_flag THEN
8730                     l_dest_current_working_flag := 'Y';
8731                 ELSE
8732                     l_dest_current_working_flag := 'N';
8733                 END IF;
8734 
8735         --bug 3907862, start
8736             OPEN get_working_ver_num(p_dest_project_id, l_dest_wp_structure_id);
8737             FETCH get_working_ver_num INTO l_struct_version_number;
8738             CLOSE get_working_ver_num;
8739         IF l_debug_mode = 'Y' THEN
8740             Pa_Debug.WRITE(G_PKG_NAME, 'After Getting working version l_struct_version_number: '||l_struct_version_number,
8741                              l_debug_level3);
8742         END If;
8743         --bug 3907862, end
8744 
8745         END IF;
8746 
8747             IF l_debug_mode = 'Y' THEN
8748                 Pa_Debug.WRITE(G_PKG_NAME, 'Creating version : '||rec_dest_wp_struc_versions.element_version_id,
8749                                l_debug_level3);
8750              END IF;
8751 
8752 
8753             INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
8754              PEV_STRUCTURE_ID
8755             ,ELEMENT_VERSION_ID
8756             ,VERSION_NUMBER
8757             ,NAME
8758             ,PROJECT_ID
8759             ,PROJ_ELEMENT_ID
8760             ,DESCRIPTION
8761             ,EFFECTIVE_DATE
8762             ,PUBLISHED_DATE
8763             ,PUBLISHED_BY_PERSON_ID
8764             ,CURRENT_BASELINE_DATE
8765             ,CURRENT_FLAG
8766             ,CURRENT_BASELINE_PERSON_ID
8767             ,ORIGINAL_BASELINE_DATE
8768             ,ORIGINAL_FLAG
8769             ,ORIGINAL_BASELINE_PERSON_ID
8770             ,LOCK_STATUS_CODE
8771             ,LOCKED_BY_PERSON_ID
8772             ,LOCKED_DATE
8773             ,STATUS_CODE
8774             ,WF_STATUS_CODE
8775             ,LATEST_EFF_PUBLISHED_FLAG
8776             ,RECORD_VERSION_NUMBER
8777             ,WBS_RECORD_VERSION_NUMBER
8778             ,CREATION_DATE
8779             ,CREATED_BY
8780             ,LAST_UPDATE_DATE
8781             ,LAST_UPDATED_BY
8782             ,LAST_UPDATE_LOGIN
8783             ,change_reason_code
8784             ,PROCESS_UPDATE_WBS_FLAG
8785             ,current_working_flag
8786            ,source_object_id
8787            ,source_object_type
8788             )
8789             SELECT
8790              pa_proj_elem_ver_structure_s.nextval
8791             ,rec_dest_wp_struc_versions.element_version_id
8792             --,ppevs.version_number   --bug 3907862, insert the new version number, intead of coying the old.
8793         ,l_struct_version_number
8794             ,ppevs.name
8795             ,p_dest_project_id
8796             ,ppe.proj_element_id
8797             ,ppevs.DESCRIPTION
8798             ,ppevs.EFFECTIVE_DATE
8799             ,decode(l_dest_status_code, 'STRUCTURE_PUBLISHED', sysdate, to_date(NULL))
8800             ,decode(l_dest_status_code, 'STRUCTURE_PUBLISHED', l_publish_person_id, NULL)
8801             ,decode(l_dest_latest_eff_pub_flag, 'Y', trunc(sysdate), to_date(NULL))
8802             ,l_dest_latest_eff_pub_flag
8803             ,decode(l_dest_latest_eff_pub_flag, 'Y', l_publish_person_id, NULL)
8804             ,decode(l_dest_latest_eff_pub_flag, 'Y', trunc(sysdate), to_date(NULL))
8805             ,l_dest_latest_eff_pub_flag
8806             ,decode(l_dest_latest_eff_pub_flag, 'Y', l_publish_person_id, NULL)
8807             ,'UNLOCKED'
8808             ,null
8809             ,null
8810             ,l_dest_status_code
8811             ,ppevs.WF_STATUS_CODE
8812             ,l_dest_latest_eff_pub_flag  --If version is 'publish upon creation', it is the latest eff published version
8813                                          --In case of version disabled, it'll always be 'publish upon creation'
8814             ,ppevs.RECORD_VERSION_NUMBER
8815             ,ppevs.WBS_RECORD_VERSION_NUMBER
8816             ,SYSDATE
8817             ,l_user_id
8818             ,SYSDATE
8819             ,l_user_id
8820             ,l_login_id
8821             ,ppevs.change_reason_code
8822             ,ppevs.process_update_wbs_flag
8823             ,decode(l_versioning_enabled,'N','Y',l_dest_current_working_flag)
8824                     --If versioning is disabled, both LATEST PUBLISHED AND CURRENT WORKING FLAGS are 'Y'
8825         ,p_dest_project_id
8826         ,'PA_PROJECTS'
8827             FROM pa_proj_elem_ver_structure ppevs,
8828                  pa_proj_elements ppe
8829             WHERE ppevs.project_id = p_src_project_id
8830             AND   ppevs.element_version_id = rec_dest_wp_struc_versions.attribute15
8831             AND   ppevs.proj_element_id = ppe.attribute15
8832             AND   ppe.proj_element_id = l_dest_wp_structure_id;
8833         END LOOP;
8834 
8835         --If it is a shared structure and the only WP version selected is Publish Upon Creation, then
8836         --create a working copy of the Published version
8837         IF l_shared_make_working_copy IS NOT NULL THEN
8838             SELECT pa_proj_element_versions_s.nextval INTO l_new_wp_ver_id
8839             FROM dual;
8840 
8841             SELECT meaning INTO l_prefix
8842             FROM   pa_lookups
8843             WHERE lookup_type = 'PA_STRUCTURES_PREFIX'
8844             AND   lookup_code = 'PA_PREFIX_COPY';
8845 
8846             IF l_debug_mode = 'Y' THEN
8847                 Pa_Debug.WRITE(G_PKG_NAME, 'Making working copy of '||l_shared_make_working_copy,
8848                                l_debug_level3);
8849             END IF;
8850 
8851             --Make a copy of the published version
8852             INSERT INTO pa_proj_element_versions(
8853              ELEMENT_VERSION_ID
8854             ,PROJ_ELEMENT_ID
8855             ,OBJECT_TYPE
8856             ,PROJECT_ID
8857             ,PARENT_STRUCTURE_VERSION_ID
8858             ,DISPLAY_SEQUENCE
8859             ,WBS_LEVEL
8860             ,WBS_NUMBER
8861             ,CREATION_DATE
8862             ,CREATED_BY
8863             ,LAST_UPDATE_DATE
8864             ,LAST_UPDATED_BY
8865             ,LAST_UPDATE_LOGIN
8866             ,RECORD_VERSION_NUMBER
8867             ,attribute15          --This column stores the stucture version id in the src project, to be used to create relationships.
8868             ,ATTRIBUTE_CATEGORY
8869             ,ATTRIBUTE1
8870             ,ATTRIBUTE2
8871             ,ATTRIBUTE3
8872             ,ATTRIBUTE4
8873             ,ATTRIBUTE5
8874             ,ATTRIBUTE6
8875             ,ATTRIBUTE7
8876             ,ATTRIBUTE8
8877             ,ATTRIBUTE9
8878             ,ATTRIBUTE10
8879             ,ATTRIBUTE11
8880             ,ATTRIBUTE12
8881             ,ATTRIBUTE13
8882             ,ATTRIBUTE14
8883             ,TASK_UNPUB_VER_STATUS_CODE
8884             ,FINANCIAL_TASK_FLAG
8885            ,source_object_id
8886            ,source_object_type
8887             )
8888             SELECT
8889              l_new_wp_ver_id
8890             ,ppev.proj_element_id
8891             ,ppev.object_type
8892             ,ppev.project_id
8893             ,l_new_wp_ver_id
8894             ,ppev.DISPLAY_SEQUENCE
8895             ,ppev.WBS_LEVEL
8896             ,ppev.WBS_NUMBER
8897             ,SYSDATE                    ------CREATION_DATE
8898             ,l_user_id                  ------CREATED_BY
8899             ,SYSDATE                    ------LAST_UPDATE_DATE
8900             ,l_user_id                  ------LAST_UPDATED_BY
8901             ,l_login_id                 ------LAST_UPDATE_LOGIN
8902             ,ppev.RECORD_VERSION_NUMBER ------RECORD_VERSION_NUMBER
8903             ,ppev.attribute15
8904             ,ppev.ATTRIBUTE_CATEGORY
8905             ,ppev.ATTRIBUTE1
8906             ,ppev.ATTRIBUTE2
8907             ,ppev.ATTRIBUTE3
8908             ,ppev.ATTRIBUTE4
8909             ,ppev.ATTRIBUTE5
8910             ,ppev.ATTRIBUTE6
8911             ,ppev.ATTRIBUTE7
8912             ,ppev.ATTRIBUTE8
8913             ,ppev.ATTRIBUTE9
8914             ,ppev.ATTRIBUTE10
8915             ,ppev.ATTRIBUTE11
8916             ,ppev.ATTRIBUTE12
8917             ,ppev.ATTRIBUTE13
8918             ,ppev.ATTRIBUTE14
8919             ,ppev.TASK_UNPUB_VER_STATUS_CODE
8920             ,ppev.FINANCIAL_TASK_FLAG
8921         ,ppev.project_id
8922         ,'PA_PROJECTS'
8923             FROM pa_proj_element_versions ppev
8924             WHERE ppev.project_id = p_dest_project_id
8925             AND   ppev.element_version_id = l_shared_make_working_copy ;
8926 
8927             INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
8928              PEV_STRUCTURE_ID
8929             ,ELEMENT_VERSION_ID
8930             ,VERSION_NUMBER
8931             ,NAME
8932             ,PROJECT_ID
8933             ,PROJ_ELEMENT_ID
8934             ,DESCRIPTION
8935             ,EFFECTIVE_DATE
8936             ,PUBLISHED_DATE
8937             ,PUBLISHED_BY_PERSON_ID
8938             ,CURRENT_BASELINE_DATE
8939             ,CURRENT_FLAG
8940             ,CURRENT_BASELINE_PERSON_ID
8941             ,ORIGINAL_BASELINE_DATE
8942             ,ORIGINAL_FLAG
8943             ,ORIGINAL_BASELINE_PERSON_ID
8944             ,LOCK_STATUS_CODE
8945             ,LOCKED_BY_PERSON_ID
8946             ,LOCKED_DATE
8947             ,STATUS_CODE
8948             ,WF_STATUS_CODE
8949             ,LATEST_EFF_PUBLISHED_FLAG
8950             ,RECORD_VERSION_NUMBER
8951             ,WBS_RECORD_VERSION_NUMBER
8952             ,CREATION_DATE
8953             ,CREATED_BY
8954             ,LAST_UPDATE_DATE
8955             ,LAST_UPDATED_BY
8956             ,LAST_UPDATE_LOGIN
8957             ,change_reason_code
8958             ,PROCESS_UPDATE_WBS_FLAG
8959             ,current_working_flag
8960            ,source_object_id
8961            ,source_object_type
8962             )
8963             SELECT
8964              pa_proj_elem_ver_structure_s.nextval
8965             ,l_new_wp_ver_id
8966             ,ppevs.version_number
8967             ,substr(l_prefix||ppevs.name, 1, 240)
8968             ,ppevs.project_id
8969             ,ppe.proj_element_id
8970             ,ppevs.DESCRIPTION
8971             ,ppevs.EFFECTIVE_DATE
8972             ,to_date(NULL)
8973             ,NULL
8974             ,to_date(NULL)
8975             ,'N'
8976             ,NULL
8977             ,to_date(NULL)
8978             ,'N'
8979             ,NULL
8980             ,'UNLOCKED'
8981             ,null
8982             ,null
8983             ,'STRUCTURE_WORKING'
8984             ,ppevs.WF_STATUS_CODE
8985             ,'N'
8986             ,ppevs.RECORD_VERSION_NUMBER
8987             ,ppevs.WBS_RECORD_VERSION_NUMBER
8988             ,SYSDATE
8989             ,l_user_id
8990             ,SYSDATE
8991             ,l_user_id
8992             ,l_login_id
8993             ,ppevs.change_reason_code
8994             ,ppevs.process_update_wbs_flag
8995             ,'Y'
8996         ,ppevs.project_id
8997         ,'PA_PROJECTS'
8998             FROM pa_proj_elem_ver_structure ppevs,
8999                  pa_proj_elements ppe
9000             WHERE ppevs.project_id = p_dest_project_id
9001             AND   ppevs.element_version_id = l_shared_make_working_copy
9002             AND   ppevs.proj_element_id = ppe.proj_element_id
9003             AND   ppe.proj_element_id = l_dest_wp_structure_id;
9004 
9005         END IF;--If l_shared_make_working_copy IS NOT NULL
9006 
9007         --Create tasks in the selected WP versions
9008         IF 'Y' = l_shared THEN
9009         --If SHARED case, join with PA_TASKS table
9010              INSERT INTO pa_proj_elements(
9011               PROJ_ELEMENT_ID
9012              ,PROJECT_ID
9013              ,OBJECT_TYPE
9014              ,ELEMENT_NUMBER
9015              ,NAME
9016              ,DESCRIPTION
9017              ,STATUS_CODE
9018              ,WF_STATUS_CODE
9019              ,PM_SOURCE_CODE
9020              ,PM_SOURCE_REFERENCE
9021              ,CLOSED_DATE
9022              ,LOCATION_ID
9023              ,MANAGER_PERSON_ID
9024              ,CARRYING_OUT_ORGANIZATION_ID
9025              ,TYPE_ID
9026              ,PRIORITY_CODE
9027              ,CREATION_DATE
9028              ,CREATED_BY
9029              ,LAST_UPDATE_DATE
9030              ,LAST_UPDATED_BY
9031              ,LAST_UPDATE_LOGIN
9032              ,RECORD_VERSION_NUMBER
9033              ,REQUEST_ID
9034              ,PROGRAM_APPLICATION_ID
9035              ,PROGRAM_ID
9036              ,PROGRAM_UPDATE_DATE
9037              ,LINK_TASK_FLAG
9038              ,BASELINE_START_DATE
9039              ,BASELINE_FINISH_DATE
9040              ,progress_outdated_flag
9041              ,ATTRIBUTE_CATEGORY
9042              ,ATTRIBUTE1
9043              ,ATTRIBUTE2
9044              ,ATTRIBUTE3
9045              ,ATTRIBUTE4
9046              ,ATTRIBUTE5
9047              ,ATTRIBUTE6
9048              ,ATTRIBUTE7
9049              ,ATTRIBUTE8
9050              ,ATTRIBUTE9
9051              ,ATTRIBUTE10
9052              ,ATTRIBUTE11
9053              ,ATTRIBUTE12
9054              ,ATTRIBUTE13
9055              ,ATTRIBUTE14
9056              ,ATTRIBUTE15
9057              ,parent_structure_id
9058              ,TYPE_CODE
9059              ,INC_PROJ_PROGRESS_FLAG
9060              ,WQ_ITEM_CODE
9061              ,WQ_UOM_CODE
9062              ,WQ_ACTUAL_ENTRY_CODE
9063              ,TASK_PROGRESS_ENTRY_PAGE_ID
9064              ,BASELINE_DURATION
9065              ,PHASE_CODE
9066              ,PHASE_VERSION_ID
9067              ,PROGRESS_WEIGHT
9068              ,BASE_PERCENT_COMP_DERIV_CODE
9069              ,FUNCTION_CODE
9070              ,ENABLE_WF_FLAG
9071              ,WF_ITEM_TYPE
9072              ,WF_PROCESS
9073              ,WF_START_LEAD_DAYS
9074             ,source_object_id
9075             ,source_object_type
9076              )
9077              SELECT
9078               nvl(pt.task_id,pa_tasks_s.nextval)
9079              ,p_dest_project_id
9080              ,ppe.object_type
9081              ,ppe.element_number
9082              ,ppe.name
9083              ,ppe.DESCRIPTION
9084              ,INITIAL_STATUS_CODE
9085              ,ppe.WF_STATUS_CODE
9086              ,NULL --bug 3810263 replacing ppe.PM_SOURCE_CODE
9087              ,NULL --bug 3810263 replacing ppe.PM_SOURCE_REFERENCE
9088              ,ppe.CLOSED_DATE
9089              ,ppe.LOCATION_ID
9090              ,ppe.MANAGER_PERSON_ID
9091              ,decode(ppe.CARRYING_OUT_ORGANIZATION_ID,l_old_proj_org_id, l_new_proj_org_id,
9092                      ppe.CARRYING_OUT_ORGANIZATION_ID) -- Bug 3387963
9093              ,ppe.TYPE_ID
9094              ,ppe.PRIORITY_CODE
9095              ,SYSDATE
9096              ,l_user_id
9097              ,SYSDATE
9098              ,l_user_id
9099              ,l_login_id
9100              ,ppe.RECORD_VERSION_NUMBER
9101              ,ppe.REQUEST_ID
9102              ,ppe.PROGRAM_APPLICATION_ID
9103              ,ppe.PROGRAM_ID
9104              ,ppe.PROGRAM_UPDATE_DATE
9105              ,ppe.LINK_TASK_FLAG
9106              ,ppe.BASELINE_START_DATE
9107              ,ppe.BASELINE_FINISH_DATE
9108              ,'N'     --,ppe.progress_outdated_flag
9109              ,ppe.ATTRIBUTE_CATEGORY
9110              ,ppe.ATTRIBUTE1
9111              ,ppe.ATTRIBUTE2
9112              ,ppe.ATTRIBUTE3
9113              ,ppe.ATTRIBUTE4
9114              ,ppe.ATTRIBUTE5
9115              ,ppe.ATTRIBUTE6
9116              ,ppe.ATTRIBUTE7
9117              ,ppe.ATTRIBUTE8
9118              ,ppe.ATTRIBUTE9
9119              ,ppe.ATTRIBUTE10
9120              ,ppe.ATTRIBUTE11
9121              ,ppe.ATTRIBUTE12
9122              ,ppe.ATTRIBUTE13
9123              ,ppe.ATTRIBUTE14
9124              ,ppe.proj_element_id    --attribute 15 is used to store old ids.
9125              ,l_dest_wp_structure_id
9126              ,ppe.TYPE_CODE
9127              ,ppe.INC_PROJ_PROGRESS_FLAG
9128              ,ppe.WQ_ITEM_CODE
9129              ,ppe.WQ_UOM_CODE
9130              ,ppe.WQ_ACTUAL_ENTRY_CODE
9131              ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
9132              ,ppe.BASELINE_DURATION
9133              ,ppe.PHASE_CODE
9134              ,ppe.PHASE_VERSION_ID
9135              ,ppe.PROGRESS_WEIGHT
9136              ,ppe.BASE_PERCENT_COMP_DERIV_CODE
9137              ,ppe.FUNCTION_CODE
9138              ,'N'
9139              ,ppe.WF_ITEM_TYPE
9140              ,ppe.WF_PROCESS
9141              ,ppe.WF_START_LEAD_DAYS
9142          ,p_dest_project_id
9143          ,'PA_PROJECTS'
9144              FROM pa_task_types ptt,
9145                   pa_tasks pt,
9146                   pa_proj_elements ppe
9147              WHERE ptt.object_type    = 'PA_TASKS'
9148              AND   ppe.type_id        = ptt.task_type_id
9149              AND   nvl(ppe.link_task_flag,'N') <> 'Y' -- 4348868
9150              AND   pt.task_number (+) = substrb(rtrim(ppe.element_number),1,25) -- Substrb added for Bug 5152448
9151              AND   pt.project_id  (+) = p_dest_project_id
9152              AND   ppe.proj_element_id IN
9153              ( SELECT distinct ppev.proj_element_id
9154                FROM   PA_PROJ_ELEMENT_VERSIONS ppev,
9155                       PA_PROJECT_COPY_OPTIONS_TMP ppcot
9156                WHERE  ppcot.CONTEXT = 'WORKPLAN'
9157                AND    ppev.parent_structure_version_id = ppcot.version_id
9158                AND    ppev.project_id = p_src_project_id
9159                AND    ppev.object_type = 'PA_TASKS' ) ;
9160         ELSE
9161         --If SPLIT case, there should be no join with PA_TASKS table
9162              INSERT INTO pa_proj_elements(
9163               PROJ_ELEMENT_ID
9164              ,PROJECT_ID
9165              ,OBJECT_TYPE
9166              ,ELEMENT_NUMBER
9167              ,NAME
9168              ,DESCRIPTION
9169              ,STATUS_CODE
9170              ,WF_STATUS_CODE
9171              ,PM_SOURCE_CODE
9172              ,PM_SOURCE_REFERENCE
9173              ,CLOSED_DATE
9174              ,LOCATION_ID
9175              ,MANAGER_PERSON_ID
9176              ,CARRYING_OUT_ORGANIZATION_ID
9177              ,TYPE_ID
9178              ,PRIORITY_CODE
9179              ,CREATION_DATE
9180              ,CREATED_BY
9181              ,LAST_UPDATE_DATE
9182              ,LAST_UPDATED_BY
9183              ,LAST_UPDATE_LOGIN
9184              ,RECORD_VERSION_NUMBER
9185              ,REQUEST_ID
9186              ,PROGRAM_APPLICATION_ID
9187              ,PROGRAM_ID
9188              ,PROGRAM_UPDATE_DATE
9189              ,LINK_TASK_FLAG
9190              ,BASELINE_START_DATE
9191              ,BASELINE_FINISH_DATE
9192              ,progress_outdated_flag
9193              ,ATTRIBUTE_CATEGORY
9194              ,ATTRIBUTE1
9195              ,ATTRIBUTE2
9196              ,ATTRIBUTE3
9197              ,ATTRIBUTE4
9198              ,ATTRIBUTE5
9199              ,ATTRIBUTE6
9200              ,ATTRIBUTE7
9201              ,ATTRIBUTE8
9202              ,ATTRIBUTE9
9203              ,ATTRIBUTE10
9204              ,ATTRIBUTE11
9205              ,ATTRIBUTE12
9206              ,ATTRIBUTE13
9207              ,ATTRIBUTE14
9208              ,ATTRIBUTE15
9209              ,parent_structure_id
9210              ,TYPE_CODE
9211              ,INC_PROJ_PROGRESS_FLAG
9212              ,WQ_ITEM_CODE
9213              ,WQ_UOM_CODE
9214              ,WQ_ACTUAL_ENTRY_CODE
9215              ,TASK_PROGRESS_ENTRY_PAGE_ID
9216              ,BASELINE_DURATION
9217              ,PHASE_CODE
9218              ,PHASE_VERSION_ID
9219              ,PROGRESS_WEIGHT
9220              ,BASE_PERCENT_COMP_DERIV_CODE
9221              ,FUNCTION_CODE
9222              ,ENABLE_WF_FLAG
9223              ,WF_ITEM_TYPE
9224              ,WF_PROCESS
9225              ,WF_START_LEAD_DAYS
9226             ,source_object_id
9227             ,source_object_type
9228              )
9229              SELECT
9230               pa_tasks_s.nextval
9231              ,p_dest_project_id
9232              ,ppe.object_type
9233              ,ppe.element_number
9234              ,ppe.name
9235              ,ppe.DESCRIPTION
9236              ,INITIAL_STATUS_CODE
9237              ,ppe.WF_STATUS_CODE
9238              ,NULL --bug 3810263 replacing ppe.PM_SOURCE_CODE
9239              ,NULL --bug 3810263 replacing ppe.PM_SOURCE_REFERENCE
9240              ,ppe.CLOSED_DATE
9241              ,ppe.LOCATION_ID
9242              ,ppe.MANAGER_PERSON_ID
9243              ,decode(ppe.CARRYING_OUT_ORGANIZATION_ID,l_old_proj_org_id, l_new_proj_org_id,
9244                      ppe.CARRYING_OUT_ORGANIZATION_ID) -- Bug 3387963
9245              ,ppe.TYPE_ID
9246              ,ppe.PRIORITY_CODE
9247              ,SYSDATE
9248              ,l_user_id
9249              ,SYSDATE
9250              ,l_user_id
9251              ,l_login_id
9252              ,ppe.RECORD_VERSION_NUMBER
9253              ,ppe.REQUEST_ID
9254              ,ppe.PROGRAM_APPLICATION_ID
9255              ,ppe.PROGRAM_ID
9256              ,ppe.PROGRAM_UPDATE_DATE
9257              ,ppe.LINK_TASK_FLAG
9258              ,ppe.BASELINE_START_DATE
9259              ,ppe.BASELINE_FINISH_DATE
9260              ,'N'      --,ppe.progress_outdated_flag
9261              ,ppe.ATTRIBUTE_CATEGORY
9262              ,ppe.ATTRIBUTE1
9263              ,ppe.ATTRIBUTE2
9264              ,ppe.ATTRIBUTE3
9265              ,ppe.ATTRIBUTE4
9266              ,ppe.ATTRIBUTE5
9267              ,ppe.ATTRIBUTE6
9268              ,ppe.ATTRIBUTE7
9269              ,ppe.ATTRIBUTE8
9270              ,ppe.ATTRIBUTE9
9271              ,ppe.ATTRIBUTE10
9272              ,ppe.ATTRIBUTE11
9273              ,ppe.ATTRIBUTE12
9274              ,ppe.ATTRIBUTE13
9275              ,ppe.ATTRIBUTE14
9276              ,ppe.proj_element_id    --attribute 15 is used to store old ids.
9277              ,l_dest_wp_structure_id
9278              ,ppe.TYPE_CODE
9279              ,ppe.INC_PROJ_PROGRESS_FLAG
9280              ,ppe.WQ_ITEM_CODE
9281              ,ppe.WQ_UOM_CODE
9282              ,ppe.WQ_ACTUAL_ENTRY_CODE
9283              ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
9284              ,ppe.BASELINE_DURATION
9285              ,ppe.PHASE_CODE
9286              ,ppe.PHASE_VERSION_ID
9287              ,ppe.PROGRESS_WEIGHT
9288              ,ppe.BASE_PERCENT_COMP_DERIV_CODE
9289              ,ppe.FUNCTION_CODE
9290              ,'N'
9291              ,ppe.WF_ITEM_TYPE
9292              ,ppe.WF_PROCESS
9293              ,ppe.WF_START_LEAD_DAYS
9294          ,p_dest_project_id
9295          ,'PA_PROJECTS'
9296              FROM pa_task_types ptt,
9297                   pa_proj_elements ppe
9298              WHERE ptt.object_type    = 'PA_TASKS'
9299              AND   ppe.type_id        = ptt.task_type_id
9300          AND   nvl(ppe.link_task_flag,'N') <> 'Y' -- 4348868
9301              AND   ppe.proj_element_id IN
9302              ( SELECT distinct ppev.proj_element_id
9303                FROM   PA_PROJ_ELEMENT_VERSIONS ppev,
9304                       PA_PROJECT_COPY_OPTIONS_TMP ppcot
9305                WHERE  ppcot.CONTEXT = 'WORKPLAN'
9306                AND    ppev.parent_structure_version_id = ppcot.version_id
9307                AND    ppev.project_id = p_src_project_id
9308                AND    ppev.object_type = 'PA_TASKS' ) ;
9309         END IF;
9310 
9311         --Copy tasks versions for tasks belonging to the selected wp versions
9312         INSERT INTO pa_proj_element_versions(
9313          ELEMENT_VERSION_ID
9314         ,PROJ_ELEMENT_ID
9315         ,OBJECT_TYPE
9316         ,PROJECT_ID
9317         ,PARENT_STRUCTURE_VERSION_ID
9318         ,DISPLAY_SEQUENCE
9319         ,WBS_LEVEL
9320         ,WBS_NUMBER
9321         ,CREATION_DATE
9322         ,CREATED_BY
9323         ,LAST_UPDATE_DATE
9324         ,LAST_UPDATED_BY
9325         ,LAST_UPDATE_LOGIN
9326         ,RECORD_VERSION_NUMBER
9327         ,attribute15          --this column is used to store task ver id of the source project's task versions to be used to created relationships.
9328         ,ATTRIBUTE_CATEGORY
9329         ,ATTRIBUTE1
9330         ,ATTRIBUTE2
9331         ,ATTRIBUTE3
9332         ,ATTRIBUTE4
9333         ,ATTRIBUTE5
9334         ,ATTRIBUTE6
9335         ,ATTRIBUTE7
9336         ,ATTRIBUTE8
9337         ,ATTRIBUTE9
9338         ,ATTRIBUTE10
9339         ,ATTRIBUTE11
9340         ,ATTRIBUTE12
9341         ,ATTRIBUTE13
9342         ,ATTRIBUTE14
9343         ,TASK_UNPUB_VER_STATUS_CODE
9344         ,FINANCIAL_TASK_FLAG
9345        ,source_object_id
9346         ,source_object_type
9347         )
9348         SELECT
9349          pa_proj_element_versions_s.nextval
9350         ,ppe.proj_element_id
9351         ,ppev.object_type
9352         ,p_dest_project_id
9353         ,ppev2.element_version_id
9354         ,ppev.DISPLAY_SEQUENCE
9355         ,ppev.WBS_LEVEL
9356         ,ppev.WBS_NUMBER
9357         ,SYSDATE                     ------CREATION_DATE
9358         ,l_user_id                   ------CREATED_BY
9359         ,SYSDATE                     ------LAST_UPDATE_DATE
9360         ,l_user_id                   ------LAST_UPDATED_BY
9361         ,l_login_id                  ------LAST_UPDATE_LOGIN
9362         ,ppev.RECORD_VERSION_NUMBER  ------RECORD_VERSION_NUMBER
9363         ,ppev.element_version_id     -- to help create relationships from source
9364         ,ppev.ATTRIBUTE_CATEGORY
9365         ,ppev.ATTRIBUTE1
9366         ,ppev.ATTRIBUTE2
9367         ,ppev.ATTRIBUTE3
9368         ,ppev.ATTRIBUTE4
9369         ,ppev.ATTRIBUTE5
9370         ,ppev.ATTRIBUTE6
9371         ,ppev.ATTRIBUTE7
9372         ,ppev.ATTRIBUTE8
9373         ,ppev.ATTRIBUTE9
9374         ,ppev.ATTRIBUTE10
9375         ,ppev.ATTRIBUTE11
9376         ,ppev.ATTRIBUTE12
9377         ,ppev.ATTRIBUTE13
9378         ,ppev.ATTRIBUTE14
9379         ,decode( ppevs.status_code, 'STRUCTURE_PUBLISHED', 'PUBLISHED', 'WORKING' )
9380         ,ppev.FINANCIAL_TASK_FLAG   --Check if this is correct ?
9381     ,p_dest_project_id
9382     ,'PA_PROJECTS'
9383         FROM pa_proj_elements ppe,
9384              pa_proj_element_versions ppev,
9385              pa_proj_element_versions ppev2,
9386              pa_proj_elem_ver_structure ppevs
9387         WHERE ppe.project_id = p_dest_project_id
9388         AND   ppe.object_type = 'PA_TASKS'
9389         AND   ppe.attribute15 = ppev.proj_element_id
9390         AND   ppev.project_id = p_src_project_id
9391         AND   ppev.object_type = 'PA_TASKS'
9392         AND   ppev.parent_structure_version_id = ppev2.attribute15
9393         AND   ppev2.project_id = p_dest_project_id
9394         AND   ppev2.object_type = 'PA_STRUCTURES'
9395         AND   ppevs.element_version_id = ppev2.element_version_id
9396         AND   ppevs.project_id = p_dest_project_id
9397     AND   ppevs.project_id = ppe.project_id -- Bug 4141027
9398     AND   ppev2.project_id = ppe.project_id -- Bug 4141027
9399     ;
9400 
9401         IF l_debug_mode = 'Y' THEN
9402             Pa_Debug.WRITE(G_PKG_NAME, 'Going to insert object relationships',
9403                            l_debug_level3);
9404         END IF;
9405 
9406         FOR rec_dest_wp_struc_versions IN cur_get_dest_wp_struc_versions(l_dest_wp_structure_id) LOOP
9407             --Copy relationships for structure and tasks into destination project
9408 
9409   /* Start of addition for bug 6211012 */
9410 
9411         l_obj_rel_id.delete;
9412 	l_obj_typ_from.delete;
9413 	l_obj_from_id.delete;
9414 	l_obj_typ_to.delete;
9415 	l_obj_to_id.delete;
9416 	l_rel_typ.delete;
9417 	l_rel_subtyp.delete;
9418 	l_rec_ver_num.delete;
9419 	l_wt_percent.delete;
9420 
9421         OPEN cur_pa_obj_rela_2(rec_dest_wp_struc_versions.attribute15,rec_dest_wp_struc_versions.element_version_id);
9422 
9423 	LOOP
9424 
9425 	  FETCH cur_pa_obj_rela_2
9426 	  BULK COLLECT INTO
9427 		l_obj_rel_id,
9428 		l_obj_typ_from,
9429 		l_obj_from_id,
9430 		l_obj_typ_to,
9431 		l_obj_to_id,
9432 		l_rel_typ,
9433 		l_rel_subtyp,
9434 		l_rec_ver_num,
9435 		l_wt_percent
9436 	  LIMIT 1000;
9437 
9438 	  IF l_obj_rel_id.COUNT >0 THEN
9439 
9440 	    FORALL i IN l_obj_rel_id.FIRST..l_obj_rel_id.LAST
9441             insert into PA_OBJECT_RELATIONSHIPS (
9442                  object_relationship_id,
9443                  object_type_from,
9444                  object_id_from1,
9445                  object_type_to,
9446                  object_id_to1,
9447                  relationship_type,
9448                  relationship_subtype,
9449                  Record_Version_Number,
9450                  CREATED_BY,
9451                  CREATION_DATE,
9452                  LAST_UPDATED_BY,
9453                  LAST_UPDATE_DATE,
9454                  LAST_UPDATE_LOGIN,
9455                  weighting_percentage
9456                        )
9457 		 values(
9458 		 l_obj_rel_id(i),
9459 	         l_obj_typ_from(i),
9460 	         l_obj_from_id(i),
9461 	         l_obj_typ_to(i),
9462 	         l_obj_to_id(i),
9463 	         l_rel_typ(i),
9464 	         l_rel_subtyp(i),
9465 	         l_rec_ver_num(i),
9466                  l_user_id,
9467                  SYSDATE,
9468                  l_user_id,
9469                  SYSDATE,
9470                  l_login_id,
9471 	         l_wt_percent(i)
9472 		 );
9473 
9474 	  END IF;
9475 
9476           EXIT WHEN l_obj_rel_id.COUNT < 1000 ;
9477 	END LOOP;
9478 
9479 	l_obj_rel_id.delete;
9480 	l_obj_typ_from.delete;
9481 	l_obj_from_id.delete;
9482 	l_obj_typ_to.delete;
9483 	l_obj_to_id.delete;
9484 	l_rel_typ.delete;
9485 	l_rel_subtyp.delete;
9486 	l_rec_ver_num.delete;
9487 	l_wt_percent.delete;
9488 
9489 	CLOSE cur_pa_obj_rela_2;
9490 
9491 /*
9492             INSERT INTO PA_OBJECT_RELATIONSHIPS (
9493              object_relationship_id
9494             ,object_type_from
9495             ,object_id_from1
9496             ,object_type_to
9497             ,object_id_to1
9498             ,relationship_type
9499             ,relationship_subtype
9500             ,Record_Version_Number
9501             ,CREATED_BY
9502             ,CREATION_DATE
9503             ,LAST_UPDATED_BY
9504             ,LAST_UPDATE_DATE
9505             ,LAST_UPDATE_LOGIN
9506             ,weighting_percentage
9507             )
9508         /*Added the hint for the bug 3513853*/
9509     /*       SELECT /*+ USE_HASH(ppev2 ppev1)*/
9510    /*          pa_object_relationships_s.nextval
9511             ,pobj.object_type_from
9512             ,ppev1.element_version_id
9513             ,pobj.object_type_to
9514             ,ppev2.element_version_id
9515             ,pobj.relationship_type
9516             ,pobj.relationship_subtype
9517             ,pobj.Record_Version_Number
9518             ,l_user_id
9519             ,SYSDATE
9520             ,l_user_id
9521             ,SYSDATE
9522             ,l_login_id
9523             ,pobj.weighting_percentage
9524             FROM
9525             ( SELECT object_type_from,
9526                      object_id_from1,
9527                      object_type_to,
9528                      object_id_to1,
9529                      relationship_type,
9530                      relationship_subtype,
9531                      Record_Version_Number,
9532                      weighting_percentage
9533               FROM pa_object_relationships
9534               START WITH object_id_from1 = rec_dest_wp_struc_versions.attribute15
9535               AND  RELATIONSHIP_TYPE = 'S'
9536               CONNECT BY  object_id_from1 =  PRIOR object_id_to1
9537               AND  RELATIONSHIP_TYPE = 'S' ) pobj,
9538             pa_proj_element_versions ppev1,
9539             pa_proj_element_versions ppev2
9540             WHERE ppev1.attribute15 = pobj.object_id_from1
9541             AND   ppev2.attribute15 = pobj.object_id_to1
9542             AND   ppev1.parent_structure_version_id = rec_dest_wp_struc_versions.element_version_id
9543             AND   ppev2.parent_structure_version_id = rec_dest_wp_struc_versions.element_version_id ;
9544 */
9545 /* End of changes for bug 6211012 */
9546 
9547             --calculate delta before inserting schedule rows
9548             --select source structure version scheduled start date
9549             IF (p_target_start_date IS NULL) THEN
9550                 l_delta := 0;
9551             ELSE
9552                 OPEN  cur_get_src_sch_st_date( p_src_project_id, rec_dest_wp_struc_versions.attribute15 );
9553                 FETCH cur_get_src_sch_st_date INTO l_src_sch_st_date;
9554                 CLOSE cur_get_src_sch_st_date;
9555                 l_delta := p_target_start_date - l_src_sch_st_date;
9556             END IF;
9557 
9558             --Copy entries into pa_proj_elem_ver_schedule
9559             INSERT INTO pa_proj_elem_ver_schedule(
9560              PEV_SCHEDULE_ID
9561             ,ELEMENT_VERSION_ID
9562             ,PROJECT_ID
9563             ,PROJ_ELEMENT_ID
9564             ,CREATION_DATE
9565             ,CREATED_BY
9566             ,LAST_UPDATE_DATE
9567             ,LAST_UPDATED_BY
9568             ,SCHEDULED_START_DATE
9569             ,SCHEDULED_FINISH_DATE
9570             ,OBLIGATION_START_DATE
9571             ,OBLIGATION_FINISH_DATE
9572             ,ACTUAL_START_DATE
9573             ,ACTUAL_FINISH_DATE
9574             ,ESTIMATED_START_DATE
9575             ,ESTIMATED_FINISH_DATE
9576             ,DURATION
9577             ,EARLY_START_DATE
9578             ,EARLY_FINISH_DATE
9579             ,LATE_START_DATE
9580             ,LATE_FINISH_DATE
9581             ,CALENDAR_ID
9582             ,MILESTONE_FLAG
9583             ,CRITICAL_FLAG
9584             ,RECORD_VERSION_NUMBER
9585             ,LAST_UPDATE_LOGIN
9586             ,WQ_PLANNED_QUANTITY
9587             ,PLANNED_EFFORT
9588             ,ACTUAL_DURATION
9589             ,ESTIMATED_DURATION
9590             ,ATTRIBUTE_CATEGORY
9591             ,ATTRIBUTE1
9592             ,ATTRIBUTE2
9593             ,ATTRIBUTE3
9594             ,ATTRIBUTE4
9595             ,ATTRIBUTE5
9596             ,ATTRIBUTE6
9597             ,ATTRIBUTE7
9598             ,ATTRIBUTE8
9599             ,ATTRIBUTE9
9600             ,ATTRIBUTE10
9601             ,ATTRIBUTE11
9602             ,ATTRIBUTE12
9603             ,ATTRIBUTE13
9604             ,ATTRIBUTE14
9605             ,ATTRIBUTE15
9606            ,source_object_id
9607            ,source_object_type
9608             ,CONSTRAINT_TYPE_CODE                  --Bug 3762437
9609             ,CONSTRAINT_DATE
9610             ,FREE_SLACK
9611             ,TOTAL_SLACK
9612             ,EFFORT_DRIVEN_FLAG
9613             ,LEVEL_ASSIGNMENTS_FLAG
9614             ,EXT_ACT_DURATION
9615             ,EXT_REMAIN_DURATION
9616             ,EXT_SCH_DURATION                       --Bug 3762437
9617             )
9618             SELECT
9619              pa_proj_elem_ver_schedule_s.nextval
9620             ,ppev.ELEMENT_VERSION_ID
9621             ,p_dest_PROJECT_ID
9622             ,ppev.PROJ_ELEMENT_ID
9623             ,SYSDATE
9624             ,l_user_id
9625             ,SYSDATE
9626             ,l_user_id
9627             ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date,
9628                                                         p_target_finish_date,
9629                                                         l_delta,
9630                                                         ppevs.SCHEDULED_START_DATE,
9631                                                         null )
9632             ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date,
9633                                                         p_target_finish_date,
9634                                                         l_delta,
9635                                                         ppevs.SCHEDULED_START_DATE,
9636                                                         SCHEDULED_FINISH_DATE )
9637             ,ppevs.OBLIGATION_START_DATE
9638             ,ppevs.OBLIGATION_FINISH_DATE
9639             ,null
9640             ,null
9641             ,null
9642             ,null
9643             ,ppevs.DURATION
9644             ,ppevs.EARLY_START_DATE
9645             ,ppevs.EARLY_FINISH_DATE
9646             ,ppevs.LATE_START_DATE
9647             ,ppevs.LATE_FINISH_DATE
9648             ,p_calendar_id
9649             ,ppevs.MILESTONE_FLAG
9650             ,ppevs.CRITICAL_FLAG
9651             ,ppevs.RECORD_VERSION_NUMBER
9652             ,l_login_id
9653             ,ppevs.WQ_PLANNED_QUANTITY
9654             ,ppevs.PLANNED_EFFORT
9655             ,ppevs.ACTUAL_DURATION
9656             ,ppevs.ESTIMATED_DURATION
9657             ,ppevs.ATTRIBUTE_CATEGORY
9658             ,ppevs.ATTRIBUTE1
9659             ,ppevs.ATTRIBUTE2
9660             ,ppevs.ATTRIBUTE3
9661             ,ppevs.ATTRIBUTE4
9662             ,ppevs.ATTRIBUTE5
9663             ,ppevs.ATTRIBUTE6
9664             ,ppevs.ATTRIBUTE7
9665             ,ppevs.ATTRIBUTE8
9666             ,ppevs.ATTRIBUTE9
9667             ,ppevs.ATTRIBUTE10
9668             ,ppevs.ATTRIBUTE11
9669             ,ppevs.ATTRIBUTE12
9670             ,ppevs.ATTRIBUTE13
9671             ,ppevs.ATTRIBUTE14
9672             ,ppevs.ATTRIBUTE15
9673         ,p_dest_PROJECT_ID
9674         ,'PA_PROJECTS'
9675             ,CONSTRAINT_TYPE_CODE                  --Bug 3762437
9676             ,CONSTRAINT_DATE
9677             ,FREE_SLACK
9678             ,TOTAL_SLACK
9679             ,EFFORT_DRIVEN_FLAG
9680             ,LEVEL_ASSIGNMENTS_FLAG
9681             ,EXT_ACT_DURATION
9682             ,EXT_REMAIN_DURATION
9683             ,EXT_SCH_DURATION                       --Bug 3762437
9684             FROM pa_proj_element_versions ppev,
9685                  pa_proj_elem_ver_schedule ppevs
9686             WHERE ppev.project_id = p_dest_project_id
9687             AND   ppev.parent_structure_version_id = rec_dest_wp_struc_versions.element_version_id
9688             AND   ppev.attribute15 = ppevs.element_version_id
9689             AND   ppevs.project_id = p_src_project_id ;
9690 
9691         END LOOP; --FOR rec_dest_wp_struc_versions IN cur_get_dest_wp_struc_versions
9692 
9693         IF 'Y' = l_shared AND 'N' = p_src_template_flag THEN
9694         --No need to sync up if source is a template
9695         IF l_submit_wf_required <> 'Y' THEN --3916763
9696             OPEN  cur_get_shared_ver_id;
9697             FETCH cur_get_shared_ver_id INTO l_shared_dest_ver_id;
9698             CLOSE cur_get_shared_ver_id;
9699 
9700             IF l_debug_mode = 'Y' THEN
9701             Pa_Debug.WRITE(G_PKG_NAME, 'Calling pa_tasks sync up API for struc version :'||l_shared_dest_ver_id,
9702                        l_debug_level3);
9703             END IF;
9704 
9705             --Call API to sync up tasks in pa_tasks table, with the new (shared) version [WP version copied from src]
9706             PA_TASKS_MAINT_PUB.SYNC_UP_WP_TASKS_WITH_FIN(
9707               p_project_id             => p_dest_project_id
9708             , p_structure_version_id   => l_shared_dest_ver_id
9709             , p_mode                   => 'ALL'
9710             , x_return_status          => l_return_status
9711             , x_msg_count              => l_msg_count
9712             , x_msg_data               => l_msg_data );
9713 
9714             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9715             x_msg_count := FND_MSG_PUB.count_msg;
9716             IF x_msg_count = 1 THEN
9717                 x_msg_data := l_msg_data;
9718             END IF;
9719             RAISE FND_API.G_EXC_ERROR;
9720             END IF;
9721          END IF; --3916763
9722         END IF;
9723     ELSE --IF THERE IS NO WP VERSION SELECTED FOR COPYING
9724 
9725         --If shared and copy financial tasks flag is checked
9726         IF 'Y' = l_shared AND 'Y' = l_fin_tasks_flag THEN
9727 
9728             --The following API call will copy the financial version from the source project to the destination project
9729             copy_src_financial_version(  p_init_msg_list        => p_init_msg_list
9730                                         ,p_src_project_id       => p_src_project_id
9731                                         ,p_dest_project_id      => p_dest_project_id
9732                                         ,p_dest_fn_structure_id => l_dest_wp_structure_id
9733                                         ,p_shared               => l_shared
9734                                         ,p_dest_template_flag   => p_dest_template_flag
9735                                         ,p_publish_person_id    => l_publish_person_id
9736                                         ,x_return_status        => l_return_status
9737                                         ,x_msg_count            => l_msg_count
9738                                         ,x_msg_data             => l_msg_data
9739                                       );
9740 
9741             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9742                 x_msg_count := FND_MSG_PUB.count_msg;
9743                 IF x_msg_count = 1 THEN
9744                     x_msg_data := l_msg_data;
9745                 END IF;
9746                 RAISE FND_API.G_EXC_ERROR;
9747             END IF;
9748 
9749             --The following API call will copy the tasks belonging to the financial version in the source project into
9750             --the destination project
9751             copy_src_financial_ver_tasks( p_init_msg_list            => p_init_msg_list
9752                                          ,p_src_project_id           => p_src_project_id
9753                                          ,p_dest_project_id          => p_dest_project_id
9754                                          ,p_dest_fn_structure_id     => l_dest_wp_structure_id
9755                                          ,p_shared                   => l_shared
9756                                          ,p_copy_ppevSchedules_flag  => 'Y'   --Copy pa_proj_elem_ver_schedules or not
9757                                          ,p_target_start_date        => p_target_start_date
9758                                          ,p_target_finish_date       => p_target_finish_date
9759                                          ,p_calendar_id              => p_calendar_id
9760                                          ,x_return_status            => l_return_status
9761                                          ,x_msg_count                => l_msg_count
9762                                          ,x_msg_data                 => l_msg_data
9763                                         );
9764             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9765                 x_msg_count := FND_MSG_PUB.count_msg;
9766                 IF x_msg_count = 1 THEN
9767                     x_msg_data := l_msg_data;
9768                 END IF;
9769                 RAISE FND_API.G_EXC_ERROR;
9770             END IF;
9771 
9772         END IF;--If shared and copy financial tasks flag is checked
9773 
9774         --If no WP version is selected
9775         --If shared and copy financial tasks flag is not checked OR split and workplan is enabled
9776         IF ('Y' = l_shared AND 'N' = l_fin_tasks_flag)
9777         OR ('N' = l_shared AND 'Y' = l_workplan_enabled) THEN
9778 
9779             IF l_debug_mode = 'Y' THEN
9780                 Pa_Debug.WRITE(G_PKG_NAME, 'Creating new default WP version', l_debug_level3);
9781             END IF;
9782         --bug 3912603, Satish, this flag is for using this same condition below.
9783         check_str_sel_flag := 'Y';
9784 
9785             --Create new default WP structure version
9786             SELECT pa_proj_element_versions_s.nextval INTO l_new_wp_ver_id
9787             FROM dual;
9788 
9789             INSERT INTO pa_proj_element_versions(
9790              ELEMENT_VERSION_ID
9791             ,PROJ_ELEMENT_ID
9792             ,OBJECT_TYPE
9793             ,PROJECT_ID
9794             ,CREATION_DATE
9795             ,CREATED_BY
9796             ,LAST_UPDATE_DATE
9797             ,LAST_UPDATED_BY
9798             ,LAST_UPDATE_LOGIN
9799             ,PARENT_STRUCTURE_VERSION_ID
9800             ,WBS_NUMBER
9801             ,RECORD_VERSION_NUMBER
9802             ,FINANCIAL_TASK_FLAG
9803            ,source_object_id
9804            ,source_object_type
9805             )
9806             VALUES (
9807              l_new_wp_ver_id
9808             ,l_dest_wp_structure_id
9809             ,'PA_STRUCTURES'
9810             ,p_dest_project_id
9811             ,sysdate
9812             ,l_user_id
9813             ,sysdate
9814             ,l_user_id
9815             ,l_login_id
9816             ,l_new_wp_ver_id
9817             ,'0'
9818             ,1
9819             ,'N'
9820         ,p_dest_project_id
9821         ,'PA_PROJECTS'
9822             );
9823 
9824             OPEN  cur_get_working_ver_num(p_dest_project_id, l_dest_wp_structure_id);
9825             FETCH cur_get_working_ver_num INTO l_struc_ver_number;
9826             CLOSE cur_get_working_ver_num;
9827 
9828             --If creating a project AND versioning is disabled, then should have both latest published and
9829             --current working flags as 'Y'
9830             IF 'N' = p_dest_template_flag AND 'N' = l_versioning_enabled THEN
9831                 l_default_lat_pub_and_cw_flag := 'Y';
9832             END IF;
9833 
9834             INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
9835              PEV_STRUCTURE_ID
9836             ,ELEMENT_VERSION_ID
9837             ,VERSION_NUMBER
9838             ,NAME
9839             ,PROJECT_ID
9840             ,PROJ_ELEMENT_ID
9841             ,PUBLISHED_DATE
9842             ,LATEST_EFF_PUBLISHED_FLAG
9843             ,PUBLISHED_BY_PERSON_ID
9844             ,CURRENT_BASELINE_DATE
9845             ,CURRENT_FLAG
9846             ,CURRENT_BASELINE_PERSON_ID
9847             ,ORIGINAL_BASELINE_DATE
9848             ,ORIGINAL_FLAG
9849             ,ORIGINAL_BASELINE_PERSON_ID
9850             ,CREATION_DATE
9851             ,CREATED_BY
9852             ,LAST_UPDATE_DATE
9853             ,LAST_UPDATED_BY
9854             ,LAST_UPDATE_LOGIN
9855             ,STATUS_CODE
9856             ,RECORD_VERSION_NUMBER
9857             ,WBS_RECORD_VERSION_NUMBER
9858             ,CURRENT_WORKING_FLAG
9859            ,SOURCE_OBJECT_ID
9860            ,source_object_type)
9861             VALUES (
9862              pa_proj_elem_ver_structure_s.nextval
9863             ,l_new_wp_ver_id
9864             ,l_struc_ver_number
9865             ,substr(p_dest_project_name||l_append||l_suffix, 1, 240)
9866             ,p_dest_project_id
9867             ,l_dest_wp_structure_id
9868             ,decode(l_default_lat_pub_and_cw_flag,'Y',sysdate,to_date(null))
9869             ,l_default_lat_pub_and_cw_flag
9870             ,decode(l_default_lat_pub_and_cw_flag, 'Y', l_publish_person_id, NULL)
9871             ,decode(l_default_lat_pub_and_cw_flag,'Y',sysdate,to_date(null))
9872             ,l_default_lat_pub_and_cw_flag
9873             ,decode(l_default_lat_pub_and_cw_flag, 'Y', l_publish_person_id, NULL)
9874             ,decode(l_default_lat_pub_and_cw_flag,'Y',sysdate,to_date(null))
9875             ,l_default_lat_pub_and_cw_flag
9876             ,decode(l_default_lat_pub_and_cw_flag, 'Y', l_publish_person_id, NULL)
9877             ,sysdate
9878             ,l_user_id
9879             ,sysdate
9880             ,l_user_id
9881             ,l_login_id
9882             ,decode(l_default_lat_pub_and_cw_flag,'Y','STRUCTURE_PUBLISHED','STRUCTURE_WORKING')
9883             ,1
9884             ,1
9885             ,'Y'
9886         ,p_dest_project_id
9887         ,'PA_PROJECTS'
9888             );
9889 
9890       --bug 3912603, insert records into pa_proj_elem_ver_Schedule, Satish, start
9891           PA_TASK_PUB1.Create_Schedule_Version(
9892                    p_element_version_id        => l_new_wp_ver_id
9893                   ,p_scheduled_start_date      => SYSDATE
9894                   ,p_scheduled_end_date        => SYSDATE
9895                   ,x_pev_schedule_id           => x_pev_schedule_id
9896                   ,x_return_status             => l_return_status
9897                   ,x_msg_count                 => l_msg_count
9898                   ,x_msg_data                  => l_msg_data
9899           );
9900           IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9901               x_msg_count := FND_MSG_PUB.count_msg;
9902               IF x_msg_count = 1 THEN
9903                     x_msg_data := l_msg_data;
9904               END IF;
9905               RAISE FND_API.G_EXC_ERROR;
9906           END IF;
9907           --bug 3912603, insert records into pa_proj_elem_ver_Schedule, Satish, end
9908 
9909         END IF;
9910     END IF;--If  there is atleast one WP version selected
9911 
9912     ---------------------------------------------------------------------------------------------------------
9913     /**** THE FOLLOWING SECTION COPIES/INSERTS FINANCIAL VERSIONS AND TASKS INTO THE DESTINATION PROJECT ****/
9914     ---------------------------------------------------------------------------------------------------------
9915     --If split and financial is enabled
9916     IF 'N' = l_shared AND 'Y' = l_fin_enabled THEN
9917 
9918         IF l_debug_mode = 'Y' THEN
9919             Pa_Debug.WRITE(G_PKG_NAME, 'Creating financial version in split case', l_debug_level3);
9920         END IF;
9921 
9922         --The following API call will copy the financial version from the source project to the destination project
9923         copy_src_financial_version(  p_init_msg_list        => p_init_msg_list
9924                                     ,p_src_project_id       => p_src_project_id
9925                                     ,p_dest_project_id      => p_dest_project_id
9926                                     ,p_dest_fn_structure_id => l_dest_fn_structure_id
9927                                     ,p_shared               => l_shared
9928                                     ,p_dest_template_flag   => p_dest_template_flag
9929                                     ,p_publish_person_id    => l_publish_person_id
9930                                     ,x_return_status        => l_return_status
9931                                     ,x_msg_count            => l_msg_count
9932                                     ,x_msg_data             => l_msg_data
9933                                   );
9934 
9935         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9936             x_msg_count := FND_MSG_PUB.count_msg;
9937             IF x_msg_count = 1 THEN
9938                 x_msg_data := l_msg_data;
9939             END IF;
9940             RAISE FND_API.G_EXC_ERROR;
9941         END IF;
9942 
9943         --If copy financial tasks flag is checked
9944         IF 'Y' = l_fin_tasks_flag THEN
9945 
9946             IF l_debug_mode = 'Y' THEN
9947                 Pa_Debug.WRITE(G_PKG_NAME, 'Creating financial tasks in split case', l_debug_level3);
9948             END IF;
9949 
9950             --The following API call will copy the tasks belonging to the financial version in the source project into
9951             --the destination project
9952             copy_src_financial_ver_tasks( p_init_msg_list            => p_init_msg_list
9953                                          ,p_src_project_id           => p_src_project_id
9954                                          ,p_dest_project_id          => p_dest_project_id
9955                                          ,p_dest_fn_structure_id     => l_dest_fn_structure_id
9956                                          ,p_shared                   => l_shared
9957                                          ,p_copy_ppevSchedules_flag  => 'N'   --Copy pa_proj_elem_ver_schedules or not
9958                                          ,p_target_start_date        => p_target_start_date
9959                                          ,p_target_finish_date       => p_target_finish_date
9960                                          ,p_calendar_id              => p_calendar_id
9961                                          ,x_return_status            => l_return_status
9962                                          ,x_msg_count                => l_msg_count
9963                                          ,x_msg_data                 => l_msg_data
9964                                         );
9965             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9966                 x_msg_count := FND_MSG_PUB.count_msg;
9967                 IF x_msg_count = 1 THEN
9968                     x_msg_data := l_msg_data;
9969                 END IF;
9970                 RAISE FND_API.G_EXC_ERROR;
9971             END IF;
9972         END IF;
9973 
9974     END IF;--If split and financial is enabled
9975 
9976     ---------------------------------------------------------------------------------------------------------------------
9977     /**** THE FOLLOWING SECTION COPIES OTHER INFORMATION RELATED TO VERSIONS AND TASKS INTO THE DESTINATION PROJECT ****/
9978     ---------------------------------------------------------------------------------------------------------------------
9979 
9980     IF 'Y' = l_shared THEN
9981         --Get the destination project's shared structure id
9982         OPEN  cur_get_shared_struc_id;
9983         FETCH cur_get_shared_struc_id INTO l_dest_shared_struc_id, l_src_shared_struc_id;
9984         CLOSE cur_get_shared_struc_id;
9985     END IF;
9986 
9987     --Updating Duration
9988     IF l_workplan_enabled = 'Y' THEN
9989          -- Bug 3657808 Remove duration calculation using calendar
9990      -- and rewritting the query
9991         /*UPDATE pa_proj_elem_ver_schedule
9992            SET duration = PA_PROJ_TASK_STRUC_PUB.calc_duration( p_calendar_id,
9993                                                                 scheduled_start_date,
9994                                                                 scheduled_finish_date )
9995          WHERE project_id = p_dest_project_id;*/
9996         UPDATE pa_proj_elem_ver_schedule
9997            SET duration = trunc(scheduled_finish_date) - trunc(scheduled_start_date) + 1
9998          WHERE project_id = p_dest_project_id;
9999     END IF;
10000 
10001     ---Updating Baselined Dates
10002     UPDATE PA_PROJ_ELEMENTS ppe
10003        SET ( BASELINE_START_DATE
10004             ,BASELINE_FINISH_DATE
10005             ,BASELINE_DURATION
10006            ) = ( SELECT ppevs.scheduled_start_date
10007                        ,ppevs.scheduled_finish_date
10008                        ,ppevs.duration
10009                    FROM pa_proj_elem_ver_schedule ppevs,
10010                         pa_proj_element_versions ppev
10011                   WHERE ppevs.project_id           = p_dest_project_id
10012                     AND ppevs.proj_element_id      = ppev.proj_element_id
10013                     AND ppevs.element_version_id   = ppev.element_version_id
10014                     AND ppev.project_id            = p_dest_project_id
10015                     AND ppevs.proj_element_id      = ppe.proj_element_id
10016                     AND ppev.proj_element_id       = ppe.proj_element_id
10017                     AND ppev.parent_structure_version_id =
10018                             (  SELECT ppevst.element_version_id   --Changed the inner query for bug 4215666.
10019                                FROM   pa_proj_elem_ver_structure ppevst,
10020                                       pa_proj_structure_types struc,
10021                                       pa_structure_types stype
10022                                WHERE  ppevst.project_id          = p_dest_project_id
10023                                AND    ppevst.current_flag        = 'Y'
10024                                AND    ppevst.status_code         = 'STRUCTURE_PUBLISHED'
10025                                AND    ppevst.proj_element_id     = struc.proj_element_id
10026                                AND    struc.structure_type_id    = stype.structure_type_id
10027                                AND    stype.structure_type       = 'WORKPLAN'
10028                             )
10029                 )
10030     WHERE project_id = p_dest_project_id;
10031 
10032     --Updating Projects Dates
10033     UPDATE pa_projects_all
10034        SET ( BASELINE_START_DATE ,BASELINE_FINISH_DATE,  baseline_duration, baseline_as_of_date ) =
10035               ( SELECT BASELINE_START_DATE ,BASELINE_FINISH_DATE,  baseline_duration,
10036                              decode( BASELINE_START_DATE, null, null, sysdate)
10037                   FROM pa_proj_elements ppe, pa_proj_structure_types ppst
10038                  WHERE project_id = p_dest_project_id
10039                    AND object_type = 'PA_STRUCTURES'
10040                    AND ppe.proj_element_id = ppst.proj_element_id
10041                    AND ppst.structure_type_id = 1
10042                )
10043     WHERE project_id = p_dest_project_id;
10044 
10045     --Get the latest published version id in the destination project
10046     l_dest_latest_pub_ver_id := PA_PROJ_ELEMENTS_UTILS.latest_published_ver_id( p_dest_project_id, 'WORKPLAN' ) ;
10047 
10048      IF l_dest_latest_pub_ver_id IS NOT NULL THEN
10049          UPDATE pa_projects_all
10050             SET ( scheduled_START_DATE ,scheduled_FINISH_DATE,  scheduled_duration, scheduled_as_of_date ) =
10051                     ( SELECT SCHEDULED_START_DATE ,SCHEDULED_FINISH_DATE,  duration,
10052                              decode( SCHEDULED_START_DATE, null, null, sysdate )
10053                         FROM pa_proj_elem_ver_schedule
10054                        WHERE project_id = p_dest_project_id
10055                          AND element_version_id = l_dest_latest_pub_ver_id
10056                      )
10057             WHERE project_id = p_dest_project_id;
10058      END IF;
10059 
10060     /* Included  for Bug 3922019
10061        In case of templates l_dest_latest_pub_ver_id will be NULL (No latest published version etc. for templates)
10062        So,In that case,Select the Only Workplan Version Id that would be available for the template*/
10063 
10064     OPEN c_template_flag(p_dest_project_id) ;
10065     FETCH c_template_flag INTO l_template_flag ;
10066     CLOSE c_template_flag ;
10067 
10068     IF nvl(l_template_flag,'N') = 'Y' THEN
10069         OPEN c_only_wp_ver_id(p_dest_project_id) ;
10070         FETCH c_only_wp_ver_id INTO l_only_wp_ver_id ;
10071         CLOSE c_only_wp_ver_id ;
10072 
10073         UPDATE pa_projects_all
10074        SET ( scheduled_START_DATE ,scheduled_FINISH_DATE,  scheduled_duration, scheduled_as_of_date ) =
10075            ( SELECT SCHEDULED_START_DATE ,SCHEDULED_FINISH_DATE,  duration,
10076                 decode( SCHEDULED_START_DATE, null, null, sysdate )
10077                FROM pa_proj_elem_ver_schedule
10078               WHERE project_id = p_dest_project_id
10079                         AND element_version_id = l_only_wp_ver_id
10080                      )
10081            WHERE project_id = p_dest_project_id;
10082     END IF;
10083 
10084     /* End of code changes for Bug 3922019*/
10085 
10086     IF l_debug_mode = 'Y' THEN
10087         Pa_Debug.WRITE(G_PKG_NAME, 'Copying task attachments...', l_debug_level3);
10088     END IF;
10089 
10090     --Copy Task Attachments
10091     OPEN  cur_get_flag('WP_TASK_ATTACH_FLAG');
10092     FETCH cur_get_flag INTO l_wp_task_attach_flag;
10093     CLOSE cur_get_flag;
10094 
10095     IF l_debug_mode = 'Y' THEN
10096         Pa_Debug.WRITE(G_PKG_NAME, 'l_wp_task_attach_flag '||l_wp_task_attach_flag, l_debug_level3);
10097     END IF;
10098 
10099     OPEN  cur_get_flag('FN_ATTACHMENTS_FLAG');
10100     FETCH cur_get_flag INTO l_fn_task_attach_flag;
10101     CLOSE cur_get_flag;
10102 
10103     IF l_debug_mode = 'Y' THEN
10104         Pa_Debug.WRITE(G_PKG_NAME, 'l_fn_task_attach_flag '||l_fn_task_attach_flag, l_debug_level3);
10105     END IF;
10106 
10107     IF 'Y' = l_shared THEN
10108         IF ('Y' = l_min_one_wp_ver_sel AND 'Y' = l_wp_task_attach_flag )
10109         OR ('Y' = l_fin_tasks_flag AND 'Y' = l_fn_task_attach_flag ) THEN
10110             FOR rec_copied_tasks IN cur_get_copied_tasks( l_dest_shared_struc_id ) LOOP
10111                 FND_ATTACHED_DOCUMENTS2_PKG.COPY_ATTACHMENTS(
10112                 'PA_TASKS',
10113                 rec_copied_tasks.src_ppe_id,
10114                 null, null, null, null,
10115                 'PA_TASKS',
10116                 rec_copied_tasks.dest_ppe_id,
10117                 null, null, null, null,
10118                 FND_GLOBAL.USER_ID,
10119                 FND_GLOBAL.LOGIN_ID,
10120                 275, null, null
10121                 );
10122             END LOOP;
10123         END IF;
10124     ELSE
10125         IF 'Y' = l_wp_task_attach_flag THEN
10126             FOR rec_copied_tasks IN cur_get_copied_tasks( l_dest_wp_structure_id ) LOOP
10127                 FND_ATTACHED_DOCUMENTS2_PKG.COPY_ATTACHMENTS(
10128                 'PA_TASKS',
10129                 rec_copied_tasks.src_ppe_id,
10130                 null, null, null, null,
10131                 'PA_TASKS',
10132                 rec_copied_tasks.dest_ppe_id,
10133                 null, null, null, null,
10134                 FND_GLOBAL.USER_ID,
10135                 FND_GLOBAL.LOGIN_ID,
10136                 275, null, null
10137                 );
10138             END LOOP;
10139         END IF;
10140 
10141         IF 'Y' = l_fn_task_attach_flag THEN
10142             FOR rec_copied_tasks IN cur_get_copied_tasks( l_dest_fn_structure_id ) LOOP
10143                 FND_ATTACHED_DOCUMENTS2_PKG.COPY_ATTACHMENTS(
10144                 'PA_TASKS',
10145                 rec_copied_tasks.src_ppe_id,
10146                 null, null, null, null,
10147                 'PA_TASKS',
10148                 rec_copied_tasks.dest_ppe_id,
10149                 null, null, null, null,
10150                 FND_GLOBAL.USER_ID,
10151                 FND_GLOBAL.LOGIN_ID,
10152                 275, null, null
10153                 );
10154             END LOOP;
10155         END IF;
10156     END IF;
10157 
10158     --Need To Sync Up Transaction Dates If Auto Sync Is On
10159     IF l_shared = 'Y' THEN
10160 
10161         IF  (PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_DATE_SYNC_ENABLED(l_dest_shared_struc_id) = 'Y')
10162         AND (PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_PUB_AT_CREATION(p_src_project_id) = 'Y')  THEN
10163             --Copy to transaction date
10164             PA_PROJECT_DATES_PUB.COPY_PROJECT_DATES(
10165              p_project_id => p_dest_project_id,
10166              x_return_status => l_return_status,
10167              x_msg_count => l_msg_count,
10168              x_msg_data => l_msg_data
10169             );
10170 
10171            IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10172                 x_msg_count := FND_MSG_PUB.count_msg;
10173                 IF x_msg_count = 1 THEN
10174                     x_msg_data := l_msg_data;
10175                 END IF;
10176                 RAISE FND_API.G_EXC_ERROR;
10177            END IF;
10178         END IF;
10179     END IF;
10180 
10181     DECLARE
10182         Old_Versions_Tab  SYSTEM.pa_num_tbl_type;
10183         New_Versions_Tab  SYSTEM.pa_num_tbl_type;
10184 
10185         l_wp_inter_proj_depend_flag VARCHAR2(1);
10186     BEGIN
10187         SELECT Element_Version_ID, attribute15 BULK COLLECT
10188         INTO   New_Versions_Tab, Old_Versions_Tab
10189         FROM   PA_Proj_Element_Versions
10190         WHERE  Project_ID = p_dest_project_id;
10191 
10192         PA_Relationship_Pvt.Copy_Intra_Dependency (
10193           P_Source_Ver_Tbl  => Old_Versions_Tab,
10194           P_Destin_Ver_Tbl  => New_Versions_Tab,
10195           X_Return_Status   => X_Return_Status,
10196           X_Msg_Count       => X_Msg_Count,
10197           X_Msg_Data        => X_Msg_Data
10198         );
10199         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10200            RAISE FND_API.G_EXC_ERROR;
10201         END IF;
10202 
10203         OPEN  cur_get_flag('WP_INTER_PROJ_DEPEND_FLAG');
10204         FETCH cur_get_flag INTO l_wp_inter_proj_depend_flag;
10205         CLOSE cur_get_flag;
10206 
10207         IF 'Y' = l_wp_inter_proj_depend_flag THEN
10208             PA_RELATIONSHIP_PVT.Copy_Inter_Project_Dependency (
10209             P_Source_Ver_Tbl     => Old_Versions_Tab,
10210             P_Destin_Ver_Tbl     => New_Versions_Tab,
10211             X_Return_Status      => X_Return_Status,
10212             X_Msg_Count          => X_Msg_Count,
10213             X_Msg_Data           => X_Msg_Data
10214             );
10215             IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10216                RAISE FND_API.G_EXC_ERROR;
10217             END IF;
10218         END IF;
10219     END ;--Finished copying Intra and Inter Project Dependencies
10220 
10221     DECLARE
10222         CURSOR cur_get_str_shr_code IS
10223         SELECT structure_sharing_code
10224         FROM   pa_projects_all
10225         WHERE  project_id = p_dest_project_id;
10226 
10227         src_versions_tab   SYSTEM.pa_num_tbl_type;
10228         dest_versions_tab  SYSTEM.pa_num_tbl_type;
10229         l_dest_proj_struc_shr_code VARCHAR2(30);
10230 
10231         l_wp_res_assign_flag       VARCHAR2(1) := 'N';
10232         l_wp_ra_people_flag        VARCHAR2(1) := 'N';
10233         l_wp_ra_equipment_flag     VARCHAR2(1) := 'N';
10234         l_wp_ra_material_flag      VARCHAR2(1) := 'N';
10235         l_wp_ra_fin_element_flag   VARCHAR2(1) := 'N';
10236 
10237     BEGIN
10238 
10239         SELECT Element_Version_ID, attribute15 BULK COLLECT
10240         INTO   dest_versions_tab, src_Versions_Tab
10241         FROM   PA_Proj_Element_Versions
10242         WHERE  Project_ID = p_dest_project_id
10243         AND ( PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(element_version_id, 'WORKPLAN') = 'Y')
10244         AND object_type = 'PA_STRUCTURES';
10245 
10246         OPEN  cur_get_str_shr_code;
10247         FETCH cur_get_str_shr_code INTO l_dest_proj_struc_shr_code;
10248         CLOSE cur_get_str_shr_code;
10249 
10250         IF l_dest_proj_struc_shr_code = 'SPLIT_MAPPING' THEN
10251              -- Copy mapping only in case of split structures with mapping
10252              PA_PROJ_STRUC_MAPPING_PUB.copy_mapping
10253              ( p_context               => 'COPY_PROJECT'
10254               ,p_src_project_id        => p_src_project_id
10255               ,p_dest_project_id       => p_dest_project_id
10256               ,x_return_status          => x_return_status
10257               ,x_msg_count              => x_msg_count
10258               ,x_Msg_data               => x_msg_data
10259              );
10260              IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10261                 RAISE FND_API.G_EXC_ERROR;
10262              END IF;
10263         END IF;
10264 
10265         OPEN  cur_get_flag('WP_RES_ASSIGN_FLAG');
10266         FETCH cur_get_flag INTO l_wp_res_assign_flag;
10267         CLOSE cur_get_flag;
10268         --NOTE : If Resource Assignments flag is unchecked, all other flags - people, equipment, material
10269         --and financial elements would be 'N'
10270 
10271         IF 'Y' = l_wp_res_assign_flag THEN
10272             OPEN  cur_get_flag('WP_RA_PEOPLE_FLAG');
10273             FETCH cur_get_flag INTO l_wp_ra_people_flag;
10274             CLOSE cur_get_flag;
10275 
10276             OPEN  cur_get_flag('WP_RA_EQUIPMENT_FLAG');
10277             FETCH cur_get_flag INTO l_wp_ra_equipment_flag;
10278             CLOSE cur_get_flag;
10279 
10280             OPEN  cur_get_flag('WP_RA_MATERIAL_FLAG');
10281             FETCH cur_get_flag INTO l_wp_ra_material_flag;
10282             CLOSE cur_get_flag;
10283 
10284             OPEN  cur_get_flag('WP_RA_FIN_ELEMENT_FLAG');
10285             FETCH cur_get_flag INTO l_wp_ra_fin_element_flag;
10286             CLOSE cur_get_flag;
10287         END IF;
10288 
10289         --bug 3912603, call add_planning_transactions if no wp selected and split, Satish
10290         -- Copies budget versions, resource assignments and budget lines as required for the workplan version.
10291         --IF ('Y' = l_shared AND 'N' = l_fin_tasks_flag)
10292         --OR ('N' = l_shared AND 'Y' = l_workplan_enabled) THEN
10293     IF ('Y' = check_str_sel_flag AND 'N' = nvl(l_min_one_wp_ver_sel,'N')) THEN
10294         IF l_debug_mode = 'Y' THEN
10295             Pa_Debug.WRITE(G_PKG_NAME, 'Calling  add_planning_transactions ', l_debug_level3);
10296             Pa_Debug.WRITE(G_PKG_NAME, 'Calling  add_planning_transactions p_dest_project_id '||p_dest_project_id, l_debug_level3);
10297             Pa_Debug.WRITE(G_PKG_NAME, 'Calling  add_planning_transactions l_new_wp_ver_id '||l_new_wp_ver_id, l_debug_level3);
10298         END IF;
10299         PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions
10300         (
10301             p_context                => 'WORKPLAN'
10302             ,p_project_id             => p_dest_project_id
10303             ,p_struct_elem_version_id => l_new_wp_ver_id
10304             ,x_return_status          => x_return_status
10305             ,x_msg_count              => x_msg_count
10306             ,x_Msg_data               => x_msg_data
10307         );
10308         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10309            RAISE FND_API.G_EXC_ERROR;
10310         END IF;
10311     ELSE
10312         IF l_debug_mode = 'Y' THEN
10313             Pa_Debug.WRITE(G_PKG_NAME, 'Calling  copy_wp_budget_versions ', l_debug_level3);
10314         END IF;
10315         PA_FP_COPY_FROM_PKG.copy_wp_budget_versions
10316          ( p_source_project_id            => p_src_project_id
10317           ,p_target_project_id            => p_dest_project_id
10318           ,p_src_sv_ids_tbl               => src_Versions_Tab  -- Workplan version id tbl
10319           ,p_target_sv_ids_tbl            => dest_Versions_Tab -- Workplan version id tbl
10320           ,p_copy_people_flag             => l_wp_ra_people_flag
10321           ,p_copy_equip_flag              => l_wp_ra_equipment_flag
10322           ,p_copy_mat_item_flag           => l_wp_ra_material_flag
10323           ,p_copy_fin_elem_flag           => l_wp_ra_fin_element_flag
10324           ,x_return_status                => x_return_status
10325           ,x_msg_count                    => x_msg_count
10326           ,x_Msg_data                     => x_msg_data
10327          );
10328         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10329            RAISE FND_API.G_EXC_ERROR;
10330         END IF;
10331     END IF;
10332 
10333     IF ( 'Y' = l_dlv_enabled AND 'Y' = l_wp_deliverables_flag ) THEN
10334 
10335             PA_DELIVERABLE_PUB.copy_deliverables
10336              (p_source_project_id    => p_src_project_id
10337              ,p_target_project_id    => p_dest_project_id
10338              ,p_item_details_flag    => l_wp_dlv_item_det_flag
10339              ,p_dlv_actions_flag     => 'Y'
10340              ,p_dlv_attachments_flag => l_wp_dlv_attach_flag
10341              ,p_association_flag     => l_wp_dlv_assoc_task_flag
10342              ,p_prefix               => 'CP'
10343              ,p_delta                => p_delta
10344              ,p_calling_context      => 'COPY_PROJECT'
10345              ,x_return_status        => x_return_status
10346              ,x_msg_count            => x_msg_count
10347              ,x_Msg_data             => x_msg_data
10348              );
10349 
10350             IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10351              RAISE FND_API.G_EXC_ERROR;
10352             END IF;
10353         END IF;
10354     END;
10355 
10356 /* This code is moved to Copy_Project API for bug 4200168 so that BF can use attribute15 to access source task id in copy finplan API*/
10357  /* Now update back the attributes column in pa_proj_elements and pa_proj_element_versions with actual data from source project
10358     UPDATE pa_proj_elements ppe1
10359     SET attribute15 = ( SELECT attribute15 FROM pa_proj_elements ppe2
10360                          WHERE ppe2.project_id = p_src_project_id
10361                            AND ppe2.proj_element_id = ppe1.attribute15 )
10362     WHERE project_id = p_dest_project_id ;
10363 
10364     UPDATE pa_proj_element_versions ppevs1
10365     SET attribute15 = ( SELECT attribute15 FROM pa_proj_element_versions ppevs2
10366                          WHERE ppevs2.project_id = p_src_project_id
10367                            AND ppevs2.element_version_id = ppevs1.attribute15 )
10368     WHERE project_id = p_dest_project_id ; */
10369 
10370     --3916763 Begin
10371 
10372     IF l_debug_mode = 'Y' THEN
10373     Pa_Debug.WRITE(G_PKG_NAME, 'l_submit_wf_required='||l_submit_wf_required, l_debug_level3);
10374     Pa_Debug.WRITE(G_PKG_NAME, 'p_dest_project_id='||p_dest_project_id, l_debug_level3);
10375     Pa_Debug.WRITE(G_PKG_NAME, 'l_submit_wf_str_id='||l_submit_wf_str_id, l_debug_level3);
10376     Pa_Debug.WRITE(G_PKG_NAME, 'l_submit_wf_str_version_id='||l_submit_wf_str_version_id, l_debug_level3);
10377     Pa_Debug.WRITE(G_PKG_NAME, 'fnd_global.resp_id='||fnd_global.resp_id, l_debug_level3);
10378     END IF;
10379 
10380     IF l_submit_wf_required = 'Y' AND l_submit_wf_str_version_id IS NOT NULL THEN
10381     IF l_debug_mode = 'Y' THEN
10382         Pa_Debug.WRITE(G_PKG_NAME, 'Calling SUBMIT_WORKPLAN ', l_debug_level3);
10383     END IF;
10384 
10385     PA_PROJECT_STRUCTURE_PUB1.SUBMIT_WORKPLAN
10386         (
10387                      p_calling_module       => p_calling_module
10388                     ,p_project_id       => p_dest_project_id
10389                     ,p_structure_id     => l_submit_wf_str_id
10390                 ,p_structure_version_id     => l_submit_wf_str_version_id
10391             ,p_responsibility_id        => fnd_global.resp_id
10392             ,x_return_status            => x_return_status
10393                     ,x_msg_count                => x_msg_count
10394                     ,x_msg_data                 => x_msg_data
10395                 );
10396     IF l_debug_mode = 'Y' THEN
10397         Pa_Debug.WRITE(G_PKG_NAME, 'After Call SUBMIT_WORKPLAN x_return_status='||x_return_status, l_debug_level3);
10398     END IF;
10399     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10400         RAISE FND_API.G_EXC_ERROR;
10401     END IF;
10402     END IF;
10403     --3916763 End
10404 
10405     x_return_status := FND_API.G_RET_STS_SUCCESS ;
10406 
10407     IF (p_commit = FND_API.G_TRUE) THEN
10408         COMMIT;
10409     END IF;
10410 
10411     IF (p_debug_mode = 'Y') THEN
10412         pa_debug.debug('PA_PROJ_TASK_STRUC_PUB.copy_structures_tasks_bulk END');
10413         Pa_Debug.reset_curr_function; --For bug 4252182
10414     END IF;
10415 
10416 EXCEPTION
10417 
10418 WHEN FND_API.G_EXC_ERROR THEN
10419 
10420      x_return_status := Fnd_Api.G_RET_STS_ERROR;
10421 
10422      IF p_commit = FND_API.G_TRUE THEN
10423         ROLLBACK TO copy_struc_tasks_bulk;
10424      END IF;
10425 
10426      l_msg_count := Fnd_Msg_Pub.count_msg;
10427      IF l_msg_count = 1 AND x_msg_data IS NULL
10428       THEN
10429           Pa_Interface_Utils_Pub.get_messages
10430               ( p_encoded        => Fnd_Api.G_FALSE
10431               , p_msg_index      => 1
10432               , p_msg_count      => l_msg_count
10433               , p_msg_data       => l_msg_data
10434               , p_data           => l_data
10435               , p_msg_index_out  => l_msg_index_out);
10436           x_msg_data := l_data;
10437           x_msg_count := l_msg_count;
10438      ELSE
10439           x_msg_count := l_msg_count;
10440      END IF;
10441 
10442      IF l_debug_mode = 'Y' THEN
10443           Pa_Debug.reset_curr_function;
10444      END IF;
10445 
10446 WHEN Invalid_Arg_Exc_WP THEN
10447      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
10448      x_msg_count     := 1;
10449      x_msg_data      := ' PA_PROJ_TASK_STRUC_PUB : copy_structures_tasks_bulk : NULL parameters passed';
10450 
10451      IF p_commit = FND_API.G_TRUE THEN
10452         ROLLBACK TO copy_struc_tasks_bulk;
10453      END IF;
10454 
10455      Fnd_Msg_Pub.add_exc_msg
10456                    (  p_pkg_name         => 'PA_TOP_TASK_CUST_INVOICE_PVT'
10457                     , p_procedure_name  => 'copy_structures_tasks_bulk'
10458                     , p_error_text      => x_msg_data);
10459 
10460      IF l_debug_mode = 'Y' THEN
10461           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
10462           Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
10463                          l_debug_level5);
10464           Pa_Debug.reset_curr_function;
10465      END IF;
10466      RAISE;
10467 
10468 WHEN OTHERS THEN
10469      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
10470      x_msg_count     := 1;
10471      x_msg_data      := SQLERRM;
10472 
10473      IF p_commit = FND_API.G_TRUE THEN
10474         ROLLBACK TO copy_struc_tasks_bulk;
10475      END IF;
10476 
10477      Fnd_Msg_Pub.add_exc_msg
10478        ( p_pkg_name         => 'PA_PROJ_TASK_STRUC_PUB'
10479         , p_procedure_name  => 'copy_structures_tasks_bulk'
10480         , p_error_text      => x_msg_data);
10481 
10482      IF l_debug_mode = 'Y' THEN
10483           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
10484           Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
10485                          l_debug_level5);
10486           Pa_Debug.reset_curr_function;
10487      END IF;
10488      RAISE;
10489 END copy_structures_tasks_bulk;
10490 
10491 
10492 FUNCTION get_adjusted_dates(
10493    p_target_start_date    DATE
10494   ,p_target_finish_date   DATE
10495   ,p_delta NUMBER
10496   ,p_scheduled_start_date  DATE
10497   ,p_scheduled_finish_date  DATE
10498  ) RETURN DATE IS
10499 --fix bug 2831973
10500 -- l_delta    NUMBER;
10501  l_scheduled_start_date  DATE;
10502  l_scheduled_finish_date DATE;
10503 BEGIN
10504 
10505 --fix bug 2831973
10506 --replace all l_delta with p_delta
10507 --    IF (p_target_start_date IS NULL) THEN
10508 --       l_delta := 0;
10509 --    ELSE
10510 --       l_delta := p_target_start_date - p_scheduled_start_date;
10511 --    END IF;
10512 
10513     --calculate scheduled start and finish dates
10514     IF (p_target_finish_date < p_scheduled_start_date + p_delta) THEN
10515         l_scheduled_start_date := p_target_finish_date;
10516     ELSE
10517         l_scheduled_start_date := p_scheduled_start_date + p_delta;
10518     END IF;
10519 
10520     IF (p_target_finish_date < p_scheduled_finish_date + p_delta) THEN
10521         l_scheduled_finish_date := p_target_finish_date;
10522     ELSE
10523         l_scheduled_finish_date := p_scheduled_finish_date + p_delta;
10524     END IF;
10525 
10526     IF p_scheduled_finish_date IS NULL
10527     THEN
10528        RETURN l_scheduled_start_date;
10529     ELSE
10530        RETURN l_scheduled_finish_date;
10531     END IF;
10532 
10533 END get_adjusted_dates;
10534 
10535 PROCEDURE copy_structures_bulk
10536 ( p_commit                        IN VARCHAR2    := FND_API.G_FALSE
10537  ,p_validate_only                 IN VARCHAR2    := FND_API.G_TRUE
10538  ,p_validation_level              IN VARCHAR2    := 100
10539  ,p_calling_module                IN VARCHAR2    := 'SELF_SERVICE'
10540  ,p_debug_mode                    IN VARCHAR2    := 'N'
10541  ,p_max_msg_count                 IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
10542  ,p_src_project_id                IN NUMBER
10543  ,p_dest_project_id               IN NUMBER
10544  ,p_delta                         IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
10545  ,p_copy_task_flag                IN VARCHAR2    := 'Y'
10546  ,p_dest_template_flag            IN VARCHAR2    := 'N'     --bug 2805602
10547  ,p_src_template_flag            IN VARCHAR2    := 'N'   --bug 2805602
10548  ,p_dest_project_name             IN VARCHAR2               --bug 2805602
10549  ,p_target_start_date             IN DATE
10550  ,p_target_finish_date             IN DATE
10551  ,p_calendar_id                   IN NUMBER
10552  ,x_return_status                OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10553  ,x_msg_count                    OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
10554  ,x_msg_data                     OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
10555 IS
10556   l_return_status                VARCHAR2(1);
10557   l_msg_count                    NUMBER;
10558   l_msg_data                     VARCHAR2(250);
10559   l_append                       VARCHAR2(10) := ': ';
10560   l_project_name             VARCHAR2(250);
10561   l_workplan_enabled         VARCHAR2(1);
10562   l_shared                   VARCHAR2(1);
10563   l_versioning_enabled       VARCHAR2(1);
10564   l_auto_pub_enabled         VARCHAR2(1);
10565   l_src_template_flag        VARCHAR2(1);
10566   l_dest_template_flag       VARCHAR2(1);
10567   l_copy_flag_set            VARCHAR2(1);
10568   l_max_date                 DATE;
10569   l_max_date2                DATE;
10570   l_latst_upd_wrkng_str_ver  NUMBER;
10571   l_fin_str_copy_flag       VARCHAR2(1);
10572   l_LATEST_EFF_PUBLISHED_FLAG   VARCHAR2(1);
10573   l_name                     VARCHAR2(250);
10574   l_suffix                   VARCHAR2(250);
10575   l_struc_version_id         NUMBER;
10576   l_src_str_version_id       NUMBER;
10577   i                          NUMBER;
10578   j                          NUMBER ;
10579   k                          NUMBER ;
10580 
10581   --fix bug 2831973
10582   l_delta                    NUMBER;
10583   l_src_sch_st_date          DATE;
10584   CURSOR get_src_sch_st_date(c_project_id NUMBER, c_struc_ver_id NUMBER) IS
10585     select scheduled_start_date
10586     from pa_proj_elem_ver_schedule
10587     where project_id = c_project_id
10588     and element_version_id = c_struc_ver_id;
10589 
10590 
10591 /*bug 3737444 : The below code commented */
10592 /*  CURSOR get_wp_attr IS
10593     select *
10594     from   pa_proj_workplan_attr
10595     where  project_id = p_src_project_id; */
10596 
10597 /* Code Addition starts for bug 3737444 */
10598   CURSOR get_wp_attr IS
10599     select * from  pa_proj_workplan_attr pppa where pppa.project_id=p_src_project_id
10600     and exists (select null from pa_proj_structure_types pst, pa_structure_types ps
10601                 where pst.structure_type_id=ps.structure_type_id
10602                 and  ps. STRUCTURE_TYPE ='WORKPLAN'
10603                 and pst.proj_element_id=pppa.proj_element_id);
10604 
10605 
10606 /* Code Addition ends for bug 3737444 */
10607 
10608   l_wp_attr_rec get_wp_attr%ROWTYPE;
10609   l_user_id    NUMBER := FND_GLOBAL.USER_ID;
10610   l_login_id   NUMBER := FND_GLOBAL.LOGIN_ID;
10611 
10612   CURSOR l_get_structure_attr_csr
10613   IS
10614 /*  SELECT *
10615   FROM PA_PROJ_ELEM_ver_structure ppevs
10616   WHERE project_id = p_src_project_id;*//*Commented below query and following criteria by SMUKKA */
10617   select ppevs.*
10618     from pa_structure_types pst,
10619          pa_proj_structure_types ppst,
10620          pa_proj_elem_ver_structure ppevs
10621    where ppevs.project_id = p_src_project_id
10622      and ppevs.proj_element_id= ppst.proj_element_id
10623      and ppst.structure_type_id = pst.structure_type_id
10624      and pst.structure_type in ('WORKPLAN','FINANCIAL');
10625 
10626   CURSOR l_get_structure_attr_csr2
10627   IS
10628   SELECT ppevs.element_version_id, ppevs.status_code, ppevs.LATEST_EFF_PUBLISHED_FLAG, ppevs.current_flag,
10629          ppst.structure_type_id
10630 /*  FROM PA_PROJ_ELEM_ver_structure ppevs,
10631        pa_proj_structure_types ppst
10632   WHERE project_id = p_src_project_id
10633     AND ppst.proj_element_id(+) = ppevs.proj_element_id;*//*Commented below query and following criteria by SMUKKA */
10634   from pa_proj_elem_ver_structure ppevs,
10635        pa_proj_structure_types ppst,
10636        pa_structure_types pst
10637  where project_id = p_src_project_id
10638    and ppst.proj_element_id(+) = ppevs.proj_element_id
10639    and ppst.structure_type_id = pst.structure_type_id
10640    and pst.structure_type in ('WORKPLAN','FINANCIAL');
10641 
10642    CURSOR cur_elem_ver_seq
10643         IS
10644           SELECT pa_proj_element_versions_s.nextval
10645             FROM sys.dual;
10646 
10647 l_get_structure_attr_csr_rec    l_get_structure_attr_csr%ROWTYPE;
10648 l_get_structure_attr_csr_rec2    l_get_structure_attr_csr2%ROWTYPE;
10649 
10650 TYPE structure_ver_record IS RECORD
10651 (src_str_version_id         NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10652  src_str_status                 VARCHAR2(150)     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
10653  latest_pub_flag           VARCHAR2(1)      := 'N',
10654  current_flag           VARCHAR2(1)      := 'N',
10655  last_update_date           DATE                := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
10656  copy_flag                 VARCHAR2(1)      := 'N',
10657  dest_str_status           VARCHAR2(150)     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
10658  src_stru_type_id          NUMBER           := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
10659 );
10660 
10661 TYPE l_dest_str_versions IS TABLE OF structure_ver_record
10662      INDEX BY BINARY_INTEGER;
10663 l_dest_str_versions_tbl  l_dest_str_versions;
10664 l_latest_pub_str_ver_id  NUMBER;
10665 
10666 /* Code added for 6211012*/
10667 
10668 TYPE typ_obj_rela_id is TABLE OF pa_object_relationships.object_relationship_id%TYPE
10669 INDEX BY BINARY_INTEGER;
10670 l_obj_rel_id typ_obj_rela_id;
10671 
10672 TYPE typ_obj_typ_from is TABLE OF pa_object_relationships.object_type_from%TYPE
10673 INDEX BY BINARY_INTEGER;
10674 l_obj_typ_from typ_obj_typ_from;
10675 
10676 TYPE typ_obj_from_id is TABLE OF pa_object_relationships.object_id_from1%TYPE
10677 INDEX BY BINARY_INTEGER;
10678 l_obj_from_id typ_obj_from_id;
10679 
10680 TYPE typ_obj_typ_to is TABLE OF pa_object_relationships.object_type_to%TYPE
10681 INDEX BY BINARY_INTEGER;
10682 l_obj_typ_to typ_obj_typ_to;
10683 
10684 TYPE typ_obj_to_id is TABLE OF pa_object_relationships.object_id_to1%TYPE
10685 INDEX BY BINARY_INTEGER;
10686 l_obj_to_id typ_obj_to_id;
10687 
10688 TYPE typ_rel_typ is TABLE OF pa_object_relationships.relationship_type%TYPE
10689 INDEX BY BINARY_INTEGER;
10690 l_rel_typ typ_rel_typ;
10691 
10692 TYPE typ_rel_subtyp is TABLE OF pa_object_relationships.relationship_subtype%TYPE
10693 INDEX BY BINARY_INTEGER;
10694 l_rel_subtyp typ_rel_subtyp;
10695 
10696 TYPE typ_rec_ver_num is TABLE OF pa_object_relationships.Record_Version_Number%TYPE
10697 INDEX BY BINARY_INTEGER;
10698 l_rec_ver_num typ_rec_ver_num;
10699 
10700 TYPE typ_wt_percent is TABLE OF pa_object_relationships.weighting_percentage%TYPE
10701 INDEX BY BINARY_INTEGER;
10702 l_wt_percent typ_wt_percent;
10703 
10704 
10705 CURSOR cur_pa_obj_rela_3(c_src_str_version_id NUMBER,
10706 		     c_struc_version_id NUMBER
10707 		     ) IS
10708 SELECT /*+ USE_HASH(ppev2 ppev1)*/
10709      pa_object_relationships_s.nextval,
10710      pobj.object_type_from,
10711      ppev1.element_version_id,
10712      pobj.object_type_to,
10713      ppev2.element_version_id,
10714      pobj.relationship_type,
10715      pobj.relationship_subtype,
10716      pobj.Record_Version_Number,
10717      pobj.weighting_percentage
10718 FROM ( SELECT  object_type_from, object_id_from1,
10719                object_type_to,   object_id_to1,
10720                relationship_type, relationship_subtype,
10721                Record_Version_Number, weighting_percentage
10722        FROM pa_object_relationships
10723        --bug#3094283WHERE RELATIONSHIP_TYPE = 'S'
10724             start with object_id_from1 = c_src_str_version_id
10725             and RELATIONSHIP_TYPE = 'S'  /* Bug 2881667 - Added this condition */
10726             connect by  object_id_from1 =  prior object_id_to1
10727             and RELATIONSHIP_TYPE = 'S' ) pobj,     /* Bug 2881667 - Added this condition */
10728             pa_proj_element_versions ppev1,
10729             pa_proj_element_versions ppev2
10730 WHERE
10731        --bug#3094283   ppev1.project_id = p_dest_project_id
10732             ppev1.attribute15 = pobj.object_id_from1
10733        --bug#3094283 AND ppev2.project_id = p_dest_project_id
10734         AND ppev2.attribute15 = pobj.object_id_to1
10735         AND ppev1.parent_structure_version_id = c_struc_version_id
10736         AND ppev2.parent_structure_version_id = c_struc_version_id;
10737 
10738 /*End of Code added for 6211012*/
10739 
10740 --bug 3138959
10741 
10742 CURSOR cur_pa_struct IS
10743 SELECT ppe.proj_element_id, ppe.attribute15, ppst.structure_type_id
10744 /*  FROM pa_proj_elements ppe, pa_proj_structure_types ppst
10745  WHERE ppe.proj_element_id = ppst.proj_element_id
10746    AND ppe.project_id = p_dest_project_id
10747    AND ppe.object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
10748   from pa_proj_elements ppe,
10749        pa_proj_structure_types ppst,
10750        pa_structure_types pst
10751  where ppe.proj_element_id =ppst.proj_element_id
10752    and ppe.project_id = p_dest_project_id
10753    and ppe.object_type = 'PA_STRUCTURES'
10754    and ppst.structure_type_id = pst.structure_type_id
10755    and pst.structure_type in ('WORKPLAN','FINANCIAL');
10756 
10757 
10758   x_err_code             NUMBER;
10759   x_err_stage            VARCHAR2(2000);
10760   x_err_stack            VARCHAR2(2000);
10761 
10762 
10763 --bug 3140032
10764 
10765   CURSOR c_attach_tasks(c_orig_parent_structure_id NUMBER,
10766                         c_new_parent_structure_id NUMBER) is
10767   SELECT orig.proj_element_id orig_task_id,
10768          new.proj_element_id new_task_id
10769     FROM pa_proj_elements orig, pa_proj_elements new
10770    WHERE orig.project_id = p_src_project_id
10771      AND new.element_number = orig.element_number
10772      AND new.project_id = p_dest_project_id
10773      AND new.object_type = 'PA_TASKS'
10774      AND orig.object_type = 'PA_TASKS'
10775      AND orig.parent_structure_id = c_orig_parent_structure_id
10776      AND new.parent_structure_id = c_new_parent_structure_id
10777      ;
10778 
10779   c_atch                        c_attach_tasks%ROWTYPE ;
10780   l_source_parent_structure_id  NUMBER;
10781   l_financial_structure_id      Number;
10782 --bug 3140032
10783 --bug 3138959
10784 
10785   --fix bug 2831775
10786   l_structure_id             NUMBER;
10787   CURSOR get_shared_struc_id IS
10788     select ppe.proj_element_id
10789 /*    from pa_proj_elements
10790     where project_id = p_dest_project_id
10791     and object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
10792     from pa_proj_elements ppe,
10793          pa_proj_structure_types ppst,
10794          pa_structure_types pst
10795     where project_id = p_dest_project_id
10796     and object_type = 'PA_STRUCTURES'
10797     and ppe.proj_element_id =ppst.proj_element_id
10798     and ppst.structure_type_id = pst.structure_type_id
10799     and pst.structure_type in ('WORKPLAN','FINANCIAL');
10800 
10801 --bug 2838547
10802     cursor get_person_id(p_user_id NUMBER) IS
10803     select p.person_id
10804       from per_all_people_f p, fnd_user f
10805      where f.employee_id = p.person_id
10806        and sysdate between p.effective_start_date and p.effective_end_date
10807        and f.user_id = p_user_id;
10808 
10809   l_publish_person_id   NUMBER;
10810 --bug 2838547
10811 
10812   --Bug 2955589.
10813   l_structure_ver_name   pa_projects_all.name%TYPE;
10814   l_working_ver_count    NUMBER;
10815   l_structure_version_id pa_proj_element_versions.element_version_id%TYPE;
10816   -- The following two flags will indicate if the respective version has to be
10817   -- created when versioning is enabled and no working version exists for the
10818   -- source project.
10819   l_create_fin_version   VARCHAR2(1);
10820   l_create_wk_version    VARCHAR2(1);
10821 
10822 BEGIN
10823 
10824   IF (p_debug_mode = 'Y') THEN
10825     pa_debug.init_err_stack ('PA_PROJ_TASK_STRUC_PUB.copy_structures_bulk');  --For bug 4252182
10826     pa_debug.debug('PA_PROJ_TASK_STRUC_PUB.copy_structures_bulk begin');
10827   END IF;
10828 
10829   IF (p_commit = FND_API.G_TRUE) THEN
10830     savepoint copy_structure_bulk_pvt;
10831   END IF;
10832 
10833   -- Check if source and destination project are the same
10834   if p_src_project_id = p_dest_project_id then
10835     x_return_status := FND_API.G_RET_STS_SUCCESS;
10836     return;
10837   end if;
10838   l_dest_template_flag        := p_dest_template_flag;        --bug 2805602
10839   l_src_template_flag         := p_src_template_flag;          --bug 2805602
10840   l_project_name              := p_dest_project_name;   --bug 2805602
10841 
10842   select meaning
10843     into l_suffix
10844     from pa_lookups
10845    where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
10846      and lookup_code = 'WORKPLAN';
10847 
10848      -- Bug 3717026 Begin, commented as the structure name should be same as the project name.
10849     --IF pa_project_pub.G_structure_in_rec.structure_version_name is NOT NULL AND pa_project_pub.G_structure_in_rec.structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10850     --l_name := pa_project_pub.G_structure_in_rec.structure_version_name;
10851     --ELSE
10852     l_name := substr(l_project_name, 1, 240);
10853     --END IF;
10854      -- Bug 3717026 End
10855     l_workplan_enabled := PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( p_src_project_id );
10856 
10857     --bug 2838547
10858     open get_person_id(FND_GLOBAL.USER_ID);
10859     fetch get_person_id into l_publish_person_id;
10860     IF get_person_id%NOTFOUND then
10861       l_publish_person_id := NULL;
10862     END IF;
10863     close get_person_id;
10864     --bug 2838547
10865 
10866     IF NVL( l_workplan_enabled, 'N' ) = 'Y'
10867     THEN
10868 
10869         l_shared := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_src_project_id);
10870         --Get workplan attributes
10871         OPEN get_wp_attr;
10872         FETCH get_wp_attr into l_wp_attr_rec;
10873         CLOSE get_wp_attr;
10874 
10875         l_versioning_enabled := l_wp_attr_rec.WP_ENABLE_VERSION_FLAG;
10876         l_auto_pub_enabled   := l_wp_attr_rec.AUTO_PUB_UPON_CREATION_FLAG;
10877 
10878         --Modify name; add suffix
10879         --l_name := substr(l_project_name||l_append||l_suffix, 1, 240);   --update it later
10880 
10881     END IF;
10882 
10883 
10884 --copy pa_proj_elements
10885 --copying structures and tasks as is.
10886     INSERT INTO pa_proj_elements(
10887                   PROJ_ELEMENT_ID
10888                  ,PROJECT_ID
10889                  ,OBJECT_TYPE
10890                  ,ELEMENT_NUMBER
10891                  ,NAME
10892                  ,DESCRIPTION
10893                  ,STATUS_CODE
10894                  ,WF_STATUS_CODE
10895                  ,PM_SOURCE_CODE
10896                  ,PM_SOURCE_REFERENCE
10897                  ,CLOSED_DATE
10898                  ,LOCATION_ID
10899                  ,MANAGER_PERSON_ID
10900                  ,CARRYING_OUT_ORGANIZATION_ID
10901                  ,TYPE_ID
10902                  ,PRIORITY_CODE
10903                  ,CREATION_DATE
10904                  ,CREATED_BY
10905                  ,LAST_UPDATE_DATE
10906                  ,LAST_UPDATED_BY
10907                  ,LAST_UPDATE_LOGIN
10908                  ,RECORD_VERSION_NUMBER
10909                  ,REQUEST_ID
10910                  ,PROGRAM_APPLICATION_ID
10911                  ,PROGRAM_ID
10912                  ,PROGRAM_UPDATE_DATE
10913                  ,LINK_TASK_FLAG
10914                  ,BASELINE_START_DATE
10915                  ,BASELINE_FINISH_DATE
10916                  ,progress_outdated_flag
10917                   ,ATTRIBUTE_CATEGORY
10918                   ,ATTRIBUTE1
10919                   ,ATTRIBUTE2
10920                   ,ATTRIBUTE3
10921                   ,ATTRIBUTE4
10922                   ,ATTRIBUTE5
10923                   ,ATTRIBUTE6
10924                   ,ATTRIBUTE7
10925                   ,ATTRIBUTE8
10926                   ,ATTRIBUTE9
10927                   ,ATTRIBUTE10
10928                   ,ATTRIBUTE11
10929                   ,ATTRIBUTE12
10930                   ,ATTRIBUTE13
10931                   ,ATTRIBUTE14
10932                   ,ATTRIBUTE15
10933                   ,parent_structure_id
10934                                ,TYPE_CODE
10935                                ,INC_PROJ_PROGRESS_FLAG
10936                                ,WQ_ITEM_CODE
10937                                ,WQ_UOM_CODE
10938                                ,WQ_ACTUAL_ENTRY_CODE
10939                                ,TASK_PROGRESS_ENTRY_PAGE_ID
10940                                ,BASELINE_DURATION
10941                                ,PHASE_CODE
10942                                ,PHASE_VERSION_ID
10943                  ,source_object_id
10944                  ,source_object_type
10945                  ,PROGRESS_WEIGHT               --Bug 3616964
10946                  ,BASE_PERCENT_COMP_DERIV_CODE
10947                  ,FUNCTION_CODE
10948                  ,ENABLE_WF_FLAG
10949                  ,WF_ITEM_TYPE
10950                  ,WF_PROCESS
10951                  ,WF_START_LEAD_DAYS
10952                    )
10953                 SELECT
10954                   pa_tasks_s.nextval
10955                  ,p_dest_project_id
10956                  ,ppe.object_type
10957                  ,ppe.element_number
10958                  ,DECODE( ppe.object_type, 'PA_STRUCTURES',l_name, ppe.name )
10959                  ,ppe.DESCRIPTION
10960                  ,ppe.STATUS_CODE
10961                  ,ppe.WF_STATUS_CODE
10962                  ,ppe.PM_SOURCE_CODE
10963                  ,ppe.PM_SOURCE_REFERENCE
10964                  ,ppe.CLOSED_DATE
10965                  ,ppe.LOCATION_ID
10966                  ,ppe.MANAGER_PERSON_ID
10967                  ,ppe.CARRYING_OUT_ORGANIZATION_ID
10968                  ,ppe.TYPE_ID
10969                  ,ppe.PRIORITY_CODE
10970                  ,SYSDATE
10971                  ,l_user_id
10972                  ,SYSDATE
10973                  ,l_user_id
10974                  ,l_login_id
10975                  ,ppe.RECORD_VERSION_NUMBER
10976                  ,ppe.REQUEST_ID
10977                  ,ppe.PROGRAM_APPLICATION_ID
10978                  ,ppe.PROGRAM_ID
10979                  ,ppe.PROGRAM_UPDATE_DATE
10980                  ,ppe.LINK_TASK_FLAG
10981                  ,ppe.BASELINE_START_DATE
10982                  ,ppe.BASELINE_FINISH_DATE
10983                  ,'N'     --,ppe.progress_outdated_flag
10984                   ,ppe.ATTRIBUTE_CATEGORY
10985                   ,ppe.ATTRIBUTE1
10986                   ,ppe.ATTRIBUTE2
10987                   ,ppe.ATTRIBUTE3
10988                   ,ppe.ATTRIBUTE4
10989                   ,ppe.ATTRIBUTE5
10990                   ,ppe.ATTRIBUTE6
10991                   ,ppe.ATTRIBUTE7
10992                   ,ppe.ATTRIBUTE8
10993                   ,ppe.ATTRIBUTE9
10994                   ,ppe.ATTRIBUTE10
10995                   ,ppe.ATTRIBUTE11
10996                   ,ppe.ATTRIBUTE12
10997                   ,ppe.ATTRIBUTE13
10998                   ,ppe.ATTRIBUTE14
10999                   ,ppe.proj_element_id    --attribute 15 is used to store old structure id to identify the structure type
11000                   ,ppe.parent_structure_id
11001                                ,ppe.TYPE_CODE
11002                                ,ppe.INC_PROJ_PROGRESS_FLAG
11003                                ,ppe.WQ_ITEM_CODE
11004                                ,ppe.WQ_UOM_CODE
11005                                ,ppe.WQ_ACTUAL_ENTRY_CODE
11006                                ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
11007                                ,ppe.BASELINE_DURATION
11008                                ,ppe.PHASE_CODE
11009                                ,ppe.PHASE_VERSION_ID
11010                   ,p_dest_project_id
11011                   ,'PA_PROJECTS'
11012                   ,ppe.PROGRESS_WEIGHT               --Bug 3616964
11013                   ,ppe.BASE_PERCENT_COMP_DERIV_CODE
11014                   ,ppe.FUNCTION_CODE
11015                   ,ppe.ENABLE_WF_FLAG
11016                   ,ppe.WF_ITEM_TYPE
11017                   ,ppe.WF_PROCESS
11018                   ,ppe.WF_START_LEAD_DAYS
11019                 /* FROM pa_proj_elements ppe
11020                  where project_id = p_src_project_id
11021                    and ppe.object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11022                    from pa_proj_elements ppe
11023                   where ppe.project_id = p_src_project_id
11024                     and ppe.object_type = 'PA_STRUCTURES'
11025                     and ppe.proj_element_id IN (select ppe2.proj_element_id
11026                                                   from pa_proj_elements ppe2,
11027                                                        pa_proj_structure_types ppst,
11028                                                        pa_structure_types pst
11029                                                  where ppe2.project_id = p_src_project_id
11030                                                    and ppe2.object_type = 'PA_STRUCTURES'
11031                                                    and ppe2.proj_element_id = ppst.proj_element_id
11032                                                    and ppst.structure_type_id = pst.structure_type_id
11033                                                    and pst.structure_type in ('WORKPLAN','FINANCIAL'));
11034 
11035 
11036          --updating element_number with the proj_element_id
11037          update pa_proj_elements
11038             set element_number = proj_element_id
11039           WHERE project_id = p_dest_project_id
11040             AND object_type = 'PA_STRUCTURES'
11041           ;
11042 
11043 
11044 --Copy pa_proj_structure_types
11045 
11046           INSERT INTO PA_PROJ_STRUCTURE_TYPES(
11047                 PROJ_STRUCTURE_TYPE_ID
11048                ,PROJ_ELEMENT_ID
11049                ,STRUCTURE_TYPE_ID
11050                ,CREATION_DATE
11051                ,CREATED_BY
11052                ,LAST_UPDATE_DATE
11053                ,LAST_UPDATED_BY
11054                ,LAST_UPDATE_LOGIN
11055                ,RECORD_VERSION_NUMBER )
11056            SELECT
11057              pa_proj_structure_types_s.nextval
11058             , ppe.proj_element_id
11059             , ppst.structure_type_id            --structure type
11060             , sysdate
11061             , l_user_id
11062             , sysdate
11063             , l_user_id
11064             , l_login_id
11065             , 1
11066            /*from pa_proj_elements ppe, pa_proj_structure_types ppst
11067            where ppe.project_id = p_dest_project_id
11068              and ppe.attribute15 = ppst.proj_element_id   ---join with copy_from_proj_element_id to get the structure types
11069              and ppe.object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11070            from pa_proj_elements ppe,
11071                 pa_proj_structure_types ppst,
11072                 pa_structure_types pst
11073           where ppe.project_id = p_dest_project_id
11074             and ppe.attribute15 = ppst.proj_element_id
11075             and ppe.object_type = 'PA_STRUCTURES'
11076             and ppst.structure_type_id = pst.structure_type_id
11077             and pst.structure_type in ('WORKPLAN','FINANCIAL');
11078 
11079           --bug 3138959
11080           IF l_shared = 'N' AND l_workplan_enabled = 'Y'       -- For Split structures
11081              AND pa_project_pub.G_structure_in_rec.structure_type = 'WORKPLAN'
11082           THEN
11083               FOR cur_pa_struct_rec in cur_pa_struct LOOP
11084                    IF cur_pa_struct_rec.structure_type_id = 6          --Financial
11085                    THEN
11086                         --call PA_PROJECT_CORE2.copy_task to copy PA_TASKSi tasks.
11087 
11088                         pa_project_core2.copy_task (
11089                            x_orig_project_id   => p_src_project_id ,
11090                            x_new_project_id    => p_dest_project_id,
11091                            x_err_code          => x_err_code,
11092                            x_err_stage         => x_err_stage,
11093                            x_err_stack         => x_err_stack);
11094 
11095                         if ( x_err_code > 0 or x_err_code < 0 ) then
11096                              x_msg_data := x_err_stage;
11097                              raise FND_API.G_EXC_ERROR;
11098                         end if;
11099 
11100                        --Split; Creating Financial tasks
11101                        INSERT INTO pa_proj_elements(
11102                                 PROJ_ELEMENT_ID
11103                                ,PROJECT_ID
11104                                ,OBJECT_TYPE
11105                                ,ELEMENT_NUMBER
11106                                ,NAME
11107                                ,DESCRIPTION
11108                                ,STATUS_CODE
11109                                ,WF_STATUS_CODE
11110                                ,PM_SOURCE_CODE
11111                                ,PM_SOURCE_REFERENCE
11112                                ,CLOSED_DATE
11113                                ,LOCATION_ID
11114                                ,MANAGER_PERSON_ID
11115                                ,CARRYING_OUT_ORGANIZATION_ID
11116                                ,TYPE_ID
11117                                ,PRIORITY_CODE
11118                                ,CREATION_DATE
11119                                ,CREATED_BY
11120                                ,LAST_UPDATE_DATE
11121                                ,LAST_UPDATED_BY
11122                                ,LAST_UPDATE_LOGIN
11123                                ,RECORD_VERSION_NUMBER
11124                                ,REQUEST_ID
11125                                ,PROGRAM_APPLICATION_ID
11126                                ,PROGRAM_ID
11127                                ,PROGRAM_UPDATE_DATE
11128                                ,LINK_TASK_FLAG
11129                                ,BASELINE_START_DATE
11130                                ,BASELINE_FINISH_DATE
11131                                ,progress_outdated_flag
11132                                ,ATTRIBUTE_CATEGORY
11133                                ,ATTRIBUTE1
11134                                ,ATTRIBUTE2
11135                                ,ATTRIBUTE3
11136                                ,ATTRIBUTE4
11137                                ,ATTRIBUTE5
11138                                ,ATTRIBUTE6
11139                                ,ATTRIBUTE7
11140                                ,ATTRIBUTE8
11141                                ,ATTRIBUTE9
11142                                ,ATTRIBUTE10
11143                                ,ATTRIBUTE11
11144                                ,ATTRIBUTE12
11145                                ,ATTRIBUTE13
11146                                ,ATTRIBUTE14
11147                                ,ATTRIBUTE15
11148                                ,parent_structure_id
11149                                ,TYPE_CODE
11150                                ,INC_PROJ_PROGRESS_FLAG
11151                                ,WQ_ITEM_CODE
11152                                ,WQ_UOM_CODE
11153                                ,WQ_ACTUAL_ENTRY_CODE
11154                                ,TASK_PROGRESS_ENTRY_PAGE_ID
11155                                ,BASELINE_DURATION
11156                                ,PHASE_CODE
11157                                ,PHASE_VERSION_ID
11158                                ,source_object_id
11159                                ,source_object_type
11160                                ,PROGRESS_WEIGHT               --Bug 3616964
11161                                ,BASE_PERCENT_COMP_DERIV_CODE
11162                                ,FUNCTION_CODE
11163                                ,ENABLE_WF_FLAG
11164                                ,WF_ITEM_TYPE
11165                                ,WF_PROCESS
11166                                ,WF_START_LEAD_DAYS
11167                                )
11168                           SELECT
11169                                pt.task_id
11170                               ,p_dest_project_id
11171                               ,ppe.object_type
11172                               ,ppe.element_number
11173                               ,ppe.name
11174                               ,ppe.DESCRIPTION
11175                               ,INITIAL_STATUS_CODE             --bug 2827090
11176                               ,ppe.WF_STATUS_CODE
11177                               ,ppe.PM_SOURCE_CODE    --update the source code later
11178                               ,decode(ppe.PM_SOURCE_REFERENCE, null,pt.task_number, ppe.PM_SOURCE_REFERENCE )
11179                               ,ppe.CLOSED_DATE
11180                               ,ppe.LOCATION_ID
11181                               ,ppe.MANAGER_PERSON_ID
11182                               ,ppe.CARRYING_OUT_ORGANIZATION_ID
11183                               ,ppe.TYPE_ID
11184                               ,ppe.PRIORITY_CODE
11185                               ,SYSDATE
11186                               ,l_user_id
11187                               ,SYSDATE
11188                               ,l_user_id
11189                               ,l_login_id
11190                               ,ppe.RECORD_VERSION_NUMBER
11191                               ,ppe.REQUEST_ID
11192                               ,ppe.PROGRAM_APPLICATION_ID
11193                               ,ppe.PROGRAM_ID
11194                               ,ppe.PROGRAM_UPDATE_DATE
11195                               ,ppe.LINK_TASK_FLAG
11196                               ,ppe.BASELINE_START_DATE
11197                               ,ppe.BASELINE_FINISH_DATE
11198                               ,'N'    --,ppe.progress_outdated_flag
11199                               ,ppe.ATTRIBUTE_CATEGORY
11200                               ,ppe.ATTRIBUTE1
11201                               ,ppe.ATTRIBUTE2
11202                               ,ppe.ATTRIBUTE3
11203                               ,ppe.ATTRIBUTE4
11204                               ,ppe.ATTRIBUTE5
11205                               ,ppe.ATTRIBUTE6
11206                               ,ppe.ATTRIBUTE7
11207                               ,ppe.ATTRIBUTE8
11208                               ,ppe.ATTRIBUTE9
11209                               ,ppe.ATTRIBUTE10
11210                               ,ppe.ATTRIBUTE11
11211                               ,ppe.ATTRIBUTE12
11212                               ,ppe.ATTRIBUTE13
11213                               ,ppe.ATTRIBUTE14
11214                               ,ppe.proj_element_id    --attribute 15 is used to store old ids
11215                               ,cur_pa_struct_rec.proj_element_id
11216                                ,ppe.TYPE_CODE
11217                                ,ppe.INC_PROJ_PROGRESS_FLAG
11218                                ,ppe.WQ_ITEM_CODE
11219                                ,ppe.WQ_UOM_CODE
11220                                ,ppe.WQ_ACTUAL_ENTRY_CODE
11221                                ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
11222                                ,ppe.BASELINE_DURATION
11223                                ,ppe.PHASE_CODE
11224                                ,ppe.PHASE_VERSION_ID
11225                                ,p_dest_project_id
11226                                ,'PA_PROJECTS'
11227                                ,ppe.PROGRESS_WEIGHT              --Bug 3616964
11228                                ,ppe.BASE_PERCENT_COMP_DERIV_CODE
11229                                ,ppe.FUNCTION_CODE
11230                                ,'N'
11231                                ,ppe.WF_ITEM_TYPE
11232                                ,ppe.WF_PROCESS
11233                                ,ppe.WF_START_LEAD_DAYS
11234                          FROM pa_proj_elements ppe,
11235                               pa_tasks pt,
11236                               pa_task_types ptt     --bug 2827090
11237                         WHERE ppe.project_id  = p_src_project_id
11238                           AND pt.project_id   = p_dest_project_id
11239                           AND pt.task_number  = substrb(rtrim(ppe.element_number),1,25) -- Substrb added for Bug 5152448
11240                           AND ppe.parent_structure_id = cur_pa_struct_rec.attribute15
11241                           and ppe.object_type = 'PA_TASKS'
11242                           and ppe.type_id        = ptt.task_type_id    --bug 2827090
11243                            ;
11244 
11245                         l_financial_structure_id := cur_pa_struct_rec.proj_element_id;
11246                         ---update task reference in pa_tasks for all the
11247                            update pa_tasks
11248                               set PM_TASK_REFERENCE = task_number
11249                             where project_id = p_dest_project_id
11250                               and pm_task_reference IS NULL
11251                   ;
11252 
11253 
11254                         --bug 3140032
11255                         OPEN c_attach_tasks( cur_pa_struct_rec.attribute15,
11256                                              cur_pa_struct_rec.proj_element_id);
11257                         LOOP
11258                            FETCH c_attach_tasks INTO c_atch ;
11259                            if c_attach_tasks%notfound then
11260                               exit ;
11261                            end if;
11262                            fnd_attached_documents2_pkg.copy_attachments('PA_TASKS',
11263                                              c_atch.orig_task_id,
11264                                              null, null, null, null,
11265                                              'PA_TASKS',
11266                                              c_atch.new_task_id,
11267                                              null, null, null, null,
11268                                              FND_GLOBAL.USER_ID,
11269                                              FND_GLOBAL.LOGIN_ID,
11270                                              275, null, null);
11271 
11272                         END LOOP ;
11273                         CLOSE c_attach_tasks;
11274                         --bug 3140032
11275                 ELSIF cur_pa_struct_rec.structure_type_id = 1
11276                 THEN
11277 
11278                         ---update source reference in pa_proj_elements for all the
11279                            Update pa_proj_elements
11280                               set PM_SOURCE_CODE = ( SELECT PM_SOURCE_CODE FROM pa_proj_elements
11281                                                       WHERE project_id =  p_dest_project_id
11282                                                       AND object_type = 'PA_STRUCTURES'
11283                                                       AND proj_element_id = cur_pa_struct_rec.proj_element_id
11284                                                       AND PM_SOURCE_CODE IS NOT NULL
11285                                                       )
11286                             WHERE  proj_element_id = l_financial_structure_id
11287                              AND project_id = p_dest_project_id
11288                              AND PM_SOURCE_CODE IS NULL;
11289 
11290                         ---update source reference in pa_tasks for all the
11291                            Update pa_tasks
11292                               set PM_PRODUCT_CODE = ( SELECT PM_SOURCE_CODE FROM pa_proj_elements
11293                                                       WHERE project_id =  p_dest_project_id
11294                                                       AND object_type = 'PA_STRUCTURES'
11295                                                       AND proj_element_id = cur_pa_struct_rec.proj_element_id
11296                                                       AND PM_SOURCE_CODE IS NOT NULL
11297                                                       )
11298                             WHERE project_id = p_dest_project_id
11299                              AND PM_PRODUCT_CODE IS NULL;
11300 
11301                 END IF; --if structure type = 6
11302              END LOOP;
11303           END IF; --bug 3138959
11304 
11305     IF NVL( l_workplan_enabled, 'N' ) = 'N'
11306     THEN
11307       --Only FINANCIAL
11308       --Creating structure version first
11309       OPEN cur_elem_ver_seq;
11310       FETCH cur_elem_ver_seq INTO l_struc_version_id;
11311       CLOSE cur_elem_ver_seq;
11312 
11313 
11314       --First copy structure version and then copy all task versions
11315       --We cannot perform both with the same sql bcoz we need parent_structure version id for tasks.
11316       INSERT INTO pa_proj_element_versions(
11317                      ELEMENT_VERSION_ID
11318                     ,PROJ_ELEMENT_ID
11319                     ,OBJECT_TYPE
11320                     ,PROJECT_ID
11321                     ,PARENT_STRUCTURE_VERSION_ID
11322                     ,DISPLAY_SEQUENCE
11323                     ,WBS_LEVEL
11324                     ,WBS_NUMBER
11325                     ,CREATION_DATE
11326                     ,CREATED_BY
11327                     ,LAST_UPDATE_DATE
11328                     ,LAST_UPDATED_BY
11329                     ,LAST_UPDATE_LOGIN
11330                     ,RECORD_VERSION_NUMBER
11331                     ,attribute15          --this column is used to store structure ver id of the source project to be used to created relationships.
11332                     ,ATTRIBUTE_CATEGORY
11333                      ,ATTRIBUTE1
11334                      ,ATTRIBUTE2
11335                      ,ATTRIBUTE3
11336                      ,ATTRIBUTE4
11337                      ,ATTRIBUTE5
11338                      ,ATTRIBUTE6
11339                      ,ATTRIBUTE7
11340                      ,ATTRIBUTE8
11341                      ,ATTRIBUTE9
11342                      ,ATTRIBUTE10
11343                      ,ATTRIBUTE11
11344                      ,ATTRIBUTE12
11345                      ,ATTRIBUTE13
11346                      ,ATTRIBUTE14
11347                      ,TASK_UNPUB_VER_STATUS_CODE
11348                    ,source_object_id
11349                    ,source_object_type
11350                     )
11351               SELECT
11352                      l_struc_version_id
11353                     ,ppe.proj_element_id
11354                     ,ppev.object_type
11355                     ,p_dest_project_id
11356                     ,l_struc_version_id
11357                     ,ppev.DISPLAY_SEQUENCE
11358                     ,ppev.WBS_LEVEL
11359                     ,ppev.WBS_NUMBER
11360                     ,SYSDATE                     ------CREATION_DATE
11361                     ,l_user_id          ------CREATED_BY
11362                     ,SYSDATE                     ------LAST_UPDATE_DATE
11363                     ,l_user_id          ------LAST_UPDATED_BY
11364                     ,l_login_id         ------LAST_UPDATE_LOGIN
11365                     ,ppev.RECORD_VERSION_NUMBER                           ------RECORD_VERSION_NUMBER
11366                     ,ppev.element_version_id
11367                     ,ppev.ATTRIBUTE_CATEGORY
11368                      ,ppev.ATTRIBUTE1
11369                      ,ppev.ATTRIBUTE2
11370                      ,ppev.ATTRIBUTE3
11371                      ,ppev.ATTRIBUTE4
11372                      ,ppev.ATTRIBUTE5
11373                      ,ppev.ATTRIBUTE6
11374                      ,ppev.ATTRIBUTE7
11375                      ,ppev.ATTRIBUTE8
11376                      ,ppev.ATTRIBUTE9
11377                      ,ppev.ATTRIBUTE10
11378                      ,ppev.ATTRIBUTE11
11379                      ,ppev.ATTRIBUTE12
11380                      ,ppev.ATTRIBUTE13
11381                      ,ppev.ATTRIBUTE14
11382                      ,ppev.TASK_UNPUB_VER_STATUS_CODE
11383              ,p_dest_project_id
11384              ,'PA_PROJECTS'
11385              /*from pa_proj_element_versions ppev,
11386                   pa_proj_elements ppe
11387               where ppev.project_id = p_src_project_id
11388                 and ppe.project_id = p_dest_project_id
11389                 and ppev.proj_element_id = ppe.attribute15
11390                 and ppe.object_type = 'PA_STRUCTURES'
11391                 and ppev.object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11392              from pa_proj_element_Versions ppev,
11393                   pa_proj_elements ppe
11394             where ppev.project_id = p_src_project_id
11395               and ppe.project_id = p_dest_project_id
11396               and ppev.proj_element_id = ppe.attribute15
11397               and ppe.object_type = 'PA_STRUCTURES'
11398               and ppev.object_type = 'PA_STRUCTURES'
11399               and ppe.proj_element_id IN
11400                  (select ppe2.proj_element_id
11401                     from pa_proj_elements ppe2,
11402                          pa_proj_structure_types ppst,
11403                          pa_structure_types pst
11404 --                   where ppe2.project_id = p_src_project_id
11405                    where ppe2.project_id = p_dest_project_id  --Bug 3585699 SMukka Replaced p_src_project_id by p_dest_project_id
11406                      and ppe2.object_type = 'PA_STRUCTURES'
11407                      and ppe2.proj_element_id = ppst.proj_element_id
11408                      and ppst.structure_type_id = pst.structure_type_id
11409                      and pst.structure_type in ('WORKPLAN','FINANCIAL'));
11410 
11411 
11412 
11413            SELECT element_version_id INTO l_src_str_version_id
11414              /*FROM pa_proj_element_versions
11415             WHERE project_id = p_src_project_id
11416               AND object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11417              FROM pa_proj_element_versions
11418             WHERE project_id = p_src_project_id
11419               AND object_type = 'PA_STRUCTURES'
11420               and proj_element_id IN (select ppe2.proj_element_id
11421                                         from pa_proj_elements ppe2,
11422                                              pa_proj_structure_types ppst,
11423                                              pa_structure_types pst
11424                                        where ppe2.project_id = p_src_project_id
11425                                          and ppe2.object_type = 'PA_STRUCTURES'
11426                                          and ppe2.proj_element_id = ppst.proj_element_id
11427                                          and ppst.structure_type_id = pst.structure_type_id
11428                                          and pst.structure_type in ('WORKPLAN','FINANCIAL'));
11429 
11430 
11431 --bug 3010538
11432 --added PROCESS_UPDATE_WBS_FLAG
11433       INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
11434          PEV_STRUCTURE_ID
11435         ,ELEMENT_VERSION_ID
11436         ,VERSION_NUMBER
11437         ,NAME
11438         ,PROJECT_ID
11439         ,PROJ_ELEMENT_ID
11440         ,DESCRIPTION
11441         ,EFFECTIVE_DATE
11442         ,PUBLISHED_DATE
11443         ,PUBLISHED_BY_PERSON_ID
11444         ,CURRENT_BASELINE_DATE
11445         ,CURRENT_FLAG
11446         ,CURRENT_BASELINE_PERSON_ID
11447         ,ORIGINAL_BASELINE_DATE
11448         ,ORIGINAL_FLAG
11449         ,ORIGINAL_BASELINE_PERSON_ID
11450         ,LOCK_STATUS_CODE
11451         ,LOCKED_BY_PERSON_ID
11452         ,LOCKED_DATE
11453         ,STATUS_CODE
11454         ,WF_STATUS_CODE
11455         ,LATEST_EFF_PUBLISHED_FLAG
11456         ,RECORD_VERSION_NUMBER
11457         ,WBS_RECORD_VERSION_NUMBER
11458         ,CREATION_DATE
11459         ,CREATED_BY
11460         ,LAST_UPDATE_DATE
11461         ,LAST_UPDATED_BY
11462         ,LAST_UPDATE_LOGIN
11463         ,change_reason_code
11464         ,PROCESS_UPDATE_WBS_FLAG
11465         ,current_working_flag   /* FPM bug 3301192 */
11466        ,source_object_id
11467        ,source_object_type
11468          )
11469        SELECT
11470          pa_proj_elem_ver_structure_s.nextval
11471         ,l_struc_version_id
11472         ,1
11473         --,ppevs.name, rtarway, 3655698, replaced ppevs.name with ppe.name
11474         ,ppe.name
11475         ,p_dest_project_id
11476         ,ppe.proj_element_id
11477         --,ppevs.DESCRIPTION , rtarway, 3655698 replaced ppevs.DESCRIPTION with ppe.DESCRIPTION
11478         ,ppe.description
11479         ,ppevs.EFFECTIVE_DATE
11480         ,decode(p_dest_template_flag, 'N', sysdate, to_date(NULL)) --bug 2838547
11481         ,decode(p_dest_template_flag, 'N', l_publish_person_id, NULL)     --bug 2838547
11482         ,ppevs.CURRENT_BASELINE_DATE
11483         ,ppevs.CURRENT_FLAG
11484         ,ppevs.CURRENT_BASELINE_PERSON_ID
11485         ,ppevs.ORIGINAL_BASELINE_DATE
11486         ,ppevs.ORIGINAL_FLAG
11487         ,ppevs.ORIGINAL_BASELINE_PERSON_ID
11488         ,'UNLOCKED'
11489         ,null
11490         ,null
11491         ,decode( p_dest_template_flag, 'N', 'STRUCTURE_PUBLISHED', ppevs.STATUS_CODE )
11492         ,ppevs.WF_STATUS_CODE
11493         ,decode( p_dest_template_flag, 'N', 'Y', ppevs.LATEST_EFF_PUBLISHED_FLAG )
11494         ,ppevs.RECORD_VERSION_NUMBER
11495         ,ppevs.WBS_RECORD_VERSION_NUMBER
11496         ,SYSDATE
11497         ,l_user_id
11498         ,SYSDATE
11499         ,l_user_id
11500         ,l_login_id
11501         ,ppevs.change_reason_code
11502         ,'N'
11503         ,ppevs.current_working_flag    /* FPM bug 3301192 */
11504     ,p_dest_project_id
11505     ,'PA_PROJECTS'
11506         /*FROM PA_PROJ_ELEM_VER_STRUCTURE ppevs, pa_proj_elements ppe
11507         WHERE ppevs.project_id = p_src_project_id
11508           AND ppe.project_id = p_dest_project_id
11509           and ppevs.proj_element_id = ppe.attribute15
11510           AND ppe.object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11511          FROM PA_PROJ_ELEM_VER_STRUCTURE ppevs, pa_proj_elements ppe
11512         WHERE ppevs.project_id = p_src_project_id
11513           AND ppe.project_id = p_dest_project_id
11514           and ppevs.proj_element_id = ppe.attribute15
11515           AND ppe.object_type = 'PA_STRUCTURES'
11516       and ppe.proj_element_id IN (SELECT ppe2.proj_element_id
11517                                         FROM pa_proj_elements ppe2,
11518                                              pa_proj_structure_types ppst,
11519                                              pa_structure_types pst
11520                                        WHERE ppe2.project_id = p_dest_project_id
11521                                          AND ppe2.object_type = 'PA_STRUCTURES'
11522                                          AND ppe2.proj_element_id = ppst.proj_element_id
11523                                          AND ppst.structure_type_id = pst.structure_type_id
11524                                          AND pst.structure_type in ('WORKPLAN','FINANCIAL'));
11525     --Added by rtarway for BUG 3951701
11526     --Copy workplan attributes for financial only structures
11527 
11528          INSERT INTO pa_proj_workplan_attr(
11529           PROJ_ELEMENT_ID
11530          ,PROJECT_ID
11531          ,LAST_UPDATE_DATE
11532          ,LAST_UPDATED_BY
11533          ,CREATION_DATE
11534          ,CREATED_BY
11535          ,WP_APPROVAL_REQD_FLAG
11536          ,WP_AUTO_PUBLISH_FLAG
11537          ,WP_DEFAULT_DISPLAY_LVL
11538          ,WP_ENABLE_VERSION_FLAG
11539          ,AUTO_PUB_UPON_CREATION_FLAG
11540          ,AUTO_SYNC_TXN_DATE_FLAG
11541          ,WP_APPROVER_SOURCE_ID
11542          ,WP_APPROVER_SOURCE_TYPE
11543          ,RECORD_VERSION_NUMBER
11544          ,LAST_UPDATE_LOGIN
11545          ,TXN_DATE_SYNC_BUF_DAYS
11546          ,LIFECYCLE_VERSION_ID
11547          ,CURRENT_PHASE_VERSION_ID
11548          ,SCHEDULE_THIRD_PARTY_FLAG
11549          ,ALLOW_LOWEST_TSK_DEP_FLAG
11550          ,AUTO_ROLLUP_SUBPROJ_FLAG
11551          ,THIRD_PARTY_SCHEDULE_CODE
11552          ,source_object_id
11553          ,source_object_type
11554          )
11555          SELECT
11556           ppe.PROJ_ELEMENT_ID
11557          ,ppe.PROJECT_ID
11558          ,SYSDATE
11559          ,l_user_id
11560          ,SYSDATE
11561          ,l_user_id
11562          ,ppwa.WP_APPROVAL_REQD_FLAG
11563          ,ppwa.WP_AUTO_PUBLISH_FLAG
11564          ,ppwa.WP_DEFAULT_DISPLAY_LVL
11565          ,ppwa.WP_ENABLE_VERSION_FLAG
11566          ,ppwa.AUTO_PUB_UPON_CREATION_FLAG
11567          ,ppwa.AUTO_SYNC_TXN_DATE_FLAG
11568          ,ppwa.WP_APPROVER_SOURCE_ID
11569          ,ppwa.WP_APPROVER_SOURCE_TYPE
11570          ,ppwa.RECORD_VERSION_NUMBER
11571          ,l_login_id
11572          ,ppwa.TXN_DATE_SYNC_BUF_DAYS
11573          ,ppwa.LIFECYCLE_VERSION_ID
11574          ,ppwa.CURRENT_PHASE_VERSION_ID
11575          ,ppwa.SCHEDULE_THIRD_PARTY_FLAG
11576          ,ppwa.ALLOW_LOWEST_TSK_DEP_FLAG
11577          ,ppwa.AUTO_ROLLUP_SUBPROJ_FLAG
11578          ,ppwa.THIRD_PARTY_SCHEDULE_CODE
11579          ,ppe.PROJECT_ID
11580          ,'PA_PROJECTS'
11581          FROM pa_proj_elements ppe,
11582               pa_proj_workplan_attr ppwa
11583          WHERE ppwa.project_id = p_src_project_id
11584          AND   ppe.attribute15 = ppwa.proj_element_id
11585          AND   ppe.project_id = p_dest_project_id
11586          AND   ppe.object_type='PA_STRUCTURES';
11587 
11588          --Copy progress attributes for financial only structures
11589          INSERT INTO pa_proj_progress_attr(
11590           PROJ_PROGRESS_ATTR_ID
11591          ,OBJECT_TYPE
11592          ,OBJECT_ID
11593          ,LAST_UPDATE_DATE
11594          ,LAST_UPDATED_BY
11595          ,CREATION_DATE
11596          ,CREATED_BY
11597          ,LAST_UPDATE_LOGIN
11598          ,PROJECT_ID
11599          ,PROGRESS_CYCLE_ID
11600          ,WQ_ENABLE_FLAG
11601          ,REMAIN_EFFORT_ENABLE_FLAG
11602          ,PERCENT_COMP_ENABLE_FLAG
11603          ,NEXT_PROGRESS_UPDATE_DATE
11604          ,RECORD_VERSION_NUMBER
11605          ,TASK_WEIGHT_BASIS_CODE
11606          ,ALLOW_COLLAB_PROG_ENTRY
11607          ,ALLOW_PHY_PRCNT_CMP_OVERRIDES
11608          ,STRUCTURE_TYPE
11609          )
11610          SELECT
11611           PA_PROJ_PROGRESS_ATTR_S.nextval
11612          ,ppe.OBJECT_TYPE
11613          ,ppe.proj_element_ID
11614          ,sysdate
11615          ,l_user_id
11616          ,SYSDATE
11617          ,l_user_id
11618          ,l_login_id
11619          ,p_dest_project_id
11620          ,pppa.PROGRESS_CYCLE_ID
11621          ,pppa.WQ_ENABLE_FLAG
11622          ,pppa.REMAIN_EFFORT_ENABLE_FLAG
11623          ,pppa.PERCENT_COMP_ENABLE_FLAG
11624          ,pppa.NEXT_PROGRESS_UPDATE_DATE
11625          ,pppa.RECORD_VERSION_NUMBER
11626          ,pppa.TASK_WEIGHT_BASIS_CODE
11627          ,pppa.ALLOW_COLLAB_PROG_ENTRY
11628          ,pppa.ALLOW_PHY_PRCNT_CMP_OVERRIDES
11629          ,pppa.STRUCTURE_TYPE
11630          FROM pa_proj_progress_attr pppa,
11631               pa_proj_elements ppe
11632          WHERE ppe.project_id = p_dest_project_id
11633          AND   ppe.attribute15 = pppa.object_id
11634          AND   pppa.project_id = p_src_project_id
11635          AND   pppa.object_type = 'PA_STRUCTURES' ;
11636 
11637    --End Added by rtarway for BUG 3951701
11638 
11639     ELSE
11640 
11641         i := 1;
11642         IF l_shared = 'Y'
11643         THEN
11644            FOR l_get_structure_attr_csr_rec in l_get_structure_attr_csr LOOP
11645             l_dest_str_versions_tbl(i).src_str_version_id := l_get_structure_attr_csr_rec.element_version_id;
11646             l_dest_str_versions_tbl(i).src_str_status := l_get_structure_attr_csr_rec.status_code;
11647             l_dest_str_versions_tbl(i).latest_pub_flag := l_get_structure_attr_csr_rec.LATEST_EFF_PUBLISHED_FLAG;
11648             l_dest_str_versions_tbl(i).current_flag := l_get_structure_attr_csr_rec.current_flag;
11649             i := i + 1;
11650           END LOOP;
11651         ELSE
11652            FOR l_get_structure_attr_csr_rec2 in l_get_structure_attr_csr2 LOOP
11653             l_dest_str_versions_tbl(i).src_str_version_id := l_get_structure_attr_csr_rec2.element_version_id;
11654             l_dest_str_versions_tbl(i).src_str_status := l_get_structure_attr_csr_rec2.status_code;
11655             l_dest_str_versions_tbl(i).latest_pub_flag := l_get_structure_attr_csr_rec2.LATEST_EFF_PUBLISHED_FLAG;
11656             l_dest_str_versions_tbl(i).src_stru_type_id := l_get_structure_attr_csr_rec2.structure_type_id;
11657             l_dest_str_versions_tbl(i).current_flag := l_get_structure_attr_csr_rec2.current_flag;
11658             i := i + 1;
11659           END LOOP;
11660         END IF;
11661         IF l_shared = 'Y'
11662         THEN
11663             IF l_versioning_enabled = 'Y'
11664             THEN
11665                 IF l_src_template_flag = 'N'   --source is a project
11666                 THEN
11667                     IF  l_dest_template_flag = 'N'
11668                     THEN
11669                         --senario 1 page 5
11670                         --Bug 2955589. Need to copy only one working version to the destination project in AMG
11671                         --context. Set the copy flag to N for published versions. Set the copy flag to Y for the
11672                         --first working version. If there are no working versions create a new one.
11673                         l_working_ver_count := 0;
11674                         FOR j in 1..l_dest_str_versions_tbl.count LOOP
11675                             IF ( ( l_dest_str_versions_tbl(j).latest_pub_flag = 'Y' OR
11676                                    l_dest_str_versions_tbl(j).current_flag = 'Y' ) AND     --baselined version
11677                                  l_dest_str_versions_tbl(j).src_str_status = 'STRUCTURE_PUBLISHED' )
11678                             THEN
11679                                 --l_dest_str_versions_tbl(j).copy_flag := 'Y';  Bug 2955589
11680                                 l_dest_str_versions_tbl(j).copy_flag := 'N';
11681                                 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
11682                             ELSIF l_dest_str_versions_tbl(j).src_str_status  <> 'STRUCTURE_PUBLISHED'
11683                             THEN
11684                                 IF l_working_ver_count = 0 THEN   --Bug 2955589
11685                                    l_dest_str_versions_tbl(j).copy_flag := 'Y';
11686                                 ELSE
11687                                    l_dest_str_versions_tbl(j).copy_flag := 'N';
11688                                 END IF;
11689                                 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
11690                                 l_working_ver_count := l_working_ver_count + 1;
11691                             END IF;
11692                         END LOOP;
11693                         -- If no working version was found, set the flag so that the version can be created.
11694                         -- Bug 2955589.
11695                         IF l_working_ver_count = 0 THEN
11696                               l_create_fin_version := 'Y';
11697                         END IF;
11698                     ELSE
11699                         --senario 7 page 5
11700                         FOR j in 1..l_dest_str_versions_tbl.count LOOP
11701                             IF ( l_dest_str_versions_tbl(j).latest_pub_flag = 'Y' AND
11702                                  l_dest_str_versions_tbl(j).src_str_status = 'STRUCTURE_PUBLISHED' )
11703                             THEN
11704                                 l_dest_str_versions_tbl(j).copy_flag := 'Y';
11705                                 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
11706                                 l_copy_flag_set := 'Y';
11707                             END IF;
11708                         END LOOP;
11709                         IF NVL( l_copy_flag_set, 'N' ) = 'N'    --latest published was not found, now look for latest updated unpublished str ver
11710                         THEN
11711                             l_max_date := null;
11712                             FOR j in 1..l_dest_str_versions_tbl.count LOOP --look for last updated unpublished version
11713                                IF l_dest_str_versions_tbl(j).src_str_status <> 'STRUCTURE_PUBLISHED'
11714                                THEN
11715                                     --Find out which unpublihsed version is last updated.
11716                                     IF l_max_date IS NULL
11717                                     THEN
11718                                         l_latst_upd_wrkng_str_ver := l_dest_str_versions_tbl(j).src_str_version_id;
11719                                         l_max_date := PA_PROJ_TASK_STRUC_PUB.GET_MAX_LAST_UPD_DT_WRKNG_VER( l_dest_str_versions_tbl(j).src_str_version_id );
11720                                     ELSE
11721                                         l_max_date2 := PA_PROJ_TASK_STRUC_PUB.GET_MAX_LAST_UPD_DT_WRKNG_VER( l_dest_str_versions_tbl(j).src_str_version_id );
11722                                         IF  l_max_date2 > l_max_date
11723                                         THEN
11724                                            --for bug 2834111
11725                                            l_max_date := l_max_date2;
11726                                            l_latst_upd_wrkng_str_ver := l_dest_str_versions_tbl(j).src_str_version_id;
11727                                         END IF;
11728                                     END IF;
11729                                END IF;  --l_dest_str_versions_tbl(j).src_str_status <> 'STRUCTURE_PUBLISHED'
11730                             END LOOP; --look for last updated unpublished version
11731                             --for bug 2834111
11732                             --mark the last updated unpublished version for copying.
11733                             FOR j in 1..l_dest_str_versions_tbl.count LOOP
11734                                IF l_dest_str_versions_tbl(j).src_str_version_id = l_latst_upd_wrkng_str_ver
11735                                THEN
11736                                   l_dest_str_versions_tbl(j).copy_flag := 'Y';
11737                                   l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
11738                                END IF;
11739                            END LOOP;
11740                         END IF; --NVL( l_copy_flag_set, 'N' ) := 'N'    --latest published was not found, now look for latest updated unpublished str ver
11741                     END IF;  --l_dest_template_flag = 'N'
11742                 ELSE
11743                     --source is a template
11744                     --senario 3  on page 5
11745                     FOR j in 1..l_dest_str_versions_tbl.count LOOP
11746                         l_dest_str_versions_tbl(j).copy_flag := 'Y';
11747                         IF  l_dest_template_flag = 'N' ---senario 3
11748                         THEN
11749                                /* Bug 2955589. Irrespective of the value in auto publish flag set the version
11750                                   status to working so that the process_task_structure_bulk api will process
11751                                   on this version. Refer to the bug for more details.
11752 
11753                                IF l_auto_pub_enabled = 'N'
11754                                THEN
11755                                   l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
11756                                ELSE
11757                                   l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
11758 --bug 2858216
11759                                   l_dest_str_versions_tbl(j).current_flag := 'Y';
11760                                   l_dest_str_versions_tbl(j).latest_pub_flag := 'Y';
11761 
11762                                END IF;
11763                                */
11764                                l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
11765                         ELSE   ---senario 5
11766                             l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
11767                         END IF;
11768                         exit;
11769                     END LOOP;
11770                 END IF; --l_src_template_flag = 'N'
11771             ELSE
11772                 --Shared and Versioning disabled.
11773                 --senario 2, 4, 6  8 page 5
11774                 FOR j in 1..l_dest_str_versions_tbl.count LOOP
11775                     l_dest_str_versions_tbl(j).copy_flag := 'Y';
11776                     IF  l_dest_template_flag = 'N'  --senario 2 , 4
11777                     THEN
11778                         l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
11779                     ELSE
11780                         --senario 6 ,  8
11781                         l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
11782                     END IF;
11783                     exit;
11784                 END LOOP;
11785             END IF; --l_versioning_enabled = 'Y'
11786         ELSE
11787             --Split structrues
11788             IF l_versioning_enabled = 'Y'
11789             THEN
11790                 IF l_src_template_flag = 'N'   --source is a project
11791                 THEN
11792                     IF  l_dest_template_flag = 'N'
11793                     THEN
11794                         --senario 9; page 6
11795                         --Bug 2955589. Need to copy only one working version to the destination project in AMG
11796                         --context. Set the copy flag to N for published versions. Set the copy flag to Y for the
11797                         --first working version. If there are no working versions create a new one.
11798                         l_working_ver_count := 0;
11799                         FOR j in 1..l_dest_str_versions_tbl.count LOOP
11800                            --Copying workplan str
11801                            IF l_dest_str_versions_tbl(j).src_stru_type_id = 1   --WORKPLAN
11802                            THEN
11803                               IF ( ( l_dest_str_versions_tbl(j).latest_pub_flag = 'Y' OR
11804                                    l_dest_str_versions_tbl(j).current_flag = 'Y' ) AND     --baselined version
11805                                  l_dest_str_versions_tbl(j).src_str_status = 'STRUCTURE_PUBLISHED' )
11806                               THEN
11807                                   --l_dest_str_versions_tbl(j).copy_flag := 'Y';  --Bug 2955589
11808                                   l_dest_str_versions_tbl(j).copy_flag := 'N';
11809                                   l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
11810                                ELSIF ( l_dest_str_versions_tbl(j).src_str_status  <> 'STRUCTURE_PUBLISHED' )
11811                                THEN
11812                                   IF l_working_ver_count = 0 THEN   --Bug 2955589
11813                                     l_dest_str_versions_tbl(j).copy_flag := 'Y';
11814                                   ELSE
11815                                      l_dest_str_versions_tbl(j).copy_flag := 'N';
11816                                   END IF;
11817                                   l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
11818                                   l_working_ver_count := l_working_ver_count + 1;
11819                                END IF;
11820                            ELSE
11821                                --Copying financial str
11822                                IF NVL( l_fin_str_copy_flag, 'N' ) = 'N'
11823                                THEN
11824                                    l_dest_str_versions_tbl(j).copy_flag := 'Y';
11825                                    l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
11826                                    l_fin_str_copy_flag := 'Y';
11827                                END IF;
11828                            END IF;
11829                         END LOOP;
11830                         -- If no working version was found, set the flag so that a version can be created.
11831                         -- Bug 2955589.
11832                         IF l_working_ver_count = 0 THEN
11833                               l_create_wk_version := 'Y';
11834                         END IF;
11835                     ELSE
11836                         --senario 15 page 6
11837                         FOR j in 1..l_dest_str_versions_tbl.count LOOP
11838                            IF l_dest_str_versions_tbl(j).src_stru_type_id = 1   --WORKPLAN
11839                            THEN
11840                               IF ( l_dest_str_versions_tbl(j).latest_pub_flag = 'Y' AND
11841                                    l_dest_str_versions_tbl(j).src_str_status = 'STRUCTURE_PUBLISHED' )
11842                               THEN
11843                                   l_dest_str_versions_tbl(j).copy_flag := 'Y';
11844                                   l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
11845                                   l_copy_flag_set := 'Y';
11846                               END IF;
11847                            ELSE
11848                                --Copying financial str
11849                                IF NVL( l_fin_str_copy_flag, 'N' ) = 'N'
11850                                THEN
11851                                    l_dest_str_versions_tbl(j).copy_flag := 'Y';
11852                                    l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
11853                                    l_fin_str_copy_flag := 'Y';
11854                                END IF;
11855                            END IF;
11856                         END LOOP;
11857                         IF NVL( l_copy_flag_set, 'N' ) = 'N'    --latest published was not found, now look for latest updated unpublished str ver
11858                         THEN
11859                             l_max_date := null;
11860                             FOR j in 1..l_dest_str_versions_tbl.count LOOP --look for last updated unpublished version
11861                              IF l_dest_str_versions_tbl(j).src_stru_type_id = 1   --WORKPLAN
11862                              THEN
11863                                IF l_dest_str_versions_tbl(j).src_str_status <> 'STRUCTURE_PUBLISHED'
11864                                THEN
11865                                     --Find out which unpublihsed version is last updated.
11866                                     IF l_max_date IS NULL
11867                                     THEN
11868                                         l_latst_upd_wrkng_str_ver := l_dest_str_versions_tbl(j).src_str_version_id;
11869                                         l_max_date := PA_PROJ_TASK_STRUC_PUB.GET_MAX_LAST_UPD_DT_WRKNG_VER( l_dest_str_versions_tbl(j).src_str_version_id );
11870                                     ELSE
11871                                         l_max_date2 := PA_PROJ_TASK_STRUC_PUB.GET_MAX_LAST_UPD_DT_WRKNG_VER( l_dest_str_versions_tbl(j).src_str_version_id );
11872                                         IF  l_max_date2 > l_max_date
11873                                         THEN
11874                                            --for bug 2834111
11875                                            l_max_date := l_max_date2;
11876                                            l_latst_upd_wrkng_str_ver := l_dest_str_versions_tbl(j).src_str_version_id;
11877                                         END IF;
11878                                     END IF;
11879                                END IF;  --l_dest_str_versions_tbl(j).src_str_status <> 'STRUCTURE_PUBLISHED'
11880                              END IF;  --l_dest_str_versions_tbl(j).src_stru_type_id = 1   --WORKPLAN
11881                             END LOOP; --look for last updated unpublished version
11882                             --for bug 2834111
11883                             --mark the last updated unpublished version for copying.
11884                             FOR j in 1..l_dest_str_versions_tbl.count LOOP
11885                                IF l_dest_str_versions_tbl(j).src_str_version_id = l_latst_upd_wrkng_str_ver
11886                                THEN
11887                                   l_dest_str_versions_tbl(j).copy_flag := 'Y';
11888                                   l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
11889                                END IF;
11890                            END LOOP;
11891 
11892                         END IF; --NVL( l_copy_flag_set, 'N' ) := 'N'    --latest published was not found, now look for latest updated unpublished str ver
11893                     END IF;  --l_dest_template_flag = 'N'
11894                 ELSE
11895                     --source is a template
11896                     --senario 11  on page 5
11897                     --copying workplan
11898                     FOR j in 1..l_dest_str_versions_tbl.count LOOP
11899                         IF l_dest_str_versions_tbl(j).src_stru_type_id = 1   --WORKPLAN
11900                         THEN
11901                            l_dest_str_versions_tbl(j).copy_flag := 'Y';
11902                            IF  l_dest_template_flag = 'N' ---senario 11
11903                            THEN
11904                                /* Bug 2955589. Irrespective of the value in auto publish flag set the version
11905                                   status to working so that the process_task_structure_bulk api will process
11906                                   on this version. Refer to the bug for more details.
11907 
11908                                IF l_auto_pub_enabled = 'N'
11909                                THEN
11910                                   l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
11911                                ELSE
11912                                   l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
11913 --bug 2858216
11914                                   l_dest_str_versions_tbl(j).current_flag := 'Y';
11915                                   l_dest_str_versions_tbl(j).latest_pub_flag := 'Y';
11916                                END IF;
11917                                */
11918                                l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
11919 
11920                            ELSE   ---senario 13
11921                                l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
11922                            END IF;
11923                           exit;
11924                         END IF;
11925                     END LOOP;
11926                     --senario 11  on page 5
11927                     --copying financail
11928                     FOR j in 1..l_dest_str_versions_tbl.count LOOP
11929                         IF l_dest_str_versions_tbl(j).src_stru_type_id = 6   --FINANCIAL
11930                         THEN
11931                            l_dest_str_versions_tbl(j).copy_flag := 'Y';
11932                            IF  l_dest_template_flag = 'N' ---senario 11
11933                            THEN
11934                                l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
11935                            ELSE   ---senario 13
11936                                l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
11937                            END IF;
11938                           exit;
11939                         END IF;
11940                     END LOOP;
11941                 END IF; --l_src_template_flag = 'N'
11942             ELSE
11943                 --Versioning disabled.
11944                 IF l_src_template_flag = 'N'   --source is a project
11945                 THEN
11946                     --senario 10 and 16; page 6 and 7 respectively
11947                      --copying workplan
11948                      FOR j in 1..l_dest_str_versions_tbl.count LOOP
11949                        IF l_dest_str_versions_tbl(j).src_stru_type_id = 1   --WORKPLAN
11950                        THEN
11951                          l_dest_str_versions_tbl(j).copy_flag := 'Y';
11952                          IF  l_dest_template_flag = 'N'  --senario 10
11953                          THEN
11954                              l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
11955                          ELSE
11956                              --senario 8
11957                              l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
11958                          END IF;
11959                          exit;
11960                        END IF;
11961                      END LOOP;
11962                      --copying financial
11963                      FOR j in 1..l_dest_str_versions_tbl.count LOOP
11964                        IF l_dest_str_versions_tbl(j).src_stru_type_id = 6   --FINANCIAL
11965                        THEN
11966                          l_dest_str_versions_tbl(j).copy_flag := 'Y';
11967                          IF  l_dest_template_flag = 'N'  --senario 16
11968                          THEN
11969                              l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
11970                          ELSE
11971                              --senario 8
11972                              l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
11973                          END IF;
11974                          exit;
11975                        END IF;
11976                      END LOOP;
11977                 ELSE
11978                     --source is a template
11979                     --senario 12 and 14; page 6
11980                      FOR j in 1..l_dest_str_versions_tbl.count LOOP
11981                         IF l_dest_template_flag = 'N'
11982                         THEN
11983                             l_dest_str_versions_tbl(j).copy_flag := 'Y';
11984                             l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
11985                          ELSE
11986                             l_dest_str_versions_tbl(j).copy_flag := 'Y';
11987                             l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
11988                         END IF;
11989                      END LOOP;
11990                 END IF; --l_src_template_flag = 'N'
11991             END IF; --l_versioning_enabled = 'Y'
11992         END IF;  --Share Y or N
11993 
11994         --WORKPLAN  ENABLED ( SHARED or SPLIT )
11995 
11996        IF NOT l_dest_str_versions_tbl.exists(1)
11997           AND nvl(l_create_fin_version,'N') = 'N'   --Bug 2955589
11998           AND nvl(l_create_wk_version,'N') = 'N'
11999        THEN
12000            return;
12001        END IF;
12002 
12003              IF l_shared = 'N'
12004              THEN
12005                UPDATE pa_proj_elements ppe
12006                   set name = substr(l_project_name||l_append||l_suffix, 1, 240)
12007                 WHERE project_id = p_dest_project_id
12008                   AND object_type = 'PA_STRUCTURES'
12009                   AND EXISTS ( SELECT proj_element_id FROM pa_proj_structure_types
12010                                 WHERE proj_element_id = ppe.proj_element_id
12011                                   AND structure_type_id = 1 );
12012              END IF;
12013 
12014                INSERT INTO pa_proj_workplan_attr(
12015                             PROJ_ELEMENT_ID
12016                            ,PROJECT_ID
12017                            ,LAST_UPDATE_DATE
12018                            ,LAST_UPDATED_BY
12019                            ,CREATION_DATE
12020                            ,CREATED_BY
12021                            ,WP_APPROVAL_REQD_FLAG
12022                            ,WP_AUTO_PUBLISH_FLAG
12023                            ,WP_DEFAULT_DISPLAY_LVL
12024                            ,WP_ENABLE_VERSION_FLAG
12025                            ,AUTO_PUB_UPON_CREATION_FLAG
12026                            ,AUTO_SYNC_TXN_DATE_FLAG
12027                            ,WP_APPROVER_SOURCE_ID
12028                            ,WP_APPROVER_SOURCE_TYPE
12029                            ,RECORD_VERSION_NUMBER
12030                            ,LAST_UPDATE_LOGIN
12031                            ,TXN_DATE_SYNC_BUF_DAYS
12032                            ,LIFECYCLE_VERSION_ID
12033                            ,CURRENT_PHASE_VERSION_ID
12034 --bug 4061876
12035          ,SCHEDULE_THIRD_PARTY_FLAG
12036          ,ALLOW_LOWEST_TSK_DEP_FLAG
12037          ,AUTO_ROLLUP_SUBPROJ_FLAG
12038          ,THIRD_PARTY_SCHEDULE_CODE
12039                         ,source_object_id
12040                         ,source_object_type
12041                           )
12042                       SELECT
12043                             ppe.PROJ_ELEMENT_ID
12044                            ,ppe.PROJECT_ID
12045                            ,SYSDATE
12046                            ,l_user_id
12047                            ,SYSDATE
12048                            ,l_user_id
12049                            ,ppwa.WP_APPROVAL_REQD_FLAG
12050                            ,ppwa.WP_AUTO_PUBLISH_FLAG
12051                            ,ppwa.WP_DEFAULT_DISPLAY_LVL
12052                            ,ppwa.WP_ENABLE_VERSION_FLAG
12053                            ,ppwa.AUTO_PUB_UPON_CREATION_FLAG
12054                            ,ppwa.AUTO_SYNC_TXN_DATE_FLAG
12055                            ,ppwa.WP_APPROVER_SOURCE_ID
12056                            ,ppwa.WP_APPROVER_SOURCE_TYPE
12057                            ,ppwa.RECORD_VERSION_NUMBER
12058                            ,ppwa.LAST_UPDATE_LOGIN
12059                            ,ppwa.TXN_DATE_SYNC_BUF_DAYS
12060                            ,ppwa.LIFECYCLE_VERSION_ID
12061                            ,ppwa.CURRENT_PHASE_VERSION_ID
12062 --bug 4061876
12063          ,ppwa.SCHEDULE_THIRD_PARTY_FLAG
12064          ,ppwa.ALLOW_LOWEST_TSK_DEP_FLAG
12065          ,ppwa.AUTO_ROLLUP_SUBPROJ_FLAG
12066          ,ppwa.THIRD_PARTY_SCHEDULE_CODE
12067                            ,ppe.PROJECT_ID
12068                            ,'PA_PROJECTS'
12069                          /*FROM pa_proj_elements ppe,
12070                               pa_proj_workplan_attr ppwa
12071                          WHERE ppe.project_id = p_dest_project_id
12072                            and object_type = 'PA_STRUCTURES'
12073                            and ppwa.project_id = p_src_project_id
12074                            and ppwa.proj_element_id = ppe.attribute15;*//*Commented below query and following criteria by SMUKKA */
12075                          FROM pa_proj_elements ppe,
12076                               pa_proj_workplan_attr ppwa
12077                         WHERE ppwa.project_id = p_src_project_id
12078             AND   ppe.project_id = p_dest_project_id
12079             AND   ppe.object_type ='PA_STRUCTURES'
12080             AND   ppe.attribute15 = ppwa.proj_element_id
12081             AND   PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y'; /* bug 3621613 */
12082 
12083 --bug 3010538
12084 --added task weighting basis code
12085               INSERT INTO pa_proj_progress_attr(
12086                        PROJ_PROGRESS_ATTR_ID
12087                       ,OBJECT_TYPE
12088                       ,OBJECT_ID
12089                       ,LAST_UPDATE_DATE
12090                       ,LAST_UPDATED_BY
12091                       ,CREATION_DATE
12092                       ,CREATED_BY
12093                       ,LAST_UPDATE_LOGIN
12094                       ,PROJECT_ID
12095                       ,PROGRESS_CYCLE_ID
12096                       ,WQ_ENABLE_FLAG
12097                       ,REMAIN_EFFORT_ENABLE_FLAG
12098                       ,PERCENT_COMP_ENABLE_FLAG
12099                       ,NEXT_PROGRESS_UPDATE_DATE
12100                       ,RECORD_VERSION_NUMBER
12101                       ,TASK_WEIGHT_BASIS_CODE
12102         /* FP-M Bug # 3420093. Modified: copy_structures_bulk. */
12103                       ,ALLOW_COLLAB_PROG_ENTRY
12104                       ,ALLOW_PHY_PRCNT_CMP_OVERRIDES
12105                       ,STRUCTURE_TYPE
12106         /* FP-M Bug # 3420093. Modified: copy_structures_bulk. */
12107                    ) SELECT
12108                            PA_PROJ_PROGRESS_ATTR_S.nextval
12109                           ,ppe.OBJECT_TYPE
12110                           ,ppe.proj_element_ID
12111                           ,sysdate
12112                           ,l_user_id
12113                           ,SYSDATE
12114                           ,l_user_id
12115                           ,l_login_id
12116                           ,p_dest_project_id
12117                           ,pppa.PROGRESS_CYCLE_ID
12118                           ,pppa.WQ_ENABLE_FLAG
12119                           ,pppa.REMAIN_EFFORT_ENABLE_FLAG
12120                           ,pppa.PERCENT_COMP_ENABLE_FLAG
12121                           ,pppa.NEXT_PROGRESS_UPDATE_DATE
12122                           ,pppa.RECORD_VERSION_NUMBER
12123                           ,pppa.TASK_WEIGHT_BASIS_CODE
12124         /* FP-M Bug # 3420093. Modified: copy_structures_bulk. */
12125                           ,pppa.ALLOW_COLLAB_PROG_ENTRY
12126                           ,pppa.ALLOW_PHY_PRCNT_CMP_OVERRIDES
12127                           ,pppa.STRUCTURE_TYPE
12128         /* FP-M Bug # 3420093. Modified: copy_structures_bulk. */
12129                       /*FROM  pa_proj_progress_attr pppa,
12130                             pa_proj_elements ppe
12131                        WHERE ppe.project_id = p_dest_project_id
12132                          and ppe.attribute15 = pppa.object_id         --no need to join with
12133                          and pppa.object_type = 'PA_STRUCTURES'
12134                          and ppe.object_type = 'PA_STRUCTURES'
12135                          and pppa.project_id = p_src_project_id;*//*Commented below query and following criteria by SMUKKA */
12136                       FROM pa_proj_progress_attr pppa,
12137                            pa_proj_elements ppe
12138                     WHERE ppe.project_id = p_dest_project_id
12139                        and ppe.attribute15 = pppa.object_id
12140                        and pppa.object_type = 'PA_STRUCTURES'
12141                        and ppe.object_type = 'PA_STRUCTURES'
12142                        and pppa.project_id = p_src_project_id
12143                        AND   PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y' ;  /* bug 3621613 */
12144 
12145        --Bug 2955589. If Versioning is enabled and it is a project to project copy, the plsql table will not
12146        --contain any records if there were no working verisons. We need to create one if any of the flags
12147        --l_create_fin_version or l_create_wk_version is 'Y'.
12148        IF nvl(l_create_fin_version,'N') = 'Y' THEN
12149            l_structure_ver_name := substr(l_project_name, 1, 240);
12150            PA_PROJ_TASK_STRUC_PUB.create_update_struct_ver(
12151                         p_project_id             => p_dest_project_id
12152                        ,p_structure_type         => 'FINANCIAL'
12153                        ,p_structure_version_name => l_structure_ver_name
12154                        ,p_structure_version_id   => null
12155                        ,x_structure_version_id   => l_structure_version_id
12156                        ,x_msg_count              => x_msg_count
12157                        ,x_msg_data               => x_msg_data
12158                        ,x_return_status          => x_return_status
12159                      );
12160            IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR
12161            THEN
12162               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12163            ELSIF x_return_status = FND_API.G_RET_STS_ERROR
12164            THEN
12165              RAISE FND_API.G_EXC_ERROR;
12166            END IF;
12167        ELSIF nvl(l_create_wk_version,'N') = 'Y' THEN
12168           l_structure_ver_name := substr(l_project_name||l_append||l_suffix, 1, 240);
12169 
12170           PA_PROJ_TASK_STRUC_PUB.create_update_struct_ver(
12171                        p_project_id             => p_dest_project_id
12172                       ,p_structure_type         => 'WORKPLAN'
12173                       ,p_structure_version_name => l_structure_ver_name
12174                       ,p_structure_version_id   => null
12175                       ,x_structure_version_id   => l_structure_version_id
12176                       ,x_msg_count              => x_msg_count
12177                       ,x_msg_data               => x_msg_data
12178                       ,x_return_status          => x_return_status
12179                     );
12180           IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR
12181           THEN
12182              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12183           ELSIF x_return_status = FND_API.G_RET_STS_ERROR
12184           THEN
12185             RAISE FND_API.G_EXC_ERROR;
12186           END IF;
12187        END IF;
12188 
12189        FOR k in 1..l_dest_str_versions_tbl.count LOOP
12190            IF l_dest_str_versions_tbl(k).copy_flag = 'Y'
12191            THEN
12192 
12193 
12194               OPEN cur_elem_ver_seq;
12195               FETCH cur_elem_ver_seq INTO l_struc_version_id;
12196               CLOSE cur_elem_ver_seq;
12197               --First copy structure version and then copy all task versions
12198               --We cannot perform both with the same sql bcoz we need parent_structure version id for tasks.
12199               INSERT INTO pa_proj_element_versions(
12200                      ELEMENT_VERSION_ID
12201                     ,PROJ_ELEMENT_ID
12202                     ,OBJECT_TYPE
12203                     ,PROJECT_ID
12204                     ,PARENT_STRUCTURE_VERSION_ID
12205                     ,DISPLAY_SEQUENCE
12206                     ,WBS_LEVEL
12207                     ,WBS_NUMBER
12208                     ,CREATION_DATE
12209                     ,CREATED_BY
12210                     ,LAST_UPDATE_DATE
12211                     ,LAST_UPDATED_BY
12212                     ,LAST_UPDATE_LOGIN
12213                     ,RECORD_VERSION_NUMBER
12214                     ,attribute15          --this column is used to store structure ver id of the source project to be used to created relationships.
12215                     ,ATTRIBUTE_CATEGORY
12216                      ,ATTRIBUTE1
12217                      ,ATTRIBUTE2
12218                      ,ATTRIBUTE3
12219                      ,ATTRIBUTE4
12220                      ,ATTRIBUTE5
12221                      ,ATTRIBUTE6
12222                      ,ATTRIBUTE7
12223                      ,ATTRIBUTE8
12224                      ,ATTRIBUTE9
12225                      ,ATTRIBUTE10
12226                      ,ATTRIBUTE11
12227                      ,ATTRIBUTE12
12228                      ,ATTRIBUTE13
12229                      ,ATTRIBUTE14
12230                      ,TASK_UNPUB_VER_STATUS_CODE
12231                      ,source_object_id
12232                      ,source_object_type
12233                     )
12234                   SELECT
12235                      l_struc_version_id
12236                     ,ppe.proj_element_id
12237                     ,ppev.object_type
12238                     ,p_dest_project_id
12239                     ,l_struc_version_id
12240                     ,ppev.DISPLAY_SEQUENCE
12241                     ,ppev.WBS_LEVEL
12242                     ,ppev.WBS_NUMBER
12243                     ,SYSDATE                     ------CREATION_DATE
12244                     ,l_user_id          ------CREATED_BY
12245                     ,SYSDATE                     ------LAST_UPDATE_DATE
12246                     ,l_user_id          ------LAST_UPDATED_BY
12247                     ,l_login_id         ------LAST_UPDATE_LOGIN
12248                     ,ppev.RECORD_VERSION_NUMBER                           ------RECORD_VERSION_NUMBER
12249                     ,ppev.element_version_id
12250                     ,ppev.ATTRIBUTE_CATEGORY
12251                      ,ppev.ATTRIBUTE1
12252                      ,ppev.ATTRIBUTE2
12253                      ,ppev.ATTRIBUTE3
12254                      ,ppev.ATTRIBUTE4
12255                      ,ppev.ATTRIBUTE5
12256                      ,ppev.ATTRIBUTE6
12257                      ,ppev.ATTRIBUTE7
12258                      ,ppev.ATTRIBUTE8
12259                      ,ppev.ATTRIBUTE9
12260                      ,ppev.ATTRIBUTE10
12261                      ,ppev.ATTRIBUTE11
12262                      ,ppev.ATTRIBUTE12
12263                      ,ppev.ATTRIBUTE13
12264                      ,ppev.ATTRIBUTE14
12265                      ,ppev.TASK_UNPUB_VER_STATUS_CODE
12266                      ,p_dest_project_id
12267                      ,'PA_PROJECTS'
12268                   FROM pa_proj_element_versions ppev,
12269                        pa_proj_elements ppe
12270                   WHERE ppev.project_id = p_src_project_id
12271                     and ppe.project_id = p_dest_project_id
12272                     and ppev.element_version_id = l_dest_str_versions_tbl(k).src_str_version_id
12273                     and ppev.proj_element_id = ppe.attribute15
12274                     and ppe.object_type = 'PA_STRUCTURES'
12275                     and ppev.object_type = 'PA_STRUCTURES';
12276 
12277 --bug 3138959
12278           --User adding tasks under WORKPLAN structure from AMG, financial plan should be copied over.
12279 
12280           IF PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version( l_struc_version_id, 'FINANCIAL' ) = 'Y'
12281              AND l_shared = 'N' AND l_workplan_enabled = 'Y'       -- For Split structures
12282              AND pa_project_pub.G_structure_in_rec.structure_type = 'WORKPLAN'
12283           THEN
12284                   --Copy financial tasks
12285 
12286                   INSERT INTO pa_proj_element_versions(
12287                      ELEMENT_VERSION_ID
12288                     ,PROJ_ELEMENT_ID
12289                     ,OBJECT_TYPE
12290                     ,PROJECT_ID
12291                     ,PARENT_STRUCTURE_VERSION_ID
12292                     ,DISPLAY_SEQUENCE
12293                     ,WBS_LEVEL
12294                     ,WBS_NUMBER
12295                     ,CREATION_DATE
12296                     ,CREATED_BY
12297                     ,LAST_UPDATE_DATE
12298                     ,LAST_UPDATED_BY
12299                     ,LAST_UPDATE_LOGIN
12300                     ,RECORD_VERSION_NUMBER
12301                     ,attribute15          --this column is used to store task ver id of the source project's task versions to be used to created relationships.
12302                     ,ATTRIBUTE_CATEGORY
12303                      ,ATTRIBUTE1
12304                      ,ATTRIBUTE2
12305                      ,ATTRIBUTE3
12306                      ,ATTRIBUTE4
12307                      ,ATTRIBUTE5
12308                      ,ATTRIBUTE6
12309                      ,ATTRIBUTE7
12310                      ,ATTRIBUTE8
12311                      ,ATTRIBUTE9
12312                      ,ATTRIBUTE10
12313                      ,ATTRIBUTE11
12314                      ,ATTRIBUTE12
12315                      ,ATTRIBUTE13
12316                      ,ATTRIBUTE14
12317                      ,TASK_UNPUB_VER_STATUS_CODE
12318                      ,source_object_id
12319                      ,source_object_type
12320              ,financial_task_flag                    --Bug no 3651255
12321                     )
12322               SELECT
12323                      pa_proj_element_versions_s.nextval
12324                     ,ppe.proj_element_id
12325                     ,ppev.object_type
12326                     ,p_dest_project_id
12327                     ,l_struc_version_id            --from previous sql
12328                     ,ppev.DISPLAY_SEQUENCE
12329                     ,ppev.WBS_LEVEL
12330                     ,ppev.WBS_NUMBER
12331                     ,SYSDATE                     ------CREATION_DATE
12332                     ,l_user_id          ------CREATED_BY
12333                     ,SYSDATE                     ------LAST_UPDATE_DATE
12334                     ,l_user_id          ------LAST_UPDATED_BY
12335                     ,l_login_id         ------LAST_UPDATE_LOGIN
12336                     ,ppev.RECORD_VERSION_NUMBER                           ------RECORD_VERSION_NUMBER
12337                     ,ppev.element_version_id     -- to help create relationships from source
12338                     ,ppev.ATTRIBUTE_CATEGORY
12339                      ,ppev.ATTRIBUTE1
12340                      ,ppev.ATTRIBUTE2
12341                      ,ppev.ATTRIBUTE3
12342                      ,ppev.ATTRIBUTE4
12343                      ,ppev.ATTRIBUTE5
12344                      ,ppev.ATTRIBUTE6
12345                      ,ppev.ATTRIBUTE7
12346                      ,ppev.ATTRIBUTE8
12347                      ,ppev.ATTRIBUTE9
12348                      ,ppev.ATTRIBUTE10
12349                      ,ppev.ATTRIBUTE11
12350                      ,ppev.ATTRIBUTE12
12351                      ,ppev.ATTRIBUTE13
12352                      ,ppev.ATTRIBUTE14
12353                      ,decode( l_dest_str_versions_tbl(k).dest_str_status, 'STRUCTURE_PUBLISHED', 'PUBLISHED', 'WORKING' )
12354                      ,p_dest_project_id
12355                      ,'PA_PROJECTS'
12356              ,ppev.financial_task_flag                    --Bug no 3651255
12357                  FROM pa_proj_element_versions ppev,
12358                       pa_proj_elements ppe
12359                 WHERE ppev.project_id = p_src_project_id
12360                   and ppe.project_id = p_dest_project_id
12361                   and ppev.parent_structure_version_id = l_dest_str_versions_tbl(k).src_str_version_id
12362                   and ppev.proj_element_id = ppe.attribute15
12363                   and ppe.object_type = 'PA_TASKS'
12364                   and ppev.object_type = 'PA_TASKS';
12365 
12366                --Create relationships for structure and tasks
12367 
12368   /* Start of changes for bug 6211012 */
12369 
12370         l_obj_rel_id.delete;
12371 	l_obj_typ_from.delete;
12372 	l_obj_from_id.delete;
12373 	l_obj_typ_to.delete;
12374 	l_obj_to_id.delete;
12375 	l_rel_typ.delete;
12376 	l_rel_subtyp.delete;
12377 	l_rec_ver_num.delete;
12378 	l_wt_percent.delete;
12379 
12380         OPEN cur_pa_obj_rela_3(l_dest_str_versions_tbl(k).src_str_version_id,l_struc_version_id);
12381 
12382 	LOOP
12383 
12384 	FETCH cur_pa_obj_rela_3
12385 	BULK COLLECT INTO
12386 		l_obj_rel_id,
12387 		l_obj_typ_from,
12388 		l_obj_from_id,
12389 		l_obj_typ_to,
12390 		l_obj_to_id,
12391 		l_rel_typ,
12392 		l_rel_subtyp,
12393 		l_rec_ver_num,
12394 		l_wt_percent
12395 	LIMIT 1000;
12396 
12397 	  IF l_obj_rel_id.COUNT >0 THEN
12398 
12399 	    FORALL i IN l_obj_rel_id.FIRST..l_obj_rel_id.LAST
12400             insert into PA_OBJECT_RELATIONSHIPS (
12401                  object_relationship_id,
12402                  object_type_from,
12403                  object_id_from1,
12404                  object_type_to,
12405                  object_id_to1,
12406                  relationship_type,
12407                  relationship_subtype,
12408                  Record_Version_Number,
12409                  CREATED_BY,
12410                  CREATION_DATE,
12411                  LAST_UPDATED_BY,
12412                  LAST_UPDATE_DATE,
12413                  LAST_UPDATE_LOGIN,
12414                  weighting_percentage
12415                        )
12416 		 values(
12417 		 l_obj_rel_id(i),
12418 	         l_obj_typ_from(i),
12419 	         l_obj_from_id(i),
12420 	         l_obj_typ_to(i),
12421 	         l_obj_to_id(i),
12422 	         l_rel_typ(i),
12423 	         l_rel_subtyp(i),
12424 	         l_rec_ver_num(i),
12425                  l_user_id,
12426                  SYSDATE,
12427                  l_user_id,
12428                  SYSDATE,
12429                  l_login_id,
12430 	         l_wt_percent(i)
12431 		 );
12432 	  END IF;
12433 
12434           EXIT WHEN l_obj_rel_id.COUNT < 1000 ;
12435 	END LOOP;
12436 
12437 	l_obj_rel_id.delete;
12438 	l_obj_typ_from.delete;
12439 	l_obj_from_id.delete;
12440 	l_obj_typ_to.delete;
12441 	l_obj_to_id.delete;
12442 	l_rel_typ.delete;
12443 	l_rel_subtyp.delete;
12444 	l_rec_ver_num.delete;
12445 	l_wt_percent.delete;
12446 
12447 	CLOSE cur_pa_obj_rela_3;
12448 
12449 /*
12450               INSERT INTO PA_OBJECT_RELATIONSHIPS (
12451                                   object_relationship_id,
12452                                   object_type_from,
12453                                   object_id_from1,
12454                                   object_type_to,
12455                                   object_id_to1,
12456                                   relationship_type,
12457                                   relationship_subtype,
12458                                   Record_Version_Number,
12459                                   CREATED_BY,
12460                                   CREATION_DATE,
12461                                   LAST_UPDATED_BY,
12462                                   LAST_UPDATE_DATE,
12463                                   LAST_UPDATE_LOGIN,
12464                                   weighting_percentage
12465                                   )
12466               /*Added the hint for the bug 3513853*/
12467   /*               SELECT /*+ USE_HASH(ppev2 ppev1)*/
12468   /*                             pa_object_relationships_s.nextval,
12469                                pobj.object_type_from,
12470                                   ppev1.element_version_id,
12471                                   pobj.object_type_to,
12472                                   ppev2.element_version_id,
12473                                   pobj.relationship_type,
12474                                   pobj.relationship_subtype,
12475                                pobj.Record_Version_Number,
12476                                l_user_id,
12477                                SYSDATE,
12478                                l_user_id,
12479                                SYSDATE,
12480                                l_login_id,
12481                                pobj.weighting_percentage
12482                     FROM ( SELECT  object_type_from, object_id_from1,
12483                                    object_type_to,   object_id_to1,
12484                                    relationship_type, relationship_subtype,
12485                                    Record_Version_Number, weighting_percentage
12486                              FROM pa_object_relationships
12487                             --bug#3094283WHERE RELATIONSHIP_TYPE = 'S'
12488                              start with object_id_from1 = l_dest_str_versions_tbl(k).src_str_version_id
12489                              and  RELATIONSHIP_TYPE = 'S' /* Bug 2881667 Added this condition */
12490    /*                          connect by  object_id_from1 =  prior object_id_to1
12491                              and  RELATIONSHIP_TYPE = 'S' ) pobj, /* Bug 2881667 Added this condition */
12492    /*                      pa_proj_element_versions ppev1,
12493                          pa_proj_element_versions ppev2
12494                  WHERE
12495                    --bug#3094283    ppev1.project_id = p_dest_project_id
12496                     ppev1.attribute15 = pobj.object_id_from1
12497                    --bug#3094283  ppev2.project_id = p_dest_project_id
12498                    AND ppev2.attribute15 = pobj.object_id_to1
12499                    AND ppev1.parent_structure_version_id = l_struc_version_id
12500                    AND ppev2.parent_structure_version_id = l_struc_version_id
12501                    ;
12502 		   */
12503 /* End of Code added for 6211012 */
12504           END IF;
12505 --bug 3138959
12506 
12507               IF l_dest_str_versions_tbl(k).dest_str_status = 'STRUCTURE_PUBLISHED'
12508                  and l_dest_str_versions_tbl(k).current_flag = 'N'
12509                  and l_dest_str_versions_tbl(k).latest_pub_flag = 'N'
12510               THEN
12511                   l_LATEST_EFF_PUBLISHED_FLAG := 'Y';
12512               ELSE
12513                   l_LATEST_EFF_PUBLISHED_FLAG := l_dest_str_versions_tbl(k).latest_pub_flag;
12514               END IF;
12515 
12516               IF l_dest_template_flag = 'Y'
12517               THEN
12518                   l_LATEST_EFF_PUBLISHED_FLAG := 'N';
12519                   l_dest_str_versions_tbl(k).current_flag := 'N';
12520                   IF l_dest_str_versions_tbl(k).dest_str_status <> 'STRUCTURE_WORKING'
12521                   THEN
12522                      l_dest_str_versions_tbl(k).dest_str_status := 'STRUCTURE_WORKING';
12523                   END IF;
12524               END IF;
12525 
12526               IF l_LATEST_EFF_PUBLISHED_FLAG = 'Y' OR l_dest_template_flag = 'Y'
12527               THEN
12528                  l_latest_pub_str_ver_id := l_struc_version_id;
12529               ELSE
12530                  l_latest_pub_str_ver_id := null;
12531               END IF;
12532 
12533 --bug 3010538
12534 --added PROCESS_UPDATE_WBS_FLAG
12535 
12536              INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
12537                             PEV_STRUCTURE_ID
12538                            ,ELEMENT_VERSION_ID
12539                            ,VERSION_NUMBER
12540                            ,NAME
12541                            ,PROJECT_ID
12542                            ,PROJ_ELEMENT_ID
12543                            ,DESCRIPTION
12544                            ,EFFECTIVE_DATE
12545                            ,PUBLISHED_DATE
12546                            ,PUBLISHED_BY_PERSON_ID
12547                            ,CURRENT_BASELINE_DATE
12548                            ,CURRENT_FLAG
12549                            ,CURRENT_BASELINE_PERSON_ID
12550                            ,ORIGINAL_BASELINE_DATE
12551                            ,ORIGINAL_FLAG
12552                            ,ORIGINAL_BASELINE_PERSON_ID
12553                            ,LOCK_STATUS_CODE
12554                            ,LOCKED_BY_PERSON_ID
12555                            ,LOCKED_DATE
12556                            ,STATUS_CODE
12557                            ,WF_STATUS_CODE
12558                            ,LATEST_EFF_PUBLISHED_FLAG
12559                            ,RECORD_VERSION_NUMBER
12560                            ,WBS_RECORD_VERSION_NUMBER
12561                            ,CREATION_DATE
12562                            ,CREATED_BY
12563                            ,LAST_UPDATE_DATE
12564                            ,LAST_UPDATED_BY
12565                            ,LAST_UPDATE_LOGIN
12566                            ,change_reason_code
12567                            ,PROCESS_UPDATE_WBS_FLAG
12568                            ,current_working_flag   /* FPM bug 3301192 */
12569                            ,source_object_id
12570                            ,source_object_type
12571                            )
12572                    SELECT
12573                          pa_proj_elem_ver_structure_s.nextval
12574                         ,l_struc_version_id
12575                         ,ppevs.version_number     --replaced k with source version_number  bug 2829385
12576             --,ppevs.name 3717026, replaced ppevs.name with ppe.name
12577             ,ppe.name
12578                         ,p_dest_project_id
12579                         ,ppe.proj_element_id
12580                         ,ppevs.DESCRIPTION
12581                         ,ppevs.EFFECTIVE_DATE
12582                         ,decode(l_dest_str_versions_tbl(k).dest_str_status, 'STRUCTURE_PUBLISHED', sysdate, to_date(null)) --bug 2838547
12583                         ,decode(l_dest_str_versions_tbl(k).dest_str_status, 'STRUCTURE_PUBLISHED', l_publish_person_id, NULL) --bug 2838547
12584                         ,decode(l_dest_str_versions_tbl(k).current_flag, 'Y', trunc(sysdate), to_date(NULL)) --bug 2838547
12585                         ,l_dest_str_versions_tbl(k).current_flag
12586                         ,decode(l_dest_str_versions_tbl(k).current_flag, 'Y', l_publish_person_id, NULL) --bug 2838547
12587                         ,ppevs.ORIGINAL_BASELINE_DATE
12588                         ,ppevs.ORIGINAL_FLAG
12589                         ,ppevs.ORIGINAL_BASELINE_PERSON_ID
12590                         ,'UNLOCKED'
12591                         ,null
12592                         ,null
12593                         ,l_dest_str_versions_tbl(k).dest_str_status
12594                         ,ppevs.WF_STATUS_CODE
12595                         ,l_LATEST_EFF_PUBLISHED_FLAG
12596                         ,ppevs.RECORD_VERSION_NUMBER
12597                         ,ppevs.WBS_RECORD_VERSION_NUMBER
12598                         ,SYSDATE
12599                         ,l_user_id
12600                         ,SYSDATE
12601                         ,l_user_id
12602                         ,l_login_id
12603                         ,ppevs.change_reason_code
12604                         ,'N'
12605                         ,ppevs.current_working_flag   /* FPM bug 3301192 */
12606                         ,p_dest_project_id
12607                         ,'PA_PROJECTS'
12608                   FROM PA_PROJ_ELEM_VER_STRUCTURE ppevs, pa_proj_elements ppe
12609                  WHERE ppevs.project_id = p_src_project_id
12610                   AND ppe.project_id = p_dest_project_id
12611                   and ppevs.element_version_id = l_dest_str_versions_tbl(k).src_str_version_id
12612                   and ppevs.proj_element_id = ppe.attribute15
12613                   AND ppe.object_type = 'PA_STRUCTURES';
12614 
12615               --fix bug 2831973
12616               --calculate delta before inserting schedule rows
12617               --select source structure version scheduled start date
12618               IF (p_target_start_date IS NULL) THEN
12619                 l_delta := 0;
12620               ELSE
12621                 OPEN get_src_sch_st_date(p_src_project_id,
12622                          l_dest_str_versions_tbl(k).src_str_version_id);
12623                 FETCH get_src_sch_st_date into l_src_sch_st_date;
12624                 CLOSE get_src_sch_st_date;
12625                 l_delta := p_target_start_date - l_src_sch_st_date;
12626               END IF;
12627 
12628               INSERT INTO pa_proj_elem_ver_schedule(
12629                             PEV_SCHEDULE_ID
12630                            ,ELEMENT_VERSION_ID
12631                            ,PROJECT_ID
12632                            ,PROJ_ELEMENT_ID
12633                            ,CREATION_DATE
12634                            ,CREATED_BY
12635                            ,LAST_UPDATE_DATE
12636                            ,LAST_UPDATED_BY
12637                            ,SCHEDULED_START_DATE
12638                            ,SCHEDULED_FINISH_DATE
12639                            ,OBLIGATION_START_DATE
12640                            ,OBLIGATION_FINISH_DATE
12641                            ,ACTUAL_START_DATE
12642                            ,ACTUAL_FINISH_DATE
12643                            ,ESTIMATED_START_DATE
12644                            ,ESTIMATED_FINISH_DATE
12645                            ,DURATION
12646                            ,EARLY_START_DATE
12647                            ,EARLY_FINISH_DATE
12648                            ,LATE_START_DATE
12649                            ,LATE_FINISH_DATE
12650                            ,CALENDAR_ID
12651                            ,MILESTONE_FLAG
12652                            ,CRITICAL_FLAG
12653                            ,RECORD_VERSION_NUMBER
12654                            ,LAST_UPDATE_LOGIN
12655                            ,WQ_PLANNED_QUANTITY
12656                            ,PLANNED_EFFORT
12657                            ,ACTUAL_DURATION
12658                            ,ESTIMATED_DURATION
12659                            ,ATTRIBUTE_CATEGORY
12660                            ,ATTRIBUTE1
12661                            ,ATTRIBUTE2
12662                            ,ATTRIBUTE3
12663                            ,ATTRIBUTE4
12664                            ,ATTRIBUTE5
12665                            ,ATTRIBUTE6
12666                            ,ATTRIBUTE7
12667                            ,ATTRIBUTE8
12668                            ,ATTRIBUTE9
12669                            ,ATTRIBUTE10
12670                            ,ATTRIBUTE11
12671                            ,ATTRIBUTE12
12672                            ,ATTRIBUTE13
12673                            ,ATTRIBUTE14
12674                            ,ATTRIBUTE15
12675                            ,source_object_id
12676                            ,source_object_type
12677                            ,CONSTRAINT_TYPE_CODE                  --Bug 3762437
12678                            ,CONSTRAINT_DATE
12679                            ,FREE_SLACK
12680                            ,TOTAL_SLACK
12681                            ,EFFORT_DRIVEN_FLAG
12682                            ,LEVEL_ASSIGNMENTS_FLAG
12683                            ,EXT_ACT_DURATION
12684                            ,EXT_REMAIN_DURATION
12685                            ,EXT_SCH_DURATION                       --Bug 3762437
12686                               )
12687                         SELECT
12688                             pa_proj_elem_ver_schedule_s.nextval
12689                            ,ppev1.ELEMENT_VERSION_ID
12690                            ,p_dest_PROJECT_ID
12691                            ,ppev1.PROJ_ELEMENT_ID
12692                            ,SYSDATE
12693                            ,l_user_id
12694                            ,SYSDATE
12695                            ,l_user_id
12696                            ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date,  --fix bug 2831973
12697                                                                        p_target_finish_date,
12698                                                                        l_delta,
12699                                                                        ppevs.SCHEDULED_START_DATE,
12700                                                                        null )                --sch start date
12701                            ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date,  --fix bug 2831973
12702                                                                        p_target_finish_date,
12703                                                                        l_delta,
12704                                                                        ppevs.SCHEDULED_START_DATE,
12705                                                                        SCHEDULED_FINISH_DATE ) --sch end date
12706                            ,ppevs.OBLIGATION_START_DATE
12707                            ,ppevs.OBLIGATION_FINISH_DATE
12708                            ,null                       --ppevs.ACTUAL_START_DATE   bug 2827090
12709                            ,null                       --ppevs.ACTUAL_FINISH_DATE
12710                            ,null                       --ppevs.ESTIMATED_START_DATE
12711                            ,null                       --ppevs.ESTIMATED_FINISH_DATE
12712                            ,ppevs.DURATION
12713                            ,ppevs.EARLY_START_DATE
12714                            ,ppevs.EARLY_FINISH_DATE
12715                            ,ppevs.LATE_START_DATE
12716                            ,ppevs.LATE_FINISH_DATE
12717                            ,p_calendar_id              --,ppevs.CALENDAR_ID  Bug # 2955589. Use the calendar id passed to
12718                                                        --this API.
12719                            ,ppevs.MILESTONE_FLAG
12720                            ,ppevs.CRITICAL_FLAG
12721                            ,ppevs.RECORD_VERSION_NUMBER
12722                            ,l_login_id
12723                            ,ppevs.WQ_PLANNED_QUANTITY
12724                            ,ppevs.PLANNED_EFFORT
12725                            ,ppevs.ACTUAL_DURATION
12726                            ,ppevs.ESTIMATED_DURATION
12727                            ,ppevs.ATTRIBUTE_CATEGORY
12728                            ,ppevs.ATTRIBUTE1
12729                            ,ppevs.ATTRIBUTE2
12730                            ,ppevs.ATTRIBUTE3
12731                            ,ppevs.ATTRIBUTE4
12732                            ,ppevs.ATTRIBUTE5
12733                            ,ppevs.ATTRIBUTE6
12734                            ,ppevs.ATTRIBUTE7
12735                            ,ppevs.ATTRIBUTE8
12736                            ,ppevs.ATTRIBUTE9
12737                            ,ppevs.ATTRIBUTE10
12738                            ,ppevs.ATTRIBUTE11
12739                            ,ppevs.ATTRIBUTE12
12740                            ,ppevs.ATTRIBUTE13
12741                            ,ppevs.ATTRIBUTE14
12742                            ,ppevs.ATTRIBUTE15
12743                            ,p_dest_PROJECT_ID
12744                            ,'PA_PROJECTS'
12745                            ,CONSTRAINT_TYPE_CODE          --Bug 3762437
12746                            ,CONSTRAINT_DATE
12747                            ,FREE_SLACK
12748                            ,TOTAL_SLACK
12749                            ,EFFORT_DRIVEN_FLAG
12750                            ,LEVEL_ASSIGNMENTS_FLAG
12751                            ,EXT_ACT_DURATION
12752                            ,EXT_REMAIN_DURATION
12753                            ,EXT_SCH_DURATION              --Bug 3762437
12754                          FROM pa_proj_elem_ver_schedule ppevs,
12755                               pa_proj_element_versions ppev1,
12756                               pa_proj_element_versions ppev2
12757                            where ppev1.attribute15 = ppevs.element_version_id
12758                             and  ppevs.project_id = p_src_project_id
12759                             and  ppev2.project_id = p_src_project_id
12760                             and  ppev2.parent_structure_version_id = l_dest_str_versions_tbl(k).src_str_version_id
12761                             and  ppev2.element_version_id = ppevs.element_version_id
12762                             and  ppev1.attribute15 = ppev2.element_version_id
12763                             and ppev1.object_type = 'PA_STRUCTURES'
12764                             and ppev2.object_type = 'PA_STRUCTURES'
12765                             and  ppev1.project_id = p_dest_project_id;
12766 
12767 
12768            END IF;  --l_dest_str_versions_tbl(k).copy_flag = 'Y'
12769        END LOOP;
12770     END IF;  --IF NVL( l_workplan_enabled, 'N' ) = 'N'
12771 
12772                 IF l_workplan_enabled = 'Y'
12773                 THEN
12774                     --updating duration
12775                     -- Bug 3657808 Remove duration calculation using calendar
12776                     -- and rewritting the query
12777                     /*UPDATE pa_proj_elem_ver_schedule
12778                        SET duration = PA_PROJ_TASK_STRUC_PUB.calc_duration( p_calendar_id,
12779                                                                             scheduled_start_date,
12780                                                                             scheduled_finish_date )
12781                      WHERE project_id = p_dest_project_id;*/
12782                     UPDATE pa_proj_elem_ver_schedule
12783                        SET duration = trunc(scheduled_finish_date) - trunc(scheduled_start_date) + 1
12784                      WHERE project_id = p_dest_project_id;
12785                 END IF;
12786 
12787                     ---updating baselined dates
12788                     UPDATE PA_PROJ_ELEMENTS ppe
12789                        SET ( BASELINE_START_DATE ,BASELINE_FINISH_DATE,
12790                              BASELINE_DURATION ) =
12791                                ( Select ppevs.scheduled_start_date, ppevs.scheduled_finish_date,
12792                                         ppevs.duration
12793                                    from pa_proj_elem_ver_schedule ppevs,
12794                                         pa_proj_elem_ver_structure ppevst
12795                                   WHERE ppevs.project_id           = p_dest_project_id
12796                                     and ppevst.project_id          = p_dest_project_id
12797                                     and ppevst.current_flag        = 'Y'             --assuming this is the flag used to identify the baselined structure ver.
12798                                     and ppevst.STATUS_CODE         = 'STRUCTURE_PUBLISHED'
12799                                     and ppevs.element_version_id = ppevst.element_version_id
12800                                 )
12801                     WHERE project_id = p_dest_project_id;
12802 --                      and object_type = 'PA_STRUCTURES'
12803 --                      and EXISTS ( SELECT proj_element_id FROM pa_proj_structure_types
12804 --                                WHERE proj_element_id = ppe.proj_element_id
12805 --                                  AND structure_type_id = 1 );
12806 
12807                     --updating projects dates
12808                     update pa_projects_all
12809                        set ( BASELINE_START_DATE ,BASELINE_FINISH_DATE,  baseline_duration, baseline_as_of_date) =
12810                           ( SELECT BASELINE_START_DATE ,BASELINE_FINISH_DATE,  baseline_duration,
12811                                          decode(BASELINE_START_DATE, null, null, sysdate)
12812                             FROM pa_proj_elements ppe, pa_proj_structure_types ppst
12813                             WHERE project_id = p_dest_project_id
12814                               and object_type = 'PA_STRUCTURES'
12815                               and ppe.proj_element_id = ppst.proj_element_id
12816                               and ppst.structure_type_id = 1 )
12817                      where project_id = p_dest_project_id;
12818 
12819                      IF l_latest_pub_str_ver_id IS NOT NULL
12820                      THEN
12821                       update pa_projects_all
12822                        set ( scheduled_START_DATE ,scheduled_FINISH_DATE,  scheduled_duration, scheduled_as_of_date ) =
12823                           ( SELECT SCHEDULED_START_DATE ,SCHEDULED_FINISH_DATE,duration,
12824                                    decode(SCHEDULED_START_DATE, null, null, sysdate)
12825                             FROM pa_proj_elem_ver_schedule
12826                             WHERE project_id = p_dest_project_Id
12827                               and element_version_id = l_latest_pub_str_ver_id)
12828                        where project_id = p_dest_project_id;
12829                      END IF;
12830 
12831 
12832   --bug 2831775
12833   --need to sync up transaction dates if auto sync is on
12834   If l_shared = 'Y' and l_workplan_enabled = 'Y' THEN
12835     OPEN get_shared_struc_id;
12836     FETCH get_shared_struc_id into l_structure_id;
12837     CLOSE get_shared_struc_id;
12838 
12839     If (PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_DATE_SYNC_ENABLED(l_structure_id) = 'Y') AND (PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_PUB_AT_CREATION(p_src_project_id) = 'Y')THEN
12840 
12841        --Copy to transaction date
12842        PA_PROJECT_DATES_PUB.COPY_PROJECT_DATES(
12843          p_project_id => p_dest_project_id,
12844          x_return_status => l_return_status,
12845          x_msg_count => l_msg_count,
12846          x_msg_data => l_msg_data
12847        );
12848 
12849        if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
12850          x_msg_count := FND_MSG_PUB.count_msg;
12851          if x_msg_count = 1 then
12852            x_msg_data := l_msg_data;
12853          end if;
12854          raise FND_API.G_EXC_ERROR;
12855        end if;
12856 
12857     END IF;
12858   END IF;
12859   --end bug 2831775
12860 ------------------------------------------------------------------------------
12861   -- Changes added by skannoji
12862   -- Added code for doosan customer
12863   Declare
12864     /* Bug #: 3305199 SMukka                                                         */
12865     /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
12866     /* src_versions_tab   PA_PLSQL_DATATYPES.IdTabTyp;                               */
12867     /* dest_versions_tab  PA_PLSQL_DATATYPES.IdTabTyp;                               */
12868     src_versions_tab   SYSTEM.pa_num_tbl_type;
12869     dest_versions_tab  SYSTEM.pa_num_tbl_type;
12870   Begin
12871     Select Element_Version_ID, attribute15 BULK COLLECT
12872     INTO   dest_versions_tab, src_Versions_Tab
12873     From   PA_Proj_Element_Versions
12874     Where  Project_ID = p_dest_project_id
12875     AND ( PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(element_version_id, 'WORKPLAN') = 'Y')
12876     AND object_type = 'PA_STRUCTURES';
12877 
12878     -- Copies budget versions, resource assignments and budget lines as required for the workplan version.
12879     /*Smukka Bug No. 3474141 Date 03/01/2004                                    */
12880     /*moved PA_FP_COPY_FROM_PKG.copy_wp_budget_versions into plsql block        */
12881     BEGIN
12882         PA_FP_COPY_FROM_PKG.copy_wp_budget_versions
12883         (
12884           p_source_project_id            => p_src_project_id
12885          ,p_target_project_id            => p_dest_project_id
12886          ,p_src_sv_ids_tbl               => src_Versions_Tab  -- Workplan version id tbl
12887          ,p_target_sv_ids_tbl            => dest_Versions_Tab -- Workplan version id tbl
12888          ,p_copy_mode                    => null -- Bug 4277801
12889          ,x_return_status                => x_return_status
12890          ,x_msg_count                    => x_msg_count
12891          ,x_Msg_data                     => x_msg_data
12892         );
12893     EXCEPTION
12894         WHEN OTHERS THEN
12895              fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
12896                                      p_procedure_name => 'copy_structures_bulk',
12897                                      p_error_text     => SUBSTRB('PA_FP_COPY_FROM_PKG.copy_wp_budget_versions:'||SQLERRM,1,240));
12898         RAISE FND_API.G_EXC_ERROR;
12899     END;
12900     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12901        RAISE FND_API.G_EXC_ERROR;
12902     END IF;
12903   End;
12904    -- till here by skannoji
12905 ------------------------------------------------------------------------------
12906 
12907   update pa_proj_elements ppe1
12908      set attribute15 = ( select attribute15 from pa_proj_elements ppe2
12909                           where ppe2.project_id = p_src_project_id
12910                             and ppe2.proj_element_id = ppe1.attribute15 )
12911    where project_id = p_dest_project_id
12912    ;
12913 
12914   update pa_proj_element_versions ppevs1
12915      set attribute15 = ( select attribute15 from pa_proj_element_versions ppevs2
12916                           where ppevs2.project_id = p_src_project_id
12917                             and ppevs2.element_version_id = ppevs1.attribute15 )
12918    where project_id = p_dest_project_id
12919    ;
12920 
12921 /* Not required to call the concurrent program bcoz it will
12922    be called from AMG upon project creation. Otherwise it will
12923    be redundant code
12924   --bug 3035902 maansari
12925    DECLARE
12926 
12927        CURSOR cur_strs_n_types
12928        IS
12929          SELECT ppe.proj_element_id, ppst.structure_type_id
12930            FROM pa_proj_elements ppe, pa_proj_structure_types ppst
12931           WHERE ppe.project_id = p_dest_project_id
12932             AND ppe.object_type = 'PA_STRUCTURES'
12933             AND ppe.proj_element_id = ppst.proj_element_id
12934           ;
12935 
12936        CURSOR cur_str_vers( c_structure_id NUMBER )
12937        IS
12938          SELECT ppevs.element_version_id
12939            FROM pa_proj_element_versions ppevs
12940           WHERE ppevs.project_id = p_dest_project_id
12941             AND ppevs.object_type = 'PA_STRUCTURES'
12942             AND ppevs.proj_element_id = c_structure_id
12943           ;
12944 
12945        l_fn_str_id          NUMBER;
12946        l_wp_str_id          NUMBER;
12947        l_fn_str_ver_id      NUMBER;
12948        l_wp_str_ver_id      NUMBER;
12949        l_task_weight_basis  PA_PROJ_PROGRESS_ATTR.task_weight_basis_code%TYPE;
12950    BEGIN
12951        l_task_weight_basis := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS( p_dest_project_id );
12952        IF NVL( l_task_weight_basis, 'X' ) = 'DURATION'
12953        THEN
12954            FOR cur_strs_n_types_rec in cur_strs_n_types LOOP
12955               IF cur_strs_n_types_rec.structure_type_id = 1  --'WORKPLAN' structure
12956               THEN
12957                   l_wp_str_id  := cur_strs_n_types_rec.proj_element_id;
12958                   UPDATE pa_proj_elem_ver_structure
12959                      SET PROCESS_UPDATE_WBS_FLAG = 'Y'
12960                    WHERE proj_element_id = cur_strs_n_types_rec.proj_element_id
12961                      AND project_id = p_dest_project_id
12962                      AND PROCESS_UPDATE_WBS_FLAG = 'N'
12963                     ;
12964               ELSE
12965                   l_fn_str_id := cur_strs_n_types_rec.proj_element_id;
12966               END IF;
12967            END LOOP;
12968        END IF;
12969 
12970        IF l_shared = 'Y' AND NVL( l_task_weight_basis, 'X' ) = 'DURATION'
12971        THEN
12972            OPEN cur_str_vers( l_wp_str_id );
12973            FETCH cur_str_vers INTO l_wp_str_ver_id;
12974            CLOSE cur_str_vers;
12975 
12976            PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
12977                 (
12978               p_calling_context       => 'COPY_PROJECT'
12979              ,p_project_id            => p_dest_project_id
12980              ,p_structure_version_id  => l_wp_str_ver_id
12981              ,x_return_status         => l_return_status
12982              ,x_msg_count             => l_msg_count
12983              ,x_msg_data              => l_msg_data);
12984 
12985            if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
12986                x_msg_count := FND_MSG_PUB.count_msg;
12987                if x_msg_count = 1 then
12988                   x_msg_data := l_msg_data;
12989                end if;
12990                raise FND_API.G_EXC_ERROR;
12991            end if;
12992 
12993        ELSIF l_shared = 'N' AND NVL( l_task_weight_basis, 'X' ) = 'DURATION'   --Split then call the api twice.
12994        THEN
12995            OPEN cur_str_vers( l_wp_str_id );
12996            FETCH cur_str_vers INTO l_wp_str_ver_id;
12997            CLOSE cur_str_vers;
12998 
12999            PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
13000                 (
13001               p_calling_context       => 'COPY_PROJECT'
13002              ,p_project_id            => p_dest_project_id
13003              ,p_structure_version_id  => l_wp_str_ver_id
13004              ,x_return_status         => l_return_status
13005              ,x_msg_count             => l_msg_count
13006              ,x_msg_data              => l_msg_data);
13007 
13008            if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
13009                x_msg_count := FND_MSG_PUB.count_msg;
13010                if x_msg_count = 1 then
13011                   x_msg_data := l_msg_data;
13012                end if;
13013                raise FND_API.G_EXC_ERROR;
13014            end if;
13015 
13016 
13017            OPEN cur_str_vers( l_fn_str_id );
13018            FETCH cur_str_vers INTO l_fn_str_ver_id;
13019            CLOSE cur_str_vers;
13020 
13021            PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
13022                 (
13023               p_calling_context       => 'COPY_PROJECT'
13024              ,p_project_id            => p_dest_project_id
13025              ,p_structure_version_id  => l_fn_str_ver_id
13026              ,x_return_status         => l_return_status
13027              ,x_msg_count             => l_msg_count
13028              ,x_msg_data              => l_msg_data);
13029 
13030            if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
13031                x_msg_count := FND_MSG_PUB.count_msg;
13032                if x_msg_count = 1 then
13033                   x_msg_data := l_msg_data;
13034                end if;
13035                raise FND_API.G_EXC_ERROR;
13036            end if;
13037 
13038        END IF;
13039    END;
13040   --End 3035902 maansari
13041 */
13042 
13043 
13044   x_return_status := FND_API.G_RET_STS_SUCCESS;
13045 
13046 
13047   IF (p_debug_mode = 'Y') THEN
13048     pa_debug.debug('PA_PROJ_TASK_STRUC_PUB.copy_structures_bulk END');
13049   END IF;
13050 
13051 EXCEPTION
13052   when FND_API.G_EXC_ERROR then
13053     if p_commit = FND_API.G_TRUE then
13054       rollback to copy_structure_bulk_pvt;
13055     end if;
13056     x_return_status := FND_API.G_RET_STS_ERROR;
13057   when FND_API.G_EXC_UNEXPECTED_ERROR then
13058     if p_commit = FND_API.G_TRUE then
13059       rollback to copy_structure_bulk_pvt;
13060     end if;
13061     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13062     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
13063                             p_procedure_name => 'copy_structures_bulk',
13064                             p_error_text     => SUBSTRB(SQLERRM,1,240));
13065   when OTHERS then
13066     if p_commit = FND_API.G_TRUE then
13067       rollback to copy_structure_bulk_pvt;
13068     end if;
13069     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13070     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
13071                             p_procedure_name => 'copy_structures_bulk',
13072                             p_error_text     => SUBSTRB(SQLERRM,1,240));
13073     raise;
13074 END copy_structures_bulk;
13075 
13076 FUNCTION calc_duration( p_calendar_id NUMBER, p_start_date DATE, p_finish_date DATE ) RETURN NUMBER IS
13077     l_return_duration  NUMBER;
13078     l_duration_days    NUMBER;
13079     l_msg_count                    NUMBER;
13080     l_msg_data                     VARCHAR2(250);
13081     l_return_status                VARCHAR2(2);
13082 BEGIN
13083 
13084     pa_duration_utils.get_duration(p_calendar_id   => p_calendar_id ,
13085                                    p_start_date    => p_start_date,
13086                                    p_end_date      => p_finish_date,
13087                                    x_duration_days => l_duration_days,
13088                                    x_duration_hours => l_return_duration ,
13089                                    x_return_status  => l_return_status,
13090                                    x_msg_count      => l_msg_count,
13091                                    x_msg_data       => l_msg_data);
13092     return l_return_duration;
13093 
13094 END calc_duration;
13095 
13096 PROCEDURE get_version_ids(
13097  p_task_id            NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13098 ,p_task_version_id   NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13099 ,p_project_id        NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13100 ,x_structure_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13101 ,x_task_version_id      OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13102 )  IS
13103    CURSOR cur_str_ver_id1
13104    IS
13105      SELECT parent_structure_version_id
13106        FROM pa_proj_element_versions
13107       WHERE element_version_id = p_task_version_id;
13108 
13109    CURSOR cur_str_ver_id2
13110    IS
13111      SELECT element_version_id, parent_structure_version_id
13112        FROM pa_proj_element_versions
13113       WHERE proj_element_id = p_task_id
13114         AND project_id = p_project_id
13115       ;
13116 
13117 BEGIN
13118 
13119         IF p_task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_task_version_id IS NOT NULL
13120         THEN
13121             OPEN cur_str_ver_id1;
13122             FETCH cur_str_ver_id1 INTO x_structure_version_id;
13123             CLOSE cur_str_ver_id1;
13124             x_task_version_id := p_task_version_id;
13125         ELSIF ( p_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_task_version_id IS NULL ) AND
13126              ( p_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_task_id IS NOT NULL )
13127         THEN
13128             OPEN cur_str_ver_id2;
13129             FETCH cur_str_ver_id2 INTO x_task_version_id, x_structure_version_id;
13130             CLOSE cur_str_ver_id2;
13131         END IF;
13132 
13133 END get_version_ids;
13134 
13135 
13136 PROCEDURE get_task_version_id(
13137  p_project_id        NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13138 ,p_structure_version_id   NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13139 ,p_task_id            NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13140 ,x_task_version_id      OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13141 )  IS
13142 
13143    CURSOR cur_task_ver_id
13144    IS
13145      SELECT element_version_id
13146        FROM pa_proj_element_versions
13147       WHERE proj_element_id = p_task_id
13148         AND parent_structure_version_id = p_structure_version_id
13149         AND project_id = p_project_id;
13150 
13151 BEGIN
13152         IF p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_structure_version_id IS NOT NULL AND
13153            p_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_task_id IS NOT NULL AND
13154            p_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_project_id IS NOT NULL
13155         THEN
13156             OPEN cur_task_ver_id;
13157             FETCH cur_task_ver_id INTO x_task_version_id;
13158             CLOSE cur_task_ver_id;
13159         END IF;
13160 END get_task_version_id;
13161 
13162 
13163 PROCEDURE rollup_dates(
13164    p_tasks_in             IN pa_project_pub.task_out_tbl_type
13165   ,p_task_version_id      IN NUMBER  := null
13166   ,p_structure_version_id IN NUMBER
13167   ,p_project_id           IN NUMBER
13168   ,x_msg_count            OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13169   ,x_msg_data             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13170   ,x_return_status        OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
13171 
13172   i                    NUMBER;
13173 
13174   l_tasks_ver_ids      PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
13175   l_task_version_id    NUMBER;
13176 
13177   l_msg_count          NUMBER;
13178   l_return_status      VARCHAR2(1);
13179   l_msg_data           VARCHAR2(2000);
13180   l_data               VARCHAR2(2000);
13181   l_msg_index_out      NUMBER;
13182   API_ERROR            EXCEPTION;
13183   j                    NUMBER;
13184 
13185 BEGIN
13186 
13187  IF p_task_version_id IS NULL
13188  THEN
13189      i := p_tasks_in.first;
13190      j := 1;
13191      IF p_tasks_in.exists(i)
13192      THEN
13193          WHILE i IS NOT NULL LOOP
13194              IF p_tasks_in(i).task_version_id IS NOT NULL AND
13195                 p_tasks_in(i).task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13196              THEN
13197                  --l_tasks_ver_ids.extend;
13198                  l_tasks_ver_ids(j) := p_tasks_in(i).task_version_id;
13199 
13200              ELSIF ( p_tasks_in(i).pa_task_id IS NOT NULL AND p_tasks_in(i).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) AND
13201                    ( p_tasks_in(i).task_version_id IS NULL OR p_tasks_in(i).task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) AND p_structure_version_id IS NOT NULL
13202              THEN
13203                  --PA_PROJECT_PUB.update_project does not populate task versions for the tasks being updated.
13204                  --in this case we have to pick this from databse.
13205                  get_task_version_id(
13206                        p_project_id                  => p_project_id
13207                       ,p_task_id                     => p_tasks_in(i).pa_task_id
13208                       ,p_structure_version_id        => p_structure_version_id
13209                       ,x_task_version_id                => l_task_version_id
13210                      );
13211 
13212                  --l_tasks_ver_ids.extend;
13213                  l_tasks_ver_ids(j) := l_task_version_id;
13214 
13215              END IF;
13216             i := p_tasks_in.next(i);
13217             j := j + 1;
13218          END LOOP;
13219      END IF;
13220      --To avoid no_data_found when this array is read in PA_TASK_PUB1.Cal_Task_weights
13221      --l_tasks_ver_ids.extend;
13222      --l_tasks_ver_ids(l_tasks_ver_ids.count) := null;
13223  ELSE
13224      l_tasks_ver_ids(1) := p_task_version_id;
13225  END IF;
13226 
13227      PA_STRUCT_TASK_ROLLUP_PUB.TASKS_ROLLUP_UNLIMITED(
13228                    p_calling_module        => 'AMG'
13229                   ,p_element_versions      => l_tasks_ver_ids
13230                   ,x_return_status         => l_return_status
13231                   ,x_msg_count             => l_msg_count
13232                   ,x_msg_data              => l_msg_data);
13233 
13234          if l_return_status <> FND_API.G_RET_STS_SUCCESS then
13235             x_msg_count := FND_MSG_PUB.count_msg;
13236             x_return_status := l_return_status ;        -- Bug 3044915
13237             if x_msg_count = 1 then
13238                pa_interface_utils_pub.get_messages
13239                     (p_encoded        => FND_API.G_TRUE,
13240                      p_msg_index      => 1,
13241                      p_msg_count      => l_msg_count,
13242                      p_msg_data       => l_msg_data,
13243                      p_data           => l_data,
13244                      p_msg_index_out  => l_msg_index_out);
13245               x_msg_data := l_data;
13246             end if;
13247              raise API_ERROR;
13248          end if;
13249          x_return_status :=  FND_API.G_RET_STS_SUCCESS;    -- Bug3044915
13250 END rollup_dates;
13251 
13252 /*==================================================================
13253    This API is called from pa_project_pub.create_project and does the
13254    processing to create the structure information for the tasks.
13255    Included the api for Post FP K one off. Bug 2931183
13256    This API is called from pa_project_pub.update_project which passes
13257    the structure version id through p_structure_version_id parameter.
13258    The complete WBS is passed to this API in p_tasks_in_tbl. Depending
13259    on whether the task is an existing task or a new task, task creation
13260    or task updation is performed.
13261  ==================================================================*/
13262 
13263 PROCEDURE PROCESS_TASK_STRUCTURE_BULK
13264    (  p_api_version_number              IN        NUMBER
13265      ,p_commit                          IN        VARCHAR2
13266      ,p_init_msg_list                   IN        VARCHAR2
13267      ,p_calling_module                  IN        VARCHAR2
13268      ,p_project_id                      IN        pa_projects_all.project_id%TYPE
13269      ,p_source_project_id               IN        pa_projects_all.project_id%TYPE
13270      ,p_pm_product_code                 IN        pa_projects_all.pm_product_code%TYPE
13271      ,p_structure_type                  IN        pa_structure_types.structure_type_class_code%TYPE
13272      ,p_tasks_in_tbl                    IN        pa_project_pub.task_in_tbl_type
13273      ,p_create_task_version_only        IN        VARCHAR2
13274      ,p_wp_str_exists                   IN        VARCHAR2
13275      ,p_is_wp_separate_from_fn          IN        VARCHAR2
13276      ,p_is_wp_versioning_enabled        IN        VARCHAR2
13277      ,p_structure_version_id            IN        pa_proj_elem_ver_structure.element_version_id%TYPE --IUP: Populated only in case of Update_project context
13278      -- Included NOCOPY for the following parameter.
13279      -- PA L Changes 3010538
13280      ,p_process_mode                    IN        VARCHAR2
13281      -- Bug 3075609. To identify create task version only context.
13282      ,p_create_task_versions_only       IN        VARCHAR2
13283      ,px_tasks_out_tbl                  IN OUT NOCOPY   pa_project_pub.task_out_tbl_type
13284      ,x_return_status                   OUT       NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13285      ,x_msg_count                       OUT       NOCOPY NUMBER --File.Sql.39 bug 4440895
13286      ,x_msg_data                        OUT       NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
13287 AS
13288 
13289 -- Cursors Definition
13290 
13291 -- This cursor is used to get the auto publish flag on creation for a given project_id
13292 /* Bug 2955589. This cursor is no longer used.
13293 CURSOR cur_auto_pub_flag(c_project_id pa_projects_all.project_id%TYPE)
13294   IS
13295   SELECT AUTO_PUB_UPON_CREATION_FLAG
13296     FROM pa_proj_workplan_attr
13297    WHERE project_id = c_project_id;
13298 */
13299 -- This cursor is used to get the structure id given the structure type and project_id
13300 CURSOR get_structure(c_project_id pa_projects_all.project_id%TYPE, c_struc_type pa_structure_types.structure_type_class_code%TYPE) IS
13301     select pelem.proj_element_id
13302       from pa_proj_elements pelem,
13303            pa_proj_structure_types ppstr,
13304            pa_structure_types pstr
13305      where pelem.project_id = c_project_id
13306        and pstr.structure_type_class_code = c_struc_type
13307        and pstr.structure_type_id = ppstr.structure_type_id
13308        and ppstr.proj_element_id = pelem.proj_element_id;
13309 
13310 -- This cursor is used to get the project number given the project_id
13311 CURSOR   l_amg_project_csr(c_project_id pa_projects.project_id%type)
13312    IS
13313    SELECT   segment1
13314    FROM     pa_projects p
13315    WHERE    p.project_id = c_project_id;
13316 
13317 --The following cursor will be used when the structure type is
13318 --Financial as some of the attributes have been derived and updated
13319 --in the pa_tasks table and we need to use them for structures processing.
13320 CURSOR cur_pa_tasks(c_project_id pa_projects_all.project_id%TYPE,c_task_id pa_tasks.task_id%TYPE)
13321    IS
13322    SELECT task_number, long_task_name, description,
13323           parent_task_id,carrying_out_organization_id,
13324           pm_task_reference, address_id, task_manager_person_id
13325      FROM pa_tasks
13326     WHERE project_id = c_project_id
13327       AND task_id = c_task_id;
13328 
13329 l_cur_pa_tasks_rec cur_pa_tasks%ROWTYPE; -- userd only for create task case
13330 
13331 --ADUT. This cursor is required to identify if the source is a project / template.
13332 Cursor cur_template_flag(c_proj_id pa_projects_all.project_id%TYPE)
13333    Is
13334    select NVL(template_flag,'N')
13335    from pa_projects
13336    where project_id = c_proj_id;
13337 
13338 -- IUP: Cursors added for changes done to this api so it can be called from update_project
13339 --Cursor to get the record version number of the task record which needs to be updated in pa_proj_elements table
13340 CURSOR cur_rec_ver_num(c_task_id pa_tasks.task_id%TYPE)
13341     IS
13342     SELECT record_version_number
13343     FROM pa_proj_elements
13344     WHERE proj_element_id = c_task_id
13345     AND object_type = 'PA_TASKS';
13346 
13347 --Cursor to get the task version id when task id and structure version id is known
13348 CURSOR cur_pa_task_ver( c_structure_version_id pa_proj_element_versions.parent_structure_version_id%TYPE, c_task_id pa_tasks.task_id%TYPE )
13349     IS
13350     SELECT element_version_id, record_version_number
13351     FROM pa_proj_element_versions
13352     WHERE project_id = p_project_id
13353     AND proj_element_id = c_task_id
13354     AND parent_structure_version_id = c_structure_version_id
13355     AND object_type = 'PA_TASKS';
13356 
13357 --Cursor to get the parent version id of the task version id
13358 CURSOR cur_parent_object_rel( c_task_version_id pa_proj_elem_ver_schedule.element_version_id%TYPE )
13359     IS
13360     SELECT object_id_from1   -- parent task id
13361           ,object_relationship_id,  -- relationship id reqd for update relationship API
13362            record_version_number,
13363            weighting_percentage     -- Bug 3075609. We need to get hold of the weightage of the task in db.
13364     FROM pa_object_relationships
13365     WHERE object_id_to1 = c_task_version_id
13366     AND relationship_type = 'S';
13367 
13368  -- Added for DFF attributes for calling update_schedule_version
13369 CURSOR cur_ver_sch_attr_rec(c_element_version_id IN pa_proj_elem_ver_schedule.element_version_id%TYPE)
13370     IS
13371     SELECT *
13372     FROM pa_proj_elem_ver_schedule
13373     WHERE element_version_id = c_element_version_id
13374     AND project_id = p_project_id;
13375 
13376 l_ver_sch_attr_rec              cur_ver_sch_attr_rec%ROWTYPE;
13377 
13378 --Cursor to get the task type associated with the task id
13379 CURSOR cur_task_type_id(c_task_id pa_tasks.task_id%TYPE)
13380     IS
13381     SELECT type_id
13382     FROM pa_proj_elements
13383     WHERE proj_element_id = c_task_id
13384     AND project_id = p_project_id;
13385 
13386 --Cursor to get the task id if task element version id is known
13387 CURSOR cur_elem_ver_to_task_id( c_task_version_id pa_proj_element_versions.element_version_id%TYPE )
13388     IS
13389       SELECT proj_element_id
13390         FROM pa_proj_element_versions
13391        WHERE project_id = p_project_id
13392          AND element_version_id = c_task_version_id;
13393 
13394 
13395 --Cursor added for bug 3057575 :
13396 --Cursor to get all the task ver id for a particular Structure version
13397 CURSOR   cur_all_task_ver_id( c_structure_version_id pa_proj_element_versions.parent_structure_version_id%TYPE )
13398    IS
13399    Select element_version_id
13400    from pa_proj_element_versions
13401    where parent_structure_version_id = c_structure_version_id
13402     and object_type = 'PA_TASKS';
13403 
13404 --Cursor added for bug 3057575 :
13405 --Cursor to get the task number from task ver id
13406 CURSOR cur_ver_id_to_task_num( c_task_version_id pa_proj_element_versions.element_version_id%TYPE )
13407     IS
13408     SELECT p1.element_number
13409     FROM pa_proj_elements p1, pa_proj_element_versions pv1
13410     WHERE pv1.element_version_id = c_task_version_id
13411     AND p1.proj_element_id = pv1.proj_element_id;
13412 
13413 -- End Cursors Definition
13414 
13415 -- Definition for the table types used in this API
13416 TYPE display_sequence_tbl IS TABLE OF pa_proj_element_versions.display_sequence%TYPE
13417         INDEX BY BINARY_INTEGER;
13418 TYPE wbs_level_tbl IS TABLE OF pa_proj_element_versions.wbs_level%TYPE
13419         INDEX BY BINARY_INTEGER;
13420 TYPE wbs_number_tbl IS TABLE OF pa_proj_element_versions.wbs_number%TYPE
13421         INDEX BY BINARY_INTEGER;
13422 TYPE child_count_tbl IS TABLE OF NUMBER
13423         INDEX BY BINARY_INTEGER;
13424 TYPE weighting_percentage_tbl IS TABLE OF pa_object_relationships.weighting_percentage%TYPE
13425         INDEX BY BINARY_INTEGER;
13426 TYPE task_version_id_tbl IS TABLE OF pa_proj_element_versions.element_version_id%TYPE
13427         INDEX BY BINARY_INTEGER;
13428 
13429 ----Table Type added for bug 3057575 :
13430 TYPE task_parent_id_tbl_type IS TABLE OF pa_tasks.task_id%TYPE
13431         INDEX BY BINARY_INTEGER;
13432 ----Table Type added for bug 3057575 :
13433 TYPE task_ver_id_passed_tbl_type IS TABLE OF pa_proj_element_versions.element_version_id%TYPE
13434         INDEX BY BINARY_INTEGER;
13435 
13436 -- End of Definition for the table types
13437 
13438 -- Header level variables common to all tasks required for update/create task/project cases.
13439 l_structure_id                  pa_proj_elements.proj_element_id%TYPE;
13440 l_structure_version_id          pa_proj_element_versions.element_version_id%TYPE;
13441 l_task_unpub_ver_status_code    pa_proj_element_versions.task_unpub_ver_status_code%TYPE;
13442 l_add_task_security             VARCHAR2(1);
13443 l_default_task_type_id          pa_proj_elements.type_id%TYPE;
13444 l_update_task_security          VARCHAR2(1);
13445 l_str_status_code               pa_proj_elem_ver_structure.status_code%TYPE;
13446 l_amg_segment1                  pa_projects_all.segment1%TYPE;
13447 
13448 -- Bug 3075609
13449 l_maintain_weightages           VARCHAR2(1); -- We need not maintain weightages during code flow always. This var will track it.
13450 l_existing_task_set_max_wt      VARCHAR2(1); -- If a task is indented/ moved under a parent with no other progressible task, this
13451                                              -- task should have a weightage of 100. This flag will track this.
13452 
13453 -- Bug 3075609
13454 l_new_structure_version         varchar2(1) := 'Y';  -- In the update context, we could be either updating an existing
13455                                                      -- structure version or be creating a new structure version. We need
13456                                                      -- to differentiate the two scenarios.
13457 
13458 -- rec that contains all tasks information.
13459 l_task_in_rec                   pa_project_pub.task_in_rec_type;
13460 
13461 -- proj element level variables
13462 l_task_id                       pa_tasks.task_id%TYPE;         -- task id of the current task being processed in loop
13463 l_parent_task_id                pa_tasks.parent_task_id%TYPE;  -- parent task id of the current task being processed in loop
13464 l_task_version_id               pa_proj_element_versions.element_version_id%TYPE;     -- stores version id of current task being processed
13465 
13466 -- version level variables required only for update task case.
13467 l_proj_elem_ver_rvn             pa_proj_element_versions.record_version_number%TYPE;  -- record version number of proj element table
13468 l_proj_elem_ver_rowid           VARCHAR2(255);                                        -- rowid of the task being updated.
13469 l_relationship_id               pa_object_relationships.object_relationship_id%TYPE;
13470 l_obj_rel_rvn                   NUMBER;
13471 
13472 -- flexfield attributes used for updating/creating element version and schedule versions table.
13473 l_attribute_category            PA_PROJ_ELEMENT_VERSIONS.attribute_category%TYPE;
13474 l_attribute1                    PA_PROJ_ELEMENT_VERSIONS.attribute1%TYPE;
13475 l_attribute2                    PA_PROJ_ELEMENT_VERSIONS.attribute2%TYPE;
13476 l_attribute3                    PA_PROJ_ELEMENT_VERSIONS.attribute3%TYPE;
13477 l_attribute4                    PA_PROJ_ELEMENT_VERSIONS.attribute4%TYPE;
13478 l_attribute5                    PA_PROJ_ELEMENT_VERSIONS.attribute5%TYPE;
13479 l_attribute6                    PA_PROJ_ELEMENT_VERSIONS.attribute6%TYPE;
13480 l_attribute7                    PA_PROJ_ELEMENT_VERSIONS.attribute7%TYPE;
13481 l_attribute8                    PA_PROJ_ELEMENT_VERSIONS.attribute8%TYPE;
13482 l_attribute9                    PA_PROJ_ELEMENT_VERSIONS.attribute9%TYPE;
13483 l_attribute10                   PA_PROJ_ELEMENT_VERSIONS.attribute10%TYPE;
13484 l_attribute11                   PA_PROJ_ELEMENT_VERSIONS.attribute11%TYPE;
13485 l_attribute12                   PA_PROJ_ELEMENT_VERSIONS.attribute12%TYPE;
13486 l_attribute13                   PA_PROJ_ELEMENT_VERSIONS.attribute13%TYPE;
13487 l_attribute14                   PA_PROJ_ELEMENT_VERSIONS.attribute14%TYPE;
13488 l_attribute15                   PA_PROJ_ELEMENT_VERSIONS.attribute15%TYPE;
13489 --Bug 6153503
13490 l_return_msg                  varchar2(2000);
13491 l_validate_status             varchar2(1);
13492 
13493 -- Variables required for calculating display sequence, wbs level and weightage etc.
13494 l_display_sequence_tbl          display_sequence_tbl;
13495 l_wbs_level_tbl                 wbs_level_tbl;
13496 l_wbs_number_tbl                wbs_number_tbl;
13497 l_child_count_tbl               child_count_tbl;
13498 l_weighting_percentage_tbl      weighting_percentage_tbl;
13499 l_task_version_id_tbl           task_version_id_tbl;
13500 l_top_task_count                NUMBER;
13501 l_disp_seq                      NUMBER;
13502 
13503 -- Bug 3075609. The following plsql table will indicate at any point of time if the parent
13504 -- contains a task which has progress enabled.
13505 l_child_indicator_tbl           PA_PLSQL_DATATYPES.Char1TabTyp;
13506 
13507 -- Bug 3075609. This is a table of task versions for which atleast one of its child has changed
13508 -- its parent. That a child task has moved out of this branch. This local variable will be indexed
13509 -- with the task version ids so that eliminating duplicates is easy.
13510 l_affected_parents_tbl          PA_PLSQL_DATATYPES.Char1TabTyp;
13511 
13512 l_dummy_char                    VARCHAR2(1);
13513 l_dummy_number                  NUMBER;
13514 
13515 -- Standard parameters
13516 l_return_status                 varchar2(1);
13517 l_error_msg_code                varchar2(30);
13518 l_msg_count                     NUMBER := 0;
13519 l_data                          VARCHAR2(2000);
13520 l_msg_data                      VARCHAR2(2000);
13521 l_msg_index_out                 NUMBER;
13522 l_debug_mode                    VARCHAR2(1);
13523 l_module_name                   VARCHAR2(100) := 'pa.plsql.PA_PROJ_TASK_STRUC_PUB';
13524 l_process_code                  VARCHAR2(30);
13525 l_task_weight_basis_code        VARCHAR2(30);
13526 l_update_wbs_flag               VARCHAR2(1);
13527 
13528 l_debug_level2                  CONSTANT NUMBER := 2;
13529 l_debug_level3                  CONSTANT NUMBER := 3;
13530 l_debug_level4                  CONSTANT NUMBER := 4;
13531 l_debug_level5                  CONSTANT NUMBER := 5;
13532 l_debug_level6                  CONSTANT NUMBER := 6;
13533 
13534 --bug 3010538
13535 l_WBS_changed_flag              VARCHAR2(1) := 'N';
13536 l_progressable_task             VARCHAR2(1);  --bug 3035902 maansari
13537 --end bug 3010538
13538 
13539 -- Bug 3091798
13540 l_request_id                    pa_proj_elem_ver_structure.conc_request_id%TYPE;
13541 
13542 -- Variables added for bug 3057575 :
13543 row_task_ver_id                 cur_all_task_ver_id%ROWTYPE;
13544 task_parent_id_tbl              task_parent_id_tbl_type;
13545 task_ver_id_passed_tbl          task_ver_id_passed_tbl_type;
13546 l_temp_count                    NUMBER;
13547 l_temp_success                  VARCHAR2(1);
13548 l_hierarchy_count               NUMBER;
13549  -- l_err_task_number               pa_tasks.task_number%TYPE; bug 6193314
13550  	 l_err_task_number               pa_proj_elements.element_number%TYPE;
13551 l_shared                        VARCHAR(1) := 'N'; -- Added for Bug#3451073
13552 
13553 /* Bug # 3420093 - Adding Progress Management modifications to create_project and update_project flow. */
13554 
13555     -- Amit Bug 3964548 Begin
13556     -- Changed l_add_task_ver_ids, l_add_planned_effort, l_add_start_date, l_add_end_date
13557     -- to SYSTEM.pa_num_tbl_type from PA_NUM_1000_NUM
13558     --l_add_task_ver_ids      PA_NUM_1000_NUM := PA_NUM_1000_NUM();
13559     --l_add_planned_effort    PA_NUM_1000_NUM := PA_NUM_1000_NUM();
13560     --l_add_start_date        PA_DATE_1000_DATE := PA_DATE_1000_DATE();
13561     --l_add_end_date          PA_DATE_1000_DATE := PA_DATE_1000_DATE();
13562 
13563     l_add_task_ver_ids      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13564     l_add_planned_effort    SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13565     l_add_start_date        SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
13566     l_add_end_date          SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
13567     l_pm_product_code       SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
13568     l_add_plan_task_id      NUMBER;
13569 
13570     CURSOR cur_wp_task_csr_duplicate (c_project_id pa_projects_all.project_id%TYPE,
13571                             c_pm_source_reference pa_proj_elements.pm_source_reference%TYPE) IS
13572     SELECT proj_element_id
13573     FROM   pa_proj_elements pelem
13574     WHERE  project_id  = c_project_id
13575     AND    pm_source_reference = c_pm_source_reference
13576     AND    exists(select 1
13577                      from pa_proj_structure_types pstype, pa_structure_types types
13578                      where pstype.proj_element_id = pelem.parent_structure_id
13579                      and pstype.structure_type_id = types.structure_type_id
13580                      and types.structure_type = p_structure_type);
13581     -- Amit Bug 3964548 End
13582 
13583     l_del_task_ver_ids      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13584 
13585     cursor l_task_cur(p_project_id NUMBER) is
13586     select
13587     element_version_id,planned_effort,actual_start_date,actual_finish_date
13588     from pa_proj_elem_ver_schedule ppevs, pa_proj_elements ppe
13589     where ppevs.project_id = ppe.project_id
13590     and ppevs.proj_element_id = ppe.proj_element_id
13591     and ppe.object_type = 'PA_TASKS'
13592     and ppevs.project_id = p_project_id;
13593     /** cursor added by aditi for bug 4120380. This is added to verify if the task_number is being modified by AMG Update_project script,
13594     Only then we need to prefix the task_number with a '-', so as to prevent primary key violation, and sucessful update.**/
13595    /*bug#5243018 : Reverting the fix in Bug 4120380
13596     CURSOR cur_proj_elements_info(c_task_id pa_proj_elements.proj_element_id%TYPE)
13597                               IS
13598                               SELECT  element_number, name
13599                               FROM    pa_proj_elements
13600                               WHERE   proj_element_id = c_task_id;
13601       l_proj_elements_info    cur_proj_elements_info%ROWTYPE; */
13602     /** changes end for bug 4120380 by aditi **/
13603     l_task_cur_rec      l_task_cur%rowtype;
13604 
13605     l_taskin_rec        pa_project_pub.task_in_rec_type;
13606     l_taskout_rec       pa_project_pub.task_out_rec_type;
13607 
13608     l_i         NUMBER;
13609     --Added by rtarway for BUG 4059962
13610     l_financial_task_flag VARCHAR2(1);
13611     l_share_code          VARCHAR2(30);
13612     --Added by rtarway for BUG 4059962
13613 
13614     --Added by rtarway for BUG 4132590
13615      CURSOR check_hidden_assgn_exists(p_element_version_id IN NUMBER) IS
13616      SELECT 'Y'
13617      FROM pa_resource_assignments ra
13618      WHERE ra.ta_display_flag = 'N'
13619      AND ra.wbs_element_version_id = p_element_version_id
13620      AND rownum = 1;
13621 
13622      l_hidden_assgn VARCHAR2(1);
13623    --Added by rtarway for BUG 4132590
13624      l_fin_task_id NUMBER;
13625      l_fin_task_reference VARCHAR2(250);
13626 
13627 /* Bug # 3420093 - Adding Progress Management modifications to create_project and update_project flow. */
13628 
13629 -- Begin fix for Bug # 4373055.
13630 
13631 l_str_ver_id            NUMBER:= null;
13632 l_conc_request_id       NUMBER := null;
13633 l_message_name  VARCHAR2(30) := null;
13634 l_message_type  VARCHAR2(30) := null;
13635 
13636 -- End fix for Bug # 4373055.
13637 
13638 -- Addition for Bug 6458891
13639     cursor cur_prev_prog (p_project_id NUMBER, p_object_id NUMBER, p_object_version_id NUMBER) is
13640         select
13641         planned_effort, est_remaining_effort, completed_percentage
13642         from PA_TASK_PROGRESS_AMG_V
13643         where
13644         project_id = p_project_id
13645         and OBJECT_ID = p_object_id
13646         and OBJECT_VERSION_ID = p_object_version_id
13647         and STRUCTURE_TYPE_CLASS_CODE='WORKPLAN';
13648 
13649 l_prev_planned_effort Number;
13650 l_prev_etc_effort Number;
13651 l_prev_percent_comp Number;
13652 l_update_task_det_flag varchar2(1);
13653 
13654 --  Bug 6717386
13655 CURSOR cur_struc_ver_wp(c_project_id pa_projects_all.project_id%TYPE, c_structure_type pa_structure_types.structure_type%TYPE)
13656    IS
13657      SELECT c.element_version_id
13658        FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
13659             ,pa_proj_elem_ver_structure d
13660       WHERE c.project_id = c_project_id
13661         AND a.structure_type_id = b.structure_type_id
13662         AND b.proj_element_id = c.proj_element_id
13663         AND a.structure_type = c_structure_type
13664         AND d.project_id = c.project_id
13665         AND d.element_version_id = c.element_version_id
13666         AND d.status_code = 'STRUCTURE_WORKING';
13667 
13668 l_struct_ver_id      pa_proj_element_versions.element_version_id%TYPE;
13669 l_status_code        pa_proj_elements.status_code%type;
13670 --  Bug 6717386
13671 
13672 BEGIN
13673 
13674      IF p_commit = FND_API.G_TRUE THEN
13675              SAVEPOINT process_task_struc;
13676      END IF;
13677 
13678      IF p_init_msg_list = FND_API.G_TRUE THEN
13679           FND_MSG_PUB.initialize;
13680      END IF;
13681 
13682      x_msg_count := 0;
13683      x_return_status := FND_API.G_RET_STS_SUCCESS;
13684      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
13685 
13686      -- Moved down this code during UT.
13687      IF l_debug_mode = 'Y' THEN
13688           pa_debug.g_err_stage:= 'Entering PROCESS_TASK_STRUCTURE_BULK';
13689           pa_debug.write(l_module_name,pa_debug.g_err_stage,
13690                                    l_debug_level2);
13691 
13692           --For bug 4252182
13693           pa_debug.set_curr_function( p_function   => 'PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK',
13694                                  p_debug_mode => l_debug_mode );
13695 
13696      END IF;
13697 
13698      -- Check for business rules violations
13699      IF l_debug_mode = 'Y' THEN
13700 
13701           pa_debug.g_err_stage:= 'Input parameter List :';
13702           pa_debug.write(l_module_name,pa_debug.g_err_stage,
13703                                      l_debug_level3);
13704 
13705           pa_debug.g_err_stage:= 'p_project_id : ' || p_project_id;
13706           pa_debug.write(l_module_name,pa_debug.g_err_stage,
13707                                      l_debug_level3);
13708 
13709           pa_debug.g_err_stage:= 'p_pm_product_code : ' || p_pm_product_code;
13710           pa_debug.write(l_module_name,pa_debug.g_err_stage,
13711                                      l_debug_level3);
13712 
13713           pa_debug.g_err_stage:= 'p_structure_type : ' || p_structure_type;
13714           pa_debug.write(l_module_name,pa_debug.g_err_stage,
13715                                      l_debug_level3);
13716 
13717           pa_debug.g_err_stage:= 'p_wp_str_exists : ' || p_wp_str_exists;
13718           pa_debug.write(l_module_name,pa_debug.g_err_stage,
13719                                      l_debug_level3);
13720 
13721           pa_debug.g_err_stage:= 'p_is_wp_separate_from_fn :' || p_is_wp_separate_from_fn;
13722           pa_debug.write(l_module_name,pa_debug.g_err_stage,
13723                                      l_debug_level3);
13724 
13725           pa_debug.g_err_stage:= 'p_is_wp_versioning_enabled :' || p_is_wp_versioning_enabled;
13726           pa_debug.write(l_module_name,pa_debug.g_err_stage,
13727                                      l_debug_level3);
13728 
13729           -- IUP: Impact of Update_project
13730           pa_debug.g_err_stage:= 'p_structure_version_id :' || p_structure_version_id;
13731           pa_debug.write(l_module_name,pa_debug.g_err_stage,
13732                                      l_debug_level3);
13733 
13734           pa_debug.g_err_stage:= 'p_sprocess_mode :' || p_process_mode;
13735           pa_debug.write(l_module_name,pa_debug.g_err_stage,
13736                                      l_debug_level3);
13737 
13738      END IF;
13739 
13740 
13741      IF l_debug_mode = 'Y' THEN
13742 
13743           pa_debug.g_err_stage:= 'Validating input parameters';
13744           pa_debug.write(l_module_name,pa_debug.g_err_stage,
13745                                      l_debug_level3);
13746      END IF;
13747 
13748      IF  (p_project_id IS NULL) OR
13749          (p_pm_product_code IS NULL) OR
13750          (p_structure_type IS NULL) OR
13751          (p_wp_str_exists IS NULL) OR
13752          (p_is_wp_separate_from_fn IS NULL) OR
13753          (p_is_wp_versioning_enabled IS NULL)OR
13754          (p_process_mode IS NULL)
13755      THEN
13756 
13757           PA_UTILS.ADD_MESSAGE
13758                 (p_app_short_name => 'PA',
13759                   p_msg_name     => 'PA_INV_PARAM_PASSED');  -- Bug 2955589. Changed the message name to
13760           RAISE Invalid_Arg_Exc_WP;                          -- have a generic message.
13761 
13762      END IF;
13763 
13764      -- The following check is not required in the create_project context, but will be required
13765      -- in the update_project context in case we are calling the api for publishing. Having
13766      -- this check as a placeholder for future changes.
13767 
13768      ---IUP:below code is commented out as calling api itself is taking care.
13769      /*
13770      open cur_pa_temp_import(p_project_id);
13771      fetch cur_pa_temp_import into l_dummy_char;
13772      IF cur_pa_temp_import%FOUND THEN
13773           IF l_debug_mode = 'Y' THEN
13774                pa_debug.g_err_stage:= 'Records found in PA_TEMP_IMPORT_TASKS - Returning';
13775                pa_debug.write(l_module_name,pa_debug.g_err_stage,
13776                                           l_debug_level3);
13777           END IF;
13778 
13779           close cur_pa_temp_import;
13780           pa_debug.reset_curr_function;
13781           RETURN;
13782      END IF;
13783      close cur_pa_temp_import;*/
13784 
13785 
13786      -- IUP: Added the below if condition As the processing under this needs to be done only for update_project
13787      -- Following local variables are populated within this if condition
13788      --    l_structure_version_id
13789      --    l_structure_id
13790      --    l_task_unpub_ver_status_code
13791      --    l_add_task_security
13792      --    l_update_task_security populated only for update task case.
13793 -- PA L Changes 3010538
13794     IF p_structure_type IS NOT NULL THEN
13795 
13796 -- Begin fix for Bug # 4373055.
13797 
13798     /*
13799 
13800     l_process_code :=
13801                       PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_CODE(p_project_id => p_project_id
13802                                                                         ,p_structure_type => p_structure_type );
13803           IF nvl(l_process_code,'-1') = 'WUP' THEN
13804 
13805               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13806               THEN
13807                    --Commented out as there is no message defined for amg corresponding to PA_PS_VD_UPDWBS_PRC_INPROC
13808                    --pa_interface_utils_pub.map_new_amg_msg
13809                    --  ( p_old_message_code => 'PA_PS_VD_UPDWBS_PRC_INPROC'
13810                    --   ,p_msg_attribute    => 'CHANGE'
13811                    --   ,p_resize_flag      => 'N'
13812                    --   ,p_msg_context      => 'GENERAL'
13813                    --   ,p_attribute1       => ''
13814                    --   ,p_attribute2       => ''
13815                    --   ,p_attribute3       => ''
13816                    --   ,p_attribute4       => ''
13817                    --   ,p_attribute5       => '');
13818                    l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => p_project_id  -- Bug 3091798
13819                                                                                   ,p_structure_type => p_structure_type );
13820 
13821                    PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
13822                                       --   ,p_msg_name       => 'PA_PS_VD_UPDWBS_PRC_INPROC');Bug 3091798.
13823                                         ,p_msg_name       => 'PA_PS_UPDWBS_PRC_INPROC_AMG',  -- Bug 3091798. Message includes the request id.
13824                                          p_token1         => 'REQUESTID',
13825                                          p_value1         => l_request_id);
13826 
13827 
13828                    raise Invalid_Arg_Exc_WP;
13829               END IF ;
13830           ELSIF nvl(l_process_code,'-1') = 'WUE' THEN
13831 
13832               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13833               THEN
13834                    l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => p_project_id  --Bug 3091798
13835                                                                                   ,p_structure_type => p_structure_type );
13836 
13837                    --Commented out as there is no message defined for amg corresponding to PA_PS_VD_UPD_WBS_PRC_ERR
13838                    --pa_interface_utils_pub.map_new_amg_msg
13839                    --  ( p_old_message_code => 'PA_PS_VD_UPD_WBS_PRC_ERR'
13840                    --   ,p_msg_attribute    => 'CHANGE'
13841                    --   ,p_resize_flag      => 'N'
13842                    --   ,p_msg_context      => 'GENERAL'
13843                    --   ,p_attribute1       => ''
13844                    --   ,p_attribute2       => ''
13845                    --    ,p_attribute3       => ''
13846                    --   ,p_attribute4       => ''
13847                    --   ,p_attribute5       => '');
13848                    PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
13849                                        --  ,p_msg_name       => 'PA_PS_VD_UPD_WBS_PRC_ERR');Bug 3091798.
13850                                         ,p_msg_name       => 'PA_PS_UPDWBS_PRC_ERR_AMG',  -- Bug 3091798. Message includes the request id.
13851                                          p_token1         => 'REQUESTID',
13852                                          p_value1         => l_request_id);
13853 
13854                   raise Invalid_Arg_Exc_WP;
13855               END IF;
13856           END IF;
13857 
13858       */
13859 
13860         PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_MSG(
13861         p_project_id              => p_project_id
13862         , p_structure_type        => p_structure_type
13863         , p_structure_version_id  => null
13864         , p_context               => 'UPDATE_AMG'
13865         , x_message_name          => l_message_name
13866         , x_message_type          => l_message_type
13867         , x_structure_version_id  => l_str_ver_id
13868         , x_conc_request_id       => l_conc_request_id);
13869 
13870 
13871         if l_message_name is not null then
13872 
13873                      PA_UTILS.ADD_MESSAGE(
13874                      p_app_short_name => 'PA'
13875                      , p_msg_name       => l_message_name
13876                      , p_token1         => 'REQUESTID'
13877                      , p_value1         => l_conc_request_id);
13878 
13879                       RAISE Invalid_Arg_Exc_WP;
13880         end if;
13881 
13882 -- End fix for Bug # 4373055.
13883 
13884     END IF ;
13885 -- PA L Changes 3010538
13886 
13887      IF (p_structure_version_id IS NOT NULL)
13888       THEN
13889           --IUP:Check whether the structure version passed is in a valid status
13890           l_str_status_code := PA_PROJECT_STRUCTURE_UTILS.get_structrue_version_status(
13891                                                        p_project_id                => p_project_id
13892                                                        ,p_structure_version_id     => p_structure_version_id );
13893           IF l_str_status_code IS NULL
13894           THEN
13895                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
13896                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID' );
13897                   raise Invalid_Arg_Exc_WP;
13898           ELSIF l_str_status_code in ( 'STRUCTURE_SUBMITTED', 'STRUCTURE_REJECTED', 'STRUCTURE_APPROVED' )
13899           THEN
13900                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
13901                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID2' );
13902                   raise Invalid_Arg_Exc_WP;
13903           END IF;
13904 
13905           IF l_debug_mode = 'Y' THEN
13906               pa_debug.g_err_stage := 'Structure is in a valid Status' ;
13907                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
13908           END IF;
13909 
13910           l_structure_version_id := p_structure_version_id;
13911 
13912           -- get the structure id from structure version id
13913           OPEN  cur_elem_ver_to_task_id(l_structure_version_id);
13914           FETCH cur_elem_ver_to_task_id INTO l_structure_id;
13915           CLOSE cur_elem_ver_to_task_id;
13916 
13917           IF l_debug_mode = 'Y' THEN
13918                pa_debug.g_err_stage:= 'Structure id : '||l_structure_id;
13919                pa_debug.write(l_module_name,pa_debug.g_err_stage,
13920                                           l_debug_level3);
13921 
13922                pa_debug.g_err_stage:= 'Structure version id : '|| l_structure_version_id;
13923                pa_debug.write(l_module_name,pa_debug.g_err_stage,
13924                                           l_debug_level3);
13925 
13926           END IF;
13927 
13928 /*
13929   Bug Fix 5263429
13930   Unable to delete the task from MSP.
13931 
13932   After succesful deletion of a task and the publishing of the structure, a new task is added to the current
13933   working version. And that the task was deleted and the MSP was returning a message saying 'Mark this task for deletion?'.
13934   Ideally this should be used for tasks which are present in the published versions as well. Only those tasks will be marked
13935   for deletion and during publishing those marked tasks will be deleted. All the other tasks which dont have any transactions
13936   and are not present in the published versions should be deleted right away and the MSP should not show any message.
13937 
13938 Analysis:
13939 ---------
13940   This is happening due to value 'M' being returned from the PA_PROJECT_PUB.check_task_mfd APIs OUT param  p_check_task_mfd_flag.
13941   This was happening due to the value 'PUBLISHED' was populated in the task_unpub_ver_status_code column.
13942   When ever a task is created in MSP and sent to oracle projects the pa_project_pub.load_project and
13943   pa_project_pub.execute_update_project are called.
13944 
13945   The pa_project_pub.execute_update_project -> update_project API ...> PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK is called.
13946 
13947   Inside this API the following code is used to derive the value for task_unpub_ver_status_code  column.
13948   This is correct. But after this piece of code all the passed in tasks are processed in a loop. In the
13949   loop the same variable l_task_unpub_ver_status_code is used to get the other tasks status. Hence the
13950   earlier derived value for the new task is getting overridden with the other published task status.
13951   Had the tasks processing happned in such a way that (working) the newly added task is processed
13952   first then this is not an issue at all. Due to the published tasks presence the other value is overwritten
13953   and the same got stored for the new task.
13954 
13955 Solution:
13956 ---------
13957 
13958   Moved the task status derivation code into the loop right before the insert into the element versions table.
13959 
13960 
13961 
13962           --IUP:get the status of newly created task under the passed structure version
13963           IF p_is_wp_separate_from_fn = 'N'
13964           THEN
13965               IF p_is_wp_versioning_enabled = 'Y'
13966               THEN
13967                    l_task_unpub_ver_status_code := 'WORKING';
13968               ELSE
13969                    l_task_unpub_ver_status_code := 'PUBLISHED';
13970               END IF;
13971           ELSE ---split
13972                IF p_structure_type = 'FINANCIAL'
13973                THEN
13974                    l_task_unpub_ver_status_code := 'PUBLISHED';
13975                ELSE --workplan only
13976                    IF p_is_wp_versioning_enabled = 'Y'
13977                    THEN
13978                        l_task_unpub_ver_status_code := 'WORKING';
13979                    ELSE
13980                        l_task_unpub_ver_status_code := 'PUBLISHED';
13981                    END IF;
13982                END IF;
13983           END IF;
13984 
13985 */
13986 
13987           --IUP:getting the security function allowed into local variables.
13988           PA_PM_FUNCTION_SECURITY_PUB.check_function_security
13989                       (p_api_version_number => 1.0,
13990                        p_responsibility_id  => FND_GLOBAL.Resp_id,
13991                        p_function_name      => 'PA_PM_ADD_TASK',
13992                        p_msg_count          => x_msg_count,
13993                        p_msg_data           => x_msg_data,
13994                        p_return_status      => x_return_status,
13995                        p_function_allowed   => l_add_task_security);
13996 
13997           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13998                 IF l_debug_mode = 'Y' THEN
13999                    pa_debug.g_err_stage := 'Error obtaining the value of add task function allowed' ;
14000                    pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
14001                  END IF;
14002                  RAISE Invalid_Arg_Exc_WP;
14003             END IF;
14004 
14005             PA_PM_FUNCTION_SECURITY_PUB.check_function_security
14006                       (p_api_version_number => 1.0,
14007                        p_responsibility_id  => FND_GLOBAL.Resp_id,
14008                        p_function_name      => 'PA_PM_UPDATE_TASK',
14009                        p_msg_count          => x_msg_count,
14010                        p_msg_data           => x_msg_data,
14011                        p_return_status      => x_return_status,
14012                        p_function_allowed   => l_update_task_security);
14013 
14014           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14015               IF l_debug_mode = 'Y' THEN
14016                    pa_debug.g_err_stage := 'Error obtaining the value of update task function allowed' ;
14017                    pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
14018                END IF;
14019                RAISE Invalid_Arg_Exc_WP;
14020           END IF;
14021 
14022      ELSE  -- IF (p_structure_version_id IS NOT NULL) create project case
14023 
14024           l_add_task_security := 'Y'; /* this check is already done in create proejct */
14025 
14026           -- get structure id and structure version id and
14027           -- If auto publish upon creation is on and versioning is enabled then
14028           -- update the workplan structure as working bcoz it is created as pub by copy structure.
14029 
14030           DECLARE
14031              -- We dont require this local var anymore. Bug 2955589.
14032              --l_auto_publish_flag             VARCHAR2(1);
14033              --l_source_template_flag          VARCHAR2(1);
14034           BEGIN
14035                /*   Bug  2955589. As the update is taken care in Copy_Structures_bulk API, the following
14036                     cursor need not be opened.
14037 
14038                open cur_auto_pub_flag(p_project_id);
14039                fetch cur_auto_pub_flag into l_auto_publish_flag;
14040                close cur_auto_pub_flag;
14041 
14042                IF l_debug_mode = 'Y' THEN
14043                     pa_debug.g_err_stage:= 'Auto publish flag : '||l_auto_publish_flag;
14044                     pa_debug.write(l_module_name,pa_debug.g_err_stage,
14045                                                l_debug_level3);
14046                END IF;
14047                */
14048 
14049                -- This condition included after UT.
14050                IF p_structure_type = 'FINANCIAL' THEN
14051                     open get_structure(p_project_id, 'FINANCIAL');
14052                     fetch get_structure into l_structure_id;
14053                     close get_structure;
14054                ELSE -- structure type is WORKPLAN
14055                     open get_structure(p_project_id, 'WORKPLAN');
14056                     fetch get_structure into l_structure_id;
14057                     close get_structure;
14058                END IF;
14059 
14060                IF l_debug_mode = 'Y' THEN
14061                     pa_debug.g_err_stage:= 'Structure id : '||l_structure_id;
14062                     pa_debug.write(l_module_name,pa_debug.g_err_stage,
14063                                                l_debug_level3);
14064                END IF;
14065 
14066                /*   Bug 2955589. The following code is taken care of in Copy_Structures_bulk API.
14067                --ADUT. This cursor will not be opened in the update project context.
14068                open cur_template_flag(p_source_project_id);
14069                fetch cur_template_flag into l_source_template_flag;
14070                close cur_template_flag;
14071 
14072                --IF p_structure_type = 'WORKPLAN' and
14073                IF p_wp_str_exists = 'Y' and --ADUT
14074                   nvl(l_auto_publish_flag,'N') = 'Y' and
14075                   nvl(p_is_wp_versioning_enabled,'N') = 'Y' and
14076                   l_source_template_flag = 'Y' --ADUT
14077                THEN
14078 
14079                     UPDATE pa_proj_elem_ver_structure
14080                        set status_code = 'STRUCTURE_WORKING'
14081                      where project_id = p_project_id
14082                        and proj_element_id = l_structure_id;
14083 
14084                     IF l_debug_mode = 'Y' THEN
14085                          pa_debug.g_err_stage:= 'No of updated records :' || sql%rowcount || ' for structure : ' || l_structure_id;
14086                          pa_debug.write(l_module_name,pa_debug.g_err_stage,
14087                                                     l_debug_level3);
14088                     END IF;
14089 
14090                END IF;
14091 
14092                */
14093                -- Obtain the structure version id to proceed with the processing.
14094                PA_PROJ_ELEMENTS_UTILS.GET_STRUCTURE_INFO(
14095                      p_project_id                 => p_project_id
14096                     ,p_structure_type             => p_structure_type
14097                     ,p_structure_id               => l_structure_id
14098                     ,p_is_wp_separate_from_fn     => p_is_wp_separate_from_fn
14099                     ,p_is_wp_versioning_enabled   => p_is_wp_versioning_enabled
14100                     ,x_structure_version_id       => l_structure_version_id
14101                     ,x_task_unpub_ver_status_code => l_task_unpub_ver_status_code
14102                     ,x_return_status              => x_return_status
14103                     ,x_msg_count                  => x_msg_count
14104                     ,x_msg_data                   => x_msg_data
14105                     );
14106 
14107                IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14108                     IF l_debug_mode = 'Y' THEN
14109                        pa_debug.g_err_stage := 'Error obtaining the structure version id' ;
14110                        pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
14111                     END IF;
14112                     RAISE Invalid_Arg_Exc_WP;
14113                END IF;
14114 
14115                IF l_debug_mode = 'Y' THEN
14116                     pa_debug.g_err_stage:= 'Structure version id : '||l_structure_version_id;
14117                     pa_debug.write(l_module_name,pa_debug.g_err_stage,
14118                                                l_debug_level3);
14119                     pa_debug.g_err_stage:= 'Task unpublished version status code : '||l_task_unpub_ver_status_code;
14120                     pa_debug.write(l_module_name,pa_debug.g_err_stage,
14121                                                l_debug_level3);
14122                END IF;
14123           END;
14124 
14125      END IF; -- End for if p_structure_version_id is null
14126 
14127      -- Bug 3075609. Determine if we want to maintain the task weightages during the program
14128      -- flow or they will be recalculated at the end of the flow.
14129      l_task_weight_basis_code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id => p_project_id) ;
14130 
14131      -- In the following conditions we will be recalculating the weightages completely. So we need to
14132      -- take care of the rest of the scenarios. Where we need not take care we will just set the task
14133      -- weightage to 0.
14134      IF  NOT (
14135               ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' AND
14136                 nvl(l_task_weight_basis_code,'-1') <> 'MANUAL'
14137               ) OR
14138               ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
14139                 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'   AND
14140                 PA_PROJECT_PUB.G_Published_version_exists = 'N' AND
14141                 nvl(l_task_weight_basis_code,'-1') <> 'MANUAL'
14142               ) OR
14143               (
14144                 nvl(l_task_weight_basis_code,'-1') = 'MANUAL' AND
14145                 p_structure_version_id is NULL
14146               )
14147              )
14148      THEN
14149             l_maintain_weightages    := 'Y';
14150      ELSE
14151             l_maintain_weightages    := 'N';
14152      END IF;
14153 
14154      -- Initialize l_top_task_cnt to 0. This denotes the number of top tasks processed
14155      -- at any point in this API. This is used to calculate the wbs number of the top task.
14156      -- Intialize l_disp_seq to 0. This is used to determines the display sequence of the currenly
14157      -- processed task.
14158 
14159      l_top_task_count := 0;
14160      l_disp_seq       := 0;
14161 
14162      ----Added for bug 3057575 :
14163      l_hierarchy_count     := 1;
14164 
14165      -- Get the default task type id. In workplan context, when we create a schedule
14166      -- version we check if the task type allows for non null work quantity. If the task type
14167      -- is passed as null in the input task record, we use the default task type id derived
14168      -- below.
14169      l_default_task_type_id := PA_PROJ_ELEMENTS_UTILS.GET_DEFAULT_TASK_TYPE_ID;
14170 
14171      -- Get the segment1 for the project. Used to show context for error messages.
14172      open l_amg_project_csr(p_project_id);
14173      fetch l_amg_project_csr into l_amg_segment1;
14174      close l_amg_project_csr;
14175 
14176      IF l_debug_mode = 'Y' THEN
14177           pa_debug.g_err_stage:= 'Entering Loop';
14178           pa_debug.write(l_module_name,pa_debug.g_err_stage,
14179                                                          l_debug_level3);
14180      END IF;
14181      -- Do the processing for all the tasks in the plsql table.
14182 
14183      --Added by rtarway for BUG 4320731
14184      task_ver_id_passed_tbl.delete;
14185 
14186      IF nvl(p_tasks_in_tbl.last,0) > 0 THEN
14187           l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(p_project_id); -- Added for bug#3451073
14188           FOR i in p_tasks_in_tbl.first..p_tasks_in_tbl.last LOOP
14189 
14190                -- Reset the locals at the beginning of the loop.
14191                l_parent_task_id         := null;
14192                l_task_in_rec            := p_tasks_in_tbl(i);
14193 
14194                 --Bug 6153503
14195                l_attribute1  :=  null;
14196                l_attribute2  :=  null;
14197                l_attribute3  :=  null;
14198                l_attribute4  :=  null;
14199                l_attribute5  :=  null;
14200                l_attribute6  :=  null;
14201                l_attribute7  :=  null;
14202                l_attribute8  :=  null;
14203                l_attribute9  :=  null;
14204                l_attribute10 :=  null;
14205                l_attribute11  :=  null;
14206                l_attribute12  :=  null;
14207                l_attribute13  :=  null;
14208                l_attribute14  :=  null;
14209                l_attribute15  :=  null;
14210 
14211                -- Bug 2982072. Derive the task id if task reference only is passed.
14212                -- Currently the api differenciates the task create / update contexts only based
14213                -- on the task_id in the input plsql table which is not correct. The user doesnot pass
14214                -- the task ids even for existing tasks but just passes the task reference. We have to
14215                -- derive the task id from the task reference.
14216                -- Irrespective of the structure type we always query for the proj elements table for
14217                -- the task id given the task reference.
14218                DECLARE
14219 /* Bug 3588013 - Added the exists clause for this bug to get proj_element_id for the correct structure
14220              Task Reference should be unique with in structure.
14221 */
14222                     CURSOR cur_wp_task_csr (c_project_id pa_projects_all.project_id%TYPE,
14223                                             c_pm_source_reference pa_proj_elements.pm_source_reference%TYPE) IS
14224                        SELECT proj_element_id
14225                        FROM   pa_proj_elements pelem
14226                        WHERE  project_id  = c_project_id
14227                        AND    pm_source_reference = c_pm_source_reference
14228                        AND    exists(select 1
14229                               from pa_proj_structure_types pstype, pa_structure_types types
14230                               where pstype.proj_element_id = pelem.parent_structure_id
14231                       and pstype.structure_type_id = types.structure_type_id
14232                    and types.structure_type = p_structure_type);
14233                BEGIN
14234                     IF (l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
14235                         l_task_in_rec.pa_task_id IS NULL )
14236                     THEN
14237                         IF  l_task_in_rec.pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
14238                             l_task_in_rec.pm_task_reference IS NULL
14239                         THEN
14240                               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14241                               THEN
14242                                 pa_interface_utils_pub.map_new_amg_msg
14243                                   ( p_old_message_code => 'PA_TASK_REF_AND_ID_MISSING'
14244                                    ,p_msg_attribute    => 'CHANGE'
14245                                    ,p_resize_flag      => 'N'
14246                                    ,p_msg_context      => 'PROJ'
14247                                    ,p_attribute1       => l_amg_segment1
14248                                    ,p_attribute2       => ''
14249                                    ,p_attribute3       => ''
14250                                    ,p_attribute4       => ''
14251                                    ,p_attribute5       => '');
14252                               END IF;
14253                               px_tasks_out_tbl(i).return_status :=  FND_API.G_RET_STS_ERROR ;
14254                               RAISE Invalid_Arg_Exc_WP;
14255                         ELSE
14256                               -- We need the differenciator only in the update project context.
14257                               -- This is not done in create context to avoid cursor opening for each task.
14258                               IF p_structure_version_id is not null THEN
14259                                    OPEN cur_wp_task_csr(p_project_id,l_task_in_rec.pm_task_reference);
14260                                    FETCH cur_wp_task_csr INTO l_task_in_rec.pa_task_id;
14261                                    CLOSE cur_wp_task_csr;
14262                               END IF;
14263                         END IF;
14264                     END IF;
14265                END;
14266                -- End fix for Bug 2982072.
14267 
14268                -- Included the following initializations after UT.
14269                -- In the absence of these we will get unique constraint violation.
14270                l_task_version_id        := null;
14271                l_relationship_id        := null;
14272                l_proj_elem_ver_rvn      := null;
14273                l_proj_elem_ver_rowid    := null;
14274                l_obj_rel_rvn            := null;
14275 
14276                -- Initialize the return status for the task record to success.
14277                px_tasks_out_tbl(i).return_status       := FND_API.G_RET_STS_SUCCESS;
14278 
14279 
14280                -- Validation block
14281                -- validate security, task_reference and task names in appropriate contexts.
14282                IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
14283                   l_task_in_rec.pa_task_id IS NULL -- new tasks to be crated
14284                THEN
14285                     -- Added to check the security as it is not done when called from update_project
14286                     IF l_add_task_security = 'N'
14287                     THEN
14288                          pa_interface_utils_pub.map_new_amg_msg(
14289                                 p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
14290                                 ,p_msg_attribute    => 'CHANGE'
14291                                 ,p_resize_flag      => 'Y'
14292                                 ,p_msg_context      => 'GENERAL'
14293                                 ,p_attribute1       => ''
14294                                 ,p_attribute2       => ''
14295                                 ,p_attribute3       => ''
14296                                 ,p_attribute4       => ''
14297                                 ,p_attribute5       => '');
14298                          RAISE Invalid_Arg_Exc_WP;
14299                     END IF;
14300                     --rtarway, for DHI ER, BUG 4413568
14301             IF (PA_PROJECT_PUB.G_TASK_STR_UPDATE_MODE  = 'PA_UPD_TASK_ATTR') THEN   --bug 4534919
14302             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
14303             p_msg_name => 'PA_WBS_CANT_CHANGE');
14304             RAISE Invalid_Arg_Exc_WP;
14305             END IF;
14306                     -- task reference and task names need to be validated only for workplan cases. For financial cases
14307                     -- these validations are done in add_task_round_one/two.
14308                     IF p_structure_type = 'WORKPLAN' THEN
14309 
14310                          -- Task reference should be non null in AMG flow. For financial tasks this
14311                          -- is checked in add_task_round_one API.
14312                          IF l_task_in_rec.pm_task_reference IS NULL
14313                          OR l_task_in_rec.pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14314                          THEN
14315                               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14316                               THEN
14317                                  pa_interface_utils_pub.map_new_amg_msg
14318                                   ( p_old_message_code => 'PA_TASK_REF_IS_NULL'
14319                                    ,p_msg_attribute    => 'CHANGE'
14320                                    ,p_resize_flag      => 'N'
14321                                    ,p_msg_context      => 'PROJ'
14322                                    ,p_attribute1       => l_amg_segment1
14323                                    ,p_attribute2       => ''
14324                                    ,p_attribute3       => ''
14325                                    ,p_attribute4       => ''
14326                                    ,p_attribute5       => '');
14327                               END IF;
14328                               px_tasks_out_tbl(i).return_status := FND_API.G_RET_STS_ERROR;
14329                               RAISE Invalid_Arg_Exc_WP;
14330                          END IF;
14331 
14332                          --ADUT. The task name cannot be null. For financial tasks this is
14333                          --checked in add_task_round_one API.
14334                          IF l_task_in_rec.task_name IS NULL
14335                          OR l_task_in_rec.task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14336                          THEN
14337 
14338                               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14339                               THEN
14340                                  pa_interface_utils_pub.map_new_amg_msg
14341                                   ( p_old_message_code => 'PA_TASK_NAME_IS_NULL'
14342                                    ,p_msg_attribute    => 'CHANGE'
14343                                    ,p_resize_flag      => 'N'
14344                                    ,p_msg_context      => 'TASK'
14345                                    ,p_attribute1       => l_amg_segment1
14346                                    ,p_attribute2       => l_task_in_rec.pm_task_reference
14347                                    ,p_attribute3       => ''
14348                                    ,p_attribute4       => ''
14349                                    ,p_attribute5       => '');
14350                               END IF;
14351 
14352                               px_tasks_out_tbl(i).return_status := FND_API.G_RET_STS_ERROR;
14353                               RAISE Invalid_Arg_Exc_WP;
14354                          END IF;
14355                     END IF; -- IF p_structure_type = 'WORKPLAN' THEN
14356 
14357                -- for update case only security check is required.
14358                ELSE -- IF l_task_in_rec.pa_task_id IS NULL
14359 
14360                     IF l_update_task_security = 'N'
14361                     THEN
14362                          pa_interface_utils_pub.map_new_amg_msg(
14363                                 p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
14364                                 ,p_msg_attribute    => 'CHANGE'
14365                                 ,p_resize_flag      => 'Y'
14366                                 ,p_msg_context      => 'GENERAL'
14367                                 ,p_attribute1       => ''
14368                                 ,p_attribute2       => ''
14369                                 ,p_attribute3       => ''
14370                                 ,p_attribute4       => ''
14371                                 ,p_attribute5       => '');
14372                          RAISE Invalid_Arg_Exc_WP;
14373                     END IF;
14374 
14375                END IF; -- IF l_task_in_rec.pa_task_id IS NULL
14376 
14377                IF l_debug_mode = 'Y' THEN
14378                     pa_debug.g_err_stage:= 'Done with the validations';
14379                     pa_debug.write(l_module_name,pa_debug.g_err_stage,
14380                                                l_debug_level3);
14381                END IF;
14382 
14383                -- This block does following:
14384                -- 1. Populate l_cur_pa_tasks_rec which has task_number, long_task_name, description, parent_task_id
14385                --    carrying_out_organization_id, pm_task_reference, address_id, task_manager_person_id
14386                -- 2. l_parent_task_id
14387                -- 3. l_task_id -- the task that is being processed.
14388                -- l_proj_elem_rvn of record of pa_proj_elements to be updated
14389                -- before calling api PA_TASK_PUB1.update_task
14390 
14391                IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
14392                   l_task_in_rec.pa_task_id IS NULL -- new tasks to be crated
14393                THEN
14394 
14395                     -- If the structure type is workplan we need to derive the values for certain fields. For financial
14396                     -- context they have already been done and is available in the database - So we'll just query it up.
14397                     IF p_structure_type = 'WORKPLAN' THEN
14398 
14399                          -- Derive the task number for the current task
14400                          IF l_task_in_rec.pa_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.pa_task_number IS NULL
14401                          THEN
14402                             l_cur_pa_tasks_rec.task_number := l_task_in_rec.pm_task_reference;
14403                         --                         ELSE  Bug 6193314  need to comment out
14404 			     /* bug#5243018 : Reverting the fix in Bug 4120380
14405                             l_cur_pa_tasks_rec.task_number := '-'||l_task_in_rec.pa_task_number; -- Bug 4120380 aditi l_task_in_rec.pa_task_number; */
14406 			      --  l_cur_pa_tasks_rec.task_number := l_task_in_rec.pa_task_number;  -- Bug 6193314  need to comment out
14407                 /* any new task being created will also be prefixed with '-'. This is for the case below:
14408                  1.0
14409                    1.1
14410                              2.0    .
14411                  If we insert a new top task , specifying its task_number as 1.1, and update 1.1 to 2.0 and 2.0 to 3.0.*/
14412                          END IF;
14413 
14414                          -- Derive the parent task id
14415                          IF (l_task_in_rec.pa_parent_task_id IS NOT NULL
14416                              AND l_task_in_rec.pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14417                          THEN
14418                               l_cur_pa_tasks_rec.parent_task_id := l_task_in_rec.pa_parent_task_id;
14419                          ELSIF (l_task_in_rec.pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14420                                 AND l_task_in_rec.pm_parent_task_reference IS NOT NULL)
14421                          THEN
14422                               --convert pm_parent_task_reference to parent_task_id.
14423                               --All the parent tasks are created first then child tasks are created. See TRM for AMG load_task api.
14424 
14425                               -- 3721124 changed function call from  PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref
14426                               -- to PA_PROJECT_PVT.Convert_pm_taskref_to_id_all to retrieve task id for task reference
14427                               -- because PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref may return financial task id
14428                               -- in case of SHARED structure
14429                               -- new api call takes structure type as parameter, so it will return task id for the passed structure type only
14430 
14431                               -- PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref(
14432                               --       p_pm_parent_task_reference      =>  l_task_in_rec.pm_parent_task_reference
14433                               --      ,p_project_id                    =>  p_project_id
14434                               --      ,x_parent_task_id                =>  l_cur_pa_tasks_rec.parent_task_id
14435                               --      ,x_return_status                 =>  x_return_status
14436                               --    );
14437 
14438                                  PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
14439                                           p_pa_project_id      => p_project_id
14440                                         , p_structure_type     => 'WORKPLAN'
14441                                      --   3721124 p_pa_task_id will be null in this context
14442                                      -- , p_pa_task_id         => l_cur_pa_tasks_rec.parent_task_id
14443                                         , p_pm_task_reference  => l_task_in_rec.pm_parent_task_reference
14444                                         , p_out_task_id        => l_cur_pa_tasks_rec.parent_task_id
14445                                         , p_return_status      => x_return_status );
14446 
14447                               px_tasks_out_tbl(i).return_status := x_return_status;
14448                               IF x_return_status <> FND_API.G_RET_STS_SUCCESS
14449                               THEN
14450                                    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14451                                    THEN
14452                                               pa_interface_utils_pub.map_new_amg_msg
14453                                               ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
14454                                                ,p_msg_attribute    => 'CHANGE'
14455                                                ,p_resize_flag      => 'N'
14456                                                ,p_msg_context      => 'TASK'
14457                                                ,p_attribute1       => l_amg_segment1
14458                                                ,p_attribute2       => l_cur_pa_tasks_rec.task_number
14459                                                ,p_attribute3       => ''
14460                                                ,p_attribute4       => ''
14461                                                ,p_attribute5       => '');
14462                                    END IF;
14463                                    RAISE Invalid_Arg_Exc_WP;
14464                               END IF;
14465                          ELSE  -- no parent task information provided for the current task.
14466                                -- Current task is a top task. parent id is null.
14467                               l_cur_pa_tasks_rec.parent_task_id := null;
14468                          END IF;
14469 
14470                          -- Included the condition during UT to avoid precision errors.
14471                          IF l_task_in_rec.carrying_out_organization_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14472                               l_cur_pa_tasks_rec.carrying_out_organization_id     := NULL;
14473                          ELSE
14474                               l_cur_pa_tasks_rec.carrying_out_organization_id     := l_task_in_rec.carrying_out_organization_id;
14475                          END IF;
14476 
14477                          -- Included the condition during UT to avoid precision errors.
14478                          IF l_task_in_rec.address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14479                               l_cur_pa_tasks_rec.address_id                       := NULL;
14480                          ELSE
14481                               l_cur_pa_tasks_rec.address_id                       := l_task_in_rec.address_id;
14482                          END IF;
14483                          -- Included the condition during UT to avoid precision errors.
14484                          IF l_task_in_rec.task_manager_person_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14485                               l_cur_pa_tasks_rec.task_manager_person_id           := NULL;
14486                          ELSE
14487                               l_cur_pa_tasks_rec.task_manager_person_id           := l_task_in_rec.task_manager_person_id;
14488                          END IF;
14489                          l_task_id       := NULL;  -- null for workplan create task case.
14490                          l_cur_pa_tasks_rec.pm_task_reference                := l_task_in_rec.pm_task_reference;
14491                /*Commented for bug  2982057 l_cur_pa_tasks_rec.long_task_name                   := l_task_in_rec.long_task_name;*/
14492              /* Code addition for bug 2982057 starts */
14493 
14494             if l_task_in_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.long_task_name IS NULL then
14495                 l_cur_pa_tasks_rec.long_task_name                   := l_task_in_rec.task_name;
14496              else
14497                             l_cur_pa_tasks_rec.long_task_name                   := l_task_in_rec.long_task_name;
14498              end if;
14499 
14500              /* Code addition for bug 2982057 ends */
14501 
14502                          l_cur_pa_tasks_rec.description                      := l_task_in_rec.task_description;
14503 
14504                     ELSE -- structure type is financial
14505                          IF l_debug_mode = 'Y' THEN
14506                               pa_debug.g_err_stage:= 'Task Id in out table: '||px_tasks_out_tbl(i).pa_task_id;
14507                               pa_debug.write(l_module_name,pa_debug.g_err_stage,
14508                                                          l_debug_level3);
14509                          END IF;
14510 
14511                          l_task_id  := px_tasks_out_tbl(i).pa_task_id;
14512                          open cur_pa_tasks(p_project_id,l_task_id);
14513                          fetch cur_pa_tasks into l_cur_pa_tasks_rec;
14514                          close cur_pa_tasks;
14515 
14516                          IF l_debug_mode = 'Y' THEN
14517                               pa_debug.g_err_stage:= 'Task Id in local var '|| l_task_id;
14518                               pa_debug.write(l_module_name,pa_debug.g_err_stage,
14519                                                          l_debug_level3);
14520                          END IF;
14521                           /** Code changes for bug 4120380. For new tasks similar case mentioned above for workplan.**/
14522 			  /* bug#5243018 : Reverting the fix in Bug 4120380
14523             IF l_task_in_rec.pa_task_number IS NOT NULL AND
14524                             l_task_in_rec.pa_task_number <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14525                         THEN
14526                           l_cur_pa_tasks_rec.task_number := '-'||l_task_in_rec.pa_task_number;
14527              END IF; */
14528                       /**  Code end for bug 4120380 by aditi **/
14529                     END IF;
14530 
14531                     l_parent_task_id := l_cur_pa_tasks_rec.parent_task_id;
14532 
14533                     IF l_debug_mode = 'Y' THEN
14534                          pa_debug.g_err_stage:= 'Parent Task Id : '||l_parent_task_id;
14535                          pa_debug.write(l_module_name,pa_debug.g_err_stage,
14536                                                     l_debug_level3);
14537                          pa_debug.g_err_stage:= 'Task Number : '||l_cur_pa_tasks_rec.task_number;
14538                          pa_debug.write(l_module_name,pa_debug.g_err_stage,
14539                                                     l_debug_level3);
14540                     END IF;
14541 
14542                     l_WBS_changed_flag := 'Y';   --bug 3010538
14543 
14544                ELSE -- IF l_task_in_rec.pa_task_id IS NULL
14545 
14546                     -- If the structure type is workplan we need to derive the values for parent task id . For financial
14547                     -- context they have already been done and is available in the database - So we'll just query it up.
14548                     IF p_structure_type = 'WORKPLAN' THEN
14549 
14550                          -- Derive the parent task id
14551                          IF (l_task_in_rec.pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14552                               AND l_task_in_rec.pa_parent_task_id IS NOT NULL)
14553                           THEN
14554                               l_cur_pa_tasks_rec.parent_task_id := l_task_in_rec.pa_parent_task_id;
14555 
14556                          ELSIF (l_task_in_rec.pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14557                               AND l_task_in_rec.pm_parent_task_reference IS NOT NULL)
14558                           THEN
14559                               --convert pm_parent_task_reference to parent_task_id.
14560                               --All the parent tasks are created first then child tasks are created. See TRM for AMG load_task api.
14561 
14562                               -- 3721124 changed function call from  PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref
14563                               -- to PA_PROJECT_PVT.Convert_pm_taskref_to_id_all to retrieve task id for task reference
14564                               -- because PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref may return financial task id
14565                               -- in case of SHARED structure
14566                               -- new api call takes structure type as parameter, so it will return task id for the passed structure type only
14567 
14568                               --PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref(
14569                               --   p_pm_parent_task_reference      =>  l_task_in_rec.pm_parent_task_reference
14570                               --  ,p_project_id                    =>  p_project_id
14571                               --  ,x_parent_task_id                =>  l_cur_pa_tasks_rec.parent_task_id
14572                               --  ,x_return_status                 =>  x_return_status
14573                               --  );
14574 
14575 
14576                                 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
14577                                       p_pa_project_id      => p_project_id
14578                                     , p_structure_type     => 'WORKPLAN'
14579                                  --   3721124 p_pa_task_id will be null in this context
14580                                  -- , p_pa_task_id         => l_cur_pa_tasks_rec.parent_task_id
14581                                     , p_pm_task_reference  => l_task_in_rec.pm_parent_task_reference
14582                                     , p_out_task_id        => l_cur_pa_tasks_rec.parent_task_id
14583                                     , p_return_status      => x_return_status );
14584 
14585                               px_tasks_out_tbl(i).return_status := x_return_status;
14586                               IF x_return_status <> FND_API.G_RET_STS_SUCCESS
14587                                THEN
14588                                    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14589                                     THEN
14590                                         pa_interface_utils_pub.map_new_amg_msg
14591                                              ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
14592                                              ,p_msg_attribute    => 'CHANGE'
14593                                              ,p_resize_flag      => 'N'
14594                                              ,p_msg_context      => 'TASK'
14595                                              ,p_attribute1       => l_amg_segment1
14596                                              ,p_attribute2       => l_cur_pa_tasks_rec.task_number
14597                                              ,p_attribute3       => ''
14598                                              ,p_attribute4       => ''
14599                                              ,p_attribute5       => '');
14600                                    END IF;
14601                                    Raise Invalid_Arg_Exc_WP;
14602                               END IF;
14603                          ELSIF (l_task_in_rec.pm_parent_task_reference IS NULL)
14604                           THEN --Also the values in l_task_in_rec.parent_task_id is null or miss_num so move it as top task
14605                               l_cur_pa_tasks_rec.parent_task_id := null;
14606 
14607                          ELSE -- when l_task_in_rec.pm_parent_task_reference is miss_char
14608                               -- no parent task information provided for the current task.
14609                               -- get parent information from database
14610                               DECLARE
14611 
14612                                    l_task_ver_id_tmp             pa_proj_element_versions.element_version_id%TYPE;
14613                                    l_dummy_number                NUMBER;
14614                                    l_db_parent_task_ver_id_tmp   pa_proj_element_versions.element_version_id%TYPE;
14615                                    l_relationship_id_tmp         pa_object_relationships.object_relationship_id%TYPE;
14616 
14617                               BEGIN
14618 
14619                                    OPEN cur_pa_task_ver( l_structure_version_id, l_task_in_rec.pa_task_id );
14620                                    FETCH cur_pa_task_ver INTO l_task_ver_id_tmp, l_dummy_number;
14621                                    CLOSE cur_pa_task_ver;
14622 
14623                                    --Get the database parent task version id
14624                                    OPEN cur_parent_object_rel( l_task_ver_id_tmp );
14625                                    FETCH cur_parent_object_rel INTO l_db_parent_task_ver_id_tmp,l_relationship_id_tmp,l_dummy_number,
14626                                                                     l_dummy_number; -- Bug 3075609. Reflected the change in cursor.
14627                                    CLOSE cur_parent_object_rel;
14628 
14629                                    --Get the parent task id from parent task version id
14630                                    OPEN cur_elem_ver_to_task_id(l_db_parent_task_ver_id_tmp ) ;
14631                                    FETCH cur_elem_ver_to_task_id INTO l_cur_pa_tasks_rec.parent_task_id;
14632                                    CLOSE cur_elem_ver_to_task_id;
14633                               END;
14634 
14635                          END IF;
14636                          DECLARE
14637                               -- Bug 2982072. The following cursor is used to obtain the task name
14638                               -- and number for a given task element from the database. These will be used
14639                               -- if the user has not passed any value for these parameters.
14640                               CURSOR cur_proj_elem_info(c_task_id pa_proj_elements.proj_element_id%TYPE)
14641                               IS
14642                               SELECT  element_number, name
14643                               FROM    pa_proj_elements
14644                               WHERE   proj_element_id = c_task_id;
14645 
14646                               l_proj_elem_info    cur_proj_elem_info%ROWTYPE;
14647                          BEGIN
14648                               -- Bug 2982072. Open the cursor only if any of task number or name needs to
14649                               -- be fetched for the task.
14650                               IF (l_task_in_rec.pa_task_number is null OR
14651                                   l_task_in_rec.pa_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
14652                                   (l_task_in_rec.long_task_name is null OR
14653                                   l_task_in_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14654                               THEN
14655                                    OPEN  cur_proj_elem_info(l_task_in_rec.pa_task_id);
14656                                    FETCH cur_proj_elem_info into l_proj_elem_info;
14657                                    CLOSE cur_proj_elem_info;
14658 
14659                               END IF;
14660 
14661                               -- Bug 2982072. If task number and task name are passed as null then
14662                               -- obtain the values from the database and use them in update_task api.
14663                               IF l_task_in_rec.pa_task_number is null OR
14664                                  l_task_in_rec.pa_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14665                               THEN
14666                                       -- l_task_in_rec.pa_task_number := SUBSTRB(l_proj_elem_info.element_number,1,25); -- Substrb added for Bug 5152448
14667  	                                    l_task_in_rec.pa_task_number := l_proj_elem_info.element_number; -- Substrb removed for Bug 6193314
14668                                  /** added for Bug 4120380 **/
14669 			       /* bug#5243018 : Reverting the fix in Bug 4120380
14670                               ELSE
14671                     OPEN  cur_proj_elem_info(l_task_in_rec.pa_task_id);
14672                                 FETCH cur_proj_elem_info into l_proj_elem_info;
14673                                 CLOSE cur_proj_elem_info;
14674                  --dbms_output.put_line(('Value of l_proj_elem_info.element_number'||l_proj_elem_info.element_number);
14675 				If l_task_in_rec.pa_task_number <> SUBSTRB(l_proj_elem_info.element_number,1,25) THEN -- Substrb added for Bug 5152448
14676                                     l_task_in_rec.pa_task_number := '-'||l_task_in_rec.pa_task_number;
14677                                 End if; */
14678                 /** end of changes for Bug 4120380  **/
14679                               END IF;
14680 
14681                               IF l_task_in_rec.long_task_name is null OR
14682                                  l_task_in_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14683                               THEN
14684                   /* Start of changes for bug 4503580 */
14685                                    -- l_task_in_rec.long_task_name := NVL(l_task_in_rec.task_name, l_proj_elem_info.name); --bug 3969651
14686                    IF l_task_in_rec.task_name is null OR
14687                                       l_task_in_rec.task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14688                                    THEN
14689                                       l_task_in_rec.long_task_name := l_proj_elem_info.name;
14690                    ELSE
14691                       l_task_in_rec.long_task_name := l_task_in_rec.task_name;
14692                    END IF;
14693                   /* End of changes for bug 4503580 */
14694                             /* Redundant but added for clarity -Added the else condition for bug 2982057*/
14695                               ELSE
14696                                    l_task_in_rec.long_task_name := l_task_in_rec.long_task_name;
14697                               END IF;
14698                          END;
14699 
14700                     ELSE--financial
14701                          open cur_pa_tasks(p_project_id,l_task_in_rec.pa_task_id);
14702                          fetch cur_pa_tasks into l_cur_pa_tasks_rec;
14703                          close cur_pa_tasks;
14704 
14705                          -- Bug 2982072. If task number and task name are passed as null then
14706                          -- obtain the values from the database and use them in update_task api.
14707                          IF l_task_in_rec.pa_task_number is null OR
14708                             l_task_in_rec.pa_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14709                          THEN
14710                               l_task_in_rec.pa_task_number := l_cur_pa_tasks_rec.task_number;
14711                           /* Code added for bug 4120380 **/
14712 			   /* bug#5243018 : Reverting the fix in Bug 4120380
14713                           ELSE
14714                           OPEN  cur_proj_elements_info(l_task_in_rec.pa_task_id);
14715                           FETCH cur_proj_elements_info into l_proj_elements_info;
14716                           CLOSE cur_proj_elements_info;
14717 			  If l_task_in_rec.pa_task_number <> SUBSTRB(l_proj_elements_info.element_number,1,25) THEN -- Substrb added for Bug 5152448
14718                                 l_task_in_rec.pa_task_number := '-'||l_task_in_rec.pa_task_number;
14719                           End if; */
14720             /* Code end for bug 4120380 **/
14721                          END IF;
14722 
14723                          IF l_task_in_rec.long_task_name is null OR
14724                             l_task_in_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14725                          THEN
14726                               l_task_in_rec.long_task_name := l_cur_pa_tasks_rec.long_task_name;
14727                         /* Redundant but added for clarity -Added the else condition for bug 2982057*/
14728                          ELSE
14729                   l_task_in_rec.long_task_name := l_task_in_rec.long_task_name;
14730                          END IF;
14731 
14732                     END IF;
14733                     l_parent_task_id := l_cur_pa_tasks_rec.parent_task_id;
14734                     l_task_id        := l_task_in_rec.pa_task_id;
14735 
14736                END IF; -- before calling create or update TASK
14737 
14738 
14739                -- In the following block the create task or update_task APIs are called.
14740                -- After call to these APIs populate following
14741                -- px_tasks_out_tbl(i).pa_task_id
14742                -- px_tasks_out_tbl(i).pm_task_reference
14743                -- for workplan create task case l_task_id is output from create task API
14744                IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
14745                   l_task_in_rec.pa_task_id IS NULL -- Create Task Context
14746                 THEN
14747                     IF p_create_task_version_only = 'N' THEN
14748 
14749                           IF l_debug_mode = 'Y' THEN
14750                             pa_debug.g_err_stage := 'Calling API PA_TASK_PUB1.create_task';
14751                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
14752                           END IF;
14753 
14754                           PA_TASK_PUB1.create_task(
14755                                p_api_version           => p_api_version_number
14756                               ,p_commit                => p_commit
14757                               ,p_validate_only         => FND_API.G_FALSE
14758                               ,p_calling_module        => p_calling_module
14759                               ,p_debug_mode            => l_debug_mode
14760                               ,p_init_msg_list         => FND_API.G_FALSE
14761                               ,p_object_type           => 'PA_TASKS'
14762                               ,p_project_id            => p_project_id
14763                               ,p_structure_id          => l_structure_id
14764                              ,p_task_number           => l_task_in_rec.pa_task_number -- l_cur_pa_tasks_rec.task_number bug 6193314
14765                               ,p_task_name             => l_cur_pa_tasks_rec.long_task_name
14766                               ,p_task_description      => l_cur_pa_tasks_rec.description
14767                               ,p_location_id           => l_cur_pa_tasks_rec.address_id
14768                               ,p_task_manager_id       => l_cur_pa_tasks_rec.task_manager_person_id
14769                               ,p_carrying_out_org_id   => l_cur_pa_tasks_rec.carrying_out_organization_id
14770                               ,p_priority_code         => l_task_in_rec.priority_code
14771                               ,p_TYPE_ID               => l_task_in_rec.task_type
14772                               ,p_status_code           => l_task_in_rec.status_code
14773                               ,p_inc_proj_progress_flag=> l_task_in_rec.inc_proj_progress_flag
14774                               ,p_pm_product_code       => p_pm_product_code
14775                               ,p_pm_task_reference     => l_cur_pa_tasks_rec.pm_task_reference
14776                               ,p_closed_date           => l_task_in_rec.closed_date
14777                               ,p_link_task_flag        => l_task_in_rec.link_task_flag
14778                               ,P_UOM_CODE              => l_task_in_rec.wq_uom_code
14779                               ,p_work_item_code        => l_task_in_rec.wq_item_code
14780                               ,p_parent_structure_id   => l_structure_id
14781 ---- Begin Bug 3654243 ---------------------------------------------------------------------
14782                   ,p_Base_Perc_Comp_Deriv_Code => l_task_in_rec.base_percent_comp_deriv_code
14783 ---- End Bug 3654243 -----------------------------------------------------------------------
14784                               ,x_task_id               => l_task_id            -- *** OUT *** --
14785                               ,x_return_status         => x_return_status
14786                               ,x_msg_count             => x_msg_count
14787                               ,x_msg_data              => x_msg_data
14788                               );
14789 
14790                          -- Added for bug 3057575 :TO show task number while throwing err
14791                          l_err_task_number := l_cur_pa_tasks_rec.task_number;
14792 
14793                          px_tasks_out_tbl(i).return_status       := x_return_status;
14794 
14795                          IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14796                               IF l_debug_mode = 'Y' THEN
14797                                  pa_debug.g_err_stage := 'Error calling create task : ' || l_task_id ;
14798                                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
14799                               END IF;
14800                               Raise Invalid_Arg_Exc_WP;
14801                          END IF;
14802 
14803 
14804                          IF l_debug_mode = 'Y' THEN
14805                             pa_debug.g_err_stage := 'task id : ' || l_task_id ;
14806                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
14807                          END IF;
14808 
14809                     END IF; -- p_create_task_version_only = 'N'
14810 
14811                ELSE
14812                     DECLARE
14813                          l_proj_elem_rvn NUMBER;
14814                     BEGIN
14815 
14816                          OPEN cur_rec_ver_num(l_task_in_rec.pa_task_id);
14817                          FETCH cur_rec_ver_num INTO l_proj_elem_rvn;
14818                          CLOSE cur_rec_ver_num;
14819 
14820 			 --  Bug 6717386
14821 			If l_struct_ver_id is null then
14822 			   OPEN cur_struc_ver_wp(p_project_id,'WORKPLAN');
14823 			   FETCH cur_struc_ver_wp INTO l_struct_ver_id;
14824 			   CLOSE cur_struc_ver_wp;
14825 			end if;
14826 
14827 			if p_structure_version_id = l_struct_ver_id then
14828 			   l_status_code := null;
14829 			   else
14830 			   l_status_code := l_task_in_rec.STATUS_CODE;
14831 			end if;
14832 			--  Bug 6717386
14833 
14834                          PA_TASK_PUB1.Update_Task(
14835                              p_calling_module            => 'AMG'
14836                              ,p_init_msg_list            => FND_API.G_FALSE
14837                              ,p_task_id                  => l_task_in_rec.pa_task_id
14838                              ,p_task_number              => l_task_in_rec.pa_task_number
14839                              ,p_task_name                => l_task_in_rec.long_task_name
14840                              ,p_task_description         => l_task_in_rec.task_description
14841                              ,p_task_manager_id          => l_task_in_rec.task_manager_person_id
14842                              ,p_carrying_out_org_id      => l_task_in_rec.carrying_out_organization_id
14843                              ,p_pm_product_code          => l_task_in_rec.PM_SOURCE_CODE
14844                              ,p_pm_task_reference        => l_task_in_rec.pm_task_reference
14845                              ,p_location_id              => l_task_in_rec.address_id
14846                              ,p_priority_code            => l_task_in_rec.PRIORITY_CODE
14847                              ,p_TYPE_ID                  => l_task_in_rec.TASK_TYPE
14848                              ,p_status_code              => l_status_code -- l_task_in_rec.STATUS_CODE bug 6717386
14849                              ,p_inc_proj_progress_flag   => l_task_in_rec.INC_PROJ_PROGRESS_FLAG
14850                              ,p_closed_date              => l_task_in_rec.CLOSED_DATE
14851                              ,p_record_version_number    => l_proj_elem_rvn
14852                              ,P_UOM_CODE                 => l_task_in_rec.WQ_UOM_CODE
14853                              ,p_work_item_code           => l_task_in_rec.WQ_ITEM_CODE
14854                              ----- begin Bug 3654243 --------------------------------------------
14855                          ,p_Base_Perc_Comp_Deriv_Code => l_task_in_rec.base_percent_comp_deriv_code
14856                          ,p_gen_etc_src_code          => l_task_in_rec.gen_etc_source_code
14857                               ----- end Bug 3654243 ----------------------------------------------
14858                              ,x_return_status            => x_return_status
14859                              ,x_msg_count                => x_msg_count
14860                              ,x_msg_data                 => x_msg_data
14861                  ,p_shared                   => l_shared       -- Added for Bug#3451073
14862                                 );
14863 
14864                          -- Added for bug 3057575 :TO show task number while throwing err
14865              l_err_task_number := l_task_in_rec.pa_task_number;
14866 
14867                          px_tasks_out_tbl(i).return_status       := x_return_status;
14868 
14869                          IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14870                                  PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
14871                                                       ,p_msg_name       => 'PA_PS_TASK_NOT_UPDATED'
14872                              /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
14873                               ,p_token1         => 'PROJECT'
14874                               ,p_value1         =>  p_project_id
14875                                       ,p_token2          => 'TASK'
14876                                       ,p_value2          => l_task_in_rec.pa_task_id);
14877                                  IF l_debug_mode = 'Y'
14878                                  THEN
14879                                      pa_debug.g_err_stage := 'Error in task updation : ' || p_tasks_in_tbl(i).pa_task_id ;
14880                                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
14881                                  END IF;
14882                                  Raise Invalid_Arg_Exc_WP;
14883 
14884                          END IF;
14885 
14886                     END;
14887                     --rtarway, added for BUG 4106154
14888                       IF ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
14889                            PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
14890                            PA_PROJECT_PUB.G_Published_version_exists = 'Y' AND
14891                --Added by rtarway for BUG 4321313
14892                PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_task_in_rec.pa_task_id)='Y'
14893                )
14894                       THEN
14895                       --Call Update_One_Task to update financial attributes
14896                                    PA_PROJECT_PVT.Update_One_Task
14897                                    (
14898                                         p_api_version_number            => p_api_version_number,
14899                                         p_commit                        => FND_API.G_FALSE,
14900                                         p_msg_count                     => x_msg_count,
14901                                         p_msg_data                      => x_msg_data,
14902                                         p_return_status                 => x_return_status,
14903                                         p_pm_product_code               => p_pm_product_code,
14904                                         p_pa_project_id                 => p_project_id,
14905                                         p_pa_task_id                    => l_task_in_rec.pa_task_id,
14906                                         p_pm_task_reference             => l_task_in_rec.pm_task_reference,
14907                                         p_task_number                   => l_task_in_rec.pa_task_number,
14908                                         p_task_name                     => l_task_in_rec.task_name,
14909                                         p_long_task_name                => l_task_in_rec.long_task_name,
14910                                         p_task_description              => l_task_in_rec.task_description,
14911                                         p_task_start_date               => l_task_in_rec.task_start_date,
14912                                         p_task_completion_date          => l_task_in_rec.task_completion_date,
14913                                         p_early_start_date              => l_task_in_rec.early_start_date,
14914                                         p_early_finish_date             => l_task_in_rec.early_finish_date,
14915                                         p_late_start_date               => l_task_in_rec.late_start_date,
14916                                         p_late_finish_date              => l_task_in_rec.late_finish_date,
14917                                         p_pm_parent_task_reference      => l_task_in_rec.pm_parent_task_reference,
14918                                         p_pa_parent_task_id             => l_task_in_rec.pa_parent_task_id,
14919                                         p_address_id                    => l_task_in_rec.address_id,
14920                                         p_carrying_out_organization_id  => l_task_in_rec.carrying_out_organization_id,
14921                                         p_service_type_code             => l_task_in_rec.service_type_code,
14922                                         p_task_manager_person_id        => l_task_in_rec.task_manager_person_id,
14923                                         p_billable_flag                 => l_task_in_rec.billable_flag,
14924                                         p_chargeable_flag               => l_task_in_rec.chargeable_flag,
14925                                         p_ready_to_bill_flag            => l_task_in_rec.ready_to_bill_flag,
14926                                         p_ready_to_distribute_flag      => l_task_in_rec.ready_to_distribute_flag,
14927                                         p_limit_to_txn_controls_flag    => l_task_in_rec.limit_to_txn_controls_flag,
14928                                         p_labor_bill_rate_org_id        => l_task_in_rec.labor_bill_rate_org_id,
14929                                         p_labor_std_bill_rate_schdl     => l_task_in_rec.labor_std_bill_rate_schdl,
14930                                         p_labor_schedule_fixed_date     => l_task_in_rec.labor_schedule_fixed_date,
14931                                         p_labor_schedule_discount       => l_task_in_rec.labor_schedule_discount,
14932                                         p_nl_bill_rate_org_id           => l_task_in_rec.non_labor_bill_rate_org_id,
14933                                         p_nl_std_bill_rate_schdl        => l_task_in_rec.non_labor_std_bill_rate_schdl,
14934                                         p_nl_schedule_fixed_date        => l_task_in_rec.non_labor_schedule_fixed_date,
14935                                         p_nl_schedule_discount          => l_task_in_rec.non_labor_schedule_discount,
14936                                         p_labor_cost_multiplier_name    => l_task_in_rec.labor_cost_multiplier_name,
14937                                         p_cost_ind_rate_sch_id          => l_task_in_rec.cost_ind_rate_sch_id,
14938                                         p_rev_ind_rate_sch_id           => l_task_in_rec.rev_ind_rate_sch_id,
14939                                         p_inv_ind_rate_sch_id           => l_task_in_rec.inv_ind_rate_sch_id,
14940                                         p_cost_ind_sch_fixed_date       => l_task_in_rec.cost_ind_sch_fixed_date,
14941                                         p_rev_ind_sch_fixed_date        => l_task_in_rec.rev_ind_sch_fixed_date,
14942                                         p_inv_ind_sch_fixed_date        => l_task_in_rec.inv_ind_sch_fixed_date,
14943                                         p_labor_sch_type                => l_task_in_rec.labor_sch_type,
14944                                         p_nl_sch_type                   => l_task_in_rec.non_labor_sch_type,
14945                                         p_allow_cross_charge_flag       => l_task_in_rec.allow_cross_charge_flag,
14946                                         p_project_rate_type             => l_task_in_rec.project_rate_type,
14947                                         p_project_rate_date             => l_task_in_rec.project_rate_date,
14948                                         p_cc_process_labor_flag         => l_task_in_rec.cc_process_labor_flag,
14949                                         p_labor_tp_schedule_id          => l_task_in_rec.labor_tp_schedule_id,
14950                                         p_labor_tp_fixed_date           => l_task_in_rec.labor_tp_fixed_date,
14951                                         p_cc_process_nl_flag            => l_task_in_rec.cc_process_nl_flag,
14952                                         p_nl_tp_schedule_id             => l_task_in_rec.nl_tp_schedule_id,
14953                                         p_nl_tp_fixed_date              => l_task_in_rec.nl_tp_fixed_date,
14954                                         p_receive_project_invoice_flag  => l_task_in_rec.receive_project_invoice_flag,
14955                                         p_work_type_id                  => l_task_in_rec.work_type_id,
14956                                         p_emp_bill_rate_schedule_id     => l_task_in_rec.emp_bill_rate_schedule_id,
14957                                         p_job_bill_rate_schedule_id     => l_task_in_rec.job_bill_rate_schedule_id,
14958                                         p_non_lab_std_bill_rt_sch_id    => l_task_in_rec.non_lab_std_bill_rt_sch_id,
14959                                         p_taskfunc_cost_rate_type       => l_task_in_rec.taskfunc_cost_rate_type,
14960                                         p_taskfunc_cost_rate_date       => l_task_in_rec.taskfunc_cost_rate_date,
14961                                         p_labor_disc_reason_code        => l_task_in_rec.labor_disc_reason_code,
14962                                         p_non_labor_disc_reason_code    => l_task_in_rec.non_labor_disc_reason_code,
14963                                         p_retirement_cost_flag          => l_task_in_rec.retirement_cost_flag,
14964                                         p_cint_eligible_flag            => l_task_in_rec.cint_eligible_flag,
14965                                         p_cint_stop_date                => l_task_in_rec.cint_stop_date,
14966                                         p_gen_etc_source_code          =>  l_task_in_rec.gen_etc_source_code,
14967                                         p_invoice_method                => l_task_in_rec.invoice_method,
14968                                         p_customer_id                   => l_task_in_rec.customer_id,
14969                                         p_out_pa_task_id                => l_fin_task_id,
14970                                         p_out_pm_task_reference         => l_fin_task_reference
14971                                    );
14972                                  px_tasks_out_tbl(i).return_status       := x_return_status;
14973 
14974                                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14975                                       PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
14976                                                            ,p_msg_name       => 'PA_PS_TASK_NOT_UPDATED'
14977                                /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
14978                                ,p_token1         => 'PROJECT'
14979                                ,p_value1         =>  p_project_id
14980                                            ,p_token2          => 'TASK'
14981                                            ,p_value2          => l_task_in_rec.pa_task_id);
14982                                       IF l_debug_mode = 'Y'
14983                                       THEN
14984                                           pa_debug.g_err_stage := 'Error in financial task updation : ' || p_tasks_in_tbl(i).pa_task_id ;
14985                                           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
14986                                       END IF;
14987                                       Raise Invalid_Arg_Exc_WP;
14988 
14989                                  END IF;
14990 
14991                       END IF;
14992 
14993                     --end add for BUG 4106154
14994 
14995                END IF; -- After  calling create or update TASK
14996                px_tasks_out_tbl(i).pa_task_id          := l_task_id;
14997                px_tasks_out_tbl(i).pm_task_reference   := l_task_in_rec.pm_task_reference;
14998 
14999 
15000                -- Updation of the task is done. Now start processing for updating the task version.
15001                -- Task version requires wbs_level, disp sequence, wbs number, flexfield related information etc to be populated.
15002                -- In the coming code we will populate these variables and will update/insert proj element versions.
15003 
15004                -- Start processing for display sequence, wbs level and wbs number.
15005                -- Following is the way tables store data
15006                -- 1. l_disp_seq -- the current index for which processing is going on.
15007                -- 2. l_display_sequence_tbl(l_task_id) -- display sequence indexed by task ids.
15008                -- 3. l_wbs_level_tbl(l_task_id)        -- wbs level indexed by task id.
15009                -- 4. l_top_task_count                  -- top tasks processed until current loop.
15010                -- 5. l_wbs_number_tbl(l_task_id)       -- wbs number indexed by task id.
15011                -- 6. l_weighting_percentage_tbl(l_task_id) -- weightage indexed by task id.
15012                -- 7. l_child_count_tbl(l_task_id)      -- child count indexed by task id.
15013 
15014                -- The wbs level is wbs level of parent + 1 for non top tasks else it is 1.
15015                -- The wbs number is top_task_cnt when top task else it is wbs_number || '.'
15016                -- || parent task child count + 1
15017                l_disp_seq := l_disp_seq + 1;
15018                l_display_sequence_tbl(l_task_id) := l_disp_seq;
15019 
15020            --Start for Changes for bug 3057575 : Checking whether correct structure has been passed OR NOT
15021            -- As the l_parent_task_id may get populated with l_structure_id for top tasks
15022            -- but as the below code  requires it be null
15023            IF l_parent_task_id = l_structure_id THEN
15024                   IF l_debug_mode = 'Y' THEN
15025                             pa_debug.g_err_stage := 'Parent task Id is upd with struc. id so shld be nulled out  : ' || p_tasks_in_tbl(i).pa_task_id ;
15026                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15027                   END IF;
15028               l_parent_task_id := null;
15029            END IF;
15030 
15031            IF l_hierarchy_count = 1 THEN
15032                     IF l_debug_mode = 'Y' THEN
15033                             pa_debug.g_err_stage := 'l_hierarchy_count is 1  : ' || p_tasks_in_tbl(i).pa_task_id ;
15034                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15035 
15036                             pa_debug.g_err_stage := 'l_parent_task_id is : ' || l_parent_task_id;
15037                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15038 
15039                             IF  task_parent_id_tbl.EXISTS(l_hierarchy_count) THEN
15040                 pa_debug.g_err_stage := 'The task in hierarchy is  : ' || task_parent_id_tbl(l_hierarchy_count);
15041                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15042                 END IF;
15043 
15044                     END IF;
15045 
15046                     IF l_parent_task_id IS NOT NULL AND task_parent_id_tbl.EXISTS(l_hierarchy_count) AND l_parent_task_id = task_parent_id_tbl(l_hierarchy_count) THEN
15047                  l_hierarchy_count := l_hierarchy_count +1;
15048                 ELSE
15049                  IF l_parent_task_id IS NOT NULL THEN
15050 
15051                                PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
15052                                                     ,p_msg_name       => 'PA_TASK_NOT_IN_HIERARCHY_ORD'
15053                             ,p_token1         => 'TASK'
15054                             ,p_value1         => l_err_task_number);                               Raise Invalid_Arg_Exc_WP;
15055                                Raise Invalid_Arg_Exc_WP;
15056              END IF;
15057                     END IF;
15058                ELSE
15059                IF l_debug_mode = 'Y' THEN
15060                             pa_debug.g_err_stage := 'l_hierarchy_count is grater then  1  : ' || p_tasks_in_tbl(i).pa_task_id ;
15061                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15062 
15063 
15064                             pa_debug.g_err_stage := 'l_parent_task_id is : ' || l_parent_task_id;
15065                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15066 
15067                             IF  task_parent_id_tbl.EXISTS(l_hierarchy_count) THEN
15068                 pa_debug.g_err_stage := 'The task in hierarchy is  : ' || task_parent_id_tbl(l_hierarchy_count);
15069                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15070                 END IF;
15071 
15072                    END IF;
15073 
15074                IF l_parent_task_id IS NULL THEN
15075                l_hierarchy_count := 1;
15076            ELSE
15077                 l_temp_count := 0;
15078             l_temp_success := 'F';
15079             LOOP
15080                 IF l_parent_task_id = task_parent_id_tbl(l_hierarchy_count) THEN
15081                     l_temp_success := 'T';
15082                     l_hierarchy_count := l_hierarchy_count +1;
15083                     ELSE
15084                         l_hierarchy_count := l_hierarchy_count - 1;
15085                 END IF;
15086                 EXIT WHEN l_temp_success = 'T' OR l_hierarchy_count = 0;
15087 
15088             END LOOP;
15089                         IF l_debug_mode = 'Y' THEN
15090                             pa_debug.g_err_stage := 'Value of l_hierarchy_count   : ' || l_hierarchy_count ;
15091                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15092                         END IF;
15093 
15094             IF  l_temp_success = 'F' THEN
15095                                PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
15096                                                     ,p_msg_name       => 'PA_TASK_NOT_IN_HIERARCHY_ORD'
15097                             ,p_token1         => 'TASK'
15098                             ,p_value1         => l_err_task_number);
15099                                Raise Invalid_Arg_Exc_WP;
15100 
15101 
15102             END IF;
15103 
15104            END IF; -- End for l_parent_task_id IS NOT NULL
15105 
15106         END IF; --End for l_hierarchy_count = 1
15107                 --End for Changes for bug 3057575 :
15108 
15109 
15110                IF l_parent_task_id is null THEN
15111 
15112             --Added for bug 3057575
15113                     task_parent_id_tbl(l_hierarchy_count) := l_task_id;
15114 
15115             l_wbs_level_tbl(l_task_id) := 1;
15116                     l_top_task_count := l_top_task_count + 1;
15117                     l_wbs_number_tbl(l_task_id) := l_top_task_count;
15118                ELSE -- current task is not a top task.
15119 
15120                 --Added for bug 3057575
15121                     task_parent_id_tbl(l_hierarchy_count) := l_task_id;
15122 
15123             l_wbs_level_tbl(l_task_id) := l_wbs_level_tbl(l_parent_task_id) + 1;
15124                     l_child_count_tbl(l_parent_task_id) := l_child_count_tbl(l_parent_task_id) + 1;
15125                     l_wbs_number_tbl(l_task_id) := l_wbs_number_tbl(l_parent_task_id) || '.' || l_child_count_tbl(l_parent_task_id);
15126                END IF;
15127 
15128                --Set the number of children under the current task to 0.
15129                l_child_count_tbl(l_task_id) := 0;
15130 
15131                -- Bug 3075609. Modifying the task weightage processing logic. Currently the logic
15132                -- overwrites the weightages in the update project context and doesnot consider the
15133                -- progress enabled property of the task. Please refer to bug 3030664 for details
15134                -- about the issue and the fix.
15135 
15136 /*             -- Included check for top task after UT.
15137                -- If this is the first top task set its weightage to 100 else 0.
15138                -- If current task is the only child under the parent set its weightage to 100 else 0.
15139                IF l_parent_task_id is null THEN
15140                     IF l_top_task_count = 1 THEN
15141                          l_weighting_percentage_tbl(l_task_id) := 100;
15142                     ELSE
15143                          l_weighting_percentage_tbl(l_task_id) := 0;
15144                     END IF;
15145                ELSE -- non top tasks.
15146                     IF l_child_count_tbl(l_parent_task_id) = 1 THEN
15147                          l_weighting_percentage_tbl(l_task_id) := 100;
15148                     ELSE
15149                          l_weighting_percentage_tbl(l_task_id) := 0;
15150                     END IF;
15151                END IF;
15152 */
15153                -- The following plsql block takes care of assigning task weightages to the tasks.
15154                DECLARE
15155                     -- This cursor identified the number of progressible tasks under a parent.
15156                     CURSOR get_child_count(c_parent_element_version_id NUMBER)
15157                     IS
15158                     SELECT count(rel.object_id_to1)
15159                     FROM PA_OBJECT_RELATIONSHIPS rel, pa_proj_element_versions pev, pa_proj_elements pe, pa_task_types tt
15160                     WHERE rel.object_id_from1 = c_parent_element_version_id
15161                     AND   rel.object_type_to = 'PA_TASKS'
15162                     AND   rel.relationship_type = 'S'
15163                     AND   rel.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
15164                     AND   rel.object_id_to1 = pev.element_version_id
15165                     AND   pev.proj_element_id = pe.proj_element_id
15166                     AND   pe.type_id = tt.task_type_id
15167                     AND   tt.object_type    = 'PA_TASKS' /* bug 3279978 FP M Enhancement */
15168                     AND   tt.prog_entry_enable_flag = 'Y';
15169 
15170                     l_child_task_count  NUMBER;
15171                     l_parent_version_id pa_proj_element_versions.element_version_id%TYPE;
15172                     l_task_type_id      pa_task_types.task_type_id%TYPE;
15173                BEGIN
15174                     l_existing_task_set_max_wt := 'N';
15175                     IF l_maintain_weightages = 'N' THEN -- no need to maintain weightages.
15176                          l_weighting_percentage_tbl(l_task_id) := 0;
15177                     ELSE
15178                          IF l_parent_task_id is null THEN -- obtain the parent version id
15179                               l_parent_version_id           := l_structure_version_id;
15180                          ELSE
15181                               l_parent_version_id           := l_task_version_id_tbl(l_parent_task_id);
15182                          END IF;
15183 
15184                          IF l_child_indicator_tbl.exists(l_parent_version_id) THEN
15185                               IF l_child_indicator_tbl(l_parent_version_id) = 'Y' THEN
15186                                    l_weighting_percentage_tbl(l_task_id) := 0;
15187                               ELSE
15188                                    open cur_task_type_id(l_task_id);
15189                                    fetch cur_task_type_id into l_task_type_id;
15190                                    close cur_task_type_id;
15191                                    IF pa_task_type_utils.check_tk_type_progressable(l_task_type_id) = 'Y' THEN -- progressible task
15192                                         l_weighting_percentage_tbl(l_task_id) := 100;
15193                                         l_child_indicator_tbl(l_parent_version_id) := 'Y';
15194                                    ELSE -- non progressible task
15195                                         l_weighting_percentage_tbl(l_task_id) := 0;
15196                                    END IF;
15197                               END IF;
15198 
15199                          ELSE -- This is the first child of the parent.
15200                               -- If it is update context, check how many progress enabled tasks the parent has.
15201                               IF p_structure_version_id is not null THEN -- update context
15202                                    open get_child_count(l_parent_version_id);
15203                                    fetch get_child_count into l_child_task_count;
15204                                    close get_child_count;
15205                               END IF;
15206 
15207                               IF p_structure_version_id is not null and nvl(l_child_task_count,0) > 0 THEN -- progressible task exist
15208                                    l_child_indicator_tbl(l_parent_version_id) := 'Y';
15209                                    l_weighting_percentage_tbl(l_task_id) := 0;
15210                               ELSE
15211                                    open cur_task_type_id(l_task_id);
15212                                    fetch cur_task_type_id into l_task_type_id;
15213                                    close cur_task_type_id;
15214                                    IF pa_task_type_utils.check_tk_type_progressable(l_task_type_id) = 'Y' THEN -- progressible task
15215                                         l_weighting_percentage_tbl(l_task_id) := 100;
15216                                         l_child_indicator_tbl(l_parent_version_id) := 'Y';
15217                                         l_existing_task_set_max_wt := 'Y';
15218                                    ELSE -- non progressible task
15219                                         l_weighting_percentage_tbl(l_task_id) := 0;
15220                                         l_child_indicator_tbl(l_parent_version_id) := 'N';
15221                                    END IF;
15222                               END IF;
15223                          END IF;
15224                     END IF;
15225                EXCEPTION
15226                     WHEN OTHERS THEN
15227                          If get_child_count%ISOPEN THEN
15228                               Close get_child_count;
15229                          END IF;
15230                          IF l_debug_mode = 'Y' THEN
15231                               pa_debug.g_err_stage:= 'Error while calculating the task weightage. Task id : '||l_task_id;
15232                               pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level6);
15233                          END IF;
15234                          Raise;
15235                END;
15236 
15237               -- Populate following set of variables required to update element versions:
15238               -- attribute_category , attribute1 ...attribute10, in local variables
15239               -- l_task_version_id, l_proj_elem_ver_rowid, l_proj_elem_ver_rvn -- required only in update task.
15240 
15241                IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
15242                   l_task_in_rec.pa_task_id IS NULL THEN -- Create Task Context
15243                  --Bug 6153503
15244                   IF l_task_in_rec.tasks_dff = 'N' THEN
15245                     -- Handle the dff attributes. Set the local variable to null if passed value is miss char.
15246                     -- These attributes would be used both while creating task version and the schedule version.
15247                     IF l_task_in_rec.attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15248                        l_attribute_category := null;
15249                     ELSE
15250                        l_attribute_category := l_task_in_rec.attribute_category;
15251                     END IF;
15252 
15253                     IF l_task_in_rec.attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15254                        l_attribute1 := null;
15255                     ELSE
15256                        l_attribute1 := l_task_in_rec.attribute1;
15257                     END IF;
15258 
15259                     IF l_task_in_rec.attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15260                        l_attribute2 := null;
15261                     ELSE
15262                        l_attribute2 := l_task_in_rec.attribute2;
15263                     END IF;
15264 
15265                     IF l_task_in_rec.attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15266                        l_attribute3 := null;
15267                     ELSE
15268                        l_attribute3 := l_task_in_rec.attribute3;
15269                     END IF;
15270 
15271                     IF l_task_in_rec.attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15272                        l_attribute4 := null;
15273                     ELSE
15274                        l_attribute4 := l_task_in_rec.attribute4;
15275                     END IF;
15276 
15277                     IF l_task_in_rec.attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15278                        l_attribute5 := null;
15279                     ELSE
15280                        l_attribute5 := l_task_in_rec.attribute5;
15281                     END IF;
15282 
15283                     IF l_task_in_rec.attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15284                        l_attribute6 := null;
15285                     ELSE
15286                        l_attribute6 := l_task_in_rec.attribute6;
15287                     END IF;
15288 
15289                     IF l_task_in_rec.attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15290                        l_attribute7 := null;
15291                     ELSE
15292                        l_attribute7 := l_task_in_rec.attribute7;
15293                     END IF;
15294 
15295                     IF l_task_in_rec.attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15296                        l_attribute8 := null;
15297                     ELSE
15298                        l_attribute8 := l_task_in_rec.attribute8;
15299                     END IF;
15300 
15301                     IF l_task_in_rec.attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15302                        l_attribute9 := null;
15303                     ELSE
15304                        l_attribute9 := l_task_in_rec.attribute9;
15305                     END IF;
15306 
15307                     IF l_task_in_rec.attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15308                        l_attribute10 := null;
15309                     ELSE
15310                        l_attribute10 := l_task_in_rec.attribute10;
15311                     END IF;
15312                     --Bug 6153503
15313                     IF l_task_in_rec.attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15314                        l_attribute11 := null;
15315                     ELSE
15316                        l_attribute11 := l_task_in_rec.attribute11;
15317                     END IF;
15318 
15319                     IF l_task_in_rec.attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15320                        l_attribute12 := null;
15321                     ELSE
15322                        l_attribute12 := l_task_in_rec.attribute12;
15323                     END IF;
15324 
15325                     IF l_task_in_rec.attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15326                        l_attribute13 := null;
15327                     ELSE
15328                        l_attribute13 := l_task_in_rec.attribute13;
15329                     END IF;
15330 
15331                     IF l_task_in_rec.attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15332                        l_attribute14 := null;
15333                     ELSE
15334                        l_attribute14 := l_task_in_rec.attribute14;
15335                     END IF;
15336 
15337                     IF l_task_in_rec.attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15338                        l_attribute15 := null;
15339                     ELSE
15340                        l_attribute15 := l_task_in_rec.attribute15;
15341                     END IF;
15342 
15343                     pa_task_utils.validate_flex_fields(
15344                              p_desc_flex_name        => 'PA_PROJ_ELEM_VER_SCH_DESC_FLEX'
15345                             ,p_attribute_category    => l_attribute_category
15346                             ,p_attribute1            => l_attribute1
15347                             ,p_attribute2            => l_attribute2
15348                             ,p_attribute3            => l_attribute3
15349                             ,p_attribute4            => l_attribute4
15350                             ,p_attribute5            => l_attribute5
15351                             ,p_attribute6            => l_attribute6
15352                             ,p_attribute7            => l_attribute7
15353                             ,p_attribute8            => l_attribute8
15354                             ,p_attribute9            => l_attribute9
15355                             ,p_attribute10           => l_attribute10
15356                             ,p_attribute11           => l_attribute11
15357                             ,p_attribute12           => l_attribute12
15358                             ,p_attribute13           => l_attribute13
15359                             ,p_attribute14           => l_attribute14
15360                             ,p_attribute15           => l_attribute15
15361                             ,p_RETURN_msg            => l_return_msg
15362                             ,p_validate_status       => l_validate_status
15363                             );
15364 
15365                             IF l_validate_status = 'N'
15366                             THEN
15367                                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
15368                                  THEN
15369                                       pa_interface_utils_pub.map_new_amg_msg
15370                                                 ( p_old_message_code => 'PA_INVALID_FF_VALUES'
15371                                                 ,p_msg_attribute    => 'CHANGE'
15372                                                 ,p_resize_flag      => 'N'
15373                                                 ,p_msg_context      => 'FLEX'
15374                                                 ,p_attribute1       => l_return_msg
15375                                                 ,p_attribute2       => ''
15376                                                 ,p_attribute3       => ''
15377                                                 ,p_attribute4       => ''
15378                                                 ,p_attribute5       => '');
15379                                 END IF;
15380                             RAISE FND_API.G_EXC_ERROR;
15381                           END IF;
15382                   END IF;
15383                   --Bug 6153503
15384                ELSE -- update task case
15385                     DECLARE
15386                          --Cursor to get the versioned information of the task
15387                          CURSOR cur_proj_element_version_info(c_structure_version_id pa_proj_element_versions.parent_structure_version_id%TYPE, c_task_id pa_tasks.task_id%TYPE )
15388                              IS
15389                              SELECT rowid,element_version_id,object_type, project_id, proj_element_id, record_version_number,
15390                                      display_sequence, wbs_number, wbs_level, parent_structure_version_id,
15391                                      attribute_category, attribute1, attribute2, attribute3, attribute4, attribute5,
15392                                      attribute6, attribute7, attribute8, attribute9, attribute10, attribute11, attribute12,
15393                                      attribute13, attribute14, attribute15, TASK_UNPUB_VER_STATUS_CODE
15394                              FROM pa_proj_element_versions
15395                              WHERE project_id = p_project_id
15396                              AND proj_element_id = c_task_id
15397                              AND parent_structure_version_id = c_structure_version_id
15398                              AND object_type = 'PA_TASKS';
15399 
15400                          l_cur_proj_elem_ver_info_rec cur_proj_element_version_info%ROWTYPE;
15401 
15402                     BEGIN
15403 
15404                          OPEN cur_proj_element_version_info( l_structure_version_id, l_task_id );
15405                          FETCH cur_proj_element_version_info INTO l_cur_proj_elem_ver_info_rec;
15406                          CLOSE cur_proj_element_version_info;
15407                          --Bug 6153503
15408                          l_task_version_id := l_cur_proj_elem_ver_info_rec.element_version_id;
15409                          OPEN cur_ver_sch_attr_rec(l_task_version_id);
15410                          FETCH cur_ver_sch_attr_rec INTO l_ver_sch_attr_rec;
15411                          CLOSE cur_ver_sch_attr_rec;
15412 
15413                          -- Handle the dff attributes. Set the local variable to null if passed value is miss char.
15414                          -- These attributes would be used both while creating task version and the schedule version.
15415                          --Bug 6153503 start
15416                          IF l_task_in_rec.attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15417                             OR l_task_in_rec.tasks_dff = 'Y' THEN
15418                             l_attribute_category := l_ver_sch_attr_rec.attribute_category;
15419                          ELSE
15420                             l_attribute_category := l_task_in_rec.attribute_category;
15421                          END IF;
15422 
15423                          IF l_task_in_rec.attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15424                             l_attribute1 := l_ver_sch_attr_rec.attribute1;
15425                          ELSE
15426                             l_attribute1 := l_task_in_rec.attribute1;
15427                          END IF;
15428 
15429                          IF l_task_in_rec.attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15430                             l_attribute2 := l_ver_sch_attr_rec.attribute2;
15431                          ELSE
15432                             l_attribute2 := l_task_in_rec.attribute2;
15433                          END IF;
15434 
15435                          IF l_task_in_rec.attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15436                             l_attribute3 := l_ver_sch_attr_rec.attribute3;
15437                          ELSE
15438                             l_attribute3 := l_task_in_rec.attribute3;
15439                          END IF;
15440 
15441                          IF l_task_in_rec.attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15442                             l_attribute4 := l_ver_sch_attr_rec.attribute4;
15443                          ELSE
15444                             l_attribute4 := l_task_in_rec.attribute4;
15445                          END IF;
15446 
15447                          IF l_task_in_rec.attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15448                             l_attribute5 := l_ver_sch_attr_rec.attribute5;
15449                          ELSE
15450                             l_attribute5 := l_task_in_rec.attribute5;
15451                          END IF;
15452 
15453                          IF l_task_in_rec.attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15454                             l_attribute6 := l_ver_sch_attr_rec.attribute6;
15455                          ELSE
15456                             l_attribute6 := l_task_in_rec.attribute6;
15457                          END IF;
15458 
15459                          IF l_task_in_rec.attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15460                             l_attribute7 := l_ver_sch_attr_rec.attribute7;
15461                          ELSE
15462                             l_attribute7 := l_task_in_rec.attribute7;
15463                          END IF;
15464 
15465                          IF l_task_in_rec.attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15466                             l_attribute8 := l_ver_sch_attr_rec.attribute8;
15467                          ELSE
15468                             l_attribute8 := l_task_in_rec.attribute8;
15469                          END IF;
15470 
15471                          IF l_task_in_rec.attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y'  THEN
15472                             l_attribute9 := l_ver_sch_attr_rec.attribute9;
15473                          ELSE
15474                             l_attribute9 := l_task_in_rec.attribute9;
15475                          END IF;
15476 
15477                          IF l_task_in_rec.attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15478                             l_attribute10 := l_ver_sch_attr_rec.attribute10;
15479                          ELSE
15480                             l_attribute10 := l_task_in_rec.attribute10;
15481                          END IF;
15482 
15483                          IF l_task_in_rec.attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15484                             l_attribute11 := l_ver_sch_attr_rec.attribute11;
15485                          ELSE
15486                             l_attribute11 := l_task_in_rec.attribute11;
15487                          END IF;
15488 
15489                          IF l_task_in_rec.attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15490                             l_attribute12 := l_ver_sch_attr_rec.attribute12;
15491                          ELSE
15492                             l_attribute12 := l_task_in_rec.attribute12;
15493                          END IF;
15494 
15495                          IF l_task_in_rec.attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15496                             l_attribute13 := l_ver_sch_attr_rec.attribute13;
15497                          ELSE
15498                             l_attribute13 := l_task_in_rec.attribute13;
15499                          END IF;
15500 
15501                          IF l_task_in_rec.attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15502                             l_attribute14 := l_ver_sch_attr_rec.attribute14;
15503                          ELSE
15504                             l_attribute14 := l_task_in_rec.attribute14;
15505                          END IF;
15506 
15507                          IF l_task_in_rec.attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
15508                             l_attribute15 := l_ver_sch_attr_rec.attribute15;
15509                          ELSE
15510                             l_attribute15 := l_task_in_rec.attribute15;
15511                          END IF;
15512 
15513                           pa_task_utils.validate_flex_fields(
15514                              p_desc_flex_name        => 'PA_PROJ_ELEM_VER_SCH_DESC_FLEX'
15515                             ,p_attribute_category    => l_attribute_category
15516                             ,p_attribute1            => l_attribute1
15517                             ,p_attribute2            => l_attribute2
15518                             ,p_attribute3            => l_attribute3
15519                             ,p_attribute4            => l_attribute4
15520                             ,p_attribute5            => l_attribute5
15521                             ,p_attribute6            => l_attribute6
15522                             ,p_attribute7            => l_attribute7
15523                             ,p_attribute8            => l_attribute8
15524                             ,p_attribute9            => l_attribute9
15525                             ,p_attribute10           => l_attribute10
15526                             ,p_attribute11           => l_attribute11
15527                             ,p_attribute12           => l_attribute12
15528                             ,p_attribute13           => l_attribute13
15529                             ,p_attribute14           => l_attribute14
15530                             ,p_attribute15           => l_attribute15
15531                             ,p_RETURN_msg            => l_return_msg
15532                             ,p_validate_status       => l_validate_status
15533                             );
15534 
15535                             IF l_validate_status = 'N'
15536                             THEN
15537                                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
15538                                  THEN
15539                                       pa_interface_utils_pub.map_new_amg_msg
15540                                                 ( p_old_message_code => 'PA_INVALID_FF_VALUES'
15541                                                 ,p_msg_attribute    => 'CHANGE'
15542                                                 ,p_resize_flag      => 'N'
15543                                                 ,p_msg_context      => 'FLEX'
15544                                                 ,p_attribute1       => l_return_msg
15545                                                 ,p_attribute2       => ''
15546                                                 ,p_attribute3       => ''
15547                                                 ,p_attribute4       => ''
15548                                                 ,p_attribute5       => '');
15549                                 END IF;
15550                             RAISE FND_API.G_EXC_ERROR;
15551                           END IF;
15552                             --Bug 6153503 end
15553 
15554 
15555                          l_task_unpub_ver_status_code := l_cur_proj_elem_ver_info_rec.TASK_UNPUB_VER_STATUS_CODE;
15556 
15557                          l_task_version_id := l_cur_proj_elem_ver_info_rec.element_version_id;
15558                          l_proj_elem_ver_rowid := l_cur_proj_elem_ver_info_rec.rowid;
15559                          l_proj_elem_ver_rvn   := l_cur_proj_elem_ver_info_rec.record_version_number;
15560 
15561                     END;
15562                END IF; -- before calling PA_PROJ_ELEMENT_VERSIONS_PKG  Insert_Row or Update_Row
15563 
15564                -- In the following block do following validations:
15565                -- for create task case check if its ok to create subtask under the parent task.
15566                -- for update task check if the task is being moved. If moved check if move task is ok.
15567                -- check if the task can be moved under the new parent.
15568                -- Also do the lifecycle validations for update case. OPEN ISSUE
15569 
15570                -- During these validations following variables are also populated which are used later on
15571                -- l_relationship_id, l_obj_rel_rvn;
15572 
15573                IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
15574                   l_task_in_rec.pa_task_id IS NULL THEN -- create task
15575                     IF l_parent_task_id IS NOT NULL THEN
15576                          --Check if it is ok to create a subtask.
15577                          PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok
15578                               (    p_parent_task_ver_id => l_task_version_id_tbl(l_parent_task_id)
15579                                   ,x_return_status      => l_return_status
15580                                   ,x_error_message_code => l_error_msg_code
15581                               );
15582 
15583                           IF (l_return_status <> 'Y') THEN  --Its required to check like this as the called API
15584                                                             --returns return status as Y / N.
15585                               IF l_debug_mode = 'Y' THEN
15586                                    pa_debug.g_err_stage:= 'Cannot create this task under its parent : '||l_task_id;
15587                                    pa_debug.write(l_module_name,pa_debug.g_err_stage,
15588                                                               l_debug_level6);
15589                               END IF;
15590 
15591                               x_return_status := FND_API.G_RET_STS_ERROR;
15592                               px_tasks_out_tbl(i).return_status       := x_return_status;
15593                               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15594                                                    p_msg_name => l_error_msg_code);
15595                               Raise Invalid_Arg_Exc_WP;
15596                           END IF;
15597                     END IF; --l_parent_task_id IS NOT NULL
15598 
15599                ELSE
15600                     DECLARE
15601                          l_db_parent_task_version_id     pa_proj_element_versions.element_version_id%TYPE;
15602                          l_parent_task_version_id        pa_proj_element_versions.element_version_id%TYPE;
15603 
15604                          -- Bug 3075609. This will hold the weightage of the task version currently in database.
15605                          l_db_task_weightage             pa_object_relationships.weighting_percentage%TYPE;
15606                     BEGIN
15607                          IF (l_parent_task_id IS NOT null)
15608                          THEN
15609                               l_parent_task_version_id := l_task_version_id_tbl(l_parent_task_id);
15610                          ELSE -- top task hence populate structure_version_id as parent
15611                                l_parent_task_version_id := l_structure_version_id;
15612                          END IF;
15613 
15614                          --Get the present parent task version id from DB
15615                          OPEN cur_parent_object_rel(l_task_version_id );
15616                          FETCH cur_parent_object_rel INTO l_db_parent_task_version_id,l_relationship_id, l_obj_rel_rvn,l_db_task_weightage;
15617                          CLOSE cur_parent_object_rel;
15618 
15619                          -- Bug 3075609. For all the existing tasks, we will set the weightage from the database.
15620                          l_weighting_percentage_tbl(l_task_id) := l_db_task_weightage;
15621 
15622                          -- Siva : You can set the flag l_WBS_changed_flag to Y inside the following if
15623                          -- Condition. Call the set_update_wbs_flag after the task loop - otherwise for each
15624                          -- of the potential change the set_update_wbs_flag api will be called.(This will equal
15625                          -- the number of tasks in the create project context)
15626                          IF (l_parent_task_version_id <> l_db_parent_task_version_id)
15627                          THEN
15628                                 --rtarway, for DHI ER, BUG 4413568
15629                 IF ( PA_PROJECT_PUB.G_TASK_STR_UPDATE_MODE  = 'PA_UPD_TASK_ATTR' ) THEN  --bug 4534919
15630                     PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15631                                                             p_msg_name => 'PA_WBS_CANT_CHANGE');
15632                                     RAISE Invalid_Arg_Exc_WP;
15633                 END IF;
15634                 -- Lifecycle Phase validation . Check if task has phase associated with it
15635                                 IF (pa_proj_elements_utils.CHECK_ELEMENT_HAS_PHASE(l_task_in_rec.pa_task_id) = 'Y')
15636                                 THEN
15637                                     PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15638                                                             p_msg_name => 'PA_LC_NO_MOVE_PHASE_TASK');
15639                                     RAISE Invalid_Arg_Exc_WP;
15640                                 END IF;
15641 
15642                                 --check if ok to move this task
15643                                 PA_PROJ_ELEMENTS_UTILS.check_move_task_ok(
15644                                          p_task_ver_id => l_task_version_id
15645                                          ,x_return_status => x_return_status
15646                                          ,x_error_message_code => x_msg_data
15647                                          );
15648                                 IF (x_return_status <> 'Y') THEN
15649                                        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15650                                                             p_msg_name => x_msg_data);
15651                                        raise Invalid_Arg_Exc_WP;
15652                                 END IF;
15653 
15654                                 IF (l_parent_task_id IS NOT NULL) THEN
15655                                      PA_PROJ_ELEMENTS_UTILS.CHECK_CREATE_SUBTASK_OK(
15656                                           p_parent_task_ver_id => l_parent_task_version_id
15657                                           ,x_return_status      => x_return_status
15658                                           ,x_error_message_code => x_msg_data);
15659                                      IF (x_return_status <> 'Y') THEN
15660                                           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15661                                                        p_msg_name => x_msg_data);
15662                                           raise Invalid_Arg_Exc_WP;
15663                                      END IF;
15664                                  END IF;
15665 
15666                                  l_WBS_changed_flag := 'Y';  --bug 3010538
15667 
15668                                  -- Bug 3075609. This task is changing its parent. See if the other peer
15669                                  -- tasks need to be processed. The task that is changing its parent will be
15670                                  -- set a tw of 100 if this is the first task in the new branch or 0 otherwise.
15671                                  IF l_maintain_weightages = 'Y' THEN
15672                                       IF nvl(l_existing_task_set_max_wt,'N') = 'Y' THEN
15673                                         l_weighting_percentage_tbl(l_task_id) := 100;
15674                                       ELSE
15675                                         l_weighting_percentage_tbl(l_task_id) := 0;
15676                                       END IF;
15677                                       IF nvl(l_db_task_weightage,0) <> 0 and NOT l_affected_parents_tbl.exists(l_db_parent_task_version_id) THEN
15678                                         l_affected_parents_tbl(l_db_parent_task_version_id) := 'Y';
15679                                       END IF;
15680                                  END IF;
15681                          END IF;
15682                     END;
15683                END IF;
15684 
15685                -- call insert row or update row
15686                -- Set the following local variables after calling PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row
15687                -- l_task_version_id_tbl(l_task_id)
15688                -- px_tasks_out_tbl(i).task_version_id
15689 
15690                IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
15691                   l_task_in_rec.pa_task_id IS NULL -- Create Task Context
15692                 THEN
15693 
15694                     -- Call the table handler to create a task version.
15695                     IF l_debug_mode = 'Y' THEN
15696                        pa_debug.g_err_stage := 'Calling API PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row';
15697                        pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15698                     END IF;
15699                     --added for 4059962 by rtarway
15700                     --Derive financial task flag
15701                     l_Share_Code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id);
15702                     IF l_shared = 'Y'
15703                     THEN
15704                         --If P_Structure_Type = 'WORKPLAN' Or l_Share_Code = 'SHARE_PARTIAL' then
15705                         If l_Share_Code = 'SHARE_PARTIAL' then --Modified IF condition for 4059962 reopen, rtarway
15706                            l_financial_task_flag  := 'N';
15707                         Else
15708                            l_financial_task_flag  := 'Y';
15709                         End If;
15710                     ELSE
15711                         If P_Structure_Type = 'WORKPLAN' THEN
15712                            l_financial_task_flag := 'N';
15713                         Else
15714                            l_financial_task_flag := 'Y';
15715                         End If;
15716                     End IF;
15717                     --end added for 4059962 by rtarway
15718 
15719 /*
15720 	   Bug Fix 5263429
15721            Unable to delete the task from MSP.
15722 */
15723            IF p_is_wp_separate_from_fn = 'N'
15724           THEN
15725               IF p_is_wp_versioning_enabled = 'Y'
15726               THEN
15727                    l_task_unpub_ver_status_code := 'WORKING';
15728               ELSE
15729                    l_task_unpub_ver_status_code := 'PUBLISHED';
15730               END IF;
15731           ELSE ---split
15732                IF p_structure_type = 'FINANCIAL'
15733                THEN
15734                    l_task_unpub_ver_status_code := 'PUBLISHED';
15735                ELSE --workplan only
15736                    IF p_is_wp_versioning_enabled = 'Y'
15737                    THEN
15738                        l_task_unpub_ver_status_code := 'WORKING';
15739                    ELSE
15740                        l_task_unpub_ver_status_code := 'PUBLISHED';
15741                    END IF;
15742                END IF;
15743           END IF;
15744 /*
15745 	End of Bug Fix 5263429
15746 */
15747                     PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row
15748                          (
15749                            X_ROW_ID                     => l_proj_elem_ver_rowid
15750                           ,X_ELEMENT_VERSION_ID         => l_task_version_id
15751                           ,X_PROJ_ELEMENT_ID            => l_task_id
15752                           ,X_OBJECT_TYPE                => 'PA_TASKS'
15753                           ,X_PROJECT_ID                 => p_project_id
15754                           ,X_PARENT_STRUCTURE_VERSION_ID=> l_structure_version_id
15755                           ,X_DISPLAY_SEQUENCE           => l_display_sequence_tbl(l_task_id)
15756                           ,X_WBS_LEVEL                  => l_wbs_level_tbl(l_task_id)
15757                           ,X_WBS_NUMBER                 => l_wbs_number_tbl(l_task_id)
15758                           ,X_ATTRIBUTE_CATEGORY         => l_attribute_category
15759                           ,X_ATTRIBUTE1                 => l_attribute1
15760                           ,X_ATTRIBUTE2                 => l_attribute2
15761                           ,X_ATTRIBUTE3                 => l_attribute3
15762                           ,X_ATTRIBUTE4                 => l_attribute4
15763                           ,X_ATTRIBUTE5                 => l_attribute5
15764                           ,X_ATTRIBUTE6                 => l_attribute6
15765                           ,X_ATTRIBUTE7                 => l_attribute7
15766                           ,X_ATTRIBUTE8                 => l_attribute8
15767                           ,X_ATTRIBUTE9                 => l_attribute9
15768                           ,X_ATTRIBUTE10                => l_attribute10
15769                           ,X_ATTRIBUTE11                => null
15770                           ,X_ATTRIBUTE12                => null
15771                           ,X_ATTRIBUTE13                => null
15772                           ,X_ATTRIBUTE14                => null
15773                           ,X_ATTRIBUTE15                => null
15774                           ,X_TASK_UNPUB_VER_STATUS_CODE => l_task_unpub_ver_status_code
15775                           ,X_SOURCE_OBJECT_ID            => p_project_id
15776                           ,X_SOURCE_OBJECT_TYPE          => 'PA_PROJECTS'
15777                           --,P_Financial_Task_Flag         => PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_task_id)
15778                           --commented and added following for bug 4059962 reopen, rtarway
15779                           ,P_Financial_Task_Flag         => l_financial_task_flag
15780                          );
15781 
15782                     l_task_version_id_tbl(l_task_id) := l_task_version_id;
15783                     px_tasks_out_tbl(i).task_version_id     := l_task_version_id;
15784 
15785                     IF l_debug_mode = 'Y' THEN
15786                        pa_debug.g_err_stage := 'Task Version id : ' || l_task_version_id ;
15787                        pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
15788                     END IF;
15789 
15790                     -- Required to inherit task type attributes only in the case of context create_task from update project
15791                     IF p_structure_version_id IS NOT NULL
15792                     THEN
15793                         IF p_create_task_version_only = 'N'
15794                         THEN
15795                             PA_TASK_PVT1.Inherit_task_type_attr(
15796                                 p_task_id => l_task_id
15797                                 ,p_task_version_id => l_task_version_id
15798                                 ,x_return_status => x_return_status
15799                                 ,x_msg_count => x_msg_count
15800                                 ,x_msg_data => x_msg_data
15801                                 );
15802                             IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
15803                               raise Invalid_Arg_Exc_WP;
15804                             END IF;
15805                         END IF;--for p_create_task_version_only = 'N'
15806                     END IF;-- for p_structure_version_id IS NOT NULL
15807 
15808                ELSE -- in update task case
15809                     -- check for locking
15810                     BEGIN
15811                             SELECT 'x' INTO l_dummy_char
15812                             FROM PA_PROJ_ELEMENT_VERSIONS
15813                             WHERE element_version_id = l_task_version_id
15814                             AND record_version_number = l_proj_elem_ver_rvn
15815                             FOR UPDATE OF record_version_number NOWAIT;
15816                             EXCEPTION
15817                             WHEN TIMEOUT_ON_RESOURCE THEN
15818                                       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15819                                                          p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
15820                                       raise Invalid_Arg_Exc_WP;
15821                             WHEN NO_DATA_FOUND THEN
15822                                       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15823                                                          p_msg_name       => 'PA_XC_RECORD_CHANGED');
15824                                     raise Invalid_Arg_Exc_WP;
15825                             WHEN OTHERS THEN
15826                                       IF SQLCODE = -54 then
15827                                            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15828                                                             p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
15829                                            raise Invalid_Arg_Exc_WP;
15830                                       ELSE
15831                                            raise;
15832                                       END IF;
15833                     END;
15834 
15835                     -- Call the table handler to create a task version.
15836                     IF l_debug_mode = 'Y' THEN
15837                         pa_debug.g_err_stage := 'Calling API PA_PROJ_ELEMENT_VERSIONS_PKG.Update_Row';
15838                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15839                     END IF;
15840 
15841                     -- Bug 3075609. Since atleast one task is being updated, this structure version is an
15842                     -- existing one. Let us maintain a flag to track this so that if this flag is Y we will
15843                     -- not recalculate the task weightages if the basis is MANUAL.
15844                     l_new_structure_version  := 'N';
15845 
15846                     PA_PROJ_ELEMENT_VERSIONS_PKG.Update_Row(
15847                        X_ROW_ID                     => l_proj_elem_ver_rowid
15848                       ,X_ELEMENT_VERSION_ID         => l_task_version_id
15849                       ,X_PROJ_ELEMENT_ID            => l_task_id
15850                       ,X_OBJECT_TYPE                => 'PA_TASKS'
15851                       ,X_PROJECT_ID                 => p_project_id
15852                       ,X_PARENT_STRUCTURE_VERSION_ID=> l_structure_version_id
15853                       ,X_DISPLAY_SEQUENCE           => l_display_sequence_tbl(l_task_in_rec.pa_task_id)
15854                       ,X_WBS_LEVEL                  => l_wbs_level_tbl(l_task_in_rec.pa_task_id)
15855                       ,X_WBS_NUMBER                 => l_wbs_number_tbl(l_task_in_rec.pa_task_id)
15856                       ,X_ATTRIBUTE_CATEGORY         => l_attribute_category
15857                       ,X_ATTRIBUTE1                 => l_attribute1
15858                       ,X_ATTRIBUTE2                 => l_attribute2
15859                       ,X_ATTRIBUTE3                 => l_attribute3
15860                       ,X_ATTRIBUTE4                 => l_attribute4
15861                       ,X_ATTRIBUTE5                 => l_attribute5
15862                       ,X_ATTRIBUTE6                 => l_attribute6
15863                       ,X_ATTRIBUTE7                 => l_attribute7
15864                       ,X_ATTRIBUTE8                 => l_attribute8
15865                       ,X_ATTRIBUTE9                 => l_attribute9
15866                       ,X_ATTRIBUTE10                => l_attribute10
15867                       ,X_ATTRIBUTE11                => null
15868                       ,X_ATTRIBUTE12                => null
15869                       ,X_ATTRIBUTE13                => null
15870                       ,X_ATTRIBUTE14                => null
15871                       ,X_ATTRIBUTE15                => null
15872                       ,X_record_version_number      => l_proj_elem_ver_rvn
15873                       ,X_TASK_UNPUB_VER_STATUS_CODE => l_task_unpub_ver_status_code
15874                      );
15875 
15876                     l_task_version_id_tbl(l_task_id) := l_task_version_id;
15877                     px_tasks_out_tbl(i).task_version_id     := l_task_version_id;
15878 
15879                     IF l_debug_mode = 'Y' THEN
15880                         pa_debug.g_err_stage := 'Task Version id : ' || l_task_version_id ;
15881                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
15882                     END IF;
15883 
15884                END IF; /* After calling PA_PROJ_ELEMENT_VERSIONS_PKG  Insert_Row or Update_Row*/
15885 
15886                -- Added for bug 3057575
15887            -- Here we will poulate the task_ver_id_passed_tbl with all the task version Id processed while
15888            -- Updating a project .This is not done while creating a project as we
15889            -- Are adding task version Id in task_ver_id_passed_tbl to identify all the tasks
15890            -- which are not passed while updating a project.
15891                IF (p_structure_version_id IS NOT NULL) THEN
15892                task_ver_id_passed_tbl(l_task_version_id) := l_task_version_id;
15893            END IF;
15894 
15895                -- In following code we will be creating or updating the records in object relationship tables.
15896 
15897                DECLARE
15898                     l_structure_version_id_from     pa_proj_element_versions.element_version_id%TYPE;
15899                     l_task_version_id_from          pa_proj_element_versions.element_version_id%TYPE;
15900                     l_relationship_subtype          pa_object_relationships.relationship_subtype%TYPE;
15901 
15902                BEGIN
15903 
15904                     -- Set the following local variables before calling PA_RELATIONSHIP_PUB.Create_Relationship
15905                     -- l_structure_version_id_from
15906                     -- l_task_version_id_from
15907                     -- l_relationship_subtype
15908                     IF l_parent_task_id is null THEN -- task is a top task.
15909                          l_structure_version_id_from := l_structure_version_id;
15910                          l_task_version_id_from      := null;
15911                          l_relationship_subtype      := 'STRUCTURE_TO_TASK';
15912                     ELSE -- The task is not a top task
15913                          l_structure_version_id_from := null;
15914                          l_task_version_id_from      := l_task_version_id_tbl(l_parent_task_id);
15915                          l_relationship_subtype      := 'TASK_TO_TASK';
15916                     END IF;
15917 
15918                     IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
15919                        l_task_in_rec.pa_task_id IS NULL -- Create Task Context
15920                      THEN
15921                          -- Set the following variables after calling PA_RELATIONSHIP_PUB.Create_Relationship
15922                          --px_tasks_out_tbl(i).return_status
15923                          IF l_debug_mode = 'Y' THEN
15924                             pa_debug.g_err_stage := 'Calling API create_relationship';
15925                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15926                          END IF;
15927 
15928                          PA_RELATIONSHIP_PUB.Create_Relationship
15929                            (
15930                                p_api_version                       => p_api_version_number
15931                               ,p_init_msg_list                     => FND_API.G_FALSE
15932                               ,p_commit                            => p_commit
15933                               ,p_validate_only                     => FND_API.G_FALSE
15934                               ,p_calling_module                    => p_calling_module
15935                               ,p_debug_mode                        => l_debug_mode
15936                               ,p_project_id_from                   => p_project_id
15937                               ,p_structure_id_from                 => l_structure_id
15938                               ,p_structure_version_id_from         => l_structure_version_id_from
15939                               ,p_task_version_id_from              => l_task_version_id_from
15940                               ,p_project_id_to                     => p_project_id
15941                               ,p_structure_id_to                   => l_structure_id
15942                               ,p_task_version_id_to                => l_task_version_id
15943                               ,p_structure_type                    => null
15944                               ,p_initiating_element                => null
15945                               ,p_relationship_type                 => 'S'
15946                               ,p_relationship_subtype              => l_relationship_subtype
15947                               ,p_weighting_percentage              => l_weighting_percentage_tbl(l_task_id)
15948                               ,x_object_relationship_id            => l_relationship_id
15949                               ,x_return_status                     => x_return_status
15950                               ,x_msg_count                         => x_msg_count
15951                               ,x_msg_data                          => x_msg_data
15952                            );
15953 
15954                          px_tasks_out_tbl(i).return_status       := x_return_status;
15955                          IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15956                               IF l_debug_mode = 'Y' THEN
15957                                  pa_debug.g_err_stage := 'Error calling create relationship : ' || l_task_version_id ;
15958                                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15959                               END IF;
15960                               Raise Invalid_Arg_Exc_WP;
15961                          END IF;
15962 
15963                          IF l_debug_mode = 'Y' THEN
15964                             pa_debug.g_err_stage := 'Relationship id : ' || l_relationship_id ;
15965                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
15966                          END IF;
15967 
15968                     ELSE -- in update task case
15969                          -- Set the following variables after calling PA_RELATIONSHIP_PUB.Create_Relationship
15970                          -- px_tasks_out_tbl(i).return_status
15971              --rtarway, for DHI ER, BUG 4413568
15972                              /*
15973                 IF ( PA_PROJECT_PUB.G_TASK_STR_UPDATE_MODE  = 'PA_UPD_TASK_ATTR' ) THEN   --bug 4534919
15974                     PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15975                                                          p_msg_name => 'PA_WBS_CANT_CHANGE');
15976                                     RAISE Invalid_Arg_Exc_WP;
15977                 END IF;
15978                               This code is not required here. */
15979 
15980                          PA_RELATIONSHIP_PVT.Update_Relationship
15981                                       (
15982                                        p_api_version                       => p_api_version_number
15983                                       ,p_init_msg_list                     => FND_API.G_FALSE
15984                                       ,p_commit                            => p_commit
15985                                       ,p_validate_only                     => FND_API.G_FALSE
15986                                       ,p_calling_module                    => p_calling_module
15987                                       ,p_debug_mode                        => l_debug_mode
15988                                       ,p_object_relationship_id            => l_relationship_id
15989                                       ,p_project_id_from                   => null
15990                                       ,p_structure_id_from                 => null
15991                                       ,p_structure_version_id_from         => l_structure_version_id_from
15992                                       ,p_task_version_id_from              => l_task_version_id_from
15993                                       ,p_project_id_to                     => null
15994                                       ,p_structure_id_to                   => null
15995                                       ,p_structure_version_id_to           => null
15996                                       ,p_task_version_id_to                => l_task_version_id
15997                                       ,p_relationship_type                 => 'S'
15998                                       ,p_relationship_subtype              => l_relationship_subtype
15999                                       ,p_weighting_percentage              => l_weighting_percentage_tbl(l_task_id)
16000                                       ,p_record_version_number             => l_obj_rel_rvn
16001                                       ,x_return_status                     => x_return_status
16002                                       ,x_msg_count                         => x_msg_count
16003                                       ,x_msg_data                          => x_msg_data
16004                                      );
16005 
16006                              px_tasks_out_tbl(i).return_status       := x_return_status;
16007 
16008                              IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16009                                  IF l_debug_mode = 'Y' THEN
16010                                      pa_debug.g_err_stage := 'Error calling create relationship : ' || l_task_version_id ;
16011                                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16012                                  END IF;
16013                                  Raise Invalid_Arg_Exc_WP;
16014                              END IF;
16015 
16016                              IF l_debug_mode = 'Y' THEN
16017                                  pa_debug.g_err_stage := 'Relationship id : ' || l_relationship_id ;
16018                                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
16019                              END IF;
16020 
16021                     END IF; -- After  calling PA_RELATIONSHIP_PUB  Create_Relationship or Update_Relationship
16022 
16023                END; -- create/update relationship record.
16024 
16025 
16026                -- Create or update a schedule version for the task version only if the workplan
16027                -- structure is involved.
16028 
16029                IF p_is_wp_separate_from_fn = 'N' OR
16030                   (p_is_wp_separate_from_fn = 'Y' and p_structure_type = 'WORKPLAN')
16031                 THEN
16032 
16033                     -- Set the following local variables before calling Create_Schedule_Version or Update_Schedule_Version
16034                     -- scheduled_start_date,scheduled_finish_date ( only for create task case)
16035                     -- l_task_type_id
16036                     -- l_wq_planned_quantity
16037                     -- l_ver_sch_attr_rec (only for update task)
16038 
16039                     DECLARE
16040                          l_wq_planned_quantity           pa_proj_elem_ver_schedule.wq_planned_quantity%TYPE;
16041                          l_scheduled_start_date          pa_proj_elem_ver_schedule.scheduled_start_date%TYPE;
16042                          l_scheduled_finish_date         pa_proj_elem_ver_schedule.scheduled_finish_date%TYPE;
16043                          l_task_type_id                  pa_proj_elements.type_id%TYPE;
16044                     BEGIN
16045 
16046                          IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
16047                             l_task_in_rec.pa_task_id IS NULL -- Create Task Context
16048                           THEN
16049 
16050                               -- If start date or end date is miss date, then set them to sysdate.
16051                               IF (l_task_in_rec.scheduled_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
16052                                   l_task_in_rec.scheduled_start_date is NULL ) --ADUT
16053                               THEN
16054                                 l_scheduled_start_date := sysdate;
16055                               ELSE
16056                                 l_scheduled_start_date := l_task_in_rec.scheduled_start_date;
16057                               END IF;
16058 
16059                               IF (l_task_in_rec.scheduled_finish_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
16060                                   l_task_in_rec.scheduled_finish_date is NULL) --ADUT
16061                               THEN
16062                                 l_scheduled_finish_date := sysdate;
16063                               ELSE
16064                                 l_scheduled_finish_date := l_task_in_rec.scheduled_finish_date;
16065                               END IF;
16066 
16067 
16068                               -- If the task type for the current task is null, create_task api would have defaulted
16069                               -- it to the default task id. So get the default task type id if the passed in id is null.
16070                               IF l_task_in_rec.task_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM or
16071                                  l_task_in_rec.task_type is null
16072                               THEN
16073                                    l_task_type_id := l_default_task_type_id;
16074                               ELSE
16075                                    l_task_type_id := l_task_in_rec.task_type;
16076                               END IF;
16077 
16078                               -- Need to check if the project and the task type allows for planned work quantity. If not allowed then
16079                               -- set the value to null so that it can be passed on to create_schedule_version api.
16080                               IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_wq_enabled(l_task_type_id) OR
16081                                   'N' = PA_PROGRESS_UTILS.get_project_wq_flag(p_project_id))
16082                               THEN
16083                                   IF (l_task_in_rec.PLANNED_WORK_QUANTITY <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
16084                                       l_task_in_rec.PLANNED_WORK_QUANTITY IS NOT NULL)
16085                                   THEN
16086                                       l_wq_planned_quantity := NULL;
16087                                   END IF;
16088                               ELSE
16089                                   --Added by rtarway, for 4029755
16090                                   IF (l_task_in_rec.PLANNED_WORK_QUANTITY <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
16091                                       l_task_in_rec.PLANNED_WORK_QUANTITY IS NOT NULL)
16092                                   THEN
16093                                       l_wq_planned_quantity := l_task_in_rec.PLANNED_WORK_QUANTITY;
16094                                   ELSE
16095                                       l_wq_planned_quantity := NULL;
16096                                   END IF;
16097                                   --Added by rtarway, for 4029755
16098 
16099                               END IF;
16100 
16101                               --bug 3035902 maansari
16102                               IF pa_task_type_utils.check_tk_type_progressable(l_task_TYPE_ID) = 'Y'
16103                                  AND NVL( l_progressable_task, 'N' ) = 'N'
16104                               THEN
16105                                   l_progressable_task := 'Y';
16106                               END IF;
16107                               --end bug 3035902 maansari
16108 
16109 
16110                          ELSE /* in update task case */
16111                               --  Added for DFF attributes and to get pev_schedule_id and record version number
16112 
16113                               --Bug 6153503 Need to reopen again because changes to schedule version records by the
16114                               -- which is in between earlier open of the cursor and till this place.
16115 
16116                               OPEN cur_ver_sch_attr_rec(l_task_version_id);
16117                               FETCH cur_ver_sch_attr_rec INTO l_ver_sch_attr_rec;
16118                               CLOSE cur_ver_sch_attr_rec;
16119 
16120                               OPEN cur_task_type_id(l_task_in_rec.pa_task_id);
16121                               FETCH cur_task_type_id INTO l_task_type_id;
16122                               CLOSE cur_task_type_id;
16123 
16124                               IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_wq_enabled(l_task_type_id) OR
16125                                    'N' = PA_PROGRESS_UTILS.get_project_wq_flag(p_project_id)) THEN
16126                                             l_wq_planned_quantity := null;
16127                               ELSE
16128                                    IF (l_task_in_rec.PLANNED_WORK_QUANTITY = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16129                                        --Added by rtarway, for 4029755
16130                                        OR
16131                                        l_task_in_rec.PLANNED_WORK_QUANTITY IS NULL) THEN
16132                                          l_wq_planned_quantity := l_ver_sch_attr_rec.wq_planned_quantity;
16133                                    ELSE
16134                                          l_wq_planned_quantity := l_task_in_rec.PLANNED_WORK_QUANTITY;
16135                                    END IF;
16136 
16137                               END IF;
16138 
16139                               --bug 3035902 maansari
16140                               IF pa_task_type_utils.check_tk_type_progressable(l_task_TYPE_ID) = 'Y'
16141                                  AND NVL( l_progressable_task, 'N' ) = 'N'
16142                               THEN
16143                                   l_progressable_task := 'Y';
16144                               END IF;
16145                               --end bug 3035902 maansari
16146 
16147 
16148                          END IF; /* Before  calling PA_TASK_PUB1  Create_Schedule_Version or Update_Schedule_Version*/
16149 
16150                          -- set the following  after calling Create_Schedule_Version or Update_Schedule_Version
16151                          -- px_tasks_out_tbl(i).return_status
16152 
16153                          IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
16154                             l_task_in_rec.pa_task_id IS NULL -- Create Task Context
16155                           THEN
16156                               -- set the following  after calling api PA_TASK_PUB1.Create_Schedule_Version
16157                               -- px_tasks_out_tbl(i).return_status
16158 
16159                               -- Create a schedule version for the task version only if the workplan
16160                               -- structure is involved.
16161 
16162                               IF l_debug_mode = 'Y' THEN
16163                                  pa_debug.g_err_stage := 'Calling API create schedule version';
16164                                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16165                               END IF;
16166 
16167                               PA_TASK_PUB1.Create_Schedule_Version(
16168                                   p_element_version_id      => l_task_version_id
16169                                  ,p_init_msg_list               => FND_API.G_FALSE
16170                                  ,p_scheduled_start_date         => l_scheduled_start_date
16171                                  ,p_scheduled_end_date      => l_scheduled_finish_date
16172                                  ,p_calendar_id              => l_task_in_rec.calendar_id
16173                                  ,p_obligation_start_date       => l_task_in_rec.obligation_start_date
16174                                  ,p_obligation_end_date     => l_task_in_rec.obligation_finish_date
16175                                  ,p_actual_start_date       => l_task_in_rec.actual_start_date
16176                                  ,p_actual_finish_date      => l_task_in_rec.actual_finish_date
16177                                  ,p_estimate_start_date     => l_task_in_rec.estimated_start_date
16178                                  ,p_estimate_finish_date    => l_task_in_rec.estimated_finish_date
16179                                  ,p_duration                => l_task_in_rec.duration
16180                                  ,p_early_start_date        => l_task_in_rec.early_start_date
16181                                  ,p_early_end_date          => l_task_in_rec.early_finish_date
16182                                  ,p_late_start_date         => l_task_in_rec.late_start_date
16183                                  ,p_late_end_date           => l_task_in_rec.late_finish_date
16184                                  ,p_milestone_flag          => l_task_in_rec.milestone_flag
16185                                  ,p_critical_flag           => l_task_in_rec.critical_flag
16186                                  ,p_WQ_PLANNED_QUANTITY     => l_wq_planned_quantity
16187                                  ,p_PLANNED_EFFORT          => l_task_in_rec.planned_effort
16188                                  ,p_attribute_category      => l_attribute_category
16189                                  ,p_attribute1              => l_attribute1
16190                                  ,p_attribute2              => l_attribute2
16191                                  ,p_attribute3              => l_attribute3
16192                                  ,p_attribute4              => l_attribute4
16193                                  ,p_attribute5              => l_attribute5
16194                                  ,p_attribute6              => l_attribute6
16195                                  ,p_attribute7              => l_attribute7
16196                                  ,p_attribute8              => l_attribute8
16197                                  ,p_attribute9              => l_attribute9
16198                                  ,p_attribute10             => l_attribute10
16199                                  --Bug 6153503
16200                                  ,p_attribute11             => l_attribute11
16201                                  ,p_attribute12             => l_attribute12
16202                                  ,p_attribute13             => l_attribute13
16203                                  ,p_attribute14             => l_attribute14
16204                                  ,p_attribute15             => l_attribute15
16205                                  ,x_pev_schedule_id         => l_dummy_number
16206                                  ,x_return_status           => x_return_status
16207                                  ,x_msg_count               => x_msg_count
16208                                  ,x_msg_data                => x_msg_data
16209 -- (Begin Venkat) new params for bug #3652460 ----------------------------------------------
16210                                  ,p_ext_act_duration    => l_task_in_rec.ext_act_duration
16211                                  ,p_ext_remain_duration => l_task_in_rec.ext_remain_duration
16212                                  ,p_ext_sch_duration    => l_task_in_rec.ext_sch_duration
16213 -- (End Venkat) new params for bug #3652460 ------------------------------------------------
16214 -- begin Bug 3654243 -----------------------------------------------------------------------
16215                 ,p_def_sch_tool_tsk_type_code =>   l_task_in_rec.sch_tool_tsk_type_code
16216                 ,p_constraint_type_code  =>        l_task_in_rec.constraint_type_code
16217                 ,p_constraint_date =>              l_task_in_rec.constraint_date
16218                 ,p_free_slack =>                   l_task_in_rec.free_slack
16219                 ,p_total_slack =>                  l_task_in_rec.total_slack
16220                 ,p_effort_driven_flag =>           l_task_in_rec.effort_driven_flag
16221                 ,p_level_assignments_flag =>       l_task_in_rec.level_assignments_flag
16222 -- end Bug 3654243 -------------------------------------------------------------------------
16223                               );
16224 
16225                               px_tasks_out_tbl(i).return_status       := x_return_status;
16226                               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16227                                    IF l_debug_mode = 'Y' THEN
16228                                       pa_debug.g_err_stage := 'Error calling create schedule version : ' || l_task_version_id ;
16229                                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16230                                    END IF;
16231 
16232                                    PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
16233                                                         ,p_msg_name       => 'PA_PS_NO_TASK_SCH_VER_CREATED');
16234                                    RAISE Invalid_Arg_Exc_WP;
16235                               END IF;
16236 
16237                               IF l_debug_mode = 'Y' THEN
16238                                  pa_debug.g_err_stage := 'Schedule Version id : ' || l_dummy_number ;
16239                                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
16240                               END IF;
16241                               --rtarway, 4099429 begin
16242                               if (l_task_in_rec.planned_effort is not null and l_task_in_rec.planned_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16243                                   and l_task_in_rec.planned_effort  > 0) then
16244 
16245                                   if (l_add_task_ver_ids.count = 1000) then
16246                                         IF l_add_task_ver_ids.exists(1) AND l_structure_version_id IS NOT NULL THEN
16247                                              BEGIN
16248 
16249                                                    pa_fp_planning_transaction_pub.add_planning_transactions(
16250                                                       p_context                      => 'WORKPLAN'
16251                                                      ,p_project_id                   => p_project_id
16252                                                      ,p_struct_elem_version_id       => l_structure_version_id
16253                                                      ,p_task_elem_version_id_tbl     => l_add_task_ver_ids
16254                                                      ,p_planned_people_effort_tbl    => l_add_planned_effort
16255                                                      ,p_start_date_tbl               => l_add_start_date
16256                                                      ,p_end_date_tbl                 => l_add_end_date
16257                                                      ,p_pm_product_code              => l_pm_product_code
16258                                                      ,x_return_status                => l_return_status
16259                                                      ,x_msg_count                    => l_msg_count
16260                                                      ,x_msg_data                     => l_msg_data
16261                                                     );
16262 
16263                                              EXCEPTION
16264                                                   WHEN OTHERS THEN
16265                                                   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_PUB',
16266                                                                          p_procedure_name => 'PROCESS_TASK_STRUCTURE_BULK',
16267                                                                          p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.add_planning_transactions:'||SQLERRM,1,240));
16268                                                   raise  fnd_api.g_exc_error;
16269                                              END;
16270 
16271                                              IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16272                                                   x_msg_count := FND_MSG_PUB.count_msg;
16273                                                   raise fnd_api.g_exc_error;
16274                                              END IF;
16275                                        END IF; -- if l_add_task_ver_ids.exists(1) ends here
16276                                         l_add_task_ver_ids.delete;
16277                                         l_add_planned_effort.delete;
16278                                         l_add_start_date.delete;
16279                                         l_add_end_date.delete;
16280                                         l_pm_product_code.delete;
16281                                   end if;-- if (l_add_task_ver_ids.count = 1000)....ends here
16282                                    --rtarway,
16283 
16284                                     l_add_task_ver_ids.extend(1);
16285                                     l_add_planned_effort.extend(1);
16286                                     l_add_start_date.extend(1);
16287                                     l_add_end_date.extend(1);
16288                                     l_pm_product_code.extend(1);
16289 
16290                                     l_add_task_ver_ids(l_add_task_ver_ids.count):= px_tasks_out_tbl(i).task_version_id;
16291                                     l_add_planned_effort(l_add_planned_effort.count):= l_task_in_rec.planned_effort;
16292                                     l_add_start_date(l_add_start_date.count):= l_task_in_rec.scheduled_start_date;
16293                                     l_add_end_date(l_add_end_date.count):= l_task_in_rec.scheduled_finish_date;
16294                                     l_pm_product_code(l_pm_product_code.count) := p_pm_product_code;
16295                               end if;-- if l_task_in_rec.planned_effort is not null....ends here
16296                               --rtarway, 4099429 end
16297 
16298 
16299                          ELSE -- in update task case
16300                               -- set the following  after calling api PA_TASK_PUB1.Update_Schedule_Version
16301                               -- px_tasks_out_tbl(i).return_status
16302 
16303 
16304                               PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';  --bug 4145893 do not call PJI.plan_update api
16305                                                                      --if tasks are updated in bulk.
16306                                                                      --This should set for every single task.
16307                               PA_TASK_PUB1.Update_Schedule_Version(
16308                                          p_calling_module          => p_calling_module
16309                                         ,p_init_msg_list           => FND_API.G_FALSE
16310                                         ,p_pev_schedule_id         => l_ver_sch_attr_rec.pev_schedule_id
16311                                         ,p_calendar_id             => l_task_in_rec.calendar_id
16312                                         ,p_scheduled_start_date    => l_task_in_rec.scheduled_start_date
16313                                         ,p_scheduled_end_date      => l_task_in_rec.scheduled_finish_date
16314                                         ,p_obligation_start_date   => l_task_in_rec.obligation_start_date
16315                                         ,p_obligation_end_date     => l_task_in_rec.obligation_finish_date
16316                                         ,p_actual_start_date       => l_task_in_rec.actual_start_date
16317                                         ,p_actual_finish_date      => l_task_in_rec.actual_finish_date
16318                                         ,p_estimate_start_date     => l_task_in_rec.estimated_start_date
16319                                         ,p_estimate_finish_date    => l_task_in_rec.estimated_finish_date
16320                                         ,p_duration                => l_task_in_rec.duration
16321                                         ,p_early_start_date        => l_task_in_rec.early_start_date
16322                                         ,p_early_end_date          => l_task_in_rec.early_finish_date
16323                                         ,p_late_start_date         => l_task_in_rec.late_start_date
16324                                         ,p_late_end_date           => l_task_in_rec.late_finish_date
16325                                         ,p_milestone_flag          => l_task_in_rec.milestone_flag
16326                                         ,p_critical_flag           => l_task_in_rec.critical_flag
16327                                         ,p_WQ_PLANNED_QUANTITY     => l_wq_planned_quantity
16328                                         ,p_PLANNED_EFFORT          => l_task_in_rec.planned_effort
16329                                         ,p_record_version_number   => l_ver_sch_attr_rec.record_version_number
16330                                         --Bug 6153503
16331                                         ,p_attribute_category      => l_attribute_category
16332                                         ,p_attribute1              => l_attribute1
16333                                         ,p_attribute2              => l_attribute2
16334                                         ,p_attribute3              => l_attribute3
16335                                         ,p_attribute4              => l_attribute4
16336                                         ,p_attribute5              => l_attribute5
16337                                         ,p_attribute6              => l_attribute6
16338                                         ,p_attribute7              => l_attribute7
16339                                         ,p_attribute8              => l_attribute8
16340                                         ,p_attribute9              => l_attribute9
16341                                         ,p_attribute10             => l_attribute10
16342                                         ,p_attribute11             => l_attribute11
16343                                         ,p_attribute12             => l_attribute12
16344                                         ,p_attribute13             => l_attribute13
16345                                         ,p_attribute14             => l_attribute14
16346                                         ,p_attribute15             => l_attribute15
16347                                         ,x_return_status           => x_return_status
16348                                         ,x_msg_count               => x_msg_count
16349                                         ,x_msg_data                => x_msg_data
16350 -- (Begin Venkat) new params for bug #3652460 ----------------------------------------------
16351                     ,p_ext_act_duration => l_task_in_rec.ext_act_duration
16352                     ,p_ext_remain_duration  => l_task_in_rec.ext_remain_duration
16353                     ,p_ext_sch_duration => l_task_in_rec.ext_sch_duration
16354 -- (End Venkat) new params for bug #3652460 -------------------------------------------------
16355 
16356 -- begin Bug 3654243 -----------------------------------------------------------------------
16357                     ,p_def_sch_tool_tsk_type_code =>   l_task_in_rec.sch_tool_tsk_type_code
16358                     ,p_constraint_type_code  =>        l_task_in_rec.constraint_type_code
16359                     ,p_constraint_date =>              l_task_in_rec.constraint_date
16360                     ,p_free_slack =>                   l_task_in_rec.free_slack
16361                     ,p_total_slack =>                  l_task_in_rec.total_slack
16362                     ,p_effort_driven_flag =>           l_task_in_rec.effort_driven_flag
16363                     ,p_level_assignments_flag =>       l_task_in_rec.level_assignments_flag
16364 -- end Bug 3654243 -------------------------------------------------------------------------
16365 
16366                                         );
16367 
16368                               --bug 4149392
16369                               PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
16370                               --end bug 4149392
16371 
16372                               px_tasks_out_tbl(i).return_status       := x_return_status;
16373 
16374                               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16375                                    IF l_debug_mode = 'Y' THEN
16376                                          pa_debug.g_err_stage := 'Error calling update schedule version : ' || l_task_version_id ;
16377                                          pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16378                                    END IF;
16379 
16380                                    PA_UTILS.ADD_MESSAGE( p_app_short_name    => 'PA'
16381                                                            ,p_msg_name       => 'PA_PS_TASK_NOT_UPDATED'
16382                                /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
16383                                ,p_token1         => 'PROJECT'
16384                                ,p_value1         => p_project_id
16385                                ,p_token2         => 'TASK'
16386                                ,p_value2        => l_task_in_rec.pa_task_id
16387                                );
16388                                    RAISE Invalid_Arg_Exc_WP;
16389                               END IF;
16390 
16391                               IF l_debug_mode = 'Y' THEN
16392                                    pa_debug.g_err_stage := 'Schedule Version id : ' || l_ver_sch_attr_rec.pev_schedule_id ;
16393                                    pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
16394                               END IF;
16395 
16396                         -- Start Addition 6458891
16397                         l_update_task_det_flag := 'Y';
16398                         If nvl(p_pm_product_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16399                            and nvl(p_pm_product_code,'X') = 'MSPROJECT'  then
16400                                 l_prev_planned_effort := null;
16401                                 l_prev_etc_effort     := null;
16402                                 l_prev_percent_comp   := null;
16403                                 l_update_task_det_flag:= 'N';
16404 
16405                                 -- Bug 7158172
16406                                 OPEN cur_prev_prog(p_project_id,l_task_id,l_task_version_id);
16407                                 FETCH cur_prev_prog INTO l_prev_planned_effort, l_prev_etc_effort,l_prev_percent_comp;
16408                                 CLOSE cur_prev_prog;
16409 
16410                                 IF (NVL(l_task_in_rec.planned_effort, 0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
16411                                     NVL(l_task_in_rec.planned_effort, 0) <> NVL(l_prev_planned_effort,0)) THEN
16412                                         l_update_task_det_flag := 'Y';
16413                                 END IF;
16414 
16415                                 IF (NVL(l_task_in_rec.etc_effort, 0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
16416                                     NVL(l_task_in_rec.etc_effort, 0) <> NVL(l_prev_etc_effort,0)) THEN
16417                                         l_update_task_det_flag := 'Y';
16418                                 END IF;
16419 
16420                                 IF (NVL(l_task_in_rec.percent_complete, 0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
16421                                     NVL(l_task_in_rec.percent_complete, 0) <> NVL(l_prev_percent_comp,0)) THEN
16422                                         l_update_task_det_flag := 'Y';
16423                                 END IF;
16424                                 -- Bug 7132911
16425 
16426                                 /* Commented for bug 7132911
16427                                 If (nvl(l_task_in_rec.planned_effort,0)<> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16428                                     or
16429                                     nvl(l_task_in_rec.etc_effort,0)<> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16430                                     or
16431                                     nvl(l_task_in_rec.percent_complete,0)<> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
16432                                 Then
16433 
16434                                         open cur_prev_prog(p_project_id,l_task_id,l_task_version_id);
16435                                         fetch cur_prev_prog into l_prev_planned_effort, l_prev_etc_effort,l_prev_percent_comp;
16436                                         close cur_prev_prog;
16437                                         If nvl(l_task_in_rec.planned_effort,0) <> nvl(l_prev_planned_effort,0)
16438                                                 or
16439                                                 nvl(l_task_in_rec.etc_effort,0)<> nvl(l_prev_etc_effort,0)
16440                                                 or
16441                                                 nvl(l_task_in_rec.percent_complete,0)<> nvl(l_prev_percent_comp,0)
16442                                                 Then
16443                                                 l_update_task_det_flag :='Y';
16444                                         end if;
16445                                 end if;
16446                                 */
16447                         end if;
16448                         --  End addition for bug 6458891
16449 
16450                               --Added by rtarway for BUG 39198900
16451                               IF p_calling_module <> 'FORMS' and l_update_task_det_flag = 'Y' THEN  /* Added flag check for Bug 6458891 */
16452                                        pa_task_pub1.update_task_det_sch_info(
16453                                         p_calling_module    =>      p_calling_module
16454                                        ,p_task_ver_id      =>  l_task_version_id
16455                                        ,p_project_id       =>  p_project_id
16456                                        ,p_planned_effort   =>      l_task_in_rec.planned_effort
16457                                        ,p_ETC_effort       =>  l_task_in_rec.etc_effort
16458                                        ,p_structure_version_id => l_structure_version_id
16459                                        ,p_percent_complete =>  l_task_in_rec.percent_complete
16460                                        ,x_return_status    =>  x_return_status
16461                                        ,x_msg_count        =>  x_msg_count
16462                                        ,x_msg_data     =>  x_msg_data
16463                                        );
16464                               END IF;
16465                               --End Added by rtarway for BUG 39198900
16466 
16467                          END IF; --end for p_tasks_in(i).pa_task_id is null
16468                     END;
16469                END IF; --END IF For IF p_is_wp_separate_from_fn = 'N' OR (p_is_wp_separate_from_fn = 'Y' and p_structure_type = 'WORKPLAN')
16470 
16471           END LOOP; -- loop through the input tasks table.
16472      END IF; -- nvl(p_tasks_in_tbl.last,0) > 0
16473 -------------------------------------------------
16474 /** Code change begin for Bug   4120380 **/
16475 /** The code below will update the task_numbers of the tasks passed via update_project script
16476 back to their original value viz. it'll crop the '-' added to aviod the constraint check in
16477 PA_TASKS and PA_PROJ_ELEMENTS. **/
16478 /* bug#5243018 : Reverting the fix in Bug 4120380
16479 IF nvl(p_tasks_in_tbl.last,0) > 0 THEN --IF Added by rtarway for BUG 4336701
16480     FOR i in p_tasks_in_tbl.first..p_tasks_in_tbl.last LOOP
16481         UPDATE pa_proj_elements
16482         SET element_number = p_tasks_in_tbl(i).pa_task_number
16483         WHERE element_number = '-'||p_tasks_in_tbl(i).pa_task_number
16484         AND PROJECT_ID = p_project_id;
16485         UPDATE pa_tasks
16486         SET task_number = p_tasks_in_tbl(i).pa_task_number
16487         WHERE task_number = '-'||p_tasks_in_tbl(i).pa_task_number
16488         AND PROJECT_ID = p_project_id;
16489         --dbms_output.put_line(('value of recod updates in pa_proj_elements'||sql%rowcount);
16490     END LOOP;
16491 END IF;
16492 	 End Reverting bug#5243018*/
16493 /* Code change end for Bug 4120380 **/
16494 ---------------------------------------------------
16495      --Start of Changes for bug 3057575
16496      -- Here we check that while updating a project any of the tasks are missed while passing to update_project
16497        IF nvl(task_ver_id_passed_tbl.last,0) > 0 THEN  -- Added for bug 3719758
16498         IF (p_structure_version_id IS NOT NULL) THEN
16499              OPEN cur_all_task_ver_id(l_structure_version_id);
16500          Loop
16501             FETCH cur_all_task_ver_id into row_task_ver_id;
16502             EXIT WHEN  cur_all_task_ver_id%NOTFOUND;
16503             IF  NOT(task_ver_id_passed_tbl.EXISTS(row_task_ver_id.element_version_id)) THEN
16504 
16505                                OPEN  cur_ver_id_to_task_num(row_task_ver_id.element_version_id);
16506                    FETCH cur_ver_id_to_task_num INTO l_err_task_number;
16507                    CLOSE cur_ver_id_to_task_num;
16508 
16509                                PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
16510                                                     ,p_msg_name       => 'PA_TASK_MISS_IN_HIERARCHY_ORD'
16511                             ,p_token1         => 'TASK'
16512                             ,p_value1         => l_err_task_number);
16513 
16514                                    RAISE Invalid_Arg_Exc_WP;
16515             End if;
16516          END LOOP;
16517          CLOSE cur_all_task_ver_id;
16518     END IF;
16519       End If;  -- Added for bug 3719758
16520      --End of Changes for bug 3057575
16521 
16522      -- Bug 3075609. For some of the tasks the peer task could have moved out of the branch. In this case
16523      -- we will set the first progress enabled task of the parent to 100 and the rest to 0. If any concerns
16524      -- are raised regarding this, we will modify the logic so as to recalculate the weightage of the tasks
16525      -- as per the requirements then.
16526      -- The following is not wrapped with the l_maintain_weightages flag as if the flag is 'N' the plsql table
16527      -- of records will be null and no processing will be done.
16528      DECLARE
16529           -- This cursor will get the relationship id and the progress enabled flag which will be used to
16530           -- reassign the task weightages for the affected peer tasks.
16531           CURSOR cur_get_child_info(c_parent_element_version_id NUMBER)
16532           IS
16533           SELECT rel.OBJECT_RELATIONSHIP_ID,tt.prog_entry_enable_flag
16534           FROM   PA_OBJECT_RELATIONSHIPS rel, pa_proj_element_versions pev, pa_proj_elements pe, pa_task_types tt
16535           WHERE  rel.object_id_from1 = c_parent_element_version_id
16536           AND    rel.object_type_to = 'PA_TASKS'
16537           AND    rel.relationship_type = 'S'
16538           AND    rel.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
16539           AND    rel.object_id_to1 = pev.element_version_id
16540           AND    pev.proj_element_id = pe.proj_element_id
16541           AND    tt.object_type    = 'PA_TASKS' /* bug 3279978 FP M Enhancement */
16542           AND    pe.type_id = tt.task_type_id;
16543 
16544           TYPE obj_rel_id_tbl is table of pa_object_relationships.object_relationship_id%TYPE
16545                INDEX BY BINARY_INTEGER;
16546 
16547           l_parent_version_id           pa_proj_element_versions.element_version_id%TYPE;
16548           l_prog_entry_enable_flag_tbl  PA_PLSQL_DATATYPES.Char1TabTyp;
16549           l_obj_rel_id_tbl              obj_rel_id_tbl;
16550           l_plsql_max_array_size        CONSTANT NUMBER  := 200; -- limiting the max fetch size
16551           l_task_weightage_tbl          weighting_percentage_tbl;
16552           l_weightage_set_flag          VARCHAR2(1);
16553      BEGIN
16554           IF nvl(l_affected_parents_tbl.last,0) > 0 THEN -- only if tasks have moved do the processing
16555                FOR l_parent_version_id in l_affected_parents_tbl.first..l_affected_parents_tbl.last LOOP
16556                     l_weightage_set_flag := 'N';
16557                     OPEN cur_get_child_info(l_parent_version_id);
16558                     LOOP
16559                          FETCH  cur_get_child_info BULK COLLECT INTO
16560                                        l_obj_rel_id_tbl
16561                                       ,l_prog_entry_enable_flag_tbl
16562                          LIMIT  l_plsql_max_array_size;
16563 
16564                          IF l_debug_mode = 'Y' THEN
16565                               pa_debug.g_err_stage:= 'Fetched ' || cur_get_child_info%rowcount || ' records for processing';
16566                               pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
16567                          END IF;
16568 
16569                          IF nvl(l_obj_rel_id_tbl.last,0) > 0 THEN -- only if something is fetched do the processing
16570                               FOR i in l_obj_rel_id_tbl.first..l_obj_rel_id_tbl.last LOOP
16571                                    -- Set the weightage for the first progress enabled task to 100 and rest to 0.
16572                                    IF l_prog_entry_enable_flag_tbl(i) = 'Y' and l_weightage_set_flag = 'N' THEN
16573                                         l_task_weightage_tbl(i) := 100;
16574                                         l_weightage_set_flag := 'Y';
16575                                    ELSE
16576                                         l_task_weightage_tbl(i) := 0;
16577                                    END IF;
16578                               END LOOP;
16579                               -- update back the records.
16580                               FORALL i in l_obj_rel_id_tbl.first..l_obj_rel_id_tbl.last
16581                                    UPDATE pa_object_relationships
16582                                    set weighting_percentage = l_task_weightage_tbl(i)
16583                                    where object_relationship_id = l_obj_rel_id_tbl(i);
16584                          END IF;
16585                          EXIT WHEN nvl(l_obj_rel_id_tbl.last,0) < l_plsql_max_array_size;
16586                     END LOOP;
16587                     CLOSE cur_get_child_info;
16588                END LOOP;
16589           END IF;
16590      EXCEPTION
16591           WHEN OTHERS THEN
16592                IF cur_get_child_info%ISOPEN THEN
16593                     close cur_get_child_info;
16594                END IF;
16595                RAISE;
16596      END;
16597 
16598      -- Siva: Call the set_update_wbs_flag api here after the processing is completed for all the tasks.
16599 
16600                --bug 3010538
16601                IF l_WBS_changed_flag = 'Y'
16602                THEN
16603 
16604                    --3035902: process update flag changes
16605                    --Bug No 3450684 SMukka Commented if condition
16606                    --IF NOT ( p_structure_type = 'WORKPLAN' AND
16607                    --         p_is_wp_separate_from_fn = 'Y' AND
16608                    --         ( PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id) = 'MANUAL' OR
16609                    --           NVL( l_progressable_task, 'N' ) = 'N' ))
16610                    --THEN
16611                          PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
16612                        (
16613                           p_calling_context       => 'AMG'
16614                          ,p_project_id            => p_project_id
16615                          ,p_structure_version_id  => l_structure_version_id
16616                          ,p_update_wbs_flag       => 'Y'
16617                          ,x_return_status         => l_return_status
16618                          ,x_msg_count             => l_msg_count
16619                          ,x_msg_data              => l_msg_data);
16620 
16621                          if l_return_status <> FND_API.G_RET_STS_SUCCESS then
16622                             Raise Invalid_Arg_Exc_WP;
16623                          end if;
16624                    --END IF;
16625 
16626                    IF p_structure_type = 'FINANCIAL'
16627                    THEN
16628                        IF ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' OR
16629                             PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'Y' OR
16630                             ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
16631                               PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
16632                               PA_PROJECT_PUB.G_Published_version_exists = 'N' ) )
16633                        THEN
16634                             pa_fp_refresh_elements_pub.set_process_flag_proj(
16635                                p_project_id               => p_project_id
16636                               ,p_request_id               => null
16637                               ,p_process_code             => null
16638                               ,p_refresh_required_flag    => 'Y'
16639                               ,x_return_status            => l_return_status
16640                               ,x_msg_count                => l_msg_count
16641                               ,x_msg_data                 => l_msg_data );
16642 
16643                             if l_return_status <> FND_API.G_RET_STS_SUCCESS then
16644                                Raise Invalid_Arg_Exc_WP;
16645                             end if;
16646                        END IF;
16647                    END IF;
16648                END IF;
16649                --end bug 3010538
16650 
16651      -- Do task status rollup, date rollup and recalculation of task weightings
16652      -- if the workplan structure is involved.
16653      IF p_is_wp_separate_from_fn = 'N' OR
16654         (p_is_wp_separate_from_fn = 'Y' and p_structure_type = 'WORKPLAN')
16655      THEN
16656           -- Call task status rollup with element version id as null so that rollup
16657           -- happens for the entire version. Status rollup needs to be done only if
16658           -- versioning is not enabled.
16659           IF p_is_wp_versioning_enabled = 'N' THEN
16660 
16661                IF l_debug_mode = 'Y' THEN
16662                   pa_debug.g_err_stage := 'Calling API Task status rollup';
16663                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16664                END IF;
16665 
16666                PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
16667                       p_structure_version_id => l_structure_version_id
16668                      ,p_element_version_id   => null
16669                      ,x_return_status        => x_return_status
16670                      ,x_msg_count            => x_msg_count
16671                      ,x_msg_data             => x_msg_data
16672                );
16673 
16674                IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16675                     IF l_debug_mode = 'Y' THEN
16676                        pa_debug.g_err_stage := 'Error in task status rollup : ' || l_structure_version_id ;
16677                        pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16678                     END IF;
16679                     Raise Invalid_Arg_Exc_WP;
16680                END IF;
16681 
16682 
16683           END IF; -- p_is_wp_versioning_enabled = 'N'
16684 
16685 
16686 
16687           -- Rollup dates.
16688           IF l_debug_mode = 'Y' THEN
16689              pa_debug.g_err_stage := 'Calling API rollup dates';
16690              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16691           END IF;
16692           --Bug3802469, rtarway, this should not be called if px_tasks_out_tbl is empty, this will be empty,
16693           --if no tasks are passed , this will be empty,
16694           IF ( px_tasks_out_tbl IS NOT NULL AND px_tasks_out_tbl.count > 0)
16695           THEN
16696                PA_PROJ_TASK_STRUC_PUB.rollup_dates(
16697                      p_tasks_in             => px_tasks_out_tbl
16698                     ,p_task_version_id      => null
16699                     ,p_project_id           => p_project_id
16700                     ,P_structure_version_id => null
16701                     ,x_msg_count            => x_msg_count
16702                     ,x_msg_data             => x_msg_data
16703                     ,x_return_status        => x_return_status
16704                );
16705                IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16706                     IF l_debug_mode = 'Y' THEN
16707                        pa_debug.g_err_stage := 'Error in rollup dates : ' || l_structure_version_id ;
16708                        pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16709                     END IF;
16710                     Raise Invalid_Arg_Exc_WP;
16711                END IF;
16712           END IF;
16713           --Bug3802469, rtarway
16714 
16715            l_task_weight_basis_code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id => p_project_id) ;
16716 
16717           -- Recalculate the task weightings.
16718           IF nvl(l_task_weight_basis_code,'-1') = 'MANUAL' AND
16719              (l_new_structure_version = 'Y' OR                   -- Bug 3075609. Recalculate the task weightings only if it is a
16720               nvl(p_create_task_versions_only,'N') = 'Y') THEN   -- new structure version. Otherwise donot.
16721                IF l_debug_mode = 'Y' THEN
16722                   pa_debug.g_err_stage := 'Calling API recalculate task weightings';
16723                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16724                END IF;
16725                --Bug3802469, rtarway, this should not be called if px_tasks_out_tbl is empty, this will be empty,
16726                --if no tasks are passed , this will be empty,
16727                IF ( px_tasks_out_tbl IS NOT NULL AND px_tasks_out_tbl.count > 0)
16728                THEN
16729                     PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings(
16730                           p_tasks_in             => px_tasks_out_tbl
16731                          ,p_task_version_id      => null
16732                          ,x_msg_count            => x_msg_count
16733                          ,x_msg_data             => x_msg_data
16734                          ,x_return_status        => x_return_status
16735                     );
16736                     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16737                          IF l_debug_mode = 'Y' THEN
16738                             pa_debug.g_err_stage := 'Error in recalculate task weightings : ' || l_structure_version_id ;
16739                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16740                          END IF;
16741                          Raise Invalid_Arg_Exc_WP;
16742                     END IF;
16743                END IF;
16744                --Bug3802469, rtarway, IF(null != px_tasks_out_tbl...
16745           END IF ;
16746 
16747      END IF; -- p_is_wp_separate_from_fn = 'N' OR (p_is_wp_separate_from_fn = 'Y' and p_structure_type = 'WORKPLAN')
16748 
16749      -- PA L Changes 3010538
16750 
16751    IF  ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
16752        ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
16753          PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'  AND
16754          PA_PROJECT_PUB.G_Published_version_exists = 'N')
16755    THEN
16756 
16757    -- Changed p_structure_version_id to l_structure_version_id Bug 3035902.
16758    l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => p_project_id
16759                                                                        ,p_structure_version_id => l_structure_version_id ) ;
16760    IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
16761         IF p_process_mode = 'ONLINE' THEN
16762 
16763                IF l_debug_mode = 'Y' THEN
16764                   pa_debug.g_err_stage := 'Calling API PROCESS_WBS_UPDATES';
16765                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16766                END IF;
16767 
16768              -- Changed p_structure_version_id to l_structure_version_id Bug 3035902.
16769              -- Instead of using local variables, used the out parameters for the standard parameters.
16770 
16771              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context      => 'ONLINE_UPDATE'
16772                                                        ,p_project_id           => p_project_id
16773                                                        ,p_structure_version_id => l_structure_version_id
16774                                                        ,x_return_status        => x_return_status
16775                                                        ,x_msg_count            => x_msg_count
16776                                                        ,x_msg_data             => x_msg_data ) ;
16777 
16778              -- Changed the way in which the error is handled.
16779              IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16780                   IF l_debug_mode = 'Y' THEN
16781                      pa_debug.g_err_stage := 'Error in process_wbs_updates : ';
16782                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16783                   END IF;
16784                   Raise Invalid_Arg_Exc_WP;
16785              END IF;
16786 
16787         ELSIF p_process_mode = 'CONCURRENT' THEN
16788 
16789                IF l_debug_mode = 'Y' THEN
16790                   pa_debug.g_err_stage := 'Calling API PROCESS_WBS_UPDATES_CONC_WRP';
16791                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16792                END IF;
16793 
16794              -- Changed p_structure_version_id to l_structure_version_id Bug 3035902.
16795              -- Instead of using local variables, used the out parameters for the standard parameters.
16796              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context       => 'CONC_UPDATE'
16797                                                                  ,p_project_id            => p_project_id
16798                                                                  ,p_structure_version_id  => l_structure_version_id
16799                                                                  ,x_return_status         => x_return_status
16800                                                                  ,x_msg_count             => x_msg_count
16801                                                                  ,x_msg_data              => x_msg_data ) ;
16802              -- Changed the way in which the error is handled.
16803              IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16804                   IF l_debug_mode = 'Y' THEN
16805                      pa_debug.g_err_stage := 'Error in process_wbs_updates_conc_wrp : ';
16806                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16807                   END IF;
16808                   Raise Invalid_Arg_Exc_WP;
16809              END IF;
16810 
16811         END IF ;
16812      END IF ;
16813    END IF ;
16814 
16815 --Amit : Bug 3964548 Begin
16816 
16817      IF l_debug_mode = 'Y' THEN
16818         Pa_Debug.g_err_stage:= 'Calling FP add_planning Txn APIs';
16819         Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,l_debug_level3);
16820         Pa_Debug.WRITE(G_PKG_NAME,'p_structure_type='||p_structure_type,l_debug_level3);
16821         Pa_Debug.WRITE(G_PKG_NAME,'p_is_wp_separate_from_fn='||p_is_wp_separate_from_fn,l_debug_level3);
16822         Pa_Debug.WRITE(G_PKG_NAME,'p_tasks_in_tbl.count='||p_tasks_in_tbl.count,l_debug_level3);
16823         Pa_Debug.WRITE(G_PKG_NAME,'p_structure_version_id='||p_structure_version_id,l_debug_level3);
16824         Pa_Debug.WRITE(G_PKG_NAME,'l_structure_version_id='||l_structure_version_id,l_debug_level3);
16825      END IF;
16826 
16827    IF ((p_structure_type = 'WORKPLAN' AND p_is_wp_separate_from_fn = 'Y') OR p_is_wp_separate_from_fn = 'N' ) THEN
16828     -- 4198962 Moved call of add_planning_transactions before population of l_del_task_ver_ids
16829     IF l_add_task_ver_ids.exists(1) AND l_structure_version_id IS NOT NULL THEN
16830         BEGIN
16831              pa_fp_planning_transaction_pub.add_planning_transactions(
16832                 p_context                      => 'WORKPLAN'
16833                ,p_project_id                   => p_project_id
16834                ,p_struct_elem_version_id       => l_structure_version_id
16835                ,p_task_elem_version_id_tbl     => l_add_task_ver_ids
16836                ,p_planned_people_effort_tbl    => l_add_planned_effort
16837                ,p_start_date_tbl               => l_add_start_date
16838                ,p_end_date_tbl                 => l_add_end_date
16839                ,p_pm_product_code              => l_pm_product_code
16840                ,x_return_status                => l_return_status
16841                ,x_msg_count                    => l_msg_count
16842                ,x_msg_data                     => l_msg_data
16843               );
16844         EXCEPTION
16845             WHEN OTHERS THEN
16846             fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_PUB',
16847                                       p_procedure_name => 'PROCESS_TASK_STRUCTURE_BULK',
16848                                       p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.add_planning_transactions:'||SQLERRM,1,240));
16849             raise  fnd_api.g_exc_error;
16850         END;
16851 
16852         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16853             x_msg_count := FND_MSG_PUB.count_msg;
16854             raise fnd_api.g_exc_error;
16855         END IF;
16856     END IF; -- l_add_task_ver_ids.exists(1) THEN
16857 
16858     IF nvl(p_tasks_in_tbl.LAST,0) > 0 THEN
16859         FOR l_i in p_tasks_in_tbl.first .. p_tasks_in_tbl.last LOOP
16860             --rtarway, 4099429, begin comment
16861                /*IF p_tasks_in_tbl(l_i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
16862                p_tasks_in_tbl(l_i).pa_task_id IS NULL -- Create Task Context
16863             THEN
16864                 l_add_plan_task_id := null;
16865                 IF p_structure_version_id is not null THEN -- Update Project Context
16866                     OPEN cur_wp_task_csr_duplicate(p_project_id,p_tasks_in_tbl(l_i).pm_task_reference);
16867                     FETCH cur_wp_task_csr_duplicate INTO l_add_plan_task_id;
16868                     CLOSE cur_wp_task_csr_duplicate;
16869                 END IF;
16870 
16871                 IF l_debug_mode = 'Y' THEN
16872                     Pa_Debug.WRITE(G_PKG_NAME,'Create Task Context',l_debug_level3);
16873                 END IF;
16874                 IF PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(px_tasks_out_tbl(l_i).task_version_id) = 'Y'
16875                 AND pa_task_assignment_utils.check_asgmt_exists_in_task(px_tasks_out_tbl(l_i).task_version_id) = 'N'
16876                 THEN
16877                     IF l_debug_mode = 'Y' THEN
16878                         Pa_Debug.WRITE(G_PKG_NAME,'Lowest Task With No Assignments',l_debug_level3);
16879                     END IF;
16880 
16881                     IF p_tasks_in_tbl(l_i).planned_effort IS NOT NULL AND p_tasks_in_tbl(l_i).planned_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16882                        AND l_add_plan_task_id IS NULL
16883                     THEN
16884                         IF l_debug_mode = 'Y' THEN
16885                             Pa_Debug.WRITE(G_PKG_NAME,'Preparing Tables to call FP add_plan_txn',l_debug_level3);
16886                         END IF;
16887 
16888                         l_add_task_ver_ids.extend(1);
16889                         l_add_planned_effort.extend(1);
16890                         l_add_start_date.extend(1);
16891                         l_add_end_date.extend(1);
16892                         l_pm_product_code.extend(1);
16893 
16894                         l_add_task_ver_ids(l_add_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
16895                         l_add_planned_effort(l_add_planned_effort.count):= p_tasks_in_tbl(l_i).planned_effort;
16896                         l_add_start_date(l_add_start_date.count):= p_tasks_in_tbl(l_i).scheduled_start_date;
16897                         l_add_end_date(l_add_end_date.count):= p_tasks_in_tbl(l_i).scheduled_finish_date;
16898                         l_pm_product_code(l_pm_product_code.count) := p_pm_product_code;
16899                         IF l_debug_mode = 'Y' THEN
16900                             Pa_Debug.WRITE(G_PKG_NAME,'l_add_task_ver_ids='||l_add_task_ver_ids(l_add_task_ver_ids.count),l_debug_level3);
16901                             Pa_Debug.WRITE(G_PKG_NAME,'l_add_planned_effort='||l_add_planned_effort(l_add_planned_effort.count),l_debug_level3);
16902                             Pa_Debug.WRITE(G_PKG_NAME,'l_add_start_date='||l_add_start_date(l_add_start_date.count),l_debug_level3);
16903                             Pa_Debug.WRITE(G_PKG_NAME,'l_add_end_date='||l_add_end_date(l_add_end_date.count),l_debug_level3);
16904                             Pa_Debug.WRITE(G_PKG_NAME,'l_pm_product_code='||l_pm_product_code(l_pm_product_code.count),l_debug_level3);
16905                         END IF;
16906                     END IF;
16907                 --As per discussion with Amit we will never enter this else part
16908                 ELSE
16909                     IF l_debug_mode = 'Y' THEN
16910                         Pa_Debug.WRITE(G_PKG_NAME,'Preparing Tables to call FP delete_plan_txn',l_debug_level3);
16911                     END IF;
16912                     l_del_task_ver_ids.extend(1);
16913                     l_del_task_ver_ids(l_del_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
16914                 END IF;
16915             ELSE -- Update Task Context
16916                 IF l_debug_mode = 'Y' THEN
16917                     Pa_Debug.WRITE(G_PKG_NAME,'Update Task Context',l_debug_level3);
16918                 END IF;
16919 
16920                 -- Bug 4078307: Changes start
16921                 -- In update task flow we should be deleting all task assignments for summary-level tasks
16922                 IF PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(px_tasks_out_tbl(l_i).task_version_id) = 'N'
16923                 AND pa_task_assignment_utils.check_asgmt_exists_in_task(px_tasks_out_tbl(l_i).task_version_id) = 'Y'
16924                 THEN
16925                     IF l_debug_mode = 'Y' THEN
16926                         Pa_Debug.WRITE(G_PKG_NAME,'Preparing Tables to call FP delete_plan_txn for summary task in update flow',l_debug_level3);
16927                     END IF;
16928 
16929                     l_del_task_ver_ids.extend(1);
16930                     l_del_task_ver_ids(l_del_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
16931                 END IF;
16932 
16933 
16934                 IF PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(px_tasks_out_tbl(l_i).task_version_id) = 'Y'
16935                 AND pa_task_assignment_utils.check_asgmt_exists_in_task(px_tasks_out_tbl(l_i).task_version_id) = 'N'
16936                 THEN
16937                     -- We do not have to call update_planning_transaction here bcoz
16938                     -- update_schedule_version is already calling it.
16939                     null;
16940                 ELSE
16941                     IF l_debug_mode = 'Y' THEN
16942                         Pa_Debug.WRITE(G_PKG_NAME,'Preparing Tables to call FP delete_plan_txn',l_debug_level3);
16943                     END IF;
16944 
16945                     l_del_task_ver_ids.extend(1);
16946                     l_del_task_ver_ids(l_del_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
16947                 END IF;
16948 
16949                 -- Bug 4078307: Changes End
16950             END IF;-- Create Task Context*/
16951                --rtarway, 4099429, end comment
16952 
16953 	       -- Bug 7437034 (Initialize l_hidden_assgn to N for each iteration)
16954  	       l_hidden_assgn := 'N';
16955 
16956                --rtarway, 4099429, begin add
16957                --rtarway, 4132590, begin add
16958                OPEN  check_hidden_assgn_exists(px_tasks_out_tbl(l_i).task_version_id);
16959                FETCH check_hidden_assgn_exists into l_hidden_assgn;
16960                CLOSE check_hidden_assgn_exists;
16961                --rtarway, 4132590, end add
16962 
16963                IF (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(px_tasks_out_tbl(l_i).task_version_id) = 'N'
16964                 --AND pa_task_assignment_utils.check_asgmt_exists_in_task(px_tasks_out_tbl(l_i).task_version_id) = 'Y')
16965                     AND l_hidden_assgn = 'Y')--modified by rtarway for BUG 4132590
16966                THEN
16967                     IF l_debug_mode = 'Y' THEN
16968                         Pa_Debug.WRITE(G_PKG_NAME,'Preparing Tables to call FP delete_plan_txn for summary task in update flow',l_debug_level3);
16969                     END IF;
16970 
16971                     if (l_del_task_ver_ids.count = 1000) then
16972                               IF l_del_task_ver_ids.exists(1) THEN
16973                                    BEGIN
16974                                               pa_fp_planning_transaction_pub.delete_planning_transactions(
16975                                              p_context                       => 'WORKPLAN'
16976                                              ,p_task_or_res                  => 'TASKS'
16977                                              ,p_element_version_id_tbl       => l_del_task_ver_ids
16978                                              ,x_return_status                => l_return_status
16979                                              ,x_msg_count                    => l_msg_count
16980                                              ,x_msg_data                     => l_msg_data
16981                                         );
16982                                    EXCEPTION
16983                                         WHEN OTHERS THEN
16984                                         fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_PUB',
16985                                                                p_procedure_name => 'PROCESS_TASK_STRUCTURE_BULK',
16986                                                                p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
16987                                         raise  fnd_api.g_exc_error;
16988                                    END;
16989 
16990                                    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16991                                         x_msg_count := FND_MSG_PUB.count_msg;
16992                                         raise fnd_api.g_exc_error;
16993                                    END IF;
16994                               END IF; -- l_del_task_ver_ids.exists(1) THEN
16995                               l_del_task_ver_ids.delete;
16996                          end if;
16997                          l_del_task_ver_ids.extend(1);
16998                          l_del_task_ver_ids(l_del_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
16999                 END IF;
17000                --rtarway, 4099429, end add
17001         END LOOP;
17002     END IF; -- nvl(p_tasks_in_tbl.LAST,0) > 0 THEN
17003     -- 4198962 Moved call of add_planning_transactions before population of l_del_task_ver_ids
17004 
17005     IF l_del_task_ver_ids.exists(1) THEN
17006         BEGIN
17007                     pa_fp_planning_transaction_pub.delete_planning_transactions(
17008                 p_context                       => 'WORKPLAN'
17009                 ,p_task_or_res                  => 'TASKS'
17010                 ,p_element_version_id_tbl       => l_del_task_ver_ids
17011                 ,x_return_status                => l_return_status
17012                 ,x_msg_count                    => l_msg_count
17013                 ,x_msg_data                     => l_msg_data
17014             );
17015         EXCEPTION
17016             WHEN OTHERS THEN
17017             fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_PUB',
17018                                       p_procedure_name => 'PROCESS_TASK_STRUCTURE_BULK',
17019                                       p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
17020             raise  fnd_api.g_exc_error;
17021         END;
17022 
17023         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17024             x_msg_count := FND_MSG_PUB.count_msg;
17025             raise fnd_api.g_exc_error;
17026         END IF;
17027     END IF; -- l_del_task_ver_ids.exists(1) THEN
17028    END IF; --((p_structure_type = 'WORKPLAN' AND p_is_wp_separate_from_fn = 'Y') OR p_is_wp_separate_from_fn = 'N' )
17029 --Amit : Bug 3964548 End
17030 
17031 
17032 
17033 -- PA L Changes 3010538
17034 
17035 --IF (p_structure_version_id IS NOT NULL) then /* create project case */
17036 --
17037 --/* Bug # 3420093 - Adding Progress Management modifications to create_project flow. */
17038 ----BUG 3835474 , rtarway, Added OR condition for shared structures
17039 --    if (p_structure_type = 'WORKPLAN' OR p_is_wp_separate_from_fn = 'N' ) then
17040 --
17041 --            --Bug3802469, rtarway, This loop will not be successfull if p_tasks_in_tbl is empty.
17042 --            --Check should be put before this loop to check if p_tasks_in_tbl is empty
17043 --            if ( p_tasks_in_tbl IS NOT NULL AND p_tasks_in_tbl.count > 0)
17044 --            then
17045 --                 for l_i in p_tasks_in_tbl.first .. p_tasks_in_tbl.last
17046 --                 loop
17047 --                     if (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(px_tasks_out_tbl(l_i).task_version_id) = 'Y') then
17048 --                          l_add_task_ver_ids.extend(1);
17049 --                          l_add_planned_effort.extend(1);
17050 --                          l_add_start_date.extend(1);
17051 --                          l_add_end_date.extend(1);
17052 --
17053 --                          l_add_task_ver_ids(l_add_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
17054 --                          l_add_planned_effort(l_add_planned_effort.count):= p_tasks_in_tbl(l_i).planned_effort;
17055 --                          l_add_start_date(l_add_start_date.count):= p_tasks_in_tbl(l_i).actual_start_date;
17056 --                          l_add_end_date(l_add_end_date.count):= p_tasks_in_tbl(l_i).actual_finish_date;
17057 --                   else
17058 --                          l_del_task_ver_ids.extend(1);
17059 --
17060 --                          l_del_task_ver_ids(l_del_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
17061 --                     end if;
17062 --                 end loop;
17063 --            end if;--Bug3802469, rtarway
17064 --    end if;
17065 --
17066 --    -- Calling pa_task_pub1.call_add_planning_txns for lowest level tasks.
17067 --
17068 --
17069 --    begin
17070 --            --BUG 3802469, rtarway , if the tasks table is empty, l_add_task_ver_ids will not be populated.
17071 --            --Check needed before calling call_add_planning_txns, to see if l_add_task_ver_ids is empty
17072 --            if (  l_add_task_ver_ids IS NOT NULL AND l_add_task_ver_ids.count > 0)
17073 --            then
17074 --                 pa_task_pub1.call_add_planning_txns(
17075 --                 p_tasks_ver_ids                  => l_add_task_ver_ids,
17076 --                 p_planned_effort                 => l_add_planned_effort,
17077 --                 p_project_id                     => p_project_id,
17078 --                 p_structure_version_id           => l_structure_version_id,  --replace p_structure_version_id, bug 3838186
17079 --                 p_start_date                     => l_add_start_date,
17080 --                 p_end_date                       => l_add_end_date,
17081 --                 p_pm_product_code                => p_pm_product_code,   --bug 3811243
17082 --                 x_return_status                  => l_return_status,
17083 --                 x_msg_count                      => l_msg_count,
17084 --                 x_msg_data                       => l_msg_data
17085 --                 );
17086 --            else
17087 --                null;--BUG 3802469, rtarway
17088 --            end if;
17089 --    exception
17090 --            when others then
17091 --                fnd_msg_pub.add_exc_msg(p_pkg_name       => 'pa_project_pub',
17092 --                                p_procedure_name => 'CREATE_PROJECT',
17093 --                                        p_error_text     => substrb('PA_TASK_PUB1.CALL_ADD_PLANNING_TXNS:'||sqlerrm,1,240));
17094 --            raise fnd_api.g_exc_error;
17095 --        end;
17096 --
17097 --    -- Calling pa_fp_planning_transaction_pub.delete_planning_transactions for higher level tasks.
17098 --
17099 --       begin
17100 --           --BUG 3802469, rtarway , if the tasks table is empty, l_del_task_ver_ids will not be populated.
17101 --           --Check needed before calling delete_planning_transactions, to see if l_del_task_ver_ids is empty
17102 --           if ( l_del_task_ver_ids IS NOT NULL AND l_del_task_ver_ids.count > 0)
17103 --           then
17104 --                pa_fp_planning_transaction_pub.delete_planning_transactions
17105 --                (
17106 --                 p_context                      => 'WORKPLAN'
17107 --                ,p_task_or_res                  => 'TASKS'
17108 --                ,p_element_version_id_tbl       => l_del_task_ver_ids
17109 --                ,x_return_status                => l_return_status
17110 --                ,x_msg_count                    => l_msg_count
17111 --                ,x_msg_data                     => l_msg_data
17112 --               );
17113 --          else
17114 --            null;
17115 --          end if;
17116 --       exception
17117 --           when others then
17118 --                fnd_msg_pub.add_exc_msg(p_pkg_name       => 'pa_project_pub',
17119 --                                        p_procedure_name => 'CREATE_PROJECT',
17120 --                                        p_error_text     => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.DELETE_PLANNING_TRANSACTIONS:'||SQLERRM,1,240));
17121 --           raise fnd_api.g_exc_error;
17122 --       end;
17123 --
17124 --/* Bug # 3420093 - Adding Progress Management modifications to create_project flow. */
17125 --
17126 --else /* update project case */
17127 --
17128 --/* Bug # 3420093 - Adding Progress Management modifications to update_project flow. */
17129 --BUG 3835474 , rtarway, Added OR condition for shared structures
17130 --    if (p_structure_type = 'WORKPLAN' OR p_is_wp_separate_from_fn = 'N' ) then
17131 --
17132 --            --BUG3802469, rtarway, comment only, no code change
17133 --            --if the str version being updated has no tasks, this loop will not run and l_add_task_ver_ids and
17134 --            --l_del_task_ver_ids will not be populated. before passing these tables to add_planning_transaction
17135 --            --or delete_planning_transaction, checks should be made
17136 --            for l_task_cur_rec in l_task_cur(p_project_id)
17137 --            loop
17138 --                if (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(l_task_cur_rec.element_version_id) = 'Y') then
17139 --                l_add_task_ver_ids.extend(1);
17140 --                l_add_planned_effort.extend(1);
17141 --                l_add_start_date.extend(1);
17142 --                l_add_end_date.extend(1);
17143 --
17144 --                l_add_task_ver_ids(l_add_task_ver_ids.count):= l_task_cur_rec.element_version_id;
17145 --                l_add_planned_effort(l_add_planned_effort.count):= l_task_cur_rec.planned_effort;
17146 --                                l_add_start_date(l_add_start_date.count):= l_task_cur_rec.actual_start_date;
17147 --                                l_add_end_date(l_add_end_date.count):= l_task_cur_rec.actual_finish_date;
17148 --            else
17149 --                                l_del_task_ver_ids.extend(1);
17150 --
17151 --                                l_del_task_ver_ids(l_del_task_ver_ids.count):= l_task_cur_rec.element_version_id;
17152 --            end if;
17153 --        end loop;
17154 --    end if;
17155 --
17156 --    -- Calling pa_task_pub1.call_add_planning_txns for lowest level tasks.
17157 --
17158 --    begin
17159 --            --BUG3802469, rtarway, see comments above
17160 --            if ( l_add_task_ver_ids IS NOT NULL and l_add_task_ver_ids.count > 0)
17161 --            then
17162 --                 pa_task_pub1.call_add_planning_txns(
17163 --                 p_tasks_ver_ids                  => l_add_task_ver_ids,
17164 --                 p_planned_effort                 => l_add_planned_effort,
17165 --                 p_project_id                     => p_project_id,
17166 --                 p_structure_version_id           => l_structure_version_id,  --replace p_structure_version_id, bug 3838186
17167 --                 p_start_date                     => l_add_start_date,
17168 --                 p_end_date                       => l_add_end_date,
17169 --                 p_pm_product_code                => p_pm_product_code,   --bug 3811243
17170 --                 x_return_status                  => l_return_status,
17171 --                 x_msg_count                      => l_msg_count,
17172 --                 x_msg_data                       => l_msg_data
17173 --                 );
17174 --            else
17175 --               null;
17176 --            end if;
17177 --    exception
17178 --            when others then
17179 --                fnd_msg_pub.add_exc_msg(p_pkg_name       => 'pa_project_pub',
17180 --                                p_procedure_name => 'CREATE_PROJECT',
17181 --                                        p_error_text     => substrb('PA_TASK_PUB1.CALL_ADD_PLANNING_TXNS:'||sqlerrm,1,240));
17182 --            raise fnd_api.g_exc_error;
17183 --        end;
17184 --
17185 --    -- Calling pa_fp_planning_transaction_pub.delete_planning_transactions for higher level tasks.
17186 --
17187 --       begin
17188 --           --BUG3802469, rtarway, see comments above
17189 --           if ( l_del_task_ver_ids IS NOT NULL and l_del_task_ver_ids.count > 0)
17190 --           then
17191 --                pa_fp_planning_transaction_pub.delete_planning_transactions
17192 --                (
17193 --                 p_context                      => 'WORKPLAN'
17194 --                ,p_task_or_res                  => 'TASKS'
17195 --                ,p_element_version_id_tbl       => l_del_task_ver_ids
17196 --                ,x_return_status                => l_return_status
17197 --                ,x_msg_count                    => l_msg_count
17198 --                ,x_msg_data                     => l_msg_data
17199 --               );
17200 --          else
17201 --               null;
17202 --          end if;
17203 --       exception
17204 --           when others then
17205 --                fnd_msg_pub.add_exc_msg(p_pkg_name       => 'pa_project_pub',
17206 --                                        p_procedure_name => 'CREATE_PROJECT',
17207 --                                        p_error_text     => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.DELETE_PLANNING_TRANSACTIONS:'||SQLERRM,1,240));
17208 --           raise fnd_api.g_exc_error;
17209 --       end;
17210 
17211 --/* Bug # 3420093 - Adding Progress Management modifications to update_project flow. */
17212 
17213 --end if;
17214 
17215      IF l_debug_mode = 'Y' THEN
17216           pa_debug.g_err_stage:= 'Exiting PROCESS_TASK_STRUCTURE_BULK';
17217           pa_debug.write(l_module_name,pa_debug.g_err_stage,
17218                                    l_debug_level2);
17219           pa_debug.reset_curr_function;
17220 
17221      END IF;
17222 
17223 EXCEPTION
17224 
17225 WHEN Invalid_Arg_Exc_WP THEN
17226 
17227      IF l_debug_mode = 'Y' THEN
17228           pa_debug.g_err_stage:= 'In PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc exception block';
17229           pa_debug.write(l_module_name,pa_debug.g_err_stage,
17230                                    l_debug_level4);
17231      END IF;
17232 
17233      x_return_status := FND_API.G_RET_STS_ERROR;
17234      l_msg_count := FND_MSG_PUB.count_msg;
17235 
17236 --     IF cur_auto_pub_flag%ISOPEN THEN
17237 --          CLOSE cur_auto_pub_flag;
17238 --     END IF;
17239 
17240 
17241      IF get_structure%ISOPEN THEN
17242           CLOSE get_structure;
17243      END IF;
17244 
17245      IF l_amg_project_csr%ISOPEN THEN
17246           CLOSE l_amg_project_csr;
17247      END IF;
17248 
17249      IF cur_pa_tasks%ISOPEN THEN
17250           CLOSE cur_pa_tasks;
17251      END IF;
17252 
17253      IF cur_template_flag%ISOPEN THEN
17254           CLOSE cur_template_flag;
17255      END IF;
17256 
17257      IF cur_rec_ver_num%ISOPEN THEN
17258           CLOSE cur_rec_ver_num;
17259      END IF;
17260 
17261      IF cur_pa_task_ver%ISOPEN THEN
17262           CLOSE cur_pa_task_ver;
17263      END IF;
17264 
17265      IF cur_parent_object_rel%ISOPEN THEN
17266           CLOSE cur_parent_object_rel;
17267      END IF;
17268 
17269      IF cur_ver_sch_attr_rec%ISOPEN THEN
17270           CLOSE cur_ver_sch_attr_rec;
17271      END IF;
17272 
17273      IF cur_task_type_id%ISOPEN THEN
17274           CLOSE cur_task_type_id;
17275      END IF;
17276 
17277      IF cur_elem_ver_to_task_id%ISOPEN THEN
17278           CLOSE cur_elem_ver_to_task_id;
17279      END IF;
17280 
17281      IF cur_all_task_ver_id%ISOPEN THEN
17282           CLOSE cur_all_task_ver_id;
17283      END IF;
17284 
17285      IF l_msg_count = 1 and x_msg_data IS NULL THEN
17286           PA_INTERFACE_UTILS_PUB.get_messages
17287               (p_encoded        => FND_API.G_TRUE
17288               ,p_msg_index      => 1
17289               ,p_msg_count      => l_msg_count
17290               ,p_msg_data       => l_msg_data
17291               ,p_data           => l_data
17292               ,p_msg_index_out  => l_msg_index_out);
17293           x_msg_data := l_data;
17294           x_msg_count := l_msg_count;
17295      ELSE
17296           x_msg_count := l_msg_count;
17297      END IF;
17298 
17299      IF l_debug_mode = 'Y' THEN
17300           pa_debug.reset_curr_function;
17301      END IF;
17302 
17303      IF p_commit = FND_API.G_TRUE THEN
17304           rollback to process_task_struc;
17305      END IF;
17306 
17307      RETURN;
17308 
17309 WHEN others THEN
17310 
17311      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17312      x_msg_count     := 1;
17313      x_msg_data      := SQLERRM;
17314 
17315 --     IF cur_auto_pub_flag%ISOPEN THEN
17316 --          CLOSE cur_auto_pub_flag;
17317 --     END IF;
17318 
17319 
17320      IF get_structure%ISOPEN THEN
17321           CLOSE get_structure;
17322      END IF;
17323 
17324      IF l_amg_project_csr%ISOPEN THEN
17325           CLOSE l_amg_project_csr;
17326      END IF;
17327 
17328      IF cur_pa_tasks%ISOPEN THEN
17329           CLOSE cur_pa_tasks;
17330      END IF;
17331 
17332      IF cur_template_flag%ISOPEN THEN
17333           CLOSE cur_template_flag;
17334      END IF;
17335 
17336      IF cur_rec_ver_num%ISOPEN THEN
17337           CLOSE cur_rec_ver_num;
17338      END IF;
17339 
17340      IF cur_pa_task_ver%ISOPEN THEN
17341           CLOSE cur_pa_task_ver;
17342      END IF;
17343 
17344      IF cur_parent_object_rel%ISOPEN THEN
17345           CLOSE cur_parent_object_rel;
17346      END IF;
17347 
17348      IF cur_ver_sch_attr_rec%ISOPEN THEN
17349           CLOSE cur_ver_sch_attr_rec;
17350      END IF;
17351 
17352      IF cur_task_type_id%ISOPEN THEN
17353           CLOSE cur_task_type_id;
17354      END IF;
17355 
17356      IF cur_elem_ver_to_task_id%ISOPEN THEN
17357           CLOSE cur_elem_ver_to_task_id;
17358      END IF;
17359 
17360      IF cur_all_task_ver_id%ISOPEN THEN
17361           CLOSE cur_all_task_ver_id;
17362      END IF;
17363 
17364      FND_MSG_PUB.add_exc_msg
17365           ( p_pkg_name        => 'PA_PROJ_TASK_STRUC_PUB'
17366            ,p_procedure_name  => 'PROCESS_TASK_STRUCTURE_BULK'
17367            ,p_error_text      => x_msg_data
17368           );
17369 
17370      IF l_debug_mode = 'Y' THEN
17371           pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
17372           pa_debug.write(l_module_name,pa_debug.g_err_stage,
17373                               l_debug_level6);
17374            pa_debug.reset_curr_function;
17375 
17376      END IF;
17377 
17378      IF p_commit = FND_API.G_TRUE THEN
17379           rollback to process_task_struc;
17380      END IF;
17381 
17382 --     rollback to process_task_struc;  Commented during UT.
17383      RAISE;
17384 END PROCESS_TASK_STRUCTURE_BULK;
17385 
17386 
17387 --Bug 2947492  ( delete )
17388 PROCEDURE delete_fin_plan_from_task(
17389     p_task_id                                   NUMBER
17390    ,p_project_id                                NUMBER
17391    ,p_calling_module                            VARCHAR2  := 'FORMS'
17392    ,x_return_status                   OUT       NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17393    ,x_msg_count                       OUT       NOCOPY NUMBER --File.Sql.39 bug 4440895
17394    ,x_msg_data                        OUT       NOCOPY VARCHAR2) IS --File.Sql.39 bug 4440895
17395 
17396 
17397 l_plannable_tasks_tbl        PA_FP_ELEMENTS_PUB.l_impacted_task_in_tbl_typ;
17398 l_parent_task_id             NUMBER;
17399 l_top_task_id                NUMBER;
17400 l_return_status              VARCHAR2(1);
17401 l_msg_data                   VARCHAR2(4000);
17402 l_msg_count                  NUMBER;
17403 l_msg_index_out              NUMBER;
17404 l_data                       VARCHAR2(4000);
17405   API_ERROR            EXCEPTION;
17406 
17407 CURSOR get_parent_task_id IS
17408     SELECT parent_task_id, top_task_id
17409       FROM pa_tasks
17410      WHERE project_id = p_project_id
17411        AND task_id = p_task_id;
17412 
17413 BEGIN
17414 
17415      SAVEPOINT plan_tasks;
17416 
17417      OPEN get_parent_task_id;
17418      FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id;
17419      CLOSE get_parent_task_id;
17420 
17421      l_plannable_tasks_tbl(1).impacted_task_id   := p_task_id;
17422      l_plannable_tasks_tbl(1).action             := 'DELETE';
17423      l_plannable_tasks_tbl(1).old_parent_task_id := l_parent_task_id;
17424      l_plannable_tasks_tbl(1).top_task_id        := l_top_task_id;
17425 
17426    /*
17427      -- Commented out as no more using for doosan customer
17428      -- commented by skannoji
17429      -- commenting out as per mail from venkatesh dated 22 jan 04 -- maansari
17430      PA_FP_ELEMENTS_PUB.MAINTAIN_PLANNABLE_TASKS(
17431                     p_project_id         => p_project_id
17432                   , p_impacted_tasks_tbl => l_plannable_tasks_tbl
17433                   , x_return_status      => l_return_status
17434                   , x_msg_data           => l_msg_data
17435                   , x_msg_count          => l_msg_count
17436                 );
17437 
17438        l_msg_count := FND_MSG_PUB.count_msg;
17439        if l_msg_count > 0 then
17440           x_msg_count := l_msg_count;
17441          if x_msg_count = 1 then
17442             pa_interface_utils_pub.get_messages
17443              (p_encoded        => FND_API.G_TRUE,
17444               p_msg_index      => 1,
17445               p_msg_count      => l_msg_count,
17446               p_msg_data       => l_msg_data,
17447               p_data           => l_data,
17448               p_msg_index_out  => l_msg_index_out);
17449             x_msg_data := l_data;
17450          end if;
17451          raise API_ERROR;
17452       end if;
17453       */
17454 
17455      x_return_status := FND_API.G_RET_STS_SUCCESS;
17456 EXCEPTION
17457 WHEN API_ERROR THEN
17458   x_return_status := FND_API.G_RET_STS_ERROR;
17459   rollback to plan_tasks;
17460 WHEN OTHERS THEN
17461   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17462   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
17463                           p_procedure_name => 'delete_fin_plan_from_task',
17464                           p_error_text     => SUBSTRB(SQLERRM,1,240));
17465   rollback to plan_tasks;
17466   raise;
17467 
17468 END delete_fin_plan_from_task;
17469 --End Bug 2947492
17470 
17471 /*==================================================================
17472    This is the wrapper API that decides whether to invoke the concurrent
17473    process wrapper or the online process to process the WBS updates. If
17474    the profile is set to Online, the process is done online always.
17475    Otherwise when the profile is standard the processing is done online/
17476    concurrent based on the number of tasks in the structure version and
17477    the threshold profile.
17478    Bug 3010538 : New API for the Task Weighting Enhancement.
17479  ==================================================================*/
17480 
17481 PROCEDURE PROCESS_WBS_UPDATES_WRP
17482    (  p_api_version_number    IN   NUMBER    := 1.0
17483      ,p_commit                IN   VARCHAR2  := FND_API.G_FALSE
17484      ,p_init_msg_list         IN   VARCHAR2  := FND_API.G_FALSE
17485      ,p_calling_context       IN   VARCHAR2  := 'UPDATE'
17486      ,p_project_id            IN   pa_projects_all.project_id%TYPE
17487      ,p_structure_version_id  IN   pa_proj_element_versions.element_version_id%TYPE
17488      ,p_pub_struc_ver_id      IN   NUMBER    := NULL
17489      ,p_pub_prog_flag         IN   VARCHAR2  := 'Y' --bug 4019845
17490      ,x_return_status         OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17491      ,x_msg_count             OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
17492      ,x_msg_data              OUT  NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
17493 AS
17494 
17495 -- Cursors used in this Procedure.
17496 
17497 -- This cursor obtains the count of the task versions in the structure version.
17498 CURSOR cur_task_count(c_project_id pa_projects_all.project_id%TYPE,
17499                       c_structure_version_id pa_proj_element_versions.element_version_id%TYPE)
17500 IS
17501 Select count(element_version_id)
17502 From pa_proj_element_versions
17503 Where project_id = c_project_id
17504 And object_type = 'PA_TASKS'
17505 And parent_structure_version_id = c_structure_version_id;
17506 
17507 --Bug# 5973460
17508 CURSOR c_get_process_code(c_structure_version_id NUMBER) IS
17509 SELECT process_code
17510 FROM pa_proj_elem_ver_structure
17511 WHERE element_version_id = c_structure_version_id;
17512 --Bug# 5973460
17513 
17514 l_msg_count                     NUMBER := 0;
17515 l_data                          VARCHAR2(2000);
17516 l_msg_data                      VARCHAR2(2000);
17517 l_msg_index_out                 NUMBER;
17518 l_debug_mode                    VARCHAR2(1);
17519 
17520 l_debug_level2                   CONSTANT NUMBER := 2;
17521 l_debug_level3                   CONSTANT NUMBER := 3;
17522 l_debug_level4                   CONSTANT NUMBER := 4;
17523 l_debug_level5                   CONSTANT NUMBER := 5;
17524 
17525 l_process_code  pa_proj_elem_ver_structure.process_code%TYPE; --Bug# 5973460
17526 
17527 BEGIN
17528 
17529      --Bug# 5973460
17530      OPEN c_get_process_code(p_structure_version_id);
17531      FETCH c_get_process_code INTO l_process_code;
17532      CLOSE c_get_process_code;
17533 
17534      IF p_calling_context = 'UPDATE' AND l_process_code = 'PUE'
17535      THEN
17536         PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
17537                              ,p_msg_name       => 'PA_PS_PUBLISH_ERROR');
17538 
17539          RAISE  Invalid_Arg_Exc_WP;
17540      END IF;
17541      --Bug# 5973460
17542 
17543      IF p_init_msg_list = FND_API.G_TRUE THEN
17544           FND_MSG_PUB.initialize;
17545      END IF;
17546 
17547      x_msg_count := 0;
17548      x_return_status := FND_API.G_RET_STS_SUCCESS;
17549      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
17550 
17551      IF l_debug_mode = 'Y' THEN
17552           pa_debug.g_err_stage:= 'Entering PROCESS_WBS_UPDATES_WRP';
17553           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
17554                                    l_debug_level3);
17555 
17556           pa_debug.set_curr_function( p_function   => 'PROCESS_WBS_UPDATES_WRP',
17557                                       p_debug_mode => l_debug_mode );
17558      END IF;
17559 
17560      -- Check for business rules violations
17561      IF l_debug_mode = 'Y' THEN
17562           pa_debug.g_err_stage:= 'Validating input parameters';
17563           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
17564                                      l_debug_level3);
17565 
17566           pa_debug.g_err_stage:= 'p_calling_context = '|| p_calling_context;
17567           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
17568 
17569           pa_debug.g_err_stage:= 'p_project_id = '|| p_project_id;
17570           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
17571 
17572           pa_debug.g_err_stage:= 'p_structure_version_id = '|| p_structure_version_id;
17573           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
17574 
17575      END IF;
17576 
17577      -- Throw an error if any of the mandatory parameter is NULL.
17578      IF (p_project_id IS NULL) OR
17579         (p_structure_version_id IS NULL)
17580      THEN
17581           PA_UTILS.ADD_MESSAGE
17582                 (p_app_short_name => 'PA',
17583                  p_msg_name       => 'PA_INV_PARAM_PASSED');
17584           RAISE Invalid_Arg_Exc_WP;
17585      END IF;
17586 
17587      DECLARE
17588           l_task_count        NUMBER;
17589           l_update_option     VARCHAR2(30);
17590           l_calling_context   VARCHAR2(30);
17591      BEGIN
17592           open cur_task_count(p_project_id,p_structure_version_id);
17593           fetch cur_task_count into l_task_count;
17594           close cur_task_count;
17595           l_update_option := pa_project_structure_utils.get_process_wbs_updates_option(p_task_count => l_task_count,
17596                                               p_project_id => p_project_id    ---bug 4370533
17597                                                   );
17598 
17599           IF p_calling_context = 'PUBLISH' THEN
17600             IF l_update_option = 'ONLINE' THEN
17601               l_calling_context := 'ONLINE_PUBLISH';
17602             ELSE
17603               l_calling_context := 'CONC_PUBLISH';
17604             END IF;
17605           ELSIF p_calling_context = 'UPDATE' THEN
17606             IF l_update_option = 'ONLINE' THEN
17607               l_calling_context := 'ONLINE_UPDATE';
17608             ELSE
17609               l_calling_context := 'CONC_UPDATE';
17610             END IF;
17611         -- 4392189 : Added code for APPLY_PROGRESS
17612         -- This is done so that in process_wbs_updates
17613         -- we can determine the online or deferred mode
17614           ELSIF p_calling_context = 'APPLY_PROGRESS' THEN
17615             IF l_update_option = 'ONLINE' THEN
17616               l_calling_context := 'ONLINE_APPLY_PROGRESS';
17617             ELSE
17618               l_calling_context := 'CONC_APPLY_PROGRESS';
17619             END IF;
17620           ELSIF p_calling_context = 'ASGMT_PLAN_CHANGE' THEN  ---bug 4492493
17621             l_calling_context := p_calling_context;
17622             l_update_option := 'CONCURRENT'; ---should always launch conc pgm
17623           ELSE
17624             l_calling_context := p_calling_context;
17625           END IF;
17626 
17627           -- TWUT
17628           IF l_debug_mode = 'Y' THEN
17629              pa_debug.g_err_stage := 'Update option is '||l_update_option;
17630              pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
17631           END IF;
17632 
17633           IF l_update_option = 'ONLINE' THEN
17634                pa_proj_task_struc_pub.process_wbs_updates(
17635                      p_commit                => p_commit
17636                     ,p_project_id            => p_project_id
17637                     ,p_structure_version_id  => p_structure_version_id
17638                     ,p_pub_struc_ver_id      => p_pub_struc_ver_id
17639                     ,p_pub_prog_flag         => p_pub_prog_flag --bug 4019845
17640                     ,p_calling_context       => l_calling_context
17641                     ,x_return_status         => x_return_status
17642                     ,x_msg_count             => x_msg_count
17643                     ,x_msg_data              => x_msg_data
17644                );
17645                IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17646                     IF l_debug_mode = 'Y' THEN
17647                        pa_debug.g_err_stage := 'Error calling online wbs update process ';
17648                        pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
17649                     END IF;
17650                     Raise Invalid_Arg_Exc_WP;
17651                END IF;
17652           ELSIF l_update_option = 'CONCURRENT' THEN
17653                pa_proj_task_struc_pub.process_wbs_updates_conc_wrp(
17654                      p_commit                => p_commit
17655                     ,p_project_id            => p_project_id
17656                     ,p_structure_version_id  => p_structure_version_id
17657                     ,p_pub_struc_ver_id      => p_pub_struc_ver_id
17658                     ,p_pub_prog_flag         => p_pub_prog_flag --bug 4019845
17659                     ,p_calling_context       => l_calling_context
17660                     ,x_return_status         => x_return_status
17661                     ,x_msg_count             => x_msg_count
17662                     ,x_msg_data              => x_msg_data
17663                );
17664                IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17665                     IF l_debug_mode = 'Y' THEN
17666                        pa_debug.g_err_stage := 'Error calling concurrent wbs update process ';
17667                        pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
17668                     END IF;
17669                     Raise Invalid_Arg_Exc_WP;
17670                END IF;
17671           END IF;
17672      END;
17673 
17674      IF l_debug_mode = 'Y' THEN
17675           pa_debug.g_err_stage:= 'Exiting PROCESS_WBS_UPDATES_WRP';
17676           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
17677                                    l_debug_level3);
17678           pa_debug.reset_curr_function;
17679      END IF;
17680 EXCEPTION
17681 
17682 WHEN Invalid_Arg_Exc_WP THEN
17683 
17684      x_return_status := FND_API.G_RET_STS_ERROR;
17685      l_msg_count := FND_MSG_PUB.count_msg;
17686 
17687      IF cur_task_count%ISOPEN THEN
17688           CLOSE cur_task_count;
17689      END IF;
17690 
17691      IF l_msg_count = 1 and x_msg_data IS NULL THEN
17692           PA_INTERFACE_UTILS_PUB.get_messages
17693               (p_encoded        => FND_API.G_TRUE
17694               ,p_msg_index      => 1
17695               ,p_msg_count      => l_msg_count
17696               ,p_msg_data       => l_msg_data
17697               ,p_data           => l_data
17698               ,p_msg_index_out  => l_msg_index_out);
17699           x_msg_data := l_data;
17700           x_msg_count := l_msg_count;
17701      ELSE
17702           x_msg_count := l_msg_count;
17703      END IF;
17704      IF l_debug_mode = 'Y' THEN
17705           pa_debug.reset_curr_function;
17706      END IF;
17707 
17708      RETURN;
17709 
17710 WHEN others THEN
17711 
17712      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17713      x_msg_count     := 1;
17714      x_msg_data      := SQLERRM;
17715 
17716      IF cur_task_count%ISOPEN THEN
17717           CLOSE cur_task_count;
17718      END IF;
17719 
17720      FND_MSG_PUB.add_exc_msg
17721                    ( p_pkg_name        => 'PA_PROJ_TASK_STRUC_PUB'
17722                     ,p_procedure_name  => 'PROCESS_WBS_UPDATES_WRP'
17723                     ,p_error_text      => x_msg_data);
17724 
17725      IF l_debug_mode = 'Y' THEN
17726           pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
17727           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
17728                               l_debug_level5);
17729           pa_debug.reset_curr_function;
17730      END IF;
17731      RAISE;
17732 END PROCESS_WBS_UPDATES_WRP;
17733 
17734 /*==================================================================
17735    This is a wrapper API that will launch the concurrent process that
17736    will in turn call the task weightage calculation and the plannable
17737    tasks APIs.
17738    Bug 3010538 : New API for the Task Weighting Enhancement.
17739  ==================================================================*/
17740 
17741 PROCEDURE PROCESS_WBS_UPDATES_CONC_WRP
17742    (  p_api_version_number    IN   NUMBER    := 1.0
17743      ,p_commit                IN   VARCHAR2  := FND_API.G_FALSE
17744      ,p_init_msg_list         IN   VARCHAR2  := FND_API.G_FALSE
17745      ,p_calling_context       IN   VARCHAR2  := 'UPDATE'
17746      ,p_project_id            IN   pa_projects_all.project_id%TYPE
17747      ,p_structure_version_id  IN   pa_proj_element_versions.element_version_id%TYPE
17748      ,p_pub_struc_ver_id      IN   NUMBER    := NULL
17749      ,p_pub_prog_flag         IN   VARCHAR2  := 'Y' --bug 4019845
17750      ,x_return_status         OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17751      ,x_msg_count             OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
17752      ,x_msg_data              OUT  NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
17753 AS
17754 
17755 -- Cursors used.
17756 
17757 -- This cursor is used to decide if the structure version corresponds to a particular
17758 -- Structure type. Depending on this the plannable tasks api and the task weightage calculation
17759 -- api will be called.
17760 Cursor cur_structure_type(c_project_id pa_projects_all.project_id%TYPE,
17761                           c_structure_version_id pa_proj_element_versions.element_version_id%TYPE,
17762                           c_structure_type pa_structure_types.structure_type%TYPE)
17763 IS
17764 select 'Y'
17765 from   pa_proj_element_versions ver,
17766        pa_proj_structure_types pst,
17767        pa_structure_types st
17768 where  ver.element_version_id   = c_structure_version_id
17769 and    ver.project_id           = c_project_id
17770 and    pst.proj_element_id      = ver.proj_element_id
17771 and    pst.structure_type_id    = st.structure_type_id
17772 and    st.structure_type        = c_structure_type;
17773 
17774 l_update_wbs_flag               pa_proj_elem_ver_structure.process_update_wbs_flag%TYPE;
17775 l_request_id                    pa_proj_elem_ver_structure.conc_request_id%TYPE;
17776 l_structure_type_flag           VARCHAR2(1);
17777 --Bug 3053920.
17778 l_task_weighting_basis          pa_proj_progress_attr.task_weight_basis_code%TYPE;
17779 
17780 l_msg_count                     NUMBER := 0;
17781 l_data                          VARCHAR2(2000);
17782 l_msg_data                      VARCHAR2(2000);
17783 l_msg_index_out                 NUMBER;
17784 l_debug_mode                    VARCHAR2(1);
17785 
17786 l_debug_level2                   CONSTANT NUMBER := 2;
17787 l_debug_level3                   CONSTANT NUMBER := 3;
17788 l_debug_level4                   CONSTANT NUMBER := 4;
17789 l_debug_level5                   CONSTANT NUMBER := 5;
17790 
17791 -- Begin fix for Bug # 4373055.
17792 
17793 l_ret_status    VARCHAR2(1);
17794 l_calling_context   VARCHAR2(30); -- Bug 4392189
17795 
17796 -- End fix for Bug # 4373055.
17797 
17798 -- Bug 4589289 : Begin
17799 CURSOR c_get_process_code(c_structure_version_id NUMBER) IS
17800 SELECT process_code
17801 FROM pa_proj_elem_ver_structure
17802 WHERE element_version_id = c_structure_version_id
17803 and project_id = p_project_id -- Bug # 4868867.
17804 ;
17805 
17806 l_process_code  pa_proj_elem_ver_structure.process_code%TYPE;
17807 l_rerun_flag    VARCHAR2(1):=null;
17808 
17809 -- Bug 4589289 : End
17810 
17811 -- 4683461 For MOAC Changes
17812 
17813 Cursor cur_proj_ou
17814 IS
17815 select org_id
17816 from pa_projects_all
17817 where project_id = p_project_id;
17818 
17819 l_org_id NUMBER;
17820 
17821 -- 4683461 Done
17822 
17823 BEGIN
17824      IF p_init_msg_list = FND_API.G_TRUE THEN
17825           FND_MSG_PUB.initialize;
17826      END IF;
17827 
17828      x_msg_count := 0;
17829      x_return_status := FND_API.G_RET_STS_SUCCESS;
17830      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
17831 
17832      IF l_debug_mode = 'Y' THEN
17833           pa_debug.g_err_stage:= 'Entering PROCESS_WBS_UPDATES_CONC_WRP';
17834           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
17835                                    l_debug_level3);
17836 
17837           pa_debug.set_curr_function( p_function   => 'PROCESS_WBS_UPDATES_CONC_WRP',
17838                                       p_debug_mode => l_debug_mode );
17839      END IF;
17840 
17841      -- Check for business rules violations
17842      IF l_debug_mode = 'Y' THEN
17843           pa_debug.g_err_stage:= 'Validating input parameters';
17844           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
17845                                      l_debug_level3);
17846 
17847           pa_debug.g_err_stage:= 'p_calling_context = '|| p_calling_context;
17848           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
17849 
17850           pa_debug.g_err_stage:= 'p_project_id = '|| p_project_id;
17851           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
17852 
17853           pa_debug.g_err_stage:= 'p_structure_version_id = '|| p_structure_version_id;
17854           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
17855 
17856      END IF;
17857 
17858      -- Throw an error if any of the mandatory parameter is NULL.
17859      IF (p_project_id IS NULL) OR
17860         (p_structure_version_id IS NULL)
17861      THEN
17862           PA_UTILS.ADD_MESSAGE
17863                 (p_app_short_name => 'PA',
17864                  p_msg_name       => 'PA_INV_PARAM_PASSED');
17865           RAISE Invalid_Arg_Exc_WP;
17866      END IF;
17867 
17868 --hsiu: bug 3035902
17869 --commenting because financial planning has partial process and
17870 --the update flag should not be check here.
17871 /*
17872      l_update_wbs_flag := pa_project_structure_utils.GET_UPDATE_WBS_FLAG(p_project_id           => p_project_id,
17873                                                                          p_structure_version_id => p_structure_version_id);
17874      IF l_update_wbs_flag = 'N' THEN
17875           -- No further processing is required for this structure version. Return.
17876           -- TWUT.
17877           IF l_debug_mode = 'Y' THEN
17878                pa_debug.g_err_stage:= 'No updates required for this structure version.';
17879                pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
17880           END IF;
17881           RETURN;
17882      END IF;
17883 */
17884 
17885      -- Bug 3053920. We need not launch the conc process if split structure, structure type is workplan,
17886      -- basis code is MANUAL or flag is N.
17887 
17888      l_update_wbs_flag := pa_project_structure_utils.GET_UPDATE_WBS_FLAG(p_project_id           => p_project_id,
17889                                                                          p_structure_version_id => p_structure_version_id);
17890      l_task_weighting_basis := pa_progress_utils.get_task_weighting_basis(p_project_id => p_project_id);
17891 
17892 
17893      -- See if the structure version being processed is WORKPLAN.
17894      open cur_structure_type(p_project_id,p_structure_version_id,'WORKPLAN');
17895      fetch cur_structure_type into l_structure_type_flag;
17896      close cur_structure_type;
17897      -- 4392189 : Program Reporting Changes - Phase 2
17898      -- For Apply Progress we do not have to check wbs flag
17899      IF (p_calling_context not in ('CONC_APPLY_PROGRESS','ASGMT_PLAN_CHANGE') ---4627294
17900     AND
17901 
17902     -- Begin Bug # 4584710.
17903     /*
17904         PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( p_project_id ) = 'Y' AND
17905         nvl(l_structure_type_flag,'N') = 'Y' AND
17906         ( nvl(l_task_weighting_basis,'-99') = 'MANUAL'
17907     OR
17908     */
17909     -- End Bug # 4584710.
17910           nvl(l_update_wbs_flag,'N') = 'N')
17911      THEN
17912           IF l_debug_mode = 'Y' THEN
17913                -- pa_debug.g_err_stage:= 'split + workplan + MANUAL or flag = N. No further processing required';
17914            pa_debug.g_err_stage:= 'Flag = N. No further processing required';
17915                pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
17916           END IF;
17917           -- No further processing required. Donot launch the conc process.
17918           RETURN;
17919      END IF;
17920 
17921      l_structure_type_flag := NULL;
17922 
17923      -- Bug 4589289 : Begin
17924         OPEN c_get_process_code(p_structure_version_id);
17925         FETCH c_get_process_code INTO l_process_code;
17926         CLOSE c_get_process_code;
17927 
17928         IF l_process_code IN ('WUE','PUE','AUE') THEN
17929                 l_rerun_flag := 'Y';
17930         END IF;
17931      -- Bug 4589289 : End
17932 
17933      -- 4683461 For MOAC Changes, retrieving operating unit and setting it before calling
17934      -- fnd_request.submit_request
17935      open cur_proj_ou;
17936      fetch cur_proj_ou into l_org_id;
17937      close cur_proj_ou;
17938 
17939      fnd_request.set_org_id(l_org_id);
17940 
17941      -- 4683461 end
17942 
17943      -- Submit the request.
17944      l_request_id := fnd_request.submit_request
17945      (
17946            application                =>   'PA',
17947            program                    =>   'PAWPUWBS',
17948            -- description                =>   'PRC: Process Work Breakdown Structure Updates', -- Fix for Bug # 4409337.
17949        description                =>   'PRC: Process Structure Updates', -- Fix for Bug # 4409337.
17950            start_time                 =>   NULL,
17951            sub_request                =>   false,
17952            argument1                  =>   p_calling_context,
17953            argument2                  =>   p_project_id,
17954            argument3                  =>   p_structure_version_id,
17955            argument4                  =>   p_pub_struc_ver_id,
17956            argument5                  =>   p_pub_prog_flag --bug 4019845
17957           ,argument6                  =>   l_rerun_flag --bug 4589289
17958      );
17959 
17960      -- TWUT
17961      IF l_debug_mode = 'Y' THEN
17962           pa_debug.g_err_stage:= 'Request id is '||l_request_id;
17963           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
17964      END IF;
17965 
17966      -- Throw an error if the request could not be submitted.
17967      IF l_request_id = 0 THEN
17968           PA_UTILS.ADD_MESSAGE
17969                 (p_app_short_name => 'PA',
17970                  p_msg_name       => 'PA_WP_TW_CONC_PGM_ERR');
17971           RAISE Invalid_Arg_Exc_WP;
17972      END IF;
17973 
17974      -- Begin fix for Bug # 4373055.
17975 
17976      /*
17977 
17978      -- Update the structure version record with the request id and the status code.
17979      update pa_proj_elem_ver_structure
17980      set process_code = 'WUP',
17981          conc_request_id = l_request_id
17982      where element_version_id = p_structure_version_id
17983      and project_id = p_project_id;
17984 
17985      */
17986      -- Bug 4392189 : Added l_calling_context
17987      IF  p_calling_context IN ('CONC_APPLY_PROGRESS', 'ONLINE_APPLY_PROGRESS') THEN
17988     l_calling_context := 'APPLY_PROGRESS';
17989      ELSE
17990     l_calling_context := p_calling_context;
17991      END IF;
17992 
17993      PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_IN_PROC(
17994      p_project_id              => p_project_id
17995      , p_structure_version_id  => p_structure_version_id
17996      , p_calling_context       => l_calling_context
17997      , p_conc_request_id       => l_request_id
17998      , x_return_status         => l_ret_status);
17999 
18000 
18001      if (p_calling_context = 'CONC_PUBLISH') then
18002 
18003         -- Mark the newly created published structure record also with the process code
18004         -- and request_id.
18005 
18006         PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_IN_PROC(
18007         p_project_id              => p_project_id
18008         , p_structure_version_id  => p_pub_struc_ver_id
18009         , p_calling_context       => l_calling_context
18010         , p_conc_request_id       => l_request_id
18011         , x_return_status         => l_ret_status);
18012 
18013      end if;
18014 
18015      --  End fix for Bug # 4373055.
18016 
18017      -- Call the financial planning API if the structure type is FINANCIAL.
18018      open cur_structure_type(p_project_id,p_structure_version_id,'FINANCIAL');
18019      fetch cur_structure_type into l_structure_type_flag;
18020      close cur_structure_type;
18021 
18022      IF nvl(l_structure_type_flag,'N') = 'Y' THEN
18023 
18024           -- TWUT
18025           IF l_debug_mode = 'Y' THEN
18026              pa_debug.g_err_stage := 'Calling the financial planning API after submitting the concurrent request';
18027              pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18028           END IF;
18029 
18030           pa_fp_refresh_elements_pub.set_process_flag_proj(
18031                 p_project_id             => p_project_id
18032                ,p_request_id             => l_request_id
18033                ,p_process_code           => 'WUP'
18034                ,p_refresh_required_flag  => 'Y'
18035                ,x_return_status          => x_return_status
18036                ,x_msg_count              => x_msg_count
18037                ,x_msg_data               => x_msg_data
18038           );
18039           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18040                IF l_debug_mode = 'Y' THEN
18041                   pa_debug.g_err_stage := 'Error calling the financial planning API after submitting the concurrent request';
18042                   pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
18043                END IF;
18044                Raise Invalid_Arg_Exc_WP;
18045           END IF;
18046      END IF;
18047 
18048      -- Commit in order to complete the request submission.
18049      commit;
18050 
18051      /* DO NOT ADD ANY CODE AFTER THIS COMMIT bug 3163280 */
18052 
18053      IF l_debug_mode = 'Y' THEN
18054           pa_debug.g_err_stage:= 'Exiting PROCESS_WBS_UPDATES_CONC_WRP';
18055           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
18056                                    l_debug_level3);
18057           pa_debug.reset_curr_function;
18058      END IF;
18059 EXCEPTION
18060 
18061 WHEN Invalid_Arg_Exc_WP THEN
18062 
18063      x_return_status := FND_API.G_RET_STS_ERROR;
18064      l_msg_count := FND_MSG_PUB.count_msg;
18065 
18066      IF l_msg_count = 1 and x_msg_data IS NULL THEN
18067           PA_INTERFACE_UTILS_PUB.get_messages
18068               (p_encoded        => FND_API.G_TRUE
18069               ,p_msg_index      => 1
18070               ,p_msg_count      => l_msg_count
18071               ,p_msg_data       => l_msg_data
18072               ,p_data           => l_data
18073               ,p_msg_index_out  => l_msg_index_out);
18074           x_msg_data := l_data;
18075           x_msg_count := l_msg_count;
18076      ELSE
18077           x_msg_count := l_msg_count;
18078      END IF;
18079      IF l_debug_mode = 'Y' THEN
18080           pa_debug.reset_curr_function;
18081      END IF;
18082 
18083      RETURN;
18084 
18085 WHEN others THEN
18086 
18087      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
18088      x_msg_count     := 1;
18089      x_msg_data      := SQLERRM;
18090 
18091      FND_MSG_PUB.add_exc_msg
18092                    ( p_pkg_name        => 'PA_PROJ_TASK_STRUC_PUB'
18093                     ,p_procedure_name  => 'PROCESS_WBS_UPDATES_CONC_WRP'
18094                     ,p_error_text      => x_msg_data);
18095 
18096      IF l_debug_mode = 'Y' THEN
18097           pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
18098           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
18099                               l_debug_level5);
18100           pa_debug.reset_curr_function;
18101      END IF;
18102      RAISE;
18103 END PROCESS_WBS_UPDATES_CONC_WRP;
18104 
18105 
18106 /*==================================================================
18107    This is the procedure that will be registered as the concurrent
18108    program executable with FND.
18109    Bug 3010538 : New API for the Task Weighting Enhancement.
18110  ==================================================================*/
18111 
18112 PROCEDURE PROCESS_WBS_UPDATES_CONC
18113    (  errbuf                  OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
18114      ,retcode                 OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
18115      ,p_calling_context       IN   VARCHAR2   := 'UPDATE'
18116      ,p_project_id            IN   pa_projects_all.project_id%TYPE
18117      ,p_structure_version_id  IN   pa_proj_element_versions.element_version_id%TYPE
18118      ,p_pub_struc_ver_id      IN   NUMBER    := NULL
18119      ,p_pub_prog_flag         IN   VARCHAR2  := 'Y' --bug 4019845
18120      ,p_rerun_flag            IN   VARCHAR2  := null --bug 4589289
18121    )
18122 AS
18123 
18124 l_request_id                    pa_proj_elem_ver_structure.conc_request_id%TYPE;
18125 
18126 l_return_status                 VARCHAR2(1);
18127 l_msg_count                     NUMBER := 0;
18128 l_data                          VARCHAR2(2000);
18129 l_msg_data                      VARCHAR2(2000);
18130 l_msg_index_out                 NUMBER;
18131 l_debug_mode                    VARCHAR2(1);
18132 
18133 l_debug_level2                   CONSTANT NUMBER := 2;
18134 l_debug_level3                   CONSTANT NUMBER := 3;
18135 l_debug_level4                   CONSTANT NUMBER := 4;
18136 l_debug_level5                   CONSTANT NUMBER := 5;
18137 
18138 -- Begin fix for Bug # 4373055.
18139 
18140 l_ret_status    VARCHAR2(1);
18141 l_calling_context VARCHAR2(30);-- Bug 4392189
18142 
18143 -- End fix for Bug # 4373055.
18144 
18145 BEGIN
18146 
18147      savepoint process_wbs_updates_conc;
18148 
18149      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
18150      l_request_id  := FND_GLOBAL.CONC_REQUEST_ID;
18151      retcode       := '0';
18152      errbuf        := NULL;
18153 
18154      IF l_debug_mode = 'Y' THEN
18155           pa_debug.set_curr_function( p_function   => 'PROCESS_WBS_UPDATES_CONC',
18156                                       p_debug_mode => l_debug_mode );
18157           pa_debug.g_err_stage:= 'Entering PROCESS_WBS_UPDATES_CONC';
18158           pa_debug.log_message(p_message=>pa_debug.g_err_stage);
18159      END IF;
18160 
18161      -- Check for business rules violations
18162      IF l_debug_mode = 'Y' THEN
18163           pa_debug.g_err_stage:= 'Validating input parameters';
18164           pa_debug.log_message(p_message=>pa_debug.g_err_stage);
18165 
18166           pa_debug.g_err_stage:= 'p_project_id = '|| p_project_id;
18167           pa_debug.log_message(p_message => pa_debug.g_err_stage);
18168 
18169           pa_debug.g_err_stage:= 'p_structure_version_id = '|| p_structure_version_id;
18170           pa_debug.log_message(p_message => pa_debug.g_err_stage);
18171      END IF;
18172 
18173      IF (p_project_id IS NULL) OR
18174         (p_structure_version_id IS NULL)
18175      THEN
18176           IF l_debug_mode = 'Y' THEN
18177                pa_debug.g_err_stage:= 'Some of the mandatory parameters to this API are NULL';
18178                pa_debug.log_message(p_message => pa_debug.g_err_stage);
18179           END IF;
18180           PA_UTILS.ADD_MESSAGE
18181                 (p_app_short_name => 'PA',
18182                  p_msg_name       => 'PA_INV_PARAM_PASSED');
18183           RAISE Invalid_Arg_Exc_WP;
18184      END IF;
18185 
18186      pa_proj_task_struc_pub.process_wbs_updates(
18187            p_calling_context       => p_calling_context
18188           ,p_project_id            => p_project_id
18189           ,p_structure_version_id  => p_structure_version_id
18190           ,p_pub_struc_ver_id      => p_pub_struc_ver_id
18191           ,p_pub_prog_flag         => p_pub_prog_flag --bug 4019845
18192           ,p_rerun_flag            => p_rerun_flag -- bug 4589289
18193           ,x_return_status         => l_return_status
18194           ,x_msg_count             => l_msg_count
18195           ,x_msg_data              => l_msg_data
18196      );
18197      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18198           IF l_debug_mode = 'Y' THEN
18199              pa_debug.g_err_stage := 'Error calling process wbs updates API ';
18200              pa_debug.log_message(p_message => pa_debug.g_err_stage);
18201           END IF;
18202           Raise Invalid_Arg_Exc_WP;
18203      END IF;
18204 
18205 
18206      -- Update to success if the call was successful.
18207      -- It has been decided to update null as the process_code if the
18208      -- process has completed successfully.
18209      update pa_proj_elem_ver_structure
18210      set process_code = NULL,
18211          conc_request_id = l_request_id
18212      where element_version_id = p_structure_version_id
18213      and project_id = p_project_id;
18214 
18215 
18216      -- Begin fix for Bug # 4373055.
18217 
18218      if (p_calling_context = 'CONC_PUBLISH') then
18219 
18220         -- Mark the newly created published structure record also with the process code
18221         -- as null.
18222 
18223         update pa_proj_elem_ver_structure
18224         set process_code = NULL
18225         , conc_request_id = l_request_id
18226         where element_version_id = p_pub_struc_ver_id
18227         and project_id = p_project_id;
18228 
18229      end if;
18230 
18231      --  End fix for Bug # 4373055.
18232 
18233      -- Commit so that the changes that have been done are commited.
18234      commit;
18235 
18236      IF l_debug_mode = 'Y' THEN
18237           pa_debug.g_err_stage:= 'Exiting PROCESS_WBS_UPDATES_CONC';
18238           pa_debug.log_message(p_message=>pa_debug.g_err_stage);
18239 
18240           pa_debug.reset_curr_function;
18241      END IF;
18242 EXCEPTION
18243 
18244 WHEN Invalid_Arg_Exc_WP THEN
18245 
18246      l_msg_count := FND_MSG_PUB.count_msg;
18247      retcode     := '2';
18248 
18249      IF l_msg_count >= 1 THEN
18250           PA_INTERFACE_UTILS_PUB.get_messages
18251               (p_encoded        => FND_API.G_FALSE -- Bug 4348814 : Made false from true FND_API.G_TRUE
18252               ,p_msg_index      => 1
18253               ,p_msg_count      => l_msg_count
18254               ,p_msg_data       => l_msg_data
18255               ,p_data           => l_data
18256               ,p_msg_index_out  => l_msg_index_out);
18257           errbuf := l_data;
18258      END IF;
18259 
18260      rollback to process_wbs_updates_conc;
18261 
18262 
18263      -- Begin fix for Bug # 4373055.
18264 
18265      /*
18266 
18267      update pa_proj_elem_ver_structure
18268      set process_code = 'WUE',
18269          conc_request_id = l_request_id
18270      where element_version_id = p_structure_version_id
18271      and project_id = p_project_id;
18272 
18273      commit;
18274 
18275      */
18276      -- Bug 4392189 : Added l_calling_context
18277      IF  p_calling_context IN ('CONC_APPLY_PROGRESS', 'ONLINE_APPLY_PROGRESS') THEN
18278     l_calling_context := 'APPLY_PROGRESS';
18279      ELSE
18280     l_calling_context := p_calling_context;
18281      END IF;
18282 
18283      PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_ERR(
18284      p_project_id              => p_project_id
18285      , p_structure_version_id  => p_structure_version_id
18286      , p_calling_context       => l_calling_context
18287      , p_conc_request_id       => l_request_id
18288      , x_return_status         => l_ret_status);
18289 
18290      if (p_calling_context = 'CONC_PUBLISH') then
18291 
18292         -- Mark the newly created published structure record also with the process code
18293         -- and request_id.
18294 
18295         PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_ERR(
18296         p_project_id              => p_project_id
18297         , p_structure_version_id  => p_pub_struc_ver_id
18298         , p_calling_context       => l_calling_context
18299         , p_conc_request_id       => l_request_id
18300         , x_return_status         => l_ret_status);
18301 
18302      end if;
18303 
18304      --  End fix for Bug # 4373055.
18305 
18306      -- Bug # 4655059.
18307 
18308      -- If the process that errored out is process_updates then set the process_update_wbs_flag to 'Y'.
18309 
18310      if (p_calling_context = 'CONC_UPDATE') then
18311 
18312 	pa_proj_task_struc_pub.set_update_wbs_flag
18313 	(p_project_id            => p_project_id
18314         ,p_structure_version_id  => p_structure_version_id
18315         ,p_update_wbs_flag       => 'Y'
18316         ,x_return_status         => l_return_status
18317         ,x_msg_count             => l_msg_count
18318         ,x_msg_data              => l_msg_data);
18319 
18320 	if (l_return_status = FND_API.G_RET_STS_SUCCESS) then
18321 
18322 		commit;
18323 
18324 	end if;
18325 
18326      end if;
18327 
18328      -- Bug # 4655059.
18329 
18330      IF l_debug_mode = 'Y' THEN
18331           pa_debug.reset_curr_function;
18332      END IF;
18333      RETURN;
18334 
18335 WHEN others THEN
18336 
18337      retcode         := '2';
18338      errbuf          := SQLERRM;
18339 
18340      FND_MSG_PUB.add_exc_msg
18341                    ( p_pkg_name        => 'PA_PROJ_TASK_STRUC_PUB'
18342                     ,p_procedure_name  => 'PROCESS_WBS_UPDATES_CONC'
18343                     ,p_error_text      => errbuf);
18344 
18345      rollback to process_wbs_updates_conc;
18346 
18347      -- Begin fix for Bug # 4373055.
18348 
18349      /*
18350 
18351      update pa_proj_elem_ver_structure
18352      set process_code = 'WUE',
18353          conc_request_id = l_request_id
18354      where element_version_id = p_structure_version_id
18355      and project_id = p_project_id;
18356 
18357      commit;
18358 
18359      */
18360 
18361      -- Bug 4392189 : Added l_calling_context
18362      IF  p_calling_context IN ('CONC_APPLY_PROGRESS', 'ONLINE_APPLY_PROGRESS') THEN
18363     l_calling_context := 'APPLY_PROGRESS';
18364      ELSE
18365     l_calling_context := p_calling_context;
18366      END IF;
18367 
18368      PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_ERR(
18369      p_project_id              => p_project_id
18370      , p_structure_version_id  => p_structure_version_id
18371      , p_calling_context       => l_calling_context
18372      , p_conc_request_id       => l_request_id
18373      , x_return_status         => l_ret_status);
18374 
18375      if (p_calling_context = 'CONC_PUBLISH') then
18376 
18377         -- Mark the newly created published structure record also with the process code
18378         -- and request_id.
18379 
18380         PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_ERR(
18381         p_project_id              => p_project_id
18382         , p_structure_version_id  => p_pub_struc_ver_id
18383         , p_calling_context       => l_calling_context
18384         , p_conc_request_id       => l_request_id
18385         , x_return_status         => l_ret_status);
18386 
18387      end if;
18388 
18389      --  End fix for Bug # 4373055.
18390 
18391      -- Bug # 4655059.
18392 
18393      -- If the process that errored out is process_updates then set the process_update_wbs_flag to 'Y'.
18394 
18395      if (p_calling_context = 'CONC_UPDATE') then
18396 
18397         pa_proj_task_struc_pub.set_update_wbs_flag
18398         (p_project_id            => p_project_id
18399         ,p_structure_version_id  => p_structure_version_id
18400         ,p_update_wbs_flag       => 'Y'
18401         ,x_return_status         => l_return_status
18402         ,x_msg_count             => l_msg_count
18403         ,x_msg_data              => l_msg_data);
18404 
18405         if (l_return_status = FND_API.G_RET_STS_SUCCESS) then
18406 
18407                 commit;
18408 
18409         end if;
18410 
18411      end if;
18412 
18413      -- Bug # 4655059.
18414 
18415      IF l_debug_mode = 'Y' THEN
18416           pa_debug.g_err_stage:= 'Unexpected Error'||errbuf;
18417           pa_debug.log_message(pa_debug.g_err_stage);
18418           pa_debug.reset_curr_function;
18419      END IF;
18420      -- Bug 4360407 : We should no do RAISE, otherweise concurrent process will not error out
18421      --RAISE;
18422      RETURN;
18423 END PROCESS_WBS_UPDATES_CONC;
18424 
18425 /*==================================================================
18426  This API takes care of calling the plannable tasks api and the task
18427  weightage api depending on the context. For a financial only structure
18428  version, only the plannable tasks api is called and for a workplan only
18429  structure version only the task weighting api is called. This api will
18430  be called from the concurrent executable and can be called from the other
18431  places where online processing is expected.
18432  Bug 3010538 : New API for the Task Weighting Enhancement.
18433  ==================================================================*/
18434 
18435 PROCEDURE PROCESS_WBS_UPDATES
18436    (  p_api_version_number    IN   NUMBER    := 1.0
18437      ,p_commit                IN   VARCHAR2  := FND_API.G_FALSE
18438      ,p_init_msg_list         IN   VARCHAR2  := FND_API.G_FALSE
18439      ,p_calling_context       IN   VARCHAR2  := 'UPDATE'
18440      ,p_project_id            IN   pa_projects_all.project_id%TYPE
18441      ,p_structure_version_id  IN   pa_proj_element_versions.element_version_id%TYPE
18442      ,p_pub_struc_ver_id      IN   NUMBER    := NULL
18443      ,p_pub_prog_flag         IN   VARCHAR2  := 'Y' --bug 4019845
18444      ,p_rerun_flag            IN   VARCHAR2  := null --bug 4589289
18445      ,x_return_status         OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
18446      ,x_msg_count             OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
18447      ,x_msg_data              OUT  NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
18448 AS
18449 
18450 -- Cursors Required.
18451 
18452 -- This cursor is used to decide if the structure version corresponds to a particular
18453 -- Structure type. Depending on this the plannable tasks api and the task weightage calculation
18454 -- api will be called.
18455 CURSOR cur_structure_type(c_project_id pa_projects_all.project_id%TYPE,
18456                           c_structure_version_id pa_proj_element_versions.element_version_id%TYPE,
18457                           c_structure_type pa_structure_types.structure_type%TYPE)
18458 IS
18459 SELECT 'Y'
18460 FROM   pa_proj_element_versions ver,
18461        pa_proj_structure_types pst,
18462        pa_structure_types st
18463 WHERE  ver.element_version_id   = c_structure_version_id
18464 AND    ver.project_id           = c_project_id
18465 AND    pst.proj_element_id      = ver.proj_element_id
18466 AND    pst.structure_type_id    = st.structure_type_id
18467 AND    st.structure_type        = c_structure_type;
18468 
18469 l_update_wbs_flag               pa_proj_elem_ver_structure.process_update_wbs_flag%TYPE;
18470 l_structure_type_flag           VARCHAR2(1);
18471 l_request_id                    pa_proj_elem_ver_structure.conc_request_id%TYPE;
18472 
18473 l_msg_count                     NUMBER := 0;
18474 l_data                          VARCHAR2(2000);
18475 l_msg_data                      VARCHAR2(2000);
18476 l_msg_index_out                 NUMBER;
18477 l_debug_mode            VARCHAR2(1);
18478 
18479 l_debug_level2                  CONSTANT NUMBER := 2;
18480 l_debug_level3                  CONSTANT NUMBER := 3;
18481 l_debug_level4                  CONSTANT NUMBER := 4;
18482 l_debug_level5                  CONSTANT NUMBER := 5;
18483 
18484 l_publish_flag                  VARCHAR2(1);
18485 l_online_flag                   VARCHAR2(1);
18486 l_pub_ver_id                    NUMBER;
18487 l_prev_ver_id                   NUMBER;
18488 l_proc_code                     VARCHAR2(30);
18489 l_msg_code                      VARCHAR2(30);
18490 
18491 --bug 3762882
18492 CURSOR get_prev_published_ver(c_struc_ver_id NUMBER) IS
18493 select a.element_version_id
18494 from pa_proj_elem_ver_structure a,
18495      pa_proj_element_versions b
18496 WHERE a.project_id = p_project_id
18497 AND a.proj_element_id = b.proj_element_id
18498 AND b.element_version_id = c_struc_ver_id
18499 AND a.LATEST_EFF_PUBLISHED_FLAG <> 'Y'
18500 AND a.STATUS_CODE = 'STRUCTURE_PUBLISHED'
18501 ORDER BY published_date desc;
18502 --end bug 3762882
18503 
18504 --bug 4019845
18505   CURSOR get_scheduled_dates(c_project_id NUMBER, c_structure_version_id NUMBER)
18506   IS
18507   SELECT scheduled_start_date, scheduled_finish_date
18508   FROM pa_proj_elem_ver_schedule
18509   WHERE project_id = c_project_id
18510   AND   element_version_id = c_structure_version_id;
18511 
18512   CURSOR get_proj_rec_ver_number(c_project_id NUMBER)
18513   IS
18514   SELECT record_version_number
18515   FROM pa_projects_all
18516   WHERE project_id = c_project_id;
18517 
18518   CURSOR get_struc_id(c_project_id NUMBER, c_struc_ver_id NUMBER) IS
18519   select pevs.proj_element_id
18520   from pa_proj_elem_ver_structure pevs
18521   where pevs.element_version_id = c_struc_ver_id
18522   and pevs.project_id = c_project_id;
18523 
18524  --bug 4472071
18525    -- bug 6414995 : Cursor query changed by adding join with pa_fin_plan_types_b
18526   CURSOR cur_chk_pji_failed
18527   IS
18528     SELECT 'Y'
18529          FROM pji_pjp_wbs_header h,
18530           pa_fin_plan_types_b fin
18531     WHERE h.wbs_version_id= p_pub_struc_ver_id
18532     AND   fin.use_for_workplan_flag='Y'
18533     AND   h.plan_type_id=fin.fin_plan_type_id;
18534     /*
18535     SELECT 'Y'
18536 
18537      FROM pji_pjp_wbs_header
18538     WHERE wbs_version_id= p_pub_struc_ver_id;
18539     */
18540 
18541   l_dummy_pji_char    VARCHAR2(1);
18542  --bug 4472071
18543 
18544 
18545   l_project_id          NUMBER := p_project_id;
18546   l_responsibility_id       NUMBER := FND_GLOBAL.resp_id;
18547   l_resp_appl_id		NUMBER := FND_GLOBAL.resp_appl_id; -- 5233777
18548   l_financial_type      VARCHAR2(1);
18549   l_workplan_type       VARCHAR2(1);
18550   l_scheduled_start_date    DATE;
18551   l_scheduled_finish_date   DATE;
18552   l_proj_record_ver_number  NUMBER;
18553   l_proj_start_date     DATE;
18554   l_proj_completion_date    DATE;
18555   l_proj_element_id     NUMBER; --structure id
18556   l_as_of_date          DATE;
18557   l_task_weight_basis_code  pa_proj_progress_attr.task_weight_basis_code%TYPE;
18558   l_share_flag          VARCHAR2(1)  := 'N';
18559   l_copy_actuals_flag       VARCHAR2(1)  := 'Y';
18560   l_upd_new_elem_ver_id_flag    VARCHAR2(1) := 'Y'; --rtarway, 3951024
18561   l_i_msg_count         NUMBER := 0;
18562   l_i_msg_data          PA_VC_1000_2000:= PA_VC_1000_2000(1);
18563   l_i_return_status     VARCHAR2(1);
18564   l_user_id         NUMBER := FND_GLOBAL.USER_ID;-- rtarway, 4030358, changed from login id to user_id
18565 --end bug 4019845
18566   l_out_online_flag     VARCHAR2(1);
18567 
18568   l_plan_version_id             NUMBER;    --bug 4587145
18569   l_pub_wp_ok                   VARCHAR2(1) := 'N'; --bug 5029112
18570 
18571 BEGIN
18572     IF p_commit = FND_API.G_TRUE THEN
18573         savepoint process_wbs_updates;
18574     END IF;
18575 
18576     IF p_init_msg_list = FND_API.G_TRUE THEN
18577         FND_MSG_PUB.initialize;
18578     END IF;
18579 
18580     x_msg_count := 0;
18581     x_return_status := FND_API.G_RET_STS_SUCCESS;
18582     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
18583 
18584     IF l_debug_mode = 'Y' THEN
18585         pa_debug.write(G_PKG_NAME, 'Entering PROCESS_WBS_UPDATES', 3);
18586         pa_debug.set_curr_function( p_function   => 'PROCESS_WBS_UPDATES', p_debug_mode => l_debug_mode );
18587     END IF;
18588 
18589     -- Check for business rules violations
18590     IF l_debug_mode = 'Y' THEN
18591         pa_debug.write(G_PKG_NAME, 'Validating input parameters', 3);
18592         pa_debug.write(G_PKG_NAME, 'p_calling_context = '|| p_calling_context, 3);
18593         pa_debug.write(G_PKG_NAME, 'p_project_id = '|| p_project_id, 3);
18594         pa_debug.write(G_PKG_NAME, 'p_structure_version_id = '|| p_structure_version_id, 3);
18595         pa_debug.write(G_PKG_NAME, 'p_pub_struc_ver_id = '|| p_pub_struc_ver_id, 3);
18596         pa_debug.write(G_PKG_NAME, 'p_pub_prog_flag = '|| p_pub_prog_flag, 3);
18597     END IF;
18598 
18599     -- Throw an error if any of the mandatory parameter is NULL.
18600     IF (p_project_id IS NULL) OR (p_structure_version_id IS NULL) THEN
18601         PA_UTILS.ADD_MESSAGE
18602             (p_app_short_name => 'PA',
18603             p_msg_name       => 'PA_INV_PARAM_PASSED');
18604         RAISE Invalid_Arg_Exc_WP;
18605     END IF;
18606 
18607     l_update_wbs_flag := pa_project_structure_utils.GET_UPDATE_WBS_FLAG(p_project_id => p_project_id,
18608                                                                          p_structure_version_id => p_structure_version_id);
18609 
18610     IF l_debug_mode = 'Y' THEN
18611         pa_debug.write(G_PKG_NAME, 'l_update_wbs_flag = '|| l_update_wbs_flag, 3);
18612     END IF;
18613 
18614 --bug 4409337  moved from below to make use of some of these variables for bugfix.
18615     l_workplan_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
18616     l_financial_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'FINANCIAL');
18617     l_share_flag       := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(l_project_id);
18618 
18619 
18620         IF l_debug_mode = 'Y' THEN
18621                 pa_debug.write(G_PKG_NAME, 'l_workplan_type = '|| l_workplan_type, 3);
18622                 pa_debug.write(G_PKG_NAME, 'l_financial_type = '|| l_financial_type, 3);
18623                 pa_debug.write(G_PKG_NAME, 'l_share_flag = '|| l_share_flag, 3);
18624         END IF;
18625 --bug 4409337
18626 
18627         IF (p_calling_context = 'ASGMT_PLAN_CHANGE') THEN  ---bug 4492493
18628              --- find the as_of_date for which to rollup and
18629              --- rollup method
18630              l_task_weight_basis_code := pa_progress_utils.get_task_weighting_basis(p_project_id => p_project_id);
18631              begin
18632                 select max(as_of_date)
18633                 into l_as_of_date
18634                 from pa_progress_rollup ppr
18635                 where ppr.project_id = p_project_id
18636                 and ppr.structure_version_id is null
18637                 and ppr.structure_type = 'WORKPLAN'
18638                 and ppr.current_flag <> 'W'
18639                 ;
18640              exception when others then
18641                 return;
18642              end;
18643 
18644              IF l_debug_mode = 'Y' THEN
18645                 pa_debug.write(G_PKG_NAME, 'Calling populate_pji_tab_for_plan' , 3);
18646              END IF;
18647 
18648              pa_progress_pub.populate_pji_tab_for_plan(
18649                           p_init_msg_list        => FND_API.G_FALSE
18650                          ,p_commit               => FND_API.G_FALSE
18651                          ,p_project_id           => p_Project_ID
18652                          ,p_structure_version_id => p_structure_version_id
18653                          ,p_baselined_str_ver_id => p_structure_version_id
18654                          ,p_structure_type       => 'WORKPLAN'
18655                          ,p_program_rollup_flag  => 'Y' -- 4392189
18656                          ,p_calling_context      => 'SUMMARIZE' -- 4392189
18657                          ,x_return_status        => x_return_status
18658                          ,x_msg_count            => x_msg_count
18659                          ,x_msg_data             => x_msg_data);
18660              IF l_debug_mode = 'Y' THEN
18661                 pa_debug.write(G_PKG_NAME, 'After populate_pji_tab_for_plan  x_return_status='|| x_return_status, 3);
18662              END IF;
18663 
18664              IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
18665                  raise Invalid_Arg_Exc_WP;
18666              END IF;
18667              IF l_debug_mode = 'Y' THEN
18668                  pa_debug.write(G_PKG_NAME, 'Calling ROLLUP_PROGRESS_PVT', 3);
18669              END IF;
18670 
18671              PA_PROGRESS_PVT.ROLLUP_PROGRESS_PVT(
18672                       p_init_msg_list             => FND_API.G_FALSE
18673                      ,p_commit                    => FND_API.G_FALSE
18674                      ,p_project_id                => p_Project_ID
18675                      ,p_structure_version_id      => p_structure_version_id
18676                      ,p_as_of_date                => l_as_of_date
18677                      ,p_wp_rollup_method          => l_task_weight_basis_code
18678                      ,p_rollup_entire_wbs         => 'Y'
18679                      ,p_working_wp_prog_flag      => 'N'
18680                      ,x_return_status             => x_return_status
18681                      ,x_msg_count                 => x_msg_count
18682                      ,x_msg_data                  => x_msg_data);
18683 
18684              IF l_debug_mode = 'Y' THEN
18685                  pa_debug.write(G_PKG_NAME, 'After ROLLUP_PROGRESS_PVT  x_return_status='|| x_return_status, 3);
18686              END IF;
18687 
18688              IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
18689                  raise Invalid_Arg_Exc_WP;
18690              END IF;
18691              IF l_debug_mode = 'Y' THEN
18692                  pa_debug.write(G_PKG_NAME, 'Calling PROGRAM_ROLLUP_PVT', 3);
18693              END IF;
18694 
18695              PA_PROGRESS_PVT.PROGRAM_ROLLUP_PVT(
18696                         p_init_msg_list        => FND_API.G_FALSE
18697                        ,p_commit               => FND_API.G_FALSE
18698                        ,p_validate_only        => FND_API.G_FALSE
18699                        ,p_calling_module       => p_calling_context
18700                        ,p_project_id           => p_Project_ID
18701                        ,p_as_of_date           => l_as_of_date
18702                        ,p_structure_type       => 'WORKPLAN'
18703                        ,p_structure_ver_id     => p_structure_version_id
18704                        ,x_return_status        => x_return_status
18705                        ,x_msg_count            => x_msg_count
18706                        ,x_msg_data             => x_msg_data);
18707 
18708              IF l_debug_mode = 'Y' THEN
18709                 pa_debug.write(G_PKG_NAME, 'After PROGRAM_ROLLUP_PVT  x_return_status='|| x_return_status, 3);
18710              END IF;
18711 
18712              IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
18713                    raise Invalid_Arg_Exc_WP;
18714              END IF; --- bug 4492493
18715 
18716     -- Begin code to fix Bug # 4262985.
18717     -- Bug 4392189 : Added call of WBS_MAINT in APPLY_PROGRESS Context
18718     ELSIF (p_calling_context = 'ONLINE_APPLY_PROGRESS' OR p_calling_context = 'CONC_APPLY_PROGRESS') THEN
18719         IF p_calling_context = 'ONLINE_APPLY_PROGRESS' THEN
18720             l_online_flag := 'Y';
18721         ELSE
18722             l_online_flag := 'N';
18723         END IF;
18724 
18725         IF l_update_wbs_flag = 'Y' THEN
18726             IF l_debug_mode = 'Y' THEN
18727                 pa_debug.write(G_PKG_NAME, 'Calling PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT with l_online_flag='||l_online_flag, 3);
18728             END IF;
18729 
18730             BEGIN
18731               -- l_online_flag = 'Y', then it is online
18732               -- 'N' , concurrent
18733               -- Even if it is Y, then wbs_maint defers it for Financial and version disabled case
18734 
18735                 PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT(
18736                     p_new_struct_ver_id => p_structure_version_id
18737                    ,p_old_struct_ver_id => p_structure_version_id
18738                    ,p_project_id => p_project_id
18739                    ,p_online_flag => l_online_flag
18740                    ,p_calling_context => 'APPLY_PROGRESS'
18741                    ,p_rerun_flag => p_rerun_flag --bug 4589289
18742                    ,x_request_id => l_request_id
18743                    ,x_processing_code => l_proc_code
18744                    ,x_msg_code => l_msg_Code
18745                    ,x_return_status => x_return_status
18746                    ,x_online_flag => l_out_online_flag
18747                   );
18748                 IF l_debug_mode = 'Y' THEN
18749                     pa_debug.write(G_PKG_NAME, 'After Call PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT with x_return_status='||x_return_status||' l_out_online_flag='||l_out_online_flag, 3);
18750                 END IF;
18751             EXCEPTION
18752                 WHEN OTHERS THEN
18753                     fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
18754                            p_procedure_name => 'PROCESS_WBS_UDPATES',
18755                            p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT Failed in Apply Progress Mode: SQLERRM='||SQLERRM,1,240));
18756                 RAISE Invalid_Arg_Exc_WP;
18757             END;
18758 
18759                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18760                 raise Invalid_Arg_Exc_WP;
18761             END IF;
18762         END IF; -- l_update_wbs_flag = 'Y'
18763 
18764 
18765         IF NVL(l_update_wbs_flag,'N') = 'N' OR NVL(l_out_online_flag, 'Y') <> 'N' THEN
18766             IF l_debug_mode = 'Y' THEN
18767                 pa_debug.write(G_PKG_NAME, 'Calling PA_PROGRESS_PUB.APPLY_LP_PROG_ON_CWV', 3);
18768             END IF;
18769 
18770             PA_PROGRESS_PUB.APPLY_LP_PROG_ON_CWV
18771             (p_project_id                  =>      p_project_id
18772             ,p_working_str_version_id      =>      p_structure_version_id
18773             ,x_return_status               =>          x_return_status
18774             ,x_msg_count                   =>          x_msg_count
18775             ,x_msg_data                    =>          x_msg_data);
18776 
18777             IF l_debug_mode = 'Y' THEN
18778                 pa_debug.write(G_PKG_NAME, 'After Call  PA_PROGRESS_PUB.APPLY_LP_PROG_ON_CWV x_return_status='||x_return_status, 3);
18779             END IF;
18780 
18781         END IF;
18782 
18783             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18784             raise Invalid_Arg_Exc_WP;
18785         END IF;
18786 
18787     ELSE -- IF (p_calling_context = 'ONLINE_APPLY_PROGRESS' OR p_calling_context = 'CONC_APPLY_PROGRESS') THEN
18788 
18789         -- End code to fix Bug # 4262985.
18790 
18791 
18792         --hsiu: bug 3035902
18793         --commented condition because there can be partial process
18794         --on financial planning API. Condition is added after processing
18795         --financial planning tasks.
18796         /*
18797         IF l_update_wbs_flag = 'N' THEN
18798             -- No further processing is required for this structure version. Return.
18799             -- TWUT.
18800             IF l_debug_mode = 'Y' THEN
18801                 pa_debug.g_err_stage:= 'No updates required for this structure version.';
18802                 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18803             END IF;
18804             RETURN;
18805         END IF;
18806         */
18807 
18808         -- Get the request id. If the request id returned is -1 then set it to null.
18809         l_request_id := FND_GLOBAL.CONC_REQUEST_ID;
18810         IF l_request_id = -1 THEN
18811             l_request_id := NULL;
18812         END IF;
18813 
18814         -- Check if the structure version to be processed corresponds to the FINANCIAL structure.
18815         -- If yes, do the processing required for the financial version.
18816         OPEN cur_structure_type(p_project_id, p_structure_version_id,'FINANCIAL');
18817         FETCH cur_structure_type INTO l_structure_type_flag;
18818         CLOSE cur_structure_type;
18819 
18820         -- TWUT.
18821         IF l_debug_mode = 'Y' THEN
18822             pa_debug.write(G_PKG_NAME, 'Financial structure type flag '||l_structure_type_flag, 3);
18823         END IF;
18824 
18825         /*
18826         IF nvl(l_structure_type_flag,'N') = 'Y' THEN
18827             x_return_status := FND_API.G_RET_STS_SUCCESS;
18828             -- Call the financial planning API.
18829             pa_fp_refresh_elements_pub.refresh_planning_elements(
18830                 p_project_id        => p_project_id
18831                 ,p_request_id        => l_request_id
18832                 ,x_return_status     => x_return_status
18833                 ,x_msg_count         => x_msg_count
18834                 ,x_msg_data          => x_msg_data
18835                 );
18836             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18837                 IF l_debug_mode = 'Y' THEN
18838                     pa_debug.g_err_stage := 'Error calling the financial planning API';
18839                     pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
18840                 END IF;
18841                 Raise Invalid_Arg_Exc_WP;
18842             END IF;
18843         END IF;
18844         */
18845 
18846                 -- Begin fix for Bug # 4409337.
18847 
18848                 if nvl(l_structure_type_flag,'N') = 'Y'
18849                    AND p_calling_context IN (  'ONLINE_UPDATE', 'CONC_UPDATE' )   --bug 4472071
18850                    AND ( l_share_flag = 'N' OR l_workplan_type = 'N' ) --call WBS maint only if the project is either split financial or financial only.
18851                 then
18852 
18853                         x_return_status := FND_API.G_RET_STS_SUCCESS;
18854 
18855                         -- Call the PJI API.
18856 
18857                                 PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT(
18858                                     p_new_struct_ver_id => p_structure_version_id
18859                                    ,p_old_struct_ver_id => p_structure_version_id
18860                                    ,p_project_id => p_project_id
18861                                    ,p_online_flag => l_online_flag
18862                                    ,p_calling_context => p_calling_context
18863                                    ,p_rerun_flag => p_rerun_flag --bug 4589289
18864                                    ,x_request_id => l_request_id
18865                                    ,x_processing_code => l_proc_code
18866                                    ,x_msg_code => l_msg_Code
18867                                    ,x_return_status => x_return_status
18868                                    ,x_online_flag => l_out_online_flag
18869                                   );
18870 
18871                         if x_return_status <> FND_API.G_RET_STS_SUCCESS then
18872 
18873                                 if l_debug_mode = 'Y' then
18874 
18875                                         pa_debug.g_err_stage := 'Error calling the financial planning API';
18876                                         pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
18877 
18878                                 end if;
18879 
18880                                 Raise Invalid_Arg_Exc_WP;
18881                         end if;
18882 
18883                 end if;
18884 
18885                 -- End fix for Bug # 4409337.
18886 
18887         --hsiu: bug 3035902
18888         --Adding condition because there can be partial process
18889         --on financial planning API and we should not check the flag
18890         --for financial planning.
18891         --hsiu: commented for PJI integration
18892         /*
18893         IF l_update_wbs_flag = 'N' THEN
18894             -- No further processing is required for this structure version. Return.
18895             -- TWUT.
18896             IF l_debug_mode = 'Y' THEN
18897                 pa_debug.g_err_stage:= 'No updates required for this structure version.';
18898                 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18899             END IF;
18900             RETURN;
18901         END IF;
18902         */
18903         --end bug 3035902 changes
18904 
18905         -- Re initilaize the local as it is again used for a cursor fetch.
18906         -- TWUT
18907         l_structure_type_flag := NULL;
18908 
18909         -- Check if the sructure version to be processed corresponds to the WORKPLAN structure.
18910         -- If yes, do the processing required for the workplan version.
18911         OPEN cur_structure_type(p_project_id, p_structure_version_id, 'WORKPLAN');
18912         FETCH cur_structure_type INTO l_structure_type_flag;
18913         CLOSE cur_structure_type;
18914 
18915         -- TWUT.
18916         IF l_debug_mode = 'Y' THEN
18917             pa_debug.g_err_stage:= 'Workplan structure type flag '||l_structure_type_flag;
18918             pa_debug.write(G_PKG_NAME, 'Workplan structure type flag '||l_structure_type_flag, 3);
18919         END IF;
18920 
18921         IF p_calling_context <> 'COPY_PROJECT' THEN --bug 3035902 maansari
18922             --PJI changes
18923             --bug
18924             IF p_calling_context = 'ONLINE_PUBLISH' THEN
18925                 --bug 3762882
18926                 OPEN get_prev_published_ver(p_pub_struc_ver_id);
18927                 FETCH get_prev_published_ver INTO l_prev_ver_id;
18928                 CLOSE get_prev_published_ver;
18929 
18930                 --bug 4019845
18931                 --set current published as working for edit
18932 
18933                 UPDATE pa_proj_elem_ver_structure
18934                 SET status_code = 'STRUCTURE_WORKING',
18935                 LOCKED_BY_PERSON_ID = (select locked_by_person_id
18936                          from pa_proj_elem_ver_structure
18937                          where project_id = l_project_id
18938                          and element_version_id = p_structure_version_id),
18939                 LOCK_STATUS_CODE = 'LOCKED'
18940                 WHERE project_id = l_project_id
18941                 AND element_version_id = p_pub_struc_ver_id;
18942 
18943                 --end bug 4019845
18944                 --end bug 3762882
18945                 l_pub_ver_id := p_pub_struc_ver_id;
18946                 l_online_flag := 'Y';
18947                 l_publish_flag := 'Y';
18948             ELSIF p_calling_context = 'ONLINE_UPDATE' THEN
18949                 --bug 3574457: changed to p_structure_version_id
18950                 l_pub_ver_id := p_structure_version_id;
18951                 l_online_flag := 'Y';
18952                 l_publish_flag := 'N';
18953                 ELSIF p_calling_context = 'CONC_PUBLISH' THEN
18954                 --bug 3574457: changed to p_pub_struc_ver_id
18955                 --bug 3762882
18956 
18957                 OPEN get_prev_published_ver(p_pub_struc_ver_id);
18958                 FETCH get_prev_published_ver INTO l_prev_ver_id;
18959                 CLOSE get_prev_published_ver;
18960 
18961                 --bug 4019845
18962                 --set current published as working for edit
18963 
18964                 UPDATE pa_proj_elem_ver_structure
18965                 SET status_code = 'STRUCTURE_WORKING',
18966                 LOCKED_BY_PERSON_ID = (select locked_by_person_id
18967                          from pa_proj_elem_ver_structure
18968                          where project_id = l_project_id
18969                          and element_version_id = p_structure_version_id),
18970                 LOCK_STATUS_CODE = 'LOCKED'
18971                 WHERE project_id = l_project_id
18972                 AND element_version_id = p_pub_struc_ver_id;
18973 
18974                 --end bug 4019845
18975                 --end bug 3762882
18976 
18977                 l_pub_ver_id := p_pub_struc_ver_id;
18978                 l_online_flag := 'N';
18979                 l_publish_flag := 'Y';
18980             ELSIF p_calling_context = 'CONC_UPDATE' THEN
18981                 l_pub_ver_id := p_structure_version_id;
18982                 l_online_flag := 'N';
18983                 l_publish_flag := 'N';
18984             END IF;
18985 
18986             -- Bug 3762882 : This code should be commented as FP is also
18987             -- pushing actuals for resource assignments so we should not push it for tasks here.
18988             -- BEGIN Bug 4284444 : Commented
18989 
18990             PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';  --4149392 fixed during fixing 4186512
18991 
18992             --bug 4019845
18993             IF (l_publish_flag = 'Y') THEN
18994                 --*******************************************
18995                 --Process WBS in PUBLISH mode
18996                 --*******************************************
18997 
18998                          -- bug 5118313 Before proceding further with publishing, first correct the WBS on the working version.
18999                          --For performance improvements, PJI copies the WBS from working version to the publish version and hence a call to plan update will correct the data on working version before it gets copied to the published version.
19000 
19001                                 --bug 4587145  Call plan update one more time for working version in the publish mode.
19002                                 --This call is required in the publish if a workplan is published without running process WBS update after making some
19003                                 --wbs changes like indent/outdent/copy/move.
19004                                 BEGIN
19005 
19006                                         BEGIN
19007 
19008                                             IF l_debug_mode = 'Y' THEN
19009                                                 pa_debug.write(G_PKG_NAME, 'Calling Pa_Fp_wp_gen_amt_utils.get_wp_version_id in PUBLISH mode for workign version', 3);
19010                                             END IF;
19011 
19012                                             l_plan_version_id := Pa_Fp_wp_gen_amt_utils.get_wp_version_id(
19013                                                           p_project_id        => l_project_id,
19014                                                           p_plan_type_id      => -1,
19015                                                           p_proj_str_ver_id   => p_structure_version_id) ;
19016 
19017                                             IF l_debug_mode = 'Y' THEN
19018                                                 pa_debug.write(G_PKG_NAME, 'l_plan_version_id in UPDATE mode for working version='||l_plan_version_id, 3);
19019                                             END IF;
19020 
19021                                         EXCEPTION
19022                                         WHEN OTHERS THEN
19023                                                 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19024                                                 p_procedure_name => 'PROCESS_WBS_UPDATES',
19025                                                 p_error_text => SUBSTRB('Call of  Pa_Fp_wp_gen_amt_utils.get_wp_version_id is failed for PUBLISH Mode for working '||
19026                                                       'verison: SQLERRM='||SQLERRM,1,120));
19027                                                 RAISE Invalid_Arg_Exc_WP;
19028 
19029                                         END;
19030                                         --end bug 4587145
19031 
19032                                         IF l_debug_mode = 'Y' THEN
19033                                                 pa_debug.write(G_PKG_NAME, 'Calling PLAN_UPDATE in PUBLISH mode for working version', 3);
19034                                         END IF;
19035                                         PA_TASK_PUB1.G_CALL_PJI_ROLLUP := null;  --set the flag so that PJI rolls up data on the working version.
19036 
19037                                         PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE (x_msg_code => l_msg_code,
19038                                                            p_plan_version_id     => l_plan_version_id,  --bug 4587145
19039                                                            x_return_status => x_return_status);
19040 
19041                                         IF l_debug_mode = 'Y' THEN
19042                                                 pa_debug.write(G_PKG_NAME,'After PLAN_UPDATE in PUBLISH mode for working verison x_return_status='||
19043                                                        x_return_status,l_debug_level3);
19044                                         END IF;
19045                                         PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N'; --Set the flag back to 'N' to bypass any PJI rollup api call untill explicit plan_update gets called.
19046                                 EXCEPTION
19047                                         WHEN OTHERS THEN
19048                                                 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19049                                                  p_procedure_name => 'PROCESS_WBS_UPDATES',
19050                                                  p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE failed in PUBLISH mode for'||
19051                                                                  ' working verison:SQLERRM='||SQLERRM,1,120));
19052                                                 RAISE Invalid_Arg_Exc_WP;
19053                                 END;
19054 
19055                                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
19056                                         Raise Invalid_Arg_Exc_WP;
19057                                 END IF;
19058 
19059                                 --end bug 4587145
19060                                 --end bug 5118313
19061 
19062 
19063                           --bug 4472071  check if PJI summarization failed when WBS_MAIN is called. This means that the following
19064                           --api need not run again.
19065                            OPEN cur_chk_pji_failed;
19066                            FETCH cur_chk_pji_failed INTO l_dummy_pji_char;
19067                            IF cur_chk_pji_failed%NOTFOUND
19068                            THEN
19069                            --bug 4472071
19070                 --all code from publishing (before calling process_wbs_updates)
19071 
19072                 IF l_debug_mode = 'Y' THEN
19073                     pa_debug.write(G_PKG_NAME, 'Calling PA_Relationship_Pvt.Copy_Intra_Dependency', 3);
19074                 END IF;
19075 
19076                 PA_Relationship_Pvt.Copy_Intra_Dependency (
19077                     P_Source_Ver_Tbl  => NULL,
19078                     P_Destin_Ver_Tbl  => NULL,
19079                     P_source_struc_ver_id => p_structure_version_id,
19080                     p_dest_struc_ver_id => l_pub_ver_id,
19081                     X_Return_Status   => X_Return_Status,
19082                     X_Msg_Count       => X_Msg_Count,
19083                     X_Msg_Data        => X_Msg_Data
19084                     );
19085 
19086                 IF l_debug_mode = 'Y' THEN
19087                     pa_debug.write(G_PKG_NAME, 'After Copy_Intra_Dependency X_Return_Status='||X_Return_Status, 3);
19088                 END IF;
19089 
19090                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19091                     RAISE Invalid_Arg_Exc_WP;
19092                 END IF;
19093 
19094                 IF l_debug_mode = 'Y' THEN
19095                     pa_debug.write(G_PKG_NAME, 'Calling Publish_Inter_Proj_Dep', 3);
19096                 END IF;
19097 
19098                 PA_RELATIONSHIP_PVT.Publish_Inter_Proj_Dep (  -- This API needs to be called
19099                     p_publishing_struc_ver_id => p_structure_version_id,
19100                     p_previous_pub_struc_ver_id => l_prev_ver_id,
19101                     p_published_struc_ver_id => l_pub_ver_id,
19102                     X_Return_Status      => X_Return_Status,
19103                     X_Msg_Count          => X_Msg_Count,
19104                     X_Msg_Data           => X_Msg_Data
19105                     );
19106 
19107                 IF l_debug_mode = 'Y' THEN
19108                     pa_debug.write(G_PKG_NAME, 'After Publish_Inter_Proj_Dep X_Return_Status='||X_Return_Status, 3);
19109                 END IF;
19110 
19111                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19112                     RAISE Invalid_Arg_Exc_WP;
19113                 END IF;
19114 
19115                 IF l_debug_mode = 'Y' THEN
19116                     pa_debug.write(G_PKG_NAME, 'Calling Copy_OG_Lnk_For_Subproj_Ass', 3);
19117                 END IF;
19118 
19119 
19120                 PA_RELATIONSHIP_PVT.Copy_OG_Lnk_For_Subproj_Ass(
19121                     p_src_str_version_id      =>  p_structure_version_id,
19122                     p_dest_str_version_id     =>  l_pub_ver_id,  -- Destination Str version id can be of published str also
19123                     x_return_status           =>  X_Return_Status,
19124                     x_msg_count               =>  X_Msg_Count,
19125                     x_msg_data                =>  X_Msg_Data
19126                     );
19127 
19128 
19129                 IF l_debug_mode = 'Y' THEN
19130                     pa_debug.write(G_PKG_NAME, 'After Copy_OG_Lnk_For_Subproj_Ass X_Return_Status='||X_Return_Status, 3);
19131                 END IF;
19132 
19133                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19134                     RAISE Invalid_Arg_Exc_WP;
19135                 END IF;
19136 
19137 
19138                 IF l_debug_mode = 'Y' THEN
19139                     pa_debug.write(G_PKG_NAME, 'Calling Move_CI_Lnk_For_subproj_step1', 3);
19140                 END IF;
19141 
19142                 PA_RELATIONSHIP_PVT.Move_CI_Lnk_For_subproj_step1(
19143                     p_src_str_version_id      =>  p_structure_version_id,
19144                     p_pub_str_version_id      =>  l_pub_ver_id,
19145                     p_last_pub_str_version_id =>  l_prev_ver_id,
19146                     x_return_status           =>  x_return_status,
19147                     x_msg_count               =>  x_msg_count,
19148                     x_msg_data                =>  x_msg_data);
19149 
19150                 IF l_debug_mode = 'Y' THEN
19151                     pa_debug.write(G_PKG_NAME, 'After Move_CI_Lnk_For_subproj_step1 X_Return_Status='||X_Return_Status, 3);
19152                 END IF;
19153 
19154                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19155                     RAISE Invalid_Arg_Exc_WP;
19156                 END IF;
19157 
19158                 IF l_debug_mode = 'Y' THEN
19159                     pa_debug.write(G_PKG_NAME, 'Calling copy_mapping', 3);
19160                 END IF;
19161 
19162 
19163                 PA_PROJ_STRUC_MAPPING_PUB.copy_mapping(
19164                     p_context             => 'PUBLISH_VERSION'
19165                     ,p_src_project_id      => l_project_id
19166                     ,p_dest_project_id     => l_project_id
19167                     ,p_src_str_version_id  => p_structure_version_id
19168                     ,p_dest_str_version_id => l_pub_ver_id
19169                     ,x_return_status       => x_return_status
19170                     ,x_msg_count           => x_msg_count
19171                     ,x_msg_data            => x_msg_data
19172                     );
19173 
19174                 IF l_debug_mode = 'Y' THEN
19175                     pa_debug.write(G_PKG_NAME, 'After copy_mapping X_Return_Status='||X_Return_Status, 3);
19176                 END IF;
19177 
19178                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19179                     RAISE Invalid_Arg_Exc_WP;
19180                 END IF;
19181 
19182                 DECLARE
19183                     src_versions_tab   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
19184                     dest_versions_tab  SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
19185                     prev_pub_tab       SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); --bug 3847386
19186                 BEGIN
19187                     src_versions_tab.extend(1);
19188                     dest_versions_tab.extend(1);
19189                     src_versions_tab(1)  := p_structure_version_id;
19190                     dest_versions_tab(1) :=  l_pub_ver_id;
19191                     prev_pub_tab.extend(1);   --bug 3847386
19192                     prev_pub_tab(1) := l_prev_ver_id;   --bug 3847386
19193                     -- Copies budget versions, resource assignments and budget lines as required
19194                     -- for the workplan version.
19195                     --Smukka Bug No. 3474141 Date 03/01/2004
19196                     --moved PA_FP_COPY_FROM_PKG.copy_wp_budget_versions into plsql block
19197                     BEGIN
19198 
19199                         IF l_debug_mode = 'Y' THEN
19200                             pa_debug.write(G_PKG_NAME, 'Calling copy_wp_budget_versions', 3);
19201                         END IF;
19202 
19203 			PA_TASK_ASSIGNMENT_UTILS.g_process_flow := 'PUBLISH'; -- 4646016
19204 
19205                         PA_FP_COPY_FROM_PKG.copy_wp_budget_versions(
19206                             p_source_project_id            => l_project_id
19207                             ,p_target_project_id            => l_project_id
19208                             ,p_src_sv_ids_tbl               => src_Versions_Tab
19209                             ,p_target_sv_ids_tbl            => dest_Versions_Tab
19210                             ,p_copy_act_from_str_ids_tbl    => prev_pub_tab --bug 3847386
19211                                                         --,p_publish_mode                 => 'Y'          --bug 4543744
19212                                                         ,p_copy_mode                    => 'V'     --bug  5118313
19213                             ,x_return_status                => x_return_status
19214                             ,x_msg_count                    => x_msg_count
19215                             ,x_Msg_data                     => x_msg_data
19216                             );
19217 
19218 			PA_TASK_ASSIGNMENT_UTILS.g_process_flow := null; -- 4646016
19219 
19220                         IF l_debug_mode = 'Y' THEN
19221                             pa_debug.write(G_PKG_NAME, 'After copy_wp_budget_versions X_Return_Status='||X_Return_Status, 3);
19222                         END IF;
19223 
19224                     EXCEPTION
19225                         WHEN OTHERS THEN
19226 			    PA_TASK_ASSIGNMENT_UTILS.g_process_flow := null; -- 4646016
19227                             fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19228                             p_procedure_name => 'PROCESS_WBS_UDPATES',
19229                             p_error_text => SUBSTRB('Call of PA_FP_COPY_FROM_PKG.copy_wp_budget_versions failed: SQLERRM='||SQLERRM,1,240));
19230                             RAISE Invalid_Arg_Exc_WP;
19231                     END;
19232 
19233                     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19234                         RAISE Invalid_Arg_Exc_WP;
19235                     END IF;
19236                 END;
19237 
19238                                 --moved these calls in the beginning.
19239                 --l_workplan_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
19240                 --l_financial_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'FINANCIAL');
19241 
19242                 IF (l_financial_type = 'Y') THEN
19243 
19244                     SELECT start_date, completion_date
19245                     INTO l_proj_start_date, l_proj_completion_date
19246                     FROM pa_projects_all
19247                     WHERE project_id = l_project_id;
19248 
19249                     --Call sync-up API
19250 
19251                     IF l_debug_mode = 'Y' THEN
19252                         pa_debug.write(G_PKG_NAME,'Calling import_task', 3);
19253                     END IF;
19254 
19255                     PA_XC_PROJECT_PUB.import_task(
19256                         p_project_id               => l_project_id
19257                         ,p_task_reference            => NULL
19258                         ,p_task_name                 => NULL
19259                         ,p_task_start_date           => NULL
19260                         ,p_task_end_date             => NULL
19261                         ,p_parent_task_reference     => NULL
19262                         ,p_task_number               => NULL
19263                         ,p_wbs_level                 => NULL
19264                         ,p_milestone                 => NULL
19265                         ,p_duration                  => NULL
19266                         ,p_duration_unit             => NULL
19267                         ,p_early_start_date          => NULL
19268                         ,p_early_finish_date         => NULL
19269                         ,p_late_start_date           => NULL
19270                         ,p_late_finish_date          => NULL
19271                         ,p_display_seq               => NULL
19272                         ,p_login_user_name           => NULL
19273                         ,p_critical_path             => NULL
19274                         ,p_sub_project_id            => NULL
19275                         ,p_attribute7                => NULL
19276                         ,p_attribute8                => NULL
19277                         ,p_attribute9                => NULL
19278                         ,p_attribute10               => NULL
19279                         ,p_progress_report           => NULL
19280                         ,p_progress_status           => NULL
19281                         ,p_progress_comments         => NULL
19282                         ,p_progress_asof_date        => NULL
19283                         ,p_predecessors              => NULL
19284                         ,p_structure_version_id      => l_pub_ver_id
19285                         ,p_calling_mode              => 'PUBLISH' );
19286 
19287                     IF l_debug_mode = 'Y' THEN
19288                                     pa_debug.g_err_stage:= 'After import_task  FND_MSG_PUB.count_msg='|| FND_MSG_PUB.count_msg;
19289                                     pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
19290                             END IF;
19291                             -- Fix for Bug # 4513291. Added below Exception handling
19292                             x_msg_count := FND_MSG_PUB.count_msg;
19293                             IF x_msg_count > 0 THEN
19294                                     raise Invalid_Arg_Exc_WP;
19295                             END IF;
19296 
19297 
19298                             IF l_debug_mode = 'Y' THEN
19299                                     pa_debug.g_err_stage:= 'Calling import_project ';
19300                                     pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
19301                             END IF;
19302 
19303                     l_i_msg_count := 0;
19304                             l_i_return_status := 'S'; -- Fix for Bug # 4513291.
19305                     PA_XC_PROJECT_PUB.import_project(
19306                         p_user_id            => l_user_id
19307                         ,p_commit                    => 'N'
19308                         ,p_project_id                => l_project_id
19309                         ,p_project_mpx_start_date    => fnd_date.date_to_canonical(l_proj_start_date)
19310                         ,p_project_mpx_end_date      => fnd_date.date_to_canonical(l_proj_completion_date)
19311                         ,p_task_mgr_override         => NULL
19312                         ,p_task_pgs_override         => NULL
19313                         ,p_process_id                => NULL
19314                         ,p_language                  => NULL
19315                         ,p_delimiter                 => NULL
19316                         ,p_responsibility_id         => l_responsibility_id
19317                         ,p_structure_id              => NULL
19318                         ,p_structure_version_id      => l_pub_ver_id
19319                         ,p_calling_mode              => 'PUBLISH'
19320 			,p_resp_appl_id              => l_resp_appl_id -- 5233777
19321 			,p_debug_mode                => l_debug_mode -- Fix for Bug # 4513291.
19322                         ,x_msg_count                 => l_i_msg_count
19323                         ,x_msg_data                  => l_i_msg_data
19324                         ,x_return_status             => l_i_return_status);
19325 
19326                             IF l_debug_mode = 'Y' THEN
19327                                     pa_debug.g_err_stage:= 'After import_project  FND_MSG_PUB.count_msg='|| FND_MSG_PUB.count_msg;
19328                                     pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
19329                                     pa_debug.write(G_PKG_NAME,'l_i_return_status='||l_i_return_status,l_debug_level3);
19330                                                         -- Fix for Bug # 4513291.
19331                                     pa_debug.write(G_PKG_NAME,'l_i_msg_count='||l_i_msg_count,l_debug_level3);
19332                                                         -- Fix for Bug # 4513291.
19333                                 END IF;
19334 
19335                     l_msg_count := FND_MSG_PUB.count_msg;
19336                             --IF l_msg_count > 0 THEN -- Fix for Bug # 4513291.
19337                             IF l_msg_count > 0 OR l_i_return_status <> 'S' OR l_i_msg_count > 0 THEN  -- Fix for Bug # 4513291.
19338                                     x_msg_count := l_msg_count;
19339                                     raise Invalid_Arg_Exc_WP;
19340                             END IF;
19341                 END IF; --if financial type = Y
19342 
19343                          --bug 4472071
19344                               END IF;
19345                               CLOSE cur_chk_pji_failed;
19346                          --bug 4472071
19347 
19348       --bug 4555289 moved here to avoid multiple working versions.
19349       --if there was a failure in PJI then the following code pieces were not
19350       --getting executed hence there were multiple working verisons.
19351                 --set published version back to published status
19352                 UPDATE pa_proj_elem_ver_structure
19353                 SET status_code = 'STRUCTURE_PUBLISHED',
19354                 LOCKED_BY_PERSON_ID = NULL,
19355                 LOCK_STATUS_CODE = 'UNLOCKED'
19356                 WHERE project_id = l_project_id
19357                 AND element_version_id = l_pub_ver_id;
19358 
19359                 --moved this code here from above for bugfix 4296915. This is required in order to pick the
19360                 --published str version in tasks_rollup api after its status is set to published..
19361                 --bug 4287813  --move the code in  PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for
19362                                 --bug 4541039
19363 
19364                                 --this rollup call is require to rollup from a published structure of sub-project to this project
19365                                 --if the link is created but process updates is not run.
19366                                 --The global variable g_apply_progress_flag is used to by pass the check in
19367                                 --pa_task_assingment_utils.check_edit_task_ok api for any process is running. The api
19368                                 --pa_task_assignment_utils_adjust_assgnmt_dates is failing for the working verison bcoz there is
19369                                 --a process(PUB) currently in process and therefore edit_task_ok api will return 'N' to
19370                                 --adjust_asgnmt api.
19371 
19372                                 PA_TASK_ASSIGNMENT_UTILS.g_apply_progress_flag := 'Y'; --although th
19373                                 --IF PA_PROJECT_STRUCTURE_UTILS.Check_Subproject_Exists(l_project_id,p_structure_version_id, 'WORKPLAN') = 'Y' THEN
19374                                 IF PA_RELATIONSHIP_UTILS.Check_link_exists( p_project_id => p_project_id
19375                                                       ,p_link_type => 'WORKPLAN' ) = 'Y'
19376                                 THEN
19377 
19378                                     --call the dates rollup API for the structure version
19379                                     IF l_debug_mode  = 'Y' THEN
19380                                          pa_debug.write(G_PKG_NAME, 'Before calling PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for entire grid in PUBLISH mode', 3);
19381                                      END IF;
19382 
19383                                      PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup(
19384                                                 p_project_id           => p_project_id,
19385                                                 p_published_str_ver_id  => l_pub_ver_id,
19386                                                 x_return_status => x_return_status,
19387                                                 x_msg_count => x_msg_count,
19388                                                 x_msg_data => x_msg_data);
19389 
19390                                      IF l_debug_mode  = 'Y' THEN
19391                                         pa_debug.write(G_PKG_NAME, 'After calling PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for entire grid in PUBLISH mode x_return_status='||x_return_status, 3);
19392                                      END IF;
19393 
19394                                      IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19395                                         RAISE Invalid_Arg_Exc_WP;
19396                                      END IF;
19397                                 END IF;
19398 
19399                                 --rollup to the parent project from the current published structure version.
19400                                 /*IF PA_RELATIONSHIP_UTILS.Check_parent_project_exists(
19401                                                        p_project_id           => p_project_id
19402                                                       ,p_structure_ver_id => l_pub_ver_id
19403                                                       ,p_link_type            => 'WORKPLAN' ) = 'Y'
19404                                 IF PA_PROJECT_STRUCTURE_UTILS.Check_Subproject_Exists(l_project_id,l_pub_ver_id, 'WORKPLAN') = 'Y'
19405                                 THEN
19406                                     IF l_debug_mode  = 'Y' THEN
19407                                          pa_debug.write(G_PKG_NAME, 'Before calling PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for published structure verison in PUBLISH mode', 3);
19408                                      END IF;
19409 
19410                      PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup(
19411                                                 p_project_id           => p_project_id,
19412                         p_structure_version_id => l_pub_ver_id,
19413                         x_return_status => x_return_status,
19414                         x_msg_count => x_msg_count,
19415                         x_msg_data => x_msg_data);
19416 
19417                      IF l_debug_mode  = 'Y' THEN
19418                     pa_debug.write(G_PKG_NAME, 'After calling PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for published structure version in PUBLISH mode x_return_status='||x_return_status, 3);
19419                      END IF;
19420 
19421                      IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19422                     RAISE Invalid_Arg_Exc_WP;
19423                      END IF;
19424 
19425                                 END IF;
19426                                        */
19427                                 PA_TASK_ASSIGNMENT_UTILS.g_apply_progress_flag := 'N';
19428                 --end bug 4287813
19429                                 --end bug 4541039
19430 
19431                 IF l_debug_mode = 'Y' THEN
19432                     pa_debug.write(G_PKG_NAME, 'Calling Task_Stat_Pushdown_Rollup', 3);
19433                 END IF;
19434 
19435                 --push down and rollup
19436                 PA_STRUCT_TASK_ROLLUP_PUB.Task_Stat_Pushdown_Rollup(
19437                     p_structure_version_id => l_pub_ver_id
19438                     ,x_return_status => x_return_status
19439                     ,x_msg_count => x_msg_count
19440                     ,x_msg_data => x_msg_data
19441                     );
19442 
19443                 IF l_debug_mode = 'Y' THEN
19444                     pa_debug.write(G_PKG_NAME, 'After Task_Stat_Pushdown_Rollup  x_return_status='|| x_return_status, 3);
19445                 END IF;
19446 
19447                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19448                     RAISE Invalid_Arg_Exc_WP;
19449                 END IF;
19450       --End bug 4555289
19451 
19452                 --moved here before calling summarization API for program reporting changes.
19453                 -- This was previously called just before COPY_PROGRESS_ACT_ETC api
19454                 --bug 3762882
19455 
19456                 BEGIN -- Bug 4284444
19457                     --new published version and prev published version
19458                     IF l_debug_mode = 'Y' THEN
19459                         pa_debug.write(G_PKG_NAME, 'Calling WBS_MAINT in PUBLISH mode', 3);
19460                     END IF;
19461 
19462                     PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT(
19463                         p_new_struct_ver_id => l_pub_ver_id
19464                         ,p_old_struct_ver_id    => l_prev_ver_id
19465                         ,p_project_id       => p_project_id
19466                         ,p_publish_flag     => 'Y'
19467                         ,p_online_flag      => l_online_flag
19468                         ,p_calling_context  => p_calling_context -- 4392189
19469                         ,p_rerun_flag => p_rerun_flag --bug 4589289
19470                         ,x_request_id       => l_request_id
19471                         ,x_processing_code  => l_proc_code
19472                         ,x_msg_code     => l_msg_Code
19473                         ,x_return_status    => x_return_status
19474                         ,x_online_flag      => l_out_online_flag -- 4392189
19475                         );
19476                     IF l_debug_mode = 'Y' THEN
19477                         pa_debug.write(G_PKG_NAME, 'After WBS_MAINT in PUBLISH mode  x_return_status='|| x_return_status, 3);
19478                     END IF;
19479 
19480                 EXCEPTION
19481                     WHEN OTHERS THEN
19482                         fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19483                             p_procedure_name => 'PROCESS_WBS_UPDATES',
19484                             p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT Failed for Publish Mode: SQLERRM='||SQLERRM,1,240));
19485                         RAISE Invalid_Arg_Exc_WP;
19486                 END;
19487                 --endbug 3762882
19488 
19489                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
19490                     Raise Invalid_Arg_Exc_WP;
19491                 END IF;
19492 
19493                 -- Added this for FP_M changes -- Bhumesh
19494 
19495                 IF l_debug_mode = 'Y' THEN
19496                     pa_debug.write(G_PKG_NAME, 'Calling Pull_Summarized_Actuals', 3);
19497                 END IF;
19498 
19499                 PA_PROGRESS_PUB.Pull_Summarized_Actuals (
19500                     P_Project_ID       =>  l_Project_ID
19501                     ,p_Calling_Mode     =>  'PUBLISH'
19502                     ,x_return_status    =>  x_return_status
19503                     ,x_msg_count        =>  x_msg_count
19504                     ,x_msg_data         =>  x_msg_data
19505                     );
19506 
19507                 IF l_debug_mode = 'Y' THEN
19508                     pa_debug.write(G_PKG_NAME, 'After Pull_Summarized_Actuals  x_return_status='|| x_return_status, 3);
19509                 END IF;
19510 
19511                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19512                     RAISE Invalid_Arg_Exc_WP;
19513                 END IF;
19514 
19515                 --bug 4232150 Moved from above to be called after summarization.
19516                 -- Dates changes
19517 
19518                 IF (l_workplan_type = 'Y') THEN
19519                     OPEN get_scheduled_dates(l_project_id, l_pub_ver_id);
19520                     FETCH get_scheduled_dates INTO l_scheduled_start_date, l_scheduled_finish_date;
19521                     CLOSE get_scheduled_dates;
19522 
19523                     OPEN get_proj_rec_ver_number(l_project_id);
19524                     FETCH get_proj_rec_ver_number INTO l_proj_record_ver_number;
19525                     CLOSE get_proj_rec_ver_number;
19526 
19527                     IF l_debug_mode = 'Y' THEN
19528                         pa_debug.write(G_PKG_NAME, 'Calling UPDATE_PROJECT_DATES', 3);
19529                     END IF;
19530 
19531                     PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
19532                         p_validate_only          => FND_API.G_FALSE
19533                         ,p_project_id             => l_project_id
19534                         ,p_date_type              => 'SCHEDULED'
19535                         ,p_start_date             => l_scheduled_start_date
19536                         ,p_finish_date            => l_scheduled_finish_date
19537                         ,p_record_version_number  => l_proj_record_ver_number
19538                         ,x_return_status          => x_return_status
19539                         ,x_msg_count              => l_msg_count
19540                         ,x_msg_data               => l_msg_data );
19541 
19542                     IF l_debug_mode = 'Y' THEN
19543                         pa_debug.write(G_PKG_NAME, 'After UPDATE_PROJECT_DATES  x_return_status='|| x_return_status, 3);
19544                     END IF;
19545 
19546                     --Check if there is any error.
19547                     l_msg_count := FND_MSG_PUB.count_msg;
19548                     IF l_msg_count > 0 THEN
19549                         x_msg_count := l_msg_count;
19550                         IF x_msg_count = 1 THEN
19551                             x_msg_data := l_msg_data;
19552                         END IF;
19553                         RAISE Invalid_Arg_Exc_WP;
19554                     END IF;
19555                 END IF; --workplan = Y
19556 
19557                 -- project dates changes
19558                 -- copy dates to transaction dates if 1, share structure
19559                 IF ((l_workplan_type = 'Y') AND (l_financial_type = 'Y')) THEN
19560                     --select workplan attr
19561                     OPEN get_struc_id(l_project_id, l_pub_ver_id);
19562                     FETCH get_struc_id INTO l_proj_element_id;
19563                     CLOSE get_struc_id;
19564 
19565                     IF (PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_DATE_SYNC_ENABLED(l_proj_element_id) = 'Y') THEN
19566                         --Copy to transaction date
19567                         IF l_debug_mode = 'Y' THEN
19568                             pa_debug.write(G_PKG_NAME, 'Calling COPY_PROJECT_DATES', 3);
19569                         END IF;
19570                         PA_PROJECT_DATES_PUB.COPY_PROJECT_DATES(
19571                           p_project_id => l_project_id,
19572                           x_return_status => x_return_status,
19573                           x_msg_count => l_msg_count,
19574                           x_msg_data => l_msg_data
19575                         );
19576 
19577                         IF l_debug_mode = 'Y' THEN
19578                             pa_debug.write(G_PKG_NAME, 'After COPY_PROJECT_DATES  x_return_status='|| x_return_status, 3);
19579                         END IF;
19580 
19581                         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19582                             raise Invalid_Arg_Exc_WP;
19583                         END IF;
19584 
19585                     END IF;
19586                 END IF; -- ((l_workplan_type = 'Y') AND (l_financial_type = 'Y')) THEN
19587 
19588                 -- 5029112 (4925192)
19589                 l_pub_wp_ok := pa_progress_utils.check_wwp_prog_publishing_ok(l_project_id,p_structure_version_id);
19590                 --bug 4232150
19591 
19592                 IF p_pub_prog_flag = 'Y' THEN
19593 
19594                     IF l_debug_mode = 'Y' THEN
19595                         pa_debug.write(G_PKG_NAME, 'Calling Publish_Progress', 3);
19596                     END IF;
19597 
19598                     PA_PROGRESS_PUB.Publish_Progress(
19599                     p_project_id               => l_Project_ID
19600                     ,p_working_str_ver_id       => p_structure_version_id -- Bug 4190086
19601                     ,p_pub_structure_version_id => l_pub_ver_id  -- Bug 3839288
19602                     ,x_upd_new_elem_ver_id_flag => l_upd_new_elem_ver_id_flag -- added by rtarway for BUG 3951024
19603                     ,x_as_of_date               => l_as_of_date -- Bug 3839288
19604                     ,x_task_weight_basis_code   => l_task_weight_basis_code -- Bug 3839288
19605                     ,x_return_status            => x_return_status
19606                     ,x_msg_count                => x_msg_count
19607                     ,x_msg_data                 => x_msg_data
19608                     );
19609 
19610                     IF l_debug_mode = 'Y' THEN
19611                         pa_debug.write(G_PKG_NAME, 'After Publish_Progress  x_return_status='|| x_return_status, 3);
19612                     END IF;
19613 
19614                     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19615                         raise Invalid_Arg_Exc_WP;
19616                     END IF;
19617                 END IF; -- p_pub_prog_flag = 'Y' THEN
19618 
19619                 --bug 4019845
19620                                 --moved this call in the beginning
19621                 --l_share_flag       := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(l_project_id);
19622                 --The follwoing api is called to push progress data to PJI for the new
19623                 --structure version.
19624 
19625                 --bug 3822112
19626                 IF l_share_flag = 'Y' THEN
19627                     l_copy_actuals_flag := 'N';
19628                 END IF;
19629 
19630                 IF l_debug_mode = 'Y' THEN
19631                     pa_debug.write(G_PKG_NAME, 'Calling COPY_PROGRESS_ACT_ETC', 3);
19632                 END IF;
19633 
19634                 PA_PROGRESS_PUB.COPY_PROGRESS_ACT_ETC(
19635                 p_project_id               => l_Project_ID
19636                 ,p_src_str_ver_id           => p_structure_version_id
19637                 ,p_dst_str_ver_id           => l_pub_ver_id
19638                 ,p_pub_wp_with_prog_flag    => p_pub_prog_flag
19639                 ,p_calling_context          => 'PUBLISH'
19640                 ,p_copy_actuals_flag        => l_copy_actuals_flag    --bug 3822112
19641                 ,p_last_pub_str_version_id  => l_prev_ver_id -- Modified rakragha 28-JUL-2004
19642                 ,x_return_status            => x_return_status
19643                 ,x_msg_count                => x_msg_count
19644                 ,x_msg_data                 => x_msg_data
19645                 );
19646 
19647                 IF l_debug_mode = 'Y' THEN
19648                     pa_debug.write(G_PKG_NAME, 'After COPY_PROGRESS_ACT_ETC  x_return_status='|| x_return_status, 3);
19649                 END IF;
19650 
19651                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19652                     raise Invalid_Arg_Exc_WP;
19653                 END IF;
19654 
19655                 --bug 4149392
19656 
19657                 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
19658                 BEGIN
19659 
19660                                         --bug 4587145
19661                                         BEGIN
19662 
19663                                             IF l_debug_mode = 'Y' THEN
19664                                                 pa_debug.write(G_PKG_NAME, 'Calling Pa_Fp_wp_gen_amt_utils.get_wp_version_id in PUBLISH mode', 3);
19665                                             END IF;
19666 
19667                                             l_plan_version_id := Pa_Fp_wp_gen_amt_utils.get_wp_version_id(
19668                               p_project_id        => l_project_id,
19669                               p_plan_type_id      => -1,
19670                               p_proj_str_ver_id   => l_pub_ver_id) ;
19671 
19672                                             IF l_debug_mode = 'Y' THEN
19673                                                 pa_debug.write(G_PKG_NAME, 'l_plan_version_id in PUBLISH mode='||l_plan_version_id, 3);
19674                                             END IF;
19675 
19676                                         EXCEPTION
19677                                         WHEN OTHERS THEN
19678                                                 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19679                                                 p_procedure_name => 'PROCESS_WBS_UPDATES',
19680                                                 p_error_text => SUBSTRB('Call of  Pa_Fp_wp_gen_amt_utils.get_wp_version_id is failed for Publish Mode: SQLERRM='||SQLERRM,1,120));
19681                                                 RAISE Invalid_Arg_Exc_WP;
19682 
19683                                         END;
19684                                         --end bug 4587145
19685 
19686                     IF l_debug_mode = 'Y' THEN
19687                         pa_debug.write(G_PKG_NAME, 'Calling PLAN_UPDATE in PUBLISH mode', 3);
19688                     END IF;
19689 
19690                     PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE (x_msg_code => l_msg_code,
19691                                                   p_plan_version_id     => l_plan_version_id,  --bug 4587145
19692                                                   x_return_status => x_return_status);
19693 
19694                     IF l_debug_mode = 'Y' THEN
19695                         pa_debug.write(G_PKG_NAME, 'After PLAN_UPDATE in PUBLISH mode  x_return_status='|| x_return_status, 3);
19696                     END IF;
19697 
19698                 EXCEPTION
19699                     WHEN OTHERS THEN
19700                         fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19701                         p_procedure_name => 'PROCESS_WBS_UPDATES',
19702                         p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE is failed for Publish Mode: SQLERRM='||SQLERRM,1,120));
19703                         RAISE Invalid_Arg_Exc_WP;
19704                 END;
19705                 -- Bug 4284444
19706 
19707                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
19708                     Raise Invalid_Arg_Exc_WP;
19709                 END IF;
19710 
19711                 --end bug 4149392
19712 
19713 
19714                 IF p_pub_prog_flag = 'Y' AND l_as_of_date IS NOT NULL THEN
19715 
19716                     IF l_debug_mode = 'Y' THEN
19717                         pa_debug.write(G_PKG_NAME, 'Calling populate_pji_tab_for_plan' , 3);
19718                     END IF;
19719 
19720                     pa_progress_pub.populate_pji_tab_for_plan(
19721                         p_init_msg_list     => FND_API.G_FALSE
19722                         ,p_commit       => FND_API.G_FALSE
19723                         ,p_project_id       => l_Project_ID
19724                         ,p_structure_version_id => l_pub_ver_id
19725                         ,p_baselined_str_ver_id => PA_PROJECT_STRUCTURE_UTILS.Get_Baseline_Struct_Ver(l_Project_ID)
19726                         ,p_structure_type       => 'WORKPLAN'
19727                         ,p_program_rollup_flag  => 'Y' -- 4392189
19728                         ,p_calling_context  => 'SUMMARIZE' -- 4392189
19729                         ,p_as_of_date       => l_as_of_date -- 4392189
19730                         ,x_return_status        => x_return_status
19731                         ,x_msg_count            => x_msg_count
19732                         ,x_msg_data             => x_msg_data);
19733 
19734                     IF l_debug_mode = 'Y' THEN
19735                         pa_debug.write(G_PKG_NAME, 'After populate_pji_tab_for_plan  x_return_status='|| x_return_status, 3);
19736                     END IF;
19737 
19738                     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19739                         raise Invalid_Arg_Exc_WP;
19740                     END IF;
19741 
19742                     IF l_debug_mode = 'Y' THEN
19743                         pa_debug.write(G_PKG_NAME, 'Calling ROLLUP_PROGRESS_PVT', 3);
19744                     END IF;
19745 
19746                     PA_PROGRESS_PVT.ROLLUP_PROGRESS_PVT(
19747                         p_init_msg_list             => FND_API.G_FALSE
19748                         ,p_commit                    => FND_API.G_FALSE
19749                         ,p_project_id                => l_Project_ID
19750                         ,p_structure_version_id      => l_pub_ver_id
19751                         ,p_as_of_date                => l_as_of_date
19752                         ,p_wp_rollup_method          => l_task_weight_basis_code
19753                         ,p_rollup_entire_wbs         => 'Y'
19754                         ,p_working_wp_prog_flag      => 'N'
19755                         ,p_upd_new_elem_ver_id_flag  => l_upd_new_elem_ver_id_flag --rtarway, 3951024
19756                         ,x_return_status             => x_return_status
19757                         ,x_msg_count                 => x_msg_count
19758                         ,x_msg_data                  => x_msg_data);
19759 
19760                     IF l_debug_mode = 'Y' THEN
19761                         pa_debug.write(G_PKG_NAME, 'After ROLLUP_PROGRESS_PVT  x_return_status='|| x_return_status, 3);
19762                     END IF;
19763 
19764                     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19765                         raise Invalid_Arg_Exc_WP;
19766                     END IF;
19767                     -- 4575855 : Do not call PROGRAM_ROLLUP_PVT
19768                     -- instead we are calling now ROLLUP_PROG_FROM_SUBPROJS
19769                     /*
19770                     -- 4392189 : Added PROGRAM_ROLLUP_PVT call
19771 
19772                     IF l_debug_mode = 'Y' THEN
19773                         pa_debug.write(G_PKG_NAME, 'Calling PROGRAM_ROLLUP_PVT', 3);
19774                     END IF;
19775 
19776                     PA_PROGRESS_PVT.PROGRAM_ROLLUP_PVT(
19777                         p_init_msg_list         => FND_API.G_FALSE
19778                         ,p_commit               => FND_API.G_FALSE
19779                         ,p_validate_only        => FND_API.G_FALSE
19780                         ,p_project_id           => l_Project_ID
19781                         ,p_as_of_date           => l_as_of_date
19782                         ,p_structure_type       => 'WORKPLAN'
19783                         ,p_structure_ver_id     => l_pub_ver_id
19784                         ,x_return_status        => x_return_status
19785                         ,x_msg_count            => x_msg_count
19786                         ,x_msg_data             => x_msg_data);
19787 
19788                     IF l_debug_mode = 'Y' THEN
19789                         pa_debug.write(G_PKG_NAME, 'After PROGRAM_ROLLUP_PVT  x_return_status='|| x_return_status, 3);
19790                     END IF;
19791 
19792                     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19793                         raise Invalid_Arg_Exc_WP;
19794                     END IF;
19795                     */
19796                 END IF; -- p_pub_prog_flag = 'Y' AND l_as_of_date IS NOT NULL THEN
19797 
19798                 IF p_pub_prog_flag = 'Y' THEN
19799                     -- 4575855 : Added call of ROLLUP_PROG_FROM_SUBPROJS
19800                     IF l_debug_mode = 'Y' THEN
19801                         pa_debug.write(G_PKG_NAME, 'Calling ROLLUP_PROG_FROM_SUBPROJS', 3);
19802                     END IF;
19803 
19804                     PA_PROGRESS_PVT.ROLLUP_PROG_FROM_SUBPROJS(
19805                         p_init_msg_list         => FND_API.G_FALSE
19806                         ,p_commit               => FND_API.G_FALSE
19807                         ,p_validate_only        => FND_API.G_FALSE
19808                         ,p_project_id           => l_Project_ID
19809                         ,p_structure_version_id => l_pub_ver_id
19810                         ,x_return_status        => x_return_status
19811                         ,x_msg_count            => x_msg_count
19812                         ,x_msg_data             => x_msg_data);
19813 
19814                     IF l_debug_mode = 'Y' THEN
19815                         pa_debug.write(G_PKG_NAME, 'After ROLLUP_PROG_FROM_SUBPROJS  x_return_status='|| x_return_status, 3);
19816                     END IF;
19817 
19818                     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19819                         raise Invalid_Arg_Exc_WP;
19820                     END IF;
19821 
19822                     --bug 3851528
19823                     IF l_debug_mode = 'Y' THEN
19824                         pa_debug.write(G_PKG_NAME, 'Calling clear_prog_outdated_flag', 3);
19825                     END IF;
19826 
19827                     PA_PROGRESS_UTILS.clear_prog_outdated_flag(
19828                         p_project_id                => l_Project_ID
19829                         ,p_structure_version_id      => l_pub_ver_id
19830                         ,p_object_id                 => null
19831                         ,p_object_type               => null
19832                         ,x_return_status             => x_return_status
19833                         ,x_msg_count                 => x_msg_count
19834                         ,x_msg_data                  => x_msg_data);
19835 
19836                     IF l_debug_mode = 'Y' THEN
19837                         pa_debug.write(G_PKG_NAME, 'After clear_prog_outdated_flag  x_return_status='|| x_return_status, 3);
19838                     END IF;
19839 
19840                     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19841                                 raise Invalid_Arg_Exc_WP;
19842                     END IF;
19843                 END IF; -- p_pub_prog_flag = 'Y' THEN
19844                 --end bug 4019845, publishing changes
19845 
19846                 -- 5029112 (4925192)
19847                  if l_pub_wp_ok = 'Y' then
19848                     UPDATE pa_proj_elem_ver_structure
19849                        set date_prog_applied_on_wver = sysdate
19850                      WHERE project_id = l_project_id
19851                        AND element_version_id = p_structure_version_id;
19852                  end if;
19853 
19854                                 /* The following call is not required as the mechanics of program data rollup is changed.
19855                                    Earlier, there was a pull method to rollup the data from sub-project to parent project and this was
19856                                    the reason we had this api call to mark all the immediate parents to dirty so that when user goes to
19857                                    parent project, he wil the message to run process wbs in order to see correct program rollup.
19858                                    But now publishing of a sub-project will push the data to all its parent. This change in pull to
19859                                    push mechanics does not require the following api call. Hence commenitng out.
19860                 IF l_debug_mode = 'Y' THEN
19861                     pa_debug.write(G_PKG_NAME, 'Calling UPDATE_PARENT_WBS_FLAG_DIRTY', 3);
19862                 END IF;
19863 
19864                 PA_RELATIONSHIP_PVT.UPDATE_PARENT_WBS_FLAG_DIRTY(
19865                     p_project_id                => l_Project_ID
19866                     ,p_structure_version_id      => l_pub_ver_id
19867                     ,x_return_status             => x_return_status
19868                     ,x_msg_count                 => x_msg_count
19869                     ,x_msg_data                  => x_msg_data);
19870 
19871                 IF l_debug_mode = 'Y' THEN
19872                     pa_debug.write(G_PKG_NAME, 'After UPDATE_PARENT_WBS_FLAG_DIRTY  x_return_status='|| x_return_status, 3);
19873                 END IF;
19874 
19875                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19876                     raise Invalid_Arg_Exc_WP;
19877                 END IF;
19878                                 */
19879 
19880                                 --bug 4479392
19881                                 -- Mark the structure version as no pending wbs updates.
19882                                 IF l_debug_mode = 'Y' THEN
19883                                         pa_debug.write(G_PKG_NAME, 'Before calling pa_proj_task_struc_pub.set_update_wbs_flag for published version', 3);
19884                                 END IF;
19885 
19886                                 pa_proj_task_struc_pub.set_update_wbs_flag(
19887                                     p_project_id            => p_project_id
19888                                    ,p_structure_version_id  => l_pub_ver_id
19889                                    ,p_update_wbs_flag       => 'N'
19890                                    ,x_return_status         => x_return_status
19891                                    ,x_msg_count             => x_msg_count
19892                                    ,x_msg_data              => x_msg_data
19893                                    );
19894 
19895                                 IF l_debug_mode = 'Y' THEN
19896                                         pa_debug.write(G_PKG_NAME, 'After pa_proj_task_struc_pub.set_update_wbs_flag for published version  x_return_status='|| x_return_status, 3);
19897                                 END IF;
19898 
19899                                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19900                                         raise Invalid_Arg_Exc_WP;
19901                                 END IF;
19902                                 --bug 4479392
19903 
19904 
19905             ELSIF l_publish_flag = 'N' THEN
19906                 --*******************************************
19907                 --Process WBS in UPDATE MODE
19908                 --*******************************************
19909 
19910                 --bug 4186512
19911                 --set the PJI global flag to NULL before calling pji wbsmant for
19912                 --indent/outdent/copy/move
19913                 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := null;
19914 
19915                 BEGIN -- Bug 4284444
19916                     --both working version
19917                     IF l_debug_mode = 'Y' THEN
19918                         pa_debug.write(G_PKG_NAME, 'Calling WBS_MAINT in UPDATE mode', 3);
19919                     END IF;
19920 
19921                     PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT(
19922                     p_new_struct_ver_id => p_structure_version_id
19923                     ,p_old_struct_ver_id => p_structure_version_id
19924                     ,p_project_id => p_project_id
19925                     ,p_online_flag => l_online_flag
19926                     ,p_calling_context => p_calling_context -- 4392189
19927                     ,p_rerun_flag => p_rerun_flag --bug 4589289
19928                     ,x_request_id => l_request_id
19929                     ,x_processing_code => l_proc_code
19930                     ,x_msg_code => l_msg_Code
19931                     ,x_return_status => x_return_status
19932                     ,x_online_flag => l_out_online_flag -- 4392189
19933                     );
19934 
19935                     IF l_debug_mode = 'Y' THEN
19936                         pa_debug.write(G_PKG_NAME, 'After WBS_MAINT in UPDATE mode  x_return_status='|| x_return_status, 3);
19937                     END IF;
19938 
19939                 EXCEPTION
19940                     WHEN OTHERS THEN
19941                         fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
19942                             p_procedure_name => 'PROCESS_WBS_UPDATES',
19943                             p_error_text     => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT Failed in Update Mode: SQLERRM='||SQLERRM,1,240));
19944                             RAISE Invalid_Arg_Exc_WP;
19945                 END;
19946 
19947                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
19948                     Raise Invalid_Arg_Exc_WP;
19949                 END IF;
19950 
19951                 --copy task bug 4186512
19952                 --Since PJI wbs maint does not pick the extr lines, need to call plan_update for copy task. Move may also require this call. So calling it regardless of any WBS change except publishing.
19953 
19954                 BEGIN
19955 
19956                                         --bug 4587145
19957                                         BEGIN
19958 
19959                                             IF l_debug_mode = 'Y' THEN
19960                                                 pa_debug.write(G_PKG_NAME, 'Calling Pa_Fp_wp_gen_amt_utils.get_wp_version_id in UPDATE mode', 3);
19961                                             END IF;
19962 
19963                                             l_plan_version_id := Pa_Fp_wp_gen_amt_utils.get_wp_version_id(
19964                                                           p_project_id        => p_project_id,
19965                                                           p_plan_type_id      => -1,
19966                                                           p_proj_str_ver_id   => p_structure_version_id) ;
19967 
19968                                             IF l_debug_mode = 'Y' THEN
19969                                                 pa_debug.write(G_PKG_NAME, 'l_plan_version_id in UPDATE mode='||l_plan_version_id, 3);
19970                                             END IF;
19971 
19972                                         EXCEPTION
19973                                         WHEN OTHERS THEN
19974                                                 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19975                                                 p_procedure_name => 'PROCESS_WBS_UPDATES',
19976                                                 p_error_text => SUBSTRB('Call of  Pa_Fp_wp_gen_amt_utils.get_wp_version_id is failed for UPDATE Mode: SQLERRM='||SQLERRM,1,120));
19977                                                 RAISE Invalid_Arg_Exc_WP;
19978 
19979                                         END;
19980                                         --end bug 4587145
19981 
19982                     IF l_debug_mode = 'Y' THEN
19983                         pa_debug.write(G_PKG_NAME, 'Calling PLAN_UPDATE in UPDATE mode', 3);
19984                     END IF;
19985 
19986                     PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE (x_msg_code => l_msg_code,
19987                                                            p_plan_version_id     => l_plan_version_id,  --bug 4587145
19988                                x_return_status => x_return_status);
19989 
19990                     IF l_debug_mode = 'Y' THEN
19991                         pa_debug.write(G_PKG_NAME,'After PLAN_UPDATE in UPDATE mode  x_return_status='|| x_return_status,l_debug_level3);
19992                     END IF;
19993                 EXCEPTION
19994                     WHEN OTHERS THEN
19995                         fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19996                          p_procedure_name => 'PROCESS_WBS_UPDATES',
19997                          p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE failed in Update mode:SQLERRM='||SQLERRM,1,120));
19998                         RAISE Invalid_Arg_Exc_WP;
19999                 END;
20000 
20001                 --end copy task bug 4186512
20002 
20003                 -- Bug 4284444
20004                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20005                     Raise Invalid_Arg_Exc_WP;
20006                 END IF;
20007 
20008                 -- Bug 4284444 : Commented the below code
20009                 --  EXCEPTION
20010                 --    WHEN OTHERS THEN
20011                 --       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
20012                 --                               p_procedure_name => 'PROCESS_WBS_UPDATES',
20013                 --                               p_error_text     => SUBSTRB('PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT:'||SQLERRM,1,240));
20014                 --    RAISE Invalid_Arg_Exc_WP;
20015                 --  END;
20016 
20017                 IF nvl(l_structure_type_flag,'N') = 'Y' THEN
20018 
20019                     IF l_debug_mode = 'Y' THEN
20020                         pa_debug.write(G_PKG_NAME, 'Calling PROCESS_TASK_WEIGHTAGE', 3);
20021                     END IF;
20022 
20023                     pa_proj_task_struc_pub.PROCESS_TASK_WEIGHTAGE(
20024                         p_project_id            => p_project_id
20025                         --               ,p_structure_version_id  => p_structure_version_id
20026                         --Modified for BUG 4127178
20027                         ,p_structure_version_id  => l_pub_ver_id
20028                         ,x_return_status         => x_return_status
20029                         ,x_msg_count             => x_msg_count
20030                         ,x_msg_data              => x_msg_data
20031                         );
20032 
20033                     IF l_debug_mode = 'Y' THEN
20034                         pa_debug.write(G_PKG_NAME, 'After PROCESS_TASK_WEIGHTAGE  x_return_status='|| x_return_status, 3);
20035                     END IF;
20036 
20037                     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20038                         Raise Invalid_Arg_Exc_WP;
20039                     END IF;
20040                 END IF;
20041                 --bug 3035902 maansari
20042 
20043                 --call progress rollup api if calling context is not copy project.
20044                 -- Bug 3764224 : Moved populate_pji_tab_for_plan in RE_ROLLUP_PROGRESS
20045                 -- Bug 3693757 : 13-Jul-04 PJI tmp1 table shd be populated so that rollup API can access actuals values in RE_ROLLUP_PROGRESS
20046                 /*      BEGIN
20047                         pa_progress_pub.populate_pji_tab_for_plan(
20048                         p_init_msg_list         => FND_API.G_FALSE,
20049                         p_project_id            => p_project_id,
20050                         p_structure_version_id  => p_structure_version_id,
20051             --                        p_baselined_str_ver_id  => l_baselined_str_ver_id,
20052                         p_structure_type        => 'WORKPLAN',
20053                         x_return_status         => x_return_status,
20054                         x_msg_count             => x_msg_count,
20055                         x_msg_data              => x_msg_data
20056                         );
20057 
20058                         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20059                             Raise Invalid_Arg_Exc_WP;
20060                         END IF;
20061                     EXCEPTION
20062                         WHEN OTHERS THEN
20063                             fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
20064                                  p_procedure_name => 'PROCESS_WBS_UPDATES',
20065                                  p_error_text     => SUBSTRB('PA_PROGRESS_PUB.populate_pji_tab_for_plan:'||SQLERRM,1,240));
20066                             RAISE FND_API.G_EXC_ERROR;
20067                     END;
20068                 */
20069 
20070                 IF nvl(l_structure_type_flag,'N') = 'Y'  THEN   --fpm progress management changes
20071 
20072                     IF l_debug_mode = 'Y' THEN
20073                         pa_debug.write(G_PKG_NAME, 'Calling RE_ROLLUP_PROGRESS', 3);
20074                     END IF;
20075 
20076                     PA_PROGRESS_PUB.RE_ROLLUP_PROGRESS(
20077                         p_project_id            => p_project_id
20078                         ,p_structure_version_id  => p_structure_version_id
20079                         ,x_return_status         => x_return_status
20080                         ,x_msg_count             => x_msg_count
20081                         ,x_msg_data              => x_msg_data
20082                         );
20083                     IF l_debug_mode = 'Y' THEN
20084                         pa_debug.write(G_PKG_NAME, 'After RE_ROLLUP_PROGRESS  x_return_status='|| x_return_status, 3);
20085                     END IF;
20086 
20087                     -- Bug 4575855 : Added call of ROLLUP_PROG_FROM_SUBPROJS
20088                     IF PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id) = 'N' THEN
20089                         IF l_debug_mode = 'Y' THEN
20090                             pa_debug.write(G_PKG_NAME, 'Calling ROLLUP_PROG_FROM_SUBPROJS', 3);
20091                         END IF;
20092 
20093                         PA_PROGRESS_PVT.ROLLUP_PROG_FROM_SUBPROJS(
20094                             p_init_msg_list         => FND_API.G_FALSE
20095                             ,p_commit               => FND_API.G_FALSE
20096                             ,p_validate_only        => FND_API.G_FALSE
20097                             ,p_project_id           => p_project_id
20098                             ,p_structure_version_id => l_pub_ver_id
20099                             ,x_return_status        => x_return_status
20100                             ,x_msg_count            => x_msg_count
20101                             ,x_msg_data             => x_msg_data);
20102 
20103                         IF l_debug_mode = 'Y' THEN
20104                             pa_debug.write(G_PKG_NAME, 'After ROLLUP_PROG_FROM_SUBPROJS  x_return_status='|| x_return_status, 3);
20105                         END IF;
20106 
20107                         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20108                             raise Invalid_Arg_Exc_WP;
20109                         END IF;
20110                     END IF;
20111 
20112                 END IF;
20113 
20114                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20115                     Raise Invalid_Arg_Exc_WP;
20116                 END IF;
20117 
20118                                 --bug 4541039
20119                                 IF PA_RELATIONSHIP_UTILS.Check_link_exists( p_project_id => p_project_id
20120                                                       ,p_link_type => 'WORKPLAN' ) = 'Y'
20121                                 THEN
20122                                     IF l_debug_mode  = 'Y' THEN
20123                                          pa_debug.write(G_PKG_NAME, 'Before calling PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for entire grid in UPDATE mode', 3);
20124                                      END IF;
20125 
20126                                      PA_TASK_ASSIGNMENT_UTILS.g_apply_progress_flag := 'Y'; --although th
20127                                      PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup(
20128                                                 p_project_id           => p_project_id,
20129                                                 x_return_status => x_return_status,
20130                                                 x_msg_count => x_msg_count,
20131                                                 x_msg_data => x_msg_data);
20132 
20133                                      IF l_debug_mode  = 'Y' THEN
20134                                         pa_debug.write(G_PKG_NAME, 'After calling PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for entire grid in UPDATE mode x_return_status='||x_return_status, 3);
20135                                      END IF;
20136 
20137                                      IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20138                                         RAISE Invalid_Arg_Exc_WP;
20139                                      END IF;
20140                                 END IF;
20141                                 --end bug 4541039
20142 
20143             END IF; --publish_flag
20144         ELSIF p_calling_context = 'COPY_PROJECT' THEN
20145             DECLARE
20146                 CURSOR cur_all_str_ver
20147                 IS
20148                   SELECT ppevs2.element_version_id
20149                 FROM pa_proj_element_versions ppevs1, pa_proj_element_versions ppevs2
20150                    WHERE ppevs1.proj_element_id = ppevs2.proj_element_id
20151                  AND ppevs1.project_id = p_project_id
20152                  AND ppevs2.project_id = p_project_id
20153                  AND ppevs1.element_version_id = p_structure_version_id
20154                  AND ppevs1.object_type = 'PA_STRUCTURES'
20155                  AND ppevs2.object_type = 'PA_STRUCTURES'
20156                  ;
20157             BEGIN
20158                 FOR cur_all_str_ver_rec IN cur_all_str_ver LOOP
20159                     IF  cur_all_str_ver_rec.element_version_id IS NOT NULL THEN
20160                         -- Check if the sructure version to be processed corresponds to the WORKPLAN structure.
20161                         -- If yes, do the processing required for the workplan version.
20162                         OPEN cur_structure_type(p_project_id, cur_all_str_ver_rec.element_version_id, 'WORKPLAN');
20163                         fetch cur_structure_type INTO l_structure_type_flag;
20164                         CLOSE cur_structure_type;
20165 
20166                         IF nvl(l_structure_type_flag,'N') = 'Y' THEN
20167                             IF l_debug_mode = 'Y' THEN
20168                                 pa_debug.write(G_PKG_NAME, 'Calling PROCESS_TASK_WEIGHTAGE in Copy Project Mode', 3);
20169                             END IF;
20170 
20171                             pa_proj_task_struc_pub.PROCESS_TASK_WEIGHTAGE(
20172                                 p_project_id            => p_project_id
20173                                 ,p_structure_version_id  => p_structure_version_id
20174                                 ,x_return_status         => x_return_status
20175                                 ,x_msg_count             => x_msg_count
20176                                 ,x_msg_data              => x_msg_data
20177                                 );
20178 
20179                             IF l_debug_mode = 'Y' THEN
20180                                 pa_debug.write(G_PKG_NAME, 'After PROCESS_TASK_WEIGHTAGE in Copy Project Mode  x_return_status='|| x_return_status, 3);
20181                             END IF;
20182 
20183                             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20184                                 Raise Invalid_Arg_Exc_WP;
20185                             END IF;
20186                         END IF;
20187                     END IF;
20188                 END LOOP;
20189 
20190                 -- Begin Bug # 4611373.
20191                 --set the PJI global flag to NULL before calling pji wbsmant for
20192                 --indent/outdent/copy/move
20193                  PA_TASK_PUB1.G_CALL_PJI_ROLLUP := null;
20194 
20195                  BEGIN
20196                  --both working version
20197                     IF l_debug_mode = 'Y' THEN
20198                             pa_debug.write(G_PKG_NAME, 'Calling WBS_MAINT in UPDATE mode', 3);
20199                         END IF;
20200 
20201                         PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT(
20202                         p_new_struct_ver_id => p_structure_version_id
20203                         ,p_old_struct_ver_id => p_structure_version_id
20204                         ,p_project_id => p_project_id
20205                         ,p_online_flag => l_online_flag
20206                         ,p_calling_context => p_calling_context -- 4392189
20207                         ,p_rerun_flag => p_rerun_flag --bug 4589289
20208                         ,x_request_id => l_request_id
20209                         ,x_processing_code => l_proc_code
20210                         ,x_msg_code => l_msg_Code
20211                         ,x_return_status => x_return_status
20212                         ,x_online_flag => l_out_online_flag -- 4392189
20213                         );
20214 
20215                         IF l_debug_mode = 'Y' THEN
20216                             pa_debug.write(G_PKG_NAME, 'After WBS_MAINT in UPDATE mode  x_return_status='
20217                                                             || x_return_status, 3);
20218                         END IF;
20219 
20220                 EXCEPTION
20221                         WHEN OTHERS THEN
20222                             fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
20223                                                     p_procedure_name => 'PROCESS_WBS_UPDATES',
20224                                                         p_error_text     => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT
20225                                                                                      Failed in Update Mode: SQLERRM='||SQLERRM,1,240));
20226                                                         RAISE Invalid_Arg_Exc_WP;
20227                 END;
20228 
20229                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20230                     Raise Invalid_Arg_Exc_WP;
20231                 END IF;
20232                 -- End Bug # 4611373.
20233 
20234             END;
20235         END IF;  --end bug 3035902 maansari
20236     END IF; -- (if p_calling_mode = 'APPLY_PROGRESS') then -- Fix for Bug # 4262985.
20237 
20238     -- Mark the structure version as no pending wbs updates.
20239     pa_proj_task_struc_pub.set_update_wbs_flag(
20240            p_project_id            => p_project_id
20241           ,p_structure_version_id  => p_structure_version_id
20242           ,p_update_wbs_flag       => 'N'
20243           ,x_return_status         => x_return_status
20244           ,x_msg_count             => x_msg_count
20245           ,x_msg_data              => x_msg_data
20246           );
20247 
20248     IF l_debug_mode = 'Y' THEN
20249         pa_debug.write(G_PKG_NAME, 'After set_update_wbs_flag x_return_status='|| x_return_status, 3);
20250     END IF;
20251 
20252     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20253         Raise Invalid_Arg_Exc_WP;
20254     END IF;
20255 
20256     IF p_commit = FND_API.G_TRUE THEN
20257         commit;
20258     END IF;
20259 
20260     IF l_debug_mode = 'Y' THEN
20261         pa_debug.write(G_PKG_NAME, 'Exiting PROCESS_WBS_UPDATES', l_debug_level3);
20262         pa_debug.reset_curr_function;
20263     END IF;
20264 EXCEPTION
20265 
20266 WHEN Invalid_Arg_Exc_WP THEN
20267 
20268      x_return_status := FND_API.G_RET_STS_ERROR;
20269      l_msg_count := FND_MSG_PUB.count_msg;
20270 
20271      IF cur_structure_type%ISOPEN THEN
20272           CLOSE cur_structure_type;
20273      END IF;
20274 
20275      IF l_msg_count = 1 and x_msg_data IS NULL THEN
20276           PA_INTERFACE_UTILS_PUB.get_messages
20277               (p_encoded        => FND_API.G_TRUE
20278               ,p_msg_index      => 1
20279               ,p_msg_count      => l_msg_count
20280               ,p_msg_data       => l_msg_data
20281               ,p_data           => l_data
20282               ,p_msg_index_out  => l_msg_index_out);
20283           x_msg_data := l_data;
20284           x_msg_count := l_msg_count;
20285      ELSE
20286           x_msg_count := l_msg_count;
20287      END IF;
20288      IF l_debug_mode = 'Y' THEN
20289           pa_debug.reset_curr_function;
20290      END IF;
20291 
20292      IF p_commit = FND_API.G_TRUE THEN
20293           rollback to process_wbs_updates;
20294      END IF;
20295 
20296      RETURN;
20297 
20298 WHEN others THEN
20299 
20300      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20301      x_msg_count     := 1;
20302      x_msg_data      := SQLERRM;
20303 
20304      IF cur_structure_type%ISOPEN THEN
20305           CLOSE cur_structure_type;
20306      END IF;
20307 
20308      FND_MSG_PUB.add_exc_msg
20309                    ( p_pkg_name        => 'PA_PROJ_TASK_STRUC_PUB'
20310                     ,p_procedure_name  => 'PROCESS_WBS_UPDATES'
20311                     ,p_error_text      => x_msg_data);
20312 
20313      IF l_debug_mode = 'Y' THEN
20314           pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
20315           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20316                               l_debug_level5);
20317           pa_debug.reset_curr_function;
20318      END IF;
20319 
20320      IF p_commit = FND_API.G_TRUE THEN
20321           rollback to process_wbs_updates;
20322      END IF;
20323 
20324      RAISE;
20325 END PROCESS_WBS_UPDATES;
20326 
20327 /*==================================================================
20328    This API calculates the Task Weightages based on the Task Progress
20329    Weighting Basis of  the project. This API will be called only when
20330    the Weighting Basis is either Duration or Effort. The basic strategy
20331    used in the API is to query up all the tasks of a structure version
20332    and identify the summed duration of all the tasks parents by doing
20333    minimal PLSQL processing. Once the summed duration of the parent is
20334    identified, the weighting percentage of the task can be easily
20335    identified.
20336    Bug 3010538 : New API for the Task Weighting Enhancement.
20337  ==================================================================*/
20338 
20339 PROCEDURE PROCESS_TASK_WEIGHTAGE
20340    (  p_api_version_number    IN   NUMBER
20341      ,p_commit                IN   VARCHAR2
20342      ,p_init_msg_list         IN   VARCHAR2
20343      ,p_calling_context       IN   VARCHAR2
20344      ,p_project_id            IN   pa_projects_all.project_id%TYPE
20345      ,p_structure_version_id  IN   pa_proj_element_versions.element_version_id%TYPE
20346      ,x_return_status         OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
20347      ,x_msg_count             OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
20348      ,x_msg_data              OUT  NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
20349 AS
20350 
20351 -- Type declarations local to this Procedure.
20352 
20353 -- This record contains the summary information of the child tasks for a parent task.
20354 TYPE CHILD_INFO_REC IS RECORD
20355 (
20356       summed_effort           pa_proj_elem_ver_schedule.planned_effort%TYPE
20357      ,summed_duration         pa_proj_elem_ver_schedule.duration%TYPE
20358      ,child_count             Number
20359      ,cum_alloted_weightage   pa_object_relationships.weighting_percentage%TYPE
20360      ,processed_child_count   Number
20361 -- Following added for bug 3053472
20362      ,loop_count              Number
20363      ,residual_task_count     Number
20364      ,adj_direction           Number -- This will be +1 / -1
20365 );
20366 
20367 TYPE CHILD_INFO_TBL IS TABLE OF CHILD_INFO_REC
20368      INDEX BY BINARY_INTEGER;
20369 
20370 TYPE prog_enable_flag_tbl IS TABLE OF pa_task_types.prog_entry_enable_flag%TYPE
20371      INDEX BY BINARY_INTEGER;
20372 
20373 TYPE object_rel_id_tbl  IS TABLE OF pa_object_relationships.object_relationship_id%TYPE
20374      INDEX BY BINARY_INTEGER;
20375 
20376 TYPE parent_task_ver_id_tbl IS TABLE OF pa_object_relationships.object_id_from1%TYPE --pa_proj_element_versions.element_version_id%TYPE  3746912
20377      INDEX BY BINARY_INTEGER;
20378 
20379 TYPE duration_tbl IS TABLE OF pa_proj_elem_ver_schedule.duration%TYPE
20380      INDEX BY BINARY_INTEGER;
20381 
20382 TYPE effort_tbl IS TABLE OF pji_xbs_plans_v.labor_effort%TYPE --pa_proj_elem_ver_schedule.planned_effort%TYPE  3746912
20383      INDEX BY BINARY_INTEGER;
20384 
20385 TYPE task_weightage_tbl IS TABLE OF pa_object_relationships.weighting_percentage%TYPE
20386      INDEX BY BINARY_INTEGER;
20387 -- End of Type Declarations.
20388 
20389 
20390 -- Cursor Declarations.
20391 -- This cursor fetches the duration, effort, relationship id between the task and its parent
20392 -- and progress entry enable flag for the task type associated with the task version. This
20393 -- info is necessary for calculating the task weightage of the tasks.
20394 CURSOR cur_task_info(c_project_id pa_projects_all.project_id%TYPE,
20395                      c_structure_version_id pa_proj_element_versions.element_version_id%TYPE
20396                      ,c_plan_version_id NUMBER   --bug 4726889
20397                       )
20398 IS
20399 Select rel.object_relationship_id,
20400        rel.object_id_from1,
20401 --       NVL(pfxat.labor_hours,0) + NVL(pfxat.equipment_hours,0),
20402        NVL(pxpv.labor_effort,0) + NVL(pxpv.equipment_effort,0),
20403        sch.duration,
20404        ptt.prog_entry_enable_flag
20405  from  pa_proj_element_versions  ver,
20406        pa_object_relationships   rel,
20407        pa_proj_elem_ver_schedule sch,
20408        pa_proj_elements          ele,
20409        pa_task_types             ptt,
20410        pji_xbs_plans_v           pxpv
20411 --       pji_fm_xbs_accum_tmp1     pfxat
20412 where  ver.project_id                  = c_project_id
20413   and  ver.parent_structure_version_id = c_structure_version_id
20414   and  ver.object_type                 = 'PA_TASKS'
20415   and  ver.element_version_id          = rel.object_id_to1
20416   and  rel.relationship_type           = 'S'
20417   and  rel.relationship_subtype        in ( 'STRUCTURE_TO_TASK','TASK_TO_TASK')
20418   and  sch.element_version_id          = ver.element_version_id
20419   and  sch.project_id                  = c_project_id
20420   and  ele.proj_element_id             = ver.proj_element_id
20421   and  ptt.object_type                 = 'PA_TASKS'              /* bug 3279978 FP M Enhancement */
20422   and  ele.type_id                     = ptt.task_type_id
20423   and  pxpv.project_id              (+)= ver.project_id
20424   and  pxpv.structure_version_id    (+)= ver.parent_structure_version_id
20425   and  pxpv.proj_element_id         (+)= ver.proj_element_id
20426   and  pxpv.plan_version_id         (+)= c_plan_version_id     --bug 4726889
20427 --  and  pfxat.project_id             (+)= ver.project_id
20428 --  and  pfxat.project_element_id     (+)= ver.proj_element_id
20429 --  and  pfxat.struct_version_id      (+)= ver.parent_structure_version_id
20430 --  and  pfxat.calendar_type          (+)= 'A'
20431 ;
20432 
20433 -- TWUT
20434 -- This cursor is when fetched will lock all the task versions of the structure version.
20435 CURSOR cur_task_ver_lock(c_project_id pa_projects_all.project_id%TYPE,
20436                          c_structure_version_id pa_proj_element_versions.element_version_id%TYPE)
20437 IS
20438 select 'X'
20439 from   pa_proj_element_versions  ver,
20440        pa_proj_elements          ele,
20441        pa_task_types             ptt
20442 where  ver.project_id                        = c_project_id
20443   and  ver.parent_structure_version_id       = c_structure_version_id
20444   and  ver.object_type                       = 'PA_TASKS'
20445   and  ele.proj_element_id                   = ver.proj_element_id
20446   and  ele.type_id                           = ptt.task_type_id
20447   and ptt.object_type                        = 'PA_TASKS'           /* bug 3279978 FP M Enhancement */
20448   and  nvl(ptt.prog_entry_enable_flag,'N')   = 'Y'
20449 for update of ver.record_version_number NOWAIT;
20450 -- End of Cursor Declarations.
20451 
20452 -- Procedure level local variables declaration
20453 
20454 l_child_info_tbl         child_info_tbl;
20455 l_object_rel_id_tbl      object_rel_id_tbl;
20456 l_parent_task_ver_id_tbl parent_task_ver_id_tbl;
20457 l_duration_tbl           duration_tbl;
20458 l_effort_tbl             effort_tbl;
20459 
20460 l_task_weighting_basis   pa_proj_progress_attr.task_weight_basis_code%TYPE;
20461 
20462 L_BASIS_MANUAL           CONSTANT pa_proj_progress_attr.task_weight_basis_code%TYPE := 'MANUAL';
20463 L_BASIS_EFFORT           CONSTANT pa_proj_progress_attr.task_weight_basis_code%TYPE := 'EFFORT';
20464 L_BASIS_DURATION         CONSTANT pa_proj_progress_attr.task_weight_basis_code%TYPE := 'DURATION';
20465 
20466 -- End Procedure level local variables declaration
20467 
20468 -- Standard local variable declaration.
20469 l_msg_count                     NUMBER := 0;
20470 l_data                          VARCHAR2(2000);
20471 l_msg_data                      VARCHAR2(2000);
20472 l_msg_index_out                 NUMBER;
20473 l_debug_mode                    VARCHAR2(1);
20474 
20475 l_debug_level2                   CONSTANT NUMBER := 2;
20476 l_debug_level3                   CONSTANT NUMBER := 3;
20477 l_debug_level4                   CONSTANT NUMBER := 4;
20478 l_debug_level5                   CONSTANT NUMBER := 5;
20479 
20480 l_plan_version_id                NUMBER;   --bug 4726889
20481 
20482 BEGIN
20483      IF p_commit = FND_API.G_TRUE THEN
20484           savepoint process_task_weightage;
20485      END IF;
20486 
20487      IF p_init_msg_list = FND_API.G_TRUE THEN
20488           FND_MSG_PUB.initialize;
20489      END IF;
20490 
20491      x_msg_count := 0;
20492      x_return_status := FND_API.G_RET_STS_SUCCESS;
20493      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
20494 
20495      IF l_debug_mode = 'Y' THEN
20496           pa_debug.g_err_stage:= 'Entering PROCESS_TASK_WEIGHTAGE';
20497           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20498                                    l_debug_level3);
20499 
20500           pa_debug.set_curr_function( p_function   => 'PROCESS_TASK_WEIGHTAGE',
20501                                       p_debug_mode => l_debug_mode );
20502      END IF;
20503 
20504      -- Check for business rules violations
20505      IF l_debug_mode = 'Y' THEN
20506           pa_debug.g_err_stage:= 'Validating input parameters';
20507           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20508                                      l_debug_level3);
20509           pa_debug.g_err_stage:= 'Input Parameter Values';
20510           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20511                                      l_debug_level3);
20512           pa_debug.g_err_stage:= 'Project Id : ' || p_project_id;
20513           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20514                                      l_debug_level3);
20515           pa_debug.g_err_stage:= 'Structure Version Id : ' || p_structure_version_id;
20516           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20517                                      l_debug_level3);
20518           pa_debug.g_err_stage:= 'p_calling_context : ' || p_calling_context;
20519           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20520                                      l_debug_level3);
20521      END IF;
20522 
20523      IF (p_project_id IS NULL) OR
20524         (p_structure_version_id IS NULL)
20525      THEN
20526           PA_UTILS.ADD_MESSAGE
20527                 (p_app_short_name => 'PA',
20528                   p_msg_name      => 'PA_INV_PARAM_PASSED');
20529           RAISE Invalid_Arg_Exc_WP;
20530      END IF;
20531 
20532      -- Delete the data in plsql tables.
20533      l_child_info_tbl.delete;
20534      l_object_rel_id_tbl.delete;
20535      l_duration_tbl.delete;
20536      l_effort_tbl.delete;
20537      l_parent_task_ver_id_tbl.delete;
20538 
20539 
20540      -- Obtain the task weighting basis and do nothing if the basis is MANUAL and throw error if it is NULL.
20541      -- This is a redundant check incorporated just to ensure no processing is done in case the api
20542      -- is wrongly called.
20543      l_task_weighting_basis := pa_progress_utils.get_task_weighting_basis(p_project_id => p_project_id);
20544 
20545      IF l_task_weighting_basis is NULL THEN
20546           IF l_debug_mode = 'Y' THEN
20547                pa_debug.g_err_stage:= 'PROCESS_TASK_WEIGHTAGE API has been called when task weighting basis is NULL';
20548                pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
20549           END IF;
20550           RAISE Invalid_Arg_Exc_WP;
20551      END IF;
20552 
20553      IF l_task_weighting_basis = L_BASIS_MANUAL THEN
20554           IF l_debug_mode = 'Y' THEN
20555                pa_debug.g_err_stage:= 'PROCESS_TASK_WEIGHTAGE API has been called when task weighting basis is MANUAL';
20556                pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20557                                         l_debug_level3);
20558                pa_debug.reset_curr_function;
20559           END IF;
20560           RETURN;
20561      END IF;
20562 
20563      -- Lock the structure version record in pa_proj_element_versions table.
20564      -- NEED TO REVISIT THIS LOGIC.
20565      -- TWUT. Previously had a select to lock - but it lead to exact fetch
20566      -- returned more than one row exception. Changed to cursor.
20567      DECLARE
20568           l_dummy   VARCHAR2(1);
20569      BEGIN
20570           open cur_task_ver_lock(p_project_id,p_structure_version_id);
20571           fetch cur_task_ver_lock into l_dummy;
20572           close cur_task_ver_lock;
20573      EXCEPTION
20574           WHEN OTHERS THEN
20575                IF SQLCODE = -54 THEN
20576                -- If the record have already been locked, then the sql code would be -54.
20577                    PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
20578                                         p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
20579                    RAISE Invalid_Arg_Exc_WP;
20580                ELSE
20581                   raise;
20582                END IF;
20583      END;
20584 
20585     --bug 4726889 performance fix to provide plan version id in the cursor cur_task_info
20586      BEGIN
20587          IF l_debug_mode = 'Y' THEN
20588             pa_debug.write(G_PKG_NAME, 'Calling Pa_Fp_wp_gen_amt_utils.get_wp_version_id', 3);
20589          END IF;
20590          l_plan_version_id := Pa_Fp_wp_gen_amt_utils.get_wp_version_id(
20591                           p_project_id        => p_project_id,
20592                           p_plan_type_id      => -1,
20593                           p_proj_str_ver_id   => p_structure_version_id) ;
20594 
20595          IF l_debug_mode = 'Y' THEN
20596             pa_debug.write(G_PKG_NAME, 'l_plan_version_id='||l_plan_version_id, 3);
20597          END IF;
20598 
20599       EXCEPTION
20600       WHEN OTHERS THEN
20601                 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
20602                    p_procedure_name => 'PROCESS_TASK_WEIGHTAGE',
20603                    p_error_text => SUBSTRB('Call of  Pa_Fp_wp_gen_amt_utils.get_wp_version_id is failed='||SQLERRM,1,120));
20604                  RAISE Invalid_Arg_Exc_WP;
20605 
20606        END;
20607      --bug 4726889
20608 
20609      -- The first part of this procedure reads the task version records of the structure version
20610      -- in batches and calculates the summed duration or the summed effort of all the parent tasks.
20611      -- These will be used in the second part of the api to calculate the weightage of the individual
20612      -- tasks.
20613      DECLARE
20614           l_object_rel_id_fetch_tbl      object_rel_id_tbl;
20615           l_parent_task_ver_id_fetch_tbl parent_task_ver_id_tbl;
20616           l_duration_fetch_tbl           duration_tbl;
20617           l_effort_fetch_tbl             effort_tbl;
20618           l_prog_enable_flag_fetch_tbl   prog_enable_flag_tbl;
20619 
20620           l_plsql_max_array_size         CONSTANT NUMBER  := 200; -- limiting the max fetch size
20621           l_task_count                   NUMBER := 0;
20622           l_parent_id                    pa_proj_element_versions.element_version_id%TYPE;
20623      BEGIN
20624           OPEN cur_task_info(p_project_id,p_structure_version_id
20625                             ,l_plan_version_id); --4726889
20626           LOOP
20627                FETCH  cur_task_info BULK COLLECT INTO
20628                              l_object_rel_id_fetch_tbl
20629                             ,l_parent_task_ver_id_fetch_tbl
20630                             ,l_effort_fetch_tbl
20631                             ,l_duration_fetch_tbl
20632                             ,l_prog_enable_flag_fetch_tbl
20633                LIMIT  l_plsql_max_array_size;
20634 
20635                IF l_debug_mode = 'Y' THEN
20636                     pa_debug.g_err_stage:= 'Fetched ' || cur_task_info%rowcount || ' records for processing';
20637                     pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
20638                END IF;
20639 
20640                IF nvl(l_object_rel_id_fetch_tbl.last,0) > 0 THEN -- only if something is fetched do the processing
20641                     FOR i in l_object_rel_id_fetch_tbl.first..l_object_rel_id_fetch_tbl.last LOOP
20642                          -- Check if progress is enabled for the current task. Do the processing only
20643                          -- if progress is enabled. If not just skip the task.
20644 
20645                          IF nvl(l_prog_enable_flag_fetch_tbl(i),'N') = 'Y' THEN
20646                               l_task_count := l_task_count + 1;
20647                               l_parent_id  := l_parent_task_ver_id_fetch_tbl(i);
20648 
20649                               -- Copy the value in the fetch table to the complimentary table.
20650                               l_object_rel_id_tbl(l_task_count)      := l_object_rel_id_fetch_tbl(i);
20651                               l_parent_task_ver_id_tbl(l_task_count) := l_parent_task_ver_id_fetch_tbl(i);
20652 
20653                               -- Set to null the parent task ver record if it doesnot exist.
20654                               IF NOT l_child_info_tbl.exists(l_parent_id) THEN
20655                                    l_child_info_tbl(l_parent_id) := NULL;
20656                               END IF;
20657 
20658                               -- Calculate the summed duration and effort for the parent.
20659                               IF l_task_weighting_basis = L_BASIS_DURATION THEN
20660                                    l_child_info_tbl(l_parent_id).summed_duration :=
20661                                         nvl(l_child_info_tbl(l_parent_id).summed_duration,0) + nvl(l_duration_fetch_tbl(i),0);
20662 
20663                                    l_duration_tbl(l_task_count) := nvl(l_duration_fetch_tbl(i),0);
20664                               ELSIF l_task_weighting_basis = L_BASIS_EFFORT THEN
20665                                    l_child_info_tbl(l_parent_id).summed_effort :=
20666                                         nvl(l_child_info_tbl(l_parent_id).summed_effort,0) + nvl(l_effort_fetch_tbl(i),0);
20667 
20668                                    l_effort_tbl(l_task_count) := nvl(l_effort_fetch_tbl(i),0);
20669                               END IF;
20670                               -- Increment the child count for the parent.
20671                               l_child_info_tbl(l_parent_id).child_count :=
20672                                                   nvl(l_child_info_tbl(l_parent_id).child_count,0)+1;
20673                          END IF;
20674 
20675                     END LOOP;
20676                END IF;
20677 
20678                EXIT WHEN nvl(l_object_rel_id_fetch_tbl.last,0) < l_plsql_max_array_size;
20679           END LOOP;
20680           CLOSE cur_task_info;
20681           IF l_debug_mode = 'Y' THEN
20682                pa_debug.g_err_stage:= 'Done with Part 1 of the Procedure';
20683                pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
20684           END IF;
20685      END;
20686 
20687      -- We have the required info to calculate the task weightages in PLSQL tables.
20688      -- Use them and calculate the weightage for each of the task.
20689      DECLARE
20690           l_task_weightage_tbl     task_weightage_tbl;
20691 
20692           l_parent_id              pa_proj_element_versions.element_version_id%TYPE;
20693           l_task_weightage         pa_object_relationships.weighting_percentage%TYPE;
20694 
20695           --Bug 3053472 - remaining weightage is no more required.
20696           --l_remaining_weightage    pa_object_relationships.weighting_percentage%TYPE;
20697 
20698           l_residual_weightage     pa_object_relationships.weighting_percentage%TYPE;
20699      BEGIN
20700           IF nvl(l_object_rel_id_tbl.last,0) > 0 THEN
20701                FOR i in l_object_rel_id_tbl.first..l_object_rel_id_tbl.last LOOP
20702                     l_parent_id := l_parent_task_ver_id_tbl(i);
20703 
20704                     /* Bug 3053472. Count only the tasks that have non zero task weightage.
20705                     l_child_info_tbl(l_parent_id).processed_child_count :=
20706                               nvl(l_child_info_tbl(l_parent_id).processed_child_count,0) + 1;
20707                     remaining weightage is not required any more.
20708                     l_remaining_weightage := 100 - nvl(l_child_info_tbl(l_parent_id).cum_alloted_weightage,0);
20709                     */
20710                     -- If the basis is duration, obtain the task weightage as ratio of the duration of the task
20711                     -- and the summed duration of the parent.
20712                     IF l_task_weighting_basis = L_BASIS_DURATION THEN
20713 
20714                          IF l_duration_tbl(i) = 0 AND l_child_info_tbl(l_parent_id).summed_duration = 0 THEN
20715                               l_task_weightage := 1 / l_child_info_tbl(l_parent_id).child_count * 100;
20716                          ELSE
20717                               l_task_weightage := l_duration_tbl(i) / l_child_info_tbl(l_parent_id).summed_duration * 100;
20718                          END IF;
20719 
20720                     -- If the basis is effort, obtain the task weightage as ratio of the effort of the task
20721                     -- and the summed effort of the parent.
20722                     -- The case where the effort of the task is 0 is taken care by setting the weightage to 0
20723                     -- if the summed effort is not 0 and calculated as mentioned initially if the summed effort
20724                     -- is 0.
20725                     ELSIF l_task_weighting_basis = L_BASIS_EFFORT THEN
20726 
20727                          IF l_effort_tbl(i) = 0 AND l_child_info_tbl(l_parent_id).summed_effort = 0 THEN
20728                               l_task_weightage := 1 / l_child_info_tbl(l_parent_id).child_count * 100;
20729                          ELSE
20730                               l_task_weightage := l_effort_tbl(i) / l_child_info_tbl(l_parent_id).summed_effort * 100;
20731                          END IF;
20732 
20733                     END IF;
20734                     /* Bug 3053472. Donot take care of the rounding in this pass.
20735                     -- Take care of the rounding issue.
20736                     IF abs(l_task_weightage - l_remaining_weightage) <= 0.05 THEN
20737                          l_task_weightage := l_remaining_weightage;
20738                     END IF;
20739                     */
20740                     -- Bug 3053472. Increment the task count only if the task weightage of the task <> 0.
20741                     IF l_task_weightage > 0 THEN
20742                          l_child_info_tbl(l_parent_id).processed_child_count :=
20743                                    nvl(l_child_info_tbl(l_parent_id).processed_child_count,0) + 1;
20744                     END IF;
20745 
20746                     l_child_info_tbl(l_parent_id).cum_alloted_weightage := nvl(l_child_info_tbl(l_parent_id).cum_alloted_weightage,0)
20747                                                                                      + l_task_weightage;
20748                     l_task_weightage_tbl(i) := l_task_weightage;
20749                END LOOP;
20750 
20751                -- Bug 3053472. Loop over the plsql table once more to process the residual task weightage of
20752                -- the tasks. The logic used is to distribute the residual task weightage to as many tasks as
20753                -- possible so that the task weightage is uniform. The updates in the bug gives more details
20754                -- on the logic.
20755                FOR i in l_object_rel_id_tbl.first..l_object_rel_id_tbl.last LOOP
20756                     l_parent_id := l_parent_task_ver_id_tbl(i);
20757 
20758                     IF l_child_info_tbl(l_parent_id).loop_count is NULL THEN
20759                     -- This means that this is the first task that is being processed for this parent.
20760                     -- So calculate how much is the residual weightage.
20761                          l_residual_weightage := ( 100 - l_child_info_tbl(l_parent_id).cum_alloted_weightage ) * 100;
20762                          l_child_info_tbl(l_parent_id).loop_count :=
20763                               floor(abs(l_residual_weightage) / l_child_info_tbl(l_parent_id).processed_child_count);
20764                          l_child_info_tbl(l_parent_id).residual_task_count :=
20765                               mod(abs(l_residual_weightage) , l_child_info_tbl(l_parent_id).processed_child_count);
20766 
20767                          -- The adj_direction is set to -1 if the task weigtage has to be adjusted by reducing some amount
20768                          -- from the tasks. otherwise the adj_direction is 1.
20769                          IF l_residual_weightage < 0 THEN
20770                               l_child_info_tbl(l_parent_id).adj_direction := -1;
20771                          ELSE
20772                               l_child_info_tbl(l_parent_id).adj_direction :=  1;
20773                          END IF;
20774                     END IF;
20775 
20776                     IF l_task_weightage_tbl(i) > 0 THEN
20777                          IF l_child_info_tbl(l_parent_id).residual_task_count > 0 THEN
20778                               l_task_weightage_tbl(i) := l_task_weightage_tbl(i) +
20779                                    (l_child_info_tbl(l_parent_id).loop_count + 1) * 0.01 * l_child_info_tbl(l_parent_id).adj_direction;
20780 
20781                               l_child_info_tbl(l_parent_id).residual_task_count :=
20782                                    l_child_info_tbl(l_parent_id).residual_task_count - 1;
20783                          ELSE
20784                               l_task_weightage_tbl(i) := l_task_weightage_tbl(i) +
20785                                    l_child_info_tbl(l_parent_id).loop_count * 0.01 * l_child_info_tbl(l_parent_id).adj_direction;
20786                          END IF;
20787                     END IF;
20788                END LOOP;
20789 
20790                -- Do a bulk update into pa_object_relationships table as the weightage has
20791                -- been calculated for all the tasks.
20792                FORALL i in l_object_rel_id_tbl.first..l_object_rel_id_tbl.last
20793                     UPDATE pa_object_relationships
20794                     SET    weighting_percentage   = l_task_weightage_tbl(i)
20795                     WHERE  object_relationship_id = l_object_rel_id_tbl(i);
20796                IF l_debug_mode = 'Y' THEN
20797                     pa_debug.g_err_stage:= 'Updated ' || sql%rowcount || ' Records in PA_OBJECT_RELATIONSHIPS';
20798                     pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
20799                END IF;
20800           END IF;
20801      END;
20802 
20803      IF p_commit = FND_API.G_TRUE THEN
20804           commit;
20805      END IF;
20806 
20807      IF l_debug_mode = 'Y' THEN
20808           pa_debug.g_err_stage:= 'Exiting PROCESS_TASK_WEIGHTAGE';
20809           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20810                                    l_debug_level3);
20811           pa_debug.reset_curr_function;
20812      END IF;
20813 EXCEPTION
20814 
20815 WHEN Invalid_Arg_Exc_WP THEN
20816 
20817      x_return_status := FND_API.G_RET_STS_ERROR;
20818      l_msg_count := FND_MSG_PUB.count_msg;
20819 
20820      IF cur_task_info%ISOPEN THEN
20821           CLOSE cur_task_info;
20822      END IF;
20823 
20824      IF l_msg_count = 1 and x_msg_data IS NULL THEN
20825           PA_INTERFACE_UTILS_PUB.get_messages
20826               (p_encoded        => FND_API.G_TRUE
20827               ,p_msg_index      => 1
20828               ,p_msg_count      => l_msg_count
20829               ,p_msg_data       => l_msg_data
20830               ,p_data           => l_data
20831               ,p_msg_index_out  => l_msg_index_out);
20832           x_msg_data := l_data;
20833           x_msg_count := l_msg_count;
20834      ELSE
20835           x_msg_count := l_msg_count;
20836      END IF;
20837      IF l_debug_mode = 'Y' THEN
20838           pa_debug.reset_curr_function;
20839      END IF;
20840 
20841      IF p_commit = FND_API.G_TRUE THEN
20842           rollback to process_task_weightage;
20843      END IF;
20844 
20845      RETURN;
20846 
20847 WHEN others THEN
20848 
20849      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20850      x_msg_count     := 1;
20851      x_msg_data      := SQLERRM;
20852 
20853      IF cur_task_info%ISOPEN THEN
20854           CLOSE cur_task_info;
20855      END IF;
20856 
20857      FND_MSG_PUB.add_exc_msg
20858                    ( p_pkg_name        => 'PA_PROJ_TASK_STRUC_PUB'
20859                     ,p_procedure_name  => 'PROCESS_TASK_WEIGHTAGE'
20860                     ,p_error_text      => x_msg_data);
20861 
20862      IF l_debug_mode = 'Y' THEN
20863           pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
20864           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20865                               l_debug_level5);
20866           pa_debug.reset_curr_function;
20867      END IF;
20868 
20869      IF p_commit = FND_API.G_TRUE THEN
20870           rollback to process_task_weightage;
20871      END IF;
20872 
20873      RAISE;
20874 END PROCESS_TASK_WEIGHTAGE;
20875 
20876 /*==================================================================
20877    This API will be called to set the update_required_flag to Y or N.
20878    The default value of the flag is Y. The passed in flag value is
20879    used to update the structure version record in elem_ver_structure
20880    table.
20881    Bug 3010538 : New API for the Task Weighting Enhancement.
20882  ==================================================================*/
20883 
20884 PROCEDURE SET_UPDATE_WBS_FLAG
20885    (  p_api_version_number    IN   NUMBER
20886      ,p_commit                IN   VARCHAR2
20887      ,p_init_msg_list         IN   VARCHAR2
20888      ,p_calling_context       IN   VARCHAR2
20889      ,p_project_id            IN   pa_projects_all.project_id%TYPE
20890      ,p_structure_version_id  IN   pa_proj_element_versions.element_version_id%TYPE
20891      ,p_update_wbs_flag       IN   pa_proj_elem_ver_structure.process_update_wbs_flag%TYPE
20892      ,x_return_status         OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
20893      ,x_msg_count             OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
20894      ,x_msg_data              OUT  NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
20895 AS
20896 
20897 l_msg_count                     NUMBER := 0;
20898 l_data                          VARCHAR2(2000);
20899 l_msg_data                      VARCHAR2(2000);
20900 l_msg_index_out                 NUMBER;
20901 l_debug_mode                    VARCHAR2(1);
20902 
20903 l_debug_level2                   CONSTANT NUMBER := 2;
20904 l_debug_level3                   CONSTANT NUMBER := 3;
20905 l_debug_level4                   CONSTANT NUMBER := 4;
20906 l_debug_level5                   CONSTANT NUMBER := 5;
20907 
20908 BEGIN
20909 
20910      IF p_commit = FND_API.G_TRUE THEN
20911           savepoint set_update_wbs_flag;
20912      END IF;
20913 
20914      IF p_init_msg_list = FND_API.G_TRUE THEN
20915           FND_MSG_PUB.initialize;
20916      END IF;
20917 
20918      x_msg_count := 0;
20919      x_return_status := FND_API.G_RET_STS_SUCCESS;
20920      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
20921 
20922      IF l_debug_mode = 'Y' THEN
20923           pa_debug.g_err_stage:= 'Entering SET_UPDATE_WBS_FLAG';
20924           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20925                                    l_debug_level3);
20926 
20927           pa_debug.set_curr_function( p_function   => 'SET_UPDATE_WBS_FLAG',
20928                                       p_debug_mode => l_debug_mode );
20929      END IF;
20930 
20931      -- Check for business rules violations
20932      IF l_debug_mode = 'Y' THEN
20933           pa_debug.g_err_stage:= 'Validating input parameters';
20934           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
20935 
20936           pa_debug.g_err_stage:= 'p_project_id = '|| p_project_id;
20937           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
20938 
20939           pa_debug.g_err_stage:= 'p_structure_version_id = '|| p_structure_version_id;
20940           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
20941 
20942           pa_debug.g_err_stage:= 'p_update_wbs_flag = '|| p_update_wbs_flag;
20943           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
20944      END IF;
20945 
20946      IF (p_project_id IS NULL) OR
20947         (p_structure_version_id IS NULL) OR
20948         (p_update_wbs_flag not in ('Y','N'))
20949      THEN
20950           PA_UTILS.ADD_MESSAGE
20951                 (p_app_short_name => 'PA',
20952                  p_msg_name       => 'PA_INV_PARAM_PASSED');
20953           RAISE Invalid_Arg_Exc_WP;
20954      END IF;
20955 
20956     Update pa_proj_elem_ver_structure
20957     Set    process_update_wbs_flag = p_update_wbs_flag
20958     Where  project_id              = p_project_id
20959     And    element_version_id      = p_structure_version_id;
20960 
20961      IF p_commit = FND_API.G_TRUE THEN
20962           commit;
20963      END IF;
20964 
20965      IF l_debug_mode = 'Y' THEN
20966           pa_debug.g_err_stage:= 'Exiting SET_UPDATE_WBS_FLAG';
20967           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
20968                                    l_debug_level3);
20969           pa_debug.reset_curr_function;
20970      END IF;
20971 EXCEPTION
20972 
20973 WHEN Invalid_Arg_Exc_WP THEN
20974 
20975      x_return_status := FND_API.G_RET_STS_ERROR;
20976      l_msg_count := FND_MSG_PUB.count_msg;
20977 
20978      IF l_msg_count = 1 and x_msg_data IS NULL THEN
20979           PA_INTERFACE_UTILS_PUB.get_messages
20980               (p_encoded        => FND_API.G_TRUE
20981               ,p_msg_index      => 1
20982               ,p_msg_count      => l_msg_count
20983               ,p_msg_data       => l_msg_data
20984               ,p_data           => l_data
20985               ,p_msg_index_out  => l_msg_index_out);
20986           x_msg_data := l_data;
20987           x_msg_count := l_msg_count;
20988      ELSE
20989           x_msg_count := l_msg_count;
20990      END IF;
20991      IF l_debug_mode = 'Y' THEN
20992           pa_debug.reset_curr_function;
20993      END IF;
20994 
20995      IF p_commit = FND_API.G_TRUE THEN
20996           rollback to set_update_wbs_flag;
20997      END IF;
20998 
20999      RETURN;
21000 
21001 WHEN others THEN
21002 
21003      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21004      x_msg_count     := 1;
21005      x_msg_data      := SQLERRM;
21006 
21007      FND_MSG_PUB.add_exc_msg
21008                    ( p_pkg_name        => 'PA_PROJ_TASK_STRUC_PUB'
21009                     ,p_procedure_name  => 'SET_UPDATE_WBS_FLAG'
21010                     ,p_error_text      => x_msg_data);
21011 
21012      IF l_debug_mode = 'Y' THEN
21013           pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
21014           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21015                               l_debug_level5);
21016           pa_debug.reset_curr_function;
21017      END IF;
21018 
21019      IF p_commit = FND_API.G_TRUE THEN
21020           rollback to set_update_wbs_flag;
21021      END IF;
21022 
21023      RAISE;
21024 END SET_UPDATE_WBS_FLAG;
21025 
21026 -- This API is a wrapper API called for FORMS which in turn
21027 -- calls PROCESS_WBS_UPDATES_WRP, as from FORM the remote
21028 -- package level constants FND_API.G_TRUE , FND_API.G_FLASE
21029 -- can not be reffered .
21030 
21031 PROCEDURE PROCESS_WBS_UPDATES_WRP_FORM
21032    (  p_project_id            IN   pa_projects_all.project_id%TYPE
21033      ,p_structure_version_id  IN   pa_proj_element_versions.element_version_id%TYPE
21034      ,p_pub_struc_ver_id      IN   NUMBER    := NULL
21035      ,x_return_status         OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
21036      ,x_msg_count             OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
21037      ,x_msg_data              OUT  NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
21038 AS
21039 
21040 l_msg_count                     NUMBER := 0;
21041 l_data                          VARCHAR2(2000);
21042 l_msg_data                      VARCHAR2(2000);
21043 l_msg_index_out                 NUMBER;
21044 l_debug_mode                    VARCHAR2(1);
21045 
21046 BEGIN
21047 
21048 -- Not doing the validation of input parameter
21049 -- as it is done in the the called API.
21050 
21051 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
21052        (  p_commit                => FND_API.G_TRUE
21053          ,p_calling_context       => 'UPDATE'
21054          ,p_project_id            => p_project_id
21055          ,p_structure_version_id  => p_structure_version_id
21056          ,x_return_status         => x_return_status
21057          ,x_msg_count             => x_msg_count
21058          ,x_msg_data              => x_msg_data) ;
21059 
21060      IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
21061           IF l_debug_mode = 'Y' THEN
21062              pa_debug.g_err_stage := 'Error calling concurrent wbs update process ';
21063              pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,4);
21064           END IF;
21065           Raise Invalid_Arg_Exc_WP;
21066      END IF;
21067 
21068 EXCEPTION
21069 WHEN Invalid_Arg_Exc_WP THEN
21070 
21071      x_return_status := FND_API.G_RET_STS_ERROR;
21072      l_msg_count := FND_MSG_PUB.count_msg;
21073      IF l_msg_count = 1 and x_msg_data IS NULL THEN
21074           PA_INTERFACE_UTILS_PUB.get_messages
21075               (p_encoded        => FND_API.G_TRUE
21076               ,p_msg_index      => 1
21077               ,p_msg_count      => l_msg_count
21078               ,p_msg_data       => l_msg_data
21079               ,p_data           => l_data
21080               ,p_msg_index_out  => l_msg_index_out);
21081           x_msg_data := l_data;
21082           x_msg_count := l_msg_count;
21083      ELSE
21084           x_msg_count := l_msg_count;
21085      END IF;
21086      IF l_debug_mode = 'Y' THEN
21087           pa_debug.reset_curr_function;
21088      END IF;
21089      RETURN;
21090 WHEN others THEN
21091 
21092      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21093      x_msg_count     := 1;
21094      x_msg_data      := SQLERRM;
21095 
21096      FND_MSG_PUB.add_exc_msg
21097                    ( p_pkg_name        => 'PA_PROJ_TASK_STRUC_PUB'
21098                     ,p_procedure_name  => 'PROCESS_WBS_UPDATES_WRP'
21099                     ,p_error_text      => x_msg_data);
21100 
21101      IF l_debug_mode = 'Y' THEN
21102           pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
21103           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,5);
21104           pa_debug.reset_curr_function;
21105      END IF;
21106      RAISE;
21107 END PROCESS_WBS_UPDATES_WRP_FORM ;
21108 
21109   --bug 3035902 maansari
21110 PROCEDURE call_process_WBS_updates(
21111         p_dest_project_id       IN   NUMBER
21112        ,x_return_status         OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
21113        ,x_msg_count             OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
21114        ,x_msg_data              OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
21115  ) AS
21116 
21117        CURSOR cur_strs_n_types
21118        IS
21119          SELECT ppe.proj_element_id, ppst.structure_type_id
21120            FROM pa_proj_elements ppe, pa_proj_structure_types ppst, pa_structure_types pst
21121           WHERE ppe.project_id = p_dest_project_id
21122             AND ppe.object_type = 'PA_STRUCTURES'
21123             AND ppe.proj_element_id = ppst.proj_element_id
21124             and ppst.structure_type_id = pst.structure_type_id
21125             and pst.structure_type in ('WORKPLAN','FINANCIAL')
21126           ;
21127 
21128        CURSOR cur_str_vers( c_structure_id NUMBER )
21129        IS
21130          SELECT ppevs.element_version_id
21131            FROM pa_proj_element_versions ppevs
21132           WHERE ppevs.project_id = p_dest_project_id
21133             AND ppevs.object_type = 'PA_STRUCTURES'
21134             AND ppevs.proj_element_id = c_structure_id
21135           ;
21136 
21137        l_fn_str_id          NUMBER;
21138        l_wp_str_id          NUMBER;
21139        l_fn_str_ver_id      NUMBER;
21140        l_wp_str_ver_id      NUMBER;
21141        l_task_weight_basis  PA_PROJ_PROGRESS_ATTR.task_weight_basis_code%TYPE;
21142        l_shared             VARCHAR2(1);
21143 
21144        l_msg_count                     NUMBER := 0;
21145        l_data                          VARCHAR2(2000);
21146        l_msg_data                      VARCHAR2(2000);
21147        l_msg_index_out                 NUMBER;
21148        l_debug_mode                    VARCHAR2(1);
21149    BEGIN
21150 
21151           x_msg_count := 0;
21152           x_return_status := FND_API.G_RET_STS_SUCCESS;
21153           l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
21154           l_shared := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_dest_project_id);
21155 
21156        /* The following is the simple solution for this.
21157           Update the Process_WBS_flag only for WORKPLAN enabled structures
21158           if task weighting basis is DURATION.
21159           Call the concurrent wrapper for all structure versions */
21160        l_task_weight_basis := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS( p_dest_project_id );
21161 --       IF NVL( l_task_weight_basis, 'X' ) in( 'DURATION', 'EFFORT') --3127640
21162 --      THEN
21163            FOR cur_strs_n_types_rec in cur_strs_n_types LOOP
21164               IF cur_strs_n_types_rec.structure_type_id = 1  --'WORKPLAN' structure
21165               THEN
21166                   l_wp_str_id  := cur_strs_n_types_rec.proj_element_id;
21167                   IF NVL( l_task_weight_basis, 'X' ) = 'DURATION'   --bug 3127640
21168                   THEN
21169                      --no need to update the flag in case of EFFORT or Manual bcoz
21170                        --the onlyu thing affected from quick entry is DURATRION thru dates..
21171 
21172                      UPDATE pa_proj_elem_ver_structure
21173                         SET PROCESS_UPDATE_WBS_FLAG = 'Y'
21174                       WHERE proj_element_id = cur_strs_n_types_rec.proj_element_id
21175                         AND project_id = p_dest_project_id
21176                         AND PROCESS_UPDATE_WBS_FLAG = 'N'
21177                        ;
21178                   END IF;
21179               ELSE
21180                   l_fn_str_id := cur_strs_n_types_rec.proj_element_id;
21181               END IF;
21182            END LOOP;
21183 --       END IF;
21184 
21185        IF l_shared = 'Y'
21186 --AND NVL( l_task_weight_basis, 'X' ) in( 'DURATION', 'EFFORT')  --bug 3127640
21187        THEN
21188            OPEN cur_str_vers( l_wp_str_id );
21189            FETCH cur_str_vers INTO l_wp_str_ver_id;
21190            CLOSE cur_str_vers;
21191 
21192            PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
21193                 (
21194               p_calling_context       => 'COPY_PROJECT'
21195              ,p_project_id            => p_dest_project_id
21196              ,p_structure_version_id  => l_wp_str_ver_id
21197              ,x_return_status         => x_return_status
21198              ,x_msg_count             => x_msg_count
21199              ,x_msg_data              => x_msg_data);
21200 
21201            IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
21202               IF l_debug_mode = 'Y' THEN
21203                  pa_debug.g_err_stage := 'Error calling concurrent wbs update process ';
21204                  pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,4);
21205               END IF;
21206               Raise Invalid_Arg_Exc_WP;
21207            END IF;
21208 
21209        ELSIF l_shared = 'N'
21210 --AND NVL( l_task_weight_basis, 'X' ) in( 'DURATION', 'EFFORT')   --Split then call the api twice.  --bug3127640  added 'EFFORT' in the IF clause.
21211        THEN
21212 /*
21213            OPEN cur_str_vers( l_wp_str_id );
21214            FETCH cur_str_vers INTO l_wp_str_ver_id;
21215            CLOSE cur_str_vers;
21216 */
21217            --If there are more than one working versions
21218            FOR cur_str_vers_rec in cur_str_vers( l_wp_str_id ) LOOP
21219 
21220            PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
21221                 (
21222               p_calling_context       => 'COPY_PROJECT'
21223              ,p_project_id            => p_dest_project_id
21224              ,p_structure_version_id  => cur_str_vers_rec.element_version_id
21225              ,x_return_status         => x_return_status
21226              ,x_msg_count             => x_msg_count
21227              ,x_msg_data              => x_msg_data);
21228 
21229            IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
21230               IF l_debug_mode = 'Y' THEN
21231                  pa_debug.g_err_stage := 'Error calling concurrent wbs update process ';
21232                  pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,4);
21233               END IF;
21234               Raise Invalid_Arg_Exc_WP;
21235            END IF;
21236 
21237            END LOOP;
21238 
21239 
21240            OPEN cur_str_vers( l_fn_str_id );
21241            FETCH cur_str_vers INTO l_fn_str_ver_id;
21242            --hsiu: 3305199 for bug with wp only project
21243            IF cur_str_vers%NOTFOUND THEN
21244              l_fn_str_ver_id := -1;
21245            END IF;
21246            CLOSE cur_str_vers;
21247 
21248            --hsiu: 3305199 for bug with wp only project
21249            IF l_fn_str_ver_id <> -1 THEN
21250              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
21251                 (
21252               p_calling_context       => 'COPY_PROJECT'
21253              ,p_project_id            => p_dest_project_id
21254              ,p_structure_version_id  => l_fn_str_ver_id
21255              ,x_return_status         => x_return_status
21256              ,x_msg_count             => x_msg_count
21257              ,x_msg_data              => x_msg_data);
21258 
21259              IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
21260                IF l_debug_mode = 'Y' THEN
21261                  pa_debug.g_err_stage := 'Error calling update WBS WRP ';
21262                  pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,4);
21263                END IF;
21264                Raise Invalid_Arg_Exc_WP;
21265              END IF;
21266            END IF; --hsiu: 3305199 for bug with wp only project
21267 
21268        END IF;
21269 EXCEPTION
21270 WHEN Invalid_Arg_Exc_WP THEN
21271 
21272      x_return_status := FND_API.G_RET_STS_ERROR;
21273      l_msg_count := FND_MSG_PUB.count_msg;
21274      IF l_msg_count = 1 and x_msg_data IS NULL THEN
21275           PA_INTERFACE_UTILS_PUB.get_messages
21276               (p_encoded        => FND_API.G_TRUE
21277               ,p_msg_index      => 1
21278               ,p_msg_count      => l_msg_count
21279               ,p_msg_data       => l_msg_data
21280               ,p_data           => l_data
21281               ,p_msg_index_out  => l_msg_index_out);
21282           x_msg_data := l_data;
21283           x_msg_count := l_msg_count;
21284      ELSE
21285           x_msg_count := l_msg_count;
21286      END IF;
21287      IF l_debug_mode = 'Y' THEN
21288           pa_debug.reset_curr_function;
21289      END IF;
21290      RETURN;
21291 WHEN others THEN
21292 
21293      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21294      x_msg_count     := 1;
21295      x_msg_data      := SQLERRM;
21296 
21297      FND_MSG_PUB.add_exc_msg
21298                    ( p_pkg_name        => 'PA_PROJ_TASK_STRUC_PUB'
21299                     ,p_procedure_name  => 'CALL_PROCESS_WBS_UPDATES'
21300                     ,p_error_text      => x_msg_data);
21301 
21302      IF l_debug_mode = 'Y' THEN
21303           pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
21304           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,5);
21305           pa_debug.reset_curr_function;
21306      END IF;
21307      RAISE;
21308 END call_process_WBS_updates;
21309 --End 3035902 maansari
21310 
21311 --hsiu: bug 3254091
21312 PROCEDURE Update_Current_Phase
21313 ( p_api_version_number         IN     NUMBER      := 1.0
21314  ,p_commit                     IN     VARCHAR2    := FND_API.G_FALSE
21315  ,p_init_msg_list              IN     VARCHAR2    := FND_API.G_FALSE
21316  ,p_validate_only              IN     VARCHAR2    := FND_API.G_TRUE
21317  ,p_validation_level           IN     VARCHAR2    := 100
21318  ,p_debug_mode                 IN     VARCHAR2    := 'N'
21319  ,p_max_msg_count              IN     NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
21320  ,p_user_id                    IN     NUMBER      := FND_GLOBAL.USER_ID
21321  ,p_project_id                 IN     NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
21322  ,p_project_name               IN     VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
21323  ,p_current_lifecycle_phase_id IN     NUMBER      := FND_API.G_MISS_NUM
21324  ,p_current_lifecycle_phase    IN     VARCHAR2    := FND_API.G_MISS_CHAR
21325  ,x_return_status              OUT    NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
21326  ,x_msg_count                  OUT    NOCOPY NUMBER --File.Sql.39 bug 4440895
21327  ,x_msg_data                   OUT    NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
21328 )
21329 IS
21330   CURSOR cur_get_wp_attr(c_project_id NUMBER)
21331       IS
21332     select ppwa.proj_element_id,
21333            ppwa.wp_approval_reqd_flag,
21334            ppwa.wp_auto_publish_flag,
21335            ppwa.wp_default_display_lvl,
21336            ppwa.wp_enable_version_flag,
21337            ppwa.auto_pub_upon_creation_flag,
21338            ppwa.auto_sync_txn_date_flag,
21339            ppwa.wp_approver_source_id,
21340            ppwa.wp_approver_source_type,
21341            ppwa.record_version_number,
21342            ppwa.txn_date_sync_buf_days,
21343            ppwa.lifecycle_version_id
21344       from pa_proj_workplan_attr ppwa,
21345            pa_proj_elements ppe,
21346            pa_proj_structure_types ppst
21347      where ppwa.project_id = c_project_id
21348        and ppwa.project_id = ppe.project_id
21349        and ppwa.proj_element_id = ppe.proj_element_id
21350        and ppe.proj_element_id = ppst.proj_element_id
21351        and ppst.structure_type_id = 1;
21352 
21353   l_proj_element_id           NUMBER;
21354   l_project_id                NUMBER;
21355   l_wp_approval_reqd_fg       VARCHAR2(1);
21356   l_wp_auto_publish_fg        VARCHAR2(1);
21357   l_wp_default_display_lvl    NUMBER;
21358   l_wp_enable_version_fg      VARCHAR2(1);
21359   l_auto_pub_upon_creation_fg VARCHAR2(1);
21360   l_auto_sync_txn_date_fg     VARCHAR2(1);
21361   l_wp_approver_source_id     NUMBER;
21362   l_wp_approver_source_type   NUMBER;
21363   l_record_version_number     NUMBER;
21364   l_txn_date_sync_buf_days    NUMBER;
21365   l_life_cycle_version_id     NUMBER;
21366   l_current_phase_version_id  NUMBER;
21367   API_ERROR                   EXCEPTION;
21368 
21369   l_return_status             VARCHAR2(1);
21370   l_msg_count                 NUMBER;
21371   l_msg_data                  VARCHAR2(250);
21372   l_error_msg_code            VARCHAR2(250);
21373   l_data                      VARCHAR2(250);
21374   l_msg_index_out             NUMBER;
21375 
21376 BEGIN
21377   --Clear Error Messages.
21378   IF p_init_msg_list = FND_API.G_TRUE THEN
21379           FND_MSG_PUB.initialize;
21380   END IF;
21381 
21382   --set savepoint
21383   IF p_commit = FND_API.G_TRUE THEN
21384     SAVEPOINT update_current_phase;
21385   END IF;
21386 
21387   x_msg_count := 0;
21388   x_return_status := FND_API.G_RET_STS_SUCCESS;
21389 
21390   --Project name to id Conversion
21391   IF ((p_project_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND (p_project_name IS NOT NULL)) OR
21392      ((p_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND (p_project_id IS NOT NULL)) THEN
21393     PA_PROJ_ELEMENTS_UTILS.Project_Name_Or_Id(
21394             p_project_name   => p_project_name,
21395             p_project_id     => p_project_id,
21396             x_project_id     => l_project_id,
21397             x_return_status  => l_return_status,
21398             x_error_msg_code => l_error_msg_code);
21399     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
21400       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
21401                            p_msg_name => l_error_msg_code);
21402       RAISE API_ERROR;
21403     END IF;
21404   END IF;
21405 
21406   --get existing row (need to get life cycle id);
21407   OPEN cur_get_wp_attr(l_project_id);
21408   FETCH cur_get_wp_attr INTO l_proj_element_id,
21409                              l_wp_approval_reqd_fg,
21410                              l_wp_auto_publish_fg,
21411                              l_wp_default_display_lvl,
21412                              l_wp_enable_version_fg,
21413                              l_auto_pub_upon_creation_fg,
21414                              l_auto_sync_txn_date_fg,
21415                              l_wp_approver_source_id,
21416                              l_wp_approver_source_type,
21417                              l_record_version_number,
21418                              l_txn_date_sync_buf_days,
21419                              l_life_cycle_version_id;
21420   CLOSE cur_get_wp_attr;
21421 
21422   --Current Phase name to id conversion
21423   IF ((p_current_lifecycle_phase_id <> FND_API.G_MISS_NUM) AND (p_current_lifecycle_phase_id is not NULL)) OR
21424      ((p_current_lifecycle_phase <> FND_API.G_MISS_CHAR) AND (p_current_lifecycle_phase is not NULL)) then
21425     PA_WORKPLAN_ATTR_UTILS.CHECK_LIFECYCLE_PHASE_NAME_ID
21426       ( p_lifecycle_id              => l_life_cycle_version_id
21427        ,p_current_lifecycle_phase_id        => p_current_lifecycle_phase_id
21428        ,p_current_lifecycle_phase           => p_current_lifecycle_phase
21429        ,p_check_id_flag                 => 'Y'
21430        ,x_current_lifecycle_phase_id        => l_current_phase_version_id
21431        ,x_return_status                 => l_return_status
21432        ,x_error_msg_code                => l_error_msg_code);
21433 
21434     IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
21435       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA', p_msg_name => l_error_msg_code);
21436       RAISE API_ERROR;
21437     END IF;
21438   END IF;
21439 
21440 
21441   --check security if user id is not -1
21442   IF (p_user_id <> -1) THEN
21443     IF 'F' = PA_SECURITY_PVT.check_user_privilege(
21444                'PA_PAXPREPR_OPT_WORKPLAN_STR',
21445                'PA_PROJECTS',
21446                l_project_id
21447              ) THEN
21448       PA_UTILS.ADD_MESSAGE
21449                (p_app_short_name => 'PA',
21450                 p_msg_name       => 'PA_FUNCTION_SECURITY_ENFORCED');
21451       RAISE API_ERROR;
21452     END IF;
21453   END IF;
21454 
21455 
21456   --Call existing update API
21457   PA_WORKPLAN_ATTR_PVT.UPDATE_PROJ_WORKPLAN_ATTRS(
21458     p_commit => p_commit
21459    ,p_validate_only => p_validate_only
21460    ,p_validation_level => 50
21461    ,p_debug_mode => p_debug_mode
21462    ,p_max_msg_count => p_max_msg_count
21463    ,p_project_id => l_project_id
21464    ,p_proj_element_id => l_proj_element_id
21465    ,p_approval_reqd_flag => l_wp_approval_reqd_fg
21466    ,p_auto_publish_flag => l_wp_auto_publish_fg
21467    ,p_approver_source_id => l_wp_approver_source_id
21468    ,p_approver_source_type => l_wp_approver_source_type
21469    ,p_default_display_lvl => l_wp_default_display_lvl
21470    ,p_enable_wp_version_flag => l_wp_enable_version_fg
21471    ,p_auto_pub_upon_creation_flag => l_auto_pub_upon_creation_fg
21472    ,p_auto_sync_txn_date_flag => l_auto_sync_txn_date_fg
21473    ,p_txn_date_sync_buf_days => l_txn_date_sync_buf_days
21474    ,p_lifecycle_version_id => l_life_cycle_version_id
21475    ,p_current_phase_version_id => l_current_phase_version_id
21476    ,p_record_version_number => l_record_version_number
21477    ,x_return_status => l_return_status
21478    ,x_msg_count => l_msg_count
21479    ,x_msg_data => l_msg_data
21480   );
21481 
21482   if l_return_status <> FND_API.G_RET_STS_SUCCESS then
21483     x_msg_count := FND_MSG_PUB.count_msg;
21484     if x_msg_count = 1 then
21485       pa_interface_utils_pub.get_messages
21486          (p_encoded        => FND_API.G_TRUE,
21487           p_msg_index      => 1,
21488           p_msg_count      => l_msg_count,
21489           p_msg_data       => l_msg_data,
21490           p_data           => l_data,
21491           p_msg_index_out  => l_msg_index_out);
21492       x_msg_data := l_data;
21493     end if;
21494     raise API_ERROR;
21495   END IF;
21496 
21497   x_return_status := FND_API.G_RET_STS_SUCCESS;
21498 
21499   if p_commit = FND_API.G_TRUE then
21500      commit work;
21501   end if;
21502 
21503 EXCEPTION
21504   WHEN API_ERROR THEN
21505     x_return_status := FND_API.G_RET_STS_ERROR;
21506     IF p_commit = FND_API.G_TRUE THEN
21507       rollback to update_current_phase;
21508     END IF;
21509   WHEN OTHERS THEN
21510     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21511     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
21512                             p_procedure_name => 'update_current_phase',
21513                             p_error_text     => SUBSTRB(SQLERRM,1,240));
21514     IF p_commit = FND_API.G_TRUE THEN
21515       rollback to update_current_phase;
21516     END IF;
21517     raise;
21518 END Update_Current_Phase;
21519 --end bug 3254091
21520 
21521   -- This API is created for FP_M changes. Refer to tracking bug 3305199
21522   -- This API imports the data from a string into the system
21523   -- Each string will contain the elements Source Ref, Sub Type and Lag Days
21524   Procedure Parse_Predecessor_Import (
21525     P_String          IN      VARCHAR2,
21526     P_Delimeter       IN      VARCHAR2 DEFAULT ',',
21527         P_Task_Version_Id IN      NUMBER,            --SMUKKA Added this parameter
21528     X_Return_Status   OUT     NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
21529     X_Msg_Count       OUT     NOCOPY NUMBER, --File.Sql.39 bug 4440895
21530     X_Msg_Data        OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
21531   )
21532   IS
21533     l_Strings_Tab           PA_PLSQL_DATATYPES.Char240TabTyp;
21534     l_begin         NUMBER;
21535     l_End           NUMBER;
21536     l_Col1          NUMBER;
21537     l_Col2          VARCHAR2(10);
21538     l_Col3          VARCHAR2(10);
21539     l_String_Length     NUMBER;
21540     l_temp_char         VARCHAR2(1);
21541 
21542 l_Type_Position NUMBER;
21543 l_Type_Count    NUMBER;
21544 
21545 l_Sign_Position NUMBER;
21546 l_Sign_Count    NUMBER;
21547 
21548 --bug 3613766
21549   cursor get_pred_id(c_pred_ref_id VARCHAR2) IS
21550   select ppev1.project_id, ppev1.element_version_id
21551     from pa_proj_elements ppe,
21552          pa_proj_element_versions ppev1,
21553          pa_proj_element_versions ppev2
21554    where ppev2.element_version_id = P_Task_Version_Id
21555      and ppev2.parent_structure_version_id = ppev1.parent_structure_version_id
21556      and ppev1.proj_element_id = ppe.proj_element_id
21557      and ppe.pm_source_reference = c_pred_ref_id;
21558   l_pred_project_id   NUMBER;
21559   l_pred_elem_ver_id  NUMBER;
21560   l_lag_val           NUMBER;
21561   l_type_val          VARCHAR2(2);
21562 --end bug 3613766
21563 
21564   l_Delimeter         VARCHAR2(10);
21565   BEGIN
21566 
21567     IF (P_Delimeter = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
21568       l_Delimeter := ',';
21569     ELSE
21570       l_Delimeter := p_Delimeter;
21571     END IF;
21572 
21573     -- Build the PL/SQL Table with all the required strings
21574     l_begin := 1;
21575     For i IN 1..200000  -- Romove this range. Used only for testing
21576     Loop
21577       Select Instr(P_String, l_Delimeter, 1, i) Into l_End from dual;
21578       Select substr(P_String, l_begin, Decode(l_End, 0, 1000, l_End-l_begin))
21579       Into   l_Strings_Tab(i) From Dual;
21580       l_begin := l_end + 1;
21581       EXIT When nvl(l_End,0) = 0;
21582     End Loop;
21583 
21584    For Rec IN l_Strings_Tab.FIRST..l_Strings_Tab.LAST
21585    Loop
21586      -- Dbms_Output.Put_Line('Input String : -'|| l_Strings_Tab(Rec)||'-');
21587 
21588      If l_Strings_Tab(Rec) IS NOT NULL then
21589         l_String_Length := length(l_Strings_Tab(Rec));
21590      Else
21591     -- Dbms_Output.Put_Line('Error: Input string is null');
21592     RETURN;
21593      End If;
21594 
21595      l_Sign_Count    := 0;
21596      l_Type_Count    := 0;
21597      l_Type_Position := 0;
21598      l_Sign_Position := 0;
21599 
21600      FOR char_position in 1..l_String_Length
21601      Loop
21602        l_temp_char := substr(l_Strings_Tab(Rec), char_position, 1);
21603        -- Dbms_Output.Put_Line('Char : '|| l_temp_char );
21604 
21605        If ascii(l_temp_char) NOT BETWEEN 48 AND 57 then  -- is not number character
21606       -- Validating the dependency code number
21607       If char_position = 1 then
21608          -- Dbms_Output.Put_Line('Error: First char is not number');
21609          RETURN;
21610       End If;
21611       If l_temp_char NOT IN ('F', 'S', '+', '-' ) then
21612        --Dbms_Output.Put_Line('Error: Invalid char found in the string');
21613          RETURN;
21614       End If;
21615 
21616       -- Validating sign character
21617       If l_temp_char IN ('+', '-') then
21618          l_Sign_Count    := l_Sign_Count + 1;
21619          l_Sign_Position := char_position;
21620          If l_Sign_Count > 1 then
21621          -- Dbms_Output.Put_Line('Error: More than one signs are found');
21622            RETURN;
21623          Else
21624            If l_Type_Count < 1 then
21625              --Dbms_Output.Put_Line('Error: Type code is missing');
21626              RETURN;
21627            End If;
21628          End If;
21629       End If;
21630 
21631       -- Validating type code character
21632       If l_temp_char IN ('F', 'S') then
21633          If l_Type_Position > 0 and l_Type_Position+1 <> char_position Then
21634             -- Dbms_Output.Put_Line('Error: Type code is invalid - 2');
21635             RETURN;
21636          End If;
21637          l_Type_Count := l_Type_Count + 1; l_Type_Position := char_position;
21638          If l_Type_Count > 2 then
21639            -- Dbms_Output.Put_Line('Error: Type code is invalid - 3');
21640            RETURN;
21641          End If;
21642       End If;
21643 
21644        End If;
21645      End Loop;
21646      -- End of processing single string
21647 
21648      Select To_Number(SubStr(l_Strings_Tab(Rec), 1, Decode(l_Type_Position, 0, 100, l_Type_Position-2 )))
21649      Into   l_Col1 From Dual;
21650 
21651      If l_Type_Position <> 0 then
21652     If l_Type_Count <> 2 then
21653        -- Dbms_Output.Put_Line('Error: Type code is invalid - 4');
21654        RETURN;
21655     End If;
21656     l_Col2 := SubStr(l_Strings_Tab(Rec), l_Type_Position-1, 2);
21657      End If;
21658 
21659      If l_Sign_Position <> 0 then
21660     l_Col3 := SubStr(l_Strings_Tab(Rec),l_Sign_Position);
21661      End If;
21662 
21663 -- Dbms_Output.Put_Line('Output Columns : '|| l_Col1||' - '||l_Col2||' - '||l_Col3);
21664      OPEN get_pred_id(l_col1);
21665      FETCH get_pred_id INTO l_pred_project_id, l_pred_elem_ver_id;
21666      IF get_pred_id%FOUND THEN
21667 
21668        IF (l_Col2 IS NULL) THEN
21669          l_type_val := 'FS';
21670        ELSE
21671          l_type_val := l_Col2;
21672        END IF;
21673 
21674        IF (l_Col3 IS NULL) THEN
21675          l_lag_val := 0;
21676        ELSE
21677          l_lag_val := l_Col3;
21678        END IF;
21679 
21680        pa_relationship_pvt.create_dependency(
21681         p_calling_module => 'AMG'
21682        ,p_src_proj_id => l_pred_project_id
21683        ,p_src_task_ver_id => P_Task_Version_Id
21684        ,p_dest_proj_id => l_pred_project_id
21685        ,p_dest_task_ver_id => l_pred_elem_ver_id
21686        ,p_type     => l_type_val
21687        ,p_lag_days => l_lag_val
21688        ,p_comments => NULL
21689        ,x_return_status => x_return_status
21690        ,x_msg_count => x_msg_count
21691        ,x_msg_data => x_msg_data);
21692      END IF;
21693      CLOSE get_pred_id;
21694 
21695      IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
21696        return;
21697      END IF;
21698 
21699    End Loop;
21700 
21701   END Parse_Predecessor_Import;
21702 
21703   -- This API is created for FP_M changes. Refer to tracking bug 3305199
21704   -- This API exports the data from a system into an out parameter string
21705   -- Each string will contain the elements Source Ref, Sub Type and Lag Days
21706   Function Parse_Predecessor_Export (
21707     P_Element_Version_ID      IN      NUMBER,
21708     P_Delimeter               IN      VARCHAR2 DEFAULT ','
21709   ) RETURN VARCHAR2
21710   IS
21711     l_String VARCHAR2(4000);
21712   Begin
21713       l_String := '';
21714       For i IN ( Select PPE.PM_Source_Reference SourceRef,
21715                 POR.Relationship_Subtype SubType,
21716                 decode(sign(NVL(POR.Lag_Day,0)),
21717                '0', '', '-1', '', '+') || decode(POR.Lag_Day,0, NULL, POR.Lag_day)/(10*8*60) LagDays   --bug 4348156
21718             From PA_Proj_Elements         PPE,
21719                  PA_Proj_Element_Versions PEV,
21720                  PA_Object_Relationships  POR,
21721                      PA_PROJ_ELEMENT_VERSIONS PEV2
21722             Where PPE.project_id            = PEV.project_id
21723             and PPE.proj_element_id     = PEV.proj_element_id
21724             and PEV.element_version_id  = POR.object_id_to1
21725                 and PEV2.ELEMENT_VERSION_ID     = POR.object_id_from1
21726                 and PEV2.ELEMENT_VERSION_ID     = P_ELEMENT_VERSION_ID
21727             and POR.Relationship_Type   = 'D'
21728             and POR.Object_ID_From2     = POR.Object_ID_To2 )
21729       Loop
21730     l_String := l_String||i.SourceRef||i.SubType||i.LagDays||P_Delimeter;
21731       End Loop;
21732       Return substr(l_String,1,length(l_string)-1);
21733       Exception When Others Then NULL;
21734   End Parse_Predecessor_Export;
21735 
21736 Function Parse_Predecessor_Export2 (
21737     P_Element_Version_ID      IN      NUMBER,
21738     P_Delimeter               IN      VARCHAR2 DEFAULT ','
21739   ) RETURN VARCHAR2
21740   IS
21741     l_String VARCHAR2(4000);
21742   Begin
21743       l_String := '';
21744       For i IN ( Select PPE.proj_element_id ProjElemId,
21745                    POR.Relationship_Subtype SubType,
21746                    decode(sign(NVL(POR.Lag_Day,0)),
21747                   '0', '', '-1', '', '+') || decode(POR.Lag_Day,0, NULL, POR.Lag_day)/(10*8*60) LagDays  --bug 4348156
21748             From PA_Proj_Elements         PPE,
21749                  PA_Proj_Element_Versions PEV,
21750                  PA_Object_Relationships  POR,
21751                  PA_PROJ_ELEMENT_VERSIONS PEV2
21752             Where PPE.project_id             = PEV.project_id
21753             and PPE.proj_element_id        = PEV.proj_element_id
21754             and PEV.element_version_id     = POR.object_id_to1
21755             and PEV2.ELEMENT_VERSION_ID     = POR.object_id_from1
21756             and PEV2.ELEMENT_VERSION_ID     = P_ELEMENT_VERSION_ID
21757             and POR.Relationship_Type      = 'D'
21758             and POR.Object_ID_From2     = POR.Object_ID_To2 )
21759       Loop
21760     l_String := l_String||i.ProjElemId||i.SubType||i.LagDays||P_Delimeter;
21761       End Loop;
21762       Return substr(l_String, 1, length(l_string)-1);
21763       Exception When Others Then NULL;
21764   End Parse_Predecessor_Export2;
21765 --Added by rtarway for FP.M Development
21766 Function GET_SHARE_TYPE (
21767     P_Project_ID      IN      NUMBER
21768   ) RETURN VARCHAR2
21769   IS
21770     Cursor get_proj_share_type
21771     IS
21772      SELECT proj.structure_sharing_code FROM pa_projects_all proj where proj.project_id = P_Project_ID;
21773 
21774     l_share_code VARCHAR2(250);
21775 
21776   Begin
21777       l_share_code := '';
21778 
21779       OPEN get_proj_share_type;
21780       FETCH get_proj_share_type into l_share_code;
21781       CLOSE get_proj_share_type;
21782 
21783       Return l_share_code;
21784       Exception When Others Then NULL;
21785   End GET_SHARE_TYPE;
21786 --Added by rtarway for FP.M Development
21787 
21788   procedure delete_intra_dependency (p_element_version_id IN  NUMBER,
21789                                                      p_commit             IN  VARCHAR2 := FND_API.G_FALSE,
21790                                                      p_debug_mode         IN  VARCHAR2 := 'N',
21791                                                      x_return_status      OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
21792   IS
21793     l_object_type   VARCHAR2(80);
21794     API_ERROR       EXCEPTION;
21795   BEGIN
21796     IF (p_debug_mode = 'Y') THEN
21797       pa_debug.init_err_stack('PA_PROJ_TASK_STRUC_PUB.DELETE_INTRA_DEPENDENCY');
21798       pa_debug.debug('PA_PROJ_TASK_STRUC_PUB.DELETE_INTRA_DEPENDENCY Begin');
21799     END IF;
21800 --
21801     IF (p_commit = FND_API.G_TRUE) THEN
21802       savepoint delete_intra_dependency;
21803     END IF;
21804     BEGIN
21805         SELECT object_type
21806           INTO l_object_type
21807           FROM pa_proj_element_versions
21808          WHERE ELEMENT_VERSION_ID = p_element_version_id;
21809     EXCEPTION
21810         WHEN NO_DATA_FOUND THEN
21811              fnd_message.set_name('PA','PA_RECORD_NOT_FOUND');
21812              x_return_status := FND_API.G_RET_STS_ERROR;
21813         WHEN OTHERS THEN
21814              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21815              raise;
21816     END;
21817     IF l_object_type='PA_TASKS' THEN
21818        BEGIN
21819            DELETE FROM pa_object_relationships por1
21820             WHERE por1.object_relationship_id IN
21821                   (SELECT por.object_relationship_id
21822                      FROM pa_object_relationships por
21823                     WHERE por.relationship_type = 'D'
21824                       AND por.object_id_from1 = p_element_version_id
21825                       AND por.object_id_from2 = por.object_id_to2
21826                       AND por.object_type_from = 'PA_TASKS'
21827                       AND por.object_type_to = 'PA_TASKS');
21828            IF SQL%NOTFOUND THEN
21829               fnd_message.set_name('PA','PA_RECORD_NOT_FOUND');
21830               x_return_status := FND_API.G_RET_STS_ERROR;
21831            END IF;
21832        EXCEPTION
21833            WHEN OTHERS THEN
21834                 x_return_status := FND_API.G_RET_STS_ERROR;
21835                 raise;
21836        END;
21837     ELSIF l_object_type='PA_STRUCTURES' THEN
21838        BEGIN
21839            DELETE FROM pa_object_relationships por1
21840             WHERE por1.object_relationship_id IN
21841                   (SELECT por.object_relationship_id
21842                      FROM pa_proj_element_versions ppev,
21843                           pa_object_relationships por
21844                     WHERE relationship_type ='D'
21845                       AND ppev.parent_structure_version_id = p_element_version_id
21846                       AND ppev.object_type = 'PA_TASKS'
21847                       AND por.object_id_from2 = por.object_id_to2
21848                       AND por.object_type_from = 'PA_TASKS'
21849                       AND por.object_type_to = 'PA_TASKS'
21850                       AND por.object_id_from1 = ppev.ELEMENT_VERSION_ID);
21851            IF SQL%NOTFOUND THEN
21852               fnd_message.set_name('PA','PA_RECORD_NOT_FOUND');
21853               x_return_status := FND_API.G_RET_STS_ERROR;
21854            END IF;
21855        EXCEPTION
21856            WHEN OTHERS THEN
21857                 x_return_status := FND_API.G_RET_STS_ERROR;
21858                 raise;
21859        END;
21860     END IF;
21861 --
21862     x_return_status := FND_API.G_RET_STS_SUCCESS;
21863 --
21864     IF (p_commit = FND_API.G_TRUE) THEN
21865        COMMIT;
21866     END IF;
21867 --
21868     IF (p_debug_mode = 'Y') THEN
21869        pa_debug.debug('PA_PROJ_TASK_STRUC_PUB.DELETE_INTRA_DEPENDENCY END');
21870     END IF;
21871   EXCEPTION
21872     WHEN API_ERROR THEN
21873         x_return_status := FND_API.G_RET_STS_ERROR;
21874         rollback to delete_intra_dependency;
21875     WHEN OTHERS THEN
21876         IF (p_commit = FND_API.G_TRUE) THEN
21877         ROLLBACK TO delete_intra_dependency;
21878     END IF;
21879         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21880     FND_MSG_PUB.add_exc_msg(
21881         p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
21882                 p_procedure_name => 'delete_intra_dependency',
21883                 p_error_text     => SUBSTRB(SQLERRM,1,240));
21884         ROLLBACK TO delete_intra_dependency;
21885     RAISE;
21886   END delete_intra_dependency;
21887 
21888 END PA_PROJ_TASK_STRUC_PUB;
21889