DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_PROJECT_PVT

Source


1 package body PA_PROJECT_PVT as
2 /*$Header: PAPMPRVB.pls 120.21.12010000.4 2008/10/21 10:22:14 dbudhwar ship $*/
3 
4 --Global constants to be used in error messages
5 G_PKG_NAME        CONSTANT VARCHAR2(30)   :='PA_PROJECT_PVT';
6 G_PROJECT_CODE    CONSTANT VARCHAR2(100)  :='PROJECT';
7 G_TASK_CODE   CONSTANT VARCHAR2(100)  :='TASK';
8 G_KEY_MEMBER_CODE CONSTANT VARCHAR2(100)  :='KEY_MEMBER';
9 G_CLASS_CAT_CODE  CONSTANT VARCHAR2(100)  :='CLASS_CATEGORY';
10 G_USER_ID     CONSTANT NUMBER := FND_GLOBAL.user_id;
11 G_LOGIN_ID    CONSTANT NUMBER := FND_GLOBAL.login_id;
12 -- anlee org role changes
13 G_KEY_MEMBER_CODE CONSTANT VARCHAR2(100)  :='ORG_ROLE';
14 l_pm_product_code VARCHAR2(2) :='Z'; /*for bug 2413400 a new variable defined.*/
15 
16 -- scope of these four global variables pertains within this package body
17 g_rev_ind_rate_sch_id   pa_ind_rate_schedules.ind_rate_sch_id%TYPE   := NULL;  -- added for bug 3975253  (or can also init to PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
18 g_rev_rate_sch_type     pa_ind_rate_schedules.ind_rate_schedule_type%TYPE  := NULL;   -- added for bug 3975253
19 g_inv_ind_rate_sch_id   pa_ind_rate_schedules.ind_rate_sch_id%TYPE   := NULL;   -- added for bug 3975253
20 g_inv_rate_sch_type     pa_ind_rate_schedules.ind_rate_schedule_type%TYPE  := NULL;   -- added for bug 3975253
21 
22 /*code added for bug no:2413400 */
23 Cursor p_product_code_csr (p_pm_product_code IN VARCHAR2)
24   Is
25   Select 'X'
26   from pa_lookups
27   where lookup_type='PM_PRODUCT_CODE'
28      and lookup_code = p_pm_product_code;
29 
30 
31 --====================================================================================
32 --Name:               add_key_members
33 --Type:               Procedure
34 --Description:        This procedure can be used to add key members
35 --            to a new or already existing project using
36 --            the overridable view.
37 --
38 --Called subprograms: none
39 --
40 --
41 --
42 --History:
43 --    15-AUG-1996        L. de Werker    Created
44 -- 17-JUL-2000 Mohnish
45 --             added code for ROLE BASED SECURITY:
46 --             added the call to PA_PROJECT_PARTIES_PUB.CREATE_PROJECT_PARTY
47 --  19-JUL-2000 Mohnish incorporated PA_PROJECT_PARTIES_PUB API changes
48 --
49 PROCEDURE add_key_members
50 ( p_return_status           OUT NOCOPY VARCHAR2                , --4537865 Added nocopy hint
51   p_pa_source_template_id       IN  NUMBER                  ,
52   p_project_id              IN  NUMBER                  ,
53   p_key_members             IN  pa_project_pub.project_role_tbl_type    )
54 IS
55 
56    --needed to get the overridable fields for this project template source
57 /*  commented the code for the Bug#1891621, starts here */
58 /*   CURSOR l_override_fields_csr
59         (p_pa_source_template_id NUMBER)
60    IS
61    SELECT   DISTINCT *
62    FROM     pa_override_fields_v pof
63    WHERE    pof.pa_source_template_id = p_pa_source_template_id;
64 
65    TYPE override_fields_table_type IS TABLE OF l_override_fields_csr%rowtype
66     INDEX BY BINARY_INTEGER;
67 */
68 /* commented the code for the Bug#1891621,  ends here  */
69 
70 /* modified the following cursor for Bug#5196996
71    CURSOR l_project_role_types_csr (p_role_type IN VARCHAR2)
72    IS
73    SELECT 'x' FROM
74    pa_project_role_types
75    WHERE project_role_type = p_role_type; */
76 
77 --This is the modified cursor Bug#5196996
78 
79 CURSOR l_project_role_types_csr(p_role_type IN VARCHAR2,p_project_id IN number)
80 IS
81 SELECT  'x'
82 FROM    pa_project_role_types_v roles,
83         pa_role_controls controls,
84         pa_projects_all proj
85 WHERE   proj.project_id                 =       p_project_id
86  AND    proj.ROLE_LIST_ID                       is null
87  AND    roles.project_role_id           =       controls.project_role_id
88  AND    roles.PROJECT_ROLE_TYPE         =       p_role_type
89  AND    controls.role_control_code      =       'ALLOW_AS_PROJ_MEMBER'
90  AND    trunc(sysdate) between start_date_active and nvl(end_date_active,sysdate)
91 UNION  ALL
92 SELECT  'x'
93 FROM    pa_project_role_types_v roles,
94         pa_role_controls controls,
95         pa_projects_all proj,
96         pa_role_list_members prlm
97 WHERE   proj.project_id                 =       p_project_id
98  AND    proj.ROLE_LIST_ID               =       prlm.role_list_id
99  AND    prlm.project_role_id            =       roles.project_role_id
100  AND    roles.project_role_id           =       controls.project_role_id
101  AND    roles.PROJECT_ROLE_TYPE         =       p_role_type
102  AND    controls.role_control_code      =       'ALLOW_AS_PROJ_MEMBER'
103  AND    trunc(sysdate) between start_date_active and nvl(end_date_active,sysdate);
104 
105  -- the above cusroe has been modified for Bug#5196996
106 
107 /* Bug 2480072 - Modified the following cursor to add cursor
108                 parameters p_start_date and p_end_date and
109                added the AND clause in where */
110 
111 /* added the code for the Bug#1891621, starts here  */
112   CURSOR l_project_manager_counter_csr( p_project_id NUMBER,
113                                         p_start_date DATE,
114                                         p_end_date DATE
115                                          ) IS
116    select count(*)
117       from pa_project_players
118      where project_id = p_project_id
119        and project_role_type = 'PROJECT MANAGER'
120        and (( nvl(end_date_active,nvl(p_start_date,sysdate)) between
121                           nvl(p_start_date,sysdate) and nvl(p_end_date,sysdate))
122                     OR
123          (start_date_active between  nvl(p_start_date,sysdate) and nvl(p_end_date,sysdate)));
124 /*  added the code for the Bug#1891621, ends here  */
125 
126    l_api_name            CONSTANT   VARCHAR2(30)        := 'add_key_members';
127 --   l_override_fields_rec          l_override_fields_csr%rowtype;
128 --   l_override_fields_tab          override_fields_table_type;
129    i                        BINARY_INTEGER :=0;
130    j                        BINARY_INTEGER :=0;
131 --   l_field_is_overridable         BINARY_INTEGER :=0;
132    l_project_manager_counter            NUMBER := 0;
133    l_max_number_of_proj_managers CONSTANT   NUMBER := 1;
134    l_dummy                      VARCHAR2(1);
135    l_amg_segment1       VARCHAR2(25);
136    l_completion_date    DATE;
137    v_start_date_active  DATE;
138    v_end_date_active    DATE;
139    v_project_role_id    NUMBER;
140    v_project_role_type  VARCHAR2(20);
141    v_person_id          NUMBER;
142    v_null_number        NUMBER;
143    v_null_char          VARCHAR2(1);
144    x_return_status      VARCHAR2(255);
145    x_msg_count          NUMBER;
146    x_msg_data           VARCHAR2(255);
147    x_project_party_id   NUMBER;
148    x_resource_id        NUMBER;
149    l_wf_item_type          VARCHAR2(30);
150    l_wf_type               VARCHAR2(30);
151    l_wf_party_process      VARCHAR2(30);
152    l_assignment_id         NUMBER;
153    l_resource_id          NUMBER;
154 
155 
156 --needed to get the field values associated to a AMG message
157 
158    CURSOR   l_amg_project_csr
159       (p_pa_project_id pa_projects.project_id%type)
160    IS
161    SELECT   segment1,COMPLETION_DATE
162    FROM     pa_projects p
163    WHERE p.project_id = p_pa_project_id;
164 
165 BEGIN
166 
167 --  Standard begin of API savepoint
168 
169     SAVEPOINT add_key_members_pvt;
170 
171 
172 --  Set API return status to success
173 
174     p_return_status := FND_API.G_RET_STS_SUCCESS;
175 
176     --get all the overridable fields for this project template source
177 /*  commented the code for the Bug#1891621, starts here  */
178 /*    OPEN l_override_fields_csr(p_pa_source_template_id);
179     i := 0;
180     LOOP
181         i := i + 1;
182         FETCH l_override_fields_csr INTO l_override_fields_rec;
183         EXIT WHEN l_override_fields_csr%NOTFOUND;
184         l_override_fields_tab(i) := l_override_fields_rec;
185 
186     END LOOP;
187 
188     CLOSE l_override_fields_csr;
189 */
190 /*   commented the code for the Bug#1891621, ends here  */
191 -- Get segment1 for AMG messages
192 
193    OPEN l_amg_project_csr( p_project_id );
194    FETCH l_amg_project_csr INTO l_amg_segment1,l_completion_date;
195    CLOSE l_amg_project_csr;
196 
197  /*  Bug 2480072 Commenting the open, fetch and close of the following cursor and
198     shifting it to the inside while loop */
199 
200 /* added the code for the Bug#1891621, starts here
201    OPEN l_project_manager_counter_csr( p_project_id );
202    FETCH l_project_manager_counter_csr INTO l_project_manager_counter;
203    CLOSE l_project_manager_counter_csr;
204    added the code for the Bug#1891621, ends here
205 */
206     i := p_key_members.first;
207 
208     WHILE i IS NOT NULL LOOP
209 
210    /*  Bug 2480072 - Added the following curosr fetch, open and close call */
211    OPEN l_project_manager_counter_csr( p_project_id ,p_key_members(i).start_date,p_key_members(i).end_date);
212    FETCH l_project_manager_counter_csr INTO l_project_manager_counter;
213    CLOSE l_project_manager_counter_csr;
214 
215 --      l_field_is_overridable := 0;
216    -- Check whether this is a valid employee
217 
218  IF (p_key_members(i).person_id <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
219       (p_key_members(i).person_id IS NOT NULL) THEN
220        IF check_valid_employee (p_key_members(i).person_id) = 'N'
221        THEN
222         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
223         THEN
224          pa_interface_utils_pub.map_new_amg_msg
225            ( p_old_message_code => 'PA_INVALID_KEY_MEMBER'
226             ,p_msg_attribute    => 'CHANGE'
227             ,p_resize_flag      => 'N'
228             ,p_msg_context      => 'PROJ'
229             ,p_attribute1       => l_amg_segment1
230             ,p_attribute2       => ''
231             ,p_attribute3       => ''
232             ,p_attribute4       => ''
233             ,p_attribute5       => '');
234             END IF;
235                 RAISE  FND_API.G_EXC_ERROR;
236        END IF;
237 
238   -- validate the role type
239      OPEN l_project_role_types_csr (p_key_members(i).project_role_type,p_project_id); --New parameter for bug 5196996
240      FETCH l_project_role_types_csr INTO l_dummy;
241      IF l_project_role_types_csr%NOTFOUND THEN
242     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
243        THEN
244          pa_interface_utils_pub.map_new_amg_msg
245            ( p_old_message_code => 'PA_INVALID_ROLE_TYPE'
246             ,p_msg_attribute    => 'CHANGE'
247             ,p_resize_flag      => 'N'
248             ,p_msg_context      => 'PROJ'
249             ,p_attribute1       => l_amg_segment1
250             ,p_attribute2       => ''
251             ,p_attribute3       => ''
252             ,p_attribute4       => ''
253             ,p_attribute5       => '');
254         END IF;
255         CLOSE l_project_role_types_csr;
256         RAISE  FND_API.G_EXC_ERROR;
257      ELSE
258         CLOSE l_project_role_types_csr;
259      END IF;
260 
261 
262        IF p_key_members(i).start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
263        AND p_key_members(i).end_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
264        THEN
265           IF  p_key_members(i).end_date < p_key_members(i).start_date
266           THEN
267 
268         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
269         THEN
270          pa_interface_utils_pub.map_new_amg_msg
271            ( p_old_message_code => 'PA_SU_INVALID_DATES'
272             ,p_msg_attribute    => 'CHANGE'
273             ,p_resize_flag      => 'N'
274             ,p_msg_context      => 'PROJ'
275             ,p_attribute1       => l_amg_segment1
276             ,p_attribute2       => ''
277             ,p_attribute3       => ''
278             ,p_attribute4       => ''
279             ,p_attribute5       => '');
280                 END IF;
281 
282                 RAISE  FND_API.G_EXC_ERROR;
283           END IF;
284        END IF;
285 /*   commented the code for the Bug#1891621, starts here  */
286 /*       j := l_override_fields_tab.first;
287 
288     --check whether this project role type is overridable
289     WHILE j IS NOT NULL LOOP
290 -- dbms_output.put_line('field_name =   '||l_override_fields_tab(j).pa_field_name);
291 -- dbms_output.put_line('display_name = '||l_override_fields_tab(j).pa_display_name);
292         IF l_override_fields_tab(j).pa_field_name = 'KEY_MEMBER'
293         AND upper(l_override_fields_tab(j).type) = upper(p_key_members(i).project_role_type)
294         THEN
295             l_field_is_overridable := 1;
296 
297             IF upper(p_key_members(i).project_role_type) = 'PROJECT MANAGER'
298             THEN l_project_manager_counter := l_project_manager_counter + 1;
299             END IF;
300 
301             EXIT;
302         END IF;
303         j := l_override_fields_tab.next(j);
304     END LOOP;
305 
306     IF l_field_is_overridable <> 1
307             --if not overridable RAISE ERROR else insert
308     THEN
309 
310         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
311         THEN
312          pa_interface_utils_pub.map_new_amg_msg
313            ( p_old_message_code => 'PA_ROLE_TYPE_NOT_OVERRIDABLE'
314             ,p_msg_attribute    => 'CHANGE'
315             ,p_resize_flag      => 'Y'
316             ,p_msg_context      => 'PROJ'
317             ,p_attribute1       => l_amg_segment1
318             ,p_attribute2       => ''
319             ,p_attribute3       => ''
320             ,p_attribute4       => ''
321             ,p_attribute5       => '');
322         END IF;
323 
324         RAISE FND_API.G_EXC_ERROR;
325 
326     ELSE
327 */
328 /*  commented the code for the Bug#1891621, ends here  */
329 
330         IF upper(p_key_members(i).project_role_type) = 'PROJECT MANAGER'
331         AND l_project_manager_counter > l_max_number_of_proj_managers
332         THEN
333             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
334              THEN
335              pa_interface_utils_pub.map_new_amg_msg
336               ( p_old_message_code => 'PA_PR_TOO_MANY_MGRS'
337                ,p_msg_attribute    => 'CHANGE'
338                ,p_resize_flag      => 'N'
339                ,p_msg_context      => 'PROJ'
340                ,p_attribute1       => l_amg_segment1
341                ,p_attribute2       => ''
342                ,p_attribute3       => ''
343                ,p_attribute4       => ''
344                ,p_attribute5       => '');
345             END IF;
346             RAISE FND_API.G_EXC_ERROR;
347         ELSE
348 
349 /*
350 -- begin OLD code before changes for ROLE BASED SECURITY
351             INSERT INTO pa_project_players
352                    (project_id
353                    ,person_id
354                    ,project_role_type
355                    ,start_date_active
356                    ,end_date_active
357                    ,last_update_date
358                    ,last_updated_by
359                    ,creation_date
360                    ,created_by
361                    ,last_update_login              )
362             VALUES
363                  ( p_project_id
364                   ,p_key_members(i).person_id
365                   ,p_key_members(i).project_role_type
366                   ,DECODE(p_key_members(i).start_date,
367                    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
368                                    TRUNC(SYSDATE),
369                                    NULL,TRUNC(SYSDATE),
370                                    p_key_members(i).start_date)
371                   ,p_key_members(i).end_date
372                   ,sysdate
373                   ,fnd_global.user_id
374                   ,sysdate
375                   ,fnd_global.user_id
376                   ,fnd_global.login_id      );
377 -- end OLD code before changes for ROLE BASED SECURITY
378 */
379 -- begin NEW code for ROLE BASED SECURITY
380 /*        Select
381            DECODE(p_key_members(i).start_date,
382                   PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE, TRUNC(SYSDATE),
383                   NULL,TRUNC(SYSDATE),
384                   p_key_members(i).start_date)
385        Into     v_start_date_active
386        From     dual;
387 */    --commented and added following line. --Ansari
388 
389 --       v_start_date_active := PA_PROJECT_PARTIES_PUB.GET_KEY_MEMBER_START_DATE (p_project_id);
390 
391      /*Commented the below code for the bug 2910972*/
392 
393       /* IF p_key_members(i).start_date is null OR
394           p_key_members(i).start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
395        THEN
396           v_start_date_active := PA_PROJECT_PARTIES_PUB.GET_KEY_MEMBER_START_DATE (p_project_id);
397        ELSE
398           Code addition starts for the bug 2686120
399           IF p_key_members(i).start_date > sysdate THEN
400         v_start_date_active := p_key_members(i).start_date;
401       ELSE
402         v_start_date_active := PA_PROJECT_PARTIES_PUB.GET_KEY_MEMBER_START_DATE (p_project_id);
403       END IF;
404       Code addition ends for the bug 2686120
405         END IF; */
406 
407         /*Added the below code for the bug 2910972*/
408 
409          IF p_key_members(i).start_date is null OR
410           p_key_members(i).start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
411        THEN
412           v_start_date_active := NULL;
413        ELSE
414             v_start_date_active := p_key_members(i).start_date;
415        END IF;
416 
417        /*End of the code added for the bug 2910972*/
418 
419        Select project_role_id
420        Into   v_project_role_id
421        From   pa_project_role_types
422        Where  project_role_type=p_key_members(i).project_role_type;
423 
424           v_end_date_active   := p_key_members(i).end_date;
425           v_project_role_type := p_key_members(i).project_role_type;
426           v_person_id         := p_key_members(i).person_id;
427           v_null_number       := to_number(NULL);
428 
429    PA_PROJECT_PARTIES_PUB.CREATE_PROJECT_PARTY(
430           p_api_version => 1.0           -- p_api_version
431           , p_init_msg_list => FND_API.G_TRUE  -- p_init_msg_list
432           , p_commit => FND_API.G_FALSE  -- p_commit
433           , p_validate_only => FND_API.G_FALSE -- p_validate_only
434           , p_validation_level => FND_API.G_VALID_LEVEL_FULL  -- p_validation_level
435           , p_debug_mode => 'N'          -- p_debug_mode
436           , p_object_id => p_project_id  -- p_object_id
437           , p_OBJECT_TYPE => 'PA_PROJECTS'  -- p_OBJECT_TYPE
438           , p_project_role_id => v_project_role_id  -- p_project_role_id
439           , p_project_role_type => NULL  -- p_project_role_type
440           , p_RESOURCE_TYPE_ID => 101    -- p_RESOURCE_TYPE_ID
441           , p_resource_source_id => v_person_id  -- p_resource_source_id
442           , p_resource_name => v_null_char       -- p_resource_name
443           , p_start_date_active => v_start_date_active  -- p_start_date_active
444           , p_scheduled_flag => 'N'      -- p_scheduled_flag
445 --          , p_record_version_number => 1 -- p_record_version_number
446           , p_calling_module => 'FORM'   -- p_calling_module
447           , p_project_id => p_project_id -- p_project_id
448           , p_project_end_date => l_completion_date  -- p_project_end_date
449           , p_end_date_active => v_end_date_active  -- p_end_date_active
450           , x_project_party_id => x_project_party_id  -- x_project_party_id
451           , x_resource_id => x_resource_id      -- x_resource_id
452           , x_wf_item_type     =>l_wf_item_type
453           , x_wf_type          => l_wf_type
454           , x_wf_process       => l_wf_party_process
455           , x_assignment_id    => l_assignment_id
456           , x_return_status => x_return_status  -- x_return_status
457           , x_msg_count => x_msg_count          -- x_msg_count
458           , x_msg_data => x_msg_data            -- x_msg_data
459                              );
460           IF    (x_return_status <> FND_API.G_RET_STS_SUCCESS) Then
461                 p_return_status := x_return_status;
462 --                p_msg_count     := x_msg_count;
463 --                p_msg_data      := SUBSTR(p_msg_data||x_msg_data,1,2000);
464                 if    (x_return_status = FND_API.G_RET_STS_ERROR) then
465                       raise  FND_API.G_EXC_UNEXPECTED_ERROR;
466                 else  -- (x_return_status =  FND_API.G_RET_STS_UNEXP_ERROR) then
467                       raise  FND_API.G_EXC_ERROR;
468                 end if;
469          END IF;
470 -- end NEW code for ROLE BASED SECURITY
471         END IF;
472 
473 --  END IF;
474 
475 END IF; -- IF(p_key_members(i).person_id <>
476         -- PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
477     i := p_key_members.next(i);
478 
479     END LOOP; --key members
480 
481 
482 EXCEPTION
483 
484     WHEN FND_API.G_EXC_ERROR
485     THEN
486 /* dbms_output.put_line('handling an G_EXC_ERROR exception'); */
487     ROLLBACK TO add_key_members_pvt;
488 
489     p_return_status := FND_API.G_RET_STS_ERROR;
490 
491     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
492     THEN
493 /* dbms_output.put_line('handling an G_EXC_UNEXPECTED_ERROR exception'); */
494     ROLLBACK TO add_key_members_pvt;
495 
496     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
497 
498     WHEN OTHERS THEN
499 /* dbms_output.put_line('handling an OTHERS exception'); */
500     ROLLBACK TO add_key_members_pvt;
501 
502     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
503 
504     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
505     THEN
506         FND_MSG_PUB.add_exc_msg
507                 ( p_pkg_name        => G_PKG_NAME
508                 , p_procedure_name  => l_api_name   );
509 
510     END IF;
511 
512 END add_key_members;
513 
514 --====================================================================================
515 --Name:               add_class_categories
516 --Type:               Procedure
517 --Description:        This procedure can be used to add class categories
518 --            to a new or already existing project using
519 --            the overridable view.
520 --
521 --Called subprograms: none
522 --
523 --
524 --
525 --History:
526 --    07-AUG-2002        gjain       Added code for Bug 2448159. Now if
527 --                   pick_one_code_only_flag for a class_category
528 --                   is 'Y' then no more than a single class code
529 --                   can be added for that class category
530 --
531 --    15-AUG-1996        L. de Werker    Created
532 --
533 PROCEDURE add_class_categories
534 ( p_return_status           OUT NOCOPY VARCHAR2                , -- 4537865 Added the nocopy hint
535   p_pa_source_template_id       IN  NUMBER                  ,
536   p_project_id              IN  NUMBER                  ,
537   p_class_categories            IN  pa_project_pub.class_category_tbl_type  )
538 IS
539 
540    --needed to get the overridable fields for this project template source
541 /*  code commented for the bug#1891621, starts here  */
542 /*   CURSOR l_override_fields_csr
543         (p_pa_source_template_id NUMBER)
544    IS
545    SELECT   DISTINCT *
546    FROM     pa_override_fields_v pof
547    WHERE    pof.pa_source_template_id = p_pa_source_template_id;
548 
549    TYPE override_fields_table_type IS TABLE OF l_override_fields_csr%rowtype
550     INDEX BY BINARY_INTEGER;
551 */
552 /*  code commented for the bug#1891621, ends here  */
553    l_api_name           CONSTANT    VARCHAR2(30)        := 'add_class_categories';
554 --   l_override_fields_rec          l_override_fields_csr%rowtype;
555 --   l_override_fields_tab          override_fields_table_type;
556    i                        BINARY_INTEGER :=0;
557    j                        BINARY_INTEGER :=0;
558 --   l_field_is_overridable         BINARY_INTEGER :=0;
559    l_amg_segment1       VARCHAR2(25);
560 
561    /* added the below two local variables for bug 2448159 */
562    l_pick_one_code_only  VARCHAR2(1);
563    l_count       NUMBER;
564 
565 --needed to get the field values associated to a AMG message
566 
567    CURSOR   l_amg_project_csr
568       (p_pa_project_id pa_projects.project_id%type)
569    IS
570    SELECT   segment1
571    FROM     pa_projects p
572    WHERE p.project_id = p_pa_project_id;
573 
574    p_multiple_task_msg           VARCHAR2(1) := 'T';
575 
576    /* Following Cursor l_valid_category_csr has been commented
577       for Performance Bug # 3693217
578 
579       This cursor has been split into two for the Performance Fix
580 
581 
582    CURSOR l_valid_category_csr (c_project_id NUMBER, c_class_category VARCHAR2)
583    IS
584    SELECT 'Y'
585    FROM PA_VALID_CATEGORIES_V vc,
586         PA_PROJECTS_ALL ppa,
587         PA_PROJECT_TYPES_ALL ppta
588    WHERE ppa.project_id = c_project_id
589    AND   ppa.project_type = ppta.project_type
590    AND   nvl(ppa.org_id, -99) = nvl(ppta.org_id, -99)
591    AND   ppta.project_type_id = vc.object_type_id
592    AND   vc.class_category = c_class_category; */
593 
594    /* Start of code for Performance Bug # 3693217*/
595     CURSOR l_valid_category_csr1 (c_project_id NUMBER, c_class_category VARCHAR2)
596     IS
597     SELECT 'Y'
598       FROM DUAL
599      WHERE EXISTS
600     (
601     SELECT 'Y'
602     FROM   PA_CLASS_CATEGORIES cc,
603            PA_VALID_CATEGORIES vc,
604            PA_PROJECT_TYPES_ALL PPTA,
605            PA_PROJECTS_ALL PPA
606     WHERE  PPA.PROJECT_ID = c_project_id
607     AND    PPA.PROJECT_TYPE = PPTA.PROJECT_TYPE
608 --    AND    nvl(PPA.ORG_ID, -99) = nvl(PPTA.ORG_ID, -99) - R12: Bug 4364092
609     AND    PPA.ORG_ID = PPTA.ORG_ID
610     AND    VC.CLASS_CATEGORY = c_class_category
611     AND    VC.CLASS_CATEGORY = cc.CLASS_CATEGORY
612     AND    TRUNC(SYSDATE) BETWEEN TRUNC(CC.START_DATE_ACTIVE)
613                               AND TRUNC(NVL(CC.END_DATE_ACTIVE, SYSDATE))
614     AND    VC.OBJECT_TYPE_ID = PPTA.PROJECT_TYPE_ID
615     AND    TRUNC(SYSDATE) BETWEEN TRUNC(PPTA.START_DATE_ACTIVE)
616                               AND TRUNC(NVL(PPTA.END_DATE_ACTIVE, SYSDATE))
617     ) ;
618 
619     CURSOR l_valid_category_csr2 ( c_class_category VARCHAR2)
620     IS
621     SELECT 'Y'
622       FROM DUAL
623      WHERE EXISTS
624     (
625     SELECT 'Y'
626     FROM   PA_CLASS_CATEGORIES cc
627     WHERE  CC.OBJECT_TYPE = 'PA_PROJECTS'
628      AND   CC.ALL_TYPES_VALID_FLAG = 'Y'
629      AND   TRUNC(SYSDATE) BETWEEN TRUNC(CC.START_DATE_ACTIVE)
630                           AND TRUNC(NVL(CC.END_DATE_ACTIVE, SYSDATE))
631      AND   cc.CLASS_CATEGORY = c_class_category
632     ) ;
633 
634    /* End of code for Performance Bug # 3693217*/
635 
636    CURSOR l_check_percentage_csr (c_class_category VARCHAR2)
637    IS
638    SELECT 'Y'
639    FROM PA_CLASS_CATEGORIES
640    WHERE class_category = c_class_category
641    AND allow_percent_flag = 'Y';
642 
643    CURSOR l_get_percent_flag_csr (c_class_category VARCHAR2)
644    IS
645    SELECT allow_percent_flag
646    FROM PA_CLASS_CATEGORIES
647    WHERE class_category = c_class_category;
648 
649    /* code addition for bug 2448159 starts*/
650    CURSOR l_pick_one_code_only_flag (c_class_category VARCHAR2)
651    IS
652    SELECT PICK_ONE_CODE_ONLY_FLAG
653    FROM PA_CLASS_CATEGORIES
654    WHERE class_category = c_class_category;
655 
656    CURSOR l_get_code_count (c_project_id NUMBER, c_class_category VARCHAR2)
657    IS
658    select count(*)
659    from PA_PROJECT_CLASSES
660    WHERE Project_id = c_project_id
661    AND class_category = c_class_category;
662    /* code addition for bug 2448159 ends */
663 
664    l_dummy   VARCHAR2(1) := 'Y';
665    l_dummy2  VARCHAR2(1) := 'Y';
666    l_allow_percent_flag VARCHAR2(1);
667    l_code_percentage NUMBER;
668 
669 BEGIN
670 
671 
672 --  Standard begin of API savepoint
673 
674     SAVEPOINT add_class_categories_pvt;
675 
676 
677 --  Set API return status to success
678 
679     p_return_status := FND_API.G_RET_STS_SUCCESS;
680 
681 --  get all the overridable fields for this project template source
682 /* code commented for the Bug#1891621, starts here  */
683 /*    OPEN l_override_fields_csr(p_pa_source_template_id);
684     i := 0;
685     LOOP
686         i := i + 1;
687         FETCH l_override_fields_csr INTO l_override_fields_rec;
688         EXIT WHEN l_override_fields_csr%NOTFOUND;
689         l_override_fields_tab(i) := l_override_fields_rec;
690 
691     END LOOP;
692 
693     CLOSE l_override_fields_csr;
694 */
695 /* code commented for the Bug#1891621, ends here  */
696 -- Get segment1 for AMG messages
697 
698    OPEN l_amg_project_csr( p_project_id );
699    FETCH l_amg_project_csr INTO l_amg_segment1;
700    CLOSE l_amg_project_csr;
701 
702     i := p_class_categories.first;
703 
704     WHILE i IS NOT NULL LOOP
705 
706  -- Process only if a class category and class code are filled up
707 
708 IF (p_class_categories(i).class_category <>
709     PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
710    (p_class_categories(i).class_category IS NOT NULL )
711 AND (p_class_categories(i).class_code <>
712     PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
713    (p_class_categories(i).class_code IS NOT NULL )
714 
715 THEN
716 /* code commented for the bug#1891621, starts here  */
717 /*      l_field_is_overridable := 0;
718     j := l_override_fields_tab.first;
719 
720     --check whether this class category type is overridable
721     WHILE j IS NOT NULL LOOP
722         IF l_override_fields_tab(j).pa_field_name = 'CLASSIFICATION'
723         AND upper(l_override_fields_tab(j).type) = upper(p_class_categories(i).class_category)
724         THEN
725             l_field_is_overridable := 1;
726             EXIT;
727 
728         END IF;
729         j := l_override_fields_tab.next(j);
730     END LOOP;
731 
732     IF l_field_is_overridable <> 1  --if not overridable error else insert
733     THEN
734 
735         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
736         THEN
737              pa_interface_utils_pub.map_new_amg_msg
738               ( p_old_message_code => 'PA_CLASS_CAT_NOT_OVERRIDABLE'
739                ,p_msg_attribute    => 'CHANGE'
740                ,p_resize_flag      => 'Y'
741                ,p_msg_context      => 'PROJ'
742                ,p_attribute1       => l_amg_segment1
743                ,p_attribute2       => ''
744                ,p_attribute3       => ''
745                ,p_attribute4       => ''
746                ,p_attribute5       => '');
747         END IF;
748 
749             p_multiple_task_msg := 'F';
750 --          RAISE FND_API.G_EXC_ERROR;
751 
752     ELSE
753 */
754 /* code commented for the bug#1891621, ends here */
755 /* dbms_output.put_line('Trying to insert'); */
756 
757 /*  dbms_output.put_line('1:'||p_class_categories(i).class_category
758               ||'2:'||p_class_categories(i).class_code
759               ||'3:'||fnd_global.user_id
760               ||'4:'||sysdate
761               ||'5:'||fnd_global.user_id
762               ||'6:'||fnd_global.login_id
763               ||'7:'||p_project_id
764               ||'8:'||sysdate);     */
765 
766 
767          -- Check whether the category is valid for this project type
768 
769       /* commented for performance bug fix 3693217
770        OPEN l_valid_category_csr(p_project_id, p_class_categories(i).class_category);
771        FETCH l_valid_category_csr INTO l_dummy;
772        if l_valid_category_csr%NOTFOUND then
773           l_dummy := 'N';
774        end if;
775        CLOSE l_valid_category_csr;*/
776 
777       /* Start of Code for Performance Bug Fix 3693217  */
778 
779        -- Review Comment Incorporated - If not found in Cursor1 ,then go for the cursor2
780        --                               If not found in Cursor2 also ,then only set l_dummy as 'N'
781 
782        OPEN l_valid_category_csr1(p_project_id, p_class_categories(i).class_category);
783        FETCH l_valid_category_csr1 INTO l_dummy;
784        if l_valid_category_csr1%NOTFOUND then
785           OPEN l_valid_category_csr2(p_class_categories(i).class_category);
786       FETCH l_valid_category_csr2 INTO l_dummy;
787       if l_valid_category_csr2%NOTFOUND then
788              l_dummy := 'N';
789           end if;
790           CLOSE l_valid_category_csr2;
791        end if;
792        CLOSE l_valid_category_csr1;
793       /* End of Code  for Performance Bug Fix 3693217  */
794 
795        -- Check whether percentage is allowed for this category
796        -- Also check that percentage is between 0 and 100
797   /* Bug#2474078 Added a condition to check whether code_percentage has been passed or not, the default value for
798      this parameter is  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, hence code_percentage should not be equal to it */
799        if p_class_categories(i).code_percentage is not null and
800           p_class_categories(i).code_percentage <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
801          OPEN l_check_percentage_csr(p_class_categories(i).class_category);
802          FETCH l_check_percentage_csr INTO l_dummy2;
803          if l_check_percentage_csr%NOTFOUND then
804            l_dummy2 := 'N';
805          elsif (p_class_categories(i).code_percentage < 0) OR
806                (p_class_categories(i).code_percentage > 100) then
807            l_dummy2 := 'N';
808          end if;
809          CLOSE l_check_percentage_csr;
810        end if;
811 
812        IF (check_class_code_valid
813           (p_class_categories(i).class_category,
814            p_class_categories(i).class_code) = 'N') OR
815           (l_dummy = 'N') OR (l_dummy2 = 'N')
816        THEN
817         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
818         THEN
819              pa_interface_utils_pub.map_new_amg_msg
820               ( p_old_message_code => 'PA_INVALID_CLASS_CATEGORY'
821                ,p_msg_attribute    => 'CHANGE'
822                ,p_resize_flag      => 'N'
823                ,p_msg_context      => 'PROJ'
824                ,p_attribute1       => l_amg_segment1
825                ,p_attribute2       => ''
826                ,p_attribute3       => ''
827                ,p_attribute4       => ''
828                ,p_attribute5       => '');
829             END IF;
830 
831             p_multiple_task_msg := 'F';
832 --          RAISE FND_API.G_EXC_ERROR;
833 
834        END IF;
835 
836        /* Modified the following code for bug #3629840. */
837        if p_class_categories(i).code_percentage = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
838           l_code_percentage := NULL;
839        else
840           l_code_percentage := p_class_categories(i).code_percentage;
841        end if;
842 
843        -- If allow_percent_flag is 'Y' and code_percentage is NULL, default to 0
844        if p_class_categories(i).code_percentage is null then
845          OPEN l_get_percent_flag_csr(p_class_categories(i).class_category);
846          FETCH l_get_percent_flag_csr INTO l_allow_percent_flag;
847          if l_get_percent_flag_csr%FOUND then
848            if l_allow_percent_flag = 'Y' then
849              l_code_percentage := 0;
850            end if;
851          end if;
852 
853      /* below line of code also added for Bug 2448159
854          cursor l_get_percent_flag_csr should be closed otherwise we get error
855         'ORA-06511: PL/SQL: cursor already open' while adding multiple class categories */
856      CLOSE l_get_percent_flag_csr;
857        end if;
858 
859        BEGIN -- 5348726 : Added for Bug#5294891
860             INSERT INTO pa_project_classes
861                    (project_id
862                    ,class_category
863                    ,class_code
864                    ,code_percentage
865                    ,object_id
866                    ,object_type
867                    ,last_update_date
868                    ,last_updated_by
869                    ,creation_date
870                    ,created_by
871                    ,last_update_login
872                    ,record_version_number /* Added For bug#2766416 */
873                    )
874             VALUES
875                  ( p_project_id
876                   ,p_class_categories(i).class_category
877                   ,p_class_categories(i).class_code
878                   ,l_code_percentage
879                   ,p_project_id
880                   ,'PA_PROJECTS'
881                   ,sysdate
882                   ,fnd_global.user_id
883                   ,sysdate
884                   ,fnd_global.user_id
885                   ,fnd_global.login_id
886                   ,0 /* Added for bug#2766416 */
887                  );
888 
889        EXCEPTION  -- 5348726 : Exception block added for Bug#5294891
890            WHEN DUP_VAL_ON_INDEX THEN
891                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
892                     pa_interface_utils_pub.map_new_amg_msg
893                       ( p_old_message_code => 'PA_DUPLICATE_CLASS_CATG'
894                        ,p_msg_attribute    => 'CHANGE'
895                        ,p_resize_flag      => 'Y'
896                        ,p_msg_context      => ''
897                        ,p_attribute1       => ''
898                        ,p_attribute2       => ''
899                        ,p_attribute3       => ''
900                        ,p_attribute4       => ''
901                        ,p_attribute5       => '');
902                      p_multiple_task_msg := 'F';
903                      exit;
904                END IF;
905        END;
906 
907 END IF;--IF (p_class_categories(i).class_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
908 
909     i := p_class_categories.next(i);
910 
911     END LOOP; --class categories
912 
913    /* code addition for bug 2448159 starts*/
914    /* check if after insertion the constraint is being violated or not */
915 
916     i := p_class_categories.first;
917 
918     WHILE i IS NOT NULL LOOP
919 
920            OPEN l_pick_one_code_only_flag (p_class_categories(i).class_category);
921            FETCH l_pick_one_code_only_flag INTO l_pick_one_code_only;
922            if l_pick_one_code_only_flag%NOTFOUND then
923             l_pick_one_code_only := null;
924            end if;
925            CLOSE l_pick_one_code_only_flag;
926 
927            IF l_pick_one_code_only = 'Y' THEN
928 
929             Open l_get_code_count(p_project_id , p_class_categories(i).class_category);
930             FETCH l_get_code_count into l_count;
931             CLOSE l_get_code_count;
932 
933             IF l_count > 1 THEN
934                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
935                      pa_interface_utils_pub.map_new_amg_msg
936                       ( p_old_message_code => 'PA_ONE_CODE_ONLY_CLASS'
937                        ,p_msg_attribute    => 'CHANGE'
938                        ,p_resize_flag      => 'Y'   /* Bug 2888297 Changed N to Y */
939                        ,p_msg_context      => 'PROJ'
940                        ,p_attribute1       => l_amg_segment1
941                        ,p_attribute2       => ''
942                        ,p_attribute3       => ''
943                        ,p_attribute4       => ''
944                        ,p_attribute5       => '');
945 
946                                        p_multiple_task_msg := 'F';
947                 END IF;
948 
949             END IF;
950            END IF;
951            i := p_class_categories.next(i);
952     END LOOP;
953    /* code addition for bug 2448159 ends */
954 
955    IF p_multiple_task_msg = 'F'
956    THEN
957       RAISE FND_API.G_EXC_ERROR;
958    END IF;
959 
960 EXCEPTION
961 
962     WHEN FND_API.G_EXC_ERROR
963     THEN
964 /* dbms_output.put_line('handling an G_EXC_ERROR exception'); */
965     ROLLBACK TO add_class_categories_pvt;
966 
967     p_return_status := FND_API.G_RET_STS_ERROR;
968 
969     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
970     THEN
971 /* dbms_output.put_line('handling an G_EXC_UNEXPECTED_ERROR exception'); */
972     ROLLBACK TO add_class_categories_pvt;
973 
974     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
975 
976     WHEN OTHERS THEN
977 /* dbms_output.put_line('handling an OTHERS exception'); */
978     ROLLBACK TO add_class_categories_pvt;
979 
980     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
981 
982     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
983     THEN
984         FND_MSG_PUB.add_exc_msg
985                 ( p_pkg_name        => G_PKG_NAME
986                 , p_procedure_name  => l_api_name   );
987 
988     END IF;
989 
990 END add_class_categories;
991 
992 --====================================================================================
993 --Name:               add_task_round_one
994 --Type:               Procedure
995 --Description:        This procedure can be used to add a task to a new or already
996 --            existing project. This procedure should always be used together
997 --            with add_task_round_two.
998 --
999 --
1000 --Called subprograms: none
1001 --
1002 --
1003 --
1004 --History:
1005 --    15-AUG-1996        L. de Werker    Created
1006 --    10_dec-1996    L. de Werker    Enabled the use of task addresses
1007 --    09-01-2006    vkadimes    Changes are tagged with Bug Number 4689326.
1008 PROCEDURE add_task_round_one
1009 (p_return_status            OUT NOCOPY VARCHAR2 -- 4537865 Added nocopy hint
1010 ,p_project_rec              IN  pa_projects%rowtype
1011 ,p_task_rec             IN  pa_project_pub.task_in_rec_type
1012 ,p_project_type_class_code      IN  pa_project_types.project_type_class_code%type
1013 ,p_service_type_code            IN  pa_project_types.service_type_code%type
1014 ,p_task_id              OUT NOCOPY NUMBER                      ) -- 4537865 Added nocopy hint
1015 IS
1016 
1017    CURSOR l_customer_csr( p_project_id NUMBER )
1018    IS
1019    SELECT   customer_id
1020    FROM     pa_project_customers
1021    WHERE    project_id = p_project_id;
1022 
1023    -- 4363092 TCA changes, replaced RA views with HZ tables
1024 
1025    /*
1026    CURSOR l_address_csr(p_customer_id NUMBER, p_address_id NUMBER )
1027    IS
1028    SELECT   'x'
1029    FROM     ra_addresses
1030    WHERE    customer_id = p_customer_id
1031    AND      address_id = p_address_id;
1032    */
1033 
1034    CURSOR l_address_csr(p_customer_id NUMBER, p_address_id NUMBER )
1035    IS
1036    SELECT   'x'
1037    FROM
1038          hz_cust_acct_sites_all acct_site
1039    WHERE
1040          acct_site.cust_account_id = p_customer_id
1041    AND   acct_site.cust_acct_site_id = p_address_id;
1042    -- 4363092 end
1043 
1044    CURSOR l_service_type_csr( p_service_type_code VARCHAR2 )
1045    IS
1046    SELECT 'x'
1047    FROM    pa_lookups
1048    WHERE  lookup_type = 'SERVICE TYPE'
1049    AND    lookup_code = p_service_type_code;
1050 
1051    l_api_name           CONSTANT    VARCHAR2(30)        := 'add_task_round_one';
1052    l_task_id            NUMBER;
1053    l_project_id         NUMBER;
1054    l_task_in_rec        pa_project_pub.task_in_rec_type;
1055    l_wbs_level          NUMBER :=1;
1056    l_dummy          VARCHAR2(1);
1057    l_customer_id        NUMBER;
1058    l_address_id         NUMBER;
1059    l_address_valid      VARCHAR2(1);
1060    l_attribute_category             VARCHAR2(30);
1061    l_attribute1                 VARCHAR2(150);
1062    l_attribute2                 VARCHAR2(150);
1063    l_attribute3                 VARCHAR2(150);
1064    l_attribute4                 VARCHAR2(150);
1065    l_attribute5                 VARCHAR2(150);
1066    l_attribute6                 VARCHAR2(150);
1067    l_attribute7                 VARCHAR2(150);
1068    l_attribute8                 VARCHAR2(150);
1069    l_attribute9                 VARCHAR2(150);
1070    l_attribute10                VARCHAR2(150);
1071    --bug 6153503
1072    l_return_msg                  varchar2(2000);
1073    l_validate_status             varchar2(1);
1074    --end bug 6153503
1075    l_allow_cross_charge_flag    VARCHAR2(1);
1076    l_project_rate_type   PA_PROJECTS.PROJECT_RATE_TYPE%type ; --bug2170388
1077    l_project_rate_date    DATE;
1078    l_actual_start_date                  DATE;
1079    l_actual_finish_date             DATE;
1080    l_early_start_date                   DATE;
1081    l_early_finish_date                  DATE;
1082    l_late_start_date                    DATE;
1083    l_late_finish_date                   DATE;
1084    l_scheduled_start_date           DATE;
1085    l_scheduled_finish_date          DATE;
1086    l_cc_process_labor_flag    VARCHAR2(1);
1087    l_labor_tp_schedule_id    NUMBER;
1088    l_labor_tp_fixed_date    DATE;
1089    l_cc_process_nl_flag    VARCHAR2(1);
1090    l_nl_tp_schedule_id    NUMBER;
1091    l_nl_tp_fixed_date    DATE;
1092    l_receive_project_invoice_flag    VARCHAR2(1);
1093    l_work_type_id         NUMBER;
1094    l_emp_bill_rate_schedule_id         NUMBER;
1095    l_job_bill_rate_schedule_id         NUMBER;
1096 
1097 --Sakthi MCB
1098    l_non_lab_std_bill_rt_sch_id        NUMBER;
1099    l_taskfunc_cost_rate_date           DATE;
1100    l_taskfunc_cost_rate_type           VARCHAR2(30);
1101 
1102    l_non_labor_disc_reason_code        VARCHAR2(30);
1103    l_labor_disc_reason_code        VARCHAR2(30);
1104 
1105    l_competence_match_wt                    NUMBER;
1106    l_availability_match_wt                  NUMBER;
1107    l_job_level_match_wt                     NUMBER;
1108    l_enable_automated_search           VARCHAR2(1);
1109    l_search_min_availability                NUMBER;
1110    l_search_org_hier_id                     NUMBER;
1111    l_search_starting_org_id                 NUMBER;
1112    l_search_country_code               VARCHAR2(2);
1113    l_min_cand_score_reqd_for_num       NUMBER;
1114    l_invproc_currency_type             VARCHAR2(30);
1115    l_revproc_currency_code             VARCHAR2(15);
1116    l_project_bil_rate_date_code        VARCHAR2(30);
1117    l_project_bil_rate_type             VARCHAR2(30);
1118    l_project_bil_rate_date             DATE;
1119    l_project_bil_exchange_rate         NUMBER;
1120    l_projfunc_currency_code            VARCHAR2(15);
1121    l_projfunc_bil_rate_date_code       VARCHAR2(30);
1122    l_projfunc_bil_rate_type            VARCHAR2(30);
1123    l_projfunc_bil_rate_date            DATE;
1124    l_projfunc_bil_exchange_rate        NUMBER;
1125    l_funding_rate_date_code            VARCHAR2(30);
1126    l_funding_rate_type                 VARCHAR2(30);
1127    l_funding_rate_date                 DATE;
1128    l_funding_exchange_rate             NUMBER;
1129    l_baseline_funding_flag             VARCHAR2(1);
1130    l_projfunc_cost_rate_type           VARCHAR2(30);
1131    l_projfunc_cost_rate_date           DATE;
1132    l_inv_by_bill_trans_curr_flag       VARCHAR2(1);
1133    l_multi_currency_billing_flag       VARCHAR2(1);
1134 --Sakthi MCB
1135 
1136 --Sakthi Structure
1137 
1138    l_assign_precedes_task              VARCHAR2(1);
1139    l_split_cost_from_wokplan_flag     VARCHAR2(1);
1140    l_split_cost_from_bill_flag         VARCHAR2(1);
1141 
1142 --Sakthi Structure
1143 
1144 --PA L Changes 2872708
1145    l_retirement_cost_flag             VARCHAR2(1):= 'N';   --bug 2959252; defaulting to 'N'
1146    l_cint_eligible_flag               VARCHAR2(1):= 'N';   --bug 2959252; defaulting to 'N'
1147    l_cint_stop_date                   DATE;
1148 --End PA L Changes 2872708
1149 
1150 
1151 --Sakthi MCB
1152 
1153    l_out_start_date             DATE;
1154    l_out_completion_date        DATE;
1155    l_error_code               NUMBER;
1156    l_error_message              VARCHAR2(100);
1157    l_temp                     VARCHAR2(1);
1158 
1159 l_amg_segment1       VARCHAR2(25);
1160 l_amg_task_number       VARCHAR2(50);
1161 
1162 --needed to get the field values associated to a AMG message
1163 
1164    CURSOR   l_amg_project_csr
1165       (p_pa_project_id pa_projects.project_id%type)
1166    IS
1167    SELECT   segment1
1168    FROM     pa_projects p
1169    WHERE p.project_id = p_pa_project_id;
1170 
1171 --needed to get the default field values
1172 
1173    CURSOR   l_default_project_csr
1174       (p_pa_project_id pa_projects.project_id%type)
1175    IS
1176    SELECT   allow_cross_charge_flag,
1177             project_rate_date,
1178             project_rate_type,
1179             cc_process_labor_flag,
1180             labor_tp_schedule_id,
1181             labor_tp_fixed_date,
1182             cc_process_nl_flag,
1183             nl_tp_schedule_id,
1184             nl_tp_fixed_date,
1185             work_type_id,
1186             emp_bill_rate_schedule_id,
1187             job_bill_rate_schedule_id,
1188             projfunc_cost_rate_type,
1189             projfunc_cost_rate_date,
1190             non_lab_std_bill_rt_sch_id
1191 --Sakthi MCB
1192 /*
1193             competence_match_wt,
1194             availability_match_wt,
1195             job_level_match_wt,
1196             enable_automated_search,
1197             search_min_availability,
1198             search_org_hier_id,
1199             search_starting_org_id,
1200             search_country_code,
1201             min_cand_score_reqd_for_nom,
1202             non_lab_std_bill_rt_scr_id,
1203             invproc_currency_type,
1204             revproc_currency_code,
1205             project_bil_rate_date_code,
1206             project_bil_rate_type,
1207             project_bil_rate_date,
1208             project_bil_exchange_rate,
1209             profunc_currency_code,
1210             projfunc_bil_rate_date_Code,
1211             projfunc_bil_rate_type,
1212             projfunc_bil_rate_date,
1213             projfunc_bil_exchange_rate,
1214             funding_rate_date_Code,
1215             funding_rate_type,
1216             funding_rate_date,
1217             funding_exchange_rate,
1218             baseline_funding_flag,
1219             projfunc_cost_rate_type,
1220             projfunc_cost_rate_date,
1221             inv_by_bill_trans_curr_flag,
1222             multi_currency_billing_flag,
1223 --Sakthi MCB
1224 --Sakthi Structure
1225             assign_precedes_task,
1226             split_cost_from_workplan_flag,
1227             split_cost_from_bill_flag
1228 --Sakthi Structure
1229 */
1230    FROM     pa_projects p
1231    WHERE p.project_id = p_pa_project_id;
1232 
1233 -- Fix for Bug # 1335417
1234 -- needed for update of Fixed Date( p_cost_ind_sch_fixed_date)
1235 
1236    CURSOR l_ind_rate_schedule_type_csr( p_cost_ind_rate_sch_id NUMBER)
1237    IS
1238    SELECT       ind_rate_schedule_type
1239    FROM         pa_ind_rate_schedules
1240    WHERE        ind_rate_sch_id = p_cost_ind_rate_sch_id;
1241 
1242    --Bug 3279981
1243    --The revenue acrual method for the task needs to be defaulted from the (new) project
1244    CURSOR cur_get_rev_acc_mth IS
1245    SELECT revenue_accrual_method
1246    FROM   pa_projects_all
1247    WHERE project_id = p_project_rec.project_id;
1248 
1249    CURSOR cur_get_inv_mth IS
1250    SELECT invoice_method
1251    FROM   pa_projects_all
1252    WHERE project_id = p_project_rec.project_id;
1253 
1254    CURSOR cur_get_def_top_task_cust IS
1255    SELECT customer_id
1256    FROM   pa_project_customers
1257    WHERE  project_id = p_project_rec.project_id
1258    AND    default_top_task_cust_flag = 'Y';
1259 
1260 
1261 -- Fix for Bug # 1335417
1262    l_temp_var_sch_type                         VARCHAR2(1);
1263 
1264 -- (Begin Venkat) FP_M changes
1265    l_revenue_accrual_method    VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
1266    l_invoice_method            VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
1267    l_customer_id1              NUMBER;
1268    l_gen_etc_source_code       VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
1269 -- (End Venkat) FP_M changes
1270 
1271 -- rtarway, 3658479
1272    l_labor_cost_multiplier_name VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
1273 
1274    --BUG 3924597, added by rtarway for etc source default
1275    l_ref_task_id               NUMBER ;
1276    L_WP_SEPARATE_FROM_FIN      VARCHAR2(1);
1277    L_RETURN_STATUS             VARCHAR2(1);
1278 
1279    CURSOR get_gen_etc_source_code (l_task_id NUMBER, l_project_id NUMBER)
1280    IS
1281    select gen_etc_source_code
1282    from pa_tasks
1283    where
1284        task_id = l_task_id
1285    and project_id = l_project_id ;
1286    --End BUG 3924597, added by rtarway for etc source default
1287 
1288 -- Start of addition for 4378507
1289    CURSOR   l_task_csr
1290         (p_project_id NUMBER
1291         ,p_pm_task_reference VARCHAR2)
1292    IS
1293    SELECT   t.TOP_TASK_ID
1294    FROM     pa_tasks t
1295    WHERE    t.project_id = p_project_id
1296    AND      t.pm_task_reference = p_pm_task_reference;
1297 
1298 
1299    CURSOR   l_task_id_csr
1300         (p_project_id NUMBER
1301         ,p_task_id NUMBER)
1302    IS
1303    SELECT   t.TOP_TASK_ID
1304    FROM     pa_tasks t
1305    WHERE    t.project_id = p_project_id
1306    AND      t.task_id = p_task_id;
1307 
1308    l_parent_TOP_TASK_ID pa_tasks.TOP_TASK_ID%type;
1309 --End of addition for 4378507
1310 -- Added for bug# 4689326
1311 CURSOR l_customer_parent_task (l_p_parent_task_id NUMBER) IS
1312  SELECT customer_id FROM  pa_tasks WHERE task_id=l_p_parent_task_id;
1313 
1314 BEGIN
1315 
1316 --  Standard begin of API savepoint
1317 
1318     SAVEPOINT add_task_round_one_pvt;
1319 
1320 
1321 --  Set API return status to success
1322 
1323     p_return_status := FND_API.G_RET_STS_SUCCESS;
1324 
1325     -- copy the incoming parameters to local variables
1326     l_task_in_rec   := p_task_rec;
1327     l_project_id    := p_project_rec.project_id;
1328 
1329 -- Get segment1 for AMG messages
1330 
1331    OPEN l_amg_project_csr( l_project_id );
1332    FETCH l_amg_project_csr INTO l_amg_segment1;
1333    CLOSE l_amg_project_csr;
1334 
1335    l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
1336     (p_task_number=> l_task_in_rec.task_name
1337     ,p_task_reference => l_task_in_rec.pm_task_reference
1338     ,p_task_id => '');
1339 
1340     --Refuse tasks if pm_task_reference is not provided
1341     --Refuse tasks if task_name is not provided
1342 
1343     IF l_task_in_rec.pm_task_reference IS NULL
1344     OR l_task_in_rec.pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1345     THEN
1346         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1347         THEN
1348              pa_interface_utils_pub.map_new_amg_msg
1349               ( p_old_message_code => 'PA_TASK_REF_IS_NULL'
1350                ,p_msg_attribute    => 'CHANGE'
1351                ,p_resize_flag      => 'N'
1352                ,p_msg_context      => 'PROJ'
1353                ,p_attribute1       => l_amg_segment1
1354                ,p_attribute2       => ''
1355                ,p_attribute3       => ''
1356                ,p_attribute4       => ''
1357                ,p_attribute5       => '');
1358         END IF;
1359 
1360         RAISE FND_API.G_EXC_ERROR;
1361 
1362     END IF;
1363 
1364     IF l_task_in_rec.task_name IS NULL
1365     OR l_task_in_rec.task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1366     THEN
1367         p_return_status := FND_API.G_RET_STS_ERROR;
1368 
1369         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1370         THEN
1371              pa_interface_utils_pub.map_new_amg_msg
1372               ( p_old_message_code => 'PA_TASK_NAME_IS_NULL'
1373                ,p_msg_attribute    => 'CHANGE'
1374                ,p_resize_flag      => 'N'
1375                ,p_msg_context      => 'TASK'
1376                ,p_attribute1       => l_amg_segment1
1377                ,p_attribute2       => l_amg_task_number
1378                ,p_attribute3       => ''
1379                ,p_attribute4       => ''
1380                ,p_attribute5       => '');
1381         END IF;
1382 
1383         RAISE FND_API.G_EXC_ERROR;
1384 
1385     END IF;
1386    IF l_task_in_rec.pa_task_number IS NULL OR
1387       l_task_in_rec.pa_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1388       l_task_in_rec.pa_task_number   := l_task_in_rec.pm_task_reference;
1389    END IF;
1390 
1391     --setting defaults for MISSING values if appropriate
1392     IF l_task_in_rec.ready_to_bill_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1393     OR l_task_in_rec.ready_to_bill_flag IS NULL
1394     THEN
1395         l_task_in_rec.ready_to_bill_flag := 'N';   --will be defaulted to 'Y' for the top task
1396     END IF;                     -- in the second round
1397 
1398     IF l_task_in_rec.ready_to_distribute_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1399     OR l_task_in_rec.ready_to_distribute_flag IS NULL
1400     THEN
1401         l_task_in_rec.ready_to_distribute_flag := 'N'; -- will be defaulted to 'Y' for the top task
1402     END IF;                         -- in the second round
1403 
1404          /* Added for bug#2666913 */
1405 
1406     If l_task_in_rec.billable_flag = 'Y' and p_project_type_class_code = 'INDIRECT'
1407     THEN
1408                 p_return_status := FND_API.G_RET_STS_ERROR;
1409 
1410         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1411         THEN
1412         pa_interface_utils_pub.map_new_amg_msg
1413               ( p_old_message_code => 'PA_PR_INDIRECT_NO_BILLING'
1414                ,p_msg_attribute    => 'CHANGE'
1415                ,p_resize_flag      => 'N'
1416                ,p_msg_context      => 'TASK'
1417                ,p_attribute1       => l_amg_segment1
1418                ,p_attribute2       => l_amg_task_number
1419                ,p_attribute3       => ''
1420                ,p_attribute4       => ''
1421                ,p_attribute5       => '');
1422         END IF;
1423 
1424         RAISE FND_API.G_EXC_ERROR;
1425 
1426     END IF;
1427 
1428     /* end of code added for bug #2666913 */
1429 
1430 
1431     IF l_task_in_rec.billable_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1432     AND (l_task_in_rec.pm_parent_task_reference IS NULL
1433     OR l_task_in_rec.pm_parent_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
1434     THEN
1435         IF  p_project_type_class_code = 'INDIRECT'  --will be defaulted to the billable_flag of the
1436         THEN    l_task_in_rec.billable_flag := 'N'; --parent_task for non top_level tasks
1437         ELSE    l_task_in_rec.billable_flag := 'Y'; --in the second round
1438         END IF;
1439     END IF;
1440 
1441     IF l_task_in_rec.chargeable_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1442     THEN l_task_in_rec.chargeable_flag := 'Y';
1443     END IF;
1444 
1445     IF l_task_in_rec.limit_to_txn_controls_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1446     THEN l_task_in_rec.limit_to_txn_controls_flag := 'N';
1447     END IF;
1448 
1449     --Defaulting for task manager (same as task manager of the parent) is done in the second round.
1450     IF l_task_in_rec.task_manager_person_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1451     THEN
1452         l_task_in_rec.task_manager_person_id := NULL;
1453     END IF;
1454 
1455 
1456     --check whether this is the address of one of the project customers
1457 /* dbms_output.put_line('Ref    : '||l_task_in_rec.pm_task_reference); */
1458 
1459     IF l_task_in_rec.address_id IS NOT NULL
1460     AND l_task_in_rec.address_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1461     THEN
1462 
1463         OPEN l_customer_csr( p_project_rec.project_id );
1464         FETCH l_customer_csr INTO l_customer_id;
1465 
1466 /* dbms_output.put_line('Customer: '||l_customer_id); */
1467 
1468         l_address_valid:= 'N';
1469 
1470         WHILE l_customer_csr%FOUND LOOP
1471 
1472             OPEN l_address_csr(l_customer_id, l_task_in_rec.address_id);
1473             FETCH l_address_csr INTO l_dummy;
1474 
1475             IF l_address_csr%FOUND
1476             THEN
1477                 l_address_valid:= 'Y';
1478                 EXIT;
1479                 END IF;
1480 
1481                 CLOSE l_address_csr;
1482 
1483                 FETCH l_customer_csr INTO l_customer_id;
1484             END LOOP;
1485 
1486             CLOSE l_customer_csr;
1487 
1488         IF l_address_valid = 'N'
1489         THEN
1490                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1491             THEN
1492              pa_interface_utils_pub.map_new_amg_msg
1493               ( p_old_message_code => 'PA_TASK_ADDRESS_INVALID'
1494                ,p_msg_attribute    => 'CHANGE'
1495                ,p_resize_flag      => 'N'
1496                ,p_msg_context      => 'TASK'
1497                ,p_attribute1       => l_amg_segment1
1498                ,p_attribute2       => l_amg_task_number
1499                ,p_attribute3       => ''
1500                ,p_attribute4       => ''
1501                ,p_attribute5       => '');
1502                     END IF;
1503                     RAISE  FND_API.G_EXC_ERROR;
1504         ELSE
1505 
1506                 l_address_id := l_task_in_rec.address_id;
1507         END IF;
1508 
1509 
1510     ELSE
1511         l_address_id := NULL;
1512     END IF;
1513 
1514 -- SERVICE_TYPE_CODE
1515 
1516        IF p_service_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1517        AND nvl(p_service_type_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1518         <> nvl(l_task_in_rec.service_type_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1519        AND p_service_type_code IS NOT NULL  --redundant, but added for clarity
1520        THEN
1521 
1522       OPEN l_service_type_csr( p_service_type_code );
1523       FETCH l_service_type_csr INTO l_temp;
1524 
1525       IF l_service_type_csr%NOTFOUND
1526       THEN
1527 
1528       CLOSE l_service_type_csr;
1529       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1530       THEN
1531              pa_interface_utils_pub.map_new_amg_msg
1532               ( p_old_message_code => 'PA_SERVICE_TYPE_INVALID'
1533                ,p_msg_attribute    => 'CHANGE'
1534                ,p_resize_flag      => 'N'
1535                ,p_msg_context      => 'TASK'
1536                ,p_attribute1       => l_amg_segment1
1537                ,p_attribute2       => l_amg_task_number
1538                ,p_attribute3       => ''
1539                ,p_attribute4       => ''
1540                ,p_attribute5       => '');
1541                END IF;
1542                RAISE  FND_API.G_EXC_ERROR;
1543 
1544       END IF;
1545 
1546       CLOSE l_service_type_csr;
1547 
1548      END IF;
1549 
1550 -- Start fix for Bug #1335417
1551 
1552     IF  (l_task_in_rec.cost_ind_sch_fixed_date  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
1553         AND (nvl(l_task_in_rec.cost_ind_sch_fixed_date,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
1554            <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
1555         AND l_task_in_rec.cost_ind_sch_fixed_date IS NOT NULL  --redundant, but added for clarity
1556         THEN
1557            OPEN l_ind_rate_schedule_type_csr( l_task_in_rec.cost_ind_rate_sch_id);
1558            FETCH l_ind_rate_schedule_type_csr INTO l_temp_var_sch_type;
1559            IF l_temp_var_sch_type = 'P'
1560            THEN
1561                 CLOSE l_ind_rate_schedule_type_csr;
1562                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1563                 THEN
1564                      pa_interface_utils_pub.map_new_amg_msg
1565                      ( p_old_message_code => 'PA_CANT_FIX_DATE_PROV_SCH'
1566                       ,p_msg_attribute    => 'CHANGE'
1567                       ,p_resize_flag      => 'N'
1568                       ,p_msg_context      => 'TASK'
1569                       ,p_attribute1       => l_amg_segment1
1570                       ,p_attribute2       => l_amg_task_number
1571                       ,p_attribute3       => ''
1572                       ,p_attribute4       => ''
1573                       ,p_attribute5       => '');
1574                 END IF;
1575                 RAISE  FND_API.G_EXC_ERROR;
1576            END IF;
1577            CLOSE l_ind_rate_schedule_type_csr;
1578       END IF;
1579 
1580 -- End fix for bug # 1335417
1581 
1582 
1583     --The following fields will be defaulted for non top_level tasks to be the same as their parent task
1584     --in the second ROUND.
1585 
1586         IF l_task_in_rec.service_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1587         OR l_task_in_rec.service_type_code IS NULL
1588         THEN
1589             l_task_in_rec.service_type_code := p_service_type_code; --defaulted from the project type
1590         END IF;
1591 /* dbms_output.put_line('service_type_code: '||l_task_in_rec.service_type_code); */
1592 
1593 /* dbms_output.put_line('org id (task rec): - before init- '||
1594                       to_char(l_task_in_rec.carrying_out_organization_id) ||
1595                      'org id of project rec before init- '||
1596                       to_char(p_project_rec.carrying_out_organization_id));
1597 */
1598 
1599         IF l_task_in_rec.carrying_out_organization_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1600         OR l_task_in_rec.carrying_out_organization_id IS NULL
1601         THEN
1602             l_task_in_rec.carrying_out_organization_id := p_project_rec.carrying_out_organization_id;
1603         END IF;
1604 
1605 /* dbms_output.put_line('Carrying out org id (task rec): '||l_task_in_rec.carrying_out_organization_id); */
1606 
1607                IF l_task_in_rec.task_description =
1608                   PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1609                   l_task_in_rec.task_description := NULL;
1610                END IF;
1611 --  Call the client extension to override the default values for
1612 --  project start/completion dates
1613 
1614  /*
1615        IF l_task_in_rec.actual_start_date IS NULL OR
1616           l_task_in_rec.actual_start_date =
1617             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1618           l_actual_start_date := NULL;
1619        ELSE
1620           l_actual_start_date := l_task_in_rec.actual_start_date;
1621        END IF;
1622 
1623        IF l_task_in_rec.actual_finish_date IS NULL OR
1624           l_task_in_rec.actual_finish_date =
1625             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1626           l_actual_finish_date := NULL;
1627        ELSE
1628           l_actual_finish_date := l_task_in_rec.actual_finish_date;
1629        END IF;
1630 */   --Task progress cahnegs : These dates should be passed from task progress and ignore from AMG
1631 
1632        l_actual_start_date := null;
1633        l_actual_finish_date := null;
1634 
1635        IF l_task_in_rec.early_start_date IS NULL OR
1636           l_task_in_rec.early_start_date =
1637             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1638           l_early_start_date := NULL;
1639        ELSE
1640           l_early_start_date := l_task_in_rec.early_start_date;
1641        END IF;
1642 
1643 
1644        IF l_task_in_rec.early_start_date IS NULL OR
1645           l_task_in_rec.early_start_date =
1646             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1647           l_early_start_date := NULL;
1648        ELSE
1649           l_early_start_date := l_task_in_rec.early_start_date;
1650        END IF;
1651 
1652 
1653        IF l_task_in_rec.early_finish_date IS NULL OR
1654           l_task_in_rec.early_finish_date =
1655             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1656           l_early_finish_date := NULL;
1657        ELSE
1658           l_early_finish_date := l_task_in_rec.early_finish_date;
1659        END IF;
1660 
1661 
1662        IF l_task_in_rec.late_start_date IS NULL OR
1663           l_task_in_rec.late_start_date =
1664             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1665           l_late_start_date := NULL;
1666        ELSE
1667           l_late_start_date := l_task_in_rec.late_start_date;
1668        END IF;
1669 
1670        IF l_task_in_rec.late_finish_date IS NULL OR
1671           l_task_in_rec.late_finish_date =
1672             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1673           l_late_finish_date := NULL;
1674        ELSE
1675           l_late_finish_date := l_task_in_rec.late_finish_date;
1676        END IF;
1677 
1678        IF l_task_in_rec.scheduled_start_date IS NULL OR
1679           l_task_in_rec.scheduled_start_date =
1680             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1681           l_scheduled_start_date := NULL;
1682        ELSE
1683           l_scheduled_start_date := l_task_in_rec.scheduled_start_date;
1684        END IF;
1685 
1686        IF l_task_in_rec.scheduled_finish_date IS NULL OR
1687           l_task_in_rec.scheduled_finish_date =
1688             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1689           l_scheduled_finish_date := NULL;
1690        ELSE
1691           l_scheduled_finish_date := l_task_in_rec.scheduled_finish_date;
1692        END IF;
1693 
1694        PA_Client_Extn_PM.customize_dates (
1695        p_pm_task_reference          => l_task_in_rec.pm_task_reference,
1696        p_pm_product_code            => p_project_rec.pm_product_code,
1697        p_in_start_date              => l_task_in_rec.task_start_date,
1698        p_in_completion_date         => l_task_in_rec.task_completion_date,
1699        p_actual_start_date          => l_actual_start_date,
1700        p_actual_finish_date         => l_actual_finish_date,
1701        p_early_start_date           => l_early_start_date,
1702        p_early_finish_date          => l_early_finish_date,
1703        p_late_start_date            => l_late_start_date,
1704        p_late_finish_date           => l_late_finish_date,
1705        p_scheduled_start_date       => l_scheduled_start_date,
1706        p_scheduled_finish_date      => l_scheduled_finish_date,
1707        p_out_start_date             => l_out_start_date,
1708        p_out_completion_date        => l_out_completion_date,
1709        p_error_code         => l_error_code,
1710        p_error_message          => l_error_message );
1711 
1712       IF l_error_code <> 0 THEN
1713      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1714              pa_interface_utils_pub.map_new_amg_msg
1715               ( p_old_message_code => 'PA_ERROR_IN_CLIENT_EXTN'
1716                ,p_msg_attribute    => 'CHANGE'
1717                ,p_resize_flag      => 'N'
1718                ,p_msg_context      => 'TASK'
1719                ,p_attribute1       => l_amg_segment1
1720                ,p_attribute2       => l_amg_task_number
1721                ,p_attribute3       => ''
1722                ,p_attribute4       => ''
1723                ,p_attribute5       => '');
1724          END IF;
1725          RAISE  FND_API.G_EXC_ERROR;
1726       END IF;
1727       l_task_in_rec.task_start_date := l_out_start_date;
1728       l_task_in_rec.task_completion_date := l_out_completion_date;
1729 
1730  --bug 2732788
1731       IF ( l_task_in_rec.task_start_date IS NULL  AND
1732            l_task_in_rec.task_completion_date IS NOT NULL )
1733       THEN
1734           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1735                    THEN
1736              pa_interface_utils_pub.map_new_amg_msg
1737               ( p_old_message_code => 'PA_TASK_ST_DATE_NULL'
1738                ,p_msg_attribute    => 'CHANGE'
1739                ,p_resize_flag      => 'N'
1740                ,p_msg_context      => 'TASK'
1741                ,p_attribute1       => l_amg_segment1
1742                ,p_attribute2       => l_amg_task_number
1743                ,p_attribute3       => ''
1744                ,p_attribute4       => ''
1745                ,p_attribute5       => '');
1746            END IF;
1747            RAISE  FND_API.G_EXC_ERROR;
1748       END IF;
1749  --bug 2732788
1750 
1751       IF ( l_task_in_rec.task_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1752          AND l_task_in_rec.task_start_date IS NOT NULL )
1753       THEN
1754          IF l_task_in_rec.task_completion_date
1755             <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
1756             l_task_in_rec.task_completion_date IS NOT NULL
1757          AND l_task_in_rec.task_completion_date < l_task_in_rec.task_start_date
1758          THEN
1759         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1760            THEN
1761              pa_interface_utils_pub.map_new_amg_msg
1762               ( p_old_message_code => 'PA_TASK_DATES_INVALID'
1763                ,p_msg_attribute    => 'CHANGE'
1764                ,p_resize_flag      => 'N'
1765                ,p_msg_context      => 'TASK'
1766                ,p_attribute1       => l_amg_segment1
1767                ,p_attribute2       => l_amg_task_number
1768                ,p_attribute3       => ''
1769                ,p_attribute4       => ''
1770                ,p_attribute5       => '');
1771                 END IF;
1772                 RAISE  FND_API.G_EXC_ERROR;
1773          END IF;
1774       END IF;
1775 
1776 /* Bug#2530525-Commenting the condition which checks for date being null as project
1777 start date should not be assigned when null is passed for the date variable */
1778 
1779      IF l_task_in_rec.task_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1780 /*           OR l_task_in_rec.task_start_date IS NULL Commented for bug#2530525 */
1781         THEN
1782     l_task_in_rec.task_start_date := p_project_rec.start_date;
1783      END IF;
1784 
1785      IF l_task_in_rec.task_completion_date =
1786         PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1787 /*          OR l_task_in_rec.task_completion_date IS NULL  Commented for bug#2530525 */
1788 THEN
1789         l_task_in_rec.task_completion_date := p_project_rec.completion_date;
1790      END IF;
1791 
1792      IF l_task_in_rec.task_start_date < p_project_rec.start_date OR
1793         l_task_in_rec.task_start_date > p_project_rec.completion_date
1794         THEN
1795         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1796         THEN
1797              pa_interface_utils_pub.map_new_amg_msg
1798               ( p_old_message_code => 'PA_TK_OUTSIDE_PROJECT_RANGE'
1799                ,p_msg_attribute    => 'CHANGE'
1800                ,p_resize_flag      => 'Y'
1801                ,p_msg_context      => 'TASK'
1802                ,p_attribute1       => l_amg_segment1
1803                ,p_attribute2       => l_amg_task_number
1804                ,p_attribute3       => ''
1805                ,p_attribute4       => ''
1806                ,p_attribute5       => '');
1807                 END IF;
1808                 RAISE  FND_API.G_EXC_ERROR;
1809      END IF;
1810 
1811 
1812      IF l_task_in_rec.task_completion_date < p_project_rec.start_date OR
1813         l_task_in_rec.task_completion_date > p_project_rec.completion_date
1814         THEN
1815         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1816         THEN
1817              pa_interface_utils_pub.map_new_amg_msg
1818               ( p_old_message_code => 'PA_TK_OUTSIDE_PROJECT_RANGE'
1819                ,p_msg_attribute    => 'CHANGE'
1820                ,p_resize_flag      => 'Y'
1821                ,p_msg_context      => 'TASK'
1822                ,p_attribute1       => l_amg_segment1
1823                ,p_attribute2       => l_amg_task_number
1824                ,p_attribute3       => ''
1825                ,p_attribute4       => ''
1826                ,p_attribute5       => '');
1827                 END IF;
1828                 RAISE  FND_API.G_EXC_ERROR;
1829      END IF;
1830 
1831         IF l_task_in_rec.cost_ind_rate_sch_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1832         THEN
1833             l_task_in_rec.cost_ind_rate_sch_id := p_project_rec.cost_ind_rate_sch_id;
1834         END IF;
1835 
1836         IF l_task_in_rec.cost_ind_sch_fixed_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1837         THEN
1838             l_task_in_rec.cost_ind_sch_fixed_date := p_project_rec.cost_ind_sch_fixed_date;
1839         END IF;
1840 
1841         IF l_task_in_rec.labor_sch_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1842         THEN
1843             l_task_in_rec.labor_sch_type := p_project_rec.labor_sch_type;
1844         END IF;
1845 
1846         IF l_task_in_rec.labor_bill_rate_org_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1847         THEN
1848             l_task_in_rec.labor_bill_rate_org_id := p_project_rec.labor_bill_rate_org_id;
1849         END IF;
1850 
1851         IF l_task_in_rec.labor_std_bill_rate_schdl = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1852         THEN
1853             l_task_in_rec.labor_std_bill_rate_schdl := p_project_rec.labor_std_bill_rate_schdl;
1854         END IF;
1855 
1856         IF l_task_in_rec.labor_schedule_discount = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1857         THEN
1858             l_task_in_rec.labor_schedule_discount := p_project_rec.labor_schedule_discount;
1859         END IF;
1860 
1861         IF l_task_in_rec.labor_schedule_fixed_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1862         THEN
1863             l_task_in_rec.labor_schedule_fixed_date := p_project_rec.labor_schedule_fixed_date;
1864         END IF;
1865 
1866         IF l_task_in_rec.non_labor_sch_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1867         THEN
1868             l_task_in_rec.non_labor_sch_type := p_project_rec.non_labor_sch_type;
1869         END IF;
1870 
1871         IF l_task_in_rec.non_labor_bill_rate_org_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1872         THEN
1873             l_task_in_rec.non_labor_bill_rate_org_id := p_project_rec.non_labor_bill_rate_org_id;
1874         END IF;
1875 
1876         IF l_task_in_rec.non_labor_std_bill_rate_schdl = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1877         THEN
1878             l_task_in_rec.non_labor_std_bill_rate_schdl := p_project_rec.non_labor_std_bill_rate_schdl;
1879         END IF;
1880 
1881         IF l_task_in_rec.non_labor_schedule_discount = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1882         THEN
1883             l_task_in_rec.non_labor_schedule_discount := p_project_rec.non_labor_schedule_discount;
1884         END IF;
1885 
1886         IF l_task_in_rec.non_labor_schedule_fixed_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1887         THEN
1888             l_task_in_rec.non_labor_schedule_fixed_date := p_project_rec.non_labor_schedule_fixed_date;
1889         END IF;
1890 
1891         IF l_task_in_rec.rev_ind_rate_sch_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1892         THEN
1893             l_task_in_rec.rev_ind_rate_sch_id := p_project_rec.rev_ind_rate_sch_id;
1894         END IF;
1895 
1896         IF l_task_in_rec.rev_ind_sch_fixed_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1897         THEN
1898             l_task_in_rec.rev_ind_sch_fixed_date := p_project_rec.rev_ind_sch_fixed_date;
1899         END IF;
1900 
1901         IF l_task_in_rec.inv_ind_rate_sch_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1902         THEN
1903             l_task_in_rec.inv_ind_rate_sch_id := p_project_rec.inv_ind_rate_sch_id;
1904         END IF;
1905 
1906         IF l_task_in_rec.inv_ind_sch_fixed_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1907         THEN
1908             l_task_in_rec.inv_ind_sch_fixed_date := p_project_rec.inv_ind_sch_fixed_date;
1909         END IF;
1910     --bug 6153503 added below if condition
1911     IF l_task_in_rec.tasks_dff = 'Y' THEN
1912      --When descriptive flex fields are not passed set them to NULL
1913      IF l_task_in_rec.attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1914      THEN
1915         l_attribute_category := NULL;
1916      ELSE
1917     l_attribute_category := l_task_in_rec.attribute_category;
1918      END IF;
1919      IF l_task_in_rec.attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1920      THEN
1921         l_attribute1 := NULL;
1922      ELSE
1923     l_attribute1 := l_task_in_rec.attribute1;
1924      END IF;
1925      IF l_task_in_rec.attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1926      THEN
1927         l_attribute2 := NULL;
1928      ELSE
1929     l_attribute2 := l_task_in_rec.attribute2;
1930      END IF;
1931      IF l_task_in_rec.attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1932      THEN
1933         l_attribute3 := NULL;
1934      ELSE
1935     l_attribute3 := l_task_in_rec.attribute3;
1936      END IF;
1937      IF l_task_in_rec.attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1938      THEN
1939         l_attribute4 := NULL;
1940      ELSE
1941     l_attribute4 := l_task_in_rec.attribute4;
1942      END IF;
1943 
1944      IF l_task_in_rec.attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1945      THEN
1946         l_attribute5 := NULL;
1947      ELSE
1948     l_attribute5 := l_task_in_rec.attribute5;
1949      END IF;
1950 
1951      IF l_task_in_rec.attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1952      THEN
1953         l_attribute6 := NULL;
1954      ELSE
1955     l_attribute6 := l_task_in_rec.attribute6;
1956      END IF;
1957 
1958      IF l_task_in_rec.attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1959      THEN
1960         l_attribute7 := NULL;
1961      ELSE
1962     l_attribute7 := l_task_in_rec.attribute7;
1963      END IF;
1964 
1965      IF l_task_in_rec.attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1966      THEN
1967         l_attribute8 := NULL;
1968      ELSE
1969     l_attribute8 := l_task_in_rec.attribute8;
1970      END IF;
1971      IF l_task_in_rec.attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1972      THEN
1973         l_attribute9 := NULL;
1974      ELSE
1975     l_attribute9 := l_task_in_rec.attribute9;
1976      END IF;
1977      IF l_task_in_rec.attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1978      THEN
1979         l_attribute10 := NULL;
1980      ELSE
1981     l_attribute10 := l_task_in_rec.attribute10;
1982      END IF;
1983 
1984           --bug 6153503 added below validation.
1985          pa_task_utils.validate_flex_fields(
1986               p_desc_flex_name        => 'PA_TASKS_DESC_FLEX'
1987              ,p_attribute_category    => l_attribute_category
1988              ,p_attribute1            => l_attribute1
1989              ,p_attribute2            => l_attribute2
1990              ,p_attribute3            => l_attribute3
1991              ,p_attribute4            => l_attribute4
1992              ,p_attribute5            => l_attribute5
1993              ,p_attribute6            => l_attribute6
1994              ,p_attribute7            => l_attribute7
1995              ,p_attribute8            => l_attribute8
1996              ,p_attribute9            => l_attribute9
1997              ,p_attribute10           => l_attribute10
1998              ,p_RETURN_msg            => l_return_msg
1999              ,p_validate_status       => l_validate_status
2000              );
2001 
2002          IF l_validate_status = 'N'
2003             THEN
2004                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2005                  THEN
2006                       pa_interface_utils_pub.map_new_amg_msg
2007                                 ( p_old_message_code => 'PA_INVALID_FF_VALUES'
2008                                 ,p_msg_attribute    => 'CHANGE'
2009                                 ,p_resize_flag      => 'N'
2010                                 ,p_msg_context      => 'FLEX'
2011                                 ,p_attribute1       => l_return_msg
2012                                 ,p_attribute2       => ''
2013                                 ,p_attribute3       => ''
2014                                 ,p_attribute4       => ''
2015                                 ,p_attribute5       => '');
2016                 END IF;
2017             RAISE FND_API.G_EXC_ERROR;
2018           END IF;
2019     END IF;
2020 
2021 -- Multi National Currency changes Starts ...
2022 
2023 -- Get segment1 for AMG messages
2024 
2025    OPEN l_default_project_csr( l_project_id );
2026    FETCH l_default_project_csr
2027     INTO l_allow_cross_charge_flag,
2028          l_project_rate_date,
2029          l_project_rate_type,
2030          l_cc_process_labor_flag,
2031          l_labor_tp_schedule_id,
2032          l_labor_tp_fixed_date,
2033          l_cc_process_nl_flag,
2034          l_nl_tp_schedule_id,
2035          l_nl_tp_fixed_date,
2036          l_work_type_id,
2037          l_emp_bill_rate_schedule_id,
2038          l_job_bill_rate_schedule_id,
2039          l_taskfunc_cost_rate_type,
2040          l_taskfunc_cost_rate_date,
2041          l_non_lab_std_bill_rt_sch_id;
2042    CLOSE l_default_project_csr;
2043 
2044      IF l_task_in_rec.allow_cross_charge_flag <>
2045 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2046      THEN
2047    l_allow_cross_charge_flag := l_task_in_rec.allow_cross_charge_flag;
2048      END IF;
2049 
2050      IF l_task_in_rec.project_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2051      THEN
2052    l_project_rate_type := l_task_in_rec.project_rate_type;
2053      END IF;
2054 
2055      IF l_task_in_rec.project_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2056      THEN
2057    l_project_rate_date := l_task_in_rec.project_rate_date;
2058      END IF;
2059 
2060 -- Multi National Currency changes Ends ...
2061 
2062 -- IC_CHANGES Starts ...
2063 
2064      IF l_task_in_rec.cc_process_labor_flag <>
2065 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2066      THEN
2067    l_cc_process_labor_flag := l_task_in_rec.cc_process_labor_flag;
2068      END IF;
2069 
2070      --Added NVL for Bug 6026370
2071      IF nvl( l_task_in_rec.labor_tp_schedule_id,-999) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2072      THEN
2073         l_labor_tp_schedule_id := l_task_in_rec.labor_tp_schedule_id;
2074      END IF;
2075 
2076      --Added NVL for Bug 6026370
2077      IF nvl(l_task_in_rec.labor_tp_fixed_date,sysdate) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2078      THEN
2079       l_labor_tp_fixed_date := l_task_in_rec.labor_tp_fixed_date;
2080      END IF;
2081 
2082      IF l_task_in_rec.cc_process_nl_flag <>
2083 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2084      THEN
2085    l_cc_process_nl_flag := l_task_in_rec.cc_process_nl_flag;
2086      END IF;
2087 
2088      --Added NVL for Bug 6026370
2089      IF nvl(l_task_in_rec.nl_tp_schedule_id,-999) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2090      THEN
2091         l_nl_tp_schedule_id := l_task_in_rec.nl_tp_schedule_id;
2092      END IF;
2093 
2094      --Added NVL for Bug 6026370
2095      IF nvl(l_task_in_rec.nl_tp_fixed_date,sysdate) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2096      THEN
2097       l_nl_tp_fixed_date := l_task_in_rec.nl_tp_fixed_date;
2098      END IF;
2099 
2100      IF l_task_in_rec.receive_project_invoice_flag =
2101 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2102      THEN
2103       l_receive_project_invoice_flag := 'N';
2104      ELSE
2105       l_receive_project_invoice_flag := l_task_in_rec.receive_project_invoice_flag;
2106      END IF;
2107 
2108      IF l_task_in_rec.work_type_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2109      THEN
2110         l_work_type_id := l_task_in_rec.work_type_id;
2111      END IF;
2112 
2113 -- IC_CHANGES Ends ...
2114 
2115      IF l_task_in_rec.emp_bill_rate_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2116      THEN
2117         l_emp_bill_rate_schedule_id := l_task_in_rec.emp_bill_rate_schedule_id;
2118      END IF;
2119 
2120      IF l_task_in_rec.job_bill_rate_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2121      THEN
2122         l_job_bill_rate_schedule_id := l_task_in_rec.job_bill_rate_schedule_id;
2123      END IF;
2124 
2125 --Sakthi MCB
2126 
2127      IF l_task_in_rec.non_lab_std_bill_rt_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2128      THEN
2129         l_non_lab_std_bill_rt_sch_id := l_task_in_rec.non_lab_std_bill_rt_sch_id;
2130      END IF;
2131 
2132     IF l_task_in_rec.taskfunc_cost_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2133      THEN
2134       l_taskfunc_cost_rate_date := l_task_in_rec.taskfunc_cost_rate_date;
2135      END IF;
2136 
2137      IF l_task_in_rec.taskfunc_cost_rate_type <>
2138 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2139      THEN
2140    l_taskfunc_cost_rate_type := l_task_in_rec.taskfunc_cost_rate_type;
2141      END IF;
2142 
2143 --Sakthi MCB
2144 
2145      IF l_task_in_rec.labor_disc_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2146      THEN
2147         l_labor_disc_reason_code := l_task_in_rec.labor_disc_reason_code;
2148      END IF;
2149 
2150      IF l_task_in_rec.non_labor_disc_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2151      THEN
2152       l_non_labor_disc_reason_code := l_task_in_rec.non_labor_disc_reason_code;
2153      END IF;
2154 
2155 
2156 --PA L Changes 2872708
2157 
2158      IF l_task_in_rec.retirement_cost_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2159      THEN
2160         l_retirement_cost_flag := l_task_in_rec.retirement_cost_flag;
2161      END IF;
2162 
2163      IF l_task_in_rec.cint_eligible_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2164      THEN
2165         l_cint_eligible_flag := l_task_in_rec.cint_eligible_flag;
2166      END IF;
2167 
2168      IF l_task_in_rec.cint_stop_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2169      THEN
2170         l_cint_stop_date := l_task_in_rec.cint_stop_date;
2171      END IF;
2172 
2173 --End PA L Changes 2872708
2174 
2175 --(Begin Venkat) FP_M changes -------------------------------------
2176 
2177      IF l_task_in_rec.invoice_method <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2178      THEN
2179         l_invoice_method := l_task_in_rec.invoice_method;
2180      END IF;
2181 
2182    /* Commented For Bug 4689326
2183      IF l_task_in_rec.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2184      THEN
2185         l_customer_id1 := l_task_in_rec.customer_id;
2186      END IF;*/
2187      --null check added , BUg # 4101696, rtarway
2188      IF l_task_in_rec.gen_etc_source_code is not null and
2189         l_task_in_rec.gen_etc_source_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2190      THEN
2191         l_gen_etc_source_code := l_task_in_rec.gen_etc_source_code;
2192      --BUG 3924597, added by rtarway for etc source default
2193      else
2194           --Add the logic to default the gen_etc_source_code
2195           --1. get the structure sharing type
2196              l_wp_separate_from_fin := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
2197           --2. get if it is top task, assuming for top task, p_pa_parent_task_id/P_pm_parent_task_reference is null
2198              if (
2199                   (     l_task_in_rec.pa_parent_task_id is null
2200                     or  l_task_in_rec.pa_parent_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2201                   )
2202                  and
2203                  (   l_task_in_rec.pm_parent_task_reference is null
2204                   or l_task_in_rec.pm_parent_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2205                  )
2206                 )
2207              then
2208                  if (nvl(l_wp_separate_from_fin,'N') = 'N')
2209                  then
2210                      l_gen_etc_source_code := 'WORKPLAN_RESOURCES';
2211                  else
2212                      l_gen_etc_source_code := 'FINANCIAL_PLAN';
2213                  end if;
2214              else
2215                  --if not top task , get the l_gen_etc_source_code from its parent task
2216                       if l_task_in_rec.pa_parent_task_id is not null
2217                       then
2218                           l_ref_task_id  :=  l_task_in_rec.pa_parent_task_id ;
2219                       elsif (
2220                       l_task_in_rec.pm_parent_task_reference is not null
2221                       and l_task_in_rec.pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2222                       )
2223                       then
2224                               -- 5262740 Changed Convert_pm_taskref_to_id to PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
2225                               PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
2226                              ( p_pa_project_id => l_project_id
2227                              , p_pa_task_id    => l_task_in_rec.pa_parent_task_id
2228                              , p_pm_task_reference  => l_task_in_rec.pm_parent_task_reference
2229                              , p_out_task_id      => l_ref_task_id
2230                              , p_return_status => l_return_status    );
2231                              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS)
2232                              THEN
2233                                   RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
2234                              END IF;
2235                       end if;
2236                       OPEN get_gen_etc_source_code(l_ref_task_id,l_project_id );
2237                       FETCH  get_gen_etc_source_code into l_gen_etc_source_code;
2238                       CLOSE get_gen_etc_source_code;
2239                       if (l_gen_etc_source_code is null or l_gen_etc_source_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2240                       then
2241                            if (nvl(l_wp_separate_from_fin,'N') = 'N')
2242                            then
2243                                l_gen_etc_source_code := 'WORKPLAN_RESOURCES';
2244                            else
2245                                l_gen_etc_source_code := 'FINANCIAL_PLAN';
2246                            end if;
2247                       end if;
2248              end if;
2249      --End  BUG 3924597, added by rtarway for etc source default
2250      END IF;
2251 --(End Venkat) FP_M changes ---------------------------------------
2252 --( Begin Changes by rtarway for BUG 3658479 )
2253      -- Bug No 3798594 Added elsif to the following if block
2254      IF   l_task_in_rec.labor_cost_multiplier_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2255      THEN
2256          l_labor_cost_multiplier_name := l_task_in_rec.labor_cost_multiplier_name ;
2257      ELSIF(l_task_in_rec.labor_cost_multiplier_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR  l_task_in_rec.labor_cost_multiplier_name is null) THEN
2258 -- Bug No 4609326  Added 'or' condition
2259      l_labor_cost_multiplier_name := null;
2260      END IF;
2261 --( End Changes by rtarway for BUG 3658479 )
2262 
2263 
2264 
2265      --get the unique task id from the Oracle Sequence
2266 
2267     SELECT pa_tasks_s.nextval
2268     INTO l_task_id
2269     FROM DUAL;
2270 /* dbms_output.put_line('Task ID:'||l_task_id); */
2271 
2272     --insert the intermediate result in the database
2273 
2274 /* dbms_output.put_line('Task Ref:'||l_task_in_rec.pm_task_reference); */
2275 /* dbms_output.put_line('Task Name:'||l_task_in_rec.task_name); */
2276 
2277      --Bug 3279981
2278      --The revenue acrual method for the task needs to be defaulted from the project
2279      --Default the invoice method if it has not been passed as a parameter
2280      --Set the customer_id if it has not been passed as a parameter
2281      OPEN  cur_get_rev_acc_mth;
2282      FETCH cur_get_rev_acc_mth INTO l_revenue_accrual_method;
2283      CLOSE cur_get_rev_acc_mth;
2284 
2285      IF l_task_in_rec.invoice_method = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
2286         l_task_in_rec.invoice_method IS Null THEN --For bug 4273729
2287           OPEN  cur_get_inv_mth;
2288           FETCH cur_get_inv_mth INTO l_invoice_method;
2289           CLOSE cur_get_inv_mth;
2290      END IF;
2291 
2292      /* Commented for Bug 4689326
2293      IF l_task_in_rec.customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
2294           OPEN  cur_get_def_top_task_cust;
2295           FETCH cur_get_def_top_task_cust INTO l_customer_id1;
2296           CLOSE cur_get_def_top_task_cust;
2297      END IF;*/
2298      -- Start of Bug Number 4689326 Added this Part of Code
2299      -- to check its a parent task or child task and to add customers accodingly.
2300      IF (l_task_in_rec.pa_parent_task_id IS NULL OR
2301          l_task_in_rec.pa_parent_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
2302         (l_task_in_rec.pm_parent_task_reference is NULL OR
2303             l_task_in_rec.pm_parent_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
2304           IF l_task_in_rec.customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
2305              OPEN  cur_get_def_top_task_cust;
2306              FETCH cur_get_def_top_task_cust INTO l_customer_id1;
2307              CLOSE cur_get_def_top_task_cust;
2308           ELSE
2309           l_customer_id1 := l_task_in_rec.customer_id;
2310           END IF;
2311      ELSE
2312                  OPEN l_customer_parent_task(l_task_in_rec.pa_parent_task_id);
2313                  FETCH l_customer_parent_task INTO l_customer_id1;
2314                  CLOSE l_customer_parent_task;
2315      END IF;
2316 -- End of Bug Number 4689326 .
2317 -- Start of Addition for Bug 4378507.
2318 
2319  IF (l_task_in_rec.pa_parent_task_id IS NOT NULL
2320     AND l_task_in_rec.pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)     OR
2321     (l_task_in_rec.pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2322     AND l_task_in_rec.pm_parent_task_reference IS NOT NULL)
2323     THEN
2324       IF(l_task_in_rec.pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2325       AND l_task_in_rec.pm_parent_task_reference IS NOT NULL)
2326       THEN
2327         OPEN l_task_csr(p_project_rec.project_id,l_task_in_rec.pm_parent_task_reference);
2328         FETCH l_task_csr INTO l_parent_TOP_TASK_ID;
2329 
2330         IF l_task_csr%NOTFOUND
2331         THEN
2332             CLOSE l_task_csr;
2333         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2334             THEN
2335              pa_interface_utils_pub.map_new_amg_msg
2336               ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
2337                ,p_msg_attribute    => 'CHANGE'
2338                ,p_resize_flag      => 'N'
2339                ,p_msg_context      => 'TASK'
2340                ,p_attribute1       => l_amg_segment1
2341                ,p_attribute2       => l_amg_task_number
2342                ,p_attribute3       => ''
2343                ,p_attribute4       => ''
2344                ,p_attribute5       => '');
2345             END IF;
2346             RAISE  FND_API.G_EXC_ERROR;
2347         END IF;
2348             CLOSE l_task_csr;
2349       ELSE
2350             IF (l_task_in_rec.pa_parent_task_id IS NOT NULL AND
2351                    l_task_in_rec.pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
2352                 THEN
2353                 OPEN l_task_id_csr(p_project_rec.project_id,l_task_in_rec.pa_parent_task_id);
2354             FETCH l_task_id_csr INTO l_parent_TOP_TASK_ID;  --l_parent_task_id_rec;
2355             IF l_task_id_csr%NOTFOUND
2356             THEN
2357                 CLOSE l_task_id_csr;
2358                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2359                 THEN
2360                          pa_interface_utils_pub.map_new_amg_msg
2361                           ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
2362                            ,p_msg_attribute    => 'CHANGE'
2363                            ,p_resize_flag      => 'N'
2364                            ,p_msg_context      => 'TASK'
2365                            ,p_attribute1       => l_amg_segment1
2366                            ,p_attribute2       => l_amg_task_number
2367                            ,p_attribute3       => ''
2368                            ,p_attribute4       => ''
2369                            ,p_attribute5       => '');
2370                   END IF;
2371                   RAISE  FND_API.G_EXC_ERROR;
2372              END IF;
2373                 CLOSE l_task_id_csr;
2374             Else
2375            l_parent_TOP_TASK_ID := l_task_id;
2376             END IF;
2377         END IF ;
2378     Else
2379        l_parent_TOP_TASK_ID := l_task_id;
2380     END IF;
2381 
2382     -- End of Addition for Bug 4378507.
2383 
2384     INSERT INTO pa_tasks
2385     (           task_id
2386                ,project_id
2387            ,pm_task_reference
2388                ,task_number
2389                ,task_name
2390                ,long_task_name
2391                ,last_update_date
2392                ,last_updated_by
2393                ,creation_date
2394                ,created_by
2395                ,last_update_login
2396                ,wbs_level
2397                ,top_task_id
2398                ,parent_task_id
2399            ,address_id
2400                ,ready_to_bill_flag
2401                ,ready_to_distribute_flag
2402                ,billable_flag
2403                ,chargeable_flag
2404                ,limit_to_txn_controls_flag
2405                ,description
2406                ,service_type_code
2407                ,task_manager_person_id
2408                ,carrying_out_organization_id
2409                ,start_date
2410                ,completion_date
2411                ,labor_std_bill_rate_schdl
2412                ,labor_bill_rate_org_id
2413                ,labor_schedule_fixed_date
2414                ,labor_schedule_discount
2415                ,non_labor_std_bill_rate_schdl
2416                ,non_labor_bill_rate_org_id
2417                ,non_labor_schedule_fixed_date
2418                ,non_labor_schedule_discount
2419            ,cost_ind_rate_sch_id
2420                ,rev_ind_rate_sch_id
2421                ,inv_ind_rate_sch_id
2422                ,cost_ind_sch_fixed_date
2423                ,rev_ind_sch_fixed_date
2424                ,inv_ind_sch_fixed_date
2425                ,labor_sch_type
2426                ,non_labor_sch_type
2427                    ,attribute_category
2428                    ,attribute1
2429                    ,attribute2
2430                    ,attribute3
2431                    ,attribute4
2432                    ,attribute5
2433                    ,attribute6
2434                    ,attribute7
2435                    ,attribute8
2436                    ,attribute9
2437                    ,attribute10
2438                    ,allow_cross_charge_flag
2439                    ,project_rate_type
2440                    ,project_rate_date
2441                       ,pm_product_code
2442                    ,actual_start_date
2443                    ,actual_finish_date
2444                    ,early_start_date
2445                    ,early_finish_date
2446                    ,late_start_date
2447                    ,late_finish_date
2448                    ,scheduled_start_date
2449                    ,scheduled_finish_date
2450                    ,cc_process_labor_flag
2451                    ,labor_tp_schedule_id
2452                    ,labor_tp_fixed_date
2453                    ,cc_process_nl_flag
2454                    ,nl_tp_schedule_id
2455                    ,nl_tp_fixed_date
2456                    ,receive_project_invoice_flag
2457                    ,work_type_id
2458                    ,emp_bill_rate_schedule_id
2459                    ,job_bill_rate_schedule_id
2460                    ,non_lab_std_bill_rt_sch_id
2461                    ,taskfunc_cost_rate_type
2462                    ,taskfunc_cost_rate_date
2463                    ,labor_disc_reason_code
2464                    ,non_labor_disc_reason_code
2465 --PA L 2872708
2466                    ,retirement_cost_flag
2467                    ,cint_eligible_flag
2468                    ,cint_stop_date
2469 --PA L 2872708
2470 
2471 --(Begin Venkat) FP_M changes --------------------------------
2472            ,revenue_accrual_method
2473            ,invoice_method
2474                    ,customer_id
2475                    ,gen_etc_source_code
2476 --(End Venkat) FP_M changes --------------------------------
2477 --(Begin Rtarway)
2478                   , LABOR_COST_MULTIPLIER_NAME
2479                   , RECORD_VERSION_NUMBER
2480 --(End rtarway)
2481 
2482 
2483 )
2484     VALUES
2485     (       l_task_id
2486            ,l_project_id
2487            ,rtrim(l_task_in_rec.pm_task_reference)
2488               ,substrb(rtrim(l_task_in_rec.pa_task_number),1,25) -- bug 6193314 . added substrb
2489            ,substrb(rtrim(l_task_in_rec.task_name),1,20)      -- bug 6193314 . added substrb
2490            ,rtrim(l_task_in_rec.long_task_name)
2491            ,sysdate
2492            ,fnd_global.user_id
2493            ,sysdate
2494            ,fnd_global.user_id
2495            ,fnd_global.login_id
2496            ,l_wbs_level         --wbs_level will be updated in the 2 round.
2497        ,l_parent_TOP_TASK_ID -- top task id is updated in this  round itself Bug 4378507
2498            --,l_task_id           -- Commented for Bug 4378507 top task id will be updated in the 2 round.
2499            ,null            --parent task id, will be updated in the 2 round
2500            ,l_address_id
2501            ,l_task_in_rec.ready_to_bill_flag
2502            ,l_task_in_rec.ready_to_distribute_flag
2503            ,l_task_in_rec.billable_flag
2504            ,l_task_in_rec.chargeable_flag
2505            ,l_task_in_rec.limit_to_txn_controls_flag
2506            ,rtrim(l_task_in_rec.task_description)
2507            ,l_task_in_rec.service_type_code
2508            ,l_task_in_rec.task_manager_person_id
2509            ,l_task_in_rec.carrying_out_organization_id
2510            ,l_task_in_rec.task_start_date
2511            ,l_task_in_rec.task_completion_date
2512            ,l_task_in_rec.labor_std_bill_rate_schdl
2513            ,l_task_in_rec.labor_bill_rate_org_id
2514            ,l_task_in_rec.labor_schedule_fixed_date
2515            ,l_task_in_rec.labor_schedule_discount
2516            ,l_task_in_rec.non_labor_std_bill_rate_schdl
2517            ,l_task_in_rec.non_labor_bill_rate_org_id
2518            ,l_task_in_rec.non_labor_schedule_fixed_date
2519            ,l_task_in_rec.non_labor_schedule_discount
2520            ,l_task_in_rec.cost_ind_rate_sch_id
2521            ,l_task_in_rec.rev_ind_rate_sch_id
2522            ,l_task_in_rec.inv_ind_rate_sch_id
2523            ,l_task_in_rec.cost_ind_sch_fixed_date
2524            ,l_task_in_rec.rev_ind_sch_fixed_date
2525            ,l_task_in_rec.inv_ind_sch_fixed_date
2526            ,l_task_in_rec.labor_sch_type
2527            ,l_task_in_rec.non_labor_sch_type
2528                    ,rtrim(l_attribute_category)
2529                    ,rtrim(l_attribute1)
2530                    ,rtrim(l_attribute2)
2531                    ,rtrim(l_attribute3)
2532                    ,rtrim(l_attribute4)
2533                    ,rtrim(l_attribute5)
2534                    ,rtrim(l_attribute6)
2535                    ,rtrim(l_attribute7)
2536                    ,rtrim(l_attribute8)
2537                    ,rtrim(l_attribute9)
2538                    ,rtrim(l_attribute10)
2539                    ,l_allow_cross_charge_flag
2540                    ,l_project_rate_type
2541                    ,l_project_rate_date
2542            ,p_project_rec.pm_product_code
2543                    ,l_actual_start_date
2544                    ,l_actual_finish_date
2545                    ,l_early_start_date
2546                    ,l_early_finish_date
2547                    ,l_late_start_date
2548                    ,l_late_finish_date
2549                    ,l_scheduled_start_date
2550                    ,l_scheduled_finish_date
2551                    ,l_cc_process_labor_flag
2552                    ,l_labor_tp_schedule_id
2553                    ,l_labor_tp_fixed_date
2554                    ,l_cc_process_nl_flag
2555                    ,l_nl_tp_schedule_id
2556                    ,l_nl_tp_fixed_date
2557                    ,l_receive_project_invoice_flag
2558                    ,l_work_type_id
2559                    ,l_emp_bill_rate_schedule_id
2560                    ,l_job_bill_rate_schedule_id
2561                    ,l_non_lab_std_bill_rt_sch_id
2562                    ,l_taskfunc_cost_rate_type
2563                    ,l_taskfunc_cost_rate_date
2564                    ,l_labor_disc_reason_code
2565                    ,l_non_labor_disc_reason_code
2566 --PA L 2872708
2567                    ,l_retirement_cost_flag
2568                    ,l_cint_eligible_flag
2569                    ,l_cint_stop_date
2570 --PA L 2872708
2571 
2572 --(Begin Venkat) FP_M changes --------------------------------
2573                    ,l_revenue_accrual_method
2574                    ,l_invoice_method
2575                    ,l_customer_id1
2576                    ,l_gen_etc_source_code
2577 --(End Venkat) FP_M changes --------------------------------
2578 --(Begin Rtarway, 3658479)
2579                   , l_labor_cost_multiplier_name
2580                   , 1
2581 --(End rtarway , 3658479)
2582                      );
2583     p_task_id := l_task_id;
2584 
2585 EXCEPTION
2586     WHEN FND_API.G_EXC_ERROR
2587     THEN
2588 /* dbms_output.put_line('handling an G_EXC_ERROR exception'); */
2589     ROLLBACK TO add_task_round_one_pvt;
2590     p_return_status := FND_API.G_RET_STS_ERROR;
2591      -- 4537865 RESET OUT PARAMS
2592     p_task_id := NULL ;
2593     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
2594     THEN
2595 /* dbms_output.put_line('handling an G_EXC_UNEXPECTED_ERROR exception'); */
2596     ROLLBACK TO add_task_round_one_pvt;
2597 
2598     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2599 
2600      -- 4537865 RESET OUT PARAMS
2601     p_task_id := NULL ;
2602 
2603     WHEN OTHERS THEN
2604 /* dbms_output.put_line('handling an OTHERS exception'); */
2605     ROLLBACK TO add_task_round_one_pvt;
2606 
2607     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2608 
2609      -- 4537865 RESET OUT PARAMS
2610     p_task_id := NULL ;
2611 
2612     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2613     THEN
2614         FND_MSG_PUB.add_exc_msg
2615                 ( p_pkg_name        => G_PKG_NAME
2616                 , p_procedure_name  => l_api_name   );
2617 
2618     END IF;
2619 
2620 END add_task_round_one;
2621 
2622 --====================================================================================
2623 --Name:               add_task_round_two
2624 --Type:               Procedure
2625 --Description:        This procedure can be used to add a task to a new or already
2626 --            existing project. This procedure should always be used together
2627 --            with add_task_round_one.
2628 --
2629 --
2630 --Called subprograms: none
2631 --
2632 --
2633 --
2634 --History:
2635 --    15-AUG-1996        L. de Werker    Created
2636 --    28-MAY-1999    ODEO            Fixed the three bugs mentioned in header
2637 --
2638 PROCEDURE add_task_round_two
2639 (p_return_status            OUT NOCOPY VARCHAR2 -- 4537865 Added nocopy hint
2640 ,p_project_rec              IN  pa_projects%rowtype
2641 ,p_task_id              IN  NUMBER
2642 ,p_task_rec             IN  pa_project_pub.task_in_rec_type
2643 --Project Structures
2644 ,p_ref_task_id                          IN      NUMBER
2645 ,p_tasks_in                             IN      pa_project_pub.task_in_tbl_type
2646 ,p_tasks_out                            IN      pa_project_pub.task_out_tbl_type
2647 ,p_task_version_id                      OUT     NOCOPY NUMBER -- 4537865 Added nocopy hint
2648 ,p_create_task_structure                IN      VARCHAR2          -- Added new parameter for performance changes. Bug 2931183
2649 --Project Structures
2650     )
2651 
2652 IS
2653 
2654    --needed to get data of a task using project_id and task_reference.
2655 
2656    CURSOR   l_task_csr
2657         (p_project_id NUMBER
2658         ,p_pm_task_reference VARCHAR2)
2659    IS
2660    SELECT   *
2661    FROM     pa_tasks t
2662    WHERE    t.project_id = p_project_id
2663    AND      t.pm_task_reference = p_pm_task_reference;
2664 
2665    --*O
2666    CURSOR   l_task_id_csr
2667         (p_project_id NUMBER
2668         ,p_task_id NUMBER)
2669    IS
2670    SELECT   *
2671    FROM     pa_tasks t
2672    WHERE    t.project_id = p_project_id
2673    AND      t.task_id = p_task_id;
2674 
2675 
2676    l_api_name           CONSTANT    VARCHAR2(30)        := 'add_task_round_two';
2677    l_parent_task_rec        l_task_csr%rowtype;
2678    l_task_id            NUMBER;
2679 
2680    -- 4537865
2681    l_new_task_id            NUMBER;
2682 
2683    l_task_in_rec        pa_project_pub.task_in_rec_type;
2684    l_wbs_level          NUMBER :=1;
2685    l_project_id         NUMBER;
2686    l_top_task_id        NUMBER;
2687    l_parent_task_id     NUMBER;
2688    l_customer_id        NUMBER;                       /* added variable for bug 7495993*/
2689 --   l_address_id           NUMBER;  --address does not get inherited
2690 l_amg_segment1       VARCHAR2(25);
2691 l_amg_task_number       VARCHAR2(50);
2692 
2693 --bug 6153503 added below variables
2694 l_validate_dff               VARCHAR2(1);
2695 l_attribute_category             VARCHAR2(30);
2696 l_attribute1                 VARCHAR2(150);
2697 l_attribute2                 VARCHAR2(150);
2698 l_attribute3                 VARCHAR2(150);
2699 l_attribute4                 VARCHAR2(150);
2700 l_attribute5                 VARCHAR2(150);
2701 l_attribute6                 VARCHAR2(150);
2702 l_attribute7                 VARCHAR2(150);
2703 l_attribute8                 VARCHAR2(150);
2704 l_attribute9                 VARCHAR2(150);
2705 l_attribute10                VARCHAR2(150);
2706 l_attribute11                 VARCHAR2(150);
2707 l_attribute12                 VARCHAR2(150);
2708 l_attribute13                 VARCHAR2(150);
2709 l_attribute14                 VARCHAR2(150);
2710 l_attribute15                 VARCHAR2(150);
2711 
2712 --needed to get the field values associated to a AMG message
2713 
2714    CURSOR   l_amg_project_csr
2715       (p_pa_project_id pa_projects.project_id%type)
2716    IS
2717    SELECT   segment1
2718    FROM     pa_projects p
2719    WHERE p.project_id = p_pa_project_id;
2720 
2721    CURSOR   l_amg_task_csr
2722       (p_pa_task_id pa_tasks.task_id%type)
2723    IS
2724    SELECT   task_number
2725    FROM     pa_tasks p
2726    WHERE p.task_id = p_pa_task_id;
2727 
2728 BEGIN
2729 
2730 --  Standard begin of API savepoint
2731 
2732     SAVEPOINT add_task_round_two_pvt;
2733 
2734 
2735 --  Set API return status to success
2736 
2737     p_return_status := FND_API.G_RET_STS_SUCCESS;
2738 
2739     --copy the incoming parameters to local variables
2740     l_task_in_rec   := p_task_rec;
2741     l_task_id   := p_task_id;
2742     l_project_id    := p_project_rec.project_id;
2743 
2744 -- Get segment1 for AMG messages
2745 
2746    OPEN l_amg_project_csr( l_project_id );
2747    FETCH l_amg_project_csr INTO l_amg_segment1;
2748    CLOSE l_amg_project_csr;
2749 /*
2750    OPEN l_amg_task_csr( l_task_id );
2751    FETCH l_amg_task_csr INTO l_amg_task_number;
2752    CLOSE l_amg_task_csr;
2753 */
2754    l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
2755     (p_task_number=> l_task_in_rec.task_name
2756     ,p_task_reference => l_task_in_rec.pm_task_reference
2757     ,p_task_id => l_task_id);
2758 
2759     --get the task data of the parent task when task is not top task
2760     -- *O
2761     IF (l_task_in_rec.pa_parent_task_id IS NOT NULL
2762     AND l_task_in_rec.pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)     OR
2763     (l_task_in_rec.pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2764     AND l_task_in_rec.pm_parent_task_reference IS NOT NULL)
2765     THEN
2766       IF(l_task_in_rec.pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2767       AND l_task_in_rec.pm_parent_task_reference IS NOT NULL)
2768       THEN
2769         OPEN l_task_csr(p_project_rec.project_id,l_task_in_rec.pm_parent_task_reference);
2770         FETCH l_task_csr INTO l_parent_task_rec;
2771 
2772         IF l_task_csr%NOTFOUND
2773         THEN
2774             CLOSE l_task_csr;
2775             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2776             THEN
2777              pa_interface_utils_pub.map_new_amg_msg
2778               ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
2779                ,p_msg_attribute    => 'CHANGE'
2780                ,p_resize_flag      => 'N'
2781                ,p_msg_context      => 'TASK'
2782                ,p_attribute1       => l_amg_segment1
2783                ,p_attribute2       => l_amg_task_number
2784                ,p_attribute3       => ''
2785                ,p_attribute4       => ''
2786                ,p_attribute5       => '');
2787                     END IF;
2788                     RAISE  FND_API.G_EXC_ERROR;
2789             END IF;
2790             CLOSE l_task_csr;
2791            ELSE
2792             IF (l_task_in_rec.pa_parent_task_id IS NOT NULL AND
2793                    l_task_in_rec.pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
2794                 THEN
2795                 OPEN l_task_id_csr(p_project_rec.project_id,l_task_in_rec.pa_parent_task_id);
2796             FETCH l_task_id_csr INTO l_parent_task_rec;  --l_parent_task_id_rec;
2797 
2798             IF l_task_id_csr%NOTFOUND
2799             THEN
2800                 CLOSE l_task_id_csr;
2801                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2802                 THEN
2803                          pa_interface_utils_pub.map_new_amg_msg
2804                           ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
2805                            ,p_msg_attribute    => 'CHANGE'
2806                            ,p_resize_flag      => 'N'
2807                            ,p_msg_context      => 'TASK'
2808                            ,p_attribute1       => l_amg_segment1
2809                            ,p_attribute2       => l_amg_task_number
2810                            ,p_attribute3       => ''
2811                            ,p_attribute4       => ''
2812                            ,p_attribute5       => '');
2813                         END IF;
2814                         RAISE  FND_API.G_EXC_ERROR;
2815                 END IF;
2816                 CLOSE l_task_id_csr;
2817                 --l_parent_task_rec := l_parent_task_id_rec; -- assign to this rec, because rest of code uses this
2818             END IF;
2819         END IF ;
2820           END IF;
2821 
2822     --make a distinction between "top level tasks" and "non top level tasks"
2823     -- *O
2824 
2825     IF (l_task_in_rec.pa_parent_task_id IS NULL
2826     OR l_task_in_rec.pa_parent_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)  AND
2827     (l_task_in_rec.pm_parent_task_reference IS NULL
2828     OR l_task_in_rec.pm_parent_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2829     THEN
2830         l_wbs_level         := 1;
2831         l_top_task_id       := l_task_id;
2832         l_parent_task_id    := NULL;
2833 
2834         IF l_task_in_rec.ready_to_bill_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2835         OR l_task_in_rec.ready_to_bill_flag IS NULL
2836         THEN l_task_in_rec.ready_to_bill_flag := 'Y';
2837         END IF;
2838 
2839         IF l_task_in_rec.ready_to_distribute_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2840         OR l_task_in_rec.ready_to_distribute_flag IS NULL
2841         THEN l_task_in_rec.ready_to_distribute_flag := 'Y';
2842         END IF;
2843 
2844 
2845         UPDATE PA_TASKS
2846         SET
2847          wbs_level          = l_wbs_level
2848         ,top_task_id            = l_top_task_id
2849         ,parent_task_id         = l_parent_task_id
2850         ,ready_to_bill_flag     = l_task_in_rec.ready_to_bill_flag
2851         ,ready_to_distribute_flag   = l_task_in_rec.ready_to_distribute_flag
2852         WHERE project_id = l_project_id
2853         AND task_id = l_task_id;
2854 
2855     ELSE
2856 
2857         l_wbs_level         := l_parent_task_rec.wbs_level + 1;
2858         l_top_task_id       := l_parent_task_rec.top_task_id;
2859         l_parent_task_id    := l_parent_task_rec.task_id;
2860 
2861         select customer_id into l_customer_id
2862         from pa_tasks where task_id =l_parent_task_id;                      /* added for bug 7495993 */
2863 
2864         IF l_task_in_rec.service_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2865         OR l_task_in_rec.service_type_code IS NULL
2866         THEN
2867             l_task_in_rec.service_type_code :=
2868                         l_parent_task_rec.service_type_code;
2869         END IF;
2870 
2871         IF l_task_in_rec.billable_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2872         THEN
2873             l_task_in_rec.billable_flag :=
2874                         l_parent_task_rec.billable_flag;
2875         END IF;
2876 
2877         IF l_task_in_rec.task_manager_person_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2878         THEN
2879             l_task_in_rec.task_manager_person_id :=
2880                         l_parent_task_rec.task_manager_person_id;
2881         END IF;
2882 
2883         IF l_task_in_rec.carrying_out_organization_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2884         OR l_task_in_rec.carrying_out_organization_id IS NULL
2885         THEN
2886             l_task_in_rec.carrying_out_organization_id :=
2887                         l_parent_task_rec.carrying_out_organization_id;
2888         END IF;
2889 
2890         IF l_task_in_rec.task_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2891         THEN
2892             l_task_in_rec.task_start_date := l_parent_task_rec.start_date;
2893         END IF;
2894 
2895         IF l_task_in_rec.task_completion_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2896         THEN
2897             l_task_in_rec.task_completion_date := l_parent_task_rec.completion_date;
2898         END IF;
2899 
2900         IF l_task_in_rec.cost_ind_rate_sch_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2901         THEN
2902             l_task_in_rec.cost_ind_rate_sch_id := l_parent_task_rec.cost_ind_rate_sch_id;
2903         END IF;
2904 
2905         IF l_task_in_rec.cost_ind_sch_fixed_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2906         THEN
2907             l_task_in_rec.cost_ind_sch_fixed_date := l_parent_task_rec.cost_ind_sch_fixed_date;
2908         END IF;
2909 
2910 --      l_address_id := l_parent_task_rec.address_id;  --address does not get inherited
2911 
2912         IF l_task_in_rec.labor_sch_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2913         THEN
2914             l_task_in_rec.labor_sch_type := l_parent_task_rec.labor_sch_type;
2915         END IF;
2916 
2917         IF l_task_in_rec.labor_bill_rate_org_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2918         THEN
2919             l_task_in_rec.labor_bill_rate_org_id := l_parent_task_rec.labor_bill_rate_org_id;
2920         END IF;
2921 
2922         IF l_task_in_rec.labor_std_bill_rate_schdl = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2923         THEN
2924             l_task_in_rec.labor_std_bill_rate_schdl := l_parent_task_rec.labor_std_bill_rate_schdl;
2925         END IF;
2926 
2927         IF l_task_in_rec.labor_schedule_discount = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2928         THEN
2929             l_task_in_rec.labor_schedule_discount := l_parent_task_rec.labor_schedule_discount;
2930         END IF;
2931 
2932         IF l_task_in_rec.labor_schedule_fixed_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2933         THEN
2934             l_task_in_rec.labor_schedule_fixed_date := l_parent_task_rec.labor_schedule_fixed_date;
2935         END IF;
2936 
2937         IF l_task_in_rec.non_labor_sch_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2938         THEN
2939             l_task_in_rec.non_labor_sch_type := l_parent_task_rec.non_labor_sch_type;
2940         END IF;
2941 
2942         IF l_task_in_rec.non_labor_bill_rate_org_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2943         THEN
2944             l_task_in_rec.non_labor_bill_rate_org_id := l_parent_task_rec.non_labor_bill_rate_org_id;
2945         END IF;
2946 
2947         IF l_task_in_rec.non_labor_std_bill_rate_schdl = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2948         THEN
2949             l_task_in_rec.non_labor_std_bill_rate_schdl := l_parent_task_rec.non_labor_std_bill_rate_schdl;
2950         END IF;
2951 
2952         IF l_task_in_rec.non_labor_schedule_discount = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2953         THEN
2954             l_task_in_rec.non_labor_schedule_discount := l_parent_task_rec.non_labor_schedule_discount;
2955         END IF;
2956 
2957         IF l_task_in_rec.non_labor_schedule_fixed_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2958         THEN
2959             l_task_in_rec.non_labor_schedule_fixed_date := l_parent_task_rec.non_labor_schedule_fixed_date;
2960         END IF;
2961 
2962         IF l_task_in_rec.rev_ind_rate_sch_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2963         THEN
2964             l_task_in_rec.rev_ind_rate_sch_id := l_parent_task_rec.rev_ind_rate_sch_id;
2965         END IF;
2966 
2967         IF l_task_in_rec.rev_ind_sch_fixed_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2968         THEN
2969             l_task_in_rec.rev_ind_sch_fixed_date := l_parent_task_rec.rev_ind_sch_fixed_date;
2970         END IF;
2971 
2972         IF l_task_in_rec.inv_ind_rate_sch_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2973         THEN
2974             l_task_in_rec.inv_ind_rate_sch_id := l_parent_task_rec.inv_ind_rate_sch_id;
2975         END IF;
2976 
2977         IF l_task_in_rec.inv_ind_sch_fixed_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2978         THEN
2979             l_task_in_rec.inv_ind_sch_fixed_date :=
2980                         l_parent_task_rec.inv_ind_sch_fixed_date;
2981         END IF;
2982         --BUG 3924597 Added by rtarway for FP.M, etc_source defaulting changes
2983         --null check added , bug # 4101696, rtarway,
2984         --since gen_etc_source_code will never be null, we should default it in case it is passed as null.
2985         IF l_task_in_rec.gen_etc_source_code  is null OR
2986            l_task_in_rec.gen_etc_source_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2987         THEN
2988             if ( l_parent_task_rec.gen_etc_source_code is not null AND --BUG 4101696 , rtarway , or modified to and
2989                  l_parent_task_rec.gen_etc_source_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
2990             then l_task_in_rec.gen_etc_source_code :=
2991                         l_parent_task_rec.gen_etc_source_code;
2992             else
2993                  if (nvl (PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN ( l_project_id ), 'N') = 'N')
2994                  then
2995                   l_task_in_rec.gen_etc_source_code := 'WORKPLAN_RESOURCES';
2996                  else
2997                   l_task_in_rec.gen_etc_source_code := 'FINANCIAL_PLAN';
2998                  end if;
2999             end if;
3000         END IF;
3001         --End Add BUG 3924597 Added by rtarway for FP.M, etc_source defaulting changes
3002 
3003                 /* Added following code to fix the bug # 878682 */
3004                 /* This code was added to validate child task dates with its
3005                    parent task. Child Task should always fall in the date range
3006                    of its parent task. */
3007 
3008                 IF l_task_in_rec.task_start_date < l_parent_task_rec.start_date OR
3009                     l_task_in_rec.task_start_date > l_parent_task_rec.completion_date
3010 
3011                 THEN
3012                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3013                 THEN
3014                    pa_interface_utils_pub.map_new_amg_msg
3015                    ( p_old_message_code => 'PA_PARENT_START_LATER'
3016                      ,p_msg_attribute    => 'CHANGE'
3017                      ,p_resize_flag      => 'N'
3018                      ,p_msg_context      => 'TASK'
3019                      ,p_attribute1       => l_amg_segment1
3020                      ,p_attribute2       => l_amg_task_number
3021                      ,p_attribute3       => ''
3022                      ,p_attribute4       => ''
3023                      ,p_attribute5       => '');
3024                 END IF;
3025                 RAISE  FND_API.G_EXC_ERROR;
3026                 END IF;
3027 
3028                 IF l_task_in_rec.task_completion_date < l_parent_task_rec.start_date OR
3029                    l_task_in_rec.task_completion_date > l_parent_task_rec.completion_date
3030 
3031                  THEN
3032                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3033                   THEN
3034                      pa_interface_utils_pub.map_new_amg_msg
3035                     ( p_old_message_code => 'PA_PARENT_COMPL_EARLIER'
3036                      ,p_msg_attribute    => 'CHANGE'
3037                      ,p_resize_flag      => 'N'
3038                      ,p_msg_context      => 'TASK'
3039                      ,p_attribute1       => l_amg_segment1
3040                      ,p_attribute2       => l_amg_task_number
3041                      ,p_attribute3       => ''
3042                      ,p_attribute4       => ''
3043                      ,p_attribute5       => '');
3044                   END IF;
3045                   RAISE  FND_API.G_EXC_ERROR;
3046                 END IF;
3047 
3048                 /* Patch ends for the bug # 878682 */
3049 
3050         UPDATE  PA_TASKS
3051         SET
3052          wbs_level          = l_wbs_level
3053         ,top_task_id            = l_top_task_id
3054         ,parent_task_id         = l_parent_task_id
3055         ,billable_flag          = l_task_in_rec.billable_flag
3056         ,customer_id = l_customer_id                              /* added for bug 7495993*/
3057         ,service_type_code      = l_task_in_rec.service_type_code
3058         ,task_manager_person_id     = l_task_in_rec.task_manager_person_id
3059         ,carrying_out_organization_id   = l_task_in_rec.carrying_out_organization_id
3060         ,start_date         = l_task_in_rec.task_start_date
3061         ,completion_date        = l_task_in_rec.task_completion_date
3062         ,labor_std_bill_rate_schdl  = l_task_in_rec.labor_std_bill_rate_schdl
3063         ,labor_bill_rate_org_id     = l_task_in_rec.labor_bill_rate_org_id
3064         ,labor_schedule_fixed_date  = l_task_in_rec.labor_schedule_fixed_date
3065         ,labor_schedule_discount    = l_task_in_rec.labor_schedule_discount
3066         ,non_labor_std_bill_rate_schdl  = l_task_in_rec.non_labor_std_bill_rate_schdl
3067         ,non_labor_bill_rate_org_id = l_task_in_rec.non_labor_bill_rate_org_id
3068         ,non_labor_schedule_fixed_date  = l_task_in_rec.non_labor_schedule_fixed_date
3069         ,non_labor_schedule_discount    = l_task_in_rec.non_labor_schedule_discount
3070         ,cost_ind_rate_sch_id       = l_task_in_rec.cost_ind_rate_sch_id
3071         ,rev_ind_rate_sch_id        = l_task_in_rec.rev_ind_rate_sch_id
3072         ,inv_ind_rate_sch_id        = l_task_in_rec.inv_ind_rate_sch_id
3073         ,cost_ind_sch_fixed_date    = l_task_in_rec.cost_ind_sch_fixed_date
3074         ,rev_ind_sch_fixed_date     = l_task_in_rec.rev_ind_sch_fixed_date
3075         ,inv_ind_sch_fixed_date     = l_task_in_rec.inv_ind_sch_fixed_date
3076         ,labor_sch_type         = l_task_in_rec.labor_sch_type
3077         ,non_labor_sch_type         = l_task_in_rec.non_labor_sch_type
3078         ,gen_etc_source_code        = l_task_in_rec.gen_etc_source_code -- BUG 3924597 Added by rtarway for FP.M, etc_source defaulting changes
3079         WHERE project_id = l_project_id
3080         AND   task_id    = l_task_id;
3081 
3082 -- Update chargeable_flag for parent if chargeable_flag = 'Y' since
3083 -- we have now created a sub-task
3084                IF l_parent_task_rec.chargeable_flag = 'Y' THEN
3085                   UPDATE pa_tasks
3086                   SET chargeable_flag = 'N'
3087                   WHERE task_id =  l_parent_task_rec.task_id;
3088                END IF;
3089 
3090     END IF;  --distinction between top level tasks and non top level tasks
3091 
3092 /* 4490532
3093     --bug 4279634
3094     --if a lowest level task has sub-projects then make the chargeable flag to 'N'
3095     IF PA_RELATIONSHIP_UTILS.check_task_has_sub_proj(l_project_id,l_task_id,null) = 'Y'
3096     THEN
3097         UPDATE pa_tasks
3098            SET chargeable_flag = 'N'
3099          WHERE task_id =  l_task_id;
3100     END IF;
3101     --end bug 4279634
3102 */
3103 
3104         --Project Structures Changes
3105 
3106      IF p_create_task_structure <> 'N' THEN -- Performance changes. Bug 2931183
3107                                       -- Donot do any structures processing in bulk calling context ie from create_project.
3108         DECLARE
3109             CURSOR cur_pa_tasks
3110             IS
3111               SELECT task_number, long_task_name, description,    --bug 2833194
3112                      parent_task_id,carrying_out_organization_id,
3113                      pm_task_reference, address_id, task_manager_person_id
3114                 FROM pa_tasks
3115                WHERE project_id = l_project_id
3116                  AND task_id = l_task_id;
3117 
3118             l_pa_tasks_rec   cur_pa_tasks%ROWTYPE;
3119             v_task_id_above   NUMBER;
3120             l_msg_count       NUMBER ;
3121             l_msg_data        VARCHAR2(2000);
3122             l_return_status   VARCHAR2(1);
3123 
3124             l_last_index1      Number;
3125             l_first_index1      Number;
3126 
3127             l_index_number    number;
3128             l_task_version_id  NUMBER;
3129         BEGIN
3130 
3131             l_first_index1 := p_tasks_in.first;
3132             l_last_index1 := p_tasks_in.last;
3133 
3134         IF   l_first_index1 IS NOT NULL AND l_last_index1 IS NOT NULL
3135         THEN
3136             for i in l_first_index1..l_last_index1 loop
3137 
3138                 IF l_task_id IS NOT NULL AND  p_tasks_out(i).pa_task_id IS NOT NULL AND
3139                    l_task_id = p_tasks_out(i).pa_task_id
3140                 THEN
3141                     l_index_number := i;
3142                     exit;
3143                 END IF;
3144             end loop;
3145         END IF;
3146 
3147 --            IF p_ref_task_id IS NULL --called from create_project or update_proejct.
3148             IF l_task_id IS NOT NULL AND p_ref_task_id IS NULL AND
3149                l_first_index1 IS NOT NULL AND l_last_index1 IS NOT NULL --called from create_project or update_proejct.
3150             THEN
3151                 IF l_index_number > l_first_index1 AND
3152                    p_tasks_in(l_index_number-1).pa_task_id IS NOT NULL AND
3153                    p_tasks_in(l_index_number-1).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3154                     --existing task becomes the ref_task_id
3155                 THEN
3156                    v_task_id_above := p_tasks_in(l_index_number-1).pa_task_id;  --Get the task above.
3157                 ELSIF l_index_number > l_first_index1 AND
3158                       p_tasks_out(l_index_number-1).pa_task_id IS NOT NULL AND
3159                       p_tasks_out(l_index_number-1).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3160                         --new task becomes the ref_task_id
3161                 THEN
3162                    v_task_id_above := p_tasks_out(l_index_number-1).pa_task_id;  --Get the task above created newly
3163                 ELSIF  ( p_tasks_in(l_index_number).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
3164                          p_tasks_in(l_index_number).pa_task_id IS NULL
3165                           ) AND
3166                        l_index_number = l_first_index1
3167                 THEN
3168                     v_task_id_above := null;  --ref is the structure version. structure version is
3169                                               --derived in PA_PROJ_TASK_STRUC_PUB.create_task_structure API.
3170                 END IF;
3171             ELSE --Called from PA_PROJECT_PUB.ADD_TASK API.
3172                   v_task_id_above := p_ref_task_id;
3173             END IF;
3174 
3175             IF l_task_id IS NOT NULL
3176             THEN
3177                 OPEN cur_pa_tasks;
3178                 FETCH cur_pa_tasks INTO l_pa_tasks_rec;
3179                 CLOSE cur_pa_tasks;
3180 
3181                 --bug 6153503 added below code
3182                 IF l_task_in_rec.tasks_dff = 'Y' THEN
3183                         l_validate_dff          := 'N';
3184                         l_attribute_category     := null;
3185                         l_attribute1             := null;
3186                         l_attribute2             := null;
3187                         l_attribute3             := null;
3188                         l_attribute4             := null;
3189                         l_attribute5             := null;
3190                         l_attribute6             := null;
3191                         l_attribute7             := null;
3192                         l_attribute8             := null;
3193                         l_attribute9             := null;
3194                         l_attribute10            := null;
3195                         l_attribute11            := null;
3196                         l_attribute12            := null;
3197                         l_attribute13            := null;
3198                         l_attribute14            := null;
3199                         l_attribute15            := null;
3200 
3201                 ELSIF l_task_in_rec.tasks_dff = 'N' THEN
3202 
3203                         l_validate_dff           := 'Y';
3204                         l_attribute_category     := l_task_in_rec.attribute_category;
3205                         l_attribute1             := l_task_in_rec.attribute1;
3206                         l_attribute2             := l_task_in_rec.attribute2;
3207                         l_attribute3             := l_task_in_rec.attribute3;
3208                         l_attribute4             := l_task_in_rec.attribute4;
3209                         l_attribute5             := l_task_in_rec.attribute5;
3210                         l_attribute6             := l_task_in_rec.attribute6;
3211                         l_attribute7             := l_task_in_rec.attribute7;
3212                         l_attribute8             := l_task_in_rec.attribute8;
3213                         l_attribute9             := l_task_in_rec.attribute9;
3214                         l_attribute10            := l_task_in_rec.attribute10;
3215                         l_attribute11            := l_task_in_rec.attribute11;
3216                         l_attribute12            := l_task_in_rec.attribute12;
3217                         l_attribute13            := l_task_in_rec.attribute13;
3218                         l_attribute14            := l_task_in_rec.attribute14;
3219                         l_attribute15            := l_task_in_rec.attribute15;
3220                 END IF;
3221 
3222                 PA_PROJ_TASK_STRUC_PUB.CREATE_TASK_STRUCTURE(
3223                       p_calling_module               => 'AMG'
3224                      ,p_project_id                   => l_project_id
3225                      ,p_task_id                      => l_task_id
3226                      ,p_parent_task_id               => l_pa_tasks_rec.parent_task_id
3227                      ,p_ref_task_id                  => v_task_id_above
3228                      ,p_task_number                  => l_pa_tasks_rec.task_number
3229                      ,p_task_name                    => l_pa_tasks_rec.long_task_name   --bug 2833194
3230                      ,p_task_description             => l_pa_tasks_rec.description
3231                      ,p_carrying_out_organization_id => l_pa_tasks_rec.carrying_out_organization_id
3232                      ,p_structure_type               => 'FINANCIAL'
3233                      ,P_PM_SOURCE_CODE               => p_project_rec.pm_product_code
3234                      ,P_PM_SOURCE_reference          => l_pa_tasks_rec.pm_task_reference
3235                      ,p_location_id                  => l_pa_tasks_rec.address_id
3236                      ,p_manager_person_id            => l_pa_tasks_rec.task_manager_person_id
3237                      ,x_task_version_id              => l_task_version_id
3238                      ,x_task_id                      => l_new_task_id -- 4537865 Replaced l_task_id with l_new_task_id
3239                         --for shared structures
3240                         ,p_OBLIGATION_START_DATE        => l_task_in_rec.OBLIGATION_START_DATE
3241                         ,p_OBLIGATION_FINISH_DATE       => l_task_in_rec.OBLIGATION_FINISH_DATE
3242                         ,p_ESTIMATED_START_DATE         => l_task_in_rec.ESTIMATED_START_DATE
3243                         ,p_ESTIMATED_FINISH_DATE        => l_task_in_rec.ESTIMATED_FINISH_DATE
3244                         ,p_BASELINE_START_DATE          => l_task_in_rec.BASELINE_START_DATE
3245                         ,p_BASELINE_FINISH_DATE         => l_task_in_rec.BASELINE_FINISH_DATE
3246                         ,p_CLOSED_DATE                  => l_task_in_rec.CLOSED_DATE
3247                         ,p_WQ_UOM_CODE                  => l_task_in_rec.WQ_UOM_CODE
3248                         ,p_WQ_ITEM_CODE                 => l_task_in_rec.WQ_ITEM_CODE
3249                         ,p_STATUS_CODE                  => l_task_in_rec.STATUS_CODE
3250                         ,p_WF_STATUS_CODE               => l_task_in_rec.WF_STATUS_CODE
3251                         ,p_PRIORITY_CODE                => l_task_in_rec.PRIORITY_CODE
3252                         ,p_MILESTONE_FLAG               => l_task_in_rec.MILESTONE_FLAG
3253                         ,p_CRITICAL_FLAG                => l_task_in_rec.CRITICAL_FLAG
3254                         ,p_INC_PROJ_PROGRESS_FLAG       => l_task_in_rec.INC_PROJ_PROGRESS_FLAG
3255                         ,p_LINK_TASK_FLAG               => l_task_in_rec.LINK_TASK_FLAG
3256                         ,p_CALENDAR_ID                  => l_task_in_rec.CALENDAR_ID
3257                         ,p_PLANNED_EFFORT               => l_task_in_rec.PLANNED_EFFORT
3258                         ,p_DURATION                     => l_task_in_rec.DURATION
3259                         ,p_PLANNED_WORK_QUANTITY        => l_task_in_rec.PLANNED_WORK_QUANTITY
3260                         ,p_TASK_TYPE                    => l_task_in_rec.TASK_TYPE
3261                         ,p_actual_start_date                  => l_task_in_rec.actual_start_date
3262                         ,p_actual_finish_date                 => l_task_in_rec.actual_finish_date
3263                         ,p_early_start_date                   => l_task_in_rec.early_start_date
3264                         ,p_early_finish_date                  => l_task_in_rec.early_finish_date
3265                         ,p_late_start_date                    => l_task_in_rec.late_start_date
3266                         ,p_late_finish_date                   => l_task_in_rec.late_finish_date
3267                         ,p_scheduled_start_date               => l_task_in_rec.scheduled_start_date
3268                         ,p_scheduled_finish_date              => l_task_in_rec.scheduled_finish_date
3269 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
3270             ,p_ext_act_duration         => l_task_in_rec.ext_act_duration
3271             ,p_ext_remain_duration      => l_task_in_rec.ext_remain_duration
3272             ,p_ext_sch_duration     => l_task_in_rec.ext_sch_duration
3273 -- (End venkat) new params for bug #3450684 -------------------------------------------------
3274 
3275 -- set the new params - bug #3654243 ----------------------------------------------
3276             ,p_base_percent_comp_deriv_code => l_task_in_rec.base_percent_comp_deriv_code
3277             ,p_sch_tool_tsk_type_code       => l_task_in_rec.sch_tool_tsk_type_code
3278             ,p_constraint_type_code         => l_task_in_rec.constraint_type_code
3279             ,p_constraint_date              => l_task_in_rec.constraint_date
3280             ,p_free_slack                   => l_task_in_rec.free_slack
3281             ,p_total_slack                  => l_task_in_rec.total_slack
3282             ,p_effort_driven_flag           => l_task_in_rec.effort_driven_flag
3283             ,p_level_assignments_flag       => l_task_in_rec.level_assignments_flag
3284             ,p_invoice_method               => l_task_in_rec.invoice_method
3285             ,p_customer_id                  => l_task_in_rec.customer_id
3286             ,p_gen_etc_source_code          => l_task_in_rec.gen_etc_source_code
3287 -- set the new params - bug #3654243 -------------------------------------------------
3288                      --bug 6153503
3289                      ,p_validate_dff        => l_validate_dff
3290                      ,p_attribute_category  => l_attribute_category
3291                      ,p_attribute1          => l_attribute1
3292                      ,p_attribute2          => l_attribute2
3293                      ,p_attribute3          => l_attribute3
3294                      ,p_attribute4          => l_attribute4
3295                      ,p_attribute5          => l_attribute5
3296                      ,p_attribute6          => l_attribute6
3297                      ,p_attribute7          => l_attribute7
3298                      ,p_attribute8          => l_attribute8
3299                      ,p_attribute9          => l_attribute9
3300                      ,p_attribute10         => l_attribute10
3301                      ,p_attribute11         => l_attribute11
3302                      ,p_attribute12         => l_attribute12
3303                      ,p_attribute13         => l_attribute13
3304                      ,p_attribute14         => l_attribute14
3305                      ,p_attribute15         => l_attribute15
3306                      ,x_msg_count                    => l_msg_count
3307                      ,x_msg_data                     => l_msg_data
3308                      ,x_return_status                => l_return_status
3309                      );
3310 
3311         l_task_id := l_new_task_id ; -- 4537865
3312                IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
3313                THEN
3314                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3315                ELSIF l_return_status = FND_API.G_RET_STS_ERROR
3316                THEN
3317                    RAISE FND_API.G_EXC_ERROR;
3318                END IF;
3319                p_task_version_id := l_task_version_id;
3320 
3321            END IF;
3322         END;
3323      END IF; -- p_create_task_structure <> 'N'  Performance change. Bug 2931183
3324         --Project Structures Changes
3325 
3326 
3327 EXCEPTION
3328 
3329     WHEN FND_API.G_EXC_ERROR
3330     THEN
3331 /* dbms_output.put_line('handling an G_EXC_ERROR exception'); */
3332     ROLLBACK TO add_task_round_two_pvt;
3333 
3334     p_return_status := FND_API.G_RET_STS_ERROR;
3335 
3336     -- 4537865 RESET OUT PARAMS
3337     p_task_version_id := NULL ;
3338 
3339     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
3340     THEN
3341 /* dbms_output.put_line('handling an G_EXC_UNEXPECTED_ERROR exception'); */
3342     ROLLBACK TO add_task_round_two_pvt;
3343 
3344     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3345 
3346     -- 4537865 RESET OUT PARAMS
3347     p_task_version_id := NULL ;
3348 
3349     WHEN OTHERS THEN
3350 /* dbms_output.put_line('handling an OTHERS exception'); */
3351     ROLLBACK TO add_task_round_two_pvt;
3352 
3353     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3354 
3355     -- 4537865 RESET OUT PARAMS
3356     p_task_version_id := NULL ;
3357 
3358     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3359     THEN
3360         FND_MSG_PUB.add_exc_msg
3361                 ( p_pkg_name        => G_PKG_NAME
3362                 , p_procedure_name  => l_api_name   );
3363 
3364     END IF;
3365 
3366 END add_task_round_two;
3367 
3368 --====================================================================================
3369 --
3370 --Name:               fetch_project_id
3371 --Type:               Function
3372 --Description:        This function will return the project ID
3373 --            when giving it the project reference
3374 --
3375 --
3376 --Called subprograms: none
3377 --
3378 --
3379 --
3380 --History:
3381 --    19-AUG-1996        R. Krishna.    Created
3382 --
3383 FUNCTION Fetch_project_id
3384 (p_pm_project_reference IN VARCHAR2 ) RETURN NUMBER
3385 
3386 IS
3387 
3388 CURSOR c_projects_csr IS
3389 SELECT project_id
3390 FROM
3391 pa_projects
3392 WHERE
3393 pm_project_reference = p_pm_project_reference;
3394 
3395 l_project_rec      c_projects_csr%ROWTYPE;
3396 
3397 BEGIN
3398 
3399       OPEN c_projects_csr;
3400       FETCH  c_projects_csr INTO l_project_rec.project_id;
3401       IF c_projects_csr%NOTFOUND THEN
3402          CLOSE c_projects_csr;
3403          RETURN NULL;
3404       ELSE
3405          CLOSE c_projects_csr;
3406          RETURN l_project_rec.project_id;
3407       END IF;
3408 
3409 END Fetch_project_id;
3410 
3411 --====================================================================================
3412 --
3413 --Name:               fetch_task_id
3414 --Type:               Function
3415 --Description:        This function will return the task ID
3416 --            when giving it the task reference
3417 --
3418 --
3419 --Called subprograms: none
3420 --
3421 --
3422 --
3423 --History:
3424 --    19-AUG-1996        R. Krishna.    Created
3425 --
3426 FUNCTION Fetch_task_id
3427 ( p_pa_project_id        IN NUMBER
3428  ,p_pm_task_reference    IN VARCHAR2 ) RETURN NUMBER
3429 
3430 IS
3431 
3432 CURSOR c_task_csr IS
3433 SELECT task_id
3434 FROM
3435 pa_tasks
3436 WHERE project_id           = p_pa_project_id
3437 AND   pm_task_reference    = p_pm_task_reference;
3438 
3439 l_task_rec      c_task_csr%ROWTYPE;
3440 
3441 BEGIN
3442 
3443       OPEN c_task_csr;
3444       FETCH  c_task_csr INTO l_task_rec.task_id;
3445       IF c_task_csr%NOTFOUND THEN
3446          CLOSE c_task_csr;
3447          RETURN NULL;
3448       ELSE
3449          CLOSE c_task_csr;
3450          RETURN l_task_rec.task_id;
3451       END IF;
3452 
3453 END Fetch_task_id;
3454 
3455 --====================================================================================
3456 --Name:               convert_pm_projref_to_id
3457 --Type:               Procedure
3458 --Description:        This procedure can be used to converse
3459 --            an incoming project reference to
3460 --            a project ID.
3461 --
3462 --Called subprograms: none
3463 --
3464 --
3465 --
3466 --History:
3467 --    19-AUG-1996        R. Krishna.    Created
3468 --    02-DEC-1996    L de Werker    Removed value_not_used message
3469 --                  Added validity check for project_id
3470 --
3471 PROCEDURE Convert_pm_projref_to_id
3472 (p_pm_project_reference IN VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3473 ,p_pa_project_id        IN NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3474 ,p_out_project_id       OUT NOCOPY NUMBER -- 4537865 Added nocopy
3475 ,p_return_status        OUT NOCOPY VARCHAR2                ) -- 4537865 Added nocopy
3476 
3477 IS
3478 
3479 CURSOR  l_project_id_csr
3480 IS
3481 SELECT  'X'
3482 FROM    pa_projects
3483 where   project_id = p_pa_project_id;
3484 
3485 l_api_name  CONSTANT    VARCHAR2(30) := 'Convert_pm_projref_to_id';
3486 l_project_id            NUMBER ;
3487 l_dummy             VARCHAR2(1);
3488 
3489 BEGIN
3490 
3491     p_return_status :=  FND_API.G_RET_STS_SUCCESS;
3492 
3493     IF p_pa_project_id <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3494     AND p_pa_project_id IS NOT NULL
3495     THEN
3496 
3497         --check validity of this ID
3498         OPEN l_project_id_csr;
3499         FETCH l_project_id_csr INTO l_dummy;
3500 
3501         IF l_project_id_csr%NOTFOUND
3502         THEN
3503             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3504         THEN
3505              pa_interface_utils_pub.map_new_amg_msg
3506               ( p_old_message_code => 'PA_INVALID_PROJECT_ID'
3507                ,p_msg_attribute    => 'CHANGE'
3508                ,p_resize_flag      => 'N'
3509                ,p_msg_context      => 'GENERAL'
3510                ,p_attribute1       => ''
3511                ,p_attribute2       => ''
3512                ,p_attribute3       => ''
3513                ,p_attribute4       => ''
3514                ,p_attribute5       => '');
3515         END IF;
3516 
3517         CLOSE l_project_id_csr;
3518         RAISE FND_API.G_EXC_ERROR;
3519         END IF;
3520 
3521         CLOSE l_project_id_csr;
3522         p_out_project_id := p_pa_project_id;
3523 
3524     ELSIF  p_pm_project_reference <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3525        AND p_pm_project_reference IS NOT NULL
3526     THEN
3527          l_project_id  :=  Fetch_project_id
3528                        (p_pm_project_reference => p_pm_project_reference);
3529 
3530          IF  l_project_id IS NULL
3531          THEN
3532              IF FND_MSG_PUB.check_msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR)
3533              THEN
3534                 FND_MESSAGE.SET_NAME('PA','PA_API_CONV_ERROR_AMG'); -- bug 2257612
3535                 FND_MESSAGE.SET_TOKEN('ATTR_NAME','Pm Project Reference');
3536                 FND_MESSAGE.SET_TOKEN('ATTR_VALUE',p_pm_project_reference);
3537                 FND_MSG_PUB.add;
3538               END IF;
3539 
3540               RAISE FND_API.G_EXC_ERROR;
3541          ELSE
3542                 p_out_project_id := l_project_id;
3543 
3544          END IF;
3545      ELSE
3546 
3547     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3548     THEN
3549              pa_interface_utils_pub.map_new_amg_msg
3550               ( p_old_message_code => 'PA_PROJECT_REF_AND_ID_MISSING'
3551                ,p_msg_attribute    => 'CHANGE'
3552                ,p_resize_flag      => 'Y'
3553                ,p_msg_context      => 'GENERAL'
3554                ,p_attribute1       => ''
3555                ,p_attribute2       => ''
3556                ,p_attribute3       => ''
3557                ,p_attribute4       => ''
3558                ,p_attribute5       => '');
3559         END IF;
3560 
3561         RAISE FND_API.G_EXC_ERROR;
3562 
3563      END IF; -- If p_pa_project_id <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3564 
3565 EXCEPTION
3566 
3567     WHEN FND_API.G_EXC_ERROR
3568     THEN
3569 /* dbms_output.put_line('handling an G_EXC_ERROR exception'); */
3570 
3571     p_return_status := FND_API.G_RET_STS_ERROR;
3572 
3573     -- 4537865
3574     p_out_project_id := NULL ;
3575 
3576     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
3577     THEN
3578 /* dbms_output.put_line('handling an G_EXC_UNEXPECTED_ERROR exception'); */
3579 
3580     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3581 
3582     -- 4537865
3583     p_out_project_id := NULL ;
3584 
3585     WHEN OTHERS THEN
3586 /* dbms_output.put_line('handling an OTHERS exception'); */
3587 
3588     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3589 
3590     -- 4537865
3591     p_out_project_id := NULL ;
3592 
3593     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3594     THEN
3595         FND_MSG_PUB.add_exc_msg
3596                 ( p_pkg_name        => G_PKG_NAME
3597                 , p_procedure_name  => l_api_name   );
3598 
3599     END IF;
3600 
3601 END Convert_pm_projref_to_id;
3602 
3603 --====================================================================================
3604 --Name:               convert_pm_taskref_to_id
3605 --Type:               Procedure
3606 --Description:        This procedure can be used to converse
3607 --            an incoming task reference to
3608 --            a task ID.
3609 --
3610 --Called subprograms: none
3611 --
3612 --
3613 --
3614 --History:
3615 --  19-AUG-1996 R. Krishna.     Created
3616 --      02-DEC-1996 L. de Werker    Removed value_not_used message
3617 --                  Added validation for project_id
3618 --                  Added validation for task_id
3619 --
3620 Procedure Convert_pm_taskref_to_id (
3621  p_pa_project_id        IN NUMBER,
3622  p_pa_task_id           IN NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3623  p_pm_task_reference    IN VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3624  p_out_task_id          OUT NOCOPY NUMBER,  -- 4537865
3625  p_return_status        OUT NOCOPY VARCHAR2 )  -- 4537865
3626 
3627 IS
3628 
3629 CURSOR  l_project_id_csr
3630 IS
3631 SELECT  'X'
3632 FROM    pa_projects
3633 where   project_id = p_pa_project_id;
3634 
3635 CURSOR  l_task_id_csr
3636 IS
3637 SELECT  'X'
3638 FROM    pa_tasks
3639 WHERE   task_id = p_pa_task_id
3640 AND     project_id = p_pa_project_id;
3641 
3642 
3643 l_api_name  CONSTANT    VARCHAR2(30) := 'Convert_pm_taskref_to_id';
3644 l_task_id                   NUMBER ;
3645 l_dummy             VARCHAR2(1);
3646 --needed to get the field values associated to a AMG message
3647 
3648    CURSOR   l_amg_project_csr
3649       (p_pa_project_id pa_projects.project_id%type)
3650    IS
3651    SELECT   segment1
3652    FROM     pa_projects p
3653    WHERE p.project_id = p_pa_project_id;
3654 
3655    l_amg_segment1       VARCHAR2(25);
3656 
3657 BEGIN
3658 
3659    p_return_status :=  FND_API.G_RET_STS_SUCCESS;
3660 
3661    IF p_pa_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3662    AND p_pa_project_id IS NOT NULL
3663    THEN
3664 
3665         OPEN l_project_id_csr;
3666         FETCH l_project_id_csr INTO l_dummy;
3667 
3668         IF l_project_id_csr%NOTFOUND
3669         THEN
3670       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3671       THEN
3672              pa_interface_utils_pub.map_new_amg_msg
3673               ( p_old_message_code => 'PA_INVALID_PROJECT_ID'
3674                ,p_msg_attribute    => 'CHANGE'
3675                ,p_resize_flag      => 'N'
3676                ,p_msg_context      => 'GENERAL'
3677                ,p_attribute1       => ''
3678                ,p_attribute2       => ''
3679                ,p_attribute3       => ''
3680                ,p_attribute4       => ''
3681                ,p_attribute5       => '');
3682       END IF;
3683 
3684       CLOSE l_project_id_csr;
3685       RAISE FND_API.G_EXC_ERROR;
3686         END IF;
3687 
3688         CLOSE l_project_id_csr;
3689    ELSE
3690 
3691         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3692     THEN
3693              pa_interface_utils_pub.map_new_amg_msg
3694               ( p_old_message_code => 'PA_PROJECT_ID_MISSING'
3695                ,p_msg_attribute    => 'CHANGE'
3696                ,p_resize_flag      => 'N'
3697                ,p_msg_context      => 'GENERAL'
3698                ,p_attribute1       => ''
3699                ,p_attribute2       => ''
3700                ,p_attribute3       => ''
3701                ,p_attribute4       => ''
3702                ,p_attribute5       => '');
3703     END IF;
3704 
3705     RAISE FND_API.G_EXC_ERROR;
3706 
3707    END IF;
3708 
3709    IF p_pa_task_id <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3710    AND p_pa_task_id IS NOT NULL
3711    THEN
3712 
3713 -- Get segment1 for AMG messages
3714 
3715    OPEN l_amg_project_csr( p_pa_project_id );
3716    FETCH l_amg_project_csr INTO l_amg_segment1;
3717    CLOSE l_amg_project_csr;
3718 
3719     OPEN l_task_id_csr;
3720     FETCH l_task_id_csr INTO l_dummy;
3721 
3722     IF l_task_id_csr%NOTFOUND
3723     THEN
3724         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3725         THEN
3726              pa_interface_utils_pub.map_new_amg_msg
3727               ( p_old_message_code => 'PA_TASK_ID_INVALID'
3728                ,p_msg_attribute    => 'CHANGE'
3729                ,p_resize_flag      => 'N'
3730                ,p_msg_context      => 'PROJ'
3731                ,p_attribute1       => l_amg_segment1
3732                ,p_attribute2       => ''
3733                ,p_attribute3       => ''
3734                ,p_attribute4       => ''
3735                ,p_attribute5       => '');
3736         END IF;
3737 
3738         CLOSE l_task_id_csr;
3739         RAISE FND_API.G_EXC_ERROR;
3740     END IF;
3741 
3742     CLOSE l_task_id_csr;
3743 
3744         p_out_task_id := p_pa_task_id;
3745 
3746     ELSIF p_pm_task_reference <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3747        AND p_pm_task_reference IS NOT NULL
3748     THEN
3749          l_task_id  :=  Fetch_task_id
3750                        (p_pa_project_id     => p_pa_project_id,
3751                         p_pm_task_reference => p_pm_task_reference);
3752          IF  l_task_id IS NULL
3753          THEN
3754              IF FND_MSG_PUB.check_msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR)
3755              THEN
3756                 FND_MESSAGE.SET_NAME('PA','PA_API_CONV_ERROR_AMG'); -- Bug 2257612
3757                 FND_MESSAGE.SET_TOKEN('ATTR_NAME','Pm Task Reference');
3758                 FND_MESSAGE.SET_TOKEN('ATTR_VALUE',p_pm_task_reference);
3759                 FND_MSG_PUB.add;
3760 
3761         RAISE FND_API.G_EXC_ERROR;
3762 
3763               END IF;
3764          ELSE
3765                 p_out_task_id := l_task_id;
3766 
3767          END IF;
3768      ELSE
3769         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3770         THEN
3771              pa_interface_utils_pub.map_new_amg_msg
3772               ( p_old_message_code => 'PA_TASK_REF_AND_ID_MISSING'
3773                ,p_msg_attribute    => 'CHANGE'
3774                ,p_resize_flag      => 'N'
3775                ,p_msg_context      => 'PROJ'
3776                ,p_attribute1       => l_amg_segment1
3777                ,p_attribute2       => ''
3778                ,p_attribute3       => ''
3779                ,p_attribute4       => ''
3780                ,p_attribute5       => '');
3781             END IF;
3782 
3783             RAISE FND_API.G_EXC_ERROR;
3784 
3785      END IF; -- If p_pa_task_id <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3786 
3787 EXCEPTION
3788 
3789     WHEN FND_API.G_EXC_ERROR
3790     THEN
3791 /* dbms_output.put_line('handling an G_EXC_ERROR exception'); */
3792 
3793     p_return_status := FND_API.G_RET_STS_ERROR;
3794 
3795     -- 4537865 RESET OUT PARAMS
3796     p_out_task_id := NULL ;
3797 
3798     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
3799     THEN
3800 /* dbms_output.put_line('handling an G_EXC_UNEXPECTED_ERROR exception'); */
3801 
3802     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3803 
3804     -- 4537865 RESET OUT PARAMS
3805     p_out_task_id := NULL ;
3806 
3807     WHEN OTHERS THEN
3808 /* dbms_output.put_line('handling an OTHERS exception'); */
3809 
3810     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3811 
3812     -- 4537865 RESET OUT PARAMS
3813     p_out_task_id := NULL ;
3814 
3815     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3816     THEN
3817         FND_MSG_PUB.add_exc_msg
3818                 ( p_pkg_name        => G_PKG_NAME
3819                 , p_procedure_name  => l_api_name   );
3820 
3821     END IF;
3822 
3823 END Convert_pm_taskref_to_id;
3824 
3825 --====================================================================================
3826 --Name:               convert_pm_taskref_to_id
3827 --Type:               Procedure
3828 --Description:        This procedure can be used to converse
3829 --            an incoming task reference to
3830 --            a task ID.
3831 --
3832 --Called subprograms: none
3833 --
3834 --
3835 --
3836 --History:
3837 --  19-AUG-1996 R. Krishna.     Created
3838 --      02-DEC-1996 L. de Werker    Removed value_not_used message
3839 --                  Added validation for project_id
3840 --                  Added validation for task_id
3841 --
3842 Procedure Convert_pm_taskref_to_id_all (
3843  p_pa_project_id        IN NUMBER,
3844  p_structure_type       IN VARCHAR2 := 'FINANCIAL',
3845  p_pa_task_id           IN NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3846  p_pm_task_reference    IN VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3847  p_out_task_id          OUT NOCOPY NUMBER, -- 4537865 Added nocopy hint
3848  p_return_status        OUT NOCOPY VARCHAR2 ) -- 4537865 Added nocopy hint
3849 
3850 IS
3851 
3852 CURSOR  l_project_id_csr
3853 IS
3854 SELECT  'X'
3855 FROM    pa_projects
3856 where   project_id = p_pa_project_id;
3857 
3858 CURSOR  l_task_id_csr
3859 IS
3860 SELECT  'X'
3861 FROM    pa_tasks
3862 WHERE   task_id = p_pa_task_id
3863 AND     project_id = p_pa_project_id;
3864 
3865 CURSOR  l_proj_element_id_csr
3866 IS
3867 SELECT  'X'
3868 FROM    pa_proj_elements
3869 WHERE   proj_element_id = p_pa_task_id
3870 AND     project_id = p_pa_project_id;
3871 
3872 CURSOR cur_pa_proj_elems
3873 IS
3874   SELECT proj_element_id
3875     FROM pa_proj_elements
3876    WHERE PM_SOURCE_REFERENCE = p_pm_task_reference
3877      AND project_id = p_pa_project_id
3878     AND parent_structure_id = ( SELECT ppe.proj_element_id   --Added this subQry for bug#3653517
3879                                 FROM   pa_proj_elements ppe,
3880                                        pa_proj_structure_types ppst,
3881                                        pa_structure_types pst
3882                                 WHERE  ppe.proj_element_id = ppst.proj_element_id
3883                                 AND    ppe.project_id = p_pa_project_id
3884                                 AND    ppst.structure_type_id = pst.structure_type_id
3885                                 AND    pst.structure_type = p_structure_type)
3886      AND OBJECT_TYPE = 'PA_TASKS';
3887 
3888 l_api_name  CONSTANT    VARCHAR2(30) := 'Convert_pm_taskref_to_id_all';
3889 l_task_id                   NUMBER ;
3890 l_dummy             VARCHAR2(1);
3891 --needed to get the field values associated to a AMG message
3892 
3893    CURSOR   l_amg_project_csr
3894       (p_pa_project_id pa_projects.project_id%type)
3895    IS
3896    SELECT   segment1
3897    FROM     pa_projects p
3898    WHERE p.project_id = p_pa_project_id;
3899 
3900    l_amg_segment1       VARCHAR2(25);
3901    --Added by rtarway for BUG 3919800
3902    l_project_sharing_type VARCHAR2(250);
3903 
3904 BEGIN
3905 
3906    p_return_status :=  FND_API.G_RET_STS_SUCCESS;
3907 
3908    IF p_pa_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3909    AND p_pa_project_id IS NOT NULL
3910    THEN
3911 
3912         OPEN l_project_id_csr;
3913         FETCH l_project_id_csr INTO l_dummy;
3914 
3915         IF l_project_id_csr%NOTFOUND
3916         THEN
3917       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3918       THEN
3919              pa_interface_utils_pub.map_new_amg_msg
3920               ( p_old_message_code => 'PA_INVALID_PROJECT_ID'
3921                ,p_msg_attribute    => 'CHANGE'
3922                ,p_resize_flag      => 'N'
3923                ,p_msg_context      => 'GENERAL'
3924                ,p_attribute1       => ''
3925                ,p_attribute2       => ''
3926                ,p_attribute3       => ''
3927                ,p_attribute4       => ''
3928                ,p_attribute5       => '');
3929       END IF;
3930 
3931       CLOSE l_project_id_csr;
3932       RAISE FND_API.G_EXC_ERROR;
3933         END IF;
3934 
3935         CLOSE l_project_id_csr;
3936    ELSE
3937 
3938         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3939     THEN
3940              pa_interface_utils_pub.map_new_amg_msg
3941               ( p_old_message_code => 'PA_PROJECT_ID_MISSING'
3942                ,p_msg_attribute    => 'CHANGE'
3943                ,p_resize_flag      => 'N'
3944                ,p_msg_context      => 'GENERAL'
3945                ,p_attribute1       => ''
3946                ,p_attribute2       => ''
3947                ,p_attribute3       => ''
3948                ,p_attribute4       => ''
3949                ,p_attribute5       => '');
3950     END IF;
3951 
3952     RAISE FND_API.G_EXC_ERROR;
3953 
3954    END IF;
3955 
3956    IF (p_structure_type = 'FINANCIAL') THEN
3957 
3958       --Added by rtarway, for BUG 3919800
3959       --Get the structure sharing type, if its partial shared structure, check for the task in
3960       --pa_proj_elements too.
3961 
3962       l_project_sharing_type := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(p_pa_project_id);
3963 
3964       IF p_pa_task_id <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3965       AND p_pa_task_id IS NOT NULL
3966       THEN
3967 
3968    -- Get segment1 for AMG messages
3969 
3970       OPEN l_amg_project_csr( p_pa_project_id );
3971       FETCH l_amg_project_csr INTO l_amg_segment1;
3972       CLOSE l_amg_project_csr;
3973 
3974         OPEN l_task_id_csr;
3975         FETCH l_task_id_csr INTO l_dummy;
3976 
3977         IF l_task_id_csr%NOTFOUND
3978         THEN
3979              --Added by rtarway, for BUG 3919800
3980             IF (l_project_sharing_type = 'SHARE_PARTIAL')
3981             THEN
3982                     OPEN l_proj_element_id_csr;
3983                     FETCH l_proj_element_id_csr INTO l_dummy;
3984 
3985                     IF l_proj_element_id_csr%NOTFOUND
3986                     THEN
3987 
3988                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3989                         THEN
3990                                pa_interface_utils_pub.map_new_amg_msg
3991                                 ( p_old_message_code => 'PA_TASK_ID_INVALID'
3992                                  ,p_msg_attribute    => 'CHANGE'
3993                                  ,p_resize_flag      => 'N'
3994                                  ,p_msg_context      => 'PROJ'
3995                                  ,p_attribute1       => l_amg_segment1
3996                                  ,p_attribute2       => ''
3997                                  ,p_attribute3       => ''
3998                                  ,p_attribute4       => ''
3999                                  ,p_attribute5       => '');
4000                        END IF;
4001                        CLOSE l_proj_element_id_csr;
4002                        RAISE FND_API.G_EXC_ERROR;
4003                     END IF;
4004                     CLOSE l_proj_element_id_csr;
4005                     p_out_task_id := p_pa_task_id;
4006             ELSE
4007             --End Added by rtarway, for BUG 3919800
4008                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4009                  THEN
4010                      pa_interface_utils_pub.map_new_amg_msg
4011                       ( p_old_message_code => 'PA_TASK_ID_INVALID'
4012                        ,p_msg_attribute    => 'CHANGE'
4013                        ,p_resize_flag      => 'N'
4014                        ,p_msg_context      => 'PROJ'
4015                        ,p_attribute1       => l_amg_segment1
4016                        ,p_attribute2       => ''
4017                        ,p_attribute3       => ''
4018                        ,p_attribute4       => ''
4019                        ,p_attribute5       => '');
4020                  END IF;
4021 
4022                   CLOSE l_task_id_csr;
4023                   RAISE FND_API.G_EXC_ERROR;
4024             --Added by rtarway, for BUG 3919800
4025             END IF;
4026             --End Added by rtarway, for BUG 3919800
4027         END IF;
4028 
4029         CLOSE l_task_id_csr;
4030 
4031            p_out_task_id := p_pa_task_id;
4032 
4033        ELSIF p_pm_task_reference <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4034           AND p_pm_task_reference IS NOT NULL
4035        THEN
4036             l_task_id  :=  Fetch_task_id
4037                           (p_pa_project_id     => p_pa_project_id,
4038                            p_pm_task_reference => p_pm_task_reference);
4039             IF  l_task_id IS NULL
4040             THEN
4041 
4042                 --Added by rtarway, for BUG 3919800
4043                 IF (l_project_sharing_type = 'SHARE_PARTIAL')
4044                 THEN
4045                          OPEN cur_pa_proj_elems;
4046                          FETCH cur_pa_proj_elems INTO p_out_task_id;
4047                          IF cur_pa_proj_elems%NOTFOUND
4048                          THEN
4049                               IF FND_MSG_PUB.check_msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR)
4050                               THEN
4051                                  FND_MESSAGE.SET_NAME('PA','PA_API_CONV_ERROR_AMG'); -- Bug 2257612
4052                                  FND_MESSAGE.SET_TOKEN('ATTR_NAME','Pm Task Reference');
4053                                  FND_MESSAGE.SET_TOKEN('ATTR_VALUE',p_pm_task_reference);
4054                                  FND_MSG_PUB.add;
4055                                  CLOSE cur_pa_proj_elems;
4056                                  RAISE FND_API.G_EXC_ERROR;
4057                               END IF;
4058                          END IF;
4059                          CLOSE cur_pa_proj_elems;
4060                 ELSE
4061                 --End Add by rtarway,for BUG 3919800
4062 
4063                      IF FND_MSG_PUB.check_msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR)
4064                      THEN
4065                         FND_MESSAGE.SET_NAME('PA','PA_API_CONV_ERROR_AMG'); -- Bug 2257612
4066                         FND_MESSAGE.SET_TOKEN('ATTR_NAME','Pm Task Reference');
4067                         FND_MESSAGE.SET_TOKEN('ATTR_VALUE',p_pm_task_reference);
4068                         FND_MSG_PUB.add;
4069 
4070                         RAISE FND_API.G_EXC_ERROR;
4071 
4072                       END IF;
4073                END IF;--Added by rtarway for BUG 3919800
4074             ELSE
4075                    p_out_task_id := l_task_id;
4076             END IF;
4077         ELSE
4078         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4079         THEN
4080                 pa_interface_utils_pub.map_new_amg_msg
4081                  ( p_old_message_code => 'PA_TASK_REF_AND_ID_MISSING'
4082                   ,p_msg_attribute    => 'CHANGE'
4083                   ,p_resize_flag      => 'N'
4084                   ,p_msg_context      => 'PROJ'
4085                   ,p_attribute1       => l_amg_segment1
4086                   ,p_attribute2       => ''
4087                   ,p_attribute3       => ''
4088                   ,p_attribute4       => ''
4089                   ,p_attribute5       => '');
4090                 END IF;
4091 
4092                 RAISE FND_API.G_EXC_ERROR;
4093 
4094         END IF; -- If p_pa_task_id <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4095       ELSIF (p_structure_type = 'WORKPLAN') THEN
4096          IF p_pa_task_id <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4097          AND p_pa_task_id IS NOT NULL
4098          THEN
4099 
4100          -- Get segment1 for AMG messages
4101          OPEN l_amg_project_csr( p_pa_project_id );
4102          FETCH l_amg_project_csr INTO l_amg_segment1;
4103          CLOSE l_amg_project_csr;
4104 
4105         OPEN l_proj_element_id_csr;
4106         FETCH l_proj_element_id_csr INTO l_dummy;
4107 
4108         IF l_proj_element_id_csr%NOTFOUND
4109         THEN
4110             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4111         THEN
4112                 pa_interface_utils_pub.map_new_amg_msg
4113                  ( p_old_message_code => 'PA_TASK_ID_INVALID'
4114                   ,p_msg_attribute    => 'CHANGE'
4115                   ,p_resize_flag      => 'N'
4116                   ,p_msg_context      => 'PROJ'
4117                   ,p_attribute1       => l_amg_segment1
4118                   ,p_attribute2       => ''
4119                   ,p_attribute3       => ''
4120                   ,p_attribute4       => ''
4121                   ,p_attribute5       => '');
4122         END IF;
4123 
4124         CLOSE l_proj_element_id_csr;
4125         RAISE FND_API.G_EXC_ERROR;
4126         END IF;
4127 
4128         CLOSE l_proj_element_id_csr;
4129 
4130            p_out_task_id := p_pa_task_id;
4131 
4132        ELSIF p_pm_task_reference <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4133           AND p_pm_task_reference IS NOT NULL
4134          THEN
4135             OPEN cur_pa_proj_elems;
4136             FETCH cur_pa_proj_elems INTO p_out_task_id;
4137 
4138             IF cur_pa_proj_elems%NOTFOUND
4139             THEN
4140                p_return_status := FND_API.G_RET_STS_ERROR;
4141                IF FND_MSG_PUB.check_msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR)
4142                THEN
4143                   FND_MESSAGE.SET_NAME('PA','PA_API_CONV_ERROR_AMG'); -- Bug 2257612
4144                   FND_MESSAGE.SET_TOKEN('ATTR_NAME','Pm Task Reference');
4145                   FND_MESSAGE.SET_TOKEN('ATTR_VALUE',p_pm_task_reference);
4146                   FND_MSG_PUB.add;
4147                   RAISE FND_API.G_EXC_ERROR;
4148                END IF;
4149             END IF;
4150             CLOSE cur_pa_proj_elems;
4151 
4152         ELSE
4153         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4154         THEN
4155                 pa_interface_utils_pub.map_new_amg_msg
4156                  ( p_old_message_code => 'PA_TASK_REF_AND_ID_MISSING'
4157                   ,p_msg_attribute    => 'CHANGE'
4158                   ,p_resize_flag      => 'N'
4159                   ,p_msg_context      => 'PROJ'
4160                   ,p_attribute1       => l_amg_segment1
4161                   ,p_attribute2       => ''
4162                   ,p_attribute3       => ''
4163                   ,p_attribute4       => ''
4164                   ,p_attribute5       => '');
4165                 END IF;
4166 
4167                 RAISE FND_API.G_EXC_ERROR;
4168 
4169         END IF; -- If p_pa_task_id <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4170       END IF;
4171 
4172 EXCEPTION
4173 
4174     WHEN FND_API.G_EXC_ERROR
4175     THEN
4176 /* dbms_output.put_line('handling an G_EXC_ERROR exception'); */
4177 
4178     p_return_status := FND_API.G_RET_STS_ERROR;
4179 
4180     -- 4537865 RESET OUT PARAMS
4181     p_out_task_id := NULL ;
4182 
4183     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
4184     THEN
4185 /* dbms_output.put_line('handling an G_EXC_UNEXPECTED_ERROR exception'); */
4186 
4187     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4188 
4189     -- 4537865 RESET OUT PARAMS
4190     p_out_task_id := NULL ;
4191 
4192     WHEN OTHERS THEN
4193 /* dbms_output.put_line('handling an OTHERS exception'); */
4194 
4195     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4196 
4197     -- 4537865 RESET OUT PARAMS
4198     p_out_task_id := NULL ;
4199 
4200     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4201     THEN
4202         FND_MSG_PUB.add_exc_msg
4203                 ( p_pkg_name        => G_PKG_NAME
4204                 , p_procedure_name  => l_api_name   );
4205 
4206     END IF;
4207 
4208 END Convert_pm_taskref_to_id_all;
4209 
4210 --====================================================================================
4211 --Name:               check_valid_message
4212 --Type:               Function
4213 --Description:        Checks whether procedure in core package returns valid message.
4214 --
4215 --Called subprograms: none
4216 --
4217 --
4218 --
4219 --History:
4220 --  autumn-96   R. Krishna.     Created
4221 --
4222 FUNCTION check_valid_message (p_message IN VARCHAR2) RETURN BOOLEAN
4223 IS
4224 
4225 BEGIN
4226       IF p_message NOT LIKE 'PA_%'
4227       THEN
4228          RETURN FALSE;
4229       END IF;
4230 
4231       FND_MESSAGE.SET_NAME ('PA',p_message);
4232       RETURN TRUE;
4233 
4234 EXCEPTION
4235   WHEN VALUE_ERROR
4236   THEN
4237        RETURN FALSE;
4238 END check_valid_message;
4239 
4240 --====================================================================================
4241 --Name:               check_valid_org
4242 --Type:               Function
4243 --Description:        Checks whether this is a valid organization
4244 --
4245 --Called subprograms: none
4246 --
4247 --
4248 --
4249 --History:
4250 --  automn-1996 R. Krishna.     Created
4251 --  05-DEC-1996 L. de Werker    Changed cursor
4252 --
4253 FUNCTION check_valid_org (p_org_id IN NUMBER ) RETURN VARCHAR2
4254 IS
4255 
4256    CURSOR l_get_org_csr (p_organization_id NUMBER )
4257    IS
4258    SELECT 1
4259    FROM  pa_organizations_project_v
4260    WHERE organization_id = p_organization_id
4261    AND   active_flag = 'Y'
4262    AND   TRUNC(SYSDATE) BETWEEN
4263    TRUNC(date_from) AND NVL(date_to, TRUNC(SYSDATE));
4264 
4265 
4266 l_dummy  NUMBER;
4267 
4268 BEGIN
4269 
4270     OPEN l_get_org_csr(p_org_id);
4271     FETCH l_get_org_csr INTO l_dummy;
4272     IF l_get_org_csr%NOTFOUND
4273     THEN
4274             CLOSE l_get_org_csr;
4275             RETURN 'N';
4276     ELSE
4277             CLOSE l_get_org_csr;
4278             RETURN 'Y';
4279     END IF;
4280 
4281 
4282 EXCEPTION
4283     WHEN OTHERS
4284     THEN
4285         RAISE;
4286 
4287 END check_valid_org;
4288 
4289 
4290 --====================================================================================
4291 --Name:               check_valid_project_status
4292 --Type:               Function
4293 --Description:        This function can be used to check for validity of
4294 --            a project status
4295 --
4296 --Called subprograms: none
4297 --
4298 --
4299 --
4300 --History:
4301 --    02-DEC-1996        L. de Werker    Created
4302 --
4303 FUNCTION check_valid_project_status
4304     ( p_project_status          IN  VARCHAR2    )
4305 RETURN VARCHAR2
4306 IS
4307 
4308 CURSOR  l_project_status_csr
4309 IS
4310 SELECT  'x'
4311 FROM    pa_project_statuses
4312 WHERE   project_status_code = p_project_status
4313 AND     trunc(sysdate) BETWEEN start_date_active and
4314         nvl(end_date_active,trunc(sysdate));
4315 
4316 l_dummy     VARCHAR2(1);
4317 
4318 BEGIN
4319 
4320     OPEN l_project_status_csr;
4321     FETCH l_project_status_csr INTO l_dummy;
4322     IF l_project_status_csr%FOUND
4323     THEN
4324         CLOSE l_project_status_csr;
4325         RETURN 'Y';
4326     ELSE
4327         CLOSE l_project_status_csr;
4328         RETURN 'N';
4329     END IF;
4330 
4331 
4332 EXCEPTION
4333     WHEN OTHERS THEN RAISE;
4334 
4335 END check_valid_project_status;
4336 
4337 
4338 --====================================================================================
4339 --Name:               check_valid_dist_rule
4340 --
4341 --Type:               Function
4342 --Description:        This function can be used to check for validity of
4343 --            a distribution rule
4344 --
4345 --Called subprograms: none
4346 --
4347 --
4348 --
4349 --History:
4350 --    Fall-1996         Ramesh K.    Created
4351 --    29-Apr-04         sabansal     Bug 3279981. Added p_en_top_task_inv_mth_flag IN parameter
4352 FUNCTION check_valid_dist_rule (p_project_type IN VARCHAR2,
4353                                 p_dist_rule IN VARCHAR2,
4354                                 p_en_top_task_inv_mth_flag IN VARCHAR2 := 'N' ) RETURN VARCHAR2
4355 IS
4356    CURSOR l_get_dist_rule_csr (l_project_type VARCHAR2,l_dist_rule VARCHAR2)
4357    IS
4358    SELECT 'x' FROM
4359    pa_project_type_distributions d
4360    WHERE d.project_type = l_project_type
4361    AND   d.distribution_rule = l_dist_rule;
4362 
4363    --bug 3279981 Invoice Method cannot be cost if invoice method at top task is checked
4364    CURSOR cur_get_valid_rules IS
4365    SELECT 'x'
4366    FROM   PA_PROJECT_TYPE_DISTRIBUTIONS ppd
4367    WHERE  ppd.project_type      = p_project_type
4368    AND    ppd.distribution_rule = p_dist_rule
4369    AND    substr(ppd.Distribution_Rule, instr(ppd.Distribution_Rule,'/')+1) <> 'COST';
4370 
4371 l_temp VARCHAR2(30);
4372 BEGIN
4373      --Foll condition added for 3279981
4374      IF 'Y' = p_en_top_task_inv_mth_flag THEN
4375              OPEN  cur_get_valid_rules;
4376              FETCH cur_get_valid_rules INTO l_temp;
4377              IF cur_get_valid_rules%NOTFOUND THEN
4378                CLOSE cur_get_valid_rules;
4379                RETURN 'N';
4380              ELSE
4381                CLOSE cur_get_valid_rules;
4382                RETURN 'Y';
4383              END IF;
4384      ELSE
4385              OPEN l_get_dist_rule_csr (p_project_type,p_dist_rule);
4386              FETCH l_get_dist_rule_csr INTO l_temp;
4387              IF l_get_dist_rule_csr%NOTFOUND THEN
4388                 CLOSE l_get_dist_rule_csr;
4389                 RETURN 'N';
4390              ELSE
4391                 CLOSE l_get_dist_rule_csr;
4392                 RETURN 'Y';
4393              END IF;
4394      END IF;
4395 EXCEPTION
4396     WHEN OTHERS THEN
4397         RAISE;
4398 END check_valid_dist_rule;
4399 
4400 --====================================================================================
4401 --Name:               check_valid_employee
4402 --
4403 --Type:               Function
4404 --Description:        This function can be used to check for validity of
4405 --            an employee
4406 --
4407 --Called subprograms: none
4408 --
4409 --
4410 --
4411 --History:
4412 --    automn-1996        Ramesh K.    Created
4413 --
4414 FUNCTION check_valid_employee (p_person_id IN NUMBER )  RETURN VARCHAR2
4415 IS
4416     CURSOR l_get_employees_csr (l_person_id NUMBER)
4417     IS
4418     SELECT 'x' FROM
4419     pa_employees
4420     WHERE person_id = l_person_id;
4421 
4422 l_temp VARCHAR2(1);
4423 BEGIN
4424              OPEN l_get_employees_csr (p_person_id);
4425              FETCH l_get_employees_csr INTO l_temp;
4426 
4427              IF l_get_employees_csr%NOTFOUND
4428              THEN
4429                 CLOSE l_get_employees_csr;
4430                 RETURN 'N';
4431              ELSE
4432                 CLOSE l_get_employees_csr;
4433                 RETURN 'Y';
4434              END IF;
4435 
4436 EXCEPTION
4437     WHEN OTHERS THEN
4438         RAISE;
4439 
4440 END check_valid_employee;
4441 
4442 --====================================================================================
4443 --Name:               check_class_code_valid
4444 --
4445 --Type:               Function
4446 --Description:        This function can be used to check for validity of
4447 --            a class code
4448 --
4449 --Called subprograms: none
4450 --
4451 --
4452 --
4453 --History:
4454 --    automn-1996        Ramesh K.    Created
4455 --
4456 FUNCTION check_class_code_valid (p_class_category IN VARCHAR2,
4457                                  p_class_code     IN VARCHAR2 )
4458 RETURN VARCHAR2
4459 IS
4460 
4461 CURSOR l_get_class_codes_csr (l_class_category IN VARCHAR2,
4462                               l_class_code     IN VARCHAR2 )
4463 IS
4464 SELECT 'x'
4465 FROM pa_class_codes
4466 WHERE class_category = l_class_category
4467 AND   class_code     = l_class_code ;
4468 
4469 l_temp VARCHAR2(1);
4470 BEGIN
4471     OPEN l_get_class_codes_csr (p_class_category,p_class_code);
4472     FETCH l_get_class_codes_csr INTO l_temp;
4473 
4474     IF l_get_class_codes_csr%NOTFOUND
4475     THEN
4476        CLOSE l_get_class_codes_csr;
4477        RETURN 'N';
4478     ELSE
4479        CLOSE l_get_class_codes_csr;
4480        RETURN 'Y';
4481     END IF;
4482 
4483 EXCEPTION
4484     WHEN OTHERS THEN
4485         RAISE;
4486 END check_class_code_valid;
4487 
4488 --====================================================================================
4489 --Name:               Delete_One_Task
4490 --
4491 --Type:               Procedure
4492 --Description:        This procedure can be used to delete 1 task, and move all it's
4493 --            children to belang to it's parent
4494 --
4495 --Called subprograms: none
4496 --
4497 --
4498 --
4499 --History:
4500 --    automn-1996       Ramesh K.       Created
4501 --    08-DEC-1996   L. de Werker    Fixed some errors
4502 --    11-DEC-1996   L. de Werker    Changed, only top tasks without any children can be single deleted
4503 --                   (not cascade deleted)
4504 --    13-Dec-2005   Sunkalya   Bug#4878754. Modified the where condition for Improving Performance under Sql Repository work.Change Tagged.
4505 --
4506 PROCEDURE Delete_One_Task
4507           (p_task_id             IN NUMBER,
4508            p_return_status      OUT NOCOPY VARCHAR2, -- 4537865
4509            p_msg_count          OUT NOCOPY NUMBER, -- 4537865
4510            p_msg_data           OUT NOCOPY VARCHAR2 ) IS -- 4537865
4511 
4512 CURSOR l_get_task_det_csr IS
4513 SELECT project_id,
4514        task_id,
4515        parent_task_id,
4516        top_task_id,
4517        TASK_NAME,
4518        PM_TASK_REFERENCE
4519 FROM
4520        pa_tasks
4521 WHERE  task_id = p_task_id;
4522 
4523 CURSOR l_get_lower_task_det_csr (l_project_id     IN NUMBER,
4524                                  l_task_id        IN NUMBER )
4525 IS
4526 SELECT  task_id
4527 FROM    pa_tasks
4528 WHERE   project_id = l_project_id
4529 AND     parent_task_id = l_task_id;
4530 
4531 l_task_rec   l_get_task_det_csr%ROWTYPE;
4532 l_parent_task_rec l_get_lower_task_det_csr%ROWTYPE;
4533 
4534 l_api_name  CONSTANT    VARCHAR2(30) := 'Delete_One_Task';
4535 l_amg_segment1       VARCHAR2(25);
4536 l_amg_task_number       VARCHAR2(50);
4537 
4538 -- 4537865 Start
4539 l_data                          VARCHAR2(2000);
4540 l_msg_data                      VARCHAR2(2000);
4541 l_msg_index_out                 NUMBER;
4542 
4543 -- 4537865 End
4544 
4545 --needed to get the field values associated to a AMG message
4546 
4547    CURSOR   l_amg_project_csr
4548       (p_pa_project_id pa_projects.project_id%type)
4549    IS
4550    SELECT   segment1
4551    FROM     pa_projects p
4552    WHERE p.project_id = p_pa_project_id;
4553 
4554    CURSOR   l_amg_task_csr
4555       (p_pa_task_id pa_tasks.task_id%type)
4556    IS
4557    SELECT   task_number
4558    FROM     pa_tasks p
4559    WHERE p.task_id = p_pa_task_id;
4560 
4561 BEGIN
4562 
4563       SAVEPOINT delete_one_task;
4564 
4565       OPEN l_get_task_det_csr;
4566       FETCH l_get_task_det_csr INTO l_task_rec;
4567       CLOSE l_get_task_det_csr;
4568 
4569 -- Get segment1 for AMG messages
4570 
4571    OPEN l_amg_project_csr( l_task_rec.project_id );
4572    FETCH l_amg_project_csr INTO l_amg_segment1;
4573    CLOSE l_amg_project_csr;
4574 /*
4575    OPEN l_amg_task_csr( l_task_rec.task_id );
4576    FETCH l_amg_task_csr INTO l_amg_task_number;
4577    CLOSE l_amg_task_csr;
4578 */
4579    l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
4580     (p_task_number=> l_task_rec.task_name
4581     ,p_task_reference => l_task_rec.pm_task_reference
4582     ,p_task_id => l_task_rec.task_id);
4583 
4584       IF l_task_rec.task_id = l_task_rec.top_task_id
4585       THEN
4586 
4587          -- A top task is getting deleted
4588          OPEN l_get_lower_task_det_csr(l_task_rec.project_id,
4589                                        l_task_rec.task_id );
4590          FETCH l_get_lower_task_det_csr INTO l_parent_task_rec;
4591 
4592      IF l_get_lower_task_det_csr%FOUND
4593      THEN
4594         CLOSE l_get_lower_task_det_csr;
4595 
4596         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4597         THEN
4598              pa_interface_utils_pub.map_new_amg_msg
4599               ( p_old_message_code => 'PA_TOP_TASK_CHILD_NO_DELETE'
4600                ,p_msg_attribute    => 'CHANGE'
4601                ,p_resize_flag      => 'Y'
4602                ,p_msg_context      => 'TASK'
4603                ,p_attribute1       => l_amg_segment1
4604                ,p_attribute2       => l_amg_task_number
4605                ,p_attribute3       => ''
4606                ,p_attribute4       => ''
4607                ,p_attribute5       => '');
4608             END IF;
4609             RAISE  FND_API.G_EXC_ERROR;
4610          END IF;
4611 
4612          CLOSE l_get_lower_task_det_csr;
4613 
4614       ELSE   -- if this is not a top task check whether this
4615              -- is a parent task
4616          OPEN l_get_lower_task_det_csr(l_task_rec.project_id,
4617                                        l_task_rec.task_id );
4618          FETCH l_get_lower_task_det_csr INTO l_parent_task_rec;
4619 
4620          IF l_get_lower_task_det_csr%FOUND
4621          THEN -- This task is a parent
4622             -- hence update all first line children as follows
4623             -- parent task id = the parent task id of the task that is
4624             -- being deleted
4625 
4626             UPDATE pa_tasks
4627             SET   parent_task_id = l_task_rec.parent_task_id,
4628                   wbs_level      = Decode(wbs_level,1,1,wbs_level-1)
4629             WHERE project_id = l_task_rec.project_id
4630             AND   parent_task_id = l_task_rec.task_id;
4631             CLOSE l_get_lower_task_det_csr;
4632          ELSE
4633             CLOSE l_get_lower_task_det_csr;
4634          END IF;
4635       END IF ;
4636 
4637       DELETE FROM pa_transaction_controls WHERE task_id = p_task_id;
4638 
4639       --Modified the where condition for Improving Performance under Sql Repository work.Bug#4878754.
4640       DELETE FROM pa_billing_assignments WHERE
4641           top_task_id = p_task_id
4642       AND project_id  = l_task_rec.project_id;
4643 
4644       DELETE FROM pa_labor_multipliers WHERE task_id = p_task_id;
4645 
4646       DELETE FROM pa_job_bill_rate_overrides WHERE task_id = p_task_id;
4647 
4648       DELETE FROM pa_job_bill_title_overrides WHERE task_id = p_task_id;
4649 
4650       DELETE FROM pa_job_assignment_overrides WHERE task_id = p_task_id;
4651 
4652       DELETE FROM pa_emp_bill_rate_overrides WHERE task_id = p_task_id;
4653 
4654       DELETE FROM pa_nl_bill_rate_overrides WHERE task_id = p_task_id;
4655 
4656       DELETE FROM pa_compiled_multipliers
4657       WHERE ind_compiled_set_id IN
4658                       (SELECT ics.ind_compiled_set_id
4659                        FROM   pa_ind_compiled_sets ics,
4660                               pa_ind_rate_sch_revisions rev,
4661                               pa_ind_rate_schedules sch
4662                        WHERE  ics.ind_rate_sch_revision_id =
4663                               rev.ind_rate_sch_revision_id
4664                        AND    rev.ind_rate_sch_id = sch.ind_rate_sch_id
4665                        AND    sch.task_id = p_task_id);
4666 
4667       DELETE FROM pa_ind_compiled_sets
4668       WHERE ind_rate_sch_revision_id  IN
4669                 (SELECT rev.ind_rate_sch_revision_id
4670                  FROM   pa_ind_rate_sch_revisions rev,
4671                         pa_ind_rate_schedules sch
4672                  WHERE  rev.ind_rate_sch_id = sch.ind_rate_sch_id
4673                  AND    sch.task_id         = p_task_id );
4674 
4675       DELETE FROM pa_ind_rate_sch_revisions
4676       WHERE ind_rate_sch_id IN
4677                 (SELECT ind_rate_sch_id
4678                  FROM pa_ind_rate_schedules
4679                  WHERE task_id = p_task_id );
4680 
4681       DELETE FROM pa_ind_rate_schedules        WHERE task_id = p_task_id;
4682 
4683       DELETE FROM pa_project_asset_assignments WHERE task_id = p_task_id;
4684 
4685       DELETE FROM pa_percent_completes         WHERE task_id = p_task_id;
4686 
4687       DELETE FROM pa_tasks WHERE task_id = p_task_id;
4688 
4689      p_return_status :=  FND_API.G_RET_STS_SUCCESS;
4690 
4691 EXCEPTION
4692 
4693    WHEN FND_API.G_EXC_ERROR
4694    THEN
4695         p_return_status := FND_API.G_RET_STS_ERROR;
4696         p_msg_count     :=  Fnd_Msg_Pub.count_msg;  -- 4537865
4697 
4698     IF p_msg_count = 1 AND p_msg_data IS NULL
4699         THEN
4700           Pa_Interface_Utils_Pub.get_messages
4701               ( p_encoded        => Fnd_Api.G_TRUE
4702               , p_msg_index      => 1
4703               , p_msg_count      => p_msg_count
4704               , p_msg_data       => l_msg_data
4705               , p_data           => l_data
4706               , p_msg_index_out  => l_msg_index_out);
4707           p_msg_data := l_data;
4708         END IF;
4709 
4710     ROLLBACK TO delete_one_task;
4711 
4712    WHEN OTHERS
4713    THEN
4714     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4715 
4716    -- 4537865
4717     p_msg_count     := 1;
4718     p_msg_data      := SQLERRM;
4719 
4720         ROLLBACK TO delete_one_task;
4721 
4722     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4723     THEN
4724         FND_MSG_PUB.add_exc_msg
4725                 ( p_pkg_name        => G_PKG_NAME
4726                 , p_procedure_name  => l_api_name
4727         , p_error_text      => p_msg_data
4728         );
4729 
4730     END IF;
4731 
4732 END Delete_One_Task;
4733 
4734 
4735 --====================================================================================
4736 --Name:               Validate_billing_info
4737 --
4738 --Type:               Procedure
4739 --Description:        This procedure can be used to validate billing information
4740 --            for contract type projects
4741 --
4742 --
4743 --Called subprograms: none
4744 --
4745 --
4746 --
4747 --History:
4748 --    automn-1996        Ramesh K.    Created
4749 --
4750 PROCEDURE Validate_billing_info
4751           (p_project_id             IN    NUMBER,  -- Added for Bug 5643876
4752 	   p_project_class_code     IN    VARCHAR2,
4753            p_in_task_rec            IN    pa_project_pub.task_in_rec_type,
4754            p_return_status         OUT NOCOPY   VARCHAR2 ) IS -- 4537865 Added nocopy
4755 
4756 BEGIN
4757 
4758 pa_project_check_pvt.Validate_billing_info_pvt
4759 (p_project_id               => p_project_id   -- Added for Bug 5643876
4760 ,p_project_class_code       => p_project_class_code
4761 ,p_in_task_rec                  => p_in_task_rec
4762 ,p_return_status                => p_return_status);
4763 
4764 -- 4537865
4765 EXCEPTION
4766     WHEN OTHERS THEN
4767     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4768 
4769              IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4770                 THEN
4771                 FND_MSG_PUB.add_exc_msg
4772                                 ( p_pkg_name            => G_PKG_NAME
4773                                 , p_procedure_name      => 'Validate_billing_info'
4774                 , p_error_text          => SUBSTRB(SQLERRM,1,240));
4775 
4776              END IF;
4777     -- Didnt include RAISE because pa_project_check_pvt.Validate_billing_info_pvt also doesnt RAISE
4778 END Validate_billing_info;
4779 
4780 --====================================================================================
4781 --Name:               check_start_end_date
4782 --Type:               Procedure
4783 --Description:        This procedure can be used to pass old and new start_dates
4784 --            and old and new end_dates, from the PUBLIC API's. This procedure
4785 --            will check whether the new situation is going to be valid, and returns
4786 --            flags indicating whether start_date or end_date needs updating.
4787 --
4788 --
4789 --Called subprograms: none
4790 --
4791 --
4792 --
4793 --History:
4794 --    03-DEC-1996        L. de Werker    Created
4795 --
4796 PROCEDURE check_start_end_date
4797 ( p_return_status           OUT NOCOPY VARCHAR2 -- 4537865 Added nocopy
4798  ,p_old_start_date          IN  DATE
4799  ,p_new_start_date          IN  DATE
4800  ,p_old_end_date            IN  DATE
4801  ,p_new_end_date            IN  DATE
4802  ,p_update_start_date_flag      OUT NOCOPY VARCHAR2 -- 4537865 Added nocopy
4803  ,p_update_end_date_flag        OUT NOCOPY VARCHAR2        ) -- 4537865 Added nocopy
4804 IS
4805 
4806    l_api_name            CONSTANT   VARCHAR2(30)        := 'check_start_end_date';
4807 
4808    l_start_date         DATE;
4809    l_end_date           DATE;
4810 
4811 BEGIN
4812 
4813 pa_project_check_pvt.check_start_end_date_pvt
4814 (p_return_status                    => p_return_status
4815 ,p_old_start_date                   => p_old_start_date
4816 ,p_new_start_date               => p_new_start_date
4817 ,p_old_end_date                 => p_old_end_date
4818 ,p_new_end_date                 => p_new_end_date
4819 ,p_update_start_date_flag       => p_update_start_date_flag
4820 ,p_update_end_date_flag         => p_update_end_date_flag);
4821 -- 4537865
4822 EXCEPTION
4823         WHEN OTHERS THEN
4824 
4825         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4826         p_update_end_date_flag := NULL  ;
4827         p_update_start_date_flag := NULL ;
4828 
4829         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4830         THEN
4831                 FND_MSG_PUB.add_exc_msg
4832                                 ( p_pkg_name            => G_PKG_NAME
4833                                 , p_procedure_name      => l_api_name
4834                 , p_error_text      => SUBSTRB(SQLERRM,1,240)
4835                 );
4836 
4837         END IF;
4838 -- Didnt include RAISE because pa_project_check_pvt.check_start_end_date_pvt also doesnt RAISE
4839 END check_start_end_date;
4840 
4841 --------------------------------------------------------------------------------
4842 --Name:               check_for_one_manager
4843 --Type:               Procedure
4844 --Description:        See below.
4845 --
4846 --Called subprograms:
4847 --
4848 --
4849 --
4850 --History:
4851 --      31-JUL-1996     R. Krishnamurthy        Created
4852 --  03-DEC-1996 L. de Werker        Moved from pa_project_pub to pa_project_pvt
4853 --
4854 PROCEDURE check_for_one_manager
4855 (p_project_id       IN  NUMBER
4856 ,p_person_id        IN  NUMBER
4857 ,p_key_members      IN  pa_project_pub.project_role_tbl_type
4858 ,p_start_date       IN  DATE
4859 ,p_end_date         IN  DATE
4860 ,p_return_status    OUT NOCOPY    VARCHAR2 ) -- 4537865  Added nocopy hint
4861 IS
4862 
4863 BEGIN
4864 /*
4865    If a project manager is sought to be created, then check whether
4866    there is already a project manager for the project. If so, check
4867    whether this is the same person. If not,then check the start and
4868    end dates for the existing manager. If dates overlap,then
4869    check the input table to see whether the existing project manager
4870    is being de-activated. If so,go ahead and create a new project manager and
4871    update the end date of the existing manager with the date provided
4872    Else update the end date of the existing manager to either
4873    (a) new manager's start date -1 or (b) sysdate -1
4874    (being done in check_for_one_manager);
4875 */
4876 
4877 pa_project_check_pvt.check_for_one_manager_pvt
4878 (p_project_id       => p_project_id
4879 ,p_person_id        => p_person_id
4880 ,p_key_members      => p_key_members
4881 ,p_start_date       => p_start_date
4882 ,p_end_date         => p_end_date
4883 ,p_return_status    => p_return_status);
4884  -- 4537865
4885 EXCEPTION
4886         WHEN OTHERS THEN
4887 
4888         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4889 
4890         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4891         THEN
4892                 FND_MSG_PUB.add_exc_msg
4893                                 ( p_pkg_name            => G_PKG_NAME
4894                                 , p_procedure_name      => 'check_for_one_manager'
4895                                 , p_error_text          => SUBSTRB(SQLERRM,1,240)
4896                 );
4897 
4898         END IF;
4899 -- Didnt include RAISE because pa_project_check_pvt.check_for_one_manager_pvt also doesnt RAISE
4900 END check_for_one_manager;
4901 
4902 Procedure handle_task_number_change
4903           (p_project_id                   IN NUMBER,
4904            p_task_id                      IN NUMBER,
4905            p_array_cell_number            IN NUMBER,
4906            p_in_task_number               IN VARCHAR2,
4907            p_in_task_tbl                  IN pa_project_pub.task_in_tbl_type,
4908            p_proceed_with_update_flag    OUT NOCOPY VARCHAR2,  -- 4537865
4909            p_return_status               OUT NOCOPY VARCHAR2 )  -- 4537865
4910 IS
4911 
4912 BEGIN
4913 
4914 pa_project_check_pvt.handle_task_number_change_pvt
4915 (p_project_id                       => p_project_id
4916 ,p_task_id                          => p_task_id
4917 ,p_array_cell_number                => p_array_cell_number
4918 ,p_in_task_number             => p_in_task_number
4919 ,p_in_task_tbl                      => p_in_task_tbl
4920 ,p_proceed_with_update_flag => p_proceed_with_update_flag
4921 ,p_return_status                    => p_return_status);
4922  -- 4537865
4923 EXCEPTION
4924         WHEN OTHERS THEN
4925 
4926         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4927     p_proceed_with_update_flag := NULL ;
4928 
4929         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4930         THEN
4931                 FND_MSG_PUB.add_exc_msg
4932                                 ( p_pkg_name            => G_PKG_NAME
4933                                 , p_procedure_name      => 'handle_task_number_change'
4934                                 , p_error_text          => SUBSTRB(SQLERRM,1,240)
4935                                 );
4936 
4937         END IF;
4938 -- Didnt include RAISE because pa_project_check_pvt.handle_task_number_change_pvt also doesnt RAISE
4939 END handle_task_number_change;
4940 
4941 Procedure check_parent_child_task_dates
4942           (p_project_id                   IN NUMBER,
4943            p_return_status               OUT NOCOPY VARCHAR2 ) -- 4537865
4944 IS
4945 
4946 BEGIN
4947 
4948 pa_project_check_pvt.check_parent_child_tk_dts_Pvt
4949 (p_project_id           => p_project_id
4950 ,p_return_status        => p_return_status);
4951  -- 4537865
4952 EXCEPTION
4953         WHEN OTHERS THEN
4954 
4955         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4956 
4957         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4958         THEN
4959                 FND_MSG_PUB.add_exc_msg
4960                                 ( p_pkg_name            => G_PKG_NAME
4961                                 , p_procedure_name      => 'check_parent_child_task_dates'
4962                                 , p_error_text          => SUBSTRB(SQLERRM,1,240)
4963                                 );
4964 
4965         END IF;
4966 -- Didnt include RAISE because pa_project_check_pvt.check_parent_child_task_dates also doesnt RAISE
4967 END check_parent_child_task_dates;
4968 
4969 Procedure Update_One_Task
4970 ( p_api_version_number          IN  NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
4971   p_commit              IN  VARCHAR2    := FND_API.G_FALSE,
4972   p_init_msg_list           IN  VARCHAR2    := FND_API.G_FALSE,
4973   p_msg_count               OUT NOCOPY NUMBER, -- 4537865
4974   p_msg_data                OUT NOCOPY VARCHAR2, -- 4537865
4975   p_return_status           OUT NOCOPY VARCHAR2, -- 4537865
4976   p_pm_product_code         IN  VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
4977   p_pm_project_reference            IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
4978   p_pa_project_id                   IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
4979   p_pm_task_reference               IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
4980   p_task_number                     IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
4981   p_pa_task_id                      IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
4982   p_task_name                       IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
4983   p_long_task_name                      IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
4984   p_task_description                IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
4985   p_task_start_date                 IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
4986   p_task_completion_date            IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
4987   p_pm_parent_task_reference        IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
4988   p_pa_parent_task_id           IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
4989   p_address_id              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
4990   p_carrying_out_organization_id    IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
4991   p_service_type_code               IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
4992   p_task_manager_person_id          IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
4993   p_billable_flag                   IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
4994   p_chargeable_flag                 IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
4995   p_ready_to_bill_flag              IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
4996   p_ready_to_distribute_flag        IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
4997   p_limit_to_txn_controls_flag      IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
4998   p_labor_bill_rate_org_id          IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
4999   p_labor_std_bill_rate_schdl       IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5000   p_labor_schedule_fixed_date       IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
5001   p_labor_schedule_discount         IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5002   p_nl_bill_rate_org_id             IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5003   p_nl_std_bill_rate_schdl          IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5004   p_nl_schedule_fixed_date          IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
5005   p_nl_schedule_discount            IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5006   p_labor_cost_multiplier_name      IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5007   p_cost_ind_rate_sch_id            IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5008   p_rev_ind_rate_sch_id             IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5009   p_inv_ind_rate_sch_id             IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5010   p_cost_ind_sch_fixed_date         IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
5011   p_rev_ind_sch_fixed_date          IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
5012   p_inv_ind_sch_fixed_date          IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
5013   p_labor_sch_type                  IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5014   p_nl_sch_type                     IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5015   p_actual_start_date                   IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
5016   p_actual_finish_date                  IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
5017   p_early_start_date                    IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
5018   p_early_finish_date                   IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
5019   p_late_start_date                     IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
5020   p_late_finish_date                    IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
5021   p_scheduled_start_date                IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
5022   p_scheduled_finish_date               IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
5023   p_attribute_category          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5024   p_attribute1              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5025   p_attribute2              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5026   p_attribute3              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5027   p_attribute4              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5028   p_attribute5              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5029   p_attribute6              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5030   p_attribute7              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5031   p_attribute8              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5032   p_attribute9              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5033   p_attribute10             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5034   p_allow_cross_charge_flag            IN VARCHAR2 :=
5035 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5036   p_project_rate_date      IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
5037   p_project_rate_type      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5038  p_cc_process_labor_flag  IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5039  p_labor_tp_schedule_id   IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5040  p_labor_tp_fixed_date    IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
5041  p_cc_process_nl_flag     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5042  p_nl_tp_schedule_id      IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5043  p_nl_tp_fixed_date       IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
5044  p_receive_project_invoice_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5045  p_work_type_id           IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5046  p_emp_bill_rate_schedule_id  IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5047  p_job_bill_rate_schedule_id  IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5048 --Sakthi  MCB
5049  p_non_lab_std_bill_rt_sch_id  IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5050  p_taskfunc_cost_rate_type     IN VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5051  p_taskfunc_cost_rate_date     IN DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
5052 --Sakthi  MCB
5053  p_labor_disc_reason_code       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5054  p_non_labor_disc_reason_code   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5055 --PA L changes -- bug 2872708  --update_task
5056  p_retirement_cost_flag          VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5057  p_cint_eligible_flag            VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5058  p_cint_stop_date                DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
5059 --end PA L changes -- bug 2872708
5060 
5061 --(Begin Venkat) FP_M changes ----------------------------------------------
5062  p_invoice_method                IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5063  p_customer_id                   IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5064  p_gen_etc_source_code           IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5065 --(End Venkat) FP_M changes ------------------------------------------------
5066 
5067   p_out_pa_task_id                  OUT    NOCOPY NUMBER, -- 4537865
5068   p_out_pm_task_reference           OUT    NOCOPY VARCHAR2            ) -- 4537865
5069 
5070 IS
5071    CURSOR l_get_project_info_csr (l_project_id IN NUMBER)
5072    IS
5073    SELECT project_type,pm_project_reference
5074    FROM   pa_projects
5075    WHERE  project_id = l_project_id;
5076 
5077    /* Added for bug#2666913 to get the project type*/
5078    CURSOR l_get_project_type_info_csr (l_project_id IN NUMBER)
5079    IS
5080    SELECT project_type_class_code
5081    FROM   pa_project_types pt, pa_projects p
5082    WHERE  p.project_id = l_project_id
5083    and    p.project_type = pt.project_type;
5084 
5085 
5086    CURSOR l_service_type_csr( p_service_type_code VARCHAR2 )
5087    IS
5088    SELECT 'x'
5089    FROM   pa_lookups
5090    WHERE  lookup_type = 'SERVICE TYPE'
5091    AND    lookup_code = p_service_type_code;
5092 
5093    CURSOR l_task_rec_csr (l_project_id NUMBER ,l_task_id NUMBER)
5094    IS
5095    SELECT *
5096    FROM pa_tasks
5097    WHERE project_id = l_project_id
5098    AND   task_id    = l_task_id;
5099 
5100    CURSOR l_check_child_exists_csr (l_project_id NUMBER,l_task_id NUMBER )
5101    IS
5102    SELECT 'x' FROM
5103    PA_TASKS
5104    WHERE project_id = l_project_id
5105    AND   parent_task_id = l_task_id;
5106 
5107    CURSOR l_outer_child_dates_csr (l_project_id NUMBER,l_task_id NUMBER)
5108    IS
5109    SELECT MIN(TRUNC(start_date))
5110    ,      MAX(TRUNC(completion_date)) -- Bug Fix 4705139
5111    FROM pa_tasks
5112    WHERE project_id = l_project_id
5113    AND   parent_task_id = l_task_id;
5114 
5115    CURSOR l_outer_parent_dates_csr (l_project_id NUMBER,l_task_id NUMBER)
5116    IS
5117    SELECT MIN(TRUNC(start_date))
5118    ,      MAX(TRUNC(completion_date)) -- Bug Fix 4705139
5119    FROM pa_tasks
5120    WHERE project_id = l_project_id
5121    AND   task_id = l_task_id;
5122 
5123    CURSOR l_project_date_csr (l_project_id NUMBER )
5124    IS
5125    SELECT trunc(start_date) start_date,trunc(completion_date) completion_date -- Bug Fix 4705139
5126    FROM   pa_projects
5127    WHERE  project_id = l_project_id;
5128 
5129    CURSOR l_top_task_csr (p_task_id NUMBER)
5130    IS
5131    SELECT top_task_id
5132    FROM pa_tasks
5133    WHERE task_id = p_task_id;
5134 
5135    --needed to convert pm_parent_task_reference to parent_task_id
5136    --convert_pm_taskref_to_id can not be used because parent_id can be NULL
5137 
5138    CURSOR l_convert_pm_parent_to_id_csr( p_project_id NUMBER, p_pm_task_reference VARCHAR2 )
5139    IS
5140    SELECT   task_id
5141    FROM     pa_tasks
5142    WHERE    pm_task_reference = p_pm_task_reference
5143    AND      project_id = p_project_id;
5144 
5145    CURSOR l_parent_wbs_csr ( p_project_id NUMBER, p_pa_task_id NUMBER )
5146    IS
5147    SELECT   wbs_level
5148    FROM     pa_tasks
5149    WHERE    task_id = p_pa_task_id
5150    AND      project_id = p_project_id;
5151 
5152    CURSOR l_validate_parent_id_csr( p_project_id NUMBER, p_task_id NUMBER)
5153    IS
5154    SELECT   'x'
5155    FROM     pa_tasks
5156    WHERE    task_id = p_task_id
5157    AND      project_id = p_project_id;
5158 
5159    CURSOR l_lock_rows_csr( p_task_id NUMBER)
5160    IS
5161    SELECT 'x'
5162    FROM   pa_tasks
5163    WHERE  task_id = p_task_id
5164    FOR UPDATE NOWAIT;
5165 
5166 -- Used when parent_id is changed, and the task (and it's children) is on a different wbs level
5167 
5168    CURSOR l_wbs_level_csr( p_task_id NUMBER)
5169    IS
5170    SELECT   task_id
5171    FROM     pa_tasks
5172    START WITH   task_id=p_task_id
5173    CONNECT BY PRIOR task_id=parent_task_id
5174    FOR UPDATE NOWAIT;
5175 
5176 -- *O
5177 -- Used to check if task is being moved to a lower level within it's own hierarchy.
5178 
5179    CURSOR l_chk_chlds_parent_id_csr( p_task_id NUMBER, p_new_parent_task_id NUMBER)
5180    IS
5181    SELECT   'x'
5182    FROM     pa_tasks
5183    WHERE    task_id=p_new_parent_task_id
5184    START WITH   task_id=p_task_id
5185    CONNECT BY PRIOR task_id=parent_task_id
5186    FOR UPDATE NOWAIT;
5187 
5188    --needed for update of address_id
5189 
5190    CURSOR l_customer_csr( p_project_id NUMBER )
5191    IS
5192    SELECT   customer_id
5193    FROM     pa_project_customers
5194    WHERE    project_id = p_project_id;
5195 
5196    -- 4363092 TCA changes, replaced RA views with HZ tables
5197    /*
5198    CURSOR l_address_csr(p_customer_id NUMBER, p_address_id NUMBER )
5199    IS
5200    SELECT   'x'
5201    FROM     ra_addresses
5202    WHERE    customer_id = p_customer_id
5203    AND      address_id = p_address_id;
5204    */
5205 
5206    CURSOR l_address_csr(p_customer_id NUMBER, p_address_id NUMBER )
5207    IS
5208    SELECT   'x'
5209    FROM
5210          hz_cust_acct_sites_all acct_site
5211    WHERE
5212          acct_site.cust_account_id = p_customer_id
5213    AND   acct_site.cust_acct_site_id = p_address_id;
5214 
5215    -- 4363092 end
5216 
5217 l_min_child_start_date          DATE;
5218 l_max_child_completion_date     DATE;
5219 l_min_parent_start_date         DATE;
5220 l_max_parent_completion_date        DATE;
5221 
5222 l_amg_segment1       VARCHAR2(25);
5223 l_amg_task_number       VARCHAR2(50);
5224 
5225 --needed to get the field values associated to a AMG message
5226 
5227    CURSOR   l_amg_project_csr
5228       (p_pa_project_id pa_projects.project_id%type)
5229    IS
5230    SELECT   segment1
5231    FROM     pa_projects p
5232    WHERE p.project_id = p_pa_project_id;
5233 
5234    CURSOR   l_amg_task_csr
5235       (p_pa_task_id pa_tasks.task_id%type)
5236    IS
5237    SELECT   task_number
5238    FROM     pa_tasks p
5239    WHERE p.task_id = p_pa_task_id;
5240 
5241 -- Fix for Bug # 1335417
5242 -- needed for update of Fixed Date( p_cost_ind_sch_fixed_date)
5243 
5244    CURSOR l_ind_rate_schedule_type_csr( p_cost_ind_rate_sch_id NUMBER)
5245    IS
5246    SELECT       ind_rate_schedule_type
5247    FROM         pa_ind_rate_schedules
5248    WHERE        ind_rate_sch_id = p_cost_ind_rate_sch_id;
5249 
5250 -- Fix for Bug # 1335417
5251    l_temp_var_sch_type                         VARCHAR2(1);
5252 
5253 -- Fix for Bug # 1272548
5254 
5255 -- needed for update of Schedule Id( p_cost_ind_rate_sch_id)
5256 
5257    CURSOR l_cost_ind_rate_sch_id_csr( p_cost_ind_rate_sch_id NUMBER)
5258    IS
5259    SELECT       'x'
5260    FROM         pa_ind_rate_schedules
5261    WHERE        ind_rate_sch_id = p_cost_ind_rate_sch_id;
5262 
5263 -- Fix for Bug # 1272548
5264    l_temp_var                          VARCHAR2(1);
5265 
5266 l_project_date_rec                  l_project_date_csr%ROWTYPE;
5267 
5268 l_api_name              CONSTANT        VARCHAR2(30):=  'update_one_task';
5269 
5270 l_return_status                         VARCHAR2(1);
5271 l_index                                 NUMBER;
5272 l_err_code                              NUMBER := 0;
5273 l_err_stage                             VARCHAR2(2000);
5274 l_err_stack                             VARCHAR2(2000);
5275 l_project_id                    NUMBER ;
5276 l_cursor                                INTEGER;
5277 --l_statement                           VARCHAR2(2000);  --bug 2955326
5278 l_statement                         VARCHAR2(30000);  --bug 2955326
5279 l_rows                                  INTEGER;
5280 l_task_rec                              l_task_rec_csr%ROWTYPE;
5281 l_temp                                  VARCHAR2(1);
5282 l_children_exist                        VARCHAR2(1) := 'N';
5283 l_new_start_date                        DATE;
5284 l_temp_parent_task_id                   NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
5285 l_new_parent_task_id                    NUMBER;
5286 l_top_task_id                   NUMBER;
5287 l_task_id                   NUMBER;
5288 l_update_yes_flag                       VARCHAR2(1) := 'N';
5289 l_pm_task_reference         VARCHAR2(30);
5290 l_update_start_date_flag        VARCHAR2(1);
5291 l_update_end_date_flag          VARCHAR2(1);
5292 l_new_parent_wbs_level          NUMBER;
5293 l_wbs_change_task_id            NUMBER;
5294 l_delta_level               NUMBER;
5295 l_customer_id               NUMBER;
5296 l_address_valid             VARCHAR2(1);
5297 l_msg_count             NUMBER ;
5298 l_msg_data              VARCHAR2(2000);
5299 l_function_allowed          VARCHAR2(1);
5300 l_resp_id               NUMBER := 0;
5301 l_user_id                       NUMBER := 0;
5302 l_module_name                           VARCHAR2(80);
5303 l_tasks_restructured_flag               VARCHAR2(1) := 'N';
5304 l_project_type              VARCHAR2(30);
5305 l_project_type_class_code VARCHAR2(30);         /* Added for bug#2666913 */
5306 l_pm_project_reference          VARCHAR2(30);
5307 l_org_func_security                     VARCHAR2(1);  /*bug#1968394  */
5308 /*Added for bug 2802984 */
5309 l_out_labor_sch_type                    VARCHAR2(1);
5310 l_out_nl_labor_sch_type                 VARCHAR2(1);
5311 l_rev_rate_sch_type                     VARCHAR2(1);
5312 l_inv_rate_sch_type                     VARCHAR2(1);
5313 l_std_bill_rate_schedule                VARCHAR2(30);
5314 
5315 -- (Begin Venkat) FP_M changes ------------------------------------------
5316 l_revenue_accrual_method        VARCHAR2(30);
5317 l_invoice_method            VARCHAR2(30); -- 4177105 this var is unitialized , use p_invoice_method var
5318 l_gen_etc_source_code           VARCHAR2(30);
5319 -- (End Venkat) FP_M changes --------------------------------------------
5320 
5321 --bug 2955326
5322 l_b_pm_tk_ref_flag             VARCHAR2(1) := 'N';
5323 l_b_tk_nm_flag                 VARCHAR2(1) := 'N';
5324 l_b_ln_tk_nm_flag              VARCHAR2(1) := 'N';
5325 l_b_tk_desc_flag               VARCHAR2(1) := 'N';
5326 l_b_rdy_to_bill_flag           VARCHAR2(1) := 'N';
5327 l_b_rdy_to_dist_flag           VARCHAR2(1) := 'N';
5328 l_b_lmt_to_txn_ctrl_fg         VARCHAR2(1) := 'N';
5329 l_b_cryng_out_org_id_flag      VARCHAR2(1) := 'N';
5330 l_b_chgble_fg                  VARCHAR2(1) := 'N';
5331 l_b_billable_fg                VARCHAR2(1) := 'N';
5332 l_b_srv_tp_cd_fg               VARCHAR2(1) := 'N';
5333 l_b_tk_num_fg                  VARCHAR2(1) := 'N';
5334 l_b_tk_st_dt_flag              VARCHAR2(1) := 'N';
5335 l_b_comp_dt_fg                 VARCHAR2(1) := 'N';
5336 l_b_prt_tk_id_fg               VARCHAR2(1) := 'N';
5337 l_b_addr_id_fg                 VARCHAR2(1) := 'N';
5338 l_b_attr_cat_fg                VARCHAR2(1) := 'N';
5339 l_b_attr1_fg                   VARCHAR2(1) := 'N';
5340 l_b_attr2_fg                   VARCHAR2(1) := 'N';
5341 l_b_attr3_fg                   VARCHAR2(1) := 'N';
5342 l_b_attr4_fg                   VARCHAR2(1) := 'N';
5343 l_b_attr5_fg                   VARCHAR2(1) := 'N';
5344 l_b_attr6_fg                   VARCHAR2(1) := 'N';
5345 l_b_attr7_fg                   VARCHAR2(1) := 'N';
5346 l_b_attr8_fg                   VARCHAR2(1) := 'N';
5347 l_b_attr9_fg                   VARCHAR2(1) := 'N';
5348 l_b_attr10_fg                  VARCHAR2(1) := 'N';
5349 l_b_al_x_chg_fg                VARCHAR2(1) := 'N';
5350 l_b_prj_rt_tp_fg               VARCHAR2(1) := 'N';
5351 l_b_prj_rt_dt_fg               VARCHAR2(1) := 'N';
5352 l_b_cc_proc_lbr_fg             VARCHAR2(1) := 'N';
5353 l_b_lbr_tp_sch_id_fg           VARCHAR2(1) := 'N';
5354 l_b_lbr_tp_fx_dt_fg            VARCHAR2(1) := 'N';
5355 l_b_cc_proc_nl_fg              VARCHAR2(1) := 'N';
5356 l_b_nl_tp_sch_id_fg            VARCHAR2(1) := 'N';
5357 l_b_nl_tp_fx_dt_fg             VARCHAR2(1) := 'N';
5358 l_b_rcv_prj_inv_fg             VARCHAR2(1) := 'N';
5359 l_b_wk_tp_id_fg                VARCHAR2(1) := 'N';
5360 l_b_emp_bill_rt_sch_id_fg      VARCHAR2(1) := 'N';
5361 l_b_jb_bill_rt_sch_id_fg       VARCHAR2(1) := 'N';
5362 l_b_nn_lb_std_bl_rt_sch_id_fg  VARCHAR2(1) := 'N';
5363 l_b_tkfnc_cst_rt_dt_fg         VARCHAR2(1) := 'N';
5364 l_b_tkfnc_cst_rt_tp_fg         VARCHAR2(1) := 'N';
5365 l_b_lbr_disc_rsn_cd_fg         VARCHAR2(1) := 'N';
5366 l_b_nn_lbr_disc_rsn_cd_fg      VARCHAR2(1) := 'N';
5367 l_b_act_st_dt_fg               VARCHAR2(1) := 'N';
5368 l_b_act_fn_dt_fg               VARCHAR2(1) := 'N';
5369 l_b_erly_st_dt_fg              VARCHAR2(1) := 'N';
5370 l_b_erly_fn_dt_fg              VARCHAR2(1) := 'N';
5371 l_b_lt_st_dt_fg                VARCHAR2(1) := 'N';
5372 l_b_lt_fn_dt_fg                VARCHAR2(1) := 'N';
5373 l_b_sch_st_dt_fg               VARCHAR2(1) := 'N';
5374 l_b_sch_fn_dt_fg               VARCHAR2(1) := 'N';
5375 l_b_cst_ind_rt_sch_id_fg       VARCHAR2(1) := 'N';
5376 l_b_cst_ind_sch_fx_dt_fg       VARCHAR2(1) := 'N';
5377 
5378 l_b_ret_cst_fg                 VARCHAR2(1) := 'N';
5379 l_b_cint_elg_fg                VARCHAR2(1) := 'N';
5380 l_b_cint_stp_dt_fg             VARCHAR2(1) := 'N';
5381 l_b_lbr_sch_tp_fg              VARCHAR2(1) := 'N';
5382 l_b_n_lbr_sch_tp_fg            VARCHAR2(1) := 'N';
5383 l_b_jb_bill_rt_sch_id_fg2      VARCHAR2(1) := 'N';
5384 l_b_emp_bill_rt_sch_id_fg2     VARCHAR2(1) := 'N';
5385 l_b_lbr_sch_fx_dt              VARCHAR2(1) := 'N';
5386 l_b_lbr_sch_dsnt               VARCHAR2(1) := 'N';
5387 l_b_rv_ind_rt_sch_id_fg        VARCHAR2(1) := 'N';
5388 l_b_inv_ind_rt_sch_id_fg       VARCHAR2(1) := 'N';
5389 l_b_rv_ind_sch_fx_dt_fg        VARCHAR2(1) := 'N';
5390 l_b_iv_ind_sch_fx_dt_fg        VARCHAR2(1) := 'N';
5391 l_b_nl_bl_rt_org_id_fg         VARCHAR2(1) := 'N';
5392 l_b_nl_std_bl_rt_sch_fg        VARCHAR2(1) := 'N';
5393 l_b_nl_sch_fx_dt_fg            VARCHAR2(1) := 'N';
5394 l_b_nl_sch_dsnt_fg             VARCHAR2(1) := 'N';
5395 l_b_nl_disc_rsn_cd_fg          VARCHAR2(1) := 'N';
5396 l_b_tk_mgr_id_fg               VARCHAR2(1) := 'N';
5397 --end bug 2955326
5398 
5399 --(Begin Venkat) FP_M changes --------------------------------------------
5400 l_inv_md_fg            VARCHAR2(1) := 'N';
5401 l_cust_id_fg               VARCHAR2(1) := 'N';
5402 l_gen_etc_src_co_fg            VARCHAR2(1) := 'N';
5403 --(End Venkat) FP_M changes ----------------------------------------------
5404 
5405 l_warnings_only_flag VARCHAR2(1) := 'N'; --bug3134205
5406 --rtarway BUG 3908013
5407 l_return_msg                  varchar2(2000);
5408 l_validate_status             varchar2(1);
5409 /* bug#5243018 : Reverting the fix in Bug 4120380
5410 task_number_change_Ok_flag    varchar2(1); --Added for Bug 4120380 */
5411 
5412 l_cc_process_labor_flag  varchar2(1) := p_cc_process_labor_flag; /* Added for Bug 5395048 */
5413 l_cc_process_nl_flag  varchar2(1) := p_cc_process_nl_flag; /* Added for Bug 5395048 */
5414 
5415  --bug 6153503
5416 l_attribute_category          VARCHAR2(30);
5417 l_attribute1                  VARCHAR2(150);
5418 l_attribute2                  VARCHAR2(150);
5419 l_attribute3                  VARCHAR2(150);
5420 l_attribute4                  VARCHAR2(150);
5421 l_attribute5                  VARCHAR2(150);
5422 l_attribute6                  VARCHAR2(150);
5423 l_attribute7                  VARCHAR2(150);
5424 l_attribute8                  VARCHAR2(150);
5425 l_attribute9                  VARCHAR2(150);
5426 l_attribute10                 VARCHAR2(150);
5427 l_project_type2    VARCHAR2(20);-- for bug 7403227
5428   BEGIN
5429 
5430 --  Standard begin of API savepoint
5431 
5432     SAVEPOINT update_task_pub;
5433 
5434 --  Standard call to check for call compatibility.
5435 
5436     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
5437                                          p_api_version_number   ,
5438                                          l_api_name             ,
5439                                          G_PKG_NAME             )
5440     THEN
5441 
5442     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5443 
5444     END IF;
5445 
5446     --  Initialize the message table if requested.
5447 
5448     IF FND_API.TO_BOOLEAN( p_init_msg_list )
5449     THEN
5450 
5451     FND_MSG_PUB.initialize;
5452 
5453     END IF;
5454 
5455 --  Set API return status to success
5456 
5457     p_return_status := FND_API.G_RET_STS_SUCCESS;
5458 
5459     --pm_product_code is mandatory
5460 
5461     l_tasks_restructured_flag := 'N';
5462     l_resp_id := FND_GLOBAL.Resp_id;
5463     l_user_id := FND_GLOBAL.User_id;
5464     --l_module_name := p_pm_product_code||'.'||'PA_PM_UPDATE_TASK';
5465     l_module_name := 'PA_PM_UPDATE_TASK';
5466 
5467     -- As part of enforcing project security, which would determine
5468     -- whether the user has the necessary privileges to update the task
5469     -- need to call the pa_security package
5470 
5471     pa_security.initialize (X_user_id        => l_user_id,
5472                             X_calling_module => l_module_name);
5473 
5474     -- Actions performed using the APIs would be subject to
5475     -- function security. If the responsibility does not allow
5476     -- such functions to be executed, the API should not proceed further
5477     -- since the user does not have access to such functions
5478 
5479 
5480     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
5481       (p_api_version_number => p_api_version_number,
5482        p_responsibility_id  => l_resp_id,
5483        p_function_name      => 'PA_PM_UPDATE_TASK',
5484        p_msg_count      => l_msg_count,
5485        p_msg_data           => l_msg_data,
5486        p_return_status      => l_return_status,
5487        p_function_allowed   => l_function_allowed );
5488 
5489     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
5490         THEN
5491 
5492             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5493 
5494         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
5495         THEN
5496 
5497             RAISE FND_API.G_EXC_ERROR;
5498         END IF;
5499         IF l_function_allowed = 'N' THEN
5500           pa_interface_utils_pub.map_new_amg_msg
5501           ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
5502            ,p_msg_attribute    => 'CHANGE'
5503            ,p_resize_flag      => 'Y'
5504            ,p_msg_context      => 'GENERAL'
5505            ,p_attribute1       => ''
5506            ,p_attribute2       => ''
5507            ,p_attribute3       => ''
5508            ,p_attribute4       => ''
5509            ,p_attribute5       => '');
5510        p_return_status := FND_API.G_RET_STS_ERROR;
5511        RAISE FND_API.G_EXC_ERROR;
5512         END IF;
5513 
5514 --bug 2841158
5515 --    IF p_pm_product_code IS NULL
5516 --    OR p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5517     IF p_pm_product_code IS NOT NULL
5518     AND p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5519 --bug 2841158
5520        AND p_pm_product_code <> 'WORKPLAN'    --bug 2665656
5521     THEN
5522 
5523     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
5524     THEN
5525           pa_interface_utils_pub.map_new_amg_msg
5526           ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
5527            ,p_msg_attribute    => 'CHANGE'
5528            ,p_resize_flag      => 'N'
5529            ,p_msg_context      => 'GENERAL'
5530            ,p_attribute1       => ''
5531            ,p_attribute2       => ''
5532            ,p_attribute3       => ''
5533            ,p_attribute4       => ''
5534            ,p_attribute5       => '');
5535     END IF;
5536     RAISE FND_API.G_EXC_ERROR;
5537     END IF;
5538 
5539 --bug 2841158
5540     IF p_pm_product_code <> 'WORKPLAN'
5541        AND p_pm_product_code IS NOT NULL
5542        AND p_pm_product_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5543     THEN
5544 --bug 2841158
5545 
5546          /*added for bug no :2413400*/
5547         OPEN p_product_code_csr (p_pm_product_code);
5548         FETCH p_product_code_csr INTO l_pm_product_code;
5549         CLOSE p_product_code_csr;
5550 
5551         IF l_pm_product_code <> 'X'
5552            AND p_pm_product_code <> 'WORKPLAN'    --bug 2665656
5553         THEN
5554 
5555            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
5556            THEN
5557            pa_interface_utils_pub.map_new_amg_msg
5558            ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
5559             ,p_msg_attribute    => 'CHANGE'
5560             ,p_resize_flag      => 'N'
5561             ,p_msg_context      => 'GENERAL'
5562             ,p_attribute1       => ''
5563             ,p_attribute2       => ''
5564             ,p_attribute3       => ''
5565             ,p_attribute4       => ''
5566             ,p_attribute5       => '');
5567            END IF;
5568         p_return_status             := FND_API.G_RET_STS_ERROR;
5569         RAISE FND_API.G_EXC_ERROR;
5570         END IF;
5571    END IF;  --bug 2841158
5572 
5573 --  convert pm_project_reference to id
5574 
5575     Pa_project_pvt.Convert_pm_projref_to_id (
5576          p_pm_project_reference  => p_pm_project_reference,
5577          p_pa_project_id         => p_pa_project_id,
5578          p_out_project_id        => l_project_id,
5579          p_return_status         => l_return_status );
5580 
5581     IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
5582     THEN
5583 
5584             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
5585 
5586     ELSIF l_return_status = FND_API.G_RET_STS_ERROR
5587     THEN
5588 
5589             RAISE  FND_API.G_EXC_ERROR;
5590     END IF;
5591 
5592       -- Now verify whether project security allows the user to update
5593       -- the task
5594 
5595       IF pa_security.allow_query (x_project_id => l_project_id ) = 'N' THEN
5596 
5597 
5598          -- The user does not have query privileges on this project
5599          -- Hence, cannot update the task.Raise error
5600 
5601           pa_interface_utils_pub.map_new_amg_msg
5602           ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
5603            ,p_msg_attribute    => 'CHANGE'
5604            ,p_resize_flag      => 'Y'
5605            ,p_msg_context      => 'GENERAL'
5606            ,p_attribute1       => ''
5607            ,p_attribute2       => ''
5608            ,p_attribute3       => ''
5609            ,p_attribute4       => ''
5610            ,p_attribute5       => '');
5611        p_return_status := FND_API.G_RET_STS_ERROR;
5612        RAISE FND_API.G_EXC_ERROR;
5613       ELSE
5614             -- If the user has query privileges, then check whether
5615             -- update privileges are also available
5616          IF pa_security.allow_update (x_project_id => l_project_id ) = 'N' THEN
5617 
5618             -- The user does not have update privileges on this project
5619             -- Hence , raise error
5620 
5621           pa_interface_utils_pub.map_new_amg_msg
5622           ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
5623            ,p_msg_attribute    => 'CHANGE'
5624            ,p_resize_flag      => 'Y'
5625            ,p_msg_context      => 'GENERAL'
5626            ,p_attribute1       => ''
5627            ,p_attribute2       => ''
5628            ,p_attribute3       => ''
5629            ,p_attribute4       => ''
5630            ,p_attribute5       => '');
5631        p_return_status := FND_API.G_RET_STS_ERROR;
5632        RAISE FND_API.G_EXC_ERROR;
5633         END IF;
5634      END IF;
5635     --5262740 Changed PA_PROJECT_PVT.Convert_pm_taskref_to_id to PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
5636     Pa_project_pvt.Convert_pm_taskref_to_id_all (
5637         p_pa_project_id       => l_project_id,
5638         p_pa_task_id          => p_pa_task_id,
5639         p_pm_task_reference   => p_pm_task_reference,
5640         p_out_task_id         => l_task_id,
5641         p_return_status       => l_return_status );
5642 
5643     IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
5644     THEN
5645 
5646             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
5647 
5648     ELSIF l_return_status = FND_API.G_RET_STS_ERROR
5649     THEN
5650 
5651             RAISE  FND_API.G_EXC_ERROR;
5652     END IF;
5653 
5654 -- Get segment1 for AMG messages
5655 
5656    OPEN l_amg_project_csr( l_project_id );
5657    FETCH l_amg_project_csr INTO l_amg_segment1;
5658    CLOSE l_amg_project_csr;
5659 /*
5660    OPEN l_amg_task_csr( l_task_id );
5661    FETCH l_amg_task_csr INTO l_amg_task_number;
5662    CLOSE l_amg_task_csr;
5663 */
5664    l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
5665     (p_task_number => p_task_name
5666     ,p_task_reference =>p_pm_task_reference
5667     ,p_task_id => l_task_id);
5668 
5669 
5670 
5671 --  Lock the task for update
5672     OPEN l_lock_rows_csr( l_task_id );
5673 
5674 
5675 --     get the current data of this task
5676        OPEN l_task_rec_csr (l_project_id,l_task_id );
5677        FETCH l_task_rec_csr INTO l_task_rec;
5678        CLOSE l_task_rec_csr;
5679 
5680 
5681 --     Check for existing children
5682 
5683        OPEN l_check_child_exists_csr(l_project_id,l_task_id);
5684        FETCH l_check_child_exists_csr INTO l_temp;
5685        IF l_check_child_exists_csr%FOUND
5686        THEN
5687           l_children_exist := 'Y';
5688        ELSE
5689           l_children_exist := 'N';
5690        END IF;
5691 
5692        CLOSE l_check_child_exists_csr;
5693 
5694 --     Building the dynamic SQL statement
5695 
5696        l_statement := ' UPDATE PA_TASKS SET ';
5697 
5698 --  TASK REFERENCE
5699 
5700        IF   p_pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5701        AND  nvl(p_pm_task_reference,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
5702             nvl(l_task_rec.pm_task_reference, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
5703        AND  p_pm_task_reference IS NOT NULL --redundant, but added for clarity
5704        THEN
5705 
5706 --bug 2955326
5707 /*
5708             l_statement := l_statement ||
5709                            ' PM_TASK_REFERENCE = '||''''||
5710                            RTRIM(p_pm_task_reference)||''''||',';
5711 */
5712             l_statement := l_statement ||
5713                            ' PM_TASK_REFERENCE = :pm_tk_ref ,';
5714             l_b_pm_tk_ref_flag := 'Y';
5715 --end bug 2955326
5716             l_update_yes_flag := 'Y';
5717 
5718             l_pm_task_reference := p_pm_task_reference;
5719        ELSE
5720             l_pm_task_reference := l_task_rec.pm_task_reference;
5721 
5722        END IF;
5723 
5724 --  TASK NAME
5725 
5726        IF p_task_name <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5727        AND nvl(p_task_name,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> nvl(l_task_rec.task_name, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
5728        AND p_task_name IS NOT NULL --redundant, but added for clarity
5729        THEN
5730 
5731 --bug 2955326
5732 /*
5733             l_statement := l_statement ||
5734                            ' TASK_NAME = '||''''||
5735                            RTRIM(p_task_name)||''''||',';
5736 */
5737             l_statement := l_statement ||
5738                            ' TASK_NAME = :tk_name ,';
5739             l_b_tk_nm_flag := 'Y';
5740 --end bug 2955326
5741             l_update_yes_flag := 'Y';
5742 
5743        END IF;
5744 
5745 --     LONG TASK NAME
5746 
5747        IF p_long_task_name <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5748        AND nvl(p_long_task_name,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
5749         <> nvl(l_task_rec.long_task_name, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
5750        AND p_long_task_name IS NOT NULL --redundant, but added for clarity
5751        THEN
5752 
5753 --bug 2955326
5754 /*
5755             l_statement := l_statement ||
5756                            ' LONG_TASK_NAME = '||''''||
5757                            RTRIM(p_long_task_name)||''''||',';
5758 */
5759             l_statement := l_statement ||
5760                            ' LONG_TASK_NAME = :ln_tk_name ,';
5761             l_b_ln_tk_nm_flag := 'Y';
5762 --end bug 2955326
5763             l_update_yes_flag := 'Y';
5764 
5765        END IF;
5766 
5767 --  DESCRIPTION
5768    /*   IF (p_task_description <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
5769           p_task_description IS NOT NULL)*/ /*Changed the above code for
5770           p_task_description IS NOT NULL to p_task_description IS NULL,
5771           I reverted back the changes done for bug 1210276 for bug 3321980 */
5772          /* Fix for Bug # 1210276: condition changed to IS NOT NULL from
5773            IS NULL- so that the description column is not updated to NULL
5774            when no value is passed. */
5775         IF (p_task_description <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
5776             p_task_description IS NULL) /* The new change for bug 3321980 */
5777        AND nvl(p_task_description,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
5778            nvl(l_task_rec.description,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
5779        THEN
5780 --bug 2955326
5781 /*
5782            l_statement := l_statement ||
5783                            ' DESCRIPTION  = '||''''||
5784                            RTRIM(p_task_description)||''''||',';
5785 */
5786             l_statement := l_statement ||
5787                            ' DESCRIPTION  = :descrp ,';
5788             l_b_tk_desc_flag := 'Y';
5789 --end bug 2955326
5790             l_update_yes_flag := 'Y';
5791 
5792        END IF;
5793 
5794 --  READY_TO_BILL
5795 
5796        IF p_ready_to_bill_flag <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5797        AND nvl(p_ready_to_bill_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
5798            <> nvl(l_task_rec.ready_to_bill_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
5799        AND p_ready_to_bill_flag IS NOT NULL --redundant, but added for clarity
5800        THEN
5801 --bug 2955326
5802 /*
5803             l_statement := l_statement ||
5804                            ' READY_TO_BILL_FLAG  = '||''''||
5805                              p_ready_to_bill_flag||''''||',';
5806 */
5807             l_statement := l_statement ||
5808                            ' READY_TO_BILL_FLAG  = :rdy_to_bill_fg ,';
5809             l_b_rdy_to_bill_flag := 'Y';
5810 --end bug 2955326
5811             l_update_yes_flag := 'Y';
5812 
5813        END IF;
5814 
5815 --  READY_TO_DISTRIBUTE
5816 
5817        IF p_ready_to_distribute_flag <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5818        AND nvl(p_ready_to_distribute_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
5819            <> nvl(l_task_rec.ready_to_distribute_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
5820        AND p_ready_to_distribute_flag IS NOT NULL --redundant, but added for clarity
5821        THEN
5822 --bug 2955326
5823 /*
5824            l_statement := l_statement ||
5825                   ' READY_TO_DISTRIBUTE_FLAG  = '||''''||
5826                       p_ready_to_distribute_flag||''''||',';
5827 */
5828            l_statement := l_statement ||
5829                   ' READY_TO_DISTRIBUTE_FLAG  = :rdy_to_dist_fg ,';
5830            l_b_rdy_to_dist_flag := 'Y';
5831 --end bug 2955326
5832            l_update_yes_flag := 'Y';
5833 
5834        END IF;
5835 
5836 --  LIMIT_TO_TXN_CONTROLS
5837 
5838        IF (p_limit_to_txn_controls_flag <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_limit_to_txn_controls_flag IS NULL )
5839        AND nvl(p_limit_to_txn_controls_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
5840            <> nvl(l_task_rec.limit_to_txn_controls_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
5841        THEN
5842 --bug 2955326
5843 /*
5844            l_statement := l_statement ||
5845                   ' LIMIT_TO_TXN_CONTROLS_FLAG  = '||''''||
5846                       p_limit_to_txn_controls_flag||''''||',';
5847 */
5848            l_statement := l_statement ||
5849                   ' LIMIT_TO_TXN_CONTROLS_FLAG  = :lmt_to_txn_ctrl_fg ,';
5850            l_b_lmt_to_txn_ctrl_fg:='Y';  -- Added for bug 3464187
5851            l_update_yes_flag := 'Y';
5852 
5853        END IF;
5854 
5855 --  CARRYING_OUT_ORGANIZATION_ID
5856 
5857        IF p_carrying_out_organization_id <>
5858           PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5859        AND nvl(p_carrying_out_organization_id,
5860                PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
5861           <> nvl(l_task_rec.carrying_out_organization_id,
5862                 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
5863        AND p_carrying_out_organization_id IS NOT NULL THEN
5864            OPEN l_get_project_info_csr (l_task_rec.project_id);
5865            FETCH l_get_project_info_csr INTO
5866                  l_project_type,l_pm_project_reference;
5867            CLOSE l_get_project_info_csr;
5868 
5869            --  Code Added for the bug#1968394
5870            -- Test the function security for Org changes
5871            --
5872            IF (fnd_function.test('PA_PAXPREPR_UPDATE_ORG') = TRUE) THEN
5873              l_org_func_security := 'Y';
5874            ELSE
5875              l_org_func_security := 'N';
5876            END IF;
5877 
5878            pa_project_utils2.validate_attribute_change(
5879            X_Context                => 'ORGANIZATION_VALIDATION'
5880           ,X_insert_update_mode     => NULL
5881           ,X_calling_module         => 'UPDATE_TASK'
5882           ,X_project_id             => l_task_rec.project_id
5883           ,X_task_id                => l_task_id
5884           ,X_old_value              =>
5885                     To_char(l_task_rec.carrying_out_organization_id)
5886           ,X_new_value              =>
5887                     To_char(p_carrying_out_organization_id)
5888           ,X_project_type           => l_project_type
5889           ,X_project_start_date     => NULL
5890           ,X_project_end_date       => NULL
5891           ,X_public_sector_flag     => NULL
5892           ,X_task_manager_person_id => l_task_rec.task_manager_person_id
5893           ,X_Service_type           => l_task_rec.service_type_code
5894           ,X_task_start_date        => l_task_rec.start_date
5895           ,X_task_end_date          => l_task_rec.completion_date
5896           ,X_entered_by_user_id     => FND_GLOBAL.USER_ID
5897           ,X_attribute_category     => l_task_rec.attribute_category
5898           ,X_attribute1             => l_task_rec.attribute1
5899           ,X_attribute2             => l_task_rec.attribute2
5900           ,X_attribute3             => l_task_rec.attribute3
5901           ,X_attribute4             => l_task_rec.attribute4
5902           ,X_attribute5             => l_task_rec.attribute5
5903           ,X_attribute6             => l_task_rec.attribute6
5904           ,X_attribute7             => l_task_rec.attribute7
5905           ,X_attribute8             => l_task_rec.attribute8
5906           ,X_attribute9             => l_task_rec.attribute9
5907           ,X_attribute10            => l_task_rec.attribute10
5908           ,X_pm_product_code        => l_task_rec.pm_product_code
5909           ,X_pm_project_reference   => l_pm_project_reference
5910           ,X_pm_task_reference      => l_task_rec.pm_task_reference
5911 --          ,X_functional_security_flag => NULL  /* Bug#1968394  */
5912           ,X_functional_security_flag => l_org_func_security  /* Bug#1968394  */
5913           ,x_warnings_only_flag     => l_warnings_only_flag --bug3134205
5914           ,X_err_code               => l_err_code
5915           ,X_err_stage              => l_err_stage
5916           ,X_err_stack              => l_err_stack );
5917 
5918            IF l_err_code > 0 THEN
5919         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
5920         THEN
5921                     IF NOT pa_project_pvt.check_valid_message (l_err_stage)
5922                     THEN
5923                      pa_interface_utils_pub.map_new_amg_msg
5924                      ( p_old_message_code => 'PA_TK_CANT_CHG_TASK_ORG'
5925                       ,p_msg_attribute    => 'CHANGE'
5926                       ,p_resize_flag      => 'N'
5927                       ,p_msg_context      => 'TASK'
5928                       ,p_attribute1       => l_amg_segment1
5929                       ,p_attribute2       => l_amg_task_number
5930                       ,p_attribute3       => ''
5931                       ,p_attribute4       => ''
5932                       ,p_attribute5       => '');
5933                     ELSE
5934                      pa_interface_utils_pub.map_new_amg_msg
5935                      ( p_old_message_code => l_err_stage
5936                       ,p_msg_attribute    => 'CHANGE'
5937                       ,p_resize_flag      => 'N'
5938                       ,p_msg_context      => 'TASK'
5939                       ,p_attribute1       => l_amg_segment1
5940                       ,p_attribute2       => l_amg_task_number
5941                       ,p_attribute3       => ''
5942                       ,p_attribute4       => ''
5943                       ,p_attribute5       => '');
5944                     END IF;
5945                 END IF;
5946                 RAISE  FND_API.G_EXC_ERROR;
5947 
5948            ELSIF l_err_code < 0
5949            THEN
5950               RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
5951            END IF;
5952 
5953 --bug 2955326
5954 /*
5955            l_statement :=   l_statement ||
5956                         ' CARRYING_OUT_ORGANIZATION_ID = '||
5957                         TO_CHAR(p_carrying_out_organization_id)||',';
5958 */
5959            l_statement :=   l_statement ||
5960                         ' CARRYING_OUT_ORGANIZATION_ID = :cryng_out_org_id ,';
5961            l_b_cryng_out_org_id_flag := 'Y';
5962 --end bug 2955326
5963            l_update_yes_flag := 'Y';
5964 
5965        END IF;
5966 
5967 --  CHARGEABLE_FLAG
5968 
5969        IF  p_chargeable_flag <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
5970            nvl(p_chargeable_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> nvl(l_task_rec.chargeable_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
5971        THEN
5972 
5973 --         Cannot update chargeable flag for parent tasks
5974 
5975            IF l_children_exist = 'Y'
5976            THEN
5977         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
5978         THEN
5979                      pa_interface_utils_pub.map_new_amg_msg
5980                      ( p_old_message_code => 'PA_CANNOT_CHANGE_CHRG_FLAG'
5981                       ,p_msg_attribute    => 'CHANGE'
5982                       ,p_resize_flag      => 'N'
5983                       ,p_msg_context      => 'TASK'
5984                       ,p_attribute1       => l_amg_segment1
5985                       ,p_attribute2       => l_amg_task_number
5986                       ,p_attribute3       => ''
5987                       ,p_attribute4       => ''
5988                       ,p_attribute5       => '');
5989                 END IF;
5990                 RAISE  FND_API.G_EXC_ERROR;
5991            END IF;
5992 --bug 2955326
5993 /*
5994            l_statement :=   l_statement ||
5995                         ' CHARGEABLE_FLAG  = '||''''||p_chargeable_flag||''''||',';
5996 */
5997            l_statement :=   l_statement ||
5998                         ' CHARGEABLE_FLAG  = :chgble_fg ,';
5999            l_b_chgble_fg := 'Y';
6000 --end bug  2955326
6001            l_update_yes_flag := 'Y';
6002 
6003        END IF;
6004 
6005 --  BILLABLE FLAG
6006          /* Added for bug#2666913 */
6007 
6008        OPEN l_get_project_type_info_csr (l_task_rec.project_id);
6009            FETCH l_get_project_type_info_csr INTO l_project_type_class_code;
6010            CLOSE l_get_project_type_info_csr;
6011 
6012     If p_billable_flag = 'Y' and l_project_type_class_code = 'INDIRECT'
6013     THEN
6014                 p_return_status := FND_API.G_RET_STS_ERROR;
6015 
6016         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6017         THEN
6018         pa_interface_utils_pub.map_new_amg_msg
6019               ( p_old_message_code => 'PA_PR_INDIRECT_NO_BILLING'
6020                ,p_msg_attribute    => 'CHANGE'
6021                ,p_resize_flag      => 'N'
6022                ,p_msg_context      => 'TASK'
6023                ,p_attribute1       => l_amg_segment1
6024                ,p_attribute2       => l_amg_task_number
6025                ,p_attribute3       => ''
6026                ,p_attribute4       => ''
6027                ,p_attribute5       => '');
6028         END IF;
6029 
6030         RAISE FND_API.G_EXC_ERROR;
6031 
6032     END IF;
6033 
6034     /* end of code added for bug #2666913 */
6035 
6036        IF  p_billable_flag <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
6037            nvl(p_billable_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
6038            nvl(l_task_rec.billable_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
6039        THEN
6040 
6041 --bug 2955326
6042 /*
6043            l_statement :=l_statement ||
6044                     ' BILLABLE_FLAG  = '||''''||p_billable_flag||''''||',';
6045 */
6046            l_statement :=l_statement ||
6047                     ' BILLABLE_FLAG  = :bil_fg ,';
6048            l_b_billable_fg := 'Y';
6049 --end bug 2955326
6050            l_update_yes_flag := 'Y';
6051 
6052        END IF;
6053 
6054 --  SERVICE_TYPE_CODE
6055 
6056        IF p_service_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6057        AND nvl(p_service_type_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
6058            <> nvl(l_task_rec.service_type_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
6059        AND p_service_type_code IS NOT NULL  --redundant, but added for clarity
6060        THEN
6061 
6062        OPEN l_service_type_csr( p_service_type_code );
6063        FETCH l_service_type_csr INTO l_temp;
6064 
6065        IF l_service_type_csr%NOTFOUND
6066        THEN
6067 
6068         CLOSE l_service_type_csr;
6069         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6070         THEN
6071                      pa_interface_utils_pub.map_new_amg_msg
6072                      ( p_old_message_code => 'PA_SERVICE_TYPE_INVALID'
6073                       ,p_msg_attribute    => 'CHANGE'
6074                       ,p_resize_flag      => 'N'
6075                       ,p_msg_context      => 'TASK'
6076                       ,p_attribute1       => l_amg_segment1
6077                       ,p_attribute2       => l_amg_task_number
6078                       ,p_attribute3       => ''
6079                       ,p_attribute4       => ''
6080                       ,p_attribute5       => '');
6081                 END IF;
6082                 RAISE  FND_API.G_EXC_ERROR;
6083 
6084        END IF;
6085 
6086        CLOSE l_service_type_csr;
6087 
6088 --bug 2955326
6089 /*
6090            l_statement :=   l_statement ||
6091                     ' SERVICE_TYPE_CODE = '||''''|| p_service_type_code||''''||',';
6092 */
6093            l_statement :=   l_statement ||
6094                     ' SERVICE_TYPE_CODE = :srv_tp_cd ,';
6095            l_b_srv_tp_cd_fg := 'Y';
6096 --end bug 2955326
6097            l_update_yes_flag := 'Y';
6098 
6099        END IF;
6100 
6101 --  TASK NUMBER
6102 --dbms_output.put_line('value of p_task_number'||p_task_number);
6103 --dbms_output.put_line('value l_task_rec.task_number'||l_task_rec.task_number);
6104        IF p_task_number <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6105         AND nvl(substrb(p_task_number,1,25),PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>   --Bug 6193314 . Added Substrb
6106            nvl(l_task_rec.task_number,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
6107        AND p_task_number IS NOT NULL
6108        THEN
6109 
6110           IF pa_task_utils.check_unique_task_number
6111               (l_project_id,p_task_number,NULL) = 0
6112            THEN
6113        /* CODE CHANGE BEGIN BY ADITI for Bug 4120380 **/
6114           --dbms_output.put_line('before caling CHECK_TASK_NUMBER_CHANGE_OK');
6115  /* bug #5243018: Reverting the fix in bug 4120380.
6116           PA_PROJECT_PUB.CHECK_TASK_NUMBER_CHANGE_OK
6117         ( p_api_version_number => p_api_version_number
6118                  , p_return_status    => L_RETURN_STATUS
6119                  , p_msg_count      => l_msg_count
6120                  , p_msg_data        => l_msg_data
6121                  , p_project_id      => p_pa_project_id
6122                  , p_task_id      => p_pa_task_id
6123                  , p_task_number_change_Ok_flag  => task_number_change_Ok_flag
6124              );
6125        IF task_number_change_Ok_flag = 'N' then */
6126        /** CODE CHANGE END BY ADITI for Bug 4120380 **/
6127                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6128                  THEN
6129                      pa_interface_utils_pub.map_new_amg_msg
6130                      ( p_old_message_code => 'PA_TASK_NUMBER_NOT_UNIQUE'
6131                       ,p_msg_attribute    => 'CHANGE'
6132                       ,p_resize_flag      => 'N'
6133                       ,p_msg_context      => 'TASK'
6134                       ,p_attribute1       => l_amg_segment1
6135                       ,p_attribute2       => l_amg_task_number
6136                       ,p_attribute3       => ''
6137                       ,p_attribute4       => ''
6138                       ,p_attribute5       => '');
6139                 END IF;
6140                 RAISE  FND_API.G_EXC_ERROR;
6141            /* bug #5243018: Reverting the fix in bug 4120380.
6142            END IF; -- END OF IF task_number_change_Ok_flag = 'N' */
6143           END IF;
6144            IF l_children_exist = 'N'
6145            THEN
6146               pa_task_utils.change_lowest_task_num_ok
6147                  ( x_task_id       => l_task_id,
6148                    x_err_code      => l_err_code,
6149                    x_err_stage     => l_err_stage,
6150                    x_err_stack     => l_err_stack );
6151 
6152               IF l_err_code > 0
6153               THEN
6154             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6155              THEN
6156                     IF NOT pa_project_pvt.check_valid_message (l_err_stage)
6157                     THEN
6158                      pa_interface_utils_pub.map_new_amg_msg
6159                      ( p_old_message_code => 'PA_CANT_ADD_SUBTASK'
6160                       ,p_msg_attribute    => 'CHANGE'
6161                       ,p_resize_flag      => 'N'
6162                       ,p_msg_context      => 'TASK'
6163                       ,p_attribute1       => l_amg_segment1
6164                       ,p_attribute2       => l_amg_task_number
6165                       ,p_attribute3       => ''
6166                       ,p_attribute4       => ''
6167                       ,p_attribute5       => '');
6168                     ELSE
6169                      pa_interface_utils_pub.map_new_amg_msg
6170                      ( p_old_message_code => l_err_stage
6171                       ,p_msg_attribute    => 'SPLIT'
6172                       ,p_resize_flag      => 'N'
6173                       ,p_msg_context      => 'MODT'
6174                       ,p_attribute1       => l_amg_segment1
6175                       ,p_attribute2       => l_amg_task_number
6176                       ,p_attribute3       => ''
6177                       ,p_attribute4       => ''
6178                       ,p_attribute5       => '');
6179                     END IF;
6180                 END IF;
6181                 RAISE  FND_API.G_EXC_ERROR;
6182 
6183               ELSIF l_err_code < 0
6184               THEN
6185 
6186                  RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
6187               END IF;
6188            END IF;
6189 --bug 2955326
6190 /*
6191              l_statement :=     l_statement ||
6192                         ' TASK_NUMBER = '||''''|| p_task_number||''''||',';
6193 */
6194            l_statement :=   l_statement ||
6195                         ' TASK_NUMBER = :tk_num ,';
6196            l_b_tk_num_fg := 'Y';
6197 --end bug 2955326
6198            l_update_yes_flag := 'Y';
6199            --dbms_output.put_line('Value of l_update_yes_flag in update_one_task'||l_update_yes_flag);
6200            --dbms_output.put_line('Value of l_b_tk_num_fg in update_one_task'||l_b_tk_num_fg);
6201 
6202         END IF;
6203 
6204 
6205      -- If task start date or completion date is to be changed
6206      -- need to compare it with the project dates and hence
6207      -- first fetch the project dates
6208 /* Fix for the Bug 1210276- the following If condition was modified by adding
6209   NVL to the statment to prevent the updation of the start date and end date
6210   column with null values when no values are passed for these variables */
6211 
6212         IF (NVL(p_task_start_date,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
6213         OR  NVL(p_task_completion_date,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
6214         THEN
6215             OPEN  l_project_date_csr (l_project_id);
6216             FETCH l_project_date_csr INTO l_project_date_rec;
6217             CLOSE l_project_date_csr;
6218      --   END IF;
6219 /* Fix for the Bug 1210276- relocated this END IF to the logical end of the
6220    block so that the update would only happen when the above conditions
6221    are true */
6222     --Check validity of start and completion date (e.g. start_date can not be later than completion_date)
6223 
6224 pa_project_pvt.check_start_end_date(     p_old_start_date       => l_task_rec.start_date
6225                     ,p_new_start_date       => p_task_start_date
6226                     ,p_old_end_date         => l_task_rec.completion_date
6227                     ,p_new_end_date         => p_task_completion_date
6228                     ,p_update_start_date_flag   => l_update_start_date_flag
6229                     ,p_update_end_date_flag     => l_update_end_date_flag
6230                     ,p_return_status        => l_return_status  );
6231 
6232   IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6233      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6234   ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
6235      RAISE FND_API.G_EXC_ERROR;
6236   END IF;
6237 
6238   IF pa_project_pub.G_ParChildTsk_chks_deferred = 'N' THEN
6239       IF l_children_exist = 'Y' THEN
6240          OPEN l_outer_child_dates_csr (l_project_id,l_task_id);
6241          FETCH l_outer_child_dates_csr INTO
6242                l_min_child_start_date, l_max_child_completion_date;
6243          CLOSE l_outer_child_dates_csr;
6244       END IF;
6245 
6246       IF l_task_rec.parent_task_id IS NOT NULL THEN
6247               OPEN l_outer_parent_dates_csr
6248                    (l_project_id,l_task_rec.parent_task_id );
6249               FETCH l_outer_parent_dates_csr INTO
6250                     l_min_parent_start_date,l_max_parent_completion_date;
6251               CLOSE l_outer_parent_dates_csr;
6252       END IF;
6253  END IF;
6254        IF l_update_start_date_flag = 'Y'
6255        THEN
6256 
6257            IF p_task_start_date < l_project_date_rec.start_date OR
6258               p_task_start_date > l_project_date_rec.completion_date
6259            THEN
6260         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6261         THEN
6262                      pa_interface_utils_pub.map_new_amg_msg
6263                      ( p_old_message_code => 'PA_TK_OUTSIDE_PROJECT_RANGE'
6264                       ,p_msg_attribute    => 'CHANGE'
6265                       ,p_resize_flag      => 'Y'
6266                       ,p_msg_context      => 'TASK'
6267                       ,p_attribute1       => l_amg_segment1
6268                       ,p_attribute2       => l_amg_task_number
6269                       ,p_attribute3       => ''
6270                       ,p_attribute4       => ''
6271                       ,p_attribute5       => '');
6272                 END IF;
6273                 RAISE  FND_API.G_EXC_ERROR;
6274            END IF;
6275 
6276   -- Do the comparison between parent and child task dates only if
6277   -- the global variable is set to 'N'
6278 
6279   IF pa_project_pub.G_ParChildTsk_chks_deferred = 'N' THEN
6280       IF l_children_exist = 'Y' THEN
6281          IF l_min_child_start_date < p_task_start_date THEN
6282            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6283                      pa_interface_utils_pub.map_new_amg_msg
6284                      ( p_old_message_code => 'PA_CHILD_START_EARLIER'
6285                       ,p_msg_attribute    => 'CHANGE'
6286                       ,p_resize_flag      => 'N'
6287                       ,p_msg_context      => 'TASK'
6288                       ,p_attribute1       => l_amg_segment1
6289                       ,p_attribute2       => l_amg_task_number
6290                       ,p_attribute3       => ''
6291                       ,p_attribute4       => ''
6292                       ,p_attribute5       => '');
6293             END IF;
6294             RAISE  FND_API.G_EXC_ERROR;
6295          END IF;
6296       END IF;
6297 
6298       IF l_task_rec.parent_task_id IS NOT NULL THEN
6299          IF l_min_parent_start_date > p_task_start_date THEN
6300         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6301                      pa_interface_utils_pub.map_new_amg_msg
6302                      ( p_old_message_code => 'PA_PARENT_START_LATER'
6303                       ,p_msg_attribute    => 'CHANGE'
6304                       ,p_resize_flag      => 'N'
6305                       ,p_msg_context      => 'TASK'
6306                       ,p_attribute1       => l_amg_segment1
6307                       ,p_attribute2       => l_amg_task_number
6308                       ,p_attribute3       => ''
6309                       ,p_attribute4       => ''
6310                       ,p_attribute5       => '');
6311             END IF;
6312             RAISE  FND_API.G_EXC_ERROR;
6313          END IF;
6314       END IF;
6315    END IF;  -- End if pa_project_pub.G_ParChildTsk_chks_deferred
6316 
6317 --BUG 4081329 rtarway, validate for EI date also
6318 PA_TASKS_MAINT_UTILS.Check_Start_Date_EI(
6319           p_project_id => l_project_id,
6320           p_task_id => l_task_id,
6321           p_start_date => p_task_start_date,
6322           x_return_status => l_return_status,
6323           x_msg_count => l_msg_count,
6324           x_msg_data => l_msg_data);
6325 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6326      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6327 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
6328      RAISE FND_API.G_EXC_ERROR;
6329 END IF;
6330 --bug 2955326
6331 /*
6332              l_statement :=   l_statement ||
6333                      ' START_DATE = to_date('''||
6334                           to_char(p_task_start_date,'YYYY/MM/DD')||
6335                              ''', ''YYYY/MM/DD''),';
6336 */
6337            l_statement :=   l_statement ||
6338                      ' START_DATE = :st_dt ,';
6339            l_b_tk_st_dt_flag := 'Y';
6340 --end bug 2955326
6341            l_update_yes_flag := 'Y';
6342 
6343        END IF;
6344 
6345        IF l_update_end_date_flag = 'Y'
6346        THEN
6347            IF p_task_completion_date < l_project_date_rec.start_date OR
6348               p_task_completion_date > l_project_date_rec.completion_date
6349            THEN
6350         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6351         THEN
6352                      pa_interface_utils_pub.map_new_amg_msg
6353                      ( p_old_message_code => 'PA_TK_OUTSIDE_PROJECT_RANGE'
6354                       ,p_msg_attribute    => 'CHANGE'
6355                       ,p_resize_flag      => 'Y'
6356                       ,p_msg_context      => 'TASK'
6357                       ,p_attribute1       => l_amg_segment1
6358                       ,p_attribute2       => l_amg_task_number
6359                       ,p_attribute3       => ''
6360                       ,p_attribute4       => ''
6361                       ,p_attribute5       => '');
6362                 END IF;
6363                 RAISE  FND_API.G_EXC_ERROR;
6364            END IF;
6365 
6366   -- Do the comparison between parent and child task dates only if
6367   -- the global variable is set to 'N'
6368 
6369         IF pa_project_pub.G_ParChildTsk_chks_deferred = 'N' THEN
6370            IF l_children_exist = 'Y' THEN
6371               IF l_max_child_completion_date > p_task_completion_date THEN
6372         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6373            THEN
6374                      pa_interface_utils_pub.map_new_amg_msg
6375                      ( p_old_message_code => 'PA_CHILD_COMPLETION_LATER'
6376                       ,p_msg_attribute    => 'CHANGE'
6377                       ,p_resize_flag      => 'N'
6378                       ,p_msg_context      => 'TASK'
6379                       ,p_attribute1       => l_amg_segment1
6380                       ,p_attribute2       => l_amg_task_number
6381                       ,p_attribute3       => ''
6382                       ,p_attribute4       => ''
6383                       ,p_attribute5       => '');
6384                 END IF;
6385                 RAISE  FND_API.G_EXC_ERROR;
6386               END IF;
6387            END IF;
6388 
6389            IF l_task_rec.parent_task_id IS NOT NULL
6390            THEN
6391             IF l_max_parent_completion_date < p_task_completion_date
6392               THEN
6393         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6394         THEN
6395                      pa_interface_utils_pub.map_new_amg_msg
6396                      ( p_old_message_code => 'PA_PARENT_COMPLETION_EARLIER'
6397                       ,p_msg_attribute    => 'CHANGE'
6398                       ,p_resize_flag      => 'Y'
6399                       ,p_msg_context      => 'TASK'
6400                       ,p_attribute1       => l_amg_segment1
6401                       ,p_attribute2       => l_amg_task_number
6402                       ,p_attribute3       => ''
6403                       ,p_attribute4       => ''
6404                       ,p_attribute5       => '');
6405                 END IF;
6406                 RAISE  FND_API.G_EXC_ERROR;
6407              END IF;
6408            END IF;
6409         END IF;  -- End if pa_project_pub.G_ParChildTsk_chks_deferred;
6410 
6411 --BUG 4081329, rtarway
6412 -- Validate for END EI dates too
6413 
6414 PA_TASKS_MAINT_UTILS.Check_End_Date_EI(
6415           p_project_id => l_project_id,
6416           p_task_id => l_task_id,
6417           p_end_date => p_task_completion_date,
6418           x_return_status => l_return_status,
6419           x_msg_count => l_msg_count,
6420           x_msg_data => l_msg_data);
6421 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6422      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6423 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
6424      RAISE FND_API.G_EXC_ERROR;
6425 END IF;
6426 --bug 2955326
6427 /*
6428              l_statement :=   l_statement ||
6429                      ' COMPLETION_DATE = to_date('''||
6430                           to_char(p_task_completion_date,'YYYY/MM/DD')||
6431                              ''', ''YYYY/MM/DD''),';
6432 
6433 */
6434            l_statement :=   l_statement ||
6435                      ' COMPLETION_DATE = :cmp_dt ,';
6436            l_b_comp_dt_fg := 'Y';
6437 --end bug 2955326
6438            l_update_yes_flag := 'Y';
6439 
6440         END IF;
6441 END IF;
6442 /* Fix for the Bug 1210276- relocated this END IF here
6443    so that the update would only happen when the above conditions
6444    are true */
6445 
6446 --PARENT TASK
6447 
6448     --convert_taskref_to_id can not be used because NULL is allowed for the pa_parent_task_id!!!
6449 
6450     --rtarway, for DHI ER, BUG 4413568 , following section will be changing the WBS , it involves, moving
6451     --a task. This should not be allowed when p_update_mode is PA_UPD_TASK_ATTR
6452     --Error will be raised , when parent_task_id is different than existing.
6453 
6454 
6455     l_new_parent_task_id := NULL;
6456         IF p_pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6457            AND p_pa_parent_task_id IS NOT NULL THEN
6458            IF p_pa_parent_task_id <> NVL( l_task_rec.parent_task_id, -9999 ) THEN
6459          OPEN l_validate_parent_id_csr( l_project_id, p_pa_parent_task_id );
6460              FETCH l_validate_parent_id_csr INTO l_temp;
6461          IF l_validate_parent_id_csr%NOTFOUND
6462         THEN
6463         CLOSE l_validate_parent_id_csr;
6464         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6465            THEN
6466                      pa_interface_utils_pub.map_new_amg_msg
6467                      ( p_old_message_code => 'PA_PARENT_TASK_ID_INVALID'
6468                       ,p_msg_attribute    => 'CHANGE'
6469                       ,p_resize_flag      => 'N'
6470                       ,p_msg_context      => 'TASK'
6471                       ,p_attribute1       => l_amg_segment1
6472                       ,p_attribute2       => l_amg_task_number
6473                       ,p_attribute3       => ''
6474                       ,p_attribute4       => ''
6475                       ,p_attribute5       => '');
6476                 END IF;
6477                 RAISE  FND_API.G_EXC_ERROR;
6478          ELSE
6479         CLOSE l_validate_parent_id_csr;
6480         l_new_parent_task_id := p_pa_parent_task_id;
6481          END IF;
6482            END IF;
6483         ELSE
6484              IF p_pm_parent_task_reference <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
6485                 p_pm_parent_task_reference IS NOT NULL THEN
6486         OPEN l_convert_pm_parent_to_id_csr
6487                      (l_project_id, p_pm_parent_task_reference );
6488         FETCH l_convert_pm_parent_to_id_csr INTO l_new_parent_task_id;
6489         IF l_convert_pm_parent_to_id_csr%NOTFOUND THEN
6490            CLOSE l_convert_pm_parent_to_id_csr;
6491            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6492               THEN
6493                      pa_interface_utils_pub.map_new_amg_msg
6494                      ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
6495                       ,p_msg_attribute    => 'CHANGE'
6496                       ,p_resize_flag      => 'N'
6497                       ,p_msg_context      => 'TASK'
6498                       ,p_attribute1       => l_amg_segment1
6499                       ,p_attribute2       => l_amg_task_number
6500                       ,p_attribute3       => ''
6501                       ,p_attribute4       => ''
6502                       ,p_attribute5       => '');
6503                    END IF;
6504                    RAISE  FND_API.G_EXC_ERROR;
6505         END IF;
6506         CLOSE l_convert_pm_parent_to_id_csr;
6507              END IF;
6508         END IF;
6509 
6510 
6511 /* dbms_output.put_line('Task id            : '||l_task_id); */
6512 /* dbms_output.put_line('pm_parent_task_ref : '||p_pm_parent_task_reference); */
6513 /* dbms_output.put_line('p_pa_parent_task_id    : '||p_pa_parent_task_id); */
6514 /* dbms_output.put_line('Old Task Name      : '||l_task_rec.task_name); */
6515 /* dbms_output.put_line('New parent id      : '||l_new_parent_task_id); */
6516 /* dbms_output.put_line('Old parent id      : '|| */
6517 --         Nvl(l_task_rec.parent_task_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM));
6518 
6519       IF p_pm_parent_task_reference IS NULL AND
6520          l_task_rec.parent_task_id IS NOT NULL THEN
6521 
6522        -- this means that a sub task is being changed to become a top task
6523        -- which is not allowed
6524 
6525      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6526         THEN
6527            pa_interface_utils_pub.map_new_amg_msg
6528            ( p_old_message_code => 'PA_TOP_TASK_NOT_ALLOWED'
6529             ,p_msg_attribute    => 'CHANGE'
6530             ,p_resize_flag      => 'N'
6531             ,p_msg_context      => 'TASK'
6532             ,p_attribute1       => l_amg_segment1
6533             ,p_attribute2       => l_amg_task_number
6534             ,p_attribute3       => ''
6535             ,p_attribute4       => ''
6536             ,p_attribute5       => '');
6537           END IF;
6538           RAISE  FND_API.G_EXC_ERROR;
6539       END IF;
6540 
6541 
6542         IF l_new_parent_task_id IS NOT NULL
6543            AND l_new_parent_task_id <> NVL(l_task_rec.parent_task_id,
6544                    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
6545         THEN
6546         --rtarway, for DHI ER, BUG 4413568
6547     IF ( PA_PROJECT_PUB.G_TASK_STR_UPDATE_MODE = 'PA_UPD_TASK_ATTR' ) THEN
6548               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6549               p_msg_name => 'PA_WBS_CANT_CHANGE');
6550               RAISE FND_API.G_EXC_ERROR;
6551     END IF;
6552 
6553            -- get the wbs_level for the new parent task
6554        OPEN l_parent_wbs_csr ( l_project_id, l_new_parent_task_id );
6555        FETCH l_parent_wbs_csr INTO l_new_parent_wbs_level;
6556        CLOSE l_parent_wbs_csr;
6557 
6558 /*
6559            --bug 2947492
6560             PA_FIN_PLAN_UTILS.CHECK_REPARENT_TASK_OK(
6561                      p_task_id                    => l_task_id
6562                     ,p_old_parent_task_id         => l_task_rec.parent_task_id
6563                     ,p_new_parent_task_id         => l_new_parent_task_id
6564                     ,x_return_status              => l_return_status
6565                     ,x_msg_count                  => l_msg_count
6566                     ,x_msg_data                   => l_msg_data
6567                 );
6568 
6569             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
6570             THEN
6571                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6572 
6573             ELSIF l_return_status = FND_API.G_RET_STS_ERROR
6574             THEN
6575                 RAISE FND_API.G_EXC_ERROR;
6576             END IF;
6577            --End bug 2947492
6578 */  --commented out as per mail from venkatesh dated 22 jan 2004 -- maansari
6579        --bug 3010538
6580        --The following code should be executed when a task's parent is modified
6581        --in a working version( with already existing a published ver ) and
6582        --then its published.
6583        --In other words the code is executed while publishing to sync up with
6584        --pa_tasks. In regular flow for updating parent of a task we call this api
6585        --from the wrapper process_task_structure_bulk api.
6586        --
6587        IF p_pm_product_code = 'WORKPLAN'
6588        THEN
6589           pa_fp_refresh_elements_pub.set_process_flag_proj(
6590               p_project_id               => l_project_id
6591              ,p_request_id               => null
6592              ,p_process_code             => null
6593              ,p_refresh_required_flag    => 'Y'
6594              ,x_return_status            => l_return_status
6595              ,x_msg_count                => l_msg_count
6596              ,x_msg_data                 => l_msg_data );
6597 
6598           if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6599              RAISE FND_API.G_EXC_ERROR;
6600           end if;
6601        END IF;
6602        --bug 3010538
6603 
6604 
6605            -- If the parent task id is to be changed, then need to check
6606            -- whether it is ok the change the parent
6607 
6608 -- *O
6609        -- Check if task is being moved to lower level within it's own hierarchy
6610        --//For the task being moved check if the new_parent_task_id already exists in the children.
6611 
6612         OPEN l_chk_chlds_parent_id_csr (l_task_id, l_new_parent_task_id);
6613         FETCH l_chk_chlds_parent_id_csr INTO l_temp;
6614 
6615         IF l_chk_chlds_parent_id_csr%FOUND
6616         THEN
6617             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6618             THEN
6619                     pa_interface_utils_pub.map_new_amg_msg
6620                      ( p_old_message_code => 'PA_TSK_MV_BELOW_SELF'
6621                         ,p_msg_attribute    => 'CHANGE'
6622                         ,p_resize_flag      => 'N'
6623                      ,p_msg_context     => 'TASK'
6624                         ,p_attribute1       => l_amg_segment1
6625                         ,p_attribute2       => l_amg_task_number
6626                         ,p_attribute3       => ''
6627                         ,p_attribute4       => ''
6628                         ,p_attribute5       => '');
6629                     END IF;
6630                     RAISE  FND_API.G_EXC_ERROR;
6631         END IF;
6632         CLOSE l_chk_chlds_parent_id_csr;
6633 
6634 
6635            -- Check If new parent has  Expenditure Item.
6636         PA_TASK_UTILS.Check_Create_Subtask_Ok
6637             ( x_task_id =>  l_new_parent_task_id
6638 --bug 3010538                        , x_validation_mode => 'R'    --bug 2947492
6639             , x_err_code    =>  l_err_code
6640             , x_err_stage   =>  l_err_stage
6641             , x_err_stack   =>  l_err_stack );
6642 
6643           IF l_err_code > 0
6644               THEN
6645                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
6646                   IF NOT pa_project_pvt.check_valid_message(l_err_stage)
6647                   THEN
6648                      pa_interface_utils_pub.map_new_amg_msg
6649                       ( p_old_message_code => 'PA_CHECK_ADD_SUBTASK_FAILED'
6650                            ,p_msg_attribute    => 'CHANGE'
6651                            ,p_resize_flag      => 'Y'
6652                            ,p_msg_context      => 'ADDT'
6653                            ,p_attribute1       => l_amg_segment1
6654                            ,p_attribute2       => l_amg_task_number
6655                            ,p_attribute3       => ''
6656                            ,p_attribute4       => ''
6657                            ,p_attribute5       => '');
6658                   ELSE
6659                      pa_interface_utils_pub.map_new_amg_msg
6660                       ( p_old_message_code => l_err_stage
6661                        ,p_msg_attribute    => 'SPLIT'
6662                        ,p_resize_flag      => 'Y'
6663                        ,p_msg_context      => 'ADDST'
6664                        ,p_attribute1       => l_amg_segment1
6665                        ,p_attribute2       => l_amg_task_number
6666                        ,p_attribute3       => ''
6667                        ,p_attribute4       => ''
6668                        ,p_attribute5       => '');
6669                   END IF; -- IF Pa_project_pvt.check_valid_message
6670 
6671                  END IF; -- IF Check_msg_Level
6672 
6673                  RAISE FND_API.G_EXC_ERROR;
6674 
6675           END IF;
6676 -- *O
6677 
6678 
6679            IF l_task_rec.parent_task_id IS NULL
6680            THEN
6681         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6682         THEN
6683            pa_interface_utils_pub.map_new_amg_msg
6684            ( p_old_message_code => 'PA_CANT_MOVE_TOP_TASK'
6685             ,p_msg_attribute    => 'CHANGE'
6686             ,p_resize_flag      => 'N'
6687             ,p_msg_context      => 'TASK'
6688             ,p_attribute1       => l_amg_segment1
6689             ,p_attribute2       => l_amg_task_number
6690             ,p_attribute3       => ''
6691             ,p_attribute4       => ''
6692             ,p_attribute5       => '');
6693                 END IF;
6694                 RAISE  FND_API.G_EXC_ERROR;
6695 
6696        ELSIF l_new_parent_task_id IS NULL
6697        THEN
6698         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6699         THEN
6700            pa_interface_utils_pub.map_new_amg_msg
6701            ( p_old_message_code => 'PA_TOP_TASK_NOT_ALLOWED'
6702             ,p_msg_attribute    => 'CHANGE'
6703             ,p_resize_flag      => 'N'
6704             ,p_msg_context      => 'TASK'
6705             ,p_attribute1       => l_amg_segment1
6706             ,p_attribute2       => p_pm_task_reference
6707             ,p_attribute3       => ''
6708             ,p_attribute4       => ''
6709             ,p_attribute5       => '');
6710                 END IF;
6711                 RAISE  FND_API.G_EXC_ERROR;
6712        ELSE
6713 
6714               OPEN l_top_task_csr (l_new_parent_task_id);
6715               FETCH l_top_task_csr INTO l_top_task_id;
6716               CLOSE l_top_task_csr;
6717 
6718 /*             dbms_output.put_line('Current top task:'||l_task_rec.top_task_id); */
6719 /*             dbms_output.put_line('New top task    :'||l_top_task_id); */
6720 
6721               IF l_top_task_id <> l_task_rec.top_task_id
6722               THEN
6723             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6724             THEN
6725            pa_interface_utils_pub.map_new_amg_msg
6726            ( p_old_message_code => 'PA_CANT_CHANGE_PARENT'
6727             ,p_msg_attribute    => 'CHANGE'
6728             ,p_resize_flag      => 'N'
6729             ,p_msg_context      => 'TASK'
6730             ,p_attribute1       => l_amg_segment1
6731             ,p_attribute2       => l_amg_task_number
6732             ,p_attribute3       => ''
6733             ,p_attribute4       => ''
6734             ,p_attribute5       => '');
6735                     END IF;
6736                     RAISE  FND_API.G_EXC_ERROR;
6737               END IF;
6738 
6739            END IF;
6740 
6741 --bug 2955326
6742 /*
6743            l_statement :=   l_statement ||
6744                     ' PARENT_TASK_ID = '||TO_CHAR(l_new_parent_task_id)||',';
6745 */
6746            l_statement :=   l_statement ||
6747                     ' PARENT_TASK_ID = :prt_tk_id ,';
6748            l_b_prt_tk_id_fg := 'Y';
6749 --end bug 2955326
6750            l_tasks_restructured_flag := 'Y';
6751            l_update_yes_flag := 'Y';
6752 
6753        --check whether the WBS level was changed
6754 /* dbms_output.put_line('current level  : '||l_task_rec.wbs_level); */
6755 /* dbms_output.put_line('New parent level  : '||l_new_parent_wbs_level); */
6756 
6757        IF l_task_rec.wbs_level <> l_new_parent_wbs_level + 1
6758        THEN
6759 
6760         l_delta_level := (l_new_parent_wbs_level + 1) - l_task_rec.wbs_level;
6761 
6762         OPEN l_wbs_level_csr( l_task_id );
6763         FETCH l_wbs_level_csr INTO l_wbs_change_task_id;
6764 
6765         WHILE l_wbs_level_csr%FOUND LOOP
6766 
6767             UPDATE pa_tasks
6768             SET wbs_level = wbs_level + l_delta_level
6769             WHERE task_id = l_wbs_change_task_id;
6770 
6771             FETCH l_wbs_level_csr INTO l_wbs_change_task_id;
6772         END LOOP;
6773 
6774        END IF;
6775         END IF;
6776 
6777 --ADDRESS
6778 /* dbms_output.put_line('New Address: '||p_address_id); */
6779 /* dbms_output.put_line('Current Addres: '||l_task_rec.address_id); */
6780     IF ( p_address_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_address_id IS NULL )
6781     AND nvl(p_address_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) <> nvl(l_task_rec.address_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
6782     THEN
6783 
6784         IF p_address_id IS NOT NULL
6785         THEN
6786 
6787             --check whether this is the address of one of the project customers
6788 
6789             OPEN l_customer_csr( l_project_id );
6790             FETCH l_customer_csr INTO l_customer_id;
6791 
6792 /* dbms_output.put_line('Customer: '||l_customer_id); */
6793 
6794             l_address_valid:= 'N';
6795 
6796             WHILE l_customer_csr%FOUND LOOP
6797 
6798                 OPEN l_address_csr(l_customer_id, p_address_id);
6799                 FETCH l_address_csr INTO l_temp;
6800 
6801                 IF l_address_csr%FOUND
6802                 THEN
6803                     l_address_valid:= 'Y';
6804                     EXIT; END IF;
6805 
6806                     CLOSE l_address_csr;
6807 
6808                     FETCH l_customer_csr INTO l_customer_id;
6809                 END LOOP;
6810 
6811                 CLOSE l_customer_csr;
6812 
6813             IF l_address_valid = 'N'
6814             THEN
6815                     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6816                 THEN
6817            pa_interface_utils_pub.map_new_amg_msg
6818            ( p_old_message_code => 'PA_TASK_ADDRESS_INVALID'
6819             ,p_msg_attribute    => 'CHANGE'
6820             ,p_resize_flag      => 'N'
6821             ,p_msg_context      => 'TASK'
6822             ,p_attribute1       => l_amg_segment1
6823             ,p_attribute2       => l_amg_task_number
6824             ,p_attribute3       => ''
6825             ,p_attribute4       => ''
6826             ,p_attribute5       => '');
6827                         END IF;
6828                         RAISE  FND_API.G_EXC_ERROR;
6829 
6830             END IF;
6831         END IF;
6832 
6833 --bug 2955326
6834 /*
6835             l_statement :=  l_statement ||
6836                     ' ADDRESS_ID = '||''''||TO_CHAR(p_address_id)||''''||',';
6837 */
6838             l_statement :=  l_statement ||
6839                     ' ADDRESS_ID = :addr_id ,';
6840                 l_b_addr_id_fg := 'Y';
6841 --end bug 2955326
6842             l_update_yes_flag := 'Y';
6843 
6844     END IF;
6845 
6846 
6847  --bug 6153503
6848     IF (p_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
6849            p_attribute_category IS NULL) THEN
6850 
6851            l_attribute_category := p_attribute_category;
6852     ELSE
6853            l_attribute_category := l_task_rec.attribute_category;
6854     END IF;
6855 
6856 
6857     IF (p_attribute1 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
6858            p_attribute1 IS NULL)  THEN
6859 
6860            l_attribute1 := p_attribute1;
6861     ELSE
6862            l_attribute1 := l_task_rec.attribute1;
6863     END IF;
6864 
6865     IF (p_attribute2 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
6866            p_attribute2 IS NULL)  THEN
6867 
6868            l_attribute2 := p_attribute2;
6869     ELSE
6870            l_attribute2 := l_task_rec.attribute2;
6871     END IF;
6872 
6873     IF (p_attribute3 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
6874            p_attribute3 IS NULL)  THEN
6875 
6876            l_attribute3 := p_attribute3;
6877     ELSE
6878            l_attribute3 := l_task_rec.attribute3;
6879     END IF;
6880 
6881     IF (p_attribute4 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
6882            p_attribute4 IS NULL)  THEN
6883 
6884            l_attribute4 := p_attribute4;
6885     ELSE
6886            l_attribute4 := l_task_rec.attribute4;
6887     END IF;
6888 
6889     IF (p_attribute5 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
6890            p_attribute5 IS NULL)  THEN
6891 
6892            l_attribute5 := p_attribute5;
6893     ELSE
6894            l_attribute5 := l_task_rec.attribute5;
6895     END IF;
6896 
6897     IF (p_attribute6 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
6898            p_attribute6 IS NULL)  THEN
6899 
6900            l_attribute6:= p_attribute6;
6901     ELSE
6902            l_attribute6 := l_task_rec.attribute6;
6903     END IF;
6904 
6905     IF (p_attribute7 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
6906            p_attribute7 IS NULL)  THEN
6907 
6908            l_attribute7:= p_attribute7;
6909     ELSE
6910            l_attribute7 := l_task_rec.attribute7;
6911     END IF;
6912 
6913     IF (p_attribute8 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
6914            p_attribute8 IS NULL)  THEN
6915 
6916            l_attribute8:= p_attribute8;
6917     ELSE
6918            l_attribute8 := l_task_rec.attribute8;
6919     END IF;
6920 
6921     IF (p_attribute9 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
6922            p_attribute9 IS NULL)  THEN
6923 
6924            l_attribute9:= p_attribute9;
6925     ELSE
6926            l_attribute9 := l_task_rec.attribute9;
6927     END IF;
6928 
6929     IF (p_attribute10 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
6930            p_attribute10 IS NULL)  THEN
6931 
6932            l_attribute10 := p_attribute10;
6933     ELSE
6934            l_attribute10 := l_task_rec.attribute10;
6935     END IF;
6936     /* Bug 7403227 start */
6937 BEGIN
6938  IF p_pa_project_id IS NOT NULL THEN
6939   SELECT PROJECT_TYPE
6940     INTO l_project_type2
6941     FROM PA_PROJECTS
6942    WHERE PROJECT_ID = p_pa_project_id;
6943  ELSE
6944   SELECT PROJECT_TYPE
6945     INTO l_project_type2
6946     FROM PA_PROJECTS
6947    WHERE PROJECT_ID IN (SELECT PROJECT_ID
6948                           FROM PA_TASKS
6949                          WHERE TASK_ID = p_pa_task_id);
6950  END IF;
6951 EXCEPTION
6952  WHEN OTHERS THEN
6953   RAISE FND_API.G_EXC_ERROR; /* Raise error unknown if the query fails! */
6954 END;
6955 /* Bug 7403227 end */
6956 
6957 /*
6958             l_statement := l_statement ||
6959                            ' ATTRIBUTE_CATEGORY  = '||''''||
6960                            RTRIM(p_attribute_category)||''''||',';
6961 */
6962             --BUG 3908013, rtarway, Validate for financial dff
6963              --bug 6153503
6964 IF l_project_type2 <> 'AWARD_PROJECT' THEN /* Bug 7403227*/
6965              pa_task_utils.validate_flex_fields(
6966                   p_desc_flex_name        => 'PA_TASKS_DESC_FLEX'
6967                  ,p_attribute_category    => l_attribute_category
6968                  ,p_attribute1            => l_attribute1
6969                  ,p_attribute2            => l_attribute2
6970                  ,p_attribute3            => l_attribute3
6971                  ,p_attribute4            => l_attribute4
6972                  ,p_attribute5            => l_attribute5
6973                  ,p_attribute6            => l_attribute6
6974                  ,p_attribute7            => l_attribute7
6975                  ,p_attribute8            => l_attribute8
6976                  ,p_attribute9            => l_attribute9
6977                  ,p_attribute10           => l_attribute10
6978                  ,p_RETURN_msg            => l_return_msg
6979                  ,p_validate_status       => l_validate_status
6980                  );
6981                  IF l_validate_status = 'N'
6982                     THEN
6983                          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6984                          THEN
6985                               pa_interface_utils_pub.map_new_amg_msg
6986                                         ( p_old_message_code => 'PA_INVALID_FF_VALUES'
6987                                         ,p_msg_attribute    => 'CHANGE'
6988                                         ,p_resize_flag      => 'N'
6989                                         ,p_msg_context      => 'FLEX'
6990                                         ,p_attribute1       => l_return_msg
6991                                         ,p_attribute2       => ''
6992                                         ,p_attribute3       => ''
6993                                         ,p_attribute4       => ''
6994                                         ,p_attribute5       => '');
6995                         END IF;
6996                     RAISE FND_API.G_EXC_ERROR;
6997                   END IF;
6998 END IF; /* Bug 7403227 */
6999 --  Update the dff fields  - 04/11/97
7000          --bug 6153503 start
7001        IF (p_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
7002            p_attribute_category IS NULL)
7003        AND nvl(p_attribute_category,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
7004            nvl(l_task_rec.attribute_category,
7005                PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
7006        THEN
7007 --bug 2955326
7008 
7009             l_statement := l_statement ||
7010                            ' ATTRIBUTE_CATEGORY  = :attr_cat ,';
7011             l_b_attr_cat_fg := 'Y';
7012 --end bug 2955326
7013             l_update_yes_flag := 'Y';
7014 
7015        END IF;
7016 
7017 
7018        IF (p_attribute1 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
7019            p_attribute1 IS NULL)
7020        AND nvl(p_attribute1,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
7021            nvl(l_task_rec.attribute1,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
7022        THEN
7023 --bug 2955326
7024 /*
7025             l_statement := l_statement ||
7026                            ' ATTRIBUTE1  = '||''''||
7027                            RTRIM(p_attribute1)||''''||',';
7028 */
7029             l_statement := l_statement ||
7030                            ' ATTRIBUTE1  = :attr1 ,';
7031             l_b_attr1_fg := 'Y';
7032 --end bug 2955326
7033             l_update_yes_flag := 'Y';
7034 
7035        END IF;
7036 
7037        IF (p_attribute2 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
7038            p_attribute2 IS NULL)
7039        AND nvl(p_attribute2,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
7040            nvl(l_task_rec.attribute2,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
7041        THEN
7042 --bug 2955326
7043 /*
7044             l_statement := l_statement ||
7045                            ' ATTRIBUTE2  = '||''''||
7046                            RTRIM(p_attribute2)||''''||',';
7047 */
7048             l_statement := l_statement ||
7049                            ' ATTRIBUTE2  = :attr2 ,';
7050             l_b_attr2_fg := 'Y';
7051 --end bug 2955326
7052             l_update_yes_flag := 'Y';
7053 
7054        END IF;
7055 
7056        IF (p_attribute3 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
7057            p_attribute3 IS NULL)
7058        AND nvl(p_attribute3,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
7059            nvl(l_task_rec.attribute3,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
7060        THEN
7061 --bug 2955326
7062 /*
7063             l_statement := l_statement ||
7064                            ' ATTRIBUTE3  = '||''''||
7065                            RTRIM(p_attribute3)||''''||',';
7066 */
7067             l_statement := l_statement ||
7068                            ' ATTRIBUTE3  = :attr3 ,';
7069             l_b_attr3_fg := 'Y';
7070 --end bug 2955326
7071             l_update_yes_flag := 'Y';
7072 
7073        END IF;
7074 
7075        IF (p_attribute4 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
7076            p_attribute4 IS NULL)
7077        AND nvl(p_attribute4,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
7078            nvl(l_task_rec.attribute4,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
7079        THEN
7080 --bug 2955326
7081 /*
7082             l_statement := l_statement ||
7083                            ' ATTRIBUTE4  = '||''''||
7084                            RTRIM(p_attribute4)||''''||',';
7085 */
7086             l_statement := l_statement ||
7087                            ' ATTRIBUTE4  = :attr4 ,';
7088             l_b_attr4_fg := 'Y';
7089 --end bug 2955326
7090             l_update_yes_flag := 'Y';
7091 
7092        END IF;
7093 
7094        IF (p_attribute5 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
7095            p_attribute5 IS NULL)
7096        AND nvl(p_attribute5,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
7097            nvl(l_task_rec.attribute5,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
7098        THEN
7099 --bug 2955326
7100 /*
7101             l_statement := l_statement ||
7102                            ' ATTRIBUTE5  = '||''''||
7103                            RTRIM(p_attribute5)||''''||',';
7104 */
7105             l_statement := l_statement ||
7106                            ' ATTRIBUTE5  = :attr5 ,';
7107             l_b_attr5_fg := 'Y';
7108 --end bug 2955326
7109             l_update_yes_flag := 'Y';
7110 
7111        END IF;
7112 
7113        IF (p_attribute6 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
7114            p_attribute6 IS NULL)
7115        AND nvl(p_attribute6,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
7116            nvl(l_task_rec.attribute6,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
7117        THEN
7118 --bug 2955326
7119 /*
7120             l_statement := l_statement ||
7121                            ' ATTRIBUTE6  = '||''''||
7122                            RTRIM(p_attribute6)||''''||',';
7123 */
7124             l_statement := l_statement ||
7125                            ' ATTRIBUTE6  = :attr6 ,';
7126             l_b_attr6_fg := 'Y';
7127 --end bug 2955326
7128             l_update_yes_flag := 'Y';
7129 
7130        END IF;
7131 
7132        IF (p_attribute7 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
7133            p_attribute7 IS NULL)
7134        AND nvl(p_attribute7,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
7135            nvl(l_task_rec.attribute7,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
7136        THEN
7137 --bug 2955326
7138 /*
7139             l_statement := l_statement ||
7140                            ' ATTRIBUTE7  = '||''''||
7141                            RTRIM(p_attribute7)||''''||',';
7142 */
7143             l_statement := l_statement ||
7144                            ' ATTRIBUTE7  = :attr7 ,';
7145             l_b_attr7_fg := 'Y';
7146 --end bug 2955326
7147             l_update_yes_flag := 'Y';
7148 
7149        END IF;
7150 
7151        IF (p_attribute8 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
7152            p_attribute8 IS NULL)
7153        AND nvl(p_attribute8,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
7154            nvl(l_task_rec.attribute8,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
7155        THEN
7156 --bug 2955326
7157 /*
7158             l_statement := l_statement ||
7159                            ' ATTRIBUTE8  = '||''''||
7160                            RTRIM(p_attribute8)||''''||',';
7161 */
7162             l_statement := l_statement ||
7163                            ' ATTRIBUTE8  = :attr8 ,';
7164             l_b_attr8_fg := 'Y';
7165 --end bug 2955326
7166             l_update_yes_flag := 'Y';
7167 
7168        END IF;
7169 
7170        IF (p_attribute9 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
7171            p_attribute9 IS NULL)
7172        AND nvl(p_attribute9,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
7173            nvl(l_task_rec.attribute9,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
7174        THEN
7175 --bug 2955326
7176 /*
7177             l_statement := l_statement ||
7178                            ' ATTRIBUTE9  = '||''''||
7179                            RTRIM(p_attribute9)||''''||',';
7180 */
7181             l_statement := l_statement ||
7182                            ' ATTRIBUTE9  = :attr9 ,';
7183             l_b_attr9_fg := 'Y';
7184 --end bug 2955326
7185             l_update_yes_flag := 'Y';
7186 
7187        END IF;
7188 
7189        IF (p_attribute10 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
7190            p_attribute10 IS NULL)
7191        AND nvl(p_attribute10,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
7192            nvl(l_task_rec.attribute10,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
7193        THEN
7194 --bug 2955326
7195 /*
7196             l_statement := l_statement ||
7197                            ' ATTRIBUTE10  = '||''''||
7198                            RTRIM(p_attribute10)||''''||',';
7199 */
7200             l_statement := l_statement ||
7201                            ' ATTRIBUTE10  = :attr10 ,';
7202             l_b_attr10_fg := 'Y';
7203 --end bug 2955326
7204             l_update_yes_flag := 'Y';
7205 
7206        END IF;
7207  --bug 6153503 end
7208 -- IC and Multi National Currency changes Starts ...
7209 
7210        IF (p_allow_cross_charge_flag <>
7211 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
7212            p_allow_cross_charge_flag IS NOT NULL)
7213        AND nvl(p_allow_cross_charge_flag,
7214 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
7215            nvl(l_task_rec.allow_cross_charge_flag,
7216 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
7217        THEN
7218 --bug 2955326
7219 /*
7220             l_statement := l_statement ||
7221                            ' ALLOW_CROSS_CHARGE_FLAG  = '||''''||
7222                            RTRIM(p_allow_cross_charge_flag)||''''||',';
7223 */
7224             l_statement := l_statement ||
7225                            ' ALLOW_CROSS_CHARGE_FLAG  = :all_x_chg_fg ,';
7226             l_b_al_x_chg_fg := 'Y';
7227 --end bug 2955326
7228             l_update_yes_flag := 'Y';
7229 
7230        END IF;
7231 
7232        IF (p_project_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
7233            p_project_rate_type IS NOT NULL)
7234        AND nvl(p_project_rate_type,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
7235            nvl(l_task_rec.project_rate_type,
7236 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
7237        THEN
7238 --bug 2955326
7239 /*
7240             l_statement := l_statement ||
7241                            ' PROJECT_RATE_TYPE  = '||''''||
7242                            RTRIM(p_project_rate_type)||''''||',';
7243 */
7244             l_statement := l_statement ||
7245                            ' PROJECT_RATE_TYPE  = :prj_rt_tp ,';
7246             l_b_prj_rt_tp_fg := 'Y';
7247 --end bug 2955326
7248             l_update_yes_flag := 'Y';
7249 
7250        END IF;
7251 
7252        IF (p_project_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
7253            p_project_rate_date IS NOT NULL)
7254        AND nvl(p_project_rate_date,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
7255            nvl(l_task_rec.project_rate_date,
7256 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE )
7257        THEN
7258 --bug 2955326
7259 /*
7260              l_statement :=   l_statement ||
7261                      ' PROJECT_RATE_DATE = to_date('''||
7262                           to_char(p_project_rate_date,'YYYY/MM/DD')||
7263                              ''', ''YYYY/MM/DD''),';
7264 */
7265             l_statement :=   l_statement ||
7266                      ' PROJECT_RATE_DATE = :prj_rt_dt ,';
7267             l_b_prj_rt_dt_fg := 'Y';
7268 --end bug 2955326
7269             l_update_yes_flag := 'Y';
7270 
7271        END IF;
7272 
7273        IF p_cc_process_labor_flag  <>
7274 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7275           AND p_cc_process_labor_flag IS NOT NULL  THEN
7276           IF NVL(p_cc_process_labor_flag,
7277 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7278            <> NVL(l_task_rec.cc_process_labor_flag,
7279 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7280               THEN
7281 --bug 2955326
7282 /*
7283              l_statement  := l_statement ||
7284                        ' CC_PROCESS_LABOR_FLAG =  '||''''||
7285              RTRIM(p_cc_process_labor_flag)||''''||',';
7286 */
7287              l_statement  := l_statement ||
7288                        ' CC_PROCESS_LABOR_FLAG = :cc_proc_lbr_fg ,';
7289              l_b_cc_proc_lbr_fg := 'Y';
7290 --end bug 2955326
7291              l_update_yes_flag := 'Y';
7292           END IF;
7293        END IF;
7294 -- 5402979 for pqe bug 5395048 :: added p_project_in.labor_tp_schedule_id IS NULL condition
7295 IF (   (p_labor_tp_schedule_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7296           AND p_labor_tp_schedule_id IS NOT NULL)
7297     OR (p_labor_tp_schedule_id IS NULL) )
7298    THEN
7299        -- 5402979 for pqe bug 5395048 :: added p_project_in.labor_tp_schedule_id IS NULL condition
7300        IF ( (p_labor_tp_schedule_id <> NVL(l_task_rec.labor_tp_schedule_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))
7301             OR (p_labor_tp_schedule_id IS NULL) )
7302               THEN
7303 --bug 2955326
7304 /*
7305              l_statement := l_statement || ' LABOR_TP_SCHEDULE_ID = ' ||
7306                   TO_CHAR(p_labor_tp_schedule_id)||',';
7307 */
7308              l_statement := l_statement || ' LABOR_TP_SCHEDULE_ID = :lbr_tp_sch_id ,';
7309              l_b_lbr_tp_sch_id_fg := 'Y';
7310 --end bug 2955326
7311              l_update_yes_flag := 'Y';
7312              -- 5402979 Added the code below for Bug 5395048. If labor schedule id is being NULLed out, then
7313              -- we need to set the project cross charge process labor flag to 'N'
7314              IF p_labor_tp_schedule_id IS NULL THEN
7315                  l_cc_process_labor_flag := 'N';
7316 
7317                  IF l_b_cc_proc_lbr_fg = 'N' THEN
7318                          l_statement  := l_statement ||
7319                                ' CC_PROCESS_LABOR_FLAG = :cc_proc_lbr_fg ,';
7320                  End if;
7321 
7322                  l_b_cc_proc_lbr_fg := 'Y';
7323                  l_update_yes_flag := 'Y';
7324              END IF;
7325              -- Code changes end for Bug 5395048
7326           END IF;
7327        END IF;
7328 
7329        IF p_labor_tp_fixed_date  <>
7330 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7331           AND p_labor_tp_fixed_date IS NOT NULL  THEN
7332           IF NVL(p_labor_tp_fixed_date,
7333 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
7334            <> NVL(l_task_rec.labor_tp_fixed_date,
7335 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
7336               THEN
7337 --bug 2955326
7338 /*
7339              l_statement  := l_statement ||
7340                        ' LABOR_TP_FIXED_DATE =  to_date('''||
7341                      to_char(p_labor_tp_fixed_date,'YYYY/MM/DD')||
7342                              ''', ''YYYY/MM/DD''),';
7343 */
7344              l_statement  := l_statement ||
7345                        ' LABOR_TP_FIXED_DATE = :lbr_tp_fx_dt ,';
7346              l_b_lbr_tp_fx_dt_fg := 'Y';
7347 --end bug 2955326
7348              l_update_yes_flag := 'Y';
7349           END IF;
7350        END IF;
7351 
7352        IF p_cc_process_nl_flag  <>
7353 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7354           AND p_cc_process_nl_flag IS NOT NULL  THEN
7355           IF NVL(p_cc_process_nl_flag,
7356 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7357            <> NVL(l_task_rec.cc_process_nl_flag,
7358 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7359               THEN
7360 --bug 2955326
7361 /*
7362              l_statement  := l_statement ||
7363                        ' CC_PROCESS_NL_FLAG =  '||''''||
7364              RTRIM(p_cc_process_nl_flag)||''''||',';
7365 */
7366              l_statement  := l_statement ||
7367                        ' CC_PROCESS_NL_FLAG = :cc_proc_nl_fg ,';
7368              l_b_cc_proc_nl_fg := 'Y';
7369 --end bug 2955326
7370              l_update_yes_flag := 'Y';
7371           END IF;
7372        END IF;
7373 -- 5402979 for pqe bug 5395048 :: added p_project_in.labor_tp_schedule_id IS NULL condition
7374 IF ( ( p_nl_tp_schedule_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_nl_tp_schedule_id IS NOT NULL )
7375      OR (p_nl_tp_schedule_id IS NULL) )
7376    THEN
7377        -- 5402979 for pqe bug 5395048 :: added p_project_in.labor_tp_schedule_id IS NULL condition
7378        IF ( (p_nl_tp_schedule_id <> NVL(l_task_rec.nl_tp_schedule_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))
7379            OR (p_nl_tp_schedule_id IS NULL))
7380            THEN
7381 --bug 2955326
7382 /*
7383              l_statement := l_statement || ' NL_TP_SCHEDULE_ID = ' ||
7384                   TO_CHAR(p_nl_tp_schedule_id)||',';
7385 */
7386              l_statement := l_statement || ' NL_TP_SCHEDULE_ID = :nl_tp_sch_id ,';
7387              l_b_nl_tp_sch_id_fg := 'Y';
7388 --end bug 2955326
7389              l_update_yes_flag := 'Y';
7390              -- 5402979 Added the code below for Bug 5395048. If labor schedule id is being NULLed out, then
7391              -- we need to set the project cross charge process labor flag to 'N'
7392              IF p_nl_tp_schedule_id IS NULL THEN
7393                  l_cc_process_nl_flag := 'N';
7394 
7395                  IF l_b_cc_proc_nl_fg = 'N' THEN
7396                          l_statement  := l_statement ||
7397                                ' CC_PROCESS_NL_FLAG = :CC_PROC_NL_FG ,';
7398                  End if;
7399 
7400                  l_b_cc_proc_nl_fg := 'Y';
7401                  l_update_yes_flag := 'Y';
7402              END IF;
7403              -- Code changes end for Bug 5395048
7404           END IF;
7405        END IF;
7406 
7407        IF p_nl_tp_fixed_date  <>
7408 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7409           AND p_nl_tp_fixed_date IS NOT NULL  THEN
7410           IF NVL(p_nl_tp_fixed_date,
7411 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
7412            <> NVL(l_task_rec.nl_tp_fixed_date,
7413 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
7414               THEN
7415 --bug 2955326
7416 /*
7417              l_statement  := l_statement ||
7418                        ' NL_TP_FIXED_DATE =  to_date('''||
7419                      to_char(p_nl_tp_fixed_date,'YYYY/MM/DD')||
7420                              ''', ''YYYY/MM/DD''),';
7421 */
7422              l_statement  := l_statement ||
7423                        ' NL_TP_FIXED_DATE = :nl_tp_fx_dt ,';
7424              l_b_nl_tp_fx_dt_fg := 'Y';
7425 --end bug 2955326
7426              l_update_yes_flag := 'Y';
7427           END IF;
7428        END IF;
7429 
7430        IF p_receive_project_invoice_flag  <>
7431 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7432           AND p_receive_project_invoice_flag IS NOT NULL  THEN
7433           IF NVL(p_receive_project_invoice_flag,
7434 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7435            <> NVL(l_task_rec.receive_project_invoice_flag,
7436 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7437               THEN
7438 --bug 2955326
7439 /*
7440              l_statement  := l_statement ||
7441                        ' RECEIVE_PROJECT_INVOICE_FLAG =  '||''''||
7442              RTRIM(p_receive_project_invoice_flag)||''''||',';
7443 */
7444              l_statement  := l_statement ||
7445                        ' RECEIVE_PROJECT_INVOICE_FLAG = :rcv_prj_inv_fg ,';
7446              l_b_rcv_prj_inv_fg := 'Y';
7447 --end bug 2955326
7448              l_update_yes_flag := 'Y';
7449           END IF;
7450        END IF;
7451 
7452 --Added for bug 5745545
7453        IF nvl(p_work_type_id,-999)  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
7454 		IF (nvl(fnd_profile.value('PA_EN_NEW_WORK_TYPE_PROCESS'),'N') = 'Y') OR (nvl(pa_install.is_prm_licensed(),'N') = 'Y' ) THEN
7455 				IF p_work_type_id IS NULL AND (NOT (PA_GMS_API.vert_install)) THEN
7456 					      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7457 						   pa_interface_utils_pub.map_new_amg_msg
7458 						   ( p_old_message_code => 'PA_TASK_WORK_TYPE_MAND'
7459 						    ,p_msg_attribute    => 'CHANGE'
7460 						    ,p_resize_flag      => 'N'
7461 						    ,p_msg_context      => 'TASK'
7462 						    ,p_attribute1       => l_amg_segment1
7463 						    ,p_attribute2       => l_amg_task_number
7464 						    ,p_attribute3       => ''
7465 						    ,p_attribute4       => ''
7466 						    ,p_attribute5       => '');
7467 					      END IF;
7468 					      RAISE  FND_API.G_EXC_ERROR;
7469 			        ELSE
7470 					IF nvl(p_work_type_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) <> nvl(l_task_rec.work_type_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
7471 					--bug 2955326
7472 					/*
7473 						     l_statement := l_statement || ' WORK_TYPE_ID = ' ||
7474 							  TO_CHAR(p_work_type_id)||',';
7475 					*/
7476 						     l_statement := l_statement || ' WORK_TYPE_ID = :wk_tp_id ,';
7477 						     l_b_wk_tp_id_fg := 'Y';
7478 					--end bug 2955326
7479 						     l_update_yes_flag := 'Y';
7480 					END IF;
7481 				END IF;
7482 		ELSE  -- Null work_type_id is allowed
7483 			IF nvl(p_work_type_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) <> nvl(l_task_rec.work_type_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
7484 			     l_statement := l_statement || ' WORK_TYPE_ID = :wk_tp_id ,';
7485 			     l_b_wk_tp_id_fg := 'Y';
7486 			     l_update_yes_flag := 'Y';
7487 			END IF;
7488 		END IF;
7489 	END IF;
7490 --End for bug 5745545
7491 
7492 -- IC and Multi National Currency changes Ends ...
7493 /* Commented for bug 2802984 starts*/
7494        /*IF p_emp_bill_rate_schedule_id  <>
7495 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7496           AND p_emp_bill_rate_schedule_id IS NOT NULL  THEN
7497           IF p_emp_bill_rate_schedule_id <> l_task_rec.emp_bill_rate_schedule_id
7498               THEN
7499              l_statement := l_statement || ' EMP_BILL_RATE_SCHEDULE_ID = ' ||
7500                   TO_CHAR(p_emp_bill_rate_schedule_id)||',';
7501              l_update_yes_flag := 'Y';
7502           END IF;
7503        END IF;
7504 
7505        IF p_job_bill_rate_schedule_id  <>
7506 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7507           AND p_job_bill_rate_schedule_id IS NOT NULL  THEN
7508           IF p_job_bill_rate_schedule_id <> l_task_rec.job_bill_rate_schedule_id
7509               THEN
7510              l_statement := l_statement || ' JOB_BILL_RATE_SCHEDULE_ID = ' ||
7511                   TO_CHAR(p_job_bill_rate_schedule_id)||',';
7512              l_update_yes_flag := 'Y';
7513           END IF;
7514        END IF;
7515 
7516        IF p_non_lab_std_bill_rt_sch_id  <>
7517 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7518           AND p_non_lab_std_bill_rt_sch_id IS NOT NULL  THEN
7519           IF p_non_lab_std_bill_rt_sch_id <> l_task_rec.non_lab_std_bill_rt_sch_id
7520               THEN
7521              l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = ' ||
7522                   TO_CHAR(p_non_lab_std_bill_rt_sch_id)||',';
7523              l_update_yes_flag := 'Y';
7524           END IF;
7525        END IF;*/
7526   /* Commented for bug 2802984 ends*/
7527 
7528        IF p_taskfunc_cost_rate_date  <>
7529 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7530           AND p_taskfunc_cost_rate_date IS NOT NULL  THEN
7531           IF NVL(p_taskfunc_cost_rate_date,
7532 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
7533            <> NVL(l_task_rec.taskfunc_cost_rate_date,
7534 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
7535               THEN
7536 --bug 2955326
7537 /*
7538              l_statement  := l_statement ||
7539                        ' TASKFUNC_COST_RATE_DATE =  to_date('''||
7540                      to_char(p_taskfunc_cost_rate_date,'YYYY/MM/DD')||
7541                              ''', ''YYYY/MM/DD''),';
7542 */
7543              l_statement  := l_statement ||
7544                        ' TASKFUNC_COST_RATE_DATE = :tkfnc_cst_rt_dt ,';
7545              l_b_tkfnc_cst_rt_dt_fg := 'Y';
7546 --end bug 2955326
7547              l_update_yes_flag := 'Y';
7548           END IF;
7549        END IF;
7550 
7551        IF p_taskfunc_cost_rate_type  <>
7552 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7553           AND p_taskfunc_cost_rate_type IS NOT NULL  THEN
7554           IF NVL(p_taskfunc_cost_rate_type,
7555 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7556            <> NVL(l_task_rec.taskfunc_cost_rate_type,
7557 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7558               THEN
7559 --bug 2955326
7560 /*
7561              l_statement  := l_statement ||
7562                        ' TASKFUNC_COST_RATE_TYPE =  '||''''||
7563              RTRIM(p_taskfunc_cost_rate_type)||''''||',';
7564 */
7565              l_statement  := l_statement ||
7566                        ' TASKFUNC_COST_RATE_TYPE = :tkfnc_cst_rt_tp ,';
7567              l_b_tkfnc_cst_rt_tp_fg := 'Y';
7568 --end bug 2955326
7569              l_update_yes_flag := 'Y';
7570           END IF;
7571        END IF;
7572 
7573 --Sakthi MCB
7574 
7575 --PA L Changes 2872708
7576 
7577        IF p_retirement_cost_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7578           AND p_retirement_cost_flag IS NOT NULL  THEN
7579           IF NVL(p_retirement_cost_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7580            <> NVL(l_task_rec.retirement_cost_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7581               THEN
7582 --bug 2955326
7583 /*
7584              l_statement  := l_statement ||
7585                        ' RETIREMENT_COST_FLAG =  '||''''||
7586              RTRIM(p_retirement_cost_flag)||''''||',';
7587 */
7588              l_statement  := l_statement ||
7589                        ' RETIREMENT_COST_FLAG = :ret_cst_fg ,';
7590              l_b_ret_cst_fg := 'Y';
7591 --end bug 2955326
7592              l_update_yes_flag := 'Y';
7593           END IF;
7594        END IF;
7595 
7596        IF p_cint_eligible_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7597           AND p_cint_eligible_flag IS NOT NULL  THEN
7598           IF NVL(p_cint_eligible_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7599            <> NVL(l_task_rec.cint_eligible_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7600               THEN
7601 --bug 2955326
7602 /*
7603              l_statement  := l_statement ||
7604                        ' CINT_ELIGIBLE_FLAG =  '||''''||
7605              RTRIM(p_cint_eligible_flag)||''''||',';
7606 */
7607              l_statement  := l_statement ||
7608                        ' CINT_ELIGIBLE_FLAG = :cint_elg_fg ,';
7609              l_b_cint_elg_fg := 'Y';
7610 --end bug 2955326
7611              l_update_yes_flag := 'Y';
7612           END IF;
7613        END IF;
7614 
7615        IF p_cint_stop_date  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7616           AND p_cint_stop_date IS NOT NULL  THEN
7617           IF NVL(p_cint_stop_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
7618            <> NVL(l_task_rec.cint_stop_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
7619               THEN
7620 --bug 2955326
7621 /*
7622              l_statement  := l_statement ||
7623                        ' CINT_STOP_DATE =  '||''''||
7624              RTRIM(p_cint_stop_date)||''''||',';
7625 */
7626              l_statement  := l_statement ||
7627                        ' CINT_STOP_DATE = :cint_stp_dt ,';
7628              l_b_cint_stp_dt_fg := 'Y';
7629 --end bug 2955326
7630              l_update_yes_flag := 'Y';
7631           END IF;
7632        END IF;
7633 --End PA L Changes 2872708
7634 
7635 
7636  /* Commented for bug 2802984 starts*/
7637 
7638      /*  IF p_labor_disc_reason_code  <>
7639 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7640           AND p_labor_disc_reason_code IS NOT NULL  THEN
7641           IF NVL(p_labor_disc_reason_code,
7642 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7643            <> NVL(l_task_rec.labor_disc_reason_code,
7644 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7645               THEN
7646 
7647              l_statement  := l_statement ||
7648                        ' LABOR_DISC_REASON_CODE =  '||''''||
7649              RTRIM(p_labor_disc_reason_code)||''''||',';
7650              l_update_yes_flag := 'Y';
7651           END IF;
7652        END IF;
7653 
7654        IF p_non_labor_disc_reason_code  <>
7655 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7656           AND p_non_labor_disc_reason_code IS NOT NULL  THEN
7657           IF NVL(p_non_labor_disc_reason_code,
7658 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7659            <> NVL(l_task_rec.non_labor_disc_reason_code,
7660 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7661               THEN
7662 --bug 2955326
7663              l_statement  := l_statement ||
7664                        ' NON_LABOR_DISC_REASON_CODE =  '||''''||
7665              RTRIM(p_non_labor_disc_reason_code)||''''||',';
7666              l_update_yes_flag := 'Y';
7667           END IF;
7668        END IF;*/
7669 
7670  /* Commented for bug 2802984 ends*/
7671 
7672  /*Code for bug 2802984 starts*/
7673 
7674   Check_Schedule_type
7675      (p_pa_task_id             => l_task_id,
7676       p_pa_project_id          => l_project_id,
7677       p_in_labor_sch_type      => p_labor_sch_type,
7678       p_in_nl_sch_type         => p_nl_sch_type,
7679       p_task_name              => p_task_name,
7680       p_pm_task_reference      => p_pm_task_reference,
7681       p_out_labor_sch_type     => l_out_labor_sch_type,
7682       p_out_nl_labor_sch_type  => l_out_nl_labor_sch_type,
7683       p_return_status          => l_return_status
7684       );
7685 
7686         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7687         THEN
7688             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7689 
7690         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7691         THEN
7692             RAISE FND_API.G_EXC_ERROR;
7693         END IF;
7694 
7695    validate_schedule_values
7696    (p_pa_project_id                  => l_project_id,
7697     p_pa_task_id                     => l_task_id,
7698     p_task_name                      => p_task_name,
7699     p_pm_task_reference              => p_pm_task_reference,
7700     p_lab_db_sch_type                => l_task_rec.labor_sch_type,
7701     p_nl_db_sch_type                 => l_task_rec.non_labor_sch_type,
7702     p_labor_sch_type                 => l_out_labor_sch_type,
7703     p_nl_sch_type            => l_out_nl_labor_sch_type,
7704     p_emp_bill_rate_schedule_id      => p_emp_bill_rate_schedule_id,
7705     p_job_bill_rate_schedule_id      => p_job_bill_rate_schedule_id,
7706     p_labor_schedule_fixed_date      => p_labor_schedule_fixed_date,
7707     p_labor_schedule_discount        => p_labor_schedule_discount,
7708     p_labor_disc_reason_code         => p_labor_disc_reason_code,
7709     p_nl_bill_rate_org_id            => p_nl_bill_rate_org_id,
7710     p_non_lab_std_bill_rt_sch_id     => p_non_lab_std_bill_rt_sch_id,
7711     p_nl_schedule_fixed_date         => p_nl_schedule_fixed_date,
7712     p_nl_schedule_discount           => p_nl_schedule_discount,
7713     p_non_labor_disc_reason_code     => p_non_labor_disc_reason_code,
7714     p_rev_ind_rate_sch_id            => p_rev_ind_rate_sch_id,
7715     p_inv_ind_rate_sch_id            => p_inv_ind_rate_sch_id,
7716     p_rev_ind_sch_fixed_date         => p_rev_ind_sch_fixed_date,
7717     p_inv_ind_sch_fixed_date         => p_inv_ind_sch_fixed_date,
7718     p_return_status                  => l_return_status
7719     );
7720 
7721        IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7722         THEN
7723 
7724             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7725 
7726         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7727         THEN
7728 
7729             RAISE FND_API.G_EXC_ERROR;
7730         END IF;
7731 
7732 
7733  IF p_labor_sch_type  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7734           AND p_labor_sch_type IS NOT NULL
7735   THEN
7736           IF p_labor_sch_type <> NVL(l_task_rec.LABOR_SCH_TYPE,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7737               THEN
7738 --bug 2955326
7739 /*
7740          l_statement  := l_statement ||' LABOR_SCH_TYPE =  '||''''||
7741              RTRIM(p_labor_sch_type)||''''||',';
7742 */
7743          l_statement  := l_statement ||' LABOR_SCH_TYPE = :lbr_sch_tp ,';
7744              l_b_lbr_sch_tp_fg := 'Y';
7745 --end bug 2955326
7746              l_update_yes_flag := 'Y';
7747           END IF;
7748        END IF;
7749 
7750   IF p_nl_sch_type  <>
7751 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7752           AND p_nl_sch_type IS NOT NULL
7753   THEN
7754    IF p_nl_sch_type
7755            <> NVL(l_task_rec.NON_LABOR_SCH_TYPE,
7756 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7757               THEN
7758          l_statement  := l_statement ||
7759 --bug 2955326
7760 /*
7761                        ' NON_LABOR_SCH_TYPE =  '||''''||
7762              RTRIM(p_nl_sch_type)||''''||',';
7763 */
7764                        ' NON_LABOR_SCH_TYPE = :n_lbr_sch_tp,';
7765              l_b_n_lbr_sch_tp_fg := 'Y';
7766 --end bug 2955326
7767              l_update_yes_flag := 'Y';
7768           END IF;
7769        END IF;
7770 
7771 IF l_out_labor_sch_type = 'B' THEN
7772 
7773 
7774 /* Should be able to update null since this is not mandatory*/
7775 IF ((p_emp_bill_rate_schedule_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7776           AND p_emp_bill_rate_schedule_id IS NOT NULL ) OR (p_emp_bill_rate_schedule_id IS NULL))
7777    THEN
7778        IF ((p_emp_bill_rate_schedule_id <> NVL(l_task_rec.EMP_BILL_RATE_SCHEDULE_ID,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))
7779          OR (p_emp_bill_rate_schedule_id IS NULL))
7780               THEN
7781 --bug 2955326
7782 /*
7783          l_statement  := l_statement ||
7784                        ' EMP_BILL_RATE_SCHEDULE_ID =  '||''''||
7785              TO_CHAR(p_emp_bill_rate_schedule_id)||''''||',';
7786 */
7787              l_statement := l_statement || ' EMP_BILL_RATE_SCHEDULE_ID = :emp_bill_rt_sch_id2 ,';
7788              l_b_emp_bill_rt_sch_id_fg2 := 'Y';
7789 --end bug 2955326
7790              l_update_yes_flag := 'Y';
7791           END IF;
7792        END IF;
7793 
7794  /*
7795        1)Should be able to update null when prm is not licensed.
7796        2) When prm is licensed then it is mandatory.
7797        */
7798 
7799 IF ((p_job_bill_rate_schedule_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7800   AND p_job_bill_rate_schedule_id IS NOT NULL )
7801    OR (p_job_bill_rate_schedule_id is NULL and pa_install.is_prm_licensed = 'N'))
7802        THEN
7803           IF ((p_job_bill_rate_schedule_id <> NVL(l_task_rec.JOB_BILL_RATE_SCHEDULE_ID,
7804 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) OR (p_job_bill_rate_schedule_id is NULL))
7805               THEN
7806 --bug 2955326
7807 /*
7808          l_statement  := l_statement ||
7809                        ' JOB_BILL_RATE_SCHEDULE_ID =  '||''''||
7810              TO_CHAR(p_job_bill_rate_schedule_id)||''''||',';
7811 */
7812              l_statement := l_statement || ' JOB_BILL_RATE_SCHEDULE_ID = :jb_bill_rt_sch_id2 ,';
7813              l_b_jb_bill_rt_sch_id_fg2 := 'Y';
7814 --end bug 2955326
7815              l_update_yes_flag := 'Y';
7816           END IF;
7817        END IF;
7818 
7819 /* Should be able to update null*/
7820 
7821           IF ((p_labor_schedule_fixed_date  <>
7822 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7823           AND p_labor_schedule_fixed_date IS NOT NULL)  OR p_labor_schedule_fixed_date IS NULL) THEN
7824           IF p_labor_schedule_fixed_date
7825            <> NVL(l_task_rec.LABOR_SCHEDULE_FIXED_DATE,
7826 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) OR (p_labor_schedule_fixed_date IS NULL)
7827               THEN
7828 --bug 2955326
7829 /*
7830              l_statement  := l_statement ||
7831                        ' LABOR_SCHEDULE_FIXED_DATE =  to_date('''||
7832                           to_char(p_labor_schedule_fixed_date,'YYYY/MM/DD')||
7833                              ''', ''YYYY/MM/DD''),';
7834 */
7835              l_statement  := l_statement ||
7836                        ' LABOR_SCHEDULE_FIXED_DATE = :lbr_sch_fx_dt,';
7837              l_b_lbr_sch_fx_dt := 'Y';
7838 --end bug 2955326
7839              l_update_yes_flag := 'Y';
7840           END IF;
7841        END IF;
7842 
7843       /* Should be able to update null*/
7844         IF ((p_labor_schedule_discount  <>
7845 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7846           AND p_labor_schedule_discount IS NOT NULL  ) OR (p_labor_schedule_discount IS NULL ))
7847       THEN
7848      IF ((p_labor_schedule_discount <> NVL(l_task_rec.LABOR_SCHEDULE_DISCOUNT,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))
7849        OR (p_labor_schedule_discount IS NULL))
7850               THEN
7851 --bug 2955326
7852 /*
7853              l_statement  := l_statement ||
7854                        ' LABOR_SCHEDULE_DISCOUNT =  '||''''||
7855              TO_CHAR(p_labor_schedule_discount)||''''||',';
7856 */
7857              l_statement  := l_statement ||
7858                        ' LABOR_SCHEDULE_DISCOUNT = :lbr_sch_dsnt,';
7859              l_b_lbr_sch_dsnt := 'Y';
7860 --end bug 2955326
7861       END IF;
7862        END IF;
7863 
7864  IF  p_labor_schedule_discount IS NULL THEN
7865    l_statement  := l_statement ||
7866                        ' LABOR_DISC_REASON_CODE =  '''''||',';
7867    l_update_yes_flag := 'Y';
7868 ELSE
7869  IF p_labor_disc_reason_code  <>
7870 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7871           AND p_labor_disc_reason_code IS NOT NULL
7872        OR p_labor_disc_reason_code IS NULL THEN
7873           IF (p_labor_disc_reason_code
7874            <> NVL(l_task_rec.labor_disc_reason_code,
7875 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR (p_labor_disc_reason_code IS NULL))
7876               THEN
7877 --bug 2955326
7878 /*
7879              l_statement  := l_statement ||
7880                        ' LABOR_DISC_REASON_CODE =  '||''''||
7881              RTRIM(p_labor_disc_reason_code)||''''||',';
7882 */
7883              l_statement  := l_statement ||
7884                        ' LABOR_DISC_REASON_CODE = :lbr_disc_rsn_cd,';
7885              l_b_lbr_disc_rsn_cd_fg := 'Y';
7886 --end bug 2955326
7887              l_update_yes_flag := 'Y';
7888           END IF;
7889        END IF;
7890   END IF;
7891 
7892    ELSE  /*Else when labor_sch_type <> B*/
7893       l_statement  := l_statement ||
7894                        ' LABOR_SCHEDULE_FIXED_DATE =  '''''||',';
7895 
7896       l_statement  := l_statement ||
7897                        ' LABOR_SCHEDULE_DISCOUNT =  '''''||',';
7898 
7899       l_statement  := l_statement ||
7900                        ' LABOR_DISC_REASON_CODE =  '''''||',';
7901 
7902       l_statement  := l_statement ||
7903                        ' EMP_BILL_RATE_SCHEDULE_ID =  '''''||',';
7904 
7905       l_statement  := l_statement ||
7906                        ' JOB_BILL_RATE_SCHEDULE_ID =  '''''||',';
7907 
7908 
7909      l_update_yes_flag := 'Y';
7910 END IF;
7911 
7912   IF l_out_labor_sch_type = 'I' OR l_out_nl_labor_sch_type ='I' THEN
7913 
7914       IF p_rev_ind_rate_sch_id  <>
7915 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7916           AND p_rev_ind_rate_sch_id IS NOT NULL  THEN
7917           IF NVL(p_rev_ind_rate_sch_id,
7918 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
7919            <> NVL(l_task_rec.REV_IND_RATE_SCH_ID,
7920 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
7921               THEN
7922 
7923 --bug 2955326
7924 /*
7925              l_statement  := l_statement ||
7926                        ' REV_IND_RATE_SCH_ID =  '||''''||
7927              TO_CHAR(p_rev_ind_rate_sch_id)||''''||',';
7928 */
7929              l_statement  := l_statement ||
7930                        ' REV_IND_RATE_SCH_ID = :rv_ind_rt_sch_id,';
7931              l_b_rv_ind_rt_sch_id_fg := 'Y';
7932 --end bug 2955326
7933              l_update_yes_flag := 'Y';
7934           END IF;
7935        END IF;
7936 
7937 
7938         IF p_inv_ind_rate_sch_id  <>
7939 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7940           AND p_inv_ind_rate_sch_id IS NOT NULL  THEN
7941           IF NVL(p_inv_ind_rate_sch_id,
7942 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
7943            <> NVL(l_task_rec.INV_IND_RATE_SCH_ID,
7944 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
7945               THEN
7946 --bug 2955326
7947 /*
7948              l_statement  := l_statement ||
7949                        ' INV_IND_RATE_SCH_ID =  '||''''||
7950              TO_CHAR(p_inv_ind_rate_sch_id)||''''||',';
7951 */
7952              l_statement  := l_statement ||
7953                        ' INV_IND_RATE_SCH_ID = :inv_ind_rt_sch_id,';
7954              l_b_inv_ind_rt_sch_id_fg := 'Y';
7955 --end bug 2955326
7956              l_update_yes_flag := 'Y';
7957           END IF;
7958        END IF;
7959 
7960 
7961 
7962 IF p_rev_ind_rate_sch_id  <>
7963 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7964           AND p_rev_ind_rate_sch_id IS NOT NULL  THEN
7965 if p_rev_ind_rate_sch_id  <> g_rev_ind_rate_sch_id then -- added for bug 3795253
7966 BEGIN
7967 
7968 SELECT       ind_rate_schedule_type INTO l_rev_rate_sch_type
7969 FROM         pa_ind_rate_schedules
7970 WHERE        ind_rate_sch_id = p_rev_ind_rate_sch_id
7971 AND          trunc(sysdate) between trunc(start_date_active) and nvl(end_date_active,trunc(sysdate));
7972 g_rev_rate_sch_type := l_rev_rate_sch_type;       -- added for bug 3795253
7973 g_rev_ind_rate_sch_id := p_rev_ind_rate_sch_id;   -- added for bug 3795253
7974 EXCEPTION
7975     WHEN NO_DATA_FOUND THEN
7976   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7977                 THEN
7978                      pa_interface_utils_pub.map_new_amg_msg
7979                      ( p_old_message_code => 'PA_INVALID_REV_SCH_ID'
7980                       ,p_msg_attribute    => 'CHANGE'
7981                       ,p_resize_flag      => 'Y'
7982                       ,p_msg_context      => 'TASK'
7983                       ,p_attribute1       => l_amg_segment1
7984                       ,p_attribute2       => l_amg_task_number
7985                       ,p_attribute3       => ''
7986                       ,p_attribute4       => ''
7987                       ,p_attribute5       => '');
7988                 END IF;
7989                 RAISE  FND_API.G_EXC_ERROR;
7990   END;
7991 
7992    -- start of bug 3795253
7993   else
7994      l_rev_rate_sch_type := g_rev_rate_sch_type;
7995   end if;
7996   -- end of bug  3795253
7997 
7998 ELSE
7999 
8000 IF l_task_rec.REV_IND_RATE_SCH_ID IS NOT NULL
8001 and l_task_rec.REV_IND_RATE_SCH_ID <> g_rev_ind_rate_sch_id  -- Added for bug 3795253
8002 THEN
8003 
8004 SELECT       ind_rate_schedule_type INTO l_rev_rate_sch_type
8005 FROM         pa_ind_rate_schedules
8006 WHERE        ind_rate_sch_id = l_task_rec.REV_IND_RATE_SCH_ID;
8007 
8008 g_rev_rate_sch_type := l_rev_rate_sch_type;                -- added for bug 3795253
8009 g_rev_ind_rate_sch_id := l_task_rec.REV_IND_RATE_SCH_ID;   -- added for bug 3795253
8010 
8011 -- Bug 3657709
8012 /* AND          trunc(sysdate) between trunc(start_date_active) and nvl(end_date_active,trunc(sysdate)); */
8013 
8014 -- start of bug 3795253
8015 else
8016    l_rev_rate_sch_type := g_rev_rate_sch_type;
8017   end if;
8018   -- end of bug  3795253
8019 
8020 END IF;
8021 
8022 
8023  IF p_inv_ind_rate_sch_id  <>
8024 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8025           AND p_inv_ind_rate_sch_id IS NOT NULL  THEN
8026 if p_inv_ind_rate_sch_id  <> g_inv_ind_rate_sch_id then   -- added for bug 3795253
8027 
8028 BEGIN
8029 
8030 SELECT       ind_rate_schedule_type INTO l_inv_rate_sch_type
8031 FROM         pa_ind_rate_schedules
8032 WHERE        ind_rate_sch_id = p_inv_ind_rate_sch_id
8033 AND          trunc(sysdate) between trunc(start_date_active) and nvl(end_date_active,trunc(sysdate));
8034 
8035  g_inv_rate_sch_type := l_inv_rate_sch_type;       -- added for bug 3795253
8036  g_inv_ind_rate_sch_id := p_inv_ind_rate_sch_id;   -- added for bug 3795253
8037 
8038 EXCEPTION
8039   WHEN NO_DATA_FOUND THEN
8040     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8041                 THEN
8042                      pa_interface_utils_pub.map_new_amg_msg
8043                      ( p_old_message_code => 'PA_INVALID_INV_SCH_ID'
8044                       ,p_msg_attribute    => 'CHANGE'
8045                       ,p_resize_flag      => 'Y'
8046                       ,p_msg_context      => 'TASK'
8047                       ,p_attribute1       => l_amg_segment1
8048                       ,p_attribute2       => l_amg_task_number
8049                       ,p_attribute3       => ''
8050                       ,p_attribute4       => ''
8051                       ,p_attribute5       => '');
8052                 END IF;
8053                 RAISE  FND_API.G_EXC_ERROR;
8054   END;
8055   -- start of bug 3795253
8056   else
8057      l_inv_rate_sch_type := g_inv_rate_sch_type;
8058   end if;
8059   -- end of bug  3795253
8060 
8061   ELSE
8062   IF l_task_rec.INV_IND_RATE_SCH_ID IS NOT NULL
8063    and l_task_rec.INV_IND_RATE_SCH_ID <> g_inv_ind_rate_sch_id  -- Added for bug 3795253
8064     THEN
8065 
8066 
8067 SELECT       ind_rate_schedule_type INTO l_inv_rate_sch_type
8068 FROM         pa_ind_rate_schedules
8069 WHERE        ind_rate_sch_id = l_task_rec.INV_IND_RATE_SCH_ID;
8070 g_inv_rate_sch_type := l_inv_rate_sch_type;                -- added for bug 3795253
8071 g_inv_ind_rate_sch_id := l_task_rec.INV_IND_RATE_SCH_ID;   -- added for bug 3795253
8072 -- Bug 3657709
8073 /* AND          trunc(sysdate) between trunc(start_date_active) and nvl(end_date_active,trunc(sysdate)); */
8074 -- start of bug 3795253
8075 else
8076    l_inv_rate_sch_type := g_inv_rate_sch_type;
8077   end if;
8078   -- end of bug  3795253
8079 END IF;
8080 
8081 /*
8082  If the burden rate schedule type is of Provisional type then the revenue schedule date has to be nullified.
8083  */
8084 
8085 IF l_rev_rate_sch_type = 'P' AND l_task_rec.REV_IND_SCH_FIXED_DATE IS NOT NULL THEN
8086      l_statement  := l_statement ||
8087                        ' REV_IND_SCH_FIXED_DATE =  '''''||',';
8088     l_update_yes_flag := 'Y';
8089 ELSE
8090 
8091   IF ((p_rev_ind_sch_fixed_date  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8092   AND p_rev_ind_sch_fixed_date IS NOT NULL) OR (p_rev_ind_sch_fixed_date IS NULL))
8093    THEN
8094         IF (p_rev_ind_sch_fixed_date <> NVL(l_task_rec.rev_ind_sch_fixed_date,
8095 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) OR (p_rev_ind_sch_fixed_date IS NULL))
8096               THEN
8097              l_statement  := l_statement ||
8098 --bug 2955326
8099 /*
8100                        ' rev_ind_sch_fixed_date =  to_date('''||
8101                           to_char(p_rev_ind_sch_fixed_date,'YYYY/MM/DD')||
8102                              ''', ''YYYY/MM/DD''),';
8103 */
8104                        ' rev_ind_sch_fixed_date = :rv_ind_sch_fx_dt,';
8105              l_b_rv_ind_sch_fx_dt_fg := 'Y';
8106 --end bug 2955326
8107              l_update_yes_flag := 'Y';
8108           END IF;
8109        END IF;
8110  END IF;
8111 
8112 IF l_inv_rate_sch_type = 'P' and l_task_rec.INV_IND_SCH_FIXED_DATE IS NOT NULL
8113   THEN
8114     l_statement  := l_statement ||
8115                        ' INV_IND_SCH_FIXED_DATE =  '''''||',';
8116     l_update_yes_flag := 'Y';
8117 ELSE
8118     IF ((p_inv_ind_sch_fixed_date  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8119    AND p_inv_ind_sch_fixed_date IS NOT NULL) OR (p_inv_ind_sch_fixed_date IS NULL))
8120      THEN
8121           IF (p_inv_ind_sch_fixed_date <> NVL(l_task_rec.inv_ind_sch_fixed_date,
8122 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) OR (p_inv_ind_sch_fixed_date IS NULL))
8123               THEN
8124 --bug 2955326
8125 /*
8126              l_statement  := l_statement ||
8127                        ' inv_ind_sch_fixed_date =  to_date('''||
8128                           to_char(p_inv_ind_sch_fixed_date,'YYYY/MM/DD')||
8129                              ''', ''YYYY/MM/DD''),';
8130 */
8131              l_statement  := l_statement ||
8132                        ' inv_ind_sch_fixed_date =  :iv_ind_sch_fx_dt,';
8133              l_b_iv_ind_sch_fx_dt_fg := 'Y';
8134 --end bug 2955326
8135              l_update_yes_flag := 'Y';
8136           END IF;
8137        END IF;
8138  END IF;
8139 
8140   ELSE  /*Else when laboR schedule type and non labor schedule type are both <> 'I'*/
8141 
8142       l_statement  := l_statement ||
8143                        ' REV_IND_RATE_SCH_ID =  '''''||',';
8144 
8145 
8146      l_statement  := l_statement ||
8147                        ' INV_IND_RATE_SCH_ID =  '''''||',';
8148 
8149 
8150      l_statement  := l_statement ||
8151                        ' REV_IND_SCH_FIXED_DATE =  '''''||',';
8152 
8153      l_statement  := l_statement ||
8154                        ' INV_IND_SCH_FIXED_DATE =  '''''||',';
8155      l_update_yes_flag := 'Y';
8156 END IF;
8157 
8158      IF l_out_nl_labor_sch_type ='B' THEN
8159 
8160         IF p_nl_bill_rate_org_id  <>
8161 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8162           AND p_nl_bill_rate_org_id IS NOT NULL  THEN
8163           IF p_nl_bill_rate_org_id <> NVL(l_task_rec.NON_LABOR_BILL_RATE_ORG_ID,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
8164               THEN
8165 --bug 2955326
8166 /*
8167              l_statement := l_statement || ' NON_LABOR_BILL_RATE_ORG_ID = ' ||
8168                   TO_CHAR(p_nl_bill_rate_org_id)||',';
8169 */
8170              l_statement := l_statement || ' NON_LABOR_BILL_RATE_ORG_ID = :nl_bl_rt_org_id ,';
8171              l_b_nl_bl_rt_org_id_fg := 'Y';
8172 --end bug 2955326
8173              l_update_yes_flag := 'Y';
8174           END IF;
8175        END IF;
8176 
8177     IF p_non_lab_std_bill_rt_sch_id  <>
8178 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8179           AND p_non_lab_std_bill_rt_sch_id IS NOT NULL  THEN
8180           IF NVL(p_non_lab_std_bill_rt_sch_id,
8181       PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
8182       <> NVL(l_task_rec.non_lab_std_bill_rt_sch_id,
8183           PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
8184               THEN
8185 
8186 /*No data found is already handled in Validate_Schedule_Values*/
8187 
8188 BEGIN
8189          SELECT std_bill_rate_schedule INTO l_std_bill_rate_schedule
8190      FROM pa_std_bill_rate_schedules_all
8191      WHERE bill_rate_sch_id=p_non_lab_std_bill_rt_sch_id;
8192 
8193 --bug 2955326
8194 /*
8195       l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = ' ||''''||
8196                   TO_CHAR(p_non_lab_std_bill_rt_sch_id)||''''||',';
8197       l_statement := l_statement || ' NON_LABOR_STD_BILL_RATE_SCHDL = ' ||''''||
8198                   RTRIM(l_std_bill_rate_schedule)||''''||',';
8199 */
8200 --end bug 2955326
8201       l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = :nl_std_bl_rt_sch_id,';
8202       l_statement := l_statement || ' NON_LABOR_STD_BILL_RATE_SCHDL = :nl_std_bl_rt_sch,';
8203              l_b_nl_std_bl_rt_sch_fg := 'Y';
8204              l_update_yes_flag := 'Y';
8205   EXCEPTION
8206    WHEN NO_DATA_FOUND THEN
8207      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8208                 THEN
8209                      pa_interface_utils_pub.map_new_amg_msg
8210                      ( p_old_message_code => 'PA_PRJ_NL_SCHEDULE_ID'
8211                       ,p_msg_attribute    => 'CHANGE'
8212                       ,p_resize_flag      => 'Y'
8213                       ,p_msg_context      => 'TASK'
8214                       ,p_attribute1       => l_amg_segment1
8215                       ,p_attribute2       => l_amg_task_number
8216                       ,p_attribute3       => ''
8217                       ,p_attribute4       => ''
8218                       ,p_attribute5       => '');
8219                 END IF;
8220                 RAISE  FND_API.G_EXC_ERROR;
8221   END;
8222  END IF;
8223 END IF;
8224 
8225  /* Should be able to update null*/
8226         IF ((p_nl_schedule_fixed_date  <>
8227 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8228           AND p_nl_schedule_fixed_date IS NOT NULL)  OR (p_nl_schedule_fixed_date IS NULL)) THEN
8229           IF (p_nl_schedule_fixed_date
8230            <> NVL(l_task_rec.NON_LABOR_SCHEDULE_FIXED_DATE,
8231 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) OR (p_nl_schedule_fixed_date IS NULL))
8232               THEN
8233 --bug 2955326
8234 /*
8235              l_statement  := l_statement ||
8236                        ' NON_LABOR_SCHEDULE_FIXED_DATE =  to_date('''||
8237                           to_char(p_nl_schedule_fixed_date,'YYYY/MM/DD')||
8238                              ''', ''YYYY/MM/DD''),';
8239 */
8240              l_statement  := l_statement ||
8241                        ' NON_LABOR_SCHEDULE_FIXED_DATE = :nl_sch_fx_dt,';
8242              l_b_nl_sch_fx_dt_fg := 'Y';
8243 --end bug 2955326
8244              l_update_yes_flag := 'Y';
8245           END IF;
8246        END IF;
8247 
8248  /* Should be able to update null*/
8249   IF ((p_nl_schedule_discount  <>
8250 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8251           AND p_nl_schedule_discount IS NOT NULL)  OR (p_nl_schedule_discount IS NULL)) THEN
8252           IF (p_nl_schedule_discount <> NVL(l_task_rec.non_labor_disc_reason_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
8253         OR p_nl_schedule_discount IS NULL)
8254               THEN
8255 --bug 2955326
8256 /*
8257            l_statement  := l_statement ||
8258                        '  NON_LABOR_SCHEDULE_DISCOUNT    =  '||''''||
8259              TO_CHAR(p_nl_schedule_discount)||''''||',';
8260 */
8261              l_statement  := l_statement ||
8262                        '  NON_LABOR_SCHEDULE_DISCOUNT = :nl_sch_dsnt,';
8263              l_b_nl_sch_dsnt_fg := 'Y';
8264              l_update_yes_flag := 'Y';
8265 --end bug 2955326
8266           END IF;
8267        END IF;
8268 
8269 IF p_nl_schedule_discount IS NULL
8270 THEN
8271     l_statement := l_statement || ' NON_LABOR_DISC_REASON_CODE = ''''' ||',';
8272     l_update_yes_flag := 'Y';
8273 ELSE
8274        IF p_non_labor_disc_reason_code  <>
8275 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8276           AND p_non_labor_disc_reason_code IS NOT NULL  THEN
8277           IF NVL(p_non_labor_disc_reason_code,
8278 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
8279            <> NVL(l_task_rec.non_labor_disc_reason_code,
8280 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
8281               THEN
8282 --bug 2955326
8283 /*
8284              l_statement  := l_statement ||
8285                        ' NON_LABOR_DISC_REASON_CODE =  '||''''||
8286              RTRIM(p_non_labor_disc_reason_code)||''''||',';
8287 */
8288              l_statement  := l_statement ||
8289                        ' NON_LABOR_DISC_REASON_CODE = :nl_disc_rsn_cd ,';
8290              l_b_nl_disc_rsn_cd_fg := 'Y';
8291 --end bug 2955326
8292              l_update_yes_flag := 'Y';
8293           END IF;
8294        END IF;
8295  END IF;
8296 
8297    ELSE   /*Else when the non labor schedule type <> 'B'*/
8298 
8299       l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = '''''||',';
8300 
8301       l_statement := l_statement || ' NON_LABOR_SCHEDULE_FIXED_DATE = ''''' ||',';
8302 
8303       l_statement := l_statement || ' NON_LABOR_SCHEDULE_DISCOUNT = '''''||',';
8304 
8305       l_statement := l_statement || ' NON_LABOR_DISC_REASON_CODE = ''''' ||',';
8306 
8307       l_statement := l_statement || ' NON_LABOR_STD_BILL_RATE_SCHDL = ''''' ||',';
8308 
8309       l_statement := l_statement || ' NON_LABOR_BILL_RATE_ORG_ID = ''''' ||',';
8310      l_update_yes_flag := 'Y';
8311 END IF;
8312 
8313 /*Code for bug 2802984 ends*/
8314 
8315  -- Update other date fields which are maintained only  in the external system
8316 
8317 -- update Actual start date and actual finish date
8318 
8319        IF (p_actual_start_date IS NOT NULL AND
8320            p_actual_start_date <>
8321            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
8322            NVL(l_task_rec.actual_start_date,
8323                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
8324                p_actual_start_date THEN
8325 --bug 2955326
8326 /*
8327              l_statement :=   l_statement ||
8328                      ' ACTUAL_START_DATE = to_date('''||
8329                           to_char(p_actual_start_date,'YYYY/MM/DD')||
8330                              ''', ''YYYY/MM/DD''),';
8331 */
8332              l_statement :=   l_statement ||
8333                      ' ACTUAL_START_DATE = :act_st_dt ,';
8334              l_b_act_st_dt_fg := 'Y';
8335 --end bug 2955326
8336              l_update_yes_flag := 'Y';
8337        END IF;
8338 
8339 
8340        IF (p_actual_finish_date IS NOT NULL AND
8341            p_actual_finish_date <>
8342            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
8343            NVL(l_task_rec.actual_finish_date,
8344                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
8345                p_actual_finish_date THEN
8346 --bug 2955326
8347 /*
8348              l_statement :=   l_statement ||
8349                      ' ACTUAL_FINISH_DATE = to_date('''||
8350                           to_char(p_actual_finish_date,'YYYY/MM/DD')||
8351                              ''', ''YYYY/MM/DD''),';
8352 */
8353              l_statement :=   l_statement ||
8354                      ' ACTUAL_FINISH_DATE = :act_fn_dt ,';
8355              l_b_act_fn_dt_fg := 'Y';
8356           l_update_yes_flag := 'Y';
8357        END IF;
8358 
8359 -- update early start date and early finish date
8360        IF (p_early_start_date IS NOT NULL AND
8361            p_early_start_date <>
8362            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
8363            NVL(l_task_rec.early_start_date,
8364                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
8365                p_early_start_date THEN
8366 --bug 2955326
8367 /*
8368              l_statement :=   l_statement ||
8369                      ' EARLY_START_DATE = to_date('''||
8370                           to_char(p_early_start_date,'YYYY/MM/DD')||
8371                              ''', ''YYYY/MM/DD''),';
8372 */
8373              l_statement :=   l_statement ||
8374                      ' EARLY_START_DATE = :erly_st_dt ,';
8375              l_b_erly_st_dt_fg := 'Y';
8376 --end bug 2955326
8377              l_update_yes_flag := 'Y';
8378        END IF;
8379 
8380        IF (p_early_finish_date IS NOT NULL AND
8381            p_early_finish_date <>
8382            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
8383            NVL(l_task_rec.early_finish_date,
8384                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
8385                p_early_finish_date THEN
8386 --bug 2955326
8387 /*
8388              l_statement :=   l_statement ||
8389                      ' EARLY_FINISH_DATE = to_date('''||
8390                           to_char(p_early_finish_date,'YYYY/MM/DD')||
8391                              ''', ''YYYY/MM/DD''),';
8392 */
8393              l_statement :=   l_statement ||
8394                      ' EARLY_FINISH_DATE = :erly_fn_dt ,';
8395              l_b_erly_fn_dt_fg := 'Y';
8396 --end bug 2955326
8397              l_update_yes_flag := 'Y';
8398        END IF;
8399 
8400 -- update Late start date and Late finish date
8401 
8402        IF (p_late_start_date IS NOT NULL AND
8403            p_late_start_date <>
8404            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
8405            NVL(l_task_rec.late_start_date,
8406                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
8407                p_late_start_date THEN
8408 --bug 2955326
8409 /*
8410              l_statement :=   l_statement ||
8411                      ' LATE_START_DATE = to_date('''||
8412                           to_char(p_late_start_date,'YYYY/MM/DD')||
8413                              ''', ''YYYY/MM/DD''),';
8414 */
8415              l_statement :=   l_statement ||
8416                      ' LATE_START_DATE = :lt_st_dt ,';
8417              l_b_lt_st_dt_fg := 'Y';
8418 --end bug 2955326
8419 
8420              l_update_yes_flag := 'Y';
8421        END IF;
8422 
8423 
8424        IF (p_late_finish_date IS NOT NULL AND
8425            p_late_finish_date <>
8426            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
8427            NVL(l_task_rec.late_finish_date,
8428                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
8429                p_late_finish_date THEN
8430 --bug 2955326
8431 /*
8432              l_statement :=   l_statement ||
8433                      ' LATE_FINISH_DATE = to_date('''||
8434                           to_char(p_late_finish_date,'YYYY/MM/DD')||
8435                              ''', ''YYYY/MM/DD''),';
8436 */
8437              l_statement :=   l_statement ||
8438                      ' LATE_FINISH_DATE = :lt_fn_dt ,';
8439              l_b_lt_fn_dt_fg := 'Y';
8440 --end bug 2955326
8441              l_update_yes_flag := 'Y';
8442        END IF;
8443 
8444 
8445 -- update scheduled start date and scheduled finish date
8446 
8447        IF (p_scheduled_start_date IS NOT NULL AND
8448            p_scheduled_start_date <>
8449            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
8450            NVL(l_task_rec.scheduled_start_date,
8451                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
8452                p_scheduled_start_date THEN
8453 --bug 2955326
8454 /*
8455              l_statement :=   l_statement ||
8456                      ' SCHEDULED_START_DATE = to_date('''||
8457                           to_char(p_scheduled_start_date,'YYYY/MM/DD')||
8458                              ''', ''YYYY/MM/DD''),';
8459 */
8460              l_statement :=   l_statement ||
8461                      ' SCHEDULED_START_DATE = :sch_st_dt ,';
8462              l_b_sch_st_dt_fg := 'Y';
8463 --end bug 2955326
8464              l_update_yes_flag := 'Y';
8465        END IF;
8466 
8467 
8468        IF (p_scheduled_finish_date IS NOT NULL AND
8469            p_scheduled_finish_date <>
8470            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
8471            NVL(l_task_rec.scheduled_finish_date,
8472                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
8473                p_scheduled_finish_date THEN
8474 --bug 2955326
8475 /*
8476              l_statement :=   l_statement ||
8477                      ' SCHEDULED_FINISH_DATE = to_date('''||
8478                           to_char(p_scheduled_finish_date,'YYYY/MM/DD')||
8479                              ''', ''YYYY/MM/DD''),';
8480 */
8481              l_statement :=   l_statement ||
8482                      ' SCHEDULED_FINISH_DATE = :sch_fn_dt ,';
8483              l_b_sch_fn_dt_fg := 'Y';
8484 --end bug 2955326
8485              l_update_yes_flag := 'Y';
8486        END IF;
8487 
8488        IF p_task_manager_person_id <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8489        AND nvl(p_task_manager_person_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
8490            <> nvl(l_task_rec.task_manager_person_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
8491        AND p_task_manager_person_id IS NOT NULL --redundant, but added for clarity
8492        THEN
8493 /* code commented and added for the Bug#1688735, starts here */
8494 /*           l_statement :=  l_statement ||
8495                   ' TASK_MANAGER_PERSON_ID = '||TO_CHAR(l_new_parent_task_id)||','; */
8496 --bug 2955326
8497 /*
8498            l_statement :=  l_statement ||
8499                   ' TASK_MANAGER_PERSON_ID = '||TO_CHAR(p_task_manager_person_id)||',';
8500 */
8501            l_statement :=  l_statement ||
8502                   ' TASK_MANAGER_PERSON_ID = :tk_mgr_id ,';
8503            l_b_tk_mgr_id_fg := 'Y';
8504 --end bug 2955326;
8505 /* code commented and added for the Bug#1688735, ends here */
8506             l_update_yes_flag := 'Y';
8507 
8508        END IF;
8509 
8510 
8511 -- Fix for Bug #1272548
8512 -- BURDEN SCHEDULE AND FIXED DATE
8513 
8514        IF  (p_cost_ind_rate_sch_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
8515        AND (nvl(p_cost_ind_rate_sch_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
8516            <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
8517        AND p_cost_ind_rate_sch_id IS NOT NULL  --redundant, but added for clarity
8518        THEN
8519            OPEN l_cost_ind_rate_sch_id_csr( p_cost_ind_rate_sch_id);
8520            FETCH l_cost_ind_rate_sch_id_csr INTO l_temp_var;
8521            IF l_cost_ind_rate_sch_id_csr%NOTFOUND
8522            THEN
8523                 CLOSE l_cost_ind_rate_sch_id_csr;
8524                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8525                 THEN
8526                      pa_interface_utils_pub.map_new_amg_msg
8527                      ( p_old_message_code => 'PA_PRJ_INV_BURDEN_SCH_ID'
8528                       ,p_msg_attribute    => 'CHANGE'
8529                       ,p_resize_flag      => 'N'
8530                       ,p_msg_context      => 'TASK'
8531                       ,p_attribute1       => l_amg_segment1
8532                       ,p_attribute2       => l_amg_task_number
8533                       ,p_attribute3       => ''
8534                       ,p_attribute4       => ''
8535                       ,p_attribute5       => '');
8536                 END IF;
8537                 RAISE  FND_API.G_EXC_ERROR;
8538            END IF;
8539            CLOSE l_cost_ind_rate_sch_id_csr;
8540 
8541 -- Add the Schedule ID to the update statement.
8542 
8543 --bug 2955326
8544 /*
8545            l_statement :=       l_statement ||
8546                                 ' COST_IND_RATE_SCH_ID = '||''''||TO_CHAR(p_cost_ind_rate_sch_id)||''''||',';
8547 */
8548            l_statement :=       l_statement ||
8549                                 ' COST_IND_RATE_SCH_ID = :cst_ind_rt_sch_id ,';
8550            l_b_cst_ind_rt_sch_id_fg := 'Y';
8551 --end bug 2955326
8552            l_update_yes_flag := 'Y';
8553 
8554        END IF;
8555 
8556 -- Start fix for Bug #1335417
8557 
8558     IF  (p_cost_ind_sch_fixed_date  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
8559         AND (nvl(p_cost_ind_sch_fixed_date,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
8560             <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
8561         AND p_cost_ind_sch_fixed_date IS NOT NULL  --redundant, but added for clarity
8562         THEN
8563            OPEN l_ind_rate_schedule_type_csr( p_cost_ind_rate_sch_id);
8564            FETCH l_ind_rate_schedule_type_csr INTO l_temp_var_sch_type;
8565            IF l_temp_var_sch_type = 'P'
8566            THEN
8567                 CLOSE l_ind_rate_schedule_type_csr;
8568                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8569                 THEN
8570                      pa_interface_utils_pub.map_new_amg_msg
8571                      ( p_old_message_code => 'PA_CANT_FIX_DATE_PROV_SCH'
8572                       ,p_msg_attribute    => 'CHANGE'
8573                       ,p_resize_flag      => 'N'
8574                       ,p_msg_context      => 'TASK'
8575                       ,p_attribute1       => l_amg_segment1
8576                       ,p_attribute2       => l_amg_task_number
8577                       ,p_attribute3       => ''
8578                       ,p_attribute4       => ''
8579                       ,p_attribute5       => '');
8580                 END IF;
8581                 RAISE  FND_API.G_EXC_ERROR;
8582            END IF;
8583            CLOSE l_ind_rate_schedule_type_csr;
8584 
8585 -- End fix for bug # 1335417
8586 
8587 -- Add the Fixed Date to the update statement.
8588 --bug 2955326
8589 /*
8590            l_statement :=       l_statement ||
8591                                 ' COST_IND_SCH_FIXED_DATE = '||''''||TO_CHAR(p_cost_ind_sch_fixed_date)||''''||',';
8592 
8593 */
8594            l_statement :=       l_statement ||
8595                                 ' COST_IND_SCH_FIXED_DATE = :cst_ind_sch_fx_dt ,';
8596            l_b_cst_ind_sch_fx_dt_fg := 'Y';
8597 --end bug 2955326
8598            l_update_yes_flag := 'Y';
8599 
8600        END IF;
8601 
8602 -- End Fix for Bug # 1272548
8603 
8604 
8605       IF l_update_yes_flag = 'Y'
8606       THEN
8607             -- 4156036 Moved the below code to set invoice_method, customer_id and get_etc_source_code columns
8608             -- before setting the where clause
8609             -- wrong update sql statment was getting generated
8610 
8611             IF (p_invoice_method IS NOT NULL AND p_invoice_method <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
8612                   NVL(l_task_rec.invoice_method, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> p_invoice_method
8613             THEN
8614                      l_statement :=   l_statement || ' INVOICE_METHOD = :inv_md ,';
8615                      l_inv_md_fg := 'Y';
8616                      l_update_yes_flag := 'Y';
8617             END IF;
8618 /* Commented for Bug 4689326.
8619             IF (p_customer_id IS NOT NULL AND p_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
8620                   NVL(l_task_rec.customer_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) <> p_customer_id
8621             THEN
8622                      l_statement :=   l_statement || ' CUSTOMER_ID = :cust_id ,';
8623                      l_cust_id_fg := 'Y';
8624                      l_update_yes_flag := 'Y';
8625             END IF;*/
8626 -- Start of Bug Number 4689326
8627 -- Cheking is done whether its a Parent task or child task .If it is Parent task changing all the child tasks customers also.
8628             IF (p_customer_id IS NOT NULL AND p_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
8629                   NVL(l_task_rec.customer_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) <> p_customer_id
8630             THEN
8631                     IF l_task_rec.parent_task_id IS NULL THEN
8632                        IF  l_children_exist ='Y' THEN
8633                          UPDATE PA_TASKS SET customer_id = p_customer_id
8634                          WHERE top_task_id=l_task_rec.task_id AND not(task_id =l_task_rec.task_id);
8635                        END IF;
8636                      l_statement :=   l_statement || ' CUSTOMER_ID = :cust_id ,';
8637                      l_cust_id_fg := 'Y';
8638                      l_update_yes_flag := 'Y';
8639                     END IF;
8640             END IF;
8641 
8642             IF (P_gen_etc_source_code IS NOT NULL AND p_gen_etc_source_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
8643                   NVL(l_task_rec.gen_etc_source_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> p_gen_etc_source_code
8644             THEN
8645                      l_statement :=   l_statement || ' GEN_ETC_SOURCE_CODE = :gen_etc_src_co ,';
8646                      l_gen_etc_src_co_fg := 'Y';
8647                      l_update_yes_flag := 'Y';
8648             END IF;
8649 
8650             -- 4156036 end
8651 
8652 /* code commented and added for the bug#1723839, starts here  */
8653 
8654 /*                      l_statement :=  l_statement ||
8655                                 ' LAST_UPDATE_DATE = '||''''||
8656                                 SYSDATE||''''||',';
8657 */
8658                 l_statement :=  l_statement ||
8659                                 ' LAST_UPDATE_DATE = SYSDATE'||',';
8660 
8661 /* code commented and added for the bug#1723839, ends here  */
8662 
8663 
8664                 l_statement :=  l_statement ||
8665                             ' LAST_UPDATED_BY = :g_usr_id,'; --bug 2955326
8666 --                              ' LAST_UPDATED_BY = '||G_USER_ID||','; --bug 2955326
8667 
8668                 l_statement :=  l_statement ||
8669                             ' LAST_UPDATE_LOGIN = :g_login_id ';
8670 --                              ' LAST_UPDATE_LOGIN = '||G_LOGIN_ID; --bug 2955326
8671 
8672 
8673             l_statement :=  l_statement ||
8674                         ' WHERE PROJECT_ID  = :prj_id ' ||
8675                         ' AND TASK_ID = :tk_id ';
8676 --                      ' WHERE PROJECT_ID  = '||TO_CHAR(l_project_id) || --bug 2955326
8677 --                      ' AND TASK_ID = '||TO_CHAR(l_task_id);            --bug 2955326
8678 
8679            -- 4156036 commented below code and added it above ( before setting the where clause of the update statement
8680 /*
8681 --Added by rtarway for BUG 4106154, copied from venkat's FP_M chnages. These should be before sql statement is parsed.
8682            IF (p_invoice_method IS NOT NULL AND p_invoice_method <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
8683                   NVL(l_task_rec.invoice_method, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> p_invoice_method
8684             THEN
8685                      l_statement :=   l_statement || ' INVOICE_METHOD = :inv_md ,';
8686                      l_inv_md_fg := 'Y';
8687                      l_update_yes_flag := 'Y';
8688             END IF;
8689 
8690             IF (p_customer_id IS NOT NULL AND p_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
8691                   NVL(l_task_rec.customer_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) <> p_customer_id
8692             THEN
8693                      l_statement :=   l_statement || ' CUSTOMER_ID = :cust_id ,';
8694                      l_cust_id_fg := 'Y';
8695                      l_update_yes_flag := 'Y';
8696             END IF;
8697 
8698             IF (P_gen_etc_source_code IS NOT NULL AND p_gen_etc_source_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
8699                   NVL(l_task_rec.gen_etc_source_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> p_gen_etc_source_code
8700             THEN
8701                      l_statement :=   l_statement || ' GEN_ETC_SOURCE_CODE = :gen_etc_src_co ,';
8702                      l_gen_etc_src_co_fg := 'Y';
8703                      l_update_yes_flag := 'Y';
8704             END IF;
8705 --end add by rtarway for BUG 4106154
8706 */
8707            -- 4156036 end
8708 
8709 /* dbms_output.put_line('Opening the cursor'); */
8710 /* dbms_output.put_line(to_char(length(l_statement))); */
8711 /* dbms_output.put_line('Statement: '||substr(l_statement,1,100)); */
8712 /* dbms_output.put_line('Statement: '||substr(l_statement,101,100)); */
8713 /* dbms_output.put_line('Statement: '||substr(l_statement,201,100)); */
8714 
8715             l_cursor := dbms_sql.open_cursor;
8716             dbms_sql.parse(l_cursor, l_statement, dbms_sql.native);
8717 
8718 /* -- Commented by rtarway for BUG 4106154, this should be before opening the curosr, otherwise ora error 'variables not bound' is thrown
8719    -- if we try to bind any of following params
8720 ----(Begin Venkat) FP_M changes ------------------------------------------------------------
8721 
8722             IF (p_invoice_method IS NOT NULL AND p_invoice_method <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
8723                   NVL(l_task_rec.invoice_method, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> p_invoice_method
8724             THEN
8725                      l_statement :=   l_statement || ' INVOICE_METHOD = :inv_md ,';
8726                      l_inv_md_fg := 'Y';
8727                      l_update_yes_flag := 'Y';
8728             END IF;
8729 
8730             IF (p_customer_id IS NOT NULL AND p_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
8731                   NVL(l_task_rec.customer_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) <> p_customer_id
8732             THEN
8733                      l_statement :=   l_statement || ' CUSTOMER_ID = :cust_id ,';
8734                      l_cust_id_fg := 'Y';
8735                      l_update_yes_flag := 'Y';
8736             END IF;
8737 
8738             IF (P_gen_etc_source_code IS NOT NULL AND p_gen_etc_source_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
8739                   NVL(l_task_rec.gen_etc_source_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> p_gen_etc_source_code
8740             THEN
8741                      l_statement :=   l_statement || ' GEN_ETC_SOURCE_CODE = :gen_etc_src_co ,';
8742                      l_gen_etc_src_co_fg := 'Y';
8743                      l_update_yes_flag := 'Y';
8744             END IF;
8745 
8746 ----(End Venkat) FP_M changes ------------------------------------------------------------
8747 */
8748 --bug 2955326
8749                 IF l_b_pm_tk_ref_flag = 'Y' THEN
8750                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':pm_tk_ref', RTRIM(p_pm_task_reference));
8751                 END IF;
8752 
8753                 IF l_b_tk_nm_flag = 'Y' THEN
8754                    DBMS_SQL.BIND_VARIABLE(l_cursor, ':tk_name', substrb(RTRIM(p_task_name),1,20)); -- bug 6193314
8755                 END IF;
8756 
8757                 IF l_b_ln_tk_nm_flag = 'Y' THEN
8758                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':ln_tk_name', RTRIM(p_long_task_name));
8759                 END IF;
8760 
8761                 IF l_b_tk_desc_flag = 'Y' THEN
8762                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':descrp', RTRIM(p_task_description));
8763                 END IF;
8764 
8765                 IF l_b_rdy_to_bill_flag = 'Y' THEN
8766                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':rdy_to_bill_fg', p_ready_to_bill_flag);
8767                 END IF;
8768 
8769                 IF l_b_rdy_to_dist_flag = 'Y' THEN
8770                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':rdy_to_dist_fg', p_ready_to_distribute_flag);
8771                 END IF;
8772 
8773                 IF l_b_lmt_to_txn_ctrl_fg = 'Y' THEN
8774                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lmt_to_txn_ctrl_fg', p_limit_to_txn_controls_flag);
8775                 END IF;
8776 
8777                 IF l_b_cryng_out_org_id_flag = 'Y' THEN
8778                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cryng_out_org_id', p_carrying_out_organization_id);
8779                 END IF;
8780 
8781                 IF l_b_chgble_fg = 'Y' THEN
8782                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':chgble_fg', p_chargeable_flag);
8783                 END IF;
8784 
8785                 IF l_b_billable_fg = 'Y' THEN
8786                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':bil_fg', p_billable_flag);
8787                 END IF;
8788 
8789                 IF l_b_srv_tp_cd_fg = 'Y' THEN
8790                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':srv_tp_cd', p_service_type_code);
8791                 END IF;
8792 
8793                 IF l_b_tk_num_fg = 'Y' THEN
8794          --dbms_output.put_line('adding the bind variable'||'-'||p_task_number);
8795          /* bug #5243018: Reverting the fix in bug 4120380.
8796        DBMS_SQL.BIND_VARIABLE(l_cursor, ':tk_num','-'||p_task_number); */
8797                        DBMS_SQL.BIND_VARIABLE(l_cursor, ':tk_num', substrb(p_task_number,1,25)); --bug 5733285
8798           /** CODE CHANGE BY ADITI for Bug 4120380.This is to prefix task_number with '-' so that
8799           PA_TASKS_U2 constraint can be overcome.After updating all the tasks in the script,
8800           code again updates the task_number, trimming the '-' added.**/
8801                 END IF;
8802 
8803                 IF l_b_tk_st_dt_flag = 'Y' THEN
8804                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':st_dt', p_task_start_date);
8805                 END IF;
8806 
8807                 IF l_b_comp_dt_fg = 'Y' THEN
8808                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cmp_dt', p_task_completion_date);
8809                 END IF;
8810 
8811                 IF l_b_prt_tk_id_fg = 'Y' THEN
8812                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':prt_tk_id', l_new_parent_task_id);
8813                 END IF;
8814 
8815                 IF l_b_addr_id_fg = 'Y' THEN
8816                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':addr_id', p_address_id);
8817                 END IF;
8818 
8819                 IF l_b_attr_cat_fg = 'Y' THEN
8820                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr_cat', RTRIM(l_attribute_category));
8821                 END IF;
8822                  --bug 6153503 start
8823                 IF l_b_attr1_fg = 'Y' THEN
8824                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr1', RTRIM(l_attribute1));
8825                 END IF;
8826 
8827                 IF l_b_attr2_fg = 'Y' THEN
8828                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr2', RTRIM(l_attribute2));
8829                 END IF;
8830 
8831                 IF l_b_attr3_fg = 'Y' THEN
8832                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr3', RTRIM(l_attribute3));
8833                 END IF;
8834 
8835                 IF l_b_attr4_fg = 'Y' THEN
8836                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr4', RTRIM(l_attribute4));
8837                 END IF;
8838 
8839                 IF l_b_attr5_fg = 'Y' THEN
8840                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr5', RTRIM(l_attribute5));
8841                 END IF;
8842 
8843                 IF l_b_attr6_fg = 'Y' THEN
8844                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr6', RTRIM(l_attribute6));
8845                 END IF;
8846 
8847                 IF l_b_attr7_fg = 'Y' THEN
8848                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr7', RTRIM(l_attribute7));
8849                 END IF;
8850 
8851                 IF l_b_attr8_fg = 'Y' THEN
8852                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr8', RTRIM(l_attribute8));
8853                 END IF;
8854 
8855                 IF l_b_attr9_fg = 'Y' THEN
8856                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr9', RTRIM(l_attribute9));
8857                 END IF;
8858 
8859                 IF l_b_attr10_fg = 'Y' THEN
8860                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr10', RTRIM(l_attribute10));
8861                 END IF;
8862                  --bug 6153503 end
8863 
8864                 IF l_b_al_x_chg_fg = 'Y' THEN
8865                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':all_x_chg_fg', RTRIM(p_allow_cross_charge_flag));
8866                 END IF;
8867 
8868                 IF l_b_prj_rt_tp_fg = 'Y' THEN
8869                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':prj_rt_tp', RTRIM(p_project_rate_type));
8870                 END IF;
8871 
8872                 IF l_b_prj_rt_dt_fg = 'Y' THEN
8873                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':prj_rt_dt', p_project_rate_date);
8874                 END IF;
8875 
8876                 IF l_b_cc_proc_lbr_fg = 'Y' THEN
8877                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cc_proc_lbr_fg', RTRIM(l_cc_process_labor_flag)); -- Changed to local variable for Bug 5395048
8878                 END IF;
8879 
8880                 IF l_b_lbr_tp_sch_id_fg = 'Y' THEN
8881                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lbr_tp_sch_id', p_labor_tp_schedule_id);
8882                 END IF;
8883 
8884                 IF l_b_lbr_tp_fx_dt_fg = 'Y' THEN
8885                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lbr_tp_fx_dt', p_labor_tp_fixed_date);
8886                 END IF;
8887 
8888                 IF l_b_cc_proc_nl_fg = 'Y' THEN
8889                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cc_proc_nl_fg', RTRIM(l_cc_process_nl_flag)); -- Changed to local variable for Bug 5395048
8890                 END IF;
8891 
8892                 IF l_b_nl_tp_sch_id_fg = 'Y' THEN
8893                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nl_tp_sch_id', p_nl_tp_schedule_id);
8894                 END IF;
8895 
8896                 IF l_b_nl_tp_fx_dt_fg = 'Y' THEN
8897                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nl_tp_fx_dt', p_nl_tp_fixed_date);
8898                 END IF;
8899 
8900                 IF l_b_rcv_prj_inv_fg = 'Y' THEN
8901                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':rcv_prj_inv_fg', RTRIM(p_receive_project_invoice_flag));
8902                 END IF;
8903 
8904                 IF l_b_wk_tp_id_fg = 'Y' THEN
8905                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':wk_tp_id', p_work_type_id);
8906                 END IF;
8907 
8908                 IF l_b_emp_bill_rt_sch_id_fg = 'Y' THEN
8909                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':emp_bill_rt_sch_id', p_emp_bill_rate_schedule_id);
8910                 END IF;
8911 
8912                 IF l_b_jb_bill_rt_sch_id_fg = 'Y' THEN
8913                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':jb_bill_rt_sch_id', p_job_bill_rate_schedule_id);
8914                 END IF;
8915 
8916                 IF l_b_nn_lb_std_bl_rt_sch_id_fg = 'Y' THEN
8917                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lb_std_bl_rt_sch_id', p_non_lab_std_bill_rt_sch_id);
8918                 END IF;
8919 
8920                 IF l_b_tkfnc_cst_rt_dt_fg = 'Y' THEN
8921                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':tkfnc_cst_rt_dt', p_taskfunc_cost_rate_date);
8922                 END IF;
8923 
8924                 IF l_b_tkfnc_cst_rt_tp_fg = 'Y' THEN
8925                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':tkfnc_cst_rt_tp', RTRIM(p_taskfunc_cost_rate_type));
8926                 END IF;
8927 
8928                 IF l_b_lbr_disc_rsn_cd_fg = 'Y' THEN
8929                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lbr_disc_rsn_cd', RTRIM(p_labor_disc_reason_code));
8930                 END IF;
8931 
8932                 IF l_b_nn_lbr_disc_rsn_cd_fg = 'Y' THEN
8933                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lbr_disc_rsn_cd', RTRIM(p_non_labor_disc_reason_code));
8934                 END IF;
8935 
8936                 IF l_b_act_st_dt_fg = 'Y' THEN
8937                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':act_st_dt', p_actual_start_date);
8938                 END IF;
8939 
8940                 IF l_b_act_fn_dt_fg = 'Y' THEN
8941                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':act_fn_dt', p_actual_finish_date);
8942                 END IF;
8943 
8944                 IF l_b_erly_st_dt_fg = 'Y' THEN
8945                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':erly_st_dt', p_early_start_date);
8946                 END IF;
8947 
8948                 IF l_b_erly_fn_dt_fg = 'Y' THEN
8949                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':erly_fn_dt', p_early_finish_date);
8950                 END IF;
8951 
8952                 IF l_b_lt_st_dt_fg = 'Y' THEN
8953                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lt_st_dt', p_late_start_date);
8954                 END IF;
8955 
8956                 IF l_b_lt_fn_dt_fg = 'Y' THEN
8957                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lt_fn_dt', p_late_finish_date);
8958                 END IF;
8959 
8960                 IF l_b_sch_st_dt_fg = 'Y' THEN
8961                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':sch_st_dt', p_scheduled_start_date);
8962                 END IF;
8963 
8964                 IF l_b_sch_fn_dt_fg = 'Y' THEN
8965                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':sch_fn_dt', p_scheduled_finish_date);
8966                 END IF;
8967 
8968                 IF l_b_cst_ind_rt_sch_id_fg = 'Y' THEN
8969                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cst_ind_rt_sch_id', p_cost_ind_rate_sch_id);
8970                 END IF;
8971 
8972                 IF l_b_cst_ind_sch_fx_dt_fg = 'Y' THEN
8973                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cst_ind_sch_fx_dt', p_cost_ind_sch_fixed_date);
8974                 END IF;
8975 
8976                 IF l_b_ret_cst_fg = 'Y' THEN
8977                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':ret_cst_fg', RTRIM(p_retirement_cost_flag));
8978                 END IF;
8979 
8980                 IF l_b_cint_elg_fg = 'Y' THEN
8981                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cint_elg_fg', RTRIM(p_cint_eligible_flag));
8982                 END IF;
8983 
8984                 IF l_b_cint_stp_dt_fg = 'Y' THEN
8985                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cint_stp_dt', RTRIM(p_cint_stop_date));
8986                 END IF;
8987 
8988                 IF l_b_lbr_sch_tp_fg = 'Y' THEN
8989                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lbr_sch_tp', RTRIM(p_labor_sch_type));
8990                 END IF;
8991 
8992                 IF l_b_n_lbr_sch_tp_fg = 'Y' THEN
8993                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':n_lbr_sch_tp', RTRIM(p_nl_sch_type));
8994                 END IF;
8995 
8996                 IF l_b_emp_bill_rt_sch_id_fg2 = 'Y' THEN  --IF l_b_jb_bill_rt_sch_id_fg2 = 'Y' THEN - Changed the IF Condition for the Bug:4692368
8997                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':emp_bill_rt_sch_id2', p_emp_bill_rate_schedule_id);
8998                 END IF;
8999 
9000                 IF l_b_jb_bill_rt_sch_id_fg2 = 'Y' THEN
9001                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':jb_bill_rt_sch_id2', p_job_bill_rate_schedule_id);
9002                 END IF;
9003 
9004                 IF l_b_lbr_sch_fx_dt = 'Y' THEN
9005                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lbr_sch_fx_dt', p_labor_schedule_fixed_date);
9006                 END IF;
9007 
9008                 IF l_b_lbr_sch_dsnt = 'Y' THEN
9009                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lbr_sch_dsnt', p_labor_schedule_discount);
9010                 END IF;
9011 
9012                 IF l_b_rv_ind_rt_sch_id_fg = 'Y' THEN
9013                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':rv_ind_rt_sch_id', p_rev_ind_rate_sch_id);
9014                 END IF;
9015 
9016                 IF l_b_inv_ind_rt_sch_id_fg = 'Y' THEN
9017                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':inv_ind_rt_sch_id', p_inv_ind_rate_sch_id);
9018                 END IF;
9019 
9020                 IF l_b_rv_ind_sch_fx_dt_fg = 'Y' THEN
9021                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':rv_ind_sch_fx_dt', p_rev_ind_sch_fixed_date);
9022                 END IF;
9023 
9024                 IF l_b_iv_ind_sch_fx_dt_fg = 'Y' THEN
9025                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':iv_ind_sch_fx_dt', p_inv_ind_sch_fixed_date);
9026                 END IF;
9027 
9028                 IF l_b_nl_bl_rt_org_id_fg = 'Y' THEN
9029                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nl_bl_rt_org_id', p_nl_bill_rate_org_id);
9030                 END IF;
9031 
9032                 IF l_b_nl_std_bl_rt_sch_fg = 'Y' THEN
9033                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nl_std_bl_rt_sch_id', p_non_lab_std_bill_rt_sch_id);
9034                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nl_std_bl_rt_sch', RTRIM(l_std_bill_rate_schedule));
9035                 END IF;
9036 
9037                 IF l_b_nl_sch_fx_dt_fg = 'Y' THEN
9038                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nl_sch_fx_dt', p_nl_schedule_fixed_date);
9039                 END IF;
9040 
9041                 IF l_b_nl_sch_dsnt_fg = 'Y' THEN
9042                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nl_sch_dsnt', p_nl_schedule_discount);
9043                 END IF;
9044 
9045                 IF l_b_nl_disc_rsn_cd_fg = 'Y' THEN
9046                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nl_disc_rsn_cd', RTRIM(p_non_labor_disc_reason_code));
9047                 END IF;
9048 
9049                 IF l_b_tk_mgr_id_fg = 'Y' THEN
9050                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':tk_mgr_id', p_task_manager_person_id); --Changed from l_new_parent_task_id to p_task_manager_person_id for Bug 3913251
9051                 END IF;
9052 
9053 ----(Begin Venkat) FP_M changes ------------------------------------------------------------
9054 
9055         IF l_inv_md_fg = 'Y'
9056         THEN
9057             -- 4177105 changed usage from l_invoice_method to p_invoice_method
9058             -- because l_invoice_method is unitialized
9059             DBMS_SQL.BIND_VARIABLE(l_cursor, ':inv_md', p_invoice_method);
9060         END IF;
9061 
9062         IF l_cust_id_fg = 'Y'
9063         THEN
9064         -- Bug 4193259: Changed l_customer_id to p_customer_id
9065             DBMS_SQL.BIND_VARIABLE(l_cursor, ':cust_id', p_customer_id);
9066         END IF;
9067 
9068         IF l_gen_etc_src_co_fg = 'Y'
9069         THEN
9070             DBMS_SQL.BIND_VARIABLE(l_cursor, ':gen_etc_src_co', p_gen_etc_source_code); /* Changed from l_gen_etc_source_code to p_gen_etc_source_code for bug 6025667 */
9071         END IF;
9072 
9073 ----(End Venkat) FP_M changes ------------------------------------------------------------
9074 
9075                 DBMS_SQL.BIND_VARIABLE(l_cursor, ':g_usr_id', G_USER_ID);
9076                 DBMS_SQL.BIND_VARIABLE(l_cursor, ':g_login_id', G_LOGIN_ID);
9077                 DBMS_SQL.BIND_VARIABLE(l_cursor, ':prj_id', l_project_id);
9078                 DBMS_SQL.BIND_VARIABLE(l_cursor, ':tk_id', l_task_id);
9079 
9080 --end bug 2955326
9081 
9082             l_rows   := dbms_sql.execute(l_cursor);
9083                 IF dbms_sql.is_open (l_cursor)
9084             THEN
9085         dbms_sql.close_cursor (l_cursor);
9086             END IF;
9087 
9088       END IF;
9089 
9090 /* 4490532
9091     --bug 4279634
9092     --if a lowest level task has sub-projects then make the chargeable flag to 'N'
9093     --This should be indepenedent of the above update.
9094     IF PA_RELATIONSHIP_UTILS.check_task_has_sub_proj(l_project_id,l_task_id,null) = 'Y'
9095     THEN
9096         UPDATE pa_tasks
9097            SET chargeable_flag = 'N'
9098          WHERE task_id =  l_task_id;
9099     END IF;
9100     --end bug 4279634
9101 */
9102 
9103 
9104       p_out_pa_task_id         := l_task_id;
9105       p_out_pm_task_reference  := l_pm_task_reference;
9106 
9107       CLOSE l_lock_rows_csr;  --FYI: doesn't remove locks
9108 
9109       IF l_tasks_restructured_flag = 'Y' THEN
9110          -- If a task has been moved to under another parent
9111          -- in the WBS structure, then need to indicate that
9112          -- Accumulation figures need to be refreshed for the project
9113          -- Hence modify the project level record in PA_PROJECT_ACCUM_HEADERS
9114          -- No need to check whether the project has been accumulated,since
9115          -- Update will not fail if the record is not found
9116 
9117          UPDATE pa_project_accum_headers
9118          SET  tasks_restructured_flag = 'Y' ,
9119               last_update_login       = l_user_id,
9120               last_update_date        = SYSDATE,
9121               last_updated_by         = l_user_id
9122          WHERE project_id = l_project_id
9123          AND   task_id    = 0
9124          AND   resource_list_member_id = 0;
9125      END IF;
9126 
9127 
9128       IF FND_API.to_boolean( p_commit )
9129       THEN
9130       COMMIT;
9131       END IF;
9132 
9133 
9134 EXCEPTION
9135 
9136     WHEN FND_API.G_EXC_ERROR THEN
9137 
9138         p_return_status := FND_API.G_RET_STS_ERROR ;
9139 
9140     -- 4537865 RESET OUT PARAMS
9141     p_out_pa_task_id             := NULL ;
9142     p_out_pm_task_reference      := NULL ;
9143 
9144         ROLLBACK TO Update_Task_pub;
9145 
9146         FND_MSG_PUB.Count_And_Get
9147             (   p_count     =>  p_msg_count ,
9148                 p_data      =>  p_msg_data  );
9149 
9150     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9151 
9152         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
9153         -- 4537865 RESET OUT PARAMS
9154         p_out_pa_task_id             := NULL ;
9155         p_out_pm_task_reference      := NULL ;
9156 
9157     ROLLBACK TO Update_Task_pub;
9158 
9159 
9160         FND_MSG_PUB.Count_And_Get
9161             (   p_count     =>  p_msg_count ,
9162                 p_data      =>  p_msg_data  );
9163 
9164     WHEN ROW_ALREADY_LOCKED THEN
9165 
9166     ROLLBACK TO update_task_pub;
9167 
9168     p_return_status := FND_API.G_RET_STS_ERROR;
9169         -- 4537865 RESET OUT PARAMS
9170         p_out_pa_task_id             := NULL ;
9171         p_out_pm_task_reference      := NULL ;
9172 
9173 
9174     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
9175     THEN
9176       FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_T_AMG');
9177       FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_segment1);
9178       FND_MESSAGE.SET_TOKEN('TASK',    l_amg_task_number);
9179       FND_MESSAGE.SET_TOKEN('ENTITY', G_TASK_CODE);
9180       FND_MSG_PUB.ADD;
9181     END IF;
9182 
9183     FND_MSG_PUB.Count_And_Get
9184             (   p_count     =>  p_msg_count ,
9185                 p_data      =>  p_msg_data  );
9186 
9187     WHEN OTHERS THEN
9188 
9189         ROLLBACK TO Update_Task_pub;
9190         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
9191 
9192         -- 4537865 RESET OUT PARAMS
9193         p_out_pa_task_id             := NULL ;
9194         p_out_pm_task_reference      := NULL ;
9195 
9196 
9197         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
9198 
9199             FND_MSG_PUB.add_exc_msg
9200                 ( p_pkg_name        => G_PKG_NAME
9201                 , p_procedure_name  => l_api_name   );
9202 
9203         END IF;
9204 
9205         FND_MSG_PUB.Count_And_Get
9206             (   p_count     =>  p_msg_count ,
9207                 p_data      =>  p_msg_data  );
9208 
9209 END update_one_task;
9210 
9211 PROCEDURE delete_task1
9212 ( p_api_version_number      IN  NUMBER
9213  ,p_commit          IN  VARCHAR2    := FND_API.G_FALSE
9214  ,p_init_msg_list       IN  VARCHAR2    := FND_API.G_FALSE
9215  ,p_msg_count           OUT NOCOPY NUMBER -- 4537865 Added nocopy hint
9216  ,p_msg_data            OUT NOCOPY VARCHAR2 -- 4537865 Added nocopy hint
9217  ,p_return_status       OUT NOCOPY VARCHAR2 -- 4537865 Added nocopy hint
9218  ,p_pm_product_code     IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9219  ,p_pm_project_reference    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9220  ,p_pa_project_id       IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9221  ,p_pm_task_reference       IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9222  ,p_pa_task_id          IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9223  ,p_cascaded_delete_flag    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9224  ,p_project_id          OUT NOCOPY NUMBER -- 4537865 Added nocopy hint
9225  ,p_task_id         OUT NOCOPY NUMBER -- 4537865 Added nocopy hint
9226  ,p_task_version_id             IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9227  ,p_structure_type              IN      VARCHAR2        := 'FINANCIAL'
9228 )
9229 IS
9230 
9231    CURSOR lock_tasks_csr ( p_task_id IN NUMBER )
9232    IS
9233    SELECT   'x'
9234    FROM     pa_tasks
9235    START WITH   task_id=p_task_id
9236    CONNECT BY PRIOR task_id=parent_task_id
9237    FOR UPDATE NOWAIT;
9238 
9239 
9240    l_api_name           CONSTANT    VARCHAR2(30)        := 'delete_task';
9241    l_project_id                 NUMBER;
9242    l_task_id                    NUMBER;
9243    l_return_status              VARCHAR2(1);
9244    l_message                    VARCHAR2(2000);
9245    l_delete_task_ok_flag            VARCHAR2(1);
9246    l_cascaded_delete_flag           VARCHAR2(1);
9247    l_err_code                   NUMBER(15);
9248    l_err_stage                      VARCHAR2(120);
9249    l_err_stack                  VARCHAR2(630);
9250    l_dummy                  VARCHAR2(1);
9251    l_msg_count                  NUMBER ;
9252    l_msg_data                   VARCHAR2(2000);
9253    l_function_allowed               VARCHAR2(1);
9254    l_resp_id                    NUMBER := 0;
9255 
9256 l_amg_segment1       VARCHAR2(25);
9257 l_amg_task_number       VARCHAR2(50);
9258 
9259 --needed to get the field values associated to a AMG message
9260 
9261    CURSOR   l_amg_project_csr
9262       (p_pa_project_id pa_projects.project_id%type)
9263    IS
9264    SELECT   segment1
9265    FROM     pa_projects p
9266    WHERE p.project_id = p_pa_project_id;
9267 
9268    CURSOR   l_amg_task_csr
9269       (p_pa_task_id pa_tasks.task_id%type)
9270    IS
9271    SELECT   task_number
9272    FROM     pa_tasks p
9273    WHERE p.task_id = p_pa_task_id;
9274 
9275    -- 3801426 added local variable
9276    l_task_source_reference VARCHAR2(240);
9277 
9278    -- 5263429 added local variable
9279    l_task_id_out pa_tasks.task_id%TYPE;
9280 
9281 BEGIN
9282 
9283 
9284 --  Standard begin of API savepoint
9285 
9286     SAVEPOINT delete_task_pub;
9287 
9288 --  Standard call to check for call compatibility.
9289 
9290     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
9291                                          p_api_version_number   ,
9292                                          l_api_name             ,
9293                                          G_PKG_NAME         )
9294     THEN
9295 
9296     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9297 
9298     END IF;
9299 
9300 --  pm_product_code is mandatory
9301 
9302 --bug 2841158
9303 --    IF p_pm_product_code IS NULL
9304 --    OR p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9305     IF p_pm_product_code IS NOT NULL
9306     AND p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9307 --bug 2841158
9308     THEN
9309 
9310     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
9311     THEN
9312            pa_interface_utils_pub.map_new_amg_msg
9313            ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
9314             ,p_msg_attribute    => 'CHANGE'
9315             ,p_resize_flag      => 'N'
9316             ,p_msg_context      => 'GENERAL'
9317             ,p_attribute1       => ''
9318             ,p_attribute2       => ''
9319             ,p_attribute3       => ''
9320             ,p_attribute4       => ''
9321             ,p_attribute5       => '');
9322     END IF;
9323     RAISE FND_API.G_EXC_ERROR;
9324     END IF;
9325 
9326 --bug 2841158
9327     IF p_pm_product_code <> 'WORKPLAN'
9328        AND p_pm_product_code IS NOT NULL
9329        AND p_pm_product_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9330     THEN
9331 --bug 2841158
9332          /*added for bug no :2413400*/
9333         OPEN p_product_code_csr (p_pm_product_code);
9334         FETCH p_product_code_csr INTO l_pm_product_code;
9335         CLOSE p_product_code_csr;
9336         IF l_pm_product_code <> 'X'
9337         THEN
9338 
9339            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
9340            THEN
9341            pa_interface_utils_pub.map_new_amg_msg
9342            ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
9343             ,p_msg_attribute    => 'CHANGE'
9344             ,p_resize_flag      => 'N'
9345             ,p_msg_context      => 'GENERAL'
9346             ,p_attribute1       => ''
9347             ,p_attribute2       => ''
9348             ,p_attribute3       => ''
9349             ,p_attribute4       => ''
9350             ,p_attribute5       => '');
9351            END IF;
9352         p_return_status             := FND_API.G_RET_STS_ERROR;
9353         RAISE FND_API.G_EXC_ERROR;
9354         END IF;
9355    END IF; --bug 2841158
9356 
9357 
9358     l_resp_id := FND_GLOBAL.Resp_id;
9359 
9360     -- Actions performed using the APIs would be subject to
9361     -- function security. If the responsibility does not allow
9362     -- such functions to be executed, the API should not proceed further
9363     -- since the user does not have access to such functions
9364 
9365 
9366     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
9367       (p_api_version_number => p_api_version_number,
9368        p_responsibility_id  => l_resp_id,
9369        p_function_name      => 'PA_PM_DELETE_TASK',
9370        p_msg_count      => l_msg_count,
9371        p_msg_data           => l_msg_data,
9372        p_return_status      => l_return_status,
9373        p_function_allowed   => l_function_allowed );
9374 
9375     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
9376         THEN
9377             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9378 
9379         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
9380         THEN
9381             RAISE FND_API.G_EXC_ERROR;
9382         END IF;
9383         IF l_function_allowed = 'N' THEN
9384            pa_interface_utils_pub.map_new_amg_msg
9385            ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
9386             ,p_msg_attribute    => 'CHANGE'
9387             ,p_resize_flag      => 'Y'
9388             ,p_msg_context      => 'GENERAL'
9389             ,p_attribute1       => ''
9390             ,p_attribute2       => ''
9391             ,p_attribute3       => ''
9392             ,p_attribute4       => ''
9393             ,p_attribute5       => '');
9394        p_return_status := FND_API.G_RET_STS_ERROR;
9395        RAISE FND_API.G_EXC_ERROR;
9396         END IF;
9397 
9398     --  Initialize the message table if requested.
9399 
9400     IF FND_API.TO_BOOLEAN( p_init_msg_list )
9401     THEN
9402 
9403     FND_MSG_PUB.initialize;
9404 
9405     END IF;
9406 
9407 
9408 --  Set API return status to success
9409 
9410     p_return_status := FND_API.G_RET_STS_SUCCESS;
9411 
9412 
9413 -- Assumption: the convert API's will do validity checks for project_id and task_id
9414 
9415 
9416         pa_project_pvt.convert_pm_projref_to_id
9417                 (p_pm_project_reference => p_pm_project_reference
9418                 ,p_pa_project_id    => p_pa_project_id
9419                 ,p_out_project_id   => l_project_id
9420                 ,p_return_status    => l_return_status );
9421 
9422     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
9423         THEN
9424             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9425 
9426         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
9427         THEN
9428             RAISE FND_API.G_EXC_ERROR;
9429         END IF;
9430 
9431    IF p_structure_type = 'FINANCIAL'
9432    THEN
9433         -- 5262740 Changed PA_PROJECT_PVT.Convert_pm_taskref_to_id to PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
9434         pa_project_pvt.convert_pm_taskref_to_id_all
9435                 (p_pa_project_id    => l_project_id
9436                 ,p_pa_task_id       => p_pa_task_id
9437                 ,p_pm_task_reference    => p_pm_task_reference
9438                 ,p_out_task_id      => l_task_id
9439                 ,p_return_status    => l_return_status );
9440 
9441     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
9442         THEN
9443             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9444 
9445         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
9446         THEN
9447             RAISE FND_API.G_EXC_ERROR;
9448         END IF;
9449 
9450 -- Get segment1 for AMG messages
9451 
9452    OPEN l_amg_project_csr( l_project_id );
9453    FETCH l_amg_project_csr INTO l_amg_segment1;
9454    CLOSE l_amg_project_csr;
9455 /*
9456    OPEN l_amg_task_csr( l_task_id );
9457    FETCH l_amg_task_csr INTO l_amg_task_number;
9458    CLOSE l_amg_task_csr;
9459 */
9460    l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
9461     (p_task_number=> ''
9462     ,p_task_reference => p_pm_task_reference
9463     ,p_task_id => l_task_id);
9464 
9465     pa_task_utils.check_delete_task_ok(x_task_id        => l_task_id,
9466 --bug 3010538                                       x_validation_mode           => 'R',          --bug 2947492
9467                                        x_err_code       => l_err_code,
9468                                        x_err_stage      => l_err_stage,
9469                                        x_err_stack      => l_err_stack);
9470     IF l_err_code > 0
9471     then
9472 
9473     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
9474     THEN
9475 
9476         IF NOT pa_project_pvt.check_valid_message(l_err_stage)
9477         THEN
9478            pa_interface_utils_pub.map_new_amg_msg
9479            ( p_old_message_code => 'PA_DELETE_TASK_FAILED'
9480             ,p_msg_attribute    => 'CHANGE'
9481             ,p_resize_flag      => 'N'
9482             ,p_msg_context      => 'TASK'
9483             ,p_attribute1       => l_amg_segment1
9484             ,p_attribute2       => l_amg_task_number
9485             ,p_attribute3       => ''
9486             ,p_attribute4       => ''
9487             ,p_attribute5       => '');
9488         ELSE
9489            pa_interface_utils_pub.map_new_amg_msg
9490            ( p_old_message_code => l_err_stage
9491             ,p_msg_attribute    => 'SPLIT'
9492             ,p_resize_flag      => 'Y'
9493             ,p_msg_context      => 'DELT'
9494             ,p_attribute1       => l_amg_segment1
9495             ,p_attribute2       => l_amg_task_number
9496             ,p_attribute3       => ''
9497             ,p_attribute4       => ''
9498             ,p_attribute5       => '');
9499         END IF;
9500 
9501     END IF;
9502 
9503     RAISE FND_API.G_EXC_ERROR;
9504 
9505     ELSIF l_err_code < 0
9506     then
9507 
9508     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
9509     THEN
9510            pa_interface_utils_pub.map_new_amg_msg
9511            ( p_old_message_code => 'PA_DELETE_TASK_FAILED'
9512             ,p_msg_attribute    => 'CHANGE'
9513             ,p_resize_flag      => 'N'
9514             ,p_msg_context      => 'TASK'
9515             ,p_attribute1       => l_amg_segment1
9516             ,p_attribute2       => l_amg_task_number
9517             ,p_attribute3       => ''
9518             ,p_attribute4       => ''
9519             ,p_attribute5       => '');
9520     END IF;
9521 
9522     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9523 
9524     end IF;
9525 
9526 --Call plannable task api here bug 2947492
9527 
9528     PA_PROJ_TASK_STRUC_PUB.delete_fin_plan_from_task(
9529                   p_task_id                       => l_task_id
9530                  ,p_project_id                    => l_project_id
9531                  ,P_calling_module                => 'AMG'
9532                  ,x_msg_count                     => l_msg_count
9533                  ,x_msg_data                      => l_msg_data
9534                  ,x_return_status                 => l_return_status);
9535 
9536      IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
9537         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
9538      ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
9539         RAISE  FND_API.G_EXC_ERROR;
9540      END IF;
9541 --End bug 2947492
9542 
9543     --lock the task row and all it's children before it is going to be deleted / updated
9544     OPEN lock_tasks_csr( l_task_id );
9545 
9546 
9547     --when p_cascaded_delete_flag is not passed or NULL, default to 'N'
9548     --if not correct value is passed, error out.
9549 
9550     IF p_cascaded_delete_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9551     OR p_cascaded_delete_flag IS NULL
9552     THEN
9553         l_cascaded_delete_flag := 'N';
9554 
9555     ELSIF p_cascaded_delete_flag NOT IN ('Y','y','N','n')
9556     THEN
9557 
9558     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
9559     THEN
9560            pa_interface_utils_pub.map_new_amg_msg
9561            ( p_old_message_code => 'PA_CASCADE_FLAG_INVALID'
9562             ,p_msg_attribute    => 'CHANGE'
9563             ,p_resize_flag      => 'N'
9564             ,p_msg_context      => 'PROJ'
9565             ,p_attribute1       => l_amg_segment1
9566             ,p_attribute2       => ''
9567             ,p_attribute3       => ''
9568             ,p_attribute4       => ''
9569             ,p_attribute5       => '');
9570     END IF;
9571 
9572     RAISE FND_API.G_EXC_ERROR;
9573 
9574     ELSE
9575         l_cascaded_delete_flag := p_cascaded_delete_flag;
9576 
9577     END IF;
9578 
9579     IF l_cascaded_delete_flag IN ('Y','y')
9580     THEN
9581 
9582         pa_project_core.delete_task( x_task_id  => l_task_id
9583 --bug 3010538                                ,x_validation_mode => 'R'     --bug 2947492
9584                     ,x_err_code => l_err_code
9585                     ,x_err_stage    => l_err_stage
9586                     ,x_err_stack    => l_err_stack  );
9587 
9588         IF l_err_code > 0
9589         THEN
9590 
9591         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
9592         THEN
9593 
9594             IF NOT pa_project_pvt.check_valid_message(l_err_stage)
9595             THEN
9596            pa_interface_utils_pub.map_new_amg_msg
9597            ( p_old_message_code => 'PA_DELETE_TASK_FAILED'
9598             ,p_msg_attribute    => 'CHANGE'
9599             ,p_resize_flag      => 'N'
9600             ,p_msg_context      => 'TASK'
9601             ,p_attribute1       => l_amg_segment1
9602             ,p_attribute2       => l_amg_task_number
9603             ,p_attribute3       => ''
9604             ,p_attribute4       => ''
9605             ,p_attribute5       => '');
9606             ELSE
9607            pa_interface_utils_pub.map_new_amg_msg
9608            ( p_old_message_code => l_err_stage
9609             ,p_msg_attribute    => 'SPLIT'
9610             ,p_resize_flag      => 'Y'
9611             ,p_msg_context      => 'DELT'
9612             ,p_attribute1       => l_amg_segment1
9613             ,p_attribute2       => l_amg_task_number
9614             ,p_attribute3       => ''
9615             ,p_attribute4       => ''
9616             ,p_attribute5       => '');
9617             END IF;
9618 
9619         END IF;
9620 
9621         RAISE FND_API.G_EXC_ERROR;
9622 
9623         ELSIF l_err_code < 0
9624         THEN
9625 
9626         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
9627         THEN
9628            pa_interface_utils_pub.map_new_amg_msg
9629            ( p_old_message_code => 'PA_DELETE_TASK_FAILED'
9630             ,p_msg_attribute    => 'CHANGE'
9631             ,p_resize_flag      => 'N'
9632             ,p_msg_context      => 'TASK'
9633             ,p_attribute1       => l_amg_segment1
9634             ,p_attribute2       => l_amg_task_number
9635             ,p_attribute3       => ''
9636             ,p_attribute4       => ''
9637             ,p_attribute5       => '');
9638         END IF;
9639 
9640         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9641 
9642         END IF;
9643 
9644     ELSE
9645 
9646         pa_project_pvt.Delete_One_Task
9647               (p_task_id             => l_task_id,
9648                p_return_status       => l_return_status,
9649                p_msg_count           => p_msg_count,
9650                p_msg_data            => p_msg_data );
9651 
9652         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
9653         THEN
9654         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9655 
9656         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
9657         THEN
9658         RAISE FND_API.G_EXC_ERROR;
9659         END IF;
9660 
9661 
9662     END IF;
9663 
9664     CLOSE lock_tasks_csr;
9665 
9666 --bug 2765115
9667 
9668     --only deletes from pa_proj_elements. There is a check in pa_task_pvt1.delete_task_version api not to delete from pa_tasks if called from AMG.
9669         PA_PROJ_TASK_STRUC_PUB.delete_task_structure
9670                (
9671                 p_calling_module                  => 'AMG'
9672                ,p_task_id                         => l_task_id
9673                ,p_task_version_id                 => p_task_version_id
9674                ,p_project_id                      => l_project_id
9675                ,x_msg_count                       => l_msg_count
9676                ,x_msg_data                        => l_msg_data
9677                ,x_return_status                   => l_return_status);
9678 
9679      IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
9680         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
9681      ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
9682         RAISE  FND_API.G_EXC_ERROR;
9683      END IF;
9684 
9685 --bug 2765115
9686 
9687     p_project_id := l_project_id;
9688     p_task_id    := l_task_id;
9689 
9690 
9691   ELSIF p_structure_type = 'WORKPLAN'
9692   THEN
9693 
9694     -- added for bug# 3801426
9695     -- validating task reference to id
9696 
9697     IF p_pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
9698        l_task_id := NULL;
9699     ELSE
9700        l_task_id := p_pa_task_id;
9701     END IF;
9702 
9703 
9704     IF p_pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9705        l_task_source_reference := NULL;
9706     ELSE
9707        l_task_source_reference := p_pm_task_reference;
9708     END IF;
9709 
9710     IF ( l_task_id IS NOT NULL OR l_task_source_reference IS NOT NULL ) THEN
9711 
9712 /* Bug Fix 5263429
9713 
9714 Issue:
9715 
9716  The task deletion from MSP was erroring out.
9717 
9718 Analysis:
9719 
9720  The task deletion calls the PA_PROJECT_PUB.DELETE_TASK  API. This was returning an error with status 'E' and error
9721  message  PA_TASK_REF_AND_ID_MISSING. There is a call to Convert_pm_taskref_to_id_all API in the PA_PROJECT_PVT.DELETE_TASK1
9722  in the WORKPLAN portion of the code.
9723  Please note that the same local variable l_task_id is used for both IN and OUT parameters. Due to the NOCOPY hint the  variable
9724  l_task_id was becoming null when the control enters into the Convert_pm_taskref_to_id_all API. As the required  parameter was
9725  NULL the API was raising the above error resulting into an error and stopping the task deletion.
9726 
9727 Solution:
9728 
9729  In order to avoid this issue a new local variable is created and used to capture the OUT parameters value in the call and
9730  then assign the value back to the old l_task_id variable.
9731 */
9732 
9733        PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
9734                    p_pa_project_id      => l_project_id
9735                  , p_structure_type     => 'WORKPLAN'
9736                  , p_pa_task_id         => l_task_id
9737                  , p_pm_task_reference  => l_task_source_reference
9738                  , p_out_task_id        => l_task_id_out
9739                  , p_return_status      => l_return_status );
9740 
9741        l_task_id:= l_task_id_out;
9742        -- End of Bug Fix 5263429
9743 
9744        IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
9745              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
9746        ELSIF l_return_status = FND_API.G_RET_STS_ERROR      THEN
9747              RAISE FND_API.G_EXC_ERROR;
9748        END IF;
9749     END IF;
9750 
9751     -- end for bug# 3801426
9752 
9753      --Project Structures Integration
9754 
9755      PA_PROJ_TASK_STRUC_PUB.delete_task_structure
9756                (
9757                 p_calling_module                  => 'AMG'
9758                ,p_task_id                         => l_task_id          -- changed bug# 3801426 earlierr p_task_id was used
9759                ,p_task_version_id                 => p_task_version_id
9760                ,p_project_id                      => l_project_id      --bug 2765115
9761                ,p_structure_type                  => p_structure_type   -- added for bug# 3801426 , earlier structure_type was not passed
9762                ,x_msg_count                       => l_msg_count
9763                ,x_msg_data                        => l_msg_data
9764                ,x_return_status                   => l_return_status);
9765 
9766      IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
9767         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
9768      ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
9769         RAISE  FND_API.G_EXC_ERROR;
9770      END IF;
9771 
9772     p_project_id := l_project_id;
9773     p_task_id    := p_task_id;
9774 
9775 --Project Structures Integration
9776   END IF; --<< p_structrue_type >>
9777 
9778     IF FND_API.to_boolean( p_commit )
9779     THEN
9780     COMMIT;
9781     END IF;
9782 
9783 
9784 EXCEPTION
9785 
9786     WHEN FND_API.G_EXC_ERROR
9787     THEN
9788     ROLLBACK TO delete_task_pub;
9789 
9790     p_return_status := FND_API.G_RET_STS_ERROR;
9791 
9792     -- 4537865 RESET OUT PARAMS
9793     p_project_id := NULL ;
9794     p_task_id := NULL ;
9795 
9796     FND_MSG_PUB.Count_And_Get
9797             (   p_count     =>  p_msg_count ,
9798                 p_data      =>  p_msg_data  );
9799 
9800     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
9801     THEN
9802     ROLLBACK TO delete_task_pub;
9803 
9804     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9805 
9806     -- 4537865 RESET OUT PARAMS
9807     p_project_id := NULL ;
9808     p_task_id := NULL ;
9809 
9810     FND_MSG_PUB.Count_And_Get
9811             (   p_count     =>  p_msg_count ,
9812                 p_data      =>  p_msg_data  );
9813 
9814     WHEN ROW_ALREADY_LOCKED
9815     THEN
9816     ROLLBACK TO delete_task_pub;
9817 
9818     p_return_status := FND_API.G_RET_STS_ERROR;
9819 
9820     -- 4537865 RESET OUT PARAMS
9821     p_project_id := NULL ;
9822     p_task_id := NULL ;
9823 
9824     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
9825     THEN
9826       FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_T_AMG');
9827       FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_segment1);
9828       FND_MESSAGE.SET_TOKEN('TASK',    l_amg_task_number);
9829       FND_MESSAGE.SET_TOKEN('ENTITY', G_TASK_CODE);
9830       FND_MSG_PUB.ADD;
9831     END IF;
9832 
9833     FND_MSG_PUB.Count_And_Get
9834             (   p_count     =>  p_msg_count ,
9835                 p_data      =>  p_msg_data  );
9836 
9837     WHEN OTHERS THEN
9838     ROLLBACK TO delete_task_pub;
9839 
9840     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9841 
9842     -- 4537865 RESET OUT PARAMS
9843     p_project_id := NULL ;
9844     p_task_id := NULL ;
9845 
9846     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
9847     THEN
9848         FND_MSG_PUB.add_exc_msg
9849                 ( p_pkg_name        => G_PKG_NAME
9850                 , p_procedure_name  => l_api_name   );
9851 
9852     END IF;
9853 
9854     FND_MSG_PUB.Count_And_Get
9855             (   p_count     =>  p_msg_count ,
9856                 p_data      =>  p_msg_data  );
9857 
9858 END delete_task1;
9859 
9860 --------------------------------------------------------------------------------
9861 -- Name:    approve_project1
9862 -- Type:    PL/SQL Procedure
9863 -- Decscription:  This procedure will set the project status to approved.
9864 --
9865 -- Called Subprograms:
9866 --
9867 -- History: 27-FEB-97   L. de Werker   Created
9868 --
9869 --
9870 PROCEDURE approve_project1
9871 ( p_api_version_number     IN NUMBER
9872  ,p_commit        IN VARCHAR2 := FND_API.G_FALSE
9873  ,p_init_msg_list    IN VARCHAR2 := FND_API.G_FALSE
9874  ,p_msg_count        OUT NOCOPY   NUMBER -- 4537865 Added nocopy hint
9875  ,p_msg_data         OUT NOCOPY  VARCHAR2 -- 4537865 Added nocopy hint
9876  ,p_return_status    OUT NOCOPY  VARCHAR2 -- 4537865 Added nocopy hint
9877  ,p_pm_product_code     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9878  ,p_pm_project_reference   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9879  ,p_pa_project_id    IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9880  )
9881 IS
9882 
9883 BEGIN
9884 
9885 NULL;
9886 
9887 END approve_project1;
9888 
9889 
9890 --------------------------------------------------------------------------------
9891 --Name:               delete_project1
9892 --Type:               Procedure
9893 --Description:        This procedure can be used to delete a project
9894 --
9895 --
9896 --Called subprograms:
9897 --
9898 --
9899 --
9900 --History:
9901 --    19-AUG-1996        R. Krishnamurthy    Created
9902 --
9903 
9904 PROCEDURE delete_project1
9905 ( p_api_version_number     IN NUMBER
9906  ,p_commit        IN VARCHAR2 := FND_API.G_FALSE
9907  ,p_init_msg_list    IN VARCHAR2 := FND_API.G_FALSE
9908  ,p_msg_count        OUT NOCOPY  NUMBER -- 4537865 Added nocopy hint
9909  ,p_msg_data         OUT NOCOPY  VARCHAR2 -- 4537865 Added nocopy hint
9910  ,p_return_status    OUT NOCOPY  VARCHAR2 -- 4537865 Added nocopy hint
9911  ,p_pm_product_code     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9912  ,p_pm_project_reference   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9913  ,p_pa_project_id    IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9914  )
9915 IS
9916 
9917    CURSOR l_lock_rows_csr( p_project_id NUMBER)
9918    IS
9919    SELECT 'x'
9920    FROM    pa_projects
9921    WHERE  project_id = p_project_id
9922    FOR UPDATE NOWAIT;
9923 
9924 --needed to get the field values associated to a AMG message
9925 
9926    CURSOR   l_amg_project_csr
9927       (p_pa_project_id pa_projects.project_id%type)
9928    IS
9929    SELECT   segment1
9930    FROM     pa_projects p
9931    WHERE p.project_id = p_pa_project_id;
9932 
9933    l_amg_segment1       VARCHAR2(25);
9934 
9935    l_api_name        CONSTANT      VARCHAR2(30) := 'delete_project';
9936    l_project_id                          NUMBER;
9937    l_return_status            VARCHAR2(1);
9938    l_message               VARCHAR2(2000);
9939    l_err_code              NUMBER(15);
9940    l_err_stage                   VARCHAR2(120);
9941    l_err_stack             VARCHAR2(630);
9942    l_dummy              VARCHAR2(1);
9943    l_msg_count                  NUMBER ;
9944    l_msg_data                   VARCHAR2(2000);
9945    l_function_allowed                 VARCHAR2(1);
9946    l_resp_id                    NUMBER := 0;
9947    l_user_id                              NUMBER := 0;
9948    l_module_name                                VARCHAR2(80);
9949 
9950 BEGIN
9951 
9952 --  Standard begin of API savepoint
9953 
9954     SAVEPOINT delete_project_pub;
9955 
9956 --  Standard call to check for call compatibility.
9957 
9958     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
9959                                p_api_version_number   ,
9960                                l_api_name          ,
9961                                G_PKG_NAME          )
9962     THEN
9963 
9964    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9965 
9966 
9967     END IF;
9968 
9969     --   Initialize the message table if requested.
9970 
9971     IF FND_API.TO_BOOLEAN( p_init_msg_list )
9972     THEN
9973 
9974    FND_MSG_PUB.initialize;
9975 
9976     END IF;
9977 
9978 --  pm_product_code is mandatory
9979 
9980 --bug 2841158
9981 --    IF p_pm_product_code IS NULL
9982 --    OR p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9983     IF p_pm_product_code IS NOT NULL
9984     AND p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9985 --bug 2841158
9986     THEN
9987 
9988    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
9989    THEN
9990       pa_interface_utils_pub.map_new_amg_msg
9991        ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
9992          ,p_msg_attribute    => 'CHANGE'
9993          ,p_resize_flag      => 'N'
9994          ,p_msg_context      => 'GENERAL'
9995          ,p_attribute1       => ''
9996          ,p_attribute2       => ''
9997          ,p_attribute3       => ''
9998          ,p_attribute4       => ''
9999          ,p_attribute5       => '');
10000    END IF;
10001    RAISE FND_API.G_EXC_ERROR;
10002     END IF;
10003 
10004 --bug 2841158
10005     IF p_pm_product_code <> 'WORKPLAN'
10006        AND p_pm_product_code IS NOT NULL
10007        AND p_pm_product_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10008     THEN
10009 --bug 2841158
10010          /*added for bug no :2413400*/
10011         OPEN p_product_code_csr (p_pm_product_code);
10012         FETCH p_product_code_csr INTO l_pm_product_code;
10013         CLOSE p_product_code_csr;
10014         IF l_pm_product_code <> 'X'
10015         THEN
10016 
10017            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
10018            THEN
10019            pa_interface_utils_pub.map_new_amg_msg
10020            ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
10021             ,p_msg_attribute    => 'CHANGE'
10022             ,p_resize_flag      => 'N'
10023             ,p_msg_context      => 'GENERAL'
10024             ,p_attribute1       => ''
10025             ,p_attribute2       => ''
10026             ,p_attribute3       => ''
10027             ,p_attribute4       => ''
10028             ,p_attribute5       => '');
10029            END IF;
10030         p_return_status             := FND_API.G_RET_STS_ERROR;
10031         RAISE FND_API.G_EXC_ERROR;
10032         END IF;
10033    END IF; --bug 2841158
10034 
10035 --  Set API return status to success
10036 
10037     p_return_status := FND_API.G_RET_STS_SUCCESS;
10038     l_resp_id := FND_GLOBAL.Resp_id;
10039     l_user_id := FND_GLOBAL.User_id;
10040     --l_module_name := p_pm_product_code||'.'||'PA_PM_DELETE_PROJECT';
10041     l_module_name := 'PA_PM_DELETE_PROJECT';
10042 
10043 
10044     -- As part of enforcing project security, which would determine
10045     -- whether the user has the necessary privileges to delete the project
10046     -- need to call the pa_security package
10047 
10048     pa_security.initialize (X_user_id        => l_user_id,
10049                             X_calling_module => l_module_name);
10050 
10051     -- Actions performed using the APIs would be subject to
10052     -- function security. If the responsibility does not allow
10053     -- such functions to be executed, the API should not proceed further
10054     -- since the user does not have access to such functions
10055 
10056 
10057     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
10058       (p_api_version_number => p_api_version_number,
10059        p_responsibility_id  => l_resp_id,
10060        p_function_name      => 'PA_PM_DELETE_PROJECT',
10061        p_msg_count       => l_msg_count,
10062        p_msg_data           => l_msg_data,
10063        p_return_status      => l_return_status,
10064        p_function_allowed   => l_function_allowed );
10065 
10066       IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
10067       THEN
10068          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10069 
10070       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
10071       THEN
10072          RAISE FND_API.G_EXC_ERROR;
10073       END IF;
10074         IF l_function_allowed = 'N' THEN
10075          pa_interface_utils_pub.map_new_amg_msg
10076            ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
10077             ,p_msg_attribute    => 'CHANGE'
10078             ,p_resize_flag      => 'Y'
10079             ,p_msg_context      => 'GENERAL'
10080             ,p_attribute1       => ''
10081             ,p_attribute2       => ''
10082             ,p_attribute3       => ''
10083             ,p_attribute4       => ''
10084             ,p_attribute5       => '');
10085         p_return_status := FND_API.G_RET_STS_ERROR;
10086         RAISE FND_API.G_EXC_ERROR;
10087         END IF;
10088 
10089 
10090 --Assumption: convert API will do validity check for project_id
10091 
10092 
10093       pa_project_pvt.convert_pm_projref_to_id
10094             (p_pm_project_reference => p_pm_project_reference
10095             ,p_pa_project_id  => p_pa_project_id
10096             ,p_out_project_id => l_project_id
10097             ,p_return_status  => l_return_status );
10098 
10099       IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
10100       THEN
10101          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10102 
10103       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
10104       THEN
10105          RAISE FND_API.G_EXC_ERROR;
10106       END IF;
10107 
10108       -- Now verify whether project security allows the user to delete
10109       -- the project
10110 
10111       IF pa_security.allow_query (x_project_id => l_project_id ) = 'N' THEN
10112 
10113          -- The user does not have query privileges on this project
10114          -- Hence, cannot delete the project.Raise error
10115 
10116          pa_interface_utils_pub.map_new_amg_msg
10117            ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
10118             ,p_msg_attribute    => 'CHANGE'
10119             ,p_resize_flag      => 'Y'
10120             ,p_msg_context      => 'GENERAL'
10121             ,p_attribute1       => ''
10122             ,p_attribute2       => ''
10123             ,p_attribute3       => ''
10124             ,p_attribute4       => ''
10125             ,p_attribute5       => '');
10126       p_return_status := FND_API.G_RET_STS_ERROR;
10127       RAISE FND_API.G_EXC_ERROR;
10128       ELSE
10129             -- If the user has query privileges, then check whether
10130             -- update privileges are also available
10131          IF pa_security.allow_update (x_project_id => l_project_id ) = 'N' THEN
10132 
10133             -- The user does not have update privileges on this project
10134             -- Hence , raise error
10135 
10136          pa_interface_utils_pub.map_new_amg_msg
10137            ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
10138             ,p_msg_attribute    => 'CHANGE'
10139             ,p_resize_flag      => 'Y'
10140             ,p_msg_context      => 'GENERAL'
10141             ,p_attribute1       => ''
10142             ,p_attribute2       => ''
10143             ,p_attribute3       => ''
10144             ,p_attribute4       => ''
10145             ,p_attribute5       => '');
10146       p_return_status := FND_API.G_RET_STS_ERROR;
10147       RAISE FND_API.G_EXC_ERROR;
10148         END IF;
10149      END IF;
10150 
10151 -- Get segment1 for AMG messages
10152 
10153    OPEN l_amg_project_csr( l_project_id );
10154    FETCH l_amg_project_csr INTO l_amg_segment1;
10155    CLOSE l_amg_project_csr;
10156 
10157    --lock the project
10158    OPEN l_lock_rows_csr( l_project_id );
10159    CLOSE l_lock_rows_csr;
10160 
10161 
10162       pa_project_utils.check_delete_project_ok
10163                          (x_project_id        => l_project_id,
10164 --bug 3010538                          x_validation_mode   => 'R',    --bug 2947492
10165                           x_err_code          => l_err_code,
10166                           x_err_stage         => l_err_stage,
10167                           x_err_stack         => l_err_stack);
10168 
10169        IF l_err_code <> 0 THEN
10170 
10171        IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
10172 
10173       IF NOT pa_project_pvt.check_valid_message(l_err_stage)
10174       THEN
10175          pa_interface_utils_pub.map_new_amg_msg
10176                        ( p_old_message_code => 'PA_DELETE_PROJECT_FAILED'
10177                         ,p_msg_attribute    => 'CHANGE'
10178                         ,p_resize_flag      => 'N'
10179                         ,p_msg_context      => 'PROJ'
10180                         ,p_attribute1       => l_amg_segment1
10181                         ,p_attribute2       => ''
10182                         ,p_attribute3       => ''
10183                         ,p_attribute4       => ''
10184                         ,p_attribute5       => '');
10185       ELSE
10186          pa_interface_utils_pub.map_new_amg_msg
10187                        ( p_old_message_code => l_err_stage
10188                         ,p_msg_attribute    => 'SPLIT'
10189                         ,p_resize_flag      => 'Y'
10190                         ,p_msg_context      => 'DELP'
10191                         ,p_attribute1       => l_amg_segment1
10192                         ,p_attribute2       => ''
10193                         ,p_attribute3       => ''
10194                         ,p_attribute4       => ''
10195                         ,p_attribute5       => '');
10196       END IF;
10197 
10198        END IF;
10199 
10200             IF l_err_code > 0 THEN
10201 
10202            RAISE FND_API.G_EXC_ERROR;
10203 
10204             ELSIF l_err_code < 0 THEN
10205 
10206         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10207 
10208             END IF;
10209 
10210        END IF;
10211 
10212        pa_project_core.delete_project (x_project_id => l_project_id,
10213 --bug 3010538                                       x_validation_mode => 'R',     --bug 2947492
10214                                        x_err_code   => l_err_code,
10215                                        x_err_stage  => l_err_stage,
10216                                        x_err_stack  => l_err_stack );
10217       IF l_err_code > 0 THEN
10218       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
10219       IF NOT pa_project_pvt.check_valid_message(l_err_stage) THEN
10220 
10221          pa_interface_utils_pub.map_new_amg_msg
10222                        ( p_old_message_code => 'PA_DELETE_PROJECT_FAILED'
10223                         ,p_msg_attribute    => 'CHANGE'
10224                         ,p_resize_flag      => 'N'
10225                         ,p_msg_context      => 'PROJ'
10226                         ,p_attribute1       => l_amg_segment1
10227                         ,p_attribute2       => ''
10228                         ,p_attribute3       => ''
10229                         ,p_attribute4       => ''
10230                         ,p_attribute5       => '');
10231       ELSE
10232          pa_interface_utils_pub.map_new_amg_msg
10233                        ( p_old_message_code => l_err_stage
10234                         ,p_msg_attribute    => 'SPLIT'
10235                         ,p_resize_flag      => 'Y'
10236                         ,p_msg_context      => 'DELP'
10237                         ,p_attribute1       => l_amg_segment1
10238                         ,p_attribute2       => ''
10239                         ,p_attribute3       => ''
10240                         ,p_attribute4       => ''
10241                         ,p_attribute5       => '');
10242 
10243       END IF;
10244       END IF;
10245       RAISE FND_API.G_EXC_ERROR;
10246       ELSIF l_err_code < 0 THEN
10247          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
10248       THEN
10249 
10250          pa_interface_utils_pub.map_new_amg_msg
10251                        ( p_old_message_code => 'PA_DELETE_PROJECT_FAILED'
10252                         ,p_msg_attribute    => 'CHANGE'
10253                         ,p_resize_flag      => 'N'
10254                         ,p_msg_context      => 'PROJ'
10255                         ,p_attribute1       => l_amg_segment1
10256                         ,p_attribute2       => ''
10257                         ,p_attribute3       => ''
10258                         ,p_attribute4       => ''
10259                         ,p_attribute5       => '');
10260          END IF;
10261          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10262       END IF;
10263 
10264    IF FND_API.to_boolean( p_commit )
10265    THEN
10266       COMMIT;
10267    END IF;
10268 
10269 EXCEPTION
10270 
10271         WHEN FND_API.G_EXC_ERROR
10272         THEN
10273         ROLLBACK TO delete_project_pub;
10274 
10275         p_return_status := FND_API.G_RET_STS_ERROR;
10276 
10277         FND_MSG_PUB.Count_And_Get
10278          (   p_count    => p_msg_count ,
10279              p_data     => p_msg_data  );
10280 
10281         WHEN FND_API.G_EXC_UNEXPECTED_ERROR
10282         THEN
10283         ROLLBACK TO delete_project_pub;
10284 
10285         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10286 
10287         FND_MSG_PUB.Count_And_Get
10288          (   p_count    => p_msg_count ,
10289              p_data     => p_msg_data  );
10290 
10291       WHEN ROW_ALREADY_LOCKED THEN
10292 
10293    ROLLBACK TO delete_project_pub;
10294 
10295    p_return_status := FND_API.G_RET_STS_ERROR;
10296 
10297    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
10298    THEN
10299       FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_P_AMG');
10300       FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_segment1);
10301       FND_MESSAGE.SET_TOKEN('ENTITY', G_PROJECT_CODE);
10302       FND_MSG_PUB.ADD;
10303    END IF;
10304    FND_MSG_PUB.Count_And_Get
10305          (   p_count    => p_msg_count ,
10306              p_data     => p_msg_data  );
10307 
10308         WHEN OTHERS THEN
10309 
10310         ROLLBACK TO delete_project_pub;
10311 
10312         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10313 
10314         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
10315         THEN
10316                 FND_MSG_PUB.add_exc_msg
10317             ( p_pkg_name      => G_PKG_NAME
10318             , p_procedure_name   => l_api_name
10319             , p_error_text    => SUBSTRB(SQLERRM, 1, 240) ); -- 4537865 Changed substr to substrb
10320 
10321                 FND_MSG_PUB.add;
10322         END IF;
10323 
10324         FND_MSG_PUB.Count_And_Get
10325          (   p_count    => p_msg_count ,
10326              p_data     => p_msg_data  );
10327 
10328 END delete_project1;
10329 
10330 --------------------------------------------------------------------------------
10331 
10332 
10333 -- anlee org role changes
10334 --====================================================================================
10335 --Name:               add_org_roles
10336 --Type:               Procedure
10337 --Description:        This procedure can be used to add org roles
10338 --            to a new or already existing project using
10339 --            the overridable view.
10340 --
10341 --Called subprograms: none
10342 --
10343 --
10344 --
10345 --History:
10346 --    20-MAR-2002        anlee    Created
10347 
10348 PROCEDURE add_org_roles
10349 ( p_return_status           OUT NOCOPY VARCHAR2                , -- 4537865 Added nocopy hint
10350   p_pa_source_template_id       IN  NUMBER                  ,
10351   p_project_id              IN  NUMBER                  ,
10352   p_org_roles               IN  pa_project_pub.project_role_tbl_type    )
10353 IS
10354 
10355    CURSOR l_project_role_types_csr (p_role_type IN VARCHAR2)
10356    IS
10357    SELECT 'x' FROM
10358    pa_project_role_types
10359    WHERE project_role_type = p_role_type;
10360 
10361 
10362 
10363    l_api_name            CONSTANT   VARCHAR2(30)        := 'add_org_roles';
10364    i                        BINARY_INTEGER :=0;
10365    j                        BINARY_INTEGER :=0;
10366 
10367    l_dummy                      VARCHAR2(1);
10368    l_amg_segment1       VARCHAR2(25);
10369    l_completion_date    DATE;
10370    v_start_date_active  DATE;
10371    v_end_date_active    DATE;
10372    v_project_role_id    NUMBER;
10373    v_project_role_type  VARCHAR2(20);
10374    v_person_id          NUMBER;
10375    v_null_number        NUMBER;
10376    v_null_char          VARCHAR2(1);
10377    x_return_status      VARCHAR2(255);
10378    x_msg_count          NUMBER;
10379    x_msg_data           VARCHAR2(255);
10380    x_project_party_id   NUMBER;
10381    x_resource_id        NUMBER;
10382    l_wf_item_type          VARCHAR2(30);
10383    l_wf_type               VARCHAR2(30);
10384    l_wf_party_process      VARCHAR2(30);
10385    l_assignment_id         NUMBER;
10386 --needed to get the field values associated to a AMG message
10387 
10388    CURSOR   l_amg_project_csr
10389       (p_pa_project_id pa_projects.project_id%type)
10390    IS
10391    SELECT   segment1,COMPLETION_DATE
10392    FROM     pa_projects p
10393    WHERE p.project_id = p_pa_project_id;
10394 
10395 BEGIN
10396 
10397 --  Standard begin of API savepoint
10398 
10399     SAVEPOINT add_org_roles_pvt;
10400 
10401 
10402 --  Set API return status to success
10403 
10404     p_return_status := FND_API.G_RET_STS_SUCCESS;
10405 
10406 -- Get segment1 for AMG messages
10407 
10408    OPEN l_amg_project_csr( p_project_id );
10409    FETCH l_amg_project_csr INTO l_amg_segment1,l_completion_date;
10410    CLOSE l_amg_project_csr;
10411 
10412     i := p_org_roles.first;
10413 
10414     WHILE i IS NOT NULL LOOP
10415 
10416    -- Check whether this is a valid organization
10417 
10418  IF (p_org_roles(i).person_id <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
10419       (p_org_roles(i).person_id IS NOT NULL) THEN
10420        IF check_valid_organization (p_org_roles(i).person_id) = 'N'
10421        THEN
10422         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
10423         THEN
10424          pa_interface_utils_pub.map_new_amg_msg
10425            ( p_old_message_code => 'PA_INVALID_ORGANIZATION'
10426             ,p_msg_attribute    => 'CHANGE'
10427             ,p_resize_flag      => 'N'
10428             ,p_msg_context      => 'PROJ'
10429             ,p_attribute1       => l_amg_segment1
10430             ,p_attribute2       => ''
10431             ,p_attribute3       => ''
10432             ,p_attribute4       => ''
10433             ,p_attribute5       => '');
10434             END IF;
10435                 RAISE  FND_API.G_EXC_ERROR;
10436        END IF;
10437 
10438   -- validate the role type
10439      OPEN l_project_role_types_csr (p_org_roles(i).project_role_type);
10440      FETCH l_project_role_types_csr INTO l_dummy;
10441      IF l_project_role_types_csr%NOTFOUND THEN
10442     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
10443        THEN
10444          pa_interface_utils_pub.map_new_amg_msg
10445            ( p_old_message_code => 'PA_INVALID_ROLE_TYPE'
10446             ,p_msg_attribute    => 'CHANGE'
10447             ,p_resize_flag      => 'N'
10448             ,p_msg_context      => 'PROJ'
10449             ,p_attribute1       => l_amg_segment1
10450             ,p_attribute2       => ''
10451             ,p_attribute3       => ''
10452             ,p_attribute4       => ''
10453             ,p_attribute5       => '');
10454         END IF;
10455         CLOSE l_project_role_types_csr;
10456         RAISE  FND_API.G_EXC_ERROR;
10457      ELSE
10458         CLOSE l_project_role_types_csr;
10459      END IF;
10460 
10461 
10462        IF p_org_roles(i).start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
10463        AND p_org_roles(i).end_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
10464        THEN
10465           IF  p_org_roles(i).end_date < p_org_roles(i).start_date
10466           THEN
10467 
10468         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
10469         THEN
10470          pa_interface_utils_pub.map_new_amg_msg
10471            ( p_old_message_code => 'PA_SU_INVALID_DATES'
10472             ,p_msg_attribute    => 'CHANGE'
10473             ,p_resize_flag      => 'N'
10474             ,p_msg_context      => 'PROJ'
10475             ,p_attribute1       => l_amg_segment1
10476             ,p_attribute2       => ''
10477             ,p_attribute3       => ''
10478             ,p_attribute4       => ''
10479             ,p_attribute5       => '');
10480                 END IF;
10481 
10482                 RAISE  FND_API.G_EXC_ERROR;
10483           END IF;
10484        END IF;
10485 
10486 
10487 
10488 /*        Select
10489            DECODE(p_org_roles(i).start_date,
10490                   PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE, TRUNC(SYSDATE),
10491                   NULL,TRUNC(SYSDATE),
10492                   p_org_roles(i).start_date)
10493        Into     v_start_date_active
10494        From     dual;
10495 */     --Commented and added the following line -- By Ansari
10496        v_start_date_active := null;
10497 
10498        Select project_role_id
10499        Into   v_project_role_id
10500        From   pa_project_role_types
10501        Where  project_role_type=p_org_roles(i).project_role_type;
10502 
10503           v_end_date_active   := p_org_roles(i).end_date;
10504           v_project_role_type := p_org_roles(i).project_role_type;
10505           v_person_id         := p_org_roles(i).person_id;
10506           v_null_number       := to_number(NULL);
10507 
10508 /*   PA_PROJECT_PARTIES_PUB.CREATE_PROJECT_PARTY(
10509           p_api_version => 1.0           -- p_api_version
10510           , p_init_msg_list => FND_API.G_TRUE  -- p_init_msg_list
10511           , p_commit => FND_API.G_FALSE  -- p_commit
10512           , p_validate_only => FND_API.G_FALSE -- p_validate_only
10513           , p_validation_level => FND_API.G_VALID_LEVEL_FULL  -- p_validation_level
10514           , p_debug_mode => 'N'          -- p_debug_mode
10515           , p_object_id => p_project_id  -- p_object_id
10516           , p_OBJECT_TYPE => 'PA_PROJECTS'  -- p_OBJECT_TYPE
10517           , p_project_role_id => v_project_role_id  -- p_project_role_id
10518           , p_project_role_type => NULL  -- p_project_role_type
10519           , p_RESOURCE_TYPE_ID => 112    -- p_RESOURCE_TYPE_ID
10520           , p_resource_source_id => v_person_id  -- p_resource_source_id
10521           , p_resource_name => v_null_char       -- p_resource_name
10522           , p_start_date_active => v_start_date_active  -- p_start_date_active
10523           , p_scheduled_flag => 'N'      -- p_scheduled_flag
10524 --          , p_record_version_number => 1 -- p_record_version_number
10525           , p_calling_module => 'FORM'   -- p_calling_module
10526           , p_project_id => p_project_id -- p_project_id
10527           , p_project_end_date => l_completion_date  -- p_project_end_date
10528           , p_end_date_active => v_end_date_active  -- p_end_date_active
10529           , x_project_party_id => x_project_party_id  -- x_project_party_id
10530           , x_resource_id => x_resource_id      -- x_resource_id
10531           , x_wf_item_type     =>l_wf_item_type
10532           , x_wf_type          => l_wf_type
10533           , x_wf_process       => l_wf_party_process
10534           , x_assignment_id    => l_assignment_id
10535           , x_return_status => x_return_status  -- x_return_status
10536           , x_msg_count => x_msg_count          -- x_msg_count
10537           , x_msg_data => x_msg_data            -- x_msg_data
10538                              );
10539 */
10540   PA_PROJECTS_MAINT_PUB.CREATE_ORG_ROLE(
10541             p_api_version                     => 1.0           -- p_api_version
10542           , p_init_msg_list                   => FND_API.G_TRUE  -- p_init_msg_list
10543           , p_commit                          => FND_API.G_FALSE  -- p_commit
10544           , p_validate_only                   => FND_API.G_FALSE -- p_validate_only
10545           , p_validation_level                => FND_API.G_VALID_LEVEL_FULL  -- p_validation_level
10546           , p_debug_mode                      => 'N'          -- p_debug_mode
10547           , p_object_id                       => p_project_id  -- p_object_id
10548           , p_OBJECT_TYPE                     => 'PA_PROJECTS'  -- p_OBJECT_TYPE
10549           , p_project_role_id                 => v_project_role_id  -- p_project_role_id
10550           , p_project_role_type               => NULL  -- p_project_role_type
10551           , p_RESOURCE_TYPE_ID                => 112    -- p_RESOURCE_TYPE_ID
10552           , p_resource_source_id              => v_person_id  -- p_resource_source_id
10553           , p_resource_name                   => v_null_char       -- p_resource_name
10554           , p_start_date_active               => v_start_date_active  -- p_start_date_active
10555           , p_scheduled_flag                  => 'N'      -- p_scheduled_flag
10556           , p_calling_module                  => 'FORM'   -- p_calling_module
10557           , p_project_id                      => p_project_id -- p_project_id
10558           , p_project_end_date                => l_completion_date  -- p_project_end_date
10559           , p_end_date_active                 => v_end_date_active  -- p_end_date_active
10560           , x_return_status                   => x_return_status  -- x_return_status
10561           , x_msg_count                       => x_msg_count          -- x_msg_count
10562           , x_msg_data                        => x_msg_data            -- x_msg_data
10563                              );
10564 
10565           IF    (x_return_status <> FND_API.G_RET_STS_SUCCESS) Then
10566                 p_return_status := x_return_status;
10567 --                p_msg_count     := x_msg_count;
10568 --                p_msg_data      := SUBSTR(p_msg_data||x_msg_data,1,2000);
10569                 if    (x_return_status = FND_API.G_RET_STS_ERROR) then
10570                       raise  FND_API.G_EXC_UNEXPECTED_ERROR;
10571                 else  -- (x_return_status =  FND_API.G_RET_STS_UNEXP_ERROR) then
10572                       raise  FND_API.G_EXC_ERROR;
10573                 end if;
10574          END IF;
10575 
10576 END IF; -- IF(p_org_roles(i).person_id <>
10577         -- PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
10578     i := p_org_roles.next(i);
10579 
10580     END LOOP; --org roles
10581 
10582 
10583 EXCEPTION
10584 
10585     WHEN FND_API.G_EXC_ERROR
10586     THEN
10587 /* dbms_output.put_line('handling an G_EXC_ERROR exception'); */
10588     ROLLBACK TO add_org_roles_pvt;
10589 
10590     p_return_status := FND_API.G_RET_STS_ERROR;
10591 
10592     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
10593     THEN
10594 /* dbms_output.put_line('handling an G_EXC_UNEXPECTED_ERROR exception'); */
10595     ROLLBACK TO add_org_roles_pvt;
10596 
10597     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10598 
10599     WHEN OTHERS THEN
10600 /* dbms_output.put_line('handling an OTHERS exception'); */
10601     ROLLBACK TO add_org_roles_pvt;
10602 
10603     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10604 
10605     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
10606     THEN
10607         FND_MSG_PUB.add_exc_msg
10608                 ( p_pkg_name        => G_PKG_NAME
10609                 , p_procedure_name  => l_api_name   );
10610 
10611     END IF;
10612 
10613 END add_org_roles;
10614 
10615 
10616 -- anlee org role changes
10617 --====================================================================================
10618 --Name:               check_valid_organization
10619 --
10620 --Type:               Function
10621 --Description:        This function can be used to check for validity of
10622 --            an organization
10623 --
10624 --Called subprograms: none
10625 --
10626 --
10627 --
10628 --History:
10629 --    20-MAR-2002       anlee    Created
10630 --
10631 FUNCTION check_valid_organization (p_party_id IN NUMBER )  RETURN VARCHAR2
10632 IS
10633     CURSOR l_get_organizations_csr (l_party_id NUMBER)
10634     IS
10635     SELECT 'x' FROM
10636     hz_parties
10637     WHERE party_id = l_party_id
10638     AND party_type = 'ORGANIZATION';
10639 
10640 l_temp VARCHAR2(1);
10641 BEGIN
10642              OPEN l_get_organizations_csr (p_party_id);
10643              FETCH l_get_organizations_csr INTO l_temp;
10644 
10645              IF l_get_organizations_csr%NOTFOUND
10646              THEN
10647                 CLOSE l_get_organizations_csr;
10648                 RETURN 'N';
10649              ELSE
10650                 CLOSE l_get_organizations_csr;
10651                 RETURN 'Y';
10652              END IF;
10653 
10654 EXCEPTION
10655     WHEN OTHERS THEN
10656         RAISE;
10657 
10658 END check_valid_organization;
10659 
10660 --Project Connect 4.0
10661 
10662 PROCEDURE get_structure_version(
10663    p_project_id              IN NUMBER
10664   ,p_structure_versions_out  OUT NOCOPY PA_PROJECT_PUB.struc_out_tbl_type )
10665 IS
10666    CURSOR cur_proj_elems
10667    IS
10668    SELECT ppe.proj_element_id
10669      FROM pa_proj_elements ppe, pa_proj_structure_types ppst
10670     WHERE ppe.proj_element_id = ppst.proj_element_id
10671       AND ppe.project_id = p_project_id
10672       AND ppe.object_type = 'PA_STRUCTURES'
10673       AND ppst.structure_type_id = 1 ;
10674 
10675    CURSOR c1( c_proj_element_id NUMBER ) is
10676    SELECT d.element_version_id
10677      FROM pa_proj_structure_types b
10678           ,pa_proj_elem_ver_structure d
10679     WHERE d.project_id = p_project_id
10680       AND 1 = b.structure_type_id
10681       AND b.proj_element_id = c_proj_element_id
10682       AND d.proj_element_id = c_proj_element_id
10683       AND d.status_code = 'STRUCTURE_PUBLISHED'
10684                      ;
10685 
10686    l_fin_str_ver_id    NUMBER;
10687    l_wp_str_ver_id    NUMBER;
10688    l_wp_str_id         NUMBER;
10689    l_index             NUMBER := 1;
10690 
10691 BEGIN
10692 
10693      l_fin_str_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_FIN_STRUC_VER_ID( p_project_id );
10694 
10695      IF l_fin_str_ver_id IS NOT NULL
10696      THEN
10697          p_structure_versions_out(l_index).structure_version_id := l_fin_str_ver_id;
10698          p_structure_versions_out(l_index).structure_type := 'FINANCIAL';
10699      END IF;
10700 
10701      OPEN cur_proj_elems;
10702      FETCH cur_proj_elems INTO l_wp_str_id;
10703      CLOSE cur_proj_elems;
10704 
10705      l_wp_str_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER( l_wp_str_id );
10706 
10707      IF l_wp_str_ver_id IS NULL
10708      THEN
10709          OPEN c1(l_wp_str_id );
10710          FETCH c1 into l_wp_str_ver_id;
10711          CLOSE c1;
10712      END IF;
10713 
10714      IF p_structure_versions_out.exists(1)
10715      THEN
10716         l_index := l_index + 1;
10717      END IF;
10718 
10719      IF l_wp_str_ver_id IS NOT NULL
10720      THEN
10721          p_structure_versions_out(l_index).structure_version_id := l_wp_str_ver_id;
10722          p_structure_versions_out(l_index).structure_type := 'WORKPLAN';
10723          --For shared and versioning enabled structures
10724          IF l_fin_str_ver_id IS NULL
10725          THEN
10726              p_structure_versions_out(l_index+1).structure_version_id := l_wp_str_ver_id;
10727              p_structure_versions_out(l_index+1).structure_type := 'FINANCIAL';
10728          END IF;
10729      END IF;
10730 
10731 END get_structure_version;
10732 
10733 --Project Connect 4.0
10734 /*Added the procedure for the bug 2802984
10735 This Procedure returns the labor sch type and non labor sch type from the database in the corresponding
10736 out parameters for the related project id and task id if the parameter p_in_labor_sch_type or
10737 p_in_nl_sch_type is PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR else the same values are passed back in the out paramters.
10738 */
10739 
10740 PROCEDURE Check_Schedule_type
10741      (p_pa_task_id              IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10742       p_pa_project_id           IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10743       p_in_labor_sch_type       IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
10744       p_in_nl_sch_type          IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
10745       p_task_name               IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
10746       p_pm_task_reference       IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
10747       p_out_labor_sch_type      OUT NOCOPY VARCHAR, -- 4537865 Added the nocopy hint
10748       p_out_nl_labor_sch_type   OUT NOCOPY VARCHAR, -- 4537865 Added the nocopy hint
10749       p_return_status           OUT NOCOPY VARCHAR2 -- 4537865 Added the nocopy hint
10750       )
10751 
10752      IS
10753 
10754 CURSOR  l_prj_labor_sch_type_csr(p_pa_project_id VARCHAR2)
10755 IS
10756 SELECT  labor_sch_type
10757 FROM    pa_projects
10758 where   project_id = p_pa_project_id;
10759 
10760 CURSOR  l_tsk_lb_sch_type_task_csr(p_pa_project_id VARCHAR2,p_pa_task_id VARCHAR2)
10761 IS
10762 SELECT  labor_sch_type
10763 FROM    pa_tasks
10764 where   project_id = p_pa_project_id
10765 and     task_id= p_pa_task_id;
10766 
10767 CURSOR  l_prj_nl_sch_type_csr(p_pa_project_id VARCHAR2)
10768 IS
10769 SELECT  non_labor_sch_type
10770 FROM    pa_projects
10771 where   project_id = p_pa_project_id;
10772 
10773 CURSOR  l_tsk_nl_sch_type_task_csr(p_pa_project_id VARCHAR2,p_pa_task_id VARCHAR2)
10774 IS
10775 SELECT  non_labor_sch_type
10776 FROM    pa_tasks
10777 where   project_id = p_pa_project_id
10778 and    task_id = p_pa_task_id;
10779 
10780 CURSOR   l_amg_project_csr(p_pa_project_id pa_projects.project_id%type)
10781 IS
10782 SELECT   segment1
10783 FROM     pa_projects p
10784 WHERE    p.project_id = p_pa_project_id;
10785 
10786 
10787 
10788     l_api_name  CONSTANT     VARCHAR2(30) := 'Check Schedule';
10789     l_out_labor_sch_type         VARCHAR(1);
10790     l_out_nl_labor_sch_type      VARCHAR(1);
10791     l_prj_lab_sch_type           VARCHAR2(1);
10792     l_tsk_lab_sch_type           VARCHAR2(1);
10793     l_prj_nl_sch_type            VARCHAR2(1);
10794     l_tsk_nl_sch_type            VARCHAR2(1);
10795     l_amg_segment1               VARCHAR(50);
10796     l_amg_task_number            VARCHAR2(50);
10797 
10798   BEGIN
10799 
10800      p_return_status :=  FND_API.G_RET_STS_SUCCESS;
10801 
10802    OPEN l_amg_project_csr( p_pa_project_id );
10803    FETCH l_amg_project_csr INTO l_amg_segment1;
10804    CLOSE l_amg_project_csr;
10805 
10806 
10807 l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
10808     (p_task_number => p_task_name
10809     ,p_task_reference =>p_pm_task_reference
10810     ,p_task_id => p_pa_task_id);
10811 
10812     IF p_in_labor_sch_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10813        IF p_pa_task_id IS NULL THEN
10814 
10815          OPEN l_prj_labor_sch_type_csr(p_pa_project_id);
10816      FETCH l_prj_labor_sch_type_csr into l_prj_lab_sch_type;
10817      CLOSE l_prj_labor_sch_type_csr;
10818 
10819      p_out_labor_sch_type := l_prj_lab_sch_type;
10820 
10821        ELSE
10822 
10823          OPEN l_tsk_lb_sch_type_task_csr(p_pa_project_id,p_pa_task_id);
10824      FETCH l_tsk_lb_sch_type_task_csr into l_tsk_lab_sch_type;
10825      CLOSE l_tsk_lb_sch_type_task_csr;
10826 
10827          p_out_labor_sch_type := l_tsk_lab_sch_type;
10828 
10829        END IF;
10830 
10831    ELSIF  p_in_labor_sch_type IS NULL THEN
10832              IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
10833         THEN
10834                      pa_interface_utils_pub.map_new_amg_msg
10835                      ( p_old_message_code => 'PA_LAB_SCH_NOT_NULL'
10836                       ,p_msg_attribute    => 'CHANGE'
10837                       ,p_resize_flag      => 'Y'
10838                       ,p_msg_context      => 'TASK'
10839                       ,p_attribute1       => l_amg_segment1
10840                       ,p_attribute2       => l_amg_task_number
10841                       ,p_attribute3       => ''
10842                       ,p_attribute4       => ''
10843                       ,p_attribute5       => '');
10844                 END IF;
10845                 RAISE  FND_API.G_EXC_ERROR;
10846 
10847     ELSE
10848 
10849      p_out_labor_sch_type := p_in_labor_sch_type;
10850 
10851    END IF;
10852       IF p_in_nl_sch_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10853        IF p_pa_task_id IS NULL THEN
10854 
10855          OPEN l_prj_nl_sch_type_csr(p_pa_project_id);
10856      FETCH l_prj_nl_sch_type_csr into l_prj_nl_sch_type;
10857      CLOSE l_prj_nl_sch_type_csr;
10858 
10859     p_out_nl_labor_sch_type := l_prj_nl_sch_type;
10860 
10861        ELSE
10862 
10863          OPEN l_tsk_nl_sch_type_task_csr(p_pa_project_id,p_pa_task_id);
10864      FETCH l_tsk_nl_sch_type_task_csr into l_tsk_nl_sch_type;
10865      CLOSE l_tsk_nl_sch_type_task_csr;
10866 
10867      p_out_nl_labor_sch_type := l_tsk_nl_sch_type;
10868 
10869        END IF;
10870 
10871    ELSIF  p_in_nl_sch_type IS NULL THEN
10872 
10873            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
10874         THEN
10875                      pa_interface_utils_pub.map_new_amg_msg
10876                      ( p_old_message_code => 'PA_NL_SCH_NOT_NULL'
10877                       ,p_msg_attribute    => 'CHANGE'
10878                       ,p_resize_flag      => 'Y'
10879                       ,p_msg_context      => 'TASK'
10880                       ,p_attribute1       => l_amg_segment1
10881                       ,p_attribute2       => l_amg_task_number
10882                       ,p_attribute3       => ''
10883                       ,p_attribute4       => ''
10884                       ,p_attribute5       => '');
10885                 END IF;
10886                 RAISE  FND_API.G_EXC_ERROR;
10887   ELSE
10888 
10889  p_out_nl_labor_sch_type := p_in_nl_sch_type;
10890 END IF;
10891 
10892 EXCEPTION
10893 
10894     WHEN FND_API.G_EXC_ERROR
10895     THEN
10896 /* dbms_output.put_line('handling an G_EXC_ERROR exception'); */
10897 
10898     p_return_status := FND_API.G_RET_STS_ERROR;
10899 
10900     -- 4537865 RESET OUT PARAMS
10901     p_out_nl_labor_sch_type := NULL ;
10902     p_out_labor_sch_type := NULL ;
10903 
10904     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
10905     THEN
10906 /* dbms_output.put_line('handling an G_EXC_UNEXPECTED_ERROR exception'); */
10907 
10908     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10909     -- 4537865 RESET OUT PARAMS
10910     p_out_nl_labor_sch_type := NULL ;
10911     p_out_labor_sch_type := NULL ;
10912 
10913     WHEN OTHERS THEN
10914 /* dbms_output.put_line('handling an OTHERS exception'); */
10915 
10916     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10917 
10918    -- 4537865 RESET OUT PARAMS
10919     p_out_nl_labor_sch_type := NULL ;
10920     p_out_labor_sch_type := NULL ;
10921 
10922     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
10923     THEN
10924         FND_MSG_PUB.add_exc_msg
10925                 ( p_pkg_name        => G_PKG_NAME
10926                 , p_procedure_name  => l_api_name   );
10927 
10928     END IF;
10929   end Check_Schedule_type;
10930 
10931 /*Added the procedure for the bug 2802984
10932 This procedure validates all the parameters related to labor schedule and non labor schedule.
10933 Refer bug for more details.
10934 */
10935 
10936 PROCEDURE validate_schedule_values
10937    (p_pa_project_id                     IN      NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10938     p_pa_task_id                        IN      NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10939     p_task_name                         IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
10940     p_pm_task_reference                 IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
10941     p_lab_db_sch_type                   IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
10942     p_nl_db_sch_type                    IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
10943     p_labor_sch_type                    IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
10944     p_nl_sch_type                       IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
10945     p_emp_bill_rate_schedule_id         IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10946     p_job_bill_rate_schedule_id         IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10947     p_labor_schedule_fixed_date         IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
10948     p_labor_schedule_discount           IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10949     p_labor_disc_reason_code            IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
10950     p_nl_bill_rate_org_id               IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10951     p_non_lab_std_bill_rt_sch_id        IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10952     p_nl_schedule_fixed_date            IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
10953     p_nl_schedule_discount              IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10954     p_non_labor_disc_reason_code        IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
10955     p_rev_ind_rate_sch_id               IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10956     p_inv_ind_rate_sch_id               IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10957     p_rev_ind_sch_fixed_date            IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
10958     p_inv_ind_sch_fixed_date            IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
10959     p_return_status                     OUT NOCOPY     VARCHAR2 -- 4537865 Added the nocopy hint
10960     )
10961 
10962 IS
10963 
10964 CURSOR l_rev_rate_schedule_type_csr( p_rev_ind_rate_sch_id NUMBER)
10965 IS
10966 SELECT       ind_rate_schedule_type
10967 FROM         pa_ind_rate_schedules
10968 WHERE        ind_rate_sch_id = p_rev_ind_rate_sch_id
10969 AND          trunc(sysdate) between trunc(start_date_active) and nvl(end_date_active,trunc(sysdate));
10970 
10971 CURSOR l_inv_rate_schedule_type_csr( p_inv_ind_rate_sch_id NUMBER)
10972 IS
10973 SELECT       ind_rate_schedule_type
10974 FROM         pa_ind_rate_schedules
10975 WHERE        ind_rate_sch_id = p_inv_ind_rate_sch_id
10976 AND          trunc(sysdate) between trunc(start_date_active) and nvl(end_date_active,trunc(sysdate));
10977 
10978 --R12: Bug 4363092 - removed nvl for org_id in below cursor
10979 CURSOR l_emp_rate_sch_id_csr( p_emp_bill_rate_schedule_id NUMBER)
10980 IS
10981 SELECT       'x'
10982 FROM         pa_std_bill_rate_schedules_all brs, pa_projects pa
10983 WHERE        brs.bill_rate_sch_id = p_emp_bill_rate_schedule_id
10984 AND          pa.project_id=p_pa_project_id
10985 and          brs.schedule_type = 'EMPLOYEE'
10986 AND          ( pa.multi_currency_BILLING_flag='Y'
10987 OR           (pa.multi_currency_billing_flag='N'
10988 AND          brs.rate_sch_currency_code=pa.project_currency_code))
10989 AND          ((pa_multi_currency_billing.is_sharing_bill_rates_allowed(pa.org_id) = 'Y')
10990 or  (pa_multi_currency_billing.is_sharing_bill_rates_allowed(pa.org_id)='N'
10991 and              brs.org_id=pa.org_id))
10992 and (brs.share_across_ou_flag = 'Y'
10993      OR  (brs.share_across_ou_flag = 'N'
10994           and brs.org_id = pa.org_id
10995           ));
10996 
10997 --R12: Bug 4363092 - removed nvl for org_id in below cursor
10998 CURSOR l_job_rate_sch_id_csr( p_job_bill_rate_schedule_id NUMBER)
10999 IS
11000 SELECT       'x'
11001 FROM         pa_std_bill_rate_schedules_all brs, pa_project_types_all pt, pa_projects pa
11002 WHERE        bill_rate_sch_id = p_job_bill_rate_schedule_id
11003 AND          brs.job_group_id=pt.bill_job_group_id
11004 and          brs.schedule_type = 'JOB'
11005 AND          pa.project_type=pt.project_type
11006 AND          pa.org_id = pt.org_id    -- added for Bug 5675391
11007 AND          ( pa.multi_currency_BILLING_flag='Y'
11008 OR           (pa.multi_currency_billing_flag='N'
11009 AND          brs.rate_sch_currency_code=pa.project_currency_code))
11010 AND          ((pa_multi_currency_billing.is_sharing_bill_rates_allowed(pa.org_id) = 'Y')
11011 or  (pa_multi_currency_billing.is_sharing_bill_rates_allowed(pa.org_id)='N'
11012 and              brs.org_id=pa.org_id))
11013 and (brs.share_across_ou_flag = 'Y'
11014      OR  (brs.share_across_ou_flag = 'N'
11015           and brs.org_id = pa.org_id
11016           ))
11017 AND          pa.project_id=p_pa_project_id;
11018 
11019 --R12: Bug 4363092 - removed nvl for org_id in below cursor
11020 CURSOR l_nl_org_sch_id_csr( p_nl_bill_rate_org_id NUMBER,p_non_lab_std_bill_rt_sch_id NUMBER)
11021 IS
11022 SELECT       'x'
11023 FROM         pa_std_bill_rate_schedules_all brs, pa_projects pa
11024 WHERE        brs.organization_id = p_nl_bill_rate_org_id
11025 AND          bill_rate_sch_id = p_non_lab_std_bill_rt_sch_id
11026 and          brs.schedule_type = 'NON-LABOR'
11027 and  (brs.schedule_type <> 'JOB'
11028  or  (brs.schedule_type = 'JOB'
11029 and   brs.job_group_id = pa.bill_job_group_id))
11030 AND          ( pa.multi_currency_BILLING_flag='Y'
11031 OR           (pa.multi_currency_billing_flag='N'
11032 AND          brs.rate_sch_currency_code=pa.project_currency_code))
11033 AND          ((pa_multi_currency_billing.is_sharing_bill_rates_allowed(pa.org_id) = 'Y')
11034 or  (pa_multi_currency_billing.is_sharing_bill_rates_allowed(pa.org_id)='N'
11035 and              brs.org_id=pa.org_id))
11036 and (brs.share_across_ou_flag = 'Y'
11037      OR  (brs.share_across_ou_flag = 'N'
11038           and brs.org_id = pa.org_id
11039           ))
11040 AND          pa.project_id=p_pa_project_id;
11041 
11042 
11043 CURSOR   l_amg_project_csr(p_pa_project_id pa_projects.project_id%type)
11044 IS
11045 SELECT   segment1
11046 FROM     pa_projects p
11047 WHERE    p.project_id = p_pa_project_id;
11048 
11049 CURSOR   get_lab_disc_reason_code_csr(p_labor_disc_reason_code VARCHAR2)
11050 IS
11051 SELECT   'x'
11052 FROM     pa_lookups
11053 WHERE    lookup_type ='RATE AND DISCOUNT REASON'
11054 AND      lookup_code=p_labor_disc_reason_code
11055 AND    trunc(nvl(end_date_active,sysdate)) >= trunc(sysdate);
11056 
11057 CURSOR   get_nl_disc_reason_code_csr(p_non_labor_disc_reason_code VARCHAR2)
11058 IS
11059 SELECT   'x'
11060 FROM     pa_lookups
11061 WHERE    lookup_type ='RATE AND DISCOUNT REASON'
11062 AND      lookup_code=p_non_labor_disc_reason_code
11063 AND    trunc(nvl(end_date_active,sysdate)) >= trunc(sysdate);
11064 
11065 
11066 l_api_name  CONSTANT     VARCHAR2(30) := 'Validate Schedule Values';
11067 l_rev_rate_schedule_type     VARCHAR2(1);
11068 l_inv_rate_schedule_type     VARCHAR2(1);
11069 l_temp_dummy                 VARCHAR2(1) := null;
11070 l_non_lab_std_bill_schdl     VARCHAR2(40);
11071 l_amg_segment1               VARCHAR2(50);
11072 l_amg_task_number            VARCHAR2(50);
11073 
11074 BEGIN
11075 
11076    p_return_status := FND_API.G_RET_STS_SUCCESS;
11077 
11078    OPEN l_amg_project_csr( p_pa_project_id );
11079    FETCH l_amg_project_csr INTO l_amg_segment1;
11080    CLOSE l_amg_project_csr;
11081 
11082 
11083    l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
11084     (p_task_number => p_task_name
11085     ,p_task_reference =>p_pm_task_reference
11086     ,p_task_id => p_pa_task_id);
11087 
11088 
11089  IF  p_nl_sch_type = 'B' then  /* Basically B is passed through the script or value in DataBase is 'B' */
11090 
11091  /*Give an error when non_lab_std_bill_rt_sch_id is null and give an error
11092  if non_labor_std_bill_rt_sch_id is PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11093  when the Schedule is being changed from 'I' (burden) to 'B' (bill) */
11094 
11095  IF p_non_lab_std_bill_rt_sch_id IS NULL THEN  /* Explicitly passed as NULL, hence Error */
11096                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11097                 THEN
11098                      pa_interface_utils_pub.map_new_amg_msg
11099                      ( p_old_message_code => 'PA_NL_SCH_ID_NOT_NULL'
11100                       ,p_msg_attribute    => 'CHANGE'
11101                       ,p_resize_flag      => 'Y'
11102                       ,p_msg_context      => 'TASK'
11103                       ,p_attribute1       => l_amg_segment1
11104                       ,p_attribute2       => l_amg_task_number
11105                       ,p_attribute3       => ''
11106                       ,p_attribute4       => ''
11107                       ,p_attribute5       => '');
11108                 END IF;
11109                 RAISE  FND_API.G_EXC_ERROR;
11110   ELSIF p_non_lab_std_bill_rt_sch_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11111            IF p_nl_db_sch_type = 'I'  THEN /* Schedule is being changed from 'I' (burden) to 'B' (bill) */
11112                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11113            THEN
11114                      pa_interface_utils_pub.map_new_amg_msg
11115                      ( p_old_message_code => 'PA_NL_SCH_ID_NOT_NULL'
11116                       ,p_msg_attribute    => 'CHANGE'
11117                       ,p_resize_flag      => 'Y'
11118                       ,p_msg_context      => 'TASK'
11119                       ,p_attribute1       => l_amg_segment1
11120                       ,p_attribute2       => l_amg_task_number
11121                       ,p_attribute3       => ''
11122                       ,p_attribute4       => ''
11123                       ,p_attribute5       => '');
11124                 END IF;
11125                 RAISE  FND_API.G_EXC_ERROR;
11126              END IF;
11127   END IF;
11128 
11129     /*Give an error when non_lab_bill_rt_org_id is null and give an error
11130  if non_labor_bill_rt_org_id is PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11131  when the Schedule is being changed from 'I' to 'B'*/
11132 
11133    IF  p_nl_bill_rate_org_id IS NULL
11134         THEN
11135                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11136         THEN
11137                      pa_interface_utils_pub.map_new_amg_msg
11138                      ( p_old_message_code => 'PA_BILL_RT_ORG_ID_NOT_NULL'
11139                       ,p_msg_attribute    => 'CHANGE'
11140                       ,p_resize_flag      => 'Y'
11141                       ,p_msg_context      => 'TASK'
11142                       ,p_attribute1       => l_amg_segment1
11143                       ,p_attribute2       => l_amg_task_number
11144                       ,p_attribute3       => ''
11145                       ,p_attribute4       => ''
11146                       ,p_attribute5       => '');
11147                 END IF;
11148                 RAISE  FND_API.G_EXC_ERROR;
11149     ELSIF p_nl_bill_rate_org_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11150       IF p_nl_db_sch_type = 'I'  THEN
11151                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11152         THEN
11153                      pa_interface_utils_pub.map_new_amg_msg
11154                      ( p_old_message_code => 'PA_BILL_RT_ORG_ID_NOT_NULL'
11155                       ,p_msg_attribute    => 'CHANGE'
11156                       ,p_resize_flag      => 'Y'
11157                       ,p_msg_context      => 'TASK'
11158                       ,p_attribute1       => l_amg_segment1
11159                       ,p_attribute2       => l_amg_task_number
11160                       ,p_attribute3       => ''
11161                       ,p_attribute4       => ''
11162                       ,p_attribute5       => '');
11163                 END IF;
11164                 RAISE  FND_API.G_EXC_ERROR;
11165            END IF;
11166          END IF;
11167 
11168 /*Give an error if the combination of non_labor_bill_rt_sch_id and nl_bill_rate_org_id is invalid*/
11169 
11170  IF (p_non_lab_std_bill_rt_sch_id IS NOT NULL
11171  AND p_non_lab_std_bill_rt_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
11172     AND (p_nl_bill_rate_org_id IS NOT NULL AND p_nl_bill_rate_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
11173         THEN
11174            OPEN l_nl_org_sch_id_csr( p_nl_bill_rate_org_id,p_non_lab_std_bill_rt_sch_id);
11175            FETCH l_nl_org_sch_id_csr INTO l_temp_dummy;
11176       IF l_nl_org_sch_id_csr%NOTFOUND
11177            THEN
11178          CLOSE l_nl_org_sch_id_csr;
11179                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11180                 THEN
11181                      pa_interface_utils_pub.map_new_amg_msg
11182                      ( p_old_message_code => 'PA_INVALID_NL_ORG_SCH_ID'
11183                       ,p_msg_attribute    => 'CHANGE'
11184                       ,p_resize_flag      => 'Y'
11185                       ,p_msg_context      => 'TASK'
11186                       ,p_attribute1       => l_amg_segment1
11187                       ,p_attribute2       => l_amg_task_number
11188                       ,p_attribute3       => ''
11189                       ,p_attribute4       => ''
11190                       ,p_attribute5       => '');
11191                 END IF;
11192                 RAISE  FND_API.G_EXC_ERROR;
11193            END IF;
11194          CLOSE l_nl_org_sch_id_csr;
11195  END IF;
11196 
11197 /*
11198 1) Give an error when the nl_schedule_discount is null or PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and a value is being
11199    passed to non_labor_disc_reason_code as cannot pass disc reason code with schedule discount
11200 2) Give an error when nl_schedule_discount is not null and <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11201     and non_labor_disc_reason_code is null or =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11202 3) Give an error when nl_schedule_discount is not null and <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11203    and the non_labor_disc_reason_code passed is invalid
11204 */
11205 
11206  l_temp_dummy := NULL;
11207 
11208   IF p_nl_schedule_discount IS NULL OR p_nl_schedule_discount = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11209       THEN
11210         IF p_non_labor_disc_reason_code IS NOT NULL
11211         AND p_non_labor_disc_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11212      THEN
11213                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11214         THEN
11215                      pa_interface_utils_pub.map_new_amg_msg
11216                      ( p_old_message_code => 'PA_NL_DISC_REASON_CODE'
11217                       ,p_msg_attribute    => 'CHANGE'
11218                       ,p_resize_flag      => 'Y'
11219                       ,p_msg_context      => 'TASK'
11220                       ,p_attribute1       => l_amg_segment1
11221                       ,p_attribute2       => l_amg_task_number
11222                       ,p_attribute3       => ''
11223                       ,p_attribute4       => ''
11224                       ,p_attribute5       => '');
11225                 END IF;
11226                 RAISE  FND_API.G_EXC_ERROR;
11227          END IF;
11228 elsif  (p_nl_schedule_discount IS NOT NULL
11229        AND p_nl_schedule_discount <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
11230   THEN
11231   IF (p_non_labor_disc_reason_code IS NULL
11232      OR p_non_labor_disc_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11233        THEN
11234             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11235         THEN
11236                      pa_interface_utils_pub.map_new_amg_msg
11237                      ( p_old_message_code => 'PA_NL_DISC_CODE_NOT_NULL'
11238                       ,p_msg_attribute    => 'CHANGE'
11239                       ,p_resize_flag      => 'Y'
11240                       ,p_msg_context      => 'TASK'
11241                       ,p_attribute1       => l_amg_segment1
11242                       ,p_attribute2       => l_amg_task_number
11243                       ,p_attribute3       => ''
11244                       ,p_attribute4       => ''
11245                       ,p_attribute5       => '');
11246                 END IF;
11247                 RAISE  FND_API.G_EXC_ERROR;
11248    ELSE
11249       OPEN get_nl_disc_reason_code_csr(p_non_labor_disc_reason_code);
11250       FETCH get_nl_disc_reason_code_csr INTO l_temp_dummy;
11251            IF get_nl_disc_reason_code_csr%NOTFOUND THEN
11252           CLOSE get_nl_disc_reason_code_csr;
11253                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11254         THEN
11255                      pa_interface_utils_pub.map_new_amg_msg
11256                      ( p_old_message_code => 'PA_INVALID_NLDISC_RN_CODE'
11257                       ,p_msg_attribute    => 'CHANGE'
11258                       ,p_resize_flag      => 'Y'
11259                       ,p_msg_context      => 'TASK'
11260                       ,p_attribute1       => l_amg_segment1
11261                       ,p_attribute2       => l_amg_task_number
11262                       ,p_attribute3       => ''
11263                       ,p_attribute4       => ''
11264                       ,p_attribute5       => '');
11265                 END IF;
11266                 RAISE  FND_API.G_EXC_ERROR;
11267             END IF;
11268          CLOSE get_nl_disc_reason_code_csr;
11269      END IF;
11270  END IF;
11271 
11272 ELSE  /* Else for if non_labor_sch_type = 'B'*/
11273 
11274 /*
11275 1) Give an error when p_rev_ind_rate_sch_id is null
11276 2) Give an error when p_rev_ind_rate_sch_id not passed(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
11277    and the schedule_type is being changed from 'B' to 'I'
11278 */
11279 
11280   IF p_rev_ind_rate_sch_id IS  NULL THEN
11281                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11282                 THEN
11283                      pa_interface_utils_pub.map_new_amg_msg
11284                      ( p_old_message_code => 'PA_REV_SCH_ID_NOT_NULL'
11285                       ,p_msg_attribute    => 'CHANGE'
11286                       ,p_resize_flag      => 'Y'
11287                       ,p_msg_context      => 'TASK'
11288                       ,p_attribute1       => l_amg_segment1
11289                       ,p_attribute2       => l_amg_task_number
11290                       ,p_attribute3       => ''
11291                       ,p_attribute4       => ''
11292                       ,p_attribute5       => '');
11293                 END IF;
11294                 RAISE  FND_API.G_EXC_ERROR;
11295    ELSIF p_rev_ind_rate_sch_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11296         IF p_nl_db_sch_type = 'B'  THEN
11297              IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11298                 THEN
11299                      pa_interface_utils_pub.map_new_amg_msg
11300                      ( p_old_message_code => 'PA_REV_SCH_ID_NOT_NULL'
11301                       ,p_msg_attribute    => 'CHANGE'
11302                       ,p_resize_flag      => 'Y'
11303                       ,p_msg_context      => 'TASK'
11304                       ,p_attribute1       => l_amg_segment1
11305                       ,p_attribute2       => l_amg_task_number
11306                       ,p_attribute3       => ''
11307                       ,p_attribute4       => ''
11308                       ,p_attribute5       => '');
11309                 END IF;
11310                 RAISE  FND_API.G_EXC_ERROR;
11311           END IF;
11312     END IF;
11313 
11314 
11315  /*
11316  1) Give an error when a value is passed to p_rev_ind_rate_sch_id and it is invalid.
11317  2) Give an error when the Burden Schedule type is P (Provisional) for the attached revenue burden schedule
11318   and the p_rev_ind_sch_fixed_date date is being passed.
11319  */
11320 
11321   IF (p_rev_ind_rate_sch_id IS NOT NULL
11322    AND p_rev_ind_rate_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
11323        THEN
11324        OPEN l_rev_rate_schedule_type_csr(p_rev_ind_rate_sch_id);
11325        FETCH l_rev_rate_schedule_type_csr INTO l_rev_rate_schedule_type;
11326       IF l_rev_rate_schedule_type_csr%NOTFOUND THEN
11327         CLOSE l_rev_rate_schedule_type_csr;
11328               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11329                 THEN
11330                      pa_interface_utils_pub.map_new_amg_msg
11331                      ( p_old_message_code => 'PA_INVALID_REV_SCH_ID'
11332                       ,p_msg_attribute    => 'CHANGE'
11333                       ,p_resize_flag      => 'Y'
11334                       ,p_msg_context      => 'TASK'
11335                       ,p_attribute1       => l_amg_segment1
11336                       ,p_attribute2       => l_amg_task_number
11337                       ,p_attribute3       => ''
11338                       ,p_attribute4       => ''
11339                       ,p_attribute5       => '');
11340                 END IF;
11341                 RAISE  FND_API.G_EXC_ERROR;
11342         END IF;
11343      CLOSE l_rev_rate_schedule_type_csr;
11344        IF l_rev_rate_schedule_type = 'P'
11345            THEN
11346               IF p_rev_ind_sch_fixed_date IS NOT NULL
11347            AND p_rev_ind_sch_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
11348           THEN
11349                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11350                 THEN
11351                      pa_interface_utils_pub.map_new_amg_msg
11352                      ( p_old_message_code => 'PA_CNT_FIX_REV_DTE_PROV'
11353                       ,p_msg_attribute    => 'CHANGE'
11354                       ,p_resize_flag      => 'Y'
11355                       ,p_msg_context      => 'TASK'
11356                       ,p_attribute1       => l_amg_segment1
11357                       ,p_attribute2       => l_amg_task_number
11358                       ,p_attribute3       => ''
11359                       ,p_attribute4       => ''
11360                       ,p_attribute5       => '');
11361                 END IF;
11362                 RAISE  FND_API.G_EXC_ERROR;
11363          END IF;
11364         END IF;
11365       END IF;
11366 
11367 
11368     l_temp_dummy :=null;
11369 
11370 /*
11371 1) Give an error when p_inv_ind_rate_sch_id is null
11372 2) Give an error when p_inv_ind_rate_sch_id not passed(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
11373    and the schedule_type is being changed from 'B' to 'I'
11374 */
11375 
11376   IF p_inv_ind_rate_sch_id IS  NULL THEN
11377                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11378                 THEN
11379                      pa_interface_utils_pub.map_new_amg_msg
11380                      ( p_old_message_code => 'PA_INV_SCH_ID_NOT_NULL'
11381                       ,p_msg_attribute    => 'CHANGE'
11382                       ,p_resize_flag      => 'Y'
11383                       ,p_msg_context      => 'TASK'
11384                       ,p_attribute1       => l_amg_segment1
11385                       ,p_attribute2       => l_amg_task_number
11386                       ,p_attribute3       => ''
11387                       ,p_attribute4       => ''
11388                       ,p_attribute5       => '');
11389                 END IF;
11390                 RAISE  FND_API.G_EXC_ERROR;
11391    ELSIF p_inv_ind_rate_sch_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11392         IF p_nl_db_sch_type = 'B'  THEN
11393              IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11394                 THEN
11395                      pa_interface_utils_pub.map_new_amg_msg
11396                      ( p_old_message_code => 'PA_INV_SCH_ID_NOT_NULL'
11397                       ,p_msg_attribute    => 'CHANGE'
11398                       ,p_resize_flag      => 'Y'
11399                       ,p_msg_context      => 'TASK'
11400                       ,p_attribute1       => l_amg_segment1
11401                       ,p_attribute2       => l_amg_task_number
11402                       ,p_attribute3       => ''
11403                       ,p_attribute4       => ''
11404                       ,p_attribute5       => '');
11405                 END IF;
11406                 RAISE  FND_API.G_EXC_ERROR;
11407           END IF;
11408     END IF;
11409 
11410 
11411  /*
11412  1) Give an error when a value is passed to p_inv_ind_rate_sch_id and it is invalid.
11413  2) Give an error when the Burden Schedule type is (Provisional) for the attached invoice burden schedule
11414   and the p_inv_ind_sch_fixed_date date is being passed.
11415  */
11416 
11417   IF p_inv_ind_rate_sch_id IS NOT NULL
11418    AND p_inv_ind_rate_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11419        THEN
11420 
11421        OPEN l_inv_rate_schedule_type_csr(p_inv_ind_rate_sch_id);
11422        FETCH l_inv_rate_schedule_type_csr INTO l_inv_rate_schedule_type;
11423       IF l_inv_rate_schedule_type_csr%NOTFOUND THEN
11424         CLOSE l_inv_rate_schedule_type_csr;
11425               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11426                 THEN
11427                      pa_interface_utils_pub.map_new_amg_msg
11428                      ( p_old_message_code => 'PA_INVALID_INV_SCH_ID'
11429                       ,p_msg_attribute    => 'CHANGE'
11430                       ,p_resize_flag      => 'Y'
11431                       ,p_msg_context      => 'TASK'
11432                       ,p_attribute1       => l_amg_segment1
11433                       ,p_attribute2       => l_amg_task_number
11434                       ,p_attribute3       => ''
11435                       ,p_attribute4       => ''
11436                       ,p_attribute5       => '');
11437                 END IF;
11438                 RAISE  FND_API.G_EXC_ERROR;
11439         END IF;
11440      CLOSE l_inv_rate_schedule_type_csr;
11441        IF l_inv_rate_schedule_type = 'P'
11442            THEN
11443               IF p_inv_ind_sch_fixed_date IS NOT NULL
11444            AND p_inv_ind_sch_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
11445           THEN
11446                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11447                 THEN
11448                      pa_interface_utils_pub.map_new_amg_msg
11449                      ( p_old_message_code => 'PA_CNT_FIX_INV_DTE_PROV'
11450                       ,p_msg_attribute    => 'CHANGE'
11451                       ,p_resize_flag      => 'Y'
11452                       ,p_msg_context      => 'TASK'
11453                       ,p_attribute1       => l_amg_segment1
11454                       ,p_attribute2       => l_amg_task_number
11455                       ,p_attribute3       => ''
11456                       ,p_attribute4       => ''
11457                       ,p_attribute5       => '');
11458                 END IF;
11459                 RAISE  FND_API.G_EXC_ERROR;
11460          END IF;
11461         END IF;
11462       END IF;
11463 
11464  END IF;         /*END IF OF NON LAB SCH TYPE = 'B'*/
11465 
11466 /*START OF VALIDATIONS FOR LABOR_SCH_TYPE = B*/
11467 
11468  IF p_labor_sch_type = 'B' THEN
11469 
11470  /*
11471   Give an error only when if employee_bill_rate_sch_id passed is invalid
11472  */
11473 
11474   IF p_emp_bill_rate_schedule_id IS NOT NULL
11475  AND p_emp_bill_rate_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11476      THEN
11477            OPEN l_emp_rate_sch_id_csr( p_emp_bill_rate_schedule_id);
11478            FETCH l_emp_rate_sch_id_csr INTO l_temp_dummy;
11479       IF l_emp_rate_sch_id_csr%NOTFOUND
11480            THEN
11481          CLOSE l_emp_rate_sch_id_csr;
11482 
11483                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11484                 THEN
11485                      pa_interface_utils_pub.map_new_amg_msg
11486                      ( p_old_message_code => 'PA_INVALID_EMP_SCH_ID'
11487                       ,p_msg_attribute    => 'CHANGE'
11488                       ,p_resize_flag      => 'Y'
11489                       ,p_msg_context      => 'TASK'
11490                       ,p_attribute1       => l_amg_segment1
11491                       ,p_attribute2       => l_amg_task_number
11492                       ,p_attribute3       => ''
11493                       ,p_attribute4       => ''
11494                       ,p_attribute5       => '');
11495                 END IF;
11496                 RAISE  FND_API.G_EXC_ERROR;
11497            END IF;
11498        CLOSE l_emp_rate_sch_id_csr;
11499      END IF;
11500 
11501  /*
11502  1) If prm is not licensed then job_bill_rate_schedule_id is not mandatory
11503  2) when prm is licensed then
11504     - Give an error when job_bill_rate_schedule_id is null.
11505     - Give an error when job_bill_rate_schedule_id is not passed and
11506       the the labor schedule type is changed from 'I' to 'B'
11507  */
11508 
11509 IF pa_install.is_prm_licensed='Y' THEN
11510  IF p_job_bill_rate_schedule_id IS NULL
11511     THEN
11512                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11513         THEN
11514                      pa_interface_utils_pub.map_new_amg_msg
11515                      ( p_old_message_code => 'PA_JOB_SCH_ID_NOT_NULL'
11516                       ,p_msg_attribute    => 'CHANGE'
11517                       ,p_resize_flag      => 'Y'
11518                       ,p_msg_context      => 'TASK'
11519                       ,p_attribute1       => l_amg_segment1
11520                       ,p_attribute2       => l_amg_task_number
11521                       ,p_attribute3       => ''
11522                       ,p_attribute4       => ''
11523                       ,p_attribute5       => '');
11524                 END IF;
11525                 RAISE  FND_API.G_EXC_ERROR;
11526   ELSIF p_job_bill_rate_schedule_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11527      THEN
11528       IF  p_lab_db_sch_type = 'I' THEN
11529                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11530         THEN
11531                      pa_interface_utils_pub.map_new_amg_msg
11532                      ( p_old_message_code => 'PA_JOB_SCH_ID_NOT_NULL'
11533                       ,p_msg_attribute    => 'CHANGE'
11534                       ,p_resize_flag      => 'Y'
11535                       ,p_msg_context      => 'TASK'
11536                       ,p_attribute1       => l_amg_segment1
11537                       ,p_attribute2       => l_amg_task_number
11538                       ,p_attribute3       => ''
11539                       ,p_attribute4       => ''
11540                       ,p_attribute5       => '');
11541                 END IF;
11542                 RAISE  FND_API.G_EXC_ERROR;
11543         END IF;
11544      END IF;
11545  END IF;
11546 
11547   /*
11548  Give an error when the job_bill_rate_schedule_id is invalid
11549  */
11550 
11551     IF p_job_bill_rate_schedule_id IS NOT NULL
11552      AND p_job_bill_rate_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11553      THEN
11554      l_temp_dummy:=null;
11555            OPEN l_job_rate_sch_id_csr( p_job_bill_rate_schedule_id);
11556            FETCH l_job_rate_sch_id_csr INTO l_temp_dummy;
11557       IF l_job_rate_sch_id_csr%NOTFOUND
11558            THEN
11559           CLOSE l_job_rate_sch_id_csr;
11560                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11561                 THEN
11562                      pa_interface_utils_pub.map_new_amg_msg
11563                      ( p_old_message_code => 'PA_INVALID_JOB_SCH_ID'
11564                       ,p_msg_attribute    => 'CHANGE'
11565                       ,p_resize_flag      => 'Y'
11566                       ,p_msg_context      => 'TASK'
11567                       ,p_attribute1       => l_amg_segment1
11568                       ,p_attribute2       => l_amg_task_number
11569                       ,p_attribute3       => ''
11570                       ,p_attribute4       => ''
11571                       ,p_attribute5       => '');
11572                 END IF;
11573                 RAISE  FND_API.G_EXC_ERROR;
11574            END IF;
11575        CLOSE l_job_rate_sch_id_csr;
11576          END IF;
11577 
11578 
11579 l_temp_dummy := null;
11580 
11581 
11582 /*
11583 1) Give an error when the labor_schedule_discount is null or PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
11584    a value is being passed to non_labor_disc_reason_code.
11585 2) Give an error when labor_schedule_discount is not null and <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11586     and labor_disc_reason_code is null or =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11587 3) Give an error when labor_schedule_discount is not null and <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11588    and the labor_disc_reason_code passed is invalid
11589 */
11590 
11591   IF (p_labor_schedule_discount IS NULL OR
11592     p_labor_schedule_discount = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
11593       THEN
11594         IF p_labor_disc_reason_code IS NOT NULL
11595         AND p_labor_disc_reason_code<> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11596        THEN
11597                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11598         THEN
11599                      pa_interface_utils_pub.map_new_amg_msg
11600                      ( p_old_message_code => 'PA_LAB_DISC_REASON_CODE'
11601                       ,p_msg_attribute    => 'CHANGE'
11602                       ,p_resize_flag      => 'Y'
11603                       ,p_msg_context      => 'TASK'
11604                       ,p_attribute1       => l_amg_segment1
11605                       ,p_attribute2       => l_amg_task_number
11606                       ,p_attribute3       => ''
11607                       ,p_attribute4       => ''
11608                       ,p_attribute5       => '');
11609                 END IF;
11610                 RAISE  FND_API.G_EXC_ERROR;
11611          END IF;
11612 elsif (p_labor_schedule_discount IS NOT NULL
11613        AND p_labor_schedule_discount <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
11614   THEN
11615   IF p_labor_disc_reason_code IS NULL
11616   OR p_labor_disc_reason_code= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11617       THEN
11618             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11619         THEN
11620                      pa_interface_utils_pub.map_new_amg_msg
11621                      ( p_old_message_code => 'PA_LAB_DISC_CODE_NOT_NULL'
11622                       ,p_msg_attribute    => 'CHANGE'
11623                       ,p_resize_flag      => 'Y'
11624                       ,p_msg_context      => 'TASK'
11625                       ,p_attribute1       => l_amg_segment1
11626                       ,p_attribute2       => l_amg_task_number
11627                       ,p_attribute3       => ''
11628                       ,p_attribute4       => ''
11629                       ,p_attribute5       => '');
11630                 END IF;
11631                 RAISE  FND_API.G_EXC_ERROR;
11632    ELSE
11633       OPEN get_lab_disc_reason_code_csr(p_labor_disc_reason_code);
11634       FETCH get_lab_disc_reason_code_csr INTO l_temp_dummy;
11635            IF get_lab_disc_reason_code_csr%NOTFOUND THEN
11636           CLOSE get_lab_disc_reason_code_csr;
11637                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11638         THEN
11639                      pa_interface_utils_pub.map_new_amg_msg
11640                      ( p_old_message_code => 'PA_INVALID_LDISC_RN_CODE'
11641                       ,p_msg_attribute    => 'CHANGE'
11642                       ,p_resize_flag      => 'Y'
11643                       ,p_msg_context      => 'TASK'
11644                       ,p_attribute1       => l_amg_segment1
11645                       ,p_attribute2       => l_amg_task_number
11646                       ,p_attribute3       => ''
11647                       ,p_attribute4       => ''
11648                       ,p_attribute5       => '');
11649                 END IF;
11650                 RAISE  FND_API.G_EXC_ERROR;
11651             END IF;
11652              CLOSE get_lab_disc_reason_code_csr;
11653     END IF;
11654  END IF;
11655 
11656 
11657 
11658   ELSE  /*ELSE OF LABOR SCH TYPE = 'B'*/
11659 
11660 
11661 /*
11662 1) Give an error when p_rev_ind_rate_sch_id is null
11663 2) Give an error when p_rev_ind_rate_sch_id not passed(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
11664    and the schedule_type is being changed from 'B' to 'I'
11665 */
11666 
11667   IF p_rev_ind_rate_sch_id IS  NULL THEN
11668                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11669                 THEN
11670                      pa_interface_utils_pub.map_new_amg_msg
11671                      ( p_old_message_code => 'PA_REV_SCH_ID_NOT_NULL'
11672                       ,p_msg_attribute    => 'CHANGE'
11673                       ,p_resize_flag      => 'Y'
11674                       ,p_msg_context      => 'TASK'
11675                       ,p_attribute1       => l_amg_segment1
11676                       ,p_attribute2       => l_amg_task_number
11677                       ,p_attribute3       => ''
11678                       ,p_attribute4       => ''
11679                       ,p_attribute5       => '');
11680                 END IF;
11681                 RAISE  FND_API.G_EXC_ERROR;
11682    ELSIF p_rev_ind_rate_sch_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11683         IF p_lab_db_sch_type = 'B' THEN
11684              IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11685                 THEN
11686                      pa_interface_utils_pub.map_new_amg_msg
11687                      ( p_old_message_code => 'PA_REV_SCH_ID_NOT_NULL'
11688                       ,p_msg_attribute    => 'CHANGE'
11689                       ,p_resize_flag      => 'Y'
11690                       ,p_msg_context      => 'TASK'
11691                       ,p_attribute1       => l_amg_segment1
11692                       ,p_attribute2       => l_amg_task_number
11693                       ,p_attribute3       => ''
11694                       ,p_attribute4       => ''
11695                       ,p_attribute5       => '');
11696                 END IF;
11697                 RAISE  FND_API.G_EXC_ERROR;
11698           END IF;
11699     END IF;
11700 
11701 
11702  /*
11703  1) Give an error when a value is passed to p_rev_ind_rate_sch_id and it is invalid.
11704  2) Give an error when the Burden Schedule type is P (Provisional) for the attached revenue burden schedule
11705     and the p_rev_ind_sch_fixed_date date is being passed.
11706  */
11707 
11708   IF p_rev_ind_rate_sch_id IS NOT NULL
11709    AND p_rev_ind_rate_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11710        THEN
11711 
11712        OPEN l_rev_rate_schedule_type_csr(p_rev_ind_rate_sch_id);
11713        FETCH l_rev_rate_schedule_type_csr INTO l_rev_rate_schedule_type;
11714       IF l_rev_rate_schedule_type_csr%NOTFOUND THEN
11715         CLOSE l_rev_rate_schedule_type_csr;
11716               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11717                 THEN
11718                      pa_interface_utils_pub.map_new_amg_msg
11719                      ( p_old_message_code => 'PA_INVALID_REV_SCH_ID'
11720                       ,p_msg_attribute    => 'CHANGE'
11721                       ,p_resize_flag      => 'Y'
11722                       ,p_msg_context      => 'TASK'
11723                       ,p_attribute1       => l_amg_segment1
11724                       ,p_attribute2       => l_amg_task_number
11725                       ,p_attribute3       => ''
11726                       ,p_attribute4       => ''
11727                       ,p_attribute5       => '');
11728                 END IF;
11729         END IF;
11730      CLOSE l_rev_rate_schedule_type_csr;
11731        IF l_rev_rate_schedule_type = 'P'
11732            THEN
11733               IF p_rev_ind_sch_fixed_date IS NOT NULL
11734            AND p_rev_ind_sch_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
11735           THEN
11736                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11737                 THEN
11738                      pa_interface_utils_pub.map_new_amg_msg
11739                      ( p_old_message_code => 'PA_CNT_FIX_REV_DTE_PROV'
11740                       ,p_msg_attribute    => 'CHANGE'
11741                       ,p_resize_flag      => 'Y'
11742                       ,p_msg_context      => 'TASK'
11743                       ,p_attribute1       => l_amg_segment1
11744                       ,p_attribute2       => l_amg_task_number
11745                       ,p_attribute3       => ''
11746                       ,p_attribute4       => ''
11747                       ,p_attribute5       => '');
11748                 END IF;
11749                 RAISE  FND_API.G_EXC_ERROR;
11750          END IF;
11751         END IF;
11752       END IF;
11753 
11754 
11755     l_temp_dummy :=null;
11756 
11757 /*
11758 1) Give an error when p_inv_ind_rate_sch_id is null
11759 2) Give an error when p_inv_ind_rate_sch_id not passed(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
11760    and the schedule_type is being changed from 'B'(bill) to 'I'(burden)
11761 */
11762 
11763   IF p_inv_ind_rate_sch_id IS  NULL THEN
11764                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11765                 THEN
11766                      pa_interface_utils_pub.map_new_amg_msg
11767                      ( p_old_message_code => 'PA_INV_SCH_ID_NOT_NULL'
11768                       ,p_msg_attribute    => 'CHANGE'
11769                       ,p_resize_flag      => 'Y'
11770                       ,p_msg_context      => 'TASK'
11771                       ,p_attribute1       => l_amg_segment1
11772                       ,p_attribute2       => l_amg_task_number
11773                       ,p_attribute3       => ''
11774                       ,p_attribute4       => ''
11775                       ,p_attribute5       => '');
11776                 END IF;
11777                 RAISE  FND_API.G_EXC_ERROR;
11778    ELSIF p_inv_ind_rate_sch_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11779        IF  p_lab_db_sch_type = 'B' THEN
11780              IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11781                 THEN
11782                      pa_interface_utils_pub.map_new_amg_msg
11783                      ( p_old_message_code => 'PA_INV_SCH_ID_NOT_NULL'
11784                       ,p_msg_attribute    => 'CHANGE'
11785                       ,p_resize_flag      => 'Y'
11786                       ,p_msg_context      => 'TASK'
11787                       ,p_attribute1       => l_amg_segment1
11788                       ,p_attribute2       => l_amg_task_number
11789                       ,p_attribute3       => ''
11790                       ,p_attribute4       => ''
11791                       ,p_attribute5       => '');
11792                 END IF;
11793                 RAISE  FND_API.G_EXC_ERROR;
11794           END IF;
11795     END IF;
11796 
11797 
11798  /*
11799  1) Give an error when a value is passed to p_inv_ind_rate_sch_id and it is invalid.
11800  2) Give an error when the Burden Schedule type is P(Provisional) for the attached invoice burden schedule
11801    and the p_inv_ind_sch_fixed_date date is being passed.
11802  */
11803 
11804   IF (p_inv_ind_rate_sch_id IS NOT NULL
11805    AND p_inv_ind_rate_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
11806        THEN
11807 
11808        OPEN l_inv_rate_schedule_type_csr(p_inv_ind_rate_sch_id);
11809        FETCH l_inv_rate_schedule_type_csr INTO l_inv_rate_schedule_type;
11810       IF l_inv_rate_schedule_type_csr%NOTFOUND THEN
11811         CLOSE l_inv_rate_schedule_type_csr;
11812               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11813                 THEN
11814                      pa_interface_utils_pub.map_new_amg_msg
11815                      ( p_old_message_code => 'PA_INVALID_INV_SCH_ID'
11816                       ,p_msg_attribute    => 'CHANGE'
11817                       ,p_resize_flag      => 'Y'
11818                       ,p_msg_context      => 'TASK'
11819                       ,p_attribute1       => l_amg_segment1
11820                       ,p_attribute2       => l_amg_task_number
11821                       ,p_attribute3       => ''
11822                       ,p_attribute4       => ''
11823                       ,p_attribute5       => '');
11824                 END IF;
11825         END IF;
11826      CLOSE l_inv_rate_schedule_type_csr;
11827        IF l_inv_rate_schedule_type = 'P'
11828            THEN
11829               IF p_inv_ind_sch_fixed_date IS NOT NULL
11830            AND p_inv_ind_sch_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
11831           THEN
11832                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11833                 THEN
11834                      pa_interface_utils_pub.map_new_amg_msg
11835                      ( p_old_message_code => 'PA_CNT_FIX_INV_DTE_PROV'
11836                       ,p_msg_attribute    => 'CHANGE'
11837                       ,p_resize_flag      => 'Y'
11838                       ,p_msg_context      => 'TASK'
11839                       ,p_attribute1       => l_amg_segment1
11840                       ,p_attribute2       => l_amg_task_number
11841                       ,p_attribute3       => ''
11842                       ,p_attribute4       => ''
11843                       ,p_attribute5       => '');
11844                 END IF;
11845                 RAISE  FND_API.G_EXC_ERROR;
11846          END IF;
11847         END IF;
11848       END IF;
11849 
11850 
11851 
11852 END IF;         /*END IF OF LAB SCH TYPE = 'B'*/
11853 
11854 
11855 
11856 
11857 
11858 EXCEPTION
11859 
11860     WHEN FND_API.G_EXC_ERROR
11861     THEN
11862 /* dbms_output.put_line('handling an G_EXC_ERROR exception'); */
11863 
11864     p_return_status := FND_API.G_RET_STS_ERROR;
11865 
11866 
11867     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
11868     THEN
11869 /* dbms_output.put_line('handling an G_EXC_UNEXPECTED_ERROR exception'); */
11870 
11871     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11872 
11873 
11874     WHEN OTHERS THEN
11875 /* dbms_output.put_line('handling an OTHERS exception'); */
11876 
11877     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11878 
11879 
11880     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
11881     THEN
11882         FND_MSG_PUB.add_exc_msg
11883                 ( p_pkg_name        => G_PKG_NAME
11884                 , p_procedure_name  => l_api_name   );
11885 
11886     END IF;
11887 
11888 end validate_schedule_values;
11889 
11890 --====================================================================================
11891 --Name:               VALIDATE_DATA
11892 --
11893 --Type:               Procedure
11894 --Description:        This procedure is to do different kinds of data validation
11895 --                    while creating, updating a project or task.
11896 --
11897 --Validations         1) Validating if all the customers added to tasks
11898 --                       in a project are project customers or not if enable top task
11899 --                       customer flag is set at project level.
11900 --                    2) Validating that only one project customer is marked as
11901 --                       default top task customer if enable top task
11902 --                       customer flag is set at project level.
11903 --History:
11904 --    08-Jan-2007       apangana    Created validation 1, 2
11905 --    10-Oct-2008       rthumma     Bug 7255015 : Modified cursor any_invalid_customer
11906 --                                  in procedure VALIDATE_DATA
11907 --====================================================================================
11908 PROCEDURE VALIDATE_DATA
11909           (p_project_id          IN         NUMBER  ,
11910            p_calling_context     IN         VARCHAR2,
11911            x_return_status       OUT NOCOPY VARCHAR2,
11912            x_msg_count           OUT NOCOPY NUMBER  ,
11913            x_msg_data           OUT NOCOPY VARCHAR2  ) IS
11914 
11915     -- Bug 7255015
11916     cursor any_invalid_customer is
11917     SELECT 'Y' FROM pa_tasks
11918     WHERE project_id = p_project_id
11919     AND parent_task_id IS NULL
11920     AND nvl(customer_id, -1) NOT IN (select customer_id
11921                       from pa_project_customers
11922                       where project_id=p_project_id);
11923 
11924     l_any_invalid_customer varchar2(1) :='N';
11925 
11926     valid_def_ttsk_cust   VARCHAR2(1) :='N';
11927 
11928     cursor project_data is
11929     select enable_top_task_customer_flag
11930     from pa_projects_all
11931     where project_id=p_project_id;
11932 
11933     l_enable_tt_cust_flag varchar2(1) :='N';
11934     l_cust_count          number;
11935 
11936     l_msg_count                      NUMBER := 0;
11937     l_data                           VARCHAR2(2000);
11938     l_msg_data                       VARCHAR2(2000);
11939     l_msg_index_out                  NUMBER;
11940     l_debug_mode                     VARCHAR2(1);
11941 BEGIN
11942 
11943     x_return_status := FND_API.G_RET_STS_SUCCESS;
11944     x_msg_count :=0;
11945     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
11946 
11947     IF l_debug_mode = 'Y' THEN
11948         pa_debug.set_curr_function( p_function   => 'VALIDATE_DATA',
11949                                     p_debug_mode => l_debug_mode );
11950         pa_debug.g_err_stage:= 'Entered VALIDATE_DATA';
11951         pa_debug.write('PA_PROJECT_PVT.VALIDATE_DATA',pa_debug.g_err_stage,3);
11952     END IF;
11953     --validation 1
11954 
11955     open project_data;
11956     fetch project_data into l_enable_tt_cust_flag;
11957     close project_data;
11958 
11959     if (p_calling_context in ('CREATE_PROJECT','UPDATE_PROJECT')
11960         and l_enable_tt_cust_flag = 'Y') then
11961             open any_invalid_customer;
11962             fetch any_invalid_customer into l_any_invalid_customer;
11963             close any_invalid_customer;
11964 
11965             if l_any_invalid_customer = 'Y' then
11966                 select count(*) into l_cust_count
11967                 from pa_project_customers
11968                 where project_id=p_project_id;
11969 
11970                 if l_cust_count > 0 then
11971                     x_return_status := FND_API.G_RET_STS_ERROR;
11972                     PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
11973                                         ,p_msg_name       => 'PA_INVALID_TASK_CUSTOMER');
11974                     RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11975                 end if;
11976             end if;
11977     end if;
11978 
11979     IF l_debug_mode = 'Y' THEN
11980         pa_debug.g_err_stage:= 'Validation for invalid task customers was done';
11981         pa_debug.write('PA_PROJECT_PVT.VALIDATE_DATA',pa_debug.g_err_stage,3);
11982     END IF;
11983 
11984     --validation 2
11985     if (p_calling_context = 'UPDATE_PROJECT' and l_enable_tt_cust_flag = 'Y') then
11986         begin
11987             select 'Y' into valid_def_ttsk_cust
11988             from pa_project_customers
11989             where project_id=p_project_id
11990             and default_top_task_cust_flag='Y';
11991         exception
11992             when NO_DATA_FOUND then
11993 
11994                 select count(*) into l_cust_count
11995                 from pa_project_customers
11996                 where project_id=p_project_id;
11997 
11998                 if l_cust_count > 0 then
11999                     x_return_status := FND_API.G_RET_STS_ERROR;
12000                     PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
12001                                         ,p_msg_name       => 'PA_INC_NUM_DEF_TT_CUST');
12002                     RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12003                 end if;
12004             when TOO_MANY_ROWS  then
12005                 x_return_status := FND_API.G_RET_STS_ERROR;
12006                 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
12007                                     ,p_msg_name       => 'PA_INC_NUM_DEF_TT_CUST');
12008                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12009         end;
12010     end if;
12011 
12012     IF l_debug_mode = 'Y' THEN
12013         pa_debug.g_err_stage:= 'Validation for single default top task customer was done';
12014         pa_debug.write('PA_PROJECT_PVT.VALIDATE_DATA',pa_debug.g_err_stage,3);
12015     END IF;
12016 
12017     IF l_debug_mode = 'Y' THEN
12018             pa_debug.reset_curr_function;
12019     END IF;
12020 
12021     EXCEPTION
12022         WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
12023             IF x_return_status IS NULL OR
12024                x_return_status =  FND_API.G_RET_STS_SUCCESS THEN
12025                   x_return_status := FND_API.G_RET_STS_ERROR;
12026             END IF;
12027 
12028             l_msg_count := FND_MSG_PUB.count_msg;
12029 
12030             IF l_msg_count = 1 AND x_msg_data IS NULL THEN
12031                   PA_INTERFACE_UTILS_PUB.get_messages
12032                        (p_encoded        => FND_API.G_TRUE,
12033                         p_msg_index      => 1,
12034                         p_msg_count      => l_msg_count,
12035                         p_msg_data       => l_msg_data,
12036                         p_data           => l_data,
12037                         p_msg_index_out  => l_msg_index_out);
12038 
12039                   x_msg_data  := l_data;
12040                   x_msg_count := l_msg_count;
12041             ELSE
12042                   x_msg_count := l_msg_count;
12043             END IF;
12044 
12045         IF l_debug_mode = 'Y' THEN
12046             pa_debug.reset_curr_function;
12047         END IF;
12048             RETURN;
12049         WHEN OTHERS THEN
12050             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12051             x_msg_count     := 1;
12052             x_msg_data      := SQLERRM;
12053             FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'PA_PROJECT_PVT'
12054                                     ,p_procedure_name  => 'VALIDATE_DATA'
12055                                     ,p_error_text      => sqlerrm);
12056 
12057             IF l_debug_mode = 'Y' THEN
12058                   pa_debug.G_Err_Stack := SQLERRM;
12059                   pa_debug.write('PA_PROJECT_PVT.VALIDATE_DATA' ,pa_debug.G_Err_Stack,4);
12060                   pa_debug.reset_curr_function;
12061             END IF;
12062             RAISE;
12063 
12064 END VALIDATE_DATA;
12065 
12066 end PA_PROJECT_PVT;