DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_PROJ_STRUC_MAPPING_PUB

Source


6 
1 PACKAGE BODY PA_PROJ_STRUC_MAPPING_PUB AS
2 /* $Header: PAPSMPPB.pls 120.3.12020000.2 2012/07/12 05:58:33 djambhek ship $ */
3 
4 g_module_name   VARCHAR2(100) := 'PA_PROJ_STRUC_MAPPING_PUB';
5 Invalid_Arg_Exc_WP Exception;
7 -- Procedure            : DELETE_MAPPING
8 -- Type                 : Public Procedure
9 -- Purpose              : This API will be called from task details relationships sub tab.
10 --                      : This will be called when the user clicks on the delete icon
11 --                      : in the mapping region of the fin task details page
12 -- Note                 : This API can work in 3 modes.
13 --                      : --If both WkpTask ID and Fin Task ID are passed --- The correspondinf mapping is removed
14 --                      : --Only FP task id is passed. --- All the mapping for this FP task id will be removed
15 --                      : --Only WP task id is passed. --- The mapping corresponding to this Wkp Task ID will be removed
16 --                      : The parameter p_wp_from_task_name is  not used currently but will be used in future.
17 --                      :
18 -- Assumptions          :
19 
20 -- Parameters                   Type     Required        Description and Purpose
21 -- ---------------------------  ------   --------        --------------------------------------------------------
22 -- p_wp_from_task_name          VARCHAR2   NO            Indicates the workplan tasks name. This can be a string of workplan tasks.
23 -- p_wp_task_version_id         NUMBER     NO            Task Version ID of workplan task for which mapping needs to be deleted.
24 -- p_fp_task_version_id         NUMEBR     NO            Task Version ID of Financial Task for which mapping needs to be deleted.
25 
26 PROCEDURE DELETE_MAPPING
27     (
28        p_api_version           IN   NUMBER   := 1.0
29      , p_init_msg_list         IN   VARCHAR2 := FND_API.G_TRUE
30      , p_commit                IN   VARCHAR2 := FND_API.G_FALSE
31      , p_validate_only         IN   VARCHAR2 := FND_API.G_FALSE
32      , p_validation_level      IN   NUMBER   := FND_API.G_VALID_LEVEL_FULL
33      , p_calling_module        IN   VARCHAR2 := 'SELF_SERVICE'
34      , p_debug_mode            IN   VARCHAR2 := 'N'
35      , p_record_version_number IN   NUMBER   := FND_API.G_MISS_NUM
36      , p_wp_from_task_name     IN   VARCHAR2 := FND_API.G_MISS_CHAR
37      , p_wp_task_version_id    IN   NUMBER := FND_API.G_MISS_NUM
38      , p_fp_task_version_id    IN   NUMBER := FND_API.G_MISS_NUM
39      , x_return_status     OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
40      , x_msg_count         OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
41      , x_msg_data          OUT   NOCOPY VARCHAR2         --File.Sql.39 bug 4440895
42    )
43 IS
44 
45 l_msg_count                     NUMBER := 0;
46 l_data                          VARCHAR2(2000);
47 l_msg_data                      VARCHAR2(2000);
48 l_msg_index_out                 NUMBER;
49 l_debug_mode                    VARCHAR2(1);
50 l_object_relationship_id        NUMBER;
51 l_rec_version_num                       NUMBER;
52 
53 l_debug_level2                   CONSTANT NUMBER := 2;
54 l_debug_level3                   CONSTANT NUMBER := 3;
55 l_debug_level4                   CONSTANT NUMBER := 4;
56 l_debug_level5                   CONSTANT NUMBER := 5;
57 
58 
59 --This cursor selects relationship id, record version number from pa_object_relationship for the passed work plan task id
60 CURSOR c_get_mapping_frm_wp_task (l_wp_task_version_id NUMBER)
61 IS
62 SELECT
63         obj.object_relationship_id
64       , obj.record_version_number
65 FROM
66      PA_OBJECT_RELATIONSHIPS obj
67 WHERE obj.object_id_from1 = l_wp_task_version_id
68 AND obj.relationship_type='M';
69 
70 --This cursor selects relationship id , record version number from pa_object_relationship for the passed work plan and financial task
71 --This will return more than a row
72 CURSOR c_get_mapping_frm_fp_task ( l_fp_task_version_id NUMBER)
73 IS
74 SELECT
75        object_relationship_id
76      , record_version_number
77 FROM
78      PA_OBJECT_RELATIONSHIPS
79 WHERE
80     object_id_to1 = l_fp_task_version_id
81 AND relationship_type='M';
82 
83 --This cursor selects relationship id ,record version number from pa_object_relationship for the passed WP task id and FP task id
84 CURSOR c_get_mapping_frm_wp_fp_task (l_wp_task_version_id NUMBER , l_fp_task_version_id NUMBER)
85 IS
86 SELECT
87         obj.object_relationship_id
88       , obj.record_version_number
89 FROM
90      PA_OBJECT_RELATIONSHIPS obj
91 WHERE obj.object_id_from1 = l_wp_task_version_id
92 AND   obj.object_id_to1 = l_fp_task_version_id
93 AND   obj.relationship_type='M';
94 
95 BEGIN
96 
97      x_msg_count := 0;
98      x_return_status := FND_API.G_RET_STS_SUCCESS;
99 
100      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
101      IF l_debug_mode = 'Y' THEN
102           PA_DEBUG.set_curr_function( p_function   => 'DELETE_MAPPING',
103                                       p_debug_mode => l_debug_mode );
104      END IF;
105 
106      IF l_debug_mode = 'Y' THEN
107           Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : DELETE_MAPPING : Printing Input parameters';
108           Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
109                                      l_debug_level3);
110 
111           Pa_Debug.WRITE(g_module_name,'p_wp_from_task_name'||':'||p_wp_from_task_name,
112                                      l_debug_level3);
113 
114           Pa_Debug.WRITE(g_module_name,'p_wp_task_version_id'||':'||p_wp_task_version_id,
115                                      l_debug_level3);
116 
120 
117           Pa_Debug.WRITE(g_module_name,'p_fp_task_version_id'||':'||p_fp_task_version_id,
118                                      l_debug_level3);
119      END IF;
121      IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_TRUE)) THEN
122       FND_MSG_PUB.initialize;
123      END IF;
124 
125      IF (p_commit = FND_API.G_TRUE) THEN
126       savepoint DELETE_MAPPING_PUBLIC;
127      END IF;
128 
129      IF l_debug_mode = 'Y' THEN
130           Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : DELETE_MAPPING : Validating Input parameters';
131           Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
132                                      l_debug_level3);
133      END IF;
134 
135      IF (
136           ( p_wp_task_version_id IS NULL OR p_wp_task_version_id = FND_API.G_MISS_NUM ) AND
137           ( p_fp_task_version_id IS NULL OR p_fp_task_version_id = FND_API.G_MISS_NUM )
138         )
139      THEN
140            IF l_debug_mode = 'Y' THEN
141                Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : DELETE_MAPPING : Both p_wp_task_version_id and p_fp_task_version_id are null';
142                Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
143                                      l_debug_level3);
144            END IF;
145           RAISE Invalid_Arg_Exc_WP;
146      END IF;
147       --Following is added to implement locking
148       -- If both WP task ID and FP Task ID are passed from self service
149       IF ( ( p_wp_task_version_id IS NOT NULL AND p_wp_task_version_id <> FND_API.G_MISS_NUM )
150            AND
151            ( p_fp_task_version_id IS NOT NULL AND p_fp_task_version_id <> FND_API.G_MISS_NUM )
152          )
153       THEN
154           --Get the object_relationship_id
155            OPEN  c_get_mapping_frm_wp_fp_task ( p_wp_task_version_id , p_fp_task_version_id );
156            FETCH c_get_mapping_frm_wp_fp_task INTO l_object_relationship_id , l_rec_version_num ;
157            -- If no row found
158           -- Raise exception and populate error message
159            IF ( c_get_mapping_frm_wp_fp_task%NOTFOUND )
160            THEN
161                IF l_debug_mode = 'Y' THEN
162                     Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : DELETE_MAPPING : No Mapping Exists';
163                     Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
164                                     l_debug_level3);
165                END IF;
166 	       -- Bug 4142254 : Record has been changes error make sense for Self Service, but from AMG
167 	       -- it should be "Mapping does not exist between the given tasks."
168 	       IF p_calling_module = 'AMG' THEN
169 	               PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
170                                      p_msg_name       => 'PA_TASK_MAPPING_NOT_EXIST' );
171 		       RAISE FND_API.G_EXC_ERROR ;
172 		ELSE
173 	               PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
174                                      p_msg_name       => 'PA_RECORD_CHANGED' );
175 		       RAISE FND_API.G_EXC_ERROR ;
176 		END IF;
177            END IF;
178            CLOSE c_get_mapping_frm_wp_fp_task;
179           -- if any row found, delete the row
180            IF (l_object_relationship_id IS NOT NULL)
181            THEN
182                 IF l_debug_mode = 'Y' THEN
183                     Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : DELETE_MAPPING : Calling delete';
184                     Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
185                                     l_debug_level3);
186                 END IF;
187 
188                -- Call public API for deleting the relationship
189 
190                 PA_RELATIONSHIP_PUB.DELETE_RELATIONSHIP
191                 (
192                    p_api_version             => p_api_version
193                  , p_init_msg_list           => FND_API.G_FALSE
197                  , p_debug_mode              => l_debug_mode
194                  , p_commit                  => p_commit
195                  , p_validate_only           => p_validate_only
196                  , p_calling_module          => 'SELF_SERVICE'
198                  , p_object_relationship_id  => l_object_relationship_id
199                  , p_record_version_number   => l_rec_version_num
200                  , x_return_status           => x_return_status
201                  , x_msg_count               => x_msg_count
202                  , x_msg_data                => x_msg_data
203                  );
204                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)
205                 THEN
206                     RAISE FND_API.G_EXC_ERROR;
207                 END IF;
208            END IF;
209 
210       -- If the WP task ID is not NULL, get the relationship ID and delete mapping
211       ELSIF (p_wp_task_version_id IS NOT NULL AND p_wp_task_version_id <> FND_API.G_MISS_NUM )
212       THEN
213            OPEN  c_get_mapping_frm_wp_task ( p_wp_task_version_id );
214            FETCH c_get_mapping_frm_wp_task INTO l_object_relationship_id , l_rec_version_num ;
215            CLOSE c_get_mapping_frm_wp_task;
216 
217            IF (l_object_relationship_id IS NOT NULL)
218            THEN
219                 IF l_debug_mode = 'Y' THEN
220                     Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : DELETE_MAPPING : Calling delete';
221                     Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
222                                     l_debug_level3);
223                 END IF;
224 
225                -- Call public API for deleting the relationship
226 
227                 PA_RELATIONSHIP_PUB.DELETE_RELATIONSHIP
228                 (
229                    p_api_version             => p_api_version
230                  , p_init_msg_list           => FND_API.G_FALSE
231                  , p_commit                  => p_commit
232                  , p_validate_only           => p_validate_only
233                  , p_calling_module          => 'SELF_SERVICE'
234                  , p_debug_mode              => l_debug_mode
235                  , p_object_relationship_id  => l_object_relationship_id
236                  , p_record_version_number   => l_rec_version_num
237                  , x_return_status           => x_return_status
238                  , x_msg_count               => x_msg_count
239                  , x_msg_data                => x_msg_data
240                  );
241 
242                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)
243                 THEN
244                     RAISE FND_API.G_EXC_ERROR;
245                 END IF;
246 
247           ELSE
248                     IF l_debug_mode = 'Y' THEN
249                          Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : DELETE_MAPPING : Mapping does not exist for the passed WP task ID';
250                          Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
251                                  l_debug_level3);
252                     END IF;
253           END IF;--IF (l_object_relationship_id IS NOT NULL) ENDS
254 
255 
256       -- If financial task id is passed get the mapping with FP task id
257       ELSIF ( p_fp_task_version_id IS NOT NULL AND p_fp_task_version_id <> FND_API.G_MISS_NUM )
258           THEN
259                FOR map_rec IN c_get_mapping_frm_fp_task ( p_fp_task_version_id ) LOOP
260 
261                     PA_RELATIONSHIP_PUB.DELETE_RELATIONSHIP
262                      (
263                              p_api_version             => p_api_version
264                            , p_init_msg_list           => FND_API.G_FALSE
265                            , p_commit                  => p_commit
266                            , p_validate_only           => p_validate_only
267                            , p_calling_module          => 'SELF_SERVICE'
268                            , p_debug_mode              => l_debug_mode
269                            , p_object_relationship_id  => map_rec.object_relationship_id
270                            , p_record_version_number   => map_rec.record_version_number
271                            , x_return_status           => x_return_status
272                            , x_msg_count               => x_msg_count
273                            , x_msg_data                => x_msg_data
274                       );
275                      IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)
276                      THEN
277                          RAISE FND_API.G_EXC_ERROR;
278                      END IF;
279 
280                END LOOP;
281       END IF;
282 
283 
284  IF (p_commit = FND_API.G_TRUE) THEN
285       COMMIT;
286  END IF;
287 
288 
289 EXCEPTION
290 
291 WHEN FND_API.G_EXC_ERROR THEN
292 
293      x_return_status := Fnd_Api.G_RET_STS_ERROR;
294      l_msg_count := Fnd_Msg_Pub.count_msg;
295 
296      IF p_commit = FND_API.G_TRUE THEN
297         ROLLBACK TO DELETE_MAPPING_PUBLIC;
298      END IF;
299 
300      IF c_get_mapping_frm_wp_task%ISOPEN THEN
301         CLOSE c_get_mapping_frm_wp_task;
302      END IF;
303 
304      IF c_get_mapping_frm_fp_task%ISOPEN THEN
305         CLOSE c_get_mapping_frm_wp_task;
306      END IF;
307 
308      IF c_get_mapping_frm_wp_fp_task%ISOPEN THEN
309         CLOSE c_get_mapping_frm_wp_fp_task;
310      END IF;
311 
312      IF l_msg_count = 1 AND x_msg_data IS NULL
313       THEN
314           Pa_Interface_Utils_Pub.get_messages
315               ( p_encoded        => Fnd_Api.G_TRUE
319               , p_data           => l_data
316               , p_msg_index      => 1
317               , p_msg_count      => l_msg_count
318               , p_msg_data       => l_msg_data
320               , p_msg_index_out  => l_msg_index_out);
321           x_msg_data := l_data;
322           x_msg_count := l_msg_count;
323      ELSE
324           x_msg_count := l_msg_count;
325      END IF;
326      IF l_debug_mode = 'Y' THEN
327           Pa_Debug.reset_curr_function;
328      END IF;
329 
330 WHEN Invalid_Arg_Exc_WP THEN
331 
332      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
333      x_msg_count     := 1;
334      x_msg_data      := 'PA_PROJ_STRUC_MAPPING_PUB : DELETE_MAPPING : NULL PARAMETERS ARE PASSED OR CURSOR DIDNT RETURN ANY ROWS';
335 
336      IF p_commit = FND_API.G_TRUE THEN
337         ROLLBACK TO DELETE_MAPPING_PUBLIC;
338      END IF;
339      IF c_get_mapping_frm_wp_task%ISOPEN THEN
340         CLOSE c_get_mapping_frm_wp_task;
341      END IF;
342 
343      IF c_get_mapping_frm_fp_task%ISOPEN THEN
344         CLOSE c_get_mapping_frm_wp_task;
345      END IF;
346 
347      IF c_get_mapping_frm_wp_fp_task%ISOPEN THEN
348         CLOSE c_get_mapping_frm_wp_fp_task;
349      END IF;
350 
351      Fnd_Msg_Pub.add_exc_msg
352                    ( p_pkg_name        => 'PA_PROJ_STRUC_MAPPING_PUB'
353                     , p_procedure_name  => 'DELETE_MAPPING'
354                     , p_error_text      => x_msg_data);
355 
356      IF l_debug_mode = 'Y' THEN
357           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
358           Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
359                               l_debug_level5);
360           Pa_Debug.reset_curr_function;
361      END IF;
362      RAISE;
363 
364 WHEN OTHERS THEN
365 
366      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
367      x_msg_count     := 1;
368      x_msg_data      := SQLERRM;
369 
370      IF p_commit = FND_API.G_TRUE THEN
371         ROLLBACK TO DELETE_MAPPING_PUBLIC;
372      END IF;
373 
374      IF c_get_mapping_frm_wp_task%ISOPEN THEN
375         CLOSE c_get_mapping_frm_wp_task;
376      END IF;
377 
378      IF c_get_mapping_frm_fp_task%ISOPEN THEN
379         CLOSE c_get_mapping_frm_wp_task;
380      END IF;
381 
382      IF c_get_mapping_frm_wp_fp_task%ISOPEN THEN
383         CLOSE c_get_mapping_frm_wp_fp_task;
384      END IF;
385 
386      Fnd_Msg_Pub.add_exc_msg
387                    ( p_pkg_name         => 'PA_PROJ_STRUC_MAPPING_PUB'
388                     , p_procedure_name  => 'DELETE_MAPPING'
389                     , p_error_text      => x_msg_data);
390 
391      IF l_debug_mode = 'Y' THEN
392           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
393           Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
394                               l_debug_level5);
395           Pa_Debug.reset_curr_function;
396      END IF;
397      RAISE;
398 END DELETE_MAPPING ;
399 
400 -- Procedure            : CREATE_MAPPING
401 -- Type                 : Public Procedure
402 -- Purpose              : This API will be used to create the mapping for the passed tasks.
403 --                      : This will be called from Create Mapping pages.
404 --                      : This will also be called from update_mapping api.
405 -- Note                 : Using the two task IDs as input, the mapping is created. First CHECK_CREATE_MAPPING_OK is called.
406 --                      : If task name is passed instead of task ID, task id is fetched from
407 --                      : the table using parent_structure_version_id and used.
408 --                      :
409 -- Assumptions          : The FP task will have only one version
410 
411 -- Parameters                   Type     Required        Description and Purpose
412 -- ---------------------------  ------   --------        --------------------------------------------------------
413 -- p_wp_task_name               VARCHAR2    NO             If WP task version id is null, then task name should be passed
414 -- p_wp_task_version_id         NUMBER      NO            The WP task id from which mapping has to be done
415 -- p_parent_str_version_id      NUMBER      NO             It is required to get the task id from task name.
416 -- p_fp_task_version_id         NUMBER      NO            FP task version id to which mapping wil be created
417 -- p_fp_task_name               VARCHAR2    NO             IF FP task id is not passed, task name will be required
418 -- p_project_id                 NUMBER      Yes            The project id will be used in case of getting task ids from task names
419 
420 PROCEDURE CREATE_MAPPING
421    (
422        p_api_version           IN   NUMBER := 1.0
423      , p_init_msg_list         IN   VARCHAR2 := FND_API.G_TRUE
424      , p_commit                IN   VARCHAR2 := FND_API.G_FALSE
425      , p_validate_only         IN   VARCHAR2 := FND_API.G_FALSE
426      , p_validation_level      IN   NUMBER   := FND_API.G_VALID_LEVEL_FULL
427      , p_calling_module        IN   VARCHAR2 := 'SELF_SERVICE'
428      , p_debug_mode            IN   VARCHAR2 := 'N'
429      , p_wp_task_name          IN   VARCHAR2 := FND_API.G_MISS_CHAR
430      , p_wp_task_version_id    IN   NUMBER   := FND_API.G_MISS_NUM
431      , p_parent_str_version_id IN   NUMBER   := FND_API.G_MISS_NUM
432      , p_fp_task_version_id    IN   NUMBER   := FND_API.G_MISS_NUM
433      , p_fp_task_name          IN   VARCHAR2 := FND_API.G_MISS_CHAR
434      , p_project_id            IN   NUMBER
435      , x_return_status         OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
439   IS
436      , x_msg_count             OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
437      , x_msg_data              OUT  NOCOPY VARCHAR2         --File.Sql.39 bug 4440895
438   )
440 
441 l_msg_count                     NUMBER := 0;
442 l_data                          VARCHAR2(2000);
443 l_msg_data                      VARCHAR2(2000);
444 l_msg_index_out                 NUMBER;
445 l_debug_mode                    VARCHAR2(1);
446 
447 l_wp_task_version_id            NUMBER ;
448 l_fp_task_version_id            NUMBER ;
449 l_create_mapping_ok             VARCHAR2(1);
450 l_error_message_code            VARCHAR2(32);
451 l_relationship_id               VARCHAR2(20);
452 
453 l_debug_level2                   CONSTANT NUMBER := 2;
454 l_debug_level3                   CONSTANT NUMBER := 3;
455 l_debug_level4                   CONSTANT NUMBER := 4;
456 l_debug_level5                   CONSTANT NUMBER := 5;
457 
458 /*Bug 8574986 BEGIN*/
459  l_msg_type   VARCHAR2(2);
460  l_fp_task_id number;
461  l_msg_token1 VARCHAR2(1000);
462   /*Bug 8574986 END*/
463 
464  --select the wp_task_version_id for the corresponding name
465 CURSOR c_get_wp_task_ver_id_frm_name ( l_task_name VARCHAR2, l_project_id NUMBER, l_parent_str_version_id NUMBER)
466 IS
467 SELECT
468  ppv.element_version_id
469 
470 FROM
471   pa_proj_element_versions ppv
472 , pa_proj_elements pae
473 WHERE  pae.name = l_task_name
474 AND    pae.project_id = l_project_id
475 AND    ppv.project_id = l_project_id
476 AND    ppv.proj_element_id = pae.proj_element_id
477 AND    ppv.parent_structure_version_id = l_parent_str_version_id
478 AND    pae.object_type = 'PA_TASKS'
479 AND    pae.project_id = ppv.project_id ;
480 
481 --select the fp_task_version_id for the corresponding name , it does not require parent str ver id
482 CURSOR c_get_fp_task_ver_id_frm_name ( l_task_name VARCHAR2, l_project_id NUMBER)
483 IS
484 SELECT
485   ppv.element_version_id
486 
487 FROM
488    pa_proj_element_versions   ppv
489  , pa_proj_elements           pae
490  , pa_proj_elem_ver_structure str_ver
491  , pa_proj_structure_types    str_type
492  , pa_structure_types
493 
494 WHERE  pae.name = l_task_name
495 AND    pae.project_id = l_project_id
496 AND    ppv.project_id = l_project_id
497 AND    ppv.proj_element_id = pae.proj_element_id
498 AND    ppv.parent_structure_version_id = str_ver.element_version_id
499 AND    pae.object_type = 'PA_TASKS'
500 AND    ppv.object_type = 'PA_TASKS'
501 AND    str_ver.project_id = l_project_id
502 AND    str_ver.proj_element_id = str_type.proj_element_id
503 AND    str_type.structure_type_id = pa_structure_types.structure_type_id
504 AND    pa_structure_types.structure_type = 'FINANCIAL'
505 AND    pae.project_id = ppv.project_id ;
506 
507 
508 BEGIN
509 
510      x_msg_count := 0;
511      x_return_status := FND_API.G_RET_STS_SUCCESS;
512      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
513 
514      IF l_debug_mode = 'Y' THEN
515           PA_DEBUG.set_curr_function( p_function   => 'CREATE_MAPPING',
516                                       p_debug_mode => l_debug_mode );
517      END IF;
518 
519      IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_TRUE)) THEN
520         FND_MSG_PUB.initialize;
521      END IF;
522 
523      IF (p_commit = FND_API.G_TRUE) THEN
524       savepoint CREATE_MAPPING_PUBLIC;
525      END IF;
526 
527      IF l_debug_mode = 'Y' THEN
528           Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : CREATE_MAPPING : Printing Input parameters';
529           Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
530                                      l_debug_level3);
531 
532           Pa_Debug.WRITE(g_module_name,'p_wp_task_name'||':'||p_wp_task_name,
533                                      l_debug_level3);
534 
535           Pa_Debug.WRITE(g_module_name,'p_wp_task_version_id'||':'||p_wp_task_version_id,
536                                      l_debug_level3);
537 
538           Pa_Debug.WRITE(g_module_name,'p_parent_str_version_id'||':'||p_parent_str_version_id,
539                                      l_debug_level3);
540 
541           Pa_Debug.WRITE(g_module_name,'p_fp_task_version_id'||':'||p_fp_task_version_id,
542                                      l_debug_level3);
543           Pa_Debug.WRITE(g_module_name,'p_fp_task_name'||':'||p_fp_task_name,
544                                      l_debug_level3);
545           Pa_Debug.WRITE(g_module_name,'p_project_id'||':'||p_project_id,
546                                      l_debug_level3);
547      END IF;
548 
549      IF l_debug_mode = 'Y' THEN
550           Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : CREATE_MAPPING : Validating Input parameters';
551           Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage, l_debug_level3);
552      END IF;
553 
554       --Check if project id is null , raise an error
555       IF (p_project_id is NULL)
556       THEN
557           IF l_debug_mode = 'Y' THEN
558                       Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : CREATE_MAPPING : project id can not be null';
559                       Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
560                                       l_debug_level3);
561           END IF;
562           RAISE Invalid_Arg_Exc_WP;
563       END IF;
564 
565 	  /*Bug 8574986 BEGIN*/
566 
567 	  select proj_element_id
568 	  into l_fp_task_id
569 	  from pa_proj_element_versions where element_version_id=p_fp_task_version_id;
573 									, X_msg_data=> l_msg_data
570 
571 PA_TRANSACTIONS_PUB.validate_task(X_project_id=> p_project_id
572 									, X_task_id=> l_fp_task_id
574 									, X_msg_type=> l_msg_type
575 									, X_msg_token1=>l_msg_token1
576 									, X_msg_count=> l_msg_count);
577 
578 
579               IF (l_msg_count>0 and l_msg_type='E') Then
580  PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
581                                     p_msg_name       => 'PA_CM_SUB_TASK_MAP',
582 						p_token1=>'PATC_MSG_TOKEN1',
583 						p_value1=>l_msg_token1);
584               RAISE FND_API.G_EXC_ERROR ;
585 
586 
587 		        End If;
588 /*Bug 8574986 END*/
589 
590       -- if wp task id and wp task name both are null , or
591       -- if fp task id and and fp task name both are null
592       -- raise error
593       IF (
594           (
595            ( p_wp_task_name is NULL OR p_wp_task_name = FND_API.G_MISS_CHAR ) AND
596            ( p_wp_task_version_id is NULL OR p_wp_task_version_id = FND_API.G_MISS_NUM )
597           ) OR
598           (
599            ( p_fp_task_name is NULL OR p_fp_task_name = FND_API.G_MISS_CHAR ) AND
600            ( p_fp_task_version_id is NULL OR p_fp_task_version_id = FND_API.G_MISS_NUM )
601           )
602          )
603       THEN
604            IF l_debug_mode = 'Y' THEN
605                  Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : CREATE_MAPPING : Both work plan task id and task name are null';
606                  Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
607                                  l_debug_level3);
608            END IF;
609            RAISE Invalid_Arg_Exc_WP;
610       END IF;
611 
612       -- Parent structure version id is essential to get task id using task name , so it should be validated
613       IF (
614            ( p_wp_task_version_id IS NULL OR p_wp_task_version_id = FND_API.G_MISS_NUM ) AND
615            (
616              ( p_wp_task_name IS NOT NULL AND p_wp_task_name <> FND_API.G_MISS_CHAR ) AND
617              ( p_parent_str_version_id IS NULL OR p_parent_str_version_id = FND_API.G_MISS_NUM )
618            )
619          )
620       THEN
621           IF l_debug_mode = 'Y' THEN
622                  Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : CREATE_MAPPING : parent structue version id can not be null, if wp task name is not null';
623                  Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
624                                  l_debug_level3);
625            END IF;
626            RAISE Invalid_Arg_Exc_WP;
627       END IF;
628 
629      -- If the task name is passed insteand of task id, we need to fetch the task id
630 
631      IF ( p_wp_task_version_id IS NOT NULL AND p_wp_task_version_id <> FND_API.G_MISS_NUM )
632      THEN
633           l_wp_task_version_id := p_wp_task_version_id;
634 
635      ELSIF
636      (  ( p_wp_task_name IS NOT NULL AND p_wp_task_name <> FND_API.G_MISS_CHAR )AND
637         ( p_parent_str_version_id IS NOT NULL AND p_parent_str_version_id <> FND_API.G_MISS_NUM )
638      )
639      THEN
640           --select the wp_task_version_id for the corresponding name and store it in l_wp_task_version_id
641 
642          OPEN  c_get_wp_task_ver_id_frm_name ( p_wp_task_name , p_project_id ,  p_parent_str_version_id );
643 
644          FETCH c_get_wp_task_ver_id_frm_name INTO l_wp_task_version_id ;
645          IF ( c_get_wp_task_ver_id_frm_name%NOTFOUND )
646          THEN
647               PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
648                                     p_msg_name       => 'PA_OBJECT_NAME_INV' );
649               RAISE FND_API.G_EXC_ERROR ;
650          END IF;
651          CLOSE c_get_wp_task_ver_id_frm_name ;
652 
653      END IF;
654 
655      IF ( ( p_fp_task_version_id IS NOT NULL AND p_fp_task_version_id <> FND_API.G_MISS_NUM )
656         )
657      THEN
658           l_fp_task_version_id := p_fp_task_version_id;
659 
660      ELSIF  (  p_fp_task_name IS NOT NULL AND p_fp_task_name <> FND_API.G_MISS_CHAR )
661      THEN
662           -- get the fp_task_version_id and place it in l_fp_task_version_id;
663           -- Assuming there will be only one version for the FP task.
664         Pa_Debug.WRITE('test',l_fp_task_version_id, l_debug_level3);
665          OPEN  c_get_fp_task_ver_id_frm_name ( p_fp_task_name , p_project_id  );
666          FETCH c_get_fp_task_ver_id_frm_name INTO l_fp_task_version_id ;
667          IF ( c_get_fp_task_ver_id_frm_name%NOTFOUND )
668          THEN
669               PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
670                                     p_msg_name       => 'PA_OBJECT_NAME_INV' );
671               RAISE FND_API.G_EXC_ERROR ;
672          END IF;
673          CLOSE c_get_fp_task_ver_id_frm_name ;
674 
675      END IF;
676 
677      IF l_debug_mode = 'Y' THEN
678             Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : CREATE_MAPPING : Calling PA_PROJ_STRUC_MAPPING_UTILS.CHECK_CREATE_MAPPING_OK ';
679             Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage, l_debug_level3);
680      END IF;
681 
682     -- Call util API to check whether the mapping can be created
683      PA_PROJ_STRUC_MAPPING_UTILS.CHECK_CREATE_MAPPING_OK
684      (  p_task_version_id_WP => l_wp_task_version_id
685       , p_task_version_id_FP => l_fp_task_version_id
686       , p_api_version        => p_api_version
687       , p_calling_module     => p_calling_module
688       , x_return_status      => l_create_mapping_ok
689       , x_msg_count          => x_msg_count
690       , x_msg_data           => x_msg_data
691       , x_error_message_code => l_error_message_code
692      );
693 
694      x_return_status := l_create_mapping_ok;
695 
699           -- Mapping can't be created
696      IF  l_create_mapping_ok <> FND_API.G_RET_STS_SUCCESS
697      THEN
698 
700           IF l_debug_mode = 'Y' THEN
701                  Pa_Debug.g_err_stage:= ' PA_PROJ_STRUC_MAPPING_PUB : CREATE_MAPPING : '|| l_error_message_code;
702                  Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
703                                       l_debug_level3);
704           END IF;
705           Pa_Utils.ADD_MESSAGE
706                 ( p_app_short_name => 'PA',
707                   p_msg_name     => l_error_message_code);
708           RAISE FND_API.G_EXC_ERROR;
709      ELSE
710         -- Mapping Can be created, call public API to create mapping
711            IF l_debug_mode = 'Y' THEN
712                Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : CREATE_MAPPING :  Calling create'||l_wp_task_version_id||l_fp_task_version_id;
713                Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
714                                     l_debug_level3);
715            END IF;
716 
717         --Call public API to create the mapping
718 
719            PA_RELATIONSHIP_PUB.CREATE_RELATIONSHIP
720            (
721               p_init_msg_list           => FND_API.G_FALSE
722             , p_commit                  => p_commit
723             , p_debug_mode              => l_debug_mode
724             , p_project_id_from         => p_project_id
725             , p_task_version_id_from    => l_wp_task_version_id
726             , p_project_id_to           => p_project_id
727             , p_task_version_id_to      => l_fp_task_version_id
728             , p_structure_type          => NULL
729             , p_relationship_type       => 'M'
730             , p_initiating_element      => NULL
731             , x_object_relationship_id  => l_relationship_id
732             , x_return_status           => x_return_status
733             , x_msg_count               => x_msg_count
734             , x_msg_data                => x_msg_data
735 
736           );
737      END IF;
738 IF ( x_return_status <> FND_API.G_RET_STS_SUCCESS ) THEN
739      RAISE FND_API.G_EXC_ERROR;
740 END IF;
741 IF (p_commit = FND_API.G_TRUE) THEN
742      COMMIT;
743 END IF;
744 
745 EXCEPTION
746 
747     WHEN FND_API.G_EXC_ERROR THEN
748 
749           x_return_status := Fnd_Api.G_RET_STS_ERROR;
750           l_msg_count := Fnd_Msg_Pub.count_msg;
751 
752           IF (p_commit = FND_API.G_TRUE) THEN
753                ROLLBACK TO CREATE_MAPPING_PUBLIC;
754           END IF;
755 
756           IF l_msg_count = 1 AND x_msg_data IS NULL
757            THEN
758                Pa_Interface_Utils_Pub.get_messages
759                    ( p_encoded        => Fnd_Api.G_TRUE
760                    , p_msg_index      => 1
761                    , p_msg_count      => l_msg_count
762                    , p_msg_data       => l_msg_data
763                    , p_data           => l_data
764                    , p_msg_index_out  => l_msg_index_out);
765                x_msg_data := l_data;
766                x_msg_count := l_msg_count;
767           ELSE
768                x_msg_count := l_msg_count;
769           END IF;
770           IF l_debug_mode = 'Y' THEN
771                Pa_Debug.reset_curr_function;
772           END IF;
773 
774     WHEN Invalid_Arg_Exc_WP THEN
775 
776           x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
777           x_msg_count     := 1;
778           x_msg_data      := 'PA_PROJ_STRUC_MAPPING_PUB : CREATE_MAPPING : NULL arguments are passed to the procedure';
779 
780            IF (p_commit = FND_API.G_TRUE) THEN
781                ROLLBACK TO CREATE_MAPPING_PUBLIC;
782            END IF;
783 
784           Fnd_Msg_Pub.add_exc_msg
785                         ( p_pkg_name        => 'PA_PROJ_STRUC_MAPPING_PUB'
786                          , p_procedure_name  => 'CREATE_MAPPING'
787                          , p_error_text      => x_msg_data);
788 
789           IF l_debug_mode = 'Y' THEN
790                Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
791                Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
792                                    l_debug_level5);
793                Pa_Debug.reset_curr_function;
794           END IF;
795           RAISE;
796 
797 
798     WHEN OTHERS THEN
799 
800           x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
801           x_msg_count     := 1;
802           x_msg_data      := SQLERRM;
803 
804            IF (p_commit = FND_API.G_TRUE) THEN
805                ROLLBACK TO CREATE_MAPPING_PUBLIC;
806           END IF;
807                Pa_Debug.g_err_stage:= 'x_msg_count='||x_msg_count;
808                Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage, l_debug_level5);
809 
810 
811           Fnd_Msg_Pub.add_exc_msg
812                         ( p_pkg_name        => 'PA_PROJ_STRUC_MAPPING_PUB'
813                          , p_procedure_name  => 'CREATE_MAPPING'
814                          , p_error_text      => x_msg_data);
815                Pa_Debug.g_err_stage:= 'x_msg_count='||x_msg_count;
816                Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage, l_debug_level5);
817 
818 
819           IF l_debug_mode = 'Y' THEN
820                Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
821                Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
822                                    l_debug_level5);
823                Pa_Debug.reset_curr_function;
824           END IF;
825           RAISE;
826 END CREATE_MAPPING ;
827 
828 
829 
830 -- Procedure            : UPDATE_MAPPING
834 --                      : 1.Map Workplan to Financial Task (HGRID - All Tasks)
831 -- Type                 : Public Procedure
832 -- Purpose              : This API will be used to update the mapping for existing tasks.
833 --                      : This API will be called from following pages:
835 --                      : 2.Map Workplan Tasks (Selected)
836 --                      : 3.Map Financial Tasks
837 --                      : 4.UPDATE TASK page
838 
839 -- Note                 : This API will update the mapping , In workplan context
840 --                      :  -- If no mapping is existing, it will create the mapping if the passed fp_task is valid.
841 --                      :
842 --                      :  -- If mapping exists, and fp task name is changed on the page, the mapping will deleted and new mapping
843 --                      :  -- with new fp task name will be created.
844 --                      :  In Financial context
845 --                      :  -- Similar to workplan
846 --                      : If called from self service, the object relationship id will be passed.
847 --                      : If this is null,new mapping will be created. If this is not null, exitsting mapping will be deleted.
848 --                      : The record version number will also be passed from self service application.
849 -- Assumptions          : From Financial context, many WP names will be passed and from Workplan context, only one Wp task ID or Task Name will be passed
850 
851 -- Parameters                   Type     Required        Description and Purpose
852 -- ---------------------------  ------   --------        --------------------------------------------------------
853 --  p_structure_type            VARCHAR2  Yes            The value will contain the context for which the Update is happening. Its value will be FINANCIAL or WORKPLAN.
854 --  p_project_id                NUMBER    Yes            The project id will be used in case of getting task ids from task names
855 --  p_wp_task_name              VARCHAR2  NO             If WP task version id is null, then task name should be passed. Incase of financial context this will be multiple names
856 --  p_wp_prnt_str_ver_id        NUMBER    NO             It is required to get the task id from task name.
857 --  p_wp_task_version_id        NUMBER    Yes            The WP task id from which mapping has to be updated
858 --  p_fp_task_name              VARCHAR2  NO             IF FP task id is not passed, task name will be required
859 --  p_fp_task_version_id        NUMBER    Yes            FP task id in mapping which needs to b updated
860 --  p_object_relationship_id    NUMBER    NO             The Object relationship Id of the existing mapping
861 
862 PROCEDURE UPDATE_MAPPING
863    (
864        p_api_version               IN   NUMBER   := 1.0
865      , p_init_msg_list             IN   VARCHAR2 := FND_API.G_TRUE
866      , p_commit                    IN   VARCHAR2 := FND_API.G_FALSE
867      , p_validate_only             IN   VARCHAR2 := FND_API.G_FALSE
868      , p_validation_level          IN   NUMBER   := FND_API.G_VALID_LEVEL_FULL
869      , p_calling_module            IN   VARCHAR2 := 'SELF_SERVICE'
870      , p_debug_mode                IN   VARCHAR2 := 'N'
871      , p_record_version_number     IN   NUMBER   := FND_API.G_MISS_NUM
872      , p_structure_type            IN   VARCHAR2 := 'WORKPLAN'
873      , p_project_id                IN   NUMBER
874      , p_wp_task_name              IN   VARCHAR2 := FND_API.G_MISS_CHAR
875      , p_wp_prnt_str_ver_id        IN   NUMBER   := FND_API.G_MISS_NUM
876      , p_wp_task_version_id        IN   NUMBER   := FND_API.G_MISS_NUM
877      , p_fp_task_name              IN   VARCHAR2 := FND_API.G_MISS_CHAR
878      , p_fp_task_version_id        IN   NUMBER   := FND_API.G_MISS_NUM
879      , p_object_relationship_id    IN   NUMBER   := FND_API.G_MISS_NUM
880      , x_return_status             OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
881      , x_msg_count                 OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
882      , x_msg_data                  OUT  NOCOPY VARCHAR2         --File.Sql.39 bug 4440895
883   )
884 IS
885 l_msg_count                     NUMBER := 0;
886 l_data                          VARCHAR2(2000);
887 l_msg_data                      VARCHAR2(2000);
888 l_msg_index_out                 NUMBER;
889 l_debug_mode                    VARCHAR2(1);
890 l_wp_task_version_id            NUMBER ;
891 l_fp_task_version_id            NUMBER ;
892 l_notfound                      BOOLEAN;
893 l_wp_task_version_id_tbl        PA_PROJ_STRUC_MAPPING_PUB.OBJECT_VERSION_ID_TABLE_TYPE;
894 l_map_wp_task_ver_id_tbl        PA_PROJ_STRUC_MAPPING_PUB.OBJECT_VERSION_ID_TABLE_TYPE;
895 l_wp_task_name_table            PA_PROJ_STRUC_MAPPING_PUB.OBJECT_NAME_TABLE_TYPE ;
896 l_parse_return_message          VARCHAR2(30);
897 l_proj_element_version_id       NUMBER;
898 l_object_relationship_id        NUMBER;
899 l_rec_version_num               NUMBER;
900 
901 l_debug_level2                   CONSTANT NUMBER := 2;
902 l_debug_level3                   CONSTANT NUMBER := 3;
903 l_debug_level4                   CONSTANT NUMBER := 4;
904 l_debug_level5                   CONSTANT NUMBER := 5;
905 
906 
907 -- This cursor selects the task version id given task name , project_id and parent str ver id
908 -- This same cursor can be used for WP tasks
909 CURSOR c_get_wp_task_ver_id_frm_name (l_wp_task_name VARCHAR2 , l_projectid NUMBER ,l_prnt_str_ver_id NUMBER )
910 IS
911 SELECT ppv.element_version_id
912 FROM   pa_proj_element_versions ppv, pa_proj_elements pae
913 WHERE  pae.name = l_wp_task_name
914 AND    pae.project_id = l_projectid
915 AND    ppv.proj_element_id = pae.proj_element_id
916 AND    ppv.parent_structure_version_id = l_prnt_str_ver_id
917 AND    pae.object_type = 'PA_TASKS'
918 AND    pae.project_id = ppv.project_id;
919 
920 
921 -- Select the object relationship id corresponding to existing mapping
922 CURSOR cur_get_object_relationship_id (l_wp_task_version_id NUMBER )
923 IS
927 AND relationship_type = 'M';
924 SELECT object_relationship_id , record_version_number
925 FROM pa_object_relationships
926 WHERE object_id_from1 = l_wp_task_version_id
928 
929 
930 --select the fp_task_version_id for the corresponding name , it does not require parent str ver id
931 CURSOR c_get_fp_task_ver_id_frm_name ( l_task_name VARCHAR2, l_project_id NUMBER)
932 IS
933 SELECT
934   ppv.element_version_id
935 FROM
936    pa_proj_element_versions   ppv
937  , pa_proj_elements           pae
938  , pa_proj_elem_ver_structure str_ver
939  , pa_proj_structure_types    str_type
940  , pa_structure_types
941 WHERE  pae.name = l_task_name
942 AND    pae.project_id = l_project_id
943 AND    ppv.project_id = l_project_id
944 AND    ppv.proj_element_id = pae.proj_element_id
945 AND    ppv.parent_structure_version_id = str_ver.element_version_id
946 AND    pae.object_type = 'PA_TASKS'
947 AND    ppv.object_type = 'PA_TASKS'
948 AND    str_ver.project_id = l_project_id
949 AND    str_ver.proj_element_id = str_type.proj_element_id
950 AND    str_type.structure_type_id = pa_structure_types.structure_type_id
951 AND    pa_structure_types.structure_type = 'FINANCIAL'
952 AND    ppv.project_id = pae.project_id;
953 
954 BEGIN
955 
956      x_msg_count := 0;
957      x_return_status := FND_API.G_RET_STS_SUCCESS;
958      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
959 
960 
961      IF l_debug_mode = 'Y' THEN
962           PA_DEBUG.set_curr_function( p_function   => 'UPDATE_MAPPING',
963                                       p_debug_mode => l_debug_mode );
964      END IF;
965 
966      IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_TRUE)) THEN
967         FND_MSG_PUB.initialize;
968      END IF;
969 
970      IF ( p_commit = FND_API.G_TRUE ) THEN
971         savepoint UPDATE_MAPPING_PUBLIC;
972      END IF;
973 
974      IF l_debug_mode = 'Y' THEN
975           Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : UPDATE_MAPPING : Printing Input parameters';
976           Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
977                                      l_debug_level3);
978 
979           Pa_Debug.WRITE(g_module_name,'p_structure_type'||':'||p_structure_type,
980                                      l_debug_level3);
981 
982           Pa_Debug.WRITE(g_module_name,'p_project_id'||':'||p_project_id,
983                                      l_debug_level3);
984 
985           Pa_Debug.WRITE(g_module_name,'p_wp_task_name'||':'||p_wp_task_name,
986                                      l_debug_level3);
987 
988           Pa_Debug.WRITE(g_module_name,'p_wp_prnt_str_ver_id'||':'||p_wp_prnt_str_ver_id,
989                                      l_debug_level3);
990           Pa_Debug.WRITE(g_module_name,'p_wp_task_version_id'||':'||p_wp_task_version_id,
991                                      l_debug_level3);
992           Pa_Debug.WRITE(g_module_name,'p_fp_task_name'||':'||p_fp_task_name,
993                                      l_debug_level3);
994 
995           Pa_Debug.WRITE(g_module_name,'p_fp_task_version_id'||':'||p_fp_task_version_id,
996                                      l_debug_level3);
997      END IF;
998 
999      IF l_debug_mode = 'Y' THEN
1000           Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : UPDATE_MAPPING : Validating Input parameters';
1001           Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
1002                                      l_debug_level3);
1003      END IF;
1004 
1005      -- if PROJECT id IS NULL RAISE ERROR MESSAGE
1006      IF (p_project_id is NULL)
1007      THEN
1008           IF l_debug_mode = 'Y' THEN
1009                       Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : UPDATE_MAPPING : project id can not be null';
1010                       Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
1011                                       l_debug_level3);
1012           END IF;
1013           RAISE Invalid_Arg_Exc_WP;
1014      END IF;
1015 
1016       -- if wp task id and wp task name both are null , or
1017       -- if fp task id and and fp task name both are null
1018       -- raise error
1019       IF (
1020           (
1021            ( p_wp_task_name is NULL OR p_wp_task_name = FND_API.G_MISS_CHAR ) AND
1022            ( p_wp_task_version_id is NULL OR p_wp_task_version_id = FND_API.G_MISS_NUM )
1023           ) AND
1024           (
1025            ( p_fp_task_name is NULL OR p_fp_task_name = FND_API.G_MISS_CHAR ) AND
1026            ( p_fp_task_version_id is NULL OR p_fp_task_version_id = FND_API.G_MISS_NUM )
1027           )
1028          )
1029       THEN
1030            IF l_debug_mode = 'Y' THEN
1031                  Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : UPDATE_MAPPING : Both of tasks id and tasks name are null';
1032                  Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
1033                                  l_debug_level3);
1034            END IF;
1035            RAISE Invalid_Arg_Exc_WP;
1036       END IF;
1037 
1038      -- Parent structure version id is essential to get task id using task name , so it should be validated
1039       IF (
1040            ( p_wp_task_version_id IS NULL OR p_wp_task_version_id = FND_API.G_MISS_NUM ) AND
1041            (
1042              ( p_wp_task_name IS NOT NULL AND p_wp_task_name <> FND_API.G_MISS_NUM ) AND
1043              ( p_wp_prnt_str_ver_id IS NULL OR p_wp_prnt_str_ver_id = FND_API.G_MISS_NUM )
1044            )
1045          )
1046       THEN
1047           IF l_debug_mode = 'Y' THEN
1048                  Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : UPDATE_MAPPING : parent structue version id can not be null, if wp task name is not null';
1052            RAISE Invalid_Arg_Exc_WP;
1049                  Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
1050                                  l_debug_level3);
1051            END IF;
1053       END IF;
1054 
1055      IF  ( p_wp_task_version_id IS NOT NULL AND p_wp_task_version_id <> FND_API.G_MISS_NUM  )
1056      THEN
1057           l_wp_task_version_id := p_wp_task_version_id;
1058      ELSIF (
1059              ( p_wp_task_name IS NOT NULL AND p_wp_task_name <> FND_API.G_MISS_CHAR ) AND
1060              ( p_wp_prnt_str_ver_id IS NOT NULL AND p_wp_prnt_str_ver_id <> FND_API.G_MISS_NUM )
1061            )
1062      THEN
1063           --get the wp_task_version_id and place it in l_wp_task_version_id;
1064           OPEN  c_get_wp_task_ver_id_frm_name ( p_wp_task_name , p_project_id , p_wp_prnt_str_ver_id );
1065           FETCH c_get_wp_task_ver_id_frm_name INTO  l_wp_task_version_id;
1066           IF (c_get_wp_task_ver_id_frm_name%NOTFOUND)
1067           THEN
1068                PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
1069                                      p_msg_name       => 'PA_OBJECT_NAME_INV' );
1070                RAISE FND_API.G_EXC_ERROR ;
1071           END IF;
1072           CLOSE c_get_wp_task_ver_id_frm_name;
1073 
1074      END IF;
1075      IF ( p_fp_task_version_id IS NOT NULL AND p_fp_task_version_id <> FND_API.G_MISS_NUM )
1076      THEN
1077           l_fp_task_version_id := p_fp_task_version_id;
1078 
1079      ELSIF (  p_fp_task_name IS NOT NULL AND p_fp_task_name <> FND_API.G_MISS_CHAR
1080            )
1081      THEN
1082           -- get the fp_task_version_id and place it in l_fp_task_version_id;
1083           -- Assuming there will be only one version for the FP task.Parent structure version id is passed
1084           -- in view that in future there wil be versions for financial tasks also
1085           OPEN  c_get_fp_task_ver_id_frm_name ( p_fp_task_name, p_project_id  );
1086           FETCH c_get_fp_task_ver_id_frm_name INTO l_fp_task_version_id;
1087           IF (c_get_fp_task_ver_id_frm_name%NOTFOUND)
1088           THEN
1089                PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
1090                                      p_msg_name       => 'PA_OBJECT_NAME_INV' );
1091                RAISE FND_API.G_EXC_ERROR ;
1092           END IF;
1093           CLOSE c_get_fp_task_ver_id_frm_name;
1094      END IF;
1095 
1096      IF ( ( p_object_relationship_id IS NULL OR p_object_relationship_id = FND_API.G_MISS_NUM )
1097           AND
1098             p_calling_module <> 'SELF_SERVICE'
1099         )
1100      THEN
1101           OPEN  cur_get_object_relationship_id (l_wp_task_version_id);
1102           FETCH cur_get_object_relationship_id INTO l_object_relationship_id , l_rec_version_num;
1103           CLOSE cur_get_object_relationship_id;
1104      ELSE
1105           l_object_relationship_id := p_object_relationship_id;
1106           l_rec_version_num := p_record_version_number;
1107      END IF;
1108 
1109      --If l_object_relationship_id is not null
1110      IF ( l_object_relationship_id IS NOT NULL AND l_object_relationship_id <> FND_API.G_MISS_NUM  )
1111      THEN
1112           --delete the existing mapping
1113           PA_RELATIONSHIP_PUB.DELETE_RELATIONSHIP
1114            (
1115               p_api_version             => p_api_version
1116             , p_init_msg_list           => FND_API.G_FALSE
1117             , p_commit                  => p_commit
1118             , p_validate_only           => p_validate_only
1119             , p_calling_module          => 'SELF_SERVICE'
1120             , p_debug_mode              => l_debug_mode
1121             , p_object_relationship_id  => l_object_relationship_id
1122             , p_record_version_number   => l_rec_version_num
1123             , x_return_status           => x_return_status
1124             , x_msg_count               => x_msg_count
1125             , x_msg_data                => x_msg_data
1126            );
1127           IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)
1128           THEN
1129                RAISE FND_API.G_EXC_ERROR;
1130           END IF;
1131      END IF;
1132 
1133      --IF l_fp_task_ver_id is not null
1134      IF (
1135           (l_fp_task_version_id IS NOT NULL AND l_fp_task_version_id <> FND_API.G_MISS_NUM ) AND
1136           (l_wp_task_version_id IS NOT NULL AND l_wp_task_version_id <> FND_API.G_MISS_NUM )
1137         )
1138      THEN
1139      --create new mapping with l_wp_task_ver_id and l_fp_task_ver_id
1140          -- Call CREATE_MAPPING
1141           PA_PROJ_STRUC_MAPPING_PUB.CREATE_MAPPING(
1142             p_wp_task_version_id    => l_wp_task_version_id
1143           , p_fp_task_version_id    => l_fp_task_version_id
1144           , p_project_id            => p_project_id
1145           , p_init_msg_list         => FND_API.G_FALSE
1146           , p_commit                => p_commit
1147           , p_debug_mode            => l_debug_mode
1148           , x_return_status         => x_return_status
1149           , x_msg_count             => x_msg_count
1150           , x_msg_data              => x_msg_data
1151           );
1152           IF ( x_return_status <> FND_API.G_RET_STS_SUCCESS )
1153           THEN
1154               RAISE FND_API.G_EXC_ERROR;
1155           END IF;
1156      END IF;
1157 
1158  IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)
1159  THEN
1160      RAISE FND_API.G_EXC_ERROR;
1161  END IF;
1162 
1163  IF ( p_commit = FND_API.G_TRUE ) THEN
1164      COMMIT;
1165  END IF;
1166 
1167   -- Bug 10053423
1168     IF l_debug_mode = 'Y' THEN
1169         pa_debug.reset_curr_function;
1170         pa_debug.write(g_module_name, 'UPDATE_MAPPING: Exiting succesfully',5);
1171     END IF;
1172 
1173  EXCEPTION
1174 
1175     WHEN FND_API.G_EXC_ERROR THEN
1179 
1176 
1177           x_return_status := Fnd_Api.G_RET_STS_ERROR;
1178           l_msg_count := Fnd_Msg_Pub.count_msg;
1180           IF ( p_commit = FND_API.G_TRUE ) THEN
1181                ROLLBACK TO UPDATE_MAPPING_PUBLIC;
1182           END IF;
1183 
1184           IF cur_get_object_relationship_id%ISOPEN THEN
1185                CLOSE cur_get_object_relationship_id;
1186           END IF;
1187 
1188           IF c_get_fp_task_ver_id_frm_name%ISOPEN THEN
1189                CLOSE c_get_fp_task_ver_id_frm_name;
1190           END IF;
1191 
1192           IF c_get_wp_task_ver_id_frm_name%ISOPEN THEN
1193                CLOSE c_get_wp_task_ver_id_frm_name;
1194           END IF;
1195 
1196           IF l_msg_count = 1 AND x_msg_data IS NULL
1197            THEN
1198                Pa_Interface_Utils_Pub.get_messages
1199                    ( p_encoded        => Fnd_Api.G_TRUE
1200                    , p_msg_index      => 1
1201                    , p_msg_count      => l_msg_count
1202                    , p_msg_data       => l_msg_data
1203                    , p_data           => l_data
1204                    , p_msg_index_out  => l_msg_index_out);
1205                x_msg_data := l_data;
1206                x_msg_count := l_msg_count;
1207           ELSE
1208                x_msg_count := l_msg_count;
1209           END IF;
1210           IF l_debug_mode = 'Y' THEN
1211                Pa_Debug.reset_curr_function;
1212           END IF;
1213 
1214  WHEN Invalid_Arg_Exc_WP THEN
1215 
1216           x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
1217           x_msg_count     := Fnd_Msg_Pub.count_msg;
1218           x_msg_data      := 'PA_PROJ_STRUC_MAPPING_PUB : UPDATE_MAPPING : Some parameters are NULL';
1219 
1220           IF ( p_commit = FND_API.G_TRUE ) THEN
1221                ROLLBACK TO UPDATE_MAPPING_PUBLIC;
1222           END IF;
1223 
1224           IF cur_get_object_relationship_id%ISOPEN THEN
1225                CLOSE cur_get_object_relationship_id;
1226           END IF;
1227 
1228           IF c_get_wp_task_ver_id_frm_name%ISOPEN THEN
1229                CLOSE c_get_wp_task_ver_id_frm_name;
1230           END IF;
1231 
1232           IF c_get_fp_task_ver_id_frm_name%ISOPEN THEN
1233                CLOSE c_get_fp_task_ver_id_frm_name;
1234           END IF;
1235 
1236           Fnd_Msg_Pub.add_exc_msg
1237                         ( p_pkg_name        => 'PA_PROJ_STRUC_MAPPING_PUB'
1238                          , p_procedure_name  => 'UPDATE_MAPPING'
1239                          , p_error_text      => x_msg_data);
1240 
1241           IF l_debug_mode = 'Y' THEN
1242                Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
1243                Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
1244                                    l_debug_level5);
1245                Pa_Debug.reset_curr_function;
1246           END IF;
1247 
1248 
1249  WHEN OTHERS THEN
1250 
1251           x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
1252           x_msg_count     := 1;
1253           x_msg_data      := SQLERRM;
1254 
1255           IF ( p_commit = FND_API.G_TRUE ) THEN
1256                ROLLBACK TO UPDATE_MAPPING_PUBLIC;
1257           END IF;
1258 
1259           IF cur_get_object_relationship_id%ISOPEN THEN
1260                CLOSE cur_get_object_relationship_id;
1261           END IF;
1262 
1263           IF c_get_fp_task_ver_id_frm_name%ISOPEN THEN
1264                CLOSE c_get_fp_task_ver_id_frm_name;
1265           END IF;
1266 
1267           IF c_get_wp_task_ver_id_frm_name%ISOPEN THEN
1268                CLOSE c_get_wp_task_ver_id_frm_name;
1269           END IF;
1270 
1271           Fnd_Msg_Pub.add_exc_msg
1272            (  p_pkg_name        => 'PA_PROJ_STRUC_MAPPING_PUB'
1273             , p_procedure_name  => 'UPDATE_MAPPING'
1274             , p_error_text      => x_msg_data);
1275 
1276           IF l_debug_mode = 'Y' THEN
1277                Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
1278                Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
1279                                    l_debug_level5);
1280                Pa_Debug.reset_curr_function;
1281           END IF;
1282 
1283 END UPDATE_MAPPING ;
1284 
1285 
1286 -- Procedure            : COPY_MAPPING
1287 -- Type                 : Public Procedure
1288 -- Purpose              : This API copies the mappings from source structure tasks to destinations structure tasks
1289 --                      : This will be called from copy_project, create working version, publish version api.
1290 --                      :
1291 -- Note                 : The API's function will depend on the P_CONTEXT.
1292 --                      : 1. P_CONTEXT is COPY_PROJECT: The structure version IDs passed will be ignored in this case and they will taken from the database.
1293 --                      :    Mapping will be created depending as in existing src stuructures
1294 --                      : 2. P_CONTEXT is (create or publish): In this context, the structure version ids will be passed and src project id will be ignored
1295 --                      :
1296 -- Assumptions          : This will be called after the copy project has been called ,
1297 --                      : so that the element version ids of the destination projects are available.
1298 --                      : Only for split structure
1299 
1300 -- Parameters                   Type     Required        Description and Purpose
1301 -- ---------------------------  ------   --------        --------------------------------------------------------
1305 -- p_src_str_version_id           IN     NUMBER          The structure version id from source project
1302 -- p_context                      IN     VARCHAR2        This will tell whether the context is copy_project or other
1303 -- p_src_project_id               IN     NUMBER          The project id which is being copied
1304 -- p_dest_project_id              IN     NUMBER          The project id to which it is being copied
1306 -- p_dest_str_version_id          IN     NUMBER          The structure version id from source at the destinantion project
1307 
1308 PROCEDURE COPY_MAPPING
1309     (
1310        p_api_version           IN   NUMBER := 1.0
1311      , p_init_msg_list         IN   VARCHAR2 := FND_API.G_TRUE
1312      , p_commit                IN   VARCHAR2 := FND_API.G_FALSE
1313      , p_validate_only         IN   VARCHAR2 := FND_API.G_FALSE
1314      , p_validation_level      IN   NUMBER   := FND_API.G_VALID_LEVEL_FULL
1315      , p_calling_module        IN   VARCHAR2 := 'SELF_SERVICE'
1316      , p_debug_mode            IN   VARCHAR2 := 'N'
1317      , p_record_version_number IN   NUMBER   := FND_API.G_MISS_NUM
1318      , p_context               IN   VARCHAR2
1319      , p_src_project_id        IN   NUMBER   := FND_API.G_MISS_NUM
1320      , p_dest_project_id       IN   NUMBER   := FND_API.G_MISS_NUM
1321      , p_src_str_version_id    IN   NUMBER   := FND_API.G_MISS_NUM
1322      , p_dest_str_version_id   IN   NUMBER   := FND_API.G_MISS_NUM
1323      , x_return_status     OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1324      , x_msg_count         OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
1325      , x_msg_data          OUT   NOCOPY VARCHAR2         --File.Sql.39 bug 4440895
1326 
1327    )
1328 IS
1329 
1330 l_msg_count                     NUMBER := 0;
1331 l_data                          VARCHAR2(2000);
1332 l_msg_data                      VARCHAR2(2000);
1333 l_msg_index_out                 NUMBER;
1334 l_debug_mode                    VARCHAR2(1);
1335 l_user_id                       NUMBER;
1336 l_debug_level2                   CONSTANT NUMBER := 2;
1337 l_debug_level3                   CONSTANT NUMBER := 3;
1338 l_debug_level4                   CONSTANT NUMBER := 4;
1339 l_debug_level5                   CONSTANT NUMBER := 5;
1340 
1341 
1342 
1343 -- This cursor will select the element_version_id , source structure version id and structure type for the passed
1344 -- project id.
1345 CURSOR c_get_dest_structures ( l_dest_project_id NUMBER )
1346 IS
1347 SELECT
1348  -- pelever.element_version_id AS structure_version Commented for Bug14197220
1349 DISTINCT pelever.attribute15 AS src_str_version_id
1350 --, pstrType.structure_type AS structure_type Commented for Bug 14197220 As these column not at all used
1351 FROM
1352   pa_proj_element_versions pelever,
1353   pa_proj_structure_types prjstrType,
1354   pa_structure_types pstrType
1355 WHERE
1356   pelever.object_type = 'PA_STRUCTURES'
1357 AND
1358   pelever.project_id = l_dest_project_id
1359 AND
1360   prjstrType.proj_element_id  = pelever.proj_element_id
1361 AND
1362   pstrType.structure_type_id = prjstrType.structure_type_id
1363 AND
1364   pstrType.structure_type =  'WORKPLAN'
1365 AND
1366   pstrType.structure_type_class_code = 'WORKPLAN';
1367 
1368 
1369 --This cursor will select all the tasks which are mapped for a particular structure which needs to be passed.
1370 CURSOR c_get_mapped_tasks (l_parent_str_version_id NUMBER, l_project_id NUMBER)
1371 IS
1372 SELECT
1373       paObrel.OBJECT_ID_FROM1 as OBJECT_ID_FROM1
1374     , paObrel.OBJECT_ID_TO1 as OBJECT_ID_TO1
1375 FROM
1376       pa_proj_element_versions elever
1377     , pa_object_relationships  paObrel
1378 WHERE elever.PARENT_STRUCTURE_VERSION_ID = l_parent_str_version_id
1379 AND   paObrel.OBJECT_ID_FROM1 = elever.element_version_id
1380 AND   elever.project_id = l_project_id
1381 AND   paObrel.RELATIONSHIP_TYPE = 'M'
1382 AND   elever.object_type = 'PA_TASKS';
1383 
1384 -- This cursor will get the task version id from pa_proj_element_versions , where src task version id is passed
1385 CURSOR c_get_mapped_task_version ( l_src_task_version_id  NUMBER, l_project_id NUMBER )
1386 IS
1387 SELECT ELEMENT_VERSION_ID
1388 FROM   PA_PROJ_ELEMENT_VERSIONS ELEVER
1389 WHERE  ELEVER.ATTRIBUTE15 = l_src_task_version_id
1390 AND    ELEVER.OBJECT_TYPE = 'PA_TASKS'
1391 AND    ELEVER.PROJECT_ID = l_project_id;
1392 
1393 CURSOR c_get_mapped_task_id ( l_task_ver_id  NUMBER , l_str_version_id NUMBER, l_project_id NUMBER  )
1394 IS
1395 SELECT proj_element_id
1396 FROM   pa_proj_element_versions
1397 WHERE  OBJECT_TYPE = 'PA_TASKS'
1398 AND    element_version_id = l_task_ver_id
1399 AND    parent_structure_version_id = l_str_version_id
1400 AND    pa_proj_element_versions.project_id = l_project_id;
1401 
1402 CURSOR c_get_mapped_task_ver_id ( l_task_id  NUMBER , l_str_version_id NUMBER, l_project_id NUMBER  )
1403 IS
1404 SELECT element_version_id
1405 FROM   pa_proj_element_versions
1406 WHERE  OBJECT_TYPE = 'PA_TASKS'
1407 AND    parent_structure_version_id = l_str_version_id
1408 AND    proj_element_id = l_task_id
1409 AND    pa_proj_element_versions.project_id = l_project_id;
1410 
1411 l_src_from_tasks_id_tbl PA_PROJ_STRUC_MAPPING_PUB.OBJECT_VERSION_ID_TABLE_TYPE;
1412 l_src_to_tasks_id_tbl PA_PROJ_STRUC_MAPPING_PUB.OBJECT_VERSION_ID_TABLE_TYPE;
1413 
1414 l_dest_from_tasks_id_tbl PA_PROJ_STRUC_MAPPING_PUB.OBJECT_VERSION_ID_TABLE_TYPE;
1415 l_dest_to_tasks_id_tbl PA_PROJ_STRUC_MAPPING_PUB.OBJECT_VERSION_ID_TABLE_TYPE;
1416 
1417 l_from_task_id_tbl PA_PROJ_STRUC_MAPPING_PUB.OBJECT_ID_TABLE_TYPE;
1418 l_to_task_id_tbl PA_PROJ_STRUC_MAPPING_PUB.OBJECT_ID_TABLE_TYPE;
1419 
1420 l_from_dest_task_ver_id PA_PROJ_STRUC_MAPPING_PUB.OBJECT_VERSION_ID_TABLE_TYPE;
1424 
1421 l_to_dest_task_ver_id PA_PROJ_STRUC_MAPPING_PUB.OBJECT_VERSION_ID_TABLE_TYPE;
1422 
1423 BEGIN
1425 
1426      x_msg_count := 0;
1427      l_user_id := FND_GLOBAL.USER_ID;
1428      x_return_status := FND_API.G_RET_STS_SUCCESS;
1429      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
1430 
1431 
1432      IF l_debug_mode = 'Y' THEN
1433           PA_DEBUG.set_curr_function( p_function   => 'COPY_MAPPING',
1434                                       p_debug_mode => l_debug_mode );
1438           Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : COPY_MAPPING : Printing Input parameters';
1435      END IF;
1436 
1437      IF l_debug_mode = 'Y' THEN
1439           Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
1440                                      l_debug_level3);
1441           Pa_Debug.WRITE(g_module_name,'p_context'||p_context,l_debug_level3);
1442           Pa_Debug.WRITE(g_module_name,'p_src_project_id'||p_src_project_id,l_debug_level3);
1443           Pa_Debug.WRITE(g_module_name,'p_dest_project_id'||p_dest_project_id,l_debug_level3);
1444           Pa_Debug.WRITE(g_module_name,'p_src_str_version_id'||p_src_str_version_id,l_debug_level3);
1445           Pa_Debug.WRITE(g_module_name,'p_dest_str_version_id'||p_dest_str_version_id,l_debug_level3);
1446      END IF;
1447 
1448      IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_TRUE)) THEN
1449       FND_MSG_PUB.initialize;
1450      END IF;
1451 
1452      IF l_debug_mode = 'Y' THEN
1453           Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : COPY_MAPPING : Validating Input parameters';
1454           Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
1455                                      l_debug_level3);
1456      END IF;
1457 
1458      IF ( p_context IS NULL ) THEN
1459           Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : COPY_MAPPING : p_context is mandatory and cant be null';
1460           Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
1461                                        l_debug_level3);
1462 
1463           RAISE Invalid_Arg_Exc_WP;
1464      END IF;
1465 
1466           --If context is copy_project, src and destination project id must be passed and they should not be same
1467      IF (  p_context ='COPY_PROJECT' ) THEN
1468          IF
1469            (
1470                 ( p_src_project_id IS NULL OR p_src_project_id = FND_API.G_MISS_NUM )
1471              OR ( p_dest_project_id IS NULL OR p_dest_project_id = FND_API.G_MISS_NUM )
1472              OR ( p_src_project_id = p_dest_project_id )
1473            )
1474           THEN
1475           Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : COPY_MAPPING : if p_context is Copy Project , both src and destination project id will be required';
1476           Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
1477                                        l_debug_level3);
1478 
1479           RAISE Invalid_Arg_Exc_WP;
1480 
1481           ELSE
1482            -- Code for copy-project context
1483                --get the destination structures
1484                --This for loop gets all the workplan structures in the destination project id.
1485                --For each workplan structure , find the mapped task version id in source project
1486                --and corresponding task version id in destination project
1487                FOR str_rec IN c_get_dest_structures (p_dest_project_id) LOOP
1488 
1489                     --IF str_rec.structure_type = 'WORKPLAN' THEN
1490 
1491                          --For each workplan structure , find the mapped task version id in source project
1492                          --delete all elements from the table before using it;
1493                          l_src_to_tasks_id_tbl.DELETE;
1494                          l_src_from_tasks_id_tbl.DELETE;
1495                          OPEN  c_get_mapped_tasks ( str_rec.src_str_version_id , p_src_project_id );
1496                          FETCH c_get_mapped_tasks BULK COLLECT
1497                          INTO  l_src_from_tasks_id_tbl , l_src_to_tasks_id_tbl;
1498                          CLOSE c_get_mapped_tasks ;
1499 
1500                          --For each task version id in source, get the corresponding one in destination project
1501                          l_dest_from_tasks_id_tbl.DELETE;
1502                          FOR iCounter in 1..l_src_from_tasks_id_tbl.COUNT LOOP
1503 
1504                               OPEN  c_get_mapped_task_version ( l_src_from_tasks_id_tbl ( iCounter ) , p_dest_project_id ) ;
1505                               FETCH c_get_mapped_task_version INTO l_dest_from_tasks_id_tbl ( iCounter ) ;
1506                               CLOSE c_get_mapped_task_version ;
1507 
1508                          END LOOP;
1509                          --For each task version id in source, get the corresponding one in destination project
1510                          l_dest_to_tasks_id_tbl.DELETE;
1514                               FETCH c_get_mapped_task_version INTO l_dest_to_tasks_id_tbl ( iCounter ) ;
1511                          FOR iCounter in 1..l_src_to_tasks_id_tbl.COUNT LOOP
1512 
1513                               OPEN  c_get_mapped_task_version ( l_src_to_tasks_id_tbl ( iCounter ) , p_dest_project_id ) ;
1515                               CLOSE c_get_mapped_task_version ;
1516 
1517                          END LOOP;
1518 
1519 
1520                       -- Create Mapping from the dest task ids using BULK INSERT
1521 		      --added if condition bug.3578265,3574885
1522                --rtarway bug 3916440, the forall should be called only when l_src_to_tasks_id_tbl is not empty
1523 			IF (l_dest_from_tasks_id_tbl.count > 0 AND l_dest_to_tasks_id_tbl.COUNT > 0)
1524 			THEN
1525                           FORALL iCounter IN l_dest_from_tasks_id_tbl.FIRST..l_dest_from_tasks_id_tbl.LAST
1526 
1527                           INSERT INTO PA_OBJECT_RELATIONSHIPS
1528                                  (
1529                                        object_relationship_id,
1530                                        object_type_from,
1531                                        object_id_from1,
1532                                        object_id_from2,
1533                                        object_id_from3,
1534                                        object_id_from4,
1535                                        object_id_from5,
1536                                        object_type_to,
1537                                        object_id_to1,
1538                                        object_id_to2,
1539                                        object_id_to3,
1540                                        object_id_to4,
1541                                        object_id_to5,
1542                                        relationship_type,
1543                                        relationship_subtype,
1544                                        lag_day,
1545                                        imported_lag,
1546                                        priority,
1547                                        pm_product_code,
1548                                        Record_Version_Number,
1549                                        CREATED_BY,
1550                                        CREATION_DATE,
1551                                        LAST_UPDATED_BY,
1552                                        LAST_UPDATE_DATE,
1553                                        LAST_UPDATE_LOGIN,
1554                                        weighting_percentage
1555                                  )
1556 
1557                           VALUES (     pa_object_relationships_s.nextval,
1558                                        'PA_TASKS',
1559                                        l_dest_from_tasks_id_tbl(iCounter),
1560                                        NULL,
1561                                        NULL,
1562                                        NULL,
1563                                        NULL,
1564                                        'PA_TASKS',
1565                                        l_dest_to_tasks_id_tbl(iCounter),
1566                                        NULL,
1567                                        NULL,
1568                                        NULL,
1569                                        NULL,
1570                                        'M',
1571                                        NULL,
1572                                        NULL,
1573                                        NULL,
1574                                        NULL,
1575                                        NULL,
1576                                        1,
1577                                        l_user_id,
1578                                        sysdate,
1579                                        l_user_id,
1580                                        sysdate,
1581                                        l_user_id,
1582                                        NULL
1583                                  );
1584 		 END IF;
1585                     --END IF;--If the condition is workplan
1586                END LOOP;--End of For loop
1587           END IF;-- if p_src_project_id is not null
1588 
1589      -- For other than copy mapping, e.g. create working version or publish ,
1590      -- src_project_id and structure version id should be considered and hence these cant be null
1594       THEN
1591      -- It is assumed that p_src_project_id will be passed in this case
1592      -- src_project_id will make the c_get_mapped_tasks efficient with project Id filter.
1593      ELSIF (p_context = 'CREATE_WORKING_VERSION' OR p_context = 'PUBLISH_VERSION')
1595           IF (   ( p_src_str_version_id IS NULL OR p_src_str_version_id = FND_API.G_MISS_NUM )
1596                OR( p_dest_str_version_id IS NULL OR p_dest_str_version_id = FND_API.G_MISS_NUM )
1597                OR( p_src_project_id IS NULL OR p_src_project_id = FND_API.G_MISS_NUM )
1598              ) THEN
1599 
1600            Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : COPY_MAPPING : if p_context is create_working_version,both src and destination str ver id will be required';
1601            Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
1602                                        l_debug_level3);
1603            RAISE Invalid_Arg_Exc_WP;
1604           END IF;
1605 
1606         -- get the mapped task-version-id for the source str version id.
1607           l_src_from_tasks_id_tbl.DELETE;
1608           l_src_to_tasks_id_tbl.DELETE;
1609           OPEN  c_get_mapped_tasks ( p_src_str_version_id , p_src_project_id );
1610           FETCH c_get_mapped_tasks BULK COLLECT
1611           INTO  l_src_from_tasks_id_tbl , l_src_to_tasks_id_tbl;
1612           CLOSE c_get_mapped_tasks ;
1613         -- for each task version id mapped, get the proj_element_id
1614           l_from_task_id_tbl.DELETE;
1615           FOR iCounter in 1..l_src_from_tasks_id_tbl.COUNT LOOP
1616               OPEN  c_get_mapped_task_id ( l_src_from_tasks_id_tbl ( iCounter ),
1617                  p_src_str_version_id , p_src_project_id );
1618               FETCH c_get_mapped_task_id  INTO l_from_task_id_tbl ( iCounter );
1619               CLOSE c_get_mapped_task_id  ;
1620           END LOOP;
1621 
1622 
1623 
1624           --for each task id mapped, get the task version ids for the dest structure version id, project should be same
1625           l_from_dest_task_ver_id.DELETE;
1626           FOR iCounter in 1..l_from_task_id_tbl.COUNT LOOP
1627                OPEN  c_get_mapped_task_ver_id ( l_from_task_id_tbl (iCounter) ,
1628                   p_dest_str_version_id , p_src_project_id );
1629                FETCH c_get_mapped_task_ver_id INTO l_from_dest_task_ver_id ( iCounter );
1630                CLOSE c_get_mapped_task_ver_id;
1631           END LOOP;
1632 
1633           Pa_Debug.WRITE(g_module_name,'l_from_task_id_tbl.COUNT '||l_from_task_id_tbl.COUNT ,l_debug_level3);
1634 
1635          -- Insert into PA_OBJECT_RELATIONSHIPS
1636          --bug 3574885, the forall should be called only when l_from_dest_task_ver_id is not empty
1637          --rtarway ,bug 3916440, the forall should be called only when l_src_to_tasks_id_tbl is not empty
1638          IF (l_from_dest_task_ver_id.COUNT > 0 AND l_src_to_tasks_id_tbl.count > 0)
1639          THEN
1640          FORALL iCounter IN l_from_dest_task_ver_id.FIRST..l_from_dest_task_ver_id.LAST
1641 
1642             INSERT INTO PA_OBJECT_RELATIONSHIPS (
1643                         object_relationship_id,
1644                         object_type_from,
1645                         object_id_from1,
1646                         object_id_from2,
1647                         object_id_from3,
1648                         object_id_from4,
1649                         object_id_from5,
1650                         object_type_to,
1651                         object_id_to1,
1652                         object_id_to2,
1653                         object_id_to3,
1654                         object_id_to4,
1655                         object_id_to5,
1656                         relationship_type,
1657                         relationship_subtype,
1658                         lag_day,
1659                         imported_lag,
1660                         priority,
1661                         pm_product_code,
1662                         Record_Version_Number,
1663                         CREATED_BY,
1664                         CREATION_DATE,
1665                         LAST_UPDATED_BY,
1666                         LAST_UPDATE_DATE,
1667                         LAST_UPDATE_LOGIN,
1668                         weighting_percentage)
1669            VALUES (     pa_object_relationships_s.nextval,
1670                         'PA_TASKS',
1671                         l_from_dest_task_ver_id(iCounter),
1672                         NULL,
1673                         NULL,
1674                         NULL,
1675                         NULL,
1676                         'PA_TASKS',
1677                         l_src_to_tasks_id_tbl(iCounter),
1678                         NULL,
1679                         NULL,
1680                         NULL,
1681                         NULL,
1682                         'M',
1683                         NULL,
1684                         NULL,
1685                         NULL,
1686                         NULL,
1687                         NULL,
1688                         1,
1689                         l_user_id,
1690                         sysdate,
1691                         l_user_id,
1692                         sysdate,
1693                         l_user_id,
1694                         NULL
1695           );
1696          END IF;
1697       END IF;
1698 
1699  Pa_Debug.WRITE(g_module_name,'After Completing insert',l_debug_level3);
1700 
1701 EXCEPTION
1702 
1703 WHEN FND_API.G_EXC_ERROR THEN
1704 
1705      x_return_status := Fnd_Api.G_RET_STS_ERROR;
1706      l_msg_count := Fnd_Msg_Pub.count_msg;
1707 
1708      IF l_msg_count = 1 AND x_msg_data IS NULL
1709       THEN
1713               , p_msg_count      => l_msg_count
1710           Pa_Interface_Utils_Pub.get_messages
1711               ( p_encoded        => Fnd_Api.G_TRUE
1712               , p_msg_index      => 1
1714               , p_msg_data       => l_msg_data
1715               , p_data           => l_data
1716               , p_msg_index_out  => l_msg_index_out);
1717           x_msg_data := l_data;
1718           x_msg_count := l_msg_count;
1719      ELSE
1720           x_msg_count := l_msg_count;
1721      END IF;
1722      IF l_debug_mode = 'Y' THEN
1723           Pa_Debug.reset_curr_function;
1724      END IF;
1725 
1726 WHEN Invalid_Arg_Exc_WP THEN
1727 
1728      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
1729      x_msg_count     := 1;
1730      x_msg_data      := 'PA_PROJ_STRUC_MAPPING_PUB : COPY_MAPPING : NULL PARAMETERS ARE PASSED OR CURSOR DIDNT RETURN ANY ROWS';
1731 
1732      Fnd_Msg_Pub.add_exc_msg
1733                    ( p_pkg_name        => 'PA_PROJ_STRUC_MAPPING_PUB'
1734                     , p_procedure_name  => 'COPY_MAPPING'
1735                     , p_error_text      => x_msg_data);
1736 
1737      IF l_debug_mode = 'Y' THEN
1738           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
1739           Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
1740                               l_debug_level5);
1741           Pa_Debug.reset_curr_function;
1742      END IF;
1743      RAISE;
1744 
1745 WHEN OTHERS THEN
1746 
1747      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
1748      x_msg_count     := 1;
1749      x_msg_data      := SQLERRM;
1750 
1751 
1752      Fnd_Msg_Pub.add_exc_msg
1753                    ( p_pkg_name         => 'PA_PROJ_STRUC_MAPPING_PUB'
1754                     , p_procedure_name  => 'COPY_MAPPING'
1755                     , p_error_text      => x_msg_data);
1756 
1757      IF l_debug_mode = 'Y' THEN
1758           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
1759           Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
1760                               l_debug_level5);
1761           Pa_Debug.reset_curr_function;
1762      END IF;
1763      RAISE;
1764 
1765  END COPY_MAPPING ;
1766 
1767 
1768 
1769 -- Procedure            : DELETE_ALL_MAPPING
1770 -- Type                 : Public Procedure
1771 -- Purpose              : This API will be called when we change a split mapping project to split no mapping.
1772 --                      :
1773 -- Note                 : 1. Get all the financial tasks of the passed project id.
1774 --                      : 2. If any of these tasks is existing in PA_OBJECT_RELATIONSHIPS, with relationship_type 'M'
1775 --                      :          delete the record in pa_object_relationships
1776 -- Assumptions          : The financial structure will have only one version in any case whether versioning enabled or disabled
1777 
1778 -- Parameters                   Type     Required        Description and Purpose
1779 -- ---------------------------  ------   --------        --------------------------------------------------------
1780 -- p_project_id                 NUMBER   Y               The project id for which the mappings have to be deleted
1781 
1782 PROCEDURE DELETE_ALL_MAPPING
1783     (
1784        p_api_version           IN       NUMBER   := 1.0
1785      , p_init_msg_list         IN       VARCHAR2 := FND_API.G_TRUE
1786      , p_commit                IN       VARCHAR2 := FND_API.G_FALSE
1787      , p_validate_only         IN       VARCHAR2 := FND_API.G_FALSE
1788      , p_validation_level      IN       NUMBER   := FND_API.G_VALID_LEVEL_FULL
1789      , p_calling_module        IN       VARCHAR2 := 'SELF_SERVICE'
1790      , p_debug_mode            IN       VARCHAR2 := 'N'
1791      , p_project_id            IN       NUMBER
1792      , x_return_status         OUT      NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1793      , x_msg_count             OUT      NOCOPY NUMBER --File.Sql.39 bug 4440895
1794      , x_msg_data              OUT      NOCOPY VARCHAR2        --File.Sql.39 bug 4440895
1795    )
1796 IS
1797 l_msg_count                     NUMBER := 0;
1798 l_data                          VARCHAR2(2000);
1799 l_msg_data                      VARCHAR2(2000);
1800 l_msg_index_out                 NUMBER;
1801 l_debug_mode                    VARCHAR2(1);
1802 
1803 
1804 l_debug_level2                   CONSTANT NUMBER := 2;
1805 l_debug_level3                   CONSTANT NUMBER := 3;
1806 l_debug_level4                   CONSTANT NUMBER := 4;
1807 l_debug_level5                   CONSTANT NUMBER := 5;
1808 --Table to collect all the mapped financial task version id
1809 l_mapped_obj_rel_id_tbl PA_PROJ_STRUC_MAPPING_PUB.OBJ_REL_ID_TABLE_TYPE;
1810 
1811 --This cursor will give all mapped financial tasks and object_relationships_id for the passed project id.
1812 CURSOR c_get_fin_task_ver_id (l_project_id NUMBER)
1813 IS
1814 SELECT
1815   obRel.object_relationship_id
1816 FROM
1817       pa_proj_element_versions elever1
1818     , pa_proj_element_versions elever2
1819 --    , pa_proj_structure_types  projStrType Bug 3693235 Performance Fix
1820 --    , pa_structure_types strType Bug 3693235 Performance Fix
1821     , pa_object_relationships obRel
1822 WHERE
1823 	elever1.object_type = 'PA_TASKS'
1824 AND  elever1.parent_structure_version_id = elever2.element_version_id
1825 AND  elever2.object_type = 'PA_STRUCTURES'
1826 -- Bug 3693235 Performance Fix
1827 --AND  elever2.proj_element_id = projStrType.proj_element_id
1828 --AND  projStrType.structure_type_id = strType.structure_type_id
1829 --AND  strType.structure_type = 'FINANCIAL'
1833 AND  elever1.project_id = elever2.project_id
1830 AND exists (SELECT 'xyz' FROM pa_proj_structure_types WHERE proj_element_id = elever2.proj_element_id and structure_type_id = 6) -- Bug 3693235 Performance Fix
1831 AND  elever1.project_id = l_project_id
1832 AND  elever2.project_id = l_project_id
1834 AND  elever1.element_version_id = obRel.object_id_to1
1835 AND  obRel.relationship_type='M'
1836 -- Bug 3693235 Performance Fix
1837 AND obRel.object_type_from = 'PA_TASKS'
1838 AND obRel.object_type_to = 'PA_TASKS'
1839 ;
1840 
1841 
1842 BEGIN
1843 
1844      x_msg_count := 0;
1845      x_return_status := FND_API.G_RET_STS_SUCCESS;
1846 
1847      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
1848      --l_debug_mode  := NVL(p_debug_mode,'N');
1849      IF l_debug_mode = 'Y' THEN
1850           PA_DEBUG.set_curr_function( p_function   => 'DELETE_ALL_MAPPING',
1851                                       p_debug_mode => l_debug_mode );
1852      END IF;
1853 
1854      IF l_debug_mode = 'Y' THEN
1855           Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : DELETE_ALL_MAPPING : Printing Input parameters';
1856           Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
1857                                      l_debug_level3);
1858 
1859           Pa_Debug.WRITE(g_module_name,'p_project_id'||':'||p_project_id,
1860                                      l_debug_level3);
1861      END IF;
1862 
1863      IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_TRUE)) THEN
1864       FND_MSG_PUB.initialize;
1865      END IF;
1866 
1867      IF (p_commit = FND_API.G_TRUE) THEN
1868       savepoint DELETE_ALL_MAPPING_PUBLIC;
1869      END IF;
1870 
1871      IF l_debug_mode = 'Y' THEN
1872           Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : DELETE_ALL_MAPPING : Validating Input parameters';
1873           Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
1874                                      l_debug_level3);
1875      END IF;
1876 
1877      IF ( p_project_id IS NULL )
1878      THEN
1879            IF l_debug_mode = 'Y' THEN
1880                Pa_Debug.g_err_stage:= 'PA_PROJ_STRUC_MAPPING_PUB : DELETE_ALL_MAPPING : p_project_id can not be null';
1881                Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
1882                                      l_debug_level3);
1883            END IF;
1884           RAISE Invalid_Arg_Exc_WP;
1885      END IF;
1886 
1887      --Get all the mapped financial tasks
1888      l_mapped_obj_rel_id_tbl.DELETE;
1889      OPEN  c_get_fin_task_ver_id  ( p_project_id );
1890      FETCH c_get_fin_task_ver_id  BULK COLLECT
1891      INTO  l_mapped_obj_rel_id_tbl ;
1892      CLOSE c_get_fin_task_ver_id  ;
1893 
1894      IF (l_mapped_obj_rel_id_tbl IS NOT NULL AND l_mapped_obj_rel_id_tbl.COUNT > 0  )
1895      THEN
1896           FORALL iCounter IN l_mapped_obj_rel_id_tbl.FIRST..l_mapped_obj_rel_id_tbl.LAST
1897 
1898                DELETE FROM PA_OBJECT_RELATIONSHIPS
1899                WHERE
1900                OBJECT_RELATIONSHIP_ID = l_mapped_obj_rel_id_tbl(iCounter);
1901      END IF;
1902     IF (p_commit = FND_API.G_TRUE) THEN
1903           COMMIT;
1904     END IF;
1905 
1906 EXCEPTION
1907 
1908 WHEN FND_API.G_EXC_ERROR THEN
1909 
1910      x_return_status := Fnd_Api.G_RET_STS_ERROR;
1911      l_msg_count := Fnd_Msg_Pub.count_msg;
1912 
1913      IF p_commit = FND_API.G_TRUE THEN
1914         ROLLBACK TO DELETE_ALL_MAPPING_PUBLIC;
1915      END IF;
1916      IF c_get_fin_task_ver_id%ISOPEN THEN
1917           CLOSE c_get_fin_task_ver_id;
1918      END IF;
1919      IF l_msg_count = 1 AND x_msg_data IS NULL
1920       THEN
1921           Pa_Interface_Utils_Pub.get_messages
1922               ( p_encoded        => Fnd_Api.G_TRUE
1923               , p_msg_index      => 1
1924               , p_msg_count      => l_msg_count
1925               , p_msg_data       => l_msg_data
1926               , p_data           => l_data
1927               , p_msg_index_out  => l_msg_index_out);
1928           x_msg_data := l_data;
1929           x_msg_count := l_msg_count;
1930      ELSE
1931           x_msg_count := l_msg_count;
1932      END IF;
1933      IF l_debug_mode = 'Y' THEN
1934           Pa_Debug.reset_curr_function;
1935      END IF;
1936 
1937 WHEN Invalid_Arg_Exc_WP THEN
1938 
1939      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
1940      x_msg_count     := 1;
1941      --x_msg_data      := 'PA_PROJ_STRUC_MAPPING_PUB : DELETE_ALL_MAPPING : NULL PARAMETERS ARE PASSED OR CURSOR DIDNT RETURN ANY ROWS';
1942 
1943      IF p_commit = FND_API.G_TRUE THEN
1944         ROLLBACK TO DELETE_ALL_MAPPING_PUBLIC;
1945      END IF;
1946      IF c_get_fin_task_ver_id%ISOPEN THEN
1947           CLOSE c_get_fin_task_ver_id;
1948      END IF;
1949      Fnd_Msg_Pub.add_exc_msg
1950                    ( p_pkg_name        => 'PA_PROJ_STRUC_MAPPING_PUB'
1951                     , p_procedure_name  => 'DELETE_ALL_MAPPING'
1952                     , p_error_text      => x_msg_data);
1953 
1954      IF l_debug_mode = 'Y' THEN
1955           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
1956           Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
1957                               l_debug_level5);
1958           Pa_Debug.reset_curr_function;
1959      END IF;
1960      RAISE;
1961 
1962 WHEN OTHERS THEN
1963 
1964      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
1965      x_msg_count     := 1;
1966      x_msg_data      := SQLERRM;
1967 
1968      IF p_commit = FND_API.G_TRUE THEN
1969         ROLLBACK TO DELETE_ALL_MAPPING_PUBLIC;
1970      END IF;
1971 
1972      IF c_get_fin_task_ver_id%ISOPEN THEN
1973           CLOSE c_get_fin_task_ver_id;
1974      END IF;
1975 
1976      Fnd_Msg_Pub.add_exc_msg
1977                    (  p_pkg_name         => 'PA_PROJ_STRUC_MAPPING_PUB'
1978                     , p_procedure_name  => 'DELETE_ALL_MAPPING'
1979                     , p_error_text      => x_msg_data);
1980 
1981      IF l_debug_mode = 'Y' THEN
1982           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
1983           Pa_Debug.WRITE(g_module_name,Pa_Debug.g_err_stage,
1984                               l_debug_level5);
1985           Pa_Debug.reset_curr_function;
1986      END IF;
1987      RAISE;
1988 END DELETE_ALL_MAPPING ;
1989 
1990 END PA_PROJ_STRUC_MAPPING_PUB;