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.69.12020000.7 2013/05/28 12:48:08 djambhek ship $ */
3 
4 G_PKG_NAME              CONSTANT VARCHAR2(30) := 'PA_PROJ_TASK_STRUC_PUB';
5 
6 Invalid_Arg_Exc_WP      Exception ; -- Bug 2931183.
7 
8 -- API name                      : handle_task_number_change
9 -- Type                          : PL/SQL procedure
10 PROCEDURE handle_task_number_change
11     ( p_project_id                   IN NUMBER,
12       p_task_id                      IN NUMBER,
13       p_in_task_number               IN VARCHAR2,
14       p_in_task_tbl                  IN pa_project_pub.task_in_tbl_type,
15       p_structure_id                 IN NUMBER ,
16       p_debug_mode                   IN  VARCHAR2    := 'N',
17       p_return_status                OUT NOCOPY VARCHAR2
18     ) IS
19 
20       CURSOR l_get_task_number_csr (p_task_id IN NUMBER)
21       IS
22       SELECT element_number
23       FROM pa_proj_elements
24       WHERE proj_element_id = p_task_id;
25 
26       CURSOR l_get_task_id_csr (p_project_id IN NUMBER,
27 	                        p_task_number IN VARCHAR2 )
28       IS
29       SELECT proj_element_id,pm_source_reference
30       FROM pa_proj_elements
31       WHERE project_id = p_project_id
32       AND   element_number = p_task_number ;
33 
34     --needed to get the field values associated to a AMG message
35 
36       CURSOR   l_amg_project_csr
37           (p_pa_project_id pa_projects.project_id%type)
38       IS
39       SELECT   segment1
40       FROM     pa_projects p
41       WHERE p.project_id = p_pa_project_id;
42 
43       l_amg_segment1          VARCHAR2(25);
44       l_amg_task_number       VARCHAR2(50);
45 
46       l_task_number        pa_proj_elements.element_number%TYPE ; -- Bug 13831521
47       l_task_id            NUMBER := 0;
48       l_pm_task_reference  VARCHAR2(30);
49       l_tot_task_count     NUMBER := 0;
50       l_count              NUMBER := 0;
51       p_multiple_task_msg  VARCHAR2(1) := 'T';
52       l_debug_mode         VARCHAR2(1);
53       l_debug_level3       CONSTANT NUMBER := 3;
54       l_module_name        VARCHAR2(100) := 'PA_PROJ_TASK_STRUC_PUB.handle_task_number_change';
55 
56     BEGIN
57       l_debug_mode := p_debug_mode;
58 
59       IF l_debug_mode = 'Y' THEN
60         pa_debug.write(l_module_name, 'PA_PROJ_TASK_STRUC_PUB.handle_task_number_change Start : Passed Parameters :', l_debug_level3);
61         pa_debug.write(l_module_name, 'p_project_id     ='||p_project_id , l_debug_level3);
62         pa_debug.write(l_module_name, 'p_task_id        ='||p_task_id , l_debug_level3);
63         pa_debug.write(l_module_name, 'p_in_task_number ='||p_in_task_number , l_debug_level3);
64         pa_debug.write(l_module_name, 'p_structure_id   ='||p_structure_id , l_debug_level3);
65         pa_debug.write(l_module_name, 'p_debug_mode     ='||p_debug_mode , l_debug_level3);
66       END IF;
67 
68       p_return_status := FND_API.G_RET_STS_SUCCESS;
69 
70       -- Get segment1 for AMG messages
71       OPEN l_amg_project_csr( p_project_id );
72       FETCH l_amg_project_csr INTO l_amg_segment1;
73       CLOSE l_amg_project_csr;
74 
75       -- check whether task number is changing
76       IF p_in_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
77           p_in_task_number IS NULL THEN
78           RETURN;
79       END IF;
80 
81       OPEN l_get_task_number_csr (p_task_id);
82       FETCH l_get_task_number_csr INTO l_task_number;
83       CLOSE l_get_task_number_csr;
84 
85     -- If task number is not being changed, then need not proceed further
86     -- can proceed with the regular update
87        IF l_task_number = p_in_task_number THEN
88           RETURN;
89        END IF;
90 
91     -- If the new task number would result in unique constraint violation
92     -- then scan the array to check whether the task which presently
93     -- has the task number to which this task is changing to, is also being
94     -- changed.
95     -- Eg : If we are processing Task number 2.1 which is getting changed to
96     -- 2.3, then check whether the existing task with task number 2.3, is
97     -- also getting changed in the same session. If it is not getting changed
98     -- then we cannot update this task to 2.3 and would raise an error
99        If (PA_PROJ_ELEMENTS_UTILS.check_element_number_unique(p_in_task_number,
100                                                               p_task_id,
101                                                               p_project_id,
102                                                               p_structure_id) <> 'Y')   THEN
103 
104             -- get the task id and task reference for the task whose
105             -- present task number = the task number which is being changed to
106 
107             OPEN l_get_task_id_csr (p_project_id,p_in_task_number);
108             FETCH l_get_task_id_csr
109             INTO  l_task_id,
110                   l_pm_task_reference;
111             IF l_get_task_id_csr%NOTFOUND THEN
112                 CLOSE l_get_task_id_csr;
113                 RETURN;
114             ELSE
115                 CLOSE l_get_task_id_csr;
116             END IF;
117 
118             -- scan the input array to check whether
119             -- the fetched task is also getting changed
120             l_tot_task_count := p_in_task_tbl.COUNT;
121 
122       FOR i IN p_in_task_tbl.FIRST..p_in_task_tbl.LAST LOOP
123           IF p_in_task_tbl(i).pa_task_id = l_task_id OR
124               p_in_task_tbl(i).pm_task_reference = l_pm_task_reference THEN
125               IF p_in_task_tbl(i).pa_task_number = p_in_task_number THEN
126 
127                 IF l_debug_mode = 'Y' THEN
128                   pa_debug.write(l_module_name, 'p_in_task_tbl(i).pa_task_id        : ' || p_in_task_tbl(i).pa_task_id       , l_debug_level3);
129                   pa_debug.write(l_module_name, 'p_in_task_tbl(i).pm_task_reference : ' || p_in_task_tbl(i).pm_task_reference, l_debug_level3);
130                   pa_debug.write(l_module_name, 'p_in_task_tbl(i).pa_task_number    : ' || p_in_task_tbl(i).pa_task_number   , l_debug_level3);
131                   pa_debug.write(l_module_name, 'l_task_id                          : ' || l_task_id     , l_debug_level3);
132                   pa_debug.write(l_module_name, 'l_pm_task_reference                : ' || l_pm_task_reference , l_debug_level3);
133                   pa_debug.write(l_module_name, 'p_in_task_number                   : ' || p_in_task_number , l_debug_level3);
134                 END IF;
135 
136                     -- The task number for this task is not getting changed
137                     -- Hence , we cannot update the task that we are processing
138                     -- to the new task number.
139                     -- Eg: We are processing task 2.1
140                     -- It is getting changed to 2.3. There is already a task
141                     -- in the database with task number = 2.3. Unless, this
142                     -- is getting changed to something else, we cannot update
143                     -- 2.1 to 2.3
144               l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
145                 (p_task_number=> p_in_task_tbl(i).task_name
146                 ,p_task_reference => p_in_task_tbl(i).pm_task_reference
147                 ,p_task_id => l_task_id);
148 
149 	              IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
150 		            THEN
151                 pa_interface_utils_pub.map_new_amg_msg
152                   ( p_old_message_code => 'PA_TASK_NUMBER_NOT_UNIQUE'
153                   ,p_msg_attribute    => 'CHANGE'
154                   ,p_resize_flag      => 'N'
155                   ,p_msg_context      => 'TASK'
156                   ,p_attribute1       => l_amg_segment1
157                   ,p_attribute2       => l_amg_task_number
158                   ,p_attribute3       => ''
159                   ,p_attribute4       => ''
160                   ,p_attribute5       => '');
161                 END IF;
162                     p_multiple_task_msg := 'F';
163                 EXIT;
164               END IF;
165 
166                -- Now update the processing task number to a temporary value
167                -- Doing this in loop to handle the existing element_number with ^ || x
168               DECLARE
169                 cnt NUMBER := 0 ;
170                 k   NUMBER := 0;
171               BEGIN
172                 WHILE cnt = 0 LOOP -- if no rows updated then loop
173                   k := k+1;
174                   BEGIN
175                UPDATE pa_proj_elements
176                     SET element_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR || TO_CHAR(k)
177                WHERE proj_element_id = l_task_id;
178                     cnt := SQL%ROWCOUNT;
179                     EXIT;
180                   EXCEPTION
181                     WHEN DUP_VAL_ON_INDEX THEN
182                       NULL;
183                   END;
184                 END LOOP;
185               END;
186 
187                EXIT;
188           END IF;
189         END LOOP;
190 
191         IF p_multiple_task_msg = 'F'
192         THEN
193             RAISE FND_API.G_EXC_ERROR;
194         END IF;
195 
196        END IF;
197 
198     EXCEPTION
199 
200 	    WHEN FND_API.G_EXC_ERROR
201 	    THEN
202 
203 	    p_return_status := FND_API.G_RET_STS_ERROR;
204 
205 	    WHEN FND_API.G_EXC_UNEXPECTED_ERROR
206 	    THEN
207 
208 	    p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
209 
210 	    WHEN OTHERS THEN
211 
212 	    p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
213 
214 	    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
215 	    THEN
216 		    FND_MSG_PUB.add_exc_msg
217 				    ( p_pkg_name		=>    'PA_PROJ_TASK_STRUC_PUB'
218 				    , p_procedure_name	=>'handle_task_number_change' );
219 
220 	    END IF;
221 
222 END handle_task_number_change;
223 
224 -- API name                      : create_default_structure
225 -- Type                          : PL/SQL Public procedure
226 -- Pre-reqs                      : None
227 -- Return Value                  : N/A
228 -- Prameters
229 -- p_dest_project_id            IN NUMBER
230 -- p_dest_project_name          IN VARCHAR2
231 -- p_dest_project_number        IN VARCHAR2
232 -- p_dest_description           IN VARCHAR2
233 -- p_dest_org_id                IN NUMBER
234 -- x_msg_count             OUT NUMBER
235 -- x_msg_data              OUT VARCHAR2
236 -- x_return_status         OUT VARCHAR2
237 --
238 --  History
239 --
240 --  14-DEC-01   MAansari             -Created
241 --
242 --
243 
244 PROCEDURE create_default_structure
245 ( p_dest_project_id            IN NUMBER
246  ,p_dest_project_name          IN VARCHAR2
247  ,p_dest_project_number        IN VARCHAR2
248  ,p_dest_description           IN VARCHAR2
249  ,p_struc_type            IN VARCHAR2 := 'WORKPLAN'
250  ,x_msg_count             OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
251  ,x_msg_data              OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
252  ,x_return_status         OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
253 
254     cursor get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
255     select nvl(max(version_number),0)+1
256       from pa_proj_elem_ver_structure
257      where project_id = c_project_id
258        and proj_element_id = c_proj_element_id
259        and status_code <> 'STRUCTURE_PUBLISHED';
260 
261   X_ROW_ID              VARCHAR2(18);
262   x_structure_id        NUMBER;
263   x_struc_version_id    NUMBER;
264   -- added for Bug: 45377865
265   l_new_struc_version_id    NUMBER;
266   -- added for Bug: 4537865
267   l_status_code         VARCHAR2(150);
268   l_struc_ver_number    NUMBER;
269   l_ref_task_version_id NUMBER;
270   l_peer_or_sub         VARCHAR2(4);
271   l_return_status       VARCHAR2(1);
272   l_msg_count           NUMBER;
273   l_msg_data            VARCHAR2(2000);
274   x_task_version_id     NUMBER;
275   x_pev_schedule_id     NUMBER;
276   x_pev_structure_id    NUMBER;
277   x_error_msg           VARCHAR2(250);
278   l_old_wbs_level       NUMBER;
279   API_ERROR            EXCEPTION;
280   l_suffix              VARCHAR2(250);
281   l_name                VARCHAR2(250);
282   l_append              VARCHAR2(250);
283 
284     CURSOR cur_elem_ver_seq
285         IS
286           SELECT pa_proj_element_versions_s.nextval
287             FROM sys.dual;
288 
289 BEGIN
290 
291       --Clear Error Messages.
292       IF FND_MSG_PUB.count_msg = 0
293       THEN
294           FND_MSG_PUB.initialize;
295       END IF;
296 
297       IF p_struc_type = 'WORKPLAN'
298       THEN
299          l_append := ': ';
300 
301          select meaning
302            into l_suffix
303            from pa_lookups
304           where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
305             and lookup_code = 'WORKPLAN';
306 
307          l_name := substr(p_dest_project_name||l_append||l_suffix, 1, 240);
308       ELSE
309          l_name := p_dest_project_name;
310       END IF;
311 
312       Savepoint create_dflt_structure;
313       --For each project create 1 structure
314       PA_PROJECT_STRUCTURE_PVT1.Create_Structure(
315                         p_project_id                        => p_dest_project_id
316                        ,p_structure_number                  => p_dest_project_number
317                        ,p_structure_name                    => l_name
318                        ,p_structure_description             => p_dest_description
319                        ,p_calling_flag                      => p_struc_type
320                        ,x_structure_id                      => x_structure_id
321                        ,x_return_status                     => l_return_status
322                        ,x_msg_count                         => l_msg_count
323                        ,x_msg_data                          => l_msg_data
324                      );
325 
326 
327       IF x_structure_id IS NULL OR l_return_status <> 'S'
328       THEN
329           PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
330                                ,p_msg_name       => 'PA_PS_NO_STRUC_CREATED');
331           raise API_ERROR;
332       END IF;
333 
334 
335 --The following code is added to populate parent_structure version id.
336 
337       OPEN cur_elem_ver_seq;
338       FETCH cur_elem_ver_seq INTO x_struc_version_id;
339       CLOSE cur_elem_ver_seq;
340 --End
341 
342     -- Fix for 4657794 :- This is fix for regression introduced by 4537865
343     -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_new_struc_version_id
344     -- to  x_struc_version_id
345 
346     l_new_struc_version_id := x_struc_version_id ;
347 
348     -- End 4657794
349 
350       PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row(
351             X_ROW_ID                   => X_row_id
352          --,X_ELEMENT_VERSION_ID       => x_struc_version_id            * Commented for Bug Fix: 4537865
353            ,X_ELEMENT_VERSION_ID       =>l_new_struc_version_id          -- added for Bug fix: 4537865
354            ,X_PROJ_ELEMENT_ID          => x_structure_id
355            ,X_OBJECT_TYPE              => 'PA_STRUCTURES'
356            ,X_PROJECT_ID                => p_dest_project_id
357            ,X_PARENT_STRUCTURE_VERSION_ID    => x_struc_version_id
358            ,X_DISPLAY_SEQUENCE        => null
359            ,X_WBS_LEVEL                 => null
360            ,X_WBS_NUMBER          => null
361            ,X_ATTRIBUTE_CATEGORY      => null
362            ,X_ATTRIBUTE1          => null
363            ,X_ATTRIBUTE2          => null
364            ,X_ATTRIBUTE3          => null
365            ,X_ATTRIBUTE4          => null
366            ,X_ATTRIBUTE5          => null
367            ,X_ATTRIBUTE6          => null
368            ,X_ATTRIBUTE7          => null
369            ,X_ATTRIBUTE8          => null
370            ,X_ATTRIBUTE9          => null
371            ,X_ATTRIBUTE10              => null
372            ,X_ATTRIBUTE11              => null
373            ,X_ATTRIBUTE12              => null
374            ,X_ATTRIBUTE13              => null
375            ,X_ATTRIBUTE14              => null
376            ,X_ATTRIBUTE15              => null
377            ,X_TASK_UNPUB_VER_STATUS_CODE => null
378            ,X_SOURCE_OBJECT_ID           => p_dest_project_id
379            ,X_SOURCE_OBJECT_TYPE         => 'PA_PROJECTS'
380        );
381       -- added for Bug fix: 4537865
382         x_struc_version_id := l_new_struc_version_id;
383       -- added for Bug fix: 4537865
384 
385       IF x_struc_version_id IS NULL
386       THEN
387           PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
388                                ,p_msg_name       => 'PA_PS_NO_STRUC_VER_CREATED');
389           raise API_ERROR;
390       END IF;
391 
392       --Get structure version number
393       OPEN get_working_ver_num(p_dest_project_id, x_structure_id);
394       FETCH get_working_ver_num INTO l_struc_ver_number;
395       CLOSE get_working_ver_num;
396       l_status_code := 'STRUCTURE_WORKING';
397 
398 
399     PA_PROJ_ELEM_VER_STRUCTURE_PKG.insert_row(
400      X_ROWID                       => x_row_id
401    , X_PEV_STRUCTURE_ID            => x_pev_structure_id
402    , X_ELEMENT_VERSION_ID          => x_struc_version_id
403    , X_VERSION_NUMBER              => l_struc_ver_number
404    , X_NAME                        => l_name
405    , X_PROJECT_ID                  => p_dest_project_id
406    , X_PROJ_ELEMENT_ID             => x_structure_id
407    , X_DESCRIPTION                 => p_dest_description
408    , X_EFFECTIVE_DATE              => null
409    , X_PUBLISHED_DATE              => null
410    , X_PUBLISHED_BY                => null
411    , X_CURRENT_BASELINE_DATE       => null
412    , X_CURRENT_BASELINE_FLAG       => 'N'
413    , X_CURRENT_BASELINE_BY         => null
414    , X_ORIGINAL_BASELINE_DATE      => null
415    , X_ORIGINAL_BASELINE_FLAG      => 'N'
416    , X_ORIGINAL_BASELINE_BY        => null
417    , X_LOCK_STATUS_CODE            => NULL
418    , X_LOCKED_BY                   => NULL
419    , X_LOCKED_DATE                 => NULL
420    , X_STATUS_CODE                 => l_status_code
421    , X_WF_STATUS_CODE              => NULL
422    , X_LATEST_EFF_PUBLISHED_FLAG   => 'N'
423    , X_CHANGE_REASON_CODE          => NULL
424    , X_RECORD_VERSION_NUMBER       => 1
425    , X_CURRENT_WORKING_FLAG        => 'N'            /* Not applicable to default financial str. bug 3301192 */
426    , X_SOURCE_OBJECT_ID            => p_dest_project_id
427    , X_SOURCE_OBJECT_TYPE          => 'PA_PROJECTS'
428     );
429 
430 
431     IF NVL( p_struc_type, 'WORKPLAN' ) = 'WORKPLAN'
432     THEN
433         PA_TASK_PUB1.Create_Schedule_Version(
434                    p_element_version_id        => x_struc_version_id
435                   ,p_scheduled_start_date      => SYSDATE
436                   ,p_scheduled_end_date        => SYSDATE
437                   ,x_pev_schedule_id         => x_pev_schedule_id
438                   ,x_return_status           => l_return_status
439                   ,x_msg_count                     => l_msg_count
440                   ,x_msg_data                      => l_msg_data
441           );
442 
443         IF l_return_status <> 'S'
444         THEN
445             PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
446                                  ,p_msg_name       => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
447             raise api_error;
448         END IF;
449     END IF;
450 
451 
452   x_return_status := FND_API.G_RET_STS_SUCCESS;
453 EXCEPTION
454 WHEN API_ERROR THEN
455   x_return_status := FND_API.G_RET_STS_ERROR;
456   rollback to create_dflt_structure;
457 WHEN OTHERS THEN
458   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
459   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
460                           p_procedure_name => 'CREATE_DEFAULT_STRUCTURE',
461                           p_error_text     => SUBSTRB(SQLERRM,1,240));
462   rollback to create_dflt_structure;
463   raise;
464 END create_default_structure;
465 
466 
467 -- API name                      : create_default_task_structure
468 -- Type                          : PL/SQL Public procedure
469 -- Pre-reqs                      : None
470 -- Return Value                  : N/A
471 -- Prameters
472 -- p_project_id            IN NUMBER
473 -- x_msg_count             OUT NUMBER
474 -- x_msg_data              OUT VARCHAR2
475 -- x_return_status         OUT VARCHAR2
476 --
477 --  History
478 --
479 --  14-DEC-01   MAansari             -Created
480 --
481 --
482 
483 PROCEDURE create_default_task_structure
484 ( p_project_id            IN NUMBER
485  ,p_struc_type            IN VARCHAR2 := 'WORKPLAN'
486  ,x_msg_count             OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
487  ,x_msg_data              OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
488  ,x_return_status         OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
489 
490 
491   CURSOR cur_pa_tasks2 IS
492    SELECT distinct top_task_id
493      FROM pa_tasks pt
494    WHERE project_id = p_project_id;
495 
496    CURSOR cur_pa_tasks( c_top_task_id NUMBER )
497    IS
498      SELECT task_id, wbs_level, parent_task_id, task_number, task_name, description, carrying_out_organization_id
499        FROM pa_tasks pt
500       WHERE project_id = p_project_id
501        START WITH task_id = c_top_task_id
502       CONNECT BY PRIOR task_id = parent_task_id;
503 
504 
505    CURSOR parent_of_previous_task( c_task_version_id NUMBER )
506    IS
507      SELECT object_id_from1
508        FROM pa_object_relationships
509       WHERE object_id_to1 = c_task_version_id
510         and object_type_from in ('PA_STRUCTURES','PA_TASKS')     -- bug 6429275
511         and object_type_to = 'PA_TASKS'
512         and relationship_type = 'S';
513 
514 
515    CURSOR cur_pa_projs
516    IS
517      SELECT 'x'
518        FROM pa_projects_all
519       WHERE split_cost_from_workplan_flag = 'Y'
520         AND project_id = p_project_id;
521 
522   CURSOR cur_pa_proj_elem_vers2( c_strcu_ver_id NUMBER )
523   IS
524     SELECT 'x'
525       FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
526      WHERE c.project_id = p_project_id
527        AND a.structure_type_id = b.structure_type_id
528        AND b.proj_element_id = c.proj_element_id
529        AND a.structure_type = 'WORKPLAN'
530        AND element_version_id = c_strcu_ver_id;
531 
532   -- xxlu added for DFF attributes for calling create_schedule_version
533   CURSOR cur_ver_sch_attr_rec(c_element_version_id IN NUMBER) IS
534     SELECT *
535     FROM pa_proj_elem_ver_schedule
536     WHERE element_version_id = c_element_version_id
537     AND project_id = p_project_id
538    ;
539   l_ver_sch_attr_rec cur_ver_sch_attr_rec%ROWTYPE;
540   -- end xxlu changes
541 
542 --hsiu added for parent_structure_id column
543   CURSOR get_structure(c_project_id NUMBER, c_struc_type VARCHAR2) IS
544     select a.proj_element_id
545       from pa_proj_elements a,
546            pa_proj_structure_types b,
547            pa_structure_types c
548      where a.project_id = c_project_id
549        and c.structure_type_class_code = c_struc_type
550        and c.structure_type_id = b.structure_type_id
551        and b.proj_element_id = a.proj_element_id;
552   l_structure_id        NUMBER;
553 
554   l_split_flag          VARCHAR2(1);
555 
556   X_ROW_ID              VARCHAR2(18);
557   x_structure_id        NUMBER;
558   x_struc_version_id    NUMBER;
559   l_status_code         VARCHAR2(150);
560   l_struc_ver_number    NUMBER;
561   l_ref_task_version_id NUMBER;
562   l_peer_or_sub         VARCHAR2(4);
563   l_return_status       VARCHAR2(1);
564   l_msg_count           NUMBER;
565   l_msg_data            VARCHAR2(2000);
566   x_task_version_id     NUMBER;
567   x_pev_schedule_id     NUMBER;
568   x_pev_structure_id    NUMBER;
569   x_error_msg           VARCHAR2(250);
570   l_old_wbs_level       NUMBER;
571   l_postfix             VARCHAR2(2) := ' ';
572 
573   API_ERROR            EXCEPTION;
574 
575   CURSOR cur_proj_elem_vers
576   IS
577     SELECT ppev.element_version_id
578       FROM pa_proj_element_versions ppev,
579            pa_proj_structure_types ppst,
580            pa_structure_types pst
581      WHERE ppev.project_id = p_project_id
582        AND ppev.object_type = 'PA_STRUCTURES'
583        AND ppev.proj_element_id = ppst.proj_element_id
584        AND pst.structure_type_id = ppst.structure_type_id
585        AND pst.structure_type = p_struc_type;
586 
587   l_proj_element_id NUMBER;
588   l_prev_top_task_ver_id  NUMBER;
589   l_dummy_char VARCHAR2(1);
590 BEGIN
591 
592     --Clear Error Messages.
593       IF FND_MSG_PUB.count_msg = 0
594       THEN
595           FND_MSG_PUB.initialize;
596       END IF;
597 
598 
599     savepoint create_dflt_task_struc;
600     if p_project_id is null then
601        PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
602                             ,p_msg_name       => 'PA_NO_PROJECT_ID');
603     end if;
604 
605 
606 l_ref_task_version_id := null;
607 
608 FOR cur_pa_tasks2_rec IN cur_pa_tasks2 LOOP
609 
610     FOR cur_pa_tasks_rec IN  cur_pa_tasks( cur_pa_tasks2_rec.top_task_id ) LOOP
611 
612 
613 
614       --The task will be created with a different ids if the structure is a WORKPLAN and split from COSTING.
615       --Otherwise same ids as in pa_tasks will be used to create tasks in pa_proj_elements if only one default
616       --structure is being created.
617       l_split_flag := null;
618       OPEN cur_pa_projs;
619       FETCH cur_pa_projs INTO l_split_flag;
620       CLOSE cur_pa_projs;
621 
622       --For each project create 1 task
623       IF p_struc_type = 'WORKPLAN' AND l_split_flag IS NOT NULL
624       THEN
625           --l_proj_element_id := null;
626           SELECT pa_tasks_s.nextval INTO l_proj_element_id
627             FROM sys.dual;
628           l_postfix := '-'||SUBSTR( p_struc_type, 1, 1 );
629 --hsiu added for parent_structure_id column
630           OPEN get_structure(p_project_id, 'WORKPLAN');
631           FETCH get_structure into l_structure_id;
632           CLOSE get_structure;
633       ELSE
634 --hsiu added for parent_structure_id column
635           l_proj_element_id := cur_pa_tasks_rec.task_id;
636           OPEN get_structure(p_project_id, 'FINANCIAL');
637           FETCH get_structure into l_structure_id;
638           CLOSE get_structure;
639       END IF;
640       PA_PROJ_ELEMENTS_PKG.Insert_Row(
641                  X_ROW_ID                             => X_ROW_ID
642                 ,X_PROJ_ELEMENT_ID                    => l_proj_element_id
643                 ,X_PROJECT_ID                         => p_project_id
644                 ,X_OBJECT_TYPE                       => 'PA_TASKS'
645                 ,X_ELEMENT_NUMBER                     => cur_pa_tasks_rec.task_number||l_postfix
646                 ,X_NAME                               => cur_pa_tasks_rec.task_name
647                 ,X_DESCRIPTION                       => cur_pa_tasks_rec.description
648                 ,X_STATUS_CODE                       => '124'          --- NOT_STARTED  -- 124 bug 2826235
649                 ,X_WF_STATUS_CODE                     => null
650                 ,X_PM_PRODUCT_CODE                    => null
651                 ,X_PM_TASK_REFERENCE                  => null
652                 ,X_CLOSED_DATE                       => null
653                 ,X_LOCATION_ID                       => null
654                 ,X_MANAGER_PERSON_ID                => null
655                 ,X_CARRYING_OUT_ORGANIZATION_ID       => cur_pa_tasks_rec.carrying_out_organization_id
656                 ,X_TYPE_ID                            => 1
657                 ,X_PRIORITY_CODE                     => null
658                 ,X_INC_PROJ_PROGRESS_FLAG             => 'N'
659                 ,X_REQUEST_ID                         => null
660                 ,X_PROGRAM_APPLICATION_ID             => null
661                 ,X_PROGRAM_ID                         => null
662                 ,X_PROGRAM_UPDATE_DATE              => null
663                 ,X_LINK_TASK_FLAG                     => 'N'
664                 ,X_ATTRIBUTE_CATEGORY               => null
665                 ,X_ATTRIBUTE1                         => null
666                 ,X_ATTRIBUTE2                         => null
667                 ,X_ATTRIBUTE3                         => null
668                 ,X_ATTRIBUTE4                         => null
669                 ,X_ATTRIBUTE5                         => null
670                 ,X_ATTRIBUTE6                         => null
671                 ,X_ATTRIBUTE7                         => null
672                 ,X_ATTRIBUTE8                         => null
673                 ,X_ATTRIBUTE9                         => null
674                 ,X_ATTRIBUTE10                       => null
675                 ,X_ATTRIBUTE11                       => null
676                 ,X_ATTRIBUTE12                       => null
677                 ,X_ATTRIBUTE13                       => null
678                 ,X_ATTRIBUTE14                       => null
679                 ,X_ATTRIBUTE15                       => null
680                 ,X_TASK_WEIGHTING_DERIV_CODE       => NULl
681                 ,X_WORK_ITEM_CODE                  => NULL
682                 ,X_UOM_CODE                        => NULL
683                 ,X_WQ_ACTUAL_ENTRY_CODE            => NULL
684                 ,X_TASK_PROGRESS_ENTRY_PAGE_ID => NULL
685                 ,X_PARENT_STRUCTURE_ID         => l_structure_id
686                 ,X_PHASE_CODE                  => NULL
687                 ,X_PHASE_VERSION_ID            => NULL
688                 ,X_SOURCE_OBJECT_ID            => p_project_id
689               ,X_SOURCE_OBJECT_TYPE          => 'PA_PROJECTS'
690              );
691 
692 
693              IF cur_pa_tasks%ROWCOUNT = 1
694              THEN
695 
696                  IF cur_pa_tasks2%ROWCOUNT = 1
697                  THEN
698                      OPEN cur_proj_elem_vers;
699                      FETCH cur_proj_elem_vers INTO x_struc_version_id;
700                      CLOSE cur_proj_elem_vers;
701 
702                      l_ref_task_version_id := x_struc_version_id;
703                      l_peer_or_sub         := 'SUB';
704                  ELSE
705                      l_ref_task_version_id := l_prev_top_task_ver_id;
706                      l_peer_or_sub         := 'PEER';
707                  END IF;
708              ELSE
709                  IF cur_pa_tasks_rec.wbs_level > l_old_wbs_level
710                  THEN
711                      l_peer_or_sub         := 'SUB';
712                  ELSIF cur_pa_tasks_rec.wbs_level = l_old_wbs_level
713                  THEN
714                      l_peer_or_sub         := 'PEER';
715                  ELSE
716                      OPEN parent_of_previous_task( l_ref_task_version_id );
717                      FETCH parent_of_previous_task INTO l_ref_task_version_id;
718                      CLOSE parent_of_previous_task;
719                      l_peer_or_sub         := 'PEER';
720                  END IF;
721              END IF;
722 
723               PA_TASK_PVT1.Create_Task_Version(
724                    p_ref_task_version_id     => l_ref_task_version_id
725                   ,p_peer_or_sub         => l_peer_or_sub
726                   ,p_task_id              => l_proj_element_id
727                   ,p_WEIGHTING_PERCENTAGE  => 100
728                   ,p_task_unpub_ver_status_code => 'WORKING'
729                   ,x_task_version_id      => x_task_version_id
730                   ,x_return_status        => l_return_status
731                   ,x_msg_count           => l_msg_count
732                   ,x_msg_data             => l_msg_data
733                 );
734 
735              IF cur_pa_tasks%ROWCOUNT = 1
736              THEN
737                 l_prev_top_task_ver_id := x_task_version_id;
738              END IF;
739 
740               IF l_return_status <> 'S'
741               THEN
742                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
743                                        ,p_msg_name       => 'PA_PS_NO_TASK_VER_CREATED');
744                   raise api_error;
745               END IF;
746 
747               l_ref_task_version_id := x_task_version_id;
748               l_old_wbs_level := cur_pa_tasks_rec.wbs_level;
749 
750 --            IF p_struc_type = 'WORKPLAN'
751 
752             --if it is a workplan structure.
753             OPEN cur_pa_proj_elem_vers2( x_struc_version_id );
754             FETCH cur_pa_proj_elem_vers2 INTO l_dummy_char;
755             IF cur_pa_proj_elem_vers2%FOUND
756             THEN
757               -- xxlu added DFF attributes
758               OPEN cur_ver_sch_attr_rec(x_task_version_id);
759               FETCH cur_ver_sch_attr_rec INTO l_ver_sch_attr_rec;
760               CLOSE cur_ver_sch_attr_rec;
761 
762                PA_TASK_PUB1.Create_Schedule_Version(
763                       p_element_version_id     => x_task_version_id
764                      ,p_scheduled_start_date   => SYSDATE
765                      ,p_scheduled_end_date     => SYSDATE
766                      ,p_attribute_category        => l_ver_sch_attr_rec.attribute_category
767                      ,p_attribute1              => l_ver_sch_attr_rec.attribute1
768                      ,p_attribute2              => l_ver_sch_attr_rec.attribute2
769                      ,p_attribute3              => l_ver_sch_attr_rec.attribute3
770                      ,p_attribute4              => l_ver_sch_attr_rec.attribute4
771                      ,p_attribute5              => l_ver_sch_attr_rec.attribute5
772                      ,p_attribute6              => l_ver_sch_attr_rec.attribute6
773                      ,p_attribute7              => l_ver_sch_attr_rec.attribute7
774                      ,p_attribute8              => l_ver_sch_attr_rec.attribute8
775                      ,p_attribute9              => l_ver_sch_attr_rec.attribute9
776                      ,p_attribute10                => l_ver_sch_attr_rec.attribute10
777                      ,p_attribute11                => l_ver_sch_attr_rec.attribute11
778                      ,p_attribute12                => l_ver_sch_attr_rec.attribute12
779                      ,p_attribute13                => l_ver_sch_attr_rec.attribute13
780                      ,p_attribute14                => l_ver_sch_attr_rec.attribute14
781                      ,p_attribute15                => l_ver_sch_attr_rec.attribute15
782                      ,x_pev_schedule_id         => x_pev_schedule_id
783                      ,x_return_status           => l_return_status
784                      ,x_msg_count                => l_msg_count
785                      ,x_msg_data                 => l_msg_data
786                  );
787                -- end xxlu changes
788 
789               IF l_return_status <> 'S'
790               THEN
791                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
792                                        ,p_msg_name       => 'PA_PS_NO_TASK_SCH_VER_CREATED');
793                   raise api_error;
794               END IF;
795             END IF;
796             CLOSE cur_pa_proj_elem_vers2;
797     END LOOP;  --task loop end.
798 END LOOP;
799 
800   x_return_status := FND_API.G_RET_STS_SUCCESS;
801 EXCEPTION
802 WHEN API_ERROR THEN
803   x_return_status := FND_API.G_RET_STS_ERROR;
804   rollback to create_dflt_task_struc;
805 WHEN OTHERS THEN
806   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
807   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
808                           p_procedure_name => 'CREATE_DEFAULT_TASK_STRUCTURE',
809                           p_error_text     => SUBSTRB(SQLERRM,1,240));
810   rollback to create_dflt_task_struc;
811   raise;
812 END create_default_task_structure;
813 
814 
815 -- API name                      : create_task_structure
816 -- Type                          : PL/sql Public procedure
817 -- Pre-reqs                      : None
818 -- Return Value                  : N/A
819 -- Prameters
820 -- p_project_id            IN NUMBER
821 -- x_msg_count             OUT NUMBER
822 -- x_msg_data              OUT VARCHAR2
823 -- x_return_status         OUT VARCHAR2
824 --
825 --  History
826 --
827 --  14-DEC-01   MAansari             -Created
828 --
829 --  Notes: This api is called from form PAXPREPR.fmb ON-INSERT of tasks block.
830 --         The call is in PA_TASKS_PKG.ON_INSERT API.
831 
832 PROCEDURE create_task_structure(
833    p_calling_module         IN VARCHAR2 := 'FORMS'
834   ,p_project_id           IN NUMBER
835   ,p_task_id              IN NUMBER
836   ,p_parent_task_id       IN NUMBER
837   ,p_ref_task_id          IN NUMBER   := -9999
838   ,p_task_number          IN VARCHAR2
839   ,p_task_name            IN VARCHAR2
840   ,p_task_description     IN VARCHAR2
841   ,p_carrying_out_organization_id IN NUMBER
842   ,p_structure_type       IN VARCHAR2 := 'FINANCIAL'
843   ,p_actual_start_date                  IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
844   ,p_actual_finish_date                 IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
845   ,p_early_start_date                   IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
846   ,p_early_finish_date                  IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
847   ,p_late_start_date                    IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
848   ,p_late_finish_date                   IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
849   ,p_scheduled_start_date               IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
850   ,p_scheduled_finish_date              IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
851   ,P_OBLIGATION_START_DATE              IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
852   ,P_OBLIGATION_FINISH_DATE             IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
853   ,P_ESTIMATED_START_DATE               IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
854   ,P_ESTIMATED_FINISH_DATE              IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
855   ,P_BASELINE_START_DATE                IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
856   ,P_BASELINE_FINISH_DATE               IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
857   ,P_CLOSED_DATE                        IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
858   ,P_WQ_UOM_CODE                        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
859   ,P_WQ_ITEM_CODE                       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
860   ,P_STATUS_CODE                        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
861   ,P_WF_STATUS_CODE                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
862   ,P_PM_SOURCE_CODE                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
863   ,P_PRIORITY_CODE                      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
864   ,P_MILESTONE_FLAG                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
865   ,P_CRITICAL_FLAG                      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
866   ,P_INC_PROJ_PROGRESS_FLAG             IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
867   ,P_LINK_TASK_FLAG                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
868   ,P_CALENDAR_ID                        IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
869   ,P_PLANNED_EFFORT                     IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
870   ,P_DURATION                           IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
871   ,P_PLANNED_WORK_QUANTITY              IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
872   ,P_TASK_TYPE                          IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
873   ,P_PM_SOURCE_reference                IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
874   ,p_location_id                        IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
875   ,p_manager_person_id                  IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
876   ,p_structure_version_id               IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
877   ,p_parent_structure_id                IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
878   ,p_phase_version_id                   IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
879   ,P_PHASE_CODE                         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
880   ,p_create_task_version_only           IN VARCHAR2 := 'N'
881   ,p_financial_task_flag                IN VARCHAR2 := 'Y'   --bug 3301192
882 
883   -- (begin venkat) new params for bug #3450684 ----------------------------------------------
884   ,p_ext_act_duration            IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
885   ,p_ext_remain_duration         IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
886   ,p_ext_sch_duration            IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
887   -- (end venkat) new params for bug #3450684 -------------------------------------------------
888 
889   -- (begin) add new params bug - 3654243 -----
890   ,p_base_percent_comp_deriv_code   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
891   ,p_sch_tool_tsk_type_code     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
892   ,p_constraint_type_code       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
893   ,p_constraint_date            IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
894   ,p_free_slack             IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
895   ,p_total_slack            IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
896   ,p_effort_driven_flag         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
897   ,p_level_assignments_flag     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
898   ,p_invoice_method         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
899   ,p_customer_id            IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
900   ,p_gen_etc_source_code        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
901   -- (end) add new params bug - 3654243 -----
902 
903   --Bug 6153503
904   ,p_validate_dff                  IN VARCHAR2 := 'N'
905   ,p_attribute_category            IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
906   ,p_attribute1                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
907   ,p_attribute2                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
908   ,p_attribute3                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
909   ,p_attribute4                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
910   ,p_attribute5                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
911   ,p_attribute6                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
912   ,p_attribute7                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
913   ,p_attribute8                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
914   ,p_attribute9                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
915   ,p_attribute10                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
916   ,p_attribute11                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
917   ,p_attribute12                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
918   ,p_attribute13                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
919   ,p_attribute14                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
920   ,p_attribute15                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
921    --Bug 6153503
922 
923   ,x_task_version_id                    OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
924   ,x_task_id                            OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
925   ,x_msg_count                          OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
926   ,x_msg_data             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
927   ,x_return_status        OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
928 
929   X_ROW_ID              VARCHAR2(18);
930   x_structure_id        NUMBER;
931   x_struc_version_id    NUMBER;
932   l_status_code         VARCHAR2(150);
933   l_struc_ver_number    NUMBER;
934   l_ref_task_version_id NUMBER;
935   l_peer_or_sub         VARCHAR2(4);
936   l_return_status       VARCHAR2(1);
937   l_msg_count           NUMBER;
938   l_msg_data            VARCHAR2(2000);
939   l_task_version_id     NUMBER;
940   x_pev_schedule_id     NUMBER;
941   x_pev_structure_id    NUMBER;
942   x_error_msg           VARCHAR2(250);
943   l_old_wbs_level       NUMBER;
944   API_ERROR            EXCEPTION;
945   l_task_id            NUMBER;
946   l_dummy_char         VARCHAR2(1);
947   l_task_number        VARCHAR2(100);
948 
949   -- <Bug#2843596>
950   l_sharing_enabled VARCHAR(1);
951 
952 --hsiu: bug 2691868
953   l_scheduled_start_date DATE;
954   l_scheduled_finish_date DATE;
955 
956 --hsiu added for task version status
957   CURSOR cur_proj_is_template
958   IS     select 'Y'
959            from pa_projects_all
960           where project_id = p_project_id
961             and template_flag = 'Y';
962   l_template_flag VARCHAR2(1);
963   l_task_unpub_ver_status_code PA_PROJ_ELEMENT_VERSIONS.task_unpub_ver_status_code%TYPE;
964   l_parent_struc_ver_id NUMBER;
965 
966 --end changes
967 
968   CURSOR cur_proj_elem_vers( c_structure_version_id NUMBER )
969   IS
970        SELECT element_version_id
971          FROM pa_proj_element_versions
972         WHERE project_id = p_project_id
973           AND object_type = 'PA_TASKS'
974           AND parent_structure_version_id = c_structure_version_id
975           AND ( ( proj_element_id = ( select top_task_id
976                                         from pa_tasks
977                                        where task_id = p_ref_task_id ) AND p_structure_type = 'FINANCIAL' )
978                 --OR ( proj_element_id = p_ref_task_id AND p_structure_type = 'WORKPLAN' )
979                )
980         --bug  2852891
981          UNION
982        SELECT element_version_id
983          FROM pa_proj_element_versions
984         WHERE project_id = p_project_id
985           AND object_type = 'PA_TASKS'
986           AND parent_structure_version_id = c_structure_version_id
987           AND p_structure_type = 'WORKPLAN'
988           AND display_sequence = ( SELECT max( display_sequence )
989                                      FROM pa_proj_element_versions
990                                     WHERE project_id = p_project_id
991                                       AND object_type = 'PA_TASKS'
992                                       AND parent_structure_version_id = c_structure_version_id
993                                       AND wbs_level = 1    --Since there is no parent task id passed therefore its always created as top task
994                                       AND display_sequence <= ( SELECT display_sequence
995                                                                  FROM pa_proj_element_versions
996                                                                 WHERE project_id = p_project_id
997                                                                   AND object_type = 'PA_TASKS'
998                                                                   AND parent_structure_version_id = c_structure_version_id
999                                                                   AND proj_element_id = p_ref_task_id )
1000                                    )
1001         --bug  2852891
1002 ;
1003 
1004   CURSOR cur_ref_task_ver_id( c_structure_version_id NUMBER )
1005   IS
1006        SELECT element_version_id
1007          FROM pa_proj_element_versions
1008         WHERE project_id = p_project_id
1009           AND object_type = 'PA_TASKS'
1010           AND parent_structure_version_id = c_structure_version_id
1011           AND proj_element_id = p_ref_task_id
1012           ;
1013 
1014 --AMG bug
1015   CURSOR cur_ref_task_ver_id2( c_structure_version_id NUMBER, c_parent_task_version_id NUMBER )
1016   IS
1017        SELECT element_version_id
1018          FROM pa_proj_element_versions
1019         WHERE project_id = p_project_id
1020           AND object_type = 'PA_TASKS'
1021           AND parent_structure_version_id = c_structure_version_id
1022           and element_version_id in ( SELECT object_id_to1
1023                                         FROM pa_object_relationships
1024                                        WHERE object_id_from1 = c_parent_task_version_id
1025                                          and relationship_type = 'S'
1026                                          )
1027           AND display_sequence = ( SELECT max( display_sequence )
1028                                      FROM pa_proj_element_versions
1029                                     WHERE project_id = p_project_id
1030                                       AND object_type = 'PA_TASKS'
1031                                       AND parent_structure_version_id = c_structure_version_id
1032                                       and element_version_id in ( SELECT object_id_to1
1033                                                                     FROM pa_object_relationships
1034                                                                     WHERE object_id_from1 = c_parent_task_version_id
1035                                                                     and relationship_type = 'S'
1036                                                                  )
1037                                  );
1038 
1039 l_parent_task_version_id   NUMBER;
1040 --AMG bug
1041 
1042     CURSOR cur_pa_proj_elem_vers2( c_task_version_id NUMBER )
1043   IS
1044     SELECT 'x'
1045       FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
1046      WHERE c.project_id = p_project_id
1047        AND a.structure_type_id = b.structure_type_id
1048        AND b.proj_element_id = c.proj_element_id
1049        AND a.structure_type = 'WORKPLAN'
1050        AND element_version_id = ( SELECT parent_structure_version_id
1051                                    FROM  pa_proj_element_versions
1052                                    WHERE element_version_id = c_task_version_id );
1053 
1054 
1055        --The above sql will return the element_version id that will be served as a
1056        --reference task version to create task version for p_task_id.
1057 
1058   CURSOR cur_proj_elem_vers2( c_structure_version_id NUMBER, c_task_id NUMBER )
1059   IS
1060     SELECT element_version_id
1061       FROM pa_proj_element_versions
1062      WHERE project_id = p_project_id
1063        AND proj_element_id = c_task_id
1064        AND parent_structure_version_id = c_structure_version_id
1065        AND object_type = 'PA_TASKS';
1066 
1067   CURSOR cur_child_exists(c_task_ver_id NUMBER)
1068   IS
1069     select 'Y'
1070       FROM pa_object_relationships
1071      where object_id_from1 = c_task_ver_id
1072        AND object_type_from IN ('PA_TASKS', 'PA_STRUCTURES') --Corrected 'PA_TASK' TO 'PA_TASKS' for Bug 4035526
1073        and relationship_type = 'S';
1074   l_child_exists  VARCHAR2(1);
1075 
1076   -- xxlu added for DFF attributes for calling create_schedule_version
1077   CURSOR cur_ver_sch_attr_rec(c_element_version_id IN NUMBER) IS
1078     SELECT *
1079     FROM pa_proj_elem_ver_schedule
1080     WHERE element_version_id = c_element_version_id
1081       and project_id = p_project_id
1082     ;
1083   l_ver_sch_attr_rec cur_ver_sch_attr_rec%ROWTYPE;
1084   -- end xxlu changes
1085 
1086          --Adding the following cursor to avoid create_task_structure call if
1087          --execute_update_project is called from import or publish apis.
1088   CURSOR cur_pa_temp_import
1089   IS
1090     SELECT 'X' from PA_TEMP_IMPORT_TASKS
1091      WHERE project_id = p_project_id;
1092 
1093 /* Bug 2680486 -- Performance changes -- Added d.project_id= c.project_id
1094                   join in the following cursor*/
1095 
1096    CURSOR cur_struc_ver_fin
1097    IS
1098      SELECT c.element_version_id
1099        FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
1100             ,pa_proj_elem_ver_structure d
1101       WHERE c.project_id = p_project_id
1102         AND a.structure_type_id = b.structure_type_id
1103         AND b.proj_element_id = c.proj_element_id
1104         AND a.structure_type = p_structure_type
1105      AND d.project_id = c.project_id
1106         AND d.element_version_id = c.element_version_id
1107         AND d.status_code = 'STRUCTURE_PUBLISHED'
1108         AND d.latest_eff_published_flag = 'Y'
1109         ;
1110 
1111 /* Bug 2680486 -- Performance changes -- Added d.project_id= c.project_id
1112                   join in the following cursor*/
1113 
1114    CURSOR cur_struc_ver_wp
1115    IS
1116      SELECT c.element_version_id
1117        FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
1118             ,pa_proj_elem_ver_structure d
1119       WHERE c.project_id = p_project_id
1120         AND a.structure_type_id = b.structure_type_id
1121         AND b.proj_element_id = c.proj_element_id
1122         AND a.structure_type = p_structure_type
1123      AND d.project_id = c.project_id
1124         AND d.element_version_id = c.element_version_id
1125         AND d.status_code = 'STRUCTURE_WORKING'
1126         ;
1127 
1128 --hsiu added for parent_structure_id column
1129   CURSOR get_structure(c_project_id NUMBER, c_struc_type VARCHAR2) IS
1130     select a.proj_element_id
1131       from pa_proj_elements a,
1132            pa_proj_structure_types b,
1133            pa_structure_types c
1134      where a.project_id = c_project_id
1135        and c.structure_type_class_code = c_struc_type
1136        and c.structure_type_id = b.structure_type_id
1137        and b.proj_element_id = a.proj_element_id;
1138   l_structure_id        NUMBER;
1139   l_weighting           NUMBER(17,2);
1140 
1141 
1142 --hsiu added for task status
1143   CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
1144     select object_id_from1
1145       from pa_object_relationships
1146      where object_id_to1 = c_elem_ver_id
1147        and object_type_to = 'PA_TASKS'
1148        and relationship_type = 'S';
1149   l_parent_ver_id NUMBER;
1150   l_error_msg_code VARCHAR2(255);
1151   l_structure_version_id  NUMBER;
1152 
1153    --proj conn
1154    CURSOR c1( c_element_version_id NUMBER )
1155    IS
1156       SELECT wbs_level
1157         FROM pa_proj_element_versions
1158        WHERE element_version_id = c_element_version_id;
1159 
1160    CURSOR c2( c_structure_version_id NUMBER, c_element_version_id NUMBER, c_wbs_level NUMBER )
1161    IS
1162       SELECT element_version_id
1163         FROM pa_proj_element_versions
1164        WHERE display_sequence = ( SELECT max( display_sequence) from pa_proj_element_versions
1165                                    WHERE parent_structure_version_id = c_structure_version_id
1166                                      AND display_sequence < ( SELECT display_sequence from pa_proj_element_versions
1167                                                                WHERE element_version_id = c_element_version_id )
1168                                      AND wbs_level = c_wbs_level )
1169          AND parent_structure_version_id = c_structure_version_id;
1170     l_wbs_level    NUMBER;
1171 
1172    CURSOR cur_proj_wrk_attr
1173    IS
1174      select AUTO_PUB_UPON_CREATION_FLAG
1175      from   pa_proj_workplan_attr
1176     where project_id = p_project_id;
1177     l_auto_pub_flag    VARCHAR2(1);
1178    --proj conn
1179 --bug 2736392
1180   l_str_status_code            VARCHAR2(150);
1181 --bug 2736392
1182   l_init_msg_list              VARCHAR2(1);
1183 
1184   /* Bug 2736392 Begin */
1185      CURSOR cur_struc_ver_wp2
1186    IS
1187      SELECT c.element_version_id
1188        FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
1189             ,pa_proj_elem_ver_structure d
1190       WHERE c.project_id = p_project_id
1191         AND a.structure_type_id = b.structure_type_id
1192         AND b.proj_element_id = c.proj_element_id
1193         AND a.structure_type = p_structure_type
1194      AND d.project_id = c.project_id
1195         AND d.element_version_id = c.element_version_id
1196         AND (d.status_code = 'STRUCTURE_SUBMITTED' OR d.status_code='STRUCTURE_REJECTED' OR d.status_code= 'STRUCTURE_APPROVED')
1197         ;
1198 l_dummy_num number;
1199 /* Bug 2736392 End */
1200 
1201   l_tasks_out     pa_project_pub.task_out_tbl_type ;     --dummy variables.  --bug 2732895
1202 
1203 --bug 2824612
1204   l_wq_planned_quantity     NUMBER;
1205   l_task_type_id            NUMBER;
1206 --bug 2824612
1207 
1208   l_workplan_enabled        VARCHAR2(1);
1209 
1210 --3035902: process update flag changes
1211   cursor get_task_type_id(c_proj_element_id NUMBER) IS
1212       select type_id
1213         from pa_proj_elements
1214        where proj_element_id = c_proj_element_id;
1215 --3035902: end process update flag changes
1216 
1217 l_versioned                VARCHAR2(1);
1218 l_shared                   VARCHAR2(1);
1219 l_published_ver_exists     VARCHAR2(1);
1220 
1221 /* Bug # 3420093 - Adding Progress Management modifications to create_task flow. */
1222 
1223     l_add_task_ver_ids      PA_NUM_1000_NUM := PA_NUM_1000_NUM();
1224     l_add_planned_effort    PA_NUM_1000_NUM := PA_NUM_1000_NUM();
1225     l_add_start_date    PA_DATE_1000_DATE := PA_DATE_1000_DATE();
1226     l_add_end_date          PA_DATE_1000_DATE := PA_DATE_1000_DATE();
1227 
1228         l_del_task_ver_ids      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1229 
1230 /* Bug # 3420093 - Adding Progress Management modifications to create_task flow. */
1231 
1232 --Bug 6153503
1233 l_attribute_category          VARCHAR2(30);
1234 l_attribute1                  VARCHAR2(150);
1235 l_attribute2                  VARCHAR2(150);
1236 l_attribute3                  VARCHAR2(150);
1237 l_attribute4                  VARCHAR2(150);
1238 l_attribute5                  VARCHAR2(150);
1239 l_attribute6                  VARCHAR2(150);
1240 l_attribute7                  VARCHAR2(150);
1241 l_attribute8                  VARCHAR2(150);
1242 l_attribute9                  VARCHAR2(150);
1243 l_attribute10                 VARCHAR2(150);
1244 l_attribute11                 VARCHAR2(150);
1245 l_attribute12                 VARCHAR2(150);
1246 l_attribute13                 VARCHAR2(150);
1247 l_attribute14                 VARCHAR2(150);
1248 l_attribute15                 VARCHAR2(150);
1249 l_return_msg                  varchar2(2000);
1250 l_validate_status             varchar2(1);
1251 
1252 BEGIN
1253 
1254    --Clear Error Messages.
1255       IF FND_MSG_PUB.count_msg = 0
1256       THEN
1257           FND_MSG_PUB.initialize;
1258       END IF;
1259 
1260    SAVEPOINT create_task_struc;
1261 
1262    OPEN cur_proj_is_template;
1263    FETCH cur_proj_is_template into l_template_flag;
1264    IF cur_proj_is_template%NOTFOUND THEN
1265      l_template_flag := 'N';
1266    END IF;
1267    CLOSE cur_proj_is_template;
1268 
1269    OPEN cur_pa_temp_import;
1270    FETCH cur_pa_temp_import INTO l_dummy_char;
1271    IF cur_pa_temp_import%NOTFOUND
1272    THEN
1273 
1274        l_versioned               := PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id);
1275        l_shared                  := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id);
1276 
1277        IF p_task_id IS NOT NULL AND p_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1278        THEN
1279            l_task_id := p_task_id;
1280        ELSE
1281            l_task_id := null;
1282        END IF;
1283 
1284        IF p_structure_type = 'WORKPLAN'
1285        THEN
1286           --The following logic found in add_task_round_one api
1287           IF p_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_task_number IS NULL
1288           THEN
1289              l_task_number := P_PM_SOURCE_reference;
1290           ELSE
1291              l_task_number := p_task_number;
1292           END IF;
1293           --Get workplan structure id
1294 
1295           -- <Bug#2843596>
1296           -- only retrieve cached value if projectId matches
1297           -- and the cached workplan struct id is not null
1298           IF (nvl(g_project_id,-99) = p_project_id and g_workplan_struct_id IS NOT NULL) THEN
1299              l_structure_id := g_workplan_struct_id;
1300           ELSE
1301              OPEN get_structure(p_project_id, 'WORKPLAN');
1302              FETCH get_structure into l_structure_id;
1303              CLOSE get_structure;
1304              g_project_id      := p_project_id;
1305              g_workplan_struct_id := l_structure_id;
1306           END IF;
1307           -- </Bug#2843596>
1308 
1309           IF p_structure_version_id IS NULL OR
1310              p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1311           THEN
1312               --proj conn
1313               --If auto publish upon creation is on and versioning is enabled then
1314               --update the workplan structure as working bcoz it is created as pub by copy structure.
1315               OPEN  cur_proj_wrk_attr;
1316               FETCH cur_proj_wrk_attr INTO l_auto_pub_flag ;
1317               CLOSE cur_proj_wrk_attr;
1318               IF NVL( l_auto_pub_flag,'N' ) = 'Y' AND
1319                  NVL( IS_WP_VERSIONING_ENABLED(p_project_id), 'N' ) = 'Y'
1320               THEN
1321                  UPDATE pa_proj_elem_ver_structure
1322                     set status_code = 'STRUCTURE_WORKING'
1323                   where project_id = p_project_id
1324                     and proj_element_id = l_structure_id;
1325               END IF;
1326               --proj conn
1327               OPEN cur_struc_ver_wp;
1328               FETCH cur_struc_ver_wp INTO l_structure_version_id;
1329               CLOSE cur_struc_ver_wp;
1330               IF l_structure_version_id IS NULL   /* If auto publish upon creation is on then
1331                                                      l_structure_version_id will be null */
1332               THEN
1333                   DECLARE
1334 
1335             /* Bug 2680486 -- Performance changes -- Added d.project_id= c.project_id
1336                   join in the following cursor*/
1337 
1338                      CURSOR c1 is
1339                      SELECT c.element_version_id
1340                        FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
1341                             ,pa_proj_elem_ver_structure d
1342                       WHERE c.project_id = p_project_id
1343                         AND a.structure_type_id = b.structure_type_id
1344                         AND b.proj_element_id = c.proj_element_id
1345                         AND a.structure_type = p_structure_type
1346                AND d.project_id = c.project_id
1347                         AND d.element_version_id = c.element_version_id
1348                         AND d.status_code = 'STRUCTURE_PUBLISHED'
1349                                           ;
1350                  begin
1351                      OPEN C1;
1352                      FETCH C1 into l_structure_version_id;
1353                      CLOSE C1;
1354                  end;
1355               END IF;
1356           ELSE
1357               l_structure_version_id := p_structure_version_id;
1358           END IF;
1359        ELSE
1360           l_task_number := p_task_number;
1361           --Get financial structure id
1362           -- <Bug#2843596>
1363           -- only retrieve cached value if projectId matches
1364           -- and the cached financial struct id is not null
1365           IF (nvl(g_project_id,-99) = p_project_id and g_financial_struct_id IS NOT NULL) THEN
1366              l_structure_id := g_financial_struct_id;
1367           ELSE
1368              OPEN get_structure(p_project_id, 'FINANCIAL');
1369              FETCH get_structure into l_structure_id;
1370              CLOSE get_structure;
1371              g_project_id      := p_project_id;
1372              g_financial_struct_id := l_structure_id;
1373           END IF;
1374           -- </Bug#2843596>
1375 
1376           IF p_structure_version_id IS NULL OR
1377              p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1378           THEN
1379               IF l_template_flag = 'N'
1380               THEN
1381 
1382                  /*IF p_calling_module = 'FORMS'   --get the published version bcoz forms cannot add to working version
1383                                         --This is true only if there are any published version.
1384                  THEN
1385                      --get structure version if its a top task
1386                       OPEN cur_struc_ver_fin;
1387                       FETCH cur_struc_ver_fin INTO l_structure_version_id;
1388                       CLOSE cur_struc_ver_fin;
1389                  ELSE    should not stop adding tasks to a WORKING version if there is no PUBLISHED version bug 2777656
1390                  */
1391                       --get structure version if its a top task
1392                       OPEN cur_struc_ver_wp;
1393                       FETCH cur_struc_ver_wp INTO l_structure_version_id;
1394                       CLOSE cur_struc_ver_wp;
1395                       IF l_structure_version_id IS NULL  --if versioning is diabled then get the published version
1396                       THEN
1397                           OPEN cur_struc_ver_fin;
1398                           FETCH cur_struc_ver_fin INTO l_structure_version_id;
1399                           CLOSE cur_struc_ver_fin;
1400                       END IF;
1401                  --END IF;
1402               ELSE
1403                  --get structure version if its a top task
1404                  OPEN cur_struc_ver_wp;
1405                  FETCH cur_struc_ver_wp INTO l_structure_version_id;
1406                  CLOSE cur_struc_ver_wp;
1407               END IF;
1408           ELSE
1409               l_structure_version_id := p_structure_version_id;
1410           END IF;
1411        END IF;
1412 
1413 
1414       /*** Commented for Bug 2736392 -- Added new code below
1415            This code will never do the intended task because p_structure_version_id and l_structure_version_id
1416            will be null in this case. If a structure version is in approved, submitted or rejected state, then it
1417            will never be returned from cursor cur_struc_ver_wp, so how can we get the status of a null struc ver.
1418 
1419           IF p_structure_version_id IS NOT NULL AND
1420              p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1421           THEN
1422               --Validate the incoming structure version id
1423 
1424               PA_PROJECT_STRUCTURE_UTILS.Structure_Version_Name_Or_Id(
1425                       p_structure_id                     => null
1426                      ,p_structure_version_name           => null
1427                      ,p_structure_version_id             => p_structure_version_id
1428                      ,p_check_id_flag                    => 'Y'
1429                      ,x_structure_version_id             => l_structure_version_id
1430                      ,x_return_status                    => l_return_status
1431                      ,x_error_message_code               => l_msg_data
1432                  );
1433               IF l_return_status <> 'S'
1434               THEN
1435                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1436                                 ,p_msg_name       => l_msg_data );
1437                   raise api_error;
1438               END IF;
1439 
1440            --bug 2736392
1441               l_str_status_code := PA_PROJECT_STRUCTURE_UTILS.get_structrue_version_status
1442                            ( p_project_id                => p_project_id
1443                              ,p_structure_version_id      => p_structure_version_id );
1444               IF l_str_status_code IS NULL
1445               THEN
1446                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1447                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID' );
1448                   raise api_error;
1449               ELSIF l_str_status_code in ( 'STRUCTURE_SUBMITTED', 'STRUCTURE_REJECTED', 'STRUCTURE_APPROVED' )
1450               THEN
1451                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1452                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID2' );
1453                   raise api_error;
1454               END IF;
1455               --bug 2736392
1456 
1457           END IF;
1458      ***/
1459 
1460      /* New Code Begin for Bug 2736392 -- Commnted the above code*/
1461 
1462        IF p_structure_version_id IS NOT NULL AND p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1463           THEN
1464               l_str_status_code := PA_PROJECT_STRUCTURE_UTILS.get_structrue_version_status
1465                            ( p_project_id                => p_project_id
1466                              ,p_structure_version_id      => p_structure_version_id );
1467               IF l_str_status_code IS NULL
1468               THEN
1469                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1470                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID' );
1471                   raise api_error;
1472               ELSIF l_str_status_code in ( 'STRUCTURE_SUBMITTED', 'STRUCTURE_REJECTED', 'STRUCTURE_APPROVED' )
1473               THEN
1474                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1475                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID2' );
1476                   raise api_error;
1477               END IF;
1478        ELSIF l_structure_version_id IS  NULL
1479           THEN
1480                  OPEN cur_struc_ver_wp2;
1481                  FETCH cur_struc_ver_wp2 INTO l_dummy_num;
1482                  CLOSE cur_struc_ver_wp2;
1483 
1484            IF l_dummy_num is NOT NULL THEN
1485                        PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1486                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID2' );
1487                     raise api_error;
1488            ELSE
1489                         PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1490                                       ,p_msg_name       => 'PA_PS_INV_STR_VER_ID' );
1491                        raise api_error;
1492            END IF;
1493           END IF;
1494 
1495       /* New Code End for Bug 2736392 */
1496 
1497 ---The following code is added to prevent message list re-initialization if there are any messages already on stack.
1498         IF p_calling_module = 'AMG' AND FND_MSG_PUB.count_msg > 0
1499         THEN
1500             l_init_msg_list := 'F';
1501         ELSE
1502             l_init_msg_list := 'T';
1503         END IF;
1504 
1505        IF p_create_task_version_only = 'N'
1506        THEN
1507 
1508            --For each project create 1 task
1509            PA_TASK_PUB1.create_task(
1510                p_calling_module          => p_calling_module
1511                ,p_init_msg_list            => l_init_msg_list
1512                ,p_object_type             => 'PA_TASKS'
1513                ,p_project_id              => p_project_id
1514                ,p_structure_id             => l_structure_id --1    --anything. does not matter since its not gonna useful to create record
1515                                                    --in pa_proj_elements in PA_TASK_PVT1.CREATE_TASK.
1516                ,p_task_number             => l_task_number
1517                ,p_task_name               => p_task_name
1518                ,p_task_description       => p_task_description
1519                ,p_location_id             => p_location_id
1520                ,p_task_manager_id        => p_manager_person_id
1521                ,p_carrying_out_org_id   => p_carrying_out_organization_id
1522                ,p_priority_code          => p_priority_code
1523                ,p_TYPE_ID                 => p_task_type
1524                ,p_status_code             => p_status_code
1525                ,p_inc_proj_progress_flag     => p_inc_proj_progress_flag
1526                ,p_pm_product_code        => P_PM_SOURCE_CODE
1527                ,p_pm_task_reference           => P_PM_SOURCE_reference
1528                ,p_closed_date             => p_closed_date
1529                ,p_link_task_flag           => p_link_task_flag
1530                ,P_UOM_CODE              => P_WQ_UOM_CODE
1531                ,p_work_item_code           => P_WQ_ITEM_CODE
1532                ,x_task_id                 => l_task_id
1533 ----- begin Bug 3654243 --------------------------------------------
1534            ,p_Base_Perc_Comp_Deriv_Code => p_base_percent_comp_deriv_code
1535 ----- end Bug 3654243 ----------------------------------------------
1536 
1537                ,x_return_status          => l_return_status
1538                ,x_msg_count               => l_msg_count
1539                ,x_msg_data                => l_msg_data
1540                );
1541 
1542               IF l_return_status <> 'S'
1543               THEN
1544                  /*PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1545                                        ,p_msg_name       => l_msg_data );
1546                   */
1547                   raise api_error;
1548               END IF;
1549        END IF;
1550 
1551               x_task_id := l_task_id;
1552 
1553 --              IF p_structure_type = 'FINANCIAL'
1554 --              THEN
1555                  IF p_parent_task_id IS NOT NULL AND p_parent_task_id <> l_task_id
1556                     AND p_parent_task_id = p_ref_task_id
1557                  THEN
1558                     l_peer_or_sub := 'SUB';
1559                     --get reference task version id
1560                     OPEN cur_proj_elem_vers2( l_structure_version_id, p_parent_task_id );
1561                     FETCH cur_proj_elem_vers2 INTO l_ref_task_version_id;
1562                     CLOSE cur_proj_elem_vers2;
1563 
1564                     OPEN cur_child_exists(l_ref_task_version_id);
1565                     FETCH cur_child_exists into l_child_exists;
1566                     IF (cur_child_exists%NOTFOUND) THEN
1567                       l_weighting := 100;
1568                     ELSE
1569                       l_weighting := 0;
1570                     END IF;
1571                     CLOSE cur_child_exists;
1572 
1573                     --Bug 2732907
1574                     IF l_ref_task_version_id IS NOT NULL
1575                     THEN
1576                        update pa_proj_elem_ver_schedule
1577                           set WQ_PLANNED_QUANTITY = null
1578                         where element_version_id = l_ref_task_version_id
1579                           and project_id = p_project_id
1580                           and proj_element_id = p_parent_task_id;
1581                     END IF;
1582                     --Bug 2732907
1583 
1584                  ELSIF p_ref_task_id IS NOT NULL
1585                  THEN
1586                      l_peer_or_sub := 'PEER';
1587                      IF p_parent_task_id IS NULL   --top task
1588                      THEN
1589                          OPEN cur_proj_elem_vers( l_structure_version_id );
1590                          FETCH cur_proj_elem_vers INTO l_ref_task_version_id;
1591                          CLOSE cur_proj_elem_vers;
1592                      ELSE   -- not a top task. Added the following to maintain sequence between the two
1593                             --leaf level peer tasks.
1594 
1595                          OPEN cur_proj_elem_vers2( l_structure_version_id, p_parent_task_id );
1596                          FETCH cur_proj_elem_vers2 INTO l_parent_task_version_id;
1597                          CLOSE cur_proj_elem_vers2;
1598 
1599                        /**  OPEN cur_ref_task_ver_id2( l_structure_version_id, l_parent_task_version_id );
1600                          fetch cur_ref_task_ver_id2 INTO l_ref_task_version_id;
1601                          CLOSE cur_ref_task_ver_id2; **/
1602                            --  Above code commented and code below added for 4038249. The code above
1603                -- was resetting the p_ref_task_version_id to that of that latest task
1604                -- instead of setting it to the p_ref_task_id passed by the user.
1605              OPEN cur_proj_elem_vers2( l_structure_version_id, p_ref_task_id );
1606                          FETCH cur_proj_elem_vers2 INTO l_ref_task_version_id;
1607                          CLOSE cur_proj_elem_vers2;
1608                          --  Code changes end for 4038249
1609                      END IF;
1610                      l_weighting := 0;
1611                  ELSIF p_ref_task_id IS NULL
1612                  THEN
1613                      --get structure version if its a top task
1614                      l_peer_or_sub := 'SUB';
1615                      /*IF l_template_flag = 'N'
1616                      THEN
1617                          --get structure version if its a top task
1618                          OPEN cur_struc_ver_fin;
1619                          FETCH cur_struc_ver_fin INTO l_ref_task_version_id;
1620                          CLOSE cur_struc_ver_fin;
1621                      ELSE
1622                          --For templates its always WORKING_STRUCTURE
1623                          OPEN cur_struc_ver_wp;
1624                          FETCH cur_struc_ver_wp INTO l_ref_task_version_id;
1625                          CLOSE cur_struc_ver_wp;
1626                      END IF;*/
1627                      l_ref_task_version_id := l_structure_version_id;
1628                      OPEN cur_child_exists(l_ref_task_version_id);
1629                      FETCH cur_child_exists into l_child_exists;
1630                      IF cur_child_exists%NOTFOUND THEN
1631                        l_weighting := 100;
1632                      ELSE
1633                        l_weighting := 0;
1634                      END IF;
1635                      CLOSE cur_child_exists;
1636                  END IF;
1637 --Commenting out the following as its not needed. We dont any separate logic for WORKPLAN and FINANCIAL to get the
1638 --ref task version id. There is only one cursor cur_proj_elem_vers that takes structure type
1639 /*              ELSIF p_structure_type = 'WORKPLAN'
1640               THEN
1641                  IF p_parent_task_id IS NOT NULL AND p_parent_task_id <> l_task_id AND
1642                     p_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1643                  THEN
1644                     l_peer_or_sub := 'SUB';
1645                     --get reference task version id
1646                     OPEN cur_proj_elem_vers2( l_structure_version_id, p_parent_task_id );
1647                     FETCH cur_proj_elem_vers2 INTO l_ref_task_version_id;
1648                     CLOSE cur_proj_elem_vers2;
1649 
1650                     OPEN cur_child_exists(l_ref_task_version_id);
1651                     FETCH cur_child_exists into l_child_exists;
1652                     IF (cur_child_exists%NOTFOUND) THEN
1653                       l_weighting := 100;
1654                     ELSE
1655                       l_weighting := 0;
1656                     END IF;
1657                     CLOSE cur_child_exists;
1658 
1659                     --Bug 2732907
1660                     IF l_ref_task_version_id IS NOT NULL
1661                     THEN
1662                        update pa_proj_elem_ver_schedule
1663                           set WQ_PLANNED_QUANTITY = null
1664                         where element_version_id = l_ref_task_version_id
1665                           and project_id = p_project_id
1666                           and proj_element_id = p_parent_task_id;
1667                     END IF;
1668                     --Bug 2732907
1669 
1670                  ELSIF ( p_parent_task_id IS NULL OR p_parent_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
1671                  --proj conn
1672                        AND ( p_ref_task_id is null OR p_ref_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
1673                  --proj conn
1674                  THEN
1675                      --get structure version if its a top task
1676                      l_ref_task_version_id := l_structure_version_id;
1677 
1678                      OPEN cur_child_exists(l_ref_task_version_id);
1679                      FETCH cur_child_exists into l_child_exists;
1680                      IF cur_child_exists%NOTFOUND THEN
1681                        l_weighting := 100;
1682                      ELSE
1683                        l_weighting := 0;
1684                      END IF;
1685                      CLOSE cur_child_exists;
1686 
1687                      l_peer_or_sub := 'SUB';
1688 */
1689                      /*IF p_structure_version_id IS NULL OR
1690                         p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1691                      THEN
1692                          OPEN cur_struc_ver_wp;
1693                          FETCH cur_struc_ver_wp INTO l_ref_task_version_id;
1694                          CLOSE cur_struc_ver_wp;
1695                      ELSE
1696                          l_ref_task_version_id := p_structure_version_id;
1697                      END IF;
1698                      */
1699 /*                 ELSIF p_ref_task_id IS NOT NULL AND p_ref_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1700                  THEN
1701                     l_weighting := 0;
1702                     OPEN cur_proj_elem_vers2( l_structure_version_id, p_ref_task_id );
1703                     FETCH cur_proj_elem_vers2 INTO l_ref_task_version_id;
1704                     CLOSE cur_proj_elem_vers2;
1705                     --proj conn
1706                        OPEN c1(   l_ref_task_version_id );
1707                        FETCH c1 into l_wbs_level;
1708                        CLOSE c1;
1709 
1710                        IF l_wbs_level > 1
1711                        THEN
1712                           OPEN c2( l_structure_version_id,l_ref_task_version_id,1 );
1713                           FETCH c2 into l_ref_task_version_id;
1714                           CLOSE c2;
1715                        END IF;
1716                        l_peer_or_sub := 'PEER';
1717                     --proj conn
1718                  END IF;
1719               END IF;  --<< p_structrue_type >>
1720 */
1721 
1722               IF (l_template_flag = 'N') THEN
1723                 --check if structure is shared
1724                 --  if shared, check if versioned
1725                 --    'WORKING' if versioned; 'PUBLISHED' if not
1726                 --  if split, check if 'FINANCIAL'
1727                 --    'PUBLISHED' if financial
1728                 --    check if versioned
1729                 --    'WORKING' if versioend; 'PUBLISHED' if not
1730 
1731                 -- <Bug#2843596>
1732                 IF (nvl(g_project_id,-99) = p_project_id and g_sharing_enabled IS NOT NULL) THEN
1733                     l_sharing_enabled := g_sharing_enabled;
1734                 ELSE
1735                     l_sharing_enabled := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id);
1736                     g_project_id      := p_project_id;
1737                     g_sharing_enabled := l_sharing_enabled;
1738                 END IF;
1739                 -- </Bug#2843596>
1740 
1741                 IF ('Y' = l_sharing_enabled) THEN
1742         -- Bug 4067757 used l_versioned instead of calling Check_Wp_Versioning_Enabled multiple times
1743                 /*  IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id)) THEN  */
1744                   IF (l_versioned = 'Y') THEN
1745                     l_task_unpub_ver_status_code := 'WORKING';
1746                   ELSE
1747                     l_task_unpub_ver_status_code := 'PUBLISHED';
1748                   END IF;
1749                 ELSE --split
1750                   IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'FINANCIAL')  AND
1751                       'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'WORKPLAN')) THEN
1752                     l_task_unpub_ver_status_code := 'PUBLISHED';
1753                   ELSE --workplan only
1754           -- Bug 4067757 used l_versioned instead of calling Check_Wp_Versioning_Enabled multiple times
1755                  /*   IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id)) THEN */
1756                       IF (l_versioned = 'Y') THEN
1757                       l_task_unpub_ver_status_code := 'WORKING';
1758                     ELSE
1759                       l_task_unpub_ver_status_code := 'PUBLISHED';
1760                     END IF;
1761                   END IF;
1762                 END IF;
1763               ELSE
1764                 l_task_unpub_ver_status_code := 'WORKING';
1765               END IF;
1766 
1767               --hsiu added for task status
1768               --check if ok to create subtask
1769               IF (l_peer_or_sub = 'PEER') THEN
1770                 OPEN get_parent_version_id(l_ref_task_version_id);
1771                 FETCH get_parent_version_id into l_parent_ver_id;
1772                 CLOSE get_parent_version_id;
1773                 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
1774                   p_parent_task_ver_id => l_parent_ver_id
1775                  ,x_return_status      => l_return_status
1776                  ,x_error_message_code => l_error_msg_code
1777                 );
1778 
1779                 IF (l_return_status <> 'Y') THEN
1780                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1781                                        p_msg_name => l_error_msg_code);
1782                   raise api_error;
1783                 END IF;
1784               ELSE
1785                 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
1786                   p_parent_task_ver_id => l_ref_task_version_id
1787                  ,x_return_status      => l_return_status
1788                  ,x_error_message_code => l_error_msg_code
1789                 );
1790 
1791                 IF (l_return_status <> 'Y') THEN
1792                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1793                              p_msg_name => l_error_msg_code);
1794                   raise api_error;
1795                 END IF;
1796               END IF;
1797               --end changes for task status
1798 
1799               PA_TASK_PVT1.Create_Task_Version(
1800                    p_ref_task_version_id     => l_ref_task_version_id
1801                   ,p_init_msg_list           => l_init_msg_list            --Added for bug 4955475
1802                   ,p_peer_or_sub         => l_peer_or_sub
1803                   ,p_task_id              => l_task_id
1804                   ,p_WEIGHTING_PERCENTAGE   => l_weighting
1805                   ,p_task_unpub_ver_status_code => l_task_unpub_ver_status_code
1806                   ,p_financial_task_flag => p_financial_task_flag    --bug 3301192
1807                   ,x_task_version_id      => l_task_version_id
1808                   ,x_return_status        => l_return_status
1809                   ,x_msg_count           => l_msg_count
1810                   ,x_msg_data             => l_msg_data
1811                 );
1812 
1813               IF l_return_status <> 'S'
1814               THEN
1815                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
1816                                        ,p_msg_name       => 'PA_PS_NO_TASK_VER_CREATED');
1817                   raise api_error;
1818               END IF;
1819 
1820               x_task_version_id      := l_task_version_id;
1821 
1822 
1823               --bug 3010538
1824 
1825               --3035902: process update flag changes
1826               OPEN get_task_type_id(l_task_id);
1827               FETCH get_task_type_id INTO l_task_type_id;
1828               CLOSE get_task_type_id;
1829            --Bug No 3450684 SMukka Commented if condition
1830            --IF NOT ( p_structure_type = 'WORKPLAN' AND
1831            --         l_shared = 'N' AND
1832            --        ( PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id) = 'MANUAL' OR
1833            --           pa_task_type_utils.check_tk_type_progressable(l_task_type_id)='N') )
1834            --THEN
1835 
1836               PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
1837                (  p_calling_context       => p_calling_module
1838                  ,p_project_id            => p_project_id
1839                  ,p_structure_version_id  => l_structure_version_id
1840                  ,p_update_wbs_flag       => 'Y'
1841                  ,x_return_status         => l_return_status
1842                  ,x_msg_count             => l_msg_count
1843                  ,x_msg_data              => l_msg_data);
1844 
1845              if l_return_status <> FND_API.G_RET_STS_SUCCESS then
1846                  x_msg_count := l_msg_count;
1847                  x_msg_data := l_msg_data;
1848                  RAISE API_ERROR;
1849              end if;
1850            --END IF;
1851 
1852              IF p_structure_type = 'FINANCIAL'
1853              THEN
1854                  l_published_ver_exists := PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS( p_project_id, l_structure_id );
1855                  IF ( l_versioned = 'N' OR
1856                       l_shared = 'N' OR
1857                       ( l_versioned = 'Y' AND
1858                         l_shared = 'Y' AND
1859                         l_published_ver_exists = 'N' ) )
1860                  THEN
1861                      pa_fp_refresh_elements_pub.set_process_flag_proj(
1862                            p_project_id               => p_project_id
1863                           ,p_request_id               => null
1864                           ,p_process_code             => null
1865                           ,p_refresh_required_flag    => 'Y'
1866                           ,x_return_status            => l_return_status
1867                           ,x_msg_count                => l_msg_count
1868                           ,x_msg_data                 => l_msg_data );
1869 
1870                       if l_return_status <> FND_API.G_RET_STS_SUCCESS then
1871                          x_msg_count := l_msg_count;
1872                          x_msg_data := l_msg_data;
1873                          RAISE API_ERROR;
1874                       end if;
1875                   END IF;
1876              END IF;
1877 
1878            --End bug 3010538
1879 
1880 --hsiu added task status rollup
1881               select parent_structure_version_id
1882                 into l_parent_struc_ver_id
1883                 from pa_proj_element_versions
1884                where element_version_id = l_task_version_id;
1885 
1886               IF (PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id) = 'Y') AND
1887            -- Bug 4067757 used l_versioned instead of calling Check_Wp_Versioning_Enabled multiple times
1888            /*      (PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id) = 'N') AND */
1889              (l_versioned = 'N') AND NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER, 'N') = 'N' AND -- Check roll up flag to defer roll ups 14556729
1890                  (PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'WORKPLAN') = 'Y') THEN
1891                 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
1892                   p_structure_version_id => l_parent_struc_ver_id
1893                  ,p_element_version_id => l_task_version_id
1894                  ,x_return_status => l_return_status
1895                  ,x_msg_count => l_msg_count
1896                  ,x_msg_data => l_msg_data
1897                 );
1898 
1899                 IF (l_return_status <> 'S') THEN
1900                   x_msg_count := l_msg_count;
1901                   x_msg_data := l_msg_data;
1902                   RAISE API_ERROR;
1903                 END IF;
1904 
1905               END IF;
1906 --end task status rollup
1907 
1908 
1909 --Hsiu added
1910 --inherit task type
1911               IF p_create_task_version_only = 'N'
1912               THEN
1913                   PA_TASK_PVT1.Inherit_task_type_attr(
1914                       p_task_id => l_task_id
1915                      ,p_task_version_id => l_task_version_id
1916                      ,x_return_status => l_return_status
1917                      ,x_msg_count => l_msg_count
1918                      ,x_msg_data => l_msg_data
1919                      );
1920 
1921                   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1922                      raise api_error;
1923                   END IF;
1924               END IF;
1925 --end inherit task type
1926 
1927               OPEN cur_pa_proj_elem_vers2(l_task_version_id);
1928               FETCH cur_pa_proj_elem_vers2 INTO l_dummy_char;
1929               IF cur_pa_proj_elem_vers2%FOUND
1930               THEN
1931                   -- xxlu added DFF attributes
1932                   OPEN cur_ver_sch_attr_rec(l_task_version_id);
1933                   FETCH cur_ver_sch_attr_rec INTO l_ver_sch_attr_rec;
1934                   CLOSE cur_ver_sch_attr_rec;
1935 
1936                   --hsiu: added for bug 2691868
1937                   IF (p_scheduled_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1938                     l_scheduled_start_date := sysdate;
1939                   ELSE
1940                     l_scheduled_start_date := p_scheduled_start_date;
1941                   END IF;
1942 
1943                   IF (p_scheduled_finish_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1944                     l_scheduled_finish_date := sysdate;
1945                   ELSE
1946                     l_scheduled_finish_date := p_scheduled_finish_date;
1947                   END IF;
1948 
1949                   --bug  2824612
1950 
1951 /*
1952                   SELECT type_id  INTO l_task_type_id
1953                     FROM pa_proj_elements
1954                    WHERE proj_element_id = l_task_id
1955                      AND project_id = p_project_id;
1956 */
1957 
1958                   IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_wq_enabled(l_task_type_id) OR
1959                       'N' = PA_PROGRESS_UTILS.get_project_wq_flag(p_project_id)) THEN
1960                       IF (P_PLANNED_WORK_QUANTITY <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND P_PLANNED_WORK_QUANTITY IS NOT NULL) THEN
1961                           l_wq_planned_quantity := NULL;
1962                       END IF;
1963                   ELSE
1964                      l_wq_planned_quantity := P_PLANNED_WORK_QUANTITY;    --bug 2826992
1965                   END IF;
1966 
1967                   l_workplan_enabled := 'Y';
1968                   --bug  2824612
1969 
1970                   --Bug 6153503 start
1971                   if (--p_attribute_category is null or
1972                         p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1973                     then
1974                          l_attribute_category :=  l_ver_sch_attr_rec.attribute_category;
1975                     else
1976                           l_attribute_category :=  p_attribute_category;
1977                     end if;
1978 
1979 
1980 
1981                     if (--p_attribute1 is null or
1982                         p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1983                     then
1984                          l_attribute1  :=  l_ver_sch_attr_rec.attribute1;
1985                     else
1986                          l_attribute1  :=  p_attribute1;
1987                     end if;
1988 
1989 
1990 
1991                     if (--p_attribute2 is null or
1992                         p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1993                     then
1994                          l_attribute2  :=  l_ver_sch_attr_rec.attribute2;
1995                     else
1996                          l_attribute2  :=  p_attribute2;
1997                     end if;
1998 
1999 
2000                     if (--p_attribute3 is null or
2001                         p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2002                     then
2003                          l_attribute3 :=  l_ver_sch_attr_rec.attribute3;
2004                     else
2005                           l_attribute3 :=  p_attribute3;
2006                     end if;
2007 
2008                     if (--p_attribute4 is null or
2009                         p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2010                     then
2011                          l_attribute4 :=  l_ver_sch_attr_rec.attribute4;
2012                     else
2013                           l_attribute4 :=  p_attribute4;
2014                     end if;
2015 
2016                     if (--p_attribute5 is null or
2017                         p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2018                     then
2019                          l_attribute5 :=  l_ver_sch_attr_rec.attribute5;
2020                     else
2021                           l_attribute5 :=  p_attribute5;
2022                     end if;
2023 
2024                     if (--p_attribute6 is null or
2025                         p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2026                     then
2027                          l_attribute6 :=  l_ver_sch_attr_rec.attribute6;
2028                     else
2029                           l_attribute6 :=  p_attribute6;
2030                     end if;
2031 
2032                     if (--p_attribute7 is null or
2033                         p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)  -- Changed for Bug #6153681
2034                     then
2035                          l_attribute7 :=  l_ver_sch_attr_rec.attribute7;
2036                     else
2037                           l_attribute7 :=  p_attribute7;
2038                     end if;
2039 
2040                     if (--p_attribute8 is null or
2041                         p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2042                     then
2043                          l_attribute8 :=  l_ver_sch_attr_rec.attribute8;
2044                     else
2045                           l_attribute8  :=  p_attribute8;
2046                     end if;
2047 
2048                     if (--p_attribute9 is null or
2049                         p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2050                     then
2051                          l_attribute9 :=  l_ver_sch_attr_rec.attribute9;
2052                     else
2053                          l_attribute9 :=  p_attribute9;
2054                     end if;
2055 
2056                     if (--p_attribute10 is null or
2057                         p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2058                     then
2059                          l_attribute10 :=  l_ver_sch_attr_rec.attribute10;
2060                     else
2061                           l_attribute10 :=  p_attribute10;
2062                     end if;
2063 
2064                     if (--p_attribute10 is null or
2065                         p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2066                     then
2067                          l_attribute11 :=  l_ver_sch_attr_rec.attribute11;
2068                     else
2069                           l_attribute11 :=  p_attribute11;
2070                     end if;
2071 
2072                     if (--p_attribute10 is null or
2073                         p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2074                     then
2075                          l_attribute12 :=  l_ver_sch_attr_rec.attribute12;
2076                     else
2077                           l_attribute12 :=  p_attribute12;
2078                     end if;
2079 
2080                     if (--p_attribute10 is null or
2081                         p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2082                     then
2083                          l_attribute13 :=  l_ver_sch_attr_rec.attribute13;
2084                     else
2085                           l_attribute13 :=  p_attribute13;
2086                     end if;
2087 
2088                     if (--p_attribute10 is null or
2089                         p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2090                     then
2091                          l_attribute14 :=  l_ver_sch_attr_rec.attribute14;
2092                     else
2093                           l_attribute14 :=  p_attribute14;
2094                     end if;
2095 
2096 
2097                     if (--p_attribute10 is null or
2098                         p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2099                     then
2100                          l_attribute15 :=  l_ver_sch_attr_rec.attribute15;
2101                     else
2102                           l_attribute15 :=  p_attribute15;
2103                     end if;
2104 
2105                   --if added while fixing BUG 3919800
2106                   --Add validation for PA_PROJ_ELEM_VER_SCH_DESC_FLEX
2107                   --if l_attribute_category is not null and l_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2108                   --then
2109                   IF p_validate_dff = 'Y' THEN
2110                        pa_task_utils.validate_flex_fields(
2111                        p_desc_flex_name        => 'PA_PROJ_ELEM_VER_SCH_DESC_FLEX'
2112                       ,p_attribute_category    => l_attribute_category
2113                       ,p_attribute1            => l_attribute1
2114                       ,p_attribute2            => l_attribute2
2115                       ,p_attribute3            => l_attribute3
2116                       ,p_attribute4            => l_attribute4
2117                       ,p_attribute5            => l_attribute5
2118                       ,p_attribute6            => l_attribute6
2119                       ,p_attribute7            => l_attribute7
2120                       ,p_attribute8            => l_attribute8
2121                       ,p_attribute9            => l_attribute9
2122                       ,p_attribute10           => l_attribute10
2123                       ,p_attribute11           => l_attribute11
2124                       ,p_attribute12           => l_attribute12
2125                       ,p_attribute13           => l_attribute13
2126                       ,p_attribute14           => l_attribute14
2127                       ,p_attribute15           => l_attribute15
2128                       ,p_RETURN_msg            => l_return_msg
2129                       ,p_validate_status       => l_validate_status
2130                       );
2131 
2132                  --end if;
2133 
2134                   IF l_validate_status = 'N'
2135                     THEN
2136                          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2137                          THEN
2138                               pa_interface_utils_pub.map_new_amg_msg
2139                                         ( p_old_message_code => 'PA_INVALID_FF_VALUES'
2140                                         ,p_msg_attribute    => 'CHANGE'
2141                                         ,p_resize_flag      => 'N'
2142                                         ,p_msg_context      => 'FLEX'
2143                                         ,p_attribute1       => l_return_msg
2144                                         ,p_attribute2       => ''
2145                                         ,p_attribute3       => ''
2146                                         ,p_attribute4       => ''
2147                                         ,p_attribute5       => '');
2148                         END IF;
2149                     RAISE FND_API.G_EXC_ERROR;
2150                   END IF;
2151                END IF;
2152         --Bug 6153503 end
2153 --End add rtarway, 3908013
2154 
2155                   PA_TASK_PUB1.Create_Schedule_Version(
2156                       p_element_version_id     => l_task_version_id
2157                      ,p_init_msg_list            => l_init_msg_list
2158                      ,p_scheduled_start_date   => l_scheduled_start_date
2159                      ,p_scheduled_end_date     => l_scheduled_finish_date
2160                      ,p_calendar_id                   => P_CALENDAR_ID
2161                      ,p_obligation_start_date     => p_obligation_start_date
2162                      ,p_obligation_end_date    => p_obligation_finish_date
2163                      ,p_actual_start_date            => p_actual_start_date
2164                      ,p_actual_finish_date     => p_actual_finish_date
2165                      ,p_estimate_start_date    => p_estimated_start_date
2166                      ,p_estimate_finish_date   => p_estimated_finish_date
2167                      ,p_duration                 => p_duration
2168                      ,p_early_start_date             => p_early_start_date
2169                      ,p_early_end_date          => p_early_finish_date
2170                      ,p_late_start_date         => p_late_start_date
2171                      ,p_late_end_date           => p_late_finish_date
2172                      ,p_milestone_flag          => p_milestone_flag
2173                      ,p_critical_flag           => p_critical_flag
2174                      ,p_WQ_PLANNED_QUANTITY     => l_wq_planned_quantity  --bug  2824612
2175                      ,p_PLANNED_EFFORT          => p_planned_effort
2176                      --Bug 6153503
2177                      ,p_attribute_category      => l_attribute_category --l_ver_sch_attr_rec.attribute_category
2178                      ,p_attribute1              => l_attribute1--l_ver_sch_attr_rec.attribute1
2179                      ,p_attribute2              => l_attribute2--l_ver_sch_attr_rec.attribute2
2180                      ,p_attribute3              => l_attribute3--l_ver_sch_attr_rec.attribute3
2181                      ,p_attribute4              => l_attribute4--l_ver_sch_attr_rec.attribute4
2182                      ,p_attribute5              => l_attribute5--l_ver_sch_attr_rec.attribute5
2183                      ,p_attribute6              => l_attribute6--l_ver_sch_attr_rec.attribute6
2184                      ,p_attribute7              => l_attribute7--l_ver_sch_attr_rec.attribute7
2185                      ,p_attribute8              => l_attribute8--l_ver_sch_attr_rec.attribute8
2186                      ,p_attribute9              => l_attribute9--l_ver_sch_attr_rec.attribute9
2187                      ,p_attribute10             => l_attribute10--l_ver_sch_attr_rec.attribute10
2188                      ,p_attribute11             => l_attribute11--l_ver_sch_attr_rec.attribute11
2189                      ,p_attribute12             => l_attribute12--l_ver_sch_attr_rec.attribute12
2190                      ,p_attribute13             => l_attribute13--l_ver_sch_attr_rec.attribute13
2191                      ,p_attribute14             => l_attribute14--l_ver_sch_attr_rec.attribute14
2192                      ,p_attribute15             => l_attribute15--l_ver_sch_attr_rec.attribute15
2193                      --Bug 6153503 end
2194 -- (Begin Venkat) new params for bug #3450684 ----------------------------------------------
2195              ,p_ext_act_duration    => p_ext_act_duration
2196              ,p_ext_remain_duration => p_ext_remain_duration
2197              ,p_ext_sch_duration    => p_ext_sch_duration
2198 -- (End Venkat) new params for bug #3450684 -------------------------------------------------
2199 
2200 -- begin Bug 3654243 -----------------------------------------------------------------------
2201         ,p_def_sch_tool_tsk_type_code =>   p_sch_tool_tsk_type_code
2202         ,p_constraint_type_code  =>        p_constraint_type_code
2203         ,p_constraint_date =>              p_constraint_date
2204         ,p_free_slack =>                   p_free_slack
2205         ,p_total_slack =>                  p_total_slack
2206         ,p_effort_driven_flag =>           p_effort_driven_flag
2207         ,p_level_assignments_flag =>       p_level_assignments_flag
2208 -- end Bug 3654243 -------------------------------------------------------------------------
2209 
2210                      ,x_pev_schedule_id         => x_pev_schedule_id
2211                      ,x_return_status           => l_return_status
2212                      ,x_msg_count                => l_msg_count
2213                      ,x_msg_data                 => l_msg_data
2214                  );
2215                  -- end xxlu changes
2216               END IF;
2217               CLOSE cur_pa_proj_elem_vers2;
2218 
2219               IF l_return_status <> 'S'
2220               THEN
2221                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2222                                        ,p_msg_name       => 'PA_PS_NO_TASK_SCH_VER_CREATED');
2223                   raise api_error;
2224               END IF;
2225 
2226               --bug 2732895   --create_task_structure
2227               --The following API should NOT be called if CREATE_TASK_STRUCTURE is called from AMG.
2228               --AMG recalculates the weightings once all the tasks are created.
2229               IF p_calling_module = 'FORMS'
2230               THEN
2231                   IF l_workplan_enabled  = 'Y'
2232                   THEN
2233                       PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings(
2234                             p_tasks_in             => l_tasks_out            --null if called for one task
2235                            ,p_task_version_id      => l_task_version_id
2236                            ,x_msg_count            => l_msg_count
2237                            ,x_msg_data             => l_msg_data
2238                            ,x_return_status        => l_return_status
2239                        );
2240                       IF l_return_status <> 'S'
2241                       THEN
2242                           raise api_error;
2243                       END IF;
2244 
2245                       --Bug 3170832  --uncommenting the call to rollup dates
2246                       PA_PROJ_TASK_STRUC_PUB.rollup_dates(
2247                             p_tasks_in             => l_tasks_out            --null if called for one task
2248                            ,p_task_version_id      => l_task_version_id
2249                            ,p_structure_version_id => l_structure_version_id
2250                            ,p_project_id           => p_project_id
2251                            ,x_msg_count            => l_msg_count
2252                            ,x_msg_data             => l_msg_data
2253                            ,x_return_status        => l_return_status
2254                        );
2255                       IF l_return_status <> 'S'
2256                       THEN
2257                           raise api_error;
2258                       END IF;
2259                       --Bug 3170832  --uncommenting the call to rollup dates
2260 
2261                   END IF;
2262               END IF;
2263               --bug 2732895
2264 
2265    END IF;
2266    CLOSE cur_pa_temp_import;
2267 
2268 /* Bug # 3420093 - Adding Progress Management modifications to create_task flow. */
2269 
2270     if (p_structure_type = 'WORKPLAN' ) then
2271 
2272                 if (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(x_task_version_id) = 'Y') then
2273                 l_add_task_ver_ids.extend(1);
2274                 l_add_planned_effort.extend(1);
2275                 l_add_start_date.extend(1);
2276                 l_add_end_date.extend(1);
2277 
2278                 l_add_task_ver_ids(l_add_task_ver_ids.count):= x_task_version_id;
2279                 l_add_planned_effort(l_add_planned_effort.count):= p_planned_effort;
2280                                 l_add_start_date(l_add_start_date.count):= p_actual_start_date;
2281                                 l_add_end_date(l_add_end_date.count):= p_actual_finish_date;
2282             else
2283                                 l_del_task_ver_ids.extend(1);
2284 
2285                                 l_del_task_ver_ids(l_del_task_ver_ids.count):= x_task_version_id;
2286             end if;
2287     end if;
2288 
2289     -- Calling pa_task_pub1.call_add_planning_txns for lowest level tasks.
2290 
2291     begin
2292             pa_task_pub1.call_add_planning_txns(
2293             p_tasks_ver_ids                  => l_add_task_ver_ids,
2294             p_planned_effort                 => l_add_planned_effort,
2295             p_project_id                     => p_project_id,
2296             p_structure_version_id           => l_structure_version_id,  --replace p_structure_version_id, bug 3838186
2297             p_start_date                     => l_add_start_date,
2298             p_end_date                       => l_add_end_date,
2299             p_pm_product_code                => P_PM_SOURCE_CODE,   --bug 3811243
2300             x_return_status                  => l_return_status,
2301             x_msg_count                      => l_msg_count,
2302             x_msg_data                       => l_msg_data
2303             );
2304     exception
2305             when others then
2306                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'pa_project_pub',
2307                                 p_procedure_name => 'CREATE_PROJECT',
2308                                         p_error_text     => substrb('PA_TASK_PUB1.CALL_ADD_PLANNING_TXNS:'||sqlerrm,1,240));
2309             raise fnd_api.g_exc_error;
2310         end;
2311 
2312     -- Calling pa_fp_planning_transaction_pub.delete_planning_transactions for higher level tasks.
2313 
2314        begin
2315            pa_fp_planning_transaction_pub.delete_planning_transactions
2316            (
2317             p_context                      => 'WORKPLAN'
2318            ,p_task_or_res                  => 'TASKS'
2319            ,p_element_version_id_tbl       => l_del_task_ver_ids
2320            ,x_return_status                => l_return_status
2321            ,x_msg_count                    => l_msg_count
2322            ,x_msg_data                     => l_msg_data
2323           );
2324        exception
2325            when others then
2326                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'pa_project_pub',
2327                                         p_procedure_name => 'CREATE_PROJECT',
2328                                         p_error_text     => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.DELETE_PLANNING_TRANSACTIONS:'||SQLERRM,1,240));
2329            raise fnd_api.g_exc_error;
2330        end;
2331 
2332 /* Bug # 3420093 - Adding Progress Management modifications to create_task flow. */
2333 
2334 
2335   x_return_status := FND_API.G_RET_STS_SUCCESS;
2336 EXCEPTION
2337 WHEN API_ERROR THEN
2338   x_return_status := FND_API.G_RET_STS_ERROR;
2339   rollback to create_task_struc;
2340 WHEN OTHERS THEN
2341   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2342   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
2343                           p_procedure_name => 'create_task_structure',
2344                           p_error_text     => SUBSTRB(SQLERRM,1,240));
2345   rollback to create_task_struc;
2346   raise;
2347 END create_task_structure;
2348 -- API name                      : update_task_structure
2349 -- Type                          : PL/sql Public procedure
2350 -- Pre-reqs                      : None
2351 -- Return Value                  : N/A
2352 -- Prameters
2353 --   p_calling_module                   IN VARCHAR2
2354 --  ,p_task_id                          IN NUMBER
2355 --  ,p_task_number                      IN VARCHAR2
2356 --  ,p_task_name                        IN VARCHAR2
2357 --  ,p_task_description                 IN VARCHAR2
2358 --  ,p_carrying_out_organization_id     IN NUMBER
2359 --  ,p_task_manager_id                  IN NUMBER
2360 --  ,p_pm_product_code                  IN VARCHAR2
2361 --  ,p_pm_task_reference                IN VARCHAR2
2362 --  ,p_record_version_number           IN NUMBER
2363 --  ,x_msg_count                        OUT NUMBER
2364 --  ,x_msg_data                         OUT VARCHAR2
2365 --  ,x_return_status                    OUT VARCHAR2--
2366 --  History
2367 --
2368 --  25-APR-02      MAansari             -Created
2369 --  05-APR-2004    Rakesh Raghavan      Progress Management Changes. Bug # 3420093.
2370 --  18-MAY-2004    Rakesh Raghavan      Modified call to API: pa_task_pub1.update_task_det_sch_info().
2371 
2372 PROCEDURE update_task_structure
2373 (
2374    p_calling_module                   IN VARCHAR2 := 'FORMS'
2375   ,p_ref_task_id                      IN NUMBER
2376   ,p_project_id                       IN NUMBER
2377   ,p_task_id                          IN NUMBER
2378   ,p_task_number                      IN VARCHAR2
2379   ,p_task_name                        IN VARCHAR2
2380   ,p_task_description                 IN VARCHAR2
2381   ,p_carrying_out_organization_id     IN NUMBER
2382   ,p_structure_type                   IN VARCHAR2 := 'FINANCIAL'
2383   ,p_task_manager_id                  IN NUMBER
2384   ,p_pm_product_code                  IN VARCHAR2
2385   ,p_pm_task_reference                IN VARCHAR2
2386   ,p_location_id                      IN NUMBER
2387   ,p_actual_start_date                  IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2388   ,p_actual_finish_date                 IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2389   ,p_early_start_date                   IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2390   ,p_early_finish_date                  IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2391   ,p_late_start_date                    IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2392   ,p_late_finish_date                   IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2393   ,p_scheduled_start_date               IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2394   ,p_scheduled_finish_date              IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2395   ,P_OBLIGATION_START_DATE              IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2396   ,P_OBLIGATION_FINISH_DATE             IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2397   ,P_ESTIMATED_START_DATE               IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2398   ,P_ESTIMATED_FINISH_DATE              IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2399   ,P_BASELINE_START_DATE                IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2400   ,P_BASELINE_FINISH_DATE               IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2401   ,P_CLOSED_DATE                        IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2402   ,P_WQ_UOM_CODE                        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2403   ,P_WQ_ITEM_CODE                       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2404   ,P_STATUS_CODE                        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2405   ,P_WF_STATUS_CODE                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2406   ,P_PRIORITY_CODE                      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2407   ,P_MILESTONE_FLAG                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2408   ,P_CRITICAL_FLAG                      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2409   ,P_INC_PROJ_PROGRESS_FLAG             IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2410   ,P_LINK_TASK_FLAG                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2411   ,P_CALENDAR_ID                        IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2412   ,P_PLANNED_EFFORT                     IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2413   ,P_DURATION                           IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2414   ,P_PLANNED_WORK_QUANTITY              IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2415   ,P_TASK_TYPE                          IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2416   ,p_structure_version_id               IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2417   ,p_parent_structure_id               IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2418   ,p_phase_version_id                  IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2419   ,P_PHASE_CODE                         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2420 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
2421   ,p_ext_act_duration               IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
2422   ,p_ext_remain_duration            IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
2423   ,p_ext_sch_duration               IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
2424 -- (end venkat) new params for bug #3450684 -------------------------------------------------
2425 -- (begin) add new params bug - 3654243 -----
2426   ,p_base_percent_comp_deriv_code   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2427   ,p_sch_tool_tsk_type_code     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2428   ,p_constraint_type_code       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2429   ,p_constraint_date            IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2430   ,p_free_slack             IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2431   ,p_total_slack            IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2432   ,p_effort_driven_flag         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2433   ,p_level_assignments_flag     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2434   ,p_invoice_method         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2435   ,p_customer_id            IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2436   ,p_gen_etc_source_code        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2437 -- (end) add new params bug - 3654243 -----
2438 -- Progress Management Changes. Bug # 3420093.
2439   ,p_etc_effort                 IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2440   ,p_percent_complete           IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2441 -- Progress Management Changes. Bug # 3420093.
2442 -- rtarway, BUG 3908013
2443      ,p_attribute_category            IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2444      ,p_attribute1                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2445      ,p_attribute2                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2446      ,p_attribute3                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2447      ,p_attribute4                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2448      ,p_attribute5                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2449      ,p_attribute6                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2450      ,p_attribute7                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2451      ,p_attribute8                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2452      ,p_attribute9                    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2453      ,p_attribute10                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2454      --Bug 6153503
2455      ,p_attribute11                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2456      ,p_attribute12                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2457      ,p_attribute13                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2458      ,p_attribute14                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2459      ,p_attribute15                   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2460      ,P_PM_SOURCE_CODE                    IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- Added for Huawei 15876400
2461   ,x_msg_count                        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2462   ,x_msg_data                         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2463   ,x_return_status                    OUT NOCOPY VARCHAR2  --File.Sql.39 bug 4440895
2464   ) IS
2465 
2466   l_return_status       VARCHAR2(1);
2467   l_msg_count           NUMBER;
2468   l_msg_data            VARCHAR2(2000);
2469   API_ERROR            EXCEPTION;
2470   l_record_version_number NUMBER;
2471 
2472 
2473   CURSOR cur_proj_is_template
2474   IS     select 'Y'
2475            from pa_projects_all
2476           where project_id = p_project_id
2477             and template_flag = 'Y';
2478   l_template_flag VARCHAR2(1);
2479 
2480     CURSOR cur_rec_ver_num
2481     IS
2482       SELECT record_version_number
2483         FROM pa_proj_elements
2484        WHERE proj_element_id = p_task_id
2485          AND object_type = 'PA_TASKS';
2486 
2487 /* Bug 2680486 -- Performance changes -- Added d.project_id= c.project_id
2488                   join in the following cursor*/
2489 
2490    CURSOR cur_struc_ver_fin
2491    IS
2492      SELECT c.element_version_id
2493        FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
2494             ,pa_proj_elem_ver_structure d
2495       WHERE c.project_id = p_project_id
2496         AND a.structure_type_id = b.structure_type_id
2497         AND b.proj_element_id = c.proj_element_id
2498         AND a.structure_type = p_structure_type
2499      AND d.project_id = c.project_id
2500         AND d.element_version_id = c.element_version_id
2501         AND d.status_code = 'STRUCTURE_PUBLISHED'
2502         AND d.latest_eff_published_flag = 'Y'
2503         ;
2504 
2505 /* Bug 2680486 -- Performance changes -- Added d.project_id= c.project_id
2506                   join in the following cursor*/
2507 
2508 
2509    CURSOR cur_struc_ver_wp
2510    IS
2511      SELECT c.element_version_id
2512        FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
2513             ,pa_proj_elem_ver_structure d
2514       WHERE c.project_id = p_project_id
2515         AND a.structure_type_id = b.structure_type_id
2516         AND b.proj_element_id = c.proj_element_id
2517         AND a.structure_type = p_structure_type
2518      AND d.project_id = c.project_id
2519         AND d.element_version_id = c.element_version_id
2520         AND d.status_code = 'STRUCTURE_WORKING'
2521         ;
2522 
2523    CURSOR cur_pa_tasks( c_task_id NUMBER )
2524    IS
2525      SELECT parent_task_id
2526        FROM pa_tasks
2527       WHERE project_id = p_project_id
2528         AND task_id = c_task_id;
2529 
2530    CURSOR cur_pa_task_ver( c_structure_version_id NUMBER, c_task_id NUMBER )
2531    IS
2532      SELECT element_version_id, record_version_number
2533        FROM pa_proj_element_versions
2534       WHERE project_id = p_project_id
2535         AND proj_element_id = c_task_id
2536         AND parent_structure_version_id = c_structure_version_id
2537         AND object_type = 'PA_TASKS';
2538 
2539    CURSOR cur_pa_peer_task_above( c_structure_version_id NUMBER, c_task_version_id NUMBER )
2540    IS
2541      SELECT element_version_id
2542        FROM pa_proj_element_versions
2543       WHERE project_id = p_project_id
2544         AND parent_structure_version_id = c_structure_version_id
2545         AND display_sequence = ( SELECT max( display_sequence ) FROM pa_proj_element_versions
2546                                   WHERE parent_structure_version_id = c_structure_version_id
2547                                     AND display_sequence < ( SELECT display_sequence FROM pa_proj_element_versions
2548                                                                WHERE element_version_id = c_task_version_id )
2549                                     AND wbs_level = ( SELECT wbs_level FROM pa_proj_element_versions
2550                                                        WHERE element_version_id = c_task_version_id )
2551                                )
2552         AND object_type = 'PA_TASKS';
2553 
2554   CURSOR cur_proj_sch( c_task_version_id NUMBER )
2555   IS
2556     SELECT pev_schedule_id, record_version_number
2557       FROM pa_proj_elem_ver_schedule
2558      WHERE element_version_id = c_task_version_id
2559        AND project_id = p_project_id
2560        AND proj_element_id = p_task_id;  --This will give u unique record.
2561 
2562     CURSOR cur_pa_obj_rel( c_task_version_id NUMBER )
2563     IS
2564       SELECT object_id_from1
2565         FROM pa_object_relationships
2566        WHERE object_id_to1 = c_task_version_id
2567          and relationship_type = 'S';
2568 
2569     CURSOR cur_pa_proj_elem_ver( c_task_version_id NUMBER )
2570     IS
2571       SELECT proj_element_id
2572         FROM pa_proj_element_versions
2573        WHERE project_id = p_project_id
2574          AND element_version_id = c_task_version_id
2575          AND object_type = 'PA_TASKS';
2576 
2577     CURSOR cur_pa_proj_elem_vers2( c_task_version_id NUMBER )
2578   IS
2579     SELECT 'x'
2580       FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
2581      WHERE c.project_id = p_project_id
2582        AND a.structure_type_id = b.structure_type_id
2583        AND b.proj_element_id = c.proj_element_id
2584        AND a.structure_type = 'WORKPLAN'
2585        AND element_version_id = ( SELECT parent_structure_version_id
2586                                    FROM  pa_proj_element_versions
2587                                    WHERE element_version_id = c_task_version_id );
2588 
2589   -- xxlu added for DFF attributes for calling update_schedule_version
2590   CURSOR cur_ver_sch_attr_rec(c_element_version_id IN NUMBER) IS
2591     SELECT *
2592     FROM pa_proj_elem_ver_schedule
2593     WHERE element_version_id = c_element_version_id
2594      and  project_id = p_project_id;
2595   l_ver_sch_attr_rec cur_ver_sch_attr_rec%ROWTYPE;
2596   -- end xxlu changes
2597 
2598   l_structure_version_id   NUMBER;
2599   l_parent_task_id         NUMBER;
2600   l_parent_of_ref_task_id  NUMBER;
2601   l_ref_task_version_id    NUMBER;
2602   l_task_version_id        NUMBER;
2603   l_peer_or_sub            VARCHAR2(4);
2604   l_pev_schedule_id        NUMBER;
2605 
2606   v_parent_task_ver_id_of_ref  NUMBER;
2607   v_parent_task_version_id     NUMBER;
2608   l_dummy_char                 VARCHAR2(1);
2609 --bug 2736392
2610   l_str_status_code            VARCHAR2(150);
2611 --bug 2736392
2612   l_init_msg_list              VARCHAR2(1);
2613 
2614 /* Bug 2736392 Begin */
2615     CURSOR cur_struc_ver_wp2
2616    IS
2617      SELECT c.element_version_id
2618        FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
2619             ,pa_proj_elem_ver_structure d
2620       WHERE c.project_id = p_project_id
2621         AND a.structure_type_id = b.structure_type_id
2622         AND b.proj_element_id = c.proj_element_id
2623         AND a.structure_type = p_structure_type
2624      AND d.project_id = c.project_id
2625         AND d.element_version_id = c.element_version_id
2626         AND (d.status_code = 'STRUCTURE_SUBMITTED' OR d.status_code='STRUCTURE_REJECTED' OR d.status_code= 'STRUCTURE_APPROVED')
2627         ;
2628 l_dummy_num number;
2629 /* Bug 2736392 End */
2630 
2631 l_db_parent_task_version_id number; -- Bug 2790275
2632 l_passed_parent_task_ver_id number; -- Bug 2790275
2633 
2634 --bug 2824612
2635   l_wq_planned_quantity     NUMBER;
2636   l_task_type_id            NUMBER;
2637 --bug 2824612
2638 
2639   l_tasks_out     pa_project_pub.task_out_tbl_type ;     --dummy variables.  --bug 2856033
2640   l_process_code           VARCHAR2(30);
2641 
2642   l_request_id    pa_proj_elem_ver_structure.conc_request_id%TYPE; -- Bug 3091798
2643 
2644 /* Added for bug 3290037 */
2645 
2646    CURSOR cur_task_attr IS
2647      SELECT pe.ELEMENT_NUMBER, pe.NAME
2648        FROM pa_proj_elements pe
2649       WHERE pe.proj_element_id = p_task_id
2650         AND pe.object_type = 'PA_TASKS';
2651 
2652    l_task_number       pa_proj_elements.element_number%TYPE;
2653    l_task_name         pa_proj_elements.name%TYPE;
2654 
2655    --rtarway,3666023
2656    l_task_id           pa_proj_elements.PROJ_ELEMENT_ID%TYPE;
2657 
2658 /* End of code for bug 3290037 */
2659 
2660 /* Bug # 3420093 - Adding Progress Management modifications to update_task flow. */
2661 
2662 --Bug 5256359. Changed the type of these pl-sql tbls to SYSTEM.pa_xxx_tbl_type from PA_xxx_1000_xxx.
2663 
2664 --New tbls (suffixed with _prm), created  below will be used as parameters in the call to
2665 --pa_task_pub1.call_add_planning_txns
2666 
2667 l_add_task_ver_ids          SYSTEM.pa_num_tbl_type  := SYSTEM.pa_num_tbl_type();
2668 l_add_planned_effort        SYSTEM.pa_num_tbl_type  := SYSTEM.pa_num_tbl_type();
2669 l_add_start_date            SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
2670 l_add_end_date              SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
2671 l_add_task_ver_ids_prm      PA_NUM_1000_NUM         := PA_NUM_1000_NUM();
2672 l_add_planned_effort_prm    PA_NUM_1000_NUM         := PA_NUM_1000_NUM();
2673 l_add_start_date_prm        PA_DATE_1000_DATE       := PA_DATE_1000_DATE();
2674 l_add_end_date_prm          PA_DATE_1000_DATE       := PA_DATE_1000_DATE();
2675 rec_count                   NUMBER;
2676 
2677         l_del_task_ver_ids      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
2678 
2679     cursor l_task_cur(p_project_id NUMBER, p_struct_ver_id NUMBER) is
2680 /*  --bug 3880482
2681     select
2682     element_version_id,planned_effort,actual_start_date,actual_finish_date
2683     from pa_proj_elem_ver_schedule ppevs, pa_proj_elements ppe
2684     where ppevs.project_id = ppe.project_id
2685     and ppevs.proj_element_id = ppe.proj_element_id
2686     and ppe.object_type = 'PA_TASKS'
2687     and ppevs.project_id = p_project_id;
2688 */
2689     SELECT
2690       ppv.element_version_id
2691      ,ppevs.planned_effort
2692      ,ppevs.actual_start_date
2693      ,ppevs.actual_finish_date
2694     FROM
2695       pa_proj_elem_ver_schedule ppevs
2696      ,pa_proj_element_versions ppv
2697     WHERE
2698       ppevs.project_id = ppv.project_id
2699       and ppevs.proj_element_id = ppv.proj_element_id
2700       and ppv.object_type = 'PA_TASKS'
2701       and ppv.element_version_id = ppevs.element_version_id
2702       and ppv.project_id = p_project_id
2703       and ppv.parent_structure_version_id = p_struct_ver_id;
2704 
2705     l_task_cur_rec      l_task_cur%rowtype;
2706 
2707 /* Bug # 3420093 - Adding Progress Management modifications to update_task flow. */
2708 
2709 --rtarway, 3908013
2710 l_attribute_category          VARCHAR2(150);
2711 l_attribute1                  VARCHAR2(150);
2712 l_attribute2                  VARCHAR2(150);
2713 l_attribute3                  VARCHAR2(150);
2714 l_attribute4                  VARCHAR2(150);
2715 l_attribute5                  VARCHAR2(150);
2716 l_attribute6                  VARCHAR2(150);
2717 l_attribute7                  VARCHAR2(150);
2718 l_attribute8                  VARCHAR2(150);
2719 l_attribute9                  VARCHAR2(150);
2720 l_attribute10                 VARCHAR2(150);
2721 --Bug 6153503
2722 l_attribute11                 VARCHAR2(150);
2723 l_attribute12                 VARCHAR2(150);
2724 l_attribute13                 VARCHAR2(150);
2725 l_attribute14                 VARCHAR2(150);
2726 l_attribute15                 VARCHAR2(150);
2727 l_return_msg                  varchar2(2000);
2728 l_validate_status             varchar2(1);
2729 
2730 -- Begin fix for Bug # 4373055.
2731 
2732 l_str_ver_id            NUMBER:= null;
2733 l_conc_request_id       NUMBER := null;
2734 l_message_name      VARCHAR2(30) := null;
2735 l_message_type      VARCHAR2(30) := null;
2736 
2737 -- End fix for Bug # 4373055.
2738 
2739 -- 7358214
2740 
2741 CURSOR check_hidden_assgn_exists(p_element_version_id IN NUMBER) IS
2742 SELECT 'Y'
2743 FROM pa_resource_assignments ra
2744 WHERE ra.ta_display_flag = 'N'
2745 AND ra.wbs_element_version_id = p_element_version_id
2746 AND rownum = 1;
2747 
2748 l_hidden_assgn VARCHAR2(1);
2749 -- 7358214
2750 BEGIN
2751 
2752       --Clear Error Messages.
2753       IF FND_MSG_PUB.count_msg = 0
2754       THEN
2755           FND_MSG_PUB.initialize;
2756       END IF;
2757 
2758       SAVEPOINT update_task_struc;
2759 
2760       OPEN cur_proj_is_template;
2761       FETCH cur_proj_is_template into l_template_flag;
2762       IF cur_proj_is_template%NOTFOUND THEN
2763          l_template_flag := 'N';
2764       END IF;
2765       CLOSE cur_proj_is_template;
2766 
2767       OPEN cur_rec_ver_num;
2768       FETCH cur_rec_ver_num INTO l_record_version_number;
2769       CLOSE cur_rec_ver_num;
2770 
2771 ---The following code is added to prevent message list re-initialization if there are any messages already on stack.
2772         IF p_calling_module = 'AMG' AND FND_MSG_PUB.count_msg > 0
2773         THEN
2774             l_init_msg_list := 'F';
2775         ELSE
2776             l_init_msg_list := 'T';
2777         END IF;
2778 
2779      /* Added for bug 3290037 */
2780 
2781        OPEN cur_task_attr;
2782        FETCH cur_task_attr INTO l_task_number, l_task_name;
2783        CLOSE cur_task_attr;
2784        --dbms_output.put_line(('Value of p_task_number' ||p_task_number);
2785        --dbms_output.put_line(('Value of l_task_number' ||l_task_number);
2786 
2787       IF ( p_task_number <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_task_number IS NOT NULL)
2788       /* bug#5243018 : Reverting the fix in Bug 4120380
2789       AND nvl(p_task_number,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
2790            nvl(l_task_number,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) --check added for BUg 4120380 Aditi */
2791       THEN
2792        l_task_number := p_task_number;
2793 	 /* bug#5243018 : Reverting the fix in Bug 4120380
2794        -- dbms_output.put_line('printed once');
2795        IF p_calling_module = 'AMG' THEN --Added this clause for Bug 4762147
2796        -- This is required so that when Update_tas_Strcucture is caled from forms , - sign does not get prepended
2797        l_task_number := '-'||p_task_number;
2798        ELSE
2799        l_task_number := p_task_number;
2800        END IF;*/ /** '-' prefixed to p_task_number for Bug 4120380. This is to ensure that the when task_numbers are being interchanged,tasks get saved to the database sucessfully to bypass the constranit PA_PROJ_ELEMENTS_U2.
2801        After updating all the tasks in the script, code again updates the task_number, trimming the '-' added. **/
2802       END IF;
2803        --dbms_output.put_line('Value of l_task_number' ||l_task_number);
2804 
2805       IF ( p_task_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_task_name IS NOT NULL )
2806       THEN
2807        l_task_name := p_task_name;
2808       END IF;
2809 
2810       /* End of code added for bug 3290037 */
2811       --Begin add by rtarway for BUG 3666023
2812       --3663712, changed 'OR' to and 'AND' in following If condition
2813       IF (  p_task_id IS NOT NULL AND p_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  )
2814       THEN
2815              l_task_id := p_task_id;
2816       ELSIF
2817           ( p_pm_task_reference IS NOT NULL AND p_pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
2818       THEN
2819              PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_all
2820                                               (p_pa_project_id     => p_project_id
2821                                               ,p_pm_task_reference => p_pm_task_reference
2822                                               ,p_structure_type    => p_structure_type
2823                                               ,p_out_task_id       => l_task_id
2824                                               ,p_return_status     => l_return_status);
2825 
2826              IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
2827                   THEN
2828                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2829              ELSIF l_return_status = FND_API.G_RET_STS_ERROR
2830                   THEN
2831                     RAISE FND_API.G_EXC_ERROR;
2832              END IF;
2833       END IF;
2834       --End add by rtarway for BUG 3666023
2835 
2836 
2837       PA_TASK_PUB1.Update_Task(
2838          p_calling_module             => p_calling_module
2839         ,p_init_msg_list            => l_init_msg_list
2840         --rtarway for BUG 3666023
2841         --,p_task_id                    => p_task_id
2842         ,p_task_id                    => l_task_id
2843         ,p_task_number                 => l_task_number  /* Modified p_task_number to l_task_number for 3290037 */
2844         ,p_task_name                   => l_task_name    /* Modified p_task_name to l_task_name for 3290037 */
2845         ,p_task_description           => p_task_description
2846         ,p_task_manager_id            => p_TASK_MANAGER_ID
2847         ,p_carrying_out_org_id       => p_carrying_out_organization_id
2848         ,p_pm_product_code            => p_pm_product_code
2849         ,p_pm_task_reference          => p_pm_task_reference
2850         ,p_location_id                 => p_location_id
2851         ,p_priority_code         => p_priority_code
2852         ,p_TYPE_ID                     => p_task_type
2853         ,p_status_code                 => P_STATUS_CODE
2854         ,p_inc_proj_progress_flag     => p_inc_proj_progress_flag
2855         ,p_closed_date                 => p_closed_date
2856         ,p_record_version_number      => l_record_version_number
2857         ,P_UOM_CODE              => P_WQ_UOM_CODE
2858         ,p_work_item_code           => P_WQ_ITEM_CODE
2859 ----- begin Bug 3654243 --------------------------------------------
2860     ,p_Base_Perc_Comp_Deriv_Code => p_base_percent_comp_deriv_code
2861         ,p_gen_etc_src_code          => p_gen_etc_source_code
2862 ----- end Bug 3654243 ----------------------------------------------
2863         ,x_return_status         => l_return_status
2864         ,x_msg_count                   => l_msg_count
2865         ,x_msg_data               => l_msg_data
2866         ,P_PM_SOURCE_CODE         => P_PM_SOURCE_CODE -- Huawei 15876400 source code
2867        );
2868 --dbms_output.put_line('Before calling PA_TASK_PUB1.Update_Task l_return_status'||l_return_status);
2869 
2870         IF l_return_status <> 'S'
2871         THEN
2872             PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2873                                  ,p_msg_name       => 'PA_PS_TASK_NOT_UPDATED'
2874                  /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
2875                  ,p_token1         => 'PROJECT'
2876                  ,p_value1         =>  p_project_id
2877                  ,p_token2          => 'TASK'
2878                  ,p_value2          => l_task_id);
2879             raise api_error;
2880         END IF;
2881 
2882         IF p_calling_module = 'AMG' AND
2883            p_ref_task_id is NOT NULL    --to make sure that hierarchy is changed.
2884            AND p_ref_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  --bug 3701460
2885                                         --if p_ref_task_id is null then there is no hierarchy change
2886                                         --It is also true that it is not necessary that the hierarchy is changed even if
2887                                         --it p_ref_task_id is NOT null.
2888         THEN
2889 
2890           IF p_structure_version_id IS NULL OR
2891              p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2892           THEN
2893 
2894               IF p_structure_type = 'FINANCIAL'
2895               THEN
2896                   IF l_template_flag   = 'N'
2897                   THEN
2898                       --get structure version if its a top task
2899                       OPEN cur_struc_ver_fin;
2900                       FETCH cur_struc_ver_fin INTO l_structure_version_id;
2901                       CLOSE cur_struc_ver_fin;
2902                   ELSE
2903                       --For templates its always WORKING_STRUCTURE
2904                       OPEN cur_struc_ver_wp;
2905                       FETCH cur_struc_ver_wp INTO l_structure_version_id;
2906                       CLOSE cur_struc_ver_wp;
2907                   END IF;
2908               ELSE
2909                   OPEN cur_struc_ver_wp;
2910                   FETCH cur_struc_ver_wp INTO l_structure_version_id;
2911                   CLOSE cur_struc_ver_wp;
2912               END IF;
2913           ELSE
2914               l_structure_version_id := p_structure_version_id;
2915           END IF;
2916 
2917       /*** Commented for Bug 2736392 -- Added new code below
2918            This code will never do the intended task because p_structure_version_id and l_structure_version_id
2919            will be null in this case. If a structure version is in approved, submitted or rejected state, then it
2920            will never be returned from cursor cur_struc_ver_wp, so how can we get the status of a null struc ver.
2921 
2922           IF p_structure_version_id IS NOT NULL AND
2923              p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2924           THEN
2925               --Validate the incoming structure version id
2926               PA_PROJECT_STRUCTURE_UTILS.Structure_Version_Name_Or_Id(
2927                       p_structure_id                     => null
2928                      ,p_structure_version_name           => null
2929                      ,p_structure_version_id             => p_structure_version_id
2930                      ,p_check_id_flag                    => 'Y'
2931                      ,x_structure_version_id             => l_structure_version_id
2932                      ,x_return_status                    => l_return_status
2933                      ,x_error_message_code               => l_msg_data
2934                  );
2935               IF l_return_status <> 'S'
2936               THEN
2937                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2938                                 ,p_msg_name       => l_msg_data );
2939                   raise api_error;
2940               END IF;
2941               --bug 2736392
2942               l_str_status_code := PA_PROJECT_STRUCTURE_UTILS.get_structrue_version_status
2943                            ( p_project_id                => p_project_id
2944                              ,p_structure_version_id      => p_structure_version_id );
2945               IF l_str_status_code IS NULL
2946               THEN
2947                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2948                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID' );
2949                   raise api_error;
2950               ELSIF l_str_status_code in ( 'STRUCTURE_SUBMITTED', 'STRUCTURE_REJECTED', 'STRUCTURE_APPROVED' )
2951               THEN
2952                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2953                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID2' );
2954                   raise api_error;
2955               END IF;
2956               --bug 2736392
2957           END IF;
2958         ***/
2959      /* New Code Begin for Bug 2736392 -- Commnted the above code*/
2960 
2961        IF p_structure_version_id IS NOT NULL AND p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2962           THEN
2963               l_str_status_code := PA_PROJECT_STRUCTURE_UTILS.get_structrue_version_status
2964                            ( p_project_id                => p_project_id
2965                              ,p_structure_version_id      => p_structure_version_id );
2966               IF l_str_status_code IS NULL
2967               THEN
2968                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2969                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID' );
2970                   raise api_error;
2971               ELSIF l_str_status_code in ( 'STRUCTURE_SUBMITTED', 'STRUCTURE_REJECTED', 'STRUCTURE_APPROVED' )
2972               THEN
2973                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2974                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID2' );
2975                   raise api_error;
2976               END IF;
2977        ELSIF l_structure_version_id IS  NULL
2978           THEN
2979                  OPEN cur_struc_ver_wp2;
2980                  FETCH cur_struc_ver_wp2 INTO l_dummy_num;
2981                  CLOSE cur_struc_ver_wp2;
2982 
2983            IF l_dummy_num is NOT NULL THEN
2984                        PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2985                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID2' );
2986                     raise api_error;
2987            ELSE
2988                         PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
2989                                       ,p_msg_name       => 'PA_PS_INV_STR_VER_ID' );
2990                        raise api_error;
2991            END IF;
2992           END IF;
2993 
2994         /* New Code End for Bug 2736392 */
2995 
2996 
2997             --get the task version id of the reference task
2998             OPEN cur_pa_task_ver( l_structure_version_id, p_ref_task_id );
2999             FETCH cur_pa_task_ver INTO l_ref_task_version_id, l_record_version_number;
3000             CLOSE cur_pa_task_ver;
3001             --get task version id of the task being moved or updated
3002             --rtarway, 3666023, replace by l_task_id
3003             --OPEN cur_pa_task_ver( l_structure_version_id, p_task_id );
3004             OPEN cur_pa_task_ver( l_structure_version_id, l_task_id );
3005             FETCH cur_pa_task_ver INTO l_task_version_id, l_record_version_number;
3006             CLOSE cur_pa_task_ver;
3007 
3008 
3009             IF p_structure_type = 'FINANCIAL'
3010             THEN
3011                --get the parent of the tak id
3012                --rtarway, 3666023, replace by l_task_id
3013                --OPEN cur_pa_tasks( p_task_id );
3014                OPEN cur_pa_tasks( l_task_id );
3015                FETCH cur_pa_tasks INTO l_parent_task_id;
3016                CLOSE cur_pa_tasks;
3017 
3018                --get the parent of the ref tak id
3019                OPEN cur_pa_tasks( p_ref_task_id );
3020                FETCH cur_pa_tasks INTO l_parent_of_ref_task_id;
3021                CLOSE cur_pa_tasks;
3022 
3023             ELSIF p_structure_type = 'WORKPLAN'
3024             THEN
3025               --get the parent task version id of the task version id
3026               OPEN cur_pa_obj_rel( l_task_version_id ) ;
3027               FETCH cur_pa_obj_rel INTO v_parent_task_version_id;
3028               CLOSE cur_pa_obj_rel;
3029 
3030 
3031               --get the parent task id of the parent task version id
3032               OPEN cur_pa_proj_elem_ver( v_parent_task_version_id ) ;
3033               FETCH cur_pa_proj_elem_ver INTO l_parent_task_id;
3034               CLOSE cur_pa_proj_elem_ver;
3035 
3036 
3037 
3038               --get the parent task version id of the ref task version id
3039               OPEN cur_pa_obj_rel( l_ref_task_version_id ) ;
3040               FETCH cur_pa_obj_rel INTO v_parent_task_ver_id_of_ref;
3041               CLOSE cur_pa_obj_rel;
3042 
3043 
3044               --get the parent task id of the parent ref task version id
3045               OPEN cur_pa_proj_elem_ver( v_parent_task_ver_id_of_ref ) ;
3046               FETCH cur_pa_proj_elem_ver INTO l_parent_of_ref_task_id;
3047               CLOSE cur_pa_proj_elem_ver;
3048 
3049 
3050             END IF;
3051 
3052             IF p_ref_task_id = l_parent_task_id
3053             THEN
3054                l_peer_or_sub := 'SUB';
3055             ELSIF l_parent_of_ref_task_id = l_parent_task_id
3056             THEN
3057                l_peer_or_sub := 'PEER';
3058             ELSE
3059                l_peer_or_sub := 'PEER';
3060                OPEN cur_pa_peer_task_above( l_structure_version_id, l_task_version_id );
3061                FETCH cur_pa_peer_task_above INTO l_ref_task_version_id;
3062                CLOSE cur_pa_peer_task_above;
3063             END IF;
3064 
3065             IF l_ref_task_version_id IS NOT NULL
3066             THEN
3067 
3068           /* Bug 2790275 Begin */
3069               OPEN cur_pa_obj_rel( l_task_version_id ) ;
3070               FETCH cur_pa_obj_rel INTO l_db_parent_task_version_id;
3071               CLOSE cur_pa_obj_rel;
3072 
3073               OPEN cur_pa_obj_rel( l_ref_task_version_id ) ;
3074               FETCH cur_pa_obj_rel INTO l_passed_parent_task_ver_id;
3075               CLOSE cur_pa_obj_rel;
3076 
3077            IF ((l_peer_or_sub = 'SUB' AND l_ref_task_version_id <> l_db_parent_task_version_id)
3078                                        OR
3079            (l_peer_or_sub = 'PEER' AND l_passed_parent_task_ver_id <> l_db_parent_task_version_id))
3080            THEN
3081           /* Bug 2790275 End */
3082 
3083          -- Check for the status of the process only if the wbs is going to change.
3084          -- PA L Changes 3010538
3085          -- Need not use map_new_amg_msg api as no context is involved and no _amg messages
3086          -- have been created.
3087          IF p_calling_module = 'AMG' THEN
3088 
3089 -- Begin fix for Bug # 4373055.
3090 
3091 /*
3092 
3093               l_process_code :=
3094                                 PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_CODE(p_project_id => p_project_id
3095                                                                                   ,p_structure_type => p_structure_type );
3096                IF nvl(l_process_code,'-1') = 'WUP' THEN
3097 
3098                     l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => p_project_id  -- Bug 3091798
3099                                                                                   ,p_structure_type => p_structure_type );
3100                     PA_UTILS.ADD_MESSAGE
3101                           (p_app_short_name => 'PA',
3102                           -- p_msg_name       => 'PA_PS_VD_UPDWBS_PRC_INPROC'); Bug 3091798
3103                            p_msg_name       => 'PA_PS_UPDWBS_PRC_INPROC_AMG',  -- Bug 3091798. Message includes the request id.
3104                            p_token1         => 'REQUESTID',
3105                            p_value1         => l_request_id);
3106 
3107                   raise api_error;
3108 
3109                ELSIF nvl(l_process_code,'-1') = 'WUE' THEN
3110                     l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => p_project_id  --Bug 3091798
3111                                                                                   ,p_structure_type => p_structure_type );
3112                     PA_UTILS.ADD_MESSAGE
3113                           (p_app_short_name => 'PA',
3114                        --    p_msg_name       => 'PA_PS_VD_UPD_WBS_PRC_ERR');
3115                            p_msg_name       => 'PA_PS_UPDWBS_PRC_ERR_AMG',  -- Bug 3091798. Message includes the request id.
3116                            p_token1         => 'REQUESTID',
3117                            p_value1         => l_request_id);
3118 
3119                   raise api_error;
3120 
3121                END IF;
3122 
3123 */
3124 
3125         PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_MSG(
3126         p_project_id              => p_project_id
3127         , p_structure_type        => p_structure_type
3128         , p_structure_version_id  => null
3129         , p_context               => 'UPDATE_AMG'
3130         , x_message_name          => l_message_name
3131         , x_message_type          => l_message_type
3132         , x_structure_version_id  => l_str_ver_id
3133         , x_conc_request_id       => l_conc_request_id);
3134 
3135 
3136         if l_message_name is not null then
3137 
3138                      PA_UTILS.ADD_MESSAGE(
3139                      p_app_short_name => 'PA'
3140                      , p_msg_name       => l_message_name
3141                      , p_token1         => 'REQUESTID'
3142                      , p_value1         => l_conc_request_id);
3143 
3144                       RAISE FND_API.G_EXC_ERROR;
3145         end if;
3146 
3147 -- End fix for Bug # 4373055.
3148 
3149          END IF ;
3150 
3151          -- PA L Changes 3010538
3152 
3153           PA_TASK_PUB1.move_task_version(
3154                     p_calling_module            => p_calling_module
3155                    ,p_init_msg_list            => l_init_msg_list
3156                    ,p_structure_version_id      => l_structure_version_id
3157                    ,p_task_version_id           => l_task_version_id
3158                    ,p_ref_task_version_id    => l_ref_task_version_id
3159                    ,p_peer_or_sub          => l_peer_or_sub
3160                    ,p_record_version_number     => l_record_version_number
3161                    ,x_return_status             => l_return_status
3162                    ,x_msg_count                    => l_msg_count
3163                    ,x_msg_data                     => l_msg_data
3164                  );
3165 
3166                IF l_return_status <> 'S'
3167                THEN
3168                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3169                                         ,p_msg_name       => 'PA_PS_TASK_NOT_UPDATED'
3170                     /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
3171                         ,p_token1         => 'PROJECT'
3172                         ,p_value1         =>  p_project_id
3173                         ,p_token2          => 'TASK'
3174                         ,p_value2          => l_task_id);
3175                   raise api_error;
3176                END IF;
3177               END IF; -- Bug 2790275
3178             END IF;
3179         END IF;  --< p-calling_module = 'AMG' >>
3180 
3181         -- Bug#Bug#3747312
3182         -- Commenting the below if statement as cur_pa_proj_elem_vers2
3183         -- will take care of not calling the WORKPLAN related API
3184         -- in FINANCIAL alone structure.
3185 
3186         --IF p_structure_type = 'WORKPLAN'
3187         --THEN
3188             --get task version id of the task being moved or updated if
3189             IF l_task_version_id IS NULL
3190             THEN
3191                --rtarway, 3666023, replace by l_task_id
3192                --OPEN cur_pa_task_ver( p_structure_version_id, p_task_id );       --structure version id should be provided for a workplan structure
3193                OPEN cur_pa_task_ver( p_structure_version_id, l_task_id );
3194                FETCH cur_pa_task_ver INTO l_task_version_id, l_record_version_number;
3195                CLOSE cur_pa_task_ver;
3196             END IF;
3197 
3198          --END IF;   --<< p_structrue_type >
3199 
3200 
3201           OPEN cur_pa_proj_elem_vers2(l_task_version_id);
3202           FETCH cur_pa_proj_elem_vers2 INTO l_dummy_char;
3203           IF cur_pa_proj_elem_vers2%FOUND
3204           THEN
3205 
3206             OPEN cur_proj_sch( l_task_version_id );
3207             FETCH cur_proj_sch INTO l_pev_schedule_id, l_record_version_number;
3208             CLOSE cur_proj_sch;
3209 
3210             -- xxlu added DFF attributes
3211             OPEN cur_ver_sch_attr_rec(l_task_version_id);
3212             FETCH cur_ver_sch_attr_rec INTO l_ver_sch_attr_rec;
3213             CLOSE cur_ver_sch_attr_rec;
3214 
3215                   --bug  2824612
3216 
3217                   SELECT type_id  INTO l_task_type_id
3218                     FROM pa_proj_elements
3219                     --WHERE proj_element_id = p_task_id, rtarway, BUG 3666023, replace by l_task_id
3220                     WHERE proj_element_id = l_task_id
3221                     AND project_id = p_project_id;
3222 
3223                   IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_wq_enabled(l_task_type_id) OR
3224                       'N' = PA_PROGRESS_UTILS.get_project_wq_flag(p_project_id)) THEN
3225                       IF (P_PLANNED_WORK_QUANTITY <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND P_PLANNED_WORK_QUANTITY IS NOT NULL) THEN
3226                           l_wq_planned_quantity := NULL;
3227                       END IF;
3228                   ELSE
3229                      l_wq_planned_quantity := P_PLANNED_WORK_QUANTITY;    --bug 2826992
3230                   END IF;
3231 
3232                   --bug  2824612
3233 
3234                     --Bug 6153503 start
3235                   -- rtarway, BUG 3908013
3236                     if (--p_attribute_category is null or
3237                         p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3238                     then
3239                          l_attribute_category :=  l_ver_sch_attr_rec.attribute_category;
3240                     else
3241                           l_attribute_category :=  p_attribute_category;
3242                     end if;
3243 
3244 
3245 
3246                     if (--p_attribute1 is null or
3247                         p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3248                     then
3249                          l_attribute1  :=  l_ver_sch_attr_rec.attribute1;
3250                     else
3251                          l_attribute1  :=  p_attribute1;
3252                     end if;
3253 
3254 
3255 
3256                     if (--p_attribute2 is null or
3257                         p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3258                     then
3259                          l_attribute2  :=  l_ver_sch_attr_rec.attribute2;
3260                     else
3261                          l_attribute2  :=  p_attribute2;
3262                     end if;
3263 
3264 
3265                     if (--p_attribute3 is null or
3266                         p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3267                     then
3268                          l_attribute3 :=  l_ver_sch_attr_rec.attribute3;
3269                     else
3270                           l_attribute3 :=  p_attribute3;
3271                     end if;
3272 
3273                     if (--p_attribute4 is null or
3274                         p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3275                     then
3276                          l_attribute4 :=  l_ver_sch_attr_rec.attribute4;
3277                     else
3278                           l_attribute4 :=  p_attribute4;
3279                     end if;
3280 
3281                     if (--p_attribute5 is null or
3282                         p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3283                     then
3284                          l_attribute5 :=  l_ver_sch_attr_rec.attribute5;
3285                     else
3286                           l_attribute5 :=  p_attribute5;
3287                     end if;
3288 
3289                     if (--p_attribute6 is null or
3290                         p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3291                     then
3292                          l_attribute6 :=  l_ver_sch_attr_rec.attribute6;
3293                     else
3294                           l_attribute6 :=  p_attribute6;
3295                     end if;
3296 
3297                     if (--p_attribute7 is null or
3298                         p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)  -- Changed for Bug #6153681
3299                     then
3300                          l_attribute7 :=  l_ver_sch_attr_rec.attribute7;
3301                     else
3302                           l_attribute7 :=  p_attribute7;
3303                     end if;
3304 
3305                     if (--p_attribute8 is null or
3306                         p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3307                     then
3308                          l_attribute8 :=  l_ver_sch_attr_rec.attribute8;
3309                     else
3310                           l_attribute8  :=  p_attribute8;
3311                     end if;
3312 
3313                     if (--p_attribute9 is null or
3314                         p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3315                     then
3316                          l_attribute9 :=  l_ver_sch_attr_rec.attribute9;
3317                     else
3318                          l_attribute9 :=  p_attribute9;
3319                     end if;
3320 
3321                     if (--p_attribute10 is null or
3322                         p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3323                     then
3324                          l_attribute10 :=  l_ver_sch_attr_rec.attribute10;
3325                     else
3326                           l_attribute10 :=  p_attribute10;
3327                     end if;
3328 
3329                     if (--p_attribute10 is null or
3330                         p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3331                     then
3332                          l_attribute11 :=  l_ver_sch_attr_rec.attribute11;
3333                     else
3334                           l_attribute11 :=  p_attribute11;
3335                     end if;
3336 
3337                     if (--p_attribute10 is null or
3338                         p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3339                     then
3340                          l_attribute12 :=  l_ver_sch_attr_rec.attribute12;
3341                     else
3342                           l_attribute12 :=  p_attribute12;
3343                     end if;
3344 
3345                     if (--p_attribute10 is null or
3346                         p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3347                     then
3348                          l_attribute13 :=  l_ver_sch_attr_rec.attribute13;
3349                     else
3350                           l_attribute13 :=  p_attribute13;
3351                     end if;
3352 
3353                     if (--p_attribute10 is null or
3354                         p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3355                     then
3356                          l_attribute14 :=  l_ver_sch_attr_rec.attribute14;
3357                     else
3358                           l_attribute14 :=  p_attribute14;
3359                     end if;
3360 
3361 
3362                     if (--p_attribute10 is null or
3363                         p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
3364                     then
3365                          l_attribute15 :=  l_ver_sch_attr_rec.attribute15;
3366                     else
3367                           l_attribute15 :=  p_attribute15;
3368                     end if;
3369 
3370 
3371                   --if added while fixing BUG 3919800
3372                   --Add validation for PA_PROJ_ELEM_VER_SCH_DESC_FLEX
3373                  -- if l_attribute_category is not null and l_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3374                  -- then
3375                        pa_task_utils.validate_flex_fields(
3376                        p_desc_flex_name        => 'PA_PROJ_ELEM_VER_SCH_DESC_FLEX'
3377                       ,p_attribute_category    => l_attribute_category
3378                       ,p_attribute1            => l_attribute1
3379                       ,p_attribute2            => l_attribute2
3380                       ,p_attribute3            => l_attribute3
3381                       ,p_attribute4            => l_attribute4
3382                       ,p_attribute5            => l_attribute5
3383                       ,p_attribute6            => l_attribute6
3384                       ,p_attribute7            => l_attribute7
3385                       ,p_attribute8            => l_attribute8
3386                       ,p_attribute9            => l_attribute9
3387                       ,p_attribute10           => l_attribute10
3388                       ,p_attribute11           => l_attribute11
3389                       ,p_attribute12           => l_attribute12
3390                       ,p_attribute13           => l_attribute13
3391                       ,p_attribute14           => l_attribute14
3392                       ,p_attribute15           => l_attribute15
3393                       ,p_RETURN_msg            => l_return_msg
3394                       ,p_validate_status       => l_validate_status
3395                       );
3396                  --end if;
3397 
3398                   IF l_validate_status = 'N'
3399                     THEN
3400                          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3401                          THEN
3402                               pa_interface_utils_pub.map_new_amg_msg
3403                                         ( p_old_message_code => 'PA_INVALID_FF_VALUES'
3404                                         ,p_msg_attribute    => 'CHANGE'
3405                                         ,p_resize_flag      => 'N'
3406                                         ,p_msg_context      => 'FLEX'
3407                                         ,p_attribute1       => l_return_msg
3408                                         ,p_attribute2       => ''
3409                                         ,p_attribute3       => ''
3410                                         ,p_attribute4       => ''
3411                                         ,p_attribute5       => '');
3412                         END IF;
3413                     RAISE FND_API.G_EXC_ERROR;
3414                   END IF;
3415 
3416             --Bug 6153503 end
3417 --End add rtarway, 3908013
3418 
3419 
3420 
3421             PA_TASK_PUB1.Update_Schedule_Version(
3422                     p_calling_module          => p_calling_module
3423                    ,p_init_msg_list            => l_init_msg_list
3424                    ,p_pev_schedule_id         => l_pev_schedule_id
3425                    ,p_calendar_id              => p_calendar_id
3426                    ,p_scheduled_start_date   => p_scheduled_start_date
3427                    ,p_scheduled_end_date           => p_scheduled_finish_date
3428                    ,p_obligation_start_date     => p_obligation_start_date
3429                    ,p_obligation_end_date          => p_obligation_finish_date
3430                    ,p_actual_start_date       => p_actual_start_date
3431                    ,p_actual_finish_date           => p_actual_finish_date
3432                    ,p_estimate_start_date          => p_estimated_start_date
3433                    ,p_estimate_finish_date   => p_estimated_finish_date
3434                    ,p_duration                 => p_duration
3435                    ,p_early_start_date        => p_early_start_date
3436                    ,p_early_end_date          => p_early_finish_date
3437                    ,p_late_start_date         => p_late_start_date
3438                    ,p_late_end_date           => p_late_finish_date
3439                    ,p_milestone_flag          => p_milestone_flag
3440                    ,p_critical_flag                 => p_critical_flag
3441                    ,p_WQ_PLANNED_QUANTITY     => l_wq_planned_quantity   --bug  2824612
3442                    ,p_PLANNED_EFFORT          => p_planned_effort
3443                    ,p_record_version_number    => l_record_version_number
3444                    --Changed the param names to l_....rtarway, BUG 3908013
3445                    ,p_attribute_category          => l_attribute_category
3446                    ,p_attribute1                => l_attribute1
3447                    ,p_attribute2                => l_attribute2
3448                    ,p_attribute3                => l_attribute3
3449                    ,p_attribute4                => l_attribute4
3450                    ,p_attribute5                => l_attribute5
3451                    ,p_attribute6                => l_attribute6
3452                    ,p_attribute7                => l_attribute7
3453                    ,p_attribute8                => l_attribute8
3454                    ,p_attribute9                => l_attribute9
3455                    ,p_attribute10             => l_attribute10
3456                    --end rtarway, BUG 3908013
3457                    --Bug 6153503
3458                    ,p_attribute11             => l_attribute11--l_ver_sch_attr_rec.attribute11
3459                    ,p_attribute12             => l_attribute12--l_ver_sch_attr_rec.attribute12
3460                    ,p_attribute13             => l_attribute13--l_ver_sch_attr_rec.attribute13
3461                    ,p_attribute14             => l_attribute14--l_ver_sch_attr_rec.attribute14
3462                    ,p_attribute15             => l_attribute15--l_ver_sch_attr_rec.attribute15
3463 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
3464                    ,p_ext_act_duration        => p_ext_act_duration
3465                    ,p_ext_remain_duration     => p_ext_remain_duration
3466                    ,p_ext_sch_duration        => p_ext_sch_duration
3467 -- (end venkat) new params for bug #3450684 ------------------------------------------------
3468 
3469 
3470 -- begin Bug 3654243 -----------------------------------------------------------------------
3471         ,p_def_sch_tool_tsk_type_code =>   p_sch_tool_tsk_type_code
3472         ,p_constraint_type_code  =>        p_constraint_type_code
3473         ,p_constraint_date =>              p_constraint_date
3474         ,p_free_slack =>                   p_free_slack
3475         ,p_total_slack =>                  p_total_slack
3476         ,p_effort_driven_flag =>           p_effort_driven_flag
3477         ,p_level_assignments_flag =>       p_level_assignments_flag
3478 -- end Bug 3654243 -------------------------------------------------------------------------
3479                    ,x_return_status                 => l_return_status
3480                    ,x_msg_count                => l_msg_count
3481                    ,x_msg_data                 => l_msg_data
3482                );
3483                -- end xxlu changes                   ,
3484             IF l_return_status <> 'S'
3485             THEN
3486                PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3487                                     ,p_msg_name       => 'PA_PS_TASK_NOT_UPDATED'
3488                                 /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
3489                         ,p_token1         => 'PROJECT'
3490                     ,p_value1         =>  p_project_id
3491                     ,p_token2          => 'TASK'
3492                     ,p_value2          => l_task_id);
3493                raise api_error;
3494             END IF;
3495 
3496               --The following API should NOT be called if CREATE_TASK_STRUCTURE is called from AMG.
3497               --AMG recalculates the weightings once all the tasks are created.
3498               IF p_calling_module = 'FORMS'
3499               THEN
3500 /*                      PA_PROJ_TASK_STRUC_PUB.rollup_dates(
3501                             p_tasks_in             => l_tasks_out            --null if called for one task
3502                            ,p_task_version_id      => l_task_version_id
3503                            ,p_structure_version_id => l_structure_version_id
3504                            ,p_project_id           => p_project_id
3505                            ,x_msg_count            => l_msg_count
3506                            ,x_msg_data             => l_msg_data
3507                            ,x_return_status        => l_return_status
3508                        );
3509                       IF l_return_status <> 'S'
3510                       THEN
3511                           raise api_error;
3512                       END IF;
3513 */
3514 null;
3515               END IF;
3516         END IF;  --< cur_pa_proj_elem_vers2 >
3517 
3518 /* Bug # 3420093 - Adding Progress Management modifications to update_task flow. */
3519 
3520     -- Bug#3747312
3521     -- Added PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN = 'N'
3522     -- as the add_planning_txn/delete_planning_txn should be called in
3523     -- SHARED case and for SPLIT case if p_structure_type is passed as
3524     -- WORKPLAN.
3525 
3526 
3527 /* Commenting for bug 7358214
3528 
3529     if (p_structure_type = 'WORKPLAN' OR nvl(PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( p_project_id ),'N') = 'N')then
3530 
3531             for l_task_cur_rec in l_task_cur(p_project_id, l_structure_version_id)
3532             loop
3533                 if (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(l_task_cur_rec.element_version_id) = 'Y') then
3534                 l_add_task_ver_ids.extend(1);
3535                 l_add_planned_effort.extend(1);
3536                 l_add_start_date.extend(1);
3537                 l_add_end_date.extend(1);
3538 
3539                 l_add_task_ver_ids(l_add_task_ver_ids.count):= l_task_cur_rec.element_version_id;
3540                 l_add_planned_effort(l_add_planned_effort.count):= l_task_cur_rec.planned_effort;
3541                 l_add_start_date(l_add_start_date.count):= l_task_cur_rec.actual_start_date;
3542                 l_add_end_date(l_add_end_date.count):= l_task_cur_rec.actual_finish_date;
3543             else
3544                 l_del_task_ver_ids.extend(1);
3545                 l_del_task_ver_ids(l_del_task_ver_ids.count):= l_task_cur_rec.element_version_id;
3546             end if;
3547         end loop;
3548     end if;
3549 
3550     -- Calling pa_task_pub1.call_add_planning_txns for lowest level tasks.
3551  --Bug 5256359. Introduced the loop to call pa_task_pub1.call_add_planning_txns
3552 --for set of 1000 records.
3553 rec_count:=0;
3554 for i  in 1..l_add_task_ver_ids.count loop
3555 
3556         rec_count := rec_count+1;
3557  	l_add_task_ver_ids_prm.extend;
3558  	l_add_planned_effort_prm.extend;
3559  	l_add_start_date_prm.extend;
3560  	l_add_end_date_prm.extend;
3561 
3562         l_add_task_ver_ids_prm(rec_count)  :=l_add_task_ver_ids(i);
3563  	l_add_planned_effort_prm(rec_count):=l_add_planned_effort(i);
3564  	l_add_start_date_prm(rec_count)    :=l_add_start_date(i);
3565  	l_add_end_date_prm(rec_count)      :=l_add_end_date(i);
3566 
3567  	if rec_count=1000 OR
3568  	   i=l_add_task_ver_ids.count then
3569     begin
3570             pa_task_pub1.call_add_planning_txns(
3571             p_tasks_ver_ids                  => l_add_task_ver_ids_prm,
3572             p_planned_effort                 => l_add_planned_effort_prm,
3573             p_project_id                     => p_project_id,
3574             p_structure_version_id           => l_structure_version_id,  --replace p_structure_version_id, bug 3838186
3575             p_start_date                     => l_add_start_date_prm,
3576             p_end_date                       => l_add_end_date_prm,
3577             p_pm_product_code                => p_pm_product_code,   --bug 3811243
3578             x_return_status                  => l_return_status,
3579             x_msg_count                      => l_msg_count,
3580             x_msg_data                       => l_msg_data
3581             );
3582     exception
3583             when others then
3584                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'pa_project_pub',
3585                                 p_procedure_name => 'CREATE_PROJECT',
3586                                         p_error_text     => substrb('PA_TASK_PUB1.CALL_ADD_PLANNING_TXNS:'||sqlerrm,1,240));
3587             raise fnd_api.g_exc_error;
3588         end;
3589 
3590 	l_add_task_ver_ids_prm   := PA_NUM_1000_NUM();
3591  	l_add_planned_effort_prm := PA_NUM_1000_NUM();
3592  	l_add_start_date_prm     := PA_DATE_1000_DATE();
3593  	l_add_end_date_prm       := PA_DATE_1000_DATE();
3594 
3595  	rec_count:=0;
3596 
3597 	end if;
3598 
3599 end loop;
3600 --End of loop for bug 5256359
3601 
3602 */
3603 -- End of commenting for bug 7358214
3604 
3605 -- Added for bug 7358214
3606 IF (p_structure_type = 'WORKPLAN' OR
3607 nvl(PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( p_project_id ),'N') = 'N')
3608 THEN
3609 /* 14556729:Added for Huawei changes for update update flow */
3610 if (l_structure_version_id is not null  AND  NVL(PA_PROJECT_PUB.G_MASS_UPDATE_TASKS,'N') = 'N' ) then
3611   FOR l_task_cur_rec in l_task_cur(p_project_id, l_structure_version_id) LOOP
3612 
3613     -- Bug 7437034 (Initialize l_hidden_assgn to N for each iteration)
3614     l_hidden_assgn := 'N';
3615 
3616     OPEN  check_hidden_assgn_exists(l_task_cur_rec.element_version_id);
3617     FETCH check_hidden_assgn_exists into l_hidden_assgn;
3618     CLOSE check_hidden_assgn_exists;
3619 
3620     IF PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(l_task_cur_rec.element_version_id)
3621 = 'N' AND l_hidden_assgn = 'Y' THEN
3622         l_del_task_ver_ids.extend(1);
3623         l_del_task_ver_ids(l_del_task_ver_ids.count):=
3624 l_task_cur_rec.element_version_id;
3625     END IF;
3626   END LOOP;
3627  END IF; -- Huawei changes ends
3628 END IF;
3629 -- End of bug 7358214
3630 
3631     -- Calling pa_fp_planning_transaction_pub.delete_planning_transactions for higher level tasks.
3632 
3633      IF l_del_task_ver_ids.exists(1) THEN -- Bug 7358214
3634        begin
3635            pa_fp_planning_transaction_pub.delete_planning_transactions
3636            (
3637             p_context                      => 'WORKPLAN'
3638            ,p_task_or_res                  => 'TASKS'
3639            ,p_element_version_id_tbl       => l_del_task_ver_ids
3640            ,x_return_status                => l_return_status
3641            ,x_msg_count                    => l_msg_count
3642            ,x_msg_data                     => l_msg_data
3643           );
3644        exception
3645            when others then
3646                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'pa_project_pub',
3647                                         p_procedure_name => 'CREATE_PROJECT',
3648                                         p_error_text     => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.DELETE_PLANNING_TRANSACTIONS:'||SQLERRM,1,240));
3649            raise fnd_api.g_exc_error;
3650        end;
3651      END IF ; --bug 7358214
3652 /* Bug # 3420093 - Adding Progress Management modifications to update_task flow. */
3653 
3654 -- Progress Management Changes. Bug # 3420093.
3655 
3656 /* Commenting out the condition to check if workplan versioning is enabled for the project
3657    as PA_TASK_PUB1.update_task_det_sch_info() should be called for both versioning enabled
3658    and versioning disabled projects. */
3659 
3660 /* if (PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED(p_project_id) = 'Y') then */
3661 
3662 /* Calling  API: pa_task_pub1.update_task_det_sch_info() only if calling module is not 'FORMS'. */
3663 
3664    if p_calling_module <> 'FORMS' then
3665 
3666     pa_task_pub1.update_task_det_sch_info(
3667     p_calling_module    =>      p_calling_module
3668     ,p_task_ver_id      =>  l_task_version_id
3669     ,p_project_id       =>  p_project_id
3670     ,p_planned_effort   =>      p_planned_effort
3671     ,p_ETC_effort       =>  p_etc_effort
3672     ,p_structure_version_id =>  p_structure_version_id
3673     ,p_percent_complete =>  p_percent_complete
3674     ,x_return_status    =>  x_return_status
3675     ,x_msg_count        =>  x_msg_count
3676     ,x_msg_data     =>  x_msg_data
3677     );
3678 
3679    end if;
3680 
3681 /* end if; */
3682 
3683 -- Progress Management Changes. Bug # 3420093.
3684 
3685         x_return_status := FND_API.G_RET_STS_SUCCESS;
3686 EXCEPTION
3687 WHEN API_ERROR THEN
3688   x_return_status := FND_API.G_RET_STS_ERROR;
3689   rollback to update_task_struc;
3690 WHEN OTHERS THEN
3691   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3692   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
3693                           p_procedure_name => 'update_task_structure',
3694                           p_error_text     => SUBSTRB(SQLERRM,1,240));
3695   rollback to update_task_struc;
3696   raise;
3697 END update_task_structure;
3698 
3699 -- API name                      : delete_task_structure
3700 -- Type                          : PL/sql Public procedure
3701 -- Pre-reqs                      : None
3702 -- Return Value                  : N/A
3703 -- Prameters
3704 --   p_calling_module                   IN VARCHAR2
3705 --  ,p_task_id                          IN NUMBER
3706 --  ,p_record_version_number           IN NUMBER
3707 --  ,x_msg_count                        OUT NUMBER
3708 --  ,x_msg_data                         OUT VARCHAR2
3709 --  ,x_return_status                    OUT VARCHAR2--
3710 --  History
3711 --
3712 --  25-APR-02   MAansari             -Created
3713 --
3714 --  Notes: This api is called from form PAXPREPR.fmb ON-DELETE of tasks block.
3715 --         The call is in PA_PROJECT_STRUCTURES.delete_task_structure API.
3716 
3717 PROCEDURE delete_task_structure
3718 (
3719    p_calling_module                   IN VARCHAR2
3720   ,p_task_id                          IN NUMBER
3721   ,p_task_version_id                  IN NUMBER := -9999    --mandatory for workplan task version
3722   ,p_project_id                  IN NUMBER := -9999      --bug 2765115
3723   ,p_structure_type              IN VARCHAR2 := 'FINANCIAL'   --bug 3301192
3724   ,x_msg_count                        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
3725   ,x_msg_data                         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3726   ,x_return_status                    OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
3727 IS
3728 
3729   l_return_status       VARCHAR2(1);
3730   l_msg_count           NUMBER;
3731   l_msg_data            VARCHAR2(2000);
3732   l_task_version_id     NUMBER;
3733   l_record_version_number NUMBER;
3734   API_ERROR            EXCEPTION;
3735 
3736   CURSOR cur_task_ver_id IS
3737        SELECT element_version_id, record_version_number
3738          FROM pa_proj_element_versions ppev
3739         WHERE proj_element_id = p_task_id
3740           AND object_type = 'PA_TASKS'
3741           AND parent_structure_version_id = PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_FIN_STRUC_VER_ID( p_project_id );   -- bug 2765115
3742 
3743   CURSOR cur_task_ver_id2 IS
3744        SELECT record_version_number
3745          FROM pa_proj_element_versions ppev
3746         WHERE element_version_id = p_task_version_id
3747           AND object_type = 'PA_TASKS';
3748 
3749 -- bug 2765115
3750   CURSOR cur_pa_proj
3751   IS
3752     SELECT template_flag from pa_projects_all where project_id = p_project_id;
3753 
3754    l_template_flag   VARCHAR2(1) := 'N';
3755 
3756   CURSOR cur_task_ver_id3 IS
3757        SELECT element_version_id, record_version_number
3758          FROM pa_proj_element_versions ppev
3759         WHERE proj_element_id = p_task_id
3760           AND object_type = 'PA_TASKS'
3761           AND project_id = p_project_id;
3762 -- bug 2765115
3763 
3764 
3765 BEGIN
3766 
3767       --Clear Error Messages.
3768       IF FND_MSG_PUB.count_msg = 0
3769       THEN
3770           FND_MSG_PUB.initialize;
3771       END IF;
3772 
3773       SAVEPOINT delete_task_struc;
3774 
3775       IF p_task_version_id IS NULL OR
3776          p_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
3777          p_task_version_id = -9999
3778       THEN
3779 
3780 -- bug 2765115
3781           OPEN cur_pa_proj;
3782           FETCH  cur_pa_proj INTO l_template_flag;
3783           CLOSE cur_pa_proj;
3784 -- bug 2765115
3785 
3786           IF l_template_flag = 'N'   -- bug 2765115
3787           THEN
3788               OPEN cur_task_ver_id;
3789               FETCH cur_task_ver_id INTO l_task_version_id, l_record_version_number;
3790               CLOSE cur_task_ver_id;
3791           END IF;                    -- bug 2765115
3792 
3793 -- bug 2765115
3794           IF l_task_version_id IS NULL
3795           THEN
3796               OPEN cur_task_ver_id3;
3797               FETCH cur_task_ver_id3 INTO l_task_version_id, l_record_version_number;
3798               CLOSE cur_task_ver_id3;
3799           END IF;
3800 -- bug 2765115
3801 
3802       ELSE
3803           OPEN cur_task_ver_id2;
3804           FETCH cur_task_ver_id2 INTO l_record_version_number;
3805           CLOSE cur_task_ver_id2;
3806 
3807           l_task_version_id := p_task_version_id;
3808       END IF;
3809 
3810       IF l_task_version_id > 0
3811       THEN
3812           PA_TASK_PUB1.Delete_Task_Version(
3813                p_calling_module                   => p_calling_module
3814               ,p_structure_type                   => p_structure_type   --bug 3301192
3815               ,p_task_version_id                  => l_task_version_id
3816               ,p_record_version_number           => l_record_version_number
3817               ,x_return_status                    => l_return_status
3818               ,x_msg_count                         => l_msg_count
3819               ,x_msg_data                          => l_msg_data
3820          );
3821       END IF;
3822 
3823       IF l_return_status <> 'S'
3824       THEN
3825          PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3826                               ,p_msg_name       => 'PA_PS_TASK_NOT_DELETED');
3827          raise api_error;
3828       END IF;
3829       x_return_status := FND_API.G_RET_STS_SUCCESS;
3830 
3831 EXCEPTION
3832 WHEN API_ERROR THEN
3833   x_return_status := FND_API.G_RET_STS_ERROR;
3834   rollback to delete_task_struc;
3835 WHEN OTHERS THEN
3836   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3837   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
3838                           p_procedure_name => 'delete_task_structure',
3839                           p_error_text     => SUBSTRB(SQLERRM,1,240));
3840   rollback to delete_task_struc;
3841   raise;
3842 END delete_task_structure;
3843 
3844 -- API name                      : delete_project_structure
3845 -- Type                          : PL/sql Public procedure
3846 -- Pre-reqs                      : None
3847 -- Return Value                  : N/A
3848 -- Prameters
3849 --   p_calling_module                   IN VARCHAR2
3850 --  ,p_project_id                       IN NUMBER
3851 --  ,x_msg_count                        OUT NUMBER
3852 --  ,x_msg_data                         OUT VARCHAR2
3853 --  ,x_return_status                    OUT VARCHAR2--
3854 --  History
3855 --
3856 --  26-APR-02   MAansari             -Created
3857 --  01-JUL-2004 Rakesh Raghavan      Modified.
3858 --
3859 --  Notes: This api is called from form PAXPREPR.fmb ON-DELETE of project block.
3860 --         The call is in PA_PROJECT_STRUCTURES.delete_project_structure API.
3861 --         This api deletes all records from structure tables.
3862 
3863 PROCEDURE delete_project_structure
3864 (
3865    p_calling_module                   IN VARCHAR2
3866   ,p_project_id                          IN NUMBER
3867   ,x_msg_count                        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
3868   ,x_msg_data                         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3869   ,x_return_status                    OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
3870 
3871   l_return_status       VARCHAR2(1);
3872   l_msg_count           NUMBER;
3873   l_msg_data            VARCHAR2(2000);
3874   l_error_message_code  VARCHAR2(250);
3875   l_task_version_id     NUMBER;
3876   l_record_version_number NUMBER;
3877   API_ERROR            EXCEPTION;
3878 
3879   CURSOR cur_str_ver
3880   IS
3881     SELECT rowid, element_version_id
3882       FROM pa_proj_element_versions
3883      WHERE OBJECT_TYPE = 'PA_STRUCTURES'
3884        AND project_id = p_project_id;
3885 
3886   CURSOR cur_task_ver( c_parent_structure_version_id NUMBER )
3887   IS
3888     SELECT rowid, element_version_id
3889       FROM pa_proj_element_versions
3890      WHERE OBJECT_TYPE = 'PA_TASKS'
3891        AND project_id = p_project_id
3892        AND parent_structure_version_id = c_parent_structure_version_id;
3893 
3894  CURSOR cur_proj_elems
3895  IS
3896    SELECT rowid, proj_element_id
3897      FROM pa_proj_elements
3898     WHERE project_id = p_project_id;
3899 
3900 
3901 BEGIN
3902 
3903      --Clear Error Messages.
3904       IF FND_MSG_PUB.count_msg = 0
3905       THEN
3906           FND_MSG_PUB.initialize;
3907       END IF;
3908 
3909      SAVEPOINT delete_project_struc;
3910 
3911 
3912      FOR cur_str_ver_rec IN cur_str_ver LOOP
3913          FOR cur_task_ver_rec IN cur_task_ver( cur_str_ver_rec.element_version_id ) LOOP
3914              --Check to see if deleting a version is ok
3915              PA_PROJ_ELEMENTS_UTILS.Check_Delete_task_Ver_Ok(
3916                        p_project_id                 => p_project_id
3917                       ,p_task_version_id            => cur_task_ver_rec.element_version_id
3918                       ,p_parent_structure_ver_id    => cur_str_ver_rec.element_version_id
3919                       ,x_return_status              => l_return_status
3920                       ,x_error_message_code         => l_error_message_code
3921                     );
3922 
3923              IF l_return_status <> 'S'
3924              THEN
3925                  PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3926                                       ,p_msg_name       => l_error_message_code);
3927                  raise api_error;
3928              END IF;
3929 
3930              DELETE FROM pa_object_relationships
3931               WHERE relationship_type = 'S' AND
3932                     (object_id_from1 = cur_task_ver_rec.element_version_id OR
3933                     object_id_to1   = cur_task_ver_rec.element_version_id);
3934 
3935              PA_PROJ_ELEMENT_VERSIONS_PKG.DELETE_ROW( cur_task_ver_rec.rowid );
3936 
3937 
3938          END LOOP;
3939 
3940          PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
3941              p_project_id                        => p_project_id
3942             ,p_structure_version_id              => cur_str_ver_rec.element_version_id
3943             ,x_return_status                     => l_return_status
3944             ,x_error_message_code                => l_error_message_code
3945          );
3946 
3947          IF l_return_status <> 'S'
3948          THEN
3949              PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3950                                   ,p_msg_name       => l_error_message_code);
3951              raise api_error;
3952          END IF;
3953 
3954          DELETE FROM pa_object_relationships
3955           WHERE relationship_type = 'S' AND
3956                 (object_id_from1 = cur_str_ver_rec.element_version_id OR
3957                  object_id_to1   = cur_str_ver_rec.element_version_id);
3958 
3959          PA_PROJ_ELEMENT_VERSIONS_PKG.DELETE_ROW( cur_str_ver_rec.rowid );
3960 
3961      END LOOP;
3962 
3963      FOR cur_proj_elems_rec IN cur_proj_elems LOOP
3964          DELETE FROM pa_proj_structure_types
3965           WHERE proj_element_id = cur_proj_elems_rec.proj_element_id;
3966 
3967          PA_PROJ_ELEMENTS_PKG.DELETE_ROW( cur_proj_elems_rec.rowid );
3968      END LOOP;
3969 
3970      DELETE FROM pa_proj_elem_ver_schedule where project_id = p_project_id;
3971      DELETE FROM pa_proj_elem_ver_structure where project_id = p_project_id;
3972 
3973      /* Code to delete project records from tables: pa_progress_rollup, pa_proj_progress_attr
3974     and pa_proj_workplan_attr. */
3975 
3976       BEGIN
3977 
3978            PA_PROGRESS_PUB.delete_working_wp_progress (
3979                      p_project_id               => p_project_id
3980                     ,p_calling_context          => 'PROJECT_STRUCTURE'
3981                     ,x_return_status            => x_return_status
3982                     ,x_msg_count                => x_msg_count
3983                     ,x_Msg_data                 => x_msg_data
3984                     );
3985        EXCEPTION
3986 
3987            WHEN OTHERS THEN
3988 
3989                 fnd_msg_pub.add_exc_msg(
3990                    p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
3991                    p_procedure_name => 'delete_project_structure',
3992                    p_error_text     => SUBSTR('PA_PROGRESS_PUB.delete_working_wp_progress:'||SQLERRM,1,240));
3993 
3994            RAISE FND_API.G_EXC_ERROR;
3995 
3996        END;
3997 
3998 
3999       IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4000 
4001          RAISE FND_API.G_EXC_ERROR;
4002 
4003       END IF;
4004 
4005      x_return_status := FND_API.G_RET_STS_SUCCESS;
4006 
4007 EXCEPTION
4008 WHEN API_ERROR THEN
4009   x_return_status := FND_API.G_RET_STS_ERROR;
4010   rollback to delete_project_struc;
4011 WHEN OTHERS THEN
4012   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4013   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
4014                           p_procedure_name => 'delete_project_structure',
4015                           p_error_text     => SUBSTRB(SQLERRM,1,240));
4016   rollback to delete_project_struc;
4017   raise;
4018 END delete_project_structure;
4019 
4020 -- API name                      : Published_version_exists
4021 -- Type                          : PL/sql Public Function
4022 -- Pre-reqs                      : None
4023 -- Return Value                  : N/A
4024 -- Prameters
4025 -- p_project_id                       IN NUMBER
4026 --  History
4027 --
4028 --  29-APR-02   MAansari             -Created
4029 --
4030 --  Notes: This api is called from form PAXPREPR.fmb ON-DELETE of task block.
4031 --         To check if there exists any published ver.
4032 --  bug 3654011: Added conditions to check for shared or workplan only structure
4033 
4034 FUNCTION Published_version_exists
4035 (
4036   p_project_id                       IN NUMBER
4037  ) RETURN VARCHAR2 IS
4038 
4039     CURSOR cur_pub_versions is
4040       select 'Y'
4041         from pa_proj_elem_ver_structure ppevs,
4042              pa_proj_structure_types ppst,
4043              pa_structure_types pst
4044        where ppevs.project_id = p_project_id
4045          and ppevs.STATUS_CODE = 'STRUCTURE_PUBLISHED'
4046          and ppevs.proj_element_id = ppst.proj_element_id
4047          and ppst.structure_type_id = pst.structure_type_id
4048          and pst.structure_type_class_code = 'WORKPLAN';
4049    l_dummy_char VARCHAR2(1);
4050 BEGIN
4051    OPEN cur_pub_versions;
4052    FETCH cur_pub_versions INTO l_dummy_char;
4053    IF cur_pub_versions%FOUND
4054    THEN
4055       CLOSE cur_pub_versions;
4056       RETURN 'Y';
4057    ELSE
4058       CLOSE cur_pub_versions;
4059       RETURN 'N';
4060    END IF;
4061 END Published_version_exists;
4062 
4063 -- API name                      : approve_project
4064 -- Type                          : PL/sql Public Function
4065 -- Pre-reqs                      : None
4066 -- Return Value                  : 'Y', 'N'
4067 -- Prameters
4068 -- p_project_id                       IN NUMBER
4069 --  History
4070 --
4071 --  29-APR-02   MAansari             -Created
4072 --
4073 --  Notes: This api is called from Pa_project_stus_utils.Handle_Project_Status_Change api
4074 --         to check the following before changing status to APPROVE.
4075 --         1) The project should contain one structure for Workplan and Costing
4076 --         2) There should be a published version.
4077 
4078 FUNCTION approve_project
4079 (
4080   p_project_id                       IN NUMBER
4081  ) RETURN VARCHAR2 IS
4082    CURSOR cur_proj_strs
4083    IS
4084      SELECT 'X'
4085        FROM pa_projects_all
4086       WHERE project_id = p_project_id
4087         AND split_cost_from_workplan_flag = 'N';
4088 
4089     CURSOR cur_pub_versions is
4090       select 'Y'
4091         from pa_proj_elem_ver_structure
4092        where project_id = p_project_id
4093          and STATUS_CODE = 'STRUCTURE_PUBLISHED';
4094 
4095    l_approve  VARCHAR2(1);
4096    l_dummy_char VARCHAR2(1);
4097 BEGIN
4098    OPEN cur_proj_strs;
4099    FETCH cur_proj_strs INTO l_dummy_char;
4100    IF cur_proj_strs%FOUND
4101    THEN
4102       l_approve := 'Y';
4103       OPEN cur_pub_versions;
4104       FETCH cur_pub_versions INTO l_dummy_char;
4105       IF cur_pub_versions%NOTFOUND
4106       THEN
4107          l_approve := 'N';
4108       END IF;
4109       CLOSE cur_pub_versions;
4110    ELSE
4111       CLOSE cur_proj_strs;
4112       l_approve := 'Y';
4113    END IF;
4114    RETURN ( l_approve );
4115 END approve_project;
4116 
4117 -- API name                      : Is_PJT_Licensed
4118 -- Type                          : PL/sql Public Function
4119 -- Pre-reqs                      : None
4120 -- Return Value                  : 'Y', 'N'
4121 -- Prameters
4122 --  History
4123 --
4124 --  01-MAY-02   MAansari             -Created
4125 --
4126 --  Notes: This api is called from Projects form and Self Service to display SPLIT_COST_FROM_WORKPLAN_FLAG.
4127 
4128 FUNCTION Is_PJT_Licensed RETURN VARCHAR2 IS
4129 BEGIN
4130     RETURN ( PA_INSTALL.IS_PJT_LICENSED );
4131 END Is_PJT_Licensed;
4132 
4133 -- API name                      : Progress_rec_exists
4134 -- Type                          : PL/sql Public Function
4135 -- Pre-reqs                      : None
4136 -- Return Value                  : 'Y', 'N'
4137 -- Prameters
4138 -- p_project_id                  NUMBER
4139 --  History
4140 --
4141 --  01-MAY-02   MAansari             -Created
4142 --
4143 --  Notes: This api is called from Projects form and Self Service to allow users to update
4144 --  SPLIT_COST_FROM_WORKPLAN_FLAG.
4145 
4146 FUNCTION Progress_rec_exists( p_project_id NUMBER ) RETURN VARCHAR2 IS
4147    l_return_value VARCHAR2(1) := 'N';
4148 BEGIN
4149     --l_return_value := call here api from selva's team.
4150     RETURN l_return_value;
4151 END Progress_rec_exists;
4152 
4153 -- API name                      : create_delete_workplan_struc
4154 -- Type                          : PL/sql Public procedure
4155 -- Pre-reqs                      : None
4156 -- Return Value                  : N/A
4157 -- Prameters
4158 -- p_project_id                  NUMBER
4159 -- p_calling_module                   IN VARCHAR2
4160 -- p_project_id                       IN NUMBER
4161 -- p_project_number                   IN VARCHAR2 := 'JUNK_CHARS'
4162 -- p_project_name                     IN VARCHAR2 := 'JUNK_CHARS'
4163 -- p_project_description              IN VARCHAR2 := 'JUNK_CHARS'
4164 -- p_split_workplan                   IN VARCHAR2
4165 --  History
4166 --
4167 --  01-MAY-02   MAansari             -Created
4168 --
4169 --  Notes: This api is called from Projects form and Self Service when the SPLIT_COST_FROM_WORKPLAN_FLAG
4170 --         is checked
4171 
4172 PROCEDURE create_delete_workplan_struc(
4173    p_calling_module                   IN VARCHAR2
4174   ,p_project_id                       IN NUMBER
4175   ,p_project_number                   IN VARCHAR2
4176   ,p_project_name                     IN VARCHAR2
4177   ,p_project_description              IN VARCHAR2
4178   ,p_split_workplan                   IN VARCHAR2
4179   ,x_msg_count                        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4180   ,x_msg_data                         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4181   ,x_return_status                    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4182  ) IS
4183 
4184   l_return_status       VARCHAR2(1);
4185   l_msg_count           NUMBER;
4186   l_msg_data            VARCHAR2(2000);
4187   l_data               VARCHAR2(2000);
4188   l_msg_index_out      NUMBER;
4189   l_error_message_code  VARCHAR2(250);
4190   API_ERROR            EXCEPTION;
4191 
4192   CURSOR cur_projects
4193   IS
4194     SELECT split_cost_from_workplan_flag
4195       FROM pa_projects_all
4196      WHERE project_id = p_project_id;
4197 
4198   CURSOR cur_pa_proj_elems
4199   IS
4200     SELECT proj_element_id
4201       FROM pa_proj_elements
4202      WHERE project_id = p_project_id
4203        AND object_type = 'PA_STRUCTURES';
4204 
4205   CURSOR cur_pa_proj_elem_vers( c_structure_id NUMBER )
4206   IS
4207     SELECT element_version_id, record_version_number
4208       FROM pa_proj_element_versions
4209      WHERE project_id = p_project_id
4210        AND object_type = 'PA_STRUCTURES'
4211        AND proj_element_id = c_structure_id;
4212 
4213    CURSOR cur_struc_type_id
4214     IS
4215     select structure_type_id
4216       from pa_structure_types
4217      where structure_type_class_code = 'WORKPLAN';
4218 
4219   CURSOR cur_pa_proj_elem_vers2
4220   IS
4221     SELECT element_version_id
4222       FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
4223      WHERE c.project_id = p_project_id
4224        AND a.structure_type_id = b.structure_type_id
4225        AND b.proj_element_id = c.proj_element_id
4226        AND a.structure_type = 'WORKPLAN';
4227 
4228   CURSOR cur_pa_proj_elem_vers3( c_parent_struc_ver_id NUMBER )
4229     IS
4230     SELECT element_version_id
4231       FROM pa_proj_element_versions
4232      WHERE project_id = p_project_id
4233        AND parent_structure_version_id = c_parent_struc_ver_id
4234        AND object_type = 'PA_TASKS';
4235 
4236 
4237   l_structure_type_id      NUMBER;
4238   l_proj_structure_type_id NUMBER;
4239   l_rowid                  VARCHAR2(18);
4240   l_structure_id           NUMBER;
4241   l_structure_version_id   NUMBER;
4242   l_split_flag             VARCHAR2(1);
4243   x_pev_schedule_id        NUMBER;
4244 
4245   l_append   VARCHAR2(10);
4246   l_suffix   VARCHAR2(80);
4247   l_name     VARCHAR2(240);
4248 BEGIN
4249 
4250      --Clear Error Messages.
4251       IF FND_MSG_PUB.count_msg = 0
4252       THEN
4253           FND_MSG_PUB.initialize;
4254       END IF;
4255 
4256      SAVEPOINT create_delete_wp_struc;
4257 
4258      OPEN cur_projects;
4259      FETCH cur_projects INTO l_split_flag;
4260      CLOSE cur_projects;
4261 
4262      UPDATE pa_projects_all
4263         SET split_cost_from_workplan_flag = p_split_workplan
4264       WHERE project_id = p_project_id;
4265 
4266      IF p_split_workplan = l_split_flag
4267      THEN
4268          PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4269                               ,p_msg_name       => 'PA_PS_WRONG_SPLIT_OPTION');
4270          raise api_error;
4271      END IF;
4272 
4273      IF p_project_id IS NULL
4274      THEN
4275          PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4276                               ,p_msg_name       => 'PA_PS_PROJ_ID_NULL');
4277          raise api_error;
4278      END IF;
4279 
4280      IF p_split_workplan = 'Y'
4281      THEN
4282 
4283         IF p_project_number IS NULL OR p_project_number = 'JUNK_CHARS'
4284         THEN
4285             PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4286                                  ,p_msg_name       => 'PA_PS_INV_PROJ_NUM');
4287             raise api_error;
4288         END IF;
4289 
4290         IF p_project_name IS NULL OR p_project_name = 'JUNK_CHARS'
4291         THEN
4292             PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4293                                  ,p_msg_name       => 'PA_PS_INV_PROJ_NAME');
4294             raise api_error;
4295         ELSE
4296            l_name := p_project_name;
4297         END IF;
4298 
4299         l_append := ': ';
4300 
4301         select meaning
4302           into l_suffix
4303           from pa_lookups
4304          where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
4305            and lookup_code = 'WORKPLAN';
4306 
4307         l_name := substr(l_name||l_append||l_suffix, 1, 240);
4308 
4309         PA_PROJECT_STRUCTURE_PVT1.SPLIT_WORKPLAN(
4310              p_project_id                 => p_project_id
4311             ,p_structure_name             => l_name
4312             ,p_structure_number           => p_project_number
4313             ,p_description                => p_project_description
4314             ,x_structure_id               => l_structure_id
4315             ,x_structure_version_id       => l_structure_version_id
4316             ,x_msg_count                  => l_msg_count
4317             ,x_msg_data                   => l_msg_data
4318             ,x_return_status              => l_return_status
4319           );
4320 
4321        l_msg_count := FND_MSG_PUB.count_msg;
4322        if l_msg_count > 0 then
4323           x_msg_count := l_msg_count;
4324          if x_msg_count = 1 then
4325             pa_interface_utils_pub.get_messages
4326              (p_encoded        => FND_API.G_TRUE,
4327               p_msg_index      => 1,
4328               p_msg_count      => l_msg_count,
4329               p_msg_data       => l_msg_data,
4330               p_data           => l_data,
4331               p_msg_index_out  => l_msg_index_out);
4332             x_msg_data := l_data;
4333          end if;
4334          raise API_ERROR;
4335       end if;
4336      ELSE  --delete the workplan structure including all its structure versions.
4337          FOR cur_pa_proj_elems_rec IN cur_pa_proj_elems LOOP
4338              --should obly be WORKPLAN structure
4339              IF  PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure( cur_pa_proj_elems_rec.proj_element_id, 'WORKPLAN' ) = 'Y' AND
4340                  PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure( cur_pa_proj_elems_rec.proj_element_id, 'FINANCIAL' ) = 'N'
4341              THEN
4342                 FOR cur_pa_proj_elem_vers_rec IN cur_pa_proj_elem_vers( cur_pa_proj_elems_rec.proj_element_id ) LOOP
4343                     PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
4344                                p_structure_version_id              => cur_pa_proj_elem_vers_rec.element_version_id
4345                               ,p_record_version_number             => cur_pa_proj_elem_vers_rec.record_version_number
4346                               ,x_return_status                     => l_return_status
4347                               ,x_msg_count                         => l_msg_count
4348                               ,x_msg_data                          => l_msg_data
4349                             );
4350 
4351                      l_msg_count := FND_MSG_PUB.count_msg;
4352                      if l_msg_count > 0 then
4353                         x_msg_count := l_msg_count;
4354                        if x_msg_count = 1 then
4355                          pa_interface_utils_pub.get_messages
4356                          (p_encoded        => FND_API.G_TRUE,
4357                           p_msg_index      => 1,
4358                           p_msg_count      => l_msg_count,
4359                           p_msg_data       => l_msg_data,
4360                           p_data           => l_data,
4361                           p_msg_index_out  => l_msg_index_out);
4362                           x_msg_data := l_data;
4363                         end if;
4364                         raise API_ERROR;
4365                      end if;
4366                 END LOOP;
4367              END IF;
4368 
4369              --Now associate the WORKPLAN structure type with the COSTING structure.
4370              IF PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure( cur_pa_proj_elems_rec.proj_element_id, 'FINANCIAL' ) = 'Y'
4371              THEN
4372                  OPEN cur_struc_type_id;
4373                  FETCH cur_struc_type_id INTO l_structure_type_id;
4374                  CLOSE cur_struc_type_id;
4375                  PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
4376                             X_ROWID                  => l_rowid
4377                           , X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
4378                           , X_PROJ_ELEMENT_ID        => cur_pa_proj_elems_rec.proj_element_id
4379                           , X_STRUCTURE_TYPE_ID      => l_structure_type_id
4380                           , X_RECORD_VERSION_NUMBER  => 1
4381                           , X_ATTRIBUTE_CATEGORY     => NULL
4382                           , X_ATTRIBUTE1             => NULL
4383                           , X_ATTRIBUTE2             => NULL
4384                           , X_ATTRIBUTE3             => NULL
4385                           , X_ATTRIBUTE4             => NULL
4386                           , X_ATTRIBUTE5             => NULL
4387                           , X_ATTRIBUTE6             => NULL
4388                           , X_ATTRIBUTE7             => NULL
4389                           , X_ATTRIBUTE8             => NULL
4390                           , X_ATTRIBUTE9             => NULL
4391                           , X_ATTRIBUTE10            => NULL
4392                           , X_ATTRIBUTE11            => NULL
4393                           , X_ATTRIBUTE12            => NULL
4394                           , X_ATTRIBUTE13            => NULL
4395                           , X_ATTRIBUTE14            => NULL
4396                           , X_ATTRIBUTE15            => NULL
4397                         );
4398              END IF;
4399          END LOOP;
4400          --Now create the schedule versions for the workplan structure version and task versions.
4401          FOR cur_pa_proj_elem_vers_rec2 IN cur_pa_proj_elem_vers2 LOOP
4402              x_pev_schedule_id := null;
4403              PA_TASK_PUB1.Create_Schedule_Version(
4404                    p_element_version_id        => cur_pa_proj_elem_vers_rec2.element_version_id
4405                   ,p_scheduled_start_date      => SYSDATE
4406                   ,p_scheduled_end_date        => SYSDATE
4407                   ,x_pev_schedule_id           => x_pev_schedule_id
4408                   ,x_return_status             => l_return_status
4409                   ,x_msg_count                 => l_msg_count
4410                   ,x_msg_data                  => l_msg_data
4411              );
4412 
4413             IF l_return_status <> 'S'
4414             THEN
4415                PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4416                                     ,p_msg_name       => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
4417                raise api_error;
4418             END IF;
4419             FOR cur_pa_proj_elem_vers_rec3 IN cur_pa_proj_elem_vers3(cur_pa_proj_elem_vers_rec2.element_version_id) LOOP
4420                x_pev_schedule_id := null;
4421                PA_TASK_PUB1.Create_Schedule_Version(
4422                    p_element_version_id        => cur_pa_proj_elem_vers_rec3.element_version_id
4423                   ,p_scheduled_start_date      => SYSDATE
4424                   ,p_scheduled_end_date        => SYSDATE
4425                   ,x_pev_schedule_id           => x_pev_schedule_id
4426                   ,x_return_status             => l_return_status
4427                   ,x_msg_count                 => l_msg_count
4428                   ,x_msg_data                  => l_msg_data
4429                 );
4430 
4431                IF l_return_status <> 'S'
4432                THEN
4433                    PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4434                                         ,p_msg_name       => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
4435                    raise api_error;
4436                END IF;
4437             END LOOP;
4438          END LOOP;
4439      END IF;
4440      x_return_status := FND_API.G_RET_STS_SUCCESS;
4441 EXCEPTION
4442 WHEN API_ERROR THEN
4443   x_return_status := FND_API.G_RET_STS_ERROR;
4444   rollback to create_delete_wp_struc;
4445 WHEN OTHERS THEN
4446   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4447   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
4448                           p_procedure_name => 'create_delete_workplan_struc',
4449                           p_error_text     => SUBSTRB(SQLERRM,1,240));
4450   rollback to create_delete_wp_struc;
4451   raise;
4452 END create_delete_workplan_struc;
4453 
4454 
4455 -- API name                      : Copy_Structure
4456 -- Type                          : PL/sql Public procedure
4457 -- Pre-reqs                      : None
4458 -- Return Value                  : N/A
4459 -- Prameters
4460 -- p_src_project_id                  NUMBER
4461 -- p_dest_project_id                  NUMBER
4462 --  History
4463 --
4464 --  03-MAY-02   MAansari             -Created
4465 --
4466 --  Notes: This api is called from PA_PROJECT_CORE1.COPY_PROJECT
4467 
4468 PROCEDURE Copy_Structure(
4469    p_src_project_id                       IN NUMBER
4470   ,p_dest_project_id                      IN NUMBER
4471   ,p_delta                            IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4472   ,p_copy_task_flag                   IN VARCHAR2 := 'Y'
4473   ,p_dest_template_flag            IN VARCHAR2    := 'N'     --bug 2805602
4474   ,p_src_template_flag            IN VARCHAR2    := 'N'   --bug 2805602
4475   ,p_dest_project_name             IN VARCHAR2               --bug 2805602
4476   ,p_target_start_date             IN DATE                --bug 2805602
4477   ,p_target_finish_date             IN DATE               --bug 2805602
4478   ,p_calendar_id                   IN NUMBER
4479   ,x_msg_count                        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4480   ,x_msg_data                         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4481   ,x_return_status                    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4482  ) IS
4483 
4484   l_return_status       VARCHAR2(1);
4485   l_msg_count           NUMBER;
4486   l_msg_data            VARCHAR2(2000);
4487   l_data               VARCHAR2(2000);
4488   l_msg_index_out      NUMBER;
4489   l_error_message_code  VARCHAR2(250);
4490   API_ERROR            EXCEPTION;
4491 
4492 BEGIN
4493 
4494      --Clear Error Messages.
4495       IF FND_MSG_PUB.count_msg = 0
4496       THEN
4497           FND_MSG_PUB.initialize;
4498       END IF;
4499 
4500      SAVEPOINT cp_struc;
4501      --bug 2805602
4502 
4503 /*     PA_PROJECT_STRUCTURE_PUB1.Copy_Structure
4504                     (
4505                   p_src_project_id       => p_src_project_id
4506                  ,p_dest_project_id      => p_dest_project_id
4507                  ,p_delta                => p_delta
4508                  ,p_copy_task_flag       => p_copy_task_flag
4509                  ,x_return_status        => l_return_status
4510                  ,x_msg_count            => l_msg_count
4511                  ,x_msg_data             => l_msg_data
4512                     );
4513 */
4514 
4515      IF p_copy_task_flag = 'Y'
4516      THEN
4517 
4518           --copying structrues and tasks
4519           PA_PROJ_TASK_STRUC_PUB.copy_structures_tasks_bulk
4520                     (
4521                   p_init_msg_list        => FND_API.G_FALSE
4522                  ,p_src_project_id       => p_src_project_id
4523                  ,p_dest_project_id      => p_dest_project_id
4524                  ,p_delta                => p_delta
4525                  ,p_copy_task_flag       => p_copy_task_flag
4526                  ,p_dest_template_flag   => p_dest_template_flag
4527                  ,p_src_template_flag    => p_src_template_flag
4528                  ,p_dest_project_name    => p_dest_project_name
4529                  ,p_target_start_date    => p_target_start_date
4530                  ,p_target_finish_date   => p_target_finish_date
4531                  ,p_calendar_id          => p_calendar_id
4532                  ,x_return_status        => l_return_status
4533                  ,x_msg_count            => l_msg_count
4534                  ,x_msg_data             => l_msg_data
4535                     );
4536      ELSE
4537 
4538       -- Bug 4146369 : Added following condition so that the copy_structures_bulk is not get called
4539       -- when both structures are disabled in source project.
4540       IF PA_PROJECT_STRUCTURE_UTILS.check_workplan_enabled( p_src_project_id )= 'Y' OR
4541          PA_PROJECT_STRUCTURE_UTILS.check_financial_enabled( p_src_project_id )= 'Y' THEN
4542           --copying only structrues   --This is for AMG
4543           PA_PROJ_TASK_STRUC_PUB.copy_structures_bulk
4544                     (
4545                   p_src_project_id       => p_src_project_id
4546                  ,p_dest_project_id      => p_dest_project_id
4547                  ,p_delta                => p_delta
4548                  ,p_copy_task_flag       => p_copy_task_flag
4549                  ,p_dest_template_flag   => p_dest_template_flag
4550                  ,p_src_template_flag    => p_src_template_flag
4551                  ,p_dest_project_name    => p_dest_project_name
4552                  ,p_target_start_date    => p_target_start_date
4553                  ,p_target_finish_date   => p_target_finish_date
4554                  ,p_calendar_id          => p_calendar_id
4555                  ,x_return_status        => l_return_status
4556                  ,x_msg_count            => l_msg_count
4557                  ,x_msg_data             => l_msg_data
4558                     );
4559     END IF;
4560      END IF;
4561      --bug 2805602
4562 
4563 
4564        l_msg_count := FND_MSG_PUB.count_msg;
4565        if l_msg_count > 0 then
4566           x_msg_count := l_msg_count;
4567          if x_msg_count = 1 then
4568             pa_interface_utils_pub.get_messages
4569              (p_encoded        => FND_API.G_TRUE,
4570               p_msg_index      => 1,
4571               p_msg_count      => l_msg_count,
4572               p_msg_data       => l_msg_data,
4573               p_data           => l_data,
4574               p_msg_index_out  => l_msg_index_out);
4575             x_msg_data := l_data;
4576          end if;
4577          raise API_ERROR;
4578       end if;
4579 
4580      x_return_status := FND_API.G_RET_STS_SUCCESS;
4581 EXCEPTION
4582 WHEN API_ERROR THEN
4583   x_return_status := FND_API.G_RET_STS_ERROR;
4584   rollback to cp_struc;
4585 WHEN OTHERS THEN
4586   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4587   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
4588                           p_procedure_name => 'Copy_Structure',
4589                           p_error_text     => SUBSTRB(SQLERRM,1,240));
4590   rollback to cp_struc;
4591   raise;
4592 
4593 END Copy_Structure;
4594 
4595 -- API name                      : Clean_unwanted_tasks
4596 -- Type                          : PL/sql Public procedure
4597 -- Pre-reqs                      : None
4598 -- Return Value                  : N/A
4599 -- Prameters
4600 -- p_project_id                  NUMBER
4601 --  History
4602 --
4603 --  25-MAY-02   MAansari             -Created
4604 --
4605 --  Notes: This api is called from PA_PROJECT_PUB.CREATE_PROJECT to clean up the tasks in pa_proj_elements that were created
4606 --         by calling copy structure api. Copy structure api copies template's tasks to pro_elements though there
4607 --         are no pa_TASKs for the new project. However pa_tasks and pa_proj_elements must be in syn. To d this we need to firts remove
4608 --         tasks from pa_proj_elements as they were erroneously created by COPY_STRUCTURE and then call create_default_structure
4609 --         to syn up pa_pro_elements with pa_tasks.
4610 --
4611 
4612 PROCEDURE Clean_unwanted_tasks(
4613    p_project_id                       IN NUMBER
4614   ,x_msg_count                        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4615   ,x_msg_data                         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4616   ,x_return_status                    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4617  ) IS
4618 
4619   l_return_status       VARCHAR2(1);
4620   l_msg_count           NUMBER;
4621   l_msg_data            VARCHAR2(2000);
4622   l_data               VARCHAR2(2000);
4623   l_msg_index_out      NUMBER;
4624   l_error_message_code  VARCHAR2(250);
4625   API_ERROR            EXCEPTION;
4626 
4627   CURSOR cur_pa_proj_elem_vers
4628   IS
4629     SELECT element_version_id
4630       FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
4631      WHERE c.project_id = p_project_id
4632        AND a.structure_type_id = b.structure_type_id
4633        AND b.proj_element_id = c.proj_element_id
4634        AND a.structure_type = 'FINANCIAL';
4635 
4636   CURSOR cur_task_vers( c_parent_str_ver_id NUMBER )
4637   IS
4638     SELECT element_version_id, proj_element_id
4639       FROM pa_proj_element_versions
4640      WHERE project_id = p_project_id
4641        AND parent_structure_version_id = c_parent_str_ver_id
4642        AND object_type = 'PA_TASKS';
4643 
4644 l_cur_pa_proj_elem_vers_rec  cur_pa_proj_elem_vers%ROWTYPE;
4645 BEGIN
4646 
4647      --Clear Error Messages.
4648       IF FND_MSG_PUB.count_msg = 0
4649       THEN
4650           FND_MSG_PUB.initialize;
4651       END IF;
4652 
4653      SAVEPOINT clean_struc;
4654 
4655      OPEN  cur_pa_proj_elem_vers;
4656      FETCH cur_pa_proj_elem_vers INTO l_cur_pa_proj_elem_vers_rec;
4657      IF cur_pa_proj_elem_vers%FOUND
4658      THEN
4659          FOR cur_task_vers_rec IN cur_task_vers( l_cur_pa_proj_elem_vers_rec.element_version_id ) LOOP
4660              DELETE FROM pa_object_relationships WHERE relationship_type = 'S' AND
4661                                                        (object_id_to1 = cur_task_vers_rec.element_version_id OR
4662                                                         object_id_from1 = cur_task_vers_rec.element_version_id);
4663 
4664              --it is possible that COSTING and WORKPLAN str are same. so delete from schedule versions as well.
4665              DELETE FROM pa_proj_elem_ver_schedule WHERE element_version_id = cur_task_vers_rec.element_version_id and project_id = p_project_id;
4666 
4667              DELETE FROM pa_proj_element_versions WHERE element_version_id = cur_task_vers_rec.element_version_id;
4668 
4669              DELETE FROM pa_proj_elements WHERE proj_element_id = cur_task_vers_rec.proj_element_id;
4670 
4671          END LOOP;
4672      END IF;
4673      CLOSE cur_pa_proj_elem_vers;
4674     x_return_status := FND_API.G_RET_STS_SUCCESS;
4675 EXCEPTION
4676 WHEN API_ERROR THEN
4677   x_return_status := FND_API.G_RET_STS_ERROR;
4678   rollback to clean_struc;
4679 WHEN OTHERS THEN
4680   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4681   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
4682                           p_procedure_name => 'Clean_unwanted_tasks',
4683                           p_error_text     => SUBSTRB(SQLERRM,1,240));
4684   rollback to clean_struc;
4685   raise;
4686 
4687 END Clean_unwanted_tasks;
4688 
4689 -- API name                      : get_task_above
4690 -- Type                          : PL/sql Public procedure
4691 -- Pre-reqs                      : None
4692 -- Return Value                  : N/A
4693 -- Prameters
4694 
4695 --  History
4696 --
4697 --  14-AUG-02   MAansari             -Created
4698 --
4699 --  Notes: This api is called from Projects form and Self Service when the SPLIT_COST_FROM_WORKPLAN_FLAG
4700 --         is checked
4701 
4702 /*PROCEDURE get_task_above(
4703    p_task_id                              IN      NUMBER
4704   ,p_tasks_in                             IN      pa_project_pub.task_in_tbl_type
4705   ,p_tasks_out                            IN      pa_project_pub.task_out_tbl_type
4706   ,x_task_id_above                        OUT     NUMBER
4707   ,x_return_status                    OUT VARCHAR2
4708  ) IS
4709 
4710   v_task_id_above   NUMBER;
4711   l_msg_count       NUMBER ;
4712   l_msg_data        VARCHAR2(2000);
4713   l_return_status   VARCHAR2(1);
4714   l_last_index1      Number;
4715   l_first_index1      Number;
4716   l_index_number    number;
4717 
4718 BEGIN
4719      x_return_status := 'S';
4720 
4721      l_first_index1 := p_tasks_in.first;
4722      l_last_index1 := p_tasks_in.last;
4723 
4724      for i in l_first_index1..l_last_index1 loop
4725 
4726          IF p_task_id = p_tasks_out(i).pa_task_id
4727          THEN
4728             l_index_number := i;
4729             exit;
4730          END IF;
4731      end loop;
4732 
4733      IF l_index_number > l_first_index1 AND
4734         p_tasks_in(l_index_number-1).pa_task_id IS NOT NULL AND
4735         p_tasks_in(l_index_number-1).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4736         --existing task becomes the ref_task_id
4737      THEN
4738         v_task_id_above := p_tasks_in(l_index_number-1).pa_task_id;  --Get the task above.
4739      ELSIF l_index_number > l_first_index1 AND
4740         p_tasks_out(l_index_number-1).pa_task_id IS NOT NULL AND
4741         p_tasks_out(l_index_number-1).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4742         --new task becomes the ref_task_id
4743      THEN
4744         v_task_id_above := p_tasks_out(l_index_number-1).pa_task_id;  --Get the task above created newly
4745      ELSIF  ( p_tasks_in(l_index_number).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
4746               p_tasks_in(l_index_number).pa_task_id IS NULL
4747             ) AND
4748          l_index_number = l_first_index1
4749      THEN
4750          v_task_id_above := null;  --ref is the structure version. structure version is
4751                                    --derived in PA_PROJ_TASK_STRUC_PUB.create_task_structure API.
4752      END IF;
4753      x_task_id_above := v_task_id_above;
4754 
4755 EXCEPTION WHEN OTHERS THEN
4756           x_return_status := 'E';
4757 
4758 END get_task_above;*/
4759 
4760 -- API name                      : convert_pm_parent_task_ref
4761 -- Type                          : PL/sql Public procedure
4762 -- Pre-reqs                      : None
4763 -- Return Value                  : N/A
4764 -- Prameters
4765 
4766 --  History
4767 --
4768 --  14-AUG-02   MAansari             -Created
4769 --
4770 --  Notes: This api is not included in PA_PROJECT_PVT to avoid dependency.
4771 
4772 PROCEDURE convert_pm_parent_task_ref(
4773    p_pm_parent_task_reference             IN      VARCHAR2
4774   ,p_project_id                           IN      NUMBER
4775   ,x_parent_task_id                       OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
4776   ,x_return_status                        OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4777  ) IS
4778    CURSOR cur_pa_proj_elems
4779    IS
4780      SELECT proj_element_id
4781        FROM pa_proj_elements
4782       WHERE PM_SOURCE_REFERENCE = p_pm_parent_task_reference
4783         AND project_id = p_project_id
4784         AND OBJECT_TYPE = 'PA_TASKS';
4785 BEGIN
4786      x_return_status := FND_API.G_RET_STS_SUCCESS;
4787 
4788      OPEN cur_pa_proj_elems;
4789      FETCH cur_pa_proj_elems INTO x_parent_task_id;
4790      IF cur_pa_proj_elems%NOTFOUND
4791      THEN
4792          x_return_status := FND_API.G_RET_STS_ERROR;
4793      END IF;
4794 
4795      CLOSE cur_pa_proj_elems;
4796 EXCEPTION WHEN OTHERS THEN
4797           x_return_status := FND_API.G_RET_STS_ERROR;
4798 END convert_pm_parent_task_ref;
4799 
4800 -- API name                      : publish_structure
4801 -- Type                          : PL/sql Public procedure
4802 -- Pre-reqs                      : None
4803 -- Return Value                  : N/A
4804 -- Prameters
4805 
4806 --  History
4807 --
4808 --  19-AUG-02   MAansari             -Created
4809 --
4810 --  Notes: This api is a wrapper called from AMG
4811 
4812 PROCEDURE publish_structure(
4813     p_api_version                       IN  NUMBER      := 1.0
4814    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
4815    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
4816    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
4817    ,p_validation_level                  IN  VARCHAR2    := 100
4818    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
4819    ,p_debug_mode                        IN  VARCHAR2    := 'N'
4820    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4821    ,p_responsibility_id                 IN  NUMBER      := 0
4822    ,p_structure_version_id              IN  NUMBER
4823    ,p_publish_structure_ver_name        IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4824    ,p_structure_ver_desc                IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4825    ,p_effective_date                    IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4826    ,p_original_baseline_flag            IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4827    ,p_current_baseline_flag             IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4828    ,x_published_struct_ver_id           OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
4829    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4830    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
4831    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4832 ) IS
4833 BEGIN
4834   x_return_status := 'S';
4835   PA_PROJECT_STRUCTURE_PUB1.PUBLISH_STRUCTURE(
4836     p_api_version                       => p_api_version
4837    ,p_init_msg_list                     => p_init_msg_list
4838    ,p_commit                            => p_commit
4839    ,p_validate_only                     => p_validate_only
4840    ,p_validation_level                  => p_validation_level
4841    ,p_calling_module                    => p_calling_module
4842    ,p_debug_mode                        => p_debug_mode
4843    ,p_max_msg_count                     => p_max_msg_count
4844    ,p_responsibility_id                 => p_responsibility_id
4845    ,p_structure_version_id              => p_structure_version_id
4846    ,p_publish_structure_ver_name        => p_publish_structure_ver_name
4847    ,p_structure_ver_desc                => p_structure_ver_desc
4848    ,p_effective_date                    => p_effective_date
4849    ,p_original_baseline_flag            => p_original_baseline_flag
4850    ,p_current_baseline_flag             => p_current_baseline_flag
4851    ,x_published_struct_ver_id           => x_published_struct_ver_id
4852    ,x_return_status                     => x_return_status
4853    ,x_msg_count                         => x_msg_count
4854    ,x_msg_data                          => x_msg_data
4855   );
4856 
4857 END publish_structure;
4858 
4859 -- API name                      : delete_structure_version
4860 -- Type                          : PL/sql Public procedure
4861 -- Pre-reqs                      : None
4862 -- Return Value                  : N/A
4863 -- Prameters
4864 
4865 --  History
4866 --
4867 --  19-AUG-02   MAansari             -Created
4868 --
4869 --  Notes: This api is a wrapper called from AMG
4870 
4871 PROCEDURE delete_structure_version(
4872     p_api_version                       IN  NUMBER      := 1.0
4873    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
4874    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
4875    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
4876    ,p_validation_level                  IN  VARCHAR2    := 100
4877    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
4878    ,p_debug_mode                        IN  VARCHAR2    := 'N'
4879    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4880    ,p_structure_version_id              IN  NUMBER
4881    ,p_record_version_number             IN  NUMBER
4882    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4883    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
4884    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4885 ) IS
4886 BEGIN
4887   x_return_status := 'S';
4888   PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
4889     p_api_version                       => p_api_version
4890    ,p_init_msg_list                     => p_init_msg_list
4891    ,p_commit                            => p_commit
4892    ,p_validate_only                     => p_validate_only
4893    ,p_validation_level                  => p_validation_level
4894    ,p_calling_module                    => p_calling_module
4895    ,p_debug_mode                        => p_debug_mode
4896    ,p_max_msg_count                     => p_max_msg_count
4897    ,p_structure_version_id              => p_structure_version_id
4898    ,p_record_version_number             => p_record_version_number
4899    ,x_return_status                     => x_return_status
4900    ,x_msg_count                         => x_msg_count
4901    ,x_msg_data                          => x_msg_data
4902   );
4903 
4904 END delete_structure_version;
4905 
4906 -- API name                      : create_structure
4907 -- Type                          : PL/sql Public procedure
4908 -- Pre-reqs                      : None
4909 -- Return Value                  : N/A
4910 -- Prameters
4911 
4912 --  History
4913 --
4914 --  19-AUG-02   HUBERT             -Created
4915 --
4916 --  Notes: This api is a wrapper called from AMG
4917 
4918   --This API will only be called with the structure type = 'WORKPLAN'
4919 procedure create_structure(
4920     p_project_id             IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4921    ,p_structure_type         IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4922    ,p_structure_version_name IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4923    ,p_description            IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4924    ,x_structure_id           OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4925    ,x_structure_version_id   OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4926    ,x_msg_count              OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4927    ,x_msg_data               OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4928    ,x_return_status          OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4929   )
4930   IS
4931     l_return_status          VARCHAR2(1);
4932     l_msg_count              NUMBER;
4933     l_msg_data               VARCHAR2(2000);
4934     l_error_message_code     VARCHAR2(30);
4935 
4936     l_project_name           PA_PROJECTS_ALL.name%TYPE;
4937     l_project_number         PA_PROJECTS_ALL.segment1%TYPE;
4938 
4939     l_suffix                 VARCHAR2(250);
4940     l_name                   VARCHAR2(240);
4941     l_number                 VARCHAR2(25);
4942     l_struc_ver_number       NUMBER;
4943     l_append                 VARCHAR2(250);
4944     l_status_code            VARCHAR2(150);
4945     x_row_id                 VARCHAR2(18);
4946     x_pev_structure_id       NUMBER;
4947     x_pev_schedule_id        NUMBER;
4948     -- added for Bug Fix: 4537865
4949     l_new_structure_version_id  NUMBER;
4950     -- added for Bug Fix: 4537865
4951 
4952     CURSOR c1 IS
4953       select segment1, name from pa_projects_all
4954        where project_id = p_project_id;
4955 
4956     CURSOR cur_elem_ver_seq IS
4957       SELECT pa_proj_element_versions_s.nextval
4958         FROM sys.dual;
4959 
4960     cursor get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
4961     select nvl(max(version_number),0)+1
4962       from pa_proj_elem_ver_structure
4963      where project_id = c_project_id
4964        and proj_element_id = c_proj_element_id
4965        and status_code <> 'STRUCTURE_PUBLISHED';
4966 
4967     l_current_working_ver_flag     VARCHAR2(1);   /* FPM bug 3301192 */
4968     l_latest_eff_published_flag    VARCHAR2(1);   /* FPM bug 3301192 */ /* this is added to fix the bug. If version enabled the status should be working other wise it should be published. */
4969   BEGIN
4970 
4971       IF FND_MSG_PUB.count_msg = 0
4972       THEN
4973           FND_MSG_PUB.initialize;
4974       END IF;
4975     --check if the project have any structures
4976     PA_PROJECT_STRUCTURE_UTILS.Check_Structure_Type_Exists(
4977                                 p_project_id,
4978                                 p_structure_type,
4979                                 l_return_status,
4980                                 l_error_message_code);
4981     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4982       --PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4983                            --,p_msg_name => l_error_message_code);
4984       --raise FND_API.G_EXC_ERROR;
4985 
4986       -- Bug 3075609. When the structure type exists we need to ignore the error.
4987       -- This check has been used just to return with out doing any further
4988       -- processing.
4989       IF l_error_message_code <> 'PA_PS_STRUC_TYPE_EXISTS' THEN
4990            x_return_status := FND_API.G_RET_STS_ERROR;   -- Bug3044915
4991            x_msg_data := l_error_message_code ;          -- Bug3044915
4992            x_msg_count := FND_MSG_PUB.count_msg;         -- Bug3044915
4993       ELSE
4994            x_return_status := FND_API.G_RET_STS_SUCCESS;
4995            x_msg_data := NULL;
4996            x_msg_count := NULL;
4997       END IF;
4998       Return;
4999     END IF;
5000     --If no error, create structure
5001     OPEN c1;
5002     FETCH c1 into l_number, l_name;
5003     CLOSE c1;
5004 
5005     select meaning
5006       into l_suffix
5007       from pa_lookups
5008      where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
5009        and lookup_code = 'WORKPLAN';
5010 
5011     l_name := substr(l_name||l_append||l_suffix,1,240);
5012     --Create structure
5013     PA_PROJECT_STRUCTURE_PVT1.Create_Structure(
5014                         p_project_id            => p_project_id
5015                        ,p_structure_number      => l_number
5016                        ,p_structure_name        => l_name
5017                        ,p_structure_description => p_description
5018                        ,p_calling_flag          => p_structure_type
5019                        ,x_structure_id          => x_structure_id
5020                        ,x_return_status         => l_return_status
5021                        ,x_msg_count             => l_msg_count
5022                        ,x_msg_data              => l_msg_data
5023                      );
5024     IF x_structure_id IS NULL OR l_return_status <> 'S' THEN
5025       PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
5026                            ,p_msg_name       => 'PA_PS_NO_STRUC_CREATED');
5027       raise FND_API.G_EXC_ERROR;
5028     END IF;
5029     --Create structure version
5030     OPEN cur_elem_ver_seq;
5031     FETCH cur_elem_ver_seq INTO x_structure_version_id;
5032     CLOSE cur_elem_ver_seq;
5033 
5034     -- Fix for 4657794 :- This is fix for regression introduced by 4537865
5035     -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_new_structure_version_id
5036     -- to  x_structure_version_id
5037 
5038     l_new_structure_version_id := x_structure_version_id ;
5039 
5040     -- End 4657794
5041 
5042     PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row(
5043             X_ROW_ID                     => X_row_id
5044          --,X_ELEMENT_VERSION_ID         => x_structure_version_id      * commented got Bug Fix: 4537865
5045            ,X_ELEMENT_VERSION_ID     => l_new_structure_version_id      --added for Bug Fix: 4537865
5046            ,X_PROJ_ELEMENT_ID            => x_structure_id
5047            ,X_OBJECT_TYPE                => 'PA_STRUCTURES'
5048            ,X_PROJECT_ID                 => p_project_id
5049            ,X_PARENT_STRUCTURE_VERSION_ID=> x_structure_version_id
5050            ,X_DISPLAY_SEQUENCE           => null
5051            ,X_WBS_LEVEL                   => null
5052            ,X_WBS_NUMBER          => '0'
5053            ,X_ATTRIBUTE_CATEGORY    => null
5054            ,X_ATTRIBUTE1          => null
5055            ,X_ATTRIBUTE2          => null
5056            ,X_ATTRIBUTE3          => null
5057            ,X_ATTRIBUTE4          => null
5058            ,X_ATTRIBUTE5          => null
5059            ,X_ATTRIBUTE6          => null
5060            ,X_ATTRIBUTE7          => null
5061            ,X_ATTRIBUTE8          => null
5062            ,X_ATTRIBUTE9          => null
5063            ,X_ATTRIBUTE10              => null
5064            ,X_ATTRIBUTE11              => null
5065            ,X_ATTRIBUTE12              => null
5066            ,X_ATTRIBUTE13              => null
5067            ,X_ATTRIBUTE14              => null
5068            ,X_ATTRIBUTE15              => null
5069            ,X_TASK_UNPUB_VER_STATUS_CODE => null
5070            ,X_SOURCE_OBJECT_ID            => p_project_id
5071            ,X_SOURCE_OBJECT_TYPE          => 'PA_PROJECTS'
5072        );
5073     -- added for Bug Fix: 4537865
5074         x_structure_version_id := l_new_structure_version_id;
5075     -- added for Bug Fix: 4537865
5076 
5077     IF x_structure_version_id IS NULL THEN
5078       PA_UTILS.ADD_MESSAGE(
5079                          p_app_short_name => 'PA'
5080                         ,p_msg_name       => 'PA_PS_NO_STRUC_VER_CREATED');
5081       raise FND_API.G_EXC_ERROR;
5082     END IF;
5083     --Get structure version number
5084     OPEN get_working_ver_num(p_project_id, x_structure_id);
5085     FETCH get_working_ver_num INTO l_struc_ver_number;
5086     CLOSE get_working_ver_num;
5087 
5088     --FPM bug 3301192
5089     IF NVL( PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED(p_project_id), 'N' ) = 'Y'
5090     THEN
5091        l_status_code := 'STRUCTURE_WORKING';
5092        l_current_working_ver_flag := 'Y';
5093        l_latest_eff_published_flag := 'N';
5094     ELSE
5095        l_status_code := 'STRUCTURE_PUBLISHED';
5096        l_current_working_ver_flag := 'N';
5097        l_latest_eff_published_flag := 'Y';
5098     END IF;
5099     --end FPM bug 3301192
5100 
5101     PA_PROJ_ELEM_VER_STRUCTURE_PKG.insert_row(
5102      X_ROWID                       => x_row_id
5103    , X_PEV_STRUCTURE_ID            => x_pev_structure_id
5104    , X_ELEMENT_VERSION_ID          => x_structure_version_id
5105    , X_VERSION_NUMBER              => l_struc_ver_number
5106    , X_NAME                        => l_name
5107    , X_PROJECT_ID                  => p_project_id
5108    , X_PROJ_ELEMENT_ID             => x_structure_id
5109    , X_DESCRIPTION                 => p_description
5110    , X_EFFECTIVE_DATE              => null
5111    , X_PUBLISHED_DATE              => null
5112    , X_PUBLISHED_BY                => null
5113    , X_CURRENT_BASELINE_DATE       => null
5114    , X_CURRENT_BASELINE_FLAG       => 'N'
5115    , X_CURRENT_BASELINE_BY         => null
5116    , X_ORIGINAL_BASELINE_DATE      => null
5117    , X_ORIGINAL_BASELINE_FLAG      => 'N'
5118    , X_ORIGINAL_BASELINE_BY        => null
5119    , X_LOCK_STATUS_CODE            => NULL
5120    , X_LOCKED_BY                   => NULL
5121    , X_LOCKED_DATE                 => NULL
5122    , X_STATUS_CODE                 => l_status_code
5123    , X_WF_STATUS_CODE              => NULL
5124    , X_LATEST_EFF_PUBLISHED_FLAG   => l_latest_eff_published_flag
5125    , X_RECORD_VERSION_NUMBER       => 1
5126    , X_CHANGE_REASON_CODE          => NULL
5127    , X_CURRENT_WORKING_FLAG        => l_current_working_ver_flag      /* bug 3301192 */
5128    , X_SOURCE_OBJECT_ID            => p_project_id
5129    , X_SOURCE_OBJECT_TYPE          => 'PA_PROJECTS'
5130     );
5131 
5132     PA_TASK_PUB1.Create_Schedule_Version(
5133                    p_element_version_id        => x_structure_version_id
5134                   ,p_scheduled_start_date      => SYSDATE
5135                   ,p_scheduled_end_date        => SYSDATE
5136                   ,x_pev_schedule_id           => x_pev_schedule_id
5137                   ,x_return_status             => l_return_status
5138                   ,x_msg_count                 => l_msg_count
5139                   ,x_msg_data                  => l_msg_data
5140     );
5141 
5142     IF l_return_status <> 'S' THEN
5143       PA_UTILS.ADD_MESSAGE(
5144                        p_app_short_name => 'PA'
5145                       ,p_msg_name       => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
5146       raise FND_API.G_EXC_ERROR;
5147     END IF;
5148     x_return_status := FND_API.G_RET_STS_SUCCESS;
5149   EXCEPTION
5150     WHEN FND_API.G_EXC_ERROR THEN
5151       x_msg_count := FND_MSG_PUB.count_msg;
5152       x_return_status := FND_API.G_RET_STS_ERROR;
5153     WHEN OTHERS THEN
5154       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5155       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
5156                           p_procedure_name => 'CREATE_STRUCTURE',
5157                           p_error_text     => SUBSTRB(SQLERRM,1,240));
5158       raise;
5159 END create_structure;
5160 
5161 -- API name                      : create_structure
5162 -- Type                          : PL/sql Public procedure
5163 -- Pre-reqs                      : None
5164 -- Return Value                  : N/A
5165 -- Prameters
5166 
5167 --  History
5168 --
5169 --  19-AUG-02   HUBERT             -Created
5170 --
5171 --  Notes: This api is a wrapper called from AMG
5172 
5173 procedure create_update_struct_ver(
5174     p_project_id             IN  NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5175    ,p_structure_type         IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5176    ,p_structure_version_name IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5177    ,p_structure_version_id   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5178    ,p_description            IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5179    ,x_structure_version_id   OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5180    ,x_msg_count              OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5181    ,x_msg_data               OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5182    ,x_return_status          OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5183   )
5184   IS
5185     cursor c1 is
5186       select pev_structure_id, name, record_version_number
5187         from pa_proj_elem_ver_structure
5188        where project_id = p_project_id
5189          and element_version_id = p_structure_version_id;
5190 
5191     l_name             VARCHAR2(240);
5192     l_pev_structure_id NUMBER;
5193     l_record_version_number NUMBER;
5194     l_proj_element_id NUMBER;
5195     l_enable_wp_version_flag varchar2(1);
5196     l_dummy varchar2(1);
5197     l_struc_ver_number       NUMBER;
5198     l_return_status          VARCHAR2(1);
5199     l_msg_count              NUMBER;
5200     l_msg_data               VARCHAR2(2000);
5201     -- added for Bug Fix: 4537865
5202     l_new_structure_version_id  NUMBER;
5203     -- added for Bug Fix: 4537865
5204     x_row_id                 VARCHAR2(18);
5205     x_pev_structure_id       NUMBER;
5206     x_pev_schedule_id        NUMBER;
5207 
5208     cursor c2 is
5209       select b.proj_element_id
5210         from pa_proj_elements a, pa_proj_structure_types b,
5211              pa_structure_types c
5212        where a.project_id = p_project_id
5213          and a.object_type = 'PA_STRUCTURES'
5214          and a.proj_element_id = b.proj_element_id
5215          and b.structure_type_id = c.structure_type_id
5216          and c.structure_type = p_structure_type;
5217 
5218     cursor c3 is
5219       select wp_enable_version_flag
5220         from pa_proj_workplan_attr
5221        where project_id = p_project_id;
5222 
5223     cursor c4(c_proj_elem_id NUMBER) is
5224       select '1' from pa_proj_elem_ver_structure
5225        where project_id = p_project_id
5226          and proj_element_id = c_proj_elem_id
5227          and status_code <> 'STRUCTURE_PUBLISHED';
5228 
5229     CURSOR cur_elem_ver_seq IS
5230       SELECT pa_proj_element_versions_s.nextval
5231         FROM sys.dual;
5232 
5233     cursor get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
5234     select nvl(max(version_number),0)+1
5235       from pa_proj_elem_ver_structure
5236      where project_id = c_project_id
5237        and proj_element_id = c_proj_element_id
5238        and status_code <> 'STRUCTURE_PUBLISHED';
5239 
5240     l_current_working_ver_flag    VARCHAR2(1);   /* FPM bug 3301192 */
5241   BEGIN
5242 
5243       IF FND_MSG_PUB.count_msg = 0
5244       THEN
5245           FND_MSG_PUB.initialize;
5246       END IF;
5247 
5248     IF (p_structure_version_name IS NOT NULL) AND
5249        (p_structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
5250        ((p_structure_version_id IS NULL) OR (p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) THEN
5251       --get structure for input type
5252       OPEN c2;
5253       FETCH c2 into l_proj_element_id;
5254       IF c2%NOTFOUND THEN
5255         PA_UTILS.ADD_MESSAGE(
5256                          p_app_short_name => 'PA'
5257                         ,p_msg_name       => 'PA_PS_NO_STRUC_VER_CREATED');
5258         CLOSE c2;
5259         RAISE FND_API.G_EXC_ERROR;
5260       END IF;
5261       CLOSE c2;
5262 
5263       IF l_proj_element_id IS NOT NULL
5264       THEN
5265           IF PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Name_Unique(
5266                    p_structure_version_name       => p_structure_version_name
5267                   ,p_pev_structure_id             => null
5268                   ,p_project_id                   => p_project_id
5269                   ,p_structure_id                 => l_proj_element_id
5270                ) = 'N'
5271           THEN
5272               PA_UTILS.ADD_MESSAGE(
5273                          p_app_short_name => 'PA'
5274                         ,p_msg_name       => 'PA_PS_STRUC_VER_NAM_UNIQUE');
5275               RAISE FND_API.G_EXC_ERROR;
5276           END IF;
5277       END IF;
5278 
5279       IF (p_structure_type = 'FINANCIAL') THEN
5280         --If this is financial, check if there is working version
5281         OPEN c3;
5282         FETCH c3 into l_enable_wp_version_flag;
5283         CLOSE c3;
5284         IF (l_enable_wp_version_flag = 'Y') THEN
5285           --if enable wp version flag is 'Y', and if a working (unpublished)
5286           --version exist.
5287           OPEN c4 (l_proj_element_id);
5288           FETCH c4 into l_dummy;
5289           IF (c4%FOUND) THEN
5290             --there is a working version; cannot create another one.
5291             CLOSE c4;
5292             PA_UTILS.ADD_MESSAGE(
5293                          p_app_short_name => 'PA'
5294                         --,p_msg_name       => 'PA_PS_NO_STRUC_VER_CREATED');
5295             ,p_msg_name       => 'PA_PS_WORKING_STRUC_VER_EXIST'); --bug # 3713107
5296             RAISE FND_API.G_EXC_ERROR;
5297           END IF;
5298           CLOSE c4;
5299           --create a new financial structure version
5300 
5301           --Create structure version
5302           OPEN cur_elem_ver_seq;
5303           FETCH cur_elem_ver_seq INTO x_structure_version_id;
5304           CLOSE cur_elem_ver_seq;
5305 
5306     -- Fix for 4657794 :- This is fix for regression introduced by 4537865
5307     -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_new_structure_version_id
5308     -- to  x_structure_version_id
5309 
5310     l_new_structure_version_id := x_structure_version_id ;
5311 
5312     -- End 4657794
5313 
5314           PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row(
5315             X_ROW_ID                     => X_row_id
5316          --,X_ELEMENT_VERSION_ID         => x_structure_version_id       * Commented for Bug Fix: 4537865
5317            ,X_ELEMENT_VERSION_ID     => l_new_structure_version_id       -- added for Bug fix: 4537865
5318            ,X_PROJ_ELEMENT_ID            => l_proj_element_id
5319            ,X_OBJECT_TYPE                => 'PA_STRUCTURES'
5320            ,X_PROJECT_ID                 => p_project_id
5321            ,X_PARENT_STRUCTURE_VERSION_ID=> x_structure_version_id
5322            ,X_DISPLAY_SEQUENCE           => null
5323            ,X_WBS_LEVEL                   => null
5324            ,X_WBS_NUMBER          => '0'
5325            ,X_ATTRIBUTE_CATEGORY    => null
5326            ,X_ATTRIBUTE1          => null
5327            ,X_ATTRIBUTE2          => null
5328            ,X_ATTRIBUTE3          => null
5329            ,X_ATTRIBUTE4          => null
5330            ,X_ATTRIBUTE5          => null
5331            ,X_ATTRIBUTE6          => null
5332            ,X_ATTRIBUTE7          => null
5333            ,X_ATTRIBUTE8          => null
5334            ,X_ATTRIBUTE9          => null
5335            ,X_ATTRIBUTE10              => null
5336            ,X_ATTRIBUTE11              => null
5337            ,X_ATTRIBUTE12              => null
5338            ,X_ATTRIBUTE13              => null
5339            ,X_ATTRIBUTE14              => null
5340            ,X_ATTRIBUTE15              => null
5341            ,X_TASK_UNPUB_VER_STATUS_CODE => null
5342            ,X_SOURCE_OBJECT_ID           => p_project_id
5343            ,X_SOURCE_OBJECT_TYPE         => 'PA_PROJECTS'
5344           );
5345           -- added for Bug fix: 4537865
5346             x_structure_version_id := l_new_structure_version_id;
5347           -- added for Bug fix: 4537865
5348 
5349           IF x_structure_version_id IS NULL THEN
5350             PA_UTILS.ADD_MESSAGE(
5351                          p_app_short_name => 'PA'
5352                         ,p_msg_name       => 'PA_PS_NO_STRUC_VER_CREATED');
5353             raise FND_API.G_EXC_ERROR;
5354           END IF;
5355 
5356           --Get structure version number
5357           OPEN get_working_ver_num(p_project_id, l_proj_element_id);
5358           FETCH get_working_ver_num INTO l_struc_ver_number;
5359           CLOSE get_working_ver_num;
5360 
5361           PA_PROJ_ELEM_VER_STRUCTURE_PKG.insert_row(
5362             X_ROWID                       => x_row_id
5363           , X_PEV_STRUCTURE_ID            => x_pev_structure_id
5364           , X_ELEMENT_VERSION_ID          => x_structure_version_id
5365           , X_VERSION_NUMBER              => l_struc_ver_number
5366           , X_NAME                        => p_structure_version_name
5367           , X_PROJECT_ID                  => p_project_id
5368           , X_PROJ_ELEMENT_ID             => l_proj_element_id
5369           , X_DESCRIPTION                 => p_description
5370           , X_EFFECTIVE_DATE              => null
5371           , X_PUBLISHED_DATE              => null
5372           , X_PUBLISHED_BY                => null
5373           , X_CURRENT_BASELINE_DATE       => null
5374           , X_CURRENT_BASELINE_FLAG       => 'N'
5375           , X_CURRENT_BASELINE_BY         => null
5376           , X_ORIGINAL_BASELINE_DATE      => null
5377           , X_ORIGINAL_BASELINE_FLAG      => 'N'
5378           , X_ORIGINAL_BASELINE_BY        => null
5379           , X_LOCK_STATUS_CODE            => NULL
5380           , X_LOCKED_BY                   => NULL
5381           , X_LOCKED_DATE                 => NULL
5382           , X_STATUS_CODE                 => 'STRUCTURE_WORKING'
5383           , X_WF_STATUS_CODE              => NULL
5384           , X_LATEST_EFF_PUBLISHED_FLAG   => 'N'
5385           , X_RECORD_VERSION_NUMBER       => 1
5386           , X_CHANGE_REASON_CODE          => NULL
5387           , X_CURRENT_WORKING_FLAG        => 'Y'            /* Since this is a shared + versioned senario and only one struc version then it should be CWV. bug 3301192 */
5388           , X_SOURCE_OBJECT_ID            => p_project_id
5389           , X_SOURCE_OBJECT_TYPE          => 'PA_PROJECTS'
5390           );
5391 
5392             PA_TASK_PUB1.Create_Schedule_Version(
5393                    p_element_version_id        => x_structure_version_id
5394                   ,p_scheduled_start_date      => SYSDATE
5395                   ,p_scheduled_end_date        => SYSDATE
5396                   ,x_pev_schedule_id           => x_pev_schedule_id
5397                   ,x_return_status             => l_return_status
5398                   ,x_msg_count                 => l_msg_count
5399                   ,x_msg_data                  => l_msg_data
5400              );
5401 
5402             IF l_return_status <> 'S' THEN
5403                 PA_UTILS.ADD_MESSAGE(
5404                        p_app_short_name => 'PA'
5405                       ,p_msg_name       => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
5406                 raise FND_API.G_EXC_ERROR;
5407             END IF;
5408 
5409         ELSE
5410           --a version exists. Cannot create.
5411           PA_UTILS.ADD_MESSAGE(
5412                          p_app_short_name => 'PA'
5413                         ,p_msg_name       => 'PA_PS_NO_STRUC_VER_CREATED');
5414           RAISE FND_API.G_EXC_ERROR;
5415         END IF;
5416       ELSE
5417 /*
5418         --check if this is workplan type structure only
5419         IF (PA_PROJECT_STRUCTURE_UTILS.Get_struc_Type_for_Structure(
5420                                        l_proj_element_id, 'FINANCIAL') = 'Y') THEN
5421           --cannot create because this structure contains financial information also
5422           PA_UTILS.ADD_MESSAGE(
5423                          p_app_short_name => 'PA'
5424                         ,p_msg_name       => 'PA_PS_NO_STRUC_VER_CREATED');
5425           RAISE FND_API.G_EXC_ERROR;
5426         END IF;
5427 */
5428         IF NVL( IS_WP_VERSIONING_ENABLED( p_project_id ), 'N' ) = 'N'
5429         THEN
5430           --cannot create because versioning is not enabled.
5431           PA_UTILS.ADD_MESSAGE(
5432                          p_app_short_name => 'PA'
5433                         ,p_msg_name       => 'PA_PS_NO_STRUC_VER_CREATED');
5434           RAISE FND_API.G_EXC_ERROR;
5435         END IF;
5436         --create a new workplan structure version
5437         OPEN cur_elem_ver_seq;
5438         FETCH cur_elem_ver_seq INTO x_structure_version_id;
5439         CLOSE cur_elem_ver_seq;
5440 
5441     -- Fix for 4657794 :- This is fix for regression introduced by 4537865
5442     -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_new_structure_version_id
5443     -- to  x_structure_version_id
5444 
5445     l_new_structure_version_id := x_structure_version_id ;
5446 
5447     -- End 4657794
5448 
5449         PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row(
5450             X_ROW_ID                     => X_row_id
5451          --,X_ELEMENT_VERSION_ID         => x_structure_version_id      * commented for Bug fix: 4537865
5452            , X_ELEMENT_VERSION_ID    => l_new_structure_version_id       -- added for Bug fix: 4537865
5453            ,X_PROJ_ELEMENT_ID            => l_proj_element_id
5454            ,X_OBJECT_TYPE                => 'PA_STRUCTURES'
5455            ,X_PROJECT_ID                 => p_project_id
5456            ,X_PARENT_STRUCTURE_VERSION_ID=> x_structure_version_id
5457            ,X_DISPLAY_SEQUENCE           => null
5458            ,X_WBS_LEVEL                   => null
5459            ,X_WBS_NUMBER          => '0'
5460            ,X_ATTRIBUTE_CATEGORY    => null
5461            ,X_ATTRIBUTE1          => null
5462            ,X_ATTRIBUTE2          => null
5463            ,X_ATTRIBUTE3          => null
5464            ,X_ATTRIBUTE4          => null
5465            ,X_ATTRIBUTE5          => null
5466            ,X_ATTRIBUTE6          => null
5467            ,X_ATTRIBUTE7          => null
5468            ,X_ATTRIBUTE8          => null
5469            ,X_ATTRIBUTE9          => null
5470            ,X_ATTRIBUTE10              => null
5471            ,X_ATTRIBUTE11              => null
5472            ,X_ATTRIBUTE12              => null
5473            ,X_ATTRIBUTE13              => null
5474            ,X_ATTRIBUTE14              => null
5475            ,X_ATTRIBUTE15              => null
5476            ,X_TASK_UNPUB_VER_STATUS_CODE => null
5477            ,X_SOURCE_OBJECT_ID           => p_project_id
5478            ,X_SOURCE_OBJECT_TYPE         => 'PA_PROJECTS'
5479         );
5480          -- added for Bug fix: 4537865
5481          x_structure_version_id := l_new_structure_version_id;
5482           -- added for Bug fix: 4537865
5483 
5484         IF x_structure_version_id IS NULL THEN
5485           PA_UTILS.ADD_MESSAGE(
5486                          p_app_short_name => 'PA'
5487                         ,p_msg_name       => 'PA_PS_NO_STRUC_VER_CREATED');
5488           raise FND_API.G_EXC_ERROR;
5489         END IF;
5490 
5491         --Get structure version number
5492         OPEN get_working_ver_num(p_project_id, l_proj_element_id);
5493         FETCH get_working_ver_num INTO l_struc_ver_number;
5494         --FPM bug 3301192
5495         --if there is no working version( un-publihsed) then this is the CWV
5496         IF get_working_ver_num%NOTFOUND
5497         THEN
5498            l_current_working_ver_flag := 'Y';
5499         ELSE
5500            l_current_working_ver_flag := 'N';
5501         END IF;
5502         --end FPM bug 3301192
5503         CLOSE get_working_ver_num;
5504 
5505         PA_PROJ_ELEM_VER_STRUCTURE_PKG.insert_row(
5506             X_ROWID                       => x_row_id
5507           , X_PEV_STRUCTURE_ID            => x_pev_structure_id
5508           , X_ELEMENT_VERSION_ID          => x_structure_version_id
5509           , X_VERSION_NUMBER              => l_struc_ver_number
5510           , X_NAME                        => p_structure_version_name
5511           , X_PROJECT_ID                  => p_project_id
5512           , X_PROJ_ELEMENT_ID             => l_proj_element_id
5513           , X_DESCRIPTION                 => p_description
5514           , X_EFFECTIVE_DATE              => null
5515           , X_PUBLISHED_DATE              => null
5516           , X_PUBLISHED_BY                => null
5517           , X_CURRENT_BASELINE_DATE       => null
5518           , X_CURRENT_BASELINE_FLAG       => 'N'
5519           , X_CURRENT_BASELINE_BY         => null
5520           , X_ORIGINAL_BASELINE_DATE      => null
5521           , X_ORIGINAL_BASELINE_FLAG      => 'N'
5522           , X_ORIGINAL_BASELINE_BY        => null
5523           , X_LOCK_STATUS_CODE            => NULL
5524           , X_LOCKED_BY                   => NULL
5525           , X_LOCKED_DATE                 => NULL
5526           , X_STATUS_CODE                 => 'STRUCTURE_WORKING'
5527           , X_WF_STATUS_CODE              => NULL
5528           , X_LATEST_EFF_PUBLISHED_FLAG   => 'N'
5529           , X_RECORD_VERSION_NUMBER       => 1
5530           , X_CHANGE_REASON_CODE          => NULL
5531           , X_CURRENT_WORKING_FLAG        => l_current_working_ver_flag      /* bug 3301192 */
5532           , X_SOURCE_OBJECT_ID            => p_project_id
5533           , X_SOURCE_OBJECT_TYPE          => 'PA_PROJECTS'
5534         );
5535 
5536         PA_TASK_PUB1.Create_Schedule_Version(
5537                    p_element_version_id        => x_structure_version_id
5538                   ,p_scheduled_start_date      => SYSDATE
5539                   ,p_scheduled_end_date        => SYSDATE
5540                   ,x_pev_schedule_id           => x_pev_schedule_id
5541                   ,x_return_status             => l_return_status
5542                   ,x_msg_count                 => l_msg_count
5543                   ,x_msg_data                  => l_msg_data
5544         );
5545 
5546         IF l_return_status <> 'S' THEN
5547           PA_UTILS.ADD_MESSAGE(
5548                        p_app_short_name => 'PA'
5549                       ,p_msg_name       => 'PA_PS_NO_STRUC_SCH_VER_CREATED');
5550           raise FND_API.G_EXC_ERROR;
5551         END IF;
5552     -- Bug 4574032 Begin
5553     BEGIN
5554     PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions
5555               (
5556                 p_context                => 'WORKPLAN'
5557                ,p_project_id             => p_project_id
5558                ,p_struct_elem_version_id => x_structure_version_id
5559                ,x_return_status          => l_return_status
5560                ,x_msg_count              => l_msg_count
5561                ,x_Msg_data               => l_msg_data
5562               );
5563     EXCEPTION
5564         WHEN OTHERS THEN
5565             fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
5566                 p_procedure_name => 'CREATE_UPDATE_STRUCT_VER',
5567                 p_error_text => SUBSTRB('call of pa_fp_planning_transaction_pub.add_planning_transactions failed. sqlerrm= :'||SQLERRM,1,240));
5568                         raise  fnd_api.g_exc_error;
5569     END;
5570         IF l_return_status <> 'S' THEN
5571           raise FND_API.G_EXC_ERROR;
5572         END IF;
5573     -- Bug 4574032 End
5574       END IF;
5575     ELSE
5576       --update existing structure
5577       IF (p_structure_version_id IS NOT NULL) AND (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
5578 
5579         --check if name is passed in
5580         open c1;
5581         fetch c1 into l_pev_structure_id, l_name, l_record_version_number;
5582         close c1;
5583         If (p_structure_version_name IS NOT NULL) AND
5584            (p_structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
5585           l_name := p_structure_version_name;
5586         END IF;
5587 
5588         --call update_structure_version_attr API
5589         PA_PROJECT_STRUCTURE_PVT1.update_structure_version_attr(
5590           p_pev_structure_id => l_pev_structure_id
5591          ,p_structure_version_name => l_name
5592          ,p_structure_version_desc => p_description
5593          ,p_record_version_number => l_record_version_number
5594          ,x_return_status => x_return_status
5595          ,x_msg_count => x_msg_count
5596          ,x_msg_data => x_msg_data
5597         );
5598       END IF;
5599     END IF;
5600   EXCEPTION
5601     WHEN FND_API.G_EXC_ERROR THEN
5602       x_msg_count := FND_MSG_PUB.count_msg;
5603       x_return_status := FND_API.G_RET_STS_ERROR;
5604     WHEN OTHERS THEN
5605       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5606       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
5607                           p_procedure_name => 'CREATE_UPDATE_STRUCT_VER',
5608                           p_error_text     => SUBSTRB(SQLERRM,1,240));
5609 END create_update_struct_ver;
5610 
5611 -- API name                      : IS_WP_SEPARATE_FROM_FN
5612 -- Type                          : PL/sql Public Function
5613 -- Pre-reqs                      : None
5614 -- Return Value                  : 'Y', 'N'
5615 -- Prameters
5616 -- p_project_id                       IN NUMBER
5617 --  History
5618 --
5619 --  21-AUG-02   MAansari             -Created
5620 --
5621 --  Notes: This api is returns 'TRUE' if WORKPLAN is separate from
5622 --         FINANCIAL structure
5623 
5624 FUNCTION IS_WP_SEPARATE_FROM_FN
5625 (
5626   p_project_id                       IN NUMBER
5627  ) RETURN VARCHAR2 IS
5628    l_return_value  VARCHAR2(1) := 'N';
5629 
5630 BEGIN
5631     --Call Huberts API to check whether a workplan structure is separate from financial
5632     IF PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED( p_project_id ) = 'N'
5633     THEN
5634         l_return_value := 'Y';
5635     END IF;
5636     RETURN ( NVL( l_return_value, 'N' ) );
5637 END IS_WP_SEPARATE_FROM_FN;
5638 
5639 -- API name                      : IS_WP_VERSIONING_ENABLED
5640 -- Type                          : PL/sql Public Function
5641 -- Pre-reqs                      : None
5642 -- Return Value                  : 'Y', 'N'
5643 -- Prameters
5644 -- p_project_id                       IN NUMBER
5645 --  History
5646 --
5647 --  22-AUG-02   MAansari             -Created
5648 --
5649 --  Notes: This api is returns 'Y' if WORKPLAN is separate from
5650 --         FINANCIAL structure
5651 
5652 FUNCTION IS_WP_VERSIONING_ENABLED
5653 (
5654   p_project_id                       IN NUMBER
5655  ) RETURN VARCHAR2 IS
5656    l_return_value  VARCHAR2(1) := 'Y';
5657 
5658 BEGIN
5659     --Call Andrews API to check whether a workplan versioning is enabled or not.
5660     l_return_value := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED( p_project_id );
5661     RETURN ( NVL( l_return_value, 'N' ) );
5662 
5663 END IS_WP_VERSIONING_ENABLED;
5664 
5665 -- API name                      : get_proj_dates_delta
5666 -- Type                          : PL/sql Public Function
5667 -- Pre-reqs                      : None
5668 -- Return Value                  : NUMBER
5669 -- Prameters
5670 -- p_project_id                       IN NUMBER
5671 --  History
5672 --
5673 --  22-AUG-02   MAansari             -Created
5674 --
5675 --  Notes:
5676 
5677      -- get original project start and completion dates
5678      -- determine the shift days (delta).
5679      -- delta = new project start date - nvl(old project start date,
5680      --             earlist task start date)
5681 
5682    --        old project   new project
5683    --  case  start date    start date    new start date     new end date
5684    --  ----   -----------   -----------  -----------------  -----------------
5685    --   A     not null      not null     old start date     old end date
5686    --                          + delta      + delta
5687    --   B-1   null      not null     old start date     old end date
5688    --         (old task has start date)    + delta         + delta
5689    --   B-2   null      not null     new proj start     new proj completion
5690    --         (old task has no start date) date            date
5691    --   C     not null       null   old start date         old end date
5692    --   D     null      null   old start date         old end date
5693 
5694 FUNCTION get_proj_dates_delta(
5695    x_orig_project_id  IN NUMBER
5696   ,x_start_date       IN DATE )
5697 RETURN NUMBER IS
5698 
5699         cursor c1 is
5700           select start_date
5701           from pa_projects
5702           where project_id = x_orig_project_id;
5703 
5704             -- use min(start_date) as pseudo original project start
5705          cursor c2 is
5706                select min(start_date) min_start
5707                  from pa_tasks
5708                 where project_id = x_orig_project_id;
5709 
5710          c2_rec  c2%rowtype;
5711          x_delta       NUMBER;
5712          x_orig_start_date DATE;
5713 begin
5714 
5715           open c1;
5716           fetch c1 into x_orig_start_date;
5717           close c1;
5718 
5719           if (x_start_date is null) then
5720                -- case C or D
5721                x_delta := 0;
5722           elsif (x_orig_start_date is not null) then
5723                -- case A
5724                x_delta := x_start_date - x_orig_start_date;
5725           else
5726                -- case B
5727                         open c2;
5728                         fetch c2 into c2_rec;
5729                         if c2%found then
5730                   -- case B-1:  x_delta is difference between
5731                   --            new project start date and the
5732                   --            start date of the earlist task
5733                   --            of old project
5734                   -- case B-2:  x_delta is NULL
5735                            x_delta := x_start_date - c2_rec.min_start;
5736                         end if;
5737                         close c2;
5738 
5739           end if;
5740             RETURN x_delta;
5741 end get_proj_dates_delta;
5742 
5743 -- API name                      : create_task_structure2
5744 -- Type                          : PL/sql Public procedure
5745 -- Pre-reqs                      : None
5746 -- Return Value                  : N/A
5747 -- Prameters
5748 -- p_project_id            IN NUMBER
5749 --  ,p_task_id              IN NUMBER
5750 --  ,p_parent_task_id       IN NUMBER
5751 --  ,p_task_number          IN VARCHAR2
5752 --  ,p_task_name            IN VARCHAR2
5753 --  ,p_task_description     IN VARCHAR2
5754 --  ,p_carrying_out_organization_id NUMBER
5755 -- x_msg_count             OUT NUMBER
5756 -- x_msg_data              OUT VARCHAR2
5757 -- x_return_status         OUT VARCHAR2
5758 --
5759 --  History
5760 --
5761 --  22-AUG-01   MAansari             -Created
5762 --
5763 --  Notes : THis is API is created to avoid the Implementation level error that is thrown
5764 --          in the forms if any parameter with default containg a remote package variable is referenced.
5765 
5766 PROCEDURE create_task_structure2(
5767    p_calling_module         IN VARCHAR2 := 'FORMS'
5768   ,p_project_id           IN NUMBER
5769   ,p_task_id              IN NUMBER
5770   ,p_parent_task_id       IN NUMBER
5771   ,p_ref_task_id          IN NUMBER   := -9999
5772   ,p_task_number          IN VARCHAR2
5773   ,p_task_name            IN VARCHAR2
5774   ,p_task_description     IN VARCHAR2
5775   ,p_carrying_out_organization_id IN NUMBER
5776   ,p_structure_type       IN VARCHAR2 := 'FINANCIAL'
5777   ,P_PM_SOURCE_reference                IN VARCHAR2
5778   ,P_PM_SOURCE_code                     IN VARCHAR2
5779   ,p_task_manager_id                  IN NUMBER
5780   ,p_location_id                      IN NUMBER
5781   ,p_financial_task_flag              IN VARCHAR2 := 'Y'   --bug 3301192
5782   ,x_task_version_id                    OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5783   ,x_task_id                            OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5784   ,x_msg_count            OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5785   ,x_msg_data             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5786   ,x_return_status        OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
5787 BEGIN
5788     create_task_structure(
5789        p_calling_module                => p_calling_module
5790       ,p_project_id                    => p_project_id
5791       ,p_task_id                       => p_task_id
5792       ,p_parent_task_id                => p_parent_task_id
5793       ,p_ref_task_id                   => p_ref_task_id
5794       ,p_task_number                   => p_task_number
5795       ,p_task_name                     => p_task_name
5796       ,p_task_description              => p_task_description
5797       ,p_carrying_out_organization_id  => p_carrying_out_organization_id
5798       ,p_manager_person_id             => p_task_manager_id
5799       ,p_location_id                   => p_location_id
5800       ,p_structure_type                => p_structure_type
5801       ,p_financial_task_flag           => p_financial_task_flag  --bug 3301192
5802       ,x_task_version_id               => x_task_version_id
5803       ,x_task_id                       => x_task_id
5804       ,x_msg_count                     => x_msg_count
5805       ,x_msg_data                      => x_msg_data
5806       ,x_return_status                 => x_return_status
5807     );
5808 END create_task_structure2;
5809 
5810 -- API name                      : update_task_structure2
5811 -- Type                          : PL/sql Public procedure
5812 -- Pre-reqs                      : None
5813 -- Return Value                  : N/A
5814 -- Prameters
5815 --   p_calling_module                   IN VARCHAR2
5816 --  ,p_task_id                          IN NUMBER
5817 --  ,p_task_number                      IN VARCHAR2
5818 --  ,p_task_name                        IN VARCHAR2
5819 --  ,p_task_description                 IN VARCHAR2
5820 --  ,p_carrying_out_organization_id     IN NUMBER
5821 --  ,p_task_manager_id                  IN NUMBER
5822 --  ,p_pm_product_code                  IN VARCHAR2
5823 --  ,p_pm_task_reference                IN VARCHAR2
5824 --  ,p_record_version_number           IN NUMBER
5825 --  ,x_msg_count                        OUT NUMBER
5826 --  ,x_msg_data                         OUT VARCHAR2
5827 --  ,x_return_status                    OUT VARCHAR2--
5828 --  History
5829 --
5830 --  22-AUG-02   MAansari             -Created
5831 --
5832 --  Notes : THis is API is created to avoid the Implementation level error that is thrown
5833 --          in the forms if any parameter with default containg a remote package variable is referenced.
5834 
5835 PROCEDURE update_task_structure2
5836 (
5837    p_calling_module                   IN VARCHAR2 := 'FORMS'
5838   ,p_ref_task_id                      IN NUMBER
5839   ,p_project_id                       IN NUMBER
5840   ,p_task_id                          IN NUMBER
5841   ,p_task_number                      IN VARCHAR2
5842   ,p_task_name                        IN VARCHAR2
5843   ,p_task_description                 IN VARCHAR2
5844   ,p_carrying_out_organization_id     IN NUMBER
5845   ,p_structure_type                   IN VARCHAR2 := 'FINANCIAL'
5846   ,p_task_manager_id                  IN NUMBER
5847   ,p_pm_product_code                  IN VARCHAR2
5848   ,p_pm_task_reference                IN VARCHAR2
5849   ,p_location_id                      IN NUMBER
5850   ,x_msg_count                        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5851   ,x_msg_data                         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5852   ,x_return_status                    OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
5853 BEGIN
5854 
5855     update_task_structure(
5856        p_calling_module                => p_calling_module
5857       ,p_ref_task_id                   => p_ref_task_id
5858       ,p_project_id                    => p_project_id
5859       ,p_task_id                       => p_task_id
5860       ,p_task_number                   => p_task_number
5861       ,p_task_name                     => p_task_name
5862       ,p_task_description              => p_task_description
5863       ,p_carrying_out_organization_id  => p_carrying_out_organization_id
5864       ,p_structure_type                => p_structure_type
5865       ,p_task_manager_id               => p_task_manager_id
5866       ,p_pm_product_code               => p_pm_product_code
5867       ,p_pm_task_reference             => p_pm_task_reference
5868       ,p_location_id                   => p_location_id
5869       ,x_msg_count                     => x_msg_count
5870       ,x_msg_data                      => x_msg_data
5871       ,x_return_status                 => x_return_status
5872     );
5873 
5874 END update_task_structure2;
5875 
5876 -- API name                      : get_struc_task_ver_ids
5877 -- Type                          : PL/sql Public Function
5878 -- Pre-reqs                      : None
5879 -- Return Value                  : N/A
5880 -- Prameters
5881 -- p_project_id                       IN NUMBER
5882 --  History
5883 --
5884 --  21-AUG-02   MAansari             -Created
5885 --
5886 --  Notes: This api returns task_version_id and parent_structure_version_id for the tasks
5887 --         displayed in Forms.
5888 
5889 PROCEDURE get_struc_task_ver_ids
5890   (
5891     p_project_id                       IN NUMBER
5892     ,p_task_id                          IN NUMBER
5893     ,x_task_version_id                  OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5894     ,x_parent_struc_version_id          OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5895    ) IS
5896 
5897      CURSOR cur_proj_elems( c_parent_struc_ver_id NUMBER )
5898      IS
5899        SELECT element_version_id, parent_structure_version_id
5900          FROM pa_proj_element_versions
5901         WHERE project_id = p_project_id
5902           AND proj_element_id = p_task_id
5903           AND parent_structure_version_id = c_parent_struc_ver_id
5904           AND object_type = 'PA_TASKS';
5905 
5906       CURSOR cur_pa_work_ver
5907       IS
5908          SELECT element_version_id
5909            FROM pa_proj_elem_ver_structure
5910           WHERE project_id = p_project_id
5911             AND status_code = 'STRUCTURE_WORKING';
5912 
5913       l_structure_version_id NUMBER;
5914   BEGIN
5915       l_structure_version_id := PA_PROJ_ELEMENTS_UTILS.latest_published_ver_id( p_project_id,'FINANCIAL' );
5916 
5917       IF l_structure_version_id IS NULL OR l_structure_version_id = -1
5918       THEN
5919           OPEN cur_pa_work_ver;
5920           FETCH cur_pa_work_ver INTO l_structure_version_id;
5921           CLOSE cur_pa_work_ver;
5922       END IF;
5923 
5924       IF p_task_id IS NOT NULL
5925       THEN
5926        OPEN cur_proj_elems( l_structure_version_id );
5927        FETCH cur_proj_elems INTO x_task_version_id, x_parent_struc_version_id;
5928        CLOSE cur_proj_elems;
5929       ELSE
5930          IF l_structure_version_id <> -1 THEN
5931             x_parent_struc_version_id := l_structure_version_id;
5932          END IF;
5933       END IF;
5934   END get_struc_task_ver_ids;
5935 
5936 -- API name                      : WP_STR_EXISTS
5937 -- Type                          : PL/sql Public Function
5938 -- Pre-reqs                      : None
5939 -- Return Value                  : 'Y', 'N'
5940 -- Prameters
5941 -- p_project_id                       IN NUMBER
5942 --  History
5943 --
5944 --  21-AUG-02   MAansari             -Created
5945 --
5946 --  Notes: This api is returns 'TRUE' if WORKPLAN str exists
5947 
5948 FUNCTION WP_STR_EXISTS
5949 (
5950   p_project_id                       IN NUMBER
5951  ) RETURN VARCHAR2 IS
5952    l_return_value  VARCHAR2(1) := 'N';
5953    l_dummy_char  VARCHAR2(1) := 'N';
5954 
5955   CURSOR cur_pa_proj
5956   IS
5957 /*    SELECT proj_element_id
5958       FROM pa_proj_elements
5959      WHERE project_id = p_project_id
5960        AND object_type = 'PA_STRUCTURES';
5961 */
5962     SELECT 'x'
5963       FROM pa_proj_elements ppe, pa_proj_structure_types ppst
5964      WHERE ppe.project_id = p_project_id
5965        AND ppe.object_type = 'PA_STRUCTURES'
5966        AND ppe.proj_element_id = ppst.proj_element_id
5967        AND ppst.structure_type_id = 1;  --'WORKPLAN'
5968 
5969 
5970 BEGIN
5971     --Call Huberts API to check whether a workplan structure is separate from financial
5972 
5973  /*   FOR cur_pa_proj_rec in cur_pa_proj LOOP
5974         l_return_value := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(
5975                           cur_pa_proj_rec.proj_element_id, 'WORKPLAN' );
5976         IF NVL( l_return_value, 'N' ) = 'Y'
5977         THEN
5978             Exit;
5979         END IF;
5980     END LOOP;
5981 */
5982     open cur_pa_proj;
5983     fetch cur_pa_proj INTO l_dummy_char;
5984     IF cur_pa_proj%FOUND
5985     THEN
5986         l_return_value  := 'Y';
5987     ELSE
5988         l_return_value  := 'N';
5989     END IF;
5990     CLOSE cur_pa_proj;
5991 
5992     RETURN ( NVL( l_return_value, 'N' ) );
5993 
5994 END WP_STR_EXISTS;
5995 
5996 FUNCTION DATE_SYNC_UP_METHOD
5997 (
5998   p_project_id                       IN NUMBER
5999  ) RETURN VARCHAR2 IS
6000   CURSOR cur_pa_proj_elems
6001   IS
6002     SELECT ppe.proj_element_id
6003       FROM pa_proj_elements ppe, pa_proj_structure_types ppst
6004      WHERE ppe.project_id = p_project_id
6005        AND ppe.object_type = 'PA_STRUCTURES'
6006        AND ppe.proj_element_id = ppst.proj_element_id
6007        AND ppst.structure_type_id = 1;  --'WORKPLAN'
6008 
6009     l_proj_element_id  NUMBER;
6010   l_return_value   VARCHAR2(1);
6011 
6012 BEGIN
6013 
6014     OPEN cur_pa_proj_elems;
6015     FETCH cur_pa_proj_elems INTO l_proj_element_id;
6016     CLOSE cur_pa_proj_elems;
6017 
6018     l_return_value := PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_DATE_SYNC_ENABLED( l_proj_element_id );
6019     RETURN l_return_value;
6020 END DATE_SYNC_UP_METHOD;
6021 
6022 PROCEDURE update_trans_dates(
6023    p_project_id                       IN  NUMBER
6024   ,x_msg_count                        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6025   ,x_msg_data                         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6026   ,x_return_status                    OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
6027 BEGIN
6028 
6029     x_return_status := 'S';
6030     PA_PROJECT_DATES_PUB.COPY_PROJECT_DATES
6031   (
6032      p_project_id                    => p_project_id
6033     ,x_return_status                 => x_return_status
6034     ,x_msg_count                     => x_msg_count
6035     ,x_msg_data                      => x_msg_data
6036   );
6037 
6038 END update_trans_dates;
6039 
6040 
6041 PROCEDURE update_wp_calendar(
6042     p_project_id                      IN  NUMBER
6043    ,p_calendar_id                     IN  NUMBER
6044    ,x_return_status                   OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6045    ,x_msg_count                       OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6046    ,x_msg_data                        OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6047   )
6048 IS
6049 BEGIN
6050   PA_PROJECT_STRUCTURE_PVT1.update_wp_calendar(
6051             p_project_id => p_project_id
6052            ,p_calendar_id => p_calendar_id
6053            ,x_return_status => x_return_status
6054            ,x_msg_count => x_msg_count
6055            ,x_msg_data => x_msg_data
6056           );
6057 END update_wp_calendar;
6058 
6059 PROCEDURE create_tasks_versions_only(
6060    p_calling_module       IN VARCHAR2 := 'FORMS'
6061   ,p_structure_type       IN VARCHAR2 := 'FINANCIAL'
6062   ,p_project_id           IN NUMBER
6063   ,p_structure_version_id IN NUMBER
6064   ,p_pm_product_code      IN VARCHAR2 := 'JUNK_CHARS'
6065   ,p_tasks_in              IN pa_project_pub.task_in_tbl_type
6066   ,x_msg_count            OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6067   ,x_msg_data             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6068   ,x_return_status        OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
6069 
6070 
6071   v_first_index                NUMBER;
6072   i                            NUMBER;
6073   v_parent_task_id             NUMBER;
6074   l_return_status          VARCHAR2(1);
6075   l_msg_count              NUMBER;
6076   l_msg_data               VARCHAR2(2000);
6077   v_ref_task_id            NUMBER;
6078   l_task_version_id        NUMBER;
6079   l_task_id                NUMBER;
6080   --Added by rtarway for BUG 3990873
6081   l_pa_task_id             NUMBER;
6082  --Added by rbruno bug 9544348
6083   l_actual_start_date      DATE;
6084   l_actual_finish_date     DATE;
6085 
6086   CURSOR cur_get_existing_task_id (c_project_id pa_projects_all.project_id%TYPE,
6087                             c_pm_source_reference pa_proj_elements.pm_source_reference%TYPE) IS
6088     SELECT proj_element_id
6089     FROM   pa_proj_elements pelem
6090     WHERE  project_id  = c_project_id
6091     AND    pm_source_reference = c_pm_source_reference
6092     AND    exists(select 1
6093                      from pa_proj_structure_types pstype, pa_structure_types types
6094                      where pstype.proj_element_id = pelem.parent_structure_id
6095                      and pstype.structure_type_id = types.structure_type_id
6096                      and types.structure_type = p_structure_type);
6097   --End Added by rtarway for BUG 3990873
6098 BEGIN
6099 
6100 i := p_tasks_in.first;
6101 v_first_index := i;
6102 
6103 IF p_tasks_in.exists(i)
6104 THEN
6105      WHILE i IS NOT NULL LOOP
6106         --Added by rtarway for BUG 4320731
6107     l_pa_task_id := NULL;
6108         --Commented by rtarway , chnaged If condition, BUG 3990873
6109         /*IF p_tasks_in(i).pa_task_id IS NOT NULL AND
6110            p_tasks_in(i).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6111         THEN*/
6112 
6113           --Begin add by rtarway, for BUG 3990873
6114           if ( p_tasks_in(i).pa_task_id is null or p_tasks_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
6115           then
6116                if (p_tasks_in(i).pm_task_reference is not null and p_tasks_in(i).pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
6117                then
6118                     --Cursor is deliberately used here, because we dont want to populate message in global error stack, in case new tasks
6119                     --are being added. At many places in update_task flow, error is raised based on fnd_msg_pub.count > 0
6120                     --If NO_DATA_FOUND occurs for this cursor, it will pass without error.
6121                     OPEN  cur_get_existing_task_id(p_project_id,p_tasks_in(i).pm_task_reference);
6122                     FETCH cur_get_existing_task_id into l_pa_task_id;
6123             --Added by rtarway for BUG 4320731
6124             IF ( cur_get_existing_task_id%NOTFOUND ) THEN
6125                l_pa_task_id := NULL;
6126             END IF;
6127                     CLOSE cur_get_existing_task_id;
6128                end if;
6129           else
6130                l_pa_task_id := p_tasks_in(i).pa_task_id;
6131           end if;
6132            IF l_pa_task_id IS NOT NULL
6133            then
6134           --end add by rtarway, for BUG 3990873
6135             IF (p_tasks_in(i).pa_parent_task_id IS NOT NULL
6136                 AND p_tasks_in(i).pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
6137             THEN
6138                 v_parent_task_id := p_tasks_in(i).pa_parent_task_id;
6139             ELSIF (p_tasks_in(i).pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6140                 AND p_tasks_in(i).pm_parent_task_reference IS NOT NULL)
6141             THEN
6142                 --convert pm_parent_task_reference to parent_task_id.
6143                 --All the parent tasks are created first then child tasks are created. See TRM for AMG load_task api.
6144 
6145 -- Bug 3601700 changed function call from  PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref
6146 -- to PA_PROJECT_PVT.Convert_pm_taskref_to_id_all to retrieve task id for task reference
6147 -- because PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref may return financial task id
6148 -- in case of SHARED structure
6149 -- new api call takes structure type as parameter, so it will return task id for the passed structure type only */
6150               /*   PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref(
6151                     p_pm_parent_task_reference      =>  p_tasks_in(i).pm_parent_task_reference
6152                    ,p_project_id                    =>  p_project_id
6153                    ,x_parent_task_id                =>  v_parent_task_id
6154                    ,x_return_status                 =>  l_return_status
6155                  ); */
6156 
6157            PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
6158                     p_pa_project_id      => p_project_id
6159                   , p_structure_type    => 'WORKPLAN'
6160                   , p_pm_task_reference  => p_tasks_in(i).pm_parent_task_reference
6161                   , p_out_task_id        => v_parent_task_id
6162                   , p_return_status      => l_return_status );
6163 
6164         /*IF l_return_status <> FND_API.G_RET_STS_SUCCESS
6165                 THEN
6166                    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6167                    THEN
6168                        pa_interface_utils_pub.map_new_amg_msg
6169                           ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
6170                            ,p_msg_attribute    => 'CHANGE'
6171                            ,p_resize_flag      => 'N'
6172                            ,p_msg_context      => 'TASK'
6173                            ,p_attribute1       => l_amg_segment1
6174                            ,p_attribute2       => l_amg_task_number
6175                            ,p_attribute3       => ''
6176                            ,p_attribute4       => ''
6177                            ,p_attribute5       => '');
6178                     END IF;
6179                     RAISE  FND_API.G_EXC_ERROR;
6180                 END IF;
6181                 */
6182             ELSE
6183                 v_parent_task_id := null;
6184             END IF;
6185 
6186            --get the previous task
6187            IF i = v_first_index
6188            THEN
6189                v_ref_task_id := null;
6190            ELSE
6191                --v_ref_task_id := p_tasks_in(i-1).pa_task_id;
6192                --Added by rtarway for BUG 3990873
6193                if ( p_tasks_in(i-1).pa_task_id is not null
6194                     and p_tasks_in(i-1).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
6195                then
6196                     v_ref_task_id := p_tasks_in(i-1).pa_task_id;
6197                else
6198                      if ( p_tasks_in(i-1).pm_task_reference is not null
6199                           and p_tasks_in(i-1).pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
6200                      then
6201                          --get the task id from reference
6202                          --Cursor is deliberately used here, because we dont want to populate message in global error stack, in case new tasks
6203                          --are being added. At many places in update_task flow, error is raised based on fnd_msg_pub.count > 0
6204                          --If NO_DATA_FOUND occurs for this cursor, it will pass without error.
6205                           OPEN  cur_get_existing_task_id(p_project_id,p_tasks_in(i-1).pm_task_reference);
6206                           FETCH cur_get_existing_task_id into v_ref_task_id;
6207                           CLOSE cur_get_existing_task_id;
6208                      end if;
6209                end if;
6210            END IF;
6211 
6212 
6213       ---Added by rbruno bug 9544348 begin
6214        l_actual_start_date := null;
6215        l_actual_finish_date := null;
6216 
6217 
6218        IF p_tasks_in(i).actual_start_date IS NULL OR
6219           p_tasks_in(i).actual_start_date =
6220             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
6221           l_actual_start_date := NULL;
6222        ELSE
6223           l_actual_start_date := p_tasks_in(i).actual_start_date;
6224        END IF;
6225 
6226        IF p_tasks_in(i).actual_finish_date IS NULL OR
6227           p_tasks_in(i).actual_finish_date =
6228             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
6229           l_actual_finish_date := NULL;
6230        ELSE
6231           l_actual_finish_date := p_tasks_in(i).actual_finish_date;
6232        END IF;
6233 
6234      ---Added by rbruno bug 9544348 end
6235 
6236             PA_PROJ_TASK_STRUC_PUB.CREATE_TASK_STRUCTURE(
6237                          p_project_id                   => p_project_id
6238 --                        ,p_task_id                      => p_tasks_in(i).pa_task_id, rtarway, BUG 3990873
6239                         ,p_task_id                      => l_pa_task_id
6240                         ,p_parent_task_id               => v_parent_task_id
6241                         ,p_ref_task_id                  => v_ref_task_id
6242                         ,p_task_number                  => p_tasks_in(i).pa_task_number
6243                         ,p_task_name                    => p_tasks_in(i).task_name
6244                         ,p_task_description             => p_tasks_in(i).task_description
6245                         ,p_carrying_out_organization_id => p_tasks_in(i).carrying_out_organization_id
6246                         ,p_calling_module               => 'AMG'
6247                         ,p_structure_type               => p_structure_type
6248                         ,p_OBLIGATION_START_DATE        => p_tasks_in(i).OBLIGATION_START_DATE
6249                         ,p_OBLIGATION_FINISH_DATE       => p_tasks_in(i).OBLIGATION_FINISH_DATE
6250                         ,p_ESTIMATED_START_DATE         => p_tasks_in(i).ESTIMATED_START_DATE
6251                         ,p_ESTIMATED_FINISH_DATE        => p_tasks_in(i).ESTIMATED_FINISH_DATE
6252                         ,p_BASELINE_START_DATE          => p_tasks_in(i).BASELINE_START_DATE
6253                         ,p_BASELINE_FINISH_DATE         => p_tasks_in(i).BASELINE_FINISH_DATE
6254                         ,p_CLOSED_DATE                  => p_tasks_in(i).CLOSED_DATE
6255                         ,p_WQ_UOM_CODE                  => p_tasks_in(i).WQ_UOM_CODE
6256                         ,p_WQ_ITEM_CODE                 => p_tasks_in(i).WQ_ITEM_CODE
6257                         ,p_STATUS_CODE                  => p_tasks_in(i).STATUS_CODE
6258                         ,p_WF_STATUS_CODE               => p_tasks_in(i).WF_STATUS_CODE
6259                         ,p_PM_SOURCE_CODE               => p_pm_product_code        --bug 2665656
6260                         ,p_PRIORITY_CODE                => p_tasks_in(i).PRIORITY_CODE
6261                         ,p_MILESTONE_FLAG               => p_tasks_in(i).MILESTONE_FLAG
6262                         ,p_CRITICAL_FLAG                => p_tasks_in(i).CRITICAL_FLAG
6263                         ,p_INC_PROJ_PROGRESS_FLAG       => p_tasks_in(i).INC_PROJ_PROGRESS_FLAG
6264                         ,p_LINK_TASK_FLAG               => p_tasks_in(i).LINK_TASK_FLAG
6265                         ,p_CALENDAR_ID                  => p_tasks_in(i).CALENDAR_ID
6266                         ,p_PLANNED_EFFORT               => p_tasks_in(i).PLANNED_EFFORT
6267                         ,p_DURATION                     => p_tasks_in(i).DURATION
6268                         ,p_PLANNED_WORK_QUANTITY        => p_tasks_in(i).PLANNED_WORK_QUANTITY
6269                         ,p_TASK_TYPE                    => p_tasks_in(i).TASK_TYPE
6270                         ,p_actual_start_date            => l_actual_start_date --bug 9544348
6271                         ,p_actual_finish_date           => l_actual_finish_date --bug 9544348
6272                         ,p_early_start_date                   => p_tasks_in(i).early_start_date
6273                         ,p_early_finish_date                  => p_tasks_in(i).early_finish_date
6274                         ,p_late_start_date                    => p_tasks_in(i).late_start_date
6275                         ,p_late_finish_date                   => p_tasks_in(i).late_finish_date
6276                         ,p_scheduled_start_date               => p_tasks_in(i).scheduled_start_date
6277                         ,p_scheduled_finish_date              => p_tasks_in(i).scheduled_finish_date
6278                         ,P_PM_SOURCE_reference                => p_tasks_in(i).pm_task_reference
6279                         ,p_location_id                        => p_tasks_in(i).address_id
6280                         ,p_manager_person_id                  => p_tasks_in(i).task_manager_person_id
6281                         ,p_structure_version_id               => p_structure_version_id
6282                         ,p_create_task_version_only           => 'Y'    --we dont need to create tasks in pa_tasks or pa_proj_elements for the existing tasks.
6283                                                                         --All we need is just to create task versions under the new structure version.
6284                         ,p_financial_task_flag                => p_tasks_in(i).financial_task_flag --added by rmuthine, Bug 13420479
6285                         ,x_task_version_id                    => l_task_version_id
6286                         ,x_task_id                            => l_task_id
6287                         ,x_msg_count                    => x_msg_count
6288                         ,x_msg_data                     => x_msg_data
6289                         ,x_return_status                => x_return_status
6290                      );
6291         END IF;
6292         i := p_tasks_in.next(i);
6293      END LOOP;
6294 END IF;
6295 
6296 END create_tasks_versions_only;
6297 
6298 
6299 --The following API is added to re-calculate task weights to call PA_TASK_PUB1.CALC_TASK_WEIGHTS
6300 --The API is called from PA_PROJECT_PUB.create_project and PA_PROJECT_PUB.update_project
6301 
6302 PROCEDURE recalc_task_weightings(
6303    p_tasks_in             IN pa_project_pub.task_out_tbl_type
6304   ,p_task_version_id      IN NUMBER
6305   ,x_msg_count            OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6306   ,x_msg_data             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6307   ,x_return_status        OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
6308 
6309   CURSOR cur_pa_proj_elem_ver( c_task_ver_id  NUMBER )
6310   IS
6311     SELECT wbs_level
6312       FROM pa_proj_element_versions
6313     WHERE element_version_id = c_task_ver_id;
6314 
6315   i                    NUMBER;
6316   j                    NUMBER := 1;
6317 
6318   l_tasks_ver_ids      PA_NUM_1000_NUM := PA_NUM_1000_NUM();
6319   l_outline_level      PA_NUM_1000_NUM := PA_NUM_1000_NUM();
6320   l_total_top_tasks    NUMBER := 0;
6321   l_wbs_level          NUMBER;
6322 
6323   l_msg_count          NUMBER;
6324   l_return_status      VARCHAR2(1);
6325   l_msg_data           VARCHAR2(2000);
6326   l_data               VARCHAR2(2000);
6327   l_msg_index_out      NUMBER;
6328   API_ERROR            EXCEPTION;
6329   l_recalculate_flag   VARCHAR2(1);
6330 
6331 BEGIN
6332 
6333 IF p_task_version_id IS NULL
6334 THEN
6335 
6336   i := p_tasks_in.first;
6337 
6338   IF p_tasks_in.exists(i)
6339   THEN
6340      WHILE i IS NOT NULL LOOP
6341         IF p_tasks_in(i).task_version_id IS NOT NULL AND
6342            p_tasks_in(i).task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6343         THEN
6344             l_tasks_ver_ids.extend;
6345             l_tasks_ver_ids(l_tasks_ver_ids.count) := p_tasks_in(i).task_version_id;
6346 
6347             OPEN cur_pa_proj_elem_ver( p_tasks_in(i).task_version_id );
6348             FETCH cur_pa_proj_elem_ver INTO l_wbs_level;
6349             CLOSE cur_pa_proj_elem_ver;
6350 
6351             IF l_wbs_level = 1
6352             THEN
6353                 l_total_top_tasks := l_total_top_tasks + 1;
6354             END IF;
6355 
6356             l_outline_level.extend;
6357             l_outline_level(l_outline_level.count) := l_wbs_level;
6358             l_recalculate_flag := 'Y';
6359         END IF;
6360         j := j + 1;
6361         IF NVL( l_recalculate_flag, 'N' ) = 'Y' AND j >= 1000
6362         THEN
6363             --To avoid no_data_found when this array is read in PA_TASK_PUB1.Cal_Task_weights
6364             l_outline_level.extend;
6365             l_outline_level(l_outline_level.count) := null;
6366 
6367 /*--bug 2856033
6368     PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
6369                        p_commit => FND_API.G_FALSE,
6370                        p_element_versions => l_tasks_ver_ids,
6371                        x_return_status => l_return_status,
6372                        x_msg_count => l_msg_count,
6373                        x_msg_data => l_msg_data);
6374 
6375      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6376        x_msg_count := FND_MSG_PUB.count_msg;
6377        if x_msg_count = 1 then
6378          pa_interface_utils_pub.get_messages
6379          (p_encoded        => FND_API.G_TRUE,
6380           p_msg_index      => 1,
6381           p_msg_count      => l_msg_count,
6382           p_msg_data       => l_msg_data,
6383           p_data           => l_data,
6384           p_msg_index_out  => l_msg_index_out);
6385           x_msg_data := l_data;
6386        end if;
6387        raise API_ERROR;
6388      end if;
6389 --bug 2856033
6390 */
6391 
6392             PA_TASK_PUB1.Calc_Task_Weights(
6393             p_element_versions => l_tasks_ver_ids
6394            ,p_outline_level    => l_outline_level
6395            ,p_top_sub_count    => l_total_top_tasks
6396            ,x_return_status    => l_return_status
6397            ,x_msg_count        => l_msg_count
6398            ,x_msg_data         => l_msg_data );
6399 
6400           if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6401              x_msg_count := FND_MSG_PUB.count_msg;
6402              x_return_status := l_return_status ;     --bug 3044915
6403             if x_msg_count = 1 then
6404                pa_interface_utils_pub.get_messages
6405                (p_encoded        => FND_API.G_TRUE,
6406                 p_msg_index      => 1,
6407                 p_msg_count      => l_msg_count,
6408                 p_msg_data       => l_msg_data,
6409                 p_data           => l_data,
6410                 p_msg_index_out  => l_msg_index_out);
6411                 x_msg_data := l_data;
6412             end if;
6413             raise API_ERROR;
6414          end if;
6415          l_tasks_ver_ids.DELETE;
6416          l_outline_level.DELETE;
6417          l_recalculate_flag := 'N';
6418          j := 1;
6419         END IF;
6420         i := p_tasks_in.next(i);
6421      END LOOP;
6422   END IF;
6423 
6424 ELSIF p_task_version_id IS NOT NULL
6425 THEN
6426     l_tasks_ver_ids.extend;
6427     l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
6428 
6429     OPEN cur_pa_proj_elem_ver( p_task_version_id );
6430     FETCH cur_pa_proj_elem_ver INTO l_wbs_level;
6431     CLOSE cur_pa_proj_elem_ver;
6432 
6433     IF l_wbs_level = 1
6434     THEN
6435        l_total_top_tasks := l_total_top_tasks + 1;
6436     END IF;
6437 
6438     l_outline_level.extend;
6439     l_outline_level(l_outline_level.count) := l_wbs_level;
6440     l_recalculate_flag := 'Y';
6441 
6442 END IF;
6443 
6444 IF NVL( l_recalculate_flag, 'N' ) = 'Y'
6445 THEN
6446 
6447     --To avoid no_data_found when this array is read in PA_TASK_PUB1.Cal_Task_weights
6448     l_outline_level.extend;
6449     l_outline_level(l_outline_level.count) := null;
6450 
6451 /*--bug 2856033
6452     PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
6453                        p_commit => FND_API.G_FALSE,
6454                        p_element_versions => l_tasks_ver_ids,
6455                        x_return_status => l_return_status,
6456                        x_msg_count => l_msg_count,
6457                        x_msg_data => l_msg_data);
6458 
6459      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6460        x_msg_count := FND_MSG_PUB.count_msg;
6461        if x_msg_count = 1 then
6462          pa_interface_utils_pub.get_messages
6463          (p_encoded        => FND_API.G_TRUE,
6464           p_msg_index      => 1,
6465           p_msg_count      => l_msg_count,
6466           p_msg_data       => l_msg_data,
6467           p_data           => l_data,
6468           p_msg_index_out  => l_msg_index_out);
6469           x_msg_data := l_data;
6470        end if;
6471        raise API_ERROR;
6472      end if;
6473 --bug 2856033
6474 */
6475 
6476 
6477   PA_TASK_PUB1.Calc_Task_Weights(
6478      p_element_versions => l_tasks_ver_ids
6479     ,p_outline_level    => l_outline_level
6480     ,p_top_sub_count    => l_total_top_tasks
6481     ,x_return_status    => l_return_status
6482     ,x_msg_count        => l_msg_count
6483     ,x_msg_data         => l_msg_data );
6484 
6485     if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6486       x_msg_count := FND_MSG_PUB.count_msg;
6487       x_return_status := l_return_status ;     --bug 3044915
6488       if x_msg_count = 1 then
6489         pa_interface_utils_pub.get_messages
6490         (p_encoded        => FND_API.G_TRUE,
6491          p_msg_index      => 1,
6492          p_msg_count      => l_msg_count,
6493          p_msg_data       => l_msg_data,
6494          p_data           => l_data,
6495          p_msg_index_out  => l_msg_index_out);
6496          x_msg_data := l_data;
6497       end if;
6498       raise API_ERROR;
6499     end if;
6500 END IF;
6501 x_return_status := FND_API.G_RET_STS_SUCCESS;        -- Bug 3044915
6502 END recalc_task_weightings;
6503 
6504   FUNCTION GET_MAX_LAST_UPD_DT_WRKNG_VER
6505   (  p_structure_version_id IN NUMBER
6506   ) return DATE
6507   IS
6508     --bug 3074706
6509     CURSOR c2 IS
6510       select project_id
6511         from pa_proj_element_versions
6512        where element_version_id = p_structure_version_id;
6513     l_project_id NUMBER;
6514 
6515     CURSOR c1 IS
6516        select MAX(a.last_update_date)
6517          from pa_proj_element_versions b,
6518               pa_proj_elem_ver_schedule a,
6519               pa_proj_elem_ver_structure c
6520         where p_structure_version_id = c.element_version_id
6521           and l_project_id  = c.project_id
6522           and c.status_code <> 'STRUCTURE_PUBLISHED'
6523           and b.parent_structure_version_id = c.element_version_id
6524           and b.project_id = c.project_id
6525           and a.element_version_id (+)= b.element_version_id
6526           and a.project_id (+) = b.project_id
6527           and a.proj_element_id (+) = b.proj_element_id;
6528 /*
6529     CURSOR c1 IS
6530       SELECT MAX(a.last_update_date)
6531         FROM pa_proj_element_versions b,
6532              pa_proj_elem_ver_schedule a,
6533              pa_proj_elem_ver_structure c
6534        WHERE a.element_version_id (+)= b.element_version_id
6535          AND a.project_id (+) = b.project_id
6536          AND a.proj_element_id (+) = b.proj_element_id
6537          AND b.parent_structure_version_id = c.element_version_id
6538          AND b.project_id = c.project_id
6539          AND c.status_code <> 'STRUCTURE_PUBLISHED'
6540          AND b.parent_structure_version_id = p_structure_version_id
6541     ;
6542 */
6543     --end bug 3074706
6544 
6545     l_date                 DATE;
6546     l_structure_version_id NUMBER;
6547   BEGIN
6548     --bug 3074706
6549     OPEN c2;
6550     FETCH c2 into l_project_id;
6551     CLOSE c2;
6552     --end bug 3074706
6553     OPEN c1;
6554     FETCH c1 into l_date;
6555     CLOSE c1;
6556     return l_date;
6557   END GET_MAX_LAST_UPD_DT_WRKNG_VER;
6558 
6559 -- Procedure            : copy_src_financial_version
6560 -- Type                 : PRIVATE
6561 -- Purpose              : Contains logic for copying the financial version from the source to the destination version
6562 -- Note                 :
6563 -- Assumptions          : All FLAGS and WORKPLAN record(s) have been populated in the global temporary table
6564 -- Parameters                    Type      Required  Description and Purpose
6565 -- ---------------------------  ------     --------  --------------------------------------------------------
6566 -- p_src_project_id             NUMBER        Y      The source project id
6567 -- p_dest_project_id            NUMBER        Y      The destination project id
6568 -- p_dest_fn_structure_id       NUMBER        Y      The destination project's financial structure id
6569 -- p_shared                     VARCHAR2      Y      Whether source/destination project is shared or not
6570 -- p_publish_person_id          NUMBER        Y      The person id required for publishing a version
6571 -- p_dest_template_flag         VARCHAR2      Y      Creating a template or a project
6572 PROCEDURE copy_src_financial_version(  p_api_version        IN  NUMBER      := 1.0
6573                                       ,p_commit             IN  VARCHAR2    := FND_API.G_FALSE
6574                                       ,p_init_msg_list      IN  VARCHAR2    := FND_API.G_TRUE
6575                                       ,p_validate_only      IN  VARCHAR2    := FND_API.G_FALSE
6576                                       ,p_validation_level   IN  VARCHAR2    := FND_API.G_VALID_LEVEL_FULL
6577                                       ,p_calling_module     IN  VARCHAR2    := 'SELF_SERVICE'
6578                                       ,p_debug_mode         IN  VARCHAR2    := 'N'
6579                                       ,p_src_project_id       IN NUMBER
6580                                       ,p_dest_project_id      IN NUMBER
6581                                       ,p_dest_fn_structure_id IN NUMBER
6582                                       ,p_shared               IN VARCHAR2
6583                                       ,p_dest_template_flag   IN VARCHAR2
6584                                       ,p_publish_person_id    IN NUMBER
6585                                       ,x_return_status  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6586                                       ,x_msg_count      OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6587                                       ,x_msg_data       OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6588                                      ) IS
6589 --This cursor fetches the workplan structure attributes
6590 CURSOR cur_get_wp_attr IS
6591 SELECT ppwa.WP_ENABLE_VERSION_FLAG
6592 FROM   pa_proj_workplan_attr   ppwa
6593       ,pa_proj_structure_types ppst
6594       ,pa_structure_types      pst
6595 WHERE  ppwa.project_id = p_src_project_id
6596 AND    ppwa.proj_element_id = ppst.proj_element_id
6597 AND    ppst.structure_type_id = pst.structure_type_id
6598 AND    pst.structure_type = 'WORKPLAN' ;
6599 
6600 --This cursor retrieves the LATEST PUBLISHED WP version from the source project
6601 CURSOR cur_get_src_fin_version_id IS
6602 SELECT ppev.element_version_id
6603 FROM   pa_proj_element_versions ppev,
6604        pa_proj_elem_ver_structure ppevs
6605 WHERE  ppev.project_id = p_src_project_id
6606 AND    ppev.object_type = 'PA_STRUCTURES'
6607 AND    ppev.element_version_id = ppevs.element_version_id
6608 AND    ppevs.project_id = p_src_project_id
6609 AND    ppevs.latest_eff_published_flag = 'Y';
6610 
6611 --This cursor retrieves the CURRENT WORKING WP version from the source project
6612 CURSOR cur_get_src_fin_version_id2 IS
6613 SELECT ppev.element_version_id
6614 FROM   pa_proj_element_versions ppev,
6615        pa_proj_elem_ver_structure ppevs
6616 WHERE  ppev.project_id = p_src_project_id
6617 AND    ppev.object_type = 'PA_STRUCTURES'
6618 AND    ppev.element_version_id = ppevs.element_version_id
6619 AND    ppevs.project_id = p_src_project_id
6620 AND    ppevs.current_working_flag = 'Y';
6621 
6622 --This cursor retrieves the version for the financial structure form the source project
6623 CURSOR cur_get_split_fin_ver IS
6624 SELECT ppev.element_version_id
6625 FROM   pa_proj_element_versions ppev,
6626        pa_proj_structure_types ppst,
6627        pa_structure_types pst
6628 WHERE  ppev.project_id = p_src_project_id
6629 AND    ppev.object_type = 'PA_STRUCTURES'
6630 AND    ppev.proj_element_id = ppst.proj_element_id
6631 AND    ppst.structure_type_id = pst.structure_type_id
6632 AND    pst.structure_type = 'FINANCIAL' ;
6633 
6634 --This cursor gets the schedule start date from the source project
6635 CURSOR cur_get_src_sch_st_date(c_project_id NUMBER, c_struc_ver_id NUMBER) IS
6636 SELECT scheduled_start_date
6637 FROM   pa_proj_elem_ver_schedule
6638 WHERE project_id = c_project_id
6639 AND   element_version_id = c_struc_ver_id;
6640 
6641 l_debug_mode                     VARCHAR2(1);
6642 l_debug_level2                   CONSTANT NUMBER := 2;
6643 l_debug_level3                   CONSTANT NUMBER := 3;
6644 l_debug_level4                   CONSTANT NUMBER := 4;
6645 l_debug_level5                   CONSTANT NUMBER := 5;
6646 
6647 l_src_fin_version_id     NUMBER(15);
6648 l_versioning_enabled     VARCHAR2(1);
6649 dest_latest_eff_pub_flag VARCHAR2(1);
6650 dest_current_flag        VARCHAR2(1);
6651 l_user_id               NUMBER := FND_GLOBAL.USER_ID;
6652 l_login_id              NUMBER := FND_GLOBAL.LOGIN_ID;
6653 BEGIN
6654 
6655      x_msg_count := 0;
6656      x_return_status := FND_API.G_RET_STS_SUCCESS;
6657      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
6658 
6659      IF (p_commit = FND_API.G_TRUE) THEN
6660         SAVEPOINT copy_src_fin_ver;
6661      END IF;
6662 
6663      IF p_init_msg_list = FND_API.G_TRUE THEN
6664           FND_MSG_PUB.initialize;
6665      END IF;
6666 
6667      IF l_debug_mode = 'Y' THEN
6668         PA_DEBUG.set_curr_function( p_function   => 'copy_src_financial_version',
6669                                     p_debug_mode => l_debug_mode );
6670      END IF;
6671 
6672      IF l_debug_mode = 'Y' THEN
6673         Pa_Debug.g_err_stage:= 'Printing Input parameters';
6674         Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
6675                                    l_debug_level3);
6676 
6677         Pa_Debug.WRITE(G_PKG_NAME,'p_src_project_id'||':'||p_src_project_id,
6678                                    l_debug_level3);
6679 
6680         Pa_Debug.WRITE(G_PKG_NAME,'p_dest_project_id'||':'||p_dest_project_id,
6681                                    l_debug_level3);
6682 
6683         Pa_Debug.WRITE(G_PKG_NAME,'p_dest_fn_structure_id'||':'||p_dest_fn_structure_id,
6684                                    l_debug_level3);
6685 
6686         Pa_Debug.WRITE(G_PKG_NAME,'p_shared'||':'||p_shared,
6687                                    l_debug_level3);
6688 
6689         Pa_Debug.WRITE(G_PKG_NAME,'p_publish_person_id'||':'||p_publish_person_id,
6690                                    l_debug_level3);
6691      END IF;
6692 
6693      IF l_debug_mode = 'Y' THEN
6694           Pa_Debug.g_err_stage:= 'Validating Input parameters';
6695           Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
6696                                      l_debug_level3);
6697      END IF;
6698 
6699      IF ( ( p_src_project_id       IS NULL OR p_src_project_id       = FND_API.G_MISS_NUM  ) AND
6700           ( p_dest_project_id      IS NULL OR p_dest_project_id      = FND_API.G_MISS_NUM  ) AND
6701           ( p_dest_fn_structure_id IS NULL OR p_dest_fn_structure_id = FND_API.G_MISS_NUM  ) AND
6702           ( p_shared               IS NULL OR p_shared               = FND_API.G_MISS_CHAR ) AND
6703           ( p_publish_person_id    IS NULL OR p_publish_person_id    = FND_API.G_MISS_NUM  )
6704         )
6705      THEN
6706            IF l_debug_mode = 'Y' THEN
6707                Pa_Debug.g_err_stage:= 'PA_PROJ_TASK_STRUC_PUB : copy_src_financial_version :
6708                p_src_project_id, p_dest_project_id, p_dest_fn_structure_id, p_shared, p_publish_person_id are NULL';
6709                Pa_Debug.WRITE(G_PKG_NAME, Pa_Debug.g_err_stage, l_debug_level3);
6710            END IF;
6711           RAISE Invalid_Arg_Exc_WP;
6712      END IF;
6713 
6714     IF 'Y' = p_shared THEN
6715         --Fetch the WP latest published, else the current working in the source project
6716         OPEN  cur_get_src_fin_version_id;
6717         FETCH cur_get_src_fin_version_id INTO l_src_fin_version_id;
6718         IF cur_get_src_fin_version_id%NOTFOUND THEN
6719             OPEN  cur_get_src_fin_version_id2;
6720             FETCH cur_get_src_fin_version_id2 INTO l_src_fin_version_id;
6721             CLOSE cur_get_src_fin_version_id2;
6722         END IF;
6723         CLOSE cur_get_src_fin_version_id;
6724     ELSE
6725         --Fetch the financial version from the source project
6726         OPEN  cur_get_split_fin_ver;
6727         FETCH cur_get_split_fin_ver INTO l_src_fin_version_id;
6728         CLOSE cur_get_split_fin_ver;
6729     END IF;
6730 
6731     IF l_debug_mode = 'Y' THEN
6732         Pa_Debug.WRITE(G_PKG_NAME,'Source financial version id : '||l_src_fin_version_id, l_debug_level3);
6733     END IF;
6734 
6735     --Copy entry into pa_proj_element_versions for the financial version in the source project
6736     INSERT INTO pa_proj_element_versions(
6737      ELEMENT_VERSION_ID
6738     ,PROJ_ELEMENT_ID
6739     ,OBJECT_TYPE
6740     ,PROJECT_ID
6741     ,PARENT_STRUCTURE_VERSION_ID
6742     ,DISPLAY_SEQUENCE
6743     ,WBS_LEVEL
6744     ,WBS_NUMBER
6745     ,CREATION_DATE
6746     ,CREATED_BY
6747     ,LAST_UPDATE_DATE
6748     ,LAST_UPDATED_BY
6749     ,LAST_UPDATE_LOGIN
6750     ,RECORD_VERSION_NUMBER
6751     ,attribute15          --This column stores the stucture version id in the src project, to be used to create relationships.
6752     ,ATTRIBUTE_CATEGORY
6753     ,ATTRIBUTE1
6754     ,ATTRIBUTE2
6755     ,ATTRIBUTE3
6756     ,ATTRIBUTE4
6757     ,ATTRIBUTE5
6758     ,ATTRIBUTE6
6759     ,ATTRIBUTE7
6760     ,ATTRIBUTE8
6761     ,ATTRIBUTE9
6762     ,ATTRIBUTE10
6763     ,ATTRIBUTE11
6764     ,ATTRIBUTE12
6765     ,ATTRIBUTE13
6766     ,ATTRIBUTE14
6767     ,TASK_UNPUB_VER_STATUS_CODE
6768     ,FINANCIAL_TASK_FLAG
6769     ,source_object_id
6770     ,source_object_type
6771     )
6772     SELECT
6773      pa_proj_element_versions_s.nextval
6774     ,p_dest_fn_structure_id --This would be the WP/FIN structure id in shared case and FIN structure id in split case
6775     ,ppev.object_type
6776     ,p_dest_project_id
6777     ,pa_proj_element_versions_s.nextval --nextval occuring twice in the same select returns the same value
6778     ,ppev.DISPLAY_SEQUENCE
6779     ,ppev.WBS_LEVEL
6780     ,ppev.WBS_NUMBER
6781     ,SYSDATE                    ------CREATION_DATE
6782     ,l_user_id                  ------CREATED_BY
6783     ,SYSDATE                    ------LAST_UPDATE_DATE
6784     ,l_user_id                  ------LAST_UPDATED_BY
6785     ,l_login_id                 ------LAST_UPDATE_LOGIN
6786     ,ppev.RECORD_VERSION_NUMBER ------RECORD_VERSION_NUMBER
6787     ,ppev.element_version_id
6788     ,ppev.ATTRIBUTE_CATEGORY
6789     ,ppev.ATTRIBUTE1
6790     ,ppev.ATTRIBUTE2
6791     ,ppev.ATTRIBUTE3
6792     ,ppev.ATTRIBUTE4
6793     ,ppev.ATTRIBUTE5
6794     ,ppev.ATTRIBUTE6
6795     ,ppev.ATTRIBUTE7
6796     ,ppev.ATTRIBUTE8
6797     ,ppev.ATTRIBUTE9
6798     ,ppev.ATTRIBUTE10
6799     ,ppev.ATTRIBUTE11
6800     ,ppev.ATTRIBUTE12
6801     ,ppev.ATTRIBUTE13
6802     ,ppev.ATTRIBUTE14
6803     ,ppev.TASK_UNPUB_VER_STATUS_CODE
6804     ,ppev.FINANCIAL_TASK_FLAG
6805     ,p_dest_project_id
6806     ,'PA_PROJECTS'
6807     FROM pa_proj_element_versions ppev
6808     WHERE ppev.project_id = p_src_project_id
6809     AND   ppev.element_version_id = l_src_fin_version_id ;
6810 
6811     OPEN  cur_get_wp_attr;
6812     FETCH cur_get_wp_attr INTO l_versioning_enabled;
6813     CLOSE cur_get_wp_attr;
6814 
6815     --IF split and financial enabled THEN
6816     IF 'N' = p_shared THEN
6817           IF p_dest_template_flag = 'Y' THEN
6818                dest_latest_eff_pub_flag := 'N';
6819                dest_current_flag := 'N';
6820           ELSE
6821                dest_latest_eff_pub_flag := 'Y';
6822                dest_current_flag := 'S';
6823           END IF;
6824     ELSE
6825     --IF shared AND no wp ver is selected AND fin tasks flag is checked
6826           --IF creating a project AND versioning is disabled THEN
6827           IF 'N' = p_dest_template_flag AND 'N' = l_versioning_enabled THEN
6828                dest_latest_eff_pub_flag := 'Y';
6829                dest_current_flag        := 'Y';
6830           ELSE
6831           --IF creating a template OR creating a project with versioning enabled
6832                dest_latest_eff_pub_flag := 'N';
6833                dest_current_flag        := 'N';
6834           END IF;
6835     END IF;
6836 
6837     IF l_debug_mode = 'Y' THEN
6838         Pa_Debug.WRITE(G_PKG_NAME,'dest_latest_eff_pub_flag : '||dest_latest_eff_pub_flag, l_debug_level3);
6839         Pa_Debug.WRITE(G_PKG_NAME,'dest_current_flag : '||dest_current_flag, l_debug_level3);
6840     END IF;
6841 
6842     --Copy entry into pa_proj_elem_ver_structure for financial version in the source project
6843     INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
6844      PEV_STRUCTURE_ID
6845     ,ELEMENT_VERSION_ID
6846     ,VERSION_NUMBER
6847     ,NAME
6848     ,PROJECT_ID
6849     ,PROJ_ELEMENT_ID
6850     ,DESCRIPTION
6851     ,EFFECTIVE_DATE
6852     ,PUBLISHED_DATE
6853     ,PUBLISHED_BY_PERSON_ID
6854     ,CURRENT_BASELINE_DATE
6855     ,CURRENT_FLAG
6856     ,CURRENT_BASELINE_PERSON_ID
6857     ,ORIGINAL_BASELINE_DATE
6858     ,ORIGINAL_FLAG
6859     ,ORIGINAL_BASELINE_PERSON_ID
6860     ,LOCK_STATUS_CODE
6861     ,LOCKED_BY_PERSON_ID
6862     ,LOCKED_DATE
6863     ,STATUS_CODE
6864     ,WF_STATUS_CODE
6865     ,LATEST_EFF_PUBLISHED_FLAG
6866     ,RECORD_VERSION_NUMBER
6867     ,WBS_RECORD_VERSION_NUMBER
6868     ,CREATION_DATE
6869     ,CREATED_BY
6870     ,LAST_UPDATE_DATE
6871     ,LAST_UPDATED_BY
6872     ,LAST_UPDATE_LOGIN
6873     ,change_reason_code
6874     ,PROCESS_UPDATE_WBS_FLAG
6875     ,current_working_flag
6876     ,source_object_id
6877     ,source_object_type
6878     )
6879     SELECT
6880      pa_proj_elem_ver_structure_s.nextval
6881     ,ppev.element_version_id
6882     ,ppevs.version_number
6883     ,ppevs.name
6884     ,p_dest_project_id
6885     ,p_dest_fn_structure_id  --This would be WP/FIN structure id in shared case and FIN structure id in split case
6886     ,ppevs.DESCRIPTION
6887     ,ppevs.EFFECTIVE_DATE
6888     ,decode(dest_latest_eff_pub_flag,'Y',sysdate,to_date(null) )                                       --PUBLISHED_DATE
6889     ,decode(dest_latest_eff_pub_flag,'Y',p_publish_person_id,null )                                    --PUBLISHED_BY_PERSON_ID
6890     ,decode(dest_current_flag,'S',ppevs.current_baseline_date,
6891             decode(dest_current_flag,'Y',sysdate,to_date(null) ) )                                     --CURRENT_BASELINE_DATE
6892     ,decode(dest_current_flag,'S',ppevs.current_flag,dest_current_flag)                                --CURRENT_FLAG
6893     ,decode(dest_current_flag,'S',ppevs.current_baseline_person_id,
6894             decode(dest_current_flag,'Y',p_publish_person_id,null) )                                   --CURRENT_BASELINE_PERSON_ID
6895     ,ppevs.original_baseline_date                                                                      --ORIGINAL_BASELINE_DATE
6896     ,ppevs.original_flag                                                                               --ORIGINAL_FLAG
6897     ,ppevs.original_baseline_person_id                                                                 --ORIGINAL_BASELINE_PERSON_ID
6898     ,'UNLOCKED'
6899     ,null
6900     ,null
6901     ,decode(dest_latest_eff_pub_flag,'Y','STRUCTURE_PUBLISHED','STRUCTURE_WORKING')                    --STATUS_CODE
6902     ,ppevs.WF_STATUS_CODE
6903     ,dest_latest_eff_pub_flag                                                                          --LATEST_EFF_PUBLISHED_FLAG
6904     ,ppevs.RECORD_VERSION_NUMBER
6905     ,ppevs.WBS_RECORD_VERSION_NUMBER
6906     ,SYSDATE
6907     ,l_user_id
6908     ,SYSDATE
6909     ,l_user_id
6910     ,l_login_id
6911     ,ppevs.change_reason_code
6912     ,ppevs.process_update_wbs_flag
6913     ,decode(p_shared,'N',ppevs.current_working_flag,'Y')                                              --CURRENT_WROKING_FLAG
6914             --If SPLIT and fin enabled case, copy cw from source, else populate it as Y
6915     ,p_dest_project_id
6916     ,'PA_PROJECTS'
6917     FROM pa_proj_elem_ver_structure ppevs,
6918          pa_proj_element_versions ppev
6919     WHERE ppevs.project_id = p_src_project_id
6920     AND   ppevs.element_version_id = l_src_fin_version_id
6921     AND   ppev.attribute15 = ppevs.element_version_id
6922     AND   ppev.project_id = p_dest_project_id  ;
6923 
6924     IF (p_commit = FND_API.G_TRUE) THEN
6925       COMMIT;
6926     END IF;
6927 
6928 EXCEPTION
6929 
6930 WHEN Invalid_Arg_Exc_WP THEN
6931      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
6932      x_msg_count     := 1;
6933      x_msg_data      := ' PA_PROJ_TASK_STRUC_PUB : copy_src_financial_version : NULL parameters passed';
6934 
6935      IF p_commit = FND_API.G_TRUE THEN
6936         ROLLBACK TO copy_src_fin_ver;
6937      END IF;
6938 
6939      Fnd_Msg_Pub.add_exc_msg
6940                (  p_pkg_name        => 'PA_PROJ_TASK_STRUC_PUB'
6941                 , p_procedure_name  => 'copy_src_financial_version'
6942                 , p_error_text      => x_msg_data);
6943 
6944      IF l_debug_mode = 'Y' THEN
6945           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
6946           Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
6947                               l_debug_level5);
6948           Pa_Debug.reset_curr_function;
6949      END IF;
6950      RAISE;
6951 
6952 WHEN OTHERS THEN
6953      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
6954      x_msg_count     := 1;
6955      x_msg_data      := SQLERRM;
6956 
6957      IF p_commit = FND_API.G_TRUE THEN
6958         ROLLBACK TO copy_src_fin_ver;
6959      END IF;
6960 
6961      Fnd_Msg_Pub.add_exc_msg
6962        (  p_pkg_name         => 'PA_PROJ_TASK_STRUC_PUB'
6963         , p_procedure_name  => 'copy_src_financial_version'
6964         , p_error_text      => x_msg_data);
6965 
6966      IF l_debug_mode = 'Y' THEN
6967           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
6968           Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
6969                               l_debug_level5);
6970           Pa_Debug.reset_curr_function;
6971      END IF;
6972      RAISE;
6973 
6974 END copy_src_financial_version;
6975 
6976 
6977 
6978 
6979 
6980 -- Procedure            : copy_src_financial_ver_tasks
6981 -- Type                 : PRIVATE
6982 -- Purpose              : Contains logic for copying the tasks belonging to the financial version
6983 --                        from the source to the destination project
6984 -- Note                 :
6985 -- Assumptions          : All FLAGS and WORKPLAN record(s) have been populated in the global temporary table
6986 -- Parameters                    Type      Required  Description and Purpose
6987 -- ---------------------------  ------     --------  --------------------------------------------------------
6988 -- p_src_project_id             NUMBER        Y      The source project id
6989 -- p_dest_project_id            NUMBER        Y      The destination project id
6990 -- p_dest_fn_structure_id       NUMBER        Y      The destination project's financial structure id
6991 -- p_shared                     VARCHAR2      Y      Whether source/destination project is shared or not
6992 -- p_copy_ppevSchedules_flag    NUMBER        Y      Whether pa_proj_elem_ver_schedule entry from the source project
6993 --                                                   should be copied into the destination project or not
6994 -- p_target_start_date          DATE          Y      The start date of the destination project
6995 -- p_target_finish_date         DATE          Y      The finish date of the destination project
6996 -- p_calendar_id                NUMBER        Y      The calendar id
6997 PROCEDURE copy_src_financial_ver_tasks(  p_api_version        IN  NUMBER      := 1.0
6998                                         ,p_commit             IN  VARCHAR2    := FND_API.G_FALSE
6999                                         ,p_init_msg_list      IN  VARCHAR2    := FND_API.G_TRUE
7000                                         ,p_validate_only      IN  VARCHAR2    := FND_API.G_FALSE
7001                                         ,p_validation_level   IN  VARCHAR2    := FND_API.G_VALID_LEVEL_FULL
7002                                         ,p_calling_module     IN  VARCHAR2    := 'SELF_SERVICE'
7003                                         ,p_debug_mode         IN  VARCHAR2    := 'N'
7004                                         ,p_src_project_id           IN NUMBER
7005                                         ,p_dest_project_id          IN NUMBER
7006                                         ,p_dest_fn_structure_id     IN NUMBER
7007                                         ,p_shared                   IN VARCHAR2
7008                                         ,p_copy_ppevSchedules_flag  IN VARCHAR2
7009                                         ,p_target_start_date        IN DATE
7010                                         ,p_target_finish_date       IN DATE
7011                                         ,p_calendar_id              IN NUMBER
7012                                         ,x_return_status  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7013                                         ,x_msg_count      OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7014                                         ,x_msg_data       OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7015                                       ) IS
7016 --This cursor retrieves the LATEST PUBLISHED WP version from the source project
7017 CURSOR cur_get_src_fin_version_id IS
7018 SELECT ppev.element_version_id
7019 FROM   pa_proj_element_versions ppev,
7020        pa_proj_elem_ver_structure ppevs
7021 WHERE  ppev.project_id = p_src_project_id
7022 AND    ppev.object_type = 'PA_STRUCTURES'
7023 AND    ppev.element_version_id = ppevs.element_version_id
7024 AND    ppevs.project_id = p_src_project_id
7025 AND    ppevs.latest_eff_published_flag = 'Y';
7026 
7027 --This cursor retrieves the CURRENT WORKING WP version from the source project
7028 CURSOR cur_get_src_fin_version_id2 IS
7029 SELECT ppev.element_version_id
7030 FROM   pa_proj_element_versions ppev,
7031        pa_proj_elem_ver_structure ppevs
7032 WHERE  ppev.project_id = p_src_project_id
7033 AND    ppev.object_type = 'PA_STRUCTURES'
7034 AND    ppev.element_version_id = ppevs.element_version_id
7035 AND    ppevs.project_id = p_src_project_id
7036 AND    ppevs.current_working_flag = 'Y';
7037 
7038 --This cursor retrieves the version for the financial structure form the source project
7039 CURSOR cur_get_split_fin_ver IS
7040 SELECT ppev.element_version_id
7041 FROM   pa_proj_element_versions ppev,
7042        pa_proj_structure_types ppst,
7043        pa_structure_types pst
7044 WHERE  ppev.project_id = p_src_project_id
7045 AND    ppev.object_type = 'PA_STRUCTURES'
7046 AND    ppev.proj_element_id = ppst.proj_element_id
7047 AND    ppst.structure_type_id = pst.structure_type_id
7048 AND    pst.structure_type = 'FINANCIAL' ;
7049 
7050 --This cursor gets the schedule start date from the source project
7051 CURSOR cur_get_src_sch_st_date(c_project_id NUMBER, c_struc_ver_id NUMBER) IS
7052 SELECT scheduled_start_date
7053 FROM pa_proj_elem_ver_schedule
7054 WHERE project_id = c_project_id
7055 AND   element_version_id = c_struc_ver_id;
7056 
7057 --Bug 3387963 - Cursor to get destination and source project's organization id
7058 CURSOR cur_get_carrying_out_org IS
7059 SELECT old.carrying_out_organization_id,
7060        new.carrying_out_organization_id
7061 FROM pa_projects_all old,
7062      pa_projects_all new
7063 WHERE old.project_id = p_src_project_id
7064 AND   new.project_id = p_dest_project_id;
7065 
7066 l_old_proj_org_id       NUMBER;
7067 l_new_proj_org_id       NUMBER;
7068 -- End of code added for bug 3387963
7069 
7070 /* Code added for 6211012*/
7071 
7072 TYPE typ_obj_rela_id is TABLE OF pa_object_relationships.object_relationship_id%TYPE
7073 INDEX BY BINARY_INTEGER;
7074 l_obj_rel_id typ_obj_rela_id;
7075 
7076 TYPE typ_obj_typ_from is TABLE OF pa_object_relationships.object_type_from%TYPE
7077 INDEX BY BINARY_INTEGER;
7078 l_obj_typ_from typ_obj_typ_from;
7079 
7080 TYPE typ_obj_from_id is TABLE OF pa_object_relationships.object_id_from1%TYPE
7081 INDEX BY BINARY_INTEGER;
7082 l_obj_from_id typ_obj_from_id;
7083 
7084 TYPE typ_obj_typ_to is TABLE OF pa_object_relationships.object_type_to%TYPE
7085 INDEX BY BINARY_INTEGER;
7086 l_obj_typ_to typ_obj_typ_to;
7087 
7088 TYPE typ_obj_to_id is TABLE OF pa_object_relationships.object_id_to1%TYPE
7089 INDEX BY BINARY_INTEGER;
7090 l_obj_to_id typ_obj_to_id;
7091 
7092 TYPE typ_rel_typ is TABLE OF pa_object_relationships.relationship_type%TYPE
7093 INDEX BY BINARY_INTEGER;
7094 l_rel_typ typ_rel_typ;
7095 
7096 TYPE typ_rel_subtyp is TABLE OF pa_object_relationships.relationship_subtype%TYPE
7097 INDEX BY BINARY_INTEGER;
7098 l_rel_subtyp typ_rel_subtyp;
7099 
7100 TYPE typ_rec_ver_num is TABLE OF pa_object_relationships.Record_Version_Number%TYPE
7101 INDEX BY BINARY_INTEGER;
7102 l_rec_ver_num typ_rec_ver_num;
7103 
7104 TYPE typ_wt_percent is TABLE OF pa_object_relationships.weighting_percentage%TYPE
7105 INDEX BY BINARY_INTEGER;
7106 l_wt_percent typ_wt_percent;
7107 
7108 
7109 CURSOR cur_pa_obj_rela_1(c_src_fin_version_id NUMBER,
7110 		     c_dest_project_id NUMBER
7111 		     ) IS
7112 SELECT
7113      pa_object_relationships_s.nextval,
7114      pobj.object_type_from,
7115      ppev1.element_version_id,
7116      pobj.object_type_to,
7117      ppev2.element_version_id,
7118      pobj.relationship_type,
7119      pobj.relationship_subtype,
7120      pobj.Record_Version_Number,
7121      pobj.weighting_percentage
7122 FROM ( SELECT object_type_from,
7123              object_id_from1,
7124              object_type_to,
7125              object_id_to1,
7126              relationship_type,
7127              relationship_subtype,
7128              Record_Version_Number,
7129              weighting_percentage
7130       FROM pa_object_relationships
7131       START WITH object_id_from1 = c_src_fin_version_id
7132       AND  RELATIONSHIP_TYPE = 'S'
7133       CONNECT BY  object_id_from1 =  PRIOR object_id_to1
7134       AND  RELATIONSHIP_TYPE = 'S' ) pobj,
7135     pa_proj_element_versions ppev1,
7136     pa_proj_element_versions ppev2
7137     WHERE ppev1.attribute15 = pobj.object_id_from1
7138     AND   ppev2.attribute15 = pobj.object_id_to1
7139     AND   ppev1.project_id = c_dest_project_id
7140     AND   ppev2.project_id = c_dest_project_id ;
7141 
7142 /*End of Code added for 6211012*/
7143 
7144 l_debug_mode                     VARCHAR2(1);
7145 l_debug_level2                   CONSTANT NUMBER := 2;
7146 l_debug_level3                   CONSTANT NUMBER := 3;
7147 l_debug_level4                   CONSTANT NUMBER := 4;
7148 l_debug_level5                   CONSTANT NUMBER := 5;
7149 
7150 l_src_fin_version_id    NUMBER(15);
7151 l_user_id               NUMBER := FND_GLOBAL.USER_ID;
7152 l_login_id              NUMBER := FND_GLOBAL.LOGIN_ID;
7153 l_delta                 NUMBER;
7154 l_src_sch_st_date       DATE;
7155 
7156 BEGIN
7157 
7158 
7159      x_msg_count := 0;
7160      x_return_status := FND_API.G_RET_STS_SUCCESS;
7161      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
7162 
7163      IF (p_commit = FND_API.G_TRUE) THEN
7164         SAVEPOINT copy_src_fin_ver_tasks;
7165      END IF;
7166 
7167      IF p_init_msg_list = FND_API.G_TRUE THEN
7168           FND_MSG_PUB.initialize;
7169      END IF;
7170 
7171      IF l_debug_mode = 'Y' THEN
7172         PA_DEBUG.set_curr_function( p_function   => 'copy_src_financial_ver_tasks',
7173                                     p_debug_mode => l_debug_mode );
7174      END IF;
7175 
7176      IF l_debug_mode = 'Y' THEN
7177         Pa_Debug.g_err_stage:= 'Printing Input parameters';
7178         Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
7179                                    l_debug_level3);
7180 
7181         Pa_Debug.WRITE(G_PKG_NAME,'p_src_project_id'||':'||p_src_project_id,
7182                                    l_debug_level3);
7183 
7184         Pa_Debug.WRITE(G_PKG_NAME,'p_dest_project_id'||':'||p_dest_project_id,
7185                                    l_debug_level3);
7186 
7187         Pa_Debug.WRITE(G_PKG_NAME,'p_dest_fn_structure_id'||':'||p_dest_fn_structure_id,
7188                                    l_debug_level3);
7189 
7190         Pa_Debug.WRITE(G_PKG_NAME,'p_shared'||':'||p_shared,
7191                                    l_debug_level3);
7192 
7193         Pa_Debug.WRITE(G_PKG_NAME,'p_copy_ppevSchedules_flag'||':'||p_copy_ppevSchedules_flag,
7194                                    l_debug_level3);
7195 
7196         Pa_Debug.WRITE(G_PKG_NAME,'p_target_start_date'||':'||p_target_start_date,
7197                                    l_debug_level3);
7198 
7199         Pa_Debug.WRITE(G_PKG_NAME,'p_target_finish_date'||':'||p_target_finish_date,
7200                                    l_debug_level3);
7201 
7202         Pa_Debug.WRITE(G_PKG_NAME,'p_calendar_id'||':'||p_calendar_id,
7203                                    l_debug_level3);
7204      END IF;
7205 
7206      IF l_debug_mode = 'Y' THEN
7207           Pa_Debug.g_err_stage:= 'Validating Input parameters';
7208           Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
7209                                      l_debug_level3);
7210      END IF;
7211 
7212      IF ( ( p_src_project_id          IS NULL OR p_src_project_id          = FND_API.G_MISS_NUM  ) AND
7213           ( p_dest_project_id         IS NULL OR p_dest_project_id         = FND_API.G_MISS_NUM  ) AND
7214           ( p_dest_fn_structure_id    IS NULL OR p_dest_fn_structure_id    = FND_API.G_MISS_NUM  ) AND
7215           ( p_shared                  IS NULL OR p_shared                  = FND_API.G_MISS_CHAR ) AND
7216           ( p_copy_ppevSchedules_flag IS NULL OR p_copy_ppevSchedules_flag = FND_API.G_MISS_NUM  ) AND
7217           ( p_calendar_id             IS NULL OR p_calendar_id             = FND_API.G_MISS_NUM  )
7218         )
7219      THEN
7220            IF l_debug_mode = 'Y' THEN
7221                Pa_Debug.g_err_stage:= 'PA_PROJ_TASK_STRUC_PUB : copy_src_financial_ver_tasks : p_src_project_id,
7222                p_dest_project_id, p_dest_fn_structure_id, p_shared, p_copy_ppevSchedules_flag, p_calendar_id are NULL';
7223                Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
7224                               l_debug_level3);
7225            END IF;
7226           RAISE Invalid_Arg_Exc_WP;
7227      END IF;
7228 
7229     IF 'Y' = p_shared THEN
7230         --Fetch the WP latest published, else the current working in the source project
7231         OPEN  cur_get_src_fin_version_id;
7232         FETCH cur_get_src_fin_version_id INTO l_src_fin_version_id;
7233         IF cur_get_src_fin_version_id%NOTFOUND THEN
7234             OPEN  cur_get_src_fin_version_id2;
7235             FETCH cur_get_src_fin_version_id2 INTO l_src_fin_version_id;
7236             CLOSE cur_get_src_fin_version_id2;
7237         END IF;
7238         CLOSE cur_get_src_fin_version_id;
7239     ELSE
7240         --Fetch the financial version from the source project
7241         OPEN  cur_get_split_fin_ver;
7242         FETCH cur_get_split_fin_ver INTO l_src_fin_version_id;
7243         CLOSE cur_get_split_fin_ver;
7244     END IF;
7245 
7246     IF l_debug_mode = 'Y' THEN
7247         Pa_Debug.WRITE(G_PKG_NAME, 'Source financial version id : '||l_src_fin_version_id, l_debug_level3);
7248     END IF;
7249 
7250      --Bug 3387963 - Added to get the cursor values
7251     OPEN  cur_get_carrying_out_org;
7252     FETCH cur_get_carrying_out_org INTO l_old_proj_org_id, l_new_proj_org_id;
7253     CLOSE cur_get_carrying_out_org;
7254 
7255     --Copy tasks belonging to the single financial version in the source project
7256     INSERT INTO pa_proj_elements(
7257      PROJ_ELEMENT_ID
7258     ,PROJECT_ID
7259     ,OBJECT_TYPE
7260     ,ELEMENT_NUMBER
7261     ,NAME
7262     ,DESCRIPTION
7263     ,STATUS_CODE
7264     ,WF_STATUS_CODE
7265     ,PM_SOURCE_CODE
7266     ,PM_SOURCE_REFERENCE
7267     ,CLOSED_DATE
7268     ,LOCATION_ID
7269     ,MANAGER_PERSON_ID
7270     ,CARRYING_OUT_ORGANIZATION_ID
7271     ,TYPE_ID
7272     ,PRIORITY_CODE
7273     ,CREATION_DATE
7274     ,CREATED_BY
7275     ,LAST_UPDATE_DATE
7276     ,LAST_UPDATED_BY
7277     ,LAST_UPDATE_LOGIN
7278     ,RECORD_VERSION_NUMBER
7279     ,REQUEST_ID
7280     ,PROGRAM_APPLICATION_ID
7281     ,PROGRAM_ID
7282     ,PROGRAM_UPDATE_DATE
7283     ,LINK_TASK_FLAG
7284     ,BASELINE_START_DATE
7285     ,BASELINE_FINISH_DATE
7286     ,progress_outdated_flag
7287     ,ATTRIBUTE_CATEGORY
7288     ,ATTRIBUTE1
7289     ,ATTRIBUTE2
7290     ,ATTRIBUTE3
7291     ,ATTRIBUTE4
7292     ,ATTRIBUTE5
7293     ,ATTRIBUTE6
7294     ,ATTRIBUTE7
7295     ,ATTRIBUTE8
7296     ,ATTRIBUTE9
7297     ,ATTRIBUTE10
7298     ,ATTRIBUTE11
7299     ,ATTRIBUTE12
7300     ,ATTRIBUTE13
7301     ,ATTRIBUTE14
7302     ,ATTRIBUTE15
7303     ,parent_structure_id
7304     ,TYPE_CODE
7305     ,INC_PROJ_PROGRESS_FLAG
7306     ,WQ_ITEM_CODE
7307     ,WQ_UOM_CODE
7308     ,WQ_ACTUAL_ENTRY_CODE
7309     ,TASK_PROGRESS_ENTRY_PAGE_ID
7310     ,BASELINE_DURATION
7311     ,PHASE_CODE
7312     ,PHASE_VERSION_ID
7313     ,source_object_id
7314     ,source_object_type
7315     )
7316     SELECT
7317      pt.task_id
7318     ,p_dest_project_id
7319     ,ppe.object_type
7320     ,ppe.element_number
7321     ,ppe.name
7322     ,ppe.DESCRIPTION
7323     ,INITIAL_STATUS_CODE
7324     ,ppe.WF_STATUS_CODE
7325     ,ppe.PM_SOURCE_CODE
7326     ,ppe.PM_SOURCE_REFERENCE
7327     ,ppe.CLOSED_DATE
7328     ,ppe.LOCATION_ID
7329     ,ppe.MANAGER_PERSON_ID
7330     ,decode(ppe.CARRYING_OUT_ORGANIZATION_ID,l_old_proj_org_id, l_new_proj_org_id,
7331             ppe.CARRYING_OUT_ORGANIZATION_ID) -- Bug 3387963
7332     ,ppe.TYPE_ID
7333     ,ppe.PRIORITY_CODE
7334     ,SYSDATE
7335     ,l_user_id
7336     ,SYSDATE
7337     ,l_user_id
7338     ,l_login_id
7339     ,ppe.RECORD_VERSION_NUMBER
7340     ,ppe.REQUEST_ID
7341     ,ppe.PROGRAM_APPLICATION_ID
7342     ,ppe.PROGRAM_ID
7343     ,ppe.PROGRAM_UPDATE_DATE
7344     ,ppe.LINK_TASK_FLAG
7345     ,ppe.BASELINE_START_DATE
7346     ,ppe.BASELINE_FINISH_DATE
7347     ,'N'       --,ppe.progress_outdated_flag
7348     ,ppe.ATTRIBUTE_CATEGORY
7349     ,ppe.ATTRIBUTE1
7350     ,ppe.ATTRIBUTE2
7351     ,ppe.ATTRIBUTE3
7352     ,ppe.ATTRIBUTE4
7353     ,ppe.ATTRIBUTE5
7354     ,ppe.ATTRIBUTE6
7355     ,ppe.ATTRIBUTE7
7356     ,ppe.ATTRIBUTE8
7357     ,ppe.ATTRIBUTE9
7358     ,ppe.ATTRIBUTE10
7359     ,ppe.ATTRIBUTE11
7360     ,ppe.ATTRIBUTE12
7361     ,ppe.ATTRIBUTE13
7362     ,ppe.ATTRIBUTE14
7363     ,ppe.proj_element_id    --attribute 15 is used to store old ids.
7364     ,p_dest_fn_structure_id  --This would be WP/FIN structure id in shared case. FIN structure id in split case
7365     ,ppe.TYPE_CODE
7366     ,ppe.INC_PROJ_PROGRESS_FLAG
7367     ,ppe.WQ_ITEM_CODE
7368     ,ppe.WQ_UOM_CODE
7369     ,ppe.WQ_ACTUAL_ENTRY_CODE
7370     ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
7371     ,ppe.BASELINE_DURATION
7372     ,ppe.PHASE_CODE
7373     ,ppe.PHASE_VERSION_ID
7374     ,p_dest_project_id
7375     ,'PA_PROJECTS'
7376     FROM pa_task_types ptt,
7377          pa_proj_elements ppe,
7378          pa_proj_element_versions ppev,
7379          pa_tasks      pt
7380     WHERE pt.project_id = p_dest_project_id
7381     AND   ppe.project_id = p_src_project_id          --Added by Sunkalya For the fix of Bug#4600825. This change is done for R12
7382     						     --Merging of code fix done thru Bug#4589176(115.315) for performance issues.
7383     AND   pt.task_number = substrb(rtrim(ppe.element_number),1,25) -- Substrb added for Bug 5152448
7384     AND   ptt.object_type    = 'PA_TASKS'
7385     AND   ppe.type_id        = ptt.task_type_id
7386     AND   ppe.object_type = 'PA_TASKS'
7387     AND   nvl(ppe.link_task_flag,'N') <> 'Y' -- 4348868
7388     AND   ppe.parent_structure_id = ppev.proj_element_id
7389     AND   ppev.element_version_id = l_src_fin_version_id ;
7390 
7391     --Copy tasks versions belonging to the single financial version in the source project
7392     INSERT INTO pa_proj_element_versions(
7393      ELEMENT_VERSION_ID
7394     ,PROJ_ELEMENT_ID
7395     ,OBJECT_TYPE
7396     ,PROJECT_ID
7397     ,PARENT_STRUCTURE_VERSION_ID
7398     ,DISPLAY_SEQUENCE
7399     ,WBS_LEVEL
7400     ,WBS_NUMBER
7401     ,CREATION_DATE
7402     ,CREATED_BY
7403     ,LAST_UPDATE_DATE
7404     ,LAST_UPDATED_BY
7405     ,LAST_UPDATE_LOGIN
7406     ,RECORD_VERSION_NUMBER
7407     ,attribute15          --this column is used to store task ver id of the source project's task versions to be used to created relationships.
7408     ,ATTRIBUTE_CATEGORY
7409     ,ATTRIBUTE1
7410     ,ATTRIBUTE2
7411     ,ATTRIBUTE3
7412     ,ATTRIBUTE4
7413     ,ATTRIBUTE5
7414     ,ATTRIBUTE6
7415     ,ATTRIBUTE7
7416     ,ATTRIBUTE8
7417     ,ATTRIBUTE9
7418     ,ATTRIBUTE10
7419     ,ATTRIBUTE11
7420     ,ATTRIBUTE12
7421     ,ATTRIBUTE13
7422     ,ATTRIBUTE14
7423     ,TASK_UNPUB_VER_STATUS_CODE
7424     ,FINANCIAL_TASK_FLAG
7425     ,source_object_id
7426     ,source_object_type
7427     )
7428     SELECT
7429      pa_proj_element_versions_s.nextval
7430     ,ppe.proj_element_id
7431     ,ppev.object_type
7432     ,p_dest_project_id
7433     ,ppev2.element_version_id
7434     ,ppev.DISPLAY_SEQUENCE
7435     ,ppev.WBS_LEVEL
7436     ,ppev.WBS_NUMBER
7437     ,SYSDATE                     ------CREATION_DATE
7438     ,l_user_id                   ------CREATED_BY
7439     ,SYSDATE                     ------LAST_UPDATE_DATE
7440     ,l_user_id                   ------LAST_UPDATED_BY
7441     ,l_login_id                  ------LAST_UPDATE_LOGIN
7442     ,ppev.RECORD_VERSION_NUMBER  ------RECORD_VERSION_NUMBER
7443     ,ppev.element_version_id     -- to help create relationships from source
7444     ,ppev.ATTRIBUTE_CATEGORY
7445     ,ppev.ATTRIBUTE1
7446     ,ppev.ATTRIBUTE2
7447     ,ppev.ATTRIBUTE3
7448     ,ppev.ATTRIBUTE4
7449     ,ppev.ATTRIBUTE5
7450     ,ppev.ATTRIBUTE6
7451     ,ppev.ATTRIBUTE7
7452     ,ppev.ATTRIBUTE8
7453     ,ppev.ATTRIBUTE9
7454     ,ppev.ATTRIBUTE10
7455     ,ppev.ATTRIBUTE11
7456     ,ppev.ATTRIBUTE12
7457     ,ppev.ATTRIBUTE13
7458     ,ppev.ATTRIBUTE14
7459     ,decode( ppevs.status_code, 'STRUCTURE_PUBLISHED', 'PUBLISHED', 'WORKING' )
7460     ,ppev.FINANCIAL_TASK_FLAG
7461     ,p_dest_project_id
7462     ,'PA_PROJECTS'
7463     FROM pa_proj_element_versions ppev,
7464          pa_proj_elements ppe,
7465          pa_proj_element_versions ppev2,
7466          pa_proj_elem_ver_structure ppevs
7467     WHERE ppev.project_id = p_src_project_id
7468     AND   ppev.object_type = 'PA_TASKS'
7469     AND   ppev.parent_structure_version_id = l_src_fin_version_id
7470     AND   ppev.proj_element_id = ppe.attribute15
7471     AND   ppe.project_id = p_dest_project_id
7472     AND   ppe.object_type = 'PA_TASKS'
7473     AND   ppev.parent_structure_version_id = ppev2.attribute15
7474     AND   ppev2.project_id = p_dest_project_id
7475     AND   ppev2.object_type = 'PA_STRUCTURES'
7476     AND   ppevs.project_id = p_dest_project_id
7477     AND   ppevs.element_version_id = ppev2.element_version_id ;
7478 
7479     IF l_debug_mode = 'Y' THEN
7480         Pa_Debug.WRITE(G_PKG_NAME, 'Creating object relatiionships for financial tasks', l_debug_level3);
7481     END IF;
7482 
7483     --Copy relationships for structure and tasks into destination project
7484   /* Start of addition for bug 6211012 */
7485 
7486         l_obj_rel_id.delete;
7487 	l_obj_typ_from.delete;
7488 	l_obj_from_id.delete;
7489 	l_obj_typ_to.delete;
7490 	l_obj_to_id.delete;
7491 	l_rel_typ.delete;
7492 	l_rel_subtyp.delete;
7493 	l_rec_ver_num.delete;
7494 	l_wt_percent.delete;
7495 
7496         OPEN cur_pa_obj_rela_1(l_src_fin_version_id,p_dest_project_id);
7497 
7498 	LOOP
7499 
7500 	  FETCH cur_pa_obj_rela_1
7501 	  BULK COLLECT INTO
7502 		l_obj_rel_id,
7503 		l_obj_typ_from,
7504 		l_obj_from_id,
7505 		l_obj_typ_to,
7506 		l_obj_to_id,
7507 		l_rel_typ,
7508 		l_rel_subtyp,
7509 		l_rec_ver_num,
7510 		l_wt_percent
7511 	  LIMIT 1000;
7512 
7513 	  IF l_obj_rel_id.COUNT >0 THEN
7514 
7515 	    FORALL i IN l_obj_rel_id.FIRST..l_obj_rel_id.LAST
7516             insert into PA_OBJECT_RELATIONSHIPS (
7517                  object_relationship_id,
7518                  object_type_from,
7519                  object_id_from1,
7520                  object_type_to,
7521                  object_id_to1,
7522                  relationship_type,
7523                  relationship_subtype,
7524                  Record_Version_Number,
7525                  CREATED_BY,
7526                  CREATION_DATE,
7527                  LAST_UPDATED_BY,
7528                  LAST_UPDATE_DATE,
7529                  LAST_UPDATE_LOGIN,
7530                  weighting_percentage
7531                        )
7532 		 values(
7533 		 l_obj_rel_id(i),
7534 	         l_obj_typ_from(i),
7535 	         l_obj_from_id(i),
7536 	         l_obj_typ_to(i),
7537 	         l_obj_to_id(i),
7538 	         l_rel_typ(i),
7539 	         l_rel_subtyp(i),
7540 	         l_rec_ver_num(i),
7541                  l_user_id,
7542                  SYSDATE,
7543                  l_user_id,
7544                  SYSDATE,
7545                  l_login_id,
7546 	         l_wt_percent(i)
7547 		 );
7548 
7549 	  END IF;
7550 
7551           EXIT WHEN l_obj_rel_id.COUNT < 1000 ;
7552 	END LOOP;
7553 
7554 	l_obj_rel_id.delete;
7555 	l_obj_typ_from.delete;
7556 	l_obj_from_id.delete;
7557 	l_obj_typ_to.delete;
7558 	l_obj_to_id.delete;
7559 	l_rel_typ.delete;
7560 	l_rel_subtyp.delete;
7561 	l_rec_ver_num.delete;
7562 	l_wt_percent.delete;
7563 
7564 	CLOSE cur_pa_obj_rela_1;
7565 
7566 /*
7567 
7568     INSERT INTO PA_OBJECT_RELATIONSHIPS (
7569      object_relationship_id
7570     ,object_type_from
7571     ,object_id_from1
7572     ,object_type_to
7573     ,object_id_to1
7574     ,relationship_type
7575     ,relationship_subtype
7576     ,Record_Version_Number
7577     ,CREATED_BY
7578     ,CREATION_DATE
7579     ,LAST_UPDATED_BY
7580     ,LAST_UPDATE_DATE
7581     ,LAST_UPDATE_LOGIN
7582     ,weighting_percentage
7583     )
7584     SELECT
7585      pa_object_relationships_s.nextval
7586     ,pobj.object_type_from
7587     ,ppev1.element_version_id
7588     ,pobj.object_type_to
7589     ,ppev2.element_version_id
7590     ,pobj.relationship_type
7591     ,pobj.relationship_subtype
7592     ,pobj.Record_Version_Number
7593     ,l_user_id
7594     ,SYSDATE
7595     ,l_user_id
7596     ,SYSDATE
7597     ,l_login_id
7598     ,pobj.weighting_percentage
7599     FROM
7600     ( SELECT object_type_from,
7601              object_id_from1,
7602              object_type_to,
7603              object_id_to1,
7604              relationship_type,
7605              relationship_subtype,
7606              Record_Version_Number,
7607              weighting_percentage
7608       FROM pa_object_relationships
7609       START WITH object_id_from1 = l_src_fin_version_id
7610       AND  RELATIONSHIP_TYPE = 'S'
7611       CONNECT BY  object_id_from1 =  PRIOR object_id_to1
7612       AND  RELATIONSHIP_TYPE = 'S' ) pobj,
7613     pa_proj_element_versions ppev1,
7614     pa_proj_element_versions ppev2
7615     WHERE ppev1.attribute15 = pobj.object_id_from1
7616     AND   ppev2.attribute15 = pobj.object_id_to1
7617     AND   ppev1.project_id = p_dest_project_id
7618     AND   ppev2.project_id = p_dest_project_id ;
7619 */
7620 /* End of changes for bug 6211012 */
7621 
7622     IF 'Y' = p_copy_ppevSchedules_flag THEN
7623 
7624         --calculate delta before inserting schedule rows
7625         --select source structure version scheduled start date
7626         IF (p_target_start_date IS NULL) THEN
7627             l_delta := 0;
7628         ELSE
7629             OPEN cur_get_src_sch_st_date( p_src_project_id, l_src_fin_version_id );
7630             FETCH cur_get_src_sch_st_date INTO l_src_sch_st_date;
7631             CLOSE cur_get_src_sch_st_date;
7632             l_delta := p_target_start_date - l_src_sch_st_date;
7633         END IF;
7634 
7635         --Copy entries into pa_proj_elem_ver_schedule
7636         INSERT INTO pa_proj_elem_ver_schedule(
7637          PEV_SCHEDULE_ID
7638         ,ELEMENT_VERSION_ID
7639         ,PROJECT_ID
7640         ,PROJ_ELEMENT_ID
7641         ,CREATION_DATE
7642         ,CREATED_BY
7643         ,LAST_UPDATE_DATE
7644         ,LAST_UPDATED_BY
7645         ,SCHEDULED_START_DATE
7646         ,SCHEDULED_FINISH_DATE
7647         ,OBLIGATION_START_DATE
7648         ,OBLIGATION_FINISH_DATE
7649         ,ACTUAL_START_DATE
7650         ,ACTUAL_FINISH_DATE
7651         ,ESTIMATED_START_DATE
7652         ,ESTIMATED_FINISH_DATE
7653         ,DURATION
7654         ,EARLY_START_DATE
7655         ,EARLY_FINISH_DATE
7656         ,LATE_START_DATE
7657         ,LATE_FINISH_DATE
7658         ,CALENDAR_ID
7659         ,MILESTONE_FLAG
7660         ,CRITICAL_FLAG
7661         ,RECORD_VERSION_NUMBER
7662         ,LAST_UPDATE_LOGIN
7663         ,WQ_PLANNED_QUANTITY
7664         ,PLANNED_EFFORT
7665         ,ACTUAL_DURATION
7666         ,ESTIMATED_DURATION
7667         ,ATTRIBUTE_CATEGORY
7668         ,ATTRIBUTE1
7669         ,ATTRIBUTE2
7670         ,ATTRIBUTE3
7671         ,ATTRIBUTE4
7672         ,ATTRIBUTE5
7673         ,ATTRIBUTE6
7674         ,ATTRIBUTE7
7675         ,ATTRIBUTE8
7676         ,ATTRIBUTE9
7677         ,ATTRIBUTE10
7678         ,ATTRIBUTE11
7679         ,ATTRIBUTE12
7680         ,ATTRIBUTE13
7681         ,ATTRIBUTE14
7682         ,ATTRIBUTE15
7683         ,source_object_id
7684         ,source_object_type
7685         )
7686         SELECT
7687          pa_proj_elem_ver_schedule_s.nextval
7688         ,ppev1.ELEMENT_VERSION_ID
7689         ,p_dest_project_id
7690         ,ppev1.PROJ_ELEMENT_ID
7691         ,SYSDATE
7692         ,l_user_id
7693         ,SYSDATE
7694         ,l_user_id
7695         ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date,
7696                                                     p_target_finish_date,
7697                                                     l_delta,
7698                                                     ppevs.SCHEDULED_START_DATE,
7699                                                     null )
7700         ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date,
7701                                                     p_target_finish_date,
7702                                                     l_delta,
7703                                                     ppevs.SCHEDULED_START_DATE,
7704                                                     SCHEDULED_FINISH_DATE )
7705         ,ppevs.OBLIGATION_START_DATE
7706         ,ppevs.OBLIGATION_FINISH_DATE
7707         ,null
7708         ,null
7709         ,null
7710         ,null
7711         ,ppevs.DURATION
7712         ,ppevs.EARLY_START_DATE
7713         ,ppevs.EARLY_FINISH_DATE
7714         ,ppevs.LATE_START_DATE
7715         ,ppevs.LATE_FINISH_DATE
7716         ,p_calendar_id
7717         ,ppevs.MILESTONE_FLAG
7718         ,ppevs.CRITICAL_FLAG
7719         ,ppevs.RECORD_VERSION_NUMBER
7720         ,l_login_id
7721         ,ppevs.WQ_PLANNED_QUANTITY
7722         ,ppevs.PLANNED_EFFORT
7723         ,ppevs.ACTUAL_DURATION
7724         ,ppevs.ESTIMATED_DURATION
7725         ,ppevs.ATTRIBUTE_CATEGORY
7726         ,ppevs.ATTRIBUTE1
7727         ,ppevs.ATTRIBUTE2
7728         ,ppevs.ATTRIBUTE3
7729         ,ppevs.ATTRIBUTE4
7730         ,ppevs.ATTRIBUTE5
7731         ,ppevs.ATTRIBUTE6
7732         ,ppevs.ATTRIBUTE7
7733         ,ppevs.ATTRIBUTE8
7734         ,ppevs.ATTRIBUTE9
7735         ,ppevs.ATTRIBUTE10
7736         ,ppevs.ATTRIBUTE11
7737         ,ppevs.ATTRIBUTE12
7738         ,ppevs.ATTRIBUTE13
7739         ,ppevs.ATTRIBUTE14
7740         ,ppevs.ATTRIBUTE15
7741     ,p_dest_project_id
7742     ,'PA_PROJECTS'
7743         FROM pa_proj_elem_ver_schedule ppevs,
7744              pa_proj_element_versions ppev1,
7745              pa_proj_element_versions ppev2
7746         WHERE ppev1.project_id = p_dest_project_id
7747         AND   ppev1.attribute15 = ppevs.element_version_id
7748         AND   ppevs.project_id = p_src_project_id
7749         AND   ppev1.attribute15 = ppev2.element_version_id
7750         AND   ppev2.project_id = p_src_project_id
7751         AND   ppev2.parent_structure_version_id = l_src_fin_version_id ;
7752     END IF; --If p_copy_ppevSchedules_flag = 'Y'
7753 
7754     IF (p_commit = FND_API.G_TRUE) THEN
7755       COMMIT;
7756     END IF;
7757 
7758     IF l_debug_mode = 'Y' THEN
7759         Pa_Debug.WRITE(G_PKG_NAME, 'Exiting copy_src_financial_ver_tasks...', l_debug_level3);
7760     END IF;
7761 EXCEPTION
7762 
7763 WHEN Invalid_Arg_Exc_WP THEN
7764      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
7765      x_msg_count     := 1;
7766      x_msg_data      := ' PA_PROJ_TASK_STRUC_PUB : copy_src_financial_ver_tasks : NULL parameters passed';
7767 
7768      IF p_commit = FND_API.G_TRUE THEN
7769         ROLLBACK TO copy_src_fin_ver_tasks;
7770      END IF;
7771 
7772      Fnd_Msg_Pub.add_exc_msg
7773                (  p_pkg_name        => 'PA_PROJ_TASK_STRUC_PUB'
7774                 , p_procedure_name  => 'copy_src_financial_ver_tasks'
7775                 , p_error_text      => x_msg_data);
7776 
7777      IF l_debug_mode = 'Y' THEN
7778           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
7779           Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
7780                               l_debug_level5);
7781           Pa_Debug.reset_curr_function;
7782      END IF;
7783      RAISE;
7784 
7785 WHEN OTHERS THEN
7786      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
7787      x_msg_count     := 1;
7788      x_msg_data      := SQLERRM;
7789 
7790      IF p_commit = FND_API.G_TRUE THEN
7791         ROLLBACK TO copy_src_fin_ver_tasks;
7792      END IF;
7793 
7794      Fnd_Msg_Pub.add_exc_msg
7795        ( p_pkg_name         => 'PA_PROJ_TASK_STRUC_PUB'
7796         , p_procedure_name  => 'copy_src_financial_ver_tasks'
7797         , p_error_text      => x_msg_data);
7798 
7799      IF l_debug_mode = 'Y' THEN
7800           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
7801           Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
7802                               l_debug_level5);
7803           Pa_Debug.reset_curr_function;
7804      END IF;
7805      RAISE;
7806 
7807 END copy_src_financial_ver_tasks;
7808 
7809 
7810 
7811 
7812 -- Procedure            : copy_structures_tasks_bulk
7813 -- Type                 : PUBLIC
7814 -- Purpose              : Contains logic for copying WP/FIN structures, versions and tasks alongwith
7815 --                        intra and inter project dependencies, mapping, deliverables etc.
7816 --                        All this is done only for the SELECTED or DEFAULTED versions that are present
7817 --                        in the global temporary table PA_PROJECT_COPY_OPTIONS_TMP
7818 -- Note                 : **** THIS API HAS BEEN RE-WRITTEN FOR FPM ****
7819 -- Assumptions          : All FLAGS and WORKPLAN record(s) have been populated in the global temporary table
7820 -- Parameters                    Type      Required  Description and Purpose
7821 -- ---------------------------  ------     --------  --------------------------------------------------------
7822 -- p_src_project_id             NUMBER        Y      The source project id
7823 -- p_dest_project_id            NUMBER        Y      The destination project id
7824 -- p_delta                      NUMBER        N
7825 -- p_dest_template_flag         VARCHAR2      N      Whether destination is a template or not
7826 -- p_dest_project_name          VARCHAR2      Y      The name of the destination project
7827 -- p_target_start_date          DATE          Y      The start date of the destination project
7828 -- p_target_finish_date         DATE          Y      The finish date of the destination project
7829 -- p_calendar_id                NUMBER        Y      The calendar id
7830 PROCEDURE copy_structures_tasks_bulk
7831 ( p_api_version                  IN  NUMBER      := 1.0
7832  ,p_commit                       IN  VARCHAR2    := FND_API.G_FALSE
7833  ,p_init_msg_list                IN  VARCHAR2    := FND_API.G_TRUE
7834  ,p_validate_only                IN  VARCHAR2    := FND_API.G_FALSE
7835  ,p_validation_level             IN  VARCHAR2    := FND_API.G_VALID_LEVEL_FULL
7836  ,p_calling_module               IN  VARCHAR2    := 'SELF_SERVICE'
7837  ,p_debug_mode                   IN  VARCHAR2    := 'N'
7838  ,p_max_msg_count                IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7839  ,p_src_project_id               IN  NUMBER
7840  ,p_dest_project_id              IN  NUMBER
7841  ,p_delta                        IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7842  ,p_copy_task_flag               IN  VARCHAR2    := 'Y'  /**NOT USED **/
7843  ,p_dest_template_flag           IN  VARCHAR2    := 'N'
7844  ,p_src_template_flag            IN  VARCHAR2    := 'N'  /**NOT USED **/
7845  ,p_dest_project_name            IN  VARCHAR2
7846  ,p_target_start_date            IN  DATE
7847  ,p_target_finish_date           IN  DATE
7848  ,p_calendar_id                  IN  NUMBER
7849  ,x_return_status                OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7850  ,x_msg_count                    OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7851  ,x_msg_data                     OUT NOCOPY VARCHAR2 )  IS --File.Sql.39 bug 4440895
7852 
7853 --This cursor fetches the workplan structure attributes
7854 CURSOR cur_get_wp_attr IS
7855 SELECT ppwa.WP_ENABLE_VERSION_FLAG
7856 FROM   pa_proj_workplan_attr   ppwa
7857       ,pa_proj_structure_types ppst
7858       ,pa_structure_types      pst
7859 WHERE  ppwa.project_id = p_src_project_id
7860 AND    ppwa.proj_element_id = ppst.proj_element_id
7861 AND    ppst.structure_type_id = pst.structure_type_id
7862 AND    pst.structure_type = 'WORKPLAN';
7863 
7864 --This cursor determines if atleast one WP version has been selected by the user
7865 CURSOR cur_min_one_wp_version_sel IS
7866 SELECT 'Y'
7867 FROM   dual
7868 WHERE EXISTS( SELECT 'Y'
7869               FROM  PA_PROJECT_COPY_OPTIONS_TMP
7870               WHERE CONTEXT = 'WORKPLAN'
7871               AND   VERSION_ID IS NOT NULL) ;
7872 
7873 --This cursor retrieves the values of various flags from the global temporary table
7874 CURSOR cur_get_flag(c_flag_name IN VARCHAR2) IS
7875 SELECT FLAG
7876 FROM   PA_PROJECT_COPY_OPTIONS_TMP
7877 WHERE  CONTEXT = c_flag_name ;
7878 
7879 --This cursor is used to retrieve the destination project's WP/FIN structure id
7880 CURSOR cur_get_dest_structure_id( c_structure_type IN VARCHAR2 ) IS
7881 SELECT ppe.proj_element_id,
7882        ppe.attribute15
7883 FROM   pa_proj_elements ppe,
7884        pa_proj_structure_types ppst,
7885        pa_structure_types pst
7886 WHERE  ppe.project_id = p_dest_project_id
7887 AND    ppe.object_type = 'PA_STRUCTURES'
7888 AND    ppe.proj_element_id = ppst.proj_element_id
7889 AND    ppst.structure_type_id = pst.structure_type_id
7890 AND    pst.structure_type = c_structure_type ;
7891 
7892 CURSOR cur_get_person_id(c_user_id NUMBER) IS
7893 SELECT p.person_id
7894 FROM   per_all_people_f p,
7895        fnd_user f
7896 WHERE f.employee_id = p.person_id
7897 AND   sysdate between p.effective_start_date and p.effective_end_date
7898 AND   f.user_id = c_user_id;
7899 
7900 --This cursor retrieves all the WP versions of the destination project
7901 CURSOR cur_get_dest_wp_struc_versions(c_dest_wp_struc_id IN NUMBER) IS
7902 SELECT ppev.element_version_id
7903       ,ppev.attribute15
7904       ,ppcot.flag
7905 FROM   pa_proj_element_versions ppev,
7906        pa_project_copy_options_tmp ppcot
7907 WHERE  ppev.project_id = p_dest_project_id
7908 AND    ppev.proj_element_id = c_dest_wp_struc_id
7909 AND    ppev.attribute15 = ppcot.version_id
7910 AND    ppcot.context = 'WORKPLAN' ;
7911 
7912 --This cursor gets the schedule start date from the source project
7913 CURSOR cur_get_src_sch_st_date(c_project_id NUMBER, c_struc_ver_id NUMBER) IS
7914 SELECT scheduled_start_date
7915 FROM   pa_proj_elem_ver_schedule
7916 WHERE project_id = c_project_id
7917 AND   element_version_id = c_struc_ver_id;
7918 
7919 CURSOR cur_get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
7920 SELECT nvl(max(version_number),0)+1
7921   FROM pa_proj_elem_ver_structure
7922  WHERE project_id = c_project_id
7923    AND proj_element_id = c_proj_element_id
7924    AND status_code <> 'STRUCTURE_PUBLISHED';
7925 
7926 --This cursor will retrieve the destination project's shared structure id
7927 CURSOR cur_get_shared_struc_id IS
7928 SELECT ppe.proj_element_id,
7929        ppe.attribute15
7930 FROM  pa_proj_elements ppe
7931 WHERE ppe.project_id = p_dest_project_id
7932 AND   ppe.object_type = 'PA_STRUCTURES'
7933 AND   PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y' ;
7934 
7935 --This cursor will retrieve the single version id created for the shared structure
7936 CURSOR cur_get_shared_ver_id IS
7937 SELECT ppev.element_version_id
7938 FROM   pa_proj_element_versions ppev
7939 WHERE ppev.project_id = p_dest_project_id
7940 AND   ppev.object_type = 'PA_STRUCTURES'
7941 AND   PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppev.proj_element_id ) = 'Y' ;
7942 
7943 --This cursor gets the copied tasks' proj_element_id
7944 CURSOR cur_get_copied_tasks( c_dest_parent_structure_id IN NUMBER ) IS
7945 SELECT dest.attribute15     src_ppe_id,
7946        dest.proj_element_id dest_ppe_id
7947 FROM   pa_proj_elements dest
7948 WHERE  dest.project_id = p_dest_project_id
7949 AND    dest.object_type = 'PA_TASKS'
7950 AND    dest.parent_structure_id = c_dest_parent_structure_id  ;
7951 
7952 --Bug 3387963 - Cursor to get destination and source project's organization id
7953 CURSOR cur_get_carrying_out_org IS
7954 SELECT old.carrying_out_organization_id,
7955        new.carrying_out_organization_id
7956 FROM pa_projects_all old,
7957      pa_projects_all new
7958 WHERE old.project_id = p_src_project_id
7959 AND   new.project_id = p_dest_project_id;
7960 
7961 /*Included by avaithia for Bug 3922019*/
7962 CURSOR c_template_flag(l_prj_id IN NUMBER) IS
7963 SELECT template_flag
7964 FROM pa_projects_all
7965 WHERE project_id = l_prj_id ;
7966 
7967 CURSOR c_only_wp_ver_id(l_proj_id IN NUMBER) IS
7968 SELECT ppv.element_version_id
7969   FROM pa_proj_element_versions ppv ,
7970        pa_proj_structure_types pps,
7971        pa_structure_types pst
7972  WHERE ppv.proj_element_id = pps.proj_element_id
7973    AND ppv.object_type = 'PA_STRUCTURES'
7974    AND pps.structure_type_id = pst.structure_type_id
7975    AND pst.structure_type = 'WORKPLAN'
7976    AND ppv.project_id = l_proj_id ;
7977 
7978 l_template_flag         PA_PROJECTS_ALL.template_flag%TYPE ;
7979 l_only_wp_ver_id        PA_PROJ_ELEMENT_VERSIONS.element_version_id%TYPE ;
7980 
7981 /*End of declaration included by avaithia for Bug 3922019*/
7982 
7983 l_old_proj_org_id       NUMBER;
7984 l_new_proj_org_id       NUMBER;
7985 -- End of code added for bug 3387963
7986 
7987 l_return_status         VARCHAR2(1);
7988 l_msg_count             NUMBER;
7989 l_msg_data              VARCHAR2(250);
7990 l_debug_mode            VARCHAR2(1);
7991 l_data                  VARCHAR2(2000);
7992 l_msg_index_out         NUMBER;
7993 l_debug_level2          CONSTANT NUMBER := 2;
7994 l_debug_level3          CONSTANT NUMBER := 3;
7995 l_debug_level4          CONSTANT NUMBER := 4;
7996 l_debug_level5          CONSTANT NUMBER := 5;
7997 
7998 l_workplan_enabled      VARCHAR2(1) := 'N';
7999 l_fin_enabled           VARCHAR2(1) := 'N';
8000 l_dlv_enabled           VARCHAR2(1) := 'N';
8001 l_shared                VARCHAR2(1) := 'N';
8002 l_versioning_enabled    VARCHAR2(1) := 'N';
8003 l_min_one_wp_ver_sel    VARCHAR2(1) := 'N';
8004 l_fin_tasks_flag        VARCHAR2(1) := 'Y';
8005 
8006 l_wp_deliverables_flag     VARCHAR2(1);
8007 l_wp_dlv_item_det_flag     VARCHAR2(1);
8008 l_wp_dlv_attach_flag       VARCHAR2(1);
8009 l_wp_dlv_assoc_task_flag   VARCHAR2(1);
8010 
8011 l_suffix                VARCHAR2(250);
8012 l_append                VARCHAR2(10) := ': ';
8013 l_name                  VARCHAR2(250);
8014 l_user_id               NUMBER := FND_GLOBAL.USER_ID;
8015 l_login_id              NUMBER := FND_GLOBAL.LOGIN_ID;
8016 l_dest_wp_structure_id  NUMBER;
8017 l_src_wp_structure_id   NUMBER;
8018 l_dest_fn_structure_id  NUMBER;
8019 l_src_fn_structure_id   NUMBER;
8020 l_dest_shared_struc_id  NUMBER;
8021 l_src_shared_struc_id   NUMBER;
8022 
8023 l_publish_person_id         NUMBER;
8024 l_cw_version_id             NUMBER(15)  := NULL;
8025 l_dest_status_code          VARCHAR(150);
8026 l_dest_latest_eff_pub_flag  VARCHAR2(1) := 'N';
8027 l_dest_current_working_flag VARCHAR2(1) := 'N';
8028 l_shared_make_working_copy  NUMBER(15);
8029 l_new_wp_ver_id             NUMBER(15);
8030 l_prefix                    VARCHAR2(240);
8031 
8032 l_default_lat_pub_and_cw_flag VARCHAR2(1) := 'N';
8033 l_delta                     NUMBER;
8034 l_src_sch_st_date           DATE;
8035 l_shared_dest_ver_id        NUMBER(15);
8036 l_struc_ver_number          NUMBER;
8037 l_dest_latest_pub_ver_id    NUMBER;
8038 l_wp_task_attach_flag       VARCHAR2(1);
8039 l_fn_task_attach_flag       VARCHAR2(1);
8040 
8041 rec_dest_wp_struc_versions   cur_get_dest_wp_struc_versions%ROWTYPE;
8042 
8043 --bug 3907862, start
8044 l_struct_version_number           NUMBER;
8045 --bug 3912603, Satish, start
8046 x_pev_schedule_id     NUMBER;
8047 check_str_sel_flag   VARCHAR2(1) := 'N';
8048 --bug 3912603, Satish, end
8049 
8050 cursor get_published_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
8051 select nvl(max(version_number),0)+1
8052 from pa_proj_elem_ver_structure
8053 where project_id = c_project_id
8054 and proj_element_id = c_proj_element_id
8055 and status_code = 'STRUCTURE_PUBLISHED';
8056 
8057 cursor get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
8058 select nvl(max(version_number),0)+1
8059 from pa_proj_elem_ver_structure
8060 where project_id = c_project_id
8061 and proj_element_id = c_proj_element_id
8062 and status_code <> 'STRUCTURE_PUBLISHED';
8063 --bug 3907862, end
8064 
8065 --3916763 Begin
8066 CURSOR c_get_approval_options IS
8067     SELECT wp_approval_reqd_flag, wp_auto_publish_flag, wp_approver_source_id
8068     FROM PA_PROJ_WORKPLAN_ATTR ppwa
8069     , PA_PROJ_STRUCTURE_TYPES ppst
8070     , PA_STRUCTURE_TYPES pst
8071     WHERE ppwa.PROJECT_ID = p_src_project_id
8072     AND ppwa.PROJ_ELEMENT_ID = ppst.PROJ_ELEMENT_ID
8073     AND ppst.structure_type_id = pst.structure_type_id
8074     and pst.structure_type = 'WORKPLAN';
8075 l_wp_approval_reqd_flag VARCHAR2(1);
8076 l_wp_auto_publish_flag VARCHAR2(1);
8077 l_wp_approver_source_id NUMBER;
8078 l_submit_wf_required VARCHAR2(1);
8079 l_submit_wf_str_version_id NUMBER;
8080 l_submit_wf_str_id NUMBER;
8081 l_puc_version_id           NUMBER(15);
8082 l_current_working_selected NUMBER(15) := NULL;
8083 --3916763 End
8084 
8085 /* Code added for 6211012*/
8086 
8087 TYPE typ_obj_rela_id is TABLE OF pa_object_relationships.object_relationship_id%TYPE
8088 INDEX BY BINARY_INTEGER;
8089 l_obj_rel_id typ_obj_rela_id;
8090 
8091 TYPE typ_obj_typ_from is TABLE OF pa_object_relationships.object_type_from%TYPE
8092 INDEX BY BINARY_INTEGER;
8093 l_obj_typ_from typ_obj_typ_from;
8094 
8095 TYPE typ_obj_from_id is TABLE OF pa_object_relationships.object_id_from1%TYPE
8096 INDEX BY BINARY_INTEGER;
8097 l_obj_from_id typ_obj_from_id;
8098 
8099 TYPE typ_obj_typ_to is TABLE OF pa_object_relationships.object_type_to%TYPE
8100 INDEX BY BINARY_INTEGER;
8101 l_obj_typ_to typ_obj_typ_to;
8102 
8103 TYPE typ_obj_to_id is TABLE OF pa_object_relationships.object_id_to1%TYPE
8104 INDEX BY BINARY_INTEGER;
8105 l_obj_to_id typ_obj_to_id;
8106 
8107 TYPE typ_rel_typ is TABLE OF pa_object_relationships.relationship_type%TYPE
8108 INDEX BY BINARY_INTEGER;
8109 l_rel_typ typ_rel_typ;
8110 
8111 TYPE typ_rel_subtyp is TABLE OF pa_object_relationships.relationship_subtype%TYPE
8112 INDEX BY BINARY_INTEGER;
8113 l_rel_subtyp typ_rel_subtyp;
8114 
8115 TYPE typ_rec_ver_num is TABLE OF pa_object_relationships.Record_Version_Number%TYPE
8116 INDEX BY BINARY_INTEGER;
8117 l_rec_ver_num typ_rec_ver_num;
8118 
8119 TYPE typ_wt_percent is TABLE OF pa_object_relationships.weighting_percentage%TYPE
8120 INDEX BY BINARY_INTEGER;
8121 l_wt_percent typ_wt_percent;
8122 
8123 
8124 CURSOR cur_pa_obj_rela_2(c_src_str_version_id NUMBER,
8125 		       c_struc_version_id NUMBER
8126 		       ) IS
8127 SELECT /*+ USE_HASH(ppev2 ppev1)*/
8128      pa_object_relationships_s.nextval,
8129      pobj.object_type_from,
8130      ppev1.element_version_id,
8131      pobj.object_type_to,
8132      ppev2.element_version_id,
8133      pobj.relationship_type,
8134      pobj.relationship_subtype,
8135      pobj.Record_Version_Number,
8136      pobj.weighting_percentage
8137 FROM ( SELECT  object_type_from, object_id_from1,
8138                object_type_to,   object_id_to1,
8139                relationship_type, relationship_subtype,
8140                Record_Version_Number, weighting_percentage
8141        FROM pa_object_relationships
8142        START WITH object_id_from1 = c_src_str_version_id
8143              AND  RELATIONSHIP_TYPE = 'S'
8144              CONNECT BY  object_id_from1 =  PRIOR object_id_to1
8145              AND  RELATIONSHIP_TYPE = 'S' ) pobj,
8146             pa_proj_element_versions ppev1,
8147             pa_proj_element_versions ppev2
8148        WHERE ppev1.attribute15 = pobj.object_id_from1
8149        AND   ppev2.attribute15 = pobj.object_id_to1
8150        AND   ppev1.parent_structure_version_id = c_struc_version_id
8151        AND   ppev2.parent_structure_version_id = c_struc_version_id ;
8152 
8153 /*End of Code added for 6211012*/
8154 
8155   -- gboomina added for bug 9659119 - start
8156     cursor get_record_version_number(c_project_id NUMBER, c_structure_version_id NUMBER) IS
8157       select record_version_number
8158         from pa_proj_elem_ver_structure
8159        where project_id = c_project_id
8160          and element_version_id = c_structure_version_id;
8161 
8162      l_record_version_number NUMBER;
8163    -- gboomina added for bug 9659119 - end
8164 
8165    l_Cbs_Enabled	  VARCHAR2(1) := 'N'; -- Added for 16470603
8166 
8167 BEGIN
8168 
8169      x_msg_count := 0;
8170      x_return_status := FND_API.G_RET_STS_SUCCESS;
8171      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
8172 
8173      IF (p_commit = FND_API.G_TRUE) THEN
8174         SAVEPOINT copy_struc_tasks_bulk;
8175      END IF;
8176 
8177      IF p_init_msg_list = FND_API.G_TRUE THEN
8178           FND_MSG_PUB.initialize;
8179      END IF;
8180 
8181      IF l_debug_mode = 'Y' THEN
8182         PA_DEBUG.set_curr_function( p_function   => 'copy_structures_tasks_bulk',
8183                                     p_debug_mode => l_debug_mode );
8184      END IF;
8185 
8186      IF l_debug_mode = 'Y' THEN
8187         Pa_Debug.g_err_stage:= 'Printing Input parameters';
8188         Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
8189                                    l_debug_level3);
8190 
8191         Pa_Debug.WRITE(G_PKG_NAME,'p_src_project_id'||':'||p_src_project_id,
8192                                    l_debug_level3);
8193 
8194         Pa_Debug.WRITE(G_PKG_NAME,'p_dest_project_id'||':'||p_dest_project_id,
8195                                    l_debug_level3);
8196 
8197         Pa_Debug.WRITE(G_PKG_NAME,'p_delta'||':'||p_delta,
8198                                    l_debug_level3);
8199 
8200         Pa_Debug.WRITE(G_PKG_NAME,'p_copy_task_flag'||':'||p_copy_task_flag,
8201                                    l_debug_level3);
8202 
8203         Pa_Debug.WRITE(G_PKG_NAME,'p_dest_template_flag'||':'||p_dest_template_flag,
8204                                    l_debug_level3);
8205 
8206         Pa_Debug.WRITE(G_PKG_NAME,'p_src_template_flag'||':'||p_src_template_flag,
8207                                    l_debug_level3);
8208 
8209         Pa_Debug.WRITE(G_PKG_NAME,'p_dest_project_name'||':'||p_dest_project_name,
8210                                    l_debug_level3);
8211 
8212         Pa_Debug.WRITE(G_PKG_NAME,'p_target_start_date'||':'||p_target_start_date,
8213                                    l_debug_level3);
8214 
8215         Pa_Debug.WRITE(G_PKG_NAME,'p_target_finish_date'||':'||p_target_finish_date,
8216                                    l_debug_level3);
8217 
8218         Pa_Debug.WRITE(G_PKG_NAME,'p_calendar_id'||':'||p_calendar_id,
8219                                    l_debug_level3);
8220      END IF;
8221 
8222     --If source and destination project are the same
8223     IF p_src_project_id = p_dest_project_id THEN
8224         x_return_status := FND_API.G_RET_STS_SUCCESS;
8225         RETURN;
8226     END IF;
8227 
8228     --Check whether WP structure is enabled for the source project
8229     l_workplan_enabled := PA_PROJECT_STRUCTURE_UTILS.check_workplan_enabled( p_src_project_id );
8230     --Check whether Financial structure is enabled for the source project
8231     l_fin_enabled      := PA_PROJECT_STRUCTURE_UTILS.check_financial_enabled( p_src_project_id );
8232     IF NVL( l_workplan_enabled, 'N' ) = 'Y' THEN
8233         --Check whether the structures are shared or not in the source project
8234         l_shared := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_src_project_id);
8235         --Retrieve whether versioning is enabled or not
8236         OPEN  cur_get_wp_attr;
8237         FETCH cur_get_wp_attr INTO l_versioning_enabled;
8238         CLOSE cur_get_wp_attr;
8239     END IF;
8240 
8241     --Check whether deliverables is enabled
8242     l_dlv_enabled := PA_PROJECT_STRUCTURE_UTILS.check_Deliverable_enabled(p_src_project_id);
8243 
8244     --If deliverables is enabled, retrieve the various deliverables flags
8245     IF 'Y' = l_dlv_enabled  THEN
8246         OPEN  cur_get_flag('WP_DELIVERABLES_FLAG');
8247         FETCH cur_get_flag INTO l_wp_deliverables_flag;
8248         CLOSE cur_get_flag;
8249 
8250         OPEN  cur_get_flag('WP_DLV_ITEM_DET_FLAG');
8251         FETCH cur_get_flag INTO l_wp_dlv_item_det_flag;
8252         CLOSE cur_get_flag;
8253 
8254         OPEN  cur_get_flag('WP_DLV_ATTACH_FLAG');
8255         FETCH cur_get_flag INTO l_wp_dlv_attach_flag;
8256         CLOSE cur_get_flag;
8257 
8258         OPEN  cur_get_flag('WP_DLV_ASSOC_TASK_FLAG');
8259         FETCH cur_get_flag INTO l_wp_dlv_assoc_task_flag;
8260         CLOSE cur_get_flag;
8261     END IF;
8262 
8263     --If both workplan and financial structures are disabled, we only need to copy deliverables and return
8264     IF 'N' = l_workplan_enabled AND 'N' = l_fin_enabled THEN
8265         --If deliverables is enabled and deliverables are selected for copying
8266         IF ( 'Y' = l_dlv_enabled AND 'Y' = l_wp_deliverables_flag ) THEN
8267 
8268             PA_DELIVERABLE_PUB.copy_deliverables
8269              (p_source_project_id    => p_src_project_id
8270              ,p_target_project_id    => p_dest_project_id
8271              ,p_item_details_flag    => l_wp_dlv_item_det_flag
8272              ,p_dlv_actions_flag     => 'Y'
8273              ,p_dlv_attachments_flag => l_wp_dlv_attach_flag
8274              ,p_association_flag     => l_wp_dlv_assoc_task_flag
8275              ,p_prefix               => 'CP'
8276              ,p_delta                => p_delta
8277              ,p_calling_context      => 'COPY_PROJECT'
8278              ,x_return_status        => x_return_status
8279              ,x_msg_count            => x_msg_count
8280              ,x_Msg_data             => x_msg_data
8281              );
8282 
8283             IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8284              RAISE FND_API.G_EXC_ERROR;
8285             END IF;
8286 
8287             --Update back the attributes column in pa_proj_elements and pa_proj_element_versions with actual data from source project
8288             UPDATE pa_proj_elements ppe1
8289             SET attribute15 = ( SELECT attribute15 FROM pa_proj_elements ppe2
8290                                  WHERE ppe2.project_id = p_src_project_id
8291                                    AND ppe2.proj_element_id = ppe1.attribute15 )
8292             WHERE project_id = p_dest_project_id ;
8293 
8294             UPDATE pa_proj_element_versions ppevs1
8295             SET attribute15 = ( SELECT attribute15 FROM pa_proj_element_versions ppevs2
8296                                  WHERE ppevs2.project_id = p_src_project_id
8297                                    AND ppevs2.element_version_id = ppevs1.attribute15 )
8298             WHERE project_id = p_dest_project_id ;
8299 
8300         END IF;
8301 
8302         x_return_status := FND_API.G_RET_STS_SUCCESS ;
8303 
8304         IF (p_commit = FND_API.G_TRUE) THEN
8305             COMMIT;
8306         END IF;
8307 
8308         RETURN;
8309     END IF;
8310 
8311     --Check whether atleast one WP version has been selected by the user or not
8312     OPEN  cur_min_one_wp_version_sel;
8313     FETCH cur_min_one_wp_version_sel INTO l_min_one_wp_ver_sel;
8314     CLOSE cur_min_one_wp_version_sel;
8315 
8316     --Check whether the financial tasks flag is checked or not
8317     OPEN  cur_get_flag('FN_FIN_TASKS_FLAG');
8318     FETCH cur_get_flag INTO l_fin_tasks_flag;
8319     CLOSE cur_get_flag;
8320 
8321     -------------------------------------------------------------------------------------------------------
8322     /**** THE FOLLOWING SECTION INSERTS WORKPLAN AND FINANCIAL STRUCTURES AND RELATED ATTRIBUTES INTO THE
8323           DESTINATION PROJECT ****/
8324     -------------------------------------------------------------------------------------------------------
8325 
8326     l_name := substr(p_dest_project_name, 1, 240);
8327 
8328     IF l_debug_mode = 'Y' THEN
8329         Pa_Debug.WRITE(G_PKG_NAME, 'Atleast one WP ver selected : '||l_min_one_wp_ver_sel, l_debug_level3);
8330         Pa_Debug.WRITE(G_PKG_NAME, 'Financial Tasks flag : '||l_fin_tasks_flag, l_debug_level3);
8331     END IF;
8332 
8333     --Copy workplan/financial structures into the destination project
8334     INSERT INTO pa_proj_elements(
8335      PROJ_ELEMENT_ID
8336     ,PROJECT_ID
8337     ,OBJECT_TYPE
8338     ,ELEMENT_NUMBER
8339     ,NAME
8340     ,DESCRIPTION
8341     ,STATUS_CODE
8342     ,WF_STATUS_CODE
8343     ,PM_SOURCE_CODE
8344     ,PM_SOURCE_REFERENCE
8345     ,CLOSED_DATE
8346     ,LOCATION_ID
8347     ,MANAGER_PERSON_ID
8348     ,CARRYING_OUT_ORGANIZATION_ID
8349     ,TYPE_ID
8350     ,PRIORITY_CODE
8351     ,CREATION_DATE
8352     ,CREATED_BY
8353     ,LAST_UPDATE_DATE
8354     ,LAST_UPDATED_BY
8355     ,LAST_UPDATE_LOGIN
8356     ,RECORD_VERSION_NUMBER
8357     ,REQUEST_ID
8358     ,PROGRAM_APPLICATION_ID
8359     ,PROGRAM_ID
8360     ,PROGRAM_UPDATE_DATE
8361     ,LINK_TASK_FLAG
8362     ,BASELINE_START_DATE
8363     ,BASELINE_FINISH_DATE
8364     ,PROGRESS_OUTDATED_FLAG
8365     ,ATTRIBUTE_CATEGORY
8366     ,ATTRIBUTE1
8367     ,ATTRIBUTE2
8368     ,ATTRIBUTE3
8369     ,ATTRIBUTE4
8370     ,ATTRIBUTE5
8371     ,ATTRIBUTE6
8372     ,ATTRIBUTE7
8373     ,ATTRIBUTE8
8374     ,ATTRIBUTE9
8375     ,ATTRIBUTE10
8376     ,ATTRIBUTE11
8377     ,ATTRIBUTE12
8378     ,ATTRIBUTE13
8379     ,ATTRIBUTE14
8380     ,ATTRIBUTE15
8381     ,PARENT_STRUCTURE_ID
8382     ,TYPE_CODE
8383     ,INC_PROJ_PROGRESS_FLAG
8384     ,WQ_ITEM_CODE
8385     ,WQ_UOM_CODE
8386     ,WQ_ACTUAL_ENTRY_CODE
8387     ,TASK_PROGRESS_ENTRY_PAGE_ID
8388     ,BASELINE_DURATION
8389     ,PHASE_CODE
8390     ,PHASE_VERSION_ID
8391     ,PROGRESS_WEIGHT
8392     ,BASE_PERCENT_COMP_DERIV_CODE
8393     ,FUNCTION_CODE
8394     ,ENABLE_WF_FLAG
8395     ,WF_ITEM_TYPE
8396     ,WF_PROCESS
8397     ,WF_START_LEAD_DAYS
8398     ,source_object_id
8399     ,source_object_type
8400     )
8401     SELECT
8402      pa_tasks_s.nextval
8403     ,p_dest_project_id
8404     ,ppe.object_type
8405     ,pa_tasks_s.nextval     --Set element_number same as proj_element_id
8406     ,l_name
8407     ,ppe.DESCRIPTION
8408     ,ppe.STATUS_CODE
8409     ,ppe.WF_STATUS_CODE
8410     ,NULL                   --bug 3810263 replacing ppe.PM_SOURCE_CODE
8411     ,NULL                   --bug 3810263 replacing ppe.PM_SOURCE_REFERENCE
8412     ,ppe.CLOSED_DATE
8413     ,ppe.LOCATION_ID
8414     ,ppe.MANAGER_PERSON_ID
8415     ,ppe.CARRYING_OUT_ORGANIZATION_ID
8416     ,ppe.TYPE_ID
8417     ,ppe.PRIORITY_CODE
8418     ,SYSDATE
8419     ,l_user_id
8420     ,SYSDATE
8421     ,l_user_id
8422     ,l_login_id
8423     ,ppe.RECORD_VERSION_NUMBER
8424     ,ppe.REQUEST_ID
8425     ,ppe.PROGRAM_APPLICATION_ID
8426     ,ppe.PROGRAM_ID
8427     ,ppe.PROGRAM_UPDATE_DATE
8428     ,ppe.LINK_TASK_FLAG
8429     ,ppe.BASELINE_START_DATE
8430     ,ppe.BASELINE_FINISH_DATE
8431     ,'N'    --,ppe.progress_outdated_flag
8432     ,ppe.ATTRIBUTE_CATEGORY
8433     ,ppe.ATTRIBUTE1
8434     ,ppe.ATTRIBUTE2
8435     ,ppe.ATTRIBUTE3
8436     ,ppe.ATTRIBUTE4
8437     ,ppe.ATTRIBUTE5
8438     ,ppe.ATTRIBUTE6
8439     ,ppe.ATTRIBUTE7
8440     ,ppe.ATTRIBUTE8
8441     ,ppe.ATTRIBUTE9
8442     ,ppe.ATTRIBUTE10
8443     ,ppe.ATTRIBUTE11
8444     ,ppe.ATTRIBUTE12
8445     ,ppe.ATTRIBUTE13
8446     ,ppe.ATTRIBUTE14
8447     ,ppe.proj_element_id    --attribute 15 is used to store old structure id to identify the structure type
8448     ,null                   --parent_structure_id is NULL in case of structures
8449     ,ppe.TYPE_CODE
8450     ,ppe.INC_PROJ_PROGRESS_FLAG
8451     ,ppe.WQ_ITEM_CODE
8452     ,ppe.WQ_UOM_CODE
8453     ,ppe.WQ_ACTUAL_ENTRY_CODE
8454     ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
8455     ,ppe.BASELINE_DURATION
8456     ,ppe.PHASE_CODE
8457     ,ppe.PHASE_VERSION_ID
8458     ,ppe.PROGRESS_WEIGHT
8459     ,ppe.BASE_PERCENT_COMP_DERIV_CODE
8460     ,ppe.FUNCTION_CODE
8461     ,ppe.ENABLE_WF_FLAG    --'N'  Bug 3616964
8462     ,ppe.WF_ITEM_TYPE
8463     ,ppe.WF_PROCESS
8464     ,ppe.WF_START_LEAD_DAYS
8465     ,p_dest_project_id
8466     ,'PA_PROJECTS'
8467     FROM pa_proj_elements ppe
8468     WHERE ppe.project_id = p_src_project_id
8469     AND   ppe.proj_element_id IN
8470        ( SELECT ppe2.proj_element_id
8471            FROM  pa_proj_elements ppe2
8472                 ,pa_proj_structure_types ppst
8473                 ,pa_structure_types pst
8474           WHERE ppe2.project_id = p_src_project_id
8475             AND ppe2.object_type = 'PA_STRUCTURES'
8476             AND ppe2.proj_element_id = ppst.proj_element_id
8477             AND ppst.structure_type_id = pst.structure_type_id
8478             AND pst.structure_type IN ('WORKPLAN','FINANCIAL') );
8479     --DONOT use the fn call PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y' in above insert
8480     --Inner query is necessary rather than a straight join of three tables in the outer query bec in case of shared,
8481     --the same record from source project is returned twice.
8482 
8483     SELECT meaning INTO l_suffix
8484     FROM pa_lookups
8485     WHERE lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
8486     AND   lookup_code = 'WORKPLAN';
8487 
8488     --If Split and Workplan enabled
8489     IF 'N' = l_shared AND 'Y' = l_workplan_enabled THEN
8490         --Update the name of the WP structure record
8491         UPDATE pa_proj_elements ppe
8492         SET    name = substr(p_dest_project_name||l_append||l_suffix, 1, 240)
8493         WHERE project_id = p_dest_project_id
8494         AND   object_type = 'PA_STRUCTURES'
8495         AND   EXISTS ( SELECT proj_element_id FROM pa_proj_structure_types
8496                        WHERE proj_element_id = ppe.proj_element_id
8497                        AND   structure_type_id = 1 );
8498     END IF;
8499 
8500     --Copy entries in pa_proj_structure_types for financial and workplan structures
8501     INSERT INTO PA_PROJ_STRUCTURE_TYPES(
8502      PROJ_STRUCTURE_TYPE_ID
8503     ,PROJ_ELEMENT_ID
8504     ,STRUCTURE_TYPE_ID
8505     ,CREATION_DATE
8506     ,CREATED_BY
8507     ,LAST_UPDATE_DATE
8508     ,LAST_UPDATED_BY
8509     ,LAST_UPDATE_LOGIN
8510     ,RECORD_VERSION_NUMBER )
8511     SELECT
8512      pa_proj_structure_types_s.nextval
8513     ,ppe.proj_element_id
8514     ,ppst.structure_type_id            --structure type
8515     ,sysdate
8516     ,l_user_id
8517     ,sysdate
8518     ,l_user_id
8519     ,l_login_id
8520     ,1
8521     FROM pa_proj_elements ppe,
8522          pa_proj_structure_types ppst
8523     WHERE ppe.project_id = p_dest_project_id
8524     AND   ppe.attribute15 IN        --DoNot use PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.attribute15 ) = 'Y'
8525        ( SELECT ppe2.proj_element_id
8526            FROM  pa_proj_elements ppe2
8527                 ,pa_proj_structure_types ppst
8528                 ,pa_structure_types pst
8529           WHERE ppe2.project_id = p_src_project_id
8530             AND ppe2.object_type = 'PA_STRUCTURES'
8531             AND ppe2.proj_element_id = ppst.proj_element_id
8532             AND ppst.structure_type_id = pst.structure_type_id
8533             AND pst.structure_type IN ('WORKPLAN','FINANCIAL') )
8534     AND   ppe.attribute15 = ppst.proj_element_id ; --proj_element_id is unique in pa_proj_structure_types
8535 
8536     --Copy workplan attributes for financial and workplan structures
8537     INSERT INTO pa_proj_workplan_attr(
8538      PROJ_ELEMENT_ID
8539     ,PROJECT_ID
8540     ,LAST_UPDATE_DATE
8541     ,LAST_UPDATED_BY
8542     ,CREATION_DATE
8543     ,CREATED_BY
8544     ,WP_APPROVAL_REQD_FLAG
8545     ,WP_AUTO_PUBLISH_FLAG
8546     ,WP_DEFAULT_DISPLAY_LVL
8547     ,WP_ENABLE_VERSION_FLAG
8548     ,AUTO_PUB_UPON_CREATION_FLAG
8549     ,AUTO_SYNC_TXN_DATE_FLAG
8550     ,WP_APPROVER_SOURCE_ID
8551     ,WP_APPROVER_SOURCE_TYPE
8552     ,RECORD_VERSION_NUMBER
8553     ,LAST_UPDATE_LOGIN
8554     ,TXN_DATE_SYNC_BUF_DAYS
8555     ,LIFECYCLE_VERSION_ID
8556     ,CURRENT_PHASE_VERSION_ID
8557     ,SCHEDULE_THIRD_PARTY_FLAG
8558     ,ALLOW_LOWEST_TSK_DEP_FLAG
8559 --    ,PROGRAM_FLAG
8560     ,AUTO_ROLLUP_SUBPROJ_FLAG
8561     ,THIRD_PARTY_SCHEDULE_CODE
8562     ,source_object_id
8563     ,source_object_type
8564     -- gboomina added for bug 8586393 - start
8565     ,use_task_schedule_flag
8566     -- gboomina added for bug 8586393 - end
8567     )
8568     SELECT
8569      ppe.PROJ_ELEMENT_ID
8570     ,ppe.PROJECT_ID
8571     ,SYSDATE
8572     ,l_user_id
8573     ,SYSDATE
8574     ,l_user_id
8575     ,ppwa.WP_APPROVAL_REQD_FLAG
8576     ,ppwa.WP_AUTO_PUBLISH_FLAG
8577     ,ppwa.WP_DEFAULT_DISPLAY_LVL
8578     ,ppwa.WP_ENABLE_VERSION_FLAG
8579     ,ppwa.AUTO_PUB_UPON_CREATION_FLAG
8580     ,ppwa.AUTO_SYNC_TXN_DATE_FLAG
8581     ,ppwa.WP_APPROVER_SOURCE_ID
8582     ,ppwa.WP_APPROVER_SOURCE_TYPE
8583     ,ppwa.RECORD_VERSION_NUMBER
8584     ,l_login_id
8585     ,ppwa.TXN_DATE_SYNC_BUF_DAYS
8586     ,ppwa.LIFECYCLE_VERSION_ID
8587     ,ppwa.CURRENT_PHASE_VERSION_ID
8588     ,ppwa.SCHEDULE_THIRD_PARTY_FLAG
8589     ,ppwa.ALLOW_LOWEST_TSK_DEP_FLAG
8590 --    ,ppwa.PROGRAM_FLAG
8591     ,ppwa.AUTO_ROLLUP_SUBPROJ_FLAG
8592     ,ppwa.THIRD_PARTY_SCHEDULE_CODE
8593     ,ppe.PROJECT_ID
8594     ,'PA_PROJECTS'
8595     -- gboomina added for bug 8586393 - start
8596     ,ppwa.use_task_schedule_flag
8597     -- gboomina added for bug 8586393 - end
8598     FROM pa_proj_elements ppe,
8599          pa_proj_workplan_attr ppwa
8600     WHERE ppwa.project_id = p_src_project_id
8601     AND   ppe.attribute15 = ppwa.proj_element_id
8602     AND   PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y'
8603     AND   ppe.project_id = p_dest_project_id   --bug 3939786
8604     ;
8605 
8606     --Copy progress attributes for financial and workplan structures
8607     INSERT INTO pa_proj_progress_attr(
8608      PROJ_PROGRESS_ATTR_ID
8609     ,OBJECT_TYPE
8610     ,OBJECT_ID
8611     ,LAST_UPDATE_DATE
8612     ,LAST_UPDATED_BY
8613     ,CREATION_DATE
8614     ,CREATED_BY
8615     ,LAST_UPDATE_LOGIN
8616     ,PROJECT_ID
8617     ,PROGRESS_CYCLE_ID
8618     ,WQ_ENABLE_FLAG
8619     ,REMAIN_EFFORT_ENABLE_FLAG
8620     ,PERCENT_COMP_ENABLE_FLAG
8621     ,NEXT_PROGRESS_UPDATE_DATE
8622     ,RECORD_VERSION_NUMBER
8623     ,TASK_WEIGHT_BASIS_CODE
8624     ,ALLOW_COLLAB_PROG_ENTRY
8625     ,ALLOW_PHY_PRCNT_CMP_OVERRIDES
8626     ,STRUCTURE_TYPE
8627     )
8628     SELECT
8629      PA_PROJ_PROGRESS_ATTR_S.nextval
8630     ,ppe.OBJECT_TYPE
8631     ,ppe.proj_element_ID
8632     ,sysdate
8633     ,l_user_id
8634     ,SYSDATE
8635     ,l_user_id
8636     ,l_login_id
8637     ,p_dest_project_id
8638     ,pppa.PROGRESS_CYCLE_ID
8639     ,pppa.WQ_ENABLE_FLAG
8640     ,pppa.REMAIN_EFFORT_ENABLE_FLAG
8641     ,pppa.PERCENT_COMP_ENABLE_FLAG
8642     ,pppa.NEXT_PROGRESS_UPDATE_DATE
8643     ,pppa.RECORD_VERSION_NUMBER
8644     ,pppa.TASK_WEIGHT_BASIS_CODE
8645     ,pppa.ALLOW_COLLAB_PROG_ENTRY
8646     ,pppa.ALLOW_PHY_PRCNT_CMP_OVERRIDES
8647     ,pppa.STRUCTURE_TYPE
8648     FROM pa_proj_progress_attr pppa,
8649          pa_proj_elements ppe
8650     WHERE ppe.project_id = p_dest_project_id
8651     AND   PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y'
8652     AND   ppe.attribute15 = pppa.object_id
8653     AND   pppa.project_id = p_src_project_id
8654     AND   pppa.object_type = 'PA_STRUCTURES' ;
8655 
8656     IF l_debug_mode = 'Y' THEN
8657         Pa_Debug.WRITE(G_PKG_NAME, 'After inserting WP/FIN structures and related attributes', l_debug_level3);
8658     END IF;
8659 
8660     ---------------------------------------------------------------------------------------------------------
8661     /**** THE FOLLOWING SECTION COPIES/INSERTS WORKPLAN VERSIONS AND TASKS INTO THE DESTINATION PROJECT ****/
8662     ---------------------------------------------------------------------------------------------------------
8663 --IF 'ATLEAST ONE WP VER IS SELECTED' FOR COPYING THEN
8664 --  Copy selected version(s) and tasks belonging to these version(s)
8665 --  Call API to sync up pa_tasks with pa_proj_elements in case of SHARED structure
8666 --ELSE (if no WP ver selected for copying)
8667 --  IF 'SHARED' AND 'FINANCIAL TASKS FLAG IS CHECKED' THEN
8668 --      Copy financial structure version in the source project and tasks belonging to this version
8669 --  ENF IF;
8670 --  IF ('SHARED' AND 'FINANCAIL TASKS FLAG IS NOT CHECKED') OR (SPLIT AND WORKPLAN ENABLED) THEN
8671 --      Insert new (default) structure version for WP
8672 --  END IF;
8673 --END IF;
8674 
8675     --Get the destination project's wp structure id
8676     OPEN  cur_get_dest_structure_id('WORKPLAN');
8677     FETCH cur_get_dest_structure_id INTO l_dest_wp_structure_id, l_src_wp_structure_id;
8678     CLOSE cur_get_dest_structure_id;
8679 
8680     --Get the destination project's financial structure id
8681     OPEN  cur_get_dest_structure_id('FINANCIAL');
8682     FETCH cur_get_dest_structure_id INTO l_dest_fn_structure_id, l_src_fn_structure_id;
8683     CLOSE cur_get_dest_structure_id;
8684 
8685     --Get the publish person id
8686     OPEN cur_get_person_id(FND_GLOBAL.USER_ID);
8687     FETCH cur_get_person_id INTO l_publish_person_id;
8688         IF cur_get_person_id%NOTFOUND THEN
8689             l_publish_person_id := NULL;
8690         END IF;
8691     CLOSE cur_get_person_id;
8692 
8693      --Bug 3387963 - Added to get the cursor values
8694     OPEN  cur_get_carrying_out_org;
8695     FETCH cur_get_carrying_out_org INTO l_old_proj_org_id, l_new_proj_org_id;
8696     CLOSE cur_get_carrying_out_org;
8697 
8698 
8699 
8700     --If there is atleast one WP version selected for copying
8701     IF 'Y' = nvl(l_min_one_wp_ver_sel,'N') THEN
8702 
8703         IF l_debug_mode = 'Y' THEN
8704             Pa_Debug.WRITE(G_PKG_NAME, 'Inserting versions and tasks for selected WP version(s)', l_debug_level3);
8705         END IF;
8706 
8707         --Copy SELECTED workplan versions
8708         INSERT INTO pa_proj_element_versions(
8709          ELEMENT_VERSION_ID
8710         ,PROJ_ELEMENT_ID
8711         ,OBJECT_TYPE
8712         ,PROJECT_ID
8713         ,PARENT_STRUCTURE_VERSION_ID
8714         ,DISPLAY_SEQUENCE
8715         ,WBS_LEVEL
8716         ,WBS_NUMBER
8717         ,CREATION_DATE
8718         ,CREATED_BY
8719         ,LAST_UPDATE_DATE
8720         ,LAST_UPDATED_BY
8721         ,LAST_UPDATE_LOGIN
8722         ,RECORD_VERSION_NUMBER
8723         ,attribute15          --This column stores the stucture version id in the src project, to be used to create relationships.
8724         ,ATTRIBUTE_CATEGORY
8725         ,ATTRIBUTE1
8726         ,ATTRIBUTE2
8727         ,ATTRIBUTE3
8728         ,ATTRIBUTE4
8729         ,ATTRIBUTE5
8730         ,ATTRIBUTE6
8731         ,ATTRIBUTE7
8732         ,ATTRIBUTE8
8733         ,ATTRIBUTE9
8734         ,ATTRIBUTE10
8735         ,ATTRIBUTE11
8736         ,ATTRIBUTE12
8737         ,ATTRIBUTE13
8738         ,ATTRIBUTE14
8739         ,TASK_UNPUB_VER_STATUS_CODE
8740         ,FINANCIAL_TASK_FLAG
8741         ,PRG_GROUP
8742         ,PRG_LEVEL
8743         ,PRG_COUNT
8744        ,source_object_id
8745        ,source_object_type
8746         )
8747         SELECT
8748          pa_proj_element_versions_s.nextval
8749         ,l_dest_wp_structure_id
8750         ,ppev.object_type
8751         ,p_dest_project_id
8752         ,pa_proj_element_versions_s.nextval --nextval occuring twice in the same select returns the same value
8753         ,ppev.DISPLAY_SEQUENCE
8754         ,ppev.WBS_LEVEL
8755         ,ppev.WBS_NUMBER
8756         ,SYSDATE                    ------CREATION_DATE
8757         ,l_user_id                  ------CREATED_BY
8758         ,SYSDATE                    ------LAST_UPDATE_DATE
8759         ,l_user_id                  ------LAST_UPDATED_BY
8760         ,l_login_id                 ------LAST_UPDATE_LOGIN
8761         ,ppev.RECORD_VERSION_NUMBER ------RECORD_VERSION_NUMBER
8762         ,ppev.element_version_id
8763         ,ppev.ATTRIBUTE_CATEGORY
8764         ,ppev.ATTRIBUTE1
8765         ,ppev.ATTRIBUTE2
8766         ,ppev.ATTRIBUTE3
8767         ,ppev.ATTRIBUTE4
8768         ,ppev.ATTRIBUTE5
8769         ,ppev.ATTRIBUTE6
8770         ,ppev.ATTRIBUTE7
8771         ,ppev.ATTRIBUTE8
8772         ,ppev.ATTRIBUTE9
8773         ,ppev.ATTRIBUTE10
8774         ,ppev.ATTRIBUTE11
8775         ,ppev.ATTRIBUTE12
8776         ,ppev.ATTRIBUTE13
8777         ,ppev.ATTRIBUTE14
8778         ,ppev.TASK_UNPUB_VER_STATUS_CODE
8779         ,ppev.FINANCIAL_TASK_FLAG
8780         ,NULL --bug 4261419
8781         ,NULL --bug 4261419
8782         ,NULL --bug 4261419
8783     ,p_dest_project_id
8784     ,'PA_PROJECTS'
8785         FROM pa_proj_element_versions ppev,
8786              pa_project_copy_options_tmp ppcot
8787         WHERE ppcot.context = 'WORKPLAN'
8788          AND  ppev.element_version_id = ppcot.version_id
8789          AND  ppev.project_id = p_src_project_id
8790          AND  ppev.object_type = 'PA_STRUCTURES' ;
8791 
8792         /** THE FOLLOWING SECTION OF THE CODE IDENTIFIES THE CURRENT_WORKING VERSION IN THE DESTINATION PROJECT **/
8793 
8794         --IF current_working version from source is selected and is not published upon creation
8795         --      --> Copy the same as current_working in the destination project
8796         --IF current_working version from the source is not selected or it is publish upon creation
8797         --      --> Copy the lastest updated working WP version that is selected and is not publish upon creation
8798         --IF no working version is selected or the single selected working version is publish upon creation
8799         --      --> Copy the latest published version as current working, if it is selected and is not publish upon creation
8800         --      --> Else, copy the next latest published version which is selected and is not PUC, as current working
8801         IF 'Y' = l_versioning_enabled AND 'N' = p_dest_template_flag THEN
8802             DECLARE
8803 
8804             --This cursor gets the WP version which is selected for Publish Upon Creation
8805             CURSOR get_puc_version_id IS
8806             SELECT version_id
8807             FROM   pa_project_copy_options_tmp ppcot
8808             WHERE context = 'WORKPLAN'
8809             AND   flag = 'Y';
8810 
8811             --Gets the current working version of the source project ONLY if it has been SELECTED for copying
8812             CURSOR get_current_working_selected IS
8813             SELECT ppevs.element_version_id
8814             FROM pa_proj_elem_ver_structure ppevs,
8815                  pa_project_copy_options_tmp ppcot
8816             WHERE ppevs.current_working_flag = 'Y'
8817             AND   ppevs.status_code = 'STRUCTURE_WORKING'
8818             AND   ppevs.project_id = p_src_project_id
8819             AND   ppevs.element_version_id = ppcot.version_id
8820             AND   ppcot.context = 'WORKPLAN' ;
8821 
8822             --This cursor gets the LATEST UPDATED WORKING version from the src project, which is SELECTED for
8823             --copying and is NOT Publish Upon Creation
8824             CURSOR get_latest_working_version IS
8825             SELECT element_version_id FROM
8826             ( SELECT ppevs.element_version_id
8827               FROM pa_proj_elem_ver_structure ppevs,
8828                    pa_project_copy_options_tmp ppcot
8829               WHERE ppevs.element_version_id = ppcot.version_id
8830               AND   ppevs.project_id  = p_src_project_id
8831               AND   ppevs.status_code = 'STRUCTURE_WORKING'
8832               AND   ppcot.context = 'WORKPLAN'
8833               AND   ppcot.flag = 'N'
8834               ORDER BY ppevs.last_update_date desc)
8835             WHERE rownum = 1;
8836 
8837             --Gets the LATEST PUBLISHED VERSION from the source project, which is SELECTED for copying and is
8838             --NOT Publish Upon Creation
8839             CURSOR get_latest_published IS
8840             SELECT ppevs.element_version_id
8841             FROM pa_proj_elem_ver_structure ppevs,
8842                  pa_project_copy_options_tmp ppcot
8843             WHERE ppevs.latest_eff_published_flag = 'Y'
8844             AND   ppevs.status_code = 'STRUCTURE_PUBLISHED'
8845             AND   ppevs.element_version_id = ppcot.version_id
8846             AND   ppcot.context = 'WORKPLAN'
8847             AND   ppevs.project_id= p_src_project_id     --bug 4868867 sql id = 14909148
8848             AND   ppcot.flag = 'N' ;
8849 
8850             --Gets the LAST PUBLISHED version from the source project, which is SELECTED for copying but is
8851             --NOT selected for PUBLISH UPON CREATION
8852             CURSOR get_last_published IS
8853             SELECT element_version_id FROM
8854             ( SELECT ppevs.element_version_id
8855               FROM pa_proj_elem_ver_structure ppevs,
8856                    pa_project_copy_options_tmp ppcot
8857               WHERE ppevs.element_version_id = ppcot.version_id
8858               AND   ppevs.status_code = 'STRUCTURE_PUBLISHED'
8859               AND   ppevs.project_id = p_src_project_id
8860               AND   ppcot.context = 'WORKPLAN'
8861               AND   ppcot.flag = 'N'
8862               ORDER BY ppevs.published_date DESC )
8863             WHERE ROWNUM = 1;
8864 
8865             --l_puc_version_id           NUMBER(15); Bug 3916763 : Moved this variable outside so that it can be used ahead
8866             --l_current_working_selected NUMBER(15) := NULL; Bug 3916763 : Moved this variable outside so that it can be used ahead
8867 
8868             BEGIN
8869 
8870                 --Fetch the version which is selected for PUBLISH UPON CREATION
8871                 OPEN  get_puc_version_id;
8872                 FETCH get_puc_version_id INTO l_puc_version_id;
8873                 CLOSE get_puc_version_id;
8874 
8875                 --Fetch the CURRENT WORKING version, if it has been SELECTED for copying
8876                 OPEN  get_current_working_selected;
8877                 FETCH get_current_working_selected INTO l_current_working_selected;
8878 
8879         IF l_debug_mode = 'Y' THEN
8880             pa_debug.write(G_PKG_NAME, 'l_puc_version_id='||l_puc_version_id, l_debug_level3);
8881             pa_debug.write(G_PKG_NAME, 'l_current_working_selected='||l_current_working_selected, l_debug_level3);
8882         END IF;
8883 
8884 
8885                 --If the CURRENT WORKING version is SELECTED for copying and is NOT Publish Upon Creatiion
8886                 IF l_current_working_selected IS NOT NULL AND l_current_working_selected <> nvl(l_puc_version_id,-88) THEN
8887                     l_cw_version_id := l_current_working_selected;
8888                 ELSE
8889                     OPEN  get_latest_working_version;
8890                     FETCH get_latest_working_version INTO l_cw_version_id;
8891                     IF get_latest_working_version%NOTFOUND THEN
8892                         OPEN  get_latest_published;
8893                         FETCH get_latest_published INTO l_cw_version_id;
8894                         IF get_latest_published %NOTFOUND THEN
8895                             OPEN  get_last_published;
8896                             FETCH get_last_published INTO l_cw_version_id;
8897                             CLOSE get_last_published;
8898                         END IF;
8899                         CLOSE get_latest_published;
8900                     END IF;
8901                     CLOSE get_latest_working_version;
8902                 END IF;
8903                 CLOSE get_current_working_selected;
8904 
8905         IF l_debug_mode = 'Y' THEN
8906             pa_debug.write(G_PKG_NAME, 'l_cw_version_id='||l_cw_version_id, l_debug_level3);
8907         END IF;
8908             END;
8909         END IF; --IF versioning is enabled
8910         /** END OF CODE TO DETERMINE CURRENT WORKING VERSION IN DESTINATION PROJECT **/
8911 
8912         IF l_debug_mode = 'Y' THEN
8913             Pa_Debug.WRITE(G_PKG_NAME, 'Source version to be set as current working in dest project : '||l_cw_version_id,
8914                            l_debug_level3);
8915             Pa_Debug.WRITE(G_PKG_NAME, 'Printing  l_dest_wp_structure_id: '||l_dest_wp_structure_id,
8916                            l_debug_level3);
8917         END IF;
8918 
8919 
8920         --Loop for selected wp versions
8921         FOR rec_dest_wp_struc_versions IN cur_get_dest_wp_struc_versions(l_dest_wp_structure_id) LOOP
8922 
8923             IF rec_dest_wp_struc_versions.flag = 'Y' THEN
8924             --In case of versioning disabled, publish upon creation flag would always be 'Y'
8925                 l_dest_status_code := 'STRUCTURE_PUBLISHED';
8926                 l_dest_latest_eff_pub_flag  := 'Y';
8927                 l_dest_current_working_flag := 'N';
8928                 --We need to make a working copy of the published version in SHARED case and when
8929                 --versioning is enabled, becuase in SHARED, it is not possible to create a WORKING copy from
8930                 --a publshied version
8931 
8932                 --Bug 7270458 Need to create a workign version if auto publish is enabled for versioning
8933                 --enabled workplan.
8934                 --IF 'Y' = l_shared AND 'Y' = l_versioning_enabled THEN
8935                 IF 'Y' = l_versioning_enabled THEN  --Bug 7270458
8936                     l_shared_make_working_copy := rec_dest_wp_struc_versions.element_version_id;
8937                 END IF;
8938         --3916763 Begin
8939         l_submit_wf_required := 'N';
8940 
8941         IF l_debug_mode = 'Y' THEN
8942             pa_debug.write(G_PKG_NAME, 'l_workplan_enabled='||l_workplan_enabled, l_debug_level3);
8943             pa_debug.write(G_PKG_NAME, 'l_versioning_enabled='||l_versioning_enabled, l_debug_level3);
8944             pa_debug.write(G_PKG_NAME, 'l_min_one_wp_ver_sel='||l_min_one_wp_ver_sel, l_debug_level3);
8945             pa_debug.write(G_PKG_NAME, 'l_cw_version_id='||l_cw_version_id, l_debug_level3);
8946             pa_debug.write(G_PKG_NAME, 'rec_dest_wp_struc_versions.attribute15='||rec_dest_wp_struc_versions.attribute15, l_debug_level3);
8947             pa_debug.write(G_PKG_NAME, 'l_shared='||l_shared, l_debug_level3);
8948             pa_debug.write(G_PKG_NAME, 'p_dest_template_flag='||p_dest_template_flag, l_debug_level3);
8949         END IF;
8950 
8951         IF NVL(l_workplan_enabled,'N') = 'Y' AND nvl(l_versioning_enabled,'N') = 'Y' AND nvl(l_min_one_wp_ver_sel,'N') = 'Y' THEN
8952             OPEN  c_get_approval_options;
8953             FETCH c_get_approval_options INTO l_wp_approval_reqd_flag, l_wp_auto_publish_flag,l_wp_approver_source_id;
8954             CLOSE c_get_approval_options;
8955 
8956             IF l_debug_mode = 'Y' THEN
8957                pa_debug.write(G_PKG_NAME, 'l_wp_approval_reqd_flag='||l_wp_approval_reqd_flag, l_debug_level3);
8958                pa_debug.write(G_PKG_NAME, 'l_wp_auto_publish_flag='||l_wp_auto_publish_flag, l_debug_level3);
8959                pa_debug.write(G_PKG_NAME, 'l_wp_approver_source_id='||l_wp_approver_source_id, l_debug_level3);
8960                pa_debug.write(G_PKG_NAME, 'fnd_global.employee_id='||fnd_global.employee_id, l_debug_level3);
8961             END IF;
8962 
8963             IF NVL(l_wp_approval_reqd_flag,'N') <> 'N' THEN
8964               IF nvl(fnd_global.employee_id,-999) <> NVL(l_wp_approver_source_id,-999) THEN
8965               -- 3916763 : Use fnd_global.employee_id instead of fnd_global.party_id
8966                 l_submit_wf_required := 'Y';
8967                 l_dest_status_code := 'STRUCTURE_WORKING';
8968                 l_dest_latest_eff_pub_flag  := 'N';
8969                 IF l_current_working_selected = nvl(l_puc_version_id,-88) OR 'Y' = l_shared OR 'Y' = p_dest_template_flag THEN
8970                     l_dest_current_working_flag := 'Y';
8971                 ELSE
8972                     l_dest_current_working_flag := 'N';
8973                 END IF;
8974                 l_shared_make_working_copy  := null;
8975                 l_submit_wf_str_version_id  := rec_dest_wp_struc_versions.element_version_id;
8976                 l_submit_wf_str_id := l_dest_wp_structure_id;
8977               END IF;
8978             END IF;
8979         END IF;
8980         --3916763 End
8981 
8982         --bug 3907862, start
8983             OPEN get_published_ver_num(p_dest_project_id, l_dest_wp_structure_id);
8984             FETCH get_published_ver_num INTO l_struct_version_number;
8985             CLOSE get_published_ver_num;
8986         IF l_debug_mode = 'Y' THEN
8987                Pa_Debug.WRITE(G_PKG_NAME, 'After Getting published version l_struct_version_number: '||l_struct_version_number,
8988                l_debug_level3);
8989         END If;
8990         --bug 3907862, end
8991 
8992         ELSE
8993             --In case of creating template, Publish Upon Creation flag is always 'N'
8994                 l_dest_status_code := 'STRUCTURE_WORKING';
8995                 l_dest_latest_eff_pub_flag  := 'N';
8996                 IF l_cw_version_id = rec_dest_wp_struc_versions.attribute15 OR 'Y' = l_shared OR 'Y' = p_dest_template_flag THEN
8997                     l_dest_current_working_flag := 'Y';
8998                 ELSE
8999                     l_dest_current_working_flag := 'N';
9000                 END IF;
9001 
9002         --bug 3907862, start
9003             OPEN get_working_ver_num(p_dest_project_id, l_dest_wp_structure_id);
9004             FETCH get_working_ver_num INTO l_struct_version_number;
9005             CLOSE get_working_ver_num;
9006         IF l_debug_mode = 'Y' THEN
9007             Pa_Debug.WRITE(G_PKG_NAME, 'After Getting working version l_struct_version_number: '||l_struct_version_number,
9008                              l_debug_level3);
9009         END If;
9010         --bug 3907862, end
9011 
9012         END IF;
9013 
9014             IF l_debug_mode = 'Y' THEN
9015                 Pa_Debug.WRITE(G_PKG_NAME, 'Creating version : '||rec_dest_wp_struc_versions.element_version_id,
9016                                l_debug_level3);
9017              END IF;
9018 
9019 
9020             INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
9021              PEV_STRUCTURE_ID
9022             ,ELEMENT_VERSION_ID
9023             ,VERSION_NUMBER
9024             ,NAME
9025             ,PROJECT_ID
9026             ,PROJ_ELEMENT_ID
9027             ,DESCRIPTION
9028             ,EFFECTIVE_DATE
9029             ,PUBLISHED_DATE
9030             ,PUBLISHED_BY_PERSON_ID
9031             ,CURRENT_BASELINE_DATE
9032             ,CURRENT_FLAG
9033             ,CURRENT_BASELINE_PERSON_ID
9034             ,ORIGINAL_BASELINE_DATE
9035             ,ORIGINAL_FLAG
9036             ,ORIGINAL_BASELINE_PERSON_ID
9037             ,LOCK_STATUS_CODE
9038             ,LOCKED_BY_PERSON_ID
9039             ,LOCKED_DATE
9040             ,STATUS_CODE
9041             ,WF_STATUS_CODE
9042             ,LATEST_EFF_PUBLISHED_FLAG
9043             ,RECORD_VERSION_NUMBER
9044             ,WBS_RECORD_VERSION_NUMBER
9045             ,CREATION_DATE
9046             ,CREATED_BY
9047             ,LAST_UPDATE_DATE
9048             ,LAST_UPDATED_BY
9049             ,LAST_UPDATE_LOGIN
9050             ,change_reason_code
9051             ,PROCESS_UPDATE_WBS_FLAG
9052             ,current_working_flag
9053            ,source_object_id
9054            ,source_object_type
9055             )
9056             SELECT
9057              pa_proj_elem_ver_structure_s.nextval
9058             ,rec_dest_wp_struc_versions.element_version_id
9059             --,ppevs.version_number   --bug 3907862, insert the new version number, intead of coying the old.
9060         ,l_struct_version_number
9061             ,ppevs.name
9062             ,p_dest_project_id
9063             ,ppe.proj_element_id
9064             ,ppevs.DESCRIPTION
9065             ,ppevs.EFFECTIVE_DATE
9066             ,decode(l_dest_status_code, 'STRUCTURE_PUBLISHED', sysdate, to_date(NULL))
9067             ,decode(l_dest_status_code, 'STRUCTURE_PUBLISHED', l_publish_person_id, NULL)
9068             ,decode(l_dest_latest_eff_pub_flag, 'Y', trunc(sysdate), to_date(NULL))
9069             ,l_dest_latest_eff_pub_flag
9070             ,decode(l_dest_latest_eff_pub_flag, 'Y', l_publish_person_id, NULL)
9071             ,decode(l_dest_latest_eff_pub_flag, 'Y', trunc(sysdate), to_date(NULL))
9072             ,l_dest_latest_eff_pub_flag
9073             ,decode(l_dest_latest_eff_pub_flag, 'Y', l_publish_person_id, NULL)
9074             ,'UNLOCKED'
9075             ,null
9076             ,null
9077             ,l_dest_status_code
9078             ,ppevs.WF_STATUS_CODE
9079             ,l_dest_latest_eff_pub_flag  --If version is 'publish upon creation', it is the latest eff published version
9080                                          --In case of version disabled, it'll always be 'publish upon creation'
9081             ,ppevs.RECORD_VERSION_NUMBER
9082             ,ppevs.WBS_RECORD_VERSION_NUMBER
9083             ,SYSDATE
9084             ,l_user_id
9085             ,SYSDATE
9086             ,l_user_id
9087             ,l_login_id
9088             ,ppevs.change_reason_code
9089             ,ppevs.process_update_wbs_flag
9090             ,decode(l_versioning_enabled,'N','Y',l_dest_current_working_flag)
9091                     --If versioning is disabled, both LATEST PUBLISHED AND CURRENT WORKING FLAGS are 'Y'
9092         ,p_dest_project_id
9093         ,'PA_PROJECTS'
9094             FROM pa_proj_elem_ver_structure ppevs,
9095                  pa_proj_elements ppe
9096             WHERE ppevs.project_id = p_src_project_id
9097             AND   ppevs.element_version_id = rec_dest_wp_struc_versions.attribute15
9098             AND   ppevs.proj_element_id = ppe.attribute15
9099             AND   ppe.proj_element_id = l_dest_wp_structure_id;
9100 
9101             -- gboomina added for bug 9659119 - start
9102             -- Create workflow notification for published version during online project creation
9103             if (l_dest_status_code = 'STRUCTURE_PUBLISHED') then
9104               if PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_PUB_AT_CREATION(p_src_project_id) = 'Y' then
9105 
9106                 OPEN get_record_version_number(p_dest_project_id, rec_dest_wp_struc_versions.element_version_id);
9107                 FETCH get_record_version_number into l_record_version_number;
9108                 CLOSE get_record_version_number;
9109 
9110                 PA_PROJECT_STRUCTURE_PVT1.change_workplan_status
9111                 (
9112                   p_project_id              => p_dest_project_id
9113                  ,p_structure_version_id    => rec_dest_wp_struc_versions.element_version_id
9114                  ,p_status_code             => 'STRUCTURE_PUBLISHED'
9115                  ,p_record_version_number   => l_record_version_number
9116                  ,x_return_status           => l_return_status
9117                  ,x_msg_count               => l_msg_count
9118                  ,x_msg_data                => l_msg_data
9119                 );
9120 
9121               end if;
9122             end if;
9123             -- gboomina added for bug 9659119 - end
9124 
9125         END LOOP;
9126 
9127         --If it is a shared structure and the only WP version selected is Publish Upon Creation, then
9128         --create a working copy of the Published version
9129         IF l_shared_make_working_copy IS NOT NULL THEN
9130             SELECT pa_proj_element_versions_s.nextval INTO l_new_wp_ver_id
9131             FROM dual;
9132 
9133             SELECT meaning INTO l_prefix
9134             FROM   pa_lookups
9135             WHERE lookup_type = 'PA_STRUCTURES_PREFIX'
9136             AND   lookup_code = 'PA_PREFIX_COPY';
9137 
9138             IF l_debug_mode = 'Y' THEN
9139                 Pa_Debug.WRITE(G_PKG_NAME, 'Making working copy of '||l_shared_make_working_copy,
9140                                l_debug_level3);
9141             END IF;
9142 
9143             --Make a copy of the published version
9144             INSERT INTO pa_proj_element_versions(
9145              ELEMENT_VERSION_ID
9146             ,PROJ_ELEMENT_ID
9147             ,OBJECT_TYPE
9148             ,PROJECT_ID
9149             ,PARENT_STRUCTURE_VERSION_ID
9150             ,DISPLAY_SEQUENCE
9151             ,WBS_LEVEL
9152             ,WBS_NUMBER
9153             ,CREATION_DATE
9154             ,CREATED_BY
9155             ,LAST_UPDATE_DATE
9156             ,LAST_UPDATED_BY
9157             ,LAST_UPDATE_LOGIN
9158             ,RECORD_VERSION_NUMBER
9159             ,attribute15          --This column stores the stucture version id in the src project, to be used to create relationships.
9160             ,ATTRIBUTE_CATEGORY
9161             ,ATTRIBUTE1
9162             ,ATTRIBUTE2
9163             ,ATTRIBUTE3
9164             ,ATTRIBUTE4
9165             ,ATTRIBUTE5
9166             ,ATTRIBUTE6
9167             ,ATTRIBUTE7
9168             ,ATTRIBUTE8
9169             ,ATTRIBUTE9
9170             ,ATTRIBUTE10
9171             ,ATTRIBUTE11
9172             ,ATTRIBUTE12
9173             ,ATTRIBUTE13
9174             ,ATTRIBUTE14
9175             ,TASK_UNPUB_VER_STATUS_CODE
9176             ,FINANCIAL_TASK_FLAG
9177            ,source_object_id
9178            ,source_object_type
9179             )
9180             SELECT
9181              l_new_wp_ver_id
9182             ,ppev.proj_element_id
9183             ,ppev.object_type
9184             ,ppev.project_id
9185             ,l_new_wp_ver_id
9186             ,ppev.DISPLAY_SEQUENCE
9187             ,ppev.WBS_LEVEL
9188             ,ppev.WBS_NUMBER
9189             ,SYSDATE                    ------CREATION_DATE
9190             ,l_user_id                  ------CREATED_BY
9191             ,SYSDATE                    ------LAST_UPDATE_DATE
9192             ,l_user_id                  ------LAST_UPDATED_BY
9193             ,l_login_id                 ------LAST_UPDATE_LOGIN
9194             ,ppev.RECORD_VERSION_NUMBER ------RECORD_VERSION_NUMBER
9195             ,ppev.attribute15
9196             ,ppev.ATTRIBUTE_CATEGORY
9197             ,ppev.ATTRIBUTE1
9198             ,ppev.ATTRIBUTE2
9199             ,ppev.ATTRIBUTE3
9200             ,ppev.ATTRIBUTE4
9201             ,ppev.ATTRIBUTE5
9202             ,ppev.ATTRIBUTE6
9203             ,ppev.ATTRIBUTE7
9204             ,ppev.ATTRIBUTE8
9205             ,ppev.ATTRIBUTE9
9206             ,ppev.ATTRIBUTE10
9207             ,ppev.ATTRIBUTE11
9208             ,ppev.ATTRIBUTE12
9209             ,ppev.ATTRIBUTE13
9210             ,ppev.ATTRIBUTE14
9211             ,ppev.TASK_UNPUB_VER_STATUS_CODE
9212             ,ppev.FINANCIAL_TASK_FLAG
9213         ,ppev.project_id
9214         ,'PA_PROJECTS'
9215             FROM pa_proj_element_versions ppev
9216             WHERE ppev.project_id = p_dest_project_id
9217             AND   ppev.element_version_id = l_shared_make_working_copy ;
9218 
9219             INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
9220              PEV_STRUCTURE_ID
9221             ,ELEMENT_VERSION_ID
9222             ,VERSION_NUMBER
9223             ,NAME
9224             ,PROJECT_ID
9225             ,PROJ_ELEMENT_ID
9226             ,DESCRIPTION
9227             ,EFFECTIVE_DATE
9228             ,PUBLISHED_DATE
9229             ,PUBLISHED_BY_PERSON_ID
9230             ,CURRENT_BASELINE_DATE
9231             ,CURRENT_FLAG
9232             ,CURRENT_BASELINE_PERSON_ID
9233             ,ORIGINAL_BASELINE_DATE
9234             ,ORIGINAL_FLAG
9235             ,ORIGINAL_BASELINE_PERSON_ID
9236             ,LOCK_STATUS_CODE
9237             ,LOCKED_BY_PERSON_ID
9238             ,LOCKED_DATE
9239             ,STATUS_CODE
9240             ,WF_STATUS_CODE
9241             ,LATEST_EFF_PUBLISHED_FLAG
9242             ,RECORD_VERSION_NUMBER
9243             ,WBS_RECORD_VERSION_NUMBER
9244             ,CREATION_DATE
9245             ,CREATED_BY
9246             ,LAST_UPDATE_DATE
9247             ,LAST_UPDATED_BY
9248             ,LAST_UPDATE_LOGIN
9249             ,change_reason_code
9250             ,PROCESS_UPDATE_WBS_FLAG
9251             ,current_working_flag
9252            ,source_object_id
9253            ,source_object_type
9254             )
9255             SELECT
9256              pa_proj_elem_ver_structure_s.nextval
9257             ,l_new_wp_ver_id
9258             ,ppevs.version_number
9259             ,substr(l_prefix||ppevs.name, 1, 240)
9260             ,ppevs.project_id
9261             ,ppe.proj_element_id
9262             ,ppevs.DESCRIPTION
9263             ,ppevs.EFFECTIVE_DATE
9264             ,to_date(NULL)
9265             ,NULL
9266             ,to_date(NULL)
9267             ,'N'
9268             ,NULL
9269             ,to_date(NULL)
9270             ,'N'
9271             ,NULL
9272             ,'UNLOCKED'
9273             ,null
9274             ,null
9275             ,'STRUCTURE_WORKING'
9276             ,ppevs.WF_STATUS_CODE
9277             ,'N'
9278             ,ppevs.RECORD_VERSION_NUMBER
9279             ,ppevs.WBS_RECORD_VERSION_NUMBER
9280             ,SYSDATE
9281             ,l_user_id
9282             ,SYSDATE
9283             ,l_user_id
9284             ,l_login_id
9285             ,ppevs.change_reason_code
9286             ,ppevs.process_update_wbs_flag
9287             ,'Y'
9288         ,ppevs.project_id
9289         ,'PA_PROJECTS'
9290             FROM pa_proj_elem_ver_structure ppevs,
9291                  pa_proj_elements ppe
9292             WHERE ppevs.project_id = p_dest_project_id
9293             AND   ppevs.element_version_id = l_shared_make_working_copy
9294             AND   ppevs.proj_element_id = ppe.proj_element_id
9295             AND   ppe.proj_element_id = l_dest_wp_structure_id;
9296 
9297         END IF;--If l_shared_make_working_copy IS NOT NULL
9298 
9299         --Create tasks in the selected WP versions
9300         IF 'Y' = l_shared THEN
9301         --If SHARED case, join with PA_TASKS table
9302              INSERT INTO pa_proj_elements(
9303               PROJ_ELEMENT_ID
9304              ,PROJECT_ID
9305              ,OBJECT_TYPE
9306              ,ELEMENT_NUMBER
9307              ,NAME
9308              ,DESCRIPTION
9309              ,STATUS_CODE
9310              ,WF_STATUS_CODE
9311              ,PM_SOURCE_CODE
9312              ,PM_SOURCE_REFERENCE
9313              ,CLOSED_DATE
9314              ,LOCATION_ID
9315              ,MANAGER_PERSON_ID
9316              ,CARRYING_OUT_ORGANIZATION_ID
9317              ,TYPE_ID
9318              ,PRIORITY_CODE
9319              ,CREATION_DATE
9320              ,CREATED_BY
9321              ,LAST_UPDATE_DATE
9322              ,LAST_UPDATED_BY
9323              ,LAST_UPDATE_LOGIN
9324              ,RECORD_VERSION_NUMBER
9325              ,REQUEST_ID
9326              ,PROGRAM_APPLICATION_ID
9327              ,PROGRAM_ID
9328              ,PROGRAM_UPDATE_DATE
9329              ,LINK_TASK_FLAG
9330              ,BASELINE_START_DATE
9331              ,BASELINE_FINISH_DATE
9332              ,progress_outdated_flag
9333              ,ATTRIBUTE_CATEGORY
9334              ,ATTRIBUTE1
9335              ,ATTRIBUTE2
9336              ,ATTRIBUTE3
9337              ,ATTRIBUTE4
9338              ,ATTRIBUTE5
9339              ,ATTRIBUTE6
9340              ,ATTRIBUTE7
9341              ,ATTRIBUTE8
9342              ,ATTRIBUTE9
9343              ,ATTRIBUTE10
9344              ,ATTRIBUTE11
9345              ,ATTRIBUTE12
9346              ,ATTRIBUTE13
9347              ,ATTRIBUTE14
9348              ,ATTRIBUTE15
9349              ,parent_structure_id
9350              ,TYPE_CODE
9351              ,INC_PROJ_PROGRESS_FLAG
9352              ,WQ_ITEM_CODE
9353              ,WQ_UOM_CODE
9354              ,WQ_ACTUAL_ENTRY_CODE
9355              ,TASK_PROGRESS_ENTRY_PAGE_ID
9356              ,BASELINE_DURATION
9357              ,PHASE_CODE
9358              ,PHASE_VERSION_ID
9359              ,PROGRESS_WEIGHT
9360              ,BASE_PERCENT_COMP_DERIV_CODE
9361              ,FUNCTION_CODE
9362              ,ENABLE_WF_FLAG
9363              ,WF_ITEM_TYPE
9364              ,WF_PROCESS
9365              ,WF_START_LEAD_DAYS
9366             ,source_object_id
9367             ,source_object_type
9368              )
9369              SELECT
9370               nvl(pt.task_id,pa_tasks_s.nextval)
9371              ,p_dest_project_id
9372              ,ppe.object_type
9373              ,ppe.element_number
9374              ,ppe.name
9375              ,ppe.DESCRIPTION
9376              ,INITIAL_STATUS_CODE
9377              ,ppe.WF_STATUS_CODE
9378              ,NULL --bug 3810263 replacing ppe.PM_SOURCE_CODE
9379              ,NULL --bug 3810263 replacing ppe.PM_SOURCE_REFERENCE
9380              ,ppe.CLOSED_DATE
9381              ,ppe.LOCATION_ID
9382              ,ppe.MANAGER_PERSON_ID
9383              ,decode(ppe.CARRYING_OUT_ORGANIZATION_ID,l_old_proj_org_id, l_new_proj_org_id,
9384                      ppe.CARRYING_OUT_ORGANIZATION_ID) -- Bug 3387963
9385              ,ppe.TYPE_ID
9386              ,ppe.PRIORITY_CODE
9387              ,SYSDATE
9388              ,l_user_id
9389              ,SYSDATE
9390              ,l_user_id
9391              ,l_login_id
9392              ,ppe.RECORD_VERSION_NUMBER
9393              ,ppe.REQUEST_ID
9394              ,ppe.PROGRAM_APPLICATION_ID
9395              ,ppe.PROGRAM_ID
9396              ,ppe.PROGRAM_UPDATE_DATE
9397              ,ppe.LINK_TASK_FLAG
9398              ,ppe.BASELINE_START_DATE
9399              ,ppe.BASELINE_FINISH_DATE
9400              ,'N'     --,ppe.progress_outdated_flag
9401              ,ppe.ATTRIBUTE_CATEGORY
9402              ,ppe.ATTRIBUTE1
9403              ,ppe.ATTRIBUTE2
9404              ,ppe.ATTRIBUTE3
9405              ,ppe.ATTRIBUTE4
9406              ,ppe.ATTRIBUTE5
9407              ,ppe.ATTRIBUTE6
9408              ,ppe.ATTRIBUTE7
9409              ,ppe.ATTRIBUTE8
9410              ,ppe.ATTRIBUTE9
9411              ,ppe.ATTRIBUTE10
9412              ,ppe.ATTRIBUTE11
9413              ,ppe.ATTRIBUTE12
9414              ,ppe.ATTRIBUTE13
9415              ,ppe.ATTRIBUTE14
9416              ,ppe.proj_element_id    --attribute 15 is used to store old ids.
9417              ,l_dest_wp_structure_id
9418              ,ppe.TYPE_CODE
9419              ,ppe.INC_PROJ_PROGRESS_FLAG
9420              ,ppe.WQ_ITEM_CODE
9421              ,ppe.WQ_UOM_CODE
9422              ,ppe.WQ_ACTUAL_ENTRY_CODE
9423              ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
9424              ,ppe.BASELINE_DURATION
9425              ,ppe.PHASE_CODE
9426              ,ppe.PHASE_VERSION_ID
9427              ,ppe.PROGRESS_WEIGHT
9428              ,ppe.BASE_PERCENT_COMP_DERIV_CODE
9429              ,ppe.FUNCTION_CODE
9430              ,'N'
9431              ,ppe.WF_ITEM_TYPE
9432              ,ppe.WF_PROCESS
9433              ,ppe.WF_START_LEAD_DAYS
9434          ,p_dest_project_id
9435          ,'PA_PROJECTS'
9436              FROM pa_task_types ptt,
9437                   pa_tasks pt,
9438                   pa_proj_elements ppe
9439              WHERE ptt.object_type    = 'PA_TASKS'
9440              AND   ppe.type_id        = ptt.task_type_id
9441              AND   nvl(ppe.link_task_flag,'N') <> 'Y' -- 4348868
9442              AND   pt.task_number (+) = substrb(rtrim(ppe.element_number),1,25) -- Substrb added for Bug 5152448
9443              AND   pt.project_id  (+) = p_dest_project_id
9444              AND   ppe.proj_element_id IN
9445              ( SELECT distinct ppev.proj_element_id
9446                FROM   PA_PROJ_ELEMENT_VERSIONS ppev,
9447                       PA_PROJECT_COPY_OPTIONS_TMP ppcot
9448                WHERE  ppcot.CONTEXT = 'WORKPLAN'
9449                AND    ppev.parent_structure_version_id = ppcot.version_id
9450                AND    ppev.project_id = p_src_project_id
9451                AND    ppev.object_type = 'PA_TASKS' ) ;
9452         ELSE
9453         --If SPLIT case, there should be no join with PA_TASKS table
9454              INSERT INTO pa_proj_elements(
9455               PROJ_ELEMENT_ID
9456              ,PROJECT_ID
9457              ,OBJECT_TYPE
9458              ,ELEMENT_NUMBER
9459              ,NAME
9460              ,DESCRIPTION
9461              ,STATUS_CODE
9462              ,WF_STATUS_CODE
9463              ,PM_SOURCE_CODE
9464              ,PM_SOURCE_REFERENCE
9465              ,CLOSED_DATE
9466              ,LOCATION_ID
9467              ,MANAGER_PERSON_ID
9468              ,CARRYING_OUT_ORGANIZATION_ID
9469              ,TYPE_ID
9470              ,PRIORITY_CODE
9471              ,CREATION_DATE
9472              ,CREATED_BY
9473              ,LAST_UPDATE_DATE
9474              ,LAST_UPDATED_BY
9475              ,LAST_UPDATE_LOGIN
9476              ,RECORD_VERSION_NUMBER
9477              ,REQUEST_ID
9478              ,PROGRAM_APPLICATION_ID
9479              ,PROGRAM_ID
9480              ,PROGRAM_UPDATE_DATE
9481              ,LINK_TASK_FLAG
9482              ,BASELINE_START_DATE
9483              ,BASELINE_FINISH_DATE
9484              ,progress_outdated_flag
9485              ,ATTRIBUTE_CATEGORY
9486              ,ATTRIBUTE1
9487              ,ATTRIBUTE2
9488              ,ATTRIBUTE3
9489              ,ATTRIBUTE4
9490              ,ATTRIBUTE5
9491              ,ATTRIBUTE6
9492              ,ATTRIBUTE7
9493              ,ATTRIBUTE8
9494              ,ATTRIBUTE9
9495              ,ATTRIBUTE10
9496              ,ATTRIBUTE11
9497              ,ATTRIBUTE12
9498              ,ATTRIBUTE13
9499              ,ATTRIBUTE14
9500              ,ATTRIBUTE15
9501              ,parent_structure_id
9502              ,TYPE_CODE
9503              ,INC_PROJ_PROGRESS_FLAG
9504              ,WQ_ITEM_CODE
9505              ,WQ_UOM_CODE
9506              ,WQ_ACTUAL_ENTRY_CODE
9507              ,TASK_PROGRESS_ENTRY_PAGE_ID
9508              ,BASELINE_DURATION
9509              ,PHASE_CODE
9510              ,PHASE_VERSION_ID
9511              ,PROGRESS_WEIGHT
9512              ,BASE_PERCENT_COMP_DERIV_CODE
9513              ,FUNCTION_CODE
9514              ,ENABLE_WF_FLAG
9515              ,WF_ITEM_TYPE
9516              ,WF_PROCESS
9517              ,WF_START_LEAD_DAYS
9518             ,source_object_id
9519             ,source_object_type
9520              )
9521              SELECT
9522               pa_tasks_s.nextval
9523              ,p_dest_project_id
9524              ,ppe.object_type
9525              ,ppe.element_number
9526              ,ppe.name
9527              ,ppe.DESCRIPTION
9528              ,INITIAL_STATUS_CODE
9529              ,ppe.WF_STATUS_CODE
9530              ,NULL --bug 3810263 replacing ppe.PM_SOURCE_CODE
9531              ,NULL --bug 3810263 replacing ppe.PM_SOURCE_REFERENCE
9532              ,ppe.CLOSED_DATE
9533              ,ppe.LOCATION_ID
9534              ,ppe.MANAGER_PERSON_ID
9535              ,decode(ppe.CARRYING_OUT_ORGANIZATION_ID,l_old_proj_org_id, l_new_proj_org_id,
9536                      ppe.CARRYING_OUT_ORGANIZATION_ID) -- Bug 3387963
9537              ,ppe.TYPE_ID
9538              ,ppe.PRIORITY_CODE
9539              ,SYSDATE
9540              ,l_user_id
9541              ,SYSDATE
9542              ,l_user_id
9543              ,l_login_id
9544              ,ppe.RECORD_VERSION_NUMBER
9545              ,ppe.REQUEST_ID
9546              ,ppe.PROGRAM_APPLICATION_ID
9547              ,ppe.PROGRAM_ID
9548              ,ppe.PROGRAM_UPDATE_DATE
9549              ,ppe.LINK_TASK_FLAG
9550              ,ppe.BASELINE_START_DATE
9551              ,ppe.BASELINE_FINISH_DATE
9552              ,'N'      --,ppe.progress_outdated_flag
9553              ,ppe.ATTRIBUTE_CATEGORY
9554              ,ppe.ATTRIBUTE1
9555              ,ppe.ATTRIBUTE2
9556              ,ppe.ATTRIBUTE3
9557              ,ppe.ATTRIBUTE4
9558              ,ppe.ATTRIBUTE5
9559              ,ppe.ATTRIBUTE6
9560              ,ppe.ATTRIBUTE7
9561              ,ppe.ATTRIBUTE8
9562              ,ppe.ATTRIBUTE9
9563              ,ppe.ATTRIBUTE10
9564              ,ppe.ATTRIBUTE11
9565              ,ppe.ATTRIBUTE12
9566              ,ppe.ATTRIBUTE13
9567              ,ppe.ATTRIBUTE14
9568              ,ppe.proj_element_id    --attribute 15 is used to store old ids.
9569              ,l_dest_wp_structure_id
9570              ,ppe.TYPE_CODE
9571              ,ppe.INC_PROJ_PROGRESS_FLAG
9572              ,ppe.WQ_ITEM_CODE
9573              ,ppe.WQ_UOM_CODE
9574              ,ppe.WQ_ACTUAL_ENTRY_CODE
9575              ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
9576              ,ppe.BASELINE_DURATION
9577              ,ppe.PHASE_CODE
9578              ,ppe.PHASE_VERSION_ID
9579              ,ppe.PROGRESS_WEIGHT
9580              ,ppe.BASE_PERCENT_COMP_DERIV_CODE
9581              ,ppe.FUNCTION_CODE
9582              ,'N'
9583              ,ppe.WF_ITEM_TYPE
9584              ,ppe.WF_PROCESS
9585              ,ppe.WF_START_LEAD_DAYS
9586          ,p_dest_project_id
9587          ,'PA_PROJECTS'
9588              FROM pa_task_types ptt,
9589                   pa_proj_elements ppe
9590              WHERE ptt.object_type    = 'PA_TASKS'
9591              AND   ppe.type_id        = ptt.task_type_id
9592          AND   nvl(ppe.link_task_flag,'N') <> 'Y' -- 4348868
9593              AND   ppe.proj_element_id IN
9594              ( SELECT distinct ppev.proj_element_id
9595                FROM   PA_PROJ_ELEMENT_VERSIONS ppev,
9596                       PA_PROJECT_COPY_OPTIONS_TMP ppcot
9597                WHERE  ppcot.CONTEXT = 'WORKPLAN'
9598                AND    ppev.parent_structure_version_id = ppcot.version_id
9599                AND    ppev.project_id = p_src_project_id
9600                AND    ppev.object_type = 'PA_TASKS' ) ;
9601         END IF;
9602 
9603         --Copy tasks versions for tasks belonging to the selected wp versions
9604         INSERT INTO pa_proj_element_versions(
9605          ELEMENT_VERSION_ID
9606         ,PROJ_ELEMENT_ID
9607         ,OBJECT_TYPE
9608         ,PROJECT_ID
9609         ,PARENT_STRUCTURE_VERSION_ID
9610         ,DISPLAY_SEQUENCE
9611         ,WBS_LEVEL
9612         ,WBS_NUMBER
9613         ,CREATION_DATE
9614         ,CREATED_BY
9615         ,LAST_UPDATE_DATE
9616         ,LAST_UPDATED_BY
9617         ,LAST_UPDATE_LOGIN
9618         ,RECORD_VERSION_NUMBER
9619         ,attribute15          --this column is used to store task ver id of the source project's task versions to be used to created relationships.
9620         ,ATTRIBUTE_CATEGORY
9621         ,ATTRIBUTE1
9622         ,ATTRIBUTE2
9623         ,ATTRIBUTE3
9624         ,ATTRIBUTE4
9625         ,ATTRIBUTE5
9626         ,ATTRIBUTE6
9627         ,ATTRIBUTE7
9628         ,ATTRIBUTE8
9629         ,ATTRIBUTE9
9630         ,ATTRIBUTE10
9631         ,ATTRIBUTE11
9632         ,ATTRIBUTE12
9633         ,ATTRIBUTE13
9634         ,ATTRIBUTE14
9635         ,TASK_UNPUB_VER_STATUS_CODE
9636         ,FINANCIAL_TASK_FLAG
9637        ,source_object_id
9638         ,source_object_type
9639         )
9640         SELECT
9641          pa_proj_element_versions_s.nextval
9642         ,ppe.proj_element_id
9643         ,ppev.object_type
9644         ,p_dest_project_id
9645         ,ppev2.element_version_id
9646         ,ppev.DISPLAY_SEQUENCE
9647         ,ppev.WBS_LEVEL
9648         ,ppev.WBS_NUMBER
9649         ,SYSDATE                     ------CREATION_DATE
9650         ,l_user_id                   ------CREATED_BY
9651         ,SYSDATE                     ------LAST_UPDATE_DATE
9652         ,l_user_id                   ------LAST_UPDATED_BY
9653         ,l_login_id                  ------LAST_UPDATE_LOGIN
9654         ,ppev.RECORD_VERSION_NUMBER  ------RECORD_VERSION_NUMBER
9655         ,ppev.element_version_id     -- to help create relationships from source
9656         ,ppev.ATTRIBUTE_CATEGORY
9657         ,ppev.ATTRIBUTE1
9658         ,ppev.ATTRIBUTE2
9659         ,ppev.ATTRIBUTE3
9660         ,ppev.ATTRIBUTE4
9661         ,ppev.ATTRIBUTE5
9662         ,ppev.ATTRIBUTE6
9663         ,ppev.ATTRIBUTE7
9664         ,ppev.ATTRIBUTE8
9665         ,ppev.ATTRIBUTE9
9666         ,ppev.ATTRIBUTE10
9667         ,ppev.ATTRIBUTE11
9668         ,ppev.ATTRIBUTE12
9669         ,ppev.ATTRIBUTE13
9670         ,ppev.ATTRIBUTE14
9671         ,decode( ppevs.status_code, 'STRUCTURE_PUBLISHED', 'PUBLISHED', 'WORKING' )
9672         ,ppev.FINANCIAL_TASK_FLAG   --Check if this is correct ?
9673     ,p_dest_project_id
9674     ,'PA_PROJECTS'
9675         FROM pa_proj_elements ppe,
9676              pa_proj_element_versions ppev,
9677              pa_proj_element_versions ppev2,
9678              pa_proj_elem_ver_structure ppevs
9679         WHERE ppe.project_id = p_dest_project_id
9680         AND   ppe.object_type = 'PA_TASKS'
9681         AND   ppe.attribute15 = ppev.proj_element_id
9682         AND   ppev.project_id = p_src_project_id
9683         AND   ppev.object_type = 'PA_TASKS'
9684         AND   ppev.parent_structure_version_id = ppev2.attribute15
9685         AND   ppev2.project_id = p_dest_project_id
9686         AND   ppev2.object_type = 'PA_STRUCTURES'
9687         AND   ppevs.element_version_id = ppev2.element_version_id
9688         AND   ppevs.project_id = p_dest_project_id
9689     AND   ppevs.project_id = ppe.project_id -- Bug 4141027
9690     AND   ppev2.project_id = ppe.project_id -- Bug 4141027
9691     ;
9692 
9693         IF l_debug_mode = 'Y' THEN
9694             Pa_Debug.WRITE(G_PKG_NAME, 'Going to insert object relationships',
9695                            l_debug_level3);
9696         END IF;
9697 
9698         FOR rec_dest_wp_struc_versions IN cur_get_dest_wp_struc_versions(l_dest_wp_structure_id) LOOP
9699             --Copy relationships for structure and tasks into destination project
9700 
9701   /* Start of addition for bug 6211012 */
9702 
9703         l_obj_rel_id.delete;
9704 	l_obj_typ_from.delete;
9705 	l_obj_from_id.delete;
9706 	l_obj_typ_to.delete;
9707 	l_obj_to_id.delete;
9708 	l_rel_typ.delete;
9709 	l_rel_subtyp.delete;
9710 	l_rec_ver_num.delete;
9711 	l_wt_percent.delete;
9712 
9713         OPEN cur_pa_obj_rela_2(rec_dest_wp_struc_versions.attribute15,rec_dest_wp_struc_versions.element_version_id);
9714 
9715 	LOOP
9716 
9717 	  FETCH cur_pa_obj_rela_2
9718 	  BULK COLLECT INTO
9719 		l_obj_rel_id,
9720 		l_obj_typ_from,
9721 		l_obj_from_id,
9722 		l_obj_typ_to,
9723 		l_obj_to_id,
9724 		l_rel_typ,
9725 		l_rel_subtyp,
9726 		l_rec_ver_num,
9727 		l_wt_percent
9728 	  LIMIT 1000;
9729 
9730 	  IF l_obj_rel_id.COUNT >0 THEN
9731 
9732 	    FORALL i IN l_obj_rel_id.FIRST..l_obj_rel_id.LAST
9733             insert into PA_OBJECT_RELATIONSHIPS (
9734                  object_relationship_id,
9735                  object_type_from,
9736                  object_id_from1,
9737                  object_type_to,
9738                  object_id_to1,
9739                  relationship_type,
9740                  relationship_subtype,
9741                  Record_Version_Number,
9742                  CREATED_BY,
9743                  CREATION_DATE,
9744                  LAST_UPDATED_BY,
9745                  LAST_UPDATE_DATE,
9746                  LAST_UPDATE_LOGIN,
9747                  weighting_percentage
9748                        )
9749 		 values(
9750 		 l_obj_rel_id(i),
9751 	         l_obj_typ_from(i),
9752 	         l_obj_from_id(i),
9753 	         l_obj_typ_to(i),
9754 	         l_obj_to_id(i),
9755 	         l_rel_typ(i),
9756 	         l_rel_subtyp(i),
9757 	         l_rec_ver_num(i),
9758                  l_user_id,
9759                  SYSDATE,
9760                  l_user_id,
9761                  SYSDATE,
9762                  l_login_id,
9763 	         l_wt_percent(i)
9764 		 );
9765 
9766 	  END IF;
9767 
9768           EXIT WHEN l_obj_rel_id.COUNT < 1000 ;
9769 	END LOOP;
9770 
9771 	l_obj_rel_id.delete;
9772 	l_obj_typ_from.delete;
9773 	l_obj_from_id.delete;
9774 	l_obj_typ_to.delete;
9775 	l_obj_to_id.delete;
9776 	l_rel_typ.delete;
9777 	l_rel_subtyp.delete;
9778 	l_rec_ver_num.delete;
9779 	l_wt_percent.delete;
9780 
9781 	CLOSE cur_pa_obj_rela_2;
9782 
9783 /*
9784             INSERT INTO PA_OBJECT_RELATIONSHIPS (
9785              object_relationship_id
9786             ,object_type_from
9787             ,object_id_from1
9788             ,object_type_to
9789             ,object_id_to1
9790             ,relationship_type
9791             ,relationship_subtype
9792             ,Record_Version_Number
9793             ,CREATED_BY
9794             ,CREATION_DATE
9795             ,LAST_UPDATED_BY
9796             ,LAST_UPDATE_DATE
9797             ,LAST_UPDATE_LOGIN
9798             ,weighting_percentage
9799             )
9800         /*Added the hint for the bug 3513853*/
9801     /*       SELECT /*+ USE_HASH(ppev2 ppev1)*/
9802    /*          pa_object_relationships_s.nextval
9803             ,pobj.object_type_from
9804             ,ppev1.element_version_id
9805             ,pobj.object_type_to
9806             ,ppev2.element_version_id
9807             ,pobj.relationship_type
9808             ,pobj.relationship_subtype
9809             ,pobj.Record_Version_Number
9810             ,l_user_id
9811             ,SYSDATE
9812             ,l_user_id
9813             ,SYSDATE
9814             ,l_login_id
9815             ,pobj.weighting_percentage
9816             FROM
9817             ( SELECT object_type_from,
9818                      object_id_from1,
9819                      object_type_to,
9820                      object_id_to1,
9821                      relationship_type,
9822                      relationship_subtype,
9823                      Record_Version_Number,
9824                      weighting_percentage
9825               FROM pa_object_relationships
9826               START WITH object_id_from1 = rec_dest_wp_struc_versions.attribute15
9827               AND  RELATIONSHIP_TYPE = 'S'
9828               CONNECT BY  object_id_from1 =  PRIOR object_id_to1
9829               AND  RELATIONSHIP_TYPE = 'S' ) pobj,
9830             pa_proj_element_versions ppev1,
9831             pa_proj_element_versions ppev2
9832             WHERE ppev1.attribute15 = pobj.object_id_from1
9833             AND   ppev2.attribute15 = pobj.object_id_to1
9834             AND   ppev1.parent_structure_version_id = rec_dest_wp_struc_versions.element_version_id
9835             AND   ppev2.parent_structure_version_id = rec_dest_wp_struc_versions.element_version_id ;
9836 */
9837 /* End of changes for bug 6211012 */
9838 
9839             --calculate delta before inserting schedule rows
9840             --select source structure version scheduled start date
9841             IF (p_target_start_date IS NULL) THEN
9842                 l_delta := 0;
9843             ELSE
9844                 OPEN  cur_get_src_sch_st_date( p_src_project_id, rec_dest_wp_struc_versions.attribute15 );
9845                 FETCH cur_get_src_sch_st_date INTO l_src_sch_st_date;
9846                 CLOSE cur_get_src_sch_st_date;
9847                 l_delta := p_target_start_date - l_src_sch_st_date;
9848             END IF;
9849 
9850             --Copy entries into pa_proj_elem_ver_schedule
9851             INSERT INTO pa_proj_elem_ver_schedule(
9852              PEV_SCHEDULE_ID
9853             ,ELEMENT_VERSION_ID
9854             ,PROJECT_ID
9855             ,PROJ_ELEMENT_ID
9856             ,CREATION_DATE
9857             ,CREATED_BY
9858             ,LAST_UPDATE_DATE
9859             ,LAST_UPDATED_BY
9860             ,SCHEDULED_START_DATE
9861             ,SCHEDULED_FINISH_DATE
9862             ,OBLIGATION_START_DATE
9863             ,OBLIGATION_FINISH_DATE
9864             ,ACTUAL_START_DATE
9865             ,ACTUAL_FINISH_DATE
9866             ,ESTIMATED_START_DATE
9867             ,ESTIMATED_FINISH_DATE
9868             ,DURATION
9869             ,EARLY_START_DATE
9870             ,EARLY_FINISH_DATE
9871             ,LATE_START_DATE
9872             ,LATE_FINISH_DATE
9873             ,CALENDAR_ID
9874             ,MILESTONE_FLAG
9875             ,CRITICAL_FLAG
9876             ,RECORD_VERSION_NUMBER
9877             ,LAST_UPDATE_LOGIN
9878             ,WQ_PLANNED_QUANTITY
9879             ,PLANNED_EFFORT
9880             ,ACTUAL_DURATION
9881             ,ESTIMATED_DURATION
9882             ,ATTRIBUTE_CATEGORY
9883             ,ATTRIBUTE1
9884             ,ATTRIBUTE2
9885             ,ATTRIBUTE3
9886             ,ATTRIBUTE4
9887             ,ATTRIBUTE5
9888             ,ATTRIBUTE6
9889             ,ATTRIBUTE7
9890             ,ATTRIBUTE8
9891             ,ATTRIBUTE9
9892             ,ATTRIBUTE10
9893             ,ATTRIBUTE11
9894             ,ATTRIBUTE12
9895             ,ATTRIBUTE13
9896             ,ATTRIBUTE14
9897             ,ATTRIBUTE15
9898            ,source_object_id
9899            ,source_object_type
9900             ,DEF_SCH_TOOL_TSK_TYPE_CODE            --Bug 9378153
9901             ,CONSTRAINT_TYPE_CODE                  --Bug 3762437
9902             ,CONSTRAINT_DATE
9903             ,FREE_SLACK
9904             ,TOTAL_SLACK
9905             ,EFFORT_DRIVEN_FLAG
9906             ,LEVEL_ASSIGNMENTS_FLAG
9907             ,EXT_ACT_DURATION
9908             ,EXT_REMAIN_DURATION
9909             ,EXT_SCH_DURATION                       --Bug 3762437
9910             )
9911             SELECT
9912              pa_proj_elem_ver_schedule_s.nextval
9913             ,ppev.ELEMENT_VERSION_ID
9914             ,p_dest_PROJECT_ID
9915             ,ppev.PROJ_ELEMENT_ID
9916             ,SYSDATE
9917             ,l_user_id
9918             ,SYSDATE
9919             ,l_user_id
9920             ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date,
9921                                                         p_target_finish_date,
9922                                                         l_delta,
9923                                                         ppevs.SCHEDULED_START_DATE,
9924                                                         null )
9925             ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date,
9926                                                         p_target_finish_date,
9927                                                         l_delta,
9928                                                         ppevs.SCHEDULED_START_DATE,
9929                                                         SCHEDULED_FINISH_DATE )
9930             ,ppevs.OBLIGATION_START_DATE
9931             ,ppevs.OBLIGATION_FINISH_DATE
9932             ,null
9933             ,null
9934             ,null
9935             ,null
9936             ,ppevs.DURATION
9937             ,ppevs.EARLY_START_DATE
9938             ,ppevs.EARLY_FINISH_DATE
9939             ,ppevs.LATE_START_DATE
9940             ,ppevs.LATE_FINISH_DATE
9941             ,p_calendar_id
9942             ,ppevs.MILESTONE_FLAG
9943             ,ppevs.CRITICAL_FLAG
9944             ,ppevs.RECORD_VERSION_NUMBER
9945             ,l_login_id
9946             ,ppevs.WQ_PLANNED_QUANTITY
9947             ,ppevs.PLANNED_EFFORT
9948             ,ppevs.ACTUAL_DURATION
9949             ,ppevs.ESTIMATED_DURATION
9950             ,ppevs.ATTRIBUTE_CATEGORY
9951             ,ppevs.ATTRIBUTE1
9952             ,ppevs.ATTRIBUTE2
9953             ,ppevs.ATTRIBUTE3
9954             ,ppevs.ATTRIBUTE4
9955             ,ppevs.ATTRIBUTE5
9956             ,ppevs.ATTRIBUTE6
9957             ,ppevs.ATTRIBUTE7
9958             ,ppevs.ATTRIBUTE8
9959             ,ppevs.ATTRIBUTE9
9960             ,ppevs.ATTRIBUTE10
9961             ,ppevs.ATTRIBUTE11
9962             ,ppevs.ATTRIBUTE12
9963             ,ppevs.ATTRIBUTE13
9964             ,ppevs.ATTRIBUTE14
9965             ,ppevs.ATTRIBUTE15
9966         ,p_dest_PROJECT_ID
9967         ,'PA_PROJECTS'
9968             ,ppevs.DEF_SCH_TOOL_TSK_TYPE_CODE            --Bug 9378153
9969             ,CONSTRAINT_TYPE_CODE                  --Bug 3762437
9970             ,CONSTRAINT_DATE
9971             ,FREE_SLACK
9972             ,TOTAL_SLACK
9973             ,EFFORT_DRIVEN_FLAG
9974             ,LEVEL_ASSIGNMENTS_FLAG
9975             ,EXT_ACT_DURATION
9976             ,EXT_REMAIN_DURATION
9977             ,EXT_SCH_DURATION                       --Bug 3762437
9978             FROM pa_proj_element_versions ppev,
9979                  pa_proj_elem_ver_schedule ppevs
9980             WHERE ppev.project_id = p_dest_project_id
9981             AND   ppev.parent_structure_version_id = rec_dest_wp_struc_versions.element_version_id
9982             AND   ppev.attribute15 = ppevs.element_version_id
9983             AND   ppevs.project_id = p_src_project_id ;
9984 
9985         END LOOP; --FOR rec_dest_wp_struc_versions IN cur_get_dest_wp_struc_versions
9986 
9987         IF 'Y' = l_shared AND 'N' = p_src_template_flag THEN
9988         --No need to sync up if source is a template
9989         IF l_submit_wf_required <> 'Y' THEN --3916763
9990             OPEN  cur_get_shared_ver_id;
9991             FETCH cur_get_shared_ver_id INTO l_shared_dest_ver_id;
9992             CLOSE cur_get_shared_ver_id;
9993 
9994             IF l_debug_mode = 'Y' THEN
9995             Pa_Debug.WRITE(G_PKG_NAME, 'Calling pa_tasks sync up API for struc version :'||l_shared_dest_ver_id,
9996                        l_debug_level3);
9997             END IF;
9998 
9999             --Call API to sync up tasks in pa_tasks table, with the new (shared) version [WP version copied from src]
10000             PA_TASKS_MAINT_PUB.SYNC_UP_WP_TASKS_WITH_FIN(
10001               p_project_id             => p_dest_project_id
10002             , p_structure_version_id   => l_shared_dest_ver_id
10003             , p_mode                   => 'ALL'
10004             , x_return_status          => l_return_status
10005             , x_msg_count              => l_msg_count
10006             , x_msg_data               => l_msg_data );
10007 
10008             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10009             x_msg_count := FND_MSG_PUB.count_msg;
10010             IF x_msg_count = 1 THEN
10011                 x_msg_data := l_msg_data;
10012             END IF;
10013             RAISE FND_API.G_EXC_ERROR;
10014             END IF;
10015          END IF; --3916763
10016         END IF;
10017     ELSE --IF THERE IS NO WP VERSION SELECTED FOR COPYING
10018 
10019         --If shared and copy financial tasks flag is checked
10020         IF 'Y' = l_shared AND 'Y' = l_fin_tasks_flag THEN
10021 
10022             --The following API call will copy the financial version from the source project to the destination project
10023             copy_src_financial_version(  p_init_msg_list        => p_init_msg_list
10024                                         ,p_src_project_id       => p_src_project_id
10025                                         ,p_dest_project_id      => p_dest_project_id
10026                                         ,p_dest_fn_structure_id => l_dest_wp_structure_id
10027                                         ,p_shared               => l_shared
10028                                         ,p_dest_template_flag   => p_dest_template_flag
10029                                         ,p_publish_person_id    => l_publish_person_id
10030                                         ,x_return_status        => l_return_status
10031                                         ,x_msg_count            => l_msg_count
10032                                         ,x_msg_data             => l_msg_data
10033                                       );
10034 
10035             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10036                 x_msg_count := FND_MSG_PUB.count_msg;
10037                 IF x_msg_count = 1 THEN
10038                     x_msg_data := l_msg_data;
10039                 END IF;
10040                 RAISE FND_API.G_EXC_ERROR;
10041             END IF;
10042 
10043             --The following API call will copy the tasks belonging to the financial version in the source project into
10044             --the destination project
10045             copy_src_financial_ver_tasks( p_init_msg_list            => p_init_msg_list
10046                                          ,p_src_project_id           => p_src_project_id
10047                                          ,p_dest_project_id          => p_dest_project_id
10048                                          ,p_dest_fn_structure_id     => l_dest_wp_structure_id
10049                                          ,p_shared                   => l_shared
10050                                          ,p_copy_ppevSchedules_flag  => 'Y'   --Copy pa_proj_elem_ver_schedules or not
10051                                          ,p_target_start_date        => p_target_start_date
10052                                          ,p_target_finish_date       => p_target_finish_date
10053                                          ,p_calendar_id              => p_calendar_id
10054                                          ,x_return_status            => l_return_status
10055                                          ,x_msg_count                => l_msg_count
10056                                          ,x_msg_data                 => l_msg_data
10057                                         );
10058             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10059                 x_msg_count := FND_MSG_PUB.count_msg;
10060                 IF x_msg_count = 1 THEN
10061                     x_msg_data := l_msg_data;
10062                 END IF;
10063                 RAISE FND_API.G_EXC_ERROR;
10064             END IF;
10065 
10066         END IF;--If shared and copy financial tasks flag is checked
10067 
10068         --If no WP version is selected
10069         --If shared and copy financial tasks flag is not checked OR split and workplan is enabled
10070         IF ('Y' = l_shared AND 'N' = l_fin_tasks_flag)
10071         OR ('N' = l_shared AND 'Y' = l_workplan_enabled) THEN
10072 
10073             IF l_debug_mode = 'Y' THEN
10074                 Pa_Debug.WRITE(G_PKG_NAME, 'Creating new default WP version', l_debug_level3);
10075             END IF;
10076         --bug 3912603, Satish, this flag is for using this same condition below.
10077         check_str_sel_flag := 'Y';
10078 
10079             --Create new default WP structure version
10080             SELECT pa_proj_element_versions_s.nextval INTO l_new_wp_ver_id
10081             FROM dual;
10082 
10083             INSERT INTO pa_proj_element_versions(
10084              ELEMENT_VERSION_ID
10085             ,PROJ_ELEMENT_ID
10086             ,OBJECT_TYPE
10087             ,PROJECT_ID
10088             ,CREATION_DATE
10089             ,CREATED_BY
10090             ,LAST_UPDATE_DATE
10091             ,LAST_UPDATED_BY
10092             ,LAST_UPDATE_LOGIN
10093             ,PARENT_STRUCTURE_VERSION_ID
10094             ,WBS_NUMBER
10095             ,RECORD_VERSION_NUMBER
10096             ,FINANCIAL_TASK_FLAG
10097            ,source_object_id
10098            ,source_object_type
10099             )
10100             VALUES (
10101              l_new_wp_ver_id
10102             ,l_dest_wp_structure_id
10103             ,'PA_STRUCTURES'
10104             ,p_dest_project_id
10105             ,sysdate
10106             ,l_user_id
10107             ,sysdate
10108             ,l_user_id
10109             ,l_login_id
10110             ,l_new_wp_ver_id
10111             ,'0'
10112             ,1
10113             ,'N'
10114         ,p_dest_project_id
10115         ,'PA_PROJECTS'
10116             );
10117 
10118             OPEN  cur_get_working_ver_num(p_dest_project_id, l_dest_wp_structure_id);
10119             FETCH cur_get_working_ver_num INTO l_struc_ver_number;
10120             CLOSE cur_get_working_ver_num;
10121 
10122             --If creating a project AND versioning is disabled, then should have both latest published and
10123             --current working flags as 'Y'
10124             IF 'N' = p_dest_template_flag AND 'N' = l_versioning_enabled THEN
10125                 l_default_lat_pub_and_cw_flag := 'Y';
10126             END IF;
10127 
10128             INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
10129              PEV_STRUCTURE_ID
10130             ,ELEMENT_VERSION_ID
10131             ,VERSION_NUMBER
10132             ,NAME
10133             ,PROJECT_ID
10134             ,PROJ_ELEMENT_ID
10135             ,PUBLISHED_DATE
10136             ,LATEST_EFF_PUBLISHED_FLAG
10137             ,PUBLISHED_BY_PERSON_ID
10138             ,CURRENT_BASELINE_DATE
10139             ,CURRENT_FLAG
10140             ,CURRENT_BASELINE_PERSON_ID
10141             ,ORIGINAL_BASELINE_DATE
10142             ,ORIGINAL_FLAG
10143             ,ORIGINAL_BASELINE_PERSON_ID
10144             ,CREATION_DATE
10145             ,CREATED_BY
10146             ,LAST_UPDATE_DATE
10147             ,LAST_UPDATED_BY
10148             ,LAST_UPDATE_LOGIN
10149             ,STATUS_CODE
10150             ,RECORD_VERSION_NUMBER
10151             ,WBS_RECORD_VERSION_NUMBER
10152             ,CURRENT_WORKING_FLAG
10153            ,SOURCE_OBJECT_ID
10154            ,source_object_type)
10155             VALUES (
10156              pa_proj_elem_ver_structure_s.nextval
10157             ,l_new_wp_ver_id
10158             ,l_struc_ver_number
10159             ,substr(p_dest_project_name||l_append||l_suffix, 1, 240)
10160             ,p_dest_project_id
10161             ,l_dest_wp_structure_id
10162             ,decode(l_default_lat_pub_and_cw_flag,'Y',sysdate,to_date(null))
10163             ,l_default_lat_pub_and_cw_flag
10164             ,decode(l_default_lat_pub_and_cw_flag, 'Y', l_publish_person_id, NULL)
10165             ,decode(l_default_lat_pub_and_cw_flag,'Y',sysdate,to_date(null))
10166             ,l_default_lat_pub_and_cw_flag
10167             ,decode(l_default_lat_pub_and_cw_flag, 'Y', l_publish_person_id, NULL)
10168             ,decode(l_default_lat_pub_and_cw_flag,'Y',sysdate,to_date(null))
10169             ,l_default_lat_pub_and_cw_flag
10170             ,decode(l_default_lat_pub_and_cw_flag, 'Y', l_publish_person_id, NULL)
10171             ,sysdate
10172             ,l_user_id
10173             ,sysdate
10174             ,l_user_id
10175             ,l_login_id
10176             ,decode(l_default_lat_pub_and_cw_flag,'Y','STRUCTURE_PUBLISHED','STRUCTURE_WORKING')
10177             ,1
10178             ,1
10179             ,'Y'
10180         ,p_dest_project_id
10181         ,'PA_PROJECTS'
10182             );
10183 
10184       --bug 3912603, insert records into pa_proj_elem_ver_Schedule, Satish, start
10185           PA_TASK_PUB1.Create_Schedule_Version(
10186                    p_element_version_id        => l_new_wp_ver_id
10187                   ,p_scheduled_start_date      => SYSDATE
10188                   ,p_scheduled_end_date        => SYSDATE
10189                   ,x_pev_schedule_id           => x_pev_schedule_id
10190                   ,x_return_status             => l_return_status
10191                   ,x_msg_count                 => l_msg_count
10192                   ,x_msg_data                  => l_msg_data
10193           );
10194           IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10195               x_msg_count := FND_MSG_PUB.count_msg;
10196               IF x_msg_count = 1 THEN
10197                     x_msg_data := l_msg_data;
10198               END IF;
10199               RAISE FND_API.G_EXC_ERROR;
10200           END IF;
10201           --bug 3912603, insert records into pa_proj_elem_ver_Schedule, Satish, end
10202 
10203         END IF;
10204     END IF;--If  there is atleast one WP version selected
10205 
10206     ---------------------------------------------------------------------------------------------------------
10207     /**** THE FOLLOWING SECTION COPIES/INSERTS FINANCIAL VERSIONS AND TASKS INTO THE DESTINATION PROJECT ****/
10208     ---------------------------------------------------------------------------------------------------------
10209     --If split and financial is enabled
10210     IF 'N' = l_shared AND 'Y' = l_fin_enabled THEN
10211 
10212         IF l_debug_mode = 'Y' THEN
10213             Pa_Debug.WRITE(G_PKG_NAME, 'Creating financial version in split case', l_debug_level3);
10214         END IF;
10215 
10216         --The following API call will copy the financial version from the source project to the destination project
10217         copy_src_financial_version(  p_init_msg_list        => p_init_msg_list
10218                                     ,p_src_project_id       => p_src_project_id
10219                                     ,p_dest_project_id      => p_dest_project_id
10220                                     ,p_dest_fn_structure_id => l_dest_fn_structure_id
10221                                     ,p_shared               => l_shared
10222                                     ,p_dest_template_flag   => p_dest_template_flag
10223                                     ,p_publish_person_id    => l_publish_person_id
10224                                     ,x_return_status        => l_return_status
10225                                     ,x_msg_count            => l_msg_count
10226                                     ,x_msg_data             => l_msg_data
10227                                   );
10228 
10229         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10230             x_msg_count := FND_MSG_PUB.count_msg;
10231             IF x_msg_count = 1 THEN
10232                 x_msg_data := l_msg_data;
10233             END IF;
10234             RAISE FND_API.G_EXC_ERROR;
10235         END IF;
10236 
10237         --If copy financial tasks flag is checked
10238         IF 'Y' = l_fin_tasks_flag THEN
10239 
10240             IF l_debug_mode = 'Y' THEN
10241                 Pa_Debug.WRITE(G_PKG_NAME, 'Creating financial tasks in split case', l_debug_level3);
10242             END IF;
10243 
10244             --The following API call will copy the tasks belonging to the financial version in the source project into
10245             --the destination project
10246             copy_src_financial_ver_tasks( p_init_msg_list            => p_init_msg_list
10247                                          ,p_src_project_id           => p_src_project_id
10248                                          ,p_dest_project_id          => p_dest_project_id
10249                                          ,p_dest_fn_structure_id     => l_dest_fn_structure_id
10250                                          ,p_shared                   => l_shared
10251                                          ,p_copy_ppevSchedules_flag  => 'N'   --Copy pa_proj_elem_ver_schedules or not
10252                                          ,p_target_start_date        => p_target_start_date
10253                                          ,p_target_finish_date       => p_target_finish_date
10254                                          ,p_calendar_id              => p_calendar_id
10255                                          ,x_return_status            => l_return_status
10256                                          ,x_msg_count                => l_msg_count
10257                                          ,x_msg_data                 => l_msg_data
10258                                         );
10259             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10260                 x_msg_count := FND_MSG_PUB.count_msg;
10261                 IF x_msg_count = 1 THEN
10262                     x_msg_data := l_msg_data;
10263                 END IF;
10264                 RAISE FND_API.G_EXC_ERROR;
10265             END IF;
10266         END IF;
10267 
10268     END IF;--If split and financial is enabled
10269 
10270     ---------------------------------------------------------------------------------------------------------------------
10271     /**** THE FOLLOWING SECTION COPIES OTHER INFORMATION RELATED TO VERSIONS AND TASKS INTO THE DESTINATION PROJECT ****/
10272     ---------------------------------------------------------------------------------------------------------------------
10273 
10274     IF 'Y' = l_shared THEN
10275         --Get the destination project's shared structure id
10276         OPEN  cur_get_shared_struc_id;
10277         FETCH cur_get_shared_struc_id INTO l_dest_shared_struc_id, l_src_shared_struc_id;
10278         CLOSE cur_get_shared_struc_id;
10279     END IF;
10280 
10281     --Updating Duration
10282     IF l_workplan_enabled = 'Y' THEN
10283          -- Bug 3657808 Remove duration calculation using calendar
10284      -- and rewritting the query
10285         /*UPDATE pa_proj_elem_ver_schedule
10286            SET duration = PA_PROJ_TASK_STRUC_PUB.calc_duration( p_calendar_id,
10287                                                                 scheduled_start_date,
10288                                                                 scheduled_finish_date )
10289          WHERE project_id = p_dest_project_id;*/
10290         UPDATE pa_proj_elem_ver_schedule
10291            SET duration = trunc(scheduled_finish_date) - trunc(scheduled_start_date) + 1
10292          WHERE project_id = p_dest_project_id;
10293     END IF;
10294 
10295     ---Updating Baselined Dates
10296     UPDATE PA_PROJ_ELEMENTS ppe
10297        SET ( BASELINE_START_DATE
10298             ,BASELINE_FINISH_DATE
10299             ,BASELINE_DURATION
10300            ) = ( SELECT ppevs.scheduled_start_date
10301                        ,ppevs.scheduled_finish_date
10302                        ,ppevs.duration
10303                    FROM pa_proj_elem_ver_schedule ppevs,
10304                         pa_proj_element_versions ppev
10305                   WHERE ppevs.project_id           = p_dest_project_id
10306                     AND ppevs.proj_element_id      = ppev.proj_element_id
10307                     AND ppevs.element_version_id   = ppev.element_version_id
10308                     AND ppev.project_id            = p_dest_project_id
10309                     AND ppevs.proj_element_id      = ppe.proj_element_id
10310                     AND ppev.proj_element_id       = ppe.proj_element_id
10311                     AND ppev.parent_structure_version_id =
10312                             (  SELECT ppevst.element_version_id   --Changed the inner query for bug 4215666.
10313                                FROM   pa_proj_elem_ver_structure ppevst,
10314                                       pa_proj_structure_types struc,
10315                                       pa_structure_types stype
10316                                WHERE  ppevst.project_id          = p_dest_project_id
10317                                AND    ppevst.current_flag        = 'Y'
10318                                AND    ppevst.status_code         = 'STRUCTURE_PUBLISHED'
10319                                AND    ppevst.proj_element_id     = struc.proj_element_id
10320                                AND    struc.structure_type_id    = stype.structure_type_id
10321                                AND    stype.structure_type       = 'WORKPLAN'
10322                             )
10323                 )
10324     WHERE project_id = p_dest_project_id;
10325 
10326     --Updating Projects Dates
10327     UPDATE pa_projects_all
10328        SET ( BASELINE_START_DATE ,BASELINE_FINISH_DATE,  baseline_duration, baseline_as_of_date ) =
10329               ( SELECT BASELINE_START_DATE ,BASELINE_FINISH_DATE,  baseline_duration,
10330                              decode( BASELINE_START_DATE, null, null, sysdate)
10331                   FROM pa_proj_elements ppe, pa_proj_structure_types ppst
10332                  WHERE project_id = p_dest_project_id
10333                    AND object_type = 'PA_STRUCTURES'
10334                    AND ppe.proj_element_id = ppst.proj_element_id
10335                    AND ppst.structure_type_id = 1
10336                )
10337     WHERE project_id = p_dest_project_id;
10338 
10339     --Get the latest published version id in the destination project
10340     l_dest_latest_pub_ver_id := PA_PROJ_ELEMENTS_UTILS.latest_published_ver_id( p_dest_project_id, 'WORKPLAN' ) ;
10341 
10342      IF l_dest_latest_pub_ver_id IS NOT NULL THEN
10343          UPDATE pa_projects_all
10344             SET ( scheduled_START_DATE ,scheduled_FINISH_DATE,  scheduled_duration, scheduled_as_of_date ) =
10345                     ( SELECT SCHEDULED_START_DATE ,SCHEDULED_FINISH_DATE,  duration,
10346                              decode( SCHEDULED_START_DATE, null, null, sysdate )
10347                         FROM pa_proj_elem_ver_schedule
10348                        WHERE project_id = p_dest_project_id
10349                          AND element_version_id = l_dest_latest_pub_ver_id
10350                      )
10351             WHERE project_id = p_dest_project_id;
10352      END IF;
10353 
10354     /* Included  for Bug 3922019
10355        In case of templates l_dest_latest_pub_ver_id will be NULL (No latest published version etc. for templates)
10356        So,In that case,Select the Only Workplan Version Id that would be available for the template*/
10357 
10358     OPEN c_template_flag(p_dest_project_id) ;
10359     FETCH c_template_flag INTO l_template_flag ;
10360     CLOSE c_template_flag ;
10361 
10362     IF nvl(l_template_flag,'N') = 'Y' THEN
10363         OPEN c_only_wp_ver_id(p_dest_project_id) ;
10364         FETCH c_only_wp_ver_id INTO l_only_wp_ver_id ;
10365         CLOSE c_only_wp_ver_id ;
10366 
10367         UPDATE pa_projects_all
10368        SET ( scheduled_START_DATE ,scheduled_FINISH_DATE,  scheduled_duration, scheduled_as_of_date ) =
10369            ( SELECT SCHEDULED_START_DATE ,SCHEDULED_FINISH_DATE,  duration,
10370                 decode( SCHEDULED_START_DATE, null, null, sysdate )
10371                FROM pa_proj_elem_ver_schedule
10372               WHERE project_id = p_dest_project_id
10373                         AND element_version_id = l_only_wp_ver_id
10374                      )
10375            WHERE project_id = p_dest_project_id;
10376     END IF;
10377 
10378     /* End of code changes for Bug 3922019*/
10379 
10380     IF l_debug_mode = 'Y' THEN
10381         Pa_Debug.WRITE(G_PKG_NAME, 'Copying task attachments...', l_debug_level3);
10382     END IF;
10383 
10384     --Copy Task Attachments
10385     OPEN  cur_get_flag('WP_TASK_ATTACH_FLAG');
10386     FETCH cur_get_flag INTO l_wp_task_attach_flag;
10387     CLOSE cur_get_flag;
10388 
10389     IF l_debug_mode = 'Y' THEN
10390         Pa_Debug.WRITE(G_PKG_NAME, 'l_wp_task_attach_flag '||l_wp_task_attach_flag, l_debug_level3);
10391     END IF;
10392 
10393     OPEN  cur_get_flag('FN_ATTACHMENTS_FLAG');
10394     FETCH cur_get_flag INTO l_fn_task_attach_flag;
10395     CLOSE cur_get_flag;
10396 
10397     IF l_debug_mode = 'Y' THEN
10398         Pa_Debug.WRITE(G_PKG_NAME, 'l_fn_task_attach_flag '||l_fn_task_attach_flag, l_debug_level3);
10399     END IF;
10400 
10401     IF 'Y' = l_shared THEN
10402         IF ('Y' = l_min_one_wp_ver_sel AND 'Y' = l_wp_task_attach_flag )
10403         OR ('Y' = l_fin_tasks_flag AND 'Y' = l_fn_task_attach_flag ) THEN
10404             FOR rec_copied_tasks IN cur_get_copied_tasks( l_dest_shared_struc_id ) LOOP
10405                 FND_ATTACHED_DOCUMENTS2_PKG.COPY_ATTACHMENTS(
10406                 'PA_TASKS',
10407                 rec_copied_tasks.src_ppe_id,
10408                 null, null, null, null,
10409                 'PA_TASKS',
10410                 rec_copied_tasks.dest_ppe_id,
10411                 null, null, null, null,
10412                 FND_GLOBAL.USER_ID,
10413                 FND_GLOBAL.LOGIN_ID,
10414                 275, null, null
10415                 );
10416             END LOOP;
10417         END IF;
10418     ELSE
10419         IF 'Y' = l_wp_task_attach_flag THEN
10420             FOR rec_copied_tasks IN cur_get_copied_tasks( l_dest_wp_structure_id ) LOOP
10421                 FND_ATTACHED_DOCUMENTS2_PKG.COPY_ATTACHMENTS(
10422                 'PA_TASKS',
10423                 rec_copied_tasks.src_ppe_id,
10424                 null, null, null, null,
10425                 'PA_TASKS',
10426                 rec_copied_tasks.dest_ppe_id,
10427                 null, null, null, null,
10428                 FND_GLOBAL.USER_ID,
10429                 FND_GLOBAL.LOGIN_ID,
10430                 275, null, null
10431                 );
10432             END LOOP;
10433         END IF;
10434 
10435         IF 'Y' = l_fn_task_attach_flag THEN
10436             FOR rec_copied_tasks IN cur_get_copied_tasks( l_dest_fn_structure_id ) LOOP
10437                 FND_ATTACHED_DOCUMENTS2_PKG.COPY_ATTACHMENTS(
10438                 'PA_TASKS',
10439                 rec_copied_tasks.src_ppe_id,
10440                 null, null, null, null,
10441                 'PA_TASKS',
10442                 rec_copied_tasks.dest_ppe_id,
10443                 null, null, null, null,
10444                 FND_GLOBAL.USER_ID,
10445                 FND_GLOBAL.LOGIN_ID,
10446                 275, null, null
10447                 );
10448             END LOOP;
10449         END IF;
10450     END IF;
10451 
10452     --Need To Sync Up Transaction Dates If Auto Sync Is On
10453     IF l_shared = 'Y' THEN
10454 
10455         IF  (PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_DATE_SYNC_ENABLED(l_dest_shared_struc_id) = 'Y')
10456         AND (PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_PUB_AT_CREATION(p_src_project_id) = 'Y')  THEN
10457             --Copy to transaction date
10458             PA_PROJECT_DATES_PUB.COPY_PROJECT_DATES(
10459              p_project_id => p_dest_project_id,
10460              x_return_status => l_return_status,
10461              x_msg_count => l_msg_count,
10462              x_msg_data => l_msg_data
10463             );
10464 
10465            IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10466                 x_msg_count := FND_MSG_PUB.count_msg;
10467                 IF x_msg_count = 1 THEN
10468                     x_msg_data := l_msg_data;
10469                 END IF;
10470                 RAISE FND_API.G_EXC_ERROR;
10471            END IF;
10472         END IF;
10473     END IF;
10474 
10475     DECLARE
10476         Old_Versions_Tab  SYSTEM.pa_num_tbl_type;
10477         New_Versions_Tab  SYSTEM.pa_num_tbl_type;
10478 
10479         l_wp_inter_proj_depend_flag VARCHAR2(1);
10480     BEGIN
10481         SELECT Element_Version_ID, attribute15 BULK COLLECT
10482         INTO   New_Versions_Tab, Old_Versions_Tab
10483         FROM   PA_Proj_Element_Versions
10484         WHERE  Project_ID = p_dest_project_id;
10485 
10486         PA_Relationship_Pvt.Copy_Intra_Dependency (
10487           P_Source_Ver_Tbl  => Old_Versions_Tab,
10488           P_Destin_Ver_Tbl  => New_Versions_Tab,
10489           X_Return_Status   => X_Return_Status,
10490           X_Msg_Count       => X_Msg_Count,
10491           X_Msg_Data        => X_Msg_Data
10492         );
10493         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10494            RAISE FND_API.G_EXC_ERROR;
10495         END IF;
10496 
10497         OPEN  cur_get_flag('WP_INTER_PROJ_DEPEND_FLAG');
10498         FETCH cur_get_flag INTO l_wp_inter_proj_depend_flag;
10499         CLOSE cur_get_flag;
10500 
10501         IF 'Y' = l_wp_inter_proj_depend_flag THEN
10502             PA_RELATIONSHIP_PVT.Copy_Inter_Project_Dependency (
10503             P_Source_Ver_Tbl     => Old_Versions_Tab,
10504             P_Destin_Ver_Tbl     => New_Versions_Tab,
10505             X_Return_Status      => X_Return_Status,
10506             X_Msg_Count          => X_Msg_Count,
10507             X_Msg_Data           => X_Msg_Data
10508             );
10509             IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10510                RAISE FND_API.G_EXC_ERROR;
10511             END IF;
10512         END IF;
10513     END ;--Finished copying Intra and Inter Project Dependencies
10514 
10515     DECLARE
10516         CURSOR cur_get_str_shr_code IS
10517         SELECT structure_sharing_code
10518         FROM   pa_projects_all
10519         WHERE  project_id = p_dest_project_id;
10520 
10521         src_versions_tab   SYSTEM.pa_num_tbl_type;
10522         dest_versions_tab  SYSTEM.pa_num_tbl_type;
10523         l_dest_proj_struc_shr_code VARCHAR2(30);
10524 
10525         l_wp_res_assign_flag       VARCHAR2(1) := 'N';
10526         l_wp_ra_people_flag        VARCHAR2(1) := 'N';
10527         l_wp_ra_equipment_flag     VARCHAR2(1) := 'N';
10528         l_wp_ra_material_flag      VARCHAR2(1) := 'N';
10529         l_wp_ra_fin_element_flag   VARCHAR2(1) := 'N';
10530 
10531     BEGIN
10532 
10533         SELECT Element_Version_ID, attribute15 BULK COLLECT
10534         INTO   dest_versions_tab, src_Versions_Tab
10535         FROM   PA_Proj_Element_Versions
10536         WHERE  Project_ID = p_dest_project_id
10537         AND ( PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(element_version_id, 'WORKPLAN') = 'Y')
10538         AND object_type = 'PA_STRUCTURES';
10539 
10540         OPEN  cur_get_str_shr_code;
10541         FETCH cur_get_str_shr_code INTO l_dest_proj_struc_shr_code;
10542         CLOSE cur_get_str_shr_code;
10543 
10544         IF l_dest_proj_struc_shr_code = 'SPLIT_MAPPING' THEN
10545              -- Copy mapping only in case of split structures with mapping
10546              PA_PROJ_STRUC_MAPPING_PUB.copy_mapping
10547              ( p_context               => 'COPY_PROJECT'
10548               ,p_src_project_id        => p_src_project_id
10549               ,p_dest_project_id       => p_dest_project_id
10550               ,x_return_status          => x_return_status
10551               ,x_msg_count              => x_msg_count
10552               ,x_Msg_data               => x_msg_data
10553              );
10554              IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10555                 RAISE FND_API.G_EXC_ERROR;
10556              END IF;
10557         END IF;
10558 
10559         OPEN  cur_get_flag('WP_RES_ASSIGN_FLAG');
10560         FETCH cur_get_flag INTO l_wp_res_assign_flag;
10561         CLOSE cur_get_flag;
10562         --NOTE : If Resource Assignments flag is unchecked, all other flags - people, equipment, material
10563         --and financial elements would be 'N'
10564 
10565         IF 'Y' = l_wp_res_assign_flag THEN
10566             OPEN  cur_get_flag('WP_RA_PEOPLE_FLAG');
10567             FETCH cur_get_flag INTO l_wp_ra_people_flag;
10568             CLOSE cur_get_flag;
10569 
10570             OPEN  cur_get_flag('WP_RA_EQUIPMENT_FLAG');
10571             FETCH cur_get_flag INTO l_wp_ra_equipment_flag;
10572             CLOSE cur_get_flag;
10573 
10574             OPEN  cur_get_flag('WP_RA_MATERIAL_FLAG');
10575             FETCH cur_get_flag INTO l_wp_ra_material_flag;
10576             CLOSE cur_get_flag;
10577 
10578             OPEN  cur_get_flag('WP_RA_FIN_ELEMENT_FLAG');
10579             FETCH cur_get_flag INTO l_wp_ra_fin_element_flag;
10580             CLOSE cur_get_flag;
10581         END IF;
10582 
10583         --bug 3912603, call add_planning_transactions if no wp selected and split, Satish
10584         -- Copies budget versions, resource assignments and budget lines as required for the workplan version.
10585         --IF ('Y' = l_shared AND 'N' = l_fin_tasks_flag)
10586         --OR ('N' = l_shared AND 'Y' = l_workplan_enabled) THEN
10587     IF ('Y' = check_str_sel_flag AND 'N' = nvl(l_min_one_wp_ver_sel,'N')) THEN
10588         IF l_debug_mode = 'Y' THEN
10589             Pa_Debug.WRITE(G_PKG_NAME, 'Calling  add_planning_transactions ', l_debug_level3);
10590             Pa_Debug.WRITE(G_PKG_NAME, 'Calling  add_planning_transactions p_dest_project_id '||p_dest_project_id, l_debug_level3);
10591             Pa_Debug.WRITE(G_PKG_NAME, 'Calling  add_planning_transactions l_new_wp_ver_id '||l_new_wp_ver_id, l_debug_level3);
10592         END IF;
10593         PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions
10594         (
10595             p_context                => 'WORKPLAN'
10596             ,p_project_id             => p_dest_project_id
10597             ,p_struct_elem_version_id => l_new_wp_ver_id
10598             ,x_return_status          => x_return_status
10599             ,x_msg_count              => x_msg_count
10600             ,x_Msg_data               => x_msg_data
10601         );
10602         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10603            RAISE FND_API.G_EXC_ERROR;
10604         END IF;
10605     ELSE
10606         IF l_debug_mode = 'Y' THEN
10607             Pa_Debug.WRITE(G_PKG_NAME, 'Calling  copy_wp_budget_versions ', l_debug_level3);
10608         END IF;
10609         PA_FP_COPY_FROM_PKG.copy_wp_budget_versions
10610          ( p_source_project_id            => p_src_project_id
10611           ,p_target_project_id            => p_dest_project_id
10612           ,p_src_sv_ids_tbl               => src_Versions_Tab  -- Workplan version id tbl
10613           ,p_target_sv_ids_tbl            => dest_Versions_Tab -- Workplan version id tbl
10614           ,p_copy_people_flag             => l_wp_ra_people_flag
10615           ,p_copy_equip_flag              => l_wp_ra_equipment_flag
10616           ,p_copy_mat_item_flag           => l_wp_ra_material_flag
10617           ,p_copy_fin_elem_flag           => l_wp_ra_fin_element_flag
10618           ,x_return_status                => x_return_status
10619           ,x_msg_count                    => x_msg_count
10620           ,x_Msg_data                     => x_msg_data
10621          );
10622         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10623            RAISE FND_API.G_EXC_ERROR;
10624         END IF;
10625     END IF;
10626 
10627     IF ( 'Y' = l_dlv_enabled AND 'Y' = l_wp_deliverables_flag ) THEN
10628 
10629             PA_DELIVERABLE_PUB.copy_deliverables
10630              (p_source_project_id    => p_src_project_id
10631              ,p_target_project_id    => p_dest_project_id
10632              ,p_item_details_flag    => l_wp_dlv_item_det_flag
10633              ,p_dlv_actions_flag     => 'Y'
10634              ,p_dlv_attachments_flag => l_wp_dlv_attach_flag
10635              ,p_association_flag     => l_wp_dlv_assoc_task_flag
10636              ,p_prefix               => 'CP'
10637              ,p_delta                => p_delta
10638              ,p_calling_context      => 'COPY_PROJECT'
10639              ,x_return_status        => x_return_status
10640              ,x_msg_count            => x_msg_count
10641              ,x_Msg_data             => x_msg_data
10642              );
10643 
10644             IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10645              RAISE FND_API.G_EXC_ERROR;
10646             END IF;
10647         END IF;
10648     END;
10649 
10650 /* This code is moved to Copy_Project API for bug 4200168 so that BF can use attribute15 to access source task id in copy finplan API*/
10651  /* Now update back the attributes column in pa_proj_elements and pa_proj_element_versions with actual data from source project
10652     UPDATE pa_proj_elements ppe1
10653     SET attribute15 = ( SELECT attribute15 FROM pa_proj_elements ppe2
10654                          WHERE ppe2.project_id = p_src_project_id
10655                            AND ppe2.proj_element_id = ppe1.attribute15 )
10656     WHERE project_id = p_dest_project_id ;
10657 
10658     UPDATE pa_proj_element_versions ppevs1
10659     SET attribute15 = ( SELECT attribute15 FROM pa_proj_element_versions ppevs2
10660                          WHERE ppevs2.project_id = p_src_project_id
10661                            AND ppevs2.element_version_id = ppevs1.attribute15 )
10662     WHERE project_id = p_dest_project_id ; */
10663 
10664     --3916763 Begin
10665 
10666     IF l_debug_mode = 'Y' THEN
10667     Pa_Debug.WRITE(G_PKG_NAME, 'l_submit_wf_required='||l_submit_wf_required, l_debug_level3);
10668     Pa_Debug.WRITE(G_PKG_NAME, 'p_dest_project_id='||p_dest_project_id, l_debug_level3);
10669     Pa_Debug.WRITE(G_PKG_NAME, 'l_submit_wf_str_id='||l_submit_wf_str_id, l_debug_level3);
10670     Pa_Debug.WRITE(G_PKG_NAME, 'l_submit_wf_str_version_id='||l_submit_wf_str_version_id, l_debug_level3);
10671     Pa_Debug.WRITE(G_PKG_NAME, 'fnd_global.resp_id='||fnd_global.resp_id, l_debug_level3);
10672     END IF;
10673 
10674     IF l_submit_wf_required = 'Y' AND l_submit_wf_str_version_id IS NOT NULL THEN
10675     IF l_debug_mode = 'Y' THEN
10676         Pa_Debug.WRITE(G_PKG_NAME, 'Calling SUBMIT_WORKPLAN ', l_debug_level3);
10677     END IF;
10678 
10679     PA_PROJECT_STRUCTURE_PUB1.SUBMIT_WORKPLAN
10680         (
10681                      p_calling_module       => p_calling_module
10682                     ,p_project_id       => p_dest_project_id
10683                     ,p_structure_id     => l_submit_wf_str_id
10684                 ,p_structure_version_id     => l_submit_wf_str_version_id
10685             ,p_responsibility_id        => fnd_global.resp_id
10686             ,x_return_status            => x_return_status
10687                     ,x_msg_count                => x_msg_count
10688                     ,x_msg_data                 => x_msg_data
10689                 );
10690     IF l_debug_mode = 'Y' THEN
10691         Pa_Debug.WRITE(G_PKG_NAME, 'After Call SUBMIT_WORKPLAN x_return_status='||x_return_status, l_debug_level3);
10692     END IF;
10693     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10694         RAISE FND_API.G_EXC_ERROR;
10695     END IF;
10696     END IF;
10697     --3916763 End
10698 
10699     x_return_status := FND_API.G_RET_STS_SUCCESS ;
10700 
10701 	-- Added for CBS phase 2 16470603
10702 
10703 	l_Cbs_Enabled := PA_ALTERNATE_TASK_PVT.Is_Cbs_Enabled(p_Project_Id => p_src_project_id);
10704 	IF l_Cbs_Enabled='Y' THEN
10705 				IF l_debug_mode = 'Y' THEN
10706 					Pa_Debug.WRITE(G_PKG_NAME, ' Create Alterante tasks, call PA_ALTERNATE_TASK_PVT.Copy_Cost_Codes_From_Project API', l_debug_level3);
10707 				END IF;
10708 				PA_ALTERNATE_TASK_PVT.Copy_Cost_Codes_From_Project(
10709 							p_Source_Project_Id =>p_src_project_id,
10710 							p_Target_Project_Id =>p_dest_project_id,
10711 							X_Return_Status =>X_Return_Status,
10712 							X_Msg_Data =>X_Msg_Data,
10713 							X_Msg_Count=>X_Msg_Count);
10714 				IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10715 					RAISE FND_API.G_EXC_ERROR;
10716 				END IF;
10717 				IF l_debug_mode = 'Y' THEN
10718 					Pa_Debug.WRITE(G_PKG_NAME, ' Created Alterante tasks for cbs enabled projects', l_debug_level3);
10719 				END IF;
10720 	END IF;-- Added for CBS phase 2 16470603
10721 
10722     IF (p_commit = FND_API.G_TRUE) THEN
10723         COMMIT;
10724     END IF;
10725 
10726     IF (p_debug_mode = 'Y') THEN
10727         pa_debug.debug('PA_PROJ_TASK_STRUC_PUB.copy_structures_tasks_bulk END');
10728         Pa_Debug.reset_curr_function; --For bug 4252182
10729     END IF;
10730 
10731 EXCEPTION
10732 
10733 WHEN FND_API.G_EXC_ERROR THEN
10734 
10735      x_return_status := Fnd_Api.G_RET_STS_ERROR;
10736 
10737      IF p_commit = FND_API.G_TRUE THEN
10738         ROLLBACK TO copy_struc_tasks_bulk;
10739      END IF;
10740 
10741      l_msg_count := Fnd_Msg_Pub.count_msg;
10742      IF l_msg_count = 1 AND x_msg_data IS NULL
10743       THEN
10744           Pa_Interface_Utils_Pub.get_messages
10745               ( p_encoded        => Fnd_Api.G_FALSE
10746               , p_msg_index      => 1
10747               , p_msg_count      => l_msg_count
10748               , p_msg_data       => l_msg_data
10749               , p_data           => l_data
10750               , p_msg_index_out  => l_msg_index_out);
10751           x_msg_data := l_data;
10752           x_msg_count := l_msg_count;
10753      ELSE
10754           x_msg_count := l_msg_count;
10755      END IF;
10756 
10757      IF l_debug_mode = 'Y' THEN
10758           Pa_Debug.reset_curr_function;
10759      END IF;
10760 
10761 WHEN Invalid_Arg_Exc_WP THEN
10762      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
10763      x_msg_count     := 1;
10764      x_msg_data      := ' PA_PROJ_TASK_STRUC_PUB : copy_structures_tasks_bulk : NULL parameters passed';
10765 
10766      IF p_commit = FND_API.G_TRUE THEN
10767         ROLLBACK TO copy_struc_tasks_bulk;
10768      END IF;
10769 
10770      Fnd_Msg_Pub.add_exc_msg
10771                    (  p_pkg_name         => 'PA_TOP_TASK_CUST_INVOICE_PVT'
10772                     , p_procedure_name  => 'copy_structures_tasks_bulk'
10773                     , p_error_text      => x_msg_data);
10774 
10775      IF l_debug_mode = 'Y' THEN
10776           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
10777           Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
10778                          l_debug_level5);
10779           Pa_Debug.reset_curr_function;
10780      END IF;
10781      RAISE;
10782 
10783 WHEN OTHERS THEN
10784      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
10785      x_msg_count     := 1;
10786      x_msg_data      := SQLERRM;
10787 
10788      IF p_commit = FND_API.G_TRUE THEN
10789         ROLLBACK TO copy_struc_tasks_bulk;
10790      END IF;
10791 
10792      Fnd_Msg_Pub.add_exc_msg
10793        ( p_pkg_name         => 'PA_PROJ_TASK_STRUC_PUB'
10794         , p_procedure_name  => 'copy_structures_tasks_bulk'
10795         , p_error_text      => x_msg_data);
10796 
10797      IF l_debug_mode = 'Y' THEN
10798           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
10799           Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,
10800                          l_debug_level5);
10801           Pa_Debug.reset_curr_function;
10802      END IF;
10803      RAISE;
10804 END copy_structures_tasks_bulk;
10805 
10806 
10807 FUNCTION get_adjusted_dates(
10808    p_target_start_date    DATE
10809   ,p_target_finish_date   DATE
10810   ,p_delta NUMBER
10811   ,p_scheduled_start_date  DATE
10812   ,p_scheduled_finish_date  DATE
10813  ) RETURN DATE IS
10814 --fix bug 2831973
10815 -- l_delta    NUMBER;
10816  l_scheduled_start_date  DATE;
10817  l_scheduled_finish_date DATE;
10818 BEGIN
10819 
10820 --fix bug 2831973
10821 --replace all l_delta with p_delta
10822 --    IF (p_target_start_date IS NULL) THEN
10823 --       l_delta := 0;
10824 --    ELSE
10825 --       l_delta := p_target_start_date - p_scheduled_start_date;
10826 --    END IF;
10827 
10828     --calculate scheduled start and finish dates
10829     IF (p_target_finish_date < p_scheduled_start_date + p_delta) THEN
10830         l_scheduled_start_date := p_target_finish_date;
10831     ELSE
10832         l_scheduled_start_date := p_scheduled_start_date + p_delta;
10833     END IF;
10834 
10835     IF (p_target_finish_date < p_scheduled_finish_date + p_delta) THEN
10836         l_scheduled_finish_date := p_target_finish_date;
10837     ELSE
10838         l_scheduled_finish_date := p_scheduled_finish_date + p_delta;
10839     END IF;
10840 
10841     IF p_scheduled_finish_date IS NULL
10842     THEN
10843        RETURN l_scheduled_start_date;
10844     ELSE
10845        RETURN l_scheduled_finish_date;
10846     END IF;
10847 
10848 END get_adjusted_dates;
10849 
10850 PROCEDURE copy_structures_bulk
10851 ( p_commit                        IN VARCHAR2    := FND_API.G_FALSE
10852  ,p_validate_only                 IN VARCHAR2    := FND_API.G_TRUE
10853  ,p_validation_level              IN VARCHAR2    := 100
10854  ,p_calling_module                IN VARCHAR2    := 'SELF_SERVICE'
10855  ,p_debug_mode                    IN VARCHAR2    := 'N'
10856  ,p_max_msg_count                 IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
10857  ,p_src_project_id                IN NUMBER
10858  ,p_dest_project_id               IN NUMBER
10859  ,p_delta                         IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
10860  ,p_copy_task_flag                IN VARCHAR2    := 'Y'
10861  ,p_dest_template_flag            IN VARCHAR2    := 'N'     --bug 2805602
10862  ,p_src_template_flag            IN VARCHAR2    := 'N'   --bug 2805602
10863  ,p_dest_project_name             IN VARCHAR2               --bug 2805602
10864  ,p_target_start_date             IN DATE
10865  ,p_target_finish_date             IN DATE
10866  ,p_calendar_id                   IN NUMBER
10867  ,x_return_status                OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10868  ,x_msg_count                    OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
10869  ,x_msg_data                     OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
10870 IS
10871   l_return_status                VARCHAR2(1);
10872   l_msg_count                    NUMBER;
10873   l_msg_data                     VARCHAR2(250);
10874   l_append                       VARCHAR2(10) := ': ';
10875   l_project_name             VARCHAR2(250);
10876   l_workplan_enabled         VARCHAR2(1);
10877   l_shared                   VARCHAR2(1);
10878   l_versioning_enabled       VARCHAR2(1);
10879   l_auto_pub_enabled         VARCHAR2(1);
10880   l_src_template_flag        VARCHAR2(1);
10881   l_dest_template_flag       VARCHAR2(1);
10882   l_copy_flag_set            VARCHAR2(1);
10883   l_max_date                 DATE;
10884   l_max_date2                DATE;
10885   l_latst_upd_wrkng_str_ver  NUMBER;
10886   l_fin_str_copy_flag       VARCHAR2(1);
10887   l_LATEST_EFF_PUBLISHED_FLAG   VARCHAR2(1);
10888   l_name                     VARCHAR2(250);
10889   l_suffix                   VARCHAR2(250);
10890   l_struc_version_id         NUMBER;
10891   l_src_str_version_id       NUMBER;
10892   i                          NUMBER;
10893   j                          NUMBER ;
10894   k                          NUMBER ;
10895 
10896   --fix bug 2831973
10897   l_delta                    NUMBER;
10898   l_src_sch_st_date          DATE;
10899   CURSOR get_src_sch_st_date(c_project_id NUMBER, c_struc_ver_id NUMBER) IS
10900     select scheduled_start_date
10901     from pa_proj_elem_ver_schedule
10902     where project_id = c_project_id
10903     and element_version_id = c_struc_ver_id;
10904 
10905 
10906 /*bug 3737444 : The below code commented */
10907 /*  CURSOR get_wp_attr IS
10908     select *
10909     from   pa_proj_workplan_attr
10910     where  project_id = p_src_project_id; */
10911 
10912 /* Code Addition starts for bug 3737444 */
10913   CURSOR get_wp_attr IS
10914     select * from  pa_proj_workplan_attr pppa where pppa.project_id=p_src_project_id
10915     and exists (select null from pa_proj_structure_types pst, pa_structure_types ps
10916                 where pst.structure_type_id=ps.structure_type_id
10917                 and  ps. STRUCTURE_TYPE ='WORKPLAN'
10918                 and pst.proj_element_id=pppa.proj_element_id);
10919 
10920 
10921 /* Code Addition ends for bug 3737444 */
10922 
10923   l_wp_attr_rec get_wp_attr%ROWTYPE;
10924   l_user_id    NUMBER := FND_GLOBAL.USER_ID;
10925   l_login_id   NUMBER := FND_GLOBAL.LOGIN_ID;
10926 
10927   CURSOR l_get_structure_attr_csr
10928   IS
10929 /*  SELECT *
10930   FROM PA_PROJ_ELEM_ver_structure ppevs
10931   WHERE project_id = p_src_project_id;*//*Commented below query and following criteria by SMUKKA */
10932   select ppevs.*
10933     from pa_structure_types pst,
10934          pa_proj_structure_types ppst,
10935          pa_proj_elem_ver_structure ppevs
10936    where ppevs.project_id = p_src_project_id
10937      and ppevs.proj_element_id= ppst.proj_element_id
10938      and ppst.structure_type_id = pst.structure_type_id
10939      and pst.structure_type in ('WORKPLAN','FINANCIAL');
10940 
10941   CURSOR l_get_structure_attr_csr2
10942   IS
10943   SELECT ppevs.element_version_id, ppevs.status_code, ppevs.LATEST_EFF_PUBLISHED_FLAG, ppevs.current_flag,
10944          ppst.structure_type_id
10945 /*  FROM PA_PROJ_ELEM_ver_structure ppevs,
10946        pa_proj_structure_types ppst
10947   WHERE project_id = p_src_project_id
10948     AND ppst.proj_element_id(+) = ppevs.proj_element_id;*//*Commented below query and following criteria by SMUKKA */
10949   from pa_proj_elem_ver_structure ppevs,
10950        pa_proj_structure_types ppst,
10951        pa_structure_types pst
10952  where project_id = p_src_project_id
10953    and ppst.proj_element_id(+) = ppevs.proj_element_id
10954    and ppst.structure_type_id = pst.structure_type_id
10955    and pst.structure_type in ('WORKPLAN','FINANCIAL');
10956 
10957    CURSOR cur_elem_ver_seq
10958         IS
10959           SELECT pa_proj_element_versions_s.nextval
10960             FROM sys.dual;
10961 
10962 l_get_structure_attr_csr_rec    l_get_structure_attr_csr%ROWTYPE;
10963 l_get_structure_attr_csr_rec2    l_get_structure_attr_csr2%ROWTYPE;
10964 
10965 TYPE structure_ver_record IS RECORD
10966 (src_str_version_id         NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10967  src_str_status                 VARCHAR2(150)     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
10968  latest_pub_flag           VARCHAR2(1)      := 'N',
10969  current_flag           VARCHAR2(1)      := 'N',
10970  last_update_date           DATE                := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
10971  copy_flag                 VARCHAR2(1)      := 'N',
10972  dest_str_status           VARCHAR2(150)     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
10973  src_stru_type_id          NUMBER           := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
10974 );
10975 
10976 TYPE l_dest_str_versions IS TABLE OF structure_ver_record
10977      INDEX BY BINARY_INTEGER;
10978 l_dest_str_versions_tbl  l_dest_str_versions;
10979 l_latest_pub_str_ver_id  NUMBER;
10980 
10981 /* Code added for 6211012*/
10982 
10983 TYPE typ_obj_rela_id is TABLE OF pa_object_relationships.object_relationship_id%TYPE
10984 INDEX BY BINARY_INTEGER;
10985 l_obj_rel_id typ_obj_rela_id;
10986 
10987 TYPE typ_obj_typ_from is TABLE OF pa_object_relationships.object_type_from%TYPE
10988 INDEX BY BINARY_INTEGER;
10989 l_obj_typ_from typ_obj_typ_from;
10990 
10991 TYPE typ_obj_from_id is TABLE OF pa_object_relationships.object_id_from1%TYPE
10992 INDEX BY BINARY_INTEGER;
10993 l_obj_from_id typ_obj_from_id;
10994 
10995 TYPE typ_obj_typ_to is TABLE OF pa_object_relationships.object_type_to%TYPE
10996 INDEX BY BINARY_INTEGER;
10997 l_obj_typ_to typ_obj_typ_to;
10998 
10999 TYPE typ_obj_to_id is TABLE OF pa_object_relationships.object_id_to1%TYPE
11000 INDEX BY BINARY_INTEGER;
11001 l_obj_to_id typ_obj_to_id;
11002 
11003 TYPE typ_rel_typ is TABLE OF pa_object_relationships.relationship_type%TYPE
11004 INDEX BY BINARY_INTEGER;
11005 l_rel_typ typ_rel_typ;
11006 
11007 TYPE typ_rel_subtyp is TABLE OF pa_object_relationships.relationship_subtype%TYPE
11008 INDEX BY BINARY_INTEGER;
11009 l_rel_subtyp typ_rel_subtyp;
11010 
11011 TYPE typ_rec_ver_num is TABLE OF pa_object_relationships.Record_Version_Number%TYPE
11012 INDEX BY BINARY_INTEGER;
11013 l_rec_ver_num typ_rec_ver_num;
11014 
11015 TYPE typ_wt_percent is TABLE OF pa_object_relationships.weighting_percentage%TYPE
11016 INDEX BY BINARY_INTEGER;
11017 l_wt_percent typ_wt_percent;
11018 
11019 
11020 CURSOR cur_pa_obj_rela_3(c_src_str_version_id NUMBER,
11021 		     c_struc_version_id NUMBER
11022 		     ) IS
11023 SELECT /*+ USE_HASH(ppev2 ppev1)*/
11024      pa_object_relationships_s.nextval,
11025      pobj.object_type_from,
11026      ppev1.element_version_id,
11027      pobj.object_type_to,
11028      ppev2.element_version_id,
11029      pobj.relationship_type,
11030      pobj.relationship_subtype,
11031      pobj.Record_Version_Number,
11032      pobj.weighting_percentage
11033 FROM ( SELECT  object_type_from, object_id_from1,
11034                object_type_to,   object_id_to1,
11035                relationship_type, relationship_subtype,
11036                Record_Version_Number, weighting_percentage
11037        FROM pa_object_relationships
11038        --bug#3094283WHERE RELATIONSHIP_TYPE = 'S'
11039             start with object_id_from1 = c_src_str_version_id
11040             and RELATIONSHIP_TYPE = 'S'  /* Bug 2881667 - Added this condition */
11041             connect by  object_id_from1 =  prior object_id_to1
11042             and RELATIONSHIP_TYPE = 'S' ) pobj,     /* Bug 2881667 - Added this condition */
11043             pa_proj_element_versions ppev1,
11044             pa_proj_element_versions ppev2
11045 WHERE
11046        --bug#3094283   ppev1.project_id = p_dest_project_id
11047             ppev1.attribute15 = pobj.object_id_from1
11048        --bug#3094283 AND ppev2.project_id = p_dest_project_id
11049         AND ppev2.attribute15 = pobj.object_id_to1
11050         AND ppev1.parent_structure_version_id = c_struc_version_id
11051         AND ppev2.parent_structure_version_id = c_struc_version_id;
11052 
11053 /*End of Code added for 6211012*/
11054 
11055 --bug 3138959
11056 
11057 CURSOR cur_pa_struct IS
11058 SELECT ppe.proj_element_id, ppe.attribute15, ppst.structure_type_id
11059 /*  FROM pa_proj_elements ppe, pa_proj_structure_types ppst
11060  WHERE ppe.proj_element_id = ppst.proj_element_id
11061    AND ppe.project_id = p_dest_project_id
11062    AND ppe.object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11063   from pa_proj_elements ppe,
11064        pa_proj_structure_types ppst,
11065        pa_structure_types pst
11066  where ppe.proj_element_id =ppst.proj_element_id
11067    and ppe.project_id = p_dest_project_id
11068    and ppe.object_type = 'PA_STRUCTURES'
11069    and ppst.structure_type_id = pst.structure_type_id
11070    and pst.structure_type in ('WORKPLAN','FINANCIAL');
11071 
11072 
11073   x_err_code             NUMBER;
11074   x_err_stage            VARCHAR2(2000);
11075   x_err_stack            VARCHAR2(2000);
11076 
11077 
11078 --bug 3140032
11079 
11080   CURSOR c_attach_tasks(c_orig_parent_structure_id NUMBER,
11081                         c_new_parent_structure_id NUMBER) is
11082   SELECT orig.proj_element_id orig_task_id,
11083          new.proj_element_id new_task_id
11084     FROM pa_proj_elements orig, pa_proj_elements new
11085    WHERE orig.project_id = p_src_project_id
11086      AND new.element_number = orig.element_number
11087      AND new.project_id = p_dest_project_id
11088      AND new.object_type = 'PA_TASKS'
11089      AND orig.object_type = 'PA_TASKS'
11090      AND orig.parent_structure_id = c_orig_parent_structure_id
11091      AND new.parent_structure_id = c_new_parent_structure_id
11092      ;
11093 
11094   c_atch                        c_attach_tasks%ROWTYPE ;
11095   l_source_parent_structure_id  NUMBER;
11096   l_financial_structure_id      Number;
11097 --bug 3140032
11098 --bug 3138959
11099 
11100   --fix bug 2831775
11101   l_structure_id             NUMBER;
11102   CURSOR get_shared_struc_id IS
11103     select ppe.proj_element_id
11104 /*    from pa_proj_elements
11105     where project_id = p_dest_project_id
11106     and object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11107     from pa_proj_elements ppe,
11108          pa_proj_structure_types ppst,
11109          pa_structure_types pst
11110     where project_id = p_dest_project_id
11111     and object_type = 'PA_STRUCTURES'
11112     and ppe.proj_element_id =ppst.proj_element_id
11113     and ppst.structure_type_id = pst.structure_type_id
11114     and pst.structure_type in ('WORKPLAN','FINANCIAL');
11115 
11116 --bug 2838547
11117     cursor get_person_id(p_user_id NUMBER) IS
11118     select p.person_id
11119       from per_all_people_f p, fnd_user f
11120      where f.employee_id = p.person_id
11121        and sysdate between p.effective_start_date and p.effective_end_date
11122        and f.user_id = p_user_id;
11123 
11124   l_publish_person_id   NUMBER;
11125 --bug 2838547
11126 
11127   --Bug 2955589.
11128   l_structure_ver_name   pa_projects_all.name%TYPE;
11129   l_working_ver_count    NUMBER;
11130   l_structure_version_id pa_proj_element_versions.element_version_id%TYPE;
11131   -- The following two flags will indicate if the respective version has to be
11132   -- created when versioning is enabled and no working version exists for the
11133   -- source project.
11134   l_create_fin_version   VARCHAR2(1);
11135   l_create_wk_version    VARCHAR2(1);
11136 
11137 BEGIN
11138 
11139   IF (p_debug_mode = 'Y') THEN
11140     pa_debug.init_err_stack ('PA_PROJ_TASK_STRUC_PUB.copy_structures_bulk');  --For bug 4252182
11141     pa_debug.debug('PA_PROJ_TASK_STRUC_PUB.copy_structures_bulk begin');
11142   END IF;
11143 
11144   IF (p_commit = FND_API.G_TRUE) THEN
11145     savepoint copy_structure_bulk_pvt;
11146   END IF;
11147 
11148   -- Check if source and destination project are the same
11149   if p_src_project_id = p_dest_project_id then
11150     x_return_status := FND_API.G_RET_STS_SUCCESS;
11151     return;
11152   end if;
11153   l_dest_template_flag        := p_dest_template_flag;        --bug 2805602
11154   l_src_template_flag         := p_src_template_flag;          --bug 2805602
11155   l_project_name              := p_dest_project_name;   --bug 2805602
11156 
11157   select meaning
11158     into l_suffix
11159     from pa_lookups
11160    where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
11161      and lookup_code = 'WORKPLAN';
11162 
11163      -- Bug 3717026 Begin, commented as the structure name should be same as the project name.
11164     --IF pa_project_pub.G_structure_in_rec.structure_version_name is NOT NULL AND pa_project_pub.G_structure_in_rec.structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11165     --l_name := pa_project_pub.G_structure_in_rec.structure_version_name;
11166     --ELSE
11167     l_name := substr(l_project_name, 1, 240);
11168     --END IF;
11169      -- Bug 3717026 End
11170     l_workplan_enabled := PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( p_src_project_id );
11171 
11172     --bug 2838547
11173     open get_person_id(FND_GLOBAL.USER_ID);
11174     fetch get_person_id into l_publish_person_id;
11175     IF get_person_id%NOTFOUND then
11176       l_publish_person_id := NULL;
11177     END IF;
11178     close get_person_id;
11179     --bug 2838547
11180 
11181     IF NVL( l_workplan_enabled, 'N' ) = 'Y'
11182     THEN
11183 
11184         l_shared := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_src_project_id);
11185         --Get workplan attributes
11186         OPEN get_wp_attr;
11187         FETCH get_wp_attr into l_wp_attr_rec;
11188         CLOSE get_wp_attr;
11189 
11190         l_versioning_enabled := l_wp_attr_rec.WP_ENABLE_VERSION_FLAG;
11191         l_auto_pub_enabled   := l_wp_attr_rec.AUTO_PUB_UPON_CREATION_FLAG;
11192 
11193         --Modify name; add suffix
11194         --l_name := substr(l_project_name||l_append||l_suffix, 1, 240);   --update it later
11195 
11196     END IF;
11197 
11198 
11199 --copy pa_proj_elements
11200 --copying structures and tasks as is.
11201     INSERT INTO pa_proj_elements(
11202                   PROJ_ELEMENT_ID
11203                  ,PROJECT_ID
11204                  ,OBJECT_TYPE
11205                  ,ELEMENT_NUMBER
11206                  ,NAME
11207                  ,DESCRIPTION
11208                  ,STATUS_CODE
11209                  ,WF_STATUS_CODE
11210                  ,PM_SOURCE_CODE
11211                  ,PM_SOURCE_REFERENCE
11212                  ,CLOSED_DATE
11213                  ,LOCATION_ID
11214                  ,MANAGER_PERSON_ID
11215                  ,CARRYING_OUT_ORGANIZATION_ID
11216                  ,TYPE_ID
11217                  ,PRIORITY_CODE
11218                  ,CREATION_DATE
11219                  ,CREATED_BY
11220                  ,LAST_UPDATE_DATE
11221                  ,LAST_UPDATED_BY
11222                  ,LAST_UPDATE_LOGIN
11223                  ,RECORD_VERSION_NUMBER
11224                  ,REQUEST_ID
11225                  ,PROGRAM_APPLICATION_ID
11226                  ,PROGRAM_ID
11227                  ,PROGRAM_UPDATE_DATE
11228                  ,LINK_TASK_FLAG
11229                  ,BASELINE_START_DATE
11230                  ,BASELINE_FINISH_DATE
11231                  ,progress_outdated_flag
11232                   ,ATTRIBUTE_CATEGORY
11233                   ,ATTRIBUTE1
11234                   ,ATTRIBUTE2
11235                   ,ATTRIBUTE3
11236                   ,ATTRIBUTE4
11237                   ,ATTRIBUTE5
11238                   ,ATTRIBUTE6
11239                   ,ATTRIBUTE7
11240                   ,ATTRIBUTE8
11241                   ,ATTRIBUTE9
11242                   ,ATTRIBUTE10
11243                   ,ATTRIBUTE11
11244                   ,ATTRIBUTE12
11245                   ,ATTRIBUTE13
11246                   ,ATTRIBUTE14
11247                   ,ATTRIBUTE15
11248                   ,parent_structure_id
11249                                ,TYPE_CODE
11250                                ,INC_PROJ_PROGRESS_FLAG
11251                                ,WQ_ITEM_CODE
11252                                ,WQ_UOM_CODE
11253                                ,WQ_ACTUAL_ENTRY_CODE
11254                                ,TASK_PROGRESS_ENTRY_PAGE_ID
11255                                ,BASELINE_DURATION
11256                                ,PHASE_CODE
11257                                ,PHASE_VERSION_ID
11258                  ,source_object_id
11259                  ,source_object_type
11260                  ,PROGRESS_WEIGHT               --Bug 3616964
11261                  ,BASE_PERCENT_COMP_DERIV_CODE
11262                  ,FUNCTION_CODE
11263                  ,ENABLE_WF_FLAG
11264                  ,WF_ITEM_TYPE
11265                  ,WF_PROCESS
11266                  ,WF_START_LEAD_DAYS
11267                    )
11268                 SELECT
11269                   pa_tasks_s.nextval
11270                  ,p_dest_project_id
11271                  ,ppe.object_type
11272                  ,ppe.element_number
11273                  ,DECODE( ppe.object_type, 'PA_STRUCTURES',l_name, ppe.name )
11274                  ,ppe.DESCRIPTION
11275                  ,ppe.STATUS_CODE
11276                  ,ppe.WF_STATUS_CODE
11277                  ,ppe.PM_SOURCE_CODE
11278                  ,ppe.PM_SOURCE_REFERENCE
11279                  ,ppe.CLOSED_DATE
11280                  ,ppe.LOCATION_ID
11281                  ,ppe.MANAGER_PERSON_ID
11282                  ,ppe.CARRYING_OUT_ORGANIZATION_ID
11283                  ,ppe.TYPE_ID
11284                  ,ppe.PRIORITY_CODE
11285                  ,SYSDATE
11286                  ,l_user_id
11287                  ,SYSDATE
11288                  ,l_user_id
11289                  ,l_login_id
11290                  ,ppe.RECORD_VERSION_NUMBER
11291                  ,ppe.REQUEST_ID
11292                  ,ppe.PROGRAM_APPLICATION_ID
11293                  ,ppe.PROGRAM_ID
11294                  ,ppe.PROGRAM_UPDATE_DATE
11295                  ,ppe.LINK_TASK_FLAG
11296                  ,ppe.BASELINE_START_DATE
11297                  ,ppe.BASELINE_FINISH_DATE
11298                  ,'N'     --,ppe.progress_outdated_flag
11299                   ,ppe.ATTRIBUTE_CATEGORY
11300                   ,ppe.ATTRIBUTE1
11301                   ,ppe.ATTRIBUTE2
11302                   ,ppe.ATTRIBUTE3
11303                   ,ppe.ATTRIBUTE4
11304                   ,ppe.ATTRIBUTE5
11305                   ,ppe.ATTRIBUTE6
11306                   ,ppe.ATTRIBUTE7
11307                   ,ppe.ATTRIBUTE8
11308                   ,ppe.ATTRIBUTE9
11309                   ,ppe.ATTRIBUTE10
11310                   ,ppe.ATTRIBUTE11
11311                   ,ppe.ATTRIBUTE12
11312                   ,ppe.ATTRIBUTE13
11313                   ,ppe.ATTRIBUTE14
11314                   ,ppe.proj_element_id    --attribute 15 is used to store old structure id to identify the structure type
11315                   ,ppe.parent_structure_id
11316                                ,ppe.TYPE_CODE
11317                                ,ppe.INC_PROJ_PROGRESS_FLAG
11318                                ,ppe.WQ_ITEM_CODE
11319                                ,ppe.WQ_UOM_CODE
11320                                ,ppe.WQ_ACTUAL_ENTRY_CODE
11321                                ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
11322                                ,ppe.BASELINE_DURATION
11323                                ,ppe.PHASE_CODE
11324                                ,ppe.PHASE_VERSION_ID
11325                   ,p_dest_project_id
11326                   ,'PA_PROJECTS'
11327                   ,ppe.PROGRESS_WEIGHT               --Bug 3616964
11328                   ,ppe.BASE_PERCENT_COMP_DERIV_CODE
11329                   ,ppe.FUNCTION_CODE
11330                   ,ppe.ENABLE_WF_FLAG
11331                   ,ppe.WF_ITEM_TYPE
11332                   ,ppe.WF_PROCESS
11333                   ,ppe.WF_START_LEAD_DAYS
11334                 /* FROM pa_proj_elements ppe
11335                  where project_id = p_src_project_id
11336                    and ppe.object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11337                    from pa_proj_elements ppe
11338                   where ppe.project_id = p_src_project_id
11339                     and ppe.object_type = 'PA_STRUCTURES'
11340                     and ppe.proj_element_id IN (select ppe2.proj_element_id
11341                                                   from pa_proj_elements ppe2,
11342                                                        pa_proj_structure_types ppst,
11343                                                        pa_structure_types pst
11344                                                  where ppe2.project_id = p_src_project_id
11345                                                    and ppe2.object_type = 'PA_STRUCTURES'
11346                                                    and ppe2.proj_element_id = ppst.proj_element_id
11347                                                    and ppst.structure_type_id = pst.structure_type_id
11348                                                    and pst.structure_type in ('WORKPLAN','FINANCIAL'));
11349 
11350 
11351          --updating element_number with the proj_element_id
11352          update pa_proj_elements
11353             set element_number = proj_element_id
11354           WHERE project_id = p_dest_project_id
11355             AND object_type = 'PA_STRUCTURES'
11356           ;
11357 
11358 
11359 --Copy pa_proj_structure_types
11360 
11361           INSERT INTO PA_PROJ_STRUCTURE_TYPES(
11362                 PROJ_STRUCTURE_TYPE_ID
11363                ,PROJ_ELEMENT_ID
11364                ,STRUCTURE_TYPE_ID
11365                ,CREATION_DATE
11366                ,CREATED_BY
11367                ,LAST_UPDATE_DATE
11368                ,LAST_UPDATED_BY
11369                ,LAST_UPDATE_LOGIN
11370                ,RECORD_VERSION_NUMBER )
11371            SELECT
11372              pa_proj_structure_types_s.nextval
11373             , ppe.proj_element_id
11374             , ppst.structure_type_id            --structure type
11375             , sysdate
11376             , l_user_id
11377             , sysdate
11378             , l_user_id
11379             , l_login_id
11380             , 1
11381            /*from pa_proj_elements ppe, pa_proj_structure_types ppst
11382            where ppe.project_id = p_dest_project_id
11383              and ppe.attribute15 = ppst.proj_element_id   ---join with copy_from_proj_element_id to get the structure types
11384              and ppe.object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11385            from pa_proj_elements ppe,
11386                 pa_proj_structure_types ppst,
11387                 pa_structure_types pst
11388           where ppe.project_id = p_dest_project_id
11389             and ppe.attribute15 = ppst.proj_element_id
11390             and ppe.object_type = 'PA_STRUCTURES'
11391             and ppst.structure_type_id = pst.structure_type_id
11392             and pst.structure_type in ('WORKPLAN','FINANCIAL');
11393 
11394           --bug 3138959
11395           IF l_shared = 'N' AND l_workplan_enabled = 'Y'       -- For Split structures
11396              AND pa_project_pub.G_structure_in_rec.structure_type = 'WORKPLAN'
11397           THEN
11398               FOR cur_pa_struct_rec in cur_pa_struct LOOP
11399                    IF cur_pa_struct_rec.structure_type_id = 6          --Financial
11400                    THEN
11401                         --call PA_PROJECT_CORE2.copy_task to copy PA_TASKSi tasks.
11402 
11403                         pa_project_core2.copy_task (
11404                            x_orig_project_id   => p_src_project_id ,
11405                            x_new_project_id    => p_dest_project_id,
11406                            x_err_code          => x_err_code,
11407                            x_err_stage         => x_err_stage,
11408                            x_err_stack         => x_err_stack);
11409 
11410                         if ( x_err_code > 0 or x_err_code < 0 ) then
11411                              x_msg_data := x_err_stage;
11412                              raise FND_API.G_EXC_ERROR;
11413                         end if;
11414 
11415                        --Split; Creating Financial tasks
11416                        INSERT INTO pa_proj_elements(
11417                                 PROJ_ELEMENT_ID
11418                                ,PROJECT_ID
11419                                ,OBJECT_TYPE
11420                                ,ELEMENT_NUMBER
11421                                ,NAME
11422                                ,DESCRIPTION
11423                                ,STATUS_CODE
11424                                ,WF_STATUS_CODE
11425                                ,PM_SOURCE_CODE
11426                                ,PM_SOURCE_REFERENCE
11427                                ,CLOSED_DATE
11428                                ,LOCATION_ID
11429                                ,MANAGER_PERSON_ID
11430                                ,CARRYING_OUT_ORGANIZATION_ID
11431                                ,TYPE_ID
11432                                ,PRIORITY_CODE
11433                                ,CREATION_DATE
11434                                ,CREATED_BY
11435                                ,LAST_UPDATE_DATE
11436                                ,LAST_UPDATED_BY
11437                                ,LAST_UPDATE_LOGIN
11438                                ,RECORD_VERSION_NUMBER
11439                                ,REQUEST_ID
11440                                ,PROGRAM_APPLICATION_ID
11441                                ,PROGRAM_ID
11442                                ,PROGRAM_UPDATE_DATE
11443                                ,LINK_TASK_FLAG
11444                                ,BASELINE_START_DATE
11445                                ,BASELINE_FINISH_DATE
11446                                ,progress_outdated_flag
11447                                ,ATTRIBUTE_CATEGORY
11448                                ,ATTRIBUTE1
11449                                ,ATTRIBUTE2
11450                                ,ATTRIBUTE3
11451                                ,ATTRIBUTE4
11452                                ,ATTRIBUTE5
11453                                ,ATTRIBUTE6
11454                                ,ATTRIBUTE7
11455                                ,ATTRIBUTE8
11456                                ,ATTRIBUTE9
11457                                ,ATTRIBUTE10
11458                                ,ATTRIBUTE11
11459                                ,ATTRIBUTE12
11460                                ,ATTRIBUTE13
11461                                ,ATTRIBUTE14
11462                                ,ATTRIBUTE15
11463                                ,parent_structure_id
11464                                ,TYPE_CODE
11465                                ,INC_PROJ_PROGRESS_FLAG
11466                                ,WQ_ITEM_CODE
11467                                ,WQ_UOM_CODE
11468                                ,WQ_ACTUAL_ENTRY_CODE
11469                                ,TASK_PROGRESS_ENTRY_PAGE_ID
11470                                ,BASELINE_DURATION
11471                                ,PHASE_CODE
11472                                ,PHASE_VERSION_ID
11473                                ,source_object_id
11474                                ,source_object_type
11475                                ,PROGRESS_WEIGHT               --Bug 3616964
11476                                ,BASE_PERCENT_COMP_DERIV_CODE
11477                                ,FUNCTION_CODE
11478                                ,ENABLE_WF_FLAG
11479                                ,WF_ITEM_TYPE
11480                                ,WF_PROCESS
11481                                ,WF_START_LEAD_DAYS
11482                                )
11483                           SELECT
11484                                pt.task_id
11485                               ,p_dest_project_id
11486                               ,ppe.object_type
11487                               ,ppe.element_number
11488                               ,ppe.name
11489                               ,ppe.DESCRIPTION
11490                               ,INITIAL_STATUS_CODE             --bug 2827090
11491                               ,ppe.WF_STATUS_CODE
11492                               ,ppe.PM_SOURCE_CODE    --update the source code later
11493                               ,decode(ppe.PM_SOURCE_REFERENCE, null,pt.task_number, ppe.PM_SOURCE_REFERENCE )
11494                               ,ppe.CLOSED_DATE
11495                               ,ppe.LOCATION_ID
11496                               ,ppe.MANAGER_PERSON_ID
11497                               ,ppe.CARRYING_OUT_ORGANIZATION_ID
11498                               ,ppe.TYPE_ID
11499                               ,ppe.PRIORITY_CODE
11500                               ,SYSDATE
11501                               ,l_user_id
11502                               ,SYSDATE
11503                               ,l_user_id
11504                               ,l_login_id
11505                               ,ppe.RECORD_VERSION_NUMBER
11506                               ,ppe.REQUEST_ID
11507                               ,ppe.PROGRAM_APPLICATION_ID
11508                               ,ppe.PROGRAM_ID
11509                               ,ppe.PROGRAM_UPDATE_DATE
11510                               ,ppe.LINK_TASK_FLAG
11511                               ,ppe.BASELINE_START_DATE
11512                               ,ppe.BASELINE_FINISH_DATE
11513                               ,'N'    --,ppe.progress_outdated_flag
11514                               ,ppe.ATTRIBUTE_CATEGORY
11515                               ,ppe.ATTRIBUTE1
11516                               ,ppe.ATTRIBUTE2
11517                               ,ppe.ATTRIBUTE3
11518                               ,ppe.ATTRIBUTE4
11519                               ,ppe.ATTRIBUTE5
11520                               ,ppe.ATTRIBUTE6
11521                               ,ppe.ATTRIBUTE7
11522                               ,ppe.ATTRIBUTE8
11523                               ,ppe.ATTRIBUTE9
11524                               ,ppe.ATTRIBUTE10
11525                               ,ppe.ATTRIBUTE11
11526                               ,ppe.ATTRIBUTE12
11527                               ,ppe.ATTRIBUTE13
11528                               ,ppe.ATTRIBUTE14
11529                               ,ppe.proj_element_id    --attribute 15 is used to store old ids
11530                               ,cur_pa_struct_rec.proj_element_id
11531                                ,ppe.TYPE_CODE
11532                                ,ppe.INC_PROJ_PROGRESS_FLAG
11533                                ,ppe.WQ_ITEM_CODE
11534                                ,ppe.WQ_UOM_CODE
11535                                ,ppe.WQ_ACTUAL_ENTRY_CODE
11536                                ,ppe.TASK_PROGRESS_ENTRY_PAGE_ID
11537                                ,ppe.BASELINE_DURATION
11538                                ,ppe.PHASE_CODE
11539                                ,ppe.PHASE_VERSION_ID
11540                                ,p_dest_project_id
11541                                ,'PA_PROJECTS'
11542                                ,ppe.PROGRESS_WEIGHT              --Bug 3616964
11543                                ,ppe.BASE_PERCENT_COMP_DERIV_CODE
11544                                ,ppe.FUNCTION_CODE
11545                                ,'N'
11546                                ,ppe.WF_ITEM_TYPE
11547                                ,ppe.WF_PROCESS
11548                                ,ppe.WF_START_LEAD_DAYS
11549                          FROM pa_proj_elements ppe,
11550                               pa_tasks pt,
11551                               pa_task_types ptt     --bug 2827090
11552                         WHERE ppe.project_id  = p_src_project_id
11553                           AND pt.project_id   = p_dest_project_id
11554                           AND pt.task_number  = substrb(rtrim(ppe.element_number),1,25) -- Substrb added for Bug 5152448
11555                           AND ppe.parent_structure_id = cur_pa_struct_rec.attribute15
11556                           and ppe.object_type = 'PA_TASKS'
11557                           and ppe.type_id        = ptt.task_type_id    --bug 2827090
11558                            ;
11559 
11560                         l_financial_structure_id := cur_pa_struct_rec.proj_element_id;
11561                         ---update task reference in pa_tasks for all the
11562                            update pa_tasks
11563                               set PM_TASK_REFERENCE = task_number
11564                             where project_id = p_dest_project_id
11565                               and pm_task_reference IS NULL
11566                   ;
11567 
11568 
11569                         --bug 3140032
11570                         OPEN c_attach_tasks( cur_pa_struct_rec.attribute15,
11571                                              cur_pa_struct_rec.proj_element_id);
11572                         LOOP
11573                            FETCH c_attach_tasks INTO c_atch ;
11574                            if c_attach_tasks%notfound then
11575                               exit ;
11576                            end if;
11577                            fnd_attached_documents2_pkg.copy_attachments('PA_TASKS',
11578                                              c_atch.orig_task_id,
11579                                              null, null, null, null,
11580                                              'PA_TASKS',
11581                                              c_atch.new_task_id,
11582                                              null, null, null, null,
11583                                              FND_GLOBAL.USER_ID,
11584                                              FND_GLOBAL.LOGIN_ID,
11585                                              275, null, null);
11586 
11587                         END LOOP ;
11588                         CLOSE c_attach_tasks;
11589                         --bug 3140032
11590                 ELSIF cur_pa_struct_rec.structure_type_id = 1
11591                 THEN
11592 
11593                         ---update source reference in pa_proj_elements for all the
11594                            Update pa_proj_elements
11595                               set PM_SOURCE_CODE = ( SELECT PM_SOURCE_CODE FROM pa_proj_elements
11596                                                       WHERE project_id =  p_dest_project_id
11597                                                       AND object_type = 'PA_STRUCTURES'
11598                                                       AND proj_element_id = cur_pa_struct_rec.proj_element_id
11599                                                       AND PM_SOURCE_CODE IS NOT NULL
11600                                                       )
11601                             WHERE  proj_element_id = l_financial_structure_id
11602                              AND project_id = p_dest_project_id
11603                              AND PM_SOURCE_CODE IS NULL;
11604 
11605                         ---update source reference in pa_tasks for all the
11606                            Update pa_tasks
11607                               set PM_PRODUCT_CODE = ( SELECT PM_SOURCE_CODE FROM pa_proj_elements
11608                                                       WHERE project_id =  p_dest_project_id
11609                                                       AND object_type = 'PA_STRUCTURES'
11610                                                       AND proj_element_id = cur_pa_struct_rec.proj_element_id
11611                                                       AND PM_SOURCE_CODE IS NOT NULL
11612                                                       )
11613                             WHERE project_id = p_dest_project_id
11614                              AND PM_PRODUCT_CODE IS NULL;
11615 
11616                 END IF; --if structure type = 6
11617              END LOOP;
11618           END IF; --bug 3138959
11619 
11620     IF NVL( l_workplan_enabled, 'N' ) = 'N'
11621     THEN
11622       --Only FINANCIAL
11623       --Creating structure version first
11624       OPEN cur_elem_ver_seq;
11625       FETCH cur_elem_ver_seq INTO l_struc_version_id;
11626       CLOSE cur_elem_ver_seq;
11627 
11628 
11629       --First copy structure version and then copy all task versions
11630       --We cannot perform both with the same sql bcoz we need parent_structure version id for tasks.
11631       INSERT INTO pa_proj_element_versions(
11632                      ELEMENT_VERSION_ID
11633                     ,PROJ_ELEMENT_ID
11634                     ,OBJECT_TYPE
11635                     ,PROJECT_ID
11636                     ,PARENT_STRUCTURE_VERSION_ID
11637                     ,DISPLAY_SEQUENCE
11638                     ,WBS_LEVEL
11639                     ,WBS_NUMBER
11640                     ,CREATION_DATE
11641                     ,CREATED_BY
11642                     ,LAST_UPDATE_DATE
11643                     ,LAST_UPDATED_BY
11644                     ,LAST_UPDATE_LOGIN
11645                     ,RECORD_VERSION_NUMBER
11646                     ,attribute15          --this column is used to store structure ver id of the source project to be used to created relationships.
11647                     ,ATTRIBUTE_CATEGORY
11648                      ,ATTRIBUTE1
11649                      ,ATTRIBUTE2
11650                      ,ATTRIBUTE3
11651                      ,ATTRIBUTE4
11652                      ,ATTRIBUTE5
11653                      ,ATTRIBUTE6
11654                      ,ATTRIBUTE7
11655                      ,ATTRIBUTE8
11656                      ,ATTRIBUTE9
11657                      ,ATTRIBUTE10
11658                      ,ATTRIBUTE11
11659                      ,ATTRIBUTE12
11660                      ,ATTRIBUTE13
11661                      ,ATTRIBUTE14
11662                      ,TASK_UNPUB_VER_STATUS_CODE
11663                    ,source_object_id
11664                    ,source_object_type
11665                     )
11666               SELECT
11667                      l_struc_version_id
11668                     ,ppe.proj_element_id
11669                     ,ppev.object_type
11670                     ,p_dest_project_id
11671                     ,l_struc_version_id
11672                     ,ppev.DISPLAY_SEQUENCE
11673                     ,ppev.WBS_LEVEL
11674                     ,ppev.WBS_NUMBER
11675                     ,SYSDATE                     ------CREATION_DATE
11676                     ,l_user_id          ------CREATED_BY
11677                     ,SYSDATE                     ------LAST_UPDATE_DATE
11678                     ,l_user_id          ------LAST_UPDATED_BY
11679                     ,l_login_id         ------LAST_UPDATE_LOGIN
11680                     ,ppev.RECORD_VERSION_NUMBER                           ------RECORD_VERSION_NUMBER
11681                     ,ppev.element_version_id
11682                     ,ppev.ATTRIBUTE_CATEGORY
11683                      ,ppev.ATTRIBUTE1
11684                      ,ppev.ATTRIBUTE2
11685                      ,ppev.ATTRIBUTE3
11686                      ,ppev.ATTRIBUTE4
11687                      ,ppev.ATTRIBUTE5
11688                      ,ppev.ATTRIBUTE6
11689                      ,ppev.ATTRIBUTE7
11690                      ,ppev.ATTRIBUTE8
11691                      ,ppev.ATTRIBUTE9
11692                      ,ppev.ATTRIBUTE10
11693                      ,ppev.ATTRIBUTE11
11694                      ,ppev.ATTRIBUTE12
11695                      ,ppev.ATTRIBUTE13
11696                      ,ppev.ATTRIBUTE14
11697                      ,ppev.TASK_UNPUB_VER_STATUS_CODE
11698              ,p_dest_project_id
11699              ,'PA_PROJECTS'
11700              /*from pa_proj_element_versions ppev,
11701                   pa_proj_elements ppe
11702               where ppev.project_id = p_src_project_id
11703                 and ppe.project_id = p_dest_project_id
11704                 and ppev.proj_element_id = ppe.attribute15
11705                 and ppe.object_type = 'PA_STRUCTURES'
11706                 and ppev.object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11707              from pa_proj_element_Versions ppev,
11708                   pa_proj_elements ppe
11709             where ppev.project_id = p_src_project_id
11710               and ppe.project_id = p_dest_project_id
11711               and ppev.proj_element_id = ppe.attribute15
11712               and ppe.object_type = 'PA_STRUCTURES'
11713               and ppev.object_type = 'PA_STRUCTURES'
11714               and ppe.proj_element_id IN
11715                  (select ppe2.proj_element_id
11716                     from pa_proj_elements ppe2,
11717                          pa_proj_structure_types ppst,
11718                          pa_structure_types pst
11719 --                   where ppe2.project_id = p_src_project_id
11720                    where ppe2.project_id = p_dest_project_id  --Bug 3585699 SMukka Replaced p_src_project_id by p_dest_project_id
11721                      and ppe2.object_type = 'PA_STRUCTURES'
11722                      and ppe2.proj_element_id = ppst.proj_element_id
11723                      and ppst.structure_type_id = pst.structure_type_id
11724                      and pst.structure_type in ('WORKPLAN','FINANCIAL'));
11725 
11726 
11727 
11728            SELECT element_version_id INTO l_src_str_version_id
11729              /*FROM pa_proj_element_versions
11730             WHERE project_id = p_src_project_id
11731               AND object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11732              FROM pa_proj_element_versions
11733             WHERE project_id = p_src_project_id
11734               AND object_type = 'PA_STRUCTURES'
11735               and proj_element_id IN (select ppe2.proj_element_id
11736                                         from pa_proj_elements ppe2,
11737                                              pa_proj_structure_types ppst,
11738                                              pa_structure_types pst
11739                                        where ppe2.project_id = p_src_project_id
11740                                          and ppe2.object_type = 'PA_STRUCTURES'
11741                                          and ppe2.proj_element_id = ppst.proj_element_id
11742                                          and ppst.structure_type_id = pst.structure_type_id
11743                                          and pst.structure_type in ('WORKPLAN','FINANCIAL'));
11744 
11745 
11746 --bug 3010538
11747 --added PROCESS_UPDATE_WBS_FLAG
11748       INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
11749          PEV_STRUCTURE_ID
11750         ,ELEMENT_VERSION_ID
11751         ,VERSION_NUMBER
11752         ,NAME
11753         ,PROJECT_ID
11754         ,PROJ_ELEMENT_ID
11755         ,DESCRIPTION
11756         ,EFFECTIVE_DATE
11757         ,PUBLISHED_DATE
11758         ,PUBLISHED_BY_PERSON_ID
11759         ,CURRENT_BASELINE_DATE
11760         ,CURRENT_FLAG
11761         ,CURRENT_BASELINE_PERSON_ID
11762         ,ORIGINAL_BASELINE_DATE
11763         ,ORIGINAL_FLAG
11764         ,ORIGINAL_BASELINE_PERSON_ID
11765         ,LOCK_STATUS_CODE
11766         ,LOCKED_BY_PERSON_ID
11767         ,LOCKED_DATE
11768         ,STATUS_CODE
11769         ,WF_STATUS_CODE
11770         ,LATEST_EFF_PUBLISHED_FLAG
11771         ,RECORD_VERSION_NUMBER
11772         ,WBS_RECORD_VERSION_NUMBER
11773         ,CREATION_DATE
11774         ,CREATED_BY
11775         ,LAST_UPDATE_DATE
11776         ,LAST_UPDATED_BY
11777         ,LAST_UPDATE_LOGIN
11778         ,change_reason_code
11779         ,PROCESS_UPDATE_WBS_FLAG
11780         ,current_working_flag   /* FPM bug 3301192 */
11781        ,source_object_id
11782        ,source_object_type
11783          )
11784        SELECT
11785          pa_proj_elem_ver_structure_s.nextval
11786         ,l_struc_version_id
11787         ,1
11788         --,ppevs.name, rtarway, 3655698, replaced ppevs.name with ppe.name
11789         ,ppe.name
11790         ,p_dest_project_id
11791         ,ppe.proj_element_id
11792         --,ppevs.DESCRIPTION , rtarway, 3655698 replaced ppevs.DESCRIPTION with ppe.DESCRIPTION
11793         ,ppe.description
11794         ,ppevs.EFFECTIVE_DATE
11795         ,decode(p_dest_template_flag, 'N', sysdate, to_date(NULL)) --bug 2838547
11796         ,decode(p_dest_template_flag, 'N', l_publish_person_id, NULL)     --bug 2838547
11797         ,ppevs.CURRENT_BASELINE_DATE
11798         ,ppevs.CURRENT_FLAG
11799         ,ppevs.CURRENT_BASELINE_PERSON_ID
11800         ,ppevs.ORIGINAL_BASELINE_DATE
11801         ,ppevs.ORIGINAL_FLAG
11802         ,ppevs.ORIGINAL_BASELINE_PERSON_ID
11803         ,'UNLOCKED'
11804         ,null
11805         ,null
11806         ,decode( p_dest_template_flag, 'N', 'STRUCTURE_PUBLISHED', ppevs.STATUS_CODE )
11807         ,ppevs.WF_STATUS_CODE
11808         ,decode( p_dest_template_flag, 'N', 'Y', ppevs.LATEST_EFF_PUBLISHED_FLAG )
11809         ,ppevs.RECORD_VERSION_NUMBER
11810         ,ppevs.WBS_RECORD_VERSION_NUMBER
11811         ,SYSDATE
11812         ,l_user_id
11813         ,SYSDATE
11814         ,l_user_id
11815         ,l_login_id
11816         ,ppevs.change_reason_code
11817         ,'N'
11818         ,ppevs.current_working_flag    /* FPM bug 3301192 */
11819     ,p_dest_project_id
11820     ,'PA_PROJECTS'
11821         /*FROM PA_PROJ_ELEM_VER_STRUCTURE ppevs, pa_proj_elements ppe
11822         WHERE ppevs.project_id = p_src_project_id
11823           AND ppe.project_id = p_dest_project_id
11824           and ppevs.proj_element_id = ppe.attribute15
11825           AND ppe.object_type = 'PA_STRUCTURES';*//*Commented below query and following criteria by SMUKKA */
11826          FROM PA_PROJ_ELEM_VER_STRUCTURE ppevs, pa_proj_elements ppe
11827         WHERE ppevs.project_id = p_src_project_id
11828           AND ppe.project_id = p_dest_project_id
11829           and ppevs.proj_element_id = ppe.attribute15
11830           AND ppe.object_type = 'PA_STRUCTURES'
11831       and ppe.proj_element_id IN (SELECT ppe2.proj_element_id
11832                                         FROM pa_proj_elements ppe2,
11833                                              pa_proj_structure_types ppst,
11834                                              pa_structure_types pst
11835                                        WHERE ppe2.project_id = p_dest_project_id
11836                                          AND ppe2.object_type = 'PA_STRUCTURES'
11837                                          AND ppe2.proj_element_id = ppst.proj_element_id
11838                                          AND ppst.structure_type_id = pst.structure_type_id
11839                                          AND pst.structure_type in ('WORKPLAN','FINANCIAL'));
11840     --Added by rtarway for BUG 3951701
11841     --Copy workplan attributes for financial only structures
11842 
11843          INSERT INTO pa_proj_workplan_attr(
11844           PROJ_ELEMENT_ID
11845          ,PROJECT_ID
11846          ,LAST_UPDATE_DATE
11847          ,LAST_UPDATED_BY
11848          ,CREATION_DATE
11849          ,CREATED_BY
11850          ,WP_APPROVAL_REQD_FLAG
11851          ,WP_AUTO_PUBLISH_FLAG
11852          ,WP_DEFAULT_DISPLAY_LVL
11853          ,WP_ENABLE_VERSION_FLAG
11854          ,AUTO_PUB_UPON_CREATION_FLAG
11855          ,AUTO_SYNC_TXN_DATE_FLAG
11856          ,WP_APPROVER_SOURCE_ID
11857          ,WP_APPROVER_SOURCE_TYPE
11858          ,RECORD_VERSION_NUMBER
11859          ,LAST_UPDATE_LOGIN
11860          ,TXN_DATE_SYNC_BUF_DAYS
11861          ,LIFECYCLE_VERSION_ID
11862          ,CURRENT_PHASE_VERSION_ID
11863          ,SCHEDULE_THIRD_PARTY_FLAG
11864          ,ALLOW_LOWEST_TSK_DEP_FLAG
11865          ,AUTO_ROLLUP_SUBPROJ_FLAG
11866          ,THIRD_PARTY_SCHEDULE_CODE
11867          ,source_object_id
11868          ,source_object_type
11869          -- gboomina Bug 8586393 - start
11870          ,use_task_schedule_flag
11871          -- gboomina Bug 8586393 - end
11872          )
11873          SELECT
11874           ppe.PROJ_ELEMENT_ID
11875          ,ppe.PROJECT_ID
11876          ,SYSDATE
11877          ,l_user_id
11878          ,SYSDATE
11879          ,l_user_id
11880          ,ppwa.WP_APPROVAL_REQD_FLAG
11881          ,ppwa.WP_AUTO_PUBLISH_FLAG
11882          ,ppwa.WP_DEFAULT_DISPLAY_LVL
11883          ,ppwa.WP_ENABLE_VERSION_FLAG
11884          ,ppwa.AUTO_PUB_UPON_CREATION_FLAG
11885          ,ppwa.AUTO_SYNC_TXN_DATE_FLAG
11886          ,ppwa.WP_APPROVER_SOURCE_ID
11887          ,ppwa.WP_APPROVER_SOURCE_TYPE
11888          ,ppwa.RECORD_VERSION_NUMBER
11889          ,l_login_id
11890          ,ppwa.TXN_DATE_SYNC_BUF_DAYS
11891          ,ppwa.LIFECYCLE_VERSION_ID
11892          ,ppwa.CURRENT_PHASE_VERSION_ID
11893          ,ppwa.SCHEDULE_THIRD_PARTY_FLAG
11894          ,ppwa.ALLOW_LOWEST_TSK_DEP_FLAG
11895          ,ppwa.AUTO_ROLLUP_SUBPROJ_FLAG
11896          ,ppwa.THIRD_PARTY_SCHEDULE_CODE
11897          ,ppe.PROJECT_ID
11898          ,'PA_PROJECTS'
11899          -- gboomina Bug 8586393 - start
11900          ,ppwa.use_task_schedule_flag
11901          -- gboomina Bug 8586393 - end
11902          FROM pa_proj_elements ppe,
11903               pa_proj_workplan_attr ppwa
11904          WHERE ppwa.project_id = p_src_project_id
11905          AND   ppe.attribute15 = ppwa.proj_element_id
11906          AND   ppe.project_id = p_dest_project_id
11907          AND   ppe.object_type='PA_STRUCTURES';
11908 
11909          --Copy progress attributes for financial only structures
11910          INSERT INTO pa_proj_progress_attr(
11911           PROJ_PROGRESS_ATTR_ID
11912          ,OBJECT_TYPE
11913          ,OBJECT_ID
11914          ,LAST_UPDATE_DATE
11915          ,LAST_UPDATED_BY
11916          ,CREATION_DATE
11917          ,CREATED_BY
11918          ,LAST_UPDATE_LOGIN
11919          ,PROJECT_ID
11920          ,PROGRESS_CYCLE_ID
11921          ,WQ_ENABLE_FLAG
11922          ,REMAIN_EFFORT_ENABLE_FLAG
11923          ,PERCENT_COMP_ENABLE_FLAG
11924          ,NEXT_PROGRESS_UPDATE_DATE
11925          ,RECORD_VERSION_NUMBER
11926          ,TASK_WEIGHT_BASIS_CODE
11927          ,ALLOW_COLLAB_PROG_ENTRY
11928          ,ALLOW_PHY_PRCNT_CMP_OVERRIDES
11929          ,STRUCTURE_TYPE
11930          )
11931          SELECT
11932           PA_PROJ_PROGRESS_ATTR_S.nextval
11933          ,ppe.OBJECT_TYPE
11934          ,ppe.proj_element_ID
11935          ,sysdate
11936          ,l_user_id
11937          ,SYSDATE
11938          ,l_user_id
11939          ,l_login_id
11940          ,p_dest_project_id
11941          ,pppa.PROGRESS_CYCLE_ID
11942          ,pppa.WQ_ENABLE_FLAG
11943          ,pppa.REMAIN_EFFORT_ENABLE_FLAG
11944          ,pppa.PERCENT_COMP_ENABLE_FLAG
11945          ,pppa.NEXT_PROGRESS_UPDATE_DATE
11946          ,pppa.RECORD_VERSION_NUMBER
11947          ,pppa.TASK_WEIGHT_BASIS_CODE
11948          ,pppa.ALLOW_COLLAB_PROG_ENTRY
11949          ,pppa.ALLOW_PHY_PRCNT_CMP_OVERRIDES
11950          ,pppa.STRUCTURE_TYPE
11951          FROM pa_proj_progress_attr pppa,
11952               pa_proj_elements ppe
11953          WHERE ppe.project_id = p_dest_project_id
11954          AND   ppe.attribute15 = pppa.object_id
11955          AND   pppa.project_id = p_src_project_id
11956          AND   pppa.object_type = 'PA_STRUCTURES' ;
11957 
11958    --End Added by rtarway for BUG 3951701
11959 
11960     ELSE
11961 
11962         i := 1;
11963         IF l_shared = 'Y'
11964         THEN
11965            FOR l_get_structure_attr_csr_rec in l_get_structure_attr_csr LOOP
11966             l_dest_str_versions_tbl(i).src_str_version_id := l_get_structure_attr_csr_rec.element_version_id;
11967             l_dest_str_versions_tbl(i).src_str_status := l_get_structure_attr_csr_rec.status_code;
11968             l_dest_str_versions_tbl(i).latest_pub_flag := l_get_structure_attr_csr_rec.LATEST_EFF_PUBLISHED_FLAG;
11969             l_dest_str_versions_tbl(i).current_flag := l_get_structure_attr_csr_rec.current_flag;
11970             i := i + 1;
11971           END LOOP;
11972         ELSE
11973            FOR l_get_structure_attr_csr_rec2 in l_get_structure_attr_csr2 LOOP
11974             l_dest_str_versions_tbl(i).src_str_version_id := l_get_structure_attr_csr_rec2.element_version_id;
11975             l_dest_str_versions_tbl(i).src_str_status := l_get_structure_attr_csr_rec2.status_code;
11976             l_dest_str_versions_tbl(i).latest_pub_flag := l_get_structure_attr_csr_rec2.LATEST_EFF_PUBLISHED_FLAG;
11977             l_dest_str_versions_tbl(i).src_stru_type_id := l_get_structure_attr_csr_rec2.structure_type_id;
11978             l_dest_str_versions_tbl(i).current_flag := l_get_structure_attr_csr_rec2.current_flag;
11979             i := i + 1;
11980           END LOOP;
11981         END IF;
11982         IF l_shared = 'Y'
11983         THEN
11984             IF l_versioning_enabled = 'Y'
11985             THEN
11986                 IF l_src_template_flag = 'N'   --source is a project
11987                 THEN
11988                     IF  l_dest_template_flag = 'N'
11989                     THEN
11990                         --senario 1 page 5
11991                         --Bug 2955589. Need to copy only one working version to the destination project in AMG
11992                         --context. Set the copy flag to N for published versions. Set the copy flag to Y for the
11993                         --first working version. If there are no working versions create a new one.
11994                         l_working_ver_count := 0;
11995                         FOR j in 1..l_dest_str_versions_tbl.count LOOP
11996                             IF ( ( l_dest_str_versions_tbl(j).latest_pub_flag = 'Y' OR
11997                                    l_dest_str_versions_tbl(j).current_flag = 'Y' ) AND     --baselined version
11998                                  l_dest_str_versions_tbl(j).src_str_status = 'STRUCTURE_PUBLISHED' )
11999                             THEN
12000                                 --l_dest_str_versions_tbl(j).copy_flag := 'Y';  Bug 2955589
12001                                 l_dest_str_versions_tbl(j).copy_flag := 'N';
12002                                 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
12003                             ELSIF l_dest_str_versions_tbl(j).src_str_status  <> 'STRUCTURE_PUBLISHED'
12004                             THEN
12005                                 IF l_working_ver_count = 0 THEN   --Bug 2955589
12006                                    l_dest_str_versions_tbl(j).copy_flag := 'Y';
12007                                 ELSE
12008                                    l_dest_str_versions_tbl(j).copy_flag := 'N';
12009                                 END IF;
12010                                 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
12011                                 l_working_ver_count := l_working_ver_count + 1;
12012                             END IF;
12013                         END LOOP;
12014                         -- If no working version was found, set the flag so that the version can be created.
12015                         -- Bug 2955589.
12016                         IF l_working_ver_count = 0 THEN
12017                               l_create_fin_version := 'Y';
12018                         END IF;
12019                     ELSE
12020                         --senario 7 page 5
12021                         FOR j in 1..l_dest_str_versions_tbl.count LOOP
12022                             IF ( l_dest_str_versions_tbl(j).latest_pub_flag = 'Y' AND
12023                                  l_dest_str_versions_tbl(j).src_str_status = 'STRUCTURE_PUBLISHED' )
12024                             THEN
12025                                 l_dest_str_versions_tbl(j).copy_flag := 'Y';
12026                                 l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
12027                                 l_copy_flag_set := 'Y';
12028                             END IF;
12029                         END LOOP;
12030                         IF NVL( l_copy_flag_set, 'N' ) = 'N'    --latest published was not found, now look for latest updated unpublished str ver
12031                         THEN
12032                             l_max_date := null;
12033                             FOR j in 1..l_dest_str_versions_tbl.count LOOP --look for last updated unpublished version
12034                                IF l_dest_str_versions_tbl(j).src_str_status <> 'STRUCTURE_PUBLISHED'
12035                                THEN
12036                                     --Find out which unpublihsed version is last updated.
12037                                     IF l_max_date IS NULL
12038                                     THEN
12039                                         l_latst_upd_wrkng_str_ver := l_dest_str_versions_tbl(j).src_str_version_id;
12040                                         l_max_date := PA_PROJ_TASK_STRUC_PUB.GET_MAX_LAST_UPD_DT_WRKNG_VER( l_dest_str_versions_tbl(j).src_str_version_id );
12041                                     ELSE
12042                                         l_max_date2 := PA_PROJ_TASK_STRUC_PUB.GET_MAX_LAST_UPD_DT_WRKNG_VER( l_dest_str_versions_tbl(j).src_str_version_id );
12043                                         IF  l_max_date2 > l_max_date
12044                                         THEN
12045                                            --for bug 2834111
12046                                            l_max_date := l_max_date2;
12047                                            l_latst_upd_wrkng_str_ver := l_dest_str_versions_tbl(j).src_str_version_id;
12048                                         END IF;
12049                                     END IF;
12050                                END IF;  --l_dest_str_versions_tbl(j).src_str_status <> 'STRUCTURE_PUBLISHED'
12051                             END LOOP; --look for last updated unpublished version
12052                             --for bug 2834111
12053                             --mark the last updated unpublished version for copying.
12054                             FOR j in 1..l_dest_str_versions_tbl.count LOOP
12055                                IF l_dest_str_versions_tbl(j).src_str_version_id = l_latst_upd_wrkng_str_ver
12056                                THEN
12057                                   l_dest_str_versions_tbl(j).copy_flag := 'Y';
12058                                   l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
12059                                END IF;
12060                            END LOOP;
12061                         END IF; --NVL( l_copy_flag_set, 'N' ) := 'N'    --latest published was not found, now look for latest updated unpublished str ver
12062                     END IF;  --l_dest_template_flag = 'N'
12063                 ELSE
12064                     --source is a template
12065                     --senario 3  on page 5
12066                     FOR j in 1..l_dest_str_versions_tbl.count LOOP
12067                         l_dest_str_versions_tbl(j).copy_flag := 'Y';
12068                         IF  l_dest_template_flag = 'N' ---senario 3
12069                         THEN
12070                                /* Bug 2955589. Irrespective of the value in auto publish flag set the version
12071                                   status to working so that the process_task_structure_bulk api will process
12072                                   on this version. Refer to the bug for more details.
12073 
12074                                IF l_auto_pub_enabled = 'N'
12075                                THEN
12076                                   l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
12077                                ELSE
12078                                   l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
12079 --bug 2858216
12080                                   l_dest_str_versions_tbl(j).current_flag := 'Y';
12081                                   l_dest_str_versions_tbl(j).latest_pub_flag := 'Y';
12082 
12083                                END IF;
12084                                */
12085                                l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
12086                         ELSE   ---senario 5
12087                             l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
12088                         END IF;
12089                         exit;
12090                     END LOOP;
12091                 END IF; --l_src_template_flag = 'N'
12092             ELSE
12093                 --Shared and Versioning disabled.
12094                 --senario 2, 4, 6  8 page 5
12095                 FOR j in 1..l_dest_str_versions_tbl.count LOOP
12096                     l_dest_str_versions_tbl(j).copy_flag := 'Y';
12097                     IF  l_dest_template_flag = 'N'  --senario 2 , 4
12098                     THEN
12099                         l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
12100                     ELSE
12101                         --senario 6 ,  8
12102                         l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
12103                     END IF;
12104                     exit;
12105                 END LOOP;
12106             END IF; --l_versioning_enabled = 'Y'
12107         ELSE
12108             --Split structrues
12109             IF l_versioning_enabled = 'Y'
12110             THEN
12111                 IF l_src_template_flag = 'N'   --source is a project
12112                 THEN
12113                     IF  l_dest_template_flag = 'N'
12114                     THEN
12115                         --senario 9; page 6
12116                         --Bug 2955589. Need to copy only one working version to the destination project in AMG
12117                         --context. Set the copy flag to N for published versions. Set the copy flag to Y for the
12118                         --first working version. If there are no working versions create a new one.
12119                         l_working_ver_count := 0;
12120                         FOR j in 1..l_dest_str_versions_tbl.count LOOP
12121                            --Copying workplan str
12122                            IF l_dest_str_versions_tbl(j).src_stru_type_id = 1   --WORKPLAN
12123                            THEN
12124                               IF ( ( l_dest_str_versions_tbl(j).latest_pub_flag = 'Y' OR
12125                                    l_dest_str_versions_tbl(j).current_flag = 'Y' ) AND     --baselined version
12126                                  l_dest_str_versions_tbl(j).src_str_status = 'STRUCTURE_PUBLISHED' )
12127                               THEN
12128                                   --l_dest_str_versions_tbl(j).copy_flag := 'Y';  --Bug 2955589
12129                                   l_dest_str_versions_tbl(j).copy_flag := 'N';
12130                                   l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
12131                                ELSIF ( l_dest_str_versions_tbl(j).src_str_status  <> 'STRUCTURE_PUBLISHED' )
12132                                THEN
12133                                   IF l_working_ver_count = 0 THEN   --Bug 2955589
12134                                     l_dest_str_versions_tbl(j).copy_flag := 'Y';
12135                                   ELSE
12136                                      l_dest_str_versions_tbl(j).copy_flag := 'N';
12137                                   END IF;
12138                                   l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
12139                                   l_working_ver_count := l_working_ver_count + 1;
12140                                END IF;
12141                            ELSE
12142                                --Copying financial str
12143                                IF NVL( l_fin_str_copy_flag, 'N' ) = 'N'
12144                                THEN
12145                                    l_dest_str_versions_tbl(j).copy_flag := 'Y';
12146                                    l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
12147                                    l_fin_str_copy_flag := 'Y';
12148                                END IF;
12149                            END IF;
12150                         END LOOP;
12151                         -- If no working version was found, set the flag so that a version can be created.
12152                         -- Bug 2955589.
12153                         IF l_working_ver_count = 0 THEN
12154                               l_create_wk_version := 'Y';
12155                         END IF;
12156                     ELSE
12157                         --senario 15 page 6
12158                         FOR j in 1..l_dest_str_versions_tbl.count LOOP
12159                            IF l_dest_str_versions_tbl(j).src_stru_type_id = 1   --WORKPLAN
12160                            THEN
12161                               IF ( l_dest_str_versions_tbl(j).latest_pub_flag = 'Y' AND
12162                                    l_dest_str_versions_tbl(j).src_str_status = 'STRUCTURE_PUBLISHED' )
12163                               THEN
12164                                   l_dest_str_versions_tbl(j).copy_flag := 'Y';
12165                                   l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
12166                                   l_copy_flag_set := 'Y';
12167                               END IF;
12168                            ELSE
12169                                --Copying financial str
12170                                IF NVL( l_fin_str_copy_flag, 'N' ) = 'N'
12171                                THEN
12172                                    l_dest_str_versions_tbl(j).copy_flag := 'Y';
12173                                    l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
12174                                    l_fin_str_copy_flag := 'Y';
12175                                END IF;
12176                            END IF;
12177                         END LOOP;
12178                         IF NVL( l_copy_flag_set, 'N' ) = 'N'    --latest published was not found, now look for latest updated unpublished str ver
12179                         THEN
12180                             l_max_date := null;
12181                             FOR j in 1..l_dest_str_versions_tbl.count LOOP --look for last updated unpublished version
12182                              IF l_dest_str_versions_tbl(j).src_stru_type_id = 1   --WORKPLAN
12183                              THEN
12184                                IF l_dest_str_versions_tbl(j).src_str_status <> 'STRUCTURE_PUBLISHED'
12185                                THEN
12186                                     --Find out which unpublihsed version is last updated.
12187                                     IF l_max_date IS NULL
12188                                     THEN
12189                                         l_latst_upd_wrkng_str_ver := l_dest_str_versions_tbl(j).src_str_version_id;
12190                                         l_max_date := PA_PROJ_TASK_STRUC_PUB.GET_MAX_LAST_UPD_DT_WRKNG_VER( l_dest_str_versions_tbl(j).src_str_version_id );
12191                                     ELSE
12192                                         l_max_date2 := PA_PROJ_TASK_STRUC_PUB.GET_MAX_LAST_UPD_DT_WRKNG_VER( l_dest_str_versions_tbl(j).src_str_version_id );
12193                                         IF  l_max_date2 > l_max_date
12194                                         THEN
12195                                            --for bug 2834111
12196                                            l_max_date := l_max_date2;
12197                                            l_latst_upd_wrkng_str_ver := l_dest_str_versions_tbl(j).src_str_version_id;
12198                                         END IF;
12199                                     END IF;
12200                                END IF;  --l_dest_str_versions_tbl(j).src_str_status <> 'STRUCTURE_PUBLISHED'
12201                              END IF;  --l_dest_str_versions_tbl(j).src_stru_type_id = 1   --WORKPLAN
12202                             END LOOP; --look for last updated unpublished version
12203                             --for bug 2834111
12204                             --mark the last updated unpublished version for copying.
12205                             FOR j in 1..l_dest_str_versions_tbl.count LOOP
12206                                IF l_dest_str_versions_tbl(j).src_str_version_id = l_latst_upd_wrkng_str_ver
12207                                THEN
12208                                   l_dest_str_versions_tbl(j).copy_flag := 'Y';
12209                                   l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
12210                                END IF;
12211                            END LOOP;
12212 
12213                         END IF; --NVL( l_copy_flag_set, 'N' ) := 'N'    --latest published was not found, now look for latest updated unpublished str ver
12214                     END IF;  --l_dest_template_flag = 'N'
12215                 ELSE
12216                     --source is a template
12217                     --senario 11  on page 5
12218                     --copying workplan
12219                     FOR j in 1..l_dest_str_versions_tbl.count LOOP
12220                         IF l_dest_str_versions_tbl(j).src_stru_type_id = 1   --WORKPLAN
12221                         THEN
12222                            l_dest_str_versions_tbl(j).copy_flag := 'Y';
12223                            IF  l_dest_template_flag = 'N' ---senario 11
12224                            THEN
12225                                /* Bug 2955589. Irrespective of the value in auto publish flag set the version
12226                                   status to working so that the process_task_structure_bulk api will process
12227                                   on this version. Refer to the bug for more details.
12228 
12229                                IF l_auto_pub_enabled = 'N'
12230                                THEN
12231                                   l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
12232                                ELSE
12233                                   l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
12234 --bug 2858216
12235                                   l_dest_str_versions_tbl(j).current_flag := 'Y';
12236                                   l_dest_str_versions_tbl(j).latest_pub_flag := 'Y';
12237                                END IF;
12238                                */
12239                                l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_WORKING';
12240 
12241                            ELSE   ---senario 13
12242                                l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
12243                            END IF;
12244                           exit;
12245                         END IF;
12246                     END LOOP;
12247                     --senario 11  on page 5
12248                     --copying financail
12249                     FOR j in 1..l_dest_str_versions_tbl.count LOOP
12250                         IF l_dest_str_versions_tbl(j).src_stru_type_id = 6   --FINANCIAL
12251                         THEN
12252                            l_dest_str_versions_tbl(j).copy_flag := 'Y';
12253                            IF  l_dest_template_flag = 'N' ---senario 11
12254                            THEN
12255                                l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
12256                            ELSE   ---senario 13
12257                                l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
12258                            END IF;
12259                           exit;
12260                         END IF;
12261                     END LOOP;
12262                 END IF; --l_src_template_flag = 'N'
12263             ELSE
12264                 --Versioning disabled.
12265                 IF l_src_template_flag = 'N'   --source is a project
12266                 THEN
12267                     --senario 10 and 16; page 6 and 7 respectively
12268                      --copying workplan
12269                      FOR j in 1..l_dest_str_versions_tbl.count LOOP
12270                        IF l_dest_str_versions_tbl(j).src_stru_type_id = 1   --WORKPLAN
12271                        THEN
12272                          l_dest_str_versions_tbl(j).copy_flag := 'Y';
12273                          IF  l_dest_template_flag = 'N'  --senario 10
12274                          THEN
12275                              l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
12276                          ELSE
12277                              --senario 8
12278                              l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
12279                          END IF;
12280                          exit;
12281                        END IF;
12282                      END LOOP;
12283                      --copying financial
12284                      FOR j in 1..l_dest_str_versions_tbl.count LOOP
12285                        IF l_dest_str_versions_tbl(j).src_stru_type_id = 6   --FINANCIAL
12286                        THEN
12287                          l_dest_str_versions_tbl(j).copy_flag := 'Y';
12288                          IF  l_dest_template_flag = 'N'  --senario 16
12289                          THEN
12290                              l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
12291                          ELSE
12292                              --senario 8
12293                              l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
12294                          END IF;
12295                          exit;
12296                        END IF;
12297                      END LOOP;
12298                 ELSE
12299                     --source is a template
12300                     --senario 12 and 14; page 6
12301                      FOR j in 1..l_dest_str_versions_tbl.count LOOP
12302                         IF l_dest_template_flag = 'N'
12303                         THEN
12304                             l_dest_str_versions_tbl(j).copy_flag := 'Y';
12305                             l_dest_str_versions_tbl(j).dest_str_status := 'STRUCTURE_PUBLISHED';
12306                          ELSE
12307                             l_dest_str_versions_tbl(j).copy_flag := 'Y';
12308                             l_dest_str_versions_tbl(j).dest_str_status := l_dest_str_versions_tbl(j).src_str_status;
12309                         END IF;
12310                      END LOOP;
12311                 END IF; --l_src_template_flag = 'N'
12312             END IF; --l_versioning_enabled = 'Y'
12313         END IF;  --Share Y or N
12314 
12315         --WORKPLAN  ENABLED ( SHARED or SPLIT )
12316 
12317        IF NOT l_dest_str_versions_tbl.exists(1)
12318           AND nvl(l_create_fin_version,'N') = 'N'   --Bug 2955589
12319           AND nvl(l_create_wk_version,'N') = 'N'
12320        THEN
12321            return;
12322        END IF;
12323 
12324              IF l_shared = 'N'
12325              THEN
12326                UPDATE pa_proj_elements ppe
12327                   set name = substr(l_project_name||l_append||l_suffix, 1, 240)
12328                 WHERE project_id = p_dest_project_id
12329                   AND object_type = 'PA_STRUCTURES'
12330                   AND EXISTS ( SELECT proj_element_id FROM pa_proj_structure_types
12331                                 WHERE proj_element_id = ppe.proj_element_id
12332                                   AND structure_type_id = 1 );
12333              END IF;
12334 
12335                INSERT INTO pa_proj_workplan_attr(
12336                             PROJ_ELEMENT_ID
12337                            ,PROJECT_ID
12338                            ,LAST_UPDATE_DATE
12339                            ,LAST_UPDATED_BY
12340                            ,CREATION_DATE
12341                            ,CREATED_BY
12342                            ,WP_APPROVAL_REQD_FLAG
12343                            ,WP_AUTO_PUBLISH_FLAG
12344                            ,WP_DEFAULT_DISPLAY_LVL
12345                            ,WP_ENABLE_VERSION_FLAG
12346                            ,AUTO_PUB_UPON_CREATION_FLAG
12347                            ,AUTO_SYNC_TXN_DATE_FLAG
12348                            ,WP_APPROVER_SOURCE_ID
12349                            ,WP_APPROVER_SOURCE_TYPE
12350                            ,RECORD_VERSION_NUMBER
12351                            ,LAST_UPDATE_LOGIN
12352                            ,TXN_DATE_SYNC_BUF_DAYS
12353                            ,LIFECYCLE_VERSION_ID
12354                            ,CURRENT_PHASE_VERSION_ID
12355 --bug 4061876
12356          ,SCHEDULE_THIRD_PARTY_FLAG
12357          ,ALLOW_LOWEST_TSK_DEP_FLAG
12358          ,AUTO_ROLLUP_SUBPROJ_FLAG
12359          ,THIRD_PARTY_SCHEDULE_CODE
12360                         ,source_object_id
12361                         ,source_object_type
12362                         -- gboomina bug 8586393 - start
12363                         ,use_task_schedule_flag
12364                         -- gboomina bug 8586393 - end
12365                           )
12366                       SELECT
12367                             ppe.PROJ_ELEMENT_ID
12368                            ,ppe.PROJECT_ID
12369                            ,SYSDATE
12370                            ,l_user_id
12371                            ,SYSDATE
12372                            ,l_user_id
12373                            ,ppwa.WP_APPROVAL_REQD_FLAG
12374                            ,ppwa.WP_AUTO_PUBLISH_FLAG
12375                            ,ppwa.WP_DEFAULT_DISPLAY_LVL
12376                            ,ppwa.WP_ENABLE_VERSION_FLAG
12377                            ,ppwa.AUTO_PUB_UPON_CREATION_FLAG
12378                            ,ppwa.AUTO_SYNC_TXN_DATE_FLAG
12379                            ,ppwa.WP_APPROVER_SOURCE_ID
12380                            ,ppwa.WP_APPROVER_SOURCE_TYPE
12381                            ,ppwa.RECORD_VERSION_NUMBER
12382                            ,ppwa.LAST_UPDATE_LOGIN
12383                            ,ppwa.TXN_DATE_SYNC_BUF_DAYS
12384                            ,ppwa.LIFECYCLE_VERSION_ID
12385                            ,ppwa.CURRENT_PHASE_VERSION_ID
12386 --bug 4061876
12387          ,ppwa.SCHEDULE_THIRD_PARTY_FLAG
12388          ,ppwa.ALLOW_LOWEST_TSK_DEP_FLAG
12389          ,ppwa.AUTO_ROLLUP_SUBPROJ_FLAG
12390          ,ppwa.THIRD_PARTY_SCHEDULE_CODE
12391                            ,ppe.PROJECT_ID
12392                            ,'PA_PROJECTS'
12393                            -- gboomina bug 8586393 - start
12394                            ,ppwa.use_task_schedule_flag
12395                            -- gboomina bug 8586393 - end
12396                          /*FROM pa_proj_elements ppe,
12397                               pa_proj_workplan_attr ppwa
12398                          WHERE ppe.project_id = p_dest_project_id
12399                            and object_type = 'PA_STRUCTURES'
12400                            and ppwa.project_id = p_src_project_id
12401                            and ppwa.proj_element_id = ppe.attribute15;*//*Commented below query and following criteria by SMUKKA */
12402                          FROM pa_proj_elements ppe,
12403                               pa_proj_workplan_attr ppwa
12404                         WHERE ppwa.project_id = p_src_project_id
12405             AND   ppe.project_id = p_dest_project_id
12406             AND   ppe.object_type ='PA_STRUCTURES'
12407             AND   ppe.attribute15 = ppwa.proj_element_id
12408             AND   PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y'; /* bug 3621613 */
12409 
12410 --bug 3010538
12411 --added task weighting basis code
12412               INSERT INTO pa_proj_progress_attr(
12413                        PROJ_PROGRESS_ATTR_ID
12414                       ,OBJECT_TYPE
12415                       ,OBJECT_ID
12416                       ,LAST_UPDATE_DATE
12417                       ,LAST_UPDATED_BY
12418                       ,CREATION_DATE
12419                       ,CREATED_BY
12420                       ,LAST_UPDATE_LOGIN
12421                       ,PROJECT_ID
12422                       ,PROGRESS_CYCLE_ID
12423                       ,WQ_ENABLE_FLAG
12424                       ,REMAIN_EFFORT_ENABLE_FLAG
12425                       ,PERCENT_COMP_ENABLE_FLAG
12426                       ,NEXT_PROGRESS_UPDATE_DATE
12427                       ,RECORD_VERSION_NUMBER
12428                       ,TASK_WEIGHT_BASIS_CODE
12429         /* FP-M Bug # 3420093. Modified: copy_structures_bulk. */
12430                       ,ALLOW_COLLAB_PROG_ENTRY
12431                       ,ALLOW_PHY_PRCNT_CMP_OVERRIDES
12432                       ,STRUCTURE_TYPE
12433         /* FP-M Bug # 3420093. Modified: copy_structures_bulk. */
12434                    ) SELECT
12435                            PA_PROJ_PROGRESS_ATTR_S.nextval
12436                           ,ppe.OBJECT_TYPE
12437                           ,ppe.proj_element_ID
12438                           ,sysdate
12439                           ,l_user_id
12440                           ,SYSDATE
12441                           ,l_user_id
12442                           ,l_login_id
12443                           ,p_dest_project_id
12444                           ,pppa.PROGRESS_CYCLE_ID
12445                           ,pppa.WQ_ENABLE_FLAG
12446                           ,pppa.REMAIN_EFFORT_ENABLE_FLAG
12447                           ,pppa.PERCENT_COMP_ENABLE_FLAG
12448                           ,pppa.NEXT_PROGRESS_UPDATE_DATE
12449                           ,pppa.RECORD_VERSION_NUMBER
12450                           ,pppa.TASK_WEIGHT_BASIS_CODE
12451         /* FP-M Bug # 3420093. Modified: copy_structures_bulk. */
12452                           ,pppa.ALLOW_COLLAB_PROG_ENTRY
12453                           ,pppa.ALLOW_PHY_PRCNT_CMP_OVERRIDES
12454                           ,pppa.STRUCTURE_TYPE
12455         /* FP-M Bug # 3420093. Modified: copy_structures_bulk. */
12456                       /*FROM  pa_proj_progress_attr pppa,
12457                             pa_proj_elements ppe
12458                        WHERE ppe.project_id = p_dest_project_id
12459                          and ppe.attribute15 = pppa.object_id         --no need to join with
12460                          and pppa.object_type = 'PA_STRUCTURES'
12461                          and ppe.object_type = 'PA_STRUCTURES'
12462                          and pppa.project_id = p_src_project_id;*//*Commented below query and following criteria by SMUKKA */
12463                       FROM pa_proj_progress_attr pppa,
12464                            pa_proj_elements ppe
12465                     WHERE ppe.project_id = p_dest_project_id
12466                        and ppe.attribute15 = pppa.object_id
12467                        and pppa.object_type = 'PA_STRUCTURES'
12468                        and ppe.object_type = 'PA_STRUCTURES'
12469                        and pppa.project_id = p_src_project_id
12470                        AND   PA_PROJ_ELEMENTS_UTILS.check_fin_or_wp_structure( ppe.proj_element_id ) = 'Y' ;  /* bug 3621613 */
12471 
12472        --Bug 2955589. If Versioning is enabled and it is a project to project copy, the plsql table will not
12473        --contain any records if there were no working verisons. We need to create one if any of the flags
12474        --l_create_fin_version or l_create_wk_version is 'Y'.
12475        IF nvl(l_create_fin_version,'N') = 'Y' THEN
12476            l_structure_ver_name := substr(l_project_name, 1, 240);
12477            PA_PROJ_TASK_STRUC_PUB.create_update_struct_ver(
12478                         p_project_id             => p_dest_project_id
12479                        ,p_structure_type         => 'FINANCIAL'
12480                        ,p_structure_version_name => l_structure_ver_name
12481                        ,p_structure_version_id   => null
12482                        ,x_structure_version_id   => l_structure_version_id
12483                        ,x_msg_count              => x_msg_count
12484                        ,x_msg_data               => x_msg_data
12485                        ,x_return_status          => x_return_status
12486                      );
12487            IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR
12488            THEN
12489               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12490            ELSIF x_return_status = FND_API.G_RET_STS_ERROR
12491            THEN
12492              RAISE FND_API.G_EXC_ERROR;
12493            END IF;
12494        ELSIF nvl(l_create_wk_version,'N') = 'Y' THEN
12495           l_structure_ver_name := substr(l_project_name||l_append||l_suffix, 1, 240);
12496 
12497           PA_PROJ_TASK_STRUC_PUB.create_update_struct_ver(
12498                        p_project_id             => p_dest_project_id
12499                       ,p_structure_type         => 'WORKPLAN'
12500                       ,p_structure_version_name => l_structure_ver_name
12501                       ,p_structure_version_id   => null
12502                       ,x_structure_version_id   => l_structure_version_id
12503                       ,x_msg_count              => x_msg_count
12504                       ,x_msg_data               => x_msg_data
12505                       ,x_return_status          => x_return_status
12506                     );
12507           IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR
12508           THEN
12509              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12510           ELSIF x_return_status = FND_API.G_RET_STS_ERROR
12511           THEN
12512             RAISE FND_API.G_EXC_ERROR;
12513           END IF;
12514        END IF;
12515 
12516        FOR k in 1..l_dest_str_versions_tbl.count LOOP
12517            IF l_dest_str_versions_tbl(k).copy_flag = 'Y'
12518            THEN
12519 
12520 
12521               OPEN cur_elem_ver_seq;
12522               FETCH cur_elem_ver_seq INTO l_struc_version_id;
12523               CLOSE cur_elem_ver_seq;
12524               --First copy structure version and then copy all task versions
12525               --We cannot perform both with the same sql bcoz we need parent_structure version id for tasks.
12526               INSERT INTO pa_proj_element_versions(
12527                      ELEMENT_VERSION_ID
12528                     ,PROJ_ELEMENT_ID
12529                     ,OBJECT_TYPE
12530                     ,PROJECT_ID
12531                     ,PARENT_STRUCTURE_VERSION_ID
12532                     ,DISPLAY_SEQUENCE
12533                     ,WBS_LEVEL
12534                     ,WBS_NUMBER
12535                     ,CREATION_DATE
12536                     ,CREATED_BY
12537                     ,LAST_UPDATE_DATE
12538                     ,LAST_UPDATED_BY
12539                     ,LAST_UPDATE_LOGIN
12540                     ,RECORD_VERSION_NUMBER
12541                     ,attribute15          --this column is used to store structure ver id of the source project to be used to created relationships.
12542                     ,ATTRIBUTE_CATEGORY
12543                      ,ATTRIBUTE1
12544                      ,ATTRIBUTE2
12545                      ,ATTRIBUTE3
12546                      ,ATTRIBUTE4
12547                      ,ATTRIBUTE5
12548                      ,ATTRIBUTE6
12549                      ,ATTRIBUTE7
12550                      ,ATTRIBUTE8
12551                      ,ATTRIBUTE9
12552                      ,ATTRIBUTE10
12553                      ,ATTRIBUTE11
12554                      ,ATTRIBUTE12
12555                      ,ATTRIBUTE13
12556                      ,ATTRIBUTE14
12557                      ,TASK_UNPUB_VER_STATUS_CODE
12558                      ,source_object_id
12559                      ,source_object_type
12560                     )
12561                   SELECT
12562                      l_struc_version_id
12563                     ,ppe.proj_element_id
12564                     ,ppev.object_type
12565                     ,p_dest_project_id
12566                     ,l_struc_version_id
12567                     ,ppev.DISPLAY_SEQUENCE
12568                     ,ppev.WBS_LEVEL
12569                     ,ppev.WBS_NUMBER
12570                     ,SYSDATE                     ------CREATION_DATE
12571                     ,l_user_id          ------CREATED_BY
12572                     ,SYSDATE                     ------LAST_UPDATE_DATE
12573                     ,l_user_id          ------LAST_UPDATED_BY
12574                     ,l_login_id         ------LAST_UPDATE_LOGIN
12575                     ,ppev.RECORD_VERSION_NUMBER                           ------RECORD_VERSION_NUMBER
12576                     ,ppev.element_version_id
12577                     ,ppev.ATTRIBUTE_CATEGORY
12578                      ,ppev.ATTRIBUTE1
12579                      ,ppev.ATTRIBUTE2
12580                      ,ppev.ATTRIBUTE3
12581                      ,ppev.ATTRIBUTE4
12582                      ,ppev.ATTRIBUTE5
12583                      ,ppev.ATTRIBUTE6
12584                      ,ppev.ATTRIBUTE7
12585                      ,ppev.ATTRIBUTE8
12586                      ,ppev.ATTRIBUTE9
12587                      ,ppev.ATTRIBUTE10
12588                      ,ppev.ATTRIBUTE11
12589                      ,ppev.ATTRIBUTE12
12590                      ,ppev.ATTRIBUTE13
12591                      ,ppev.ATTRIBUTE14
12592                      ,ppev.TASK_UNPUB_VER_STATUS_CODE
12593                      ,p_dest_project_id
12594                      ,'PA_PROJECTS'
12595                   FROM pa_proj_element_versions ppev,
12596                        pa_proj_elements ppe
12597                   WHERE ppev.project_id = p_src_project_id
12598                     and ppe.project_id = p_dest_project_id
12599                     and ppev.element_version_id = l_dest_str_versions_tbl(k).src_str_version_id
12600                     and ppev.proj_element_id = ppe.attribute15
12601                     and ppe.object_type = 'PA_STRUCTURES'
12602                     and ppev.object_type = 'PA_STRUCTURES';
12603 
12604 --bug 3138959
12605           --User adding tasks under WORKPLAN structure from AMG, financial plan should be copied over.
12606 
12607           IF PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version( l_struc_version_id, 'FINANCIAL' ) = 'Y'
12608              AND l_shared = 'N' AND l_workplan_enabled = 'Y'       -- For Split structures
12609              AND pa_project_pub.G_structure_in_rec.structure_type = 'WORKPLAN'
12610           THEN
12611                   --Copy financial tasks
12612 
12613                   INSERT INTO pa_proj_element_versions(
12614                      ELEMENT_VERSION_ID
12615                     ,PROJ_ELEMENT_ID
12616                     ,OBJECT_TYPE
12617                     ,PROJECT_ID
12618                     ,PARENT_STRUCTURE_VERSION_ID
12619                     ,DISPLAY_SEQUENCE
12620                     ,WBS_LEVEL
12621                     ,WBS_NUMBER
12622                     ,CREATION_DATE
12623                     ,CREATED_BY
12624                     ,LAST_UPDATE_DATE
12625                     ,LAST_UPDATED_BY
12626                     ,LAST_UPDATE_LOGIN
12627                     ,RECORD_VERSION_NUMBER
12628                     ,attribute15          --this column is used to store task ver id of the source project's task versions to be used to created relationships.
12629                     ,ATTRIBUTE_CATEGORY
12630                      ,ATTRIBUTE1
12631                      ,ATTRIBUTE2
12632                      ,ATTRIBUTE3
12633                      ,ATTRIBUTE4
12634                      ,ATTRIBUTE5
12635                      ,ATTRIBUTE6
12636                      ,ATTRIBUTE7
12637                      ,ATTRIBUTE8
12638                      ,ATTRIBUTE9
12639                      ,ATTRIBUTE10
12640                      ,ATTRIBUTE11
12641                      ,ATTRIBUTE12
12642                      ,ATTRIBUTE13
12643                      ,ATTRIBUTE14
12644                      ,TASK_UNPUB_VER_STATUS_CODE
12645                      ,source_object_id
12646                      ,source_object_type
12647              ,financial_task_flag                    --Bug no 3651255
12648                     )
12649               SELECT
12650                      pa_proj_element_versions_s.nextval
12651                     ,ppe.proj_element_id
12652                     ,ppev.object_type
12653                     ,p_dest_project_id
12654                     ,l_struc_version_id            --from previous sql
12655                     ,ppev.DISPLAY_SEQUENCE
12656                     ,ppev.WBS_LEVEL
12657                     ,ppev.WBS_NUMBER
12658                     ,SYSDATE                     ------CREATION_DATE
12659                     ,l_user_id          ------CREATED_BY
12660                     ,SYSDATE                     ------LAST_UPDATE_DATE
12661                     ,l_user_id          ------LAST_UPDATED_BY
12662                     ,l_login_id         ------LAST_UPDATE_LOGIN
12663                     ,ppev.RECORD_VERSION_NUMBER                           ------RECORD_VERSION_NUMBER
12664                     ,ppev.element_version_id     -- to help create relationships from source
12665                     ,ppev.ATTRIBUTE_CATEGORY
12666                      ,ppev.ATTRIBUTE1
12667                      ,ppev.ATTRIBUTE2
12668                      ,ppev.ATTRIBUTE3
12669                      ,ppev.ATTRIBUTE4
12670                      ,ppev.ATTRIBUTE5
12671                      ,ppev.ATTRIBUTE6
12672                      ,ppev.ATTRIBUTE7
12673                      ,ppev.ATTRIBUTE8
12674                      ,ppev.ATTRIBUTE9
12675                      ,ppev.ATTRIBUTE10
12676                      ,ppev.ATTRIBUTE11
12677                      ,ppev.ATTRIBUTE12
12678                      ,ppev.ATTRIBUTE13
12679                      ,ppev.ATTRIBUTE14
12680                      ,decode( l_dest_str_versions_tbl(k).dest_str_status, 'STRUCTURE_PUBLISHED', 'PUBLISHED', 'WORKING' )
12681                      ,p_dest_project_id
12682                      ,'PA_PROJECTS'
12683              ,ppev.financial_task_flag                    --Bug no 3651255
12684                  FROM pa_proj_element_versions ppev,
12685                       pa_proj_elements ppe
12686                 WHERE ppev.project_id = p_src_project_id
12687                   and ppe.project_id = p_dest_project_id
12688                   and ppev.parent_structure_version_id = l_dest_str_versions_tbl(k).src_str_version_id
12689                   and ppev.proj_element_id = ppe.attribute15
12690                   and ppe.object_type = 'PA_TASKS'
12691                   and ppev.object_type = 'PA_TASKS';
12692 
12693                --Create relationships for structure and tasks
12694 
12695   /* Start of changes for bug 6211012 */
12696 
12697         l_obj_rel_id.delete;
12698 	l_obj_typ_from.delete;
12699 	l_obj_from_id.delete;
12700 	l_obj_typ_to.delete;
12701 	l_obj_to_id.delete;
12702 	l_rel_typ.delete;
12703 	l_rel_subtyp.delete;
12704 	l_rec_ver_num.delete;
12705 	l_wt_percent.delete;
12706 
12707         OPEN cur_pa_obj_rela_3(l_dest_str_versions_tbl(k).src_str_version_id,l_struc_version_id);
12708 
12709 	LOOP
12710 
12711 	FETCH cur_pa_obj_rela_3
12712 	BULK COLLECT INTO
12713 		l_obj_rel_id,
12714 		l_obj_typ_from,
12715 		l_obj_from_id,
12716 		l_obj_typ_to,
12717 		l_obj_to_id,
12718 		l_rel_typ,
12719 		l_rel_subtyp,
12720 		l_rec_ver_num,
12721 		l_wt_percent
12722 	LIMIT 1000;
12723 
12724 	  IF l_obj_rel_id.COUNT >0 THEN
12725 
12726 	    FORALL i IN l_obj_rel_id.FIRST..l_obj_rel_id.LAST
12727             insert into PA_OBJECT_RELATIONSHIPS (
12728                  object_relationship_id,
12729                  object_type_from,
12730                  object_id_from1,
12731                  object_type_to,
12732                  object_id_to1,
12733                  relationship_type,
12734                  relationship_subtype,
12735                  Record_Version_Number,
12736                  CREATED_BY,
12737                  CREATION_DATE,
12738                  LAST_UPDATED_BY,
12739                  LAST_UPDATE_DATE,
12740                  LAST_UPDATE_LOGIN,
12741                  weighting_percentage
12742                        )
12743 		 values(
12744 		 l_obj_rel_id(i),
12745 	         l_obj_typ_from(i),
12746 	         l_obj_from_id(i),
12747 	         l_obj_typ_to(i),
12748 	         l_obj_to_id(i),
12749 	         l_rel_typ(i),
12750 	         l_rel_subtyp(i),
12751 	         l_rec_ver_num(i),
12752                  l_user_id,
12753                  SYSDATE,
12754                  l_user_id,
12755                  SYSDATE,
12756                  l_login_id,
12757 	         l_wt_percent(i)
12758 		 );
12759 	  END IF;
12760 
12761           EXIT WHEN l_obj_rel_id.COUNT < 1000 ;
12762 	END LOOP;
12763 
12764 	l_obj_rel_id.delete;
12765 	l_obj_typ_from.delete;
12766 	l_obj_from_id.delete;
12767 	l_obj_typ_to.delete;
12768 	l_obj_to_id.delete;
12769 	l_rel_typ.delete;
12770 	l_rel_subtyp.delete;
12771 	l_rec_ver_num.delete;
12772 	l_wt_percent.delete;
12773 
12774 	CLOSE cur_pa_obj_rela_3;
12775 
12776 /*
12777               INSERT INTO PA_OBJECT_RELATIONSHIPS (
12778                                   object_relationship_id,
12779                                   object_type_from,
12780                                   object_id_from1,
12781                                   object_type_to,
12782                                   object_id_to1,
12783                                   relationship_type,
12784                                   relationship_subtype,
12785                                   Record_Version_Number,
12786                                   CREATED_BY,
12787                                   CREATION_DATE,
12788                                   LAST_UPDATED_BY,
12789                                   LAST_UPDATE_DATE,
12790                                   LAST_UPDATE_LOGIN,
12791                                   weighting_percentage
12792                                   )
12793               /*Added the hint for the bug 3513853*/
12794   /*               SELECT /*+ USE_HASH(ppev2 ppev1)*/
12795   /*                             pa_object_relationships_s.nextval,
12796                                pobj.object_type_from,
12797                                   ppev1.element_version_id,
12798                                   pobj.object_type_to,
12799                                   ppev2.element_version_id,
12800                                   pobj.relationship_type,
12801                                   pobj.relationship_subtype,
12802                                pobj.Record_Version_Number,
12803                                l_user_id,
12804                                SYSDATE,
12805                                l_user_id,
12806                                SYSDATE,
12807                                l_login_id,
12808                                pobj.weighting_percentage
12809                     FROM ( SELECT  object_type_from, object_id_from1,
12810                                    object_type_to,   object_id_to1,
12811                                    relationship_type, relationship_subtype,
12812                                    Record_Version_Number, weighting_percentage
12813                              FROM pa_object_relationships
12814                             --bug#3094283WHERE RELATIONSHIP_TYPE = 'S'
12815                              start with object_id_from1 = l_dest_str_versions_tbl(k).src_str_version_id
12816                              and  RELATIONSHIP_TYPE = 'S' /* Bug 2881667 Added this condition */
12817    /*                          connect by  object_id_from1 =  prior object_id_to1
12818                              and  RELATIONSHIP_TYPE = 'S' ) pobj, /* Bug 2881667 Added this condition */
12819    /*                      pa_proj_element_versions ppev1,
12820                          pa_proj_element_versions ppev2
12821                  WHERE
12822                    --bug#3094283    ppev1.project_id = p_dest_project_id
12823                     ppev1.attribute15 = pobj.object_id_from1
12824                    --bug#3094283  ppev2.project_id = p_dest_project_id
12825                    AND ppev2.attribute15 = pobj.object_id_to1
12826                    AND ppev1.parent_structure_version_id = l_struc_version_id
12827                    AND ppev2.parent_structure_version_id = l_struc_version_id
12828                    ;
12829 		   */
12830 /* End of Code added for 6211012 */
12831           END IF;
12832 --bug 3138959
12833 
12834               IF l_dest_str_versions_tbl(k).dest_str_status = 'STRUCTURE_PUBLISHED'
12835                  and l_dest_str_versions_tbl(k).current_flag = 'N'
12836                  and l_dest_str_versions_tbl(k).latest_pub_flag = 'N'
12837               THEN
12838                   l_LATEST_EFF_PUBLISHED_FLAG := 'Y';
12839               ELSE
12840                   l_LATEST_EFF_PUBLISHED_FLAG := l_dest_str_versions_tbl(k).latest_pub_flag;
12841               END IF;
12842 
12843               IF l_dest_template_flag = 'Y'
12844               THEN
12845                   l_LATEST_EFF_PUBLISHED_FLAG := 'N';
12846                   l_dest_str_versions_tbl(k).current_flag := 'N';
12847                   IF l_dest_str_versions_tbl(k).dest_str_status <> 'STRUCTURE_WORKING'
12848                   THEN
12849                      l_dest_str_versions_tbl(k).dest_str_status := 'STRUCTURE_WORKING';
12850                   END IF;
12851               END IF;
12852 
12853               IF l_LATEST_EFF_PUBLISHED_FLAG = 'Y' OR l_dest_template_flag = 'Y'
12854               THEN
12855                  l_latest_pub_str_ver_id := l_struc_version_id;
12856               ELSE
12857                  l_latest_pub_str_ver_id := null;
12858               END IF;
12859 
12860 --bug 3010538
12861 --added PROCESS_UPDATE_WBS_FLAG
12862 
12863              INSERT INTO PA_PROJ_ELEM_VER_STRUCTURE(
12864                             PEV_STRUCTURE_ID
12865                            ,ELEMENT_VERSION_ID
12866                            ,VERSION_NUMBER
12867                            ,NAME
12868                            ,PROJECT_ID
12869                            ,PROJ_ELEMENT_ID
12870                            ,DESCRIPTION
12871                            ,EFFECTIVE_DATE
12872                            ,PUBLISHED_DATE
12873                            ,PUBLISHED_BY_PERSON_ID
12874                            ,CURRENT_BASELINE_DATE
12875                            ,CURRENT_FLAG
12876                            ,CURRENT_BASELINE_PERSON_ID
12877                            ,ORIGINAL_BASELINE_DATE
12878                            ,ORIGINAL_FLAG
12879                            ,ORIGINAL_BASELINE_PERSON_ID
12880                            ,LOCK_STATUS_CODE
12881                            ,LOCKED_BY_PERSON_ID
12882                            ,LOCKED_DATE
12883                            ,STATUS_CODE
12884                            ,WF_STATUS_CODE
12885                            ,LATEST_EFF_PUBLISHED_FLAG
12886                            ,RECORD_VERSION_NUMBER
12887                            ,WBS_RECORD_VERSION_NUMBER
12888                            ,CREATION_DATE
12889                            ,CREATED_BY
12890                            ,LAST_UPDATE_DATE
12891                            ,LAST_UPDATED_BY
12892                            ,LAST_UPDATE_LOGIN
12893                            ,change_reason_code
12894                            ,PROCESS_UPDATE_WBS_FLAG
12895                            ,current_working_flag   /* FPM bug 3301192 */
12896                            ,source_object_id
12897                            ,source_object_type
12898                            )
12899                    SELECT
12900                          pa_proj_elem_ver_structure_s.nextval
12901                         ,l_struc_version_id
12902                         ,ppevs.version_number     --replaced k with source version_number  bug 2829385
12903             --,ppevs.name 3717026, replaced ppevs.name with ppe.name
12904             ,ppe.name
12905                         ,p_dest_project_id
12906                         ,ppe.proj_element_id
12907                         ,ppevs.DESCRIPTION
12908                         ,ppevs.EFFECTIVE_DATE
12909                         ,decode(l_dest_str_versions_tbl(k).dest_str_status, 'STRUCTURE_PUBLISHED', sysdate, to_date(null)) --bug 2838547
12910                         ,decode(l_dest_str_versions_tbl(k).dest_str_status, 'STRUCTURE_PUBLISHED', l_publish_person_id, NULL) --bug 2838547
12911                         ,decode(l_dest_str_versions_tbl(k).current_flag, 'Y', trunc(sysdate), to_date(NULL)) --bug 2838547
12912                         ,l_dest_str_versions_tbl(k).current_flag
12913                         ,decode(l_dest_str_versions_tbl(k).current_flag, 'Y', l_publish_person_id, NULL) --bug 2838547
12914                         ,ppevs.ORIGINAL_BASELINE_DATE
12915                         ,ppevs.ORIGINAL_FLAG
12916                         ,ppevs.ORIGINAL_BASELINE_PERSON_ID
12917                         ,'UNLOCKED'
12918                         ,null
12919                         ,null
12920                         ,l_dest_str_versions_tbl(k).dest_str_status
12921                         ,ppevs.WF_STATUS_CODE
12922                         ,l_LATEST_EFF_PUBLISHED_FLAG
12923                         ,ppevs.RECORD_VERSION_NUMBER
12924                         ,ppevs.WBS_RECORD_VERSION_NUMBER
12925                         ,SYSDATE
12926                         ,l_user_id
12927                         ,SYSDATE
12928                         ,l_user_id
12929                         ,l_login_id
12930                         ,ppevs.change_reason_code
12931                         ,'N'
12932                         ,ppevs.current_working_flag   /* FPM bug 3301192 */
12933                         ,p_dest_project_id
12934                         ,'PA_PROJECTS'
12935                   FROM PA_PROJ_ELEM_VER_STRUCTURE ppevs, pa_proj_elements ppe
12936                  WHERE ppevs.project_id = p_src_project_id
12937                   AND ppe.project_id = p_dest_project_id
12938                   and ppevs.element_version_id = l_dest_str_versions_tbl(k).src_str_version_id
12939                   and ppevs.proj_element_id = ppe.attribute15
12940                   AND ppe.object_type = 'PA_STRUCTURES';
12941 
12942               --fix bug 2831973
12943               --calculate delta before inserting schedule rows
12944               --select source structure version scheduled start date
12945               IF (p_target_start_date IS NULL) THEN
12946                 l_delta := 0;
12947               ELSE
12948                 OPEN get_src_sch_st_date(p_src_project_id,
12949                          l_dest_str_versions_tbl(k).src_str_version_id);
12950                 FETCH get_src_sch_st_date into l_src_sch_st_date;
12951                 CLOSE get_src_sch_st_date;
12952                 l_delta := p_target_start_date - l_src_sch_st_date;
12953               END IF;
12954 
12955               INSERT INTO pa_proj_elem_ver_schedule(
12956                             PEV_SCHEDULE_ID
12957                            ,ELEMENT_VERSION_ID
12958                            ,PROJECT_ID
12959                            ,PROJ_ELEMENT_ID
12960                            ,CREATION_DATE
12961                            ,CREATED_BY
12962                            ,LAST_UPDATE_DATE
12963                            ,LAST_UPDATED_BY
12964                            ,SCHEDULED_START_DATE
12965                            ,SCHEDULED_FINISH_DATE
12966                            ,OBLIGATION_START_DATE
12967                            ,OBLIGATION_FINISH_DATE
12968                            ,ACTUAL_START_DATE
12969                            ,ACTUAL_FINISH_DATE
12970                            ,ESTIMATED_START_DATE
12971                            ,ESTIMATED_FINISH_DATE
12972                            ,DURATION
12973                            ,EARLY_START_DATE
12974                            ,EARLY_FINISH_DATE
12975                            ,LATE_START_DATE
12976                            ,LATE_FINISH_DATE
12977                            ,CALENDAR_ID
12978                            ,MILESTONE_FLAG
12979                            ,CRITICAL_FLAG
12980                            ,RECORD_VERSION_NUMBER
12981                            ,LAST_UPDATE_LOGIN
12982                            ,WQ_PLANNED_QUANTITY
12983                            ,PLANNED_EFFORT
12984                            ,ACTUAL_DURATION
12985                            ,ESTIMATED_DURATION
12986                            ,ATTRIBUTE_CATEGORY
12987                            ,ATTRIBUTE1
12988                            ,ATTRIBUTE2
12989                            ,ATTRIBUTE3
12990                            ,ATTRIBUTE4
12991                            ,ATTRIBUTE5
12992                            ,ATTRIBUTE6
12993                            ,ATTRIBUTE7
12994                            ,ATTRIBUTE8
12995                            ,ATTRIBUTE9
12996                            ,ATTRIBUTE10
12997                            ,ATTRIBUTE11
12998                            ,ATTRIBUTE12
12999                            ,ATTRIBUTE13
13000                            ,ATTRIBUTE14
13001                            ,ATTRIBUTE15
13002                            ,source_object_id
13003                            ,source_object_type
13004                            ,DEF_SCH_TOOL_TSK_TYPE_CODE            --Bug 9378153
13005                            ,CONSTRAINT_TYPE_CODE                  --Bug 3762437
13006                            ,CONSTRAINT_DATE
13007                            ,FREE_SLACK
13008                            ,TOTAL_SLACK
13009                            ,EFFORT_DRIVEN_FLAG
13010                            ,LEVEL_ASSIGNMENTS_FLAG
13011                            ,EXT_ACT_DURATION
13012                            ,EXT_REMAIN_DURATION
13013                            ,EXT_SCH_DURATION                       --Bug 3762437
13014                               )
13015                         SELECT
13016                             pa_proj_elem_ver_schedule_s.nextval
13017                            ,ppev1.ELEMENT_VERSION_ID
13018                            ,p_dest_PROJECT_ID
13019                            ,ppev1.PROJ_ELEMENT_ID
13020                            ,SYSDATE
13021                            ,l_user_id
13022                            ,SYSDATE
13023                            ,l_user_id
13024                            ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date,  --fix bug 2831973
13025                                                                        p_target_finish_date,
13026                                                                        l_delta,
13027                                                                        ppevs.SCHEDULED_START_DATE,
13028                                                                        null )                --sch start date
13029                            ,PA_PROJ_TASK_STRUC_PUB.get_adjusted_dates( p_target_start_date,  --fix bug 2831973
13030                                                                        p_target_finish_date,
13031                                                                        l_delta,
13032                                                                        ppevs.SCHEDULED_START_DATE,
13033                                                                        SCHEDULED_FINISH_DATE ) --sch end date
13034                            ,ppevs.OBLIGATION_START_DATE
13035                            ,ppevs.OBLIGATION_FINISH_DATE
13036                            ,null                       --ppevs.ACTUAL_START_DATE   bug 2827090
13037                            ,null                       --ppevs.ACTUAL_FINISH_DATE
13038                            ,null                       --ppevs.ESTIMATED_START_DATE
13039                            ,null                       --ppevs.ESTIMATED_FINISH_DATE
13040                            ,ppevs.DURATION
13041                            ,ppevs.EARLY_START_DATE
13042                            ,ppevs.EARLY_FINISH_DATE
13043                            ,ppevs.LATE_START_DATE
13044                            ,ppevs.LATE_FINISH_DATE
13045                            ,p_calendar_id              --,ppevs.CALENDAR_ID  Bug # 2955589. Use the calendar id passed to
13046                                                        --this API.
13047                            ,ppevs.MILESTONE_FLAG
13048                            ,ppevs.CRITICAL_FLAG
13049                            ,ppevs.RECORD_VERSION_NUMBER
13050                            ,l_login_id
13051                            ,ppevs.WQ_PLANNED_QUANTITY
13052                            ,ppevs.PLANNED_EFFORT
13053                            ,ppevs.ACTUAL_DURATION
13054                            ,ppevs.ESTIMATED_DURATION
13055                            ,ppevs.ATTRIBUTE_CATEGORY
13056                            ,ppevs.ATTRIBUTE1
13057                            ,ppevs.ATTRIBUTE2
13058                            ,ppevs.ATTRIBUTE3
13059                            ,ppevs.ATTRIBUTE4
13060                            ,ppevs.ATTRIBUTE5
13061                            ,ppevs.ATTRIBUTE6
13062                            ,ppevs.ATTRIBUTE7
13063                            ,ppevs.ATTRIBUTE8
13064                            ,ppevs.ATTRIBUTE9
13065                            ,ppevs.ATTRIBUTE10
13066                            ,ppevs.ATTRIBUTE11
13067                            ,ppevs.ATTRIBUTE12
13068                            ,ppevs.ATTRIBUTE13
13069                            ,ppevs.ATTRIBUTE14
13070                            ,ppevs.ATTRIBUTE15
13071                            ,p_dest_PROJECT_ID
13072                            ,'PA_PROJECTS'
13073                            ,ppevs.DEF_SCH_TOOL_TSK_TYPE_CODE            --Bug 9378153
13074                            ,CONSTRAINT_TYPE_CODE          --Bug 3762437
13075                            ,CONSTRAINT_DATE
13076                            ,FREE_SLACK
13077                            ,TOTAL_SLACK
13078                            ,EFFORT_DRIVEN_FLAG
13079                            ,LEVEL_ASSIGNMENTS_FLAG
13080                            ,EXT_ACT_DURATION
13081                            ,EXT_REMAIN_DURATION
13082                            ,EXT_SCH_DURATION              --Bug 3762437
13083                          FROM pa_proj_elem_ver_schedule ppevs,
13084                               pa_proj_element_versions ppev1,
13085                               pa_proj_element_versions ppev2
13086                            where ppev1.attribute15 = ppevs.element_version_id
13087                             and  ppevs.project_id = p_src_project_id
13088                             and  ppev2.project_id = p_src_project_id
13089                             and  ppev2.parent_structure_version_id = l_dest_str_versions_tbl(k).src_str_version_id
13090                             and  ppev2.element_version_id = ppevs.element_version_id
13091                             and  ppev1.attribute15 = ppev2.element_version_id
13092                             and ppev1.object_type = 'PA_STRUCTURES'
13093                             and ppev2.object_type = 'PA_STRUCTURES'
13094                             and  ppev1.project_id = p_dest_project_id;
13095 
13096 
13097            END IF;  --l_dest_str_versions_tbl(k).copy_flag = 'Y'
13098        END LOOP;
13099     END IF;  --IF NVL( l_workplan_enabled, 'N' ) = 'N'
13100 
13101                 IF l_workplan_enabled = 'Y'
13102                 THEN
13103                     --updating duration
13104                     -- Bug 3657808 Remove duration calculation using calendar
13105                     -- and rewritting the query
13106                     /*UPDATE pa_proj_elem_ver_schedule
13107                        SET duration = PA_PROJ_TASK_STRUC_PUB.calc_duration( p_calendar_id,
13108                                                                             scheduled_start_date,
13109                                                                             scheduled_finish_date )
13110                      WHERE project_id = p_dest_project_id;*/
13111                     UPDATE pa_proj_elem_ver_schedule
13112                        SET duration = trunc(scheduled_finish_date) - trunc(scheduled_start_date) + 1
13113                      WHERE project_id = p_dest_project_id;
13114                 END IF;
13115 
13116                     ---updating baselined dates
13117                     UPDATE PA_PROJ_ELEMENTS ppe
13118                        SET ( BASELINE_START_DATE ,BASELINE_FINISH_DATE,
13119                              BASELINE_DURATION ) =
13120                                ( Select ppevs.scheduled_start_date, ppevs.scheduled_finish_date,
13121                                         ppevs.duration
13122                                    from pa_proj_elem_ver_schedule ppevs,
13123                                         pa_proj_elem_ver_structure ppevst
13124                                   WHERE ppevs.project_id           = p_dest_project_id
13125                                     and ppevst.project_id          = p_dest_project_id
13126                                     and ppevst.current_flag        = 'Y'             --assuming this is the flag used to identify the baselined structure ver.
13127                                     and ppevst.STATUS_CODE         = 'STRUCTURE_PUBLISHED'
13128                                     and ppevs.element_version_id = ppevst.element_version_id
13129                                 )
13130                     WHERE project_id = p_dest_project_id;
13131 --                      and object_type = 'PA_STRUCTURES'
13132 --                      and EXISTS ( SELECT proj_element_id FROM pa_proj_structure_types
13133 --                                WHERE proj_element_id = ppe.proj_element_id
13134 --                                  AND structure_type_id = 1 );
13135 
13136                     --updating projects dates
13137                     update pa_projects_all
13138                        set ( BASELINE_START_DATE ,BASELINE_FINISH_DATE,  baseline_duration, baseline_as_of_date) =
13139                           ( SELECT BASELINE_START_DATE ,BASELINE_FINISH_DATE,  baseline_duration,
13140                                          decode(BASELINE_START_DATE, null, null, sysdate)
13141                             FROM pa_proj_elements ppe, pa_proj_structure_types ppst
13142                             WHERE project_id = p_dest_project_id
13143                               and object_type = 'PA_STRUCTURES'
13144                               and ppe.proj_element_id = ppst.proj_element_id
13145                               and ppst.structure_type_id = 1 )
13146                      where project_id = p_dest_project_id;
13147 
13148                      IF l_latest_pub_str_ver_id IS NOT NULL
13149                      THEN
13150                       update pa_projects_all
13151                        set ( scheduled_START_DATE ,scheduled_FINISH_DATE,  scheduled_duration, scheduled_as_of_date ) =
13152                           ( SELECT SCHEDULED_START_DATE ,SCHEDULED_FINISH_DATE,duration,
13153                                    decode(SCHEDULED_START_DATE, null, null, sysdate)
13154                             FROM pa_proj_elem_ver_schedule
13155                             WHERE project_id = p_dest_project_Id
13156                               and element_version_id = l_latest_pub_str_ver_id)
13157                        where project_id = p_dest_project_id;
13158                      END IF;
13159 
13160 
13161   --bug 2831775
13162   --need to sync up transaction dates if auto sync is on
13163   If l_shared = 'Y' and l_workplan_enabled = 'Y' THEN
13164     OPEN get_shared_struc_id;
13165     FETCH get_shared_struc_id into l_structure_id;
13166     CLOSE get_shared_struc_id;
13167 
13168     If (PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_DATE_SYNC_ENABLED(l_structure_id) = 'Y') AND (PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_PUB_AT_CREATION(p_src_project_id) = 'Y')THEN
13169 
13170        --Copy to transaction date
13171        PA_PROJECT_DATES_PUB.COPY_PROJECT_DATES(
13172          p_project_id => p_dest_project_id,
13173          x_return_status => l_return_status,
13174          x_msg_count => l_msg_count,
13175          x_msg_data => l_msg_data
13176        );
13177 
13178        if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
13179          x_msg_count := FND_MSG_PUB.count_msg;
13180          if x_msg_count = 1 then
13181            x_msg_data := l_msg_data;
13182          end if;
13183          raise FND_API.G_EXC_ERROR;
13184        end if;
13185 
13186     END IF;
13187   END IF;
13188   --end bug 2831775
13189 ------------------------------------------------------------------------------
13190   -- Changes added by skannoji
13191   -- Added code for doosan customer
13192   Declare
13193     /* Bug #: 3305199 SMukka                                                         */
13194     /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
13195     /* src_versions_tab   PA_PLSQL_DATATYPES.IdTabTyp;                               */
13196     /* dest_versions_tab  PA_PLSQL_DATATYPES.IdTabTyp;                               */
13197     src_versions_tab   SYSTEM.pa_num_tbl_type;
13198     dest_versions_tab  SYSTEM.pa_num_tbl_type;
13199   Begin
13200     Select Element_Version_ID, attribute15 BULK COLLECT
13201     INTO   dest_versions_tab, src_Versions_Tab
13202     From   PA_Proj_Element_Versions
13203     Where  Project_ID = p_dest_project_id
13204     AND ( PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(element_version_id, 'WORKPLAN') = 'Y')
13205     AND object_type = 'PA_STRUCTURES';
13206 
13207     -- Copies budget versions, resource assignments and budget lines as required for the workplan version.
13208     /*Smukka Bug No. 3474141 Date 03/01/2004                                    */
13209     /*moved PA_FP_COPY_FROM_PKG.copy_wp_budget_versions into plsql block        */
13210     BEGIN
13211         PA_FP_COPY_FROM_PKG.copy_wp_budget_versions
13212         (
13213           p_source_project_id            => p_src_project_id
13214          ,p_target_project_id            => p_dest_project_id
13215          ,p_src_sv_ids_tbl               => src_Versions_Tab  -- Workplan version id tbl
13216          ,p_target_sv_ids_tbl            => dest_Versions_Tab -- Workplan version id tbl
13217          ,p_copy_mode                    => null -- Bug 4277801
13218          ,x_return_status                => x_return_status
13219          ,x_msg_count                    => x_msg_count
13220          ,x_Msg_data                     => x_msg_data
13221         );
13222     EXCEPTION
13223         WHEN OTHERS THEN
13224              fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
13225                                      p_procedure_name => 'copy_structures_bulk',
13226                                      p_error_text     => SUBSTRB('PA_FP_COPY_FROM_PKG.copy_wp_budget_versions:'||SQLERRM,1,240));
13227         RAISE FND_API.G_EXC_ERROR;
13228     END;
13229     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13230        RAISE FND_API.G_EXC_ERROR;
13231     END IF;
13232   End;
13233    -- till here by skannoji
13234 ------------------------------------------------------------------------------
13235 
13236   update pa_proj_elements ppe1
13237      set attribute15 = ( select attribute15 from pa_proj_elements ppe2
13238                           where ppe2.project_id = p_src_project_id
13239                             and ppe2.proj_element_id = ppe1.attribute15 )
13240    where project_id = p_dest_project_id
13241    ;
13242 
13243   update pa_proj_element_versions ppevs1
13244      set attribute15 = ( select attribute15 from pa_proj_element_versions ppevs2
13245                           where ppevs2.project_id = p_src_project_id
13246                             and ppevs2.element_version_id = ppevs1.attribute15 )
13247    where project_id = p_dest_project_id
13248    ;
13249 
13250 /* Not required to call the concurrent program bcoz it will
13251    be called from AMG upon project creation. Otherwise it will
13252    be redundant code
13253   --bug 3035902 maansari
13254    DECLARE
13255 
13256        CURSOR cur_strs_n_types
13257        IS
13258          SELECT ppe.proj_element_id, ppst.structure_type_id
13259            FROM pa_proj_elements ppe, pa_proj_structure_types ppst
13260           WHERE ppe.project_id = p_dest_project_id
13261             AND ppe.object_type = 'PA_STRUCTURES'
13262             AND ppe.proj_element_id = ppst.proj_element_id
13263           ;
13264 
13265        CURSOR cur_str_vers( c_structure_id NUMBER )
13266        IS
13267          SELECT ppevs.element_version_id
13268            FROM pa_proj_element_versions ppevs
13269           WHERE ppevs.project_id = p_dest_project_id
13270             AND ppevs.object_type = 'PA_STRUCTURES'
13271             AND ppevs.proj_element_id = c_structure_id
13272           ;
13273 
13274        l_fn_str_id          NUMBER;
13275        l_wp_str_id          NUMBER;
13276        l_fn_str_ver_id      NUMBER;
13277        l_wp_str_ver_id      NUMBER;
13278        l_task_weight_basis  PA_PROJ_PROGRESS_ATTR.task_weight_basis_code%TYPE;
13279    BEGIN
13280        l_task_weight_basis := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS( p_dest_project_id );
13281        IF NVL( l_task_weight_basis, 'X' ) = 'DURATION'
13282        THEN
13283            FOR cur_strs_n_types_rec in cur_strs_n_types LOOP
13284               IF cur_strs_n_types_rec.structure_type_id = 1  --'WORKPLAN' structure
13285               THEN
13286                   l_wp_str_id  := cur_strs_n_types_rec.proj_element_id;
13287                   UPDATE pa_proj_elem_ver_structure
13288                      SET PROCESS_UPDATE_WBS_FLAG = 'Y'
13289                    WHERE proj_element_id = cur_strs_n_types_rec.proj_element_id
13290                      AND project_id = p_dest_project_id
13291                      AND PROCESS_UPDATE_WBS_FLAG = 'N'
13292                     ;
13293               ELSE
13294                   l_fn_str_id := cur_strs_n_types_rec.proj_element_id;
13295               END IF;
13296            END LOOP;
13297        END IF;
13298 
13299        IF l_shared = 'Y' AND NVL( l_task_weight_basis, 'X' ) = 'DURATION'
13300        THEN
13301            OPEN cur_str_vers( l_wp_str_id );
13302            FETCH cur_str_vers INTO l_wp_str_ver_id;
13303            CLOSE cur_str_vers;
13304 
13305            PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
13306                 (
13307               p_calling_context       => 'COPY_PROJECT'
13308              ,p_project_id            => p_dest_project_id
13309              ,p_structure_version_id  => l_wp_str_ver_id
13310              ,x_return_status         => l_return_status
13311              ,x_msg_count             => l_msg_count
13312              ,x_msg_data              => l_msg_data);
13313 
13314            if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
13315                x_msg_count := FND_MSG_PUB.count_msg;
13316                if x_msg_count = 1 then
13317                   x_msg_data := l_msg_data;
13318                end if;
13319                raise FND_API.G_EXC_ERROR;
13320            end if;
13321 
13322        ELSIF l_shared = 'N' AND NVL( l_task_weight_basis, 'X' ) = 'DURATION'   --Split then call the api twice.
13323        THEN
13324            OPEN cur_str_vers( l_wp_str_id );
13325            FETCH cur_str_vers INTO l_wp_str_ver_id;
13326            CLOSE cur_str_vers;
13327 
13328            PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
13329                 (
13330               p_calling_context       => 'COPY_PROJECT'
13331              ,p_project_id            => p_dest_project_id
13332              ,p_structure_version_id  => l_wp_str_ver_id
13333              ,x_return_status         => l_return_status
13334              ,x_msg_count             => l_msg_count
13335              ,x_msg_data              => l_msg_data);
13336 
13337            if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
13338                x_msg_count := FND_MSG_PUB.count_msg;
13339                if x_msg_count = 1 then
13340                   x_msg_data := l_msg_data;
13341                end if;
13342                raise FND_API.G_EXC_ERROR;
13343            end if;
13344 
13345 
13346            OPEN cur_str_vers( l_fn_str_id );
13347            FETCH cur_str_vers INTO l_fn_str_ver_id;
13348            CLOSE cur_str_vers;
13349 
13350            PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
13351                 (
13352               p_calling_context       => 'COPY_PROJECT'
13353              ,p_project_id            => p_dest_project_id
13354              ,p_structure_version_id  => l_fn_str_ver_id
13355              ,x_return_status         => l_return_status
13356              ,x_msg_count             => l_msg_count
13357              ,x_msg_data              => l_msg_data);
13358 
13359            if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
13360                x_msg_count := FND_MSG_PUB.count_msg;
13361                if x_msg_count = 1 then
13362                   x_msg_data := l_msg_data;
13363                end if;
13364                raise FND_API.G_EXC_ERROR;
13365            end if;
13366 
13367        END IF;
13368    END;
13369   --End 3035902 maansari
13370 */
13371 
13372 
13373   x_return_status := FND_API.G_RET_STS_SUCCESS;
13374 
13375 
13376   IF (p_debug_mode = 'Y') THEN
13377     pa_debug.debug('PA_PROJ_TASK_STRUC_PUB.copy_structures_bulk END');
13378   END IF;
13379 
13380 EXCEPTION
13381   when FND_API.G_EXC_ERROR then
13382     if p_commit = FND_API.G_TRUE then
13383       rollback to copy_structure_bulk_pvt;
13384     end if;
13385     x_return_status := FND_API.G_RET_STS_ERROR;
13386   when FND_API.G_EXC_UNEXPECTED_ERROR then
13387     if p_commit = FND_API.G_TRUE then
13388       rollback to copy_structure_bulk_pvt;
13389     end if;
13390     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13391     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
13392                             p_procedure_name => 'copy_structures_bulk',
13393                             p_error_text     => SUBSTRB(SQLERRM,1,240));
13394   when OTHERS then
13395     if p_commit = FND_API.G_TRUE then
13396       rollback to copy_structure_bulk_pvt;
13397     end if;
13398     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13399     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
13400                             p_procedure_name => 'copy_structures_bulk',
13401                             p_error_text     => SUBSTRB(SQLERRM,1,240));
13402     raise;
13403 END copy_structures_bulk;
13404 
13405 FUNCTION calc_duration( p_calendar_id NUMBER, p_start_date DATE, p_finish_date DATE ) RETURN NUMBER IS
13406     l_return_duration  NUMBER;
13407     l_duration_days    NUMBER;
13408     l_msg_count                    NUMBER;
13409     l_msg_data                     VARCHAR2(250);
13410     l_return_status                VARCHAR2(2);
13411 BEGIN
13412 
13413     pa_duration_utils.get_duration(p_calendar_id   => p_calendar_id ,
13414                                    p_start_date    => p_start_date,
13415                                    p_end_date      => p_finish_date,
13416                                    x_duration_days => l_duration_days,
13417                                    x_duration_hours => l_return_duration ,
13418                                    x_return_status  => l_return_status,
13419                                    x_msg_count      => l_msg_count,
13420                                    x_msg_data       => l_msg_data);
13421     return l_return_duration;
13422 
13423 END calc_duration;
13424 
13425 PROCEDURE get_version_ids(
13426  p_task_id            NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13427 ,p_task_version_id   NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13428 ,p_project_id        NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13429 ,x_structure_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13430 ,x_task_version_id      OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13431 )  IS
13432    CURSOR cur_str_ver_id1
13433    IS
13434      SELECT parent_structure_version_id
13435        FROM pa_proj_element_versions
13436       WHERE element_version_id = p_task_version_id;
13437 
13438    CURSOR cur_str_ver_id2
13439    IS
13440      SELECT element_version_id, parent_structure_version_id
13441        FROM pa_proj_element_versions
13442       WHERE proj_element_id = p_task_id
13443         AND project_id = p_project_id
13444       ;
13445 
13446 BEGIN
13447 
13448         IF p_task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_task_version_id IS NOT NULL
13449         THEN
13450             OPEN cur_str_ver_id1;
13451             FETCH cur_str_ver_id1 INTO x_structure_version_id;
13452             CLOSE cur_str_ver_id1;
13453             x_task_version_id := p_task_version_id;
13454         ELSIF ( p_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_task_version_id IS NULL ) AND
13455              ( p_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_task_id IS NOT NULL )
13456         THEN
13457             OPEN cur_str_ver_id2;
13458             FETCH cur_str_ver_id2 INTO x_task_version_id, x_structure_version_id;
13459             CLOSE cur_str_ver_id2;
13460         END IF;
13461 
13462 END get_version_ids;
13463 
13464 
13465 PROCEDURE get_task_version_id(
13466  p_project_id        NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13467 ,p_structure_version_id   NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13468 ,p_task_id            NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13469 ,x_task_version_id      OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13470 )  IS
13471 
13472    CURSOR cur_task_ver_id
13473    IS
13474      SELECT element_version_id
13475        FROM pa_proj_element_versions
13476       WHERE proj_element_id = p_task_id
13477         AND parent_structure_version_id = p_structure_version_id
13478         AND project_id = p_project_id;
13479 
13480 BEGIN
13481         IF p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_structure_version_id IS NOT NULL AND
13482            p_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_task_id IS NOT NULL AND
13483            p_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_project_id IS NOT NULL
13484         THEN
13485             OPEN cur_task_ver_id;
13486             FETCH cur_task_ver_id INTO x_task_version_id;
13487             CLOSE cur_task_ver_id;
13488         END IF;
13489 END get_task_version_id;
13490 
13491 
13492 PROCEDURE rollup_dates(
13493    p_tasks_in             IN pa_project_pub.task_out_tbl_type
13494   ,p_task_version_id      IN NUMBER  := null
13495   ,p_structure_version_id IN NUMBER
13496   ,p_project_id           IN NUMBER
13497   ,x_msg_count            OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13498   ,x_msg_data             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13499   ,x_return_status        OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
13500 
13501   i                    NUMBER;
13502 
13503   l_tasks_ver_ids      PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
13504   l_task_version_id    NUMBER;
13505 
13506   l_msg_count          NUMBER;
13507   l_return_status      VARCHAR2(1);
13508   l_msg_data           VARCHAR2(2000);
13509   l_data               VARCHAR2(2000);
13510   l_msg_index_out      NUMBER;
13511   API_ERROR            EXCEPTION;
13512   j                    NUMBER;
13513 
13514 BEGIN
13515 
13516  IF p_task_version_id IS NULL
13517  THEN
13518      i := p_tasks_in.first;
13519      j := 1;
13520      IF p_tasks_in.exists(i)
13521      THEN
13522          WHILE i IS NOT NULL LOOP
13523              IF p_tasks_in(i).task_version_id IS NOT NULL AND
13524                 p_tasks_in(i).task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13525              THEN
13526                  --l_tasks_ver_ids.extend;
13527                  l_tasks_ver_ids(j) := p_tasks_in(i).task_version_id;
13528 
13529              ELSIF ( p_tasks_in(i).pa_task_id IS NOT NULL AND p_tasks_in(i).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) AND
13530                    ( p_tasks_in(i).task_version_id IS NULL OR p_tasks_in(i).task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) AND p_structure_version_id IS NOT NULL
13531              THEN
13532                  --PA_PROJECT_PUB.update_project does not populate task versions for the tasks being updated.
13533                  --in this case we have to pick this from databse.
13534                  get_task_version_id(
13535                        p_project_id                  => p_project_id
13536                       ,p_task_id                     => p_tasks_in(i).pa_task_id
13537                       ,p_structure_version_id        => p_structure_version_id
13538                       ,x_task_version_id                => l_task_version_id
13539                      );
13540 
13541                  --l_tasks_ver_ids.extend;
13542                  l_tasks_ver_ids(j) := l_task_version_id;
13543 
13544              END IF;
13545             i := p_tasks_in.next(i);
13546             j := j + 1;
13547          END LOOP;
13548      END IF;
13549      --To avoid no_data_found when this array is read in PA_TASK_PUB1.Cal_Task_weights
13550      --l_tasks_ver_ids.extend;
13551      --l_tasks_ver_ids(l_tasks_ver_ids.count) := null;
13552  ELSE
13553      l_tasks_ver_ids(1) := p_task_version_id;
13554  END IF;
13555 
13556      PA_STRUCT_TASK_ROLLUP_PUB.TASKS_ROLLUP_UNLIMITED(
13557                    p_calling_module        => 'AMG'
13558                   ,p_element_versions      => l_tasks_ver_ids
13559                   ,x_return_status         => l_return_status
13560                   ,x_msg_count             => l_msg_count
13561                   ,x_msg_data              => l_msg_data);
13562 
13563          if l_return_status <> FND_API.G_RET_STS_SUCCESS then
13564             x_msg_count := FND_MSG_PUB.count_msg;
13565             x_return_status := l_return_status ;        -- Bug 3044915
13566             if x_msg_count = 1 then
13567                pa_interface_utils_pub.get_messages
13568                     (p_encoded        => FND_API.G_TRUE,
13569                      p_msg_index      => 1,
13570                      p_msg_count      => l_msg_count,
13571                      p_msg_data       => l_msg_data,
13572                      p_data           => l_data,
13573                      p_msg_index_out  => l_msg_index_out);
13574               x_msg_data := l_data;
13575             end if;
13576              raise API_ERROR;
13577          end if;
13578          x_return_status :=  FND_API.G_RET_STS_SUCCESS;    -- Bug3044915
13579 
13580 -- Start Changes for Bug 6633233
13581 EXCEPTION
13582   WHEN API_ERROR THEN
13583     x_return_status := FND_API.G_RET_STS_ERROR;
13584 
13585   WHEN OTHERS THEN
13586     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13587     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
13588  	                          p_procedure_name => 'ROLLUP_DATES',
13589  	                          p_error_text     => SUBSTRB(SQLERRM,1,240));
13590     raise;
13591 -- End Changes for Bug 6633233
13592 
13593 END rollup_dates;
13594 
13595 /*==================================================================
13596    This API is called from pa_project_pub.create_project and does the
13597    processing to create the structure information for the tasks.
13598    Included the api for Post FP K one off. Bug 2931183
13599    This API is called from pa_project_pub.update_project which passes
13600    the structure version id through p_structure_version_id parameter.
13601    The complete WBS is passed to this API in p_tasks_in_tbl. Depending
13602    on whether the task is an existing task or a new task, task creation
13603    or task updation is performed.
13604  ==================================================================*/
13605 
13606 PROCEDURE PROCESS_TASK_STRUCTURE_BULK
13607    (  p_api_version_number              IN        NUMBER
13608      ,p_commit                          IN        VARCHAR2
13609      ,p_init_msg_list                   IN        VARCHAR2
13610      ,p_calling_module                  IN        VARCHAR2
13611      ,p_project_id                      IN        pa_projects_all.project_id%TYPE
13612      ,p_source_project_id               IN        pa_projects_all.project_id%TYPE
13613      ,p_pm_product_code                 IN        pa_projects_all.pm_product_code%TYPE
13614      ,p_structure_type                  IN        pa_structure_types.structure_type_class_code%TYPE
13615      ,p_tasks_in_tbl                    IN        pa_project_pub.task_in_tbl_type
13616      ,p_create_task_version_only        IN        VARCHAR2
13617      ,p_wp_str_exists                   IN        VARCHAR2
13618      ,p_is_wp_separate_from_fn          IN        VARCHAR2
13619      ,p_is_wp_versioning_enabled        IN        VARCHAR2
13620      ,p_structure_version_id            IN        pa_proj_elem_ver_structure.element_version_id%TYPE --IUP: Populated only in case of Update_project context
13621      -- Included NOCOPY for the following parameter.
13622      -- PA L Changes 3010538
13623      ,p_process_mode                    IN        VARCHAR2
13624      -- Bug 3075609. To identify create task version only context.
13625      ,p_create_task_versions_only       IN        VARCHAR2
13626      ,px_tasks_out_tbl                  IN OUT NOCOPY   pa_project_pub.task_out_tbl_type
13627      ,x_return_status                   OUT       NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13628      ,x_msg_count                       OUT       NOCOPY NUMBER --File.Sql.39 bug 4440895
13629      ,x_msg_data                        OUT       NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
13630 AS
13631 
13632 -- Cursors Definition
13633 
13634 -- This cursor is used to get the auto publish flag on creation for a given project_id
13635 /* Bug 2955589. This cursor is no longer used.
13636 CURSOR cur_auto_pub_flag(c_project_id pa_projects_all.project_id%TYPE)
13637   IS
13638   SELECT AUTO_PUB_UPON_CREATION_FLAG
13639     FROM pa_proj_workplan_attr
13640    WHERE project_id = c_project_id;
13641 */
13642 -- This cursor is used to get the structure id given the structure type and project_id
13643 CURSOR get_structure(c_project_id pa_projects_all.project_id%TYPE, c_struc_type pa_structure_types.structure_type_class_code%TYPE) IS
13644     select pelem.proj_element_id
13645       from pa_proj_elements pelem,
13646            pa_proj_structure_types ppstr,
13647            pa_structure_types pstr
13648      where pelem.project_id = c_project_id
13649        and pstr.structure_type_class_code = c_struc_type
13650        and pstr.structure_type_id = ppstr.structure_type_id
13651        and ppstr.proj_element_id = pelem.proj_element_id;
13652 
13653 -- This cursor is used to get the project number given the project_id
13654 CURSOR   l_amg_project_csr(c_project_id pa_projects.project_id%type)
13655    IS
13656    SELECT   segment1
13657    FROM     pa_projects p
13658    WHERE    p.project_id = c_project_id;
13659 
13660 --The following cursor will be used when the structure type is
13661 --Financial as some of the attributes have been derived and updated
13662 --in the pa_tasks table and we need to use them for structures processing.
13663 CURSOR cur_pa_tasks(c_project_id pa_projects_all.project_id%TYPE,c_task_id pa_tasks.task_id%TYPE)
13664    IS
13665    SELECT task_number, long_task_name, description,
13666           parent_task_id,carrying_out_organization_id,
13667           pm_task_reference, address_id, task_manager_person_id
13668      FROM pa_tasks
13669     WHERE project_id = c_project_id
13670       AND task_id = c_task_id;
13671 
13672 l_cur_pa_tasks_rec cur_pa_tasks%ROWTYPE; -- userd only for create task case
13673 
13674 --ADUT. This cursor is required to identify if the source is a project / template.
13675 Cursor cur_template_flag(c_proj_id pa_projects_all.project_id%TYPE)
13676    Is
13677    select NVL(template_flag,'N')
13678    from pa_projects
13679    where project_id = c_proj_id;
13680 
13681 -- IUP: Cursors added for changes done to this api so it can be called from update_project
13682 --Cursor to get the record version number of the task record which needs to be updated in pa_proj_elements table
13683 CURSOR cur_rec_ver_num(c_task_id pa_tasks.task_id%TYPE)
13684     IS
13685     SELECT record_version_number
13686     FROM pa_proj_elements
13687     WHERE proj_element_id = c_task_id
13688     AND object_type = 'PA_TASKS';
13689 
13690 --Cursor to get the task version id when task id and structure version id is known
13691 CURSOR cur_pa_task_ver( c_structure_version_id pa_proj_element_versions.parent_structure_version_id%TYPE, c_task_id pa_tasks.task_id%TYPE )
13692     IS
13693     SELECT element_version_id, record_version_number
13694     FROM pa_proj_element_versions
13695     WHERE project_id = p_project_id
13696     AND proj_element_id = c_task_id
13697     AND parent_structure_version_id = c_structure_version_id
13698     AND object_type = 'PA_TASKS';
13699 
13700 --Cursor to get the parent version id of the task version id
13701 CURSOR cur_parent_object_rel( c_task_version_id pa_proj_elem_ver_schedule.element_version_id%TYPE )
13702     IS
13703     SELECT object_id_from1   -- parent task id
13704           ,object_relationship_id,  -- relationship id reqd for update relationship API
13705            record_version_number,
13706            weighting_percentage     -- Bug 3075609. We need to get hold of the weightage of the task in db.
13707     FROM pa_object_relationships
13708     WHERE object_id_to1 = c_task_version_id
13709     AND relationship_type = 'S';
13710 
13711  -- Added for DFF attributes for calling update_schedule_version
13712 CURSOR cur_ver_sch_attr_rec(c_element_version_id IN pa_proj_elem_ver_schedule.element_version_id%TYPE)
13713     IS
13714     SELECT *
13715     FROM pa_proj_elem_ver_schedule
13716     WHERE element_version_id = c_element_version_id
13717     AND project_id = p_project_id;
13718 
13719 l_ver_sch_attr_rec              cur_ver_sch_attr_rec%ROWTYPE;
13720 
13721 --Cursor to get the task type associated with the task id
13722 CURSOR cur_task_type_id(c_task_id pa_tasks.task_id%TYPE)
13723     IS
13724     SELECT type_id
13725     FROM pa_proj_elements
13726     WHERE proj_element_id = c_task_id
13727     AND project_id = p_project_id;
13728 
13729 --Cursor to get the task id if task element version id is known
13730 CURSOR cur_elem_ver_to_task_id( c_task_version_id pa_proj_element_versions.element_version_id%TYPE )
13731     IS
13732       SELECT proj_element_id
13733         FROM pa_proj_element_versions
13734        WHERE project_id = p_project_id
13735          AND element_version_id = c_task_version_id;
13736 
13737 
13738 --Cursor added for bug 3057575 :
13739 --Cursor to get all the task ver id for a particular Structure version
13740 CURSOR   cur_all_task_ver_id( c_structure_version_id pa_proj_element_versions.parent_structure_version_id%TYPE )
13741    IS
13742    Select element_version_id
13743    from pa_proj_element_versions
13744    where parent_structure_version_id = c_structure_version_id
13745    and object_type = 'PA_TASKS'
13746     -- rbruno added for bug 9484327 to get task which are not marked for deletion - start
13747     and task_unpub_ver_status_code <> 'TO_BE_DELETED';
13748     -- rbruno added for bug 9484327 - end
13749 
13750 
13751 --Cursor added for bug 3057575 :
13752 --Cursor to get the task number from task ver id
13753 CURSOR cur_ver_id_to_task_num( c_task_version_id pa_proj_element_versions.element_version_id%TYPE )
13754     IS
13755     SELECT p1.element_number
13756     FROM pa_proj_elements p1, pa_proj_element_versions pv1
13757     WHERE pv1.element_version_id = c_task_version_id
13758     AND p1.proj_element_id = pv1.proj_element_id;
13759 
13760 -- End Cursors Definition
13761 
13762 -- Definition for the table types used in this API
13763 TYPE display_sequence_tbl IS TABLE OF pa_proj_element_versions.display_sequence%TYPE
13764         INDEX BY BINARY_INTEGER;
13765 TYPE wbs_level_tbl IS TABLE OF pa_proj_element_versions.wbs_level%TYPE
13766         INDEX BY BINARY_INTEGER;
13767 TYPE wbs_number_tbl IS TABLE OF pa_proj_element_versions.wbs_number%TYPE
13768         INDEX BY BINARY_INTEGER;
13769 TYPE child_count_tbl IS TABLE OF NUMBER
13770         INDEX BY BINARY_INTEGER;
13771 TYPE weighting_percentage_tbl IS TABLE OF pa_object_relationships.weighting_percentage%TYPE
13772         INDEX BY BINARY_INTEGER;
13773 TYPE task_version_id_tbl IS TABLE OF pa_proj_element_versions.element_version_id%TYPE
13774         INDEX BY BINARY_INTEGER;
13775 
13776 ----Table Type added for bug 3057575 :
13777 TYPE task_parent_id_tbl_type IS TABLE OF pa_tasks.task_id%TYPE
13778         INDEX BY BINARY_INTEGER;
13779 ----Table Type added for bug 3057575 :
13780 TYPE task_ver_id_passed_tbl_type IS TABLE OF pa_proj_element_versions.element_version_id%TYPE
13781         INDEX BY BINARY_INTEGER;
13782 
13783 -- End of Definition for the table types
13784 
13785 -- Header level variables common to all tasks required for update/create task/project cases.
13786 l_structure_id                  pa_proj_elements.proj_element_id%TYPE;
13787 l_structure_version_id          pa_proj_element_versions.element_version_id%TYPE;
13788 l_task_unpub_ver_status_code    pa_proj_element_versions.task_unpub_ver_status_code%TYPE;
13789 l_add_task_security             VARCHAR2(1);
13790 l_default_task_type_id          pa_proj_elements.type_id%TYPE;
13791 l_update_task_security          VARCHAR2(1);
13792 l_str_status_code               pa_proj_elem_ver_structure.status_code%TYPE;
13793 l_amg_segment1                  pa_projects_all.segment1%TYPE;
13794 
13795 -- Bug 3075609
13796 l_maintain_weightages           VARCHAR2(1); -- We need not maintain weightages during code flow always. This var will track it.
13797 l_existing_task_set_max_wt      VARCHAR2(1); -- If a task is indented/ moved under a parent with no other progressible task, this
13798                                              -- task should have a weightage of 100. This flag will track this.
13799 
13800 -- Bug 3075609
13801 l_new_structure_version         varchar2(1) := 'Y';  -- In the update context, we could be either updating an existing
13802                                                      -- structure version or be creating a new structure version. We need
13803                                                      -- to differentiate the two scenarios.
13804 
13805 -- rec that contains all tasks information.
13806 l_task_in_rec                   pa_project_pub.task_in_rec_type;
13807 
13808 -- proj element level variables
13809 l_task_id                       pa_tasks.task_id%TYPE;         -- task id of the current task being processed in loop
13810 l_parent_task_id                pa_tasks.parent_task_id%TYPE;  -- parent task id of the current task being processed in loop
13811 l_task_version_id               pa_proj_element_versions.element_version_id%TYPE;     -- stores version id of current task being processed
13812 
13813 -- version level variables required only for update task case.
13814 l_proj_elem_ver_rvn             pa_proj_element_versions.record_version_number%TYPE;  -- record version number of proj element table
13815 l_proj_elem_ver_rowid           VARCHAR2(255);                                        -- rowid of the task being updated.
13816 l_relationship_id               pa_object_relationships.object_relationship_id%TYPE;
13817 l_obj_rel_rvn                   NUMBER;
13818 
13819 -- flexfield attributes used for updating/creating element version and schedule versions table.
13820 l_attribute_category            PA_PROJ_ELEMENT_VERSIONS.attribute_category%TYPE;
13821 l_attribute1                    PA_PROJ_ELEMENT_VERSIONS.attribute1%TYPE;
13822 l_attribute2                    PA_PROJ_ELEMENT_VERSIONS.attribute2%TYPE;
13823 l_attribute3                    PA_PROJ_ELEMENT_VERSIONS.attribute3%TYPE;
13824 l_attribute4                    PA_PROJ_ELEMENT_VERSIONS.attribute4%TYPE;
13825 l_attribute5                    PA_PROJ_ELEMENT_VERSIONS.attribute5%TYPE;
13826 l_attribute6                    PA_PROJ_ELEMENT_VERSIONS.attribute6%TYPE;
13827 l_attribute7                    PA_PROJ_ELEMENT_VERSIONS.attribute7%TYPE;
13828 l_attribute8                    PA_PROJ_ELEMENT_VERSIONS.attribute8%TYPE;
13829 l_attribute9                    PA_PROJ_ELEMENT_VERSIONS.attribute9%TYPE;
13830 l_attribute10                   PA_PROJ_ELEMENT_VERSIONS.attribute10%TYPE;
13831 l_attribute11                   PA_PROJ_ELEMENT_VERSIONS.attribute11%TYPE;
13832 l_attribute12                   PA_PROJ_ELEMENT_VERSIONS.attribute12%TYPE;
13833 l_attribute13                   PA_PROJ_ELEMENT_VERSIONS.attribute13%TYPE;
13834 l_attribute14                   PA_PROJ_ELEMENT_VERSIONS.attribute14%TYPE;
13835 l_attribute15                   PA_PROJ_ELEMENT_VERSIONS.attribute15%TYPE;
13836 --Bug 6153503
13837 l_return_msg                  varchar2(2000);
13838 l_validate_status             varchar2(1);
13839 
13840 -- Variables required for calculating display sequence, wbs level and weightage etc.
13841 l_display_sequence_tbl          display_sequence_tbl;
13842 l_wbs_level_tbl                 wbs_level_tbl;
13843 l_wbs_number_tbl                wbs_number_tbl;
13844 l_child_count_tbl               child_count_tbl;
13845 l_weighting_percentage_tbl      weighting_percentage_tbl;
13846 l_task_version_id_tbl           task_version_id_tbl;
13847 l_top_task_count                NUMBER;
13848 l_disp_seq                      NUMBER;
13849 
13850 -- Bug 3075609. The following plsql table will indicate at any point of time if the parent
13851 -- contains a task which has progress enabled.
13852 l_child_indicator_tbl           PA_PLSQL_DATATYPES.Char1TabTyp;
13853 
13854 -- Bug 3075609. This is a table of task versions for which atleast one of its child has changed
13855 -- its parent. That a child task has moved out of this branch. This local variable will be indexed
13856 -- with the task version ids so that eliminating duplicates is easy.
13857 l_affected_parents_tbl          PA_PLSQL_DATATYPES.Char1TabTyp;
13858 
13859 l_dummy_char                    VARCHAR2(1);
13860 l_dummy_number                  NUMBER;
13861 
13862 -- Standard parameters
13863 l_return_status                 varchar2(1);
13864 l_error_msg_code                varchar2(30);
13865 l_msg_count                     NUMBER := 0;
13866 l_data                          VARCHAR2(2000);
13867 l_msg_data                      VARCHAR2(2000);
13868 l_msg_index_out                 NUMBER;
13869 l_debug_mode                    VARCHAR2(1);
13870 l_module_name                   VARCHAR2(100) := 'pa.plsql.PA_PROJ_TASK_STRUC_PUB';
13871 l_process_code                  VARCHAR2(30);
13872 l_task_weight_basis_code        VARCHAR2(30);
13873 l_update_wbs_flag               VARCHAR2(1);
13874 
13875 l_debug_level2                  CONSTANT NUMBER := 2;
13876 l_debug_level3                  CONSTANT NUMBER := 3;
13877 l_debug_level4                  CONSTANT NUMBER := 4;
13878 l_debug_level5                  CONSTANT NUMBER := 5;
13879 l_debug_level6                  CONSTANT NUMBER := 6;
13880 
13881 --bug 3010538
13882 l_WBS_changed_flag              VARCHAR2(1) := 'N';
13883 l_progressable_task             VARCHAR2(1);  --bug 3035902 maansari
13884 --end bug 3010538
13885 
13886 -- Bug 3091798
13887 l_request_id                    pa_proj_elem_ver_structure.conc_request_id%TYPE;
13888 
13889 -- Variables added for bug 3057575 :
13890 row_task_ver_id                 cur_all_task_ver_id%ROWTYPE;
13891 task_parent_id_tbl              task_parent_id_tbl_type;
13892 task_ver_id_passed_tbl          task_ver_id_passed_tbl_type;
13893 l_temp_count                    NUMBER;
13894 l_temp_success                  VARCHAR2(1);
13895 l_hierarchy_count               NUMBER;
13896  -- l_err_task_number               pa_tasks.task_number%TYPE; bug 6193314
13897  	 l_err_task_number               pa_proj_elements.element_number%TYPE;
13898 l_shared                        VARCHAR(1) := 'N'; -- Added for Bug#3451073
13899 
13900 /* Bug # 3420093 - Adding Progress Management modifications to create_project and update_project flow. */
13901 
13902     -- Amit Bug 3964548 Begin
13903     -- Changed l_add_task_ver_ids, l_add_planned_effort, l_add_start_date, l_add_end_date
13904     -- to SYSTEM.pa_num_tbl_type from PA_NUM_1000_NUM
13905     --l_add_task_ver_ids      PA_NUM_1000_NUM := PA_NUM_1000_NUM();
13906     --l_add_planned_effort    PA_NUM_1000_NUM := PA_NUM_1000_NUM();
13907     --l_add_start_date        PA_DATE_1000_DATE := PA_DATE_1000_DATE();
13908     --l_add_end_date          PA_DATE_1000_DATE := PA_DATE_1000_DATE();
13909 
13910     l_add_task_ver_ids      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13911     l_add_planned_effort    SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13912     l_add_start_date        SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
13913     l_add_end_date          SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
13914     l_pm_product_code       SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
13915     l_add_plan_task_id      NUMBER;
13916 
13917     CURSOR cur_wp_task_csr_duplicate (c_project_id pa_projects_all.project_id%TYPE,
13918                             c_pm_source_reference pa_proj_elements.pm_source_reference%TYPE) IS
13919     SELECT proj_element_id
13920     FROM   pa_proj_elements pelem
13921     WHERE  project_id  = c_project_id
13922     AND    pm_source_reference = c_pm_source_reference
13923     AND    exists(select 1
13924                      from pa_proj_structure_types pstype, pa_structure_types types
13925                      where pstype.proj_element_id = pelem.parent_structure_id
13926                      and pstype.structure_type_id = types.structure_type_id
13927                      and types.structure_type = p_structure_type);
13928     -- Amit Bug 3964548 End
13929 
13930     l_del_task_ver_ids      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13931 
13932     cursor l_task_cur(p_project_id NUMBER) is
13933     select
13934     element_version_id,planned_effort,actual_start_date,actual_finish_date
13935     from pa_proj_elem_ver_schedule ppevs, pa_proj_elements ppe
13936     where ppevs.project_id = ppe.project_id
13937     and ppevs.proj_element_id = ppe.proj_element_id
13938     and ppe.object_type = 'PA_TASKS'
13939     and ppevs.project_id = p_project_id;
13940     /** cursor added by aditi for bug 4120380. This is added to verify if the task_number is being modified by AMG Update_project script,
13941     Only then we need to prefix the task_number with a '-', so as to prevent primary key violation, and sucessful update.**/
13942    /*bug#5243018 : Reverting the fix in Bug 4120380
13943     CURSOR cur_proj_elements_info(c_task_id pa_proj_elements.proj_element_id%TYPE)
13944                               IS
13945                               SELECT  element_number, name
13946                               FROM    pa_proj_elements
13947                               WHERE   proj_element_id = c_task_id;
13948       l_proj_elements_info    cur_proj_elements_info%ROWTYPE; */
13949     /** changes end for bug 4120380 by aditi **/
13950     l_task_cur_rec      l_task_cur%rowtype;
13951 
13952     l_taskin_rec        pa_project_pub.task_in_rec_type;
13953     l_taskout_rec       pa_project_pub.task_out_rec_type;
13954 
13955     l_i         NUMBER;
13956     --Added by rtarway for BUG 4059962
13957     l_financial_task_flag VARCHAR2(1);
13958     l_share_code          VARCHAR2(30);
13959     --Added by rtarway for BUG 4059962
13960 
13961     --Added by rtarway for BUG 4132590
13962      CURSOR check_hidden_assgn_exists(p_element_version_id IN NUMBER) IS
13963      SELECT 'Y'
13964      FROM pa_resource_assignments ra
13965      WHERE ra.ta_display_flag = 'N'
13966      AND ra.wbs_element_version_id = p_element_version_id
13967      AND rownum = 1;
13968 
13969      l_hidden_assgn VARCHAR2(1);
13970    --Added by rtarway for BUG 4132590
13971      l_fin_task_id NUMBER;
13972      l_fin_task_reference VARCHAR2(250);
13973 
13974 /* Bug # 3420093 - Adding Progress Management modifications to create_project and update_project flow. */
13975 
13976 -- Begin fix for Bug # 4373055.
13977 
13978 l_str_ver_id            NUMBER:= null;
13979 l_conc_request_id       NUMBER := null;
13980 l_message_name  VARCHAR2(30) := null;
13981 l_message_type  VARCHAR2(30) := null;
13982 
13983 -- End fix for Bug # 4373055.
13984 
13985 -- Addition for Bug 6458891
13986 -- Bug 10049710
13987 /*
13988     cursor cur_prev_prog (p_project_id NUMBER, p_object_id NUMBER, p_object_version_id NUMBER) is
13989         select
13990         planned_effort, est_remaining_effort, completed_percentage
13991         from PA_TASK_PROGRESS_AMG_V
13992         where
13993         project_id = p_project_id
13994         and OBJECT_ID = p_object_id
13995         and OBJECT_VERSION_ID = p_object_version_id
13996         and STRUCTURE_TYPE_CLASS_CODE='WORKPLAN';
13997 */
13998     CURSOR cur_prev_prog (p_project_id NUMBER, p_object_id NUMBER, p_object_version_id NUMBER)
13999     IS
14000     SELECT
14001         pa_progress_utils.Calc_plan(pxpv.labor_effort, pxpv.equipment_effort) planned_effort,
14002         pa_progress_utils.Sum_etc_values(
14003           ( Nvl(pxpv.labor_effort, 0) + Nvl(pxpv.equipment_effort, 0) ),
14004           ppr.estimated_remaining_effort,
14005           ppr.eqpmt_etc_effort,
14006           NULL,
14007           ppr.subprj_ppl_etc_effort,
14008           ppr.subprj_eqpmt_etc_effort,
14009           NULL,
14010           NULL,
14011           (
14012               Nvl(ppr.ppl_act_effort_to_date, 0) + Nvl(ppr.eqpmt_act_effort_to_date, 0) +
14013               Nvl(ppr.subprj_ppl_act_effort, 0) + Nvl(ppr.subprj_eqpmt_act_effort, 0)
14014           ),
14015           Decode(ppwa.wp_enable_version_flag, 'Y', 'PUBLISH', 'WORKING')) est_remaining_effort,
14016         Nvl(ppr.completed_percentage, ppr.eff_rollup_percent_comp) completed_percentage
14017     FROM
14018         pa_projects_all ppa,
14019         pa_proj_elements ppe,
14020         pa_proj_element_versions ppv,
14021         pa_proj_elem_ver_structure ppvs,
14022         pa_proj_workplan_attr ppwa,
14023         pa_progress_rollup ppr,
14024        pji_xbs_plans_v pxpv
14025     WHERE
14026         ppv.project_id = ppa.project_id
14027     AND ppv.object_type IN( 'PA_STRUCTURES', 'PA_TASKS' )
14028     AND ppv.parent_structure_version_id = ppvs.element_version_id
14029     AND ppv.project_id = ppvs.project_id
14030     AND ppvs.status_code = 'STRUCTURE_PUBLISHED'
14031     AND ppvs.proj_element_id = ppwa.proj_element_id
14032     AND ppvs.project_id = ppwa.project_id
14033     AND ppv.project_id = ppe.project_id
14034     AND ppv.proj_element_id = ppe.proj_element_id
14035     AND ppv.object_type = ppe.object_type
14036     AND ppr.project_id (+) = ppv.project_id
14037     AND ppr.object_id (+) = ppv.proj_element_id
14038     AND ppr.structure_type (+) = 'WORKPLAN'
14039     AND ppr.current_flag (+) <> 'W'
14040     AND ppr.structure_version_id (+) IS NULL
14041     AND ppr.object_version_id (+) <= ppv.element_version_id
14042     AND Nvl(ppr.as_of_date, Trunc(SYSDATE)) =
14043         (
14044           SELECT Nvl(MAX(ppr2.as_of_date), Trunc(SYSDATE))
14045           FROM
14046             pa_progress_rollup ppr2,
14047             pa_proj_element_versions ppev,
14048             pa_proj_elem_ver_structure ppevs
14049           WHERE
14050               ppr2.object_id = ppv.proj_element_id
14051           AND ppr2.proj_element_id = ppv.proj_element_id
14052           AND ppr2.project_id = ppv.project_id
14053           AND ppr2.object_type = ppv.object_type
14054           AND ppr2.structure_type = 'WORKPLAN'
14055           AND ppr2.structure_version_id IS NULL
14056           AND ppr2.current_flag <> 'W'
14057           AND ppr2.object_version_id = ppev.element_version_id
14058           AND ppevs.project_id = ppev.project_id
14059           AND ppevs.element_version_id = ppev.parent_structure_version_id
14060           AND ppevs.status_code = 'STRUCTURE_PUBLISHED'
14061           AND ppevs.published_date <= ppvs.published_date
14062         )
14063     AND pxpv.project_id(+) = ppv.project_id
14064     AND pxpv.structure_version_id(+) = ppv.parent_structure_version_id
14065     AND pxpv.proj_element_id(+) = ppv.proj_element_id
14066     AND pxpv.structure_type(+) = 'WORKPLAN'
14067     AND ppa.project_id = p_project_id
14068     AND ppv.proj_element_id = p_object_id
14069     AND ppv.element_version_id = p_object_version_id
14070     UNION ALL
14071     SELECT
14072         pa_progress_utils.Calc_plan(pxpv.labor_effort, pxpv.equipment_effort) planned_effort,
14073         pa_progress_utils.Sum_etc_values(
14074           ( Nvl(pxpv.labor_effort, 0) + Nvl(pxpv.equipment_effort, 0) ),
14075           ppr.estimated_remaining_effort,
14076           ppr.eqpmt_etc_effort,
14077           NULL,
14078           ppr.subprj_ppl_etc_effort,
14079           ppr.subprj_eqpmt_etc_effort,
14080           NULL,
14081           NULL,
14082           (
14083             Nvl(ppr.ppl_act_effort_to_date, 0) + Nvl(ppr.eqpmt_act_effort_to_date, 0) +
14084             Nvl(ppr.subprj_ppl_act_effort, 0) + Nvl(ppr.subprj_eqpmt_act_effort, 0)
14085           ),
14086           'WORKING') etc_effort,
14087         Nvl(ppr.completed_percentage, ppr.eff_rollup_percent_comp) physical_percent_complete
14088     FROM
14089         pa_projects_all ppa,
14090         pa_proj_elements ppe,
14091         pa_proj_element_versions ppv,
14092         pa_proj_elem_ver_structure ppvs,
14093         pa_progress_rollup ppr,
14094         pji_xbs_plans_v pxpv
14095     WHERE
14096         ppa.project_id = ppv.project_id
14097     AND ppv.object_type IN( 'PA_STRUCTURES', 'PA_TASKS' )
14098     AND ppv.parent_structure_version_id = ppvs.element_version_id
14099     AND ppv.project_id = ppvs.project_id
14100     AND ppvs.status_code <> 'STRUCTURE_PUBLISHED'
14101     AND ppv.project_id = ppe.project_id
14102     AND ppv.proj_element_id = ppe.proj_element_id
14103     AND ppv.object_type = ppe.object_type
14104     AND ppr.project_id(+) = ppv.project_id
14105     AND ppr.object_id(+) = ppv.proj_element_id
14106     AND ppr.structure_type(+) = 'WORKPLAN'
14107     AND ppr.current_flag(+) = 'Y'
14108     AND ppr.structure_version_id(+) = ppv.parent_structure_version_id
14109     AND ppr.object_version_id(+) = ppv.element_version_id
14110     AND pxpv.project_id(+) = ppv.project_id
14111     AND pxpv.structure_version_id(+) = ppv.parent_structure_version_id
14112     AND pxpv.proj_element_id(+) = ppv.proj_element_id
14113     AND pxpv.structure_type(+) = 'WORKPLAN'
14114     AND ppa.project_id = p_project_id
14115     AND ppv.proj_element_id = p_object_id
14116     AND ppv.element_version_id = p_object_version_id;
14117 
14118 l_prev_planned_effort Number;
14119 l_prev_etc_effort Number;
14120 l_prev_percent_comp Number;
14121 l_update_task_det_flag varchar2(1);
14122 
14123 --  Bug 6717386
14124 CURSOR cur_struc_ver_wp(c_project_id pa_projects_all.project_id%TYPE, c_structure_type pa_structure_types.structure_type%TYPE)
14125    IS
14126      SELECT c.element_version_id
14127        FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
14128             ,pa_proj_elem_ver_structure d
14129       WHERE c.project_id = c_project_id
14130         AND a.structure_type_id = b.structure_type_id
14131         AND b.proj_element_id = c.proj_element_id
14132         AND a.structure_type = c_structure_type
14133         AND d.project_id = c.project_id
14134         AND d.element_version_id = c.element_version_id
14135         AND d.status_code = 'STRUCTURE_WORKING';
14136 
14137 l_struct_ver_id      pa_proj_element_versions.element_version_id%TYPE;
14138 l_status_code        pa_proj_elements.status_code%type;
14139 --  Bug 6717386
14140 
14141  -- Start of addition for bug 8301015
14142 l_project_id1 NUMBER;
14143 l_parent_task_id1 NUMBER;
14144 l_tstart_date1 DATE;
14145 l_tend_date1 DATE;
14146 l_tcnt NUMBER;
14147 
14148 TYPE TASK_DATES_REC_TYPE IS RECORD (
14149 TASK_ID	                  NUMBER          := NULL,
14150 PROJECT_ID                 NUMBER          := NULL,
14151 PARENT_TASK_ID                  NUMBER          := NULL,
14152 OLD_START_DATE                  DATE            := NULL,
14153 OLD_END_DATE                    DATE            := NULL,
14154 NEW_START_DATE                  DATE            := NULL,
14155 NEW_END_DATE                    DATE            := NULL
14156 );
14157 
14158 TYPE TASK_DATES_TBL_TYPE IS TABLE OF TASK_DATES_REC_TYPE
14159 INDEX BY BINARY_INTEGER;
14160 
14161 l_task_dates TASK_DATES_TBL_TYPE;
14162 -- End of addition for bug 8301015
14163 
14164 --Added for Bug 15958106
14165 	CURSOR C_GET_TASK_DATES(c_Task_id Number) IS
14166 		SELECT pt.project_id,
14167 				pt.parent_task_id,
14168 				pt.start_date,
14169 				pt.completion_date
14170          FROM pa_tasks pt
14171          WHERE pt.task_id = c_Task_id
14172 		 AND NOT EXISTS --Added for Bug15958106
14173 			( select ppev.proj_element_id from pa_proj_element_versions ppev
14174 			where ppev.proj_element_id=pt.task_id and ppev.TASK_UNPUB_VER_STATUS_CODE   = 'TO_BE_DELETED' );
14175 
14176 BEGIN
14177 l_tcnt := 0; -- added for bug 8301015
14178 
14179      IF p_commit = FND_API.G_TRUE THEN
14180              SAVEPOINT process_task_struc;
14181      END IF;
14182 
14183      IF p_init_msg_list = FND_API.G_TRUE THEN
14184           FND_MSG_PUB.initialize;
14185      END IF;
14186 
14187      x_msg_count := 0;
14188      x_return_status := FND_API.G_RET_STS_SUCCESS;
14189      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
14190 
14191      -- Moved down this code during UT.
14192      IF l_debug_mode = 'Y' THEN
14193           pa_debug.g_err_stage:= 'Entering PROCESS_TASK_STRUCTURE_BULK';
14194           pa_debug.write(l_module_name,pa_debug.g_err_stage,
14195                                    l_debug_level2);
14196 
14197           --For bug 4252182
14198           pa_debug.set_curr_function( p_function   => 'PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK',
14199                                  p_debug_mode => l_debug_mode );
14200 
14201      END IF;
14202 
14203      -- Check for business rules violations
14204      IF l_debug_mode = 'Y' THEN
14205 
14206           pa_debug.g_err_stage:= 'Input parameter List :';
14207           pa_debug.write(l_module_name,pa_debug.g_err_stage,
14208                                      l_debug_level3);
14209 
14210           pa_debug.g_err_stage:= 'p_project_id : ' || p_project_id;
14211           pa_debug.write(l_module_name,pa_debug.g_err_stage,
14212                                      l_debug_level3);
14213 
14214           pa_debug.g_err_stage:= 'p_pm_product_code : ' || p_pm_product_code;
14215           pa_debug.write(l_module_name,pa_debug.g_err_stage,
14216                                      l_debug_level3);
14217 
14218           pa_debug.g_err_stage:= 'p_structure_type : ' || p_structure_type;
14219           pa_debug.write(l_module_name,pa_debug.g_err_stage,
14220                                      l_debug_level3);
14221 
14222           pa_debug.g_err_stage:= 'p_wp_str_exists : ' || p_wp_str_exists;
14223           pa_debug.write(l_module_name,pa_debug.g_err_stage,
14224                                      l_debug_level3);
14225 
14226           pa_debug.g_err_stage:= 'p_is_wp_separate_from_fn :' || p_is_wp_separate_from_fn;
14227           pa_debug.write(l_module_name,pa_debug.g_err_stage,
14228                                      l_debug_level3);
14229 
14230           pa_debug.g_err_stage:= 'p_is_wp_versioning_enabled :' || p_is_wp_versioning_enabled;
14231           pa_debug.write(l_module_name,pa_debug.g_err_stage,
14232                                      l_debug_level3);
14233 
14234           -- IUP: Impact of Update_project
14235           pa_debug.g_err_stage:= 'p_structure_version_id :' || p_structure_version_id;
14236           pa_debug.write(l_module_name,pa_debug.g_err_stage,
14237                                      l_debug_level3);
14238 
14239           pa_debug.g_err_stage:= 'p_sprocess_mode :' || p_process_mode;
14240           pa_debug.write(l_module_name,pa_debug.g_err_stage,
14241                                      l_debug_level3);
14242 
14243      END IF;
14244 
14245 
14246      IF l_debug_mode = 'Y' THEN
14247 
14248           pa_debug.g_err_stage:= 'Validating input parameters';
14249           pa_debug.write(l_module_name,pa_debug.g_err_stage,
14250                                      l_debug_level3);
14251      END IF;
14252 
14253      IF  (p_project_id IS NULL) OR
14254          (p_pm_product_code IS NULL) OR
14255          (p_structure_type IS NULL) OR
14256          (p_wp_str_exists IS NULL) OR
14257          (p_is_wp_separate_from_fn IS NULL) OR
14258          (p_is_wp_versioning_enabled IS NULL)OR
14259          (p_process_mode IS NULL)
14260      THEN
14261 
14262           PA_UTILS.ADD_MESSAGE
14263                 (p_app_short_name => 'PA',
14264                   p_msg_name     => 'PA_INV_PARAM_PASSED');  -- Bug 2955589. Changed the message name to
14265           RAISE Invalid_Arg_Exc_WP;                          -- have a generic message.
14266 
14267      END IF;
14268 
14269      -- The following check is not required in the create_project context, but will be required
14270      -- in the update_project context in case we are calling the api for publishing. Having
14271      -- this check as a placeholder for future changes.
14272 
14273      ---IUP:below code is commented out as calling api itself is taking care.
14274      /*
14275      open cur_pa_temp_import(p_project_id);
14276      fetch cur_pa_temp_import into l_dummy_char;
14277      IF cur_pa_temp_import%FOUND THEN
14278           IF l_debug_mode = 'Y' THEN
14279                pa_debug.g_err_stage:= 'Records found in PA_TEMP_IMPORT_TASKS - Returning';
14280                pa_debug.write(l_module_name,pa_debug.g_err_stage,
14281                                           l_debug_level3);
14282           END IF;
14283 
14284           close cur_pa_temp_import;
14285           pa_debug.reset_curr_function;
14286           RETURN;
14287      END IF;
14288      close cur_pa_temp_import;*/
14289 
14290 
14291      -- IUP: Added the below if condition As the processing under this needs to be done only for update_project
14292      -- Following local variables are populated within this if condition
14293      --    l_structure_version_id
14294      --    l_structure_id
14295      --    l_task_unpub_ver_status_code
14296      --    l_add_task_security
14297      --    l_update_task_security populated only for update task case.
14298 -- PA L Changes 3010538
14299     IF p_structure_type IS NOT NULL THEN
14300 
14301 -- Begin fix for Bug # 4373055.
14302 
14303     /*
14304 
14305     l_process_code :=
14306                       PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_CODE(p_project_id => p_project_id
14307                                                                         ,p_structure_type => p_structure_type );
14308           IF nvl(l_process_code,'-1') = 'WUP' THEN
14309 
14310               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14311               THEN
14312                    --Commented out as there is no message defined for amg corresponding to PA_PS_VD_UPDWBS_PRC_INPROC
14313                    --pa_interface_utils_pub.map_new_amg_msg
14314                    --  ( p_old_message_code => 'PA_PS_VD_UPDWBS_PRC_INPROC'
14315                    --   ,p_msg_attribute    => 'CHANGE'
14316                    --   ,p_resize_flag      => 'N'
14317                    --   ,p_msg_context      => 'GENERAL'
14318                    --   ,p_attribute1       => ''
14319                    --   ,p_attribute2       => ''
14320                    --   ,p_attribute3       => ''
14321                    --   ,p_attribute4       => ''
14322                    --   ,p_attribute5       => '');
14323                    l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => p_project_id  -- Bug 3091798
14324                                                                                   ,p_structure_type => p_structure_type );
14325 
14326                    PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
14327                                       --   ,p_msg_name       => 'PA_PS_VD_UPDWBS_PRC_INPROC');Bug 3091798.
14328                                         ,p_msg_name       => 'PA_PS_UPDWBS_PRC_INPROC_AMG',  -- Bug 3091798. Message includes the request id.
14329                                          p_token1         => 'REQUESTID',
14330                                          p_value1         => l_request_id);
14331 
14332 
14333                    raise Invalid_Arg_Exc_WP;
14334               END IF ;
14335           ELSIF nvl(l_process_code,'-1') = 'WUE' THEN
14336 
14337               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14338               THEN
14339                    l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => p_project_id  --Bug 3091798
14340                                                                                   ,p_structure_type => p_structure_type );
14341 
14342                    --Commented out as there is no message defined for amg corresponding to PA_PS_VD_UPD_WBS_PRC_ERR
14343                    --pa_interface_utils_pub.map_new_amg_msg
14344                    --  ( p_old_message_code => 'PA_PS_VD_UPD_WBS_PRC_ERR'
14345                    --   ,p_msg_attribute    => 'CHANGE'
14346                    --   ,p_resize_flag      => 'N'
14347                    --   ,p_msg_context      => 'GENERAL'
14348                    --   ,p_attribute1       => ''
14349                    --   ,p_attribute2       => ''
14350                    --    ,p_attribute3       => ''
14351                    --   ,p_attribute4       => ''
14352                    --   ,p_attribute5       => '');
14353                    PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
14354                                        --  ,p_msg_name       => 'PA_PS_VD_UPD_WBS_PRC_ERR');Bug 3091798.
14355                                         ,p_msg_name       => 'PA_PS_UPDWBS_PRC_ERR_AMG',  -- Bug 3091798. Message includes the request id.
14356                                          p_token1         => 'REQUESTID',
14357                                          p_value1         => l_request_id);
14358 
14359                   raise Invalid_Arg_Exc_WP;
14360               END IF;
14361           END IF;
14362 
14363       */
14364 
14365         PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_MSG(
14366         p_project_id              => p_project_id
14367         , p_structure_type        => p_structure_type
14368         , p_structure_version_id  => null
14369         , p_context               => 'UPDATE_AMG'
14370         , x_message_name          => l_message_name
14371         , x_message_type          => l_message_type
14372         , x_structure_version_id  => l_str_ver_id
14373         , x_conc_request_id       => l_conc_request_id);
14374 
14375 
14376         if l_message_name is not null then
14377 
14378                      PA_UTILS.ADD_MESSAGE(
14379                      p_app_short_name => 'PA'
14380                      , p_msg_name       => l_message_name
14381                      , p_token1         => 'REQUESTID'
14382                      , p_value1         => l_conc_request_id);
14383 
14384                       RAISE Invalid_Arg_Exc_WP;
14385         end if;
14386 
14387 -- End fix for Bug # 4373055.
14388 
14389     END IF ;
14390 -- PA L Changes 3010538
14391 
14392      IF (p_structure_version_id IS NOT NULL)
14393       THEN
14394           --IUP:Check whether the structure version passed is in a valid status
14395           l_str_status_code := PA_PROJECT_STRUCTURE_UTILS.get_structrue_version_status(
14396                                                        p_project_id                => p_project_id
14397                                                        ,p_structure_version_id     => p_structure_version_id );
14398           IF l_str_status_code IS NULL
14399           THEN
14400                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
14401                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID' );
14402                   raise Invalid_Arg_Exc_WP;
14403           ELSIF l_str_status_code in ( 'STRUCTURE_SUBMITTED', 'STRUCTURE_REJECTED', 'STRUCTURE_APPROVED' )
14404           THEN
14405                   PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
14406                                        ,p_msg_name       => 'PA_PS_INV_STR_VER_ID2' );
14407                   raise Invalid_Arg_Exc_WP;
14408           END IF;
14409 
14410           IF l_debug_mode = 'Y' THEN
14411               pa_debug.g_err_stage := 'Structure is in a valid Status' ;
14412                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
14413           END IF;
14414 
14415           l_structure_version_id := p_structure_version_id;
14416 
14417           -- get the structure id from structure version id
14418           OPEN  cur_elem_ver_to_task_id(l_structure_version_id);
14419           FETCH cur_elem_ver_to_task_id INTO l_structure_id;
14420           CLOSE cur_elem_ver_to_task_id;
14421 
14422           IF l_debug_mode = 'Y' THEN
14423                pa_debug.g_err_stage:= 'Structure id : '||l_structure_id;
14424                pa_debug.write(l_module_name,pa_debug.g_err_stage,
14425                                           l_debug_level3);
14426 
14427                pa_debug.g_err_stage:= 'Structure version id : '|| l_structure_version_id;
14428                pa_debug.write(l_module_name,pa_debug.g_err_stage,
14429                                           l_debug_level3);
14430 
14431           END IF;
14432 
14433 /*
14434   Bug Fix 5263429
14435   Unable to delete the task from MSP.
14436 
14437   After succesful deletion of a task and the publishing of the structure, a new task is added to the current
14438   working version. And that the task was deleted and the MSP was returning a message saying 'Mark this task for deletion?'.
14439   Ideally this should be used for tasks which are present in the published versions as well. Only those tasks will be marked
14440   for deletion and during publishing those marked tasks will be deleted. All the other tasks which dont have any transactions
14441   and are not present in the published versions should be deleted right away and the MSP should not show any message.
14442 
14443 Analysis:
14444 ---------
14445   This is happening due to value 'M' being returned from the PA_PROJECT_PUB.check_task_mfd APIs OUT param  p_check_task_mfd_flag.
14446   This was happening due to the value 'PUBLISHED' was populated in the task_unpub_ver_status_code column.
14447   When ever a task is created in MSP and sent to oracle projects the pa_project_pub.load_project and
14448   pa_project_pub.execute_update_project are called.
14449 
14450   The pa_project_pub.execute_update_project -> update_project API ...> PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK is called.
14451 
14452   Inside this API the following code is used to derive the value for task_unpub_ver_status_code  column.
14453   This is correct. But after this piece of code all the passed in tasks are processed in a loop. In the
14454   loop the same variable l_task_unpub_ver_status_code is used to get the other tasks status. Hence the
14455   earlier derived value for the new task is getting overridden with the other published task status.
14456   Had the tasks processing happned in such a way that (working) the newly added task is processed
14457   first then this is not an issue at all. Due to the published tasks presence the other value is overwritten
14458   and the same got stored for the new task.
14459 
14460 Solution:
14461 ---------
14462 
14463   Moved the task status derivation code into the loop right before the insert into the element versions table.
14464 
14465 
14466 
14467           --IUP:get the status of newly created task under the passed structure version
14468           IF p_is_wp_separate_from_fn = 'N'
14469           THEN
14470               IF p_is_wp_versioning_enabled = 'Y'
14471               THEN
14472                    l_task_unpub_ver_status_code := 'WORKING';
14473               ELSE
14474                    l_task_unpub_ver_status_code := 'PUBLISHED';
14475               END IF;
14476           ELSE ---split
14477                IF p_structure_type = 'FINANCIAL'
14478                THEN
14479                    l_task_unpub_ver_status_code := 'PUBLISHED';
14480                ELSE --workplan only
14481                    IF p_is_wp_versioning_enabled = 'Y'
14482                    THEN
14483                        l_task_unpub_ver_status_code := 'WORKING';
14484                    ELSE
14485                        l_task_unpub_ver_status_code := 'PUBLISHED';
14486                    END IF;
14487                END IF;
14488           END IF;
14489 
14490 */
14491 
14492           --IUP:getting the security function allowed into local variables.
14493           PA_PM_FUNCTION_SECURITY_PUB.check_function_security
14494                       (p_api_version_number => 1.0,
14495                        p_responsibility_id  => FND_GLOBAL.Resp_id,
14496                        p_function_name      => 'PA_PM_ADD_TASK',
14497                        p_msg_count          => x_msg_count,
14498                        p_msg_data           => x_msg_data,
14499                        p_return_status      => x_return_status,
14500                        p_function_allowed   => l_add_task_security);
14501 
14502           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14503                 IF l_debug_mode = 'Y' THEN
14504                    pa_debug.g_err_stage := 'Error obtaining the value of add task function allowed' ;
14505                    pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
14506                  END IF;
14507                  RAISE Invalid_Arg_Exc_WP;
14508             END IF;
14509 
14510             PA_PM_FUNCTION_SECURITY_PUB.check_function_security
14511                       (p_api_version_number => 1.0,
14512                        p_responsibility_id  => FND_GLOBAL.Resp_id,
14513                        p_function_name      => 'PA_PM_UPDATE_TASK',
14514                        p_msg_count          => x_msg_count,
14515                        p_msg_data           => x_msg_data,
14516                        p_return_status      => x_return_status,
14517                        p_function_allowed   => l_update_task_security);
14518 
14519           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14520               IF l_debug_mode = 'Y' THEN
14521                    pa_debug.g_err_stage := 'Error obtaining the value of update task function allowed' ;
14522                    pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
14523                END IF;
14524                RAISE Invalid_Arg_Exc_WP;
14525           END IF;
14526 
14527      ELSE  -- IF (p_structure_version_id IS NOT NULL) create project case
14528 
14529           l_add_task_security := 'Y'; /* this check is already done in create proejct */
14530 
14531           -- get structure id and structure version id and
14532           -- If auto publish upon creation is on and versioning is enabled then
14533           -- update the workplan structure as working bcoz it is created as pub by copy structure.
14534 
14535           DECLARE
14536              -- We dont require this local var anymore. Bug 2955589.
14537              --l_auto_publish_flag             VARCHAR2(1);
14538              --l_source_template_flag          VARCHAR2(1);
14539           BEGIN
14540                /*   Bug  2955589. As the update is taken care in Copy_Structures_bulk API, the following
14541                     cursor need not be opened.
14542 
14543                open cur_auto_pub_flag(p_project_id);
14544                fetch cur_auto_pub_flag into l_auto_publish_flag;
14545                close cur_auto_pub_flag;
14546 
14547                IF l_debug_mode = 'Y' THEN
14548                     pa_debug.g_err_stage:= 'Auto publish flag : '||l_auto_publish_flag;
14549                     pa_debug.write(l_module_name,pa_debug.g_err_stage,
14550                                                l_debug_level3);
14551                END IF;
14552                */
14553 
14554                -- This condition included after UT.
14555                IF p_structure_type = 'FINANCIAL' THEN
14556                     open get_structure(p_project_id, 'FINANCIAL');
14557                     fetch get_structure into l_structure_id;
14558                     close get_structure;
14559                ELSE -- structure type is WORKPLAN
14560                     open get_structure(p_project_id, 'WORKPLAN');
14561                     fetch get_structure into l_structure_id;
14562                     close get_structure;
14563                END IF;
14564 
14565                IF l_debug_mode = 'Y' THEN
14566                     pa_debug.g_err_stage:= 'Structure id : '||l_structure_id;
14567                     pa_debug.write(l_module_name,pa_debug.g_err_stage,
14568                                                l_debug_level3);
14569                END IF;
14570 
14571                /*   Bug 2955589. The following code is taken care of in Copy_Structures_bulk API.
14572                --ADUT. This cursor will not be opened in the update project context.
14573                open cur_template_flag(p_source_project_id);
14574                fetch cur_template_flag into l_source_template_flag;
14575                close cur_template_flag;
14576 
14577                --IF p_structure_type = 'WORKPLAN' and
14578                IF p_wp_str_exists = 'Y' and --ADUT
14579                   nvl(l_auto_publish_flag,'N') = 'Y' and
14580                   nvl(p_is_wp_versioning_enabled,'N') = 'Y' and
14581                   l_source_template_flag = 'Y' --ADUT
14582                THEN
14583 
14584                     UPDATE pa_proj_elem_ver_structure
14585                        set status_code = 'STRUCTURE_WORKING'
14586                      where project_id = p_project_id
14587                        and proj_element_id = l_structure_id;
14588 
14589                     IF l_debug_mode = 'Y' THEN
14590                          pa_debug.g_err_stage:= 'No of updated records :' || sql%rowcount || ' for structure : ' || l_structure_id;
14591                          pa_debug.write(l_module_name,pa_debug.g_err_stage,
14592                                                     l_debug_level3);
14593                     END IF;
14594 
14595                END IF;
14596 
14597                */
14598                -- Obtain the structure version id to proceed with the processing.
14599                PA_PROJ_ELEMENTS_UTILS.GET_STRUCTURE_INFO(
14600                      p_project_id                 => p_project_id
14601                     ,p_structure_type             => p_structure_type
14602                     ,p_structure_id               => l_structure_id
14603                     ,p_is_wp_separate_from_fn     => p_is_wp_separate_from_fn
14604                     ,p_is_wp_versioning_enabled   => p_is_wp_versioning_enabled
14605                     ,x_structure_version_id       => l_structure_version_id
14606                     ,x_task_unpub_ver_status_code => l_task_unpub_ver_status_code
14607                     ,x_return_status              => x_return_status
14608                     ,x_msg_count                  => x_msg_count
14609                     ,x_msg_data                   => x_msg_data
14610                     );
14611 
14612                IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14613                     IF l_debug_mode = 'Y' THEN
14614                        pa_debug.g_err_stage := 'Error obtaining the structure version id' ;
14615                        pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
14616                     END IF;
14617                     RAISE Invalid_Arg_Exc_WP;
14618                END IF;
14619 
14620                IF l_debug_mode = 'Y' THEN
14621                     pa_debug.g_err_stage:= 'Structure version id : '||l_structure_version_id;
14622                     pa_debug.write(l_module_name,pa_debug.g_err_stage,
14623                                                l_debug_level3);
14624                     pa_debug.g_err_stage:= 'Task unpublished version status code : '||l_task_unpub_ver_status_code;
14625                     pa_debug.write(l_module_name,pa_debug.g_err_stage,
14626                                                l_debug_level3);
14627                END IF;
14628           END;
14629 
14630      END IF; -- End for if p_structure_version_id is null
14631 
14632      -- Bug 3075609. Determine if we want to maintain the task weightages during the program
14633      -- flow or they will be recalculated at the end of the flow.
14634      l_task_weight_basis_code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id => p_project_id) ;
14635 
14636      -- In the following conditions we will be recalculating the weightages completely. So we need to
14637      -- take care of the rest of the scenarios. Where we need not take care we will just set the task
14638      -- weightage to 0.
14639      IF  NOT (
14640               ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' AND
14641                 nvl(l_task_weight_basis_code,'-1') <> 'MANUAL'
14642               ) OR
14643               ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
14644                 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'   AND
14645                 PA_PROJECT_PUB.G_Published_version_exists = 'N' AND
14646                 nvl(l_task_weight_basis_code,'-1') <> 'MANUAL'
14647               ) OR
14648               (
14649                 nvl(l_task_weight_basis_code,'-1') = 'MANUAL' AND
14650                 p_structure_version_id is NULL
14651               )
14652              )
14653      THEN
14654             l_maintain_weightages    := 'Y';
14655      ELSE
14656             l_maintain_weightages    := 'N';
14657      END IF;
14658 
14659      -- Initialize l_top_task_cnt to 0. This denotes the number of top tasks processed
14660      -- at any point in this API. This is used to calculate the wbs number of the top task.
14661      -- Intialize l_disp_seq to 0. This is used to determines the display sequence of the currenly
14662      -- processed task.
14663 
14664      l_top_task_count := 0;
14665      l_disp_seq       := 0;
14666 
14667      ----Added for bug 3057575 :
14668      l_hierarchy_count     := 1;
14669 
14670      -- Get the default task type id. In workplan context, when we create a schedule
14671      -- version we check if the task type allows for non null work quantity. If the task type
14672      -- is passed as null in the input task record, we use the default task type id derived
14673      -- below.
14674      l_default_task_type_id := PA_PROJ_ELEMENTS_UTILS.GET_DEFAULT_TASK_TYPE_ID;
14675 
14676      -- Get the segment1 for the project. Used to show context for error messages.
14677      open l_amg_project_csr(p_project_id);
14678      fetch l_amg_project_csr into l_amg_segment1;
14679      close l_amg_project_csr;
14680 
14681      IF l_debug_mode = 'Y' THEN
14682           pa_debug.g_err_stage:= 'Entering Loop';
14683           pa_debug.write(l_module_name,pa_debug.g_err_stage,
14684                                                          l_debug_level3);
14685      END IF;
14686      -- Do the processing for all the tasks in the plsql table.
14687 
14688      --Added by rtarway for BUG 4320731
14689      task_ver_id_passed_tbl.delete;
14690 
14691      IF nvl(p_tasks_in_tbl.last,0) > 0 THEN
14692           l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(p_project_id); -- Added for bug#3451073
14693           FOR i in p_tasks_in_tbl.first..p_tasks_in_tbl.last LOOP
14694 
14695                -- Reset the locals at the beginning of the loop.
14696                l_parent_task_id         := null;
14697                l_task_in_rec            := p_tasks_in_tbl(i);
14698 
14699                 --Bug 6153503
14700                l_attribute1  :=  null;
14701                l_attribute2  :=  null;
14702                l_attribute3  :=  null;
14703                l_attribute4  :=  null;
14704                l_attribute5  :=  null;
14705                l_attribute6  :=  null;
14706                l_attribute7  :=  null;
14707                l_attribute8  :=  null;
14708                l_attribute9  :=  null;
14709                l_attribute10 :=  null;
14710                l_attribute11  :=  null;
14711                l_attribute12  :=  null;
14712                l_attribute13  :=  null;
14713                l_attribute14  :=  null;
14714                l_attribute15  :=  null;
14715 
14716                -- Bug 2982072. Derive the task id if task reference only is passed.
14717                -- Currently the api differenciates the task create / update contexts only based
14718                -- on the task_id in the input plsql table which is not correct. The user doesnot pass
14719                -- the task ids even for existing tasks but just passes the task reference. We have to
14720                -- derive the task id from the task reference.
14721                -- Irrespective of the structure type we always query for the proj elements table for
14722                -- the task id given the task reference.
14723                DECLARE
14724 /* Bug 3588013 - Added the exists clause for this bug to get proj_element_id for the correct structure
14725              Task Reference should be unique with in structure.
14726 */
14727                     CURSOR cur_wp_task_csr (c_project_id pa_projects_all.project_id%TYPE,
14728                                             c_pm_source_reference pa_proj_elements.pm_source_reference%TYPE) IS
14729                        SELECT proj_element_id
14730                        FROM   pa_proj_elements pelem
14731                        WHERE  project_id  = c_project_id
14732                        AND    pm_source_reference = c_pm_source_reference
14733                        AND    exists(select 1
14734                               from pa_proj_structure_types pstype, pa_structure_types types
14735                               where pstype.proj_element_id = pelem.parent_structure_id
14736                       and pstype.structure_type_id = types.structure_type_id
14737                    and types.structure_type = p_structure_type);
14738                BEGIN
14739 			   IF (NVL(PA_PROJECT_PUB.G_MASS_ADD_TASKS,'N') ='N' ) THEN -- Added for Huawei 14556729 for add flow
14740                     IF (l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
14741                         l_task_in_rec.pa_task_id IS NULL )
14742                     THEN
14743                         IF  l_task_in_rec.pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
14744                             l_task_in_rec.pm_task_reference IS NULL
14745                         THEN
14746                               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14747                               THEN
14748                                 pa_interface_utils_pub.map_new_amg_msg
14749                                   ( p_old_message_code => 'PA_TASK_REF_AND_ID_MISSING'
14750                                    ,p_msg_attribute    => 'CHANGE'
14751                                    ,p_resize_flag      => 'N'
14752                                    ,p_msg_context      => 'PROJ'
14753                                    ,p_attribute1       => l_amg_segment1
14754                                    ,p_attribute2       => ''
14755                                    ,p_attribute3       => ''
14756                                    ,p_attribute4       => ''
14757                                    ,p_attribute5       => '');
14758                               END IF;
14759                               px_tasks_out_tbl(i).return_status :=  FND_API.G_RET_STS_ERROR ;
14760                               RAISE Invalid_Arg_Exc_WP;
14761                         ELSE
14762                               -- We need the differenciator only in the update project context.
14763                               -- This is not done in create context to avoid cursor opening for each task.
14764                               IF p_structure_version_id is not null THEN
14765                                    OPEN cur_wp_task_csr(p_project_id,l_task_in_rec.pm_task_reference);
14766                                    FETCH cur_wp_task_csr INTO l_task_in_rec.pa_task_id;
14767                                    CLOSE cur_wp_task_csr;
14768                               END IF;
14769                         END IF;
14770                     END IF;
14771 				END IF; -- Added for Huawei 14556729
14772                END;
14773                -- End fix for Bug 2982072.
14774 
14775                -- Included the following initializations after UT.
14776                -- In the absence of these we will get unique constraint violation.
14777                l_task_version_id        := null;
14778                l_relationship_id        := null;
14779                l_proj_elem_ver_rvn      := null;
14780                l_proj_elem_ver_rowid    := null;
14781                l_obj_rel_rvn            := null;
14782 
14783                -- Initialize the return status for the task record to success.
14784                px_tasks_out_tbl(i).return_status       := FND_API.G_RET_STS_SUCCESS;
14785 
14786 
14787                -- Validation block
14788                -- validate security, task_reference and task names in appropriate contexts.
14789                IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
14790                   l_task_in_rec.pa_task_id IS NULL -- new tasks to be crated
14791                THEN
14792                     -- Added to check the security as it is not done when called from update_project
14793                     IF l_add_task_security = 'N'
14794                     THEN
14795                          pa_interface_utils_pub.map_new_amg_msg(
14796                                 p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
14797                                 ,p_msg_attribute    => 'CHANGE'
14798                                 ,p_resize_flag      => 'Y'
14799                                 ,p_msg_context      => 'GENERAL'
14800                                 ,p_attribute1       => ''
14801                                 ,p_attribute2       => ''
14802                                 ,p_attribute3       => ''
14803                                 ,p_attribute4       => ''
14804                                 ,p_attribute5       => '');
14805                          RAISE Invalid_Arg_Exc_WP;
14806                     END IF;
14807                     --rtarway, for DHI ER, BUG 4413568
14808             IF (PA_PROJECT_PUB.G_TASK_STR_UPDATE_MODE  = 'PA_UPD_TASK_ATTR') THEN   --bug 4534919
14809             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
14810             p_msg_name => 'PA_WBS_CANT_CHANGE');
14811             RAISE Invalid_Arg_Exc_WP;
14812             END IF;
14813                     -- task reference and task names need to be validated only for workplan cases. For financial cases
14814                     -- these validations are done in add_task_round_one/two.
14815                     IF p_structure_type = 'WORKPLAN' THEN
14816 
14817                          -- Task reference should be non null in AMG flow. For financial tasks this
14818                          -- is checked in add_task_round_one API.
14819                          IF l_task_in_rec.pm_task_reference IS NULL
14820                          OR l_task_in_rec.pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14821                          THEN
14822                               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14823                               THEN
14824                                  pa_interface_utils_pub.map_new_amg_msg
14825                                   ( p_old_message_code => 'PA_TASK_REF_IS_NULL'
14826                                    ,p_msg_attribute    => 'CHANGE'
14827                                    ,p_resize_flag      => 'N'
14828                                    ,p_msg_context      => 'PROJ'
14829                                    ,p_attribute1       => l_amg_segment1
14830                                    ,p_attribute2       => ''
14831                                    ,p_attribute3       => ''
14832                                    ,p_attribute4       => ''
14833                                    ,p_attribute5       => '');
14834                               END IF;
14835                               px_tasks_out_tbl(i).return_status := FND_API.G_RET_STS_ERROR;
14836                               RAISE Invalid_Arg_Exc_WP;
14837                          END IF;
14838 
14839                          --ADUT. The task name cannot be null. For financial tasks this is
14840                          --checked in add_task_round_one API.
14841                          IF l_task_in_rec.task_name IS NULL
14842                          OR l_task_in_rec.task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14843                          THEN
14844 
14845                               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14846                               THEN
14847                                  pa_interface_utils_pub.map_new_amg_msg
14848                                   ( p_old_message_code => 'PA_TASK_NAME_IS_NULL'
14849                                    ,p_msg_attribute    => 'CHANGE'
14850                                    ,p_resize_flag      => 'N'
14851                                    ,p_msg_context      => 'TASK'
14852                                    ,p_attribute1       => l_amg_segment1
14853                                    ,p_attribute2       => l_task_in_rec.pm_task_reference
14854                                    ,p_attribute3       => ''
14855                                    ,p_attribute4       => ''
14856                                    ,p_attribute5       => '');
14857                               END IF;
14858 
14859                               px_tasks_out_tbl(i).return_status := FND_API.G_RET_STS_ERROR;
14860                               RAISE Invalid_Arg_Exc_WP;
14861                          END IF;
14862                     END IF; -- IF p_structure_type = 'WORKPLAN' THEN
14863 
14864                -- for update case only security check is required.
14865                ELSE -- IF l_task_in_rec.pa_task_id IS NULL
14866 
14867                     IF l_update_task_security = 'N'
14868                     THEN
14869                          pa_interface_utils_pub.map_new_amg_msg(
14870                                 p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
14871                                 ,p_msg_attribute    => 'CHANGE'
14872                                 ,p_resize_flag      => 'Y'
14873                                 ,p_msg_context      => 'GENERAL'
14874                                 ,p_attribute1       => ''
14875                                 ,p_attribute2       => ''
14876                                 ,p_attribute3       => ''
14877                                 ,p_attribute4       => ''
14878                                 ,p_attribute5       => '');
14879                          RAISE Invalid_Arg_Exc_WP;
14880                     END IF;
14881 
14882                END IF; -- IF l_task_in_rec.pa_task_id IS NULL
14883 
14884                IF l_debug_mode = 'Y' THEN
14885                     pa_debug.g_err_stage:= 'Done with the validations';
14886                     pa_debug.write(l_module_name,pa_debug.g_err_stage,
14887                                                l_debug_level3);
14888                END IF;
14889 
14890                -- This block does following:
14891                -- 1. Populate l_cur_pa_tasks_rec which has task_number, long_task_name, description, parent_task_id
14892                --    carrying_out_organization_id, pm_task_reference, address_id, task_manager_person_id
14893                -- 2. l_parent_task_id
14894                -- 3. l_task_id -- the task that is being processed.
14895                -- l_proj_elem_rvn of record of pa_proj_elements to be updated
14896                -- before calling api PA_TASK_PUB1.update_task
14897 
14898                IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
14899                   l_task_in_rec.pa_task_id IS NULL -- new tasks to be crated
14900                THEN
14901 
14902                     -- If the structure type is workplan we need to derive the values for certain fields. For financial
14903                     -- context they have already been done and is available in the database - So we'll just query it up.
14904                     IF p_structure_type = 'WORKPLAN' THEN
14905 
14906                          -- Derive the task number for the current task
14907                          IF l_task_in_rec.pa_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.pa_task_number IS NULL
14908                          THEN
14909                             l_cur_pa_tasks_rec.task_number := l_task_in_rec.pm_task_reference;
14910                         --                         ELSE  Bug 6193314  need to comment out
14911 			     /* bug#5243018 : Reverting the fix in Bug 4120380
14912                             l_cur_pa_tasks_rec.task_number := '-'||l_task_in_rec.pa_task_number; -- Bug 4120380 aditi l_task_in_rec.pa_task_number; */
14913 			      --  l_cur_pa_tasks_rec.task_number := l_task_in_rec.pa_task_number;  -- Bug 6193314  need to comment out
14914                 /* any new task being created will also be prefixed with '-'. This is for the case below:
14915                  1.0
14916                    1.1
14917                              2.0    .
14918                  If we insert a new top task , specifying its task_number as 1.1, and update 1.1 to 2.0 and 2.0 to 3.0.*/
14919                          END IF;
14920 
14921                          -- Derive the parent task id
14922                          IF (l_task_in_rec.pa_parent_task_id IS NOT NULL
14923                              AND l_task_in_rec.pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14924                          THEN
14925                               l_cur_pa_tasks_rec.parent_task_id := l_task_in_rec.pa_parent_task_id;
14926                          ELSIF (l_task_in_rec.pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14927                                 AND l_task_in_rec.pm_parent_task_reference IS NOT NULL)
14928                          THEN
14929                               --convert pm_parent_task_reference to parent_task_id.
14930                               --All the parent tasks are created first then child tasks are created. See TRM for AMG load_task api.
14931 
14932                               -- 3721124 changed function call from  PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref
14933                               -- to PA_PROJECT_PVT.Convert_pm_taskref_to_id_all to retrieve task id for task reference
14934                               -- because PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref may return financial task id
14935                               -- in case of SHARED structure
14936                               -- new api call takes structure type as parameter, so it will return task id for the passed structure type only
14937 
14938                               -- PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref(
14939                               --       p_pm_parent_task_reference      =>  l_task_in_rec.pm_parent_task_reference
14940                               --      ,p_project_id                    =>  p_project_id
14941                               --      ,x_parent_task_id                =>  l_cur_pa_tasks_rec.parent_task_id
14942                               --      ,x_return_status                 =>  x_return_status
14943                               --    );
14944 
14945                                  PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
14946                                           p_pa_project_id      => p_project_id
14947                                         , p_structure_type     => 'WORKPLAN'
14948                                      --   3721124 p_pa_task_id will be null in this context
14949                                      -- , p_pa_task_id         => l_cur_pa_tasks_rec.parent_task_id
14950                                         , p_pm_task_reference  => l_task_in_rec.pm_parent_task_reference
14951                                         , p_out_task_id        => l_cur_pa_tasks_rec.parent_task_id
14952                                         , p_return_status      => x_return_status );
14953 
14954                               px_tasks_out_tbl(i).return_status := x_return_status;
14955                               IF x_return_status <> FND_API.G_RET_STS_SUCCESS
14956                               THEN
14957                                    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14958                                    THEN
14959                                               pa_interface_utils_pub.map_new_amg_msg
14960                                               ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
14961                                                ,p_msg_attribute    => 'CHANGE'
14962                                                ,p_resize_flag      => 'N'
14963                                                ,p_msg_context      => 'TASK'
14964                                                ,p_attribute1       => l_amg_segment1
14965                                                ,p_attribute2       => l_cur_pa_tasks_rec.task_number
14966                                                ,p_attribute3       => ''
14967                                                ,p_attribute4       => ''
14968                                                ,p_attribute5       => '');
14969                                    END IF;
14970                                    RAISE Invalid_Arg_Exc_WP;
14971                               END IF;
14972                          ELSE  -- no parent task information provided for the current task.
14973                                -- Current task is a top task. parent id is null.
14974                               l_cur_pa_tasks_rec.parent_task_id := null;
14975                          END IF;
14976 
14977                          -- Included the condition during UT to avoid precision errors.
14978                          IF l_task_in_rec.carrying_out_organization_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14979                               l_cur_pa_tasks_rec.carrying_out_organization_id     := NULL;
14980                          ELSE
14981                               l_cur_pa_tasks_rec.carrying_out_organization_id     := l_task_in_rec.carrying_out_organization_id;
14982                          END IF;
14983 
14984                          -- Included the condition during UT to avoid precision errors.
14985                          IF l_task_in_rec.address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14986                               l_cur_pa_tasks_rec.address_id                       := NULL;
14987                          ELSE
14988                               l_cur_pa_tasks_rec.address_id                       := l_task_in_rec.address_id;
14989                          END IF;
14990                          -- Included the condition during UT to avoid precision errors.
14991                          IF l_task_in_rec.task_manager_person_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14992                               l_cur_pa_tasks_rec.task_manager_person_id           := NULL;
14993                          ELSE
14994                               l_cur_pa_tasks_rec.task_manager_person_id           := l_task_in_rec.task_manager_person_id;
14995                          END IF;
14996                          l_task_id       := NULL;  -- null for workplan create task case.
14997                          l_cur_pa_tasks_rec.pm_task_reference                := l_task_in_rec.pm_task_reference;
14998                /*Commented for bug  2982057 l_cur_pa_tasks_rec.long_task_name                   := l_task_in_rec.long_task_name;*/
14999              /* Code addition for bug 2982057 starts */
15000 
15001             if l_task_in_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.long_task_name IS NULL then
15002                 l_cur_pa_tasks_rec.long_task_name                   := l_task_in_rec.task_name;
15003              else
15004                             l_cur_pa_tasks_rec.long_task_name                   := l_task_in_rec.long_task_name;
15005              end if;
15006 
15007              /* Code addition for bug 2982057 ends */
15008 
15009                          l_cur_pa_tasks_rec.description                      := l_task_in_rec.task_description;
15010 
15011                     ELSE -- structure type is financial
15012                          IF l_debug_mode = 'Y' THEN
15013                               pa_debug.g_err_stage:= 'Task Id in out table: '||px_tasks_out_tbl(i).pa_task_id;
15014                               pa_debug.write(l_module_name,pa_debug.g_err_stage,
15015                                                          l_debug_level3);
15016                          END IF;
15017 
15018                          l_task_id  := px_tasks_out_tbl(i).pa_task_id;
15019                          open cur_pa_tasks(p_project_id,l_task_id);
15020                          fetch cur_pa_tasks into l_cur_pa_tasks_rec;
15021                          close cur_pa_tasks;
15022 
15023                          IF l_debug_mode = 'Y' THEN
15024                               pa_debug.g_err_stage:= 'Task Id in local var '|| l_task_id;
15025                               pa_debug.write(l_module_name,pa_debug.g_err_stage,
15026                                                          l_debug_level3);
15027                          END IF;
15028                           /** Code changes for bug 4120380. For new tasks similar case mentioned above for workplan.**/
15029 			  /* bug#5243018 : Reverting the fix in Bug 4120380
15030             IF l_task_in_rec.pa_task_number IS NOT NULL AND
15031                             l_task_in_rec.pa_task_number <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15032                         THEN
15033                           l_cur_pa_tasks_rec.task_number := '-'||l_task_in_rec.pa_task_number;
15034              END IF; */
15035                       /**  Code end for bug 4120380 by aditi **/
15036                     END IF;
15037 
15038                     l_parent_task_id := l_cur_pa_tasks_rec.parent_task_id;
15039 
15040                     IF l_debug_mode = 'Y' THEN
15041                          pa_debug.g_err_stage:= 'Parent Task Id : '||l_parent_task_id;
15042                          pa_debug.write(l_module_name,pa_debug.g_err_stage,
15043                                                     l_debug_level3);
15044                          pa_debug.g_err_stage:= 'Task Number : '||l_cur_pa_tasks_rec.task_number;
15045                          pa_debug.write(l_module_name,pa_debug.g_err_stage,
15046                                                     l_debug_level3);
15047                     END IF;
15048 
15049                     l_WBS_changed_flag := 'Y';   --bug 3010538
15050 
15051                ELSE -- IF l_task_in_rec.pa_task_id IS NULL
15052 
15053                     -- If the structure type is workplan we need to derive the values for parent task id . For financial
15054                     -- context they have already been done and is available in the database - So we'll just query it up.
15055                     IF p_structure_type = 'WORKPLAN' THEN
15056 
15057                          -- Derive the parent task id
15058                          IF (l_task_in_rec.pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15059                               AND l_task_in_rec.pa_parent_task_id IS NOT NULL)
15060                           THEN
15061                               l_cur_pa_tasks_rec.parent_task_id := l_task_in_rec.pa_parent_task_id;
15062 
15063                          ELSIF (l_task_in_rec.pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15064                               AND l_task_in_rec.pm_parent_task_reference IS NOT NULL)
15065                           THEN
15066                               --convert pm_parent_task_reference to parent_task_id.
15067                               --All the parent tasks are created first then child tasks are created. See TRM for AMG load_task api.
15068 
15069                               -- 3721124 changed function call from  PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref
15070                               -- to PA_PROJECT_PVT.Convert_pm_taskref_to_id_all to retrieve task id for task reference
15071                               -- because PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref may return financial task id
15072                               -- in case of SHARED structure
15073                               -- new api call takes structure type as parameter, so it will return task id for the passed structure type only
15074 
15075                               --PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref(
15076                               --   p_pm_parent_task_reference      =>  l_task_in_rec.pm_parent_task_reference
15077                               --  ,p_project_id                    =>  p_project_id
15078                               --  ,x_parent_task_id                =>  l_cur_pa_tasks_rec.parent_task_id
15079                               --  ,x_return_status                 =>  x_return_status
15080                               --  );
15081 
15082 
15083                                 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
15084                                       p_pa_project_id      => p_project_id
15085                                     , p_structure_type     => 'WORKPLAN'
15086                                  --   3721124 p_pa_task_id will be null in this context
15087                                  -- , p_pa_task_id         => l_cur_pa_tasks_rec.parent_task_id
15088                                     , p_pm_task_reference  => l_task_in_rec.pm_parent_task_reference
15089                                     , p_out_task_id        => l_cur_pa_tasks_rec.parent_task_id
15090                                     , p_return_status      => x_return_status );
15091 
15092                               px_tasks_out_tbl(i).return_status := x_return_status;
15093                               IF x_return_status <> FND_API.G_RET_STS_SUCCESS
15094                                THEN
15095                                    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
15096                                     THEN
15097                                         pa_interface_utils_pub.map_new_amg_msg
15098                                              ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
15099                                              ,p_msg_attribute    => 'CHANGE'
15100                                              ,p_resize_flag      => 'N'
15101                                              ,p_msg_context      => 'TASK'
15102                                              ,p_attribute1       => l_amg_segment1
15103                                              ,p_attribute2       => l_cur_pa_tasks_rec.task_number
15104                                              ,p_attribute3       => ''
15105                                              ,p_attribute4       => ''
15106                                              ,p_attribute5       => '');
15107                                    END IF;
15108                                    Raise Invalid_Arg_Exc_WP;
15109                               END IF;
15110                          ELSIF (l_task_in_rec.pm_parent_task_reference IS NULL)
15111                           THEN --Also the values in l_task_in_rec.parent_task_id is null or miss_num so move it as top task
15112                               l_cur_pa_tasks_rec.parent_task_id := null;
15113 
15114                          ELSE -- when l_task_in_rec.pm_parent_task_reference is miss_char
15115                               -- no parent task information provided for the current task.
15116                               -- get parent information from database
15117                               DECLARE
15118 
15119                                    l_task_ver_id_tmp             pa_proj_element_versions.element_version_id%TYPE;
15120                                    l_dummy_number                NUMBER;
15121                                    l_db_parent_task_ver_id_tmp   pa_proj_element_versions.element_version_id%TYPE;
15122                                    l_relationship_id_tmp         pa_object_relationships.object_relationship_id%TYPE;
15123 
15124                               BEGIN
15125 
15126                                    OPEN cur_pa_task_ver( l_structure_version_id, l_task_in_rec.pa_task_id );
15127                                    FETCH cur_pa_task_ver INTO l_task_ver_id_tmp, l_dummy_number;
15128                                    CLOSE cur_pa_task_ver;
15129 
15130                                    --Get the database parent task version id
15131                                    OPEN cur_parent_object_rel( l_task_ver_id_tmp );
15132                                    FETCH cur_parent_object_rel INTO l_db_parent_task_ver_id_tmp,l_relationship_id_tmp,l_dummy_number,
15133                                                                     l_dummy_number; -- Bug 3075609. Reflected the change in cursor.
15134                                    CLOSE cur_parent_object_rel;
15135 
15136                                    --Get the parent task id from parent task version id
15137                                    OPEN cur_elem_ver_to_task_id(l_db_parent_task_ver_id_tmp ) ;
15138                                    FETCH cur_elem_ver_to_task_id INTO l_cur_pa_tasks_rec.parent_task_id;
15139                                    CLOSE cur_elem_ver_to_task_id;
15140                               END;
15141 
15142                          END IF;
15143                          DECLARE
15144                               -- Bug 2982072. The following cursor is used to obtain the task name
15145                               -- and number for a given task element from the database. These will be used
15146                               -- if the user has not passed any value for these parameters.
15147                               CURSOR cur_proj_elem_info(c_task_id pa_proj_elements.proj_element_id%TYPE)
15148                               IS
15149                               SELECT  element_number, name
15150                               FROM    pa_proj_elements
15151                               WHERE   proj_element_id = c_task_id;
15152 
15153                               l_proj_elem_info    cur_proj_elem_info%ROWTYPE;
15154                          BEGIN
15155                               -- Bug 2982072. Open the cursor only if any of task number or name needs to
15156                               -- be fetched for the task.
15157                               IF (l_task_in_rec.pa_task_number is null OR
15158                                   l_task_in_rec.pa_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
15159                                   (l_task_in_rec.long_task_name is null OR
15160                                   l_task_in_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15161                               THEN
15162                                    OPEN  cur_proj_elem_info(l_task_in_rec.pa_task_id);
15163                                    FETCH cur_proj_elem_info into l_proj_elem_info;
15164                                    CLOSE cur_proj_elem_info;
15165 
15166                               END IF;
15167 
15168                               -- Bug 2982072. If task number and task name are passed as null then
15169                               -- obtain the values from the database and use them in update_task api.
15170                               IF l_task_in_rec.pa_task_number is null OR
15171                                  l_task_in_rec.pa_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15172                               THEN
15173                                       -- l_task_in_rec.pa_task_number := SUBSTRB(l_proj_elem_info.element_number,1,25); -- Substrb added for Bug 5152448
15174  	                                    l_task_in_rec.pa_task_number := l_proj_elem_info.element_number; -- Substrb removed for Bug 6193314
15175                                  /** added for Bug 4120380 **/
15176 			       /* bug#5243018 : Reverting the fix in Bug 4120380
15177                               ELSE
15178                     OPEN  cur_proj_elem_info(l_task_in_rec.pa_task_id);
15179                                 FETCH cur_proj_elem_info into l_proj_elem_info;
15180                                 CLOSE cur_proj_elem_info;
15181                  --dbms_output.put_line(('Value of l_proj_elem_info.element_number'||l_proj_elem_info.element_number);
15182 				If l_task_in_rec.pa_task_number <> SUBSTRB(l_proj_elem_info.element_number,1,25) THEN -- Substrb added for Bug 5152448
15183                                     l_task_in_rec.pa_task_number := '-'||l_task_in_rec.pa_task_number;
15184                                 End if; */
15185                 /** end of changes for Bug 4120380  **/
15186                               END IF;
15187 
15188                               IF l_task_in_rec.long_task_name is null OR
15189                                  l_task_in_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15190                               THEN
15191                   /* Start of changes for bug 4503580 */
15192                                    -- l_task_in_rec.long_task_name := NVL(l_task_in_rec.task_name, l_proj_elem_info.name); --bug 3969651
15193                    IF l_task_in_rec.task_name is null OR
15194                                       l_task_in_rec.task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15195                                    THEN
15196                                       l_task_in_rec.long_task_name := l_proj_elem_info.name;
15197                    ELSE
15198                       l_task_in_rec.long_task_name := l_task_in_rec.task_name;
15199                    END IF;
15200                   /* End of changes for bug 4503580 */
15201                             /* Redundant but added for clarity -Added the else condition for bug 2982057*/
15202                               ELSE
15203                                    l_task_in_rec.long_task_name := l_task_in_rec.long_task_name;
15204                               END IF;
15205                          END;
15206 
15207                     ELSE--financial
15208                          l_cur_pa_tasks_rec := null; -- added for bug 15899830
15209                          open cur_pa_tasks(p_project_id,l_task_in_rec.pa_task_id);
15210                          fetch cur_pa_tasks into l_cur_pa_tasks_rec;
15211                          close cur_pa_tasks;
15212 
15213                          -- Bug 2982072. If task number and task name are passed as null then
15214                          -- obtain the values from the database and use them in update_task api.
15215                          IF l_task_in_rec.pa_task_number is null OR
15216                             l_task_in_rec.pa_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15217                          THEN
15218                               l_task_in_rec.pa_task_number := l_cur_pa_tasks_rec.task_number;
15219                           /* Code added for bug 4120380 **/
15220 			   /* bug#5243018 : Reverting the fix in Bug 4120380
15221                           ELSE
15222                           OPEN  cur_proj_elements_info(l_task_in_rec.pa_task_id);
15223                           FETCH cur_proj_elements_info into l_proj_elements_info;
15224                           CLOSE cur_proj_elements_info;
15225 			  If l_task_in_rec.pa_task_number <> SUBSTRB(l_proj_elements_info.element_number,1,25) THEN -- Substrb added for Bug 5152448
15226                                 l_task_in_rec.pa_task_number := '-'||l_task_in_rec.pa_task_number;
15227                           End if; */
15228             /* Code end for bug 4120380 **/
15229                          END IF;
15230 
15231                          IF l_task_in_rec.long_task_name is null OR
15232                             l_task_in_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15233                          THEN
15234                               l_task_in_rec.long_task_name := l_cur_pa_tasks_rec.long_task_name;
15235                         /* Redundant but added for clarity -Added the else condition for bug 2982057*/
15236                          ELSE
15237                   l_task_in_rec.long_task_name := l_task_in_rec.long_task_name;
15238                          END IF;
15239 
15240                     END IF;
15241                     l_parent_task_id := l_cur_pa_tasks_rec.parent_task_id;
15242                     l_task_id        := l_task_in_rec.pa_task_id;
15243 
15244 		    l_Share_Code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id);
15245 		    IF ((l_Share_Code = 'SHARE_PARTIAL') and (l_parent_task_id is null OR
15246 			      l_parent_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )) --bug#8647597
15247 			THEN
15248 				l_parent_task_id := l_task_in_rec.pa_parent_task_id;
15249 		    END IF;
15250 
15251                END IF; -- before calling create or update TASK
15252 
15253 /*Bug 11689028 start*/
15254         handle_task_number_change(p_project_id, l_task_in_rec.pa_task_id, l_task_in_rec.pa_task_number, p_tasks_in_tbl , l_structure_id, l_debug_mode, x_return_status) ;
15255         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15256           IF l_debug_mode = 'Y' THEN
15257             pa_debug.g_err_stage := 'Error calling handle_task_number_change : ' || l_task_in_rec.pa_task_id ;
15258             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
15259           END IF;
15260           Raise Invalid_Arg_Exc_WP;
15261         END IF;
15262 /*Bug 11689028 end */
15263 
15264                -- In the following block the create task or update_task APIs are called.
15265                -- After call to these APIs populate following
15266                -- px_tasks_out_tbl(i).pa_task_id
15267                -- px_tasks_out_tbl(i).pm_task_reference
15268                -- for workplan create task case l_task_id is output from create task API
15269                IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
15270                   l_task_in_rec.pa_task_id IS NULL -- Create Task Context
15271                 THEN
15272                     IF p_create_task_version_only = 'N' THEN
15273 
15274                           IF l_debug_mode = 'Y' THEN
15275                             pa_debug.g_err_stage := 'Calling API PA_TASK_PUB1.create_task';
15276                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
15277                           END IF;
15278                           PA_TASK_PUB1.create_task(
15279                                p_api_version           => p_api_version_number
15280                               ,p_commit                => p_commit
15281                               ,p_validate_only         => FND_API.G_FALSE
15282                               ,p_calling_module        => p_calling_module
15283                               ,p_debug_mode            => l_debug_mode
15284                               ,p_init_msg_list         => FND_API.G_FALSE
15285                               ,p_object_type           => 'PA_TASKS'
15286                               ,p_project_id            => p_project_id
15287                               ,p_structure_id          => l_structure_id
15288                               ,p_task_number           => l_task_in_rec.pa_task_number -- l_cur_pa_tasks_rec.task_number bug 6193314
15289                               ,p_task_name             => l_task_in_rec.task_name -- l_cur_pa_tasks_rec.long_task_name  bug 11676550
15290                               ,p_task_description      => l_cur_pa_tasks_rec.description
15291                               ,p_location_id           => l_cur_pa_tasks_rec.address_id
15292                               ,p_task_manager_id       => l_cur_pa_tasks_rec.task_manager_person_id
15293                               ,p_carrying_out_org_id   => l_cur_pa_tasks_rec.carrying_out_organization_id
15294                               ,p_priority_code         => l_task_in_rec.priority_code
15295                               ,p_TYPE_ID               => l_task_in_rec.task_type
15296                               ,p_status_code           => l_task_in_rec.status_code
15297                               ,p_inc_proj_progress_flag=> l_task_in_rec.inc_proj_progress_flag
15298                               ,p_pm_product_code       => p_pm_product_code
15299                               ,p_pm_task_reference     => l_cur_pa_tasks_rec.pm_task_reference
15300                               ,p_closed_date           => l_task_in_rec.closed_date
15301                               ,p_link_task_flag        => l_task_in_rec.link_task_flag
15302                               ,P_UOM_CODE              => l_task_in_rec.wq_uom_code
15303                               ,p_work_item_code        => l_task_in_rec.wq_item_code
15304                               ,p_parent_structure_id   => l_structure_id
15305 ---- Begin Bug 3654243 ---------------------------------------------------------------------
15306                   ,p_Base_Perc_Comp_Deriv_Code => l_task_in_rec.base_percent_comp_deriv_code
15307 ---- End Bug 3654243 -----------------------------------------------------------------------
15308                               ---- Begin Bug 13923366
15309                               ,p_pm_source_code => l_task_in_rec.PM_SOURCE_CODE
15310                               ---- End Bug 13923366
15311                               ,x_task_id               => l_task_id            -- *** OUT *** --
15312                               ,x_return_status         => x_return_status
15313                               ,x_msg_count             => x_msg_count
15314                               ,x_msg_data              => x_msg_data
15315                               );
15316 
15317                          -- Added for bug 3057575 :TO show task number while throwing err
15318                          l_err_task_number := l_cur_pa_tasks_rec.task_number;
15319 
15320                          px_tasks_out_tbl(i).return_status       := x_return_status;
15321 
15322                          IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15323                               IF l_debug_mode = 'Y' THEN
15324                                  pa_debug.g_err_stage := 'Error calling create task : ' || l_task_id ;
15325                                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15326                               END IF;
15327                               Raise Invalid_Arg_Exc_WP;
15328                          END IF;
15329 
15330 
15331                          IF l_debug_mode = 'Y' THEN
15332                             pa_debug.g_err_stage := 'task id : ' || l_task_id ;
15333                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
15334                          END IF;
15335 
15336                     END IF; -- p_create_task_version_only = 'N'
15337 
15338                ELSE
15339                     DECLARE
15340                          l_proj_elem_rvn NUMBER;
15341                     BEGIN
15342 
15343                          OPEN cur_rec_ver_num(l_task_in_rec.pa_task_id);
15344                          FETCH cur_rec_ver_num INTO l_proj_elem_rvn;
15345                          CLOSE cur_rec_ver_num;
15346 
15347 			 --  Bug 6717386
15348 			If l_struct_ver_id is null then
15349 			   OPEN cur_struc_ver_wp(p_project_id,'WORKPLAN');
15350 			   FETCH cur_struc_ver_wp INTO l_struct_ver_id;
15351 			   CLOSE cur_struc_ver_wp;
15352 			end if;
15353 
15354 			if p_structure_version_id = l_struct_ver_id then
15355 			   l_status_code := null;
15356 			   else
15357 			   l_status_code := l_task_in_rec.STATUS_CODE;
15358 			end if;
15359 			--  Bug 6717386
15360 
15361                          PA_TASK_PUB1.Update_Task(
15362                              p_calling_module            => 'AMG'
15363                              ,p_init_msg_list            => FND_API.G_FALSE
15364                              ,p_task_id                  => l_task_in_rec.pa_task_id
15365                              ,p_task_number              => l_task_in_rec.pa_task_number
15366                              ,p_task_name                => l_task_in_rec.long_task_name
15367                              ,p_task_description         => l_task_in_rec.task_description
15368                              ,p_task_manager_id          => l_task_in_rec.task_manager_person_id
15369                              ,p_carrying_out_org_id      => l_task_in_rec.carrying_out_organization_id
15370                              ,p_pm_product_code          => l_task_in_rec.PM_SOURCE_CODE
15371                              ,p_pm_task_reference        => l_task_in_rec.pm_task_reference
15372                              ,p_location_id              => l_task_in_rec.address_id
15373                              ,p_priority_code            => l_task_in_rec.PRIORITY_CODE
15374                              ,p_TYPE_ID                  => l_task_in_rec.TASK_TYPE
15375                              ,p_status_code              => l_status_code -- l_task_in_rec.STATUS_CODE bug 6717386
15376                              ,p_inc_proj_progress_flag   => l_task_in_rec.INC_PROJ_PROGRESS_FLAG
15377                              ,p_closed_date              => l_task_in_rec.CLOSED_DATE
15378                              ,p_record_version_number    => l_proj_elem_rvn
15379                              ,P_UOM_CODE                 => l_task_in_rec.WQ_UOM_CODE
15380                              ,p_work_item_code           => l_task_in_rec.WQ_ITEM_CODE
15381                              ----- begin Bug 3654243 --------------------------------------------
15382                          ,p_Base_Perc_Comp_Deriv_Code => l_task_in_rec.base_percent_comp_deriv_code
15383                          ,p_gen_etc_src_code          => l_task_in_rec.gen_etc_source_code
15384                               ----- end Bug 3654243 ----------------------------------------------
15385                              ,x_return_status            => x_return_status
15386                              ,x_msg_count                => x_msg_count
15387                              ,x_msg_data                 => x_msg_data
15388                  ,p_shared                   => l_shared       -- Added for Bug#3451073
15389                  ,p_dates_check            => 'N'   --bug 8301015
15390                                 );
15391 
15392                          -- Added for bug 3057575 :TO show task number while throwing err
15393              l_err_task_number := l_task_in_rec.pa_task_number;
15394 
15395                          px_tasks_out_tbl(i).return_status       := x_return_status;
15396 
15397                          IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15398                                  PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
15399                                                       ,p_msg_name       => 'PA_PS_TASK_NOT_UPDATED'
15400                              /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
15401                               ,p_token1         => 'PROJECT'
15402                               ,p_value1         =>  p_project_id
15403                                       ,p_token2          => 'TASK'
15404                                       ,p_value2          => l_task_in_rec.pa_task_id);
15405                                  IF l_debug_mode = 'Y'
15406                                  THEN
15407                                      pa_debug.g_err_stage := 'Error in task updation : ' || p_tasks_in_tbl(i).pa_task_id ;
15408                                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15409                                  END IF;
15410                                  Raise Invalid_Arg_Exc_WP;
15411 
15412                          END IF;
15413 
15414                     END;
15415                     --rtarway, added for BUG 4106154
15416                       IF ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
15417                            PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
15418                            PA_PROJECT_PUB.G_Published_version_exists = 'Y' AND
15419                --Added by rtarway for BUG 4321313
15420                PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_task_in_rec.pa_task_id)='Y'
15421                )
15422                       THEN
15423  -- Changes for --bug 8301015
15424   --Added for Bug15958106
15425  l_tend_date1:=null;
15426  l_tstart_date1:=null;
15427 OPEN C_GET_TASK_DATES(l_task_in_rec.pa_task_id);
15428 FETCH C_GET_TASK_DATES INTO l_project_id1,l_parent_task_id1,l_tstart_date1,l_tend_date1;
15429  IF C_GET_TASK_DATES%ROWCOUNT > 0 THEN
15430 /*
15431  SELECT pt.project_id,
15432  pt.parent_task_id,
15433 	        pt.start_date,
15434 	        pt.completion_date
15435          INTO   l_project_id1,
15436 	        l_parent_task_id1,
15437 	        l_tstart_date1,
15438 	        l_tend_date1
15439          FROM pa_tasks pt
15440          WHERE pt.task_id = l_task_in_rec.pa_task_id; */
15441 
15442          IF ((nvl(l_task_in_rec.task_start_date,sysdate) <> nvl(l_tstart_date1,sysdate))
15443 	     OR (nvl(l_task_in_rec.task_completion_date,sysdate) <> nvl(l_tend_date1,sysdate))) THEN
15444 
15445            l_tcnt := l_tcnt + 1;
15446 
15447            l_task_dates(l_tcnt).task_id := l_task_in_rec.pa_task_id;
15448 	   l_task_dates(l_tcnt).project_id := l_project_id1;
15449            l_task_dates(l_tcnt).parent_task_id := l_parent_task_id1;
15450            l_task_dates(l_tcnt).old_start_date := l_tstart_date1;
15451            l_task_dates(l_tcnt).old_end_date := l_tend_date1;
15452            l_task_dates(l_tcnt).new_start_date := l_task_in_rec.task_start_date;
15453            l_task_dates(l_tcnt).new_end_date := l_task_in_rec.task_completion_date;
15454 
15455 End IF;
15456 END IF; --Added for Bug15958106
15457 CLOSE C_GET_TASK_DATES;
15458 
15459 -- Changes for --bug 8301015
15460                       --Call Update_One_Task to update financial attributes
15461                                    PA_PROJECT_PVT.Update_One_Task
15462                                    (
15463                                         p_api_version_number            => p_api_version_number,
15464                                         p_commit                        => FND_API.G_FALSE,
15465                                         p_msg_count                     => x_msg_count,
15466                                         p_msg_data                      => x_msg_data,
15467                                         p_return_status                 => x_return_status,
15468                                         p_pm_product_code               => p_pm_product_code,
15469                                         p_pa_project_id                 => p_project_id,
15470                                         p_pa_task_id                    => l_task_in_rec.pa_task_id,
15471                                         p_pm_task_reference             => l_task_in_rec.pm_task_reference,
15472                                         p_task_number                   => l_task_in_rec.pa_task_number,
15473                                         p_task_name                     => l_task_in_rec.task_name,
15474                                         p_long_task_name                => l_task_in_rec.long_task_name,
15475                                         p_task_description              => l_task_in_rec.task_description,
15476                                         p_task_start_date               => l_task_in_rec.task_start_date,
15477                                         p_task_completion_date          => l_task_in_rec.task_completion_date,
15478                                         p_early_start_date              => l_task_in_rec.early_start_date,
15479                                         p_early_finish_date             => l_task_in_rec.early_finish_date,
15480                                         p_late_start_date               => l_task_in_rec.late_start_date,
15481                                         p_late_finish_date              => l_task_in_rec.late_finish_date,
15482                                         p_pm_parent_task_reference      => l_task_in_rec.pm_parent_task_reference,
15483                                         p_pa_parent_task_id             => l_task_in_rec.pa_parent_task_id,
15484                                         p_address_id                    => l_task_in_rec.address_id,
15485                                         p_carrying_out_organization_id  => l_task_in_rec.carrying_out_organization_id,
15486                                         p_service_type_code             => l_task_in_rec.service_type_code,
15487                                         p_task_manager_person_id        => l_task_in_rec.task_manager_person_id,
15488                                         p_billable_flag                 => l_task_in_rec.billable_flag,
15489                                         p_chargeable_flag               => l_task_in_rec.chargeable_flag,
15490                                         p_ready_to_bill_flag            => l_task_in_rec.ready_to_bill_flag,
15491                                         p_ready_to_distribute_flag      => l_task_in_rec.ready_to_distribute_flag,
15492                                         p_limit_to_txn_controls_flag    => l_task_in_rec.limit_to_txn_controls_flag,
15493                                         p_labor_bill_rate_org_id        => l_task_in_rec.labor_bill_rate_org_id,
15494                                         p_labor_std_bill_rate_schdl     => l_task_in_rec.labor_std_bill_rate_schdl,
15495                                         p_labor_schedule_fixed_date     => l_task_in_rec.labor_schedule_fixed_date,
15496                                         p_labor_schedule_discount       => l_task_in_rec.labor_schedule_discount,
15497                                         p_nl_bill_rate_org_id           => l_task_in_rec.non_labor_bill_rate_org_id,
15498                                         p_nl_std_bill_rate_schdl        => l_task_in_rec.non_labor_std_bill_rate_schdl,
15499                                         p_nl_schedule_fixed_date        => l_task_in_rec.non_labor_schedule_fixed_date,
15500                                         p_nl_schedule_discount          => l_task_in_rec.non_labor_schedule_discount,
15501                                         p_labor_cost_multiplier_name    => l_task_in_rec.labor_cost_multiplier_name,
15502                                         p_cost_ind_rate_sch_id          => l_task_in_rec.cost_ind_rate_sch_id,
15503                                         p_rev_ind_rate_sch_id           => l_task_in_rec.rev_ind_rate_sch_id,
15504                                         p_inv_ind_rate_sch_id           => l_task_in_rec.inv_ind_rate_sch_id,
15505                                         p_cost_ind_sch_fixed_date       => l_task_in_rec.cost_ind_sch_fixed_date,
15506                                         p_rev_ind_sch_fixed_date        => l_task_in_rec.rev_ind_sch_fixed_date,
15507                                         p_inv_ind_sch_fixed_date        => l_task_in_rec.inv_ind_sch_fixed_date,
15508                                         p_labor_sch_type                => l_task_in_rec.labor_sch_type,
15509                                         p_nl_sch_type                   => l_task_in_rec.non_labor_sch_type,
15510                                         p_allow_cross_charge_flag       => l_task_in_rec.allow_cross_charge_flag,
15511                                         p_project_rate_type             => l_task_in_rec.project_rate_type,
15512                                         p_project_rate_date             => l_task_in_rec.project_rate_date,
15513                                         p_cc_process_labor_flag         => l_task_in_rec.cc_process_labor_flag,
15514                                         p_labor_tp_schedule_id          => l_task_in_rec.labor_tp_schedule_id,
15515                                         p_labor_tp_fixed_date           => l_task_in_rec.labor_tp_fixed_date,
15516                                         p_cc_process_nl_flag            => l_task_in_rec.cc_process_nl_flag,
15517                                         p_nl_tp_schedule_id             => l_task_in_rec.nl_tp_schedule_id,
15518                                         p_nl_tp_fixed_date              => l_task_in_rec.nl_tp_fixed_date,
15519                                         p_receive_project_invoice_flag  => l_task_in_rec.receive_project_invoice_flag,
15520                                         p_work_type_id                  => l_task_in_rec.work_type_id,
15521                                         p_emp_bill_rate_schedule_id     => l_task_in_rec.emp_bill_rate_schedule_id,
15522                                         p_job_bill_rate_schedule_id     => l_task_in_rec.job_bill_rate_schedule_id,
15523                                         p_non_lab_std_bill_rt_sch_id    => l_task_in_rec.non_lab_std_bill_rt_sch_id,
15524                                         p_taskfunc_cost_rate_type       => l_task_in_rec.taskfunc_cost_rate_type,
15525                                         p_taskfunc_cost_rate_date       => l_task_in_rec.taskfunc_cost_rate_date,
15526                                         p_labor_disc_reason_code        => l_task_in_rec.labor_disc_reason_code,
15527                                         p_non_labor_disc_reason_code    => l_task_in_rec.non_labor_disc_reason_code,
15528                                         p_retirement_cost_flag          => l_task_in_rec.retirement_cost_flag,
15529                                         p_cint_eligible_flag            => l_task_in_rec.cint_eligible_flag,
15530                                         p_cint_stop_date                => l_task_in_rec.cint_stop_date,
15531                                         p_gen_etc_source_code          =>  l_task_in_rec.gen_etc_source_code,
15532                                         p_invoice_method                => l_task_in_rec.invoice_method,
15533                                         p_customer_id                   => l_task_in_rec.customer_id,
15534                                         p_out_pa_task_id                => l_fin_task_id,
15535                                         p_out_pm_task_reference         => l_fin_task_reference
15536                                         --Passing below DFF attributes for SR 3-6822387651
15537                                         ,p_tasks_dff                    => l_task_in_rec.tasks_dff
15538                                         ,p_attribute1                   => l_task_in_rec.attribute1
15539                                         ,p_attribute2                   => l_task_in_rec.attribute2
15540                                         ,p_attribute3                   => l_task_in_rec.attribute3
15541                                         ,p_attribute4                   => l_task_in_rec.attribute4
15542                                         ,p_attribute5                   => l_task_in_rec.attribute5
15543                                         ,p_attribute6                   => l_task_in_rec.attribute6
15544                                         ,p_attribute7                   => l_task_in_rec.attribute7
15545                                         ,p_attribute8                   => l_task_in_rec.attribute8
15546                                         ,p_attribute9                   => l_task_in_rec.attribute9
15547                                         ,p_attribute10                  => l_task_in_rec.attribute10
15548                                         --End of changes 3-6822387651
15549                                    );
15550                                  px_tasks_out_tbl(i).return_status       := x_return_status;
15551 
15552                                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15553                                       PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
15554                                                            ,p_msg_name       => 'PA_PS_TASK_NOT_UPDATED'
15555                                /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
15556                                ,p_token1         => 'PROJECT'
15557                                ,p_value1         =>  p_project_id
15558                                            ,p_token2          => 'TASK'
15559                                            ,p_value2          => l_task_in_rec.pa_task_id);
15560                                       IF l_debug_mode = 'Y'
15561                                       THEN
15562                                           pa_debug.g_err_stage := 'Error in financial task updation : ' || p_tasks_in_tbl(i).pa_task_id ;
15563                                           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15564                                       END IF;
15565                                       Raise Invalid_Arg_Exc_WP;
15566 
15567                                  END IF;
15568 
15569                       END IF;
15570 
15571                     --end add for BUG 4106154
15572 
15573                END IF; -- After  calling create or update TASK
15574                px_tasks_out_tbl(i).pa_task_id          := l_task_id;
15575                px_tasks_out_tbl(i).pm_task_reference   := l_task_in_rec.pm_task_reference;
15576 
15577 
15578                -- Updation of the task is done. Now start processing for updating the task version.
15579                -- Task version requires wbs_level, disp sequence, wbs number, flexfield related information etc to be populated.
15580                -- In the coming code we will populate these variables and will update/insert proj element versions.
15581 
15582                -- Start processing for display sequence, wbs level and wbs number.
15583                -- Following is the way tables store data
15584                -- 1. l_disp_seq -- the current index for which processing is going on.
15585                -- 2. l_display_sequence_tbl(l_task_id) -- display sequence indexed by task ids.
15586                -- 3. l_wbs_level_tbl(l_task_id)        -- wbs level indexed by task id.
15587                -- 4. l_top_task_count                  -- top tasks processed until current loop.
15588                -- 5. l_wbs_number_tbl(l_task_id)       -- wbs number indexed by task id.
15589                -- 6. l_weighting_percentage_tbl(l_task_id) -- weightage indexed by task id.
15590                -- 7. l_child_count_tbl(l_task_id)      -- child count indexed by task id.
15591 
15592                -- The wbs level is wbs level of parent + 1 for non top tasks else it is 1.
15593                -- The wbs number is top_task_cnt when top task else it is wbs_number || '.'
15594                -- || parent task child count + 1
15595                l_disp_seq := l_disp_seq + 1;
15596                l_display_sequence_tbl(l_task_id) := l_disp_seq;
15597 
15598            --Start for Changes for bug 3057575 : Checking whether correct structure has been passed OR NOT
15599            -- As the l_parent_task_id may get populated with l_structure_id for top tasks
15600            -- but as the below code  requires it be null
15601            IF l_parent_task_id = l_structure_id THEN
15602                   IF l_debug_mode = 'Y' THEN
15603                             pa_debug.g_err_stage := 'Parent task Id is upd with struc. id so shld be nulled out  : ' || p_tasks_in_tbl(i).pa_task_id ;
15604                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15605                   END IF;
15606               l_parent_task_id := null;
15607            END IF;
15608 
15609            IF l_hierarchy_count = 1 THEN
15610                     IF l_debug_mode = 'Y' THEN
15611                             pa_debug.g_err_stage := 'l_hierarchy_count is 1  : ' || p_tasks_in_tbl(i).pa_task_id ;
15612                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15613 
15614                             pa_debug.g_err_stage := 'l_parent_task_id is : ' || l_parent_task_id;
15615                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15616 
15617                             IF  task_parent_id_tbl.EXISTS(l_hierarchy_count) THEN
15618                 pa_debug.g_err_stage := 'The task in hierarchy is  : ' || task_parent_id_tbl(l_hierarchy_count);
15619                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15620                 END IF;
15621 
15622                     END IF;
15623 
15624                     IF l_parent_task_id IS NOT NULL AND task_parent_id_tbl.EXISTS(l_hierarchy_count) AND l_parent_task_id = task_parent_id_tbl(l_hierarchy_count) THEN
15625                  l_hierarchy_count := l_hierarchy_count +1;
15626                 ELSE
15627                  IF l_parent_task_id IS NOT NULL THEN
15628 
15629                                PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
15630                                                     ,p_msg_name       => 'PA_TASK_NOT_IN_HIERARCHY_ORD'
15631                             ,p_token1         => 'TASK'
15632                             ,p_value1         => l_err_task_number);                               Raise Invalid_Arg_Exc_WP;
15633                                Raise Invalid_Arg_Exc_WP;
15634              END IF;
15635                     END IF;
15636                ELSE
15637                IF l_debug_mode = 'Y' THEN
15638                             pa_debug.g_err_stage := 'l_hierarchy_count is grater then  1  : ' || p_tasks_in_tbl(i).pa_task_id ;
15639                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15640 
15641 
15642                             pa_debug.g_err_stage := 'l_parent_task_id is : ' || l_parent_task_id;
15643                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15644 
15645                             IF  task_parent_id_tbl.EXISTS(l_hierarchy_count) THEN
15646                 pa_debug.g_err_stage := 'The task in hierarchy is  : ' || task_parent_id_tbl(l_hierarchy_count);
15647                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15648                 END IF;
15649 
15650                    END IF;
15651 
15652                IF l_parent_task_id IS NULL THEN
15653                l_hierarchy_count := 1;
15654            ELSE
15655                 l_temp_count := 0;
15656             l_temp_success := 'F';
15657             LOOP
15658                 IF l_parent_task_id = task_parent_id_tbl(l_hierarchy_count) THEN
15659                     l_temp_success := 'T';
15660                     l_hierarchy_count := l_hierarchy_count +1;
15661                     ELSE
15662                         l_hierarchy_count := l_hierarchy_count - 1;
15663                 END IF;
15664                 EXIT WHEN l_temp_success = 'T' OR l_hierarchy_count = 0;
15665 
15666             END LOOP;
15667                         IF l_debug_mode = 'Y' THEN
15668                             pa_debug.g_err_stage := 'Value of l_hierarchy_count   : ' || l_hierarchy_count ;
15669                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
15670                         END IF;
15671 
15672             IF  l_temp_success = 'F' THEN
15673                                PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
15674                                                     ,p_msg_name       => 'PA_TASK_NOT_IN_HIERARCHY_ORD'
15675                             ,p_token1         => 'TASK'
15676                             ,p_value1         => l_err_task_number);
15677                                Raise Invalid_Arg_Exc_WP;
15678 
15679 
15680             END IF;
15681 
15682            END IF; -- End for l_parent_task_id IS NOT NULL
15683 
15684         END IF; --End for l_hierarchy_count = 1
15685                 --End for Changes for bug 3057575 :
15686 
15687 
15688                IF l_parent_task_id is null THEN
15689 
15690             --Added for bug 3057575
15691                     task_parent_id_tbl(l_hierarchy_count) := l_task_id;
15692 
15693             l_wbs_level_tbl(l_task_id) := 1;
15694                     l_top_task_count := l_top_task_count + 1;
15695                     l_wbs_number_tbl(l_task_id) := l_top_task_count;
15696                ELSE -- current task is not a top task.
15697 
15698                 --Added for bug 3057575
15699                     task_parent_id_tbl(l_hierarchy_count) := l_task_id;
15700 
15701             l_wbs_level_tbl(l_task_id) := l_wbs_level_tbl(l_parent_task_id) + 1;
15702                     l_child_count_tbl(l_parent_task_id) := l_child_count_tbl(l_parent_task_id) + 1;
15703                     l_wbs_number_tbl(l_task_id) := l_wbs_number_tbl(l_parent_task_id) || '.' || l_child_count_tbl(l_parent_task_id);
15704                END IF;
15705 
15706                --Set the number of children under the current task to 0.
15707                l_child_count_tbl(l_task_id) := 0;
15708 
15709                -- Bug 3075609. Modifying the task weightage processing logic. Currently the logic
15710                -- overwrites the weightages in the update project context and doesnot consider the
15711                -- progress enabled property of the task. Please refer to bug 3030664 for details
15712                -- about the issue and the fix.
15713 
15714 /*             -- Included check for top task after UT.
15715                -- If this is the first top task set its weightage to 100 else 0.
15716                -- If current task is the only child under the parent set its weightage to 100 else 0.
15717                IF l_parent_task_id is null THEN
15718                     IF l_top_task_count = 1 THEN
15719                          l_weighting_percentage_tbl(l_task_id) := 100;
15720                     ELSE
15721                          l_weighting_percentage_tbl(l_task_id) := 0;
15722                     END IF;
15723                ELSE -- non top tasks.
15724                     IF l_child_count_tbl(l_parent_task_id) = 1 THEN
15725                          l_weighting_percentage_tbl(l_task_id) := 100;
15726                     ELSE
15727                          l_weighting_percentage_tbl(l_task_id) := 0;
15728                     END IF;
15729                END IF;
15730 */
15731                -- The following plsql block takes care of assigning task weightages to the tasks.
15732                DECLARE
15733                     -- This cursor identified the number of progressible tasks under a parent.
15734                     CURSOR get_child_count(c_parent_element_version_id NUMBER)
15735                     IS
15736                     SELECT count(rel.object_id_to1)
15737                     FROM PA_OBJECT_RELATIONSHIPS rel, pa_proj_element_versions pev, pa_proj_elements pe, pa_task_types tt
15738                     WHERE rel.object_id_from1 = c_parent_element_version_id
15739                     AND   rel.object_type_to = 'PA_TASKS'
15740                     AND   rel.relationship_type = 'S'
15741                     AND   rel.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
15742                     AND   rel.object_id_to1 = pev.element_version_id
15743                     AND   pev.proj_element_id = pe.proj_element_id
15744                     AND   pe.type_id = tt.task_type_id
15745                     AND   tt.object_type    = 'PA_TASKS' /* bug 3279978 FP M Enhancement */
15746                     AND   tt.prog_entry_enable_flag = 'Y';
15747 
15748                     l_child_task_count  NUMBER;
15749                     l_parent_version_id pa_proj_element_versions.element_version_id%TYPE;
15750                     l_task_type_id      pa_task_types.task_type_id%TYPE;
15751                BEGIN
15752                     l_existing_task_set_max_wt := 'N';
15753                     IF l_maintain_weightages = 'N' THEN -- no need to maintain weightages.
15754                          l_weighting_percentage_tbl(l_task_id) := 0;
15755                     ELSE
15756                          IF l_parent_task_id is null THEN -- obtain the parent version id
15757                               l_parent_version_id           := l_structure_version_id;
15758                          ELSE
15759                               l_parent_version_id           := l_task_version_id_tbl(l_parent_task_id);
15760                          END IF;
15761 
15762                          IF l_child_indicator_tbl.exists(l_parent_version_id) THEN
15763                               IF l_child_indicator_tbl(l_parent_version_id) = 'Y' THEN
15764                                    l_weighting_percentage_tbl(l_task_id) := 0;
15765                               ELSE
15766                                    open cur_task_type_id(l_task_id);
15767                                    fetch cur_task_type_id into l_task_type_id;
15768                                    close cur_task_type_id;
15769                                    IF pa_task_type_utils.check_tk_type_progressable(l_task_type_id) = 'Y' THEN -- progressible task
15770                                         l_weighting_percentage_tbl(l_task_id) := 100;
15771                                         l_child_indicator_tbl(l_parent_version_id) := 'Y';
15772                                    ELSE -- non progressible task
15773                                         l_weighting_percentage_tbl(l_task_id) := 0;
15774                                    END IF;
15775                               END IF;
15776 
15777                          ELSE -- This is the first child of the parent.
15778                               -- If it is update context, check how many progress enabled tasks the parent has.
15779                               IF p_structure_version_id is not null THEN -- update context
15780                                    open get_child_count(l_parent_version_id);
15781                                    fetch get_child_count into l_child_task_count;
15782                                    close get_child_count;
15783                               END IF;
15784 
15785                               IF p_structure_version_id is not null and nvl(l_child_task_count,0) > 0 THEN -- progressible task exist
15786                                    l_child_indicator_tbl(l_parent_version_id) := 'Y';
15787                                    l_weighting_percentage_tbl(l_task_id) := 0;
15788                               ELSE
15789                                    open cur_task_type_id(l_task_id);
15790                                    fetch cur_task_type_id into l_task_type_id;
15791                                    close cur_task_type_id;
15792                                    IF pa_task_type_utils.check_tk_type_progressable(l_task_type_id) = 'Y' THEN -- progressible task
15793                                         l_weighting_percentage_tbl(l_task_id) := 100;
15794                                         l_child_indicator_tbl(l_parent_version_id) := 'Y';
15795                                         l_existing_task_set_max_wt := 'Y';
15796                                    ELSE -- non progressible task
15797                                         l_weighting_percentage_tbl(l_task_id) := 0;
15798                                         l_child_indicator_tbl(l_parent_version_id) := 'N';
15799                                    END IF;
15800                               END IF;
15801                          END IF;
15802                     END IF;
15803                EXCEPTION
15804                     WHEN OTHERS THEN
15805                          If get_child_count%ISOPEN THEN
15806                               Close get_child_count;
15807                          END IF;
15808                          IF l_debug_mode = 'Y' THEN
15809                               pa_debug.g_err_stage:= 'Error while calculating the task weightage. Task id : '||l_task_id;
15810                               pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level6);
15811                          END IF;
15812                          Raise;
15813                END;
15814 
15815               -- Populate following set of variables required to update element versions:
15816               -- attribute_category , attribute1 ...attribute10, in local variables
15817               -- l_task_version_id, l_proj_elem_ver_rowid, l_proj_elem_ver_rvn -- required only in update task.
15818 
15819                IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
15820                   l_task_in_rec.pa_task_id IS NULL THEN -- Create Task Context
15821                  --Bug 6153503
15822                   IF l_task_in_rec.tasks_dff = 'N' THEN
15823                     -- Handle the dff attributes. Set the local variable to null if passed value is miss char.
15824                     -- These attributes would be used both while creating task version and the schedule version.
15825                     IF l_task_in_rec.attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15826                        l_attribute_category := null;
15827                     ELSE
15828                        l_attribute_category := l_task_in_rec.attribute_category;
15829                     END IF;
15830 
15831                     IF l_task_in_rec.attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15832                        l_attribute1 := null;
15833                     ELSE
15834                        l_attribute1 := l_task_in_rec.attribute1;
15835                     END IF;
15836 
15837                     IF l_task_in_rec.attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15838                        l_attribute2 := null;
15839                     ELSE
15840                        l_attribute2 := l_task_in_rec.attribute2;
15841                     END IF;
15842 
15843                     IF l_task_in_rec.attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15844                        l_attribute3 := null;
15845                     ELSE
15846                        l_attribute3 := l_task_in_rec.attribute3;
15847                     END IF;
15848 
15849                     IF l_task_in_rec.attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15850                        l_attribute4 := null;
15851                     ELSE
15852                        l_attribute4 := l_task_in_rec.attribute4;
15853                     END IF;
15854 
15855                     IF l_task_in_rec.attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15856                        l_attribute5 := null;
15857                     ELSE
15858                        l_attribute5 := l_task_in_rec.attribute5;
15859                     END IF;
15860 
15861                     IF l_task_in_rec.attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15862                        l_attribute6 := null;
15863                     ELSE
15864                        l_attribute6 := l_task_in_rec.attribute6;
15865                     END IF;
15866 
15867                     IF l_task_in_rec.attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15868                        l_attribute7 := null;
15869                     ELSE
15870                        l_attribute7 := l_task_in_rec.attribute7;
15871                     END IF;
15872 
15873                     IF l_task_in_rec.attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15874                        l_attribute8 := null;
15875                     ELSE
15876                        l_attribute8 := l_task_in_rec.attribute8;
15877                     END IF;
15878 
15879                     IF l_task_in_rec.attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15880                        l_attribute9 := null;
15881                     ELSE
15882                        l_attribute9 := l_task_in_rec.attribute9;
15883                     END IF;
15884 
15885                     IF l_task_in_rec.attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15886                        l_attribute10 := null;
15887                     ELSE
15888                        l_attribute10 := l_task_in_rec.attribute10;
15889                     END IF;
15890                     --Bug 6153503
15891                     IF l_task_in_rec.attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15892                        l_attribute11 := null;
15893                     ELSE
15894                        l_attribute11 := l_task_in_rec.attribute11;
15895                     END IF;
15896 
15897                     IF l_task_in_rec.attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15898                        l_attribute12 := null;
15899                     ELSE
15900                        l_attribute12 := l_task_in_rec.attribute12;
15901                     END IF;
15902 
15903                     IF l_task_in_rec.attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15904                        l_attribute13 := null;
15905                     ELSE
15906                        l_attribute13 := l_task_in_rec.attribute13;
15907                     END IF;
15908 
15909                     IF l_task_in_rec.attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15910                        l_attribute14 := null;
15911                     ELSE
15912                        l_attribute14 := l_task_in_rec.attribute14;
15913                     END IF;
15914 
15915                     IF l_task_in_rec.attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15916                        l_attribute15 := null;
15917                     ELSE
15918                        l_attribute15 := l_task_in_rec.attribute15;
15919                     END IF;
15920 
15921                     pa_task_utils.validate_flex_fields(
15922                              p_desc_flex_name        => 'PA_PROJ_ELEM_VER_SCH_DESC_FLEX'
15923                             ,p_attribute_category    => l_attribute_category
15924                             ,p_attribute1            => l_attribute1
15925                             ,p_attribute2            => l_attribute2
15926                             ,p_attribute3            => l_attribute3
15927                             ,p_attribute4            => l_attribute4
15928                             ,p_attribute5            => l_attribute5
15929                             ,p_attribute6            => l_attribute6
15930                             ,p_attribute7            => l_attribute7
15931                             ,p_attribute8            => l_attribute8
15932                             ,p_attribute9            => l_attribute9
15933                             ,p_attribute10           => l_attribute10
15934                             ,p_attribute11           => l_attribute11
15935                             ,p_attribute12           => l_attribute12
15936                             ,p_attribute13           => l_attribute13
15937                             ,p_attribute14           => l_attribute14
15938                             ,p_attribute15           => l_attribute15
15939                             ,p_RETURN_msg            => l_return_msg
15940                             ,p_validate_status       => l_validate_status
15941                             );
15942 
15943                             IF l_validate_status = 'N'
15944                             THEN
15945                                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
15946                                  THEN
15947                                       pa_interface_utils_pub.map_new_amg_msg
15948                                                 ( p_old_message_code => 'PA_INVALID_FF_VALUES'
15949                                                 ,p_msg_attribute    => 'CHANGE'
15950                                                 ,p_resize_flag      => 'N'
15951                                                 ,p_msg_context      => 'FLEX'
15952                                                 ,p_attribute1       => l_return_msg
15953                                                 ,p_attribute2       => ''
15954                                                 ,p_attribute3       => ''
15955                                                 ,p_attribute4       => ''
15956                                                 ,p_attribute5       => '');
15957                                 END IF;
15958                             RAISE FND_API.G_EXC_ERROR;
15959                           END IF;
15960                   END IF;
15961                   --Bug 6153503
15962                ELSE -- update task case
15963                     DECLARE
15964                          --Cursor to get the versioned information of the task
15965                          CURSOR cur_proj_element_version_info(c_structure_version_id pa_proj_element_versions.parent_structure_version_id%TYPE, c_task_id pa_tasks.task_id%TYPE )
15966                              IS
15967                              SELECT rowid,element_version_id,object_type, project_id, proj_element_id, record_version_number,
15968                                      display_sequence, wbs_number, wbs_level, parent_structure_version_id,
15969                                      attribute_category, attribute1, attribute2, attribute3, attribute4, attribute5,
15970                                      attribute6, attribute7, attribute8, attribute9, attribute10, attribute11, attribute12,
15971                                      attribute13, attribute14, attribute15, TASK_UNPUB_VER_STATUS_CODE
15972                              FROM pa_proj_element_versions
15973                              WHERE project_id = p_project_id
15974                              AND proj_element_id = c_task_id
15975                              AND parent_structure_version_id = c_structure_version_id
15976                              AND object_type = 'PA_TASKS';
15977 
15978                          l_cur_proj_elem_ver_info_rec cur_proj_element_version_info%ROWTYPE;
15979 
15980                     BEGIN
15981 
15982                          OPEN cur_proj_element_version_info( l_structure_version_id, l_task_id );
15983                          FETCH cur_proj_element_version_info INTO l_cur_proj_elem_ver_info_rec;
15984                          CLOSE cur_proj_element_version_info;
15985                          --Bug 6153503
15986                          l_task_version_id := l_cur_proj_elem_ver_info_rec.element_version_id;
15987                          OPEN cur_ver_sch_attr_rec(l_task_version_id);
15988                          FETCH cur_ver_sch_attr_rec INTO l_ver_sch_attr_rec;
15989                          CLOSE cur_ver_sch_attr_rec;
15990 
15991                          -- Handle the dff attributes. Set the local variable to null if passed value is miss char.
15992                          -- These attributes would be used both while creating task version and the schedule version.
15993                          --Bug 6153503 start
15994                          IF l_task_in_rec.attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15995                             OR l_task_in_rec.tasks_dff = 'Y' THEN
15996                             l_attribute_category := l_ver_sch_attr_rec.attribute_category;
15997                          ELSE
15998                             l_attribute_category := l_task_in_rec.attribute_category;
15999                          END IF;
16000 
16001                          IF l_task_in_rec.attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16002                             l_attribute1 := l_ver_sch_attr_rec.attribute1;
16003                          ELSE
16004                             l_attribute1 := l_task_in_rec.attribute1;
16005                          END IF;
16006 
16007                          IF l_task_in_rec.attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16008                             l_attribute2 := l_ver_sch_attr_rec.attribute2;
16009                          ELSE
16010                             l_attribute2 := l_task_in_rec.attribute2;
16011                          END IF;
16012 
16013                          IF l_task_in_rec.attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16014                             l_attribute3 := l_ver_sch_attr_rec.attribute3;
16015                          ELSE
16016                             l_attribute3 := l_task_in_rec.attribute3;
16017                          END IF;
16018 
16019                          IF l_task_in_rec.attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16020                             l_attribute4 := l_ver_sch_attr_rec.attribute4;
16021                          ELSE
16022                             l_attribute4 := l_task_in_rec.attribute4;
16023                          END IF;
16024 
16025                          IF l_task_in_rec.attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16026                             l_attribute5 := l_ver_sch_attr_rec.attribute5;
16027                          ELSE
16028                             l_attribute5 := l_task_in_rec.attribute5;
16029                          END IF;
16030 
16031                          IF l_task_in_rec.attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16032                             l_attribute6 := l_ver_sch_attr_rec.attribute6;
16033                          ELSE
16034                             l_attribute6 := l_task_in_rec.attribute6;
16035                          END IF;
16036 
16037                          IF l_task_in_rec.attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16038                             l_attribute7 := l_ver_sch_attr_rec.attribute7;
16039                          ELSE
16040                             l_attribute7 := l_task_in_rec.attribute7;
16041                          END IF;
16042 
16043                          IF l_task_in_rec.attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16044                             l_attribute8 := l_ver_sch_attr_rec.attribute8;
16045                          ELSE
16046                             l_attribute8 := l_task_in_rec.attribute8;
16047                          END IF;
16048 
16049                          IF l_task_in_rec.attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y'  THEN
16050                             l_attribute9 := l_ver_sch_attr_rec.attribute9;
16051                          ELSE
16052                             l_attribute9 := l_task_in_rec.attribute9;
16053                          END IF;
16054 
16055                          IF l_task_in_rec.attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16056                             l_attribute10 := l_ver_sch_attr_rec.attribute10;
16057                          ELSE
16058                             l_attribute10 := l_task_in_rec.attribute10;
16059                          END IF;
16060 
16061                          IF l_task_in_rec.attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16062                             l_attribute11 := l_ver_sch_attr_rec.attribute11;
16063                          ELSE
16064                             l_attribute11 := l_task_in_rec.attribute11;
16065                          END IF;
16066 
16067                          IF l_task_in_rec.attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16068                             l_attribute12 := l_ver_sch_attr_rec.attribute12;
16069                          ELSE
16070                             l_attribute12 := l_task_in_rec.attribute12;
16071                          END IF;
16072 
16073                          IF l_task_in_rec.attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16074                             l_attribute13 := l_ver_sch_attr_rec.attribute13;
16075                          ELSE
16076                             l_attribute13 := l_task_in_rec.attribute13;
16077                          END IF;
16078 
16079                          IF l_task_in_rec.attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16080                             l_attribute14 := l_ver_sch_attr_rec.attribute14;
16081                          ELSE
16082                             l_attribute14 := l_task_in_rec.attribute14;
16083                          END IF;
16084 
16085                          IF l_task_in_rec.attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_task_in_rec.tasks_dff = 'Y' THEN
16086                             l_attribute15 := l_ver_sch_attr_rec.attribute15;
16087                          ELSE
16088                             l_attribute15 := l_task_in_rec.attribute15;
16089                          END IF;
16090 
16091                           pa_task_utils.validate_flex_fields(
16092                              p_desc_flex_name        => 'PA_PROJ_ELEM_VER_SCH_DESC_FLEX'
16093                             ,p_attribute_category    => l_attribute_category
16094                             ,p_attribute1            => l_attribute1
16095                             ,p_attribute2            => l_attribute2
16096                             ,p_attribute3            => l_attribute3
16097                             ,p_attribute4            => l_attribute4
16098                             ,p_attribute5            => l_attribute5
16099                             ,p_attribute6            => l_attribute6
16100                             ,p_attribute7            => l_attribute7
16101                             ,p_attribute8            => l_attribute8
16102                             ,p_attribute9            => l_attribute9
16103                             ,p_attribute10           => l_attribute10
16104                             ,p_attribute11           => l_attribute11
16105                             ,p_attribute12           => l_attribute12
16106                             ,p_attribute13           => l_attribute13
16107                             ,p_attribute14           => l_attribute14
16108                             ,p_attribute15           => l_attribute15
16109                             ,p_RETURN_msg            => l_return_msg
16110                             ,p_validate_status       => l_validate_status
16111                             );
16112 
16113                             IF l_validate_status = 'N'
16114                             THEN
16115                                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16116                                  THEN
16117                                       pa_interface_utils_pub.map_new_amg_msg
16118                                                 ( p_old_message_code => 'PA_INVALID_FF_VALUES'
16119                                                 ,p_msg_attribute    => 'CHANGE'
16120                                                 ,p_resize_flag      => 'N'
16121                                                 ,p_msg_context      => 'FLEX'
16122                                                 ,p_attribute1       => l_return_msg
16123                                                 ,p_attribute2       => ''
16124                                                 ,p_attribute3       => ''
16125                                                 ,p_attribute4       => ''
16126                                                 ,p_attribute5       => '');
16127                                 END IF;
16128                             RAISE FND_API.G_EXC_ERROR;
16129                           END IF;
16130                             --Bug 6153503 end
16131 
16132 
16133                          l_task_unpub_ver_status_code := l_cur_proj_elem_ver_info_rec.TASK_UNPUB_VER_STATUS_CODE;
16134 
16135                          l_task_version_id := l_cur_proj_elem_ver_info_rec.element_version_id;
16136                          l_proj_elem_ver_rowid := l_cur_proj_elem_ver_info_rec.rowid;
16137                          l_proj_elem_ver_rvn   := l_cur_proj_elem_ver_info_rec.record_version_number;
16138 
16139                     END;
16140                END IF; -- before calling PA_PROJ_ELEMENT_VERSIONS_PKG  Insert_Row or Update_Row
16141 
16142                -- In the following block do following validations:
16143                -- for create task case check if its ok to create subtask under the parent task.
16144                -- for update task check if the task is being moved. If moved check if move task is ok.
16145                -- check if the task can be moved under the new parent.
16146                -- Also do the lifecycle validations for update case. OPEN ISSUE
16147 
16148                -- During these validations following variables are also populated which are used later on
16149                -- l_relationship_id, l_obj_rel_rvn;
16150 
16151                IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
16152                   l_task_in_rec.pa_task_id IS NULL THEN -- create task
16153                     IF l_parent_task_id IS NOT NULL THEN
16154                          --Check if it is ok to create a subtask.
16155                          PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok
16156                               (    p_parent_task_ver_id => l_task_version_id_tbl(l_parent_task_id)
16157                                   ,x_return_status      => l_return_status
16158                                   ,x_error_message_code => l_error_msg_code
16159                               );
16160 
16161                           IF (l_return_status <> 'Y') THEN  --Its required to check like this as the called API
16162                                                             --returns return status as Y / N.
16163                               IF l_debug_mode = 'Y' THEN
16164                                    pa_debug.g_err_stage:= 'Cannot create this task under its parent : '||l_task_id;
16165                                    pa_debug.write(l_module_name,pa_debug.g_err_stage,
16166                                                               l_debug_level6);
16167                               END IF;
16168 
16169                               x_return_status := FND_API.G_RET_STS_ERROR;
16170                               px_tasks_out_tbl(i).return_status       := x_return_status;
16171                               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16172                                                    p_msg_name => l_error_msg_code);
16173                               Raise Invalid_Arg_Exc_WP;
16174                           END IF;
16175                     END IF; --l_parent_task_id IS NOT NULL
16176 
16177                ELSE
16178                     DECLARE
16179                          l_db_parent_task_version_id     pa_proj_element_versions.element_version_id%TYPE;
16180                          l_parent_task_version_id        pa_proj_element_versions.element_version_id%TYPE;
16181 
16182                          -- Bug 3075609. This will hold the weightage of the task version currently in database.
16183                          l_db_task_weightage             pa_object_relationships.weighting_percentage%TYPE;
16184                     BEGIN
16185                          IF (l_parent_task_id IS NOT null)
16186                          THEN
16187                               l_parent_task_version_id := l_task_version_id_tbl(l_parent_task_id);
16188                          ELSE -- top task hence populate structure_version_id as parent
16189                                l_parent_task_version_id := l_structure_version_id;
16190                          END IF;
16191 
16192                          --Get the present parent task version id from DB
16193                          OPEN cur_parent_object_rel(l_task_version_id );
16194                          FETCH cur_parent_object_rel INTO l_db_parent_task_version_id,l_relationship_id, l_obj_rel_rvn,l_db_task_weightage;
16195                          CLOSE cur_parent_object_rel;
16196 
16197                          -- Bug 3075609. For all the existing tasks, we will set the weightage from the database.
16198                          l_weighting_percentage_tbl(l_task_id) := l_db_task_weightage;
16199 
16200                          -- Siva : You can set the flag l_WBS_changed_flag to Y inside the following if
16201                          -- Condition. Call the set_update_wbs_flag after the task loop - otherwise for each
16202                          -- of the potential change the set_update_wbs_flag api will be called.(This will equal
16203                          -- the number of tasks in the create project context)
16204                          IF (l_parent_task_version_id <> l_db_parent_task_version_id)
16205                          THEN
16206                                 --rtarway, for DHI ER, BUG 4413568
16207                 IF ( PA_PROJECT_PUB.G_TASK_STR_UPDATE_MODE  = 'PA_UPD_TASK_ATTR' ) THEN  --bug 4534919
16208                     PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16209                                                             p_msg_name => 'PA_WBS_CANT_CHANGE');
16210                                     RAISE Invalid_Arg_Exc_WP;
16211                 END IF;
16212                 -- Lifecycle Phase validation . Check if task has phase associated with it
16213                                 IF (pa_proj_elements_utils.CHECK_ELEMENT_HAS_PHASE(l_task_in_rec.pa_task_id) = 'Y')
16214                                 THEN
16215                                     PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16216                                                             p_msg_name => 'PA_LC_NO_MOVE_PHASE_TASK');
16217                                     RAISE Invalid_Arg_Exc_WP;
16218                                 END IF;
16219 
16220                                 --check if ok to move this task
16221                                 PA_PROJ_ELEMENTS_UTILS.check_move_task_ok(
16222                                          p_task_ver_id => l_task_version_id
16223                                          ,x_return_status => x_return_status
16224                                          ,x_error_message_code => x_msg_data
16225                                          );
16226                                 IF (x_return_status <> 'Y') THEN
16227                                        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16228                                                             p_msg_name => x_msg_data);
16229                                        raise Invalid_Arg_Exc_WP;
16230                                 END IF;
16231 
16232                                 IF (l_parent_task_id IS NOT NULL) THEN
16233                                      PA_PROJ_ELEMENTS_UTILS.CHECK_CREATE_SUBTASK_OK(
16234                                           p_parent_task_ver_id => l_parent_task_version_id
16235                                           ,x_return_status      => x_return_status
16236                                           ,x_error_message_code => x_msg_data);
16237                                      IF (x_return_status <> 'Y') THEN
16238                                           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16239                                                        p_msg_name => x_msg_data);
16240                                           raise Invalid_Arg_Exc_WP;
16241                                      END IF;
16242                                  END IF;
16243 
16244                                  l_WBS_changed_flag := 'Y';  --bug 3010538
16245 
16246                                  -- Bug 3075609. This task is changing its parent. See if the other peer
16247                                  -- tasks need to be processed. The task that is changing its parent will be
16248                                  -- set a tw of 100 if this is the first task in the new branch or 0 otherwise.
16249                                  IF l_maintain_weightages = 'Y' THEN
16250                                       IF nvl(l_existing_task_set_max_wt,'N') = 'Y' THEN
16251                                         l_weighting_percentage_tbl(l_task_id) := 100;
16252                                       ELSE
16253                                         l_weighting_percentage_tbl(l_task_id) := 0;
16254                                       END IF;
16255                                       IF nvl(l_db_task_weightage,0) <> 0 and NOT l_affected_parents_tbl.exists(l_db_parent_task_version_id) THEN
16256                                         l_affected_parents_tbl(l_db_parent_task_version_id) := 'Y';
16257                                       END IF;
16258                                  END IF;
16259                          END IF;
16260                     END;
16261                END IF;
16262 
16263                -- call insert row or update row
16264                -- Set the following local variables after calling PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row
16265                -- l_task_version_id_tbl(l_task_id)
16266                -- px_tasks_out_tbl(i).task_version_id
16267 
16268                IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
16269                   l_task_in_rec.pa_task_id IS NULL -- Create Task Context
16270                 THEN
16271 
16272                     -- Call the table handler to create a task version.
16273                     IF l_debug_mode = 'Y' THEN
16274                        pa_debug.g_err_stage := 'Calling API PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row';
16275                        pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16276                     END IF;
16277                     --added for 4059962 by rtarway
16278                     --Derive financial task flag
16279                     l_Share_Code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id);
16280                     IF l_shared = 'Y'
16281                     THEN
16282                         --If P_Structure_Type = 'WORKPLAN' Or l_Share_Code = 'SHARE_PARTIAL' then
16283                         If l_Share_Code = 'SHARE_PARTIAL' then --Modified IF condition for 4059962 reopen, rtarway
16284                            l_financial_task_flag  := 'N';
16285                         Else
16286                            l_financial_task_flag  := 'Y';
16287                         End If;
16288                     ELSE
16289                         If P_Structure_Type = 'WORKPLAN' THEN
16290                            l_financial_task_flag := 'N';
16291                         Else
16292                            l_financial_task_flag := 'Y';
16293                         End If;
16294                     End IF;
16295                     --end added for 4059962 by rtarway
16296 
16297 /*
16298 	   Bug Fix 5263429
16299            Unable to delete the task from MSP.
16300 */
16301            IF p_is_wp_separate_from_fn = 'N'
16302           THEN
16303               IF p_is_wp_versioning_enabled = 'Y'
16304               THEN
16305                    l_task_unpub_ver_status_code := 'WORKING';
16306               ELSE
16307                    l_task_unpub_ver_status_code := 'PUBLISHED';
16308               END IF;
16309           ELSE ---split
16310                IF p_structure_type = 'FINANCIAL'
16311                THEN
16312                    l_task_unpub_ver_status_code := 'PUBLISHED';
16313                ELSE --workplan only
16314                    IF p_is_wp_versioning_enabled = 'Y'
16315                    THEN
16316                        l_task_unpub_ver_status_code := 'WORKING';
16317                    ELSE
16318                        l_task_unpub_ver_status_code := 'PUBLISHED';
16319                    END IF;
16320                END IF;
16321           END IF;
16322 /*
16323 	End of Bug Fix 5263429
16324 */
16325                     PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row
16326                          (
16327                            X_ROW_ID                     => l_proj_elem_ver_rowid
16328                           ,X_ELEMENT_VERSION_ID         => l_task_version_id
16329                           ,X_PROJ_ELEMENT_ID            => l_task_id
16330                           ,X_OBJECT_TYPE                => 'PA_TASKS'
16331                           ,X_PROJECT_ID                 => p_project_id
16332                           ,X_PARENT_STRUCTURE_VERSION_ID=> l_structure_version_id
16333                           ,X_DISPLAY_SEQUENCE           => l_display_sequence_tbl(l_task_id)
16334                           ,X_WBS_LEVEL                  => l_wbs_level_tbl(l_task_id)
16335                           ,X_WBS_NUMBER                 => l_wbs_number_tbl(l_task_id)
16336                           ,X_ATTRIBUTE_CATEGORY         => l_attribute_category
16337                           ,X_ATTRIBUTE1                 => l_attribute1
16338                           ,X_ATTRIBUTE2                 => l_attribute2
16339                           ,X_ATTRIBUTE3                 => l_attribute3
16340                           ,X_ATTRIBUTE4                 => l_attribute4
16341                           ,X_ATTRIBUTE5                 => l_attribute5
16342                           ,X_ATTRIBUTE6                 => l_attribute6
16343                           ,X_ATTRIBUTE7                 => l_attribute7
16344                           ,X_ATTRIBUTE8                 => l_attribute8
16345                           ,X_ATTRIBUTE9                 => l_attribute9
16346                           ,X_ATTRIBUTE10                => l_attribute10
16347                           ,X_ATTRIBUTE11                => null
16348                           ,X_ATTRIBUTE12                => null
16349                           ,X_ATTRIBUTE13                => null
16350                           ,X_ATTRIBUTE14                => null
16351                           ,X_ATTRIBUTE15                => null
16352                           ,X_TASK_UNPUB_VER_STATUS_CODE => l_task_unpub_ver_status_code
16353                           ,X_SOURCE_OBJECT_ID            => p_project_id
16354                           ,X_SOURCE_OBJECT_TYPE          => 'PA_PROJECTS'
16355                           --,P_Financial_Task_Flag         => PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_task_id)
16356                           --commented and added following for bug 4059962 reopen, rtarway
16357                           ,P_Financial_Task_Flag         => l_financial_task_flag
16358                          );
16359 
16360                     l_task_version_id_tbl(l_task_id) := l_task_version_id;
16361                     px_tasks_out_tbl(i).task_version_id     := l_task_version_id;
16362 
16363                     IF l_debug_mode = 'Y' THEN
16364                        pa_debug.g_err_stage := 'Task Version id : ' || l_task_version_id ;
16365                        pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
16366                     END IF;
16367 
16368                     -- Required to inherit task type attributes only in the case of context create_task from update project
16369                     IF p_structure_version_id IS NOT NULL
16370                     THEN
16371                         IF p_create_task_version_only = 'N'
16372                         THEN
16373                             PA_TASK_PVT1.Inherit_task_type_attr(
16374                                 p_task_id => l_task_id
16375                                 ,p_task_version_id => l_task_version_id
16376                                 ,x_return_status => x_return_status
16377                                 ,x_msg_count => x_msg_count
16378                                 ,x_msg_data => x_msg_data
16379                                 );
16380                             IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
16381                               raise Invalid_Arg_Exc_WP;
16382                             END IF;
16383                         END IF;--for p_create_task_version_only = 'N'
16384                     END IF;-- for p_structure_version_id IS NOT NULL
16385 
16386                ELSE -- in update task case
16387                     -- check for locking
16388                     BEGIN
16389                             SELECT 'x' INTO l_dummy_char
16390                             FROM PA_PROJ_ELEMENT_VERSIONS
16391                             WHERE element_version_id = l_task_version_id
16392                             AND record_version_number = l_proj_elem_ver_rvn
16393                             FOR UPDATE OF record_version_number NOWAIT;
16394                             EXCEPTION
16395                             WHEN TIMEOUT_ON_RESOURCE THEN
16396                                       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16397                                                          p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
16398                                       raise Invalid_Arg_Exc_WP;
16399                             WHEN NO_DATA_FOUND THEN
16400                                       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16401                                                          p_msg_name       => 'PA_XC_RECORD_CHANGED');
16402                                     raise Invalid_Arg_Exc_WP;
16403                             WHEN OTHERS THEN
16404                                       IF SQLCODE = -54 then
16405                                            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16406                                                             p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
16407                                            raise Invalid_Arg_Exc_WP;
16408                                       ELSE
16409                                            raise;
16410                                       END IF;
16411                     END;
16412 
16413                     -- Call the table handler to create a task version.
16414                     IF l_debug_mode = 'Y' THEN
16415                         pa_debug.g_err_stage := 'Calling API PA_PROJ_ELEMENT_VERSIONS_PKG.Update_Row';
16416                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16417                     END IF;
16418 
16419                     -- Bug 3075609. Since atleast one task is being updated, this structure version is an
16420                     -- existing one. Let us maintain a flag to track this so that if this flag is Y we will
16421                     -- not recalculate the task weightages if the basis is MANUAL.
16422                     l_new_structure_version  := 'N';
16423 
16424                     PA_PROJ_ELEMENT_VERSIONS_PKG.Update_Row(
16425                        X_ROW_ID                     => l_proj_elem_ver_rowid
16426                       ,X_ELEMENT_VERSION_ID         => l_task_version_id
16427                       ,X_PROJ_ELEMENT_ID            => l_task_id
16428                       ,X_OBJECT_TYPE                => 'PA_TASKS'
16429                       ,X_PROJECT_ID                 => p_project_id
16430                       ,X_PARENT_STRUCTURE_VERSION_ID=> l_structure_version_id
16431                       ,X_DISPLAY_SEQUENCE           => l_display_sequence_tbl(l_task_in_rec.pa_task_id)
16432                       ,X_WBS_LEVEL                  => l_wbs_level_tbl(l_task_in_rec.pa_task_id)
16433                       ,X_WBS_NUMBER                 => l_wbs_number_tbl(l_task_in_rec.pa_task_id)
16434                       ,X_ATTRIBUTE_CATEGORY         => l_attribute_category
16435                       ,X_ATTRIBUTE1                 => l_attribute1
16436                       ,X_ATTRIBUTE2                 => l_attribute2
16437                       ,X_ATTRIBUTE3                 => l_attribute3
16438                       ,X_ATTRIBUTE4                 => l_attribute4
16439                       ,X_ATTRIBUTE5                 => l_attribute5
16440                       ,X_ATTRIBUTE6                 => l_attribute6
16441                       ,X_ATTRIBUTE7                 => l_attribute7
16442                       ,X_ATTRIBUTE8                 => l_attribute8
16443                       ,X_ATTRIBUTE9                 => l_attribute9
16444                       ,X_ATTRIBUTE10                => l_attribute10
16445                       ,X_ATTRIBUTE11                => null
16446                       ,X_ATTRIBUTE12                => null
16447                       ,X_ATTRIBUTE13                => null
16448                       ,X_ATTRIBUTE14                => null
16449                       ,X_ATTRIBUTE15                => null
16450                       ,X_record_version_number      => l_proj_elem_ver_rvn
16451                       ,X_TASK_UNPUB_VER_STATUS_CODE => l_task_unpub_ver_status_code
16452                      );
16453 
16454                     l_task_version_id_tbl(l_task_id) := l_task_version_id;
16455                     px_tasks_out_tbl(i).task_version_id     := l_task_version_id;
16456 
16457                     IF l_debug_mode = 'Y' THEN
16458                         pa_debug.g_err_stage := 'Task Version id : ' || l_task_version_id ;
16459                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
16460                     END IF;
16461 
16462                END IF; /* After calling PA_PROJ_ELEMENT_VERSIONS_PKG  Insert_Row or Update_Row*/
16463 
16464                -- Added for bug 3057575
16465            -- Here we will poulate the task_ver_id_passed_tbl with all the task version Id processed while
16466            -- Updating a project .This is not done while creating a project as we
16467            -- Are adding task version Id in task_ver_id_passed_tbl to identify all the tasks
16468            -- which are not passed while updating a project.
16469                IF (p_structure_version_id IS NOT NULL) THEN
16470                task_ver_id_passed_tbl(l_task_version_id) := l_task_version_id;
16471            END IF;
16472 
16473                -- In following code we will be creating or updating the records in object relationship tables.
16474 
16475                DECLARE
16476                     l_structure_version_id_from     pa_proj_element_versions.element_version_id%TYPE;
16477                     l_task_version_id_from          pa_proj_element_versions.element_version_id%TYPE;
16478                     l_relationship_subtype          pa_object_relationships.relationship_subtype%TYPE;
16479 
16480                BEGIN
16481 
16482                     -- Set the following local variables before calling PA_RELATIONSHIP_PUB.Create_Relationship
16483                     -- l_structure_version_id_from
16484                     -- l_task_version_id_from
16485                     -- l_relationship_subtype
16486                     IF l_parent_task_id is null THEN -- task is a top task.
16487                          l_structure_version_id_from := l_structure_version_id;
16488                          l_task_version_id_from      := null;
16489                          l_relationship_subtype      := 'STRUCTURE_TO_TASK';
16490                     ELSE -- The task is not a top task
16491                          l_structure_version_id_from := null;
16492                          l_task_version_id_from      := l_task_version_id_tbl(l_parent_task_id);
16493                          l_relationship_subtype      := 'TASK_TO_TASK';
16494                     END IF;
16495 
16496                     IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
16497                        l_task_in_rec.pa_task_id IS NULL -- Create Task Context
16498                      THEN
16499                          -- Set the following variables after calling PA_RELATIONSHIP_PUB.Create_Relationship
16500                          --px_tasks_out_tbl(i).return_status
16501                          IF l_debug_mode = 'Y' THEN
16502                             pa_debug.g_err_stage := 'Calling API create_relationship';
16503                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16504                          END IF;
16505 
16506                          PA_RELATIONSHIP_PUB.Create_Relationship
16507                            (
16508                                p_api_version                       => p_api_version_number
16509                               ,p_init_msg_list                     => FND_API.G_FALSE
16510                               ,p_commit                            => p_commit
16511                               ,p_validate_only                     => FND_API.G_FALSE
16512                               ,p_calling_module                    => p_calling_module
16513                               ,p_debug_mode                        => l_debug_mode
16514                               ,p_project_id_from                   => p_project_id
16515                               ,p_structure_id_from                 => l_structure_id
16516                               ,p_structure_version_id_from         => l_structure_version_id_from
16517                               ,p_task_version_id_from              => l_task_version_id_from
16518                               ,p_project_id_to                     => p_project_id
16519                               ,p_structure_id_to                   => l_structure_id
16520                               ,p_task_version_id_to                => l_task_version_id
16521                               ,p_structure_type                    => null
16522                               ,p_initiating_element                => null
16523                               ,p_relationship_type                 => 'S'
16524                               ,p_relationship_subtype              => l_relationship_subtype
16525                               ,p_weighting_percentage              => l_weighting_percentage_tbl(l_task_id)
16526                               ,x_object_relationship_id            => l_relationship_id
16527                               ,x_return_status                     => x_return_status
16528                               ,x_msg_count                         => x_msg_count
16529                               ,x_msg_data                          => x_msg_data
16530                            );
16531 
16532                          px_tasks_out_tbl(i).return_status       := x_return_status;
16533                          IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16534                               IF l_debug_mode = 'Y' THEN
16535                                  pa_debug.g_err_stage := 'Error calling create relationship : ' || l_task_version_id ;
16536                                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16537                               END IF;
16538                               Raise Invalid_Arg_Exc_WP;
16539                          END IF;
16540 
16541                          IF l_debug_mode = 'Y' THEN
16542                             pa_debug.g_err_stage := 'Relationship id : ' || l_relationship_id ;
16543                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
16544                          END IF;
16545 
16546                     ELSE -- in update task case
16547                          -- Set the following variables after calling PA_RELATIONSHIP_PUB.Create_Relationship
16548                          -- px_tasks_out_tbl(i).return_status
16549              --rtarway, for DHI ER, BUG 4413568
16550                              /*
16551                 IF ( PA_PROJECT_PUB.G_TASK_STR_UPDATE_MODE  = 'PA_UPD_TASK_ATTR' ) THEN   --bug 4534919
16552                     PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16553                                                          p_msg_name => 'PA_WBS_CANT_CHANGE');
16554                                     RAISE Invalid_Arg_Exc_WP;
16555                 END IF;
16556                               This code is not required here. */
16557 
16558                          PA_RELATIONSHIP_PVT.Update_Relationship
16559                                       (
16560                                        p_api_version                       => p_api_version_number
16561                                       ,p_init_msg_list                     => FND_API.G_FALSE
16562                                       ,p_commit                            => p_commit
16563                                       ,p_validate_only                     => FND_API.G_FALSE
16564                                       ,p_calling_module                    => p_calling_module
16565                                       ,p_debug_mode                        => l_debug_mode
16566                                       ,p_object_relationship_id            => l_relationship_id
16567                                       ,p_project_id_from                   => null
16568                                       ,p_structure_id_from                 => null
16569                                       ,p_structure_version_id_from         => l_structure_version_id_from
16570                                       ,p_task_version_id_from              => l_task_version_id_from
16571                                       ,p_project_id_to                     => null
16572                                       ,p_structure_id_to                   => null
16573                                       ,p_structure_version_id_to           => null
16574                                       ,p_task_version_id_to                => l_task_version_id
16575                                       ,p_relationship_type                 => 'S'
16576                                       ,p_relationship_subtype              => l_relationship_subtype
16577                                       ,p_weighting_percentage              => l_weighting_percentage_tbl(l_task_id)
16578                                       ,p_record_version_number             => l_obj_rel_rvn
16579                                       ,x_return_status                     => x_return_status
16580                                       ,x_msg_count                         => x_msg_count
16581                                       ,x_msg_data                          => x_msg_data
16582                                      );
16583 
16584                              px_tasks_out_tbl(i).return_status       := x_return_status;
16585 
16586                              IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16587                                  IF l_debug_mode = 'Y' THEN
16588                                      pa_debug.g_err_stage := 'Error calling create relationship : ' || l_task_version_id ;
16589                                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16590                                  END IF;
16591                                  Raise Invalid_Arg_Exc_WP;
16592                              END IF;
16593 
16594                              IF l_debug_mode = 'Y' THEN
16595                                  pa_debug.g_err_stage := 'Relationship id : ' || l_relationship_id ;
16596                                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
16597                              END IF;
16598 
16599                     END IF; -- After  calling PA_RELATIONSHIP_PUB  Create_Relationship or Update_Relationship
16600 
16601                END; -- create/update relationship record.
16602 
16603 
16604                -- Create or update a schedule version for the task version only if the workplan
16605                -- structure is involved.
16606 
16607                IF p_is_wp_separate_from_fn = 'N' OR
16608                   (p_is_wp_separate_from_fn = 'Y' and p_structure_type = 'WORKPLAN')
16609                 THEN
16610 
16611                     -- Set the following local variables before calling Create_Schedule_Version or Update_Schedule_Version
16612                     -- scheduled_start_date,scheduled_finish_date ( only for create task case)
16613                     -- l_task_type_id
16614                     -- l_wq_planned_quantity
16615                     -- l_ver_sch_attr_rec (only for update task)
16616 
16617                     DECLARE
16618                          l_wq_planned_quantity           pa_proj_elem_ver_schedule.wq_planned_quantity%TYPE;
16619                          l_scheduled_start_date          pa_proj_elem_ver_schedule.scheduled_start_date%TYPE;
16620                          l_scheduled_finish_date         pa_proj_elem_ver_schedule.scheduled_finish_date%TYPE;
16621                          l_task_type_id                  pa_proj_elements.type_id%TYPE;
16622                     BEGIN
16623 
16624                          IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
16625                             l_task_in_rec.pa_task_id IS NULL -- Create Task Context
16626                           THEN
16627 
16628                               -- If start date or end date is miss date, then set them to sysdate.
16629                               IF (l_task_in_rec.scheduled_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
16630                                   l_task_in_rec.scheduled_start_date is NULL ) --ADUT
16631                               THEN
16632                                 l_scheduled_start_date := sysdate;
16633                               ELSE
16634                                 l_scheduled_start_date := l_task_in_rec.scheduled_start_date;
16635                               END IF;
16636 
16637                               IF (l_task_in_rec.scheduled_finish_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
16638                                   l_task_in_rec.scheduled_finish_date is NULL) --ADUT
16639                               THEN
16640                                 l_scheduled_finish_date := sysdate;
16641                               ELSE
16642                                 l_scheduled_finish_date := l_task_in_rec.scheduled_finish_date;
16643                               END IF;
16644 
16645 
16646                               -- If the task type for the current task is null, create_task api would have defaulted
16647                               -- it to the default task id. So get the default task type id if the passed in id is null.
16648                               IF l_task_in_rec.task_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM or
16649                                  l_task_in_rec.task_type is null
16650                               THEN
16651                                    l_task_type_id := l_default_task_type_id;
16652                               ELSE
16653                                    l_task_type_id := l_task_in_rec.task_type;
16654                               END IF;
16655 
16656                               -- Need to check if the project and the task type allows for planned work quantity. If not allowed then
16657                               -- set the value to null so that it can be passed on to create_schedule_version api.
16658                               IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_wq_enabled(l_task_type_id) OR
16659                                   'N' = PA_PROGRESS_UTILS.get_project_wq_flag(p_project_id))
16660                               THEN
16661                                   IF (l_task_in_rec.PLANNED_WORK_QUANTITY <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
16662                                       l_task_in_rec.PLANNED_WORK_QUANTITY IS NOT NULL)
16663                                   THEN
16664                                       l_wq_planned_quantity := NULL;
16665                                   END IF;
16666                               ELSE
16667                                   --Added by rtarway, for 4029755
16668                                   IF (l_task_in_rec.PLANNED_WORK_QUANTITY <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
16669                                       l_task_in_rec.PLANNED_WORK_QUANTITY IS NOT NULL)
16670                                   THEN
16671                                       l_wq_planned_quantity := l_task_in_rec.PLANNED_WORK_QUANTITY;
16672                                   ELSE
16673                                       l_wq_planned_quantity := NULL;
16674                                   END IF;
16675                                   --Added by rtarway, for 4029755
16676 
16677                               END IF;
16678 
16679                               --bug 3035902 maansari
16680                               IF pa_task_type_utils.check_tk_type_progressable(l_task_TYPE_ID) = 'Y'
16681                                  AND NVL( l_progressable_task, 'N' ) = 'N'
16682                               THEN
16683                                   l_progressable_task := 'Y';
16684                               END IF;
16685                               --end bug 3035902 maansari
16686 
16687 
16688                          ELSE /* in update task case */
16689                               --  Added for DFF attributes and to get pev_schedule_id and record version number
16690 
16691                               --Bug 6153503 Need to reopen again because changes to schedule version records by the
16692                               -- which is in between earlier open of the cursor and till this place.
16693 
16694                               OPEN cur_ver_sch_attr_rec(l_task_version_id);
16695                               FETCH cur_ver_sch_attr_rec INTO l_ver_sch_attr_rec;
16696                               CLOSE cur_ver_sch_attr_rec;
16697 
16698                               OPEN cur_task_type_id(l_task_in_rec.pa_task_id);
16699                               FETCH cur_task_type_id INTO l_task_type_id;
16700                               CLOSE cur_task_type_id;
16701 
16702                               IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_wq_enabled(l_task_type_id) OR
16703                                    'N' = PA_PROGRESS_UTILS.get_project_wq_flag(p_project_id)) THEN
16704                                             l_wq_planned_quantity := null;
16705                               ELSE
16706                                    IF (l_task_in_rec.PLANNED_WORK_QUANTITY = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16707                                        --Added by rtarway, for 4029755
16708                                        OR
16709                                        l_task_in_rec.PLANNED_WORK_QUANTITY IS NULL) THEN
16710                                          l_wq_planned_quantity := l_ver_sch_attr_rec.wq_planned_quantity;
16711                                    ELSE
16712                                          l_wq_planned_quantity := l_task_in_rec.PLANNED_WORK_QUANTITY;
16713                                    END IF;
16714 
16715                               END IF;
16716 
16717                               --bug 3035902 maansari
16718                               IF pa_task_type_utils.check_tk_type_progressable(l_task_TYPE_ID) = 'Y'
16719                                  AND NVL( l_progressable_task, 'N' ) = 'N'
16720                               THEN
16721                                   l_progressable_task := 'Y';
16722                               END IF;
16723                               --end bug 3035902 maansari
16724 
16725 
16726                          END IF; /* Before  calling PA_TASK_PUB1  Create_Schedule_Version or Update_Schedule_Version*/
16727 
16728                          -- set the following  after calling Create_Schedule_Version or Update_Schedule_Version
16729                          -- px_tasks_out_tbl(i).return_status
16730 
16731                          IF l_task_in_rec.pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
16732                             l_task_in_rec.pa_task_id IS NULL -- Create Task Context
16733                           THEN
16734                               -- set the following  after calling api PA_TASK_PUB1.Create_Schedule_Version
16735                               -- px_tasks_out_tbl(i).return_status
16736 
16737                               -- Create a schedule version for the task version only if the workplan
16738                               -- structure is involved.
16739 
16740                               IF l_debug_mode = 'Y' THEN
16741                                  pa_debug.g_err_stage := 'Calling API create schedule version';
16742                                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16743                               END IF;
16744 
16745                               PA_TASK_PUB1.Create_Schedule_Version(
16746                                   p_element_version_id      => l_task_version_id
16747                                  ,p_init_msg_list               => FND_API.G_FALSE
16748                                  ,p_scheduled_start_date         => l_scheduled_start_date
16749                                  ,p_scheduled_end_date      => l_scheduled_finish_date
16750                                  ,p_calendar_id              => l_task_in_rec.calendar_id
16751                                  ,p_obligation_start_date       => l_task_in_rec.obligation_start_date
16752                                  ,p_obligation_end_date     => l_task_in_rec.obligation_finish_date
16753                                  ,p_actual_start_date       => l_task_in_rec.actual_start_date
16754                                  ,p_actual_finish_date      => l_task_in_rec.actual_finish_date
16755                                  ,p_estimate_start_date     => l_task_in_rec.estimated_start_date
16756                                  ,p_estimate_finish_date    => l_task_in_rec.estimated_finish_date
16757                                  ,p_duration                => l_task_in_rec.duration
16758                                  ,p_early_start_date        => l_task_in_rec.early_start_date
16759                                  ,p_early_end_date          => l_task_in_rec.early_finish_date
16760                                  ,p_late_start_date         => l_task_in_rec.late_start_date
16761                                  ,p_late_end_date           => l_task_in_rec.late_finish_date
16762                                  ,p_milestone_flag          => l_task_in_rec.milestone_flag
16763                                  ,p_critical_flag           => l_task_in_rec.critical_flag
16764                                  ,p_WQ_PLANNED_QUANTITY     => l_wq_planned_quantity
16765                                  ,p_PLANNED_EFFORT          => l_task_in_rec.planned_effort
16766                                  ,p_attribute_category      => l_attribute_category
16767                                  ,p_attribute1              => l_attribute1
16768                                  ,p_attribute2              => l_attribute2
16769                                  ,p_attribute3              => l_attribute3
16770                                  ,p_attribute4              => l_attribute4
16771                                  ,p_attribute5              => l_attribute5
16772                                  ,p_attribute6              => l_attribute6
16773                                  ,p_attribute7              => l_attribute7
16774                                  ,p_attribute8              => l_attribute8
16775                                  ,p_attribute9              => l_attribute9
16776                                  ,p_attribute10             => l_attribute10
16777                                  --Bug 6153503
16778                                  ,p_attribute11             => l_attribute11
16779                                  ,p_attribute12             => l_attribute12
16780                                  ,p_attribute13             => l_attribute13
16781                                  ,p_attribute14             => l_attribute14
16782                                  ,p_attribute15             => l_attribute15
16783                                  ,x_pev_schedule_id         => l_dummy_number
16784                                  ,x_return_status           => x_return_status
16785                                  ,x_msg_count               => x_msg_count
16786                                  ,x_msg_data                => x_msg_data
16787 -- (Begin Venkat) new params for bug #3652460 ----------------------------------------------
16788                                  ,p_ext_act_duration    => l_task_in_rec.ext_act_duration
16789                                  ,p_ext_remain_duration => l_task_in_rec.ext_remain_duration
16790                                  ,p_ext_sch_duration    => l_task_in_rec.ext_sch_duration
16791 -- (End Venkat) new params for bug #3652460 ------------------------------------------------
16792 -- begin Bug 3654243 -----------------------------------------------------------------------
16793                 ,p_def_sch_tool_tsk_type_code =>   l_task_in_rec.sch_tool_tsk_type_code
16794                 ,p_constraint_type_code  =>        l_task_in_rec.constraint_type_code
16795                 ,p_constraint_date =>              l_task_in_rec.constraint_date
16796                 ,p_free_slack =>                   l_task_in_rec.free_slack
16797                 ,p_total_slack =>                  l_task_in_rec.total_slack
16798                 ,p_effort_driven_flag =>           l_task_in_rec.effort_driven_flag
16799                 ,p_level_assignments_flag =>       l_task_in_rec.level_assignments_flag
16800 -- end Bug 3654243 -------------------------------------------------------------------------
16801                               );
16802 
16803                               px_tasks_out_tbl(i).return_status       := x_return_status;
16804                               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16805                                    IF l_debug_mode = 'Y' THEN
16806                                       pa_debug.g_err_stage := 'Error calling create schedule version : ' || l_task_version_id ;
16807                                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16808                                    END IF;
16809 
16810                                    PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
16811                                                         ,p_msg_name       => 'PA_PS_NO_TASK_SCH_VER_CREATED');
16812                                    RAISE Invalid_Arg_Exc_WP;
16813                               END IF;
16814 
16815                               IF l_debug_mode = 'Y' THEN
16816                                  pa_debug.g_err_stage := 'Schedule Version id : ' || l_dummy_number ;
16817                                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
16818                               END IF;
16819                               --rtarway, 4099429 begin
16820 			      -- Bug 7109656
16821                                if (l_task_in_rec.planned_effort is not null and l_task_in_rec.planned_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  and l_task_in_rec.planned_effort <> '0' ) THEN
16822                                   if (l_add_task_ver_ids.count = 1000) then
16823                                         IF l_add_task_ver_ids.exists(1) AND l_structure_version_id IS NOT NULL THEN
16824                                              BEGIN
16825 
16826                                                    pa_fp_planning_transaction_pub.add_planning_transactions(
16827                                                       p_context                      => 'WORKPLAN'
16828                                                      ,p_project_id                   => p_project_id
16829                                                      ,p_struct_elem_version_id       => l_structure_version_id
16830                                                      ,p_task_elem_version_id_tbl     => l_add_task_ver_ids
16831                                                      ,p_planned_people_effort_tbl    => l_add_planned_effort
16832                                                      ,p_start_date_tbl               => l_add_start_date
16833                                                      ,p_end_date_tbl                 => l_add_end_date
16834                                                      ,p_pm_product_code              => l_pm_product_code
16835                                                      ,x_return_status                => l_return_status
16836                                                      ,x_msg_count                    => l_msg_count
16837                                                      ,x_msg_data                     => l_msg_data
16838                                                     );
16839 
16840                                              EXCEPTION
16841                                                   WHEN OTHERS THEN
16842                                                   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_PUB',
16843                                                                          p_procedure_name => 'PROCESS_TASK_STRUCTURE_BULK',
16844                                                                          p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.add_planning_transactions:'||SQLERRM,1,240));
16845                                                   raise  fnd_api.g_exc_error;
16846                                              END;
16847 
16848                                              IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16849                                                   x_msg_count := FND_MSG_PUB.count_msg;
16850                                                   raise fnd_api.g_exc_error;
16851                                              END IF;
16852                                        END IF; -- if l_add_task_ver_ids.exists(1) ends here
16853                                         l_add_task_ver_ids.delete;
16854                                         l_add_planned_effort.delete;
16855                                         l_add_start_date.delete;
16856                                         l_add_end_date.delete;
16857                                         l_pm_product_code.delete;
16858                                   end if;-- if (l_add_task_ver_ids.count = 1000)....ends here
16859                                    --rtarway,
16860 
16861                                     l_add_task_ver_ids.extend(1);
16862                                     l_add_planned_effort.extend(1);
16863                                     l_add_start_date.extend(1);
16864                                     l_add_end_date.extend(1);
16865                                     l_pm_product_code.extend(1);
16866 
16867                                     l_add_task_ver_ids(l_add_task_ver_ids.count):= px_tasks_out_tbl(i).task_version_id;
16868                                     l_add_planned_effort(l_add_planned_effort.count):= l_task_in_rec.planned_effort;
16869                                     l_add_start_date(l_add_start_date.count):= l_task_in_rec.scheduled_start_date;
16870                                     l_add_end_date(l_add_end_date.count):= l_task_in_rec.scheduled_finish_date;
16871                                     l_pm_product_code(l_pm_product_code.count) := p_pm_product_code;
16872                               end if;-- if l_task_in_rec.planned_effort is not null....ends here
16873                               --rtarway, 4099429 end
16874 
16875 
16876                          ELSE -- in update task case
16877                               -- set the following  after calling api PA_TASK_PUB1.Update_Schedule_Version
16878                               -- px_tasks_out_tbl(i).return_status
16879 
16880 
16881                               PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';  --bug 4145893 do not call PJI.plan_update api
16882                                                                      --if tasks are updated in bulk.
16883                                                                      --This should set for every single task.
16884                               PA_TASK_PUB1.Update_Schedule_Version(
16885                                          p_calling_module          => p_calling_module
16886                                         ,p_init_msg_list           => FND_API.G_FALSE
16887                                         ,p_pev_schedule_id         => l_ver_sch_attr_rec.pev_schedule_id
16888                                         ,p_calendar_id             => l_task_in_rec.calendar_id
16889                                         ,p_scheduled_start_date    => l_task_in_rec.scheduled_start_date
16890                                         ,p_scheduled_end_date      => l_task_in_rec.scheduled_finish_date
16891                                         ,p_obligation_start_date   => l_task_in_rec.obligation_start_date
16892                                         ,p_obligation_end_date     => l_task_in_rec.obligation_finish_date
16893                                         ,p_actual_start_date       => l_task_in_rec.actual_start_date
16894                                         ,p_actual_finish_date      => l_task_in_rec.actual_finish_date
16895                                         ,p_estimate_start_date     => l_task_in_rec.estimated_start_date
16896                                         ,p_estimate_finish_date    => l_task_in_rec.estimated_finish_date
16897                                         ,p_duration                => l_task_in_rec.duration
16898                                         ,p_early_start_date        => l_task_in_rec.early_start_date
16899                                         ,p_early_end_date          => l_task_in_rec.early_finish_date
16900                                         ,p_late_start_date         => l_task_in_rec.late_start_date
16901                                         ,p_late_end_date           => l_task_in_rec.late_finish_date
16902                                         ,p_milestone_flag          => l_task_in_rec.milestone_flag
16903                                         ,p_critical_flag           => l_task_in_rec.critical_flag
16904                                         ,p_WQ_PLANNED_QUANTITY     => l_wq_planned_quantity
16905                                         ,p_PLANNED_EFFORT          => l_task_in_rec.planned_effort
16906                                         ,p_record_version_number   => l_ver_sch_attr_rec.record_version_number
16907                                         --Bug 6153503
16908                                         ,p_attribute_category      => l_attribute_category
16909                                         ,p_attribute1              => l_attribute1
16910                                         ,p_attribute2              => l_attribute2
16911                                         ,p_attribute3              => l_attribute3
16912                                         ,p_attribute4              => l_attribute4
16913                                         ,p_attribute5              => l_attribute5
16914                                         ,p_attribute6              => l_attribute6
16915                                         ,p_attribute7              => l_attribute7
16916                                         ,p_attribute8              => l_attribute8
16917                                         ,p_attribute9              => l_attribute9
16918                                         ,p_attribute10             => l_attribute10
16919                                         ,p_attribute11             => l_attribute11
16920                                         ,p_attribute12             => l_attribute12
16921                                         ,p_attribute13             => l_attribute13
16922                                         ,p_attribute14             => l_attribute14
16923                                         ,p_attribute15             => l_attribute15
16924                                         ,x_return_status           => x_return_status
16925                                         ,x_msg_count               => x_msg_count
16926                                         ,x_msg_data                => x_msg_data
16927 -- (Begin Venkat) new params for bug #3652460 ----------------------------------------------
16928                     ,p_ext_act_duration => l_task_in_rec.ext_act_duration
16929                     ,p_ext_remain_duration  => l_task_in_rec.ext_remain_duration
16930                     ,p_ext_sch_duration => l_task_in_rec.ext_sch_duration
16931 -- (End Venkat) new params for bug #3652460 -------------------------------------------------
16932 
16933 -- begin Bug 3654243 -----------------------------------------------------------------------
16934                     ,p_def_sch_tool_tsk_type_code =>   l_task_in_rec.sch_tool_tsk_type_code
16935                     ,p_constraint_type_code  =>        l_task_in_rec.constraint_type_code
16936                     ,p_constraint_date =>              l_task_in_rec.constraint_date
16937                     ,p_free_slack =>                   l_task_in_rec.free_slack
16938                     ,p_total_slack =>                  l_task_in_rec.total_slack
16939                     ,p_effort_driven_flag =>           l_task_in_rec.effort_driven_flag
16940                     ,p_level_assignments_flag =>       l_task_in_rec.level_assignments_flag
16941 -- end Bug 3654243 -------------------------------------------------------------------------
16942 
16943                                         );
16944 
16945                               --bug 4149392
16946                               PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
16947                               --end bug 4149392
16948 
16949                               px_tasks_out_tbl(i).return_status       := x_return_status;
16950 
16951                               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16952                                    IF l_debug_mode = 'Y' THEN
16953                                          pa_debug.g_err_stage := 'Error calling update schedule version : ' || l_task_version_id ;
16954                                          pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
16955                                    END IF;
16956 
16957                                    PA_UTILS.ADD_MESSAGE( p_app_short_name    => 'PA'
16958                                                            ,p_msg_name       => 'PA_PS_TASK_NOT_UPDATED'
16959                                /* ADDED PROJECT_ID AND TASK_ID TOKENS FOR BUG 4219451 */
16960                                ,p_token1         => 'PROJECT'
16961                                ,p_value1         => p_project_id
16962                                ,p_token2         => 'TASK'
16963                                ,p_value2        => l_task_in_rec.pa_task_id
16964                                );
16965                                    RAISE Invalid_Arg_Exc_WP;
16966                               END IF;
16967 
16968                               IF l_debug_mode = 'Y' THEN
16969                                    pa_debug.g_err_stage := 'Schedule Version id : ' || l_ver_sch_attr_rec.pev_schedule_id ;
16970                                    pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
16971                               END IF;
16972 
16973                         -- Start Addition 6458891
16974                         l_update_task_det_flag := 'Y';
16975                         If nvl(p_pm_product_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16976                            and nvl(p_pm_product_code,'X') = 'MSPROJECT'  then
16977                                 l_prev_planned_effort := null;
16978                                 l_prev_etc_effort     := null;
16979                                 l_prev_percent_comp   := null;
16980                                 l_update_task_det_flag:= 'N';
16981 
16982                                 -- Bug 7158172
16983                                 OPEN cur_prev_prog(p_project_id,l_task_id,l_task_version_id);
16984                                 FETCH cur_prev_prog INTO l_prev_planned_effort, l_prev_etc_effort,l_prev_percent_comp;
16985                                 CLOSE cur_prev_prog;
16986 
16987                                 IF (NVL(l_task_in_rec.planned_effort, 0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
16988                                     NVL(l_task_in_rec.planned_effort, 0) <> NVL(l_prev_planned_effort,0)) THEN
16989                                         l_update_task_det_flag := 'Y';
16990                                 END IF;
16991 
16992                                 IF (NVL(l_task_in_rec.etc_effort, 0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
16993                                     NVL(l_task_in_rec.etc_effort, 0) <> NVL(l_prev_etc_effort,0)) THEN
16994                                         l_update_task_det_flag := 'Y';
16995                                 END IF;
16996 
16997                                 IF (NVL(l_task_in_rec.percent_complete, 0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
16998                                     NVL(l_task_in_rec.percent_complete, 0) <> NVL(l_prev_percent_comp,0)) THEN
16999                                         l_update_task_det_flag := 'Y';
17000                                 END IF;
17001                                 -- Bug 7132911
17002 
17003                                 /* Commented for bug 7132911
17004                                 If (nvl(l_task_in_rec.planned_effort,0)<> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17005                                     or
17006                                     nvl(l_task_in_rec.etc_effort,0)<> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17007                                     or
17008                                     nvl(l_task_in_rec.percent_complete,0)<> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
17009                                 Then
17010 
17011                                         open cur_prev_prog(p_project_id,l_task_id,l_task_version_id);
17012                                         fetch cur_prev_prog into l_prev_planned_effort, l_prev_etc_effort,l_prev_percent_comp;
17013                                         close cur_prev_prog;
17014                                         If nvl(l_task_in_rec.planned_effort,0) <> nvl(l_prev_planned_effort,0)
17015                                                 or
17016                                                 nvl(l_task_in_rec.etc_effort,0)<> nvl(l_prev_etc_effort,0)
17017                                                 or
17018                                                 nvl(l_task_in_rec.percent_complete,0)<> nvl(l_prev_percent_comp,0)
17019                                                 Then
17020                                                 l_update_task_det_flag :='Y';
17021                                         end if;
17022                                 end if;
17023                                 */
17024                         end if;
17025                         --  End addition for bug 6458891
17026 
17027                               --Added by rtarway for BUG 39198900
17028                               IF p_calling_module <> 'FORMS' and l_update_task_det_flag = 'Y' THEN  /* Added flag check for Bug 6458891 */
17029                                        pa_task_pub1.update_task_det_sch_info(
17030                                         p_calling_module    =>      p_calling_module
17031                                        ,p_task_ver_id      =>  l_task_version_id
17032                                        ,p_project_id       =>  p_project_id
17033                                        ,p_planned_effort   =>      l_task_in_rec.planned_effort
17034                                        ,p_ETC_effort       =>  l_task_in_rec.etc_effort
17035                                        ,p_structure_version_id => l_structure_version_id
17036                                        ,p_percent_complete =>  l_task_in_rec.percent_complete
17037                                        ,x_return_status    =>  x_return_status
17038                                        ,x_msg_count        =>  x_msg_count
17039                                        ,x_msg_data     =>  x_msg_data
17040                                        );
17041                               END IF;
17042                               --End Added by rtarway for BUG 39198900
17043 
17044                          END IF; --end for p_tasks_in(i).pa_task_id is null
17045                     END;
17046                END IF; --END IF For IF p_is_wp_separate_from_fn = 'N' OR (p_is_wp_separate_from_fn = 'Y' and p_structure_type = 'WORKPLAN')
17047 
17048           END LOOP; -- loop through the input tasks table.
17049      END IF; -- nvl(p_tasks_in_tbl.last,0) > 0
17050    /* Start of changes for--bug 8301015 */
17051 
17052    -- Validate transaction dates
17053 
17054    IF l_task_dates.COUNT <> 0 THEN
17055 
17056      l_tcnt := l_task_dates.First;
17057 
17058      LOOP
17059 
17060 	IF (nvl(l_task_dates(l_tcnt).old_start_date,sysdate) <>
17061 	    nvl(l_task_dates(l_tcnt).new_start_date,sysdate)) THEN
17062 
17063            PA_TASKS_MAINT_UTILS.Check_Start_Date(
17064              p_project_id => l_task_dates(l_tcnt).project_id,
17065              p_parent_task_id => l_task_dates(l_tcnt).parent_task_id,
17066              p_task_id => NULL,
17067              p_start_date => l_task_dates(l_tcnt).new_start_date,
17068              x_return_status => l_return_status,
17069              x_msg_count => l_msg_count,
17070              x_msg_data => l_msg_data);
17071 
17072 	   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
17073              PA_UTILS.ADD_MESSAGE('PA', l_msg_data);
17074 	   END IF;
17075 
17076 	END IF;
17077 
17078         IF (nvl(l_task_dates(l_tcnt).old_end_date,sysdate) <>
17079 	    nvl(l_task_dates(l_tcnt).new_end_date,sysdate)) THEN
17080 
17081            PA_TASKS_MAINT_UTILS.Check_End_Date(
17082              p_project_id => l_task_dates(l_tcnt).project_id,
17083              p_parent_task_id => l_task_dates(l_tcnt).parent_task_id,
17084              p_task_id => l_task_dates(l_tcnt).task_id,
17085 	     p_end_date => l_task_dates(l_tcnt).new_end_date,
17086              x_return_status => l_return_status,
17087              x_msg_count => l_msg_count,
17088              x_msg_data => l_msg_data);
17089 
17090 	   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
17091              PA_UTILS.ADD_MESSAGE('PA', l_msg_data);
17092            END IF;
17093 
17094         END IF;
17095 
17096         l_msg_count := FND_MSG_PUB.count_msg;
17097         IF (l_msg_count > 0) THEN
17098 		/* Start of 13931870
17099           x_msg_count := l_msg_count;
17100           IF (x_msg_count = 1) THEN
17101             pa_interface_utils_pub.get_messages(
17102               p_encoded => FND_API.G_TRUE,
17103               p_msg_index => 1,
17104               p_data => l_data,
17105               p_msg_index_out => l_msg_index_out);
17106            x_msg_data := l_data;
17107           END IF;
17108 		  End of 13931870*/
17109           RAISE FND_API.G_EXC_ERROR;
17110         END IF;
17111 
17112        EXIT when l_tcnt = l_task_dates.Last;
17113        l_tcnt := l_task_dates.NEXT(l_tcnt);
17114 
17115      END LOOP;
17116 
17117    END IF;
17118 
17119 /* End of changes for --bug 8301015 */
17120 -------------------------------------------------
17121 /** Code change begin for Bug   4120380 **/
17122 /** The code below will update the task_numbers of the tasks passed via update_project script
17123 back to their original value viz. it'll crop the '-' added to aviod the constraint check in
17124 PA_TASKS and PA_PROJ_ELEMENTS. **/
17125 /* bug#5243018 : Reverting the fix in Bug 4120380
17126 IF nvl(p_tasks_in_tbl.last,0) > 0 THEN --IF Added by rtarway for BUG 4336701
17127     FOR i in p_tasks_in_tbl.first..p_tasks_in_tbl.last LOOP
17128         UPDATE pa_proj_elements
17129         SET element_number = p_tasks_in_tbl(i).pa_task_number
17130         WHERE element_number = '-'||p_tasks_in_tbl(i).pa_task_number
17131         AND PROJECT_ID = p_project_id;
17132         UPDATE pa_tasks
17133         SET task_number = p_tasks_in_tbl(i).pa_task_number
17134         WHERE task_number = '-'||p_tasks_in_tbl(i).pa_task_number
17135         AND PROJECT_ID = p_project_id;
17136         --dbms_output.put_line(('value of recod updates in pa_proj_elements'||sql%rowcount);
17137     END LOOP;
17138 END IF;
17139 	 End Reverting bug#5243018*/
17140 /* Code change end for Bug 4120380 **/
17141 ---------------------------------------------------
17142      --Start of Changes for bug 3057575
17143      -- Here we check that while updating a project any of the tasks are missed while passing to update_project
17144        IF nvl(task_ver_id_passed_tbl.last,0) > 0 THEN  -- Added for bug 3719758
17145         IF (p_structure_version_id IS NOT NULL) THEN
17146              OPEN cur_all_task_ver_id(l_structure_version_id);
17147          Loop
17148             FETCH cur_all_task_ver_id into row_task_ver_id;
17149             EXIT WHEN  cur_all_task_ver_id%NOTFOUND;
17150             IF  NOT(task_ver_id_passed_tbl.EXISTS(row_task_ver_id.element_version_id)) THEN
17151 
17152                                OPEN  cur_ver_id_to_task_num(row_task_ver_id.element_version_id);
17153                    FETCH cur_ver_id_to_task_num INTO l_err_task_number;
17154                    CLOSE cur_ver_id_to_task_num;
17155 
17156                                PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
17157                                                     ,p_msg_name       => 'PA_TASK_MISS_IN_HIERARCHY_ORD'
17158                             ,p_token1         => 'TASK'
17159                             ,p_value1         => l_err_task_number);
17160 
17161                                    RAISE Invalid_Arg_Exc_WP;
17162             End if;
17163          END LOOP;
17164          CLOSE cur_all_task_ver_id;
17165     END IF;
17166       End If;  -- Added for bug 3719758
17167      --End of Changes for bug 3057575
17168 
17169      -- Bug 3075609. For some of the tasks the peer task could have moved out of the branch. In this case
17170      -- we will set the first progress enabled task of the parent to 100 and the rest to 0. If any concerns
17171      -- are raised regarding this, we will modify the logic so as to recalculate the weightage of the tasks
17172      -- as per the requirements then.
17173      -- The following is not wrapped with the l_maintain_weightages flag as if the flag is 'N' the plsql table
17174      -- of records will be null and no processing will be done.
17175      DECLARE
17176           -- This cursor will get the relationship id and the progress enabled flag which will be used to
17177           -- reassign the task weightages for the affected peer tasks.
17178           CURSOR cur_get_child_info(c_parent_element_version_id NUMBER)
17179           IS
17180           SELECT rel.OBJECT_RELATIONSHIP_ID,tt.prog_entry_enable_flag
17181           FROM   PA_OBJECT_RELATIONSHIPS rel, pa_proj_element_versions pev, pa_proj_elements pe, pa_task_types tt
17182           WHERE  rel.object_id_from1 = c_parent_element_version_id
17183           AND    rel.object_type_to = 'PA_TASKS'
17184           AND    rel.relationship_type = 'S'
17185           AND    rel.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
17186           AND    rel.object_id_to1 = pev.element_version_id
17187           AND    pev.proj_element_id = pe.proj_element_id
17188           AND    tt.object_type    = 'PA_TASKS' /* bug 3279978 FP M Enhancement */
17189           AND    pe.type_id = tt.task_type_id;
17190 
17191           TYPE obj_rel_id_tbl is table of pa_object_relationships.object_relationship_id%TYPE
17192                INDEX BY BINARY_INTEGER;
17193 
17194           l_parent_version_id           pa_proj_element_versions.element_version_id%TYPE;
17195           l_prog_entry_enable_flag_tbl  PA_PLSQL_DATATYPES.Char1TabTyp;
17196           l_obj_rel_id_tbl              obj_rel_id_tbl;
17197           l_plsql_max_array_size        CONSTANT NUMBER  := 200; -- limiting the max fetch size
17198           l_task_weightage_tbl          weighting_percentage_tbl;
17199           l_weightage_set_flag          VARCHAR2(1);
17200      BEGIN
17201           IF nvl(l_affected_parents_tbl.last,0) > 0 THEN -- only if tasks have moved do the processing
17202                FOR l_parent_version_id in l_affected_parents_tbl.first..l_affected_parents_tbl.last LOOP
17203                     l_weightage_set_flag := 'N';
17204                     OPEN cur_get_child_info(l_parent_version_id);
17205                     LOOP
17206                          FETCH  cur_get_child_info BULK COLLECT INTO
17207                                        l_obj_rel_id_tbl
17208                                       ,l_prog_entry_enable_flag_tbl
17209                          LIMIT  l_plsql_max_array_size;
17210 
17211                          IF l_debug_mode = 'Y' THEN
17212                               pa_debug.g_err_stage:= 'Fetched ' || cur_get_child_info%rowcount || ' records for processing';
17213                               pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
17214                          END IF;
17215 
17216                          IF nvl(l_obj_rel_id_tbl.last,0) > 0 THEN -- only if something is fetched do the processing
17217                               FOR i in l_obj_rel_id_tbl.first..l_obj_rel_id_tbl.last LOOP
17218                                    -- Set the weightage for the first progress enabled task to 100 and rest to 0.
17219                                    IF l_prog_entry_enable_flag_tbl(i) = 'Y' and l_weightage_set_flag = 'N' THEN
17220                                         l_task_weightage_tbl(i) := 100;
17221                                         l_weightage_set_flag := 'Y';
17222                                    ELSE
17223                                         l_task_weightage_tbl(i) := 0;
17224                                    END IF;
17225                               END LOOP;
17226                               -- update back the records.
17227                               FORALL i in l_obj_rel_id_tbl.first..l_obj_rel_id_tbl.last
17228                                    UPDATE pa_object_relationships
17229                                    set weighting_percentage = l_task_weightage_tbl(i)
17230                                    where object_relationship_id = l_obj_rel_id_tbl(i);
17231                          END IF;
17232                          EXIT WHEN nvl(l_obj_rel_id_tbl.last,0) < l_plsql_max_array_size;
17233                     END LOOP;
17234                     CLOSE cur_get_child_info;
17235                END LOOP;
17236           END IF;
17237      EXCEPTION
17238           WHEN OTHERS THEN
17239                IF cur_get_child_info%ISOPEN THEN
17240                     close cur_get_child_info;
17241                END IF;
17242                RAISE;
17243      END;
17244 
17245      -- Siva: Call the set_update_wbs_flag api here after the processing is completed for all the tasks.
17246 
17247                --bug 3010538
17248                IF l_WBS_changed_flag = 'Y'
17249                THEN
17250 
17251                    --3035902: process update flag changes
17252                    --Bug No 3450684 SMukka Commented if condition
17253                    --IF NOT ( p_structure_type = 'WORKPLAN' AND
17254                    --         p_is_wp_separate_from_fn = 'Y' AND
17255                    --         ( PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id) = 'MANUAL' OR
17256                    --           NVL( l_progressable_task, 'N' ) = 'N' ))
17257                    --THEN
17258                          PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
17259                        (
17260                           p_calling_context       => 'AMG'
17261                          ,p_project_id            => p_project_id
17262                          ,p_structure_version_id  => l_structure_version_id
17263                          ,p_update_wbs_flag       => 'Y'
17264                          ,x_return_status         => l_return_status
17265                          ,x_msg_count             => l_msg_count
17266                          ,x_msg_data              => l_msg_data);
17267 
17268                          if l_return_status <> FND_API.G_RET_STS_SUCCESS then
17269                             Raise Invalid_Arg_Exc_WP;
17270                          end if;
17271                    --END IF;
17272 
17273                    IF p_structure_type = 'FINANCIAL'
17274                    THEN
17275                        IF ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' OR
17276                             PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'Y' OR
17277                             ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
17278                               PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
17279                               PA_PROJECT_PUB.G_Published_version_exists = 'N' ) )
17280                        THEN
17281                             pa_fp_refresh_elements_pub.set_process_flag_proj(
17282                                p_project_id               => p_project_id
17283                               ,p_request_id               => null
17284                               ,p_process_code             => null
17285                               ,p_refresh_required_flag    => 'Y'
17286                               ,x_return_status            => l_return_status
17287                               ,x_msg_count                => l_msg_count
17288                               ,x_msg_data                 => l_msg_data );
17289 
17290                             if l_return_status <> FND_API.G_RET_STS_SUCCESS then
17291                                Raise Invalid_Arg_Exc_WP;
17292                             end if;
17293                        END IF;
17294                    END IF;
17295                END IF;
17296                --end bug 3010538
17297 
17298      -- Do task status rollup, date rollup and recalculation of task weightings
17299      -- if the workplan structure is involved.
17300      IF p_is_wp_separate_from_fn = 'N' OR
17301         (p_is_wp_separate_from_fn = 'Y' and p_structure_type = 'WORKPLAN')
17302      THEN
17303           -- Call task status rollup with element version id as null so that rollup
17304           -- happens for the entire version. Status rollup needs to be done only if
17305           -- versioning is not enabled.
17306 		  -- 14556729:Huawei Code change to defer the roll up API when G_ROLLUP_DEFER is set to Y , so that all the roll up is processed once at the end .
17307           IF p_is_wp_versioning_enabled = 'N' and NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER, 'N') = 'N' THEN
17308 
17309                IF l_debug_mode = 'Y' THEN
17310                   pa_debug.g_err_stage := 'Calling API Task status rollup';
17311                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
17312                END IF;
17313 
17314                PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
17315                       p_structure_version_id => l_structure_version_id
17316                      ,p_element_version_id   => null
17317                      ,x_return_status        => x_return_status
17318                      ,x_msg_count            => x_msg_count
17319                      ,x_msg_data             => x_msg_data
17320                );
17321 
17322                IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17323                     IF l_debug_mode = 'Y' THEN
17324                        pa_debug.g_err_stage := 'Error in task status rollup : ' || l_structure_version_id ;
17325                        pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
17326                     END IF;
17327                     Raise Invalid_Arg_Exc_WP;
17328                END IF;
17329 
17330 
17331           END IF; -- p_is_wp_versioning_enabled = 'N'
17332 
17333 
17334 
17335           -- Rollup dates.
17336           IF l_debug_mode = 'Y' THEN
17337              pa_debug.g_err_stage := 'Calling API rollup dates';
17338              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
17339           END IF;
17340           --Bug3802469, rtarway, this should not be called if px_tasks_out_tbl is empty, this will be empty,
17341           --if no tasks are passed , this will be empty,
17342 		  -- 14556729:Huawei Code change to defer the roll up API when G_ROLLUP_DEFER is set to Y , so that all the roll up is processed once at the end .
17343           IF ( px_tasks_out_tbl IS NOT NULL AND px_tasks_out_tbl.count > 0 and NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER, 'N') = 'N')
17344           THEN
17345                PA_PROJ_TASK_STRUC_PUB.rollup_dates(
17346                      p_tasks_in             => px_tasks_out_tbl
17347                     ,p_task_version_id      => null
17348                     ,p_project_id           => p_project_id
17349                     ,P_structure_version_id => null
17350                     ,x_msg_count            => x_msg_count
17351                     ,x_msg_data             => x_msg_data
17352                     ,x_return_status        => x_return_status
17353                );
17354                IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17355                     IF l_debug_mode = 'Y' THEN
17356                        pa_debug.g_err_stage := 'Error in rollup dates : ' || l_structure_version_id ;
17357                        pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
17358                     END IF;
17359                     Raise Invalid_Arg_Exc_WP;
17360                END IF;
17361           END IF;
17362           --Bug3802469, rtarway
17363 
17364            l_task_weight_basis_code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id => p_project_id) ;
17365 
17366           -- Recalculate the task weightings.
17367           IF nvl(l_task_weight_basis_code,'-1') = 'MANUAL' AND
17368              (l_new_structure_version = 'Y' OR                   -- Bug 3075609. Recalculate the task weightings only if it is a
17369               nvl(p_create_task_versions_only,'N') = 'Y') THEN   -- new structure version. Otherwise donot.
17370                IF l_debug_mode = 'Y' THEN
17371                   pa_debug.g_err_stage := 'Calling API recalculate task weightings';
17372                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
17373                END IF;
17374                --Bug3802469, rtarway, this should not be called if px_tasks_out_tbl is empty, this will be empty,
17375                --if no tasks are passed , this will be empty,
17376                IF ( px_tasks_out_tbl IS NOT NULL AND px_tasks_out_tbl.count > 0)
17377                THEN
17378                     PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings(
17379                           p_tasks_in             => px_tasks_out_tbl
17380                          ,p_task_version_id      => null
17381                          ,x_msg_count            => x_msg_count
17382                          ,x_msg_data             => x_msg_data
17383                          ,x_return_status        => x_return_status
17384                     );
17385                     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17386                          IF l_debug_mode = 'Y' THEN
17387                             pa_debug.g_err_stage := 'Error in recalculate task weightings : ' || l_structure_version_id ;
17388                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
17389                          END IF;
17390                          Raise Invalid_Arg_Exc_WP;
17391                     END IF;
17392                END IF;
17393                --Bug3802469, rtarway, IF(null != px_tasks_out_tbl...
17394           END IF ;
17395 
17396      END IF; -- p_is_wp_separate_from_fn = 'N' OR (p_is_wp_separate_from_fn = 'Y' and p_structure_type = 'WORKPLAN')
17397 
17398   IF NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER, 'N') = 'N' /*added for bug#15926171 */
17399     THEN
17400      -- PA L Changes 3010538
17401    IF  ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
17402        ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
17403          PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'  AND
17404          PA_PROJECT_PUB.G_Published_version_exists = 'N')
17405    THEN
17406    -- Changed p_structure_version_id to l_structure_version_id Bug 3035902.
17407    l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => p_project_id
17408                                                                        ,p_structure_version_id => l_structure_version_id ) ;
17409    IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
17410         IF p_process_mode = 'ONLINE' THEN
17411 
17412                IF l_debug_mode = 'Y' THEN
17413                   pa_debug.g_err_stage := 'Calling API PROCESS_WBS_UPDATES';
17414                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
17415                END IF;
17416 
17417              -- Changed p_structure_version_id to l_structure_version_id Bug 3035902.
17418              -- Instead of using local variables, used the out parameters for the standard parameters.
17419 
17420              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context      => 'ONLINE_UPDATE'
17421                                                        ,p_project_id           => p_project_id
17422                                                        ,p_structure_version_id => l_structure_version_id
17423                                                        ,x_return_status        => x_return_status
17424                                                        ,x_msg_count            => x_msg_count
17425                                                        ,x_msg_data             => x_msg_data ) ;
17426 
17427              -- Changed the way in which the error is handled.
17428              IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17429                   IF l_debug_mode = 'Y' THEN
17430                      pa_debug.g_err_stage := 'Error in process_wbs_updates : ';
17431                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
17432                   END IF;
17433                   Raise Invalid_Arg_Exc_WP;
17434              END IF;
17435 
17436         ELSIF p_process_mode = 'CONCURRENT' THEN
17437 
17438                IF l_debug_mode = 'Y' THEN
17439                   pa_debug.g_err_stage := 'Calling API PROCESS_WBS_UPDATES_CONC_WRP';
17440                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
17441                END IF;
17442 
17443              -- Changed p_structure_version_id to l_structure_version_id Bug 3035902.
17444              -- Instead of using local variables, used the out parameters for the standard parameters.
17445              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context       => 'CONC_UPDATE'
17446                                                                  ,p_project_id            => p_project_id
17447                                                                  ,p_structure_version_id  => l_structure_version_id
17448                                                                  ,x_return_status         => x_return_status
17449                                                                  ,x_msg_count             => x_msg_count
17450                                                                  ,x_msg_data              => x_msg_data ) ;
17451              -- Changed the way in which the error is handled.
17452              IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17453                   IF l_debug_mode = 'Y' THEN
17454                      pa_debug.g_err_stage := 'Error in process_wbs_updates_conc_wrp : ';
17455                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level4);
17456                   END IF;
17457                   Raise Invalid_Arg_Exc_WP;
17458              END IF;
17459 
17460         END IF ;
17461      END IF ;
17462    END IF ;
17463 END IF;
17464 --Amit : Bug 3964548 Begin
17465   -- added IF condition for Huawei enhancement - bug 13923366 by skkoppul
17466   -- skip unnecessary processing during bulk update mode
17467   IF NVL(PA_PROJECT_PUB.G_MASS_UPDATE_TASKS,'N') = 'N' THEN
17468 
17469      IF l_debug_mode = 'Y' THEN
17470         Pa_Debug.g_err_stage:= 'Calling FP add_planning Txn APIs';
17471         Pa_Debug.WRITE(G_PKG_NAME,Pa_Debug.g_err_stage,l_debug_level3);
17472         Pa_Debug.WRITE(G_PKG_NAME,'p_structure_type='||p_structure_type,l_debug_level3);
17473         Pa_Debug.WRITE(G_PKG_NAME,'p_is_wp_separate_from_fn='||p_is_wp_separate_from_fn,l_debug_level3);
17474         Pa_Debug.WRITE(G_PKG_NAME,'p_tasks_in_tbl.count='||p_tasks_in_tbl.count,l_debug_level3);
17475         Pa_Debug.WRITE(G_PKG_NAME,'p_structure_version_id='||p_structure_version_id,l_debug_level3);
17476         Pa_Debug.WRITE(G_PKG_NAME,'l_structure_version_id='||l_structure_version_id,l_debug_level3);
17477      END IF;
17478 
17479    IF ((p_structure_type = 'WORKPLAN' AND p_is_wp_separate_from_fn = 'Y') OR p_is_wp_separate_from_fn = 'N' ) THEN
17480     -- 4198962 Moved call of add_planning_transactions before population of l_del_task_ver_ids
17481     IF l_add_task_ver_ids.exists(1) AND l_structure_version_id IS NOT NULL THEN
17482         BEGIN
17483              pa_fp_planning_transaction_pub.add_planning_transactions(
17484                 p_context                      => 'WORKPLAN'
17485                ,p_project_id                   => p_project_id
17486                ,p_struct_elem_version_id       => l_structure_version_id
17487                ,p_task_elem_version_id_tbl     => l_add_task_ver_ids
17488                ,p_planned_people_effort_tbl    => l_add_planned_effort
17489                ,p_start_date_tbl               => l_add_start_date
17490                ,p_end_date_tbl                 => l_add_end_date
17491                ,p_pm_product_code              => l_pm_product_code
17492                ,x_return_status                => l_return_status
17493                ,x_msg_count                    => l_msg_count
17494                ,x_msg_data                     => l_msg_data
17495               );
17496         EXCEPTION
17497             WHEN OTHERS THEN
17498             fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_PUB',
17499                                       p_procedure_name => 'PROCESS_TASK_STRUCTURE_BULK',
17500                                       p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.add_planning_transactions:'||SQLERRM,1,240));
17501             raise  fnd_api.g_exc_error;
17502         END;
17503 
17504         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17505             x_msg_count := FND_MSG_PUB.count_msg;
17506             raise fnd_api.g_exc_error;
17507         END IF;
17508     END IF; -- l_add_task_ver_ids.exists(1) THEN
17509 
17510     IF nvl(p_tasks_in_tbl.LAST,0) > 0 THEN
17511         FOR l_i in p_tasks_in_tbl.first .. p_tasks_in_tbl.last LOOP
17512             --rtarway, 4099429, begin comment
17513                /*IF p_tasks_in_tbl(l_i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
17514                p_tasks_in_tbl(l_i).pa_task_id IS NULL -- Create Task Context
17515             THEN
17516                 l_add_plan_task_id := null;
17517                 IF p_structure_version_id is not null THEN -- Update Project Context
17518                     OPEN cur_wp_task_csr_duplicate(p_project_id,p_tasks_in_tbl(l_i).pm_task_reference);
17519                     FETCH cur_wp_task_csr_duplicate INTO l_add_plan_task_id;
17520                     CLOSE cur_wp_task_csr_duplicate;
17521                 END IF;
17522 
17523                 IF l_debug_mode = 'Y' THEN
17524                     Pa_Debug.WRITE(G_PKG_NAME,'Create Task Context',l_debug_level3);
17525                 END IF;
17526                 IF PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(px_tasks_out_tbl(l_i).task_version_id) = 'Y'
17527                 AND pa_task_assignment_utils.check_asgmt_exists_in_task(px_tasks_out_tbl(l_i).task_version_id) = 'N'
17528                 THEN
17529                     IF l_debug_mode = 'Y' THEN
17530                         Pa_Debug.WRITE(G_PKG_NAME,'Lowest Task With No Assignments',l_debug_level3);
17531                     END IF;
17532 
17533                     IF p_tasks_in_tbl(l_i).planned_effort IS NOT NULL AND p_tasks_in_tbl(l_i).planned_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17534                        AND l_add_plan_task_id IS NULL
17535                     THEN
17536                         IF l_debug_mode = 'Y' THEN
17537                             Pa_Debug.WRITE(G_PKG_NAME,'Preparing Tables to call FP add_plan_txn',l_debug_level3);
17538                         END IF;
17539 
17540                         l_add_task_ver_ids.extend(1);
17541                         l_add_planned_effort.extend(1);
17542                         l_add_start_date.extend(1);
17543                         l_add_end_date.extend(1);
17544                         l_pm_product_code.extend(1);
17545 
17546                         l_add_task_ver_ids(l_add_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
17547                         l_add_planned_effort(l_add_planned_effort.count):= p_tasks_in_tbl(l_i).planned_effort;
17548                         l_add_start_date(l_add_start_date.count):= p_tasks_in_tbl(l_i).scheduled_start_date;
17549                         l_add_end_date(l_add_end_date.count):= p_tasks_in_tbl(l_i).scheduled_finish_date;
17550                         l_pm_product_code(l_pm_product_code.count) := p_pm_product_code;
17551                         IF l_debug_mode = 'Y' THEN
17552                             Pa_Debug.WRITE(G_PKG_NAME,'l_add_task_ver_ids='||l_add_task_ver_ids(l_add_task_ver_ids.count),l_debug_level3);
17553                             Pa_Debug.WRITE(G_PKG_NAME,'l_add_planned_effort='||l_add_planned_effort(l_add_planned_effort.count),l_debug_level3);
17554                             Pa_Debug.WRITE(G_PKG_NAME,'l_add_start_date='||l_add_start_date(l_add_start_date.count),l_debug_level3);
17555                             Pa_Debug.WRITE(G_PKG_NAME,'l_add_end_date='||l_add_end_date(l_add_end_date.count),l_debug_level3);
17556                             Pa_Debug.WRITE(G_PKG_NAME,'l_pm_product_code='||l_pm_product_code(l_pm_product_code.count),l_debug_level3);
17557                         END IF;
17558                     END IF;
17559                 --As per discussion with Amit we will never enter this else part
17560                 ELSE
17561                     IF l_debug_mode = 'Y' THEN
17562                         Pa_Debug.WRITE(G_PKG_NAME,'Preparing Tables to call FP delete_plan_txn',l_debug_level3);
17563                     END IF;
17564                     l_del_task_ver_ids.extend(1);
17565                     l_del_task_ver_ids(l_del_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
17566                 END IF;
17567             ELSE -- Update Task Context
17568                 IF l_debug_mode = 'Y' THEN
17569                     Pa_Debug.WRITE(G_PKG_NAME,'Update Task Context',l_debug_level3);
17570                 END IF;
17571 
17572                 -- Bug 4078307: Changes start
17573                 -- In update task flow we should be deleting all task assignments for summary-level tasks
17574                 IF PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(px_tasks_out_tbl(l_i).task_version_id) = 'N'
17575                 AND pa_task_assignment_utils.check_asgmt_exists_in_task(px_tasks_out_tbl(l_i).task_version_id) = 'Y'
17576                 THEN
17577                     IF l_debug_mode = 'Y' THEN
17578                         Pa_Debug.WRITE(G_PKG_NAME,'Preparing Tables to call FP delete_plan_txn for summary task in update flow',l_debug_level3);
17579                     END IF;
17580 
17581                     l_del_task_ver_ids.extend(1);
17582                     l_del_task_ver_ids(l_del_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
17583                 END IF;
17584 
17585 
17586                 IF PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(px_tasks_out_tbl(l_i).task_version_id) = 'Y'
17587                 AND pa_task_assignment_utils.check_asgmt_exists_in_task(px_tasks_out_tbl(l_i).task_version_id) = 'N'
17588                 THEN
17589                     -- We do not have to call update_planning_transaction here bcoz
17590                     -- update_schedule_version is already calling it.
17591                     null;
17592                 ELSE
17593                     IF l_debug_mode = 'Y' THEN
17594                         Pa_Debug.WRITE(G_PKG_NAME,'Preparing Tables to call FP delete_plan_txn',l_debug_level3);
17595                     END IF;
17596 
17597                     l_del_task_ver_ids.extend(1);
17598                     l_del_task_ver_ids(l_del_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
17599                 END IF;
17600 
17601                 -- Bug 4078307: Changes End
17602             END IF;-- Create Task Context*/
17603                --rtarway, 4099429, end comment
17604 
17605 	       -- Bug 7437034 (Initialize l_hidden_assgn to N for each iteration)
17606  	       l_hidden_assgn := 'N';
17607 
17608                --rtarway, 4099429, begin add
17609                --rtarway, 4132590, begin add
17610                OPEN  check_hidden_assgn_exists(px_tasks_out_tbl(l_i).task_version_id);
17611                FETCH check_hidden_assgn_exists into l_hidden_assgn;
17612                CLOSE check_hidden_assgn_exists;
17613                --rtarway, 4132590, end add
17614 
17615                IF (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(px_tasks_out_tbl(l_i).task_version_id) = 'N'
17616                 --AND pa_task_assignment_utils.check_asgmt_exists_in_task(px_tasks_out_tbl(l_i).task_version_id) = 'Y')
17617                     AND l_hidden_assgn = 'Y')--modified by rtarway for BUG 4132590
17618                THEN
17619                     IF l_debug_mode = 'Y' THEN
17620                         Pa_Debug.WRITE(G_PKG_NAME,'Preparing Tables to call FP delete_plan_txn for summary task in update flow',l_debug_level3);
17621                     END IF;
17622 
17623                     if (l_del_task_ver_ids.count = 1000) then
17624                               IF l_del_task_ver_ids.exists(1) THEN
17625                                    BEGIN
17626                                               pa_fp_planning_transaction_pub.delete_planning_transactions(
17627                                              p_context                       => 'WORKPLAN'
17628                                              ,p_task_or_res                  => 'TASKS'
17629                                              ,p_element_version_id_tbl       => l_del_task_ver_ids
17630                                              ,x_return_status                => l_return_status
17631                                              ,x_msg_count                    => l_msg_count
17632                                              ,x_msg_data                     => l_msg_data
17633                                         );
17634                                    EXCEPTION
17635                                         WHEN OTHERS THEN
17636                                         fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_PUB',
17637                                                                p_procedure_name => 'PROCESS_TASK_STRUCTURE_BULK',
17638                                                                p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
17639                                         raise  fnd_api.g_exc_error;
17640                                    END;
17641 
17642                                    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17643                                         x_msg_count := FND_MSG_PUB.count_msg;
17644                                         raise fnd_api.g_exc_error;
17645                                    END IF;
17646                               END IF; -- l_del_task_ver_ids.exists(1) THEN
17647                               l_del_task_ver_ids.delete;
17648                          end if;
17649                          l_del_task_ver_ids.extend(1);
17650                          l_del_task_ver_ids(l_del_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
17651                 END IF;
17652                --rtarway, 4099429, end add
17653         END LOOP;
17654     END IF; -- nvl(p_tasks_in_tbl.LAST,0) > 0 THEN
17655     -- 4198962 Moved call of add_planning_transactions before population of l_del_task_ver_ids
17656 
17657     IF l_del_task_ver_ids.exists(1) THEN
17658         BEGIN
17659                     pa_fp_planning_transaction_pub.delete_planning_transactions(
17660                 p_context                       => 'WORKPLAN'
17661                 ,p_task_or_res                  => 'TASKS'
17662                 ,p_element_version_id_tbl       => l_del_task_ver_ids
17663                 ,x_return_status                => l_return_status
17664                 ,x_msg_count                    => l_msg_count
17665                 ,x_msg_data                     => l_msg_data
17666             );
17667         EXCEPTION
17668             WHEN OTHERS THEN
17669             fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_PUB',
17670                                       p_procedure_name => 'PROCESS_TASK_STRUCTURE_BULK',
17671                                       p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
17672             raise  fnd_api.g_exc_error;
17673         END;
17674 
17675         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17676             x_msg_count := FND_MSG_PUB.count_msg;
17677             raise fnd_api.g_exc_error;
17678         END IF;
17679     END IF; -- l_del_task_ver_ids.exists(1) THEN
17680    END IF; --((p_structure_type = 'WORKPLAN' AND p_is_wp_separate_from_fn = 'Y') OR p_is_wp_separate_from_fn = 'N' )
17681 --Amit : Bug 3964548 End
17682 
17683   END IF; -- end changes for bug 13923366
17684 
17685 -- PA L Changes 3010538
17686 
17687 --IF (p_structure_version_id IS NOT NULL) then /* create project case */
17688 --
17689 --/* Bug # 3420093 - Adding Progress Management modifications to create_project flow. */
17690 ----BUG 3835474 , rtarway, Added OR condition for shared structures
17691 --    if (p_structure_type = 'WORKPLAN' OR p_is_wp_separate_from_fn = 'N' ) then
17692 --
17693 --            --Bug3802469, rtarway, This loop will not be successfull if p_tasks_in_tbl is empty.
17694 --            --Check should be put before this loop to check if p_tasks_in_tbl is empty
17695 --            if ( p_tasks_in_tbl IS NOT NULL AND p_tasks_in_tbl.count > 0)
17696 --            then
17697 --                 for l_i in p_tasks_in_tbl.first .. p_tasks_in_tbl.last
17698 --                 loop
17699 --                     if (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(px_tasks_out_tbl(l_i).task_version_id) = 'Y') then
17700 --                          l_add_task_ver_ids.extend(1);
17701 --                          l_add_planned_effort.extend(1);
17702 --                          l_add_start_date.extend(1);
17703 --                          l_add_end_date.extend(1);
17704 --
17705 --                          l_add_task_ver_ids(l_add_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
17706 --                          l_add_planned_effort(l_add_planned_effort.count):= p_tasks_in_tbl(l_i).planned_effort;
17707 --                          l_add_start_date(l_add_start_date.count):= p_tasks_in_tbl(l_i).actual_start_date;
17708 --                          l_add_end_date(l_add_end_date.count):= p_tasks_in_tbl(l_i).actual_finish_date;
17709 --                   else
17710 --                          l_del_task_ver_ids.extend(1);
17711 --
17712 --                          l_del_task_ver_ids(l_del_task_ver_ids.count):= px_tasks_out_tbl(l_i).task_version_id;
17713 --                     end if;
17714 --                 end loop;
17715 --            end if;--Bug3802469, rtarway
17716 --    end if;
17717 --
17718 --    -- Calling pa_task_pub1.call_add_planning_txns for lowest level tasks.
17719 --
17720 --
17721 --    begin
17722 --            --BUG 3802469, rtarway , if the tasks table is empty, l_add_task_ver_ids will not be populated.
17723 --            --Check needed before calling call_add_planning_txns, to see if l_add_task_ver_ids is empty
17724 --            if (  l_add_task_ver_ids IS NOT NULL AND l_add_task_ver_ids.count > 0)
17725 --            then
17726 --                 pa_task_pub1.call_add_planning_txns(
17727 --                 p_tasks_ver_ids                  => l_add_task_ver_ids,
17728 --                 p_planned_effort                 => l_add_planned_effort,
17729 --                 p_project_id                     => p_project_id,
17730 --                 p_structure_version_id           => l_structure_version_id,  --replace p_structure_version_id, bug 3838186
17731 --                 p_start_date                     => l_add_start_date,
17732 --                 p_end_date                       => l_add_end_date,
17733 --                 p_pm_product_code                => p_pm_product_code,   --bug 3811243
17734 --                 x_return_status                  => l_return_status,
17735 --                 x_msg_count                      => l_msg_count,
17736 --                 x_msg_data                       => l_msg_data
17737 --                 );
17738 --            else
17739 --                null;--BUG 3802469, rtarway
17740 --            end if;
17741 --    exception
17742 --            when others then
17743 --                fnd_msg_pub.add_exc_msg(p_pkg_name       => 'pa_project_pub',
17744 --                                p_procedure_name => 'CREATE_PROJECT',
17745 --                                        p_error_text     => substrb('PA_TASK_PUB1.CALL_ADD_PLANNING_TXNS:'||sqlerrm,1,240));
17746 --            raise fnd_api.g_exc_error;
17747 --        end;
17748 --
17749 --    -- Calling pa_fp_planning_transaction_pub.delete_planning_transactions for higher level tasks.
17750 --
17751 --       begin
17752 --           --BUG 3802469, rtarway , if the tasks table is empty, l_del_task_ver_ids will not be populated.
17753 --           --Check needed before calling delete_planning_transactions, to see if l_del_task_ver_ids is empty
17754 --           if ( l_del_task_ver_ids IS NOT NULL AND l_del_task_ver_ids.count > 0)
17755 --           then
17756 --                pa_fp_planning_transaction_pub.delete_planning_transactions
17757 --                (
17758 --                 p_context                      => 'WORKPLAN'
17759 --                ,p_task_or_res                  => 'TASKS'
17760 --                ,p_element_version_id_tbl       => l_del_task_ver_ids
17761 --                ,x_return_status                => l_return_status
17762 --                ,x_msg_count                    => l_msg_count
17763 --                ,x_msg_data                     => l_msg_data
17764 --               );
17765 --          else
17766 --            null;
17767 --          end if;
17768 --       exception
17769 --           when others then
17770 --                fnd_msg_pub.add_exc_msg(p_pkg_name       => 'pa_project_pub',
17771 --                                        p_procedure_name => 'CREATE_PROJECT',
17772 --                                        p_error_text     => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.DELETE_PLANNING_TRANSACTIONS:'||SQLERRM,1,240));
17773 --           raise fnd_api.g_exc_error;
17774 --       end;
17775 --
17776 --/* Bug # 3420093 - Adding Progress Management modifications to create_project flow. */
17777 --
17778 --else /* update project case */
17779 --
17780 --/* Bug # 3420093 - Adding Progress Management modifications to update_project flow. */
17781 --BUG 3835474 , rtarway, Added OR condition for shared structures
17782 --    if (p_structure_type = 'WORKPLAN' OR p_is_wp_separate_from_fn = 'N' ) then
17783 --
17784 --            --BUG3802469, rtarway, comment only, no code change
17785 --            --if the str version being updated has no tasks, this loop will not run and l_add_task_ver_ids and
17786 --            --l_del_task_ver_ids will not be populated. before passing these tables to add_planning_transaction
17787 --            --or delete_planning_transaction, checks should be made
17788 --            for l_task_cur_rec in l_task_cur(p_project_id)
17789 --            loop
17790 --                if (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(l_task_cur_rec.element_version_id) = 'Y') then
17791 --                l_add_task_ver_ids.extend(1);
17792 --                l_add_planned_effort.extend(1);
17793 --                l_add_start_date.extend(1);
17794 --                l_add_end_date.extend(1);
17795 --
17796 --                l_add_task_ver_ids(l_add_task_ver_ids.count):= l_task_cur_rec.element_version_id;
17797 --                l_add_planned_effort(l_add_planned_effort.count):= l_task_cur_rec.planned_effort;
17798 --                                l_add_start_date(l_add_start_date.count):= l_task_cur_rec.actual_start_date;
17799 --                                l_add_end_date(l_add_end_date.count):= l_task_cur_rec.actual_finish_date;
17800 --            else
17801 --                                l_del_task_ver_ids.extend(1);
17802 --
17803 --                                l_del_task_ver_ids(l_del_task_ver_ids.count):= l_task_cur_rec.element_version_id;
17804 --            end if;
17805 --        end loop;
17806 --    end if;
17807 --
17808 --    -- Calling pa_task_pub1.call_add_planning_txns for lowest level tasks.
17809 --
17810 --    begin
17811 --            --BUG3802469, rtarway, see comments above
17812 --            if ( l_add_task_ver_ids IS NOT NULL and l_add_task_ver_ids.count > 0)
17813 --            then
17814 --                 pa_task_pub1.call_add_planning_txns(
17815 --                 p_tasks_ver_ids                  => l_add_task_ver_ids,
17816 --                 p_planned_effort                 => l_add_planned_effort,
17817 --                 p_project_id                     => p_project_id,
17818 --                 p_structure_version_id           => l_structure_version_id,  --replace p_structure_version_id, bug 3838186
17819 --                 p_start_date                     => l_add_start_date,
17820 --                 p_end_date                       => l_add_end_date,
17821 --                 p_pm_product_code                => p_pm_product_code,   --bug 3811243
17822 --                 x_return_status                  => l_return_status,
17823 --                 x_msg_count                      => l_msg_count,
17824 --                 x_msg_data                       => l_msg_data
17825 --                 );
17826 --            else
17827 --               null;
17828 --            end if;
17829 --    exception
17830 --            when others then
17831 --                fnd_msg_pub.add_exc_msg(p_pkg_name       => 'pa_project_pub',
17832 --                                p_procedure_name => 'CREATE_PROJECT',
17833 --                                        p_error_text     => substrb('PA_TASK_PUB1.CALL_ADD_PLANNING_TXNS:'||sqlerrm,1,240));
17834 --            raise fnd_api.g_exc_error;
17835 --        end;
17836 --
17837 --    -- Calling pa_fp_planning_transaction_pub.delete_planning_transactions for higher level tasks.
17838 --
17839 --       begin
17840 --           --BUG3802469, rtarway, see comments above
17841 --           if ( l_del_task_ver_ids IS NOT NULL and l_del_task_ver_ids.count > 0)
17842 --           then
17843 --                pa_fp_planning_transaction_pub.delete_planning_transactions
17844 --                (
17845 --                 p_context                      => 'WORKPLAN'
17846 --                ,p_task_or_res                  => 'TASKS'
17847 --                ,p_element_version_id_tbl       => l_del_task_ver_ids
17848 --                ,x_return_status                => l_return_status
17849 --                ,x_msg_count                    => l_msg_count
17850 --                ,x_msg_data                     => l_msg_data
17851 --               );
17852 --          else
17853 --               null;
17854 --          end if;
17855 --       exception
17856 --           when others then
17857 --                fnd_msg_pub.add_exc_msg(p_pkg_name       => 'pa_project_pub',
17858 --                                        p_procedure_name => 'CREATE_PROJECT',
17859 --                                        p_error_text     => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.DELETE_PLANNING_TRANSACTIONS:'||SQLERRM,1,240));
17860 --           raise fnd_api.g_exc_error;
17861 --       end;
17862 
17863 --/* Bug # 3420093 - Adding Progress Management modifications to update_project flow. */
17864 
17865 --end if;
17866 
17867      IF l_debug_mode = 'Y' THEN
17868           pa_debug.g_err_stage:= 'Exiting PROCESS_TASK_STRUCTURE_BULK';
17869           pa_debug.write(l_module_name,pa_debug.g_err_stage,
17870                                    l_debug_level2);
17871           pa_debug.reset_curr_function;
17872 
17873      END IF;
17874 
17875 EXCEPTION
17876 
17877 /* Start of Bug13931870 */
17878 WHEN fnd_api.g_exc_error THEN
17879 
17880      IF l_debug_mode = 'Y' THEN
17881           pa_debug.g_err_stage:= 'In fnd_api.g_exc_error exception block';
17882           pa_debug.write(l_module_name,pa_debug.g_err_stage,
17883                                    l_debug_level4);
17884      END IF;
17885 
17886      x_return_status := FND_API.G_RET_STS_ERROR;
17887      l_msg_count := FND_MSG_PUB.count_msg;
17888 
17889      IF get_structure%ISOPEN THEN
17890           CLOSE get_structure;
17891      END IF;
17892 
17893      IF l_amg_project_csr%ISOPEN THEN
17894           CLOSE l_amg_project_csr;
17895      END IF;
17896 
17897      IF cur_pa_tasks%ISOPEN THEN
17898           CLOSE cur_pa_tasks;
17899      END IF;
17900 
17901      IF cur_template_flag%ISOPEN THEN
17902           CLOSE cur_template_flag;
17903      END IF;
17904 
17905      IF cur_rec_ver_num%ISOPEN THEN
17906           CLOSE cur_rec_ver_num;
17907      END IF;
17908 
17909      IF cur_pa_task_ver%ISOPEN THEN
17910           CLOSE cur_pa_task_ver;
17911      END IF;
17912 
17913      IF cur_parent_object_rel%ISOPEN THEN
17914           CLOSE cur_parent_object_rel;
17915      END IF;
17916 
17917      IF cur_ver_sch_attr_rec%ISOPEN THEN
17918           CLOSE cur_ver_sch_attr_rec;
17919      END IF;
17920 
17921      IF cur_task_type_id%ISOPEN THEN
17922           CLOSE cur_task_type_id;
17923      END IF;
17924 
17925      IF cur_elem_ver_to_task_id%ISOPEN THEN
17926           CLOSE cur_elem_ver_to_task_id;
17927      END IF;
17928 
17929      IF cur_all_task_ver_id%ISOPEN THEN
17930           CLOSE cur_all_task_ver_id;
17931      END IF;
17932 
17933 
17934 
17935      IF l_msg_count = 1 and x_msg_data IS NULL THEN
17936           PA_INTERFACE_UTILS_PUB.get_messages
17937               (p_encoded        => FND_API.G_TRUE
17938               ,p_msg_index      => 1
17939               ,p_msg_count      => l_msg_count
17940               ,p_msg_data       => l_msg_data
17941               ,p_data           => l_data
17942               ,p_msg_index_out  => l_msg_index_out);
17943           x_msg_data := l_data;
17944           x_msg_count := l_msg_count;
17945      ELSE
17946           x_msg_count := l_msg_count;
17947      END IF;
17948 
17949      IF l_debug_mode = 'Y' THEN
17950           pa_debug.reset_curr_function;
17951      END IF;
17952 
17953      IF p_commit = FND_API.G_TRUE THEN
17954           rollback to process_task_struc;
17955      END IF;
17956 
17957      RETURN;
17958 /* End of Bug 13931870 */
17959 
17960 WHEN Invalid_Arg_Exc_WP THEN
17961 
17962      IF l_debug_mode = 'Y' THEN
17963           pa_debug.g_err_stage:= 'In PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc exception block';
17964           pa_debug.write(l_module_name,pa_debug.g_err_stage,
17965                                    l_debug_level4);
17966      END IF;
17967 
17968      x_return_status := FND_API.G_RET_STS_ERROR;
17969      l_msg_count := FND_MSG_PUB.count_msg;
17970 
17971 --     IF cur_auto_pub_flag%ISOPEN THEN
17972 --          CLOSE cur_auto_pub_flag;
17973 --     END IF;
17974 
17975 
17976      IF get_structure%ISOPEN THEN
17977           CLOSE get_structure;
17978      END IF;
17979 
17980      IF l_amg_project_csr%ISOPEN THEN
17981           CLOSE l_amg_project_csr;
17982      END IF;
17983 
17984      IF cur_pa_tasks%ISOPEN THEN
17985           CLOSE cur_pa_tasks;
17986      END IF;
17987 
17988      IF cur_template_flag%ISOPEN THEN
17989           CLOSE cur_template_flag;
17990      END IF;
17991 
17992      IF cur_rec_ver_num%ISOPEN THEN
17993           CLOSE cur_rec_ver_num;
17994      END IF;
17995 
17996      IF cur_pa_task_ver%ISOPEN THEN
17997           CLOSE cur_pa_task_ver;
17998      END IF;
17999 
18000      IF cur_parent_object_rel%ISOPEN THEN
18001           CLOSE cur_parent_object_rel;
18002      END IF;
18003 
18004      IF cur_ver_sch_attr_rec%ISOPEN THEN
18005           CLOSE cur_ver_sch_attr_rec;
18006      END IF;
18007 
18008      IF cur_task_type_id%ISOPEN THEN
18009           CLOSE cur_task_type_id;
18010      END IF;
18011 
18012      IF cur_elem_ver_to_task_id%ISOPEN THEN
18013           CLOSE cur_elem_ver_to_task_id;
18014      END IF;
18015 
18016      IF cur_all_task_ver_id%ISOPEN THEN
18017           CLOSE cur_all_task_ver_id;
18018      END IF;
18019 
18020      IF l_msg_count = 1 and x_msg_data IS NULL THEN
18021           PA_INTERFACE_UTILS_PUB.get_messages
18022               (p_encoded        => FND_API.G_TRUE
18023               ,p_msg_index      => 1
18024               ,p_msg_count      => l_msg_count
18025               ,p_msg_data       => l_msg_data
18026               ,p_data           => l_data
18027               ,p_msg_index_out  => l_msg_index_out);
18028           x_msg_data := l_data;
18029           x_msg_count := l_msg_count;
18030      ELSE
18031           x_msg_count := l_msg_count;
18032      END IF;
18033 
18034      IF l_debug_mode = 'Y' THEN
18035           pa_debug.reset_curr_function;
18036      END IF;
18037 
18038      IF p_commit = FND_API.G_TRUE THEN
18039           rollback to process_task_struc;
18040      END IF;
18041 
18042      RETURN;
18043 
18044 WHEN others THEN
18045 
18046      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
18047      x_msg_count     := 1;
18048      x_msg_data      := SQLERRM;
18049 
18050 --     IF cur_auto_pub_flag%ISOPEN THEN
18051 --          CLOSE cur_auto_pub_flag;
18052 --     END IF;
18053 
18054 
18055      IF get_structure%ISOPEN THEN
18056           CLOSE get_structure;
18057      END IF;
18058 
18059      IF l_amg_project_csr%ISOPEN THEN
18060           CLOSE l_amg_project_csr;
18061      END IF;
18062 
18063      IF cur_pa_tasks%ISOPEN THEN
18064           CLOSE cur_pa_tasks;
18065      END IF;
18066 
18067      IF cur_template_flag%ISOPEN THEN
18068           CLOSE cur_template_flag;
18069      END IF;
18070 
18071      IF cur_rec_ver_num%ISOPEN THEN
18072           CLOSE cur_rec_ver_num;
18073      END IF;
18074 
18075      IF cur_pa_task_ver%ISOPEN THEN
18076           CLOSE cur_pa_task_ver;
18077      END IF;
18078 
18079      IF cur_parent_object_rel%ISOPEN THEN
18080           CLOSE cur_parent_object_rel;
18081      END IF;
18082 
18083      IF cur_ver_sch_attr_rec%ISOPEN THEN
18084           CLOSE cur_ver_sch_attr_rec;
18085      END IF;
18086 
18087      IF cur_task_type_id%ISOPEN THEN
18088           CLOSE cur_task_type_id;
18089      END IF;
18090 
18091      IF cur_elem_ver_to_task_id%ISOPEN THEN
18092           CLOSE cur_elem_ver_to_task_id;
18093      END IF;
18094 
18095      IF cur_all_task_ver_id%ISOPEN THEN
18096           CLOSE cur_all_task_ver_id;
18097      END IF;
18098 
18099      FND_MSG_PUB.add_exc_msg
18100           ( p_pkg_name        => 'PA_PROJ_TASK_STRUC_PUB'
18101            ,p_procedure_name  => 'PROCESS_TASK_STRUCTURE_BULK'
18102            ,p_error_text      => x_msg_data
18103           );
18104 
18105      IF l_debug_mode = 'Y' THEN
18106           pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
18107           pa_debug.write(l_module_name,pa_debug.g_err_stage,
18108                               l_debug_level6);
18109            pa_debug.reset_curr_function;
18110 
18111      END IF;
18112 
18113      IF p_commit = FND_API.G_TRUE THEN
18114           rollback to process_task_struc;
18115      END IF;
18116 
18117 --     rollback to process_task_struc;  Commented during UT.
18118      RAISE;
18119 END PROCESS_TASK_STRUCTURE_BULK;
18120 
18121 
18122 --Bug 2947492  ( delete )
18123 PROCEDURE delete_fin_plan_from_task(
18124     p_task_id                                   NUMBER
18125    ,p_project_id                                NUMBER
18126    ,p_calling_module                            VARCHAR2  := 'FORMS'
18127    ,x_return_status                   OUT       NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
18128    ,x_msg_count                       OUT       NOCOPY NUMBER --File.Sql.39 bug 4440895
18129    ,x_msg_data                        OUT       NOCOPY VARCHAR2) IS --File.Sql.39 bug 4440895
18130 
18131 
18132 l_plannable_tasks_tbl        PA_FP_ELEMENTS_PUB.l_impacted_task_in_tbl_typ;
18133 l_parent_task_id             NUMBER;
18134 l_top_task_id                NUMBER;
18135 l_return_status              VARCHAR2(1);
18136 l_msg_data                   VARCHAR2(4000);
18137 l_msg_count                  NUMBER;
18138 l_msg_index_out              NUMBER;
18139 l_data                       VARCHAR2(4000);
18140   API_ERROR            EXCEPTION;
18141 
18142 CURSOR get_parent_task_id IS
18143     SELECT parent_task_id, top_task_id
18144       FROM pa_tasks
18145      WHERE project_id = p_project_id
18146        AND task_id = p_task_id;
18147 
18148 BEGIN
18149 
18150      SAVEPOINT plan_tasks;
18151 
18152      OPEN get_parent_task_id;
18153      FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id;
18154      CLOSE get_parent_task_id;
18155 
18156      l_plannable_tasks_tbl(1).impacted_task_id   := p_task_id;
18157      l_plannable_tasks_tbl(1).action             := 'DELETE';
18158      l_plannable_tasks_tbl(1).old_parent_task_id := l_parent_task_id;
18159      l_plannable_tasks_tbl(1).top_task_id        := l_top_task_id;
18160 
18161    /*
18162      -- Commented out as no more using for doosan customer
18163      -- commented by skannoji
18164      -- commenting out as per mail from venkatesh dated 22 jan 04 -- maansari
18165      PA_FP_ELEMENTS_PUB.MAINTAIN_PLANNABLE_TASKS(
18166                     p_project_id         => p_project_id
18167                   , p_impacted_tasks_tbl => l_plannable_tasks_tbl
18168                   , x_return_status      => l_return_status
18169                   , x_msg_data           => l_msg_data
18170                   , x_msg_count          => l_msg_count
18171                 );
18172 
18173        l_msg_count := FND_MSG_PUB.count_msg;
18174        if l_msg_count > 0 then
18175           x_msg_count := l_msg_count;
18176          if x_msg_count = 1 then
18177             pa_interface_utils_pub.get_messages
18178              (p_encoded        => FND_API.G_TRUE,
18179               p_msg_index      => 1,
18180               p_msg_count      => l_msg_count,
18181               p_msg_data       => l_msg_data,
18182               p_data           => l_data,
18183               p_msg_index_out  => l_msg_index_out);
18184             x_msg_data := l_data;
18185          end if;
18186          raise API_ERROR;
18187       end if;
18188       */
18189 
18190      x_return_status := FND_API.G_RET_STS_SUCCESS;
18191 EXCEPTION
18192 WHEN API_ERROR THEN
18193   x_return_status := FND_API.G_RET_STS_ERROR;
18194   rollback to plan_tasks;
18195 WHEN OTHERS THEN
18196   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
18197   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
18198                           p_procedure_name => 'delete_fin_plan_from_task',
18199                           p_error_text     => SUBSTRB(SQLERRM,1,240));
18200   rollback to plan_tasks;
18201   raise;
18202 
18203 END delete_fin_plan_from_task;
18204 --End Bug 2947492
18205 
18206 /*==================================================================
18207    This is the wrapper API that decides whether to invoke the concurrent
18208    process wrapper or the online process to process the WBS updates. If
18209    the profile is set to Online, the process is done online always.
18210    Otherwise when the profile is standard the processing is done online/
18211    concurrent based on the number of tasks in the structure version and
18212    the threshold profile.
18213    Bug 3010538 : New API for the Task Weighting Enhancement.
18214  ==================================================================*/
18215 
18216 PROCEDURE PROCESS_WBS_UPDATES_WRP
18217    (  p_api_version_number    IN   NUMBER    := 1.0
18218      ,p_commit                IN   VARCHAR2  := FND_API.G_FALSE
18219      ,p_init_msg_list         IN   VARCHAR2  := FND_API.G_FALSE
18220      ,p_calling_context       IN   VARCHAR2  := 'UPDATE'
18221      ,p_project_id            IN   pa_projects_all.project_id%TYPE
18222      ,p_structure_version_id  IN   pa_proj_element_versions.element_version_id%TYPE
18223      ,p_pub_struc_ver_id      IN   NUMBER    := NULL
18224      ,p_pub_prog_flag         IN   VARCHAR2  := 'Y' --bug 4019845
18225      ,x_return_status         OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
18226      ,x_msg_count             OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
18227      ,x_msg_data              OUT  NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
18228 AS
18229 
18230 -- Cursors used in this Procedure.
18231 
18232 -- This cursor obtains the count of the task versions in the structure version.
18233 CURSOR cur_task_count(c_project_id pa_projects_all.project_id%TYPE,
18234                       c_structure_version_id pa_proj_element_versions.element_version_id%TYPE)
18235 IS
18236 Select count(element_version_id)
18237 From pa_proj_element_versions
18238 Where project_id = c_project_id
18239 And object_type = 'PA_TASKS'
18240 And parent_structure_version_id = c_structure_version_id;
18241 
18242 --Bug# 5973460
18243 CURSOR c_get_process_code(c_structure_version_id NUMBER) IS
18244 SELECT process_code
18245 FROM pa_proj_elem_ver_structure
18246 WHERE element_version_id = c_structure_version_id
18247 and project_id = p_project_id; --Bug 11684912
18248 --Bug# 5973460
18249 
18250 l_msg_count                     NUMBER := 0;
18251 l_data                          VARCHAR2(2000);
18252 l_msg_data                      VARCHAR2(2000);
18253 l_msg_index_out                 NUMBER;
18254 l_debug_mode                    VARCHAR2(1);
18255 
18256 l_debug_level2                   CONSTANT NUMBER := 2;
18257 l_debug_level3                   CONSTANT NUMBER := 3;
18258 l_debug_level4                   CONSTANT NUMBER := 4;
18259 l_debug_level5                   CONSTANT NUMBER := 5;
18260 
18261 l_process_code  pa_proj_elem_ver_structure.process_code%TYPE; --Bug# 5973460
18262 
18263 BEGIN
18264 
18265      --Bug# 5973460
18266      OPEN c_get_process_code(p_structure_version_id);
18267      FETCH c_get_process_code INTO l_process_code;
18268      CLOSE c_get_process_code;
18269 
18270      IF p_calling_context = 'UPDATE' AND l_process_code = 'PUE'
18271      THEN
18272         PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
18273                              ,p_msg_name       => 'PA_PS_PUBLISH_ERROR');
18274 
18275          RAISE  Invalid_Arg_Exc_WP;
18276      END IF;
18277      --Bug# 5973460
18278 
18279      IF p_init_msg_list = FND_API.G_TRUE THEN
18280           FND_MSG_PUB.initialize;
18281      END IF;
18282 
18283      x_msg_count := 0;
18284      x_return_status := FND_API.G_RET_STS_SUCCESS;
18285      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
18286 
18287      IF l_debug_mode = 'Y' THEN
18288           pa_debug.g_err_stage:= 'Entering PROCESS_WBS_UPDATES_WRP';
18289           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
18290                                    l_debug_level3);
18291 
18292           pa_debug.set_curr_function( p_function   => 'PROCESS_WBS_UPDATES_WRP',
18293                                       p_debug_mode => l_debug_mode );
18294      END IF;
18295 
18296      -- Check for business rules violations
18297      IF l_debug_mode = 'Y' THEN
18298           pa_debug.g_err_stage:= 'Validating input parameters';
18299           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
18300                                      l_debug_level3);
18301 
18302           pa_debug.g_err_stage:= 'p_calling_context = '|| p_calling_context;
18303           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18304 
18305           pa_debug.g_err_stage:= 'p_project_id = '|| p_project_id;
18306           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18307 
18308           pa_debug.g_err_stage:= 'p_structure_version_id = '|| p_structure_version_id;
18309           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18310 
18311      END IF;
18312 
18313      -- Throw an error if any of the mandatory parameter is NULL.
18314      IF (p_project_id IS NULL) OR
18315         (p_structure_version_id IS NULL)
18316      THEN
18317           PA_UTILS.ADD_MESSAGE
18318                 (p_app_short_name => 'PA',
18319                  p_msg_name       => 'PA_INV_PARAM_PASSED');
18320           RAISE Invalid_Arg_Exc_WP;
18321      END IF;
18322 
18323      DECLARE
18324           l_task_count        NUMBER;
18325           l_update_option     VARCHAR2(30);
18326           l_calling_context   VARCHAR2(30);
18327      BEGIN
18328           open cur_task_count(p_project_id,p_structure_version_id);
18329           fetch cur_task_count into l_task_count;
18330           close cur_task_count;
18331           l_update_option := pa_project_structure_utils.get_process_wbs_updates_option(p_task_count => l_task_count,
18332                                               p_project_id => p_project_id    ---bug 4370533
18333                                                   );
18334 
18335           IF p_calling_context = 'PUBLISH' THEN
18336             IF l_update_option = 'ONLINE' THEN
18337               l_calling_context := 'ONLINE_PUBLISH';
18338             ELSE
18339               l_calling_context := 'CONC_PUBLISH';
18340             END IF;
18341           ELSIF p_calling_context = 'UPDATE' THEN
18342             IF l_update_option = 'ONLINE' THEN
18343               l_calling_context := 'ONLINE_UPDATE';
18344             ELSE
18345               l_calling_context := 'CONC_UPDATE';
18346             END IF;
18347         -- 4392189 : Added code for APPLY_PROGRESS
18348         -- This is done so that in process_wbs_updates
18349         -- we can determine the online or deferred mode
18350           ELSIF p_calling_context = 'APPLY_PROGRESS' THEN
18351             IF l_update_option = 'ONLINE' THEN
18352               l_calling_context := 'ONLINE_APPLY_PROGRESS';
18353             ELSE
18354               l_calling_context := 'CONC_APPLY_PROGRESS';
18355             END IF;
18356           ELSIF p_calling_context = 'ASGMT_PLAN_CHANGE' THEN  ---bug 4492493
18357             l_calling_context := p_calling_context;
18358             l_update_option := 'CONCURRENT'; ---should always launch conc pgm
18359           ELSE
18360             l_calling_context := p_calling_context;
18361           END IF;
18362 
18363           -- TWUT
18364           IF l_debug_mode = 'Y' THEN
18365              pa_debug.g_err_stage := 'Update option is '||l_update_option;
18366              pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
18367           END IF;
18368 
18369           IF l_update_option = 'ONLINE' THEN
18370                pa_proj_task_struc_pub.process_wbs_updates(
18371                      p_commit                => p_commit
18372                     ,p_project_id            => p_project_id
18373                     ,p_structure_version_id  => p_structure_version_id
18374                     ,p_pub_struc_ver_id      => p_pub_struc_ver_id
18375                     ,p_pub_prog_flag         => p_pub_prog_flag --bug 4019845
18376                     ,p_calling_context       => l_calling_context
18377                     ,x_return_status         => x_return_status
18378                     ,x_msg_count             => x_msg_count
18379                     ,x_msg_data              => x_msg_data
18380                );
18381                IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18382                     IF l_debug_mode = 'Y' THEN
18383                        pa_debug.g_err_stage := 'Error calling online wbs update process ';
18384                        pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
18385                     END IF;
18386                     Raise Invalid_Arg_Exc_WP;
18387                END IF;
18388           ELSIF l_update_option = 'CONCURRENT' THEN
18389                pa_proj_task_struc_pub.process_wbs_updates_conc_wrp(
18390                      p_commit                => p_commit
18391                     ,p_project_id            => p_project_id
18392                     ,p_structure_version_id  => p_structure_version_id
18393                     ,p_pub_struc_ver_id      => p_pub_struc_ver_id
18394                     ,p_pub_prog_flag         => p_pub_prog_flag --bug 4019845
18395                     ,p_calling_context       => l_calling_context
18396                     ,x_return_status         => x_return_status
18397                     ,x_msg_count             => x_msg_count
18398                     ,x_msg_data              => x_msg_data
18399                );
18400                IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18401                     IF l_debug_mode = 'Y' THEN
18402                        pa_debug.g_err_stage := 'Error calling concurrent wbs update process ';
18403                        pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
18404                     END IF;
18405                     Raise Invalid_Arg_Exc_WP;
18406                END IF;
18407           END IF;
18408      END;
18409 
18410      IF l_debug_mode = 'Y' THEN
18411           pa_debug.g_err_stage:= 'Exiting PROCESS_WBS_UPDATES_WRP';
18412           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
18413                                    l_debug_level3);
18414           pa_debug.reset_curr_function;
18415      END IF;
18416 EXCEPTION
18417 
18418 WHEN Invalid_Arg_Exc_WP THEN
18419 
18420      x_return_status := FND_API.G_RET_STS_ERROR;
18421      l_msg_count := FND_MSG_PUB.count_msg;
18422 
18423      IF cur_task_count%ISOPEN THEN
18424           CLOSE cur_task_count;
18425      END IF;
18426 
18427      IF l_msg_count = 1 and x_msg_data IS NULL THEN
18428           PA_INTERFACE_UTILS_PUB.get_messages
18429               (p_encoded        => FND_API.G_TRUE
18430               ,p_msg_index      => 1
18431               ,p_msg_count      => l_msg_count
18432               ,p_msg_data       => l_msg_data
18433               ,p_data           => l_data
18434               ,p_msg_index_out  => l_msg_index_out);
18435           x_msg_data := l_data;
18436           x_msg_count := l_msg_count;
18437      ELSE
18438           x_msg_count := l_msg_count;
18439      END IF;
18440      IF l_debug_mode = 'Y' THEN
18441           pa_debug.reset_curr_function;
18442      END IF;
18443 
18444      RETURN;
18445 
18446 WHEN others THEN
18447 
18448      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
18449      x_msg_count     := 1;
18450      x_msg_data      := SQLERRM;
18451 
18452      IF cur_task_count%ISOPEN THEN
18453           CLOSE cur_task_count;
18454      END IF;
18455 
18456      FND_MSG_PUB.add_exc_msg
18457                    ( p_pkg_name        => 'PA_PROJ_TASK_STRUC_PUB'
18458                     ,p_procedure_name  => 'PROCESS_WBS_UPDATES_WRP'
18459                     ,p_error_text      => x_msg_data);
18460 
18461      IF l_debug_mode = 'Y' THEN
18462           pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
18463           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
18464                               l_debug_level5);
18465           pa_debug.reset_curr_function;
18466      END IF;
18467      RAISE;
18468 END PROCESS_WBS_UPDATES_WRP;
18469 
18470 /*==================================================================
18471    This is a wrapper API that will launch the concurrent process that
18472    will in turn call the task weightage calculation and the plannable
18473    tasks APIs.
18474    Bug 3010538 : New API for the Task Weighting Enhancement.
18475  ==================================================================*/
18476 
18477 PROCEDURE PROCESS_WBS_UPDATES_CONC_WRP
18478    (  p_api_version_number    IN   NUMBER    := 1.0
18479      ,p_commit                IN   VARCHAR2  := FND_API.G_FALSE
18480      ,p_init_msg_list         IN   VARCHAR2  := FND_API.G_FALSE
18481      ,p_calling_context       IN   VARCHAR2  := 'UPDATE'
18482      ,p_project_id            IN   pa_projects_all.project_id%TYPE
18483      ,p_structure_version_id  IN   pa_proj_element_versions.element_version_id%TYPE
18484      ,p_pub_struc_ver_id      IN   NUMBER    := NULL
18485      ,p_pub_prog_flag         IN   VARCHAR2  := 'Y' --bug 4019845
18486      ,x_return_status         OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
18487      ,x_msg_count             OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
18488      ,x_msg_data              OUT  NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
18489 AS
18490 
18491 -- Cursors used.
18492 
18493 -- This cursor is used to decide if the structure version corresponds to a particular
18494 -- Structure type. Depending on this the plannable tasks api and the task weightage calculation
18495 -- api will be called.
18496 Cursor cur_structure_type(c_project_id pa_projects_all.project_id%TYPE,
18497                           c_structure_version_id pa_proj_element_versions.element_version_id%TYPE,
18498                           c_structure_type pa_structure_types.structure_type%TYPE)
18499 IS
18500 select 'Y'
18501 from   pa_proj_element_versions ver,
18502        pa_proj_structure_types pst,
18503        pa_structure_types st
18504 where  ver.element_version_id   = c_structure_version_id
18505 and    ver.project_id           = c_project_id
18506 and    pst.proj_element_id      = ver.proj_element_id
18507 and    pst.structure_type_id    = st.structure_type_id
18508 and    st.structure_type        = c_structure_type;
18509 
18510 l_update_wbs_flag               pa_proj_elem_ver_structure.process_update_wbs_flag%TYPE;
18511 l_request_id                    pa_proj_elem_ver_structure.conc_request_id%TYPE;
18512 l_structure_type_flag           VARCHAR2(1);
18513 --Bug 3053920.
18514 l_task_weighting_basis          pa_proj_progress_attr.task_weight_basis_code%TYPE;
18515 
18516 l_msg_count                     NUMBER := 0;
18517 l_data                          VARCHAR2(2000);
18518 l_msg_data                      VARCHAR2(2000);
18519 l_msg_index_out                 NUMBER;
18520 l_debug_mode                    VARCHAR2(1);
18521 
18522 l_debug_level2                   CONSTANT NUMBER := 2;
18523 l_debug_level3                   CONSTANT NUMBER := 3;
18524 l_debug_level4                   CONSTANT NUMBER := 4;
18525 l_debug_level5                   CONSTANT NUMBER := 5;
18526 
18527 -- Begin fix for Bug # 4373055.
18528 
18529 l_ret_status    VARCHAR2(1);
18530 l_calling_context   VARCHAR2(30); -- Bug 4392189
18531 
18532 -- End fix for Bug # 4373055.
18533 
18534 -- Bug 4589289 : Begin
18535 CURSOR c_get_process_code(c_structure_version_id NUMBER) IS
18536 SELECT process_code
18537 FROM pa_proj_elem_ver_structure
18538 WHERE element_version_id = c_structure_version_id
18539 and project_id = p_project_id -- Bug # 4868867.
18540 ;
18541 
18542 l_process_code  pa_proj_elem_ver_structure.process_code%TYPE;
18543 l_rerun_flag    VARCHAR2(1):=null;
18544 
18545 -- Bug 4589289 : End
18546 
18547 -- 4683461 For MOAC Changes
18548 
18549 Cursor cur_proj_ou
18550 IS
18551 select org_id
18552 from pa_projects_all
18553 where project_id = p_project_id;
18554 
18555 l_org_id NUMBER;
18556 
18557 -- 4683461 Done
18558 
18559 BEGIN
18560      IF p_init_msg_list = FND_API.G_TRUE THEN
18561           FND_MSG_PUB.initialize;
18562      END IF;
18563 
18564      x_msg_count := 0;
18565      x_return_status := FND_API.G_RET_STS_SUCCESS;
18566      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
18567 
18568      IF l_debug_mode = 'Y' THEN
18569           pa_debug.g_err_stage:= 'Entering PROCESS_WBS_UPDATES_CONC_WRP';
18570           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
18571                                    l_debug_level3);
18572 
18573           pa_debug.set_curr_function( p_function   => 'PROCESS_WBS_UPDATES_CONC_WRP',
18574                                       p_debug_mode => l_debug_mode );
18575      END IF;
18576 
18577      -- Check for business rules violations
18578      IF l_debug_mode = 'Y' THEN
18579           pa_debug.g_err_stage:= 'Validating input parameters';
18580           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
18581                                      l_debug_level3);
18582 
18583           pa_debug.g_err_stage:= 'p_calling_context = '|| p_calling_context;
18584           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18585 
18586           pa_debug.g_err_stage:= 'p_project_id = '|| p_project_id;
18587           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18588 
18589           pa_debug.g_err_stage:= 'p_structure_version_id = '|| p_structure_version_id;
18590           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18591 
18592      END IF;
18593 
18594      -- Throw an error if any of the mandatory parameter is NULL.
18595      IF (p_project_id IS NULL) OR
18596         (p_structure_version_id IS NULL)
18597      THEN
18598           PA_UTILS.ADD_MESSAGE
18599                 (p_app_short_name => 'PA',
18600                  p_msg_name       => 'PA_INV_PARAM_PASSED');
18601           RAISE Invalid_Arg_Exc_WP;
18602      END IF;
18603 
18604 --hsiu: bug 3035902
18605 --commenting because financial planning has partial process and
18606 --the update flag should not be check here.
18607 /*
18608      l_update_wbs_flag := pa_project_structure_utils.GET_UPDATE_WBS_FLAG(p_project_id           => p_project_id,
18609                                                                          p_structure_version_id => p_structure_version_id);
18610      IF l_update_wbs_flag = 'N' THEN
18611           -- No further processing is required for this structure version. Return.
18612           -- TWUT.
18613           IF l_debug_mode = 'Y' THEN
18614                pa_debug.g_err_stage:= 'No updates required for this structure version.';
18615                pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18616           END IF;
18617           RETURN;
18618      END IF;
18619 */
18620 
18621      -- Bug 3053920. We need not launch the conc process if split structure, structure type is workplan,
18622      -- basis code is MANUAL or flag is N.
18623 
18624      l_update_wbs_flag := pa_project_structure_utils.GET_UPDATE_WBS_FLAG(p_project_id           => p_project_id,
18625                                                                          p_structure_version_id => p_structure_version_id);
18626      l_task_weighting_basis := pa_progress_utils.get_task_weighting_basis(p_project_id => p_project_id);
18627 
18628 
18629      -- See if the structure version being processed is WORKPLAN.
18630      open cur_structure_type(p_project_id,p_structure_version_id,'WORKPLAN');
18631      fetch cur_structure_type into l_structure_type_flag;
18632      close cur_structure_type;
18633      -- 4392189 : Program Reporting Changes - Phase 2
18634      -- For Apply Progress we do not have to check wbs flag
18635      IF (p_calling_context not in ('CONC_APPLY_PROGRESS','ASGMT_PLAN_CHANGE') ---4627294
18636     AND
18637 
18638     -- Begin Bug # 4584710.
18639     /*
18640         PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( p_project_id ) = 'Y' AND
18641         nvl(l_structure_type_flag,'N') = 'Y' AND
18642         ( nvl(l_task_weighting_basis,'-99') = 'MANUAL'
18643     OR
18644     */
18645     -- End Bug # 4584710.
18646           nvl(l_update_wbs_flag,'N') = 'N')
18647      THEN
18648           IF l_debug_mode = 'Y' THEN
18649                -- pa_debug.g_err_stage:= 'split + workplan + MANUAL or flag = N. No further processing required';
18650            pa_debug.g_err_stage:= 'Flag = N. No further processing required';
18651                pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18652           END IF;
18653           -- No further processing required. Donot launch the conc process.
18654           RETURN;
18655      END IF;
18656 
18657      l_structure_type_flag := NULL;
18658 
18659      -- Bug 4589289 : Begin
18660         OPEN c_get_process_code(p_structure_version_id);
18661         FETCH c_get_process_code INTO l_process_code;
18662         CLOSE c_get_process_code;
18663 
18664         IF l_process_code IN ('WUE','PUE','AUE') THEN
18665                 l_rerun_flag := 'Y';
18666         END IF;
18667      -- Bug 4589289 : End
18668 
18669      -- 4683461 For MOAC Changes, retrieving operating unit and setting it before calling
18670      -- fnd_request.submit_request
18671      open cur_proj_ou;
18672      fetch cur_proj_ou into l_org_id;
18673      close cur_proj_ou;
18674 
18675      fnd_request.set_org_id(l_org_id);
18676 
18677      -- 4683461 end
18678 
18679      -- Submit the request.
18680      l_request_id := fnd_request.submit_request
18681      (
18682            application                =>   'PA',
18683            program                    =>   'PAWPUWBS',
18684            -- description                =>   'PRC: Process Work Breakdown Structure Updates', -- Fix for Bug # 4409337.
18685        description                =>   'PRC: Process Structure Updates', -- Fix for Bug # 4409337.
18686            start_time                 =>   NULL,
18687            sub_request                =>   false,
18688            argument1                  =>   p_calling_context,
18689            argument2                  =>   p_project_id,
18690            argument3                  =>   p_structure_version_id,
18691            argument4                  =>   p_pub_struc_ver_id,
18692            argument5                  =>   p_pub_prog_flag --bug 4019845
18693           ,argument6                  =>   l_rerun_flag --bug 4589289
18694      );
18695 
18696      -- TWUT
18697      IF l_debug_mode = 'Y' THEN
18698           pa_debug.g_err_stage:= 'Request id is '||l_request_id;
18699           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18700      END IF;
18701 
18702      -- Throw an error if the request could not be submitted.
18703      IF l_request_id = 0 THEN
18704           PA_UTILS.ADD_MESSAGE
18705                 (p_app_short_name => 'PA',
18706                  p_msg_name       => 'PA_WP_TW_CONC_PGM_ERR');
18707           RAISE Invalid_Arg_Exc_WP;
18708      END IF;
18709 
18710      -- Begin fix for Bug # 4373055.
18711 
18712      /*
18713 
18714      -- Update the structure version record with the request id and the status code.
18715      update pa_proj_elem_ver_structure
18716      set process_code = 'WUP',
18717          conc_request_id = l_request_id
18718      where element_version_id = p_structure_version_id
18719      and project_id = p_project_id;
18720 
18721      */
18722      -- Bug 4392189 : Added l_calling_context
18723      IF  p_calling_context IN ('CONC_APPLY_PROGRESS', 'ONLINE_APPLY_PROGRESS') THEN
18724     l_calling_context := 'APPLY_PROGRESS';
18725      ELSE
18726     l_calling_context := p_calling_context;
18727      END IF;
18728 
18729      PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_IN_PROC(
18730      p_project_id              => p_project_id
18731      , p_structure_version_id  => p_structure_version_id
18732      , p_calling_context       => l_calling_context
18733      , p_conc_request_id       => l_request_id
18734      , x_return_status         => l_ret_status);
18735 
18736 
18737      if (p_calling_context = 'CONC_PUBLISH') then
18738 
18739         -- Mark the newly created published structure record also with the process code
18740         -- and request_id.
18741 
18742         PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_IN_PROC(
18743         p_project_id              => p_project_id
18744         , p_structure_version_id  => p_pub_struc_ver_id
18745         , p_calling_context       => l_calling_context
18746         , p_conc_request_id       => l_request_id
18747         , x_return_status         => l_ret_status);
18748 
18749      end if;
18750 
18751      --  End fix for Bug # 4373055.
18752 
18753      -- Call the financial planning API if the structure type is FINANCIAL.
18754      open cur_structure_type(p_project_id,p_structure_version_id,'FINANCIAL');
18755      fetch cur_structure_type into l_structure_type_flag;
18756      close cur_structure_type;
18757 
18758      IF nvl(l_structure_type_flag,'N') = 'Y' THEN
18759 
18760           -- TWUT
18761           IF l_debug_mode = 'Y' THEN
18762              pa_debug.g_err_stage := 'Calling the financial planning API after submitting the concurrent request';
18763              pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
18764           END IF;
18765 
18766           pa_fp_refresh_elements_pub.set_process_flag_proj(
18767                 p_project_id             => p_project_id
18768                ,p_request_id             => l_request_id
18769                ,p_process_code           => 'WUP'
18770                ,p_refresh_required_flag  => 'Y'
18771                ,x_return_status          => x_return_status
18772                ,x_msg_count              => x_msg_count
18773                ,x_msg_data               => x_msg_data
18774           );
18775           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18776                IF l_debug_mode = 'Y' THEN
18777                   pa_debug.g_err_stage := 'Error calling the financial planning API after submitting the concurrent request';
18778                   pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
18779                END IF;
18780                Raise Invalid_Arg_Exc_WP;
18781           END IF;
18782      END IF;
18783 
18784      -- Commit in order to complete the request submission.
18785      commit;
18786 
18787      /* DO NOT ADD ANY CODE AFTER THIS COMMIT bug 3163280 */
18788 
18789      IF l_debug_mode = 'Y' THEN
18790           pa_debug.g_err_stage:= 'Exiting PROCESS_WBS_UPDATES_CONC_WRP';
18791           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
18792                                    l_debug_level3);
18793           pa_debug.reset_curr_function;
18794      END IF;
18795 EXCEPTION
18796 
18797 WHEN Invalid_Arg_Exc_WP THEN
18798 
18799      x_return_status := FND_API.G_RET_STS_ERROR;
18800      l_msg_count := FND_MSG_PUB.count_msg;
18801 
18802      IF l_msg_count = 1 and x_msg_data IS NULL THEN
18803           PA_INTERFACE_UTILS_PUB.get_messages
18804               (p_encoded        => FND_API.G_TRUE
18805               ,p_msg_index      => 1
18806               ,p_msg_count      => l_msg_count
18807               ,p_msg_data       => l_msg_data
18808               ,p_data           => l_data
18809               ,p_msg_index_out  => l_msg_index_out);
18810           x_msg_data := l_data;
18811           x_msg_count := l_msg_count;
18812      ELSE
18813           x_msg_count := l_msg_count;
18814      END IF;
18815      IF l_debug_mode = 'Y' THEN
18816           pa_debug.reset_curr_function;
18817      END IF;
18818 
18819      RETURN;
18820 
18821 WHEN others THEN
18822 
18823      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
18824      x_msg_count     := 1;
18825      x_msg_data      := SQLERRM;
18826 
18827      FND_MSG_PUB.add_exc_msg
18828                    ( p_pkg_name        => 'PA_PROJ_TASK_STRUC_PUB'
18829                     ,p_procedure_name  => 'PROCESS_WBS_UPDATES_CONC_WRP'
18830                     ,p_error_text      => x_msg_data);
18831 
18832      IF l_debug_mode = 'Y' THEN
18833           pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
18834           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
18835                               l_debug_level5);
18836           pa_debug.reset_curr_function;
18837      END IF;
18838      RAISE;
18839 END PROCESS_WBS_UPDATES_CONC_WRP;
18840 
18841 
18842 /*==================================================================
18843    This is the procedure that will be registered as the concurrent
18844    program executable with FND.
18845    Bug 3010538 : New API for the Task Weighting Enhancement.
18846  ==================================================================*/
18847 
18848 PROCEDURE PROCESS_WBS_UPDATES_CONC
18849    (  errbuf                  OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
18850      ,retcode                 OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
18851      ,p_calling_context       IN   VARCHAR2   := 'UPDATE'
18852      ,p_project_id            IN   pa_projects_all.project_id%TYPE
18853      ,p_structure_version_id  IN   pa_proj_element_versions.element_version_id%TYPE
18854      ,p_pub_struc_ver_id      IN   NUMBER    := NULL
18855      ,p_pub_prog_flag         IN   VARCHAR2  := 'Y' --bug 4019845
18856      ,p_rerun_flag            IN   VARCHAR2  := null --bug 4589289
18857    )
18858 AS
18859 
18860 l_request_id                    pa_proj_elem_ver_structure.conc_request_id%TYPE;
18861 
18862 l_return_status                 VARCHAR2(1);
18863 l_msg_count                     NUMBER := 0;
18864 l_data                          VARCHAR2(2000);
18865 l_msg_data                      VARCHAR2(2000);
18866 l_msg_index_out                 NUMBER;
18867 l_debug_mode                    VARCHAR2(1);
18868 
18869 l_debug_level2                   CONSTANT NUMBER := 2;
18870 l_debug_level3                   CONSTANT NUMBER := 3;
18871 l_debug_level4                   CONSTANT NUMBER := 4;
18872 l_debug_level5                   CONSTANT NUMBER := 5;
18873 
18874 -- Begin fix for Bug # 4373055.
18875 
18876 l_ret_status    VARCHAR2(1);
18877 l_calling_context VARCHAR2(30);-- Bug 4392189
18878 
18879 -- End fix for Bug # 4373055.
18880 
18881 /* Bug 8347243 - Start */
18882 
18883 l_record_version_number NUMBER;
18884 
18885 cursor c2(c_project_id NUMBER, c_structure_version_id NUMBER) IS
18886   select record_version_number
18887   from pa_proj_elem_ver_structure
18888   where project_id = c_project_id
18889   and element_version_id = c_structure_version_id;
18890 
18891 /* Bug 8347243 - End */
18892 
18893 BEGIN
18894 
18895      savepoint process_wbs_updates_conc;
18896 
18897      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
18898      l_request_id  := FND_GLOBAL.CONC_REQUEST_ID;
18899      retcode       := '0';
18900      errbuf        := NULL;
18901 
18902      IF l_debug_mode = 'Y' THEN
18903           pa_debug.set_curr_function( p_function   => 'PROCESS_WBS_UPDATES_CONC',
18904                                       p_debug_mode => l_debug_mode );
18905           pa_debug.g_err_stage:= 'Entering PROCESS_WBS_UPDATES_CONC';
18906           pa_debug.log_message(p_message=>pa_debug.g_err_stage);
18907      END IF;
18908 
18909      -- Check for business rules violations
18910      IF l_debug_mode = 'Y' THEN
18911           pa_debug.g_err_stage:= 'Validating input parameters';
18912           pa_debug.log_message(p_message=>pa_debug.g_err_stage);
18913 
18914           pa_debug.g_err_stage:= 'p_project_id = '|| p_project_id;
18915           pa_debug.log_message(p_message => pa_debug.g_err_stage);
18916 
18917           pa_debug.g_err_stage:= 'p_structure_version_id = '|| p_structure_version_id;
18918           pa_debug.log_message(p_message => pa_debug.g_err_stage);
18919      END IF;
18920 
18921      IF (p_project_id IS NULL) OR
18922         (p_structure_version_id IS NULL)
18923      THEN
18924           IF l_debug_mode = 'Y' THEN
18925                pa_debug.g_err_stage:= 'Some of the mandatory parameters to this API are NULL';
18926                pa_debug.log_message(p_message => pa_debug.g_err_stage);
18927           END IF;
18928           PA_UTILS.ADD_MESSAGE
18929                 (p_app_short_name => 'PA',
18930                  p_msg_name       => 'PA_INV_PARAM_PASSED');
18931           RAISE Invalid_Arg_Exc_WP;
18932      END IF;
18933 
18934      pa_proj_task_struc_pub.process_wbs_updates(
18935            p_calling_context       => p_calling_context
18936           ,p_project_id            => p_project_id
18937           ,p_structure_version_id  => p_structure_version_id
18938           ,p_pub_struc_ver_id      => p_pub_struc_ver_id
18939           ,p_pub_prog_flag         => p_pub_prog_flag --bug 4019845
18940           ,p_rerun_flag            => p_rerun_flag -- bug 4589289
18941           ,x_return_status         => l_return_status
18942           ,x_msg_count             => l_msg_count
18943           ,x_msg_data              => l_msg_data
18944      );
18945      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18946           IF l_debug_mode = 'Y' THEN
18947              pa_debug.g_err_stage := 'Error calling process wbs updates API ';
18948              pa_debug.log_message(p_message => pa_debug.g_err_stage);
18949           END IF;
18950           Raise Invalid_Arg_Exc_WP;
18951      END IF;
18952 
18953 
18954      -- Update to success if the call was successful.
18955      -- It has been decided to update null as the process_code if the
18956      -- process has completed successfully.
18957      update pa_proj_elem_ver_structure
18958      set process_code = NULL,
18959          conc_request_id = l_request_id
18960      where element_version_id = p_structure_version_id
18961      and project_id = p_project_id;
18962 
18963 
18964      -- Begin fix for Bug # 4373055.
18965 
18966      if (p_calling_context = 'CONC_PUBLISH') then
18967 
18968         -- Mark the newly created published structure record also with the process code
18969         -- as null.
18970 
18971         update pa_proj_elem_ver_structure
18972         set process_code = NULL
18973         , conc_request_id = l_request_id
18974         where element_version_id = p_pub_struc_ver_id
18975         and project_id = p_project_id;
18976 
18977         -- Bug 8347243 - Start
18978         -- Workflow notification should happen here for CONCURRENT mode
18979 
18980         OPEN c2(p_project_id, p_pub_struc_ver_id);
18981         FETCH c2 into l_record_version_number;
18982         CLOSE c2;
18983 
18984         PA_PROJECT_STRUCTURE_PVT1.change_workplan_status
18985         (
18986           p_project_id              => p_project_id
18987          ,p_structure_version_id    => p_pub_struc_ver_id
18988          ,p_status_code             => 'STRUCTURE_PUBLISHED'
18989          ,p_record_version_number   => l_record_version_number
18990          ,x_return_status           => l_return_status
18991          ,x_msg_count               => l_msg_count
18992          ,x_msg_data                => l_msg_data
18993         );
18994 
18995         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18996           IF l_debug_mode = 'Y' THEN
18997             pa_debug.g_err_stage := 'Error calling change workplan status ';
18998             pa_debug.log_message(p_message => pa_debug.g_err_stage);
18999           END IF;
19000           Raise Invalid_Arg_Exc_WP;
19001         END IF;
19002 
19003 
19004         PA_WORKPLAN_WORKFLOW.START_PROJECT_EXECUTION_WF
19005         (
19006           p_project_id    => p_project_id
19007          ,x_msg_count     => l_msg_count
19008          ,x_msg_data      => l_msg_data
19009          ,x_return_status => l_return_status
19010         ) ;
19011 
19012         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
19013           IF l_debug_mode = 'Y' THEN
19014             pa_debug.g_err_stage := 'Error starting project execution workflow';
19015             pa_debug.log_message(p_message => pa_debug.g_err_stage);
19016           END IF;
19017           Raise Invalid_Arg_Exc_WP;
19018         END IF;
19019 
19020         -- Bug 8347243 - End
19021 
19022      end if;
19023 
19024      --  End fix for Bug # 4373055.
19025 
19026      -- Commit so that the changes that have been done are commited.
19027      commit;
19028 
19029      IF l_debug_mode = 'Y' THEN
19030           pa_debug.g_err_stage:= 'Exiting PROCESS_WBS_UPDATES_CONC';
19031           pa_debug.log_message(p_message=>pa_debug.g_err_stage);
19032 
19033           pa_debug.reset_curr_function;
19034      END IF;
19035 EXCEPTION
19036 
19037 WHEN Invalid_Arg_Exc_WP THEN
19038 
19039      l_msg_count := FND_MSG_PUB.count_msg;
19040      retcode     := '2';
19041 
19042      IF l_msg_count >= 1 THEN
19043           PA_INTERFACE_UTILS_PUB.get_messages
19044               (p_encoded        => FND_API.G_FALSE -- Bug 4348814 : Made false from true FND_API.G_TRUE
19045               ,p_msg_index      => 1
19046               ,p_msg_count      => l_msg_count
19047               ,p_msg_data       => l_msg_data
19048               ,p_data           => l_data
19049               ,p_msg_index_out  => l_msg_index_out);
19050           errbuf := l_data;
19051      END IF;
19052 
19053      rollback to process_wbs_updates_conc;
19054 
19055 
19056      -- Begin fix for Bug # 4373055.
19057 
19058      /*
19059 
19060      update pa_proj_elem_ver_structure
19061      set process_code = 'WUE',
19062          conc_request_id = l_request_id
19063      where element_version_id = p_structure_version_id
19064      and project_id = p_project_id;
19065 
19066      commit;
19067 
19068      */
19069      -- Bug 4392189 : Added l_calling_context
19070      IF  p_calling_context IN ('CONC_APPLY_PROGRESS', 'ONLINE_APPLY_PROGRESS') THEN
19071     l_calling_context := 'APPLY_PROGRESS';
19072      ELSE
19073     l_calling_context := p_calling_context;
19074      END IF;
19075 
19076      PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_ERR(
19077      p_project_id              => p_project_id
19078      , p_structure_version_id  => p_structure_version_id
19079      , p_calling_context       => l_calling_context
19080      , p_conc_request_id       => l_request_id
19081      , x_return_status         => l_ret_status);
19082 
19083      if (p_calling_context = 'CONC_PUBLISH') then
19084 
19085         -- Mark the newly created published structure record also with the process code
19086         -- and request_id.
19087 
19088         PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_ERR(
19089         p_project_id              => p_project_id
19090         , p_structure_version_id  => p_pub_struc_ver_id
19091         , p_calling_context       => l_calling_context
19092         , p_conc_request_id       => l_request_id
19093         , x_return_status         => l_ret_status);
19094 
19095      end if;
19096 
19097      --  End fix for Bug # 4373055.
19098 
19099      -- Bug # 4655059.
19100 
19101      -- If the process that errored out is process_updates then set the process_update_wbs_flag to 'Y'.
19102 
19103      if (p_calling_context = 'CONC_UPDATE') then
19104 
19105 	pa_proj_task_struc_pub.set_update_wbs_flag
19106 	(p_project_id            => p_project_id
19107         ,p_structure_version_id  => p_structure_version_id
19108         ,p_update_wbs_flag       => 'Y'
19109         ,x_return_status         => l_return_status
19110         ,x_msg_count             => l_msg_count
19111         ,x_msg_data              => l_msg_data);
19112 
19113 	if (l_return_status = FND_API.G_RET_STS_SUCCESS) then
19114 
19115 		commit;
19116 
19117 	end if;
19118 
19119      end if;
19120 
19121      -- Bug # 4655059.
19122 
19123      IF l_debug_mode = 'Y' THEN
19124           pa_debug.reset_curr_function;
19125      END IF;
19126      RETURN;
19127 
19128 WHEN others THEN
19129 
19130      retcode         := '2';
19131      errbuf          := SQLERRM;
19132 
19133      FND_MSG_PUB.add_exc_msg
19134                    ( p_pkg_name        => 'PA_PROJ_TASK_STRUC_PUB'
19135                     ,p_procedure_name  => 'PROCESS_WBS_UPDATES_CONC'
19136                     ,p_error_text      => errbuf);
19137 
19138      rollback to process_wbs_updates_conc;
19139 
19140      -- Begin fix for Bug # 4373055.
19141 
19142      /*
19143 
19144      update pa_proj_elem_ver_structure
19145      set process_code = 'WUE',
19146          conc_request_id = l_request_id
19147      where element_version_id = p_structure_version_id
19148      and project_id = p_project_id;
19149 
19150      commit;
19151 
19152      */
19153 
19154      -- Bug 4392189 : Added l_calling_context
19155      IF  p_calling_context IN ('CONC_APPLY_PROGRESS', 'ONLINE_APPLY_PROGRESS') THEN
19156     l_calling_context := 'APPLY_PROGRESS';
19157      ELSE
19158     l_calling_context := p_calling_context;
19159      END IF;
19160 
19161      PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_ERR(
19162      p_project_id              => p_project_id
19163      , p_structure_version_id  => p_structure_version_id
19164      , p_calling_context       => l_calling_context
19165      , p_conc_request_id       => l_request_id
19166      , x_return_status         => l_ret_status);
19167 
19168      if (p_calling_context = 'CONC_PUBLISH') then
19169 
19170         -- Mark the newly created published structure record also with the process code
19171         -- and request_id.
19172 
19173         PA_PROJECT_STRUCTURE_UTILS.SET_PROCESS_CODE_ERR(
19174         p_project_id              => p_project_id
19175         , p_structure_version_id  => p_pub_struc_ver_id
19176         , p_calling_context       => l_calling_context
19177         , p_conc_request_id       => l_request_id
19178         , x_return_status         => l_ret_status);
19179 
19180      end if;
19181 
19182      --  End fix for Bug # 4373055.
19183 
19184      -- Bug # 4655059.
19185 
19186      -- If the process that errored out is process_updates then set the process_update_wbs_flag to 'Y'.
19187 
19188      if (p_calling_context = 'CONC_UPDATE') then
19189 
19190         pa_proj_task_struc_pub.set_update_wbs_flag
19191         (p_project_id            => p_project_id
19192         ,p_structure_version_id  => p_structure_version_id
19193         ,p_update_wbs_flag       => 'Y'
19194         ,x_return_status         => l_return_status
19195         ,x_msg_count             => l_msg_count
19196         ,x_msg_data              => l_msg_data);
19197 
19198         if (l_return_status = FND_API.G_RET_STS_SUCCESS) then
19199 
19200                 commit;
19201 
19202         end if;
19203 
19204      end if;
19205 
19206      -- Bug # 4655059.
19207 
19208      IF l_debug_mode = 'Y' THEN
19209           pa_debug.g_err_stage:= 'Unexpected Error'||errbuf;
19210           pa_debug.log_message(pa_debug.g_err_stage);
19211           pa_debug.reset_curr_function;
19212      END IF;
19213      -- Bug 4360407 : We should no do RAISE, otherweise concurrent process will not error out
19214      --RAISE;
19215      RETURN;
19216 END PROCESS_WBS_UPDATES_CONC;
19217 
19218 /*==================================================================
19219  This API takes care of calling the plannable tasks api and the task
19220  weightage api depending on the context. For a financial only structure
19221  version, only the plannable tasks api is called and for a workplan only
19222  structure version only the task weighting api is called. This api will
19223  be called from the concurrent executable and can be called from the other
19224  places where online processing is expected.
19225  Bug 3010538 : New API for the Task Weighting Enhancement.
19226  ==================================================================*/
19227 
19228 PROCEDURE PROCESS_WBS_UPDATES
19229    (  p_api_version_number    IN   NUMBER    := 1.0
19230      ,p_commit                IN   VARCHAR2  := FND_API.G_FALSE
19231      ,p_init_msg_list         IN   VARCHAR2  := FND_API.G_FALSE
19232      ,p_calling_context       IN   VARCHAR2  := 'UPDATE'
19233      ,p_project_id            IN   pa_projects_all.project_id%TYPE
19234      ,p_structure_version_id  IN   pa_proj_element_versions.element_version_id%TYPE
19235      ,p_pub_struc_ver_id      IN   NUMBER    := NULL
19236      ,p_pub_prog_flag         IN   VARCHAR2  := 'Y' --bug 4019845
19237      ,p_rerun_flag            IN   VARCHAR2  := null --bug 4589289
19238      ,x_return_status         OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
19239      ,x_msg_count             OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
19240      ,x_msg_data              OUT  NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
19241 AS
19242 
19243 -- Cursors Required.
19244 
19245 -- This cursor is used to decide if the structure version corresponds to a particular
19246 -- Structure type. Depending on this the plannable tasks api and the task weightage calculation
19247 -- api will be called.
19248 CURSOR cur_structure_type(c_project_id pa_projects_all.project_id%TYPE,
19249                           c_structure_version_id pa_proj_element_versions.element_version_id%TYPE,
19250                           c_structure_type pa_structure_types.structure_type%TYPE)
19251 IS
19252 SELECT 'Y'
19253 FROM   pa_proj_element_versions ver,
19254        pa_proj_structure_types pst,
19255        pa_structure_types st
19256 WHERE  ver.element_version_id   = c_structure_version_id
19257 AND    ver.project_id           = c_project_id
19258 AND    pst.proj_element_id      = ver.proj_element_id
19259 AND    pst.structure_type_id    = st.structure_type_id
19260 AND    st.structure_type        = c_structure_type;
19261 
19262 l_update_wbs_flag               pa_proj_elem_ver_structure.process_update_wbs_flag%TYPE;
19263 l_structure_type_flag           VARCHAR2(1);
19264 l_request_id                    pa_proj_elem_ver_structure.conc_request_id%TYPE;
19265 
19266 l_msg_count                     NUMBER := 0;
19267 l_data                          VARCHAR2(2000);
19268 l_msg_data                      VARCHAR2(2000);
19269 l_msg_index_out                 NUMBER;
19270 l_debug_mode            VARCHAR2(1);
19271 
19272 l_debug_level2                  CONSTANT NUMBER := 2;
19273 l_debug_level3                  CONSTANT NUMBER := 3;
19274 l_debug_level4                  CONSTANT NUMBER := 4;
19275 l_debug_level5                  CONSTANT NUMBER := 5;
19276 
19277 l_publish_flag                  VARCHAR2(1);
19278 l_online_flag                   VARCHAR2(1);
19279 l_pub_ver_id                    NUMBER;
19280 l_prev_ver_id                   NUMBER;
19281 l_proc_code                     VARCHAR2(30);
19282 l_msg_code                      VARCHAR2(30);
19283 
19284 --bug 3762882
19285 CURSOR get_prev_published_ver(c_struc_ver_id NUMBER) IS
19286 select a.element_version_id
19287 from pa_proj_elem_ver_structure a,
19288      pa_proj_element_versions b
19289 WHERE a.project_id = p_project_id
19290 AND a.proj_element_id = b.proj_element_id
19291 AND b.element_version_id = c_struc_ver_id
19292 AND a.LATEST_EFF_PUBLISHED_FLAG <> 'Y'
19293 AND a.STATUS_CODE = 'STRUCTURE_PUBLISHED'
19294 ORDER BY published_date desc;
19295 --end bug 3762882
19296 
19297 --bug 4019845
19298   CURSOR get_scheduled_dates(c_project_id NUMBER, c_structure_version_id NUMBER)
19299   IS
19300   SELECT scheduled_start_date, scheduled_finish_date
19301   FROM pa_proj_elem_ver_schedule
19302   WHERE project_id = c_project_id
19303   AND   element_version_id = c_structure_version_id;
19304 
19305   CURSOR get_proj_rec_ver_number(c_project_id NUMBER)
19306   IS
19307   SELECT record_version_number
19308   FROM pa_projects_all
19309   WHERE project_id = c_project_id;
19310 
19311   CURSOR get_struc_id(c_project_id NUMBER, c_struc_ver_id NUMBER) IS
19312   select pevs.proj_element_id
19313   from pa_proj_elem_ver_structure pevs
19314   where pevs.element_version_id = c_struc_ver_id
19315   and pevs.project_id = c_project_id;
19316 
19317  --bug 4472071
19318    -- bug 6414995 : Cursor query changed by adding join with pa_fin_plan_types_b
19319   CURSOR cur_chk_pji_failed
19320   IS
19321     SELECT 'Y'
19322          FROM pji_pjp_wbs_header h,
19323           pa_fin_plan_types_b fin
19324     WHERE h.wbs_version_id= p_pub_struc_ver_id
19325     AND   fin.use_for_workplan_flag='Y'
19326     AND   h.plan_type_id=fin.fin_plan_type_id;
19327     /*
19328     SELECT 'Y'
19329 
19330      FROM pji_pjp_wbs_header
19331     WHERE wbs_version_id= p_pub_struc_ver_id;
19332     */
19333 
19334   l_dummy_pji_char    VARCHAR2(1);
19335  --bug 4472071
19336 
19337 
19338   l_project_id          NUMBER := p_project_id;
19339   l_responsibility_id       NUMBER := FND_GLOBAL.resp_id;
19340   l_resp_appl_id		NUMBER := FND_GLOBAL.resp_appl_id; -- 5233777
19341   l_financial_type      VARCHAR2(1);
19342   l_workplan_type       VARCHAR2(1);
19343   l_scheduled_start_date    DATE;
19344   l_scheduled_finish_date   DATE;
19345   l_proj_record_ver_number  NUMBER;
19346   l_proj_start_date     DATE;
19347   l_proj_completion_date    DATE;
19348   l_proj_element_id     NUMBER; --structure id
19349   l_as_of_date          DATE;
19350   l_task_weight_basis_code  pa_proj_progress_attr.task_weight_basis_code%TYPE;
19351   l_share_flag          VARCHAR2(1)  := 'N';
19352   l_copy_actuals_flag       VARCHAR2(1)  := 'Y';
19353   l_upd_new_elem_ver_id_flag    VARCHAR2(1) := 'Y'; --rtarway, 3951024
19354   l_i_msg_count         NUMBER := 0;
19355   l_i_msg_data          PA_VC_1000_2000:= PA_VC_1000_2000(1);
19356   l_i_return_status     VARCHAR2(1);
19357   l_user_id         NUMBER := FND_GLOBAL.USER_ID;-- rtarway, 4030358, changed from login id to user_id
19358 --end bug 4019845
19359   l_out_online_flag     VARCHAR2(1);
19360 
19361   l_plan_version_id             NUMBER;    --bug 4587145
19362   l_pub_wp_ok                   VARCHAR2(1) := 'N'; --bug 5029112
19363 
19364 BEGIN
19365     IF p_commit = FND_API.G_TRUE THEN
19366         savepoint process_wbs_updates;
19367     END IF;
19368 
19369     IF p_init_msg_list = FND_API.G_TRUE THEN
19370         FND_MSG_PUB.initialize;
19371     END IF;
19372 
19373     x_msg_count := 0;
19374     x_return_status := FND_API.G_RET_STS_SUCCESS;
19375     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
19376 
19377     IF l_debug_mode = 'Y' THEN
19378         pa_debug.write(G_PKG_NAME, 'Entering PROCESS_WBS_UPDATES', 3);
19379         pa_debug.set_curr_function( p_function   => 'PROCESS_WBS_UPDATES', p_debug_mode => l_debug_mode );
19380     END IF;
19381 
19382     -- Check for business rules violations
19383     IF l_debug_mode = 'Y' THEN
19384         pa_debug.write(G_PKG_NAME, 'Validating input parameters', 3);
19385         pa_debug.write(G_PKG_NAME, 'p_calling_context = '|| p_calling_context, 3);
19386         pa_debug.write(G_PKG_NAME, 'p_project_id = '|| p_project_id, 3);
19387         pa_debug.write(G_PKG_NAME, 'p_structure_version_id = '|| p_structure_version_id, 3);
19388         pa_debug.write(G_PKG_NAME, 'p_pub_struc_ver_id = '|| p_pub_struc_ver_id, 3);
19389         pa_debug.write(G_PKG_NAME, 'p_pub_prog_flag = '|| p_pub_prog_flag, 3);
19390     END IF;
19391 
19392     -- Throw an error if any of the mandatory parameter is NULL.
19393     IF (p_project_id IS NULL) OR (p_structure_version_id IS NULL) THEN
19394         PA_UTILS.ADD_MESSAGE
19395             (p_app_short_name => 'PA',
19396             p_msg_name       => 'PA_INV_PARAM_PASSED');
19397         RAISE Invalid_Arg_Exc_WP;
19398     END IF;
19399 
19400     l_update_wbs_flag := pa_project_structure_utils.GET_UPDATE_WBS_FLAG(p_project_id => p_project_id,
19401                                                                          p_structure_version_id => p_structure_version_id);
19402 
19403     IF l_debug_mode = 'Y' THEN
19404         pa_debug.write(G_PKG_NAME, 'l_update_wbs_flag = '|| l_update_wbs_flag, 3);
19405     END IF;
19406 
19407 --bug 4409337  moved from below to make use of some of these variables for bugfix.
19408     l_workplan_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
19409     l_financial_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'FINANCIAL');
19410     l_share_flag       := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(l_project_id);
19411 
19412 
19413         IF l_debug_mode = 'Y' THEN
19414                 pa_debug.write(G_PKG_NAME, 'l_workplan_type = '|| l_workplan_type, 3);
19415                 pa_debug.write(G_PKG_NAME, 'l_financial_type = '|| l_financial_type, 3);
19416                 pa_debug.write(G_PKG_NAME, 'l_share_flag = '|| l_share_flag, 3);
19417         END IF;
19418 --bug 4409337
19419 
19420         IF (p_calling_context = 'ASGMT_PLAN_CHANGE') THEN  ---bug 4492493
19421              --- find the as_of_date for which to rollup and
19422              --- rollup method
19423              l_task_weight_basis_code := pa_progress_utils.get_task_weighting_basis(p_project_id => p_project_id);
19424              begin
19425                 select max(as_of_date)
19426                 into l_as_of_date
19427                 from pa_progress_rollup ppr
19428                 where ppr.project_id = p_project_id
19429                 and ppr.structure_version_id is null
19430                 and ppr.structure_type = 'WORKPLAN'
19431                 and ppr.current_flag <> 'W'
19432                 ;
19433              exception when others then
19434                 return;
19435              end;
19436 
19437              IF l_debug_mode = 'Y' THEN
19438                 pa_debug.write(G_PKG_NAME, 'Calling populate_pji_tab_for_plan' , 3);
19439              END IF;
19440 
19441              pa_progress_pub.populate_pji_tab_for_plan(
19442                           p_init_msg_list        => FND_API.G_FALSE
19443                          ,p_commit               => FND_API.G_FALSE
19444                          ,p_project_id           => p_Project_ID
19445                          ,p_structure_version_id => p_structure_version_id
19446                          ,p_baselined_str_ver_id => p_structure_version_id
19447                          ,p_structure_type       => 'WORKPLAN'
19448                          ,p_program_rollup_flag  => 'Y' -- 4392189
19449                          ,p_calling_context      => 'SUMMARIZE' -- 4392189
19450                          ,x_return_status        => x_return_status
19451                          ,x_msg_count            => x_msg_count
19452                          ,x_msg_data             => x_msg_data);
19453              IF l_debug_mode = 'Y' THEN
19454                 pa_debug.write(G_PKG_NAME, 'After populate_pji_tab_for_plan  x_return_status='|| x_return_status, 3);
19455              END IF;
19456 
19457              IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19458                  raise Invalid_Arg_Exc_WP;
19459              END IF;
19460              IF l_debug_mode = 'Y' THEN
19461                  pa_debug.write(G_PKG_NAME, 'Calling ROLLUP_PROGRESS_PVT', 3);
19462              END IF;
19463 
19464              PA_PROGRESS_PVT.ROLLUP_PROGRESS_PVT(
19465                       p_init_msg_list             => FND_API.G_FALSE
19466                      ,p_commit                    => FND_API.G_FALSE
19467                      ,p_project_id                => p_Project_ID
19468                      ,p_structure_version_id      => p_structure_version_id
19469                      ,p_as_of_date                => l_as_of_date
19470                      ,p_wp_rollup_method          => l_task_weight_basis_code
19471                      ,p_rollup_entire_wbs         => 'Y'
19472                      ,p_working_wp_prog_flag      => 'N'
19473                      ,x_return_status             => x_return_status
19474                      ,x_msg_count                 => x_msg_count
19475                      ,x_msg_data                  => x_msg_data);
19476 
19477              IF l_debug_mode = 'Y' THEN
19478                  pa_debug.write(G_PKG_NAME, 'After ROLLUP_PROGRESS_PVT  x_return_status='|| x_return_status, 3);
19479              END IF;
19480 
19481              IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19482                  raise Invalid_Arg_Exc_WP;
19483              END IF;
19484              IF l_debug_mode = 'Y' THEN
19485                  pa_debug.write(G_PKG_NAME, 'Calling PROGRAM_ROLLUP_PVT', 3);
19486              END IF;
19487 
19488              PA_PROGRESS_PVT.PROGRAM_ROLLUP_PVT(
19489                         p_init_msg_list        => FND_API.G_FALSE
19490                        ,p_commit               => FND_API.G_FALSE
19491                        ,p_validate_only        => FND_API.G_FALSE
19492                        ,p_calling_module       => p_calling_context
19493                        ,p_project_id           => p_Project_ID
19494                        ,p_as_of_date           => l_as_of_date
19495                        ,p_structure_type       => 'WORKPLAN'
19496                        ,p_structure_ver_id     => p_structure_version_id
19497                        ,x_return_status        => x_return_status
19498                        ,x_msg_count            => x_msg_count
19499                        ,x_msg_data             => x_msg_data);
19500 
19501              IF l_debug_mode = 'Y' THEN
19502                 pa_debug.write(G_PKG_NAME, 'After PROGRAM_ROLLUP_PVT  x_return_status='|| x_return_status, 3);
19503              END IF;
19504 
19505              IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19506                    raise Invalid_Arg_Exc_WP;
19507              END IF; --- bug 4492493
19508 
19509     -- Begin code to fix Bug # 4262985.
19510     -- Bug 4392189 : Added call of WBS_MAINT in APPLY_PROGRESS Context
19511     ELSIF (p_calling_context = 'ONLINE_APPLY_PROGRESS' OR p_calling_context = 'CONC_APPLY_PROGRESS') THEN
19512         IF p_calling_context = 'ONLINE_APPLY_PROGRESS' THEN
19513             l_online_flag := 'Y';
19514         ELSE
19515             l_online_flag := 'N';
19516         END IF;
19517 
19518         IF l_update_wbs_flag = 'Y' THEN
19519             IF l_debug_mode = 'Y' THEN
19520                 pa_debug.write(G_PKG_NAME, 'Calling PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT with l_online_flag='||l_online_flag, 3);
19521             END IF;
19522 
19523             BEGIN
19524               -- l_online_flag = 'Y', then it is online
19525               -- 'N' , concurrent
19526               -- Even if it is Y, then wbs_maint defers it for Financial and version disabled case
19527 
19528                 PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT(
19529                     p_new_struct_ver_id => p_structure_version_id
19530                    ,p_old_struct_ver_id => p_structure_version_id
19531                    ,p_project_id => p_project_id
19532                    ,p_online_flag => l_online_flag
19533                    ,p_calling_context => 'APPLY_PROGRESS'
19534                    ,p_rerun_flag => p_rerun_flag --bug 4589289
19535                    ,x_request_id => l_request_id
19536                    ,x_processing_code => l_proc_code
19537                    ,x_msg_code => l_msg_Code
19538                    ,x_return_status => x_return_status
19539                    ,x_online_flag => l_out_online_flag
19540                   );
19541                 IF l_debug_mode = 'Y' THEN
19542                     pa_debug.write(G_PKG_NAME, 'After Call PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT with x_return_status='||x_return_status||' l_out_online_flag='||l_out_online_flag, 3);
19543                 END IF;
19544             EXCEPTION
19545                 WHEN OTHERS THEN
19546                     fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19547                            p_procedure_name => 'PROCESS_WBS_UDPATES',
19548                            p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT Failed in Apply Progress Mode: SQLERRM='||SQLERRM,1,240));
19549                 RAISE Invalid_Arg_Exc_WP;
19550             END;
19551 
19552                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
19553                 raise Invalid_Arg_Exc_WP;
19554             END IF;
19555         END IF; -- l_update_wbs_flag = 'Y'
19556 
19557 
19558         IF NVL(l_update_wbs_flag,'N') = 'N' OR NVL(l_out_online_flag, 'Y') <> 'N' THEN
19559             IF l_debug_mode = 'Y' THEN
19560                 pa_debug.write(G_PKG_NAME, 'Calling PA_PROGRESS_PUB.APPLY_LP_PROG_ON_CWV', 3);
19561             END IF;
19562 
19563             PA_PROGRESS_PUB.APPLY_LP_PROG_ON_CWV
19564             (p_project_id                  =>      p_project_id
19565             ,p_working_str_version_id      =>      p_structure_version_id
19566             ,x_return_status               =>          x_return_status
19567             ,x_msg_count                   =>          x_msg_count
19568             ,x_msg_data                    =>          x_msg_data);
19569 
19570             IF l_debug_mode = 'Y' THEN
19571                 pa_debug.write(G_PKG_NAME, 'After Call  PA_PROGRESS_PUB.APPLY_LP_PROG_ON_CWV x_return_status='||x_return_status, 3);
19572             END IF;
19573 
19574         END IF;
19575 
19576             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
19577             raise Invalid_Arg_Exc_WP;
19578         END IF;
19579 
19580     ELSE -- IF (p_calling_context = 'ONLINE_APPLY_PROGRESS' OR p_calling_context = 'CONC_APPLY_PROGRESS') THEN
19581 
19582         -- End code to fix Bug # 4262985.
19583 
19584 
19585         --hsiu: bug 3035902
19586         --commented condition because there can be partial process
19587         --on financial planning API. Condition is added after processing
19588         --financial planning tasks.
19589         /*
19590         IF l_update_wbs_flag = 'N' THEN
19591             -- No further processing is required for this structure version. Return.
19592             -- TWUT.
19593             IF l_debug_mode = 'Y' THEN
19594                 pa_debug.g_err_stage:= 'No updates required for this structure version.';
19595                 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
19596             END IF;
19597             RETURN;
19598         END IF;
19599         */
19600 
19601         -- Get the request id. If the request id returned is -1 then set it to null.
19602         l_request_id := FND_GLOBAL.CONC_REQUEST_ID;
19603         IF l_request_id = -1 THEN
19604             l_request_id := NULL;
19605         END IF;
19606 
19607         -- Check if the structure version to be processed corresponds to the FINANCIAL structure.
19608         -- If yes, do the processing required for the financial version.
19609         OPEN cur_structure_type(p_project_id, p_structure_version_id,'FINANCIAL');
19610         FETCH cur_structure_type INTO l_structure_type_flag;
19611         CLOSE cur_structure_type;
19612 
19613         -- TWUT.
19614         IF l_debug_mode = 'Y' THEN
19615             pa_debug.write(G_PKG_NAME, 'Financial structure type flag '||l_structure_type_flag, 3);
19616         END IF;
19617 
19618         /*
19619         IF nvl(l_structure_type_flag,'N') = 'Y' THEN
19620             x_return_status := FND_API.G_RET_STS_SUCCESS;
19621             -- Call the financial planning API.
19622             pa_fp_refresh_elements_pub.refresh_planning_elements(
19623                 p_project_id        => p_project_id
19624                 ,p_request_id        => l_request_id
19625                 ,x_return_status     => x_return_status
19626                 ,x_msg_count         => x_msg_count
19627                 ,x_msg_data          => x_msg_data
19628                 );
19629             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
19630                 IF l_debug_mode = 'Y' THEN
19631                     pa_debug.g_err_stage := 'Error calling the financial planning API';
19632                     pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
19633                 END IF;
19634                 Raise Invalid_Arg_Exc_WP;
19635             END IF;
19636         END IF;
19637         */
19638 
19639                 -- Begin fix for Bug # 4409337.
19640 
19641                 if nvl(l_structure_type_flag,'N') = 'Y'
19642                    AND p_calling_context IN (  'ONLINE_UPDATE', 'CONC_UPDATE' )   --bug 4472071
19643                    AND ( l_share_flag = 'N' OR l_workplan_type = 'N' ) --call WBS maint only if the project is either split financial or financial only.
19644                 then
19645 
19646                         x_return_status := FND_API.G_RET_STS_SUCCESS;
19647 
19648                         -- Call the PJI API.
19649 
19650                                 PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT(
19651                                     p_new_struct_ver_id => p_structure_version_id
19652                                    ,p_old_struct_ver_id => p_structure_version_id
19653                                    ,p_project_id => p_project_id
19654                                    ,p_online_flag => l_online_flag
19655                                    ,p_calling_context => p_calling_context
19656                                    ,p_rerun_flag => p_rerun_flag --bug 4589289
19657                                    ,x_request_id => l_request_id
19658                                    ,x_processing_code => l_proc_code
19659                                    ,x_msg_code => l_msg_Code
19660                                    ,x_return_status => x_return_status
19661                                    ,x_online_flag => l_out_online_flag
19662                                   );
19663 
19664                         if x_return_status <> FND_API.G_RET_STS_SUCCESS then
19665 
19666                                 if l_debug_mode = 'Y' then
19667 
19668                                         pa_debug.g_err_stage := 'Error calling the financial planning API';
19669                                         pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level4);
19670 
19671                                 end if;
19672 
19673                                 Raise Invalid_Arg_Exc_WP;
19674                         end if;
19675 
19676                 end if;
19677 
19678                 -- End fix for Bug # 4409337.
19679 
19680         --hsiu: bug 3035902
19681         --Adding condition because there can be partial process
19682         --on financial planning API and we should not check the flag
19683         --for financial planning.
19684         --hsiu: commented for PJI integration
19685         /*
19686         IF l_update_wbs_flag = 'N' THEN
19687             -- No further processing is required for this structure version. Return.
19688             -- TWUT.
19689             IF l_debug_mode = 'Y' THEN
19690                 pa_debug.g_err_stage:= 'No updates required for this structure version.';
19691                 pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
19692             END IF;
19693             RETURN;
19694         END IF;
19695         */
19696         --end bug 3035902 changes
19697 
19698         -- Re initilaize the local as it is again used for a cursor fetch.
19699         -- TWUT
19700         l_structure_type_flag := NULL;
19701 
19702         -- Check if the sructure version to be processed corresponds to the WORKPLAN structure.
19703         -- If yes, do the processing required for the workplan version.
19704         OPEN cur_structure_type(p_project_id, p_structure_version_id, 'WORKPLAN');
19705         FETCH cur_structure_type INTO l_structure_type_flag;
19706         CLOSE cur_structure_type;
19707 
19708         -- TWUT.
19709         IF l_debug_mode = 'Y' THEN
19710             pa_debug.g_err_stage:= 'Workplan structure type flag '||l_structure_type_flag;
19711             pa_debug.write(G_PKG_NAME, 'Workplan structure type flag '||l_structure_type_flag, 3);
19712         END IF;
19713 
19714         IF p_calling_context <> 'COPY_PROJECT' THEN --bug 3035902 maansari
19715             --PJI changes
19716             --bug
19717             IF p_calling_context = 'ONLINE_PUBLISH' THEN
19718                 --bug 3762882
19719                 OPEN get_prev_published_ver(p_pub_struc_ver_id);
19720                 FETCH get_prev_published_ver INTO l_prev_ver_id;
19721                 CLOSE get_prev_published_ver;
19722 
19723                 --bug 4019845
19724                 --set current published as working for edit
19725 
19726                 UPDATE pa_proj_elem_ver_structure
19727                 SET status_code = 'STRUCTURE_WORKING',
19728                 LOCKED_BY_PERSON_ID = (select locked_by_person_id
19729                          from pa_proj_elem_ver_structure
19730                          where project_id = l_project_id
19731                          and element_version_id = p_structure_version_id),
19732                 LOCK_STATUS_CODE = 'LOCKED'
19733                 WHERE project_id = l_project_id
19734                 AND element_version_id = p_pub_struc_ver_id;
19735 
19736                 --end bug 4019845
19737                 --end bug 3762882
19738                 l_pub_ver_id := p_pub_struc_ver_id;
19739                 l_online_flag := 'Y';
19740                 l_publish_flag := 'Y';
19741             ELSIF p_calling_context = 'ONLINE_UPDATE' THEN
19742                 --bug 3574457: changed to p_structure_version_id
19743                 l_pub_ver_id := p_structure_version_id;
19744                 l_online_flag := 'Y';
19745                 l_publish_flag := 'N';
19746                 ELSIF p_calling_context = 'CONC_PUBLISH' THEN
19747                 --bug 3574457: changed to p_pub_struc_ver_id
19748                 --bug 3762882
19749 
19750                 OPEN get_prev_published_ver(p_pub_struc_ver_id);
19751                 FETCH get_prev_published_ver INTO l_prev_ver_id;
19752                 CLOSE get_prev_published_ver;
19753 
19754                 --bug 4019845
19755                 --set current published as working for edit
19756 
19757                 UPDATE pa_proj_elem_ver_structure
19758                 SET status_code = 'STRUCTURE_WORKING',
19759                 LOCKED_BY_PERSON_ID = (select locked_by_person_id
19760                          from pa_proj_elem_ver_structure
19761                          where project_id = l_project_id
19762                          and element_version_id = p_structure_version_id),
19763                 LOCK_STATUS_CODE = 'LOCKED'
19764                 WHERE project_id = l_project_id
19765                 AND element_version_id = p_pub_struc_ver_id;
19766 
19767                 --end bug 4019845
19768                 --end bug 3762882
19769 
19770                 l_pub_ver_id := p_pub_struc_ver_id;
19771                 l_online_flag := 'N';
19772                 l_publish_flag := 'Y';
19773             ELSIF p_calling_context = 'CONC_UPDATE' THEN
19774                 l_pub_ver_id := p_structure_version_id;
19775                 l_online_flag := 'N';
19776                 l_publish_flag := 'N';
19777             END IF;
19778 
19779             -- Bug 3762882 : This code should be commented as FP is also
19780             -- pushing actuals for resource assignments so we should not push it for tasks here.
19781             -- BEGIN Bug 4284444 : Commented
19782 
19783             PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';  --4149392 fixed during fixing 4186512
19784 
19785             --bug 4019845
19786             IF (l_publish_flag = 'Y') THEN
19787                 --*******************************************
19788                 --Process WBS in PUBLISH mode
19789                 --*******************************************
19790 
19791                          -- bug 5118313 Before proceding further with publishing, first correct the WBS on the working version.
19792                          --For performance improvements, PJI copies the WBS from working version to the publish version and hence a call to plan update will correct the data on working version before it gets copied to the published version.
19793 
19794                                 --bug 4587145  Call plan update one more time for working version in the publish mode.
19795                                 --This call is required in the publish if a workplan is published without running process WBS update after making some
19796                                 --wbs changes like indent/outdent/copy/move.
19797                                 BEGIN
19798 
19799                                         BEGIN
19800 
19801                                             IF l_debug_mode = 'Y' THEN
19802                                                 pa_debug.write(G_PKG_NAME, 'Calling Pa_Fp_wp_gen_amt_utils.get_wp_version_id in PUBLISH mode for workign version', 3);
19803                                             END IF;
19804 
19805                                             l_plan_version_id := Pa_Fp_wp_gen_amt_utils.get_wp_version_id(
19806                                                           p_project_id        => l_project_id,
19807                                                           p_plan_type_id      => -1,
19808                                                           p_proj_str_ver_id   => p_structure_version_id) ;
19809 
19810                                             IF l_debug_mode = 'Y' THEN
19811                                                 pa_debug.write(G_PKG_NAME, 'l_plan_version_id in UPDATE mode for working version='||l_plan_version_id, 3);
19812                                             END IF;
19813 
19814                                         EXCEPTION
19815                                         WHEN OTHERS THEN
19816                                                 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19817                                                 p_procedure_name => 'PROCESS_WBS_UPDATES',
19818                                                 p_error_text => SUBSTRB('Call of  Pa_Fp_wp_gen_amt_utils.get_wp_version_id is failed for PUBLISH Mode for working '||
19819                                                       'verison: SQLERRM='||SQLERRM,1,120));
19820                                                 RAISE Invalid_Arg_Exc_WP;
19821 
19822                                         END;
19823                                         --end bug 4587145
19824 
19825                                         IF l_debug_mode = 'Y' THEN
19826                                                 pa_debug.write(G_PKG_NAME, 'Calling PLAN_UPDATE in PUBLISH mode for working version', 3);
19827                                         END IF;
19828                                         PA_TASK_PUB1.G_CALL_PJI_ROLLUP := null;  --set the flag so that PJI rolls up data on the working version.
19829 
19830                                         PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE (x_msg_code => l_msg_code,
19831                                                            p_plan_version_id     => l_plan_version_id,  --bug 4587145
19832                                                            x_return_status => x_return_status);
19833 
19834                                         IF l_debug_mode = 'Y' THEN
19835                                                 pa_debug.write(G_PKG_NAME,'After PLAN_UPDATE in PUBLISH mode for working verison x_return_status='||
19836                                                        x_return_status,l_debug_level3);
19837                                         END IF;
19838                                         PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N'; --Set the flag back to 'N' to bypass any PJI rollup api call untill explicit plan_update gets called.
19839                                 EXCEPTION
19840                                         WHEN OTHERS THEN
19841                                                 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
19842                                                  p_procedure_name => 'PROCESS_WBS_UPDATES',
19843                                                  p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE failed in PUBLISH mode for'||
19844                                                                  ' working verison:SQLERRM='||SQLERRM,1,120));
19845                                                 RAISE Invalid_Arg_Exc_WP;
19846                                 END;
19847 
19848                                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
19849                                         Raise Invalid_Arg_Exc_WP;
19850                                 END IF;
19851 
19852                                 --end bug 4587145
19853                                 --end bug 5118313
19854 
19855 
19856                           --bug 4472071  check if PJI summarization failed when WBS_MAIN is called. This means that the following
19857                           --api need not run again.
19858                            OPEN cur_chk_pji_failed;
19859                            FETCH cur_chk_pji_failed INTO l_dummy_pji_char;
19860                            IF cur_chk_pji_failed%NOTFOUND
19861                            THEN
19862                            --bug 4472071
19863                 --all code from publishing (before calling process_wbs_updates)
19864 
19865                 IF l_debug_mode = 'Y' THEN
19866                     pa_debug.write(G_PKG_NAME, 'Calling PA_Relationship_Pvt.Copy_Intra_Dependency', 3);
19867                 END IF;
19868 
19869                 PA_Relationship_Pvt.Copy_Intra_Dependency (
19870                     P_Source_Ver_Tbl  => NULL,
19871                     P_Destin_Ver_Tbl  => NULL,
19872                     P_source_struc_ver_id => p_structure_version_id,
19873                     p_dest_struc_ver_id => l_pub_ver_id,
19874                     X_Return_Status   => X_Return_Status,
19875                     X_Msg_Count       => X_Msg_Count,
19876                     X_Msg_Data        => X_Msg_Data
19877                     );
19878 
19879                 IF l_debug_mode = 'Y' THEN
19880                     pa_debug.write(G_PKG_NAME, 'After Copy_Intra_Dependency X_Return_Status='||X_Return_Status, 3);
19881                 END IF;
19882 
19883                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19884                     RAISE Invalid_Arg_Exc_WP;
19885                 END IF;
19886 
19887                 IF l_debug_mode = 'Y' THEN
19888                     pa_debug.write(G_PKG_NAME, 'Calling Publish_Inter_Proj_Dep', 3);
19889                 END IF;
19890 
19891                 PA_RELATIONSHIP_PVT.Publish_Inter_Proj_Dep (  -- This API needs to be called
19892                     p_publishing_struc_ver_id => p_structure_version_id,
19893                     p_previous_pub_struc_ver_id => l_prev_ver_id,
19894                     p_published_struc_ver_id => l_pub_ver_id,
19895                     X_Return_Status      => X_Return_Status,
19896                     X_Msg_Count          => X_Msg_Count,
19897                     X_Msg_Data           => X_Msg_Data
19898                     );
19899 
19900                 IF l_debug_mode = 'Y' THEN
19901                     pa_debug.write(G_PKG_NAME, 'After Publish_Inter_Proj_Dep X_Return_Status='||X_Return_Status, 3);
19902                 END IF;
19903 
19904                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19905                     RAISE Invalid_Arg_Exc_WP;
19906                 END IF;
19907 
19908                 IF l_debug_mode = 'Y' THEN
19909                     pa_debug.write(G_PKG_NAME, 'Calling Copy_OG_Lnk_For_Subproj_Ass', 3);
19910                 END IF;
19911 
19912 
19913                 PA_RELATIONSHIP_PVT.Copy_OG_Lnk_For_Subproj_Ass(
19914                     p_src_str_version_id      =>  p_structure_version_id,
19915                     p_dest_str_version_id     =>  l_pub_ver_id,  -- Destination Str version id can be of published str also
19916                     x_return_status           =>  X_Return_Status,
19917                     x_msg_count               =>  X_Msg_Count,
19918                     x_msg_data                =>  X_Msg_Data
19919                     );
19920 
19921 
19922                 IF l_debug_mode = 'Y' THEN
19923                     pa_debug.write(G_PKG_NAME, 'After Copy_OG_Lnk_For_Subproj_Ass X_Return_Status='||X_Return_Status, 3);
19924                 END IF;
19925 
19926                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19927                     RAISE Invalid_Arg_Exc_WP;
19928                 END IF;
19929 
19930 
19931                 IF l_debug_mode = 'Y' THEN
19932                     pa_debug.write(G_PKG_NAME, 'Calling Move_CI_Lnk_For_subproj_step1', 3);
19933                 END IF;
19934 
19935                 PA_RELATIONSHIP_PVT.Move_CI_Lnk_For_subproj_step1(
19936                     p_src_str_version_id      =>  p_structure_version_id,
19937                     p_pub_str_version_id      =>  l_pub_ver_id,
19938                     p_last_pub_str_version_id =>  l_prev_ver_id,
19939                     x_return_status           =>  x_return_status,
19940                     x_msg_count               =>  x_msg_count,
19941                     x_msg_data                =>  x_msg_data);
19942 
19943                 IF l_debug_mode = 'Y' THEN
19944                     pa_debug.write(G_PKG_NAME, 'After Move_CI_Lnk_For_subproj_step1 X_Return_Status='||X_Return_Status, 3);
19945                 END IF;
19946 
19947                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19948                     RAISE Invalid_Arg_Exc_WP;
19949                 END IF;
19950 
19951                 IF l_debug_mode = 'Y' THEN
19952                     pa_debug.write(G_PKG_NAME, 'Calling copy_mapping', 3);
19953                 END IF;
19954 
19955 
19956                 PA_PROJ_STRUC_MAPPING_PUB.copy_mapping(
19957                     p_context             => 'PUBLISH_VERSION'
19958                     ,p_src_project_id      => l_project_id
19959                     ,p_dest_project_id     => l_project_id
19960                     ,p_src_str_version_id  => p_structure_version_id
19961                     ,p_dest_str_version_id => l_pub_ver_id
19962                     ,x_return_status       => x_return_status
19963                     ,x_msg_count           => x_msg_count
19964                     ,x_msg_data            => x_msg_data
19965                     );
19966 
19967                 IF l_debug_mode = 'Y' THEN
19968                     pa_debug.write(G_PKG_NAME, 'After copy_mapping X_Return_Status='||X_Return_Status, 3);
19969                 END IF;
19970 
19971                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
19972                     RAISE Invalid_Arg_Exc_WP;
19973                 END IF;
19974 
19975                 DECLARE
19976                     src_versions_tab   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
19977                     dest_versions_tab  SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
19978                     prev_pub_tab       SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); --bug 3847386
19979                 BEGIN
19980                     src_versions_tab.extend(1);
19981                     dest_versions_tab.extend(1);
19982                     src_versions_tab(1)  := p_structure_version_id;
19983                     dest_versions_tab(1) :=  l_pub_ver_id;
19984                     prev_pub_tab.extend(1);   --bug 3847386
19985                     prev_pub_tab(1) := l_prev_ver_id;   --bug 3847386
19986                     -- Copies budget versions, resource assignments and budget lines as required
19987                     -- for the workplan version.
19988                     --Smukka Bug No. 3474141 Date 03/01/2004
19989                     --moved PA_FP_COPY_FROM_PKG.copy_wp_budget_versions into plsql block
19990                     BEGIN
19991 
19992                         IF l_debug_mode = 'Y' THEN
19993                             pa_debug.write(G_PKG_NAME, 'Calling copy_wp_budget_versions', 3);
19994                         END IF;
19995 
19996 			PA_TASK_ASSIGNMENT_UTILS.g_process_flow := 'PUBLISH'; -- 4646016
19997 
19998                         PA_FP_COPY_FROM_PKG.copy_wp_budget_versions(
19999                             p_source_project_id            => l_project_id
20000                             ,p_target_project_id            => l_project_id
20001                             ,p_src_sv_ids_tbl               => src_Versions_Tab
20002                             ,p_target_sv_ids_tbl            => dest_Versions_Tab
20003                             ,p_copy_act_from_str_ids_tbl    => prev_pub_tab --bug 3847386
20004                                                         --,p_publish_mode                 => 'Y'          --bug 4543744
20005                                                         ,p_copy_mode                    => 'V'     --bug  5118313
20006                             ,x_return_status                => x_return_status
20007                             ,x_msg_count                    => x_msg_count
20008                             ,x_Msg_data                     => x_msg_data
20009                             );
20010 
20011 			PA_TASK_ASSIGNMENT_UTILS.g_process_flow := null; -- 4646016
20012 
20013                         IF l_debug_mode = 'Y' THEN
20014                             pa_debug.write(G_PKG_NAME, 'After copy_wp_budget_versions X_Return_Status='||X_Return_Status, 3);
20015                         END IF;
20016 
20017                     EXCEPTION
20018                         WHEN OTHERS THEN
20019 			    PA_TASK_ASSIGNMENT_UTILS.g_process_flow := null; -- 4646016
20020                             fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
20021                             p_procedure_name => 'PROCESS_WBS_UDPATES',
20022                             p_error_text => SUBSTRB('Call of PA_FP_COPY_FROM_PKG.copy_wp_budget_versions failed: SQLERRM='||SQLERRM,1,240));
20023                             RAISE Invalid_Arg_Exc_WP;
20024                     END;
20025 
20026                     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20027                         RAISE Invalid_Arg_Exc_WP;
20028                     END IF;
20029                 END;
20030 
20031                                 --moved these calls in the beginning.
20032                 --l_workplan_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
20033                 --l_financial_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'FINANCIAL');
20034 
20035                 IF (l_financial_type = 'Y') THEN
20036 
20037                     SELECT start_date, completion_date
20038                     INTO l_proj_start_date, l_proj_completion_date
20039                     FROM pa_projects_all
20040                     WHERE project_id = l_project_id;
20041 
20042                     --Call sync-up API
20043 
20044                     IF l_debug_mode = 'Y' THEN
20045                         pa_debug.write(G_PKG_NAME,'Calling import_task', 3);
20046                     END IF;
20047 
20048                     PA_XC_PROJECT_PUB.import_task(
20049                         p_project_id               => l_project_id
20050                         ,p_task_reference            => NULL
20051                         ,p_task_name                 => NULL
20052                         ,p_task_start_date           => NULL
20053                         ,p_task_end_date             => NULL
20054                         ,p_parent_task_reference     => NULL
20055                         ,p_task_number               => NULL
20056                         ,p_wbs_level                 => NULL
20057                         ,p_milestone                 => NULL
20058                         ,p_duration                  => NULL
20059                         ,p_duration_unit             => NULL
20060                         ,p_early_start_date          => NULL
20061                         ,p_early_finish_date         => NULL
20062                         ,p_late_start_date           => NULL
20063                         ,p_late_finish_date          => NULL
20064                         ,p_display_seq               => NULL
20065                         ,p_login_user_name           => NULL
20066                         ,p_critical_path             => NULL
20067                         ,p_sub_project_id            => NULL
20068                         ,p_attribute7                => NULL
20069                         ,p_attribute8                => NULL
20070                         ,p_attribute9                => NULL
20071                         ,p_attribute10               => NULL
20072                         ,p_progress_report           => NULL
20073                         ,p_progress_status           => NULL
20074                         ,p_progress_comments         => NULL
20075                         ,p_progress_asof_date        => NULL
20076                         ,p_predecessors              => NULL
20077                         ,p_structure_version_id      => l_pub_ver_id
20078                         ,p_calling_mode              => 'PUBLISH' );
20079 
20080                     IF l_debug_mode = 'Y' THEN
20081                                     pa_debug.g_err_stage:= 'After import_task  FND_MSG_PUB.count_msg='|| FND_MSG_PUB.count_msg;
20082                                     pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
20083                             END IF;
20084                             -- Fix for Bug # 4513291. Added below Exception handling
20085                             x_msg_count := FND_MSG_PUB.count_msg;
20086                             IF x_msg_count > 0 THEN
20087                                     raise Invalid_Arg_Exc_WP;
20088                             END IF;
20089 
20090 
20091                             IF l_debug_mode = 'Y' THEN
20092                                     pa_debug.g_err_stage:= 'Calling import_project ';
20093                                     pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
20094                             END IF;
20095 
20096                     l_i_msg_count := 0;
20097                             l_i_return_status := 'S'; -- Fix for Bug # 4513291.
20098                     PA_XC_PROJECT_PUB.import_project(
20099                         p_user_id            => l_user_id
20100                         ,p_commit                    => 'N'
20101                         ,p_project_id                => l_project_id
20102                         ,p_project_mpx_start_date    => fnd_date.date_to_canonical(l_proj_start_date)
20103                         ,p_project_mpx_end_date      => fnd_date.date_to_canonical(l_proj_completion_date)
20104                         ,p_task_mgr_override         => NULL
20105                         ,p_task_pgs_override         => NULL
20106                         ,p_process_id                => NULL
20107                         ,p_language                  => NULL
20108                         ,p_delimiter                 => NULL
20109                         ,p_responsibility_id         => l_responsibility_id
20110                         ,p_structure_id              => NULL
20111                         ,p_structure_version_id      => l_pub_ver_id
20112                         ,p_calling_mode              => 'PUBLISH'
20113 			,p_resp_appl_id              => l_resp_appl_id -- 5233777
20114 			,p_debug_mode                => l_debug_mode -- Fix for Bug # 4513291.
20115                         ,x_msg_count                 => l_i_msg_count
20116                         ,x_msg_data                  => l_i_msg_data
20117                         ,x_return_status             => l_i_return_status);
20118 
20119                             IF l_debug_mode = 'Y' THEN
20120                                     pa_debug.g_err_stage:= 'After import_project  FND_MSG_PUB.count_msg='|| FND_MSG_PUB.count_msg;
20121                                     pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
20122                                     pa_debug.write(G_PKG_NAME,'l_i_return_status='||l_i_return_status,l_debug_level3);
20123                                                         -- Fix for Bug # 4513291.
20124                                     pa_debug.write(G_PKG_NAME,'l_i_msg_count='||l_i_msg_count,l_debug_level3);
20125                                                         -- Fix for Bug # 4513291.
20126                                 END IF;
20127 
20128                     l_msg_count := FND_MSG_PUB.count_msg;
20129                             --IF l_msg_count > 0 THEN -- Fix for Bug # 4513291.
20130                             IF l_msg_count > 0 OR l_i_return_status <> 'S' OR l_i_msg_count > 0 THEN  -- Fix for Bug # 4513291.
20131                                     x_msg_count := l_msg_count;
20132                                     raise Invalid_Arg_Exc_WP;
20133                             END IF;
20134                 END IF; --if financial type = Y
20135 
20136                          --bug 4472071
20137                               END IF;
20138                               CLOSE cur_chk_pji_failed;
20139                          --bug 4472071
20140 
20141 
20142                 --moved this code here from above for bugfix 4296915. This is required in order to pick the
20143                 --published str version in tasks_rollup api after its status is set to published..
20144                 --bug 4287813  --move the code in  PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for
20145                                 --bug 4541039
20146 
20147                                 --this rollup call is require to rollup from a published structure of sub-project to this project
20148                                 --if the link is created but process updates is not run.
20149                                 --The global variable g_apply_progress_flag is used to by pass the check in
20150                                 --pa_task_assingment_utils.check_edit_task_ok api for any process is running. The api
20151                                 --pa_task_assignment_utils_adjust_assgnmt_dates is failing for the working verison bcoz there is
20152                                 --a process(PUB) currently in process and therefore edit_task_ok api will return 'N' to
20153                                 --adjust_asgnmt api.
20154 
20155                                 PA_TASK_ASSIGNMENT_UTILS.g_apply_progress_flag := 'Y'; --although th
20156                                 --IF PA_PROJECT_STRUCTURE_UTILS.Check_Subproject_Exists(l_project_id,p_structure_version_id, 'WORKPLAN') = 'Y' THEN
20157                                 IF PA_RELATIONSHIP_UTILS.Check_link_exists( p_project_id => p_project_id
20158                                                       ,p_link_type => 'WORKPLAN' ) = 'Y'
20159                                 THEN
20160 
20161                                     --call the dates rollup API for the structure version
20162                                     IF l_debug_mode  = 'Y' THEN
20163                                          pa_debug.write(G_PKG_NAME, 'Before calling PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for entire grid in PUBLISH mode', 3);
20164                                      END IF;
20165 
20166                                      PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup(
20167                                                 p_project_id           => p_project_id,
20168                                                 p_published_str_ver_id  => l_pub_ver_id,
20169                                                 x_return_status => x_return_status,
20170                                                 x_msg_count => x_msg_count,
20171                                                 x_msg_data => x_msg_data);
20172 
20173                                      IF l_debug_mode  = 'Y' THEN
20174                                         pa_debug.write(G_PKG_NAME, 'After calling PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for entire grid in PUBLISH mode x_return_status='||x_return_status, 3);
20175                                      END IF;
20176 
20177                                      IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20178                                         RAISE Invalid_Arg_Exc_WP;
20179                                      END IF;
20180                                 END IF;
20181 
20182         	-- bug 8971181 : Moved this code to below the call for schedule dates rollup, as stamping of PUBLISHED version hinders the validation checks for task assignments if attached
20183 	        --bug 4555289 moved here to avoid multiple working versions.
20184 	        --if there was a failure in PJI then the following code pieces were not
20185 	        --getting executed hence there were multiple working verisons.
20186 	        --set published version back to published status
20187                 UPDATE pa_proj_elem_ver_structure
20188                 SET status_code = 'STRUCTURE_PUBLISHED',
20189                 LOCKED_BY_PERSON_ID = NULL,
20190                 LOCK_STATUS_CODE = 'UNLOCKED'
20191                 WHERE project_id = l_project_id
20192                 AND element_version_id = l_pub_ver_id;
20193 
20194                                 --rollup to the parent project from the current published structure version.
20195                                 /*IF PA_RELATIONSHIP_UTILS.Check_parent_project_exists(
20196                                                        p_project_id           => p_project_id
20197                                                       ,p_structure_ver_id => l_pub_ver_id
20198                                                       ,p_link_type            => 'WORKPLAN' ) = 'Y'
20199                                 IF PA_PROJECT_STRUCTURE_UTILS.Check_Subproject_Exists(l_project_id,l_pub_ver_id, 'WORKPLAN') = 'Y'
20200                                 THEN
20201                                     IF l_debug_mode  = 'Y' THEN
20202                                          pa_debug.write(G_PKG_NAME, 'Before calling PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for published structure verison in PUBLISH mode', 3);
20203                                      END IF;
20204 
20205                      PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup(
20206                                                 p_project_id           => p_project_id,
20207                         p_structure_version_id => l_pub_ver_id,
20208                         x_return_status => x_return_status,
20209                         x_msg_count => x_msg_count,
20210                         x_msg_data => x_msg_data);
20211 
20212                      IF l_debug_mode  = 'Y' THEN
20213                     pa_debug.write(G_PKG_NAME, 'After calling PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for published structure version in PUBLISH mode x_return_status='||x_return_status, 3);
20214                      END IF;
20215 
20216                      IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20217                     RAISE Invalid_Arg_Exc_WP;
20218                      END IF;
20219 
20220                                 END IF;
20221                                        */
20222                                 PA_TASK_ASSIGNMENT_UTILS.g_apply_progress_flag := 'N';
20223                 --end bug 4287813
20224                                 --end bug 4541039
20225 
20226                 IF l_debug_mode = 'Y' THEN
20227                     pa_debug.write(G_PKG_NAME, 'Calling Task_Stat_Pushdown_Rollup', 3);
20228                 END IF;
20229 
20230                 --push down and rollup
20231                 PA_STRUCT_TASK_ROLLUP_PUB.Task_Stat_Pushdown_Rollup(
20232                     p_structure_version_id => l_pub_ver_id
20233                     ,x_return_status => x_return_status
20234                     ,x_msg_count => x_msg_count
20235                     ,x_msg_data => x_msg_data
20236                     );
20237 
20238                 IF l_debug_mode = 'Y' THEN
20239                     pa_debug.write(G_PKG_NAME, 'After Task_Stat_Pushdown_Rollup  x_return_status='|| x_return_status, 3);
20240                 END IF;
20241 
20242                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20243                     RAISE Invalid_Arg_Exc_WP;
20244                 END IF;
20245       --End bug 4555289
20246 
20247                 --moved here before calling summarization API for program reporting changes.
20248                 -- This was previously called just before COPY_PROGRESS_ACT_ETC api
20249                 --bug 3762882
20250 
20251                 BEGIN -- Bug 4284444
20252                     --new published version and prev published version
20253                     IF l_debug_mode = 'Y' THEN
20254                         pa_debug.write(G_PKG_NAME, 'Calling WBS_MAINT in PUBLISH mode', 3);
20255                     END IF;
20256 
20257                     PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT(
20258                         p_new_struct_ver_id => l_pub_ver_id
20259                         ,p_old_struct_ver_id    => l_prev_ver_id
20260                         ,p_project_id       => p_project_id
20261                         ,p_publish_flag     => 'Y'
20262                         ,p_online_flag      => l_online_flag
20263                         ,p_calling_context  => p_calling_context -- 4392189
20264                         ,p_rerun_flag => p_rerun_flag --bug 4589289
20265                         ,x_request_id       => l_request_id
20266                         ,x_processing_code  => l_proc_code
20267                         ,x_msg_code     => l_msg_Code
20268                         ,x_return_status    => x_return_status
20269                         ,x_online_flag      => l_out_online_flag -- 4392189
20270                         );
20271                     IF l_debug_mode = 'Y' THEN
20272                         pa_debug.write(G_PKG_NAME, 'After WBS_MAINT in PUBLISH mode  x_return_status='|| x_return_status, 3);
20273                     END IF;
20274 
20275                 EXCEPTION
20276                     WHEN OTHERS THEN
20277                         fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
20278                             p_procedure_name => 'PROCESS_WBS_UPDATES',
20279                             p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT Failed for Publish Mode: SQLERRM='||SQLERRM,1,240));
20280                         RAISE Invalid_Arg_Exc_WP;
20281                 END;
20282                 --endbug 3762882
20283 
20284                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20285                     Raise Invalid_Arg_Exc_WP;
20286                 END IF;
20287 
20288                 -- Added this for FP_M changes -- Bhumesh
20289 
20290                 IF l_debug_mode = 'Y' THEN
20291                     pa_debug.write(G_PKG_NAME, 'Calling Pull_Summarized_Actuals', 3);
20292                 END IF;
20293 
20294                 PA_PROGRESS_PUB.Pull_Summarized_Actuals (
20295                     P_Project_ID       =>  l_Project_ID
20296                     ,p_Calling_Mode     =>  'PUBLISH'
20297                     ,x_return_status    =>  x_return_status
20298                     ,x_msg_count        =>  x_msg_count
20299                     ,x_msg_data         =>  x_msg_data
20300                     );
20301 
20302                 IF l_debug_mode = 'Y' THEN
20303                     pa_debug.write(G_PKG_NAME, 'After Pull_Summarized_Actuals  x_return_status='|| x_return_status, 3);
20304                 END IF;
20305 
20306                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20307                     RAISE Invalid_Arg_Exc_WP;
20308                 END IF;
20309 
20310                 --bug 4232150 Moved from above to be called after summarization.
20311                 -- Dates changes
20312 
20313                 IF (l_workplan_type = 'Y') THEN
20314                     OPEN get_scheduled_dates(l_project_id, l_pub_ver_id);
20315                     FETCH get_scheduled_dates INTO l_scheduled_start_date, l_scheduled_finish_date;
20316                     CLOSE get_scheduled_dates;
20317 
20318                     OPEN get_proj_rec_ver_number(l_project_id);
20319                     FETCH get_proj_rec_ver_number INTO l_proj_record_ver_number;
20320                     CLOSE get_proj_rec_ver_number;
20321 
20322                     IF l_debug_mode = 'Y' THEN
20323                         pa_debug.write(G_PKG_NAME, 'Calling UPDATE_PROJECT_DATES', 3);
20324                     END IF;
20325 
20326                     PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
20327                         p_validate_only          => FND_API.G_FALSE
20328                         ,p_project_id             => l_project_id
20329                         ,p_date_type              => 'SCHEDULED'
20330                         ,p_start_date             => l_scheduled_start_date
20331                         ,p_finish_date            => l_scheduled_finish_date
20332                         ,p_record_version_number  => l_proj_record_ver_number
20333                         ,x_return_status          => x_return_status
20334                         ,x_msg_count              => l_msg_count
20335                         ,x_msg_data               => l_msg_data );
20336 
20337                     IF l_debug_mode = 'Y' THEN
20338                         pa_debug.write(G_PKG_NAME, 'After UPDATE_PROJECT_DATES  x_return_status='|| x_return_status, 3);
20339                     END IF;
20340 
20341                     --Check if there is any error.
20342                     l_msg_count := FND_MSG_PUB.count_msg;
20343                     IF l_msg_count > 0 THEN
20344                         x_msg_count := l_msg_count;
20345                         IF x_msg_count = 1 THEN
20346                             x_msg_data := l_msg_data;
20347                         END IF;
20348                         RAISE Invalid_Arg_Exc_WP;
20349                     END IF;
20350                 END IF; --workplan = Y
20351 
20352                 -- project dates changes
20353                 -- copy dates to transaction dates if 1, share structure
20354                 IF ((l_workplan_type = 'Y') AND (l_financial_type = 'Y')) THEN
20355                     --select workplan attr
20356                     OPEN get_struc_id(l_project_id, l_pub_ver_id);
20357                     FETCH get_struc_id INTO l_proj_element_id;
20358                     CLOSE get_struc_id;
20359 
20360                     IF (PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_DATE_SYNC_ENABLED(l_proj_element_id) = 'Y') THEN
20361                         --Copy to transaction date
20362                         IF l_debug_mode = 'Y' THEN
20363                             pa_debug.write(G_PKG_NAME, 'Calling COPY_PROJECT_DATES', 3);
20364                         END IF;
20365                         PA_PROJECT_DATES_PUB.COPY_PROJECT_DATES(
20366                           p_project_id => l_project_id,
20367                           x_return_status => x_return_status,
20368                           x_msg_count => l_msg_count,
20369                           x_msg_data => l_msg_data
20370                         );
20371 
20372                         IF l_debug_mode = 'Y' THEN
20373                             pa_debug.write(G_PKG_NAME, 'After COPY_PROJECT_DATES  x_return_status='|| x_return_status, 3);
20374                         END IF;
20375 
20376                         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20377                             raise Invalid_Arg_Exc_WP;
20378                         END IF;
20379 
20380                     END IF;
20381                 END IF; -- ((l_workplan_type = 'Y') AND (l_financial_type = 'Y')) THEN
20382 
20383                 -- 5029112 (4925192)
20384                 l_pub_wp_ok := pa_progress_utils.check_wwp_prog_publishing_ok(l_project_id,p_structure_version_id);
20385                 --bug 4232150
20386 
20387                 IF p_pub_prog_flag = 'Y' THEN
20388 
20389                     IF l_debug_mode = 'Y' THEN
20390                         pa_debug.write(G_PKG_NAME, 'Calling Publish_Progress', 3);
20391                     END IF;
20392 
20393                     PA_PROGRESS_PUB.Publish_Progress(
20394                     p_project_id               => l_Project_ID
20395                     ,p_working_str_ver_id       => p_structure_version_id -- Bug 4190086
20396                     ,p_pub_structure_version_id => l_pub_ver_id  -- Bug 3839288
20397                     ,x_upd_new_elem_ver_id_flag => l_upd_new_elem_ver_id_flag -- added by rtarway for BUG 3951024
20398                     ,x_as_of_date               => l_as_of_date -- Bug 3839288
20399                     ,x_task_weight_basis_code   => l_task_weight_basis_code -- Bug 3839288
20400                     ,x_return_status            => x_return_status
20401                     ,x_msg_count                => x_msg_count
20402                     ,x_msg_data                 => x_msg_data
20403                     );
20404 
20405                     IF l_debug_mode = 'Y' THEN
20406                         pa_debug.write(G_PKG_NAME, 'After Publish_Progress  x_return_status='|| x_return_status, 3);
20407                     END IF;
20408 
20409                     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20410                         raise Invalid_Arg_Exc_WP;
20411                     END IF;
20412                 END IF; -- p_pub_prog_flag = 'Y' THEN
20413 
20414                 --bug 4019845
20415                                 --moved this call in the beginning
20416                 --l_share_flag       := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(l_project_id);
20417                 --The follwoing api is called to push progress data to PJI for the new
20418                 --structure version.
20419 
20420                 --bug 3822112
20421                 IF l_share_flag = 'Y' THEN
20422                     l_copy_actuals_flag := 'N';
20423                 END IF;
20424 
20425                 IF l_debug_mode = 'Y' THEN
20426                     pa_debug.write(G_PKG_NAME, 'Calling COPY_PROGRESS_ACT_ETC', 3);
20427                 END IF;
20428 
20429                 PA_PROGRESS_PUB.COPY_PROGRESS_ACT_ETC(
20430                 p_project_id               => l_Project_ID
20431                 ,p_src_str_ver_id           => p_structure_version_id
20432                 ,p_dst_str_ver_id           => l_pub_ver_id
20433                 ,p_pub_wp_with_prog_flag    => p_pub_prog_flag
20434                 ,p_calling_context          => 'PUBLISH'
20435                 ,p_copy_actuals_flag        => l_copy_actuals_flag    --bug 3822112
20436                 ,p_last_pub_str_version_id  => l_prev_ver_id -- Modified rakragha 28-JUL-2004
20437                 ,x_return_status            => x_return_status
20438                 ,x_msg_count                => x_msg_count
20439                 ,x_msg_data                 => x_msg_data
20440                 );
20441 
20442                 IF l_debug_mode = 'Y' THEN
20443                     pa_debug.write(G_PKG_NAME, 'After COPY_PROGRESS_ACT_ETC  x_return_status='|| x_return_status, 3);
20444                 END IF;
20445 
20446                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20447                     raise Invalid_Arg_Exc_WP;
20448                 END IF;
20449 
20450                 --bug 4149392
20451 
20452                 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
20453                 BEGIN
20454 
20455                                         --bug 4587145
20456                                         BEGIN
20457 
20458                                             IF l_debug_mode = 'Y' THEN
20459                                                 pa_debug.write(G_PKG_NAME, 'Calling Pa_Fp_wp_gen_amt_utils.get_wp_version_id in PUBLISH mode', 3);
20460                                             END IF;
20461 
20462                                             l_plan_version_id := Pa_Fp_wp_gen_amt_utils.get_wp_version_id(
20463                               p_project_id        => l_project_id,
20464                               p_plan_type_id      => -1,
20465                               p_proj_str_ver_id   => l_pub_ver_id) ;
20466 
20467                                             IF l_debug_mode = 'Y' THEN
20468                                                 pa_debug.write(G_PKG_NAME, 'l_plan_version_id in PUBLISH mode='||l_plan_version_id, 3);
20469                                             END IF;
20470 
20471                                         EXCEPTION
20472                                         WHEN OTHERS THEN
20473                                                 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
20474                                                 p_procedure_name => 'PROCESS_WBS_UPDATES',
20475                                                 p_error_text => SUBSTRB('Call of  Pa_Fp_wp_gen_amt_utils.get_wp_version_id is failed for Publish Mode: SQLERRM='||SQLERRM,1,120));
20476                                                 RAISE Invalid_Arg_Exc_WP;
20477 
20478                                         END;
20479                                         --end bug 4587145
20480 
20481                     IF l_debug_mode = 'Y' THEN
20482                         pa_debug.write(G_PKG_NAME, 'Calling PLAN_UPDATE in PUBLISH mode', 3);
20483                     END IF;
20484 
20485                     PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE (x_msg_code => l_msg_code,
20486                                                   p_plan_version_id     => l_plan_version_id,  --bug 4587145
20487                                                   x_return_status => x_return_status);
20488 
20489                     IF l_debug_mode = 'Y' THEN
20490                         pa_debug.write(G_PKG_NAME, 'After PLAN_UPDATE in PUBLISH mode  x_return_status='|| x_return_status, 3);
20491                     END IF;
20492 
20493                 EXCEPTION
20494                     WHEN OTHERS THEN
20495                         fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
20496                         p_procedure_name => 'PROCESS_WBS_UPDATES',
20497                         p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE is failed for Publish Mode: SQLERRM='||SQLERRM,1,120));
20498                         RAISE Invalid_Arg_Exc_WP;
20499                 END;
20500                 -- Bug 4284444
20501 
20502                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20503                     Raise Invalid_Arg_Exc_WP;
20504                 END IF;
20505 
20506                 --end bug 4149392
20507 
20508 
20509                 IF p_pub_prog_flag = 'Y' AND l_as_of_date IS NOT NULL THEN
20510 
20511                     IF l_debug_mode = 'Y' THEN
20512                         pa_debug.write(G_PKG_NAME, 'Calling populate_pji_tab_for_plan' , 3);
20513                     END IF;
20514 
20515                     pa_progress_pub.populate_pji_tab_for_plan(
20516                         p_init_msg_list     => FND_API.G_FALSE
20517                         ,p_commit       => FND_API.G_FALSE
20518                         ,p_project_id       => l_Project_ID
20519                         ,p_structure_version_id => l_pub_ver_id
20520                         ,p_baselined_str_ver_id => PA_PROJECT_STRUCTURE_UTILS.Get_Baseline_Struct_Ver(l_Project_ID)
20521                         ,p_structure_type       => 'WORKPLAN'
20522                         ,p_program_rollup_flag  => 'Y' -- 4392189
20523                         ,p_calling_context  => 'SUMMARIZE' -- 4392189
20524                         ,p_as_of_date       => l_as_of_date -- 4392189
20525                         ,x_return_status        => x_return_status
20526                         ,x_msg_count            => x_msg_count
20527                         ,x_msg_data             => x_msg_data);
20528 
20529                     IF l_debug_mode = 'Y' THEN
20530                         pa_debug.write(G_PKG_NAME, 'After populate_pji_tab_for_plan  x_return_status='|| x_return_status, 3);
20531                     END IF;
20532 
20533                     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20534                         raise Invalid_Arg_Exc_WP;
20535                     END IF;
20536 
20537                     IF l_debug_mode = 'Y' THEN
20538                         pa_debug.write(G_PKG_NAME, 'Calling ROLLUP_PROGRESS_PVT', 3);
20539                     END IF;
20540 
20541                     PA_PROGRESS_PVT.ROLLUP_PROGRESS_PVT(
20542                         p_init_msg_list             => FND_API.G_FALSE
20543                         ,p_commit                    => FND_API.G_FALSE
20544                         ,p_project_id                => l_Project_ID
20545                         ,p_structure_version_id      => l_pub_ver_id
20546                         ,p_as_of_date                => l_as_of_date
20547                         ,p_wp_rollup_method          => l_task_weight_basis_code
20548                         ,p_rollup_entire_wbs         => 'Y'
20549                         ,p_working_wp_prog_flag      => 'N'
20550                         ,p_upd_new_elem_ver_id_flag  => l_upd_new_elem_ver_id_flag --rtarway, 3951024
20551                         ,x_return_status             => x_return_status
20552                         ,x_msg_count                 => x_msg_count
20553                         ,x_msg_data                  => x_msg_data);
20554 
20555                     IF l_debug_mode = 'Y' THEN
20556                         pa_debug.write(G_PKG_NAME, 'After ROLLUP_PROGRESS_PVT  x_return_status='|| x_return_status, 3);
20557                     END IF;
20558 
20559                     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20560                         raise Invalid_Arg_Exc_WP;
20561                     END IF;
20562                     -- 4575855 : Do not call PROGRAM_ROLLUP_PVT
20563                     -- instead we are calling now ROLLUP_PROG_FROM_SUBPROJS
20564                     /*
20565                     -- 4392189 : Added PROGRAM_ROLLUP_PVT call
20566 
20567                     IF l_debug_mode = 'Y' THEN
20568                         pa_debug.write(G_PKG_NAME, 'Calling PROGRAM_ROLLUP_PVT', 3);
20569                     END IF;
20570 
20571                     PA_PROGRESS_PVT.PROGRAM_ROLLUP_PVT(
20572                         p_init_msg_list         => FND_API.G_FALSE
20573                         ,p_commit               => FND_API.G_FALSE
20574                         ,p_validate_only        => FND_API.G_FALSE
20575                         ,p_project_id           => l_Project_ID
20576                         ,p_as_of_date           => l_as_of_date
20577                         ,p_structure_type       => 'WORKPLAN'
20578                         ,p_structure_ver_id     => l_pub_ver_id
20579                         ,x_return_status        => x_return_status
20580                         ,x_msg_count            => x_msg_count
20581                         ,x_msg_data             => x_msg_data);
20582 
20583                     IF l_debug_mode = 'Y' THEN
20584                         pa_debug.write(G_PKG_NAME, 'After PROGRAM_ROLLUP_PVT  x_return_status='|| x_return_status, 3);
20585                     END IF;
20586 
20587                     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20588                         raise Invalid_Arg_Exc_WP;
20589                     END IF;
20590                     */
20591                 END IF; -- p_pub_prog_flag = 'Y' AND l_as_of_date IS NOT NULL THEN
20592 
20593                 IF p_pub_prog_flag = 'Y' THEN
20594                     -- 4575855 : Added call of ROLLUP_PROG_FROM_SUBPROJS
20595                     IF l_debug_mode = 'Y' THEN
20596                         pa_debug.write(G_PKG_NAME, 'Calling ROLLUP_PROG_FROM_SUBPROJS', 3);
20597                     END IF;
20598 
20599                     PA_PROGRESS_PVT.ROLLUP_PROG_FROM_SUBPROJS(
20600                         p_init_msg_list         => FND_API.G_FALSE
20601                         ,p_commit               => FND_API.G_FALSE
20602                         ,p_validate_only        => FND_API.G_FALSE
20603                         ,p_project_id           => l_Project_ID
20604                         ,p_structure_version_id => l_pub_ver_id
20605                         ,x_return_status        => x_return_status
20606                         ,x_msg_count            => x_msg_count
20607                         ,x_msg_data             => x_msg_data);
20608 
20609                     IF l_debug_mode = 'Y' THEN
20610                         pa_debug.write(G_PKG_NAME, 'After ROLLUP_PROG_FROM_SUBPROJS  x_return_status='|| x_return_status, 3);
20611                     END IF;
20612 
20613                     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20614                         raise Invalid_Arg_Exc_WP;
20615                     END IF;
20616 
20617                     --bug 3851528
20618                     IF l_debug_mode = 'Y' THEN
20619                         pa_debug.write(G_PKG_NAME, 'Calling clear_prog_outdated_flag', 3);
20620                     END IF;
20621 
20622                     PA_PROGRESS_UTILS.clear_prog_outdated_flag(
20623                         p_project_id                => l_Project_ID
20624                         ,p_structure_version_id      => l_pub_ver_id
20625                         ,p_object_id                 => null
20626                         ,p_object_type               => null
20627                         ,x_return_status             => x_return_status
20628                         ,x_msg_count                 => x_msg_count
20629                         ,x_msg_data                  => x_msg_data);
20630 
20631                     IF l_debug_mode = 'Y' THEN
20632                         pa_debug.write(G_PKG_NAME, 'After clear_prog_outdated_flag  x_return_status='|| x_return_status, 3);
20633                     END IF;
20634 
20635                     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20636                                 raise Invalid_Arg_Exc_WP;
20637                     END IF;
20638                 END IF; -- p_pub_prog_flag = 'Y' THEN
20639                 --end bug 4019845, publishing changes
20640 
20641                 -- 5029112 (4925192)
20642                  if l_pub_wp_ok = 'Y' then
20643                     UPDATE pa_proj_elem_ver_structure
20644                        set date_prog_applied_on_wver = sysdate
20645                      WHERE project_id = l_project_id
20646                        AND element_version_id = p_structure_version_id;
20647                  end if;
20648 
20649                                 /* The following call is not required as the mechanics of program data rollup is changed.
20650                                    Earlier, there was a pull method to rollup the data from sub-project to parent project and this was
20651                                    the reason we had this api call to mark all the immediate parents to dirty so that when user goes to
20652                                    parent project, he wil the message to run process wbs in order to see correct program rollup.
20653                                    But now publishing of a sub-project will push the data to all its parent. This change in pull to
20654                                    push mechanics does not require the following api call. Hence commenitng out.
20655                 IF l_debug_mode = 'Y' THEN
20656                     pa_debug.write(G_PKG_NAME, 'Calling UPDATE_PARENT_WBS_FLAG_DIRTY', 3);
20657                 END IF;
20658 
20659                 PA_RELATIONSHIP_PVT.UPDATE_PARENT_WBS_FLAG_DIRTY(
20660                     p_project_id                => l_Project_ID
20661                     ,p_structure_version_id      => l_pub_ver_id
20662                     ,x_return_status             => x_return_status
20663                     ,x_msg_count                 => x_msg_count
20664                     ,x_msg_data                  => x_msg_data);
20665 
20666                 IF l_debug_mode = 'Y' THEN
20667                     pa_debug.write(G_PKG_NAME, 'After UPDATE_PARENT_WBS_FLAG_DIRTY  x_return_status='|| x_return_status, 3);
20668                 END IF;
20669 
20670                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20671                     raise Invalid_Arg_Exc_WP;
20672                 END IF;
20673                                 */
20674 
20675                                 --bug 4479392
20676                                 -- Mark the structure version as no pending wbs updates.
20677                                 IF l_debug_mode = 'Y' THEN
20678                                         pa_debug.write(G_PKG_NAME, 'Before calling pa_proj_task_struc_pub.set_update_wbs_flag for published version', 3);
20679                                 END IF;
20680 
20681                                 pa_proj_task_struc_pub.set_update_wbs_flag(
20682                                     p_project_id            => p_project_id
20683                                    ,p_structure_version_id  => l_pub_ver_id
20684                                    ,p_update_wbs_flag       => 'N'
20685                                    ,x_return_status         => x_return_status
20686                                    ,x_msg_count             => x_msg_count
20687                                    ,x_msg_data              => x_msg_data
20688                                    );
20689 
20690                                 IF l_debug_mode = 'Y' THEN
20691                                         pa_debug.write(G_PKG_NAME, 'After pa_proj_task_struc_pub.set_update_wbs_flag for published version  x_return_status='|| x_return_status, 3);
20692                                 END IF;
20693 
20694                                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20695                                         raise Invalid_Arg_Exc_WP;
20696                                 END IF;
20697                                 --bug 4479392
20698 
20699 
20700             ELSIF l_publish_flag = 'N' THEN
20701                 --*******************************************
20702                 --Process WBS in UPDATE MODE
20703                 --*******************************************
20704 
20705                 --bug 4186512
20706                 --set the PJI global flag to NULL before calling pji wbsmant for
20707                 --indent/outdent/copy/move
20708                 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := null;
20709 
20710                 BEGIN -- Bug 4284444
20711                     --both working version
20712                     IF l_debug_mode = 'Y' THEN
20713                         pa_debug.write(G_PKG_NAME, 'Calling WBS_MAINT in UPDATE mode', 3);
20714                     END IF;
20715 
20716                     PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT(
20717                     p_new_struct_ver_id => p_structure_version_id
20718                     ,p_old_struct_ver_id => p_structure_version_id
20719                     ,p_project_id => p_project_id
20720                     ,p_online_flag => l_online_flag
20721                     ,p_calling_context => p_calling_context -- 4392189
20722                     ,p_rerun_flag => p_rerun_flag --bug 4589289
20723                     ,x_request_id => l_request_id
20724                     ,x_processing_code => l_proc_code
20725                     ,x_msg_code => l_msg_Code
20726                     ,x_return_status => x_return_status
20727                     ,x_online_flag => l_out_online_flag -- 4392189
20728                     );
20729 
20730                     IF l_debug_mode = 'Y' THEN
20731                         pa_debug.write(G_PKG_NAME, 'After WBS_MAINT in UPDATE mode  x_return_status='|| x_return_status, 3);
20732                     END IF;
20733 
20734                 EXCEPTION
20735                     WHEN OTHERS THEN
20736                         fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
20737                             p_procedure_name => 'PROCESS_WBS_UPDATES',
20738                             p_error_text     => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT Failed in Update Mode: SQLERRM='||SQLERRM,1,240));
20739                             RAISE Invalid_Arg_Exc_WP;
20740                 END;
20741 
20742                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20743                     Raise Invalid_Arg_Exc_WP;
20744                 END IF;
20745 
20746                 --copy task bug 4186512
20747                 --Since PJI wbs maint does not pick the extr lines, need to call plan_update for copy task. Move may also require this call. So calling it regardless of any WBS change except publishing.
20748 
20749                 BEGIN
20750 
20751                                         --bug 4587145
20752                                         BEGIN
20753 
20754                                             IF l_debug_mode = 'Y' THEN
20755                                                 pa_debug.write(G_PKG_NAME, 'Calling Pa_Fp_wp_gen_amt_utils.get_wp_version_id in UPDATE mode', 3);
20756                                             END IF;
20757 
20758                                             l_plan_version_id := Pa_Fp_wp_gen_amt_utils.get_wp_version_id(
20759                                                           p_project_id        => p_project_id,
20760                                                           p_plan_type_id      => -1,
20761                                                           p_proj_str_ver_id   => p_structure_version_id) ;
20762 
20763                                             IF l_debug_mode = 'Y' THEN
20764                                                 pa_debug.write(G_PKG_NAME, 'l_plan_version_id in UPDATE mode='||l_plan_version_id, 3);
20765                                             END IF;
20766 
20767                                         EXCEPTION
20768                                         WHEN OTHERS THEN
20769                                                 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
20770                                                 p_procedure_name => 'PROCESS_WBS_UPDATES',
20771                                                 p_error_text => SUBSTRB('Call of  Pa_Fp_wp_gen_amt_utils.get_wp_version_id is failed for UPDATE Mode: SQLERRM='||SQLERRM,1,120));
20772                                                 RAISE Invalid_Arg_Exc_WP;
20773 
20774                                         END;
20775                                         --end bug 4587145
20776 
20777                     IF l_debug_mode = 'Y' THEN
20778                         pa_debug.write(G_PKG_NAME, 'Calling PLAN_UPDATE in UPDATE mode', 3);
20779                     END IF;
20780 
20781                     PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE (x_msg_code => l_msg_code,
20782                                                            p_plan_version_id     => l_plan_version_id,  --bug 4587145
20783                                x_return_status => x_return_status);
20784 
20785                     IF l_debug_mode = 'Y' THEN
20786                         pa_debug.write(G_PKG_NAME,'After PLAN_UPDATE in UPDATE mode  x_return_status='|| x_return_status,l_debug_level3);
20787                     END IF;
20788                 EXCEPTION
20789                     WHEN OTHERS THEN
20790                         fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
20791                          p_procedure_name => 'PROCESS_WBS_UPDATES',
20792                          p_error_text => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE failed in Update mode:SQLERRM='||SQLERRM,1,120));
20793                         RAISE Invalid_Arg_Exc_WP;
20794                 END;
20795 
20796                 --end copy task bug 4186512
20797 
20798                 -- Bug 4284444
20799                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20800                     Raise Invalid_Arg_Exc_WP;
20801                 END IF;
20802 
20803                 -- Bug 4284444 : Commented the below code
20804                 --  EXCEPTION
20805                 --    WHEN OTHERS THEN
20806                 --       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
20807                 --                               p_procedure_name => 'PROCESS_WBS_UPDATES',
20808                 --                               p_error_text     => SUBSTRB('PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT:'||SQLERRM,1,240));
20809                 --    RAISE Invalid_Arg_Exc_WP;
20810                 --  END;
20811 
20812                 IF nvl(l_structure_type_flag,'N') = 'Y' THEN
20813 
20814                     IF l_debug_mode = 'Y' THEN
20815                         pa_debug.write(G_PKG_NAME, 'Calling PROCESS_TASK_WEIGHTAGE', 3);
20816                     END IF;
20817 
20818                     pa_proj_task_struc_pub.PROCESS_TASK_WEIGHTAGE(
20819                         p_project_id            => p_project_id
20820                         --               ,p_structure_version_id  => p_structure_version_id
20821                         --Modified for BUG 4127178
20822                         ,p_structure_version_id  => l_pub_ver_id
20823                         ,x_return_status         => x_return_status
20824                         ,x_msg_count             => x_msg_count
20825                         ,x_msg_data              => x_msg_data
20826                         );
20827 
20828                     IF l_debug_mode = 'Y' THEN
20829                         pa_debug.write(G_PKG_NAME, 'After PROCESS_TASK_WEIGHTAGE  x_return_status='|| x_return_status, 3);
20830                     END IF;
20831 
20832                     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20833                         Raise Invalid_Arg_Exc_WP;
20834                     END IF;
20835                 END IF;
20836                 --bug 3035902 maansari
20837 
20838                 --call progress rollup api if calling context is not copy project.
20839                 -- Bug 3764224 : Moved populate_pji_tab_for_plan in RE_ROLLUP_PROGRESS
20840                 -- Bug 3693757 : 13-Jul-04 PJI tmp1 table shd be populated so that rollup API can access actuals values in RE_ROLLUP_PROGRESS
20841                 /*      BEGIN
20842                         pa_progress_pub.populate_pji_tab_for_plan(
20843                         p_init_msg_list         => FND_API.G_FALSE,
20844                         p_project_id            => p_project_id,
20845                         p_structure_version_id  => p_structure_version_id,
20846             --                        p_baselined_str_ver_id  => l_baselined_str_ver_id,
20847                         p_structure_type        => 'WORKPLAN',
20848                         x_return_status         => x_return_status,
20849                         x_msg_count             => x_msg_count,
20850                         x_msg_data              => x_msg_data
20851                         );
20852 
20853                         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20854                             Raise Invalid_Arg_Exc_WP;
20855                         END IF;
20856                     EXCEPTION
20857                         WHEN OTHERS THEN
20858                             fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
20859                                  p_procedure_name => 'PROCESS_WBS_UPDATES',
20860                                  p_error_text     => SUBSTRB('PA_PROGRESS_PUB.populate_pji_tab_for_plan:'||SQLERRM,1,240));
20861                             RAISE FND_API.G_EXC_ERROR;
20862                     END;
20863                 */
20864 
20865                 IF nvl(l_structure_type_flag,'N') = 'Y'  THEN   --fpm progress management changes
20866 
20867                     IF l_debug_mode = 'Y' THEN
20868                         pa_debug.write(G_PKG_NAME, 'Calling RE_ROLLUP_PROGRESS', 3);
20869                     END IF;
20870 
20871                     PA_PROGRESS_PUB.RE_ROLLUP_PROGRESS(
20872                         p_project_id            => p_project_id
20873                         ,p_structure_version_id  => p_structure_version_id
20874                         ,x_return_status         => x_return_status
20875                         ,x_msg_count             => x_msg_count
20876                         ,x_msg_data              => x_msg_data
20877                         );
20878                     IF l_debug_mode = 'Y' THEN
20879                         pa_debug.write(G_PKG_NAME, 'After RE_ROLLUP_PROGRESS  x_return_status='|| x_return_status, 3);
20880                     END IF;
20881 
20882                     -- Bug 4575855 : Added call of ROLLUP_PROG_FROM_SUBPROJS
20883                     IF PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id) = 'N' THEN
20884                         IF l_debug_mode = 'Y' THEN
20885                             pa_debug.write(G_PKG_NAME, 'Calling ROLLUP_PROG_FROM_SUBPROJS', 3);
20886                         END IF;
20887 
20888                         PA_PROGRESS_PVT.ROLLUP_PROG_FROM_SUBPROJS(
20889                             p_init_msg_list         => FND_API.G_FALSE
20890                             ,p_commit               => FND_API.G_FALSE
20891                             ,p_validate_only        => FND_API.G_FALSE
20892                             ,p_project_id           => p_project_id
20893                             ,p_structure_version_id => l_pub_ver_id
20894                             ,x_return_status        => x_return_status
20895                             ,x_msg_count            => x_msg_count
20896                             ,x_msg_data             => x_msg_data);
20897 
20898                         IF l_debug_mode = 'Y' THEN
20899                             pa_debug.write(G_PKG_NAME, 'After ROLLUP_PROG_FROM_SUBPROJS  x_return_status='|| x_return_status, 3);
20900                         END IF;
20901 
20902                         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20903                             raise Invalid_Arg_Exc_WP;
20904                         END IF;
20905                     END IF;
20906 
20907                 END IF;
20908 
20909                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20910                     Raise Invalid_Arg_Exc_WP;
20911                 END IF;
20912 
20913                                 --bug 4541039
20914                                 IF PA_RELATIONSHIP_UTILS.Check_link_exists( p_project_id => p_project_id
20915                                                       ,p_link_type => 'WORKPLAN' ) = 'Y'
20916                                 THEN
20917                                     IF l_debug_mode  = 'Y' THEN
20918                                          pa_debug.write(G_PKG_NAME, 'Before calling PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for entire grid in UPDATE mode', 3);
20919                                      END IF;
20920 
20921                                      PA_TASK_ASSIGNMENT_UTILS.g_apply_progress_flag := 'Y'; --although th
20922                                      PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup(
20923                                                 p_project_id           => p_project_id,
20924                                                 x_return_status => x_return_status,
20925                                                 x_msg_count => x_msg_count,
20926                                                 x_msg_data => x_msg_data);
20927 
20928                                      IF l_debug_mode  = 'Y' THEN
20929                                         pa_debug.write(G_PKG_NAME, 'After calling PA_STRUCT_TASK_ROLLUP_PUB.Program_Schedule_dates_rollup for entire grid in UPDATE mode x_return_status='||x_return_status, 3);
20930                                      END IF;
20931 
20932                                      IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
20933                                         RAISE Invalid_Arg_Exc_WP;
20934                                      END IF;
20935                                 END IF;
20936                                 --end bug 4541039
20937 
20938             END IF; --publish_flag
20939         ELSIF p_calling_context = 'COPY_PROJECT' THEN
20940             DECLARE
20941                 CURSOR cur_all_str_ver
20942                 IS
20943                   SELECT ppevs2.element_version_id
20944                 FROM pa_proj_element_versions ppevs1, pa_proj_element_versions ppevs2
20945                    WHERE ppevs1.proj_element_id = ppevs2.proj_element_id
20946                  AND ppevs1.project_id = p_project_id
20947                  AND ppevs2.project_id = p_project_id
20948                  AND ppevs1.element_version_id = p_structure_version_id
20949                  AND ppevs1.object_type = 'PA_STRUCTURES'
20950                  AND ppevs2.object_type = 'PA_STRUCTURES'
20951                  ;
20952             BEGIN
20953                 FOR cur_all_str_ver_rec IN cur_all_str_ver LOOP
20954                     IF  cur_all_str_ver_rec.element_version_id IS NOT NULL THEN
20955                         -- Check if the sructure version to be processed corresponds to the WORKPLAN structure.
20956                         -- If yes, do the processing required for the workplan version.
20957                         OPEN cur_structure_type(p_project_id, cur_all_str_ver_rec.element_version_id, 'WORKPLAN');
20958                         fetch cur_structure_type INTO l_structure_type_flag;
20959                         CLOSE cur_structure_type;
20960 
20961                         IF nvl(l_structure_type_flag,'N') = 'Y' THEN
20962                             IF l_debug_mode = 'Y' THEN
20963                                 pa_debug.write(G_PKG_NAME, 'Calling PROCESS_TASK_WEIGHTAGE in Copy Project Mode', 3);
20964                             END IF;
20965 
20966                             pa_proj_task_struc_pub.PROCESS_TASK_WEIGHTAGE(
20967                                 p_project_id            => p_project_id
20968                                 ,p_structure_version_id  => p_structure_version_id
20969                                 ,x_return_status         => x_return_status
20970                                 ,x_msg_count             => x_msg_count
20971                                 ,x_msg_data              => x_msg_data
20972                                 );
20973 
20974                             IF l_debug_mode = 'Y' THEN
20975                                 pa_debug.write(G_PKG_NAME, 'After PROCESS_TASK_WEIGHTAGE in Copy Project Mode  x_return_status='|| x_return_status, 3);
20976                             END IF;
20977 
20978                             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
20979                                 Raise Invalid_Arg_Exc_WP;
20980                             END IF;
20981                         END IF;
20982                     END IF;
20983                 END LOOP;
20984 
20985                 -- Begin Bug # 4611373.
20986                 --set the PJI global flag to NULL before calling pji wbsmant for
20987                 --indent/outdent/copy/move
20988                  PA_TASK_PUB1.G_CALL_PJI_ROLLUP := null;
20989 
20990                  BEGIN
20991                  --both working version
20992                     IF l_debug_mode = 'Y' THEN
20993                             pa_debug.write(G_PKG_NAME, 'Calling WBS_MAINT in UPDATE mode', 3);
20994                         END IF;
20995 
20996                         PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT(
20997                         p_new_struct_ver_id => p_structure_version_id
20998                         ,p_old_struct_ver_id => p_structure_version_id
20999                         ,p_project_id => p_project_id
21000                         ,p_online_flag => l_online_flag
21001                         ,p_calling_context => p_calling_context -- 4392189
21002                         ,p_rerun_flag => p_rerun_flag --bug 4589289
21003                         ,x_request_id => l_request_id
21004                         ,x_processing_code => l_proc_code
21005                         ,x_msg_code => l_msg_Code
21006                         ,x_return_status => x_return_status
21007                         ,x_online_flag => l_out_online_flag -- 4392189
21008                         );
21009 
21010                         IF l_debug_mode = 'Y' THEN
21011                             pa_debug.write(G_PKG_NAME, 'After WBS_MAINT in UPDATE mode  x_return_status='
21012                                                             || x_return_status, 3);
21013                         END IF;
21014 
21015                 EXCEPTION
21016                         WHEN OTHERS THEN
21017                             fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
21018                                                     p_procedure_name => 'PROCESS_WBS_UPDATES',
21019                                                         p_error_text     => SUBSTRB('Call of PJI_FM_XBS_ACCUM_MAINT.WBS_MAINT
21020                                                                                      Failed in Update Mode: SQLERRM='||SQLERRM,1,240));
21021                                                         RAISE Invalid_Arg_Exc_WP;
21022                 END;
21023 
21024                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
21025                     Raise Invalid_Arg_Exc_WP;
21026                 END IF;
21027                 -- End Bug # 4611373.
21028 
21029             END;
21030         END IF;  --end bug 3035902 maansari
21031     END IF; -- (if p_calling_mode = 'APPLY_PROGRESS') then -- Fix for Bug # 4262985.
21032 
21033     -- Mark the structure version as no pending wbs updates.
21034     pa_proj_task_struc_pub.set_update_wbs_flag(
21035            p_project_id            => p_project_id
21036           ,p_structure_version_id  => p_structure_version_id
21037           ,p_update_wbs_flag       => 'N'
21038           ,x_return_status         => x_return_status
21039           ,x_msg_count             => x_msg_count
21040           ,x_msg_data              => x_msg_data
21041           );
21042 
21043     IF l_debug_mode = 'Y' THEN
21044         pa_debug.write(G_PKG_NAME, 'After set_update_wbs_flag x_return_status='|| x_return_status, 3);
21045     END IF;
21046 
21047     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
21048         Raise Invalid_Arg_Exc_WP;
21049     END IF;
21050 
21051     IF p_commit = FND_API.G_TRUE THEN
21052         commit;
21053     END IF;
21054 
21055     IF l_debug_mode = 'Y' THEN
21056         pa_debug.write(G_PKG_NAME, 'Exiting PROCESS_WBS_UPDATES', l_debug_level3);
21057         pa_debug.reset_curr_function;
21058     END IF;
21059 EXCEPTION
21060 
21061 WHEN Invalid_Arg_Exc_WP THEN
21062 
21063      x_return_status := FND_API.G_RET_STS_ERROR;
21064      l_msg_count := FND_MSG_PUB.count_msg;
21065 
21066      IF cur_structure_type%ISOPEN THEN
21067           CLOSE cur_structure_type;
21068      END IF;
21069 
21070      IF l_msg_count = 1 and x_msg_data IS NULL THEN
21071           PA_INTERFACE_UTILS_PUB.get_messages
21072               (p_encoded        => FND_API.G_TRUE
21073               ,p_msg_index      => 1
21074               ,p_msg_count      => l_msg_count
21075               ,p_msg_data       => l_msg_data
21076               ,p_data           => l_data
21077               ,p_msg_index_out  => l_msg_index_out);
21078           x_msg_data := l_data;
21079           x_msg_count := l_msg_count;
21080      ELSE
21081           x_msg_count := l_msg_count;
21082      END IF;
21083      IF l_debug_mode = 'Y' THEN
21084           pa_debug.reset_curr_function;
21085      END IF;
21086 
21087      IF p_commit = FND_API.G_TRUE THEN
21088           rollback to process_wbs_updates;
21089      END IF;
21090 
21091      RETURN;
21092 
21093 WHEN others THEN
21094 
21095      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21096      x_msg_count     := 1;
21097      x_msg_data      := SQLERRM;
21098 
21099      IF cur_structure_type%ISOPEN THEN
21100           CLOSE cur_structure_type;
21101      END IF;
21102 
21103      FND_MSG_PUB.add_exc_msg
21104                    ( p_pkg_name        => 'PA_PROJ_TASK_STRUC_PUB'
21105                     ,p_procedure_name  => 'PROCESS_WBS_UPDATES'
21106                     ,p_error_text      => x_msg_data);
21107 
21108      IF l_debug_mode = 'Y' THEN
21109           pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
21110           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21111                               l_debug_level5);
21112           pa_debug.reset_curr_function;
21113      END IF;
21114 
21115      IF p_commit = FND_API.G_TRUE THEN
21116           rollback to process_wbs_updates;
21117      END IF;
21118 
21119      RAISE;
21120 END PROCESS_WBS_UPDATES;
21121 
21122 /*==================================================================
21123    This API calculates the Task Weightages based on the Task Progress
21124    Weighting Basis of  the project. This API will be called only when
21125    the Weighting Basis is either Duration or Effort. The basic strategy
21126    used in the API is to query up all the tasks of a structure version
21127    and identify the summed duration of all the tasks parents by doing
21128    minimal PLSQL processing. Once the summed duration of the parent is
21129    identified, the weighting percentage of the task can be easily
21130    identified.
21131    Bug 3010538 : New API for the Task Weighting Enhancement.
21132  ==================================================================*/
21133 
21134 PROCEDURE PROCESS_TASK_WEIGHTAGE
21135    (  p_api_version_number    IN   NUMBER
21136      ,p_commit                IN   VARCHAR2
21137      ,p_init_msg_list         IN   VARCHAR2
21138      ,p_calling_context       IN   VARCHAR2
21139      ,p_project_id            IN   pa_projects_all.project_id%TYPE
21140      ,p_structure_version_id  IN   pa_proj_element_versions.element_version_id%TYPE
21141      ,x_return_status         OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
21142      ,x_msg_count             OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
21143      ,x_msg_data              OUT  NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
21144 AS
21145 
21146 -- Type declarations local to this Procedure.
21147 
21148 -- This record contains the summary information of the child tasks for a parent task.
21149 TYPE CHILD_INFO_REC IS RECORD
21150 (
21151       summed_effort           pa_proj_elem_ver_schedule.planned_effort%TYPE
21152      ,summed_duration         pa_proj_elem_ver_schedule.duration%TYPE
21153      ,child_count             Number
21154      ,cum_alloted_weightage   pa_object_relationships.weighting_percentage%TYPE
21155      ,processed_child_count   Number
21156 -- Following added for bug 3053472
21157      ,loop_count              Number
21158      ,residual_task_count     Number
21159      ,adj_direction           Number -- This will be +1 / -1
21160 );
21161 
21162 TYPE CHILD_INFO_TBL IS TABLE OF CHILD_INFO_REC
21163      INDEX BY BINARY_INTEGER;
21164 
21165 TYPE prog_enable_flag_tbl IS TABLE OF pa_task_types.prog_entry_enable_flag%TYPE
21166      INDEX BY BINARY_INTEGER;
21167 
21168 TYPE object_rel_id_tbl  IS TABLE OF pa_object_relationships.object_relationship_id%TYPE
21169      INDEX BY BINARY_INTEGER;
21170 
21171 TYPE parent_task_ver_id_tbl IS TABLE OF pa_object_relationships.object_id_from1%TYPE --pa_proj_element_versions.element_version_id%TYPE  3746912
21172      INDEX BY BINARY_INTEGER;
21173 
21174 TYPE duration_tbl IS TABLE OF pa_proj_elem_ver_schedule.duration%TYPE
21175      INDEX BY BINARY_INTEGER;
21176 
21177 TYPE effort_tbl IS TABLE OF pji_xbs_plans_v.labor_effort%TYPE --pa_proj_elem_ver_schedule.planned_effort%TYPE  3746912
21178      INDEX BY BINARY_INTEGER;
21179 
21180 TYPE task_weightage_tbl IS TABLE OF pa_object_relationships.weighting_percentage%TYPE
21181      INDEX BY BINARY_INTEGER;
21182 -- End of Type Declarations.
21183 
21184 
21185 -- Cursor Declarations.
21186 -- This cursor fetches the duration, effort, relationship id between the task and its parent
21187 -- and progress entry enable flag for the task type associated with the task version. This
21188 -- info is necessary for calculating the task weightage of the tasks.
21189 CURSOR cur_task_info(c_project_id pa_projects_all.project_id%TYPE,
21190                      c_structure_version_id pa_proj_element_versions.element_version_id%TYPE
21191                      ,c_plan_version_id NUMBER   --bug 4726889
21192                       )
21193 IS
21194 Select rel.object_relationship_id,
21195        rel.object_id_from1,
21196 --       NVL(pfxat.labor_hours,0) + NVL(pfxat.equipment_hours,0),
21197        NVL(pxpv.labor_effort,0) + NVL(pxpv.equipment_effort,0),
21198        sch.duration,
21199        ptt.prog_entry_enable_flag
21200  from  pa_proj_element_versions  ver,
21201        pa_object_relationships   rel,
21202        pa_proj_elem_ver_schedule sch,
21203        pa_proj_elements          ele,
21204        pa_task_types             ptt,
21205        pji_xbs_plans_v           pxpv
21206 --       pji_fm_xbs_accum_tmp1     pfxat
21207 where  ver.project_id                  = c_project_id
21208   and  ver.parent_structure_version_id = c_structure_version_id
21209   and  ver.object_type                 = 'PA_TASKS'
21210   and  ver.element_version_id          = rel.object_id_to1
21211   and  rel.relationship_type           = 'S'
21212   and  rel.relationship_subtype        in ( 'STRUCTURE_TO_TASK','TASK_TO_TASK')
21213   and  sch.element_version_id          = ver.element_version_id
21214   and  sch.project_id                  = c_project_id
21215   and  ele.proj_element_id             = ver.proj_element_id
21216   and  ptt.object_type                 = 'PA_TASKS'              /* bug 3279978 FP M Enhancement */
21217   and  ele.type_id                     = ptt.task_type_id
21218   and  pxpv.project_id              (+)= ver.project_id
21219   and  pxpv.structure_version_id    (+)= ver.parent_structure_version_id
21220   and  pxpv.proj_element_id         (+)= ver.proj_element_id
21221   and  pxpv.plan_version_id         (+)= c_plan_version_id     --bug 4726889
21222 --  and  pfxat.project_id             (+)= ver.project_id
21223 --  and  pfxat.project_element_id     (+)= ver.proj_element_id
21224 --  and  pfxat.struct_version_id      (+)= ver.parent_structure_version_id
21225 --  and  pfxat.calendar_type          (+)= 'A'
21226 ;
21227 
21228 -- TWUT
21229 -- This cursor is when fetched will lock all the task versions of the structure version.
21230 CURSOR cur_task_ver_lock(c_project_id pa_projects_all.project_id%TYPE,
21231                          c_structure_version_id pa_proj_element_versions.element_version_id%TYPE)
21232 IS
21233 select 'X'
21234 from   pa_proj_element_versions  ver,
21235        pa_proj_elements          ele,
21236        pa_task_types             ptt
21237 where  ver.project_id                        = c_project_id
21238   and  ver.parent_structure_version_id       = c_structure_version_id
21239   and  ver.object_type                       = 'PA_TASKS'
21240   and  ele.proj_element_id                   = ver.proj_element_id
21241   and  ele.type_id                           = ptt.task_type_id
21242   and ptt.object_type                        = 'PA_TASKS'           /* bug 3279978 FP M Enhancement */
21243   and  nvl(ptt.prog_entry_enable_flag,'N')   = 'Y'
21244 for update of ver.record_version_number NOWAIT;
21245 -- End of Cursor Declarations.
21246 
21247 -- Procedure level local variables declaration
21248 
21249 l_child_info_tbl         child_info_tbl;
21250 l_object_rel_id_tbl      object_rel_id_tbl;
21251 l_parent_task_ver_id_tbl parent_task_ver_id_tbl;
21252 l_duration_tbl           duration_tbl;
21253 l_effort_tbl             effort_tbl;
21254 
21255 l_task_weighting_basis   pa_proj_progress_attr.task_weight_basis_code%TYPE;
21256 
21257 L_BASIS_MANUAL           CONSTANT pa_proj_progress_attr.task_weight_basis_code%TYPE := 'MANUAL';
21258 L_BASIS_EFFORT           CONSTANT pa_proj_progress_attr.task_weight_basis_code%TYPE := 'EFFORT';
21259 L_BASIS_DURATION         CONSTANT pa_proj_progress_attr.task_weight_basis_code%TYPE := 'DURATION';
21260 
21261 -- End Procedure level local variables declaration
21262 
21263 -- Standard local variable declaration.
21264 l_msg_count                     NUMBER := 0;
21265 l_data                          VARCHAR2(2000);
21266 l_msg_data                      VARCHAR2(2000);
21267 l_msg_index_out                 NUMBER;
21268 l_debug_mode                    VARCHAR2(1);
21269 
21270 l_debug_level2                   CONSTANT NUMBER := 2;
21271 l_debug_level3                   CONSTANT NUMBER := 3;
21272 l_debug_level4                   CONSTANT NUMBER := 4;
21273 l_debug_level5                   CONSTANT NUMBER := 5;
21274 
21275 l_plan_version_id                NUMBER;   --bug 4726889
21276 
21277 BEGIN
21278      IF p_commit = FND_API.G_TRUE THEN
21279           savepoint process_task_weightage;
21280      END IF;
21281 
21282      IF p_init_msg_list = FND_API.G_TRUE THEN
21283           FND_MSG_PUB.initialize;
21284      END IF;
21285 
21286      x_msg_count := 0;
21287      x_return_status := FND_API.G_RET_STS_SUCCESS;
21288      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
21289 
21290      IF l_debug_mode = 'Y' THEN
21291           pa_debug.g_err_stage:= 'Entering PROCESS_TASK_WEIGHTAGE';
21292           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21293                                    l_debug_level3);
21294 
21295           pa_debug.set_curr_function( p_function   => 'PROCESS_TASK_WEIGHTAGE',
21296                                       p_debug_mode => l_debug_mode );
21297      END IF;
21298 
21299      -- Check for business rules violations
21300      IF l_debug_mode = 'Y' THEN
21301           pa_debug.g_err_stage:= 'Validating input parameters';
21302           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21303                                      l_debug_level3);
21304           pa_debug.g_err_stage:= 'Input Parameter Values';
21305           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21306                                      l_debug_level3);
21307           pa_debug.g_err_stage:= 'Project Id : ' || p_project_id;
21308           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21309                                      l_debug_level3);
21310           pa_debug.g_err_stage:= 'Structure Version Id : ' || p_structure_version_id;
21311           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21312                                      l_debug_level3);
21313           pa_debug.g_err_stage:= 'p_calling_context : ' || p_calling_context;
21314           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21315                                      l_debug_level3);
21316      END IF;
21317 
21318      IF (p_project_id IS NULL) OR
21319         (p_structure_version_id IS NULL)
21320      THEN
21321           PA_UTILS.ADD_MESSAGE
21322                 (p_app_short_name => 'PA',
21323                   p_msg_name      => 'PA_INV_PARAM_PASSED');
21324           RAISE Invalid_Arg_Exc_WP;
21325      END IF;
21326 
21327      -- Delete the data in plsql tables.
21328      l_child_info_tbl.delete;
21329      l_object_rel_id_tbl.delete;
21330      l_duration_tbl.delete;
21331      l_effort_tbl.delete;
21332      l_parent_task_ver_id_tbl.delete;
21333 
21334 
21335      -- Obtain the task weighting basis and do nothing if the basis is MANUAL and throw error if it is NULL.
21336      -- This is a redundant check incorporated just to ensure no processing is done in case the api
21337      -- is wrongly called.
21338      l_task_weighting_basis := pa_progress_utils.get_task_weighting_basis(p_project_id => p_project_id);
21339 
21340      IF l_task_weighting_basis is NULL THEN
21341           IF l_debug_mode = 'Y' THEN
21342                pa_debug.g_err_stage:= 'PROCESS_TASK_WEIGHTAGE API has been called when task weighting basis is NULL';
21343                pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
21344           END IF;
21345           RAISE Invalid_Arg_Exc_WP;
21346      END IF;
21347 
21348      IF l_task_weighting_basis = L_BASIS_MANUAL THEN
21349           IF l_debug_mode = 'Y' THEN
21350                pa_debug.g_err_stage:= 'PROCESS_TASK_WEIGHTAGE API has been called when task weighting basis is MANUAL';
21351                pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21352                                         l_debug_level3);
21353                pa_debug.reset_curr_function;
21354           END IF;
21355           RETURN;
21356      END IF;
21357 
21358      -- Lock the structure version record in pa_proj_element_versions table.
21359      -- NEED TO REVISIT THIS LOGIC.
21360      -- TWUT. Previously had a select to lock - but it lead to exact fetch
21361      -- returned more than one row exception. Changed to cursor.
21362      DECLARE
21363           l_dummy   VARCHAR2(1);
21364      BEGIN
21365           open cur_task_ver_lock(p_project_id,p_structure_version_id);
21366           fetch cur_task_ver_lock into l_dummy;
21367           close cur_task_ver_lock;
21368      EXCEPTION
21369           WHEN OTHERS THEN
21370                IF SQLCODE = -54 THEN
21371                -- If the record have already been locked, then the sql code would be -54.
21372                    PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
21373                                         p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
21374                    RAISE Invalid_Arg_Exc_WP;
21375                ELSE
21376                   raise;
21377                END IF;
21378      END;
21379 
21380     --bug 4726889 performance fix to provide plan version id in the cursor cur_task_info
21381      BEGIN
21382          IF l_debug_mode = 'Y' THEN
21383             pa_debug.write(G_PKG_NAME, 'Calling Pa_Fp_wp_gen_amt_utils.get_wp_version_id', 3);
21384          END IF;
21385          l_plan_version_id := Pa_Fp_wp_gen_amt_utils.get_wp_version_id(
21386                           p_project_id        => p_project_id,
21387                           p_plan_type_id      => -1,
21388                           p_proj_str_ver_id   => p_structure_version_id) ;
21389 
21390          IF l_debug_mode = 'Y' THEN
21391             pa_debug.write(G_PKG_NAME, 'l_plan_version_id='||l_plan_version_id, 3);
21392          END IF;
21393 
21394       EXCEPTION
21395       WHEN OTHERS THEN
21396                 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJ_TASK_STRUC_PUB',
21397                    p_procedure_name => 'PROCESS_TASK_WEIGHTAGE',
21398                    p_error_text => SUBSTRB('Call of  Pa_Fp_wp_gen_amt_utils.get_wp_version_id is failed='||SQLERRM,1,120));
21399                  RAISE Invalid_Arg_Exc_WP;
21400 
21401        END;
21402      --bug 4726889
21403 
21404      -- The first part of this procedure reads the task version records of the structure version
21405      -- in batches and calculates the summed duration or the summed effort of all the parent tasks.
21406      -- These will be used in the second part of the api to calculate the weightage of the individual
21407      -- tasks.
21408      DECLARE
21409           l_object_rel_id_fetch_tbl      object_rel_id_tbl;
21410           l_parent_task_ver_id_fetch_tbl parent_task_ver_id_tbl;
21411           l_duration_fetch_tbl           duration_tbl;
21412           l_effort_fetch_tbl             effort_tbl;
21413           l_prog_enable_flag_fetch_tbl   prog_enable_flag_tbl;
21414 
21415           l_plsql_max_array_size         CONSTANT NUMBER  := 200; -- limiting the max fetch size
21416           l_task_count                   NUMBER := 0;
21417           l_parent_id                    pa_proj_element_versions.element_version_id%TYPE;
21418      BEGIN
21419           OPEN cur_task_info(p_project_id,p_structure_version_id
21420                             ,l_plan_version_id); --4726889
21421           LOOP
21422                FETCH  cur_task_info BULK COLLECT INTO
21423                              l_object_rel_id_fetch_tbl
21424                             ,l_parent_task_ver_id_fetch_tbl
21425                             ,l_effort_fetch_tbl
21426                             ,l_duration_fetch_tbl
21427                             ,l_prog_enable_flag_fetch_tbl
21428                LIMIT  l_plsql_max_array_size;
21429 
21430                IF l_debug_mode = 'Y' THEN
21431                     pa_debug.g_err_stage:= 'Fetched ' || cur_task_info%rowcount || ' records for processing';
21432                     pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
21433                END IF;
21434 
21435                IF nvl(l_object_rel_id_fetch_tbl.last,0) > 0 THEN -- only if something is fetched do the processing
21436                     FOR i in l_object_rel_id_fetch_tbl.first..l_object_rel_id_fetch_tbl.last LOOP
21437                          -- Check if progress is enabled for the current task. Do the processing only
21438                          -- if progress is enabled. If not just skip the task.
21439 
21440                          IF nvl(l_prog_enable_flag_fetch_tbl(i),'N') = 'Y' THEN
21441                               l_task_count := l_task_count + 1;
21442                               l_parent_id  := l_parent_task_ver_id_fetch_tbl(i);
21443 
21444                               -- Copy the value in the fetch table to the complimentary table.
21445                               l_object_rel_id_tbl(l_task_count)      := l_object_rel_id_fetch_tbl(i);
21446                               l_parent_task_ver_id_tbl(l_task_count) := l_parent_task_ver_id_fetch_tbl(i);
21447 
21448                               -- Set to null the parent task ver record if it doesnot exist.
21449                               IF NOT l_child_info_tbl.exists(l_parent_id) THEN
21450                                    l_child_info_tbl(l_parent_id) := NULL;
21451                               END IF;
21452 
21453                               -- Calculate the summed duration and effort for the parent.
21454                               IF l_task_weighting_basis = L_BASIS_DURATION THEN
21455                                    l_child_info_tbl(l_parent_id).summed_duration :=
21456                                         nvl(l_child_info_tbl(l_parent_id).summed_duration,0) + nvl(l_duration_fetch_tbl(i),0);
21457 
21458                                    l_duration_tbl(l_task_count) := nvl(l_duration_fetch_tbl(i),0);
21459                               ELSIF l_task_weighting_basis = L_BASIS_EFFORT THEN
21460                                    l_child_info_tbl(l_parent_id).summed_effort :=
21461                                         nvl(l_child_info_tbl(l_parent_id).summed_effort,0) + nvl(l_effort_fetch_tbl(i),0);
21462 
21463                                    l_effort_tbl(l_task_count) := nvl(l_effort_fetch_tbl(i),0);
21464                               END IF;
21465                               -- Increment the child count for the parent.
21466                               l_child_info_tbl(l_parent_id).child_count :=
21467                                                   nvl(l_child_info_tbl(l_parent_id).child_count,0)+1;
21468                          END IF;
21469 
21470                     END LOOP;
21471                END IF;
21472 
21473                EXIT WHEN nvl(l_object_rel_id_fetch_tbl.last,0) < l_plsql_max_array_size;
21474           END LOOP;
21475           CLOSE cur_task_info;
21476           IF l_debug_mode = 'Y' THEN
21477                pa_debug.g_err_stage:= 'Done with Part 1 of the Procedure';
21478                pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
21479           END IF;
21480      END;
21481 
21482      -- We have the required info to calculate the task weightages in PLSQL tables.
21483      -- Use them and calculate the weightage for each of the task.
21484      DECLARE
21485           l_task_weightage_tbl     task_weightage_tbl;
21486 
21487           l_parent_id              pa_proj_element_versions.element_version_id%TYPE;
21488           l_task_weightage         pa_object_relationships.weighting_percentage%TYPE;
21489 
21490           --Bug 3053472 - remaining weightage is no more required.
21491           --l_remaining_weightage    pa_object_relationships.weighting_percentage%TYPE;
21492 
21493           l_residual_weightage     pa_object_relationships.weighting_percentage%TYPE;
21494      BEGIN
21495           IF nvl(l_object_rel_id_tbl.last,0) > 0 THEN
21496                FOR i in l_object_rel_id_tbl.first..l_object_rel_id_tbl.last LOOP
21497                     l_parent_id := l_parent_task_ver_id_tbl(i);
21498 
21499                     /* Bug 3053472. Count only the tasks that have non zero task weightage.
21500                     l_child_info_tbl(l_parent_id).processed_child_count :=
21501                               nvl(l_child_info_tbl(l_parent_id).processed_child_count,0) + 1;
21502                     remaining weightage is not required any more.
21503                     l_remaining_weightage := 100 - nvl(l_child_info_tbl(l_parent_id).cum_alloted_weightage,0);
21504                     */
21505                     -- If the basis is duration, obtain the task weightage as ratio of the duration of the task
21506                     -- and the summed duration of the parent.
21507                     IF l_task_weighting_basis = L_BASIS_DURATION THEN
21508 
21509                          IF l_duration_tbl(i) = 0 AND l_child_info_tbl(l_parent_id).summed_duration = 0 THEN
21510                               l_task_weightage := 1 / l_child_info_tbl(l_parent_id).child_count * 100;
21511                          ELSE
21512                               l_task_weightage := l_duration_tbl(i) / l_child_info_tbl(l_parent_id).summed_duration * 100;
21513                          END IF;
21514 
21515                     -- If the basis is effort, obtain the task weightage as ratio of the effort of the task
21516                     -- and the summed effort of the parent.
21517                     -- The case where the effort of the task is 0 is taken care by setting the weightage to 0
21518                     -- if the summed effort is not 0 and calculated as mentioned initially if the summed effort
21519                     -- is 0.
21520                     ELSIF l_task_weighting_basis = L_BASIS_EFFORT THEN
21521 
21522                          IF l_effort_tbl(i) = 0 AND l_child_info_tbl(l_parent_id).summed_effort = 0 THEN
21523                               l_task_weightage := 1 / l_child_info_tbl(l_parent_id).child_count * 100;
21524                          ELSE
21525                               l_task_weightage := l_effort_tbl(i) / l_child_info_tbl(l_parent_id).summed_effort * 100;
21526                          END IF;
21527 
21528                     END IF;
21529                     /* Bug 3053472. Donot take care of the rounding in this pass.
21530                     -- Take care of the rounding issue.
21531                     IF abs(l_task_weightage - l_remaining_weightage) <= 0.05 THEN
21532                          l_task_weightage := l_remaining_weightage;
21533                     END IF;
21534                     */
21535                     -- Bug 3053472. Increment the task count only if the task weightage of the task <> 0.
21536                     IF l_task_weightage > 0 THEN
21537                          l_child_info_tbl(l_parent_id).processed_child_count :=
21538                                    nvl(l_child_info_tbl(l_parent_id).processed_child_count,0) + 1;
21539                     END IF;
21540 
21541                     l_child_info_tbl(l_parent_id).cum_alloted_weightage := nvl(l_child_info_tbl(l_parent_id).cum_alloted_weightage,0)
21542                                                                                      + l_task_weightage;
21543                     l_task_weightage_tbl(i) := l_task_weightage;
21544                END LOOP;
21545 
21546                -- Bug 3053472. Loop over the plsql table once more to process the residual task weightage of
21547                -- the tasks. The logic used is to distribute the residual task weightage to as many tasks as
21548                -- possible so that the task weightage is uniform. The updates in the bug gives more details
21549                -- on the logic.
21550                FOR i in l_object_rel_id_tbl.first..l_object_rel_id_tbl.last LOOP
21551                     l_parent_id := l_parent_task_ver_id_tbl(i);
21552 
21553                     IF l_child_info_tbl(l_parent_id).loop_count is NULL THEN
21554                     -- This means that this is the first task that is being processed for this parent.
21555                     -- So calculate how much is the residual weightage.
21556                          l_residual_weightage := ( 100 - l_child_info_tbl(l_parent_id).cum_alloted_weightage ) * 100;
21557                          l_child_info_tbl(l_parent_id).loop_count :=
21558                               floor(abs(l_residual_weightage) / l_child_info_tbl(l_parent_id).processed_child_count);
21559                          l_child_info_tbl(l_parent_id).residual_task_count :=
21560                               mod(abs(l_residual_weightage) , l_child_info_tbl(l_parent_id).processed_child_count);
21561 
21562                          -- The adj_direction is set to -1 if the task weigtage has to be adjusted by reducing some amount
21563                          -- from the tasks. otherwise the adj_direction is 1.
21564                          IF l_residual_weightage < 0 THEN
21565                               l_child_info_tbl(l_parent_id).adj_direction := -1;
21566                          ELSE
21567                               l_child_info_tbl(l_parent_id).adj_direction :=  1;
21568                          END IF;
21569                     END IF;
21570 
21571                     IF l_task_weightage_tbl(i) > 0 THEN
21572                          IF l_child_info_tbl(l_parent_id).residual_task_count > 0 THEN
21573                               l_task_weightage_tbl(i) := l_task_weightage_tbl(i) +
21574                                    (l_child_info_tbl(l_parent_id).loop_count + 1) * 0.01 * l_child_info_tbl(l_parent_id).adj_direction;
21575 
21576                               l_child_info_tbl(l_parent_id).residual_task_count :=
21577                                    l_child_info_tbl(l_parent_id).residual_task_count - 1;
21578                          ELSE
21579                               l_task_weightage_tbl(i) := l_task_weightage_tbl(i) +
21580                                    l_child_info_tbl(l_parent_id).loop_count * 0.01 * l_child_info_tbl(l_parent_id).adj_direction;
21581                          END IF;
21582                     END IF;
21583                END LOOP;
21584 
21585                -- Do a bulk update into pa_object_relationships table as the weightage has
21586                -- been calculated for all the tasks.
21587                FORALL i in l_object_rel_id_tbl.first..l_object_rel_id_tbl.last
21588                     UPDATE pa_object_relationships
21589                     SET    weighting_percentage   = l_task_weightage_tbl(i)
21590                     WHERE  object_relationship_id = l_object_rel_id_tbl(i);
21591                IF l_debug_mode = 'Y' THEN
21592                     pa_debug.g_err_stage:= 'Updated ' || sql%rowcount || ' Records in PA_OBJECT_RELATIONSHIPS';
21593                     pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
21594                END IF;
21595           END IF;
21596      END;
21597 
21598      IF p_commit = FND_API.G_TRUE THEN
21599           commit;
21600      END IF;
21601 
21602      IF l_debug_mode = 'Y' THEN
21603           pa_debug.g_err_stage:= 'Exiting PROCESS_TASK_WEIGHTAGE';
21604           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21605                                    l_debug_level3);
21606           pa_debug.reset_curr_function;
21607      END IF;
21608 EXCEPTION
21609 
21610 WHEN Invalid_Arg_Exc_WP THEN
21611 
21612      x_return_status := FND_API.G_RET_STS_ERROR;
21613      l_msg_count := FND_MSG_PUB.count_msg;
21614 
21615      IF cur_task_info%ISOPEN THEN
21616           CLOSE cur_task_info;
21617      END IF;
21618 
21619      IF l_msg_count = 1 and x_msg_data IS NULL THEN
21620           PA_INTERFACE_UTILS_PUB.get_messages
21621               (p_encoded        => FND_API.G_TRUE
21622               ,p_msg_index      => 1
21623               ,p_msg_count      => l_msg_count
21624               ,p_msg_data       => l_msg_data
21625               ,p_data           => l_data
21626               ,p_msg_index_out  => l_msg_index_out);
21627           x_msg_data := l_data;
21628           x_msg_count := l_msg_count;
21629      ELSE
21630           x_msg_count := l_msg_count;
21631      END IF;
21632      IF l_debug_mode = 'Y' THEN
21633           pa_debug.reset_curr_function;
21634      END IF;
21635 
21636      IF p_commit = FND_API.G_TRUE THEN
21637           rollback to process_task_weightage;
21638      END IF;
21639 
21640      RETURN;
21641 
21642 WHEN others THEN
21643 
21644      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21645      x_msg_count     := 1;
21646      x_msg_data      := SQLERRM;
21647 
21648      IF cur_task_info%ISOPEN THEN
21649           CLOSE cur_task_info;
21650      END IF;
21651 
21652      FND_MSG_PUB.add_exc_msg
21653                    ( p_pkg_name        => 'PA_PROJ_TASK_STRUC_PUB'
21654                     ,p_procedure_name  => 'PROCESS_TASK_WEIGHTAGE'
21655                     ,p_error_text      => x_msg_data);
21656 
21657      IF l_debug_mode = 'Y' THEN
21658           pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
21659           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21660                               l_debug_level5);
21661           pa_debug.reset_curr_function;
21662      END IF;
21663 
21664      IF p_commit = FND_API.G_TRUE THEN
21665           rollback to process_task_weightage;
21666      END IF;
21667 
21668      RAISE;
21669 END PROCESS_TASK_WEIGHTAGE;
21670 
21671 /*==================================================================
21672    This API will be called to set the update_required_flag to Y or N.
21673    The default value of the flag is Y. The passed in flag value is
21674    used to update the structure version record in elem_ver_structure
21675    table.
21676    Bug 3010538 : New API for the Task Weighting Enhancement.
21677  ==================================================================*/
21678 
21679 PROCEDURE SET_UPDATE_WBS_FLAG
21680    (  p_api_version_number    IN   NUMBER
21681      ,p_commit                IN   VARCHAR2
21682      ,p_init_msg_list         IN   VARCHAR2
21683      ,p_calling_context       IN   VARCHAR2
21684      ,p_project_id            IN   pa_projects_all.project_id%TYPE
21685      ,p_structure_version_id  IN   pa_proj_element_versions.element_version_id%TYPE
21686      ,p_update_wbs_flag       IN   pa_proj_elem_ver_structure.process_update_wbs_flag%TYPE
21687      ,x_return_status         OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
21688      ,x_msg_count             OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
21689      ,x_msg_data              OUT  NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
21690 AS
21691 
21692 l_msg_count                     NUMBER := 0;
21693 l_data                          VARCHAR2(2000);
21694 l_msg_data                      VARCHAR2(2000);
21695 l_msg_index_out                 NUMBER;
21696 l_debug_mode                    VARCHAR2(1);
21697 
21698 l_debug_level2                   CONSTANT NUMBER := 2;
21699 l_debug_level3                   CONSTANT NUMBER := 3;
21700 l_debug_level4                   CONSTANT NUMBER := 4;
21701 l_debug_level5                   CONSTANT NUMBER := 5;
21702 
21703 BEGIN
21704 
21705      IF p_commit = FND_API.G_TRUE THEN
21706           savepoint set_update_wbs_flag;
21707      END IF;
21708 
21709      IF p_init_msg_list = FND_API.G_TRUE THEN
21710           FND_MSG_PUB.initialize;
21711      END IF;
21712 
21713      x_msg_count := 0;
21714      x_return_status := FND_API.G_RET_STS_SUCCESS;
21715      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
21716 
21717      IF l_debug_mode = 'Y' THEN
21718           pa_debug.g_err_stage:= 'Entering SET_UPDATE_WBS_FLAG';
21719           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21720                                    l_debug_level3);
21721 
21722           pa_debug.set_curr_function( p_function   => 'SET_UPDATE_WBS_FLAG',
21723                                       p_debug_mode => l_debug_mode );
21724      END IF;
21725 
21726      -- Check for business rules violations
21727      IF l_debug_mode = 'Y' THEN
21728           pa_debug.g_err_stage:= 'Validating input parameters';
21729           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
21730 
21731           pa_debug.g_err_stage:= 'p_project_id = '|| p_project_id;
21732           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
21733 
21734           pa_debug.g_err_stage:= 'p_structure_version_id = '|| p_structure_version_id;
21735           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
21736 
21737           pa_debug.g_err_stage:= 'p_update_wbs_flag = '|| p_update_wbs_flag;
21738           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,l_debug_level3);
21739      END IF;
21740 
21741      IF (p_project_id IS NULL) OR
21742         (p_structure_version_id IS NULL) OR
21743         (p_update_wbs_flag not in ('Y','N'))
21744      THEN
21745           PA_UTILS.ADD_MESSAGE
21746                 (p_app_short_name => 'PA',
21747                  p_msg_name       => 'PA_INV_PARAM_PASSED');
21748           RAISE Invalid_Arg_Exc_WP;
21749      END IF;
21750 	 --Defer the Structure Update when G_Rollup_Defer is Y.
21751 	IF (NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER,'N')='N') THEN
21752     Update pa_proj_elem_ver_structure
21753     Set    process_update_wbs_flag = p_update_wbs_flag
21754     Where  project_id              = p_project_id
21755     And    element_version_id      = p_structure_version_id;
21756 
21757      IF p_commit = FND_API.G_TRUE THEN
21758           commit;
21759      END IF;
21760 	END IF;
21761      IF l_debug_mode = 'Y' THEN
21762           pa_debug.g_err_stage:= 'Exiting SET_UPDATE_WBS_FLAG';
21763           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21764                                    l_debug_level3);
21765           pa_debug.reset_curr_function;
21766      END IF;
21767 EXCEPTION
21768 
21769 WHEN Invalid_Arg_Exc_WP THEN
21770 
21771      x_return_status := FND_API.G_RET_STS_ERROR;
21772      l_msg_count := FND_MSG_PUB.count_msg;
21773 
21774      IF l_msg_count = 1 and x_msg_data IS NULL THEN
21775           PA_INTERFACE_UTILS_PUB.get_messages
21776               (p_encoded        => FND_API.G_TRUE
21777               ,p_msg_index      => 1
21778               ,p_msg_count      => l_msg_count
21779               ,p_msg_data       => l_msg_data
21780               ,p_data           => l_data
21781               ,p_msg_index_out  => l_msg_index_out);
21782           x_msg_data := l_data;
21783           x_msg_count := l_msg_count;
21784      ELSE
21785           x_msg_count := l_msg_count;
21786      END IF;
21787      IF l_debug_mode = 'Y' THEN
21788           pa_debug.reset_curr_function;
21789      END IF;
21790 
21791      IF p_commit = FND_API.G_TRUE THEN
21792           rollback to set_update_wbs_flag;
21793      END IF;
21794 
21795      RETURN;
21796 
21797 WHEN others THEN
21798 
21799      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21800      x_msg_count     := 1;
21801      x_msg_data      := SQLERRM;
21802 
21803      FND_MSG_PUB.add_exc_msg
21804                    ( p_pkg_name        => 'PA_PROJ_TASK_STRUC_PUB'
21805                     ,p_procedure_name  => 'SET_UPDATE_WBS_FLAG'
21806                     ,p_error_text      => x_msg_data);
21807 
21808      IF l_debug_mode = 'Y' THEN
21809           pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
21810           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,
21811                               l_debug_level5);
21812           pa_debug.reset_curr_function;
21813      END IF;
21814 
21815      IF p_commit = FND_API.G_TRUE THEN
21816           rollback to set_update_wbs_flag;
21817      END IF;
21818 
21819      RAISE;
21820 END SET_UPDATE_WBS_FLAG;
21821 
21822 -- This API is a wrapper API called for FORMS which in turn
21823 -- calls PROCESS_WBS_UPDATES_WRP, as from FORM the remote
21824 -- package level constants FND_API.G_TRUE , FND_API.G_FLASE
21825 -- can not be reffered .
21826 
21827 PROCEDURE PROCESS_WBS_UPDATES_WRP_FORM
21828    (  p_project_id            IN   pa_projects_all.project_id%TYPE
21829      ,p_structure_version_id  IN   pa_proj_element_versions.element_version_id%TYPE
21830      ,p_pub_struc_ver_id      IN   NUMBER    := NULL
21831      ,x_return_status         OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
21832      ,x_msg_count             OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
21833      ,x_msg_data              OUT  NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
21834 AS
21835 
21836 l_msg_count                     NUMBER := 0;
21837 l_data                          VARCHAR2(2000);
21838 l_msg_data                      VARCHAR2(2000);
21839 l_msg_index_out                 NUMBER;
21840 l_debug_mode                    VARCHAR2(1);
21841 
21842 BEGIN
21843 
21844 -- Not doing the validation of input parameter
21845 -- as it is done in the the called API.
21846 
21847 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
21848        (  p_commit                => FND_API.G_TRUE
21849          ,p_calling_context       => 'UPDATE'
21850          ,p_project_id            => p_project_id
21851          ,p_structure_version_id  => p_structure_version_id
21852          ,x_return_status         => x_return_status
21853          ,x_msg_count             => x_msg_count
21854          ,x_msg_data              => x_msg_data) ;
21855 
21856      IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
21857           IF l_debug_mode = 'Y' THEN
21858              pa_debug.g_err_stage := 'Error calling concurrent wbs update process ';
21859              pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,4);
21860           END IF;
21861           Raise Invalid_Arg_Exc_WP;
21862      END IF;
21863 
21864 EXCEPTION
21865 WHEN Invalid_Arg_Exc_WP THEN
21866 
21867      x_return_status := FND_API.G_RET_STS_ERROR;
21868      l_msg_count := FND_MSG_PUB.count_msg;
21869      IF l_msg_count = 1 and x_msg_data IS NULL THEN
21870           PA_INTERFACE_UTILS_PUB.get_messages
21871               (p_encoded        => FND_API.G_TRUE
21872               ,p_msg_index      => 1
21873               ,p_msg_count      => l_msg_count
21874               ,p_msg_data       => l_msg_data
21875               ,p_data           => l_data
21876               ,p_msg_index_out  => l_msg_index_out);
21877           x_msg_data := l_data;
21878           x_msg_count := l_msg_count;
21879      ELSE
21880           x_msg_count := l_msg_count;
21881      END IF;
21882      IF l_debug_mode = 'Y' THEN
21883           pa_debug.reset_curr_function;
21884      END IF;
21885      RETURN;
21886 WHEN others THEN
21887 
21888      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21889      x_msg_count     := 1;
21890      x_msg_data      := SQLERRM;
21891 
21892      FND_MSG_PUB.add_exc_msg
21893                    ( p_pkg_name        => 'PA_PROJ_TASK_STRUC_PUB'
21894                     ,p_procedure_name  => 'PROCESS_WBS_UPDATES_WRP'
21895                     ,p_error_text      => x_msg_data);
21896 
21897      IF l_debug_mode = 'Y' THEN
21898           pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
21899           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,5);
21900           pa_debug.reset_curr_function;
21901      END IF;
21902      RAISE;
21903 END PROCESS_WBS_UPDATES_WRP_FORM ;
21904 
21905   --bug 3035902 maansari
21906 PROCEDURE call_process_WBS_updates(
21907         p_dest_project_id       IN   NUMBER
21908        ,x_return_status         OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
21909        ,x_msg_count             OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
21910        ,x_msg_data              OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
21911  ) AS
21912 
21913        CURSOR cur_strs_n_types
21914        IS
21915          SELECT ppe.proj_element_id, ppst.structure_type_id
21916            FROM pa_proj_elements ppe, pa_proj_structure_types ppst, pa_structure_types pst
21917           WHERE ppe.project_id = p_dest_project_id
21918             AND ppe.object_type = 'PA_STRUCTURES'
21919             AND ppe.proj_element_id = ppst.proj_element_id
21920             and ppst.structure_type_id = pst.structure_type_id
21921             and pst.structure_type in ('WORKPLAN','FINANCIAL')
21922           ;
21923 
21924        CURSOR cur_str_vers( c_structure_id NUMBER )
21925        IS
21926          SELECT ppevs.element_version_id
21927            FROM pa_proj_element_versions ppevs
21928           WHERE ppevs.project_id = p_dest_project_id
21929             AND ppevs.object_type = 'PA_STRUCTURES'
21930             AND ppevs.proj_element_id = c_structure_id
21931           ;
21932 
21933        l_fn_str_id          NUMBER;
21934        l_wp_str_id          NUMBER;
21935        l_fn_str_ver_id      NUMBER;
21936        l_wp_str_ver_id      NUMBER;
21937        l_task_weight_basis  PA_PROJ_PROGRESS_ATTR.task_weight_basis_code%TYPE;
21938        l_shared             VARCHAR2(1);
21939 
21940        l_msg_count                     NUMBER := 0;
21941        l_data                          VARCHAR2(2000);
21942        l_msg_data                      VARCHAR2(2000);
21943        l_msg_index_out                 NUMBER;
21944        l_debug_mode                    VARCHAR2(1);
21945    BEGIN
21946 
21947           x_msg_count := 0;
21948           x_return_status := FND_API.G_RET_STS_SUCCESS;
21949           l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
21950           l_shared := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_dest_project_id);
21951 
21952        /* The following is the simple solution for this.
21953           Update the Process_WBS_flag only for WORKPLAN enabled structures
21954           if task weighting basis is DURATION.
21955           Call the concurrent wrapper for all structure versions */
21956        l_task_weight_basis := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS( p_dest_project_id );
21957 --       IF NVL( l_task_weight_basis, 'X' ) in( 'DURATION', 'EFFORT') --3127640
21958 --      THEN
21959            FOR cur_strs_n_types_rec in cur_strs_n_types LOOP
21960               IF cur_strs_n_types_rec.structure_type_id = 1  --'WORKPLAN' structure
21961               THEN
21962                   l_wp_str_id  := cur_strs_n_types_rec.proj_element_id;
21963                   IF NVL( l_task_weight_basis, 'X' ) = 'DURATION'   --bug 3127640
21964                   THEN
21965                      --no need to update the flag in case of EFFORT or Manual bcoz
21966                        --the onlyu thing affected from quick entry is DURATRION thru dates..
21967 
21968                      UPDATE pa_proj_elem_ver_structure
21969                         SET PROCESS_UPDATE_WBS_FLAG = 'Y'
21970                       WHERE proj_element_id = cur_strs_n_types_rec.proj_element_id
21971                         AND project_id = p_dest_project_id
21972                         AND PROCESS_UPDATE_WBS_FLAG = 'N'
21973                        ;
21974                   END IF;
21975               ELSE
21976                   l_fn_str_id := cur_strs_n_types_rec.proj_element_id;
21977               END IF;
21978            END LOOP;
21979 --       END IF;
21980 
21981        IF l_shared = 'Y'
21982 --AND NVL( l_task_weight_basis, 'X' ) in( 'DURATION', 'EFFORT')  --bug 3127640
21983        THEN
21984            OPEN cur_str_vers( l_wp_str_id );
21985            FETCH cur_str_vers INTO l_wp_str_ver_id;
21986            CLOSE cur_str_vers;
21987 
21988            PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
21989                 (
21990               p_calling_context       => 'COPY_PROJECT'
21991              ,p_project_id            => p_dest_project_id
21992              ,p_structure_version_id  => l_wp_str_ver_id
21993              ,x_return_status         => x_return_status
21994              ,x_msg_count             => x_msg_count
21995              ,x_msg_data              => x_msg_data);
21996 
21997            IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
21998               IF l_debug_mode = 'Y' THEN
21999                  pa_debug.g_err_stage := 'Error calling concurrent wbs update process ';
22000                  pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,4);
22001               END IF;
22002               Raise Invalid_Arg_Exc_WP;
22003            END IF;
22004 
22005        ELSIF l_shared = 'N'
22006 --AND NVL( l_task_weight_basis, 'X' ) in( 'DURATION', 'EFFORT')   --Split then call the api twice.  --bug3127640  added 'EFFORT' in the IF clause.
22007        THEN
22008 /*
22009            OPEN cur_str_vers( l_wp_str_id );
22010            FETCH cur_str_vers INTO l_wp_str_ver_id;
22011            CLOSE cur_str_vers;
22012 */
22013            --If there are more than one working versions
22014            FOR cur_str_vers_rec in cur_str_vers( l_wp_str_id ) LOOP
22015 
22016            PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
22017                 (
22018               p_calling_context       => 'COPY_PROJECT'
22019              ,p_project_id            => p_dest_project_id
22020              ,p_structure_version_id  => cur_str_vers_rec.element_version_id
22021              ,x_return_status         => x_return_status
22022              ,x_msg_count             => x_msg_count
22023              ,x_msg_data              => x_msg_data);
22024 
22025            IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
22026               IF l_debug_mode = 'Y' THEN
22027                  pa_debug.g_err_stage := 'Error calling concurrent wbs update process ';
22028                  pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,4);
22029               END IF;
22030               Raise Invalid_Arg_Exc_WP;
22031            END IF;
22032 
22033            END LOOP;
22034 
22035 
22036            OPEN cur_str_vers( l_fn_str_id );
22037            FETCH cur_str_vers INTO l_fn_str_ver_id;
22038            --hsiu: 3305199 for bug with wp only project
22039            IF cur_str_vers%NOTFOUND THEN
22040              l_fn_str_ver_id := -1;
22041            END IF;
22042            CLOSE cur_str_vers;
22043 
22044            --hsiu: 3305199 for bug with wp only project
22045            IF l_fn_str_ver_id <> -1 THEN
22046              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
22047                 (
22048               p_calling_context       => 'COPY_PROJECT'
22049              ,p_project_id            => p_dest_project_id
22050              ,p_structure_version_id  => l_fn_str_ver_id
22051              ,x_return_status         => x_return_status
22052              ,x_msg_count             => x_msg_count
22053              ,x_msg_data              => x_msg_data);
22054 
22055              IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
22056                IF l_debug_mode = 'Y' THEN
22057                  pa_debug.g_err_stage := 'Error calling update WBS WRP ';
22058                  pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,4);
22059                END IF;
22060                Raise Invalid_Arg_Exc_WP;
22061              END IF;
22062            END IF; --hsiu: 3305199 for bug with wp only project
22063 
22064        END IF;
22065 EXCEPTION
22066 WHEN Invalid_Arg_Exc_WP THEN
22067 
22068      x_return_status := FND_API.G_RET_STS_ERROR;
22069      l_msg_count := FND_MSG_PUB.count_msg;
22070      IF l_msg_count = 1 and x_msg_data IS NULL THEN
22071           PA_INTERFACE_UTILS_PUB.get_messages
22072               (p_encoded        => FND_API.G_TRUE
22073               ,p_msg_index      => 1
22074               ,p_msg_count      => l_msg_count
22075               ,p_msg_data       => l_msg_data
22076               ,p_data           => l_data
22077               ,p_msg_index_out  => l_msg_index_out);
22078           x_msg_data := l_data;
22079           x_msg_count := l_msg_count;
22080      ELSE
22081           x_msg_count := l_msg_count;
22082      END IF;
22083      IF l_debug_mode = 'Y' THEN
22084           pa_debug.reset_curr_function;
22085      END IF;
22086      RETURN;
22087 WHEN others THEN
22088 
22089      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
22090      x_msg_count     := 1;
22091      x_msg_data      := SQLERRM;
22092 
22093      FND_MSG_PUB.add_exc_msg
22094                    ( p_pkg_name        => 'PA_PROJ_TASK_STRUC_PUB'
22095                     ,p_procedure_name  => 'CALL_PROCESS_WBS_UPDATES'
22096                     ,p_error_text      => x_msg_data);
22097 
22098      IF l_debug_mode = 'Y' THEN
22099           pa_debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
22100           pa_debug.write(G_PKG_NAME,pa_debug.g_err_stage,5);
22101           pa_debug.reset_curr_function;
22102      END IF;
22103      RAISE;
22104 END call_process_WBS_updates;
22105 --End 3035902 maansari
22106 
22107 --hsiu: bug 3254091
22108 PROCEDURE Update_Current_Phase
22109 ( p_api_version_number         IN     NUMBER      := 1.0
22110  ,p_commit                     IN     VARCHAR2    := FND_API.G_FALSE
22111  ,p_init_msg_list              IN     VARCHAR2    := FND_API.G_FALSE
22112  ,p_validate_only              IN     VARCHAR2    := FND_API.G_TRUE
22113  ,p_validation_level           IN     VARCHAR2    := 100
22114  ,p_debug_mode                 IN     VARCHAR2    := 'N'
22115  ,p_max_msg_count              IN     NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22116  ,p_user_id                    IN     NUMBER      := FND_GLOBAL.USER_ID
22117  ,p_project_id                 IN     NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22118  ,p_project_name               IN     VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22119  ,p_current_lifecycle_phase_id IN     NUMBER      := FND_API.G_MISS_NUM
22120  ,p_current_lifecycle_phase    IN     VARCHAR2    := FND_API.G_MISS_CHAR
22121  ,x_return_status              OUT    NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
22122  ,x_msg_count                  OUT    NOCOPY NUMBER --File.Sql.39 bug 4440895
22123  ,x_msg_data                   OUT    NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
22124 )
22125 IS
22126   CURSOR cur_get_wp_attr(c_project_id NUMBER)
22127       IS
22128     select ppwa.proj_element_id,
22129            ppwa.wp_approval_reqd_flag,
22130            ppwa.wp_auto_publish_flag,
22131            ppwa.wp_default_display_lvl,
22132            ppwa.wp_enable_version_flag,
22133            ppwa.auto_pub_upon_creation_flag,
22134            ppwa.auto_sync_txn_date_flag,
22135            ppwa.wp_approver_source_id,
22136            ppwa.wp_approver_source_type,
22137            ppwa.record_version_number,
22138            ppwa.txn_date_sync_buf_days,
22139            ppwa.lifecycle_version_id,
22140            -- gboomina Bug 8586393 - start
22141            ppwa.use_task_schedule_flag
22142            -- gboomina Bug 8586393 - end
22143       from pa_proj_workplan_attr ppwa,
22144            pa_proj_elements ppe,
22145            pa_proj_structure_types ppst
22146      where ppwa.project_id = c_project_id
22147        and ppwa.project_id = ppe.project_id
22148        and ppwa.proj_element_id = ppe.proj_element_id
22149        and ppe.proj_element_id = ppst.proj_element_id
22150        and ppst.structure_type_id = 1;
22151 
22152   l_proj_element_id           NUMBER;
22153   l_project_id                NUMBER;
22154   l_wp_approval_reqd_fg       VARCHAR2(1);
22155   l_wp_auto_publish_fg        VARCHAR2(1);
22156   l_wp_default_display_lvl    NUMBER;
22157   l_wp_enable_version_fg      VARCHAR2(1);
22158   l_auto_pub_upon_creation_fg VARCHAR2(1);
22159   l_auto_sync_txn_date_fg     VARCHAR2(1);
22160   l_wp_approver_source_id     NUMBER;
22161   l_wp_approver_source_type   NUMBER;
22162   l_record_version_number     NUMBER;
22163   l_txn_date_sync_buf_days    NUMBER;
22164   l_life_cycle_version_id     NUMBER;
22165   l_current_phase_version_id  NUMBER;
22166   -- gboomina Bug 8586393 - start
22167   l_use_task_schedule_flag    VARCHAR2(1);
22168   -- gboomina Bug 8586393 - end
22169   API_ERROR                   EXCEPTION;
22170 
22171   l_return_status             VARCHAR2(1);
22172   l_msg_count                 NUMBER;
22173   l_msg_data                  VARCHAR2(250);
22174   l_error_msg_code            VARCHAR2(250);
22175   l_data                      VARCHAR2(250);
22176   l_msg_index_out             NUMBER;
22177 
22178 BEGIN
22179   --Clear Error Messages.
22180   IF p_init_msg_list = FND_API.G_TRUE THEN
22181           FND_MSG_PUB.initialize;
22182   END IF;
22183 
22184   --set savepoint
22185   IF p_commit = FND_API.G_TRUE THEN
22186     SAVEPOINT update_current_phase;
22187   END IF;
22188 
22189   x_msg_count := 0;
22190   x_return_status := FND_API.G_RET_STS_SUCCESS;
22191 
22192   --Project name to id Conversion
22193   IF ((p_project_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND (p_project_name IS NOT NULL)) OR
22194      ((p_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND (p_project_id IS NOT NULL)) THEN
22195     PA_PROJ_ELEMENTS_UTILS.Project_Name_Or_Id(
22196             p_project_name   => p_project_name,
22197             p_project_id     => p_project_id,
22198             x_project_id     => l_project_id,
22199             x_return_status  => l_return_status,
22200             x_error_msg_code => l_error_msg_code);
22201     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
22202       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
22203                            p_msg_name => l_error_msg_code);
22204       RAISE API_ERROR;
22205     END IF;
22206   END IF;
22207 
22208   --get existing row (need to get life cycle id);
22209   OPEN cur_get_wp_attr(l_project_id);
22210   FETCH cur_get_wp_attr INTO l_proj_element_id,
22211                              l_wp_approval_reqd_fg,
22212                              l_wp_auto_publish_fg,
22213                              l_wp_default_display_lvl,
22214                              l_wp_enable_version_fg,
22215                              l_auto_pub_upon_creation_fg,
22216                              l_auto_sync_txn_date_fg,
22217                              l_wp_approver_source_id,
22218                              l_wp_approver_source_type,
22219                              l_record_version_number,
22220                              l_txn_date_sync_buf_days,
22221                              l_life_cycle_version_id,
22222                              -- gboomina Bug 8586393 - start
22223                              l_use_task_schedule_flag;
22224                              -- gboomina Bug 8586393 - end
22225   CLOSE cur_get_wp_attr;
22226 
22227   --Current Phase name to id conversion
22228   IF ((p_current_lifecycle_phase_id <> FND_API.G_MISS_NUM) AND (p_current_lifecycle_phase_id is not NULL)) OR
22229      ((p_current_lifecycle_phase <> FND_API.G_MISS_CHAR) AND (p_current_lifecycle_phase is not NULL)) then
22230     PA_WORKPLAN_ATTR_UTILS.CHECK_LIFECYCLE_PHASE_NAME_ID
22231       ( p_lifecycle_id              => l_life_cycle_version_id
22232        ,p_current_lifecycle_phase_id        => p_current_lifecycle_phase_id
22233        ,p_current_lifecycle_phase           => p_current_lifecycle_phase
22234        ,p_check_id_flag                 => 'Y'
22235        ,x_current_lifecycle_phase_id        => l_current_phase_version_id
22236        ,x_return_status                 => l_return_status
22237        ,x_error_msg_code                => l_error_msg_code);
22238 
22239     IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
22240       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA', p_msg_name => l_error_msg_code);
22241       RAISE API_ERROR;
22242     END IF;
22243   END IF;
22244 
22245 
22246   --check security if user id is not -1
22247   IF (p_user_id <> -1) THEN
22248     IF 'F' = PA_SECURITY_PVT.check_user_privilege(
22249                'PA_PAXPREPR_OPT_WORKPLAN_STR',
22250                'PA_PROJECTS',
22251                l_project_id
22252              ) THEN
22253       PA_UTILS.ADD_MESSAGE
22254                (p_app_short_name => 'PA',
22255                 p_msg_name       => 'PA_FUNCTION_SECURITY_ENFORCED');
22256       RAISE API_ERROR;
22257     END IF;
22258   END IF;
22259 
22260 
22261   --Call existing update API
22262   PA_WORKPLAN_ATTR_PVT.UPDATE_PROJ_WORKPLAN_ATTRS(
22263     p_commit => p_commit
22264    ,p_validate_only => p_validate_only
22265    ,p_validation_level => 50
22266    ,p_debug_mode => p_debug_mode
22267    ,p_max_msg_count => p_max_msg_count
22268    ,p_project_id => l_project_id
22269    ,p_proj_element_id => l_proj_element_id
22270    ,p_approval_reqd_flag => l_wp_approval_reqd_fg
22271    ,p_auto_publish_flag => l_wp_auto_publish_fg
22272    ,p_approver_source_id => l_wp_approver_source_id
22273    ,p_approver_source_type => l_wp_approver_source_type
22274    ,p_default_display_lvl => l_wp_default_display_lvl
22275    ,p_enable_wp_version_flag => l_wp_enable_version_fg
22276    ,p_auto_pub_upon_creation_flag => l_auto_pub_upon_creation_fg
22277    ,p_auto_sync_txn_date_flag => l_auto_sync_txn_date_fg
22278    ,p_txn_date_sync_buf_days => l_txn_date_sync_buf_days
22279    ,p_lifecycle_version_id => l_life_cycle_version_id
22280    ,p_current_phase_version_id => l_current_phase_version_id
22281    ,p_record_version_number => l_record_version_number
22282    -- gboomina Bug 8586393 - start
22283    ,p_use_task_schedule_flag  => l_use_task_schedule_flag
22284    -- gboomina Bug 8586393 - end
22285    ,x_return_status => l_return_status
22286    ,x_msg_count => l_msg_count
22287    ,x_msg_data => l_msg_data
22288   );
22289 
22290   if l_return_status <> FND_API.G_RET_STS_SUCCESS then
22291     x_msg_count := FND_MSG_PUB.count_msg;
22292     if x_msg_count = 1 then
22293       pa_interface_utils_pub.get_messages
22294          (p_encoded        => FND_API.G_TRUE,
22295           p_msg_index      => 1,
22296           p_msg_count      => l_msg_count,
22297           p_msg_data       => l_msg_data,
22298           p_data           => l_data,
22299           p_msg_index_out  => l_msg_index_out);
22300       x_msg_data := l_data;
22301     end if;
22302     raise API_ERROR;
22303   END IF;
22304 
22305   x_return_status := FND_API.G_RET_STS_SUCCESS;
22306 
22307   if p_commit = FND_API.G_TRUE then
22308      commit work;
22309   end if;
22310 
22311 EXCEPTION
22312   WHEN API_ERROR THEN
22313     x_return_status := FND_API.G_RET_STS_ERROR;
22314     IF p_commit = FND_API.G_TRUE THEN
22315       rollback to update_current_phase;
22316     END IF;
22317   WHEN OTHERS THEN
22318     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
22319     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
22320                             p_procedure_name => 'update_current_phase',
22321                             p_error_text     => SUBSTRB(SQLERRM,1,240));
22322     IF p_commit = FND_API.G_TRUE THEN
22323       rollback to update_current_phase;
22324     END IF;
22325     raise;
22326 END Update_Current_Phase;
22327 --end bug 3254091
22328 
22329   -- This API is created for FP_M changes. Refer to tracking bug 3305199
22330   -- This API imports the data from a string into the system
22331   -- Each string will contain the elements Source Ref, Sub Type and Lag Days
22332   Procedure Parse_Predecessor_Import (
22333     P_String          IN      VARCHAR2,
22334     P_Delimeter       IN      VARCHAR2 DEFAULT ',',
22335         P_Task_Version_Id IN      NUMBER,            --SMUKKA Added this parameter
22336     X_Return_Status   OUT     NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
22337     X_Msg_Count       OUT     NOCOPY NUMBER, --File.Sql.39 bug 4440895
22338     X_Msg_Data        OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
22339   )
22340   IS
22341     l_Strings_Tab           PA_PLSQL_DATATYPES.Char240TabTyp;
22342     l_begin         NUMBER;
22343     l_End           NUMBER;
22344     l_Col1          NUMBER;
22345     l_Col2          VARCHAR2(10);
22346     l_Col3          VARCHAR2(10);
22347     l_String_Length     NUMBER;
22348     l_temp_char         VARCHAR2(1);
22349 
22350 l_Type_Position NUMBER;
22351 l_Type_Count    NUMBER;
22352 
22353 l_Sign_Position NUMBER;
22354 l_Sign_Count    NUMBER;
22355 
22356 --bug 3613766
22357   cursor get_pred_id(c_pred_ref_id VARCHAR2) IS
22358   select ppev1.project_id, ppev1.element_version_id
22359     from pa_proj_elements ppe,
22360          pa_proj_element_versions ppev1,
22361          pa_proj_element_versions ppev2
22362    where ppev2.element_version_id = P_Task_Version_Id
22363      and ppev2.parent_structure_version_id = ppev1.parent_structure_version_id
22364      and ppev1.proj_element_id = ppe.proj_element_id
22365      and ppe.pm_source_reference = c_pred_ref_id;
22366   l_pred_project_id   NUMBER;
22367   l_pred_elem_ver_id  NUMBER;
22368   l_lag_val           NUMBER;
22369   l_type_val          VARCHAR2(2);
22370 --end bug 3613766
22371 
22372   l_Delimeter         VARCHAR2(10);
22373   BEGIN
22374 
22375     IF (P_Delimeter = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
22376       l_Delimeter := ',';
22377     ELSE
22378       l_Delimeter := p_Delimeter;
22379     END IF;
22380 
22381     -- Build the PL/SQL Table with all the required strings
22382     l_begin := 1;
22383     For i IN 1..200000  -- Romove this range. Used only for testing
22384     Loop
22385       Select Instr(P_String, l_Delimeter, 1, i) Into l_End from dual;
22386       Select substr(P_String, l_begin, Decode(l_End, 0, 1000, l_End-l_begin))
22387       Into   l_Strings_Tab(i) From Dual;
22388       l_begin := l_end + 1;
22389       EXIT When nvl(l_End,0) = 0;
22390     End Loop;
22391 
22392    For Rec IN l_Strings_Tab.FIRST..l_Strings_Tab.LAST
22393    Loop
22394      -- Dbms_Output.Put_Line('Input String : -'|| l_Strings_Tab(Rec)||'-');
22395 
22396      If l_Strings_Tab(Rec) IS NOT NULL then
22397         l_String_Length := length(l_Strings_Tab(Rec));
22398      Else
22399     -- Dbms_Output.Put_Line('Error: Input string is null');
22400     RETURN;
22401      End If;
22402 
22403 /*Added re-initialization of these 3 local variables for bug 8431166*/
22404     l_Col1 := 0;
22405     l_Col2 := NULL ;
22406     -- l_Col3 := NULL ; // This has already been done by bug 7243124
22407 /*re-initialization ends for bug 8431166*/
22408 
22409      l_Sign_Count    := 0;
22410      l_Type_Count    := 0;
22411      l_Type_Position := 0;
22412      l_Sign_Position := 0;
22413      l_Col3 := NULL ; /*Added as part of fwd port bug 7243124*/
22414 
22415      FOR char_position in 1..l_String_Length
22416      Loop
22417        l_temp_char := substr(l_Strings_Tab(Rec), char_position, 1);
22418        -- Dbms_Output.Put_Line('Char : '|| l_temp_char );
22419 
22420        If ascii(l_temp_char) NOT BETWEEN 48 AND 57 then  -- is not number character
22421       -- Validating the dependency code number
22422       If char_position = 1 then
22423          -- Dbms_Output.Put_Line('Error: First char is not number');
22424          RETURN;
22425       End If;
22426       If l_temp_char NOT IN ('F', 'S', '+', '-' ) then
22427        --Dbms_Output.Put_Line('Error: Invalid char found in the string');
22428          RETURN;
22429       End If;
22430 
22431       -- Validating sign character
22432       If l_temp_char IN ('+', '-') then
22433          l_Sign_Count    := l_Sign_Count + 1;
22434          l_Sign_Position := char_position;
22435          If l_Sign_Count > 1 then
22436          -- Dbms_Output.Put_Line('Error: More than one signs are found');
22437            RETURN;
22438          Else
22439            If l_Type_Count < 1 then
22440              --Dbms_Output.Put_Line('Error: Type code is missing');
22441              RETURN;
22442            End If;
22443          End If;
22444       End If;
22445 
22446       -- Validating type code character
22447       If l_temp_char IN ('F', 'S') then
22448          If l_Type_Position > 0 and l_Type_Position+1 <> char_position Then
22449             -- Dbms_Output.Put_Line('Error: Type code is invalid - 2');
22450             RETURN;
22451          End If;
22452          l_Type_Count := l_Type_Count + 1; l_Type_Position := char_position;
22453          If l_Type_Count > 2 then
22454            -- Dbms_Output.Put_Line('Error: Type code is invalid - 3');
22455            RETURN;
22456          End If;
22457       End If;
22458 
22459        End If;
22460      End Loop;
22461      -- End of processing single string
22462 
22463      Select To_Number(SubStr(l_Strings_Tab(Rec), 1, Decode(l_Type_Position, 0, 100, l_Type_Position-2 )))
22464      Into   l_Col1 From Dual;
22465 
22466      If l_Type_Position <> 0 then
22467     If l_Type_Count <> 2 then
22468        -- Dbms_Output.Put_Line('Error: Type code is invalid - 4');
22469        RETURN;
22470     End If;
22471     l_Col2 := SubStr(l_Strings_Tab(Rec), l_Type_Position-1, 2);
22472      End If;
22473 
22474      If l_Sign_Position <> 0 then
22475     l_Col3 := SubStr(l_Strings_Tab(Rec),l_Sign_Position);
22476      End If;
22477 
22478 -- Dbms_Output.Put_Line('Output Columns : '|| l_Col1||' - '||l_Col2||' - '||l_Col3);
22479      OPEN get_pred_id(l_col1);
22480      FETCH get_pred_id INTO l_pred_project_id, l_pred_elem_ver_id;
22481      IF get_pred_id%FOUND THEN
22482 
22483        IF (l_Col2 IS NULL) THEN
22484          l_type_val := 'FS';
22485        ELSE
22486          l_type_val := l_Col2;
22487        END IF;
22488 
22489        IF (l_Col3 IS NULL) THEN
22490          l_lag_val := 0;
22491        ELSE
22492          l_lag_val := l_Col3;
22493        END IF;
22494 
22495        pa_relationship_pvt.create_dependency(
22496         p_calling_module => 'AMG'
22497        ,p_src_proj_id => l_pred_project_id
22498        ,p_src_task_ver_id => P_Task_Version_Id
22499        ,p_dest_proj_id => l_pred_project_id
22500        ,p_dest_task_ver_id => l_pred_elem_ver_id
22501        ,p_type     => l_type_val
22502        ,p_lag_days => l_lag_val
22503        ,p_comments => NULL
22504        ,x_return_status => x_return_status
22505        ,x_msg_count => x_msg_count
22506        ,x_msg_data => x_msg_data);
22507      END IF;
22508      CLOSE get_pred_id;
22509 
22510      IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
22511        return;
22512      END IF;
22513 
22514    End Loop;
22515 
22516   END Parse_Predecessor_Import;
22517 
22518   -- This API is created for FP_M changes. Refer to tracking bug 3305199
22519   -- This API exports the data from a system into an out parameter string
22520   -- Each string will contain the elements Source Ref, Sub Type and Lag Days
22521   Function Parse_Predecessor_Export (
22522     P_Element_Version_ID      IN      NUMBER,
22523     P_Delimeter               IN      VARCHAR2 DEFAULT ','
22524   ) RETURN VARCHAR2
22525   IS
22526     l_String VARCHAR2(4000);
22527   Begin
22528       l_String := '';
22529       For i IN ( Select PPE.PM_Source_Reference SourceRef,
22530                 POR.Relationship_Subtype SubType,
22531                 decode(sign(NVL(POR.Lag_Day,0)),
22532                '0', '', '-1', '', '+') || decode(POR.Lag_Day,0, NULL, POR.Lag_day)/* bug#8583608(10*8*60)*/ LagDays   --bug 4348156
22533             From PA_Proj_Elements         PPE,
22534                  PA_Proj_Element_Versions PEV,
22535                  PA_Object_Relationships  POR,
22536                      PA_PROJ_ELEMENT_VERSIONS PEV2
22537             Where PPE.project_id            = PEV.project_id
22538             and PPE.proj_element_id     = PEV.proj_element_id
22539             and PEV.element_version_id  = POR.object_id_to1
22540                 and PEV2.ELEMENT_VERSION_ID     = POR.object_id_from1
22541                 and PEV2.ELEMENT_VERSION_ID     = P_ELEMENT_VERSION_ID
22542             and POR.Relationship_Type   = 'D'
22543             and POR.Object_ID_From2     = POR.Object_ID_To2 )
22544       Loop
22545     l_String := l_String||i.SourceRef||i.SubType||i.LagDays||P_Delimeter;
22546       End Loop;
22547       Return substr(l_String,1,length(l_string)-1);
22548       Exception When Others Then NULL;
22549   End Parse_Predecessor_Export;
22550 
22551 Function Parse_Predecessor_Export2 (
22552     P_Element_Version_ID      IN      NUMBER,
22553     P_Delimeter               IN      VARCHAR2 DEFAULT ','
22554   ) RETURN VARCHAR2
22555   IS
22556     l_String VARCHAR2(4000);
22557   Begin
22558       l_String := '';
22559       For i IN ( Select PPE.proj_element_id ProjElemId,
22560                    POR.Relationship_Subtype SubType,
22561                    decode(sign(NVL(POR.Lag_Day,0)),
22562                    '0', '', '-1', '', '+') || decode(POR.Lag_Day,0, NULL, POR.Lag_day)/* bug#8583608 (10*8*60)*/ LagDays  --bug 4348156
22563             From PA_Proj_Elements         PPE,
22564                  PA_Proj_Element_Versions PEV,
22565                  PA_Object_Relationships  POR,
22566                  PA_PROJ_ELEMENT_VERSIONS PEV2
22567             Where PPE.project_id             = PEV.project_id
22568             and PPE.proj_element_id        = PEV.proj_element_id
22569             and PEV.element_version_id     = POR.object_id_to1
22570             and PEV2.ELEMENT_VERSION_ID     = POR.object_id_from1
22571             and PEV2.ELEMENT_VERSION_ID     = P_ELEMENT_VERSION_ID
22572             and POR.Relationship_Type      = 'D'
22573             and POR.Object_ID_From2     = POR.Object_ID_To2 )
22574       Loop
22575     l_String := l_String||i.ProjElemId||i.SubType||i.LagDays||P_Delimeter;
22576       End Loop;
22577       Return substr(l_String, 1, length(l_string)-1);
22578       Exception When Others Then NULL;
22579   End Parse_Predecessor_Export2;
22580 --Added by rtarway for FP.M Development
22581 Function GET_SHARE_TYPE (
22582     P_Project_ID      IN      NUMBER
22583   ) RETURN VARCHAR2
22584   IS
22585     Cursor get_proj_share_type
22586     IS
22587      SELECT proj.structure_sharing_code FROM pa_projects_all proj where proj.project_id = P_Project_ID;
22588 
22589     l_share_code VARCHAR2(250);
22590 
22591   Begin
22592       l_share_code := '';
22593 
22594       OPEN get_proj_share_type;
22595       FETCH get_proj_share_type into l_share_code;
22596       CLOSE get_proj_share_type;
22597 
22598       Return l_share_code;
22599       Exception When Others Then NULL;
22600   End GET_SHARE_TYPE;
22601 --Added by rtarway for FP.M Development
22602 
22603   procedure delete_intra_dependency (p_element_version_id IN  NUMBER,
22604                                                      p_commit             IN  VARCHAR2 := FND_API.G_FALSE,
22605                                                      p_debug_mode         IN  VARCHAR2 := 'N',
22606                                                      x_return_status      OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
22607   IS
22608     l_object_type   VARCHAR2(80);
22609     API_ERROR       EXCEPTION;
22610   BEGIN
22611     IF (p_debug_mode = 'Y') THEN
22612       pa_debug.init_err_stack('PA_PROJ_TASK_STRUC_PUB.DELETE_INTRA_DEPENDENCY');
22613       pa_debug.debug('PA_PROJ_TASK_STRUC_PUB.DELETE_INTRA_DEPENDENCY Begin');
22614     END IF;
22615 --
22616     IF (p_commit = FND_API.G_TRUE) THEN
22617       savepoint delete_intra_dependency;
22618     END IF;
22619     BEGIN
22620         SELECT object_type
22621           INTO l_object_type
22622           FROM pa_proj_element_versions
22623          WHERE ELEMENT_VERSION_ID = p_element_version_id;
22624     EXCEPTION
22625         WHEN NO_DATA_FOUND THEN
22626              fnd_message.set_name('PA','PA_RECORD_NOT_FOUND');
22627              x_return_status := FND_API.G_RET_STS_ERROR;
22628         WHEN OTHERS THEN
22629              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
22630              raise;
22631     END;
22632     IF l_object_type='PA_TASKS' THEN
22633        BEGIN
22634            DELETE FROM pa_object_relationships por1
22635             WHERE por1.object_relationship_id IN
22636                   (SELECT por.object_relationship_id
22637                      FROM pa_object_relationships por
22638                     WHERE por.relationship_type = 'D'
22639                       AND por.object_id_from1 = p_element_version_id
22640                       AND por.object_id_from2 = por.object_id_to2
22641                       AND por.object_type_from = 'PA_TASKS'
22642                       AND por.object_type_to = 'PA_TASKS');
22643            IF SQL%NOTFOUND THEN
22644               fnd_message.set_name('PA','PA_RECORD_NOT_FOUND');
22645               x_return_status := FND_API.G_RET_STS_ERROR;
22646            END IF;
22647        EXCEPTION
22648            WHEN OTHERS THEN
22649                 x_return_status := FND_API.G_RET_STS_ERROR;
22650                 raise;
22651        END;
22652     ELSIF l_object_type='PA_STRUCTURES' THEN
22653        BEGIN
22654            DELETE FROM pa_object_relationships por1
22655             WHERE por1.object_relationship_id IN
22656                   (SELECT por.object_relationship_id
22657                      FROM pa_proj_element_versions ppev,
22658                           pa_object_relationships por
22659                     WHERE relationship_type ='D'
22660                       AND ppev.parent_structure_version_id = p_element_version_id
22661                       AND ppev.object_type = 'PA_TASKS'
22662                       AND por.object_id_from2 = por.object_id_to2
22663                       AND por.object_type_from = 'PA_TASKS'
22664                       AND por.object_type_to = 'PA_TASKS'
22665                       AND por.object_id_from1 = ppev.ELEMENT_VERSION_ID);
22666            IF SQL%NOTFOUND THEN
22667               fnd_message.set_name('PA','PA_RECORD_NOT_FOUND');
22668               x_return_status := FND_API.G_RET_STS_ERROR;
22669            END IF;
22670        EXCEPTION
22671            WHEN OTHERS THEN
22672                 x_return_status := FND_API.G_RET_STS_ERROR;
22673                 raise;
22674        END;
22675     END IF;
22676 --
22677     x_return_status := FND_API.G_RET_STS_SUCCESS;
22678 --
22679     IF (p_commit = FND_API.G_TRUE) THEN
22680        COMMIT;
22681     END IF;
22682 --
22683     IF (p_debug_mode = 'Y') THEN
22684        pa_debug.debug('PA_PROJ_TASK_STRUC_PUB.DELETE_INTRA_DEPENDENCY END');
22685     END IF;
22686   EXCEPTION
22687     WHEN API_ERROR THEN
22688         x_return_status := FND_API.G_RET_STS_ERROR;
22689         rollback to delete_intra_dependency;
22690     WHEN OTHERS THEN
22691         IF (p_commit = FND_API.G_TRUE) THEN
22692         ROLLBACK TO delete_intra_dependency;
22693     END IF;
22694         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
22695     FND_MSG_PUB.add_exc_msg(
22696         p_pkg_name       => 'PA_PROJ_TASK_STRUC_PUB',
22697                 p_procedure_name => 'delete_intra_dependency',
22698                 p_error_text     => SUBSTRB(SQLERRM,1,240));
22699         ROLLBACK TO delete_intra_dependency;
22700     RAISE;
22701   END delete_intra_dependency;
22702 
22703 END PA_PROJ_TASK_STRUC_PUB;
22704