DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_PROJECT_PVT

Source


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